EditorsAbout the SiteComes vs. MicrosoftUsing This Web SiteSite ArchivesCredibility IndexOOXMLOpenDocumentPatentsNovellNews DigestSite NewsRSS

08.09.19

Techrights Blog Archive and Word Analysis

Posted in Site News at 2:21 am by Dr. Roy Schestowitz

Old library

Summary: Summing up almost 13 years of Techrights and making archival simpler just in case something bad happens some time in the future

IN LIGHT of Linux Journal's shutdown, which was sudden and announced in the middle of the summer holidays (may have been strategic timing), we’ve already published a list of Techrights blog URLs and our full Wiki as XML files (or compressed archive of them all). That’s not because we expect anything bad to happen; it’s just better to be prepared in advance rather than when it’s too late. I’ve poured my entire adult life into this site and the analysis/research it takes to write/run it. It’s good to have backups, including elsewhere. Mirroring does no harm, it improves overall resilience when things are decentralised. During the archiving process figosdev wrote some code that we have not published until today. It’s used to generate a keyword index with merges for similar ones. So for example, for the latter it comes up with (number of occurrences on the left):


14191 chrome 9611:chrome. 233:chromebook 1754:chromebook. 121:chromebooks 1513:chromebooks. 156:chromebox 74:chromecast 396:chromeos 333:
14195 e.u. 109:eu 13203:eu-us 107:eu-wide 144:eu. 632:
14271 process 11848:process. 2423:
14278 china 13069:china-based 95:china. 1114:
14371 receive 3588:received 7239:received. 141:receives 1405:receiving 1998:
14411 firefox 14411:
14556 download 9003:download. 1015:downloadable 220:downloaded 1417:downloader 101:downloaders 97:downloading 1100:downloads 1454:downloads. 149:
14739 gates 14158:gates-backed 114:gates-funded 141:gates. 326:
14850 digital 14577:digital. 86:digitally 187:
14894 employed 938:employee 2773:employee. 154:employees 6620:employees. 704:employer 989:employer. 168:employers 644:employing 284:employment 1158:employment. 93:employs 369:
15026 package 6369:package. 512:packaged 533:packagers 85:packages 5762:packages. 767:packaging 998:
15170 menace 148:menacing 100:menos 418:mental 1124:mentality 273:mentally 216:mention 4183:mention. 103:mentioned 6743:mentioned. 155:mentioning 720:mentions 987:
15196 games 14158:games. 1038:
15231 event 7653:event. 954:events 6020:events. 604:
15350 corporate 8067:corporates 77:corporation 2759:corporation. 240:corporations 3790:corporations. 417:
15419 battistelli 14513:battistelli. 906:
15560 browser 9915:browser. 1333:browsers 4024:browsers. 288:
15709 privacy 13613:privacy-focused 124:privacy. 992:privacy/surveillance 980:
15749 press 14852:press. 897:
15759 require 3825:required 4340:required. 380:requirement 1182:requirement. 139:requirements 2226:requirements. 480:requires 3187:
15932 intel 15517:intel-based 101:intel. 232:intel/amd 82:
16050 police 15513:police. 537:
16695 mobile 16432:mobile. 263:
16877 troll 4535:troll. 434:trolles 205:trolling 1127:trolling. 111:trolls 9276:trolls. 1189:
16880 enterprise 13684:enterprise-class 132:enterprise-grade 221:enterprise-ready 131:enterprise. 424:enterprises 2072:enterprises. 216:
16985 hardware 15321:hardware. 1664:
17492 policies 4017:policies. 638:policy 11524:policy. 1313:
17832 reported 9524:reported. 848:reportedly 3159:reporter 1927:reporter. 94:reporters 2141:reporters. 139:
17865 user 16688:user. 826:userbase 82:username 174:usernames 95:
18106 federal 18106:
18157 money 16399:money. 1758:
18170 result 6842:result. 452:resulted 1431:resulting 1346:results 7119:results. 980:
18209 management 17099:management. 1110:
18362 research 11250:research. 727:researched 153:researcher 1346:researchers 4435:researchers. 196:researching 255:
18746 review 12483:review. 723:reviewed 1304:reviewer 149:reviewers 230:reviewing 721:reviews 2931:reviews. 205:
18993 censor 1588:censored 952:censored. 74:censoring 859:censors 823:censorship 12500:censorship. 701:censorship/free 972:censorship/privacy/civil 404:censorship/web 120:
19233 debconf 276:debian 17855:debian-based 626:debian. 476:
19233 name 10460:name. 764:named 4402:names 3607:
19371 facebook 18648:facebook. 723:
19681 question 9688:question. 879:questioned 808:questioning 729:questions 6938:questions. 639:
19804 order 14028:order. 692:ordered 2399:ordering 431:orders 2047:orders. 207:
19861 organisation 3331:organisation. 393:organisational 97:organisations 1789:organisations. 194:organization 7031:organization. 717:organizational 290:organizations 5484:organizations. 535:
20396 national 20321:national-security 75:
20636 member 7943:member. 320:members 11588:members. 785:
21621 copyright 16583:copyright. 470:copyrighted 710:copyrights 3676:copyrights. 182:
21704 official 11777:official. 211:officials 9084:officials. 632:
21809 rights 18893:rights. 1936:rights/policing 980:
21944 cloud 20228:cloud-based 661:cloud. 1055:
21978 nsa 21533:nsa. 445:
22096 industrial 2497:industries 1720:industries. 357:industry 15436:industry. 2086:
22146 kde 21049:kde. 488:kde3 72:kde4 537:
22170 fedora 21663:fedora. 507:
22411 standard 8863:standard. 889:standardisation 232:standardised 77:standardization 422:standardize 182:standardized 329:standardizing 80:standards 9113:standards-based 123:standards. 1265:standards/consortia 836:
22416 market 16524:market. 2932:markets 2361:markets. 599:
22428 protect 6965:protected 2043:protected. 142:protecting 2235:protection 8152:protection. 633:protections 1715:protections. 307:protective 236:
22526 political 13646:politician 758:politicians 3860:politicians. 247:politico 350:politics 3118:politics. 547:
22664 product 8764:product. 1060:products 10698:products. 2142:
22994 publish 2200:published 13513:published. 392:publisher 1348:publisher. 70:publishers 1654:publishers. 127:publishes 825:publishing 2757:publishing. 108:
23532 next 23174:next. 358:
23594 permalink 23594:
23726 foundation 22066:foundation. 1660:
23765 opensource 268:open-source 22369:open-source. 110:open-sourced 387:open-sources 402:open-sourcing 229:
24419 gnome 23574:gnome-based 84:gnome-shell 123:gnome. 497:gnome3 141:
24981 video 18925:video. 596:video> 271:videolan 113:videos 4794:videos. 282:
25022 icons 24892:icons. 130:
25227 plan 8738:plan. 578:planned 3084:planned. 168:planning 3385:planning. 77:plans 8758:plans. 439:
25671 attack 10039:attack. 819:attacked 1573:attacker 739:attackers 1018:attacking 1986:attacks 8438:attacks. 1059:
26054 network 14441:network. 1261:networked 234:networking 4706:networking. 186:networks 4378:networks. 848:
26394 countries 9065:countries. 1438:country 13370:country. 2521:
26827 information 24642:information. 2185:
27074 phone 16072:phone. 891:phones 9315:phones. 796:
28926 http 28821:http/2 105:
29542 posted 28779:posted. 94:poster 429:posters 240:
29681 server-side 196:server 19956:server. 1406:servers 6949:servers. 1174:
29914 office 27490:office. 2424:
30007 platform 19050:platform. 3365:platformer 484:platforms 5649:platforms. 1459:
30132 development 26183:development. 2005:developments 1744:developments. 200:
30137 code 25179:code. 3191:coder 167:coders 349:coding 1168:coding. 83:
30291 media 28467:media. 1824:
30445 feature 9058:feature. 481:features 18736:features. 2170:
30791 kernel 27263:kernel. 2250:kernel-based 284:kernels 870:kernels. 124:
31184 communities 3334:communities. 737:community 23348:community-based 105:community-driven 193:community. 3467:
31828 u.s 201:u.s. 28527:u.s.-backed 113:u.s.-based 132:u.s.-led 93:us-backed 91:us-based 401:us-led 135:usa 1960:usa. 175:
32042 used 31372:used. 670:
32990 program 13901:program. 2001:programmed 179:programmer 803:programmers 1432:programmers. 143:programmes 381:programming 5917:programming. 237:programming/development 818:programs 6212:programs. 966:
33607 reader 4579:reader. 278:readers 28308:readers. 347:readership 95:
34045 internet 30644:internet. 2458:internet/net 943:
34523 america 11784:america. 1032:american 14414:american. 80:americans 6414:americans. 589:americas 210:
34826 page 6591:page. 1001:pages 3250:pages. 23984:
34864 technological 1251:technologically 152:technologies 7327:technologies. 1290:technology 22387:technology. 2457:
35836 presidency 1256:presidency. 275:president 27787:president. 1084:presidential 4834:presidents 600:
37154 distribution 12395:distribution. 1967:distributions 12171:distributions. 1095:distro 5812:distro. 652:distros 2743:distros. 319:
37446 epo 35039:epo. 2075:epo.org 332:
37687 public 35751:public. 1936:
37723 social 37600:social-media 123:
37846 gnu 6426:gnu. 93:gnu/hurd 81:gnu/kfreebsd 85:gnu/linux 29520:gnu/linux-based 91:gnu/linux. 1550:
38367 novell 36653:novell. 1714:
39579 developer 13599:developer. 373:developers 23843:developers. 1764:
40375 case 27904:case. 2515:caselaw 108:cases 8853:cases. 995:
41238 version 33068:version. 1440:versioned 146:versioning 164:versions 5822:versions. 598:
41601 users 37295:users. 4306:
42802 europe 16585:europe. 1902:european 22948:europeans 444:euros 923:
42826 court 34888:court. 1976:courts 5330:courts. 632:
43149 photon 97:photos 2662:photos. 191:photoshop 483:php 2278:php-fpm 105:php5 164:phpmyadmin 164:phrase 911:phrases 272:physical 2586:physically 388:physician 130:physicians 160:physicist 95:physics 466:physx 70:pi 7518:pi. 361:piana 111:pic 72:pichai 173:pick 1939:picked 1183:picket 100:picking 722:picks 900:pico 71:pico-itx 156:pics 99:picture 2355:picture. 321:pictured 311:pictures 1450:pictures. 80:pidgin 230:pie 1637:pie. 72:piece 5026:piece. 171:pieces 2059:pieces. 132:pierre 180:pierre-yves 94:pieter 113:pig 220:pigs 193:pike 97:pile 578:piled 78:piles 129:pilger 118:piling 112:pill 149:pillar 135:pillars 217:pilot 988:pilots 320:pim 201:pimping 70:pin 272:pinch 120:pine 176:pine64 118:
43445 reporting 4831:reporting. 240:report 26127:report. 1583:reports 9493:reports. 1171:
43555 update 20736:update. 1135:updated 8817:updated. 210:updatedx2 85:updater 93:updates 10442:updates. 999:updating 1038:
43583 desktop 36980:desktop. 2291:desktop/gtk 1351:desktops 2468:desktops. 493:
49940 win32 90:windows 46655:windows-based 204:windows-only 192:windows. 2799:
50033 project 32819:project. 3734:projects 11447:projects. 2033:
51865 government 43803:government. 2416:governmental 467:governments 4822:governments. 357:
54220 web 52026:web-based 864:web-browser 150:web. 1180:
54986 goog 218:google 53003:google+ 410:google. 1355:
55737 secure 7203:secure. 417:security 46115:security-focused 77:security. 1925:
60088 support 49775:support! 74:support. 3530:supported 6428:supported. 281:
64412 android 60980:android-based 684:android-powered 403:android-x86 196:android. 1650:android/linux 499:
66673 patenting 1475:patenting. 120:patents 58590:patents. 6408:patents] 80:
68988 people 65485:people. 3115:peoples 388:
71735 ubucon 83:ubuntu 68622:ubuntu! 86:ubuntu-based 643:ubuntu-powered 183:ubuntu. 1791:ubuntu/linux 327:
82416 patent 79808:patent. 1178:patented 1245:patented. 185:
111622 release 54907:release! 153:release. 5083:released 36637:released! 844:released. 1621:releases 11390:releases. 987:
117419 who 86708:why 30100:why. 611:
123764 open 123225:open. 539:
128149 software 111593:software-as-a-service 94:software-based 127:software-defined 636:software-like 535:software-related 106:software. 8488:software/open 6570:
165377 msft 784:microsoft 157420:microsoft-connected 384:microsoft-friendly 239:microsoft-funded 276:microsoft-influenced 73:microsoft-novell 147:microsoft-sponsored 129:microsoft-taxed 102:microsoft. 5451:microsoft/novell 227:microsoft] 145:
199787 linux 189841:linux! 329:linux- 121:linux. 8892:linux-related 104:linux/android 266:linux/unix 150:linux] 84:

The underlying code, trc.fig (in Fig):

#### license: creative commons cc0 1.0 (public domain) 
#### http://creativecommons.org/publicdomain/zero/1.0/ 
# load log.txt (db of entries) and search from trc.txt (output from coll.fig)

python
    reload(sys)
    sys.setdefaultencoding('utf8')
    fig

nl 10 chr
now "" arr
nowlen arr

function getlink p
    eachr p ltrim
    pg split eachr nl mid 1 1
    pr split pg "ignorethis " join pr "" return pr
    fig

function rplace p c t
    now split p c join now t return now
    fig

function ctext t
    quot 34 chr
    nl 10 chr
    tab 9 chr
    now t lcase rplace now quot nl swap now t
    now t rplace now " " nl swap now t
    now t rplace now "&" nl swap now t
    now t rplace now ";" nl swap now t

    now t rplace now ")" nl swap now t
    now t rplace now "(" nl swap now t
    now t rplace now "," nl swap now t
    now t rplace now "'" nl swap now t
    now t rplace now ":" nl swap now t
    now t rplace now "?" nl swap now t
python
    t = t.replace(unichr(8220), chr(10))
    t = t.replace(unichr(8221), chr(10))
    fig
    now t rplace now tab nl swap now t return t
    fig

function nohtml p
    buf ""
    intag 0 
    forin each p
        ifequal each "<"
            intag 1
            fig
        ifequal intag 0
            now buf plus each swap now buf
            fig
        ifequal each ">" 
            intag 0
            fig
        next
    now return buf
    fig

function lookfor findthese db dbcopy origfind
    nl 10 chr
    dblen db len
    buf 1
    for eachlen 1 dblen 1
        each arrget db eachlen
        copyeach arrget dbcopy eachlen

        forin eachofthese findthese
            iftrue eachofthese
                #now eachofthese plus "-" print
                now each split now nl
                found 0
                found instr now eachofthese
                iftrue found

                    iftrue buf
                        now origfind print # print current list of searchwords
                        buf 0
                        fig

                    now "*[[" prints
                    now copyeach split now "\n" mid 6 2 
                    eurl getlink copyeach prints "|" prints
                    etitle now mid 2 1 ltrim rtrim
                    edate now mid 1 1 ltrim rtrim plus " " plus etitle plus "]]" print
                    iftrue 0
                        now eachofthese print # print found keyword
                        fig
                    break
                    fig

                fig
            next

        next
    fig



db "" arr
dbcopy "" arr
dblen 0
python 
    db = open("log.txt").read().split("If you liked this post, consider")
    dbcopy = db[:]
    dblen = len(db)
    fig

now "processing entries... " prints
prevcount 0
for eachdb dblen 1 -1
    dbcount eachdb divby dblen times 1000 int divby 10 minus 100 times -1

    ifmore dbcount prevcount
        now dbcount str plus "% " prints
        prevcount dbcount
        fig 
    p arrget db eachdb 
    now nohtml p ctext now
    db arrset eachdb now

    p arrget dbcopy eachdb 
    now nohtml p
    dbcopy arrset eachdb now

    next
now "" print

pg arropen "trc.txt" 
nowlen pg len

for eachloop nowlen 1 -1
    each pg mid eachloop 1   
    eaches split each " " 
    eacheslen eaches len minus 1
    now "" print
    reaches eaches right eacheslen join reaches " " split reaches ":" 
python
    reaches.remove('')
    fig

    iftrue reaches
        findthese arr mid 1 0 
        forin eachreaches reaches
            onereach split eachreaches " " mid 1 1 
            findthese plus onereach 
            next
        iftrue findthese
            now lookfor findthese db dbcopy each
            fig
        fig

   next

And coll.fig


#### license: creative commons cc0 1.0 (public domain) 
#### http://creativecommons.org/publicdomain/zero/1.0/ 
# combine trranks into trc.txt (with > trc.txt)
fl arropen "trranks"
buf "" arr mid 1 0
buftext ""
bufsum 0
forin each fl
    lentr each rtrim len
    iftrue lentr
        buf plus each
    else
        iftrue buf
            forin beach buf
                now buftext plus beach plus ":" swap now buftext
                teg split beach " " mid 1 1
                rank split beach " " mid 2 1 val
                now bufsum plus rank swap now bufsum
                next
            now bufsum prints " " prints
            now buftext print 
            buf "" arr mid 1 0
            buftext ""
            bufsum 0
            fig
    fig
    next

There’s more code we’ve yet to share. Just needs more tidying up. We want everything to be open data, Free/libre software, Open Access etc. It takes time.

08.06.19

Techrights Available for Download as XML Files

Posted in Site News at 3:09 am by Dr. Roy Schestowitz

Open data, Free/libre software, free society

tar gz file

Summary: Archiving of the site in progress; scripts and data are being made available for all to download

IN ADDITION to Drupal pages and almost 26,000 WordPress blog posts (and videos and podcasts, not to mention loads of IRC logs) we also have nearly 700 Wiki pages and a reader decided to organise an archive or an index for an archive.

Now available for download as a compressed archive (lots of XML files) is last week’s pile. It’s also available for download from the Internet Archive. Those are all the Wiki pages.

The code in Fig:


# < fig code >
# comments | built-in functions | user functions | inline python

#### license: creative commons cc0 1.0 (public domain) 
#### http://creativecommons.org/publicdomain/zero/1.0/ 
proginf = "wikidump 0.1 jul 2019 mn"
# dump xml for each wiki page on techrights (no edit hist)
# create each actual file
function dumppage url
    urltext = arrcurl url
    title = ""
    forin each urltext
        findtitle = instr each "<title>"
        iftrue = findtitle
            title = each ltrim rtrim split title "<title>" join title "" split title "</title>" join title ""
            break
            fig
        next
    iftrue title
        outfilename = "techrights_" plus title plus ".xml" split outfilename "/" join outfilename ":slash:" open "w"
        forin each urltext
            now = each fprint outfilename
            next
        now = outfilename close
        fig
    fig

# get list of pages
allpages = arrcurl "http://techrights.org/wiki/index.php/Special:AllPages"
allpageslen = allpages len
longest = 0
longestindex = 0
for each 1 allpageslen 1
    eachlen = allpages mid each 1 len
    ifmore eachlen longest
        longest = eachlen
        longestindex = each
        fig
    next

# process list of pages and call dumppage for each
quot = 34 chr
pages = allpages mid longestindex 1 split pages quot
forin each pages
    iswiki = instr each "/wiki/index.php/"
    ifequal each "/wiki/index.php/Special:AllPages"
        ignoreit
    else
        iftrue iswiki
            now = "http://techrights.org" plus each split now "http://techrights.org/wiki/index.php/" join now "http://techrights.org/wiki/index.php/Special:Export/" dumppage now
            fig
        fig
    next

# create tgz archive
pos = 0
python
    if figosname != "nt": pos = 1
    fig    
iftrue pos
    tm = time split tm ":" join tm "."
    dt = date split dt "/" join dt "-"
    tgzname = "techrightswiki_" plus dt plus "_" plus tm plus ".tar.gz"
    now = "tar -cvzf " plus tgzname plus " techrights_*" shell
    fig



Or alternatively in Python (Fig-derived):


#!/usr/bin/env python2
# encoding: utf-8
# fig translator version: fig 4.6
import sys, os
from sys import stdin, stdout
from sys import argv as figargv
try: 
    from colorama import init
    init()
except: 
    pass # (only) windows users want colorama installed or ansi.sys enabled

try: 
    from sys import exit as quit
except: 
    pass

from random import randint
from time import sleep

from os import chdir as figoch
from os import popen as figpo
from os import system as figsh
from os import name as figosname
figsysteme = 0
figfilehandles = {}
figfilecounters = {}
from sys import stdout
def figlocate(x, l = "ignore", c = "ignore"):    
    import sys 
    if l == "ignore" and c == "ignore": pass 
    # do nothing. want it to return an error? 

    elif l < 1 and c != "ignore": 
        sys.stdout.write("[" + str(c) + "G") # not ansi.sys compatible 
    elif l != "ignore" and c == "ignore": 
        sys.stdout.write("[" + str(l) + ";" + str(1) + "H") 
    else: sys.stdout.write("[" + str(l) + ";" + str(c) + "H") 

import time

def fignonz(p, n=None):
    if n==None:
        if p == 0: return 1
    else:
        if p == 0: return n
    return p

def fignot(p):
    if p: return 0
    return -1

figbac = None
figprsbac = None
sub = None
def fignone(p, figbac):
    if p == None: return figbac
    return p
    return -1

def stopgraphics():
    global yourscreen
    global figraphics
    figraphics = 0
    try: pygame.quit()
    except: pass


def figcolortext(x, f):
    b = 0
    if f == None: f = 0
    if b == None: b = 0
    n = "0"
    if f > 7: 
        n = "1"
        f = f - 8

    if   f == 1: f = 4 ## switch ansi colours for qb colours
    elif f == 4: f = 1 ## 1 = blue not red, 4 = red not blue, etc.

    if   f == 3: f = 6
    elif f == 6: f = 3

    if b > 7: b = b - 8

    if   b == 1: b = 4
    elif b == 4: b = 1

    if   b == 3: b = 6
    elif b == 6: b = 3

    stdout.write("\x1b[" + n + ";" + str(30+f) + "m")
    return "\x1b[" + n + ";" + str(30+f) + ";" + str(40+b) + "m"

def figcolourtext(x, f):
    b = 0
    if f == None: f = 0
    if b == None: b = 0
    n = "0"
    if f > 7: 
        n = "1"
        f = f - 8

    if   f == 1: f = 4 ## switch ansi colours for qb colours
    elif f == 4: f = 1 ## 1 = blue not red, 4 = red not blue, etc.

    if   f == 3: f = 6
    elif f == 6: f = 3

    if b > 7: b = b - 8

    if   b == 1: b = 4
    elif b == 4: b = 1

    if   b == 3: b = 6
    elif b == 6: b = 3

    stdout.write("\x1b[" + n + ";" + str(30+f) + "m")
    return "\x1b[" + n + ";" + str(30+f) + ";" + str(40+b) + "m"

figcgapal =   [(0, 0, 0),      (0, 0, 170),    (0, 170, 0),     (0, 170, 170),
(170, 0, 0),   (170, 0, 170),  (170, 85, 0),   (170, 170, 170), 
(85, 85, 85),  (85, 85, 255),  (85, 255, 85),  (85, 255, 255), 
(255, 85, 85), (255, 85, 255), (255, 255, 85), (255, 255, 255)]

def figget(p, s): 
    return s

def fighighlight(x, b):
    f = None
    if f == None: f = 0
    if b == None: b = 0
    n = "0"
    if f > 7: 
        n = "1" 
        f = f - 8

    if   f == 1: f = 4 ## switch ansi colours for qb colours
    elif f == 4: f = 1 ## 1 = blue not red, 4 = red not blue, etc.

    if   f == 3: f = 6
    elif f == 6: f = 3

    if b > 7: b = b - 8

    if   b == 1: b = 4
    elif b == 4: b = 1

    if   b == 3: b = 6
    elif b == 6: b = 3

    stdout.write("\x1b[" + n + str(40+b) + "m")
    return "\x1b[" + n + str(40+b) + "m"

def figinstr(x, p, e):
    try: 
        return p.index(e) + 1
    except: 
        return 0

def figchdir(p):
    try: 
        figoch(p)
    except: 
        print "no such file or directory: " + str(p)
        figend(1)

def figshell(p):
    global figsysteme
    try: 
        figsysteme = figsh(p)
    except:
        print "error running shell command: " + chr(34) + str(p) + chr(34)
        figend(1)

def figarrshell(c):
    global figsysteme
    try:
        figsysteme = 0
        sh = figpo(c)
        ps = sh.read().replace(chr(13) + chr(10), 
        chr(10)).replace(chr(13), chr(10)).split(chr(10))
        figsysteme = sh.close()
    except:
        print "error running arrshell command: " + chr(34) + str(c) + chr(34) 
        figend(1)
    return ps[:]

def figsgn(p):
    p = float(p)
    if p > 0: 
        return 1
    if p < 0: 
        return -1
    return 0

def figstr(p): 
    return str(p)

def figprint(p): 
    print p

def figchr(p): 
    if type(p) == str:
        if len(p) > 0:
            return p[0]
    return chr(p)

def figprints(p): 
    stdout.write(str(p))
    sys.stdout.flush()

def figleft(p, s): 
    return p[:s]

def figmid(p, s, x):
    arr = 0
    if type(p) == list or type(p) == tuple: 
        arr = 1
    rt = p[s - 1:
        x + s - 1]
    if arr and len(rt) == 1: 
        rt = rt[0]
    return rt

def figright(p, s): 
    return p[-s:]

def figrandint(x, s, f):
    return randint(s, f)

def figlcase(p): 
    return p.lower()

def figucase(p): 
    return p.upper()

def figint(p): 
    return int(p)

def figarrset(x, p, s): 
    if type(s) == tuple:
        if len(s) == 1: fas = s[0]
    elif type(s) == list:
        if len(s) == 1: fas = s[0]
    else:
        fas = s
    x[p - 1] = s

def figopen(x, s):
    import fileinput
    if s.lower() == "w":
        if (x) not in figfilehandles.keys(): 
            figfilehandles[x] = open(x[:], s.lower())
    elif s.lower() == "r":
        if (x) not in figfilehandles.keys():
            figfilehandles[x] = fileinput.input(x[:])
            figfilecounters[x] = 0
    else:
        if (x) not in figfilehandles.keys(): figfilehandles[x] = open(x[:], s[:])

def figfprint(x, s):
    fon = figosname
    sep = chr(10)
    if fon == "nt": 
        sep = chr(13) + chr(10)
    figfilehandles[s].write(str(x) + sep)

def figflineinput(x, s):
    try:
        p = figfilehandles[s][figfilecounters[s]].replace(chr(13), 
        "").replace(chr(10), "")
        figfilecounters[s] += 1
    except:
        p = chr(10)
    return p

def figclose(x):
    if (x) in figfilehandles.keys():
        figfilehandles[x].close()
        del figfilehandles[x]
        try: 
            del figfilecounters[x]
        except: 
            pass

def figcls(x):
    if figosname == "nt": 
        cls = figsh("cls") 
    else: 
        stdout.write("[2J[1;1H")
        sys.stdout.flush()

def figarropen(x, s):
    x = open(s).read().replace(chr(13) + chr(10), chr(10)).replace(chr(13), 
    chr(10)).split(chr(10))
    return x[:]

def figarrcurl(x, s):
    from urllib import urlopen
    x = str(urlopen(s).read())
    x = x.replace(chr(13) + chr(10), 
    chr(10)).replace(chr(13), chr(10)).split(chr(10))
    return x[:]

def figarrstdin(x):
    ps = []
    for p in stdin: 
        ps += [p[:-1]]
    return ps[:]

def figarrget(x, p, s): 
    if 1:
        return p[s - 1]

def figplus(p, s): 
    if type(p) in (float, int):
        if type(s) in (float, int):
            p = p + s
        else:
            p = p + s # float(s) if you want it easier
        if p == float(int(p)): 
            p = int(p)
    else:
        if type(p) == str: p = p + s # str(s) if you want it easier
        if type(p) == list: 
            if type(s) == tuple:
                p = p + list(s)
            elif type(s) == list:
                p = p + s[:]
            else:
                p = p + [s]
        if type(p) == tuple: 
            if type(s) == tuple:
                p = tuple(list(p) + list(s))
            elif type(s) == list:
                p = tuple(list(p) + s[:])
            else:
                p = tuple(list(p) + [s])
    return p

def figjoin(p, x, s):
    t = ""
    if len(x): 
        t = str(x[0])
    for c in range(len(x)):
        if c > 0: t += str(s) + str(x[c]) 
    return t # s.join(x)

def figarr(p):
    if type(p) in (float, int, str): 
        p = [p]
    else:
        p = list(p)
    return p

def figsplit(p, x, s):
    return x.split(s)

def figval(n): 
    n = float(n) 
    if float(int(n)) == float(n): 
        n = int(n) 
    return n
    
def figtimes(p, s):
    if type(p) in (float, int):
        p = p * s # float(s) if you want it easier
        if p == float(int(p)): 
            p = int(p)
    else:
        if type(p) == list:
            p = p[:] * s # figval(s)
        else:
            p = p * s # figval(s) if you want it easer
    return p

def figdivby(p, s):
    p = float(p) / s
    if p == float(int(p)): 
        p = int(p)
    return p
def figminus(p, s): 
    return p - s

def figtopwr(p, s): 
    p = p ** s
    if p == float(int(p)): 
        p = int(p)
    return p
def figmod(p, s): 
    return p % s

def figcos(p): 
    from math import cos
    p = cos(p)
    if p == float(int(p)): 
        p = int(p)
    return p

def figsin(p): 
    from math import sin 
    p = sin(p)
    if p == float(int(p)): 
        p = int(p)
    return p
def figsqr(p): 
    from math import sqrt
    p = sqrt(p)
    if p == float(int(p)): 
        p = int(p)
    return p

def figltrim(p): 
    return p.lstrip() 
def figlineinput(p): 
    return raw_input() 
def figlen(p): 
    return len(p) 
def figasc(p): 
    return ord(p[0])
def figatn(p):
    from math import atan
    p = atan(p)
    if p == float(int(p)): 
        p = int(p)
    return p

def fighex(p): 
    return hex(p)
def figrtrim(p): 
    return p.rstrip() 
def figstring(x, p, n): 
    if type(n) == str: 
        return n * p 
    return chr(n) * p 
def figtimer(p):
    from time import strftime
    return int(strftime("%H"))*60*60+int(strftime("%M"))*60+int(strftime("%S"))

def figtime(p): 
    from time import strftime
    return strftime("%H:%M:%S")

def figdate(p): 
    from time import strftime
    return strftime("%m/%d/%Y")

def figcommand(p): 
    return figargv[1:]

def figtan(p): 
    from math import tan 
    p = tan(p)
    if p == float(int(p)): 
        p = int(p)
    return p

def figoct(p): return oct(p)

def figsleep(p, s): 
    sleep(s)
def figarrsort(p): 
    p.sort()

def figdisplay(x): 
    global figraphics, figrupd
    figrupd = 0
    if figraphics == 1:
        pygame.display.update()

def figreverse(p): 
    if type(p) == list: 
        p.reverse() 
        return p
    elif type(p) == str:
        p = map(str, p) 
        p.reverse()
        p = "".join(p)
        return p

def figarreverse(p): 
    p.reverse()

def figfunction(p, s): 
    return p

def figend(x): 
    quit()

def figif(p, s): 
    return p

def figthen(p, s): 
    return p

def figsystem(x): 
    quit()

#### http://creativecommons.org/publicdomain/zero/1.0/ 


figlist = 0
try: figlist = int(type(proginf) == list)
except NameError: pass
if not figlist: proginf = 0
proginf = "wikidump 0.1 jul 2019 mn"

# dump xml for each wiki page on techrights (no edit hist)

# create each actual file
def dumppage(url):

    figlist = 0
    try: figlist = int(type(urltext) == list)
    except NameError: pass
    if not figlist: urltext = 0
    urltext = figarrcurl(urltext, url)


    figlist = 0
    try: figlist = int(type(title) == list)
    except NameError: pass
    if not figlist: title = 0
    title = ""

    for each in urltext:

        figlist = 0
        try: figlist = int(type(findtitle) == list)
        except NameError: pass
        if not figlist: findtitle = 0
        findtitle = figinstr(findtitle, each, "<title>")

        if findtitle:

            figlist = 0
            try: figlist = int(type(title) == list)
            except NameError: pass
            if not figlist: title = 0
            title = each
            title = figltrim(title)
            title = figrtrim(title)
            title = figsplit(title, title, "<title>")
            title = figjoin(title, title, "")
            title = figsplit(title, title, "</title>")
            title = figjoin(title, title, "")

            break
    if title:

        figlist = 0
        try: figlist = int(type(outfilename) == list)
        except NameError: pass
        if not figlist: outfilename = 0
        outfilename = "techrights_"
        outfilename = figplus(outfilename, title)
        outfilename = figplus(outfilename, ".xml")
        outfilename = figsplit(outfilename, outfilename, "/")
        outfilename = figjoin(outfilename, outfilename, ":slash:")
        figopen(outfilename, "w")

        for each in urltext:

            figlist = 0
            try: figlist = int(type(now) == list)
            except NameError: pass
            if not figlist: now = 0
            now = each
            figfprint(now, outfilename)


        figlist = 0
        try: figlist = int(type(now) == list)
        except NameError: pass
        if not figlist: now = 0
        now = outfilename
        figclose(now)


# get list of pages

figlist = 0
try: figlist = int(type(allpages) == list)
except NameError: pass
if not figlist: allpages = 0
allpages = figarrcurl(allpages, "http://techrights.org/wiki/index.php/Special:AllPages")


figlist = 0
try: figlist = int(type(allpageslen) == list)
except NameError: pass
if not figlist: allpageslen = 0
allpageslen = allpages
allpageslen = figlen(allpageslen)


figlist = 0
try: figlist = int(type(longest) == list)
except NameError: pass
if not figlist: longest = 0
longest = 0


figlist = 0
try: figlist = int(type(longestindex) == list)
except NameError: pass
if not figlist: longestindex = 0
longestindex = 0

for each in range(int(float(1)), int(float(allpageslen)) + figsgn(1), fignonz(int(float(1)))):

    figlist = 0
    try: figlist = int(type(eachlen) == list)
    except NameError: pass
    if not figlist: eachlen = 0
    eachlen = allpages
    eachlen = figmid(eachlen, each, 1)
    eachlen = figlen(eachlen)

    if eachlen > longest:

        figlist = 0
        try: figlist = int(type(longest) == list)
        except NameError: pass
        if not figlist: longest = 0
        longest = eachlen


        figlist = 0
        try: figlist = int(type(longestindex) == list)
        except NameError: pass
        if not figlist: longestindex = 0
        longestindex = each


# process list of pages and call dumppage for each

figlist = 0
try: figlist = int(type(quot) == list)
except NameError: pass
if not figlist: quot = 0
quot = 34
quot = figchr(quot)


figlist = 0
try: figlist = int(type(pages) == list)
except NameError: pass
if not figlist: pages = 0
pages = allpages
pages = figmid(pages, longestindex, 1)
pages = figsplit(pages, pages, quot)

for each in pages:

    figlist = 0
    try: figlist = int(type(iswiki) == list)
    except NameError: pass
    if not figlist: iswiki = 0
    iswiki = figinstr(iswiki, each, "/wiki/index.php/")

    if each == "/wiki/index.php/Special:AllPages":

        figlist = 0
        try: figlist = int(type(ignoreit) == list)
        except NameError: pass
        if not figlist: ignoreit = 0

    else:
        if iswiki:

            figlist = 0
            try: figlist = int(type(now) == list)
            except NameError: pass
            if not figlist: now = 0
            now = "http://techrights.org"
            now = figplus(now, each)
            now = figsplit(now, now, "http://techrights.org/wiki/index.php/")
            now = figjoin(now, now, "http://techrights.org/wiki/index.php/Special:Export/")
            figbac = now
            now = dumppage(now) ; now = fignone(now, figbac) ; 

# create tgz archive

figlist = 0
try: figlist = int(type(pos) == list)
except NameError: pass
if not figlist: pos = 0
pos = 0

if figosname != "nt": pos = 1
if pos:

    figlist = 0
    try: figlist = int(type(tm) == list)
    except NameError: pass
    if not figlist: tm = 0
    tm = figtime(tm)
    tm = figsplit(tm, tm, ":")
    tm = figjoin(tm, tm, ".")


    figlist = 0
    try: figlist = int(type(dt) == list)
    except NameError: pass
    if not figlist: dt = 0
    dt = figdate(dt)
    dt = figsplit(dt, dt, "/")
    dt = figjoin(dt, dt, "-")


    figlist = 0
    try: figlist = int(type(tgzname) == list)
    except NameError: pass
    if not figlist: tgzname = 0
    tgzname = "techrightswiki_"
    tgzname = figplus(tgzname, dt)
    tgzname = figplus(tgzname, "_")
    tgzname = figplus(tgzname, tm)
    tgzname = figplus(tgzname, ".tar.gz")


    figlist = 0
    try: figlist = int(type(now) == list)
    except NameError: pass
    if not figlist: now = 0
    now = "tar -cvzf "
    now = figplus(now, tgzname)
    now = figplus(now, " techrights_*")
    figshell(now)

We also have a complete set of pages and associated scripts/metadata. We might post these separately some other day. We encourage people to make backups or copies. No site lasts forever and decentralisation is key to longterm preservation.

07.28.19

Five Techrights Prototypes

Posted in Site News at 4:28 am by Dr. Roy Schestowitz

Summary: Thoughts on how to improve the reading experience on this site, whose layout has been the same for almost thirteen years

THIS Web site turns 13 in a few months (November) and it will, at that stage, have published about 26,000 blog posts (that’s an average of about 2,000 a year). The daily links have been around for more than a decade and the same goes for our IRC channels. Thankfully I still have a daytime/nighttime job to help pay my bills, including this site’s bills. I’m personally losing money — not just time — on the site. But it’s worth it. The site’s goal/work is important, as almost nobody else does it (Groklaw did it for almost a decade), and it’s rewarding in the fulfillment sense. I sort of live for it.

“I’m personally losing money — not just time — on the site. But it’s worth it.”Recently some readers suggested changes to the site’s layout. We’ve had lengthy discussions about these (those are actual, working Web pages, but we’re showing just screenshots of these because they’re crude prototypes, nothing beyond that). In the interest of transparency and spirit of collaboration we’ve decided to do a quick (but possibly lengthy) blog post about it. Just to keep readers ‘in the loop’ and invite feedback. There’s more in IRC logs when they become available (soon, some time next month).

To us — and to me personally — what’s most important is the substance, not presentation, but poor presentation can harm a site. I don’t judge sites by their appearance but their contents; if you’re promoting all sorts of “alternative medicine” and “survival kits” and “gold bars” in the side bar, that’s an instant credibility loss. If you use words like “fuck” and “asshole” in an article, that too can be a problem (depending on the context). If there are no links in the article, that alone might not detract from the message, but it helps to have ways to verify and trace individual claims back to sources. It inspires confidence. When dealing with companies that spent billions of dollars on PR it is inevitable that “shoot the messenger” tactics and nit-picking will be leveraged to dismiss the message. People have been defaming me, even using imposter accounts (with my name), for nearly 15 years.

Due to the size of Techrights (total number of pages) it has been exceptionally challenging keeping everything up to date, up to standard, consistent etc. But we try our best given our limited capacity. We recently got more volunteers. We’re very thankful. They’re part of us. They’re the family. We're growing.

“In the interest of transparency and spirit of collaboration we’ve decided to do a quick (but possibly lengthy) blog post about it.”Anyway, about layout…

“I’ve taken a few hours to make small modifications on Techrights stories web page,” one reader told us, “as we chatted in another dialog. These examples are very ugly, and of course are not intended as anything but a proof of concept. In fact, I’m not sure if I fully like them even in concept. So please feel free of [sic] not liking any of it either. But I wanted to give it a try anyways, in my little spare time. Who knows… maybe they end up triggering some actual good idea eventually. [...Y]ou’ll find 4 html files.”

It is based on the saved “/?stories” page from that date.

“Then there are three other versions of it,” the reader explained. “They use the same assets (as they’re all just an edited copy of the html file), and every one has a different modification…”

- “v1″ reacts to posts given its height. When height > 1000px, there’s a script that limits the post height to 1000px, adds a little gradient at the bottom, and a clickable div for expanding the full content.

wordpress-techrights-1

- “v2″ does the same, but instead of expanding the contents, the div just opens the post url (given in the post’s title) in a different tab.

wordpress-techrights-2

- “v3″ shrinks the posts to 100px, without checking its height, and adds a div on the post’s top-right corner for expanding it or folding it.

wordpress-techrights-3

“Of course this is all client-side,” the reader noted, “even when there’s no need for it (as in “v2″, or the css classes assignation). The point is just to toy with the idea of scrolling and being able to focus in what I want to read, without trying to go to a “fully personalized” privacy nightmare and/or a 20MB webpage full of unwanted assets, invasive behaviour, and obfuscated javascript. Just tiny tools that should not break anything and could make it better for someone. By trying this stuff, I guess using desktop I liked more something in the lines of “v1″ or “v2″, but liked more “v3″ on a cellphone. There’s something about the tiny screen and not having too much data in it that feels adequate, but not on the monitor. It would be nice to not have this dialog in private, as I believe a lot of readers may have cool ideas.”

“To us — and to me personally — what’s most important is the substance, not presentation, but poor presentation can harm a site.”We’ve passed that around internally last week. “I haven’t looked in detail,” one person remarked, “but in regards to layout it is 100% possible to avoid any and all javascript and use only pure CSS. If it is a matter of ‘bling’ quite a bit can be done with CSS3: There are accordion menus, pull down menus, and many other things possible with just CSS. However, my main concern is the reflow of the columns on smaller, more narrow screens. The [...] v3 at least does not address that, at least not once it has been sanitized and the scripts removed.”

The person then named/suggested a better mode: “Here’s an example of one site that does 1, 2, or 3 columns depending on the browser’s width: https://www.deccanchronicle.com/

“Techrights needs to be able to reflow like that. HTML 5, which should also be used, has “summary” and “details” elements for hiding or revealing additional material. There are work-arounds in CSS for HTML4, but HTML5 ought to be the standard used. Working with WordPress to make those kinds of changes will be the hardest part.”

This is still work in progress and IRC logs, which we publish once in 4 months (for efficiency’s sake), have more on that.

“When worked on those files,” the reader added, “my stronger doubt was: “What are the most important issues to tackle here?”. And that’s very subjective, so I needed your feedback to know it: it’s your site, and there are lots of readers. I didn’t want to be many hours tunning/designing/refactor not-my-web with only my criteria. And that was specially uncomfortable on the “styling” front. Also, didn’t wanted to let the whole thing die without doing anything. So, some dirty sketches sounded like a good start, without needing to tackle all possible ideas at once, and without needing to touch a single given style. If that kind of work were well received, I was about to work next on the styles, which includes the flow, but also things like the font size given the screen size, the distribution of the posts, things like “night mode friendly”, and so on.”

“This is still work in progress and IRC logs, which we publish once in 4 months (for efficiency’s sake), have more on that.”Longtime readers are probably aware that the site’s looks have been virtually the same since 2006. This is intentional and it assures consistency (e.g. the looks and layout of old posts, of which there are many)

We recently ranted about JavaScript. We don’t want to ‘pollute’ the site with it. It would not help the substance.

“There’s also new stuff like CSS grids, flexboxes, and other stuff I never tried,” the reader said. “But in my experience, working on a CSS+HTML ONLY solution (which I always try to do) ends up in LOTS of quirks convulting the code, or in sacrificing something for the sake of purity. Things like the box model, pixels and margins that renders differently in different browsers, and so on, end up generating weird scrolls, broken lines, overlapped items, and stuff like that. On my blog I refused to program a reflow, because I couldn’t care less about mobile browsers, and it just adapt to screen size; I just zoom with the fingers if I happen to read it on mobile, or just flip the screen. It’s not a big nor a news site. So it barely uses any javascript, it has my own personal bling that pleases just me, and works well enough. WordPress didn’t make it hard for me to program it. [...] Techrights deserves a professional work. That means no trash code, no CSS whack-a-more against heavy HTML, no gratuitous javascript, and yet good SEO and good compatibility with other tools. That means lots of work. And neither you or the readers shouldn’t do that without a clearer idea of what should be done.”

“We’re open to the idea of making changes site-wide provided they’re sufficiently beneficial and the benefits outweigh harms associated with backward compatibility.”If anyone has ideas, please share them with us in the comments, in IRC, or bytesmedia at bytesmedia.co.uk (shared inbox). We’re open to the idea of making changes site-wide provided they’re sufficiently beneficial and the benefits outweigh harms associated with backward compatibility.

Another person has meanwhile created a prototype without JavaScript and explained: “I agree with most of that except regarding the importance of CSS. In my experience it remains the only way to keep the pages light weight. However, to do that, it does have to be written by hand and not use any off-the-shelf libraries. As for the flow and for stripping extraneous material, see the [following]. Don’t mind the background colors or the borders, they are there to show the blocks used.” Prototypes are shown below (as screenshots only, as the underlying code isn’t polished).

wordpress-techrights-4

wordpress-techrights-5

07.25.19

RSS Feeds of Sites Techrights Routinely Linked to in Recent Years

Posted in Site News at 6:41 am by Dr. Roy Schestowitz

Newspaper creation

Summary: Newspapers may be a thing of the past, but RSS feeds still exist and they’re an alternative not censored or throttled (based on subjective rankings) by centralised authorities

In an effort to focus on technology — to cover GNU/Linux, FOSS, patents and spend less time on politics or other matters we don’t specialise in — about a month ago we significantly decreased coverage (in daily links) of political matters. There are nonetheless some sites we can recommend and they have RSS feeds, which make them simpler to follow for updates (we do not recommend social control media which eliminates neutrality).

Here are some of the key ones, in no particular order:

  • ProPublica Articles and Investigations: RSS
  • Jack of Kent blog (my lawyer): RSS
  • Using Our Intelligence: RSS
  • Truthout Stories: RSS
  • American Civil Liberties Union: RSS 1, RSS 2, RSS 3, RSS 4, RSS 5
  • Craig Murray: RSS 6
  • FAIR Blog: RSS
  • Project Censored: RSS
  • La Quadrature du Net: RSS
  • John Pilger: RSS
  • ORG blog: RSS
  • Shadowproof: RSS
  • Creative Commons: RSS
  • Truthdig: RSS
  • Common Dreams: RSS
  • Robert Reich: RSS
  • Meduza: RSS
  • EFF: RSS
  • Aral Balkan: RSS
  • CounterPunch Index: RSS
  • Techdirt: RSS
  • Pirate Party UK: RSS

Over the years many were deleted based on loss of credibility and incidents that made them untrustworthy, compromised, dubious. The above withstood fairly strict standards, so they’re probably sincere.

07.21.19

The Web is Not JavaScript

Posted in Site News at 9:54 am by Dr. Roy Schestowitz

Simpler is usually better

Simple

Summary: Simple sites respect visitors; rather than and instead of exploiting them or passing burdens to user-end browsers we should focus on text and links — the very core components of hypertext as opposed to bells and whistles

THE BLOATED Web is a massive problem. A short while ago we came to realise that the cost of proprietary fonts which Web sites impose on visitors do not affect these visitors only upon landing/rendering. As this post explains, these fonts become a yoke on browsers all the time. And that’s just fonts; not CSS, not JavaScript, not images and videos…

“We’re still quite minimalist when it comes to JavaScript and it has no effect on rendering. We keep it all locally hosted and fonts are used based on what visitors have, not what’s imposed on them.”As longtime readers are aware, Techrights still looks more or less the same as it looked in 2006. We still use the same theme, which we customised mildly. We’re still quite minimalist when it comes to JavaScript (it’s all locally hosted and Free/libre software); it has no effect on rendering. We keep it all locally hosted and fonts are used based on what visitors have, not what’s imposed on them. It keeps performance, privacy, and browser compatibility a lot better than most sites (mobile devices may be the Achilles heel because back in 2006 not to many people read sites from phones and we have no alternative layout other than printer-oriented).

07.14.19

25,500 Blog Posts and Pages

Posted in Site News at 7:18 am by Dr. Roy Schestowitz

Earlier today it looked like this (some drafts have since then been published)

WordPress on Techrights

Summary: With our thirteenth anniversary just a few months away we’re at a pace of about 2,000 posts per year

TODAY or this weekend is the first time, after months of tidying up, that we properly attempt to increase pace of publication, mostly at the expense of politics and also by improving efficiencies at the back end. Today we pass another important milestone: 25,500. Just the WordPress side of things is shown above. There’s more outside it (tens of thousands more objects).

There are now more volunteers (writers and technical people) involved, which will hopefully improve our capacity to produce good stories and daily links. Following last night's request for suggestions we’ve already received some constructive feedback as well. To a lot of people the site means a lot and this past week too we’ve received nearly 5 million hits, close to an all-time high. It goes up and down, depending on how much we publish and the relative impact of new stories.

07.13.19

Consultation About Direction and Future Focus for Techrights

Posted in Site News at 7:24 am by Dr. Roy Schestowitz

Packaging mockups for design patent offices

Summary: We invite ideas and recommendations for the future of the site, notably which topics and aspects are worth covering as a matter of higher priority

ABOUT EIGHT years ago we asked on at least a couple of occasions what to do next. We asked readers. Why? Because collective thinking and brainstorms are more likely to reach good conclusions. Readers had seen Novell’s collapse and recognised the lingering threat of software patents, including Microsoft infiltration at Nokia (with a warchest of patents), just shortly after the CPTN debacle. Back then, around 2011, things were very different. That was 3 years before SCOTUS deciding on Alice and way, way before 35 U.S.C. § 101 had any real ‘teeth’. Microsoft’s patent war on Android was still in its diapers and it continues to this date (with a new lawsuit earlier this year).

“Software patents have become a bit less of a problem.”Microsoft is still a problem. Software patents have become a bit less of a problem. In our daily links we’ll soon shelve some more news about the USPTO, the latest from Coons, and 35 U.S.C. § 101. The short story is, software patents continue to perish (in courts at least), Andrei Iancu accelerates granting of more such fake patents, and law firms-bribed politicians try to change the law for the third year in a row (we don’t expect anything to come out of it, never mind those fake debates).

On “TM and TR direction” (Tux Machines and Techrights), one reader made some suggestions to us a few hours ago. “Few sites cover software freedom in general,” he explained, “despite (or maybe because of) it being so important. Thus TR should include work towards eliminating even the ghost of software patents because they stand in the way of Software Freedom, and you have good contacts within EPO and the good staff rely on TR coverage because it is the only site doing so. That and, first and foremost, to be really clear, TR should continue advancing Software Freedom in all its forms. IMO.”

“The short story is, software patents continue to perish (in courts at least)…”“More about TR,” he continued, “if you make several inventories and then look at the intersections, the overlap should give strong suggestions about what to pursue. Probably a pen and paper approach would be most thorough.”

“Of each of your connections on social control media, IRC, e-mail, and any forums, what is the main interest for each?

“Then separately, what are you yourself best at and what are you eager to write about?

“Which articles have gotten the most positive responses and why? Which direction do they point?

“Which articles have gotten the most negative responses and why? Of the negative responses, sort away the ones based on dogma or ideology and see what’s left and if those can be addressed.

“What should be covered as a matter of priority and what strategy should be adopted?”“As for random ideas, would a one- or two-month partnership or collaboration with the FSF or OSI be of benefit to both parties? If there is something that you would like to write about or focus on for a time that overlaps with their goals then it might be something to consider.

“Though I’d say the web layouts for both need adjustment so that the columns reflow. Though that’s really superficial considering the amount of effort required. Maybe a cheap, used smartphone with no SIM and just wireless would help there. The main page for TR is way to “busy” and hard to visit or find things.”

Back in April a reader sent us some suggestions, having grown a bit sour/disappointed with the FSF because of inaction on important issues (we also took note of that [1, 2, 3] and had done so for years). Judging by some comments in Diaspora [1, 2], the FSF just isn’t sufficiently concerned about Microsoft anymore.

What do other readers think? What should be covered as a matter of priority and what strategy should be adopted? Suggestions can be sent to bytesmedia@bytesmedia.co.uk which is an impersonal address several of us read.

07.09.19

Why Social Control Media is a Threat to (Software) Freedom

Posted in Site News at 1:44 am by Dr. Roy Schestowitz

Either you are in control of the platform or the platform is in control of you

Social control
Reference: Social control

Summary: Techrights explains platform autonomy and the perils of the ‘new’ form of media, wherein public officials rely on a government-connected (often foreign government) and third party with shareholders to disseminate and not discriminate against (or censor) their public communications

“S

ocial Control Media” is a term I’ve long used to describe so-called ‘social’ ‘media’ (especially centralised, proprietary, censored one; e.g. Twitter, Facebook, YouTube). Some people including Wikileaks have adopted this term, which I coined several years ago (along with others like “openwashing”). Another noteworthy term is “fake news”; and no, it wasn’t Trump’s invention, he just popularised a term that had been used against him by Democrats and actually goes years back to what China called posts in “Social Control Media” which needed to be removed (the Communist Party deemed those posts “fake news”). This predates Trump’s presidential campaign.

We’ve rarely commented on these issues, but they’re worth entertaining because groups like the OSI and FSF never bring them up (not anymore). I asked Richard Stallman about these things several years back and published it in video form. The Linux Foundation took “Social Control Media” to new lows when it started selling “sponsored” tweets. We covered that earlier this year and presented strong evidence.

“Freedom is not free and sometimes it takes some additional effort. But at least one remains in control in one’s platform, not having to fear bogus DMCA takedown requests and deplatforming, which evokes self-censorship.”“Social Control Media” does not involve fact-checking and a lot of the time it’s gamed by AstroTurfing operatives — a subject explored more and more since Trump’s inauguration in 2017.

Jim Zemlin barely tweets anymore; his wife took all of her tweets private. They seem to have grasped the harms of “Social Control Media”. Thugs and oppressors such as Campinos and Battistelli never even bothered with “Social Control Media,” perhaps viewing it with distrust. They rarely allow people to talk back to them — a subject we covered here before.

Techrights has some old accounts in “Social Control Media,” but they have not been used in nearly a decade. I have an account in Twitter (personal account), but I only post there what I also post in Pleroma/Mastodon and Diaspora, which are decentralised and based on Free software. Whether they’re centralised or not, that does not affect the ability to silence and/or censor instances/pods across one another (at the linkage level). The actions taken to suppress/block Gab are a recent reminder of that. MINDS, one might add, is barely decentralised and its commitment to Free software is mostly a token. This is why, all in all, there’s no real substitute to running one’s site/blog and using that for all official communications. Starting soon, having made many changes at the back end, we intend to increase the frequency and volume of posts in Techrights.

The bottom line is, what was put forth with the promise of facilitating greater speech has over time become selector or filter of speech, not only broadcasts but also private dialogues. Those who value freedom will appreciate the importance of domain diversity and decentralisation of the Web. We don’t use “cloud” anything and we even object to things like CDNs (e.g. Cloudflare), which are a lazy person’s ‘fix’. Freedom is not free and sometimes it takes some additional effort. But at least one remains in control in one’s platform, not having to fear bogus DMCA takedown requests and deplatforming, the latter of which evokes self-censorship.

« Previous Page« Previous entries « Previous Page · Next Page » Next entries »Next Page »

RSS 64x64RSS Feed: subscribe to the RSS feed for regular updates

Home iconSite Wiki: You can improve this site by helping the extension of the site's content

Home iconSite Home: Background about the site and some key features in the front page

Chat iconIRC Channels: Come and chat with us in real time

New to This Site? Here Are Some Introductory Resources

No

Mono

ODF

Samba logo






We support

End software patents

GPLv3

GNU project

BLAG

EFF bloggers

Comcast is Blocktastic? SavetheInternet.com



Recent Posts