Bonum Certa Men Certa

Techrights Available for Download as XML Files

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.

Recent Techrights' Posts

Links 24/07/2026: Mass Layoffs at Patreon, Netflix Deemed Bad for People's Brains
Links for the day
Google Spreads Misinformation, Google's Slop Makes Stuff Up and Calls That "Intelligence"
Google very well understands (and even publicly admits so, albeit only for legal reasons) that the slop does not work
US is Insolvent, GAFAM is Buying Time by Hiding (Not Disclosing) Its True Debt Which Explains Never-ending Layoffs (Unrelated to Slop or "Efficiency Drives")
Five Tech Giants are Hiding $1.65tn in AI Debt, Using the Trick that Toppled Enron
PIP Apocalypse (PIPocalypse) at IBM, CEO Promotes Vapouware (Lying to Shareholders)
Companies get to shrink while lying about it to the public, even to shareholders
 
You've Been Conned If You Ever Believed That MElon (MUSK, Elon) Was a Trillionaire
Connected to corrupt officials
The People Who Tried to 'Cancel' (or Deplatform/Censor) Daniel Pocock Are Annoyed That He's Mentioned in Dozens of Press Articles
If Pocock's words did not matter, there would not be such a huge effort to silence him
Cybershow Explains Why Only Sociopaths Gravitate Towards Leadership Position in 'Tech'
The general thesis is a familiar one
Give Me Your "Dumbest" (Devices)
Why can't people accept that a "modern "smart" "phone" isn't necessary to check the time (overkill) and playing social control media "on the go" is far from necessary?
Speeding Up 'Down Under': Australia, New Zealand, Tasmania...
As things stand, the best we can do is let people retrieve pages within less than 0.1 seconds since a request is received
Google's Debt Trebled in Only 9 Months and It's Not Even the Full Picture (There's Secret Debt, Too)
No wonder there are so many layoffs and workers try to unionise
Microsoft Layoffs in India
it's about cost-cutting
Deregulation is Blowing Up the Economy, Which Has Become a Multi-Level Scheme or Pyramid Scheme
Why did only Japanese media call out the BS; is that so hard to figure out and properly report on?
Daniel Pocock Proves Wikipedia is for Rich People or People Who Work for Very Rich People (the True Owners of Wikipedia)
It's for billionaires and their faithful boot lickers
GNOME: Your Personal Opinions Must Overlap GAFAM's (Otherwise Those Opinions Are Impermissible)
Get well soon, GNOME
Making Excuses for Stressful, Unrewarding, and Immoral Jobs
excuses for difficult and/or barely-rewarding jobs. [...] People in tech must not be evaluated (or have their "worth" assessed) based on remuneration
Almost 5 Years Without Social Control Media ('Mind Prison')
Life is too short to be stuck inside a skinnerbox
Linux Must be About People (Humans), Not Bribery From Slop Companies Trillions of Dollars in Debt and in Pursuit of Positive Press
We've lost Williams
John Dvorak Understood That "MSM" Was a Vehicle of Censorship
Independent publishing, which obviates the need to censor (influenced by existing advertisers or lookout for prospective advertisers), is the only credibly thing out there
To Understand Why Linus Torvalds Became a Boot-Licking Booster of Slop Look at Another Operative of 'Linux' Foundation, the "Mentor" of Clickfraud SPAMnil (According to SPAMnil Himself)
it seems like SJVN does not give a full disclosure
Blaming "Computers" Instead of Blaming Microsoft
Blaming Microsoft is "hate"
"Online We Are All Refugees" and Slop Pushers Are the Oppressors
They basically resort to nationalism and racism to distract from their commercial failure and fraud (pyramid scheme)
GNU/Linux Soaring in Antigua And Barbuda
GNU/Linux is internationally approaching 8%
Calling Out the Worst Culprits in "Linux" Slop (Slopfarms That Manipulate Information and Engage in Plagiarism)
Once they're gone (offline), the slopfarms cannot carry on for much longer
Defying Discrimination
Rianne's birthday is exactly a month away
Dan Williams Represented Real Diversity in Linux
Williams probably understood based on personal experience what it was like to be marginalised and discriminated against
The First Point About Software Freedom is, You Must Understand What It Really Means (Not "Open Source")
Forty Three Years of Commitment to Software Freedom [...] Educating people about what Software Freedom actually means
Gemini Links 24/07/2026: Recovering From Broken Shoulders, Loss of Passion, and "True Hacker Versus Growth Hacker"
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Thursday, July 23, 2026
IRC logs for Thursday, July 23, 2026
Gemini Links 23/07/2026: Databases, TLGS, and RSS Feeds
Links for the day
Links 23/07/2026: Science, Censorship, and Territorial Overreach by China
Links for the day
The State of Google Security: Blocking competition
GMail is the best!
What Happens When Windows Becomes as 'Niche' as GNU/Linux on Desktops and Laptops
Android enjoys a near-monopoly and GNU/Linux isn't far behind Windows.
IBM Cash "Down $6.3 Billion From Year-end 2025." Total Debt/Equity 188.97%. (Debt Can Exceed the Company's Real Value)
the CEO alone can make well over $0.7 billion in 5 years of salaries and bonuses
Wave of PIPs Allegedly Coming to Microsoft, Managers Trained to Terminate Employees Without Paying Severance (and Without Calling it Layoffs)
They count and cut the losses
This Looks Like the End of XBox, the Console
Sharma has become the "fall man" of Microsoft
European Patent Office (EPO) Series: A Consummate Master of the "Rigged Game"
"single-candidate shortlist"
Attempts to Change Focus and Change the Subject as IBM Shares Dwindle. Buying Revenue to Mask the Rapid Decline One More Time.
IBM used to be good at engineering, not financial engineering
Down 848% Year-on-year, Negative Cash Flow, Growing Debt (Richest Man on the Planet or Shrewd Scammer?)
The latest for Tesla is more of the same
IBM Falls Below $200, Expect $199 or Less Today (Panic Threshold)
Will this be enough to topple the managers?
Gemini Links 23/07/2026: SharePoint Rants and “Junk DNA” in Commented-Out Code
Links for the day
Links 23/07/2026: RIP John C. Dvorak, Organisation Weaponised Against J.K. Rowling
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Wednesday, July 22, 2026
IRC logs for Wednesday, July 22, 2026
Freexian & Debian: antitrust, unfair competition against joint authors and volunteers
Reprinted with permission from Daniel Pocock
IBM in the Red After Bad Results (Shares Down in After Hours)
Will the CEO step down, retire, of what else?
Gemini Links 22/07/2026: Fault Lines, the Dark Web and Beyond, and Why Substack is Awful
Links for the day
Insult and Injury: Getting Banned, Not Just Sacked, by Microsoft
A former insider spoke about this in public 5 hours ago
Links 22/07/2026: "Dumb Phones" Not Enough to Tackle Harmful Addition, "MPEG-4 Visual's Road to Being [Software] Patent-Free"
Links for the day
IBM's Press Release About Results Mentions "AI" 10 Times, "Quantum" 4 Times
Blah blah blah AI"
Top secret: Cults inquiry submission concealed from public
Reprinted with permission from Daniel Pocock
An Hour Ahead of Alleged 'Results' (Amid Investigation Into Fraud) IBM Falls Back to New Lows
Only cents away from a 52-week low
IBM Headed for Lowest "Value" in 2 Years
In a nutshell, Krishna "can't keep it up" and IBM is now investigated for fraud
Investigation Progressing
There is nothing "funny" about receiving mortal threats for merely reporting information in a civilised country
Things We Could Do More Than Half a Century Ago But Can No Longer Accomplish
Newer is not always better
Anupa Ann Joseph & Debian defamation gang
Reprinted with permission from Daniel Pocock
State of the Invidious Project
Never forget how hostile Google can be towards freedom
Prioritising the Safety of Women is the Best Approach to Foster Diversity in Technical Communities
Debian was never "normative", but that does not mean Debian should have such low standards
IBM Will Report 'Results' Tonight (CET), It's Already Investigated for Securities Fraud
"Five of the biggest US tech giants are carrying $1.65 trillion in debt that does not show up on their balance sheets"
Hardware Has Gotten a Lot Worse, Not Just Far More Expensive
prices go up fast
Amid Claims of Microsoft Bing Layoffs It Seems Like Bing Cannot Even Hold on to Second Place
Yandex is sometimes bigger than Bing
Wikileaks Does Not Publish New Material Anymore, But Wikileaks Still Changes the World
Wikileaks has a legacy that will soon turn 20
Links 22/07/2026: Postal IRCs, PlayStation Kills Discs, Union Action Against Microsoft, "Judge Considers Tossing Databricks Patent Suit Under California anti-SLAPP Law"
Links for the day
Same 'Journalists' Who Published Fake News for IBM (Pump and Dump) Now Write Puff Pieces About the Stock Falling
the media is so compromised
They Called It "Social" and "Media", But It Turned Out to be Slop and Child Porn
Why do any sane people still use social control media?
Age of consent: DebConf26 registered sex offender in Argentina?
Reprinted with permission from Daniel Pocock
European Patent Office (EPO) Series: In the Pole Position Despite a Dismal Track Record
António Campinos is an old hand when it comes to such high-level institutional intrigue
Site a Bit Slower Due to Visitors' Load
We'll try to work out better speeds
Gemini Links 22/07/2026: Emacs, Astrology Clock, Arduino, and Rogallo v1.0.0
Links for the day
After Involvement by the Free Software Foundation (FSF) LibreTech and Quibble Gain More Participants
RMS expressed gratitude for people who worked on Quibble and improved LibreJS after many years of inactivity
The Lessons From the Assange Saga
This will not end well
Linux Foundation an Enemy of the Planet, Proponent of Pollution and Global Heating
"could the "polluters pay" model be extended to the computing environment and used to take on Microsoft and Microsofters?"
Apple Will Increase Surveillance of Customers, Record Verbal Communications Under the Guise of "Hey Hi"
Apple now drinks that same Kool-Aid
Dave Winer, Blogging Pioneer, Sells Out, Spews Out LLM Slop to Readers
Another one bites the dust [...] Now it's a slopfarm of sorts
Not Everything Can be Automated
not a new thing
GNU/Linux OS in ComorOS
Now, as in recent years or the last year, the GNU/Linux "signal" is growing significantly
Microsoft Redefines "Layoffs" to Give Smaller Tallies
It's not just calling them "buyouts" or saying people are merely "leaving" or "retiring"
IBM is Not Done Destroying Red Hat, Wait Till October 1st 2026 (More Layoffs and Bluewashing)
It's not bluewashing 'til it's 100% done
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Tuesday, July 21, 2026
IRC logs for Tuesday, July 21, 2026
"LF Sex", Nothing to Do With Linux
a lot of explaining to do this week