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

UEFI 9/11 Aftermath - Part III: Mr. 'Secure Boot' (Shim) and His Fake 'Holiday' (Sending My Wife and I Threatening E-mails on 9/11)
despite being on holiday, according to him, he finds time to instruct lawyers to contact my wife
Ron Wyden: Microsoft Should be Held Accountable for Security Breaches (He Has Said This for Years Already, It Never Happens)
Negative media coverage isn't a fine and it does nothing to compensate Microsoft's billions of victims
Disable 'Secure Boot' (If It Lets You)
it doesn't put you in control
Longtime Red Hat Staff: Maybe Just Disable 'Secure Boot'
A refreshing take from Adam Williamson
A Dozen Observations About "UEFI 9/11" Deflections
What we are expected to see, tentatively
The World's Richest Ponzi Scheme (Faking Value Using Net Waste)
The higher they go the harder they fall
We Could Dual-Boot Back in the 1990s, Why Has This Become So Difficult?
And prone to breakage
Slopwatch: Google News is Still Promoting Many Fake Articles About "Linux", in Effect Rewarding Misinformation and Plagiarism
things continue to deteriorate
 
Gemini Links 11/09/2025: xkcd, misfin, and Alhena 5.3.2
Links for the day
Repetition of Last Summer (Microsoft Breaking Dual-Boot Systems)
UEFI 9/11 is about to kick in
UEFI 'Secure Boot' Boiling Frogs (Cannot Turn Off 'Secure Boot')
"MSI laptop is locked on Secure Boot and doesn't allow me to turn it off"
UEFI 9/11 Aftermath - Part IV: The 'Hulk Hogan of UEFI' and His 'Hideout' Holiday (Retreat From Reality)
Let's keep an eye on what matters
UEFI 9/11 Aftermath - Part II: "The SecureBoot Thing Got Out of Hand."
The next few weeks might be... interesting
UEFI 9/11 Aftermath - Part I: "I Believe This Affects Thousands of Devices... Because Multiple Devices I Checked, Whether Client or Server [...] Affected."
Most people aren't even aware that this is happening or about to happen
The UEFI 9/11 - Part X - An Outline of the Series About Microsoft Sabotaging GNU/Linux (With Ramifications to Unfold Online in Coming Weeks as People Reboot)
Today is UEFI 9/11 (9/11/2025)
Culture of silence: Ubisoft harassment convictions, Mozilla, Sylvestre Ledru & Debian make no comment
Reprinted with permission from Daniel Pocock
Links 11/09/2025: "Hey Hi" Ponzi Schemes at Oracle (Unpaid Contracts) and Cindy Cohn is Leaving the EFF
Links for the day
Gemini Links 11/09/2025: Playdate Console, Dichotomy between the Real and the Digital
Links for the day
The Microsoft AstroTurfing and Microsoft-Led Blame-Shifting Tactics Are Ahead of Us
Of course it has nothing to do with security, it's about control, i.e. them controlling everything
Celebrating Assassination is Bad Because It Legitimises Assassination of the People You Like, Too
Condoning or even celebrating political assassinations is bad optics (and taste)
Being Conditioned to Accept Unreliable Computer Systems That Fail With Black Screen of Death (BSoD)
Welcome to 2025
New Series: The Coup Against GNU/Linux Has Begun
today, this year in particular, we shall also focus on Secure Boot, which is sold based on a lie and tortures many computer user
New Paper on "BYOVD, but in firmware. Signed UEFI shells, vulnerable modules offer new paths for Secure Boot bypasses."
One might say digital "security theatre"
Links 11/09/2025: Oracle Layoffs, Drunk Pilots in Japan Airlines, US-Korea Tensions Grow
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Wednesday, September 10, 2025
IRC logs for Wednesday, September 10, 2025
Xubuntu Site Compromised
Let's hope it is not a security breach
Links 10/09/2025: Retaliation at Facebook and Microsoft Reveals Almost 100 Security Holes
Links for the day
Gemini Links 10/09/2025: Annihilation of Self, The Future Eaters, and Leaving Academia
Links for the day
They Say That People Are Afraid of or Worried About "Hey Hi", But the Worriers Should be the Fools Who Invested in It
At the end of the day nobody should worry more than those who invested their money in this bubble
Harassment evidence: franceinfo's Clara Lainé report on Ubisoft prosecution
Reprinted with permission from Daniel Pocock
Links 10/09/2025: Microsoft Layoffs in "RTO" Clothing and Windows TCO, GitHub TCO
Links for the day
Blaming Everything on China
TikTok works for China. GAFAM works for fascists.
People Get Tired of "Hey Hi" (AI), Unlike the Subservient Money-Obsessed Media That Gets Paid to Pretend This Bubble Still Matters
"crash will be way bigger than dot.com burst in 90s. and that was Internet, actually transformative technology, not this expensive AI toy with direct dependency on the energy input which is not scalable"
Brett Wilson LLP Accepts That the Serial Strangler From Microsoft Filed a Case That Also Implicates My Wife (Everything is Connected)
They used to pretend that there were two separate cases
10 Reasons to Disable (or Enable) UEFI Secure Boot
Tomorrow the "trusted corporation" Microsoft will see a certificate expire
Gemini Links 10/09/2025: Hospital and Large Feeds
Links for the day
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Tuesday, September 09, 2025
IRC logs for Tuesday, September 09, 2025
The Bluewashing of Red Hat is Being Completed, Many Staff Understand They'll be Made Redundant
Jim AllowHurst (Whitehurst) is meanwhile promoting Microsoft's agenda from within other companies
Throwing Away "Old" Computers (Mozilla and Other Climate Deniers)
Mozilla is not leftist
statCounter Sees GNU/Linux Exceeding 10% in Bulgaria This Month
What can Microsoft still do to stop GNU/Linux?
Dark Patterns
Microsoft saying "security" is like a Convicted Felon in the White House saying "law and order".
It's Almost Fall (Autumn)
To "Facebook prison" you are bound
Bruce Schneier About "Secure Boot"
Bruce Schneier isn't a fan of "Secure Boot"
Links 09/09/2025: Microsoft Mass Layoffs Again and "RTO" (Timed Like It Serves as a Distraction From the Mass Layoffs)
Links for the day
RMS Told Microsoft to Stop 'Secure Boot' (He Even Went There to Say That), But They Didn't Listen
Dr. Stallman (RMS) assumed that speaking to sociopaths would work
What Richard Stallman Told Me About 'Secure' Boot in 2012
"if the user doesn't control the keys, then it's a kind of shackle"
Those Who Helped Microsoft Weaponise "Secure Boot" Against GNU/Linux and BSDs Are Fleeing
Microsofters doing what they do best: they evade accountability
Simple is Better, Simplicity is Power
That is "the advantage of having commodity GNU/Linux systems," an associate notes
Much Ado About Nonsense
Microsoft Lunduke is still all dramatisation and sensationalism
Current Events in France
It needs to dump Microsoft and other GAFAM (US) giants, move to Free software
Further Media Cut-downs
media reporting about the media being cut
Links 09/09/2025: US-Korea Tensions and Meta Whistleblowers
Links for the day
Gemini Links 09/09/2025: Moon Eclipse and ROOPHLOCH Reports
Links for the day
Links 09/09/2025: “Torrents of Hate” and Political Crisis in France
Links for the day
Gemini Links 09/09/2025: "Dedigitizing" and Forgejo on FreeBSD
Links for the day
Google News (Not Just Google Search) Lets Itself by Gamed by One Slopfarm - to the Point Almost Half of "Linux" News is Bot-Produced Plagiarism (LLM Slop With Slop Images)
That says a lot about what Google thinks of quality, even in Google News
Bill Gates-Funded Media Inadvertently Refutes the Microsoft Lie That in 2025 Microsoft Had Just Two Waves of Layoffs
There were about 12 rounds of layoffs so far in 2025
Official SUSE Blog Still Uses LLM Slop (Bots) to Make Fake Articles (Marketing)
The company is all about sound bites
Companies Realise That Slop Doesn't Work as Advertised, Accordingly Dump It
"Hype dims as a country-wide survey of US corporations shows a sudden drop-off in AI use among firms with more than 250 employees."
Microsoft-Funded Lawsuits Against Critics of UEFI 'Secure Boot'
Remember that no company (or law firm) ever survives collaborations with Microsoft
From theregister.co.uk to theregister.com (US) to The Register MS (Run by Microsoft Operatives) and theregister.ai
The best way to break this racket (or cycle of hype and harm) is to break the chains of funding
Open Source Initiative (OSI) Culture of Censorship Necessitates More Speech
The OSI bans dissent or people who merely point out that the OSI is abusive
How to Reach Us Discreetly (Other Than Encrypted E-mail)
We're still managing to maintain a 100% source protection record. We soon turn 19.
LLMs Are Vastly Worse Than a Waste of Energy and the Externalities Are Huge
Worse than just higher power bills for everybody
LLMs Versus Search (Not Replacing Search But Engaging in DDoS Attacks Against Web Sites That Permit Searching)
The state of the Web isn't just bad; it's utterly terrible
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Monday, September 08, 2025
IRC logs for Monday, September 08, 2025
It's Only the Second Week of September and Already Two Waves of Layoffs at Microsoft, Slopfarms and Microsoft-Funded Sites Spin It as "AI Investments" Rather Than Commercial Failure
A very large third one expected next week
The UEFI 9/11 - Part IX - Shunning Old Computers (in 2023 the Certificate Was Updated/Overridden, Underlying Aim May Be Herding/Forcing People to Get TPM and Other 'Novel' Restrictions)
the "upgrade treadmill"