Monday, 30 March

19:49

Make a Strip! [Penny Arcade]

It’s always something. At PAX East this year I had more time to draw the comic during Make a Strip but I forgot a very important piece of hardware, and not having it made drawing the comic a huge pain in my ass. I normally have a little handheld ”puck” with a bunch of buttons on it that my left hand holds and uses for short cut keys. I forgot the little dongle that makes that thing work so instead I attempted to use my drawing tablets touch controls... for the first time...live on stage. It did not go great but I was told over and over again during the show how much fun it was to watch me struggle. In fact a few people suggested that going forward there should always be some impediment to me drawing the strip at the show!

 

 

19:07

Dunk And Egg [Penny Arcade]

Gabriel's diet, always a fraught topic, degrades substantially on trips. Once he ate someone who came to the show! He felt bad, but because the attendee had been completely devoured there was no way to truly communicate the fact. Another time, fell upon a ruined pigeon he'd found in the street. Traffic stopped in both directions - sat back on his haunches, he gnawed on that rigid bird like it was corn on the cob. In comparison, this year's food policy was positively enlightened.

18:49

SystemRescue 13.00 released [LWN.net]

SystemRescue 13.00 has been released. The SystemRescue distribution is a live boot system-rescue toolkit, based on Arch Linux, for repairing systems in the event of a crash. This release includes the 6.18.20 LTS kernel, updates bcachefs tools and kernel module to 1.37.3, and many upgraded packages. See the step-by-step guide for instructions on performing common operations such as recovering files, creating disk clones, and resetting lost passwords.

Rspamd version 4.0.0 released [LWN.net]

Version 4.0.0 of the Rspamd spam-filtering system has been released. Notable new features include HTML fuzzy phishing detection, support for up to eight flags with fuzzy hashes, and more. See the changelog for more on improvements, breaking changes, and bug fixes.

Pluralistic: Market participation is exhausting (30 Mar 2026) [Pluralistic: Daily links from Cory Doctorow]

->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> Top Sources: None -->

Today's links

  • Market participation is exhausting: No one wants to be the sucker at the table.
  • Hey look at this: Delights to delectate.
  • Object permanence: EMI DRM v Brazil; "The Information"; Genome patenter v copyright troll (let them fight); Green investing isn't; Trump loves Big Tech; Kleptones' "24 Hours"; Lasermonks; Ransomware hospital; News co-ops; AI "art" sucks; Swisscom wifi is $838/24h; Millennials don't exist; Why Microsoft's chatbot turned Nazi; NYC's best dumpster-dived food; RIP Diana Wynne Jones; What really happened at the student protests in Trafalgar Square; Church-owned insurer has secret pedo priest files; Names that break databases; Reality-based communities; Hugo for websites; Cop cabs; Fake pediatrician group; Bring Your Own Bigwheeel; "How To Talk About Videogames."
  • Upcoming appearances: Montreal, London, NYC, Berlin, Hay-on-Wye, London.
  • Recent appearances: Where I've been.
  • Latest books: You keep readin' em, I'll keep writin' 'em.
  • Upcoming books: Like I said, I'll keep writin' 'em.
  • Colophon: All the rest.



An early 20th C painting advertising a magic show, it features a mustachioed, tuxedoed conjurer beating the Devil at poker with four aces in his hand, as a giggling demon on his shoulder whispers advice in his ear and the Devil looks chagrined. The image has been altered: the Devil now has Trump hair and orange skin. The demon perched on the magician's shoulder has the face of Adam Smith.

Market participation is exhausting (permalink)

We're a diverse species, cognitively speaking – different ways of thinking come more easily to some of us than others. I'm good at a lot of things, but I have terrible spatial sense. I can't parallel park or catch a ball, and I get lost so easily it's almost comical (it's a running joke in my family).

Luckily, I'm married to a woman with incredible spacial sense. My wife Alice can sit at one end of a basketball court and look at the scoreboard at the other end and say, "It's 1" off-center to the right and 1° off true clockwise." She'll be right. She's also a crack shot and an extremely proficient gamer (she was the first woman to play e-sports internationally, on the English Quake team).

I'm good at stuff she's not good at. I don't mind wading through personal admin and bookkeeping processes, while she finds these excruciating (and interestingly, it's reversed when it comes to work-related admin, which I find torturous and which she excels at). I love listening to audiobooks, which she can't focus on at all. She loves instrumental music, which I broadly find tedious; while I find it much easier to work while listening to music with great lyrics.

This is great. As a couple, we make up for one another's deficits and complement one another's strengths. Obviously, this is also true as a species: we all like doing different stuff in different ways, and that's good, because there is a lot of stuff to do, and it's pretty damned heterogenous. A complex, dynamic world demands a complex, dynamic response.

This is a bedrock of cybernetics, the study of systems control. The "law of requisite complexity" states, "in order to be efficaciously adaptive, the internal complexity of a system must match the external complexity it confronts":

https://en.wikipedia.org/wiki/Variety_(cybernetics)

Cyberneticians and systems designers understand that their job is partly to design a set of controls that are as complex as the system they modulate, and partly to simplify that system to make it possible to control. Think of how you can make a database search run faster by confining it to one field in records from the past year, or how you can hold down the shift key to constrain a rectangular selection tool so it draws perfect squares.

This happens cognitively, too. Pretty much anyone can track their expenses from a work trip, but the company bookkeeper needs to have a certain "head for figures" that lets them do this all day long, for everyone's expenses, so we limit the kinds of bookkeeping we ask normies to do, and reserve the heavy lifting for specialists.

As a freelancer, I hire a bunch of people who have cognitive strengths that I lack. My accountant isn't just a person who knows more about tax law than I do – he's also someone who can manage the reconciliation of all my bookkeeping spreadsheets better than I ever could, and without the psychic trauma I experience when I try to do this on my own.

Likewise, my publisher employs copyeditors and proofreaders who find the typos that my brain just doesn't see, and when they send me back my marked-up manuscripts for review, I ask my mom to give them a pass, because she finds the typos they miss.

Sitting between me and my publishers are my agents (I have several of these, one for English-language literary deals, another for foreign rights, another for media, and yet another for speaking engagements). I love these folks, partly because the better they are at their jobs, the easier it is for me to pay my mortgage, but especially because they really enjoy doing things I hate doing: a) asking for money, and; b) haggling.

For me, haggling is (at best) embarrassing. At worst, it's humiliating. It's always exhausting. But for my agents, it's invigorating. Many's the time I've gotten on a video call with my agents after they've concluded a successful deal and they're glowing. Call it what you will: cognitive diversity, emotional diversity, neurodiversity…my agents and I have it, and it's good for all of us.

And here's the thing that makes these world-class hagglers great: they can switch it off. They're competitive as hell, they love to bargain hard, but they understand that they're playing an iterated game, and if they crush the publishers' representatives they're up against, then they'll ruin my good name.

More: when the bargaining's done and we're having a nice chat about everyday things, or getting together for dinner, they're not on. They're just normal, not wrestling over every detail. Bargaining is what they do, it's not who they are.

That doesn't just make them bearable as human beings, it also makes them better at their jobs. There's an old pal with whom I've done some creative work, and at one point I needed to pay them for their part in a project. They asked me to route the payment through their manager, and this manager assumed I was just another production hiring my buddy, and let loose with his full power at me over this payment, haggling for paperwork that would make Creative Commons releases impossible, as well as other (normal but not appropriate in this case) conditions. I emailed my pal, who emailed their manager to stand down and treat this as a friendly negotiation, whereupon Dr Jekyll became Mr Hyde and we wrapped things up in about ten minutes.

These haggler types do very well in our society, which is organized around the idea of efficient markets, where everyone is always bargaining to the last breath in order to "maximize their utility."

This ideology isn't just an observation ("society is a market"), it's also a demand ("society should be a market"). People who find aggressive haggling invigorating have taken over the operations of our civilization, and they are determined to convert everything to a marketplace, from waiting on hold for the IRS to looking for a parking place:

https://pluralistic.net/2021/10/07/markets-in-everything/#no-th-enq

The people running this game are so invigorated by haggling that they can't not haggle. They make putting a price on everything into a virtue. They want to be able to sell their kidneys. More importantly, they want to buy your kidneys.

In Sarah Wynn-Williams's Careless People, there's a memorable incident in which Sheryl Sandberg is shocked to the roots of her hair when she is told that she can't go to Mexico and buy a kidney if her child gets sick. Her child isn't even sick! She's just offended that this hypothetical situation wouldn't be resolved by bargaining:

https://pluralistic.net/2025/04/23/zuckerstreisand/#zdgaf

For these people, cheating is just bargaining by another means. They embrace bizarre concepts like "revealed preferences," the idea that if you say you're dissatisfied with a bargain, but you accept it anyway, you have a "revealed preference" for the deal. In other words, if someone sells their kidney to Sheryl Sandberg in order to make the rent, they have a "revealed preference" for having only one kidney – and if they sell their privacy to Sheryl Sandberg in order to stay in touch with the people they love, they have a "revealed preference" for having their data extracted and exploited by Facebook:

https://pluralistic.net/2024/01/24/everything-not-mandatory/#is-prohibited

Trump is the apotheosis of this. The true "art of the deal" is just cheating. That's why he stiffed his workers, stiffed his suppliers, stiffed his backers and stiffed his base. If you can cheat and get away with it, it's not even cheating: "that makes you smart":

https://pluralistic.net/2024/12/04/its-not-a-lie/#its-a-premature-truth

"Caveat emptor" makes sense at a yard-sale or an estate auction – but it's no way to operate a government or conduct your daily life. It's exhausting:

https://pluralistic.net/2025/04/29/cheaters-and-liars/#caveat-emptor-brainworms

Running the world on "caveat emptor" isn't just a transfer from workers to the wealthy, it's a transfer from people who are exhausted by bargaining to people who are invigorated by it. It's a way of transforming just one of the many differences in how humans think into the single most important success criterion, the major determinant of your life's chances. It's a way for the invigorated to utterly dominate the exhausted. It's the elevation of "stop hitting yourself" into political ideology.

The antidote to this is something John Ganz calls "The Club Med theory." He argues that while mostly we sneer at inclusive holiday resorts as a way to go on vacation without having to engage with another country's culture and people, that the original value of these resorts (still present today) is the way they let you go on vacation without participating in markets:

https://backofmind.substack.com/p/the-club-med-theory

Club Med was founded by an Olympian named Gérard Blitz whose insight was that "what people seek from a holiday is not luxury or material comfort, but happiness." For Blitz, the value of an inclusive resort wasn't the open bar and the buffet, "it’s the relief from participation in the everyday economy."

As Ganz points out, class differences (between guests, at least) are erased at inclusive resorts. The richest person at the resort eats and drinks the same food, goes on the same excursions, and participates in the same activities as the poorest person at the resort (yes, this is less true of today's inclusive resorts, which are full of "up-charges," representing the triumph of people who are invigorated by bargaining over people who are exhausted by it).

For Ganz, the beauty of an inclusive resort is that it removes the "cognitive demands" of a market economy, which are inherently stressful: "Every transaction is a decision, and decisions cost energy."

Ganz proposes that "this is quite difficult for people to understand if they have an economics degree." Why would the resort restaurants improve their food quality if they're not competing for your business? Why would servers hustle to make you happy if they're not competing for tips?

But this is not what happens. Resort-goers love the bartenders at the swim-up bar, and they are frustrated to the point of fury with the people selling necklaces, sunglasses and massages on the beach. These sellers "live or die by their ability to persuade people to part with money in exchange for goods and services." It's exhausting to be them, and it's exhausting to be approached by them.

Ganz says that the best strategy to get someone to part with their money isn't necessarily to provide good service. As he learned in his stockbroker days, you can also "pester them mercilessly until they pay you to go away." In an unregulated market, you don't get a single vendor who comes around and offers you sunglasses once a day. The equilibrium of that market is to be woken from your nap or interrupted from your book every five minutes by someone who's hustling to make the rent. The economy doesn't "price in the externality" of your plummeting satisfaction with your holiday.

Ganz isn't the first person to observe this. As he points out, in 1963, Galbraith wrote:

Total physical and mental inertia are highly agreeable, much more so than we allow ourselves to imagine. A beach not only permits such inertia but enforces it, thus neatly eliminating all problems of guilt.

I read Ganz's short post last week and it stuck with me. The more I thought about it, the more I liked it – and the more I thought that there was something missing from it: the idea that there are some people who hate a life without bargaining. These people are invigorated by bargaining and exhausted by "total physical and mental inertia." They need to be hustling.

The people who turn up their noses at an inclusive resort aren't just people who want to have the "authentic experience" of a distant land – some of them are people who want to spend all day hustling and being hustled. People who need that energy.

Those people have a place in the world. I don't want those people trying to sell me a timeshare or trying to rope me into their MLM, but I'd love to have them negotiating on behalf of my union:

https://pluralistic.net/2025/02/05/power-of-positive-thinking/#the-socialism-of-fools

But even then, I'd want them to be like my agents, capable of stepping back from constant bargaining and to cease their remorseless seeking of advantage. I wouldn't want them to be Sandbergian would-be buyers of kidneys, full of self-serving tales of revealed preferences, caveat emptor and "that makes me smart."

As with anything, the dose makes the poison. I know lots of hustlers who are fun as hell to hang around, whom I'd trust with my life or at least my password. A lot of libertarians fit this mold: people who are truly committed to voluntarism and intrinsic generosity.

But libertarianism, like any movement, is a coalition, and within that coalition is a large group of people – people who are invigorated by bargaining – who are committed to dominating others by exhausting them. For them, bargaining isn't a cognitive demand, it's a cognitive invigorator. To the extent that they understand this, they think it's just a sign that they are born to rule. Caveat emptor. Revealed preferences. That makes me smart.

What's more, for people on the losing side of this trade, losing the bargain means being poorer, and being poorer means more cognitive demands – rationing out your pennies and eeling through the impossibly narrow gaps between payday and the day the bills are due. This produces a winner-take-all dynamic in which the losers of the bargaining game have less energy and wherewithal to bargain the next time around.

This is beautifully unpacked in (what else) a science fiction novel, Naomi Kritzer's Liberty's Daughter, a young adult novel about the teen daughter of a libertarian cult leader who is growing up on a seastead:

https://pluralistic.net/2023/11/21/podkaynes-dad-was-a-dick/#age-of-consent

Kritzer's novel beautifully plays out the "stop hitting yourself" justifications that eventually allow her libertarians to enslave others – after all, in a truly voluntaristic society, why wouldn't you have the freedom to sell yourself into slavery? And if you claim later that you're unhappy with this arrangement, tough shit – you've got a "revealed preference" for being a slave.

Caveat emptor. If you're the kind of person who gets charged up by bargaining, then you were born to rule.

If bargaining means cheating, well, "that makes you smart."


Hey look at this (permalink)



A shelf of leatherbound history books with a gilt-stamped series title, 'The World's Famous Events.'

Object permanence (permalink)

#25yrsago DIY circumcision revision (CW gross) https://web.archive.org/web/20010618005738/https://www.subgenius.com/subg-digest/v5/0206.html

#25yrsago Gen X guide to Disneyland https://web.archive.org/web/20010302143848/http://www.omnigroup.com/~cirocco/dizney/index.html

#25yrsago Hugo for best website https://web.archive.org/web/20010404222727/http://www.conjose.org/wsfs/wsfs_web.html

#20yrsago America’s worst WiFi hotels https://web.archive.org/web/20060404214142/http://www.hotelchatter.com/story/2006/3/27/21911/4235/hotels/Worst_WiFi_Hotels_2006

#20yrsago Help Peter Beagle sue the film-house that made “The Last Unicorn” https://web.archive.org/web/20060116061435/http://www.conlanpress.com/youcanhelp/

#15yrsago Deathless: Cat Valente’s beautiful fantasy of Stalinist Russia and the Siege of Leningrad https://memex.craphound.com/2011/03/28/deathless-cat-valentes-beautiful-fantasy-of-stalinist-russia-and-the-siege-of-leningrad/

#10yrsago Cop Cabs: The NYPD has at least three fake taxis on NYC’s streets https://www.muckrock.com/news/archives/2016/mar/28/nypd-taxicabs/

#10yrsago Peer-reviewed online expert system will help you if you’ve been poisoned https://www.webpoisoncontrol.org/

#10yrsago The “American College of Pediatricians” is a hate group with fewer than 200 members https://scienceblogs.com/pharyngula/2016/03/28/speaking-of-bad-science-never-trust-the-american-college-of-pediatricians

#10yrsago Ransomware gets a lot faster by encrypting the master file table instead of the filesystem https://www.bleepingcomputer.com/news/security/petya-ransomware-skips-the-files-and-encrypts-your-hard-drive-instead/

#10yrsago Security-conscious darkweb crime marketplaces institute world-leading authentication practices https://web.archive.org/web/20160331091155/https://motherboard.vice.com/read/some-dark-web-markets-have-better-user-security-than-gmail-instagram

#10yrsago Saudi embassy hired mafiosi to smuggle Turkish PM Erdoğan’s son out of Italy ahead of money laundering charges https://web.archive.org/web/20160311095055/https://awdnews.com/top-news/rome’s-police-spokesman-saudi-embassy-helped-erdoğan’s-son-to-escape-the-police-custody-using-a-forged-saudi-passport-and-disguised-as-an-arab-diplomat

#10yrsago Photos from Bring Your Own Bigwheel 16 https://www.jwz.org/photos/2016-03-27-bigwheel/

#10yrsago How to Talk About Videogames: a book that is serious (but never dull) about games https://memex.craphound.com/2016/03/28/how-to-talk-about-videogames-a-book-that-is-serious-but-never-dull-about-games/

#1yrago Big Tech and "captive audience venues" https://pluralistic.net/2025/03/28/street-pricing/#sportball-analogies

#20yrsago EMI releases Brazilian DRM CDs that totally hose their customers https://memex.craphound.com/2006/03/24/emi-releases-brazilian-drm-cds-that-totally-hose-their-customers/

#20yrsago Video reveals Belarus electoral fraud https://web.archive.org/web/20060506233026/http://www.media-ocean.de/2006/03/26/does-youtube-video-proove-election-fraud-in-belarus/

#20yrsago Kleptones new mashup double-CD free to download: “24 Hours” https://web.archive.org/web/20060810172451/http://www.kleptones.com/pages/downloads_24h.html

#20yrsago Steve Jobs, 2002: “You need the right to manage music on all devices” https://web.archive.org/web/20060509144710/http://www.songbirdnest.com/nivi/blog/jobs_france

#20yrsago Monks in Wisconsin refill printer cartridges https://web.archive.org/web/20060324043723/http://lasermonks.com/

#20yrsago DRM is Killing Music https://www.voidstar.com/node.php?id=2686

#20yrsago Swisscom WiFi at London conference centre costs $838.73/24h https://web.archive.org/web/20060329090917/https://benhammersley.com/FCE47259-78BA-4B5E-ABF2-F39B93520C85/Blog/C9043A4D-F791-4B7F-A8A7-3484779B4748.html

#20yrsago Most expensive Google ad keywords listed https://web.archive.org/web/20060325094245/http://www.cwire.org/2006/03/23/updated-highest-paying-adsense-keywords/

#20yrsago LA Times slams Marvel for trying to steal “superhero” https://www.latimes.com/archives/la-xpm-2006-mar-26-ed-superhero26-story.html

#15yrsago Microsoft switches off privacy for Hotmail users in war-torn and repressive states https://www.eff.org/deeplinks/2011/03/microsoft-shuts-https-hotmail-over-dozen-countries

#15yrsago Wisconsin GOP uses sunshine laws to harass prof who speculated about links with pressure group https://scholarcitizen.williamcronon.net/2011/03/24/open-records-attack-on-academic-freedom/

#15yrsago Koch-pranking Beast editor runs for Congress https://web.archive.org/web/20110326042435/http://www.murphycanhascongress.com/

#15yrsago Did Limewire shutdown really cause P2P music infringement to drop 30%? https://web.archive.org/web/20110428175101/http://copyfight.corante.com/archives/2011/03/24/cnet_and_others_get_it_wrong_miss_the_actual_story.php

#15yrsago Man who wants to patent genome gets legal threat for embedding James Joyce quote in artificial lifeform https://www.forbes.com/sites/davidewalt/2011/03/14/craig-venters-genetic-typo/

#15yrsago James Gleick’s tour-de-force: The Information, a natural history of information theory https://memex.craphound.com/2011/03/24/james-gleicks-tour-de-force-the-information-a-natural-history-of-information-theory/

#15yrsago NYT paywall sub is $100 more expensive than WSJ, Economist and Daily combined https://theunderstatement.com/post/4019228737/digital-subscription-prices-visualized-aka-the

#15yrsago RIP, Diana Wynne Jones https://www.theguardian.com/books/2011/mar/27/diana-wynne-jones-obituary

#15yrsago Front-line report from Trafalgar Square paints a radically different picture https://www.newstatesman.com/politics/2011/03/trafalgar-square-police-young
#15yrsago Wisconsin GOP uses sunshine laws to harass prof who speculated about links with pressure group https://scholarcitizen.williamcronon.net/2011/03/24/open-records-attack-on-academic-freedom/

#15yrsago Koch-pranking Beast editor runs for Congress https://web.archive.org/web/20110326042435/http://www.murphycanhascongress.com/

#15yrsago Did Limewire shutdown really cause P2P music infringement to drop 30%? https://web.archive.org/web/20110428175101/http://copyfight.corante.com/archives/2011/03/24/cnet_and_others_get_it_wrong_miss_the_actual_story.php

#15yrsago Man who wants to patent genome gets legal threat for embedding James Joyce quote in artificial lifeform https://www.forbes.com/sites/davidewalt/2011/03/14/craig-venters-genetic-typo/

#15yrsago James Gleick’s tour-de-force: The Information, a natural history of information theory https://memex.craphound.com/2011/03/24/james-gleicks-tour-de-force-the-information-a-natural-history-of-information-theory/

#15yrsago NYT paywall sub is $100 more expensive than WSJ, Economist and Daily combined https://theunderstatement.com/post/4019228737/digital-subscription-prices-visualized-aka-the

#15yrsago RIP, Diana Wynne Jones https://www.theguardian.com/books/2011/mar/27/diana-wynne-jones-obituary

#15yrsago Front-line report from Trafalgar Square paints a radically different picture https://www.newstatesman.com/politics/2011/03/trafalgar-square-police-young

#10yrsago Catholic Church-owned insurer has secret files on paedophile priests https://www.theage.com.au/national/secret-archive-of-paedophile-crime-kept-by-catholic-churchs-insurers-20160317-gnlc6k.html

#10yrsago Names that break databases https://www.bbc.com/future/article/20160325-the-names-that-break-computer-systems

#10yrsago Cops arrest public defender who was representing her client, face no discipline https://www.techdirt.com/2016/03/23/complaint-board-finds-police-officers-violated-policy-arresting-public-defender-who-demanded-they-stop-questioning-her-clients/

#10yrsago Vulnerability in recorders used by 70+ manufacturers’ CCTV systems has been known since 2014 https://web.archive.org/web/20160322204109/https://kerneronsec.com/2016/02/remote-code-execution-in-cctv-dvrs-of.html

#10yrsago Ransomware hackers steal a hospital. Again. https://krebsonsecurity.com/2016/03/hospital-declares-internet-state-of-emergency-after-ransomware-infection/

#10yrsago STUCK: Public transit’s moment arrives just as public spending disappears https://web.archive.org/web/20160327040633/https://motherboard.vice.com/read/the-immobile-masses-why-traffic-is-awful-and-public-transit-is-worse

#10yrsago East Harlem’s secret museum of gorgeous junk rescued from NYC’s trash https://www.atlasobscura.com/articles/fascinating-photos-from-the-secret-trash-collection-in-a-new-york-sanitation-garage

#10yrsago Heatmaps of the human body in varying emotional states https://www.pnas.org/doi/10.1073/pnas.1321664111

#10yrsago Man exonerated after video shows unprovoked police beating, cops insist all is well https://arstechnica.com/tech-policy/2016/03/video-clears-texas-man-of-assaulting-cop-did-police-commit-perjury/

#10yrsago What you think about Millennials says a lot about you, nothing about them https://www.youtube.com/watch?v=-HFwok9SlQQ

#10yrsago Jerks were able to turn Microsoft’s chatbot into a Nazi because it was a really crappy bot https://web.archive.org/web/20160325221619/http://motherboard.vice.com/read/how-to-make-a-not-racist-bot

#10yrsago When the antibiotics run out, maybe we can use GMO maggots to stave off infection https://link.springer.com/article/10.1186/s12896-016-0263-z

#10yrsago King Arthur’s grave was a hoax invented by cash-strapped 12th C monks https://arstechnica.com/science/2016/03/medieval-monks-used-king-arthurs-grave-as-an-attraction-to-raise-money/

#10yrsago Eating from the trash of New York’s finest grocers and restaurants https://www.youtube.com/watch?v=MJmCUSb-ZVo

#10yrsago Catholic Church-owned insurer has secret files on paedophile priests https://www.theage.com.au/national/secret-archive-of-paedophile-crime-kept-by-catholic-churchs-insurers-20160317-gnlc6k.html

#10yrsago Names that break databases https://www.bbc.com/future/article/20160325-the-names-that-break-computer-systems

#10yrsago Cops arrest public defender who was representing her client, face no discipline https://www.techdirt.com/2016/03/23/complaint-board-finds-police-officers-violated-policy-arresting-public-defender-who-demanded-they-stop-questioning-her-clients/

#10yrsago Vulnerability in recorders used by 70+ manufacturers’ CCTV systems has been known since 2014 https://web.archive.org/web/20160322204109/https://kerneronsec.com/2016/02/remote-code-execution-in-cctv-dvrs-of.html

#10yrsago Ransomware hackers steal a hospital. Again. https://krebsonsecurity.com/2016/03/hospital-declares-internet-state-of-emergency-after-ransomware-infection/

#10yrsago STUCK: Public transit’s moment arrives just as public spending disappears https://web.archive.org/web/20160327040633/https://motherboard.vice.com/read/the-immobile-masses-why-traffic-is-awful-and-public-transit-is-worse

#10yrsago East Harlem’s secret museum of gorgeous junk rescued from NYC’s trash https://www.atlasobscura.com/articles/fascinating-photos-from-the-secret-trash-collection-in-a-new-york-sanitation-garage

#10yrsago Heatmaps of the human body in varying emotional states https://www.pnas.org/doi/10.1073/pnas.1321664111

#10yrsago Man exonerated after video shows unprovoked police beating, cops insist all is well https://arstechnica.com/tech-policy/2016/03/video-clears-texas-man-of-assaulting-cop-did-police-commit-perjury/

#10yrsago What you think about Millennials says a lot about you, nothing about them https://www.youtube.com/watch?v=-HFwok9SlQQ

#10yrsago Jerks were able to turn Microsoft’s chatbot into a Nazi because it was a really crappy bot https://web.archive.org/web/20160325221619/http://motherboard.vice.com/read/how-to-make-a-not-racist-bot

#10yrsago When the antibiotics run out, maybe we can use GMO maggots to stave off infection https://link.springer.com/article/10.1186/s12896-016-0263-z

#10yrsago King Arthur’s grave was a hoax invented by cash-strapped 12th C monks https://arstechnica.com/science/2016/03/medieval-monks-used-king-arthurs-grave-as-an-attraction-to-raise-money/

#10yrsago Eating from the trash of New York’s finest grocers and restaurants https://www.youtube.com/watch?v=MJmCUSb-ZVo

#5yrsago Dirty NYPD cops can't lose https://pluralistic.net/2021/03/26/overfitness-factor/#heads-you-lose-tails-they-win

#5yrsago Dreaming and overfitting https://pluralistic.net/2021/03/26/overfitness-factor/#dreamtime

#5yrsago Good news about news co-ops https://pluralistic.net/2021/03/25/facebook-has-a-facebook-problem/#good-news#5yrsago

#5yrsago Green investing is a fraud https://pluralistic.net/2021/03/24/greenwashing/#bargaining

#1yrago Trump loves Big Tech https://pluralistic.net/2025/03/24/whats-good-for-big-tech/#is-good-for-america

#1yrago Why I don't like AI art https://pluralistic.net/2025/03/25/communicative-intent/#diluted

#1yrago The AOC-Sanders anti-oligarch tour is all about organizing https://pluralistic.net/2025/03/26/not-me-us/#the-people-no

#1yrago Reality-Based Communities https://pluralistic.net/2025/03/27/use-your-mentality/#face-up-to-reality

#1yrago Big Tech and "captive audience venues" https://pluralistic.net/2025/03/28/street-pricing/#sportball-analogies


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, pounding the podium.



A screenshot of me at my desk, doing a livecast.

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

  • "The Reverse-Centaur's Guide to AI," a short book about being a better AI critic, Farrar, Straus and Giroux, June 2026 (https://us.macmillan.com/books/9780374621568/thereversecentaursguidetolifeafterai/)
  • "Enshittification, Why Everything Suddenly Got Worse and What to Do About It" (the graphic novel), Firstsecond, 2026

  • "The Post-American Internet," a geopolitical sequel of sorts to Enshittification, Farrar, Straus and Giroux, 2027

  • "Unauthorized Bread": a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2027

  • "The Memex Method," Farrar, Straus, Giroux, 2027



Colophon (permalink)

Today's top sources:

Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America. First draft complete. Second draft underway.

  • "The Reverse Centaur's Guide to AI," a short book for Farrar, Straus and Giroux about being an effective AI critic. LEGAL REVIEW AND COPYEDIT COMPLETE.
  • "The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.

  • A Little Brother short story about DIY insulin PLANNING


This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.

https://creativecommons.org/licenses/by/4.0/

Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.


How to get Pluralistic:

Blog (no ads, tracking, or data-collection):

Pluralistic.net

Newsletter (no ads, tracking, or data-collection):

https://pluralistic.net/plura-list

Mastodon (no ads, tracking, or data-collection):

https://mamot.fr/@pluralistic

Bluesky (no ads, possible tracking and data-collection):

https://bsky.app/profile/doctorow.pluralistic.net

Medium (no ads, paywalled):

https://doctorow.medium.com/
https://twitter.com/doctorow

Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):

https://mostlysignssomeportents.tumblr.com/tagged/pluralistic

"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla

READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.

ISSN: 3066-764X

Stranger Suggests: Gilded Age Yearning, Gay BDSM Workout Music, and An Avril Lavigne Musical [The Stranger]

One Really Great Thing to Do Every Day of the Week
by Julianne Bell MONDAY 3/30  

COBRAH

(MUSIC) For the uninitiated, COBRAH is the stage name of Clara Blom Christensen, a Swedish elementary school music teacher turned cunty lesbian underground pop diva who rose to fame amid Stockholm’s BDSM club scene. When I saw her at Capitol Hill Block Party in 2024, she pranced out in a corseted black bodysuit, latex gloves, and sheer black tights, flipping her platinum blonde mane around aggressively enough to break her neck. Her self-described "gay workout music" oozes confident sexuality: On her hypnotic hit track "GOOD PUSS," she purrs, “I just wanna feel good/Gotta lay down with some good kush/Got a good girl, a real good bush/Come and go get a real good puss” over hyperpop beats. Now she's touring to promote her debut full-length album, Torn, which reveals her vulnerable side and insecurities while still maintaining her danceable roots. (Showbox SoDo, 8 pm, all ages) JULIANNE BELL

TUESDAY 3/31  

Eliza McLamb

Eliza McLamb will bring her introspective indie pop to Neumos on Tuesday, March 31. ZOE DONAHOE

(MUSIC) I was introduced to North Carolina–born singer-songwriter Eliza McLamb via her podcast Binchtopia, but quickly became enamored of her incisive writing on her newsletter Words from Eliza and her introspective, clever indie pop. (McLamb recently stepped away from Binchtopia to pursue music full-time.) Last October, she released her sophomore album, Good Story, which explores her urges to self-narrativize and the stories she tells herself and others. “An effective narrative, I came to realize, is a reserve with limited returns,” she writes on Substack. “But I still love to work the magic—I love knowing that a bad time can be a good story, that experience without meaning is only missing a few narrative beats. I love the limits of the story, agency that was once out of reach returning through the act of creation and recreation.” (Neumos, 7 pm, all ages) JULIANNE BELL

WEDNESDAY 4/1  

Scorsese: The Age of Innocence

Don't you want to watch Winona Ryder and Daniel-Day Lewis in period-accurate Gilded Age costumes?

(FILM) Martin Scorsese has made countless iconic films about the Big Apple in different time periods, from Wall Street in the late ’80s (The Wolf of Wall Street) and decaying post-Vietnam New York City (Taxi Driver), to the city’s swanky jazz clubs of the 1940s (New York, New York). So naturally, he was the man for the job when it came to adapting fellow New Yorker Edith Wharton’s 1920 novel The Age of Innocence. Set in Gilded Age Manhattan, the story follows a messy love triangle between a young lawyer, his fiancée, and his fiancée’s newly separated cousin. This movie has everything: Winona Ryder, staggering period accuracy, decadent feasts, sweeping cinematography, and plenty of yearning glances. This is part of SIFF’s Martin Scorsese: Maestro of Cinema series, showing a different film by the director every Wednesday evening through the end of April. (SIFF Cinema Uptown, 7:30 pm) AUDREY VANN

THURSDAY 4/2  

FKA twigs

(MUSIC) Lady in the streets, freak in the beats chameleonic artist FKA twigs bares it all with every release, her late-2025 album Eusexua being no exception. Though I’m partial to her more experimental early work, twigs’ output the last few years has largely been remix-ready festival anthems, the deeper cuts of which fit in nicely with any mixtape you’re pulling together for a crush. The only time I’ve seen twigs was at Seattle’s Moore Theatre on her Magdalene tour, back in her swordplay and pole dancing days—one of the best live shows I’ve ever witnessed. Let’s see what she’s got in store for us this time. (WaMu Theater, 8 pm, all ages) NOLAN PARKER

FRIDAY 4/3  

Heather Kravas: RoCoCoCoCo

          View this post on Instagram                      

A post shared by Velocity Dance Center (@velocity_seattle)

(DANCE) Longtime Seattle choreographer and dancer Heather Kravas has put together a contemporary dance series in late March through early April. RoCoCoCoCo has four movements—all take place in the black box theater at 12th Avenue Arts, all feature a different combination of dancers, and all will be accompanied by two pianists playing on two upright pianos that are bound together. You can see these dances—which are described like a DIY folk dance—unspool over four evenings, or if you haven’t rotted the fuck out of your attention span, you can opt for the marathon version and watch 4.5 hours of dance in one evening and see everything all at once. Whatever you choose, RoCoCoCo will be an experience you shouldn’t miss. (12th Avenue Arts, 7:30 pm) NATHALIE GRAHAM

SATURDAY 4/4  

The Best Damn Thing

          View this post on Instagram                      

A post shared by Dacha (@dachatheatre)

(THEATER) My introduction to Avril Lavigne was when my friend received a CD copy of Avril’s seminal 2002 album Let Go at her 12th birthday party. It was the turning of a tide in my angsty tween years, this arrival of a bold new Canadian musician who piled on the dark, smudgy eyeliner and thumbed her nose at the pop industry. I began poring over her interviews in YM magazine and raiding my dad’s closet for neckties. Hanna Kime and Sara Geist’s new meta-musical, The Best Damn Thing, aims to capture this spirit of youthful rebellion, telling the story of gay Midwestern teens Ellie and Rachel, who are determined to spread the gospel of Avril by putting on the best damn pop-punk jukebox musical this town has ever seen. The whimsical company Dacha Theatre will host its West Coast premiere, directed by Kate Drummond. (Dacha Theatre, times vary) JULIANNE BELL

SUNDAY 4/5  

Nonfiction for No Reason

Get a taste of the local literary scene at the Nonfiction for No Reason reading series. BILLIE WINTER

(READING) Nonfiction for No Reason is back, baby. After an almost year-long hiatus, this local reading series is opening up their season at the ANTiPODE Art Gallery. Founded and curated by Stranger contributor Katie Lee Ellison, NFNR is a rare place to connect to the local literary scene, and hear “writers you love, and the ones you will soon.” This month, you can see Seattle poet laureate Dujie Tahat, experimental poet Sullivan Forderhase, speculative fiction writer Naomi Day, public historian Tamiko Nimura, and essayist Aileen McGraw. It’s a comeback worth catching. (ANTiPODE, 7 pm, all ages) HANNAH MURPHY WINTER

:zap: Prizefight! :zap:

Win tickets to rad upcoming events!*

Squatchcon
April 9-12
Port Angeles, WA

ENTER NOW!

Contest ends March 30 at 10 a.m.

*Entering PRIZE FIGHT contests by submitting your email address signs you up to receive the Stranger Suggests newsletter. You can unsubscribe at any time.

Slog AM: Seattle Crowds, a Moon Mission, and Waymos That Can’t Stop Illegally Passing School Buses [The Stranger]

The Stranger's morning news roundup. by Vivian McCall

Anti-Trump Crowds: A third No Kings rally in Seattle saw tens of thousands of people march through downtown. There were about 3,100 demonstrations in cities and towns in every state, and about a dozen in the Pacific Northwest.

Train Crowds: The biggest hype over the weekend was the unveiling of the light rail’s long-awaited cross lake connection. It’s kind of a big deal. The thousands of people who came out to celebrate and waited in hours to ride the rails thought so, too.  Nathalie got a sneak peek last week.

Moon Party: The Museum of Flight is hosting a free watch party on Wednesday for the launch of Artemis II, the first crewed mission to the moon since the end of the Apollo era in 1972. The ship’s trip around that rock should last about 10 days. For the astronauts’ sake, I hope the administration didn’t rush the plan.

New Ways to Leave the United States: After a pandemic hiatus, nonstop flights to Hong Kong have returned to Sea-Tac via airline Cathay Pacific. This Spring, Alaska Airlines will start nonstop service to Rome, London, and Reykjavík, Iceland. Look, national pride is low. Space is cool, but it’s hard to get excited about when everything is so fucked up at home.

Speaking of: ICE has taken a liking to ruining the fragile vibe at our airports and might just stick around even after TSA gets paid again. It depends on how many TSA agents come back to work, border Czar Tom Homan said on CNN’s “State of the Union.” About 500 TSA agents have quit since the shutdown began, but with the possibility of a paycheck though a Trump order, security lines started to shrink.

Iran: Iran will face “severe consequences” if the Strait of Hormuz remains closed after the war, Secretary of State Marco Rubio told Al Jazeera. The strait will open one way or another, he said. I thought Trump said we didn’t need it?

One Way: Today, Trump threatened to destroy Iran’s energy resources and civilian infrastructure like desalination plants if a deal to end the war is not reached “shortly.” There’s no end in sight, writes the AP. Trump has said the US is making diplomatic gains, but Tehran denies negotiating with him directly.

So You’ve Been Poped: “God doesn’t accept the prayers of those who choose violence,” Pope Leo XIV said of the war during a 10-minute Palm Sunday homily. He reminded his audience Jesus was the King of Peace, not a justification for political power. Certainly no one would invoke him that way, would they? After all he’s been through? If JD Vance were a real Catholic, he’d be ashamed.

Fuck Those Kids! According to Waymo, its self-driving cars learn from their mistakes, just like real drivers. But in Austin, Texas, these clankers struggled to learn to stop for the school bus when it picked up children. An official with the Austin Independent School District alleged that in at least 19 cases, Waymos “illegally and dangerously” passed buses with flashing red lights and extended stop arms. Even after a December federal recall and a software update, Waymo’s illegal bus passing continued. The National Transportation Safety Board is investigating. Wired has more on how the district tried to help solve this problem.

Relevant:

"He's arguing with the robots! You can't defeat the robots!" is an all-time great call

[image or embed]

— Parker Molloy (@parkermolloy.com) March 30, 2026 at 7:39 AM

Weather: Areas of freezing fog before 10 a.m., before a chilly, sunny day with a high of 49 degrees. Tonight, the clouds roll in and stick around through most of Tuesday. Rain returns Wednesday and Thursday, but the sun will come back by the weekend.

18:21

Dunk And Egg [Penny Arcade]

New Comic: Dunk And Egg

18:00

17:42

Taking a (short) break [Charlie's Diary]

It's the end of March. Since the last blog update I've had my second cataract surgery (it went much better this time), written a portion-and-outline of a new novel (for my agent, who will hopefully have feedback or maybe just go ahead and sell it so I can write the rest), and ... been diagnosed with exertional angina. Happy joy. I swear, you hit 60 and the warranties on all your body parts expire simultaneously. (NB: keep your medical advice to yourselves!)

We've also been treated to the unedifying sight of the Paedopotus Rex attacking Iran for no sane reason (the main beneficiary appears to be Benjamin Netanyahu), setting off a conflagration in the Middle East that is already having global repercussions. Per United Airlines, aviation fuel is expected to be over $175 a barrel through the end of 2027 even if the Straits of Hormuz are unblocked within a week or two; J. P. Morgan prognosticate that the last pre-closure consignments through the Straits should be reaching European ports this week, the far east in about 10 days, and the USA by the middle of April, after which all bets are off. Supply chain shocks, here we come!

It's not just crude oil, of course, although it's looking as if the shortages we're in for are going to be as bad as both the oil crises of the 1970s stacked. About 30% of the world's ammonia, required as a feedstock for fertilizer, is manufactured close to the gas wells in the region. And it's getting into growing season in the northern hemisphere. This promises to spike the price of food and trigger famines and eventually revolutions in poorer nations.

Helium, vital for any number of advanced tech (such as hard disk drives, semiconductor fab lines, MRI machines ...) is a by-product of natural gas wells: about 20% of the global supply comes from the Gulf. So TSMC, Samsung, and the other fabs will be hitting crisis levels of supply shortages within a few weeks.

This is not only an emergency for fuel, food production, and electronics: it's going to trigger inflation globally. Iran has had the great idea of allowing ships through the Straits of Hormuz if they pay a transit fee of about US$2M ... in Yuan. Which means oil is now de facto denominated in Chinese currency, not dollars (great win for Trump!).

The truth of the matter is, we're being forced to confront an iron law of economics: you can optimize a system for efficiency or for robustness, but not for both. Just-in-time supply chains are efficient, but there's no slack in the system. Systems with warehousing and storage and redundancy built-in are resilient, but they're not efficient. And over the past 50 years we've abandoned them, in the name of efficiency, so that the excess capacity could be sold off and turned into profits. This war is payback time for the cult of efficiency over robustness in business.

As for the war itself, it's a shit-show. Mass murder of innocent schoolgirls aside, Pete Hegseth is demonstrating the truth of the aphorism that lieutenants study tactics, majors study strategy, generals study logistics, and field marshalls study economics. Going by his demonstrated expertise, Hegseth is clearly a lieutenant: he seems mystified that the US defense industry giants can't throw together a new factory producing Tomahawk or Patriot missiles in a week. (He seems to have AI-pilled himself into believing that all military hardware problems can be solved in software. Or maybe he just believes that his Warrior Jesus will provide.)

I would have more to say on this subject if I wasn't gibbering in a corner about the stupidity of it all, but meanwhile I have hospital and other appointments coming up, then a science fiction convention at the weekend. I'll try to lighten the topic of conversation when I get back: this reality is getting to me (again).

16:07

Link [Scripting News]

I had to say this to Claude just now. "this is exhausting. you're driving me around in circles and saying over and over 'this is it!' and it never is. us humans have protections built in to avoid that kind of wasted effort."

15:49

[$] Rust's next-generation trait solver [LWN.net]

Rust's compiler team has been working on a long-term project to rewrite the trait solver — the part of the compiler that determines which concrete function should be called when a programmer uses a trait method that is implemented for multiple types. The rewrite is intended to simplify future changes to the trait system, fix a handful of tricky soundness bugs, and provide faster compile times. It's also nearly finished, with a relatively small number of remaining blocking bugs.

15:28

The Big Idea: EC Wolfe [Whatever]

Though we flip through a story’s pages as quickly as our eyes allow, do we ever stop to think about the story that lies in between the pages? The one that happens off-screen, out of sight, and in the background? Author EC Wolfe has, and she used these thoughts to craft a new novel in her Kerovosian Chronicles series, Shrike.

EC WOLFE:

I’m sure I’m not the first to say that real characters and stories don’t have to come from some deep place to be compelling.  Compelling characters and stories come from real places, places that we can connect to as individuals.  This is why, as an author, I spend a lot of my time asking “What if?”  Granted, asking the question aloud has gained me a reputation for being a little bit weird, but asking the questions of myself and then answering them on paper has gained me a reputation as an author.

My hard drive is full of answers to “What if?” left in folders labeled Scrap.  These ideas languish in digital purgatory until I can answer the next question, “What happens next?”  The answer to that question is singularly responsible for the second two books in the Water Girl series; I just kept answering it.

Shrike is different.

Shrike is the sixth book in the Kerovosian Chronicles, but it’s not “What happens next?” nor is it “What if?”   Shrike is the answer to a question that could have been asked in books one through five, but those books were about Chana and Thorne, and Voil and Kade, and Navi and Harker, and Ceff and Nythan, and Kerovos.

But this book isn’t about them.  It’s about the ones who brought Kerovos’s plan to fruition and yet were little more than a footnote for their troubles.  Shrike isn’t about what happens next, it’s what happened when we weren’t looking.  The Shrikes didn’t just appear and help out of the goodness of their hearts, so where did they come from?  What sort of person would take Kerovos up on a job offer?  What did it cost them and what did they gain?  Did anyone ever know what they did?

It stuck out to me that there were several stories left untold once I’d finished the fifth book, several characters that deserved the pages necessary to explain their motives, their victories, and their failures.  Like ours, the world of the Kerovosian Chronicles is full of players shuffling about on a game board, for good or ill.  Some of them stood out more, and like a tag you can’t rip out, it bothered me until I took the time to figure out why.  I realized that Kerovos had taken their glory in his eponymous book and I felt compelled to give it back to them.  It’s an honor to grant them the story they’d been denied, these characters who made choices just like you or I.  Hard choices.  Painful choices.

Like any other characters of my invention, these characters aren’t perfect.  It feels disingenuous to write perfect people since I have yet to find a person, now or in history, who was or is.  Instead, these characters are real because they aren’t perfect.  As I mentioned, it’s not deep.  You can throw a little deus ex machina in there to help them along but it’s still about the choices people make.  There are always more What Ifs and scrap on the hard drive, but for now, I’m happy to share Shrike.  A story about real people and the answer (but not really) to yet another “What happens next?”


Shrike: Amazon

Author’s socials: Facebook

14:21

Security updates for Monday [LWN.net]

Security updates have been issued by AlmaLinux (freerdp, golang, and ncurses), Debian (asterisk, bind9, gst-plugins-base1.0, gst-plugins-ugly1.0, gvfs, incus, libxml-parser-perl, nodejs, php-phpseclib, php-phpseclib3, phpseclib, and strongswan), Fedora (bcftools, bind, bind-dyndb-ldap, chromium, dotnet10.0, dotnet8.0, dotnet9.0, giflib, htslib, libsoup3, libtasn1, maturin, mingw-expat, mingw-freetype, mongo-c-driver, perl-XML-Parser, php-phpseclib, php-phpseclib3, pypy, pypy3.10, pypy3.11, python-cryptography, python-fastar, python-ply, python-pycparser, python-uv-build, python3.11, python3.12, python3.13, python3.6, roundcubemail, rubygem-json, rust-ambient-id, rust-astral-reqwest-middleware, rust-astral-reqwest-retry, rust-astral-tokio-tar, rust-astral_async_http_range_reader, rust-cargo-c, rust-ingredients, rust-native-tls, rust-nix, rust-openssl-probe, rust-openssl-probe0.1, rust-pty-process, rust-reqsign, rust-reqsign-aliyun-oss, rust-reqsign-aws-v4, rust-reqsign-azure-storage, rust-reqsign-command-execute-tokio, rust-reqsign-core, rust-reqsign-file-read-tokio, rust-reqsign-google, rust-reqsign-http-send-reqwest, rust-reqsign-huaweicloud-obs, rust-reqsign-tencent-cos, rust-rustls-native-certs, rust-sequoia-chameleon-gnupg, rust-tar, rust-webpki-root-certs, rustup, samtools, suricata, uv, and vim), Mageia (cmake, libpng, nodejs, python-ujson, and strongswan), Red Hat (python3 and python3.9), SUSE (389-ds, amazon-cloudwatch-agent, capstone, chromium, containerd, cosign, curl, docker-compose, docker-stable, exiv2, expat, firefox, freeipmi, freerdp, gimp, glusterfs, govulncheck-vulndb, gstreamer-plugins-ugly, jupyter-bqplot-jupyterlab, jupyter-jupyterlab-templates, jupyter-matplotlib, kea, kernel, libsodium, libtpms-devel, LibVNCServer, nghttp2, nginx, poppler, python-dynaconf, python-ldap, python-nltk, python-orjson, python-pyasn1, python-pydicom, python-PyJWT, python-pyopenssl, python-tornado6, python311, python311-cbor2, python311-deepdiff, python311-intake, python311-jsonpath-ng, python311-lmdb, python311-oci-sdk, python312, rclone, redis, salt, tomcat11, v2ray-core, and vim), and Ubuntu (linux-ibm-5.4).

13:49

Link [Scripting News]

Yesterday I ran a podcast, a voicemail to NakedJen saying she could/should use Claude or ChatGPT to create software. Later that day she told me about the software she had written. I tried using it, and and then interrogated ChatGPT which had been her programming partner, to explain what she did and what the app does. I'm not sure I have the actual story yet, have to talk with Jen live. But it turns out that the thesis was correct, and she was already using ChatGPT, had even given it a name -- Harry, and was delegating tasks that I would want to use. Of course she was. Now I have to learn more from her about what she's doing. Stay tuned.

Link [Scripting News]

On Feb 8, two months after Firefox announced they were pivoting to AI, I wrote a piece saying in 9 points what I would do if I ran Firefox, instead of what they were doing. Now a few weeks later, has there been any further development of this idea?

13:07

Link [Scripting News]

There's something incredibly funny about slapstick and farting. I was flipping channels the other day and came across an old WC Fields movie. I used to love them when I was a kid, but figured now, with so many many fancier forms of entertainment this wouldn't get to me, but I was laughing uncontrollably the whole way through. Later, I caught a SNL skit with a boss being surprised by her employees with a Happy Birthday celebration and started farting uncontrollably. They're indulging in body-humor thanks largely (I think) to Sarah Sherman whose whole comedy schtick is about disgusting things about the human body, esp her own. The boss was played by Ashley Padilla, another SNL superstar. Everything she does is funny, esp farting. Even now, rewatching the segment, I couldn't help but laughing loudly. Farts are funny. I have no idea why.

Software, in a Time of Fear [Radar]

The following article originally appeared on Medium and is being reproduced here with the author’s permission.

This 2,800-word essay (a 12-minute read) is about how to survive inside the AI revolution in software development, without succumbing to the fear that swirls around all of us. It explains some lessons I learned hiking up difficult mountain trails that are useful for wrestling with the coding agents. They apply to all knowledge workers, I think.

Up front, here are the lessons:

  • Stop listening to people who are afraid.
  • Seek first-hand testimony, not opinions.
  • Go with someone much more enthusiastic than you.
  • Do not look down.
  • You must get different equipment.
  • Put the summit out of your mind.

Yet I hope you stay for the hike up.

Precipice Trail. Image from Wikimedia Commons.Precipice Trail. Image from Wikimedia Commons.

The photo above was taken high up on a mountain. It’s a very long drop down to the right. If you fell off the path in a few places, you’d almost certainly die.

Would you like to walk along it?

Most would say: No way.

But what if I told you that while this photo is quite real, it is misleading. It isn’t some deserted place. It is in America’s busiest national park. The railings and bars on that trail are incredibly strong, even when they are strangely bent around corners. Thousands of people walk along that path every year, including children and older folks. The fatality rate is approximately one death every 30 years.

In fact, my 13-year-old son and I did that climb—which is called Precipice Trail—last summer. We saw other people up there, including a family with kids. It was an incredible adventure. And the views are stunning.

A son climbing part of Precipice TrailMy son climbing part of Precipice Trail

Yes, it was a strenuous climb, and was certainly scary in some places. Even though I had done a lot of other hard trails, I was extremely nervous. If my fearless son wasn’t with me, I’d never have done it.

When we got to the top, out of habit, I told my son, “I am proud of you for accomplishing this.” He rolled his eyes and said, “I am proud of you.” He was right. I was the one at risk. (That did hurt a little bit.)

Yet I learned some things about fear from hiking the hardest trails in Acadia, which I’d never have imagined myself doing a few years ago.

As a lifelong software developer confronted by these extraordinary coding agents, I believe the future of our profession is atop an intimidating mountain whose summit is engulfed in clouds. Nobody knows how long the ascent is, or what lies at the top, though many people are confidently proclaiming we will not make it there. We are told only the agents will be at the summit, and we should therefore be afraid for our livelihoods.

I have far less confidence that the agents will put us all out of work. Though I don’t see all of us making it up that mountain, I intend to be one of them.

Still, there is so very much fear in our field. It is so…unfamiliar! It swirls around every gathering of technologists. I was at a conference last year where the slogan was the very-comforting “human in the loop.” Yet a coworker of mine noticed, “A lot of the talks seem to be about taking the human out of the loop.” Indeed. And I know for a fact that some great developers are quietly yet diligently working on new tools to make their peers a thing of the past. I hear they are paid handsomely. (Perhaps in pieces of silver?) Don’t worry, they haven’t succeeded yet.

This revolution—whatever this is—isn’t like the other technological revolutions which barged into our professional lives, such as the arrival of the web or smartphone apps. There was unbridled optimism alongside those changes, and they didn’t directly threaten the livelihoods of those who didn’t want to do that kind of work.

This is quite different. There is tremendous optimism to be found. Though I find it is almost entirely among the financially secure, as well as those with résumés decorated with elite appointments, who are confident they will merit one of the few seats in the lifeboats as the ocean liner slips into the deep carrying most of the people they knew on LinkedIn. (They’re probably right.) Alas, we can’t all be folks like Steve Yegge, can we?

For the rest of us who need to pay bills and take care of our children, there is fear. Some are panicked they will lose their jobs, or are concerned about the grim environmental, political, and social consequences AI is already inflicting on our planet. Others are climbing up the misty mountain steadily, yet they are still distressed that they will miss some crucial new development that they must know to survive and watch videos designed to make them more afraid. Still others refuse to start climbing and are silently haunted by the belief that their reservations are no longer valid.

Though we were so for my entire life, we can no longer be seen as a profession looking to the future. Instead, most of us are looking over our shoulders and listening for movement in the tall grass around us.

I too have been visited by a fear of the agents on many occasions over the past few years, but I keep it at bay…most nights.

One of the best ways I learned to manage it is pretty simple:

Stop listening to people who are afraid.

It’s odd to decide not to listen to so many people in your field, including nearly everyone in social media. I’ve never done this before.

Yet I learned this unexpected lesson when I was confronted by another difficult mountain in Acadia National Park a few years ago: Beehive.

Beehive mountain in Acadia National Park

Beehive is a well-known Acadia trail that has some sheer cliffs and is not for anyone truly afraid of heights. (The photo above is of three of my children climbing it a few years ago. Over the right shoulder of my 12-year-old daughter in the center is quite a drop.)

It was Beehive, and not Precipice, that taught me an unexpected lesson about popularity and fear that applies to AI.

So Beehive has an interesting name, is open most of the year, is close to the main tourist area and parking lots, and is often featured on signs and sweatshirts in souvenir stores. I even bought a sign for my attic.

Sign in Ed Lyons's attic for Beehive trail

Want Radar delivered straight to your inbox? Join us on Substack. Sign up here.

My older kids and I had done a lot of tough trails in Acadia over a few wonderful summers, and I wondered if we could handle Beehive. I started checking the online reviews. It sure sounded scary. I went to many websites and scanned hundreds of reviews over several days. The more I read, the less I wanted to try it.

Worse, the park rangers in Acadia are trained to not give anyone advice about what trail they can handle. (I get it.) No one else I spoke to wanted to tell a family they should try something dangerous. Everyone shrugged. It added to the fear.

Yet I saw conflicting evidence.

Warning on the trail

My research showed that only one person fell to their death decades ago, and the trail was modified after that. Also, many thousands of people of all types, including children and senior citizens, have done it without injury. On top of that, the mountain was not that high, and the difficult features it had, which I could see from detailed online photos, seemed quite similar to things we had done on a few other difficult trails. It didn’t seem like a big deal.

How could both things be true? Were they?

The truth was much closer to the second version, vindicated after we climbed it. It was a little scary at times, but wasn’t that physically challenging. It was fun, and something you could brag about among people who had heard it was scary, but who had not actually climbed it.

I do have a slight fear of heights, so I kept climbing and never turned to look down behind me. This brings me to another lesson:

You really never have to look down.

It’s amazing how people feel an obligation to once in a while look down to see what they’ve accomplished or to notice how high up they were or judge how dangerous the thing they just climbed looks from above. It often causes fear. I decided getting to the top was all that mattered, and I could look down only from up there. This is a question of focus.

I can think of many moments in learning to use and orchestrate coding agents where I unwisely stopped to “look down.” This takes the form of pausing and asking yourself things like:

  • “Is this crazy technique really necessary? Isn’t the old way good enough?”
  • “What about my favorite programming languages? Will languages matter in the future?”
  • “What is the environmental cost of my queries?”
  • “Am I getting worse at writing code myself?”
  • “What if this agent keeps getting better? Will it get better than me?”
  • “Am I missing some new AI development online right now? Should I check my feeds?”

None of those ruminations will help you get better with the agents. They just drain your energy when you should either rest or keep climbing.

I now see Beehive as an “attention vortex.” Because a lot of people talk about it, and because dramatic statements from the fearful and those boasting about their accomplishments dominate the reviews. The talk about Beehive is not tethered to the reality of climbing it.

Strangely, the cachet of having climbed it depends on the attention and fear. It made those who climbed it feel better about what they had done, and they had little interest in diminishing their accomplishment by tamping down the fear. (“Well, yes, it was scary up there!”) Nobody is invested in saying it was less than advertised. This insight is precisely why the loud coding agent YouTubers act the way they do.

AI is a planetary attention vortex. It has seemed like the only thing anyone in software development has talked about for over a year. People who quietly use the agents to improve their velocity—and aren’t particularly troubled by that—are not being heard. You aren’t seeing calm instructional videos from them on YouTube. We are instead seeing 30-year-olds pushing coding agent pornography on us every day, while telling us that their multiple-agent, infinite-token, unrestricted-permissions-YOLO workflow means we are doomed. (But you might survive if you hit the subscribe button on their channel, OK?) These confident hucksters are still peddling fear to keep you coming back to them.

Above all else, stop listening to anyone projecting fear. (Yes, you cannot avoid them entirely as they are everywhere and often tell you their worries unprompted.)

You must find useful information and shut out the rest. This is another lesson I learned:

When in an attention vortex, seek firsthand testimony, not opinions.

So the way I finally figured out Beehive wasn’t that bad was from some guy who took pictures of every part of the trail. I compared them to what I’d done on similar trails, such as the unpopular but delightful Beech Cliff trail, which nobody thought was truly dangerous and gets almost zero online attention.

When it comes to AI, I have abandoned opinions, predictions, and demos. I listen to senior people who are using agents on real project work, who are humble, who aren’t trying to sell me something, and who are not primarily afraid. (Examples are: Simon Willison, Martin Fowler, Jesse Vincent, and yes, quickly hand $15 each month to the indispensable Pragmatic Engineer.)

When it came to Precipice, widely acknowledged as the hardest hiking trail in Acadia, I took a different approach. (It’s actually not a hiking trail but a mountain climb without ropes.) Using the same investigative techniques I’d learned from Beehive, I found out it was three times longer and had scarier moments.

This gets us to another lesson.

Go with someone much more enthusiastic than you.

I don’t know how, but my athletic 13-year-old son is a daredevil. He’s up for any scary experience. I do not usually accompany him on the scary roller coasters.

He was totally up for Precipice, of course. Dad was very nervous.

But I knew that if anyone could drag me up that mountain, it was him. I also didn’t want to let him down. In fact, I almost decided to abort the mission at the bottom of the trail. I just sighed and thought, “I will just do the beginning part. We can duck out and take another route down until about one-third of the way up.”

So if you’re not sure how to use AI, or are not yet enthusiastic, find people who are and keep talking to them! You don’t have to abandon your friends or coworkers who aren’t as interested. Instead, become the enthusiast in their world. (That is what happened to me more than a year ago.)

Another reason I decided not to give up is that I bought different shoes.

You can hike most trails in regular sneakers in almost any condition. But since Precipice is a climb and not a hike, I realized my usual worn-out running shoes might not be up for that, as I had slid on them during a lesser climb elsewhere that week.

So while in nearby Bar Harbor, my family ducked into a sporting goods store and looked at hiking shoes for me and my son. I told the sales guy we were going to do Precipice. He raised an eyebrow and said I would of course need something good for that.

When I held the strange shoes in my hand, I looked at the price tag and then looked at my wife, who gave a knowing look back at me that surely meant, “OK, but you do realize that you actually have to climb it if we buy those.” I just nodded.

Ed's new climbing shoes

And we needed those new shoes! My son and I had a few tense moments scrambling where we agreed it was quite good we had them. But all along the way, they felt different, which was what I needed.

This reminds me of when I decided to use Claude Code a few weeks after it came out last March. The tokens cost 10 times what I could get elsewhere. But suddenly I was invested.

It also mattered that Claude Code, as a terminal, was a very different development experience. People back then thought it was strange that I was using a CLI to manage code. It was really different for me too, and all the better: I was no longer screwing around with code suggestions in GitHub Copilot.

This is a lesson I have taken to AI:

You must get different equipment.

You should be regularly experimenting with new tools that make you uncomfortable. Just using the new AI features in your existing tool is not enough for continuous growth or paradigm shifts, like the recent one from the CLI to multiple simultaneous agent management.

The last idea I have is to stop thinking about where all of us will end up one day.

Put the summit out of your mind.

While climbing Precipice, I decided to only think of what was in front of me. I knew it was a lot higher than Beehive. I just kept doing one more tough piece of it.

The advantage of doing this was near the top. Because the scariest piece was something I didn’t notice from online trail photos.

You can get an idea of what I’m talking about from this photo from Watson’s World, which I had not seen before I got up there. It shows a long cliff with a very short ledge (much shorter than it looks at this angle). Even the picture doesn’t make it clear just how exposed you are and that there is nothing behind you but a long, deadly fall. The bottom bars are to prevent your feet from slipping off.

When I came to it, I thought, “No…way.”

But there was no turning back by then. I had come so far! I looked up and saw the summit was just above this last traverse. So I just held onto the bars, held onto my breath, and moved carefully along the cliff right behind my son, who was suddenly more cautious.

Had I known that was up there, I might not have climbed the mountain. Good thing I didn’t know.

As for the future of software, I don’t know what lies further up the mountain we are on. There are probably some very strenuous and scary moments ahead. But we shouldn’t be worrying about them now.

We should just keep climbing.

CodeSOD: Three Minutes [The Daily WTF]

Angela's team hired someone who was "good" at SQL. When this person started, the team had some regular jobs which ran in the mornings. The jobs were fairly time consuming, and did a lot of database IO. When their current database person left for another job, they hired someone who had a "good grasp" on SQL. We'll call him Barry.

Barry started out by checking the morning jobs every day. And over time, the morning jobs started getting slower and slower. That was a concern, but Barry swore he had it under control. Barry did not share that a handful of slow queries- queries which took three or so minutes to run- had suddenly started taking 75+ minutes to run. Barry didn't think about the fact that a little time with the query planner and some indexes could have probably gotten performance back to where it should have been. Barry saw this problem and decided: "I'll write a Python script".

import time
from datetime import datetime, timedelta
import pytz   # for time zone

current_date = datetime.now()
day_number = current_date.weekday()  # integer value: 0 is Monday
hub_1_ready = False
hub_2_ready = False
hub_1_results = []
hub_2_results = []
job_ran_later = False # If this job is manually run later in the day, avoid sending a "both hubs failed" email



# Monday (day_number 0) runs later than the other 6 days
if day_number == 0:  
    end_time = datetime.strptime("08:30", "%H:%M") 
    end_time = end_time.time() # get just the time portion
else:
    end_time = datetime.strptime("07:30", "%H:%M")  
    end_time = end_time.time() # get just the time portion

# If this job is run later in the day than the normaolly scheduled time
if datetime.now(pytz.timezone('US/Central')).time() > end_time:
    job_ran_later = True 


# Starting when Morning jobs are scheduled to kick off, check for completion of both hubs every 3 minutes until end_time. If both hubs are not a Success by end_time, an email is sent
while datetime.now(pytz.timezone('US/Central')).time() < end_time:
    h1 = session.sql("SELECT LOG_STATUS FROM PROD_CTRL.CTRL.DRB_EXECUTION_LOG WHERE LOG_PROJECT = 'SRC_PROD_1' AND date(log_start_date) = current_date AND date(LOG_END_DATE) = current_date").take(1)
    hub_1_results = []
    hub_1_results.append(h1)
    if str(hub_1_results[0]) == "[Row(LOG_STATUS='SUCCESS')]":
        hub_1_ready = True 
    

    h2 = session.sql("SELECT LOG_STATUS FROM PROD_CTRL.CTRL.SRC_EXECUTION_LOG WHERE LOG_PROJECT = 'SRC_PROD_2' AND date(log_start_date) = current_date AND date(LOG_END_DATE) = current_date").take(1)
    hub_2_results = []
    hub_2_results.append(h2)
    if str(hub_2_results[0]) == "[Row(LOG_STATUS='SUCCESS')]":
        hub_2_ready = True 
    
    
    # If both hubs are Success, then break out of while loop, even if it's not end_time yet
    if hub_1_ready == True and hub_2_ready == True:
        break

    time.sleep(180) # Sleep for 3 minutes before trying again

    


if  not hub_1_ready and not hub_2_ready and job_ran_later == False:
    message = "Neither Hub_1 nor Hub_2 finished in time for Morning jobs."
    context.updateVariable('METL_MESSAGE', message)
    raise ValueError("send email: "+message)
elif hub_1_ready == False and hub_2_ready == True:
    message = "Hub_1 did not finish in time for Morning jobs."
    context.updateVariable('METL_MESSAGE', message)
    raise ValueError("send email: "+message)
elif hub_1_ready == True and hub_2_ready == False:
    message = "Hub_2 did not finish in time for Morning jobs"
    context.updateVariable('METL_MESSAGE', message)
    raise ValueError("send email: "+message)
elif job_ran_later == True:
    message = "This job was run manually later in the day. Check that both Source hubs have completed. If you did not run this job, you can probably ignore this email."
    context.updateVariable('METL_MESSAGE', message)
    raise ValueError("send email: "+message)

I don't particularly like any of this. Some of it is just little ugliness, like the fact that job_ran_later and the closing if statements could be written to be much more clear. Or the way that, after our main while loop, which we'll come back to, we compare boolean variables against boolean literals.

The core of it is the while loop, which checks the current time, and while it's before the target end time, it runs a pair of queries. For each query it runs, it empties an array, then append the results (which we know is only one value, because they take(1)) to the array. Then they check the first element of the array against an expected string.

Why the arrays? Who knows. Perhaps at one point they thought they'd keep the results from multiple iterations, then decided against it. Why do the check against the string in the Python code and not the query? No idea, but maybe I don't have a "good grasp" of SQL. That said, with my bad grasp, I'm pretty sure I could figure out how to do all that in one single query and not two that are almost identical.

In any case, if we don't see what we want in the database, we sleep for three minutes, then try again.

At the end of the process, we check what happened and output messages and raise exceptions based on what we did see in the database.

It's also worth noting that Angela's team used a pretty reasonable job management system. All of their other scripts doing similar jobs didn't include retry logic inside themselves- they just failed. That let the job runner decide whether or not to retry, and that allowed all sorts of valuable configuration options that are more fine grained than "sleep for 3 minutes".

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!

12:49

Apple’s Camera Indicator Lights [Schneier on Security]

A thoughtful review of Apple’s system to alert users that the camera is on. It’s really well-designed, and important in a world where malware could surreptitiously start recording.

The reason it’s tempting to think that a dedicated camera indicator light is more secure than an on-display indicator is the fact that hardware is generally more secure than software, because it’s harder to tamper with. With hardware, a dedicated hardware indicator light can be connected to the camera hardware such that if the camera is accessed, the light must turn on, with no way for software running on the device, no matter its privileges, to change that. With an indicator light that is rendered on the display, it’s not foolish to worry that malicious software, with sufficient privileges, could draw over the pixels on the display where the camera indicator is rendered, disguising that the camera is in use.

If this were implemented simplistically, that concern would be completely valid. But Apple’s implementation of this is far from simplistic.

11:35

Grrl Power #1447 – Meat? [Grrl Power]

Fogo de Chão is my go-to for fancy restaurants. Birthdays, wanting to suffer from a delicious meat coma, other reasons… I’m sure there are some. It’s not really a Valentines Day place. Because the meat comas aren’t conducive to post-V-Day activities. Sure, you can go to other “fancier” steak places and spend $60 on an 8-ounce steak, or you can do churrascaria and get all you can eat amazing steak. The math works for me. It used to be my favorite thing to get there was the house special, Picanha, which is the “prime part of the top sirloin,” and don’t get me wrong, it’s a fantastic piece of meat, but over time, I migrated to the bottom sirloin. It’s like… a looser… weave? I like it. Go eat some.

There’s something wrong with that couch if flopping on one side of it makes you pop up all the way around the L-bend. Maybe it’s a single-piece inflatable couch. Oh! Maybe it’s a water-couch.

You know, if you had a machine that could just make quantumly-perfect meat, like, say you Star Trek style transported a cow, and kept it in the pattern buffer… I mean, kept a copy in the pattern buffer, then every once in a while, you energize just the ribeye part… it’d be perfectly ethical meat, right? It’d be just tissue.  But beyond that, if could just make meat, I guess you’d have a library of pattern buffer meats you could print – why couldn’t you make other food? I don’t mean like, celery, I mean, couldn’t you invent food? Like, categories of food. Not meat or cheese or vegetables. Like cheese combined with… celery. NO! BAD IDEA! That would be absolutely… like… string cheese. Huh.

I know, food is just proteins and starches and sugars and all that, but surely you could make some food that’s like part ham and part avocado. Oh, geeze, that would be an upsetting texture. No, not some combo of two other foods, like a totally new kind of food. It would probably be hard to do, since most stuff you’d come up with would be either nutritionally inert or poisonous.

(The Cuisine Forge 5000 didn’t create meat from a pattern buffer, it transported meat… from sources. At random… It just worked at such an extreme range (measured in thousands of light years) that no on realized it for several years.)


Ah! I thought I had more time till March. I’m bad at looking at dates apparently.

Here is Gaxgy’s painting Maxima promised him. Weird how he draws almost exactly like me.

I did try and do an oil painting version of this, by actually re-painting over the whole thing with brush-strokey brushes, but what I figured out is that most brushy oil paintings are kind of low detail. Sure, a skilled painter like Bob Ross or whoever can dab a brush down a canvas and make a great looking tree or a shed with shingles, but in trying to preserve the detail of my picture (eyelashes, reflections, etc) was that I had to keep making the brush smaller and smaller, and the end result was that honestly, it didn’t really look all that oil-painted. I’ll post that version over at Patreon, just for fun, but I kind of quit on it after getting mostly done with re-painting Max.

Patreon has a no-dragon-bikini version of of the picture as well, naturally.


Double res version will be posted over at Patreon. Feel free to contribute as much as you like.

10:35

Redundancy and resilience [Seth's Blog]

If it’s important, don’t ask the team to try harder.

Instead, create the conditions for ordinary effort to produce redundant outputs that reduce crises.

If quality is a problem, look at the system, not the people.

08:35

Awreatha Franklin [Penny Arcade]

New Comic: Awreatha Franklin

05:35

Girl Genius for Monday, March 30, 2026 [Girl Genius]

The Girl Genius comic for Monday, March 30, 2026 has been posted.

04:49

Russ Allbery: Review: The Cloak and Its Wizard [Planet Debian]

Review: The Cloak and Its Wizard, by R.Z. Nicolet

Publisher: UpLit Press
Copyright: February 2026
ISBN: 1-917849-15-X
Format: Kindle
Pages: 423

The Cloak and Its Wizard is a standalone (at least so far) urban fantasy superhero (sort of) novel. R.Z. Nicolet is the marketing pseudonym for Rachel Reddick. This is her first novel.

I'm picky about wizards.

The wizards themselves will complain about that, but of course I'm picky. When I choose a wizard, barring utter abandonment of moral scruples, it's a till-death-do-us-part situation. (Their death, not mine. I'm the next best thing to indestructible.)

The Cloak of Sunset and Starlight is a major artifact, meaning that it has its own preferences and is capable of independent action. It has been sitting in a glass case in the wizards' library for about a hundred years, waiting for someone interesting. (Well, mostly sitting. Occasionally it sneaks out to eavesdrop or move the books around.)

Veronica Noble is interesting. She's older than most initiates, thoughtful, observant, and clearly had some mundane career before joining the Order. Her aura is appealing, and her mental shields and resistance to influence are intriguing. Normally, the Cloak would take its time investigating a new potential wizard, but the Sword was making thoughtful rattling sounds, and no way is the Cloak going to let the Sword claim her first. Time to choose a new wizard!

It was nice, being draped over warm shoulders, and feeling a heartbeat again.

I could tell she closed her eyes without even looking.

She sighed. "I just got picked by the intransigent one, didn't I?"

The last time I picked a book from the Big Idea feature in Scalzi's Whatever blog, it didn't go that well, but if you're going to write a book specifically for me, I'm going to read it. There are very few tropes of SFF that I love more than intelligent companion objects, and Nicolet's introduction to the story was compelling. So I gave this book discovery method another chance.

I'm glad I did, because this was exactly what I was in the mood for and a delight from cover to cover.

Veronica Noble is not a typical wizard. She's a surgeon and was quite happy to be a surgeon until an unexpected encounter with a magical creature killed her brother. The forgetting spell that the wizards who came to handle the Cassandra wyrm didn't work on her, so she was dragged reluctantly into the secret magical world of the Order. This long-lived society of wizards quietly defends the world against magical intrusions from other planes of existence. Now she's a wizard with a magical cloak, which she is not at all sure she wants.

Veronica is not the protagonist, though. The Cloak of Sunset and Starlight is. As far as it is concerned, its job is to assist its wizard, enjoy watching interesting feats of magic, and look fabulous doing so. It's protective, dramatic, rather vain, endlessly curious, easily bored, and intensely loyal. When it becomes clear that the Order has some serious problems, the Cloak knows what side it's on.

This sounds a bit like urban fantasy, so I was surprised when the first superheroes showed up, although given the explicit Doctor Strange inspiration I probably should have expected them. The Order and the superheroes do not mix, at least at the start of the novel. The wizards view the superheroes as a loud and irritating intrusion and hide magical activities from them the same as they do the rest of the world. Veronica's opening opinion on superheroes is based on being a trauma surgeon in a hospital dealing with the aftermath of their fights (which makes me wonder if the author has read Hench, although the idea is older than that book). As with the Order, the role of superheroes in this world gets more complicated as the plot develops.

There is a surprising amount of plot and some very nice world-building here, including multiple twists that I was not expecting. Veronica is the sort of stubborn and deeply ethical person who will not leave a problem alone if she has the ability to fix it, which is a good recipe for getting deeper and deeper into a complex plot. She's believable as a surgeon: somewhat taciturn, calm in emergencies, detail-oriented, methodical, and not at all dramatic. This makes the Cloak a perfect foil and complement. Watching their partnership develop was very satisfying.

This is a sidekick novel, and like the best sidekick novels it makes the not-protagonist more interesting and more relatable by showing them from an outside and skewed perspective. Piecing together what Veronica must be thinking is part of the fun, as is sharing the Cloak's protectiveness towards her as it becomes clear how much she's been through and how good of a person she is. The Cloak's personality was a little too much like a cat for me — I would have preferred a more unique viewpoint, fewer cat-coded shenanigans, and a bit less of the running laundry machine joke. But that's a quibble. Its endless curiosity drives the plot forward and uncovers more of the world-building, and I just love reading stories from the perspective of this sort of loyal and protective magical creature.

I had so much fun with this book. It's a popcorn sort of book, and I thought the ending sputtered a little, but overall it was great. Parts of it could have been designed in a lab to appeal to me specifically, so I'm not sure if other people will enjoy it as much, but its hit rate with my friends so far has been good.

Highly recommended, and I will be watching for any further novels from Nicolet.

The Cloak and Its Wizard reaches a satisfying conclusion and doesn't advertise itself as part of a series, but there is room for a sequel. If Nicolet ever writes one, I'd read it.

Rating: 8 out of 10

04:00

Sahil Dhiman: MiniDebConf Kanpur 2026 [Planet Debian]

MiniDebConf Kanpur 2026 was held on 14th and 15th March 2026 at the Indian Institute of Technology Kanpur.

Having a Debian conference in the North was something many folks wanted. Ravi started the discussion (with local IIT Kanpur folks) almost 7 months before the conference. Lots of folks from Debian India joined in organizing the conference, which was nice. All the meeting notes and discussions were posted on the Debian India mailing list, a first.

Despite all the efforts, the conference start was delayed due to logistical issues. Things went fine post Day 1 lunch. We had two days of almost full schedule. disaster’s Decentralising Indian Communication was an interesting talk, diving into decentralized communication.

IIT Kanpur is a huge campus with nice footpaths and greenery. We got the opportunity to explore their HPC at Computer Center post conference.

Work has been started for MiniDebCamp Kochi. More details can be found on the wiki.

Working to make this conference happen was different with all the challenges involved, but overall, everyone was happy with the outcome.

MDC K group photo

Group photo. Click to enlarge

02:42

01:42

00:49

Kernel prepatch 7.0-rc6 [LWN.net]

The 7.0-rc6 kernel prepatch is out for testing.

Anyway, exactly because it's just "more than usual" rather than feeling *worse* than usual, I don't currently feel this merits extending the release, and I still hope that next weekend will be the last rc. But it's just a bit unnerving how this release doesn't want to calm down, so no promises.

Sunday, 29 March

21:49

The Minor Planet Johnscalzi in Motion [Whatever]

See that tiny dot cruising across the night sky here? That’s my asteroid, imaged by a fellow JoCo Cruiser Geordan Rosario. He was excited to show it to me, but not nearly as excited as I was to see it in action. Look! That’s my space potato! In motion! How cool as that?

This is a good time to note that I have been given a few other commemorative items regarding my space potato this month, which I didn’t post about because I was traveling, but now that I’m at home for two whole weeks, I’ll catch up with them in a separate post.

Space Potato!

— JS

19:35

GNU Parallel 20260322 ('این آخرین نبرده،') released [stable] [Planet GNU]

GNU Parallel 20260322 ('این آخرین نبرده،') has been released. It is available for download at: lbry://@GnuParallel:4


Quote of the month:

  i rly love gnu parallel over xargs, it's basically the same but has lots of useful and well documented options. sry if u know already
    -- d@nny "disc@" mc² @hipsterelectron@circumstances.run

New in this release:

  • No new features.
  • Bug fixes.


GNU Parallel - For people who live life in the parallel lane.

If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.


About GNU Parallel


GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.

If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.

GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.

For example you can run this to convert all jpeg files into png and gif files and have a progress bar:

  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif

Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:

  find . -name '*.jpg' |
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200

You can find more about GNU Parallel at: http://www.gnu ... rg/s/parallel/

You can install GNU Parallel in just 10 seconds with:

    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
       fetch -o - http://pi.dk/3 ) > install.sh
    $ sha1sum install.sh | grep c555f616391c6f7c28bf938044f4ec50
    12345678 c555f616 391c6f7c 28bf9380 44f4ec50
    $ md5sum install.sh | grep 707275363428aa9e9a136b9a7296dfe4
    70727536 3428aa9e 9a136b9a 7296dfe4
    $ sha512sum install.sh | grep b24bfe249695e0236f6bc7de85828fe1f08f4259
    83320d89 f56698ec 77454856 895edc3e aa16feab 2757966e 5092ef2d 661b8b45
    b24bfe24 9695e023 6f6bc7de 85828fe1 f08f4259 6ce5480a 5e1571b2 8b722f21
    $ bash install.sh

Watch the intro video on http://www.youtub ... L284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/1 ... 81/zenodo.1146014.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparall ... igns/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference


If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)


If GNU Parallel saves you money:



About GNU SQL


GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.


About GNU Niceload


GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.

16:42

Link [Scripting News]

Video demo of using Claude to write a Hello World app.

AI apps for everyone [Scripting News]

We should teach everyone how to write software with the AI apps. If the language is too hard, make a new language that's easier. Eventually we'll come up with a fantastic language but you and I won't invent it, people who are newbies in 2026 will. Just like there was a whole new generation of software for PCs, graphic UIs and then for networking and the web. Try this out in Claude.

  • Can you create a browser-based app that asks for the user's name in a nice dialog, not the one built into the browser, and then takes the name and displays it using only css styles in a simple animated fashion. It quits when I hit the Escape key. Give it to me in the form of an html file that i can download and run by double-clicking it in the Finder. Call the app hello.html.

I tried doing it but there was a bug in the result, and I had to say "Claude, 'delighted to make your acquaintance' appears but nothing else."

I did a video demo of this exercise.

15:07

Link [Scripting News]

Podcast: Jen and I often exchange voicemails. Yesterday I sent one about how she, who is not a programmer, should try creating software with Claude or ChatGPT. I think the hardest part is figuring out how to get it to give you a file that you can run from your own desktop. But I explained that in the voicemail. Midway through I realized this a podcast, and checked with her if it would be okay and she was very emphatic that I should. You see NJ aside to being one of my best friends for life, is also a Natural Born Blogger or a person with maximum audacity. Her first instinct like mine is to share it and shut up. So that's what I'm doing. As usual I asked Claude to write the show notes. Hope you like it and thanks for listening!

Link [Scripting News]

The source code for my podcast builder app is open source. Of course I use my outliner to edit the OPML file for the podcast text and link in the enclosure. I recommend opening it in Drummer. To see how the atts work, click on the suitcase icon with the cursor on the main head for each episode. The new att is enclosure, which is the URL of the audio for the podcast. Drummer automatically fills in the length and type.

12:14

ICE to TSA positions [Richard Stallman's Political Notes]

The bully is talking about stationing deportation thugs in airports to substitute for TSA agents watching exits from the secure area (to ensure no one enters through them).

If that's all they do, I suppose it is safer to have them there doing that, than to have them walking around your town, jailing unauthorized immigrants, authorized visitors, authorized permanent residents, and sometimes US citizens too. And shooting protesters.

But I have to wonder: if they are willing to stretch the law, can they find excuses to harass people and jail people while nominally watching an airport security exit? I'm expect the bully has looking for ways they can harass people while working there.

10:35

Long odds and unseen differences [Seth's Blog]

“The odds of winning the lottery are the same whether you buy a ticket or not.”

This seems nonsensical at first. Obviously, there are lottery winners. Therefore, the odds aren’t the same.

Except we’re not mathematicians doing a math problem (at least most of us). Odds are how we navigate the world. When they’re sufficiently low, the useful approach is to assume that they’re zero. Sort of how we deal with invisible signals: There’s sound in a very quiet room, but we can’t hear it. There’s light in a very dark room, but we can’t see it. These never go to zero, but we treat them as if they do.

The story of playing very long odds might give you hope or solace or energize you. That’s what they make movies about, after all. But in practice, you’re buying that story, not a useful chance of winning something.

Paul McGowan points out that the difference between a $500 stereo and a $5000 stereo is enormous. But the difference between the more expensive stereo’s sound and one costing $50,000 is vanishingly small… Soon it becomes a story, not a sound.

Buy the best story you can afford, with all the benefits it comes with. But don’t be confused by the odds or tiny differences. They’re probably zero.

07:00

Samuel Henrique: Latest NVIDIA Drivers for Debian (Packaged with AI) [Planet Debian]

Two terminal windows side-by-side, on the left there's the Debian logo in ASCII art, and on the right it's the output of nvidia-smi, showing the driver version 595.58.03 running on a machine that has an NVIDIA RTS 5080

tl;dr

This is not an official package, it's good enough for me and it might be good enough for you, confirmed as working in Debian Testing but I don't have a Stable machine to test there.

You can use my custom repo to install the latest NVIDIA drivers on Debian Stable, Testing or Unstable (install from Sid repository):

https://deb.debusine.debian.net/debian/r-samueloph-nvidia-ai/

The page above contains the APT sources you need, just add the one for your release to /etc/apt/sources.list.d/r-samueloph-nvidia-ai.sources, run sudo apt update and install the packages, you might need to disable Secure Boot.

This is not about AI

Discussions about AI are quite divisive in the Free Software communities, and there's so much to be said about it that I'm not willing to go into in this blog post. This is rather just me telling people that if they need up-to-date NVIDIA packages for Debian, they could check if my custom repository gets the job done.

The AI part is a means to an end, I've been careful to note in the repository names that the packages were produced with AI to respect people who do not want to run it for any reason.

RTX 5000 series support

Back in May 2025 I opened a bug report asking for the NVIDIA drivers on Debian to be updated to support the RTX 5000 series. The Nouveau drivers might be good enough for some people, but I need the NVIDIA drivers because I want to play games and do experiments with open weight models.

Opening a bug report doesn't guarantee anything, at the end of the day Debian Developers are volunteers, so if I really wanted the newer drivers, I would have to do something about it, ideally submitting a merge request.

I briefly looked into the NVIDIA packaging, which involves 3 source packages (and one extra git repo for tarballs), unfortunately this was going to take more time and effort than what I was willing to spend.

What I Did

After a few weeks of lamenting that I wasn't running the NVIDIA drivers, I figured I was willing to put in more effort than I originally thought, just enough to instruct the Claude Code agent to package the latest releases. I'm skilled enough with agentic tools that I knew how to use it to save time; providing a clear instruction on how to build the package and explaining the packaging layout, then letting the agent iterate until it gets a working build. The agent was running inside a VM that didn't have any of my credentials.

After a little bit of back and forth, where I was reviewing the changes guiding the agent into how to fix certain issues, I ended up with a working set of packages.

Once I installed it on my machine and confirmed they worked, I set up a debusine repository to make it easier to install future updates, and let others test it out.

Debusine is analogous to Ubuntu's famous PPA, or Fedora's EPEL, it's a relatively new project but it has been working fine for this.

Matheus Polkorny helped me test the packages and did spot a few issues which are fixed now. The Debusine developers were also always quick to respond to my questions and bug reports.

How Good Is It?

Short answer: good enough for daily use, but not a substitute for an official Debian package.

The whole point of doing this is because I don't have enough free time to maintain the package myself. All of this work was done as a volunteer, on my personal time.

This means I'm trusting the agent to some degree; I review its commits but I don't go too deep into it, the quality will be dictated by the fact that I'm a Debian Developer and so by how easily I can spot issues without double checking everything.

I only have a single machine with an NVIDIA GPU, this machine runs Debian Testing and so I don't have a way to test the Stable packages. I can do my best to address problems but at this point there is a risk that new updates break something.

Installing NVIDIA drivers has always been a bit risky regardless, if you're comfortable with reverting updates and handling a system without a graphical interface (in case you end up in a tty), you will be fine.

You will likely need to disable Secure Boot in order to use them, or set up your BIOS so that a MOK can be used to sign the DKMS modules.

When choosing the version strings for the packages, I was careful enough to pick something that would sort lower than an official Debian package, meaning that whenever that same version is packaged in Debian, your system will see it as an upgrade.

If you have any other methods of installing the NVIDIA drivers on your Debian system that is working for you, you should likely stick to that.

I have a strong preference for installing them through .deb packages, making the package sort out configuration changes and dependency updates, besides handling the DKMS modules.

Ultimately I'm not happy with the amount of difficulty that Debian users have in installing up-to-date NVIDIA drivers, and I hope this makes it easier for some.

How To Install

Head over to the Debusine page that contains both repos for Trixie (Debian Stable) and Sid (for Debian Testing and Unstable):

https://deb.debusine.debian.net/debian/r-samueloph-nvidia-ai/

If you are running Debian Testing, then pick the Sid repository.

That page contains the contents of the apt .sources file you need, create the file /etc/apt/sources.list.d/r-samueloph-nvidia-ai.sources with the sources for your release.

Run sudo apt update and install the packages you need, if you already have a previous version installed, sudo apt upgrade --update would update them.

If there are no upgrades, meaning you don't have a previous version installed, then you need to explicitly install them.

sudo apt install nvidia-open-kernel-dkms nvidia-driver

If you run into issues in Debian Stable, consider using the Linux kernel package from the backports repository, if you need an up-to-date NVIDIA driver, you likely should also be running the backports kernel package (if you can't upgrade to Debian Testing).

Future Plans

I currently have no means of measuring how many people are using the debusine repositories, so if you do end up using it feel free to let me know somehow.

I don't know for how long I will keep managing this repository, and how much effort I will spend, but my machine needs it and for now I will keep it up-to-date with the latest production-grade NVIDIA drivers.

Sources

The sources of the packages are available under a namespace in Salsa (Debian's GitLab instance):

https://salsa.debian.org/samueloph-forks-team/nvidia-drivers-forks-with-ai

You can also get the exact sources used in the repositories from debusine:

https://debusine.debian.net/debian/r-samueloph-nvidia-ai/collection/debian:suite/sid-nvidia-ai/search/?category=debian:source-package

https://debusine.debian.net/debian/r-samueloph-nvidia-ai/collection/debian:suite/trixie-nvidia-ai/search/?category=debian:source-package

06:14

Russell Coker: Ebook Readers in Debian [Planet Debian]

Laptop

For a while I’ve been using Calibre 8.5.0+ds-1+deb13u1 in Debian/Trixie running KDE for reading ebooks on my laptop, it generally works well and has a large font size. The only downsides of it for that use are taking more RAM than I would prefer (about 780M RSS which seems a lot for a relatively simple task) and having separate windows for the list of books and reading an actual book without any options to just open the last book and not delay me.

I tried Arianna 25.04.0-1 in Debian/Trixie, it has a significantly smaller font size and doesn’t allow high contrast colors as the default is black on gray with the dark theme in KDE. It also only allows left and right arrows for moving through the book while Calibre uses up/down, left/right, or pgup/pgdn so whatever keys seem reasonable to you are going to work. The RSS was 762M which wasn’t great but wasn’t the real problem. Rumours of Arianna using less RAM than Calibre seem exaggerated.

Librem5

On my Librem5 phone with Plasma Mobile Calibre 8.5.0+ds-1+deb13u1 both the initial setup screen and the main screen for selecting a book to read don’t work in the width of portrait view on the phone. After putting it in landscape mode it worked, but I couldn’t touch on a book title to select it I had to touch on the number of the book at the left of the list box. But once it was loaded everything was fine. On the Librem5 Arianna 25.04.0-1 just worked fine, although only using left/right swipes to change pages instead of up/down was annoying.

Furilabs FLX1s

On my Furilabs FLX1s with phosh Arianna 25.04.0-1 and Calibre 8.16.2+ds+~0.10.5-3 both gave the same result of not displaying text or images from the book, I’m not sure if it’s phosh or some other aspect of the FLX1s configuration at fault.

PinePhonePro

On my PinePhonePro running Debian/Testing with Plasma Mobile Arianna 25.12.3-1 worked without any issue and up/down swipes worked. Calibre 9.5.0+ds+~0.10.5-1 had the initial screen work fine in portrait mode but the main screen was too wide and needed landscape. Also the issue of having to touch the number applied.

Laptop running Debian/Unstable

Calibre 9.6.0+ds+~0.10.5-2 and Arianna 25.12.3-1 worked quite nicely on a Thinkpad running Debian/Unstable. One thing I discovered while testing it is that Calibre supports the CTRL-PLUS and CTRL-MINUS key combinations to change font sizes and that also works on the version in Debian/Trixie. Arianna doesn’t support CTRL-PLUS/MINUS.

Conclusion

The problems I had were Arianna on a laptop, everything on the Furilabs FLX1s, and Calibre’s UI not being well adjusted for mobile devices.

Russ Allbery: Review: The Sovereign [Planet Debian]

Review: The Sovereign, by C.L. Clark

Series: Magic of the Lost #3
Publisher: Orbit
Copyright: September 2025
ISBN: 0-316-54286-5
Format: Kindle
Pages: 575

The Sovereign is the third and concluding book of C.L. Clark's Magic of the Lost high fantasy trilogy. I recommend reading the books of this series close together, since there are a lot of characters and a lot of continuity between books that is helpful to remember, but it was not quite as difficult this time to remember where the story left off.

At the end of The Faithless, the political situation in Balladaire (not-France) was more stable, but the threat of a plague lay on the horizon. That threat arrives in earnest in this book, along with new threats from both Balladaire's former colonial conscript soldiers and from neighboring Taargen (not-Germany, sort of, although the parallel isn't as close). Luca and Touraine have finally admitted that they're deeply in love, but they are still very different people with different goals and ethics. Luca is determined to do anything necessary to save her kingdom, but her definition of her kingdom is sharp and brittle. Touraine is torn between far too many loyalties, plus the lingering worry that her morals and Luca's may not be compatible.

I think the hardest part of this sort of series is finding an ending the reader will find satisfying. This one, unfortunately, did not work for me, but that may be more due to personal preference than objective flaws.

There have been two threads through this series: an improbable romance embedded in a network of complex personal relationships, and a political commentary on colonialism and post-colonial wars. I was enjoying the former, but it was the latter that felt fresh and interesting to me. The plot threads in The Faithless outside of Balladaire expanded that complexity, and I was hoping the final volume would continue in that direction. How could a colonial power atone for its history? How does the former colony establish its own governance? Is there a path to freedom without violence? Are attempts to chart a more moral course doomed to open lines of attack for one's other enemies?

It's clear that Clark was thinking about similar themes, but The Sovereign narrows the field instead of widens it, restricts the political options, and then resolves most questions in a massive war. This is not that surprising of a conclusion, but it's one that I found unsatisfying and, honestly, a little boring. Yes, one way to resolve all the competing tensions is for everyone to try to kill each other and whoever survives wins, and historically that's one of the more likely outcomes, but that ending doesn't wrestle with the politics as much as it collapses them.

Clark instead focuses this concluding volume on the romance, which becomes even more fraught, tragic, and dramatic than it was in previous books (and that's saying something). The hard questions of divided loyalties and moral conflicts are mostly framed by questions about Touraine's loyalty to Luca and Luca's trust of Touraine. This is all very Shakespearean, full of hard choices, sudden reversals, miscommunication, and a very deep conflict between Luca's realpolitik and Touraine's stubborn personal morality. If this is what you were reading the series for, if you were hoping for a maximum-drama sapphic relationship, you may thoroughly enjoy this. I thought it had its moments, but I wish they had been balanced by more moments of cool-headed practicality and creative political ingenuity.

My biggest frustration with this ending is that the characters largely stop doing politics. The political complexity was the strength of both The Unbroken and The Faithless: People who intensely dislike each other negotiate because there is something larger to be gained, personal decisions made without considering the political ramifications have costs, and multiple characters are trying hard to find a way to turn a nasty, exploitative world into something better without simply killing everyone who disagrees. Many of the characters were objectively bad at politics, inexperienced and immature, but they stumbled or dragged or fought their way into political solutions anyway. I thought Clark moved too far away from that in The Sovereign. Everyone goes deep into their own emotions and desire for vengeance or conquest or revolution and stops compromising. To a depressingly large extent, the story is resolved by killing everyone who disagrees. I think the story is poorer for it.

One of the other threads of the series is Balladairan magic, or rather its odd absence. Luca has one understanding of it, the rebels introduced in The Faithless have a different understanding of it, and its pursuit is set up as critical to resolving the threat of a plague. We do get an explanation of sorts, but it's not as complete or as satisfying as I was hoping, and the symbolism of Balladaire's missing magic is left frustratingly murky. For me, this has some of the same problems as the political conclusion: I wanted an intellectual catharsis alongside the emotional catharsis, but that was not the direction Clark was taking the story.

I like reading about these characters. All of Luca, Touraine, and Pruett are complex, comprehensible, flawed, and often intriguing. But my favorite character in the story, the person I latched on to as an emotional path through the story, was Sabine. Her refreshingly straightforward loyalty and lack of drama was a breath of fresh air. She has some great moments in this book, but there too I got wrong-footed by the direction Clark went with her arc and found its conclusion deeply unsatisfying.

I'm not sure how many of these complaints are because of missed opportunities in the novel, how many were due to a mismatch of taste, and how many were due to not being in the right mood to read this conclusion. I'm sure that it didn't help that I read this simultaneous with another novel in which the characters were always miserable, or that I read it in early 2026 with, uh, all that entails. I suspect that if you came away from the first two books invested in the messy romance and wanting MOAR DRAMA, you may get exactly what you were hoping for. That, sadly, was not what I was hoping for.

I can't really recommend this. I thought it dragged in places and didn't deliver the ending I wanted. But it has some great moments, it does wrap up the threads of the trilogy as advertised, and at least the romance gets a dramatic climax worthy of the tension that has been built through the previous books. If that matches what you were enjoying in the previous books, you may well enjoy this more than I did.

Rating: 5 out of 10

Saturday, 28 March

23:00

Evgeni Golov: Converting Dovecot password schemes on the fly without (too much) cursing [Planet Debian]

I finally upgraded my mail server to Debian 13 and, as expected, the Dovecot part was quite a ride.

The configuration syntax changed between Dovecot 2.3 (Debian 12) and Dovecot 2.4 (Debian 13), so I started first with diffing my configuration against a vanilla Debian 12 one (this setup is slightly old) and then applied the same (logical) changes to a vanilla Debian 13 one. This mostly went well. Mostly because my user database is stored in SQL and while the Dovecot Configuration Upgrader says it can convert old dovecot-auth-sql.conf.ext files to the new syntax, it only does so for the structure, not the SQL queries themselves. While I don't expect it to be able to parse the queries and adopt them correctly, at least a hint that the field names in userdb changed and might require adjustment would've been cool.

Once I got that all sorted, Dovecot would still refuse to let me in:

Error: sql: Invalid password in passdb: Weak password scheme 'MD5-CRYPT' used and refused

Yeah, right. Did I mention that this setup is old?

The quick cure against this is a auth_allow_weak_schemes = yes in /etc/dovecot/conf.d/10-auth.conf, but long term I really should upgrade the password hashes in the database to something more modern.

And this is what this post is about.

My database only contains hashed (and salted) passwords, so I can't just update them without changing the password. And while there are only 9 users in total, I wanted to play nice and professional. (LOL)

There is a Converting Password Schemes howto in the Dovecot documentation, but it uses a rather odd looking PHP script, wrapped in a shell script which leaks the plaintext password to the process list, and I really didn't want to remember how to write PHP to complete this task.

Luckily, I know Python.

The general idea is:

  • As we're using plaintext authentication (auth_mechanisms = plain login), the plaintext password is available during login.
  • After Dovecot's imap-login has verified the password against the old (insecure) hash in the database, we can execute a post-login script, which will connect to the database and update it with a new hash of the plaintext password.

To make the plaintext password available to the post-login script, we add '%{password}' as userdb_plain_pass to the SELECT statement of our passdb query. The original howto also says to add a prefetch userdb, which we do. The sql userdb remains, as otherwise Postfix can't use Dovecot to deliver mail.

Now comes the interesting part. We need to write a script that is executed by Dovecot's script-login and that will update the database for us. Thanks to Python's passlib and mysqlclient, the database and hashing parts are relatively straight forward:

#!/usr/bin/env python3

import os

import MySQLdb
import passlib.hash

DB_SETTINGS = {"host": "127.0.0.1", "user": "user", "password": "password", "database": "mail"}
SELECT_QUERY = "SELECT password_enc FROM mail_users WHERE username=%(username)s"
UPDATE_QUERY = "UPDATE mail_users SET password_enc=%(pwhash)s WHERE username=%(username)s"

SCHEME = "bcrypt"
EXPECTED_PREFIX = "$2b$"


def main():
    # https://doc.dovecot.org/2.4.3/core/config/post_login_scripting.html
    # https://doc.dovecot.org/2.4.3/howto/convert_password_schemes.html
    user = os.environ.get("USER")

    plain_pass = os.environ.get("PLAIN_PASS")
    if plain_pass is not None:
        db = MySQLdb.connect(**DB_SETTINGS)
        cursor = db.cursor()
        cursor.execute(SELECT_QUERY, {"username": user})
        result = cursor.fetchone()
        current_pwhash = result[0]

        if not current_pwhash.startswith(EXPECTED_PREFIX):
            hash_module = getattr(passlib.hash, SCHEME)
            pwhash = hash_module.hash(plain_pass)
            data = {"pwhash": pwhash, "username": user}
            cursor.execute(UPDATE_QUERY, data)
        cursor.close()
        db.close()


if __name__ == "__main__":
    main()

But if we add that as executable = script-login /etc/dovecot/dpsu.py to our imap-postlogin service, as the howto suggests, the users won't be able to login anymore:

Error: Post-login script denied access to user

WAT?

Remember that shell script I wanted to avoid? It ends with exec "$@".

Turns out the script-login "API" is rather interesting. It's not "pass in a list of scripts to call and I'll call all of them". It's "pass a list of scripts, I'll execv the first item and pass the rest as args, and every item is expected to execv the next one again". 🤯

With that (cursed) knowledge, the script becomes:

#!/usr/bin/env python3

import os
import sys

import MySQLdb
import passlib.hash

DB_SETTINGS = {"host": "127.0.0.1", "user": "user", "password": "password", "database": "mail"}
SELECT_QUERY = "SELECT password_enc FROM mail_users WHERE username=%(username)s"
UPDATE_QUERY = "UPDATE mail_users SET password_enc=%(pwhash)s WHERE username=%(username)s"

SCHEME = "bcrypt"
EXPECTED_PREFIX = "$2b$"


def main():
    # https://doc.dovecot.org/2.4.3/core/config/post_login_scripting.html
    # https://doc.dovecot.org/2.4.3/howto/convert_password_schemes.html
    user = os.environ.get("USER")

    plain_pass = os.environ.get("PLAIN_PASS")
    if plain_pass is not None:
        db = MySQLdb.connect(**DB_SETTINGS)
        cursor = db.cursor()
        cursor.execute(SELECT_QUERY, {"username": user})
        result = cursor.fetchone()
        current_pwhash = result[0]

        if not current_pwhash.startswith(EXPECTED_PREFIX):
            hash_module = getattr(passlib.hash, SCHEME)
            pwhash = hash_module.hash(plain_pass)
            data = {"pwhash": pwhash, "username": user}
            cursor.execute(UPDATE_QUERY, data)
        cursor.close()
        db.close()

    os.execv(sys.argv[1], sys.argv[1:])


if __name__ == "__main__":
    main()

And the passwords are getting gradually updated as the users log in. Once all are updated, we can remove the post-login script and drop the auth_allow_weak_schemes = yes.

20:14

Going Off the Rails [Whatever]

Photo by Kelly Wright

Every year on the JoCo Cruise, the final concert includes a set of songs from musicians who passed in the previous year, and this year I sang one of them: “Crazy Train” by Ozzy Osbourne. Of course, if I was going to sing Ozzy, why not go all out about it, so here is me with Ozzy hair and glasses and all-black look, belting my brains out (the green Crocs, I will note, are original to me).

I think it went over well. And I hit most of my notes, including the high ones, which is always good. And the audience had fun with it, which was the most important part. I hope wherever Ozzy might be, he looked down and smiled rather than said “wtf.” The tribute was sincere.

For everyone about to ask, there are snippets of video on Bluesky, at the very least, and I imagine the cruise itself will post a full video at some point. But for the moment, please enjoy the photos.

Ozzy Osbourne did not leave this mortal plane; no. He has inhabited a new vessel, mild-mannered science fiction writer John Scalzi, who retains nothing of his former self but his Crocs. @scalzi.com @jococruise.bsky.social

Kelly Wright (@omnikel.bsky.social) 2026-03-28T05:07:58.253Z

— JS

16:49

Why Kids Are Getting Worse at Reading: The Case Against Whole-Language Teaching [Economics from the Top Down]

Your browser does not support the audio tag.

Download: PDF | EPUB | MP3 | WATCH VIDEO

It’s not even an inability to critically think.
It’s an inability to read sentences.

Jessica Hooten Wilson

When it comes to reading, there is something of a moral panic afoot. In the United States, high-school reading scores are tanking … and everyone seems to know why.

Raised on a diet of internet slop, today’s kids think that ‘reading’ means scanning the captions of a Tik Tok video. For them, books are becoming incomprehensible relics of a waning literate age. In short, literacy is being murdered, and the killer is the smartphone in every child’s hand.

Or is it?

In this essay, I explore a different story about why kids are becoming less literate. It’s not a story about kids getting dumbed down by an addictive new technology. It’s a story about how adults decided to not teach kids how to use a piece of very old technology.

Let me set the stage with a brief parable.

Several millennia ago, humans invented a clever three-step algorithm for encrypting messages. In step one, the user takes a message and decomposes it into a set of distinct sounds. In step two, the user encrypts these sounds into a set of visual symbols. And in step three, the user preserves these symbols on a physical medium.

The purpose of this encryption technology is to transmit meaning across time and space. When another user encounters the encrypted message, they decrypt it by employing the same algorithm in reverse. First, they parse the symbols and convert them into sounds. Next, they parse these sounds and group them into chunks of meaning. Finally, they interpret the decoded message.

With this ancient technology in mind, here is how our story unfolds. For centuries after its invention, the encryption algorithm was used by a small class of administrators who hoarded its secrets. Then, about three hundred years ago, the decryption keys were gradually released to the wider population. Eventually, all children received mandatory decryption training.

But then a funny thing happened. After several generations of formal training, some users began to feel that the decryption algorithm was ‘natural’, and that its intricacies need not be taught. These users created a new approach to training whereby the decryption algorithm was learned through exposure. New users were shown encrypted messages with convenient pictures and cues that elucidated the meaning. The idea was that through repeated exposure, new users would master the technology.

Or not.

After several decades of this new learning regime, scientists found that decryption skills were in decline, and that the drop was biggest among the weakest decrypters. Meanwhile, new communication technology had proliferated, leading to confusion about the loss of decryption skill. Was the new technology to blame? Or was it something else? Opinions flared, but conclusive evidence was in short supply.

Exiting our parable, let’s take stock. In English, the act of encrypting a message is called writing. And the act of decrypting it is called reading. Both acts rely on an implicit algorithm for decomposing linguistic meaning into sounds, and encoding these sounds into symbols. Good readers have mastered this algorithm. Bad readers have not. And today, bad readers have not mastered this algorithm largely because they were not taught how it works. Or at least, that is my contention here.

The backstory is that in the 1980s and 1990s, a movement called the ‘whole language’ approach to reading swept through anglophone schools. According to this new zeitgeist, learning to read was as ‘natural’ as learning to speak. It was a skill that could be learned largely by exposure. Soon this method of ‘vibe-based literacy’ came to dominate elementary-school pedagogy, with devastating results. Yes, some students flourished. But a large portion of kids were simply left behind, destined to be perpetually poor readers. Today, we are living with the consequences.

In this essay, I make the case that the modern decline of high-school reading ability is in large part, due to the spread of whole-language methods. I will build my case in three parts.

In Part I, I review how reading scores have declined among US high-school students. I show how this decline is not uniform, but is instead marked by a widening skill gap. Among US high-school students, the best readers have actually gotten better over time, but the worst readers have gotten far worse. Importantly, this reading-score gap remains visible across a variety of student demographics. Which is to say that whatever is causing the widening gap, it’s not something that government surveys measure.

In Part II, I take a detour into the history of how writing was invented. My purpose is to illustrate exactly why reading is hard to learn, and why students benefit when the requisite skills are explicitly taught. Then I discuss the whole-language movement to not teach these skills — a movement based on a misguided view of what it means to read.

In Part III, I build the case that whole-language instruction is the main cause of the widening reading-score gap. I survey many lines of evidence, perhaps the most important of which is that the reading-score gap can be reversed … by abandoning whole-language methods and teaching structured literacy.

Of course, my goal here is not to exonerate smartphones and other screen devices from wasting kids’ time. Instead, my point is that if we don’t properly teach kids how to read, they have little chance of actually doing it.

Part I: The decline of high-school reading ability

Our story begins with a much-discussed piece of evidence. Among US high-school students, reading ability is in decline. Figure 1 shows the trend, as captured by the National Assessment of Educational Progress (NAEP).

Figure 1: The decline of US high-school reading scores. Since the 1990s, US twelfth-grade students have seen their reading performance drop on the NAEP standardized test. [Sources and methods]

Looking at this reading-score data, notice that performance drops conspicuously during the 2010s. To many observers, the timing of this drop implicates smartphones, which became popular in the same decade. To be sure, almost no one thinks that smartphones are a panacea for teen literacy (myself included). Still, I see three main problems with the rush to blame declining reading ability solely on phones.

The first problem is that the pandemic probably played a role in worsening reading scores during the latest batch of tests in 2024. (And without this data point, the recent reading-score decline is less conspicuous.) The second problem is that if we stare more closely at the data, we see that the reading-score decline began in the 1990s, long before smartphones were invented. And the third problem is that the decline in reading scores is not uniform among all students. As we’ll soon see, what appears like a universal decline in reading scores is in fact a differential wedge — a widening gap between the best and worst high-school readers.

The widening reading-score gap

When faced with a conspicuous trend (like the decline in reading scores shown in Figure 1), a common impulse is to begin searching for the cause. But a wiser approach is to first dissect the trend itself to better understand what’s going on.

In the case of high-school reading ability, the decline in the average US score suggests that reading skills have fallen uniformly across all students. However, when we look beneath the average score, a more complicated pattern emerges — a pattern of widening gaps.

Figure 2 illustrates this reading-score wedge. Here, I’ve taken the trend in high-school reading scores and decomposed the data by reading-score percentile. In this chart, the best readers live at the top, and the worst readers live at the bottom. Looking at the data, what leaps off the page is its lack of uniformity. Among the best students, reading scores have actually improved with time. But among the worst students, reading scores have collapsed. It’s this low-end decline that’s driving the downward trend in average reading scores.

Figure 2: An widening reading-score gap among US high-school students. Over the last three decades, the best US high-school students have gotten slightly better at reading, while the worst students have gotten far worse. This chart shows the widening achievement gap among selected reading-score percentiles. [Sources and methods]

Switching to a snapshot of cumulative change, Figure 3 shows how US high-school reading scores have diverged across percentiles between 1992 and 2024. (The vertical axis shows the change in score as a function of reading-score percentile.) The transformation is quite shocking. For students above the 85th percentile, reading scores improved over this period, with the steepest gains at the top. But for students below the 85th percentile, reading scores worsened with time, with the steepest losses at the bottom. In short, over the last three decades, US high-school reading scores have been marked by a widening gap between the best and the worst readers.

Figure 3: Cumulative change in grade 12 reading scores by percentile, 1992 to 2024. The vertical axis measures the cumulative change in twelfth-grade reading scores as a function of reading score percentile (horizontal axis) over the last three decades. [Sources and methods]

The widening reading-score gap persists across a variety groups

Looking ahead, I’m going to argue that the cause of the widening reading-score gap is something that’s not captured by the federal survey data (collected by the NAEP). To make the case, I am going to segment students into a variety of demographic groups based on characteristics like student sex, parent education, school absences, TV use, and reading habits. Student sex aside, these are characteristics that relate strongly to reading ability. And yet without exception, I find that the reading-score gap — the widening gap between the best and the worst readers — persists within these groups.

The widening reading-score gap by student sex

Looking at various demographic categories, let’s start with student sex. In recent years, there’s been much worry about the failure of boys. The reading score data supports this worry, but with some caveats.

As Figure 4 demonstrates, over the last three decades, both sexes have seen their worst high-school readers get worse and their best readers get better. However, this widening reading-score gap is more pronounced among males then among females. So the message is not that boys in general are getting worse at reading. The message is that something is driving a wedge between the best and worst readers, and this wedge is thicker among boys than among girls.

Figure 4: The widening reading-score gap occurs among both sexes. This chart shows the change in twelfth-grade reading scores between 1992 and 2024, isolated by student sex. The horizontal axis shows reading-score percentile within each sex. The vertical axis shows the corresponding change in test score over the last three decades. Note that the widening reading-score gap exists within both sexes, but is more severe among males. [Sources and methods]

The widening reading-score gap by parent education

Let’s move on to demographic factors that are well known to affect student success. Parent education is a big one. As Figure 5 shows, students with more educated parents tend to be better readers, likely because educated parents care more about their kids’ schooling, and they have more time and money to invest in learning. That said, when we switch to measuring the change in reading scores over the last three decades, a different picture emerges — one in which parent education is largely irrelevant.

Figure 6 shows the pattern. Here, I’ve grouped high-school kids by their parents’ education, and then measured the change in reading scores within each group between 1992 and 2024. The picture that emerges is one of demographic intransigence. Regardless of their parents’ education, the best high-school readers have gotten better and the worst readers have gotten worse.

Figure 5: High-school reading scores by parental education in 2024. This chart shows the spread in twelfth-grade reading scores as a function of parental education (the highest level of education attained by either parent). As expected, students with more educated parents tend to be better readers. [Sources and methods]

Figure 6: The widening reading-score gap occurs within all parental education groups. This chart shows the change in twelfth-grade reading scores between 1992 and 2024, isolated by parental education. The horizontal axis shows reading-score percentile within each parental education group. The vertical axis shows the corresponding change in test score over the last three decades. [Sources and methods]

The widening reading-score gap by school absenteeism

Continuing our demographic journey, kids who miss more school tend to be worse students, likely because school works best if you actually go. So it’s unsurprising that high-school students with more absences tend to be worse readers, as Figure 7 shows. Yet student absences are not what’s driving the widening gap between the best and worst readers.

Figure 8 shows the evidence. Here, I’ve grouped high-school students by their school absences, and then measured the change in reading score between 2002 and 2024. Again, we see a pattern of intransigence. Regardless of school absence rates, the best high-school readers have gotten better, and the worst readers have gotten worse.

Figure 7: High-school reading scores by monthly school absences in 2024. This chart shows the spread in twelfth-grade reading scores as a function of the students’ monthly school absences. As expected, students with fewer absences tend to be better readers. [Sources and methods]

Figure 8: The widening reading-score gap occurs within all school absenteeism groups. This chart shows the change in twelfth-grade reading scores between 2002 and 2024, isolated by students’ monthly school absences. The horizontal axis shows reading-score percentile within each absenteeism group. The vertical axis shows the corresponding change in test score over the last two decades. [Sources and methods]

The widening reading-score gap by TV use

Now to some demographic characteristics that reflect students’ intellectual behavior. First up is TV use. As we might expect, students who spend more time watching TV tend to be worse readers. Figure 9 shows the disparity in 1998.

So how do TV habits relate to the change in reading score over time? Here, the problem is that the NAEP only surveyed students’ TV habits during the 1990s, so we don’t know much about the long-term trend. That said, the pattern during the 1990s shows similar signs of demographic intransigence.

Figure 10 illustrates. Here, I’ve grouped high-school students by their TV habits, and then measured the change in reading scores between 1992 and 1998. Again, we find a widening gap between the best and worst readers, and we find that the gap is largely unaffected by kids’ TV habits.

Figure 9: High-school reading scores by student TV use in 1998. This chart shows the spread in twelfth-grade reading scores as a function of students’ TV use on school days. As expected, students who watch less TV tend to be better readers. [Sources and methods]

Figure 10: The widening reading-score gap occurs within all TV-use groups. This chart shows the change in twelfth-grade reading scores between 1992 and 1998, isolated by students’ TV habits. The horizontal axis shows reading-score percentile within each TV-use group. The vertical axis shows the corresponding change in test score over the six-year period. [Sources and methods]

The widening reading-score gap by pleasure-reading habits

Now to what is perhaps the most obvious trait of a good reader … choosing to actually read. As Figure 11 shows, kids who spend more time reading for pleasure also tend to be better readers. Shocking!

Sarcasm aside, it’s now well established that Americans are spending less time reading during their spare time. And since doing something is the best way to maintain a skill, it follows that if kids are reading less, this lack of practice might make them worse at reading.

Unfortunately, the available evidence shoots down this otherwise plausible theory for why high-school reading scores have declined. When we group kids by their reading habits and measure the change in score over time, we find a widening reading-score gap within all groups.

Figure 12 shows the pattern. Now the caveat here is that this data is limited to the 1990s. (For some reason, the NAEP stopped surveying students about their reading habits at the very moment when time spent reading started to drop precipitously.) At any rate, we can conclude that whatever is driving a wedge between the best and worst readers, it’s likely not their pleasure reading habits.

Figure 11: High-school reading scores by student pleasure-reading habits in 1998. This chart shows the spread in twelfth-grade reading scores as a function of students’ pleasure-reading habits. As expected, students who read more tend to be better readers. [Sources and methods]

Figure 12: The widening reading-score gap occurs within all reading-habit groups. This chart shows the change in twelfth-grade reading scores between 1992 and 1998, isolated by students’ pleasure-reading habits. The horizontal axis shows reading-score percentile within each reading-habit group. The vertical axis shows the corresponding change in test score over the six-year period. [Sources and methods]

What’s driving the reading-score gap?

This concludes my tour of the US read-score data. Let me summarize the main results. Over the last three decades, high-school reading scores have declined, but in a non-uniform way. Over this period, the best high-school readers got better, while the worst readers got far worse. And perhaps most importantly, this widening reading-score gap persists across a variety of demographic groups — groups which are well known to affect school outcomes. In short, something is driving a wedge between the best and worst readers, and this driver is not captured by the federal survey data.

Now, it might seem that this lack of survey evidence leaves a world of possible causes. But then again, much is known about how and why kids fail at reading. Indeed, a large body of research shows that when kids struggle to read, it’s usually because they were not taught the low-level skills that are required. And here, the cruel irony is that for the last three decades, many anglophone educators thought it wise to not teach these skills. That’s because they were guided by the whole-language approach to teaching, which preached that reading could be learned largely through exposure.

We’ll get to the spread of whole-language teaching in Part III. But first, we need some prior knowledge. We need to understand how reading works, why it is hard to learn, and why it’s disastrous to not teach kids how to operate the encryption algorithm.

Part II: Why reading is hard to learn

In literate cultures, writing is so ubiquitous that few people realize that it is a form of technology, and a miraculous one at that. Writing is an ingenious technique for encrypting spoken language into visual symbols — symbols that can then be decrypted by another person.

The advantages of writing over speaking are profound. A spoken sentence is gone the moment it is uttered. A written sentence can be preserved indefinitely. A spoken sentence requires a living speaker. A written sentence can be read long after the writer is dead, and in places the writer never imagined. In short, reading and writing come with many advantages over spoken language. But they also have one big downside, which is that compared to speaking, learning to read and write is far more difficult.

There’s a reason for this difficulty — a reason that every grade-school teacher should have plastered on their wall. As the linguist Mark Liberman observes, reading is hard to learn “for the same reasons that writing was hard to invent”. The lesson here is that each time a child struggles to read, they are replicating, in shortened form, humanity’s lengthy struggle to invent the written word.

To get a sense for this formative struggle, realize that humans developed spoken language as early as 135,000 years ago. Yet formal writing dates back a mere 5,000 years. Now, I say ‘formal’ writing, because long before humans encoded words into abstract symbols, we drew pictures that conveyed meaning. For example, more than 40,000 years ago, humans in present-day Spain drew a picture of a bull that is instantly recognizable to anyone today. It is with such pictures that writing begins.

For the first proto-writers, the most obvious way to encode meaning was to draw an image of the thing they had in mind. To elicit the idea of a bull, they drew a bull. To elicit the idea of a snake, they drew a snake. And so on. Now, the intriguing part is that even today, drawing pictures remains the most obvious way to encode meaning.

For example, if you show a toddler a picture of a snake, they’ll happily shout ‘snake’. Indeed, using this image-based method, a toddler will happily decrypt the meaning of pictographs that are thousands of years old. (See Figure 13 for some ancient Egyptian examples.1) But note what the toddler will not do. When shown the word ‘snake’, the toddler will not shout ‘snake’. And they will not do so for the same reason that humans found it difficult to move from pictographs to more complex forms of writing. The path forward was not obvious.

Figure 13: Pictures are the most obvious path to writing. Here is a collection of Egyptian pictographs that are easily decoded by a modern observer. (Fun fact: these symbols are available as Unicode characters.) Note that I use the word ‘pictograph’ to refer to the literal meaning of each symbol. Egyptian ‘hieroglyphs’ are more complicated because they use the rebus principle to attach linguistic sounds to symbols.

For early writers, the hurdle was to somehow use pictures to encode messages that went beyond one-word statements like ‘bull’ or ‘snake’. For example, how would you use pictures to write this sentence?

The farmer went to the market, sold his bull for $1000, invested the money in a Trump memecoin, and then went bankrupt.

Given the immense temporal gap between simple picture drawing and formal writing, we can infer that ancient humans struggled greatly with this problem. But they eventually discovered a good solution, which was to use pictures in a more abstract way. Instead of using pictures to represent real-world things, they used pictures to represent linguistic sounds.

This method is called the ‘rebus principle’, and it works as follows. To encode a message that has no simple associated image, we first decompose the message into sounds. Then we map these sounds onto a set of simple images. For example, if we combine the image of a bee and a leaf (as shown in Figure 14), we can use the rebus principle to encode the English word ‘belief’. Clever!

Figure 14: The rebus principle — using symbols to encode linguistic sounds. Linguists believe that the use of the rebus principle is a crucial step for the development of writing. With the rebus principle, one interprets images in terms of the linguistic sounds they represent (rather than the literal objects being displayed). In English, the symbols of a bee and a leaf can combine to represent the word ‘belief’.

Now, to the modern (literate) observer, the rebus principle seems both intuitive and obvious. After all, it’s the principle that underpins how we read and write. (More on that in a moment.) And yet, for the first proto-writers, the rebus principle was unintuitive. Why?

Well, the problem seems to be that for humans, speaking is so effortless that we have little knowledge of how we do it. Yes, we speak by making sounds … but it is the meaning of these sounds that we say and hear. Indeed, we have almost no conscious knowledge of the sounds themselves. Or put another way, our brains naturally clump meaning into spoken units called ‘words’. But our brains find it quite foreign to consciously decompose these words into meaningless sounds. Yet the task for the first writers was to do just that — to reverse engineer what our brains do subconsciously. By all accounts, early writers found this task difficult. And to this day, children struggle to read largely because they struggle to decompose the sounds within words.

At any rate, once the rebus principle was discovered, it allowed writing systems to evolve in two different ways. First, the symbols themselves tended to become more abstract with time. The effect of this abstraction was to simplify the act of writing, but to make learning how to read more difficult.

Second, the rebus principle allowed writers to explore the phonetic level at which to encode their language. Here, we might think that alphabetic writing would be the most obvious path forward. But it was not. The alphabetic system was the least obvious approach to writing.

To the oral speaker, the natural unit of meaning is the individual word. Hence the most obvious way of writing was to equate symbols with whole words. This ‘logographic’ system works perfectly well, and is the basis for Chinese writing.

The next step down the sound ladder is to use symbols to encode individual syllables. This ‘syllabic’ approach is the basis for Japanese writing.

Finally, the lowest step down the sound ladder is to use symbols (an alphabet) to encode individual ‘phonemes’, which are the smallest unit of linguistic sound. The advantage of this ‘alphabetic’ approach is that it is by far the most efficient encoding method, requiring the user to memorize the least number of symbols. 2 However, the disadvantage, as Mark Liberman observes, is that alphabetic writing places a “special burden” on the reader, since it requires that they gain conscious access to the lowest unit of linguistic sound — a unit that is “relatively inaccessible to introspective scrutiny”.

It is likely because of this “special burden” that whereas logographic and syllabic forms of writing evolved multiple times in different places, alphabetic writing seems to have evolved only once. It arose out of the Semitic tradition, which developed a consonant-only system of writing. When the ancient Greeks later borrowed these symbols, they adapted some of the letters to notate vowels. All modern alphabets seem to have sprung from this singular lineage.

The point is that when children struggle to read alphabetic writing, they are in good company. Alphabetic writing is the least obvious way to store linguistic meaning. And it is also the writing method that is most susceptible to corruption.

For example, in modern English, there are nine different ways to encode the long ‘a’ sound (as in halo, aid, ate, say, they, rein, great, eight, and straight). Who invented this absurd system? No one did. These different notations evolved from older phonetic principles that have since been corrupted, as pronunciation changed but spelling did not. Thus, English is littered with silent letters that were once pronounced (as in ‘knight’), homonyms that once had distinct pronunciations (as in ‘meat’ and “meet”), and a myriad of ways to spell the same sound.3

No one would design such a convoluted system by choice. And yet, it is the system that English children must learn. We fool ourselves if we think it is easy or ‘natural’.4 And we doubly fool ourselves if we think that children can deduce the principles behind English phonetic encoding without explicit instruction.

Hiding the decryption key

To summarize our foray into the history of writing, reading is difficult to learn because it requires developing a set of low-level skills that are not intuitive or natural to the oral speaker.

Now, the tyranny is that for a good reader, these low-level skills have become so automatic that they are subconscious. Hence, a good reader might think it reasonable to teach a child to read without giving explicit instruction on the principles involved. This form of teaching is a strikingly bad idea; and yet it is the method that dominates anglophone schooling.

More on that in a moment. But first, let me convince you (a good reader) that you have a set of low-level decoding skills that are largely subconscious. Go ahead and read the following words aloud:

\displaystyle \text{guttorply} ~ \text{ melochection} ~ \text{ intifittle} ~ \text{ swooflia}

As you read, you no doubt realized that these are not English words. They are pseudowords that are assembled using the principles of English phonetics. (You can generate more pseudowords here.)

The purpose of these pseudowords is to illustrate that good readers have internalized the low-level principles behind English phonetic encoding. Good readers understand how letters combine to represent sounds, and how these sounds can be combined into words (real or not). Of course, the corollary is that bad readers lack these low-level skills. Which is why, when faced with pseudowords, bad readers fall flat on their face.

With this failure in mind, here is the trick to bad reading instruction: ask students to read without teaching them the decryption key.

To describe a lesson in bad reading instruction, it seems only fair to use myself as an example. When my daughter started school, she was enrolled in French immersion, which meant that she’d learn to read French at school and English at home. Her home-school teacher would be me … Blair Fix, PhD & VGR (very good reader).

Now, at the time, I’d bought into the whole-language approach to reading instruction.5 Forget phonics, I thought. We’ll just start reading together, and my daughter will naturally pick things up. But she didn’t. So with the benefit of hindsight, let me illustrate how things went wrong.

Our first step was to read simple picture books like the one shown in Figure 15. These books are called ‘levelled readers’, and they’re meant to be co-read, with prompts from the pictures. First, I’d read the book. Then my daughter would ‘read’ it back to me. Things seemed to be going well … or so I thought.

Figure 15: Teaching children how to avoid reading. This is an excerpt from the book First Little Readers – What Is Red? It is typical of the levelled-reader format. Note the repetitive sentence structure, which can be easily memorized and recited based on cues from the pictures. Note also the difficulty of the actual decoding task. In this supposed ‘Level A’ reader, kids are asked to decode the words ‘apples’ and ‘strawberries’ — words that are phonetically complicated. In short, this book practically begs children to not read the text, and to instead recite the message from pictographic cues.

What I realize now is that these levelled readers actually teach children how to avoid reading. Again, the history of writing is instructive as to why. To develop alphabet writing, people had to realize that linguistic meaning (i.e. words) could be broken down into sounds, and that these sounds could be encoded into symbols:

\displaystyle \text{meaning} \rightarrow \text{sounds} \rightarrow \text{symbols}

Learning to read therefore involves the reverse operation. The learner must take symbols, map them onto sounds, and decode the meaning:

\displaystyle \text{symbols} \rightarrow \text{sounds} \rightarrow \text{meaning}

Looking at levelled readers, these books make no attempt to teach the reading decryption algorithm. Instead, they take a repetitive sentence structure and map it onto a set of richly illustrated images. Of course, kids love this format, because it provides a far more obvious path for encoding meaning. Indeed, it is the same path taken by the first writers, who took meaning and mapped it onto pictures:

\displaystyle \text{meaning} \rightarrow \text{pictures}

When we ask a child to ‘read’ an illustrated (levelled) reader, they naturally take the easiest path by decoding the message from the picture:

\displaystyle \text{pictures} \rightarrow \text{meaning}

Now, the problem here is that asking a child to decode meaning from pictures actively misleads them about how reading actually works. Historically, the path from pictographs to alphabetic writing was long and torturous. Indeed, the path was so difficult that it happened only once. Hence, it is completely unreasonable to request that a child use pictographs as a tool for deducing alphabetic principles. Many children will not make this conceptual leap.

Instead, when children are shown pictographs with associated text, what tends to happen is that they memorize a few of the simpler looking words, and then they recite (or simply guess) the rest of the words from the context (which includes the picture and the repetitive sentence structure). Unsurprisingly, researchers have observed this guessing behavior countless times. The strategy occurs because actually reading the words on the page is the hardest and least intuitive option for decoding meaning. Guessing the message from the pictures and the context is far easier. And so that’s what kids do.

With word guessing in mind, here is where things get weird. When whole-language theorists observed children’s guessing tactic, they interpreted it as a learning strategy. Indeed, they enshrined it in a pedagogical approach called the ‘cueing method’, in which children are taught to read text by looking first to the picture, next to the syntactic context, and last to the actual word.

In short, the whole-language method took a reading avoidance tactic (guessing words from context) and transformed it into a ‘strategy’ for learning how to read. As you might guess, the effect of this strategy is to leave the worst readers behind.

Teaching the decryption key

The irony of whole-language pedagogy is that when it swept through anglophone schools in the 1980s and 1990s, cognitive scientists were codifying the best practices in reading instruction. Suffice it to say that these best practices are not what whole-language theory preaches.

In a nutshell, cognitive scientists discovered that kids struggle to read for the same reason that humans struggled to develop writing. For the oral speaker, it is unnatural to decompose words into sounds. Hence, kids who struggle to read typically lack ‘phonemic awareness’ — they do not hear the sounds within words. And so the solution is to teach this skill. Teach kids that English words are built from a repertoire of several dozen sounds. Teach kids how to segment words into sounds. Teach kids how sounds map onto the alphabet. Yes, this instruction is low-level work. But for young children, it is exciting new knowledge. They love it!

Once kids grasp the basics of how the alphabet represents sounds, they’re ready to read three-letter words like ‘sit’ and ‘hat’. Next, they can read these words in simple sentences. Crucially, the practice reading must lack picture cues, because pictures provide a way to avoid the cognitively demanding task of decoding words. (Figure 16 shows a sample reading task from Treasure Hunt Reading, a free structured literacy program.)

Figure 16: A typical reading task in a structured literacy program. In this example from Treasure Hunt Reading, kids are asked to form and read simple three letter words with a repeating phonic pattern. Notice that this task comes on page 40 of the workbook, after the required consonant and vowel sounds have been taught.

Finally, reading ability can be built iteratively by adding new sounds and new ways to encode each sound. (Remember, English is a phonetic mess.) At each step, kids read text that obeys only the phonetic principles that they’ve been taught. And because kids have been taught the skills for success, something surprising happens. They learn to read!

This evidence-backed approach to reading instruction is called ‘structured literacy’, and it should be standard practice in every elementary school. But it is not. Instead, the dominant approach (at least until recently) has been to shower kids in text and hope that they deduce the key for decryption. Many kids fail to make this deduction, and they grow up to be life-long dysfunctional readers.

Part III: The case against whole-language instruction

Now that we understand why reading is hard to learn, I want to build the case against whole-language pedagogy. I’m going to argue that whole-language teaching is the main wedge that’s widening the gap between the best and worst high-school readers.

My case rests on seven lines of evidence, listed below. At root, my argument is simple. If we do not teach kids the code for decrypting English words, it is the worst readers who suffer, with effects that last a lifetime.

The case against whole-language instruction

  1. Whole-language methods are ubiquitous
  2. Whole-language instruction harms struggling readers
  3. If whole-language instruction is to blame, the timing checks out
  4. Early reading ability determines later success
  5. A decoding deficit creates a compound reading failure
  6. A decoding deficit is a lifelong problem
  7. The widening reading-score gap is reversible

1. Whole-language methods are ubiquitous

The first piece of evidence implicating whole-language methods in the widening reading-score gap is the fact that these methods are ubiquitous. For example, a 2019 survey found that 75% of US K-2 teachers taught the ‘three cueing’ method for deducing words from their context — a method that mistakenly reinforces the evasion tactic that struggling readers use to avoid decoding words.6:

Now, the good news is that in the last few years, the cueing method has grown increasingly unpopular, and has even been banned in 15 US states. But the bad news is that for today’s high-school students, the damage has already been done.

2. Whole-language instruction harms struggling readers

The second piece of evidence implicating whole-language instruction in the widening reading-score gap is the fact that this method harms struggling readers.

That was the conclusion drawn from a large study of the ‘Reading Recovery’ program, which is a whole-language intervention designed to bring below-grade-level readers up to speed. In this study, a large group of struggling first-grade readers received intensive one-on-one instruction from a Reading Recovery expert. The students’ progress was then tracked over time and compared to a group of struggling readers who did not receive an intervention.

In 2017, the researchers reported that the initial intervention was a success: by the end of their tutoring, the Reading Recovery students were doing substantially better than their peers. Then came the cold water. When the researchers returned to track student progress a few years later, they found a strikingly different pattern. By third and fourth grade, the students who’d participated in the Reading Recovery program were not ahead of their peers … they were between a half to a full grade level behind.

Although the researchers struggled to explain this negative effect, the problem seems obvious in hindsight. Whole-language methods promote the rote memorization of words, which is an effective strategy when the vocabulary is small. But as the reading material gets more complex, memorization methods fail, and the students’ decoding deficit rears its head. And because whole-language instruction actively dissuades students from learning how to decode words, their decoding deficit grows worse with time.

3. If whole-language instruction is to blame, the timing checks out

The third piece of evidence implicating whole-language instruction in the widening reading-score gap is the fact that the timing checks out. It was in the mid-1980s when whole-language instruction began to spread. And it was in the mid-1990s when high-school reading scores began to drop. If we add a decade delay to allow the first whole-language recipients to advance through school, we’d expect to see the high-school effects of this method appear during the mid-1990s … just when high-school reading scores began to drop.

Of course, we don’t have rigorous data that tracks the spread of whole-language methods. But we can get a rough sense for the popularity of this approach by tracking the frequency of the phrase ‘whole language’ within English books. When we do so, we find that the phrase became popular in the 1980s. The top panel in Figure 17 shows the pattern. If we suppose that this word frequency indicates the popularity of whole-language instruction during the early years of schooling, we’d expect to see the high-school effects of these methods appear about a decade later, during the mid-1990s (dashed curve).

Figure 17: The whole-language impulse. The top panel shows the frequency of the phrase ‘whole language’ in the Google English corpus (a large sample of English books). The dashed-red line shows this frequency with a ten year delay, used to indicate the potential high-school effects of whole-language education on those who endured it during the early years of schooling. The bottom panel shows the frequency of the phrase ‘balanced literacy’, which became a common euphemism for whole-language methods (such as the three-cueing strategy). The dashed-blue line shows this frequency with a ten year delay. [Sources and methods]

Now, by the mid-2000s, the term ‘whole language’ had become less fashionable, in large part because the reading wars had prompted a backlash against this (ineffective) approach. But instead of being abandoned, whole-language methods were simply rebranded as ‘balanced literacy’. And judging by the frequency of this latter phrase (shown in the bottom panel of Figure 17), balanced literacy became prominent during the mid-2000s, with a second wave of popularity during the mid-2010s. If we add a ten-year delay to this pattern, we find that the high-school effects of balanced literacy should appear within the last decade.

In short, if whole-language methods are behind the widening reading-score gap that’s appeared over the last three decades, the timing checks out.

4. Early reading ability determines later success

The fourth piece of evidence implicating whole-language instruction in the widening reading-score gap is the fact that learning during the first few years of school determines success later on.

For example, a 2010 study of 26,000 Chicago elementary school students found that reading levels in Grade 3 strongly predicted high-school graduation rates. Among third-grade students whose reading was below grade level, only 44% would later graduate from high school. But among third-grade students whose reading was above grade level, 79% would later graduate from high school. The portion of kids going to college showed a similarly stark gap, as illustrated in Figure 18.

Figure 18: Third-grade reading ability strongly determines success during high school and beyond. In the mid-1990s, Chapin Hall researchers measured the reading ability of a cohort of third-grade students in the Chicago Public Schools system. Then they tracked student progress over time. The researchers found that high-school graduation rates and college attendance were both strongly determined by reading ability in grade three, as shown here. [Sources and methods]

5. A decoding deficit creates a compound reading failure

The fifth piece of evidence implicating whole-language methods in the widening reading-score gap is the fact that by downplaying decoding skills (and encouraging students to guess at words), the approach likely creates a compound reading failure.

To understand this effect, realize that reading comprehension is the product of two distinct skills. Reading comprehension depends firstly on the ability to decode words. And it depends secondly on oral comprehension. According to the ‘simple view of reading’, reading comprehension is the product of these two abilities:

\displaystyle \text{reading comprehension} = (\text{decoding skill}) \times (\text{oral comprehension})

Now in principle, decoding skill is separate from oral comprehension, which is why someone can be fluent but illiterate. That said, in literate cultures, oral comprehension tends to be a function of decoding ability itself. And that’s because writing is the most potent source of knowledge.

Simply by reading, a good decoder can learn about new words and new ideas, causing their oral comprehension to grow with time. In contrast, a poor decoder struggles to unlock the knowledge contained within books, which means that their oral comprehension remains stunted. But here is the kicker. Because reading comprehension depends on the product of decoding and oral abilities, poor decoders suffer a compound failure. Their poor decoding hinders their oral comprehension, and so their reading comprehension suffers doubly.

Figure 19 shows an example of this compound failure. The data comes from a longitudinal study of 485 students in Iowa and Illinois, whose school progress was tracked throughout 1990s. The chart illustrates how students’ vocabulary depended on their decoding skills, which were measured in grade 4. (Vocabulary is a crude proxy for oral comprehension.) Over time, students’ vocabularies tended to increase, but not at the same rate. Instead, the best fourth-grade decoders had the greatest vocabulary growth, while the worst fourth-grad decoders had the least vocabulary growth.

Figure 19: Poor decoding skills lead to a stunted vocabulary. In the 1990s, Dawna Duff and colleagues tracked vocabulary growth among a cohort of American students. This chart shows how vocabularies grew as a function of decoding ability, measured in fourth grade. While all students saw their vocabularies increase with time, the poor decoders saw the least growth. Assuming that these poor decoders retained their decoding deficit throughout school, by high school they would suffer from a compound reading failure, with worse decoding skills and a smaller vocabulary. [Sources and methods]

If the poor fourth-grade decoders retained their decoding deficit as they aged (a reasonable assumption), we can surmise that by high-school, they suffered from a compound failure: both their decoding and their oral comprehension lagged behind their peers, leading to significantly worse reading comprehension. In short, to the extent that whole-language instruction hinders the development of decoding skills, we expect that by adulthood, it creates a compound failure of reading comprehension.

6. A decoding deficit is a lifelong problem

The sixth piece of evidence implicating whole-language methods in the widening reading-score gap is the fact that decoding deficits are not solely a childhood problem. They typically remain present well into adulthood.

True, poor decoders often develop coping skills for parsing text — skills like memorizing sight words and guessing unfamiliar words from their context. Unfortunately, these coping strategies do not solve the core decoding deficit, which remains visible to anyone who cares to look.

The way to unearth a decoding deficiency is ask people to read pseudowords — fake words that are constructed from real English phonetics. When tasked with parsing such words, poor readers reveal their core deficit: they have not mastered the principles of English phonetics.

Figure 20 shows a striking example of this deficit. The data comes from research conducted by Molly Minus during the 1990s. As part of her PhD research, Minus measured decoding ability among three groups of adults:

  1. Upper-level university students
  2. College students taking remedial reading courses
  3. Prisoners receiving reading instruction

Minus found stark differences between these groups. When tasked with reading 50 pseudowords, the university students got almost all of them correct (top panel). The college students faired worse (middle panel). And the prisoners? Well, they were abysmal, getting an average of 8 words correct (bottom panel).

The point here is that well into adulthood, the main driver of functional illiteracy is the inability to decode words — an inability that whole-language teaching actively promotes.

Figure 20: Decoding ability among three groups of adults. In the early 1990s, Molly Minus measured decoding skills among three groups of adults: upper level university students (top panel), college students in remedial reading courses (middle panel), and prisoners receiving reading instruction (bottom panel). This chart shows the distribution of decoding scores within each group. (The task was to read fifty pseudowords.) Minus found that decoding skill varied predictably by group. The university students were excellent decoders, while the prisoner were horrible. [Sources and methods]

7. The widening reading-score gap is reversible

Now to what is perhaps the key piece of evidence implicating whole-language teaching in the widening reading-score gap. It seems that this growing gap is not inevitable, and that it can be reversed by dumping whole-language methods and replacing them with structured literacy. Interestingly, we can thank the state of Mississippi for demonstrating this fact.

Perpetually the poorest US state, Mississippi once produced some of the nation’s worst readers. As recently as 2013, Mississippi’s fourth-grade reading scores were in last place. Yet by 2024, it had turned things around and was among the top ten states. Figure 21 shows the transformation.

Figure 21: The Mississippi miracle. This chart shows Mississippi’s state rank in fourth-grade reading scores. (Note the reverse scale on the vertical axis.) For decades, Mississippi sat at the bottom of the reading-score heap. But after 2013, it clawed its way into the top ten — a remarkable transformation that’s often dubbed the ‘Mississippi miracle’. [Sources and methods]

So what happened? Did Mississippi suddenly get rich? Did its children stop watching TV? No and no. What happened is that in 2013, Mississippi overhauled how it taught kids to read.

To make sense of this overhaul, realize that in the 1990s, Mississippi followed other states in embracing the whole-language approach to reading. Curriculum documents from the time illustrate the educational dogma. In 1996, Mississippi’s Department of Education declared that among first-grade students, “[r]eading and writing are no longer viewed as isolated tasks to be taught and tested”. Then, as if to foreshadow what would follow, the document argues for a “harmony” of strategies as students “attempt to understand how reading and writing work” (my emphasis).

It’s with this possibility for failure that we should interpret the patterns in Figure 22. In the top panel, I’ve plotted the change in Mississippian fourth-grade reading scores between 1992 and 1994 (measured as a function of reading-score percentile). Notice the Z-shaped trend: over this period, a widening gap emerged between the best and worst readers. Well that’s curious. That’s the same type of gap that emerged among US high-school students over the last three decades. (See Figure 3.). Perhaps Mississippi’s embrace of whole-language methods is telling us something.

Figure 22: Mississippi’s widening and then narrowing reading-score gap. This chart shows the change in Mississippian fourth-grade reading scores as a function of reading-score percentile, captured during two different eras. The top panel shows the reading-score change between 1992 and 1994, an era when the state was rapidly adopting whole-language methods. Over this period, a widening reading-score gap emerged, with the best fourth-grade readers getting better, and the worst readers getting worse. In contrast, the bottom panel shows the reading-score change between 2011 and 2019, an era when the state abandoned whole-language methods and implemented a structured-literacy approach to reading instruction. (I’ve halted the data in 2019 to avoid any pandemic-related artifacts.) Over this period, the reading-score gap narrowed significantly. While all fourth-grade readers improved, the best readers improved the least, while the worst readers improved the most. [Sources and methods]

Now let’s look at the bottom panel in Figure 22, which plots the change in Mississippian fourth-grade reading scores from 2011 to 2019. Notice that the pattern looks starkly different than the one above. During the 2010s, all fourth-grade Mississippian readers improved. However, the worst readers improved the most, while the best readers improved the least.

What caused this reverse effect? Fortunately, we know exactly what happened. In 2013, Carey Wright became Mississippi’s state Superintendent of Education. A proponent of evidence-based instruction, Wright oversaw a massive change in how Mississippi taught reading. Whole-language methods were abandoned and replaced with a focus on systematic phonics and phonemic instruction. The new approach included extensive support for teachers, funding for the early detection of reading problems, and (most controversially) a ‘third-grade gate’, which required that all third-grade students pass a mandatory reading test before proceeding to the next grade.7

The results of this teaching experiment were nothing short of dramatic. Mississippi’s fourth-grade reading scores were vaulted from worst in class to among the top ten. But more interesting, in my view, is the structure of this ‘Mississippi miracle’ — the fact that it targeted the worst readers and helped them the most. Mississippi’s experiment strongly suggests that the widening skill gap between the best and worst high-school readers is not inevitable, and that it’s been driven by whole-language pedagogy — a teaching approach that systematically fails the worst readers.

When the method creates the disease

When parents send their kids to school, they no doubt assume that the teacher uses the best methods for instruction, much as a patient assumes that their doctor uses the best forms of medicine. Unfortunately, if the history of science tells us anything, it is that best practices are not guaranteed.

The problem is that once a flawed practice becomes institutionalized, it is difficult for the practitioner to discern that their method is unsound. If you practice only what your mentor preached (and you’re surrounded by others who do the same), the failure of your method becomes invisible. Which is why doctors practiced bloodletting for centuries, yet were oblivious to the fact that it tended to kill their patients.

It’s within this context that we should interpret the whole-language movement. It promoted a flawed teaching method that, once institutionalized, became invisible to its practitioners. When children did learn to read (despite their poor instruction), it was proof that the method worked. And if the child failed, they were just ‘slow learners’ who’d eventually get the gist of reading. In short, it was the method that succeeded, but the individual child who failed.

Still, there’s the question of how such a flawed practice managed to become a tradition. Did whole-language teaching become popular because it contained a kernel of truth? I think the answer is no. The whole-language approach became popular because it told a story that people wanted to hear. Whole-language theory sold the idea that learning to read is as natural as learning to speak. The message, then, is that the teacher can empower their students largely by getting out of the way. So forget lectures. Forget drills. Forget explicit instruction. Just give kids a chance to explore great literature, and they will naturally learn how to read.

To grasp the appeal of this idea, we must understand the context in which it emerged. Prior to the 1960s, anglophone schooling was a dictatorial affair. It was a place where the teacher was a sergeant and the kids were compliant enlistees. It was an environment that did not exactly stimulate high-minded thinking. It was this dictatorial environment that whole-language proponents rejected. They sold (and still sell) their approach as a “democratic” and “humanistic” method that empowers “teachers and students alike”. In short, the spread of whole-language teaching had more to do with political ideals than with any evidence that the method was sound.8

Now, the irony is that although whole-language methods were billed as a tool for empowering all children, what they actually did was to empower the best students — the kids who learned to read effortlessly, and who benefited from have time (and resources) to practice their skills. But for the kids who struggled to decode words, the whole-language environment was downright confusing, since they were being asked to ‘practice’ a task that they found bewildering. It was the equivalent of giving a ten-year old integral calculus and saying “Do the math, kid. I’m empowering you by not teaching you how it works.”

Of course, the failure of whole-language methods doesn’t mean that rote dictatorial teaching is the way to go. It is not. The real message is that higher-level abilities do not come from the ether; they depend on the mastery of lower-level skills.

Great jazz musicians improvise effortlessly because they’ve internalized low-level skills like scales and chord progressions. Great mathematicians produced abstract proofs because they’ve mastered the low-level skills behind arithmetic and algebra. Great writers produce compelling literature because they’ve been taught the low-level mechanics of their language. And good readers can parse text accurately and rapidly because they grasp the low-level algorithm of how symbols encode linguistic sounds.

In each case, choosing to not teach these low-level skills isn’t ‘democratic’. It isn’t ‘humanistic’. It is the definition of regressive. Choosing to not teach low-level skills is a recipe for selecting the least gifted students and systematically leaving them behind. It is a recipe for producing the outcomes we now observe … a widening gap between the best readers and the worst readers.

Of course, the evidence against whole-language teaching does not get smartphones and algorithmic slop off the hook for polluting our social environment. But then again, when kids struggle to merely decode words, they have little reason to get off their phones and actually read.


Support this blog

Hi folks, Blair Fix here. I’m a crowdfunded scientist who shares all of my (painstaking) research for free. If you think my work has value, consider becoming a supporter. You’ll help me continue to share data-driven science with a world that needs less opinion and more facts.

member_button


Stay updated

Sign up to get email updates from this blog.



This work is licensed under a Creative Commons Attribution 4.0 License. You can use/share it anyway you want, provided you attribute it to me (Blair Fix) and link to Economics from the Top Down.


Resources

If you are teaching a child to read (or write), here are some helpful resources:

  • Treasure Hunt Reading. A free structured literacy program developed by Prenda. It comes with a workbook that’s free to print, and a collection of instruction videos that systematically teach phonics principles. It’s what I used to teach my daughter to read.
  • All About Spelling. Compared to decoding words (reading), encoding them (spelling) is the more difficult task. Struggling readers will also struggle to spell, and they benefit from structured instruction. All About Spelling offers a series of highly structure lesson-books and workbooks that build spelling competency bit by bit, with no gaps. The materials are pricey, but worth it. And the letter tile app is excellent.
  • Sold a Story. A documentary series from Emily Hanford about how whole-language methods came to dominate anglophone education. It’s a jaw-dropping exposé about why the school system leaves kids behind.

Sources and methods

US reading scores

All US reading-score data comes from the NAEP and can be browsed here: https://www.nationsreportcard.gov/ndecore/landing

Data series are as follows:

  • Figure 1: Average scale scores for grade 12 reading, by all students [TOTAL]
  • Figure 2 and 3: Distribution percentages for grade 12 reading, by all students [TOTAL]. (I interpolate this data with a spline function. See quantile function notes below.)
  • Figure 4: Distribution percentages for grade 12 reading, by sex [GENDER]. (I interpolate this data with a spline function. See quantile function notes below.)
  • Figure 5: Percentile scores for grade 12 reading, by parental education level, from 2 questions [PARED]
  • Figure 6: Distribution percentages for grade 12 reading, by parental education level, from 2 questions [PARED]. (I interpolate this data with a spline function. See quantile function notes below.)
  • Figure 7: Percentile scores for grade 12 reading, by days absent from school in the last month [B018101]
  • Figure 8: Distribution percentages for grade 12 reading, by days absent from school in the last month [B018101]. (I interpolate this data with a spline function. See quantile function notes below.)
  • Figure 9: Percentile scores for grade 12 reading, by amount of TV or video watched on school day [B001801]
  • Figure 10: Distribution percentages for grade 12 reading, by amount of TV or video watched on school day [B001801]. (I interpolate this data with a spline function. See quantile function notes below.)
  • Figure 11: Percentile scores for grade 12 reading, by read for fun on your own time [R810901]
  • Figure 12: Distribution percentages for grade 12 reading, by read for fun on your own time [R810901]
  • Figure 21: Average scale scores for grade 4 reading, by all students [TOTAL] and jurisdiction. (Note that some states have missing data in certain years. To construct a complete interstate ranking across all years, I’ve filled in missing state data with a linear interpolation.)
  • Figure 22: Distribution percentages for grade 4 reading, by all students [TOTAL] and jurisdiction. (I interpolate this data with a spline function. See quantile function notes below.)

Inferring the quantile function for reading scores

The most fine-grain data provided by the NAEP consists of ‘distribution percentages’ — the percentage of students with reading scores within a given ten-point range. To work with this data, I smooth it using a spline function.

Figure 23 shows my approach. Here, the points show the empirical data from the NAEP. Each point is located at the midpoint of the reading-score bin, and shows the percentage of students within each bin. To infer the smoothed distribution behind this binned data, I interpolate between data points using a spline function (the curve in Figure 23). I then treat this curve as a probability distribution for reading scores.

From this estimated probability distribution, I then infer the quantile function, which consists of reading scores as a function of reading-score percentile. Figure 24 shows the inferred quantile function for all US grade 12 students in 2024. Once I’ve created the quantile functions for all of the desired data (various years and various demographic groups), I use these functions to estimate changes in percentile score over time.

Figure 23: Distribution of US grade 12 reading scores in 2024. This chart illustrates my method for smoothing the ‘distribution percentages’ data provided by the NAEP. The empirical data consists of binned values reporting the portion of students with reading scores within a given ten-point range. Here, blue points show this empirical data, with the point placed at the midpoint of each reading-score bin. To estimate the complete distribution beneath this binned data, I interpolate between points using a spline function, as illustrated by the curve. I then treat this curve as probability distribution for reading scores.

Figure 24: The inferred quantile function for US grade 12 reading scores in 2024. This chart shows inferred (smoothed) values for US grade 12 reading score as a function of read-score percentile. To construct this quantile function, I use the estimated probability distribution from Figure 23. I then use this smoothed quantile function to estimate changes in percentile reading score over time. (These changes are not shown here.)

Word frequency (Figure 17)

Data for the frequency of ‘whole language’ and ‘balanced literacy’ is from the Google Ngrams dataset, downloaded with the R package ngramr.

High-school graduation rates by third-grade reading ability (Figure 18)

Data comes from Figures 4 and 5 in the report ‘Third Grade Reading Level Predictive of Later Life Outcomes’, by Lesnick, Goerge, and Smithgall. The study tracks a large cohort of Chicago Public Schools students as they progress through school. (To work with this data, I digitized it using Engauge Digitizer.) Note that Lesnick and colleagues define reading grade level as follows:

  • below grade level: reading scores below the national 25th percentile
  • at grade level: reading scores above the national 25th percentile and below the national 75th percentile
  • above grade level: reading scores above the national 75th percentile

Vocabulary growth as a function of decoding skill (Figure 19)

Data is from Figure 2 in the paper ‘The Influence of Reading on Vocabulary Growth: A Case for a Matthew Effect’ by Duff, Tomblin, and Catts. The study tracked the progress of 485 children in Iowa and Illinois, beginning in 1993. Note that what I call ‘decoding ability’, Duff and colleagues call ‘reading ability’. But what they actually measure is the fourth-grade ability to decode pseudowords and selected sight words. (To work with this data, I digitized it using Engauge Digitizer.)

Adult decoding ability (Figure 20)

Data is from Figures 6, 7, and 8 in Molly Minus’ paper ‘The Relationship of Phonemic Awareness to Reading Level and the Effects of Phonemic Awareness Instruction on the Decoding Skills of Adult Disabled Readers’. (I digitized the data with Engauge Digitizer.)

Note that Minus also measured ‘phonemic awareness’ in her three sample groups. (Phonemic awareness is the ability to identify the sounds within words.) As with decoding ability, she found that phonemic awareness varied starkly between groups, as shown in Figure 25. This evidence reinforces the standard scientific picture of reading. Good readers can parse the sounds within words. Bad readers cannot.

Figure 25: Phonemic awareness among three groups of adults. This chart shows Molly Minus’s measurements of phonemic awareness (the ability to decompose the sounds within words) in three samples of adults. Data is from her Figures 10, 11, and 12 in Minus (1992). Note the large disparity between prisoners and university students.

Notes

  1. I’ve used the word ‘pictograph’ to refer to Egyptian symbols that are meant to be interpreted literally. In contrast, Egyptian ‘hieroglyphs’ use the rebus principle to encode more complex forms of thought.

    Intriguingly, Egyptian hieroglyphs illustrate a key downside of the rebus principle, which is that the symbols can only be deciphered if the reader has knowledge of the spoken language being encoded. For example, to the French speaker, the image of a bee and a leaf (Figure 14) would not elicit the concept of ‘belief’ (‘croyance’ in French). It is because of this oral dependence that the Egyptian hieroglyphs spent thousands of years as unintelligible nonsense. When the ancient Egyptian dialect died out, no one had a clue what the surviving symbols meant. The key to decoding these messages came only in 1799, with the discovery of the Rosetta stone — a tablet that contained identical messages encoded in Greek, hieroglyphic Egyptian, and demotic Egyptian.↩

  2. Western scholars have long argued that the alphabet is the most efficient way to encode language, since it requires memorizing the least number of symbols. (Some scholars have gone so far as to claim that the alphabet was essential for rationality.) Of course, arguments about the superiority of alphabetic writing are no doubt driven in part by ethnocentrism. But in light of the way we now use computers, I think the ‘efficiency’ argument is probably correct.

    To enter non-alphabetic characters on a computer, the solution is invariably to use the Latin alphabet, at least in part, to phonetically type the desired non-alphabetic symbol. (See, for example, the pinyin system for typing Chinese symbols.) Hence, it seems unlikely that we could have modern computers without the alphabet.↩

  3. Much of the phonetic corruption in modern English results from an event called the ‘Great Vowel Shift’. During this shift, which began in the 1400s, vowel sounds that were previously distinct slowly evolved into the same sound. Since the spelling of these sounds didn’t change, the rules of English phonetics became more confusing. Similar complications happen when languages merge. The new hybrid is left with phonetic principles from both parent tongues. English is itself a mutt of a language — part Germanic, part Latin, and part French.↩
  4. In a fascinating 2021 paper, Xavier Marjou used a neural network to estimate how difficult various languages are to read and write. He fed the neural network fixed-length samples of various languages, and then asked it predict pronunciation from spelling (i.e. read) and predict spelling from pronunciation (i.e. write). In his test, English performed horribly. The bot had a write accuracy of 36% and read accuracy of just 31%. In contrast, languages like Arabic and Finnish had read/write accuracies well above 80%. (Intriguingly, Marjou found that Chinese writing was more lopsided. The bot could read Chinese with ease, but failed miserably at writing it.) In short, English may be the lingua franca, but only because it was the native tongue of two successive global empires (British and then American). English is actually a dreadful language in which to become literate.↩
  5. How I came to (briefly) believe in whole-language teaching is a somewhat embarrassing case study in how bad science spreads. When my daughter was around the age of four, the topic of reading instruction was on my mind. As luck would have it, one day when I was substitute teaching at Leaside High School in Toronto, I was sitting in the staffroom and came upon a dusty book on reading instruction. Now, I have no recollection of the name of the book or its author. But it could have plausibly been Reading Without Nonsense, written by the psycholinguist Frank Smith, one of the main architects of whole-language theory.

    At any rate, the book made two arguments that, at the time, I found convincing. First, the author noted that when children are faced with an unfamiliar word, their first instinct is to guess at the word from the context. Kids’ last instinct is to actually sound out the unknown word. Second, the author noted that English phonics are a complicated mess, with very few rules that are exception free. Hence teaching this mess, he argued, is a waste of time. It’s better to focus on building kids’ bank of memorized words.

    What’s embarrassing is that I found these arguments convincing, even though the author provided zero evidence for the efficacy of his proposed approach. Let’s run through the problems.

    First up is the argument that kids avoid decoding words. This observation is true, but is now recognized to be an avoidance tactic. Decoding words is difficult, and so kids tend to avoid the task, especially if they’ve not been taught the principles to actually read the word in question.

    Second, it is true that compared to languages like Arabic and Finnish, English is a phonological mess. But what scientists now recognize is that the complexity of English orthography means that more (not less) time must be spent giving kids explicit and systematic phonics instruction.

    Third, the idea that memorizing words is easier than memorizing phonetics is pure silliness based on borderline innumeracy. A quick look at structured literacy programs shows that they teach at most about 100 phonological principles. In contrast, the English language contains at least 460,000 words. So if you’re going to defend the rote memorization of words, you’re defending a task that is 5,000 times more expansive.

    Back to my brief acceptance of these arguments. I found the whole-language approach convincing for understandable (but mistaken) reasons. The arguments sounded plausible … from the standpoint of a literate adult who had long since become unaware of his low-level decoding skills. Of course, when I tried to put whole-language methods in action to teach my daughter, they failed badly. It was only in the face of this failure that I bothered to do some actually research, and learned the folly of my beliefs. (I discovered the science of reading by googling the word ‘dyslexia’. That led me to Sally Shaywitz’s excellent book Overcoming Dyslexia, which lays out the reasons why struggling readers need explicit phonics instruction.)↩

  6. Whole-language methods became popular not just in the US, but across the anglophone world. For example, Timothy Mills reports that a 2013 UK survey found that a stunning “89% of teachers believed that children needed to use a variety of cues to extract meaning from text”.↩
  7. Making students repeat a grade is a controversial tactic because there isn’t much evidence that it works. And one can see why. If a kid fails to read because they don’t understand the connection between sounds and alphabetic symbols, forcing them through another year of the same failed instruction won’t help them. That said, it is wildly unethical to let children proceed through school if they cannot read. Doing so sets them up for a lifetime of failure. So is there a better alternative than mandatory retention?

    Perhaps the most innovative approach comes from the ‘Success for All’ program, described in Episode 12 of the podcast Sold A Story. In Success for All program, the entire school has a shared reading-instruction block, in which students are grouped by reading ability and not by grade. This ability-based streaming allows teachers to ramp up the intervention for kids who are falling behind. In short, the goal is to make it impossible for kids to fall behind in reading. I think the logic here is impeccable. Decoding skills must be mastery based. If kids do not get the basics of decoding, everything else should be put on hold until they master this skill.↩

  8. We can get a sense for the political nature of whole-language theory by reading some of the later writings of whole-language theorist Kenneth S. Goodman. In his 1998 book In defense of good teaching, Goodman wastes no time arguing that phonics instruction is a far-right plot:

    For well over half a century the far right has used a campaign for phonics to elect ultraconservative school board members and attack both public education and teacher education.

    Goodman is also keen to cast cognitive scientists as partisan hacks who are the enemy of good teachers:

    Their “true science” can produce “research-based programs.” The far right can concentrate on keeping pressure on politicians and administrators at all levels, on being ready to pack a hearing room or school board meeting, while the disinformers and “scientists” push the “truth” on teachers and administrators.

    One gets the feeling that when Goodman is faced with empirical evidence that contradicts whole-language theory, he responds by vilifying scientists. It’s not a good look.↩

Further reading

Bentz, C., & Dutkiewicz, E. (2026). Humans 40,000 y ago developed a system of conventional signs. Proceedings of the National Academy of Sciences, 123(9), e2520385123.

Bone, J. K., Bu, F., Sonke, J. K., & Fancourt, D. (2025). The decline in reading for pleasure over 20 years of the American time use survey. Iscience, 28(9).

Castles, A., Rastle, K., & Nation, K. (2018). Ending the reading wars: Reading acquisition from novice to expert. Psychological Science in the Public Interest, 19(1), 5–51.

Duff, D., Tomblin, J. B., & Catts, H. (2015). The influence of reading on vocabulary growth: A case for a matthew effect. Journal of Speech, Language, and Hearing Research, 58(3), 853–864.

Lesnick, J., Goerge, R., Smithgall, C., & Gwynne, J. (2010). Reading on grade level in third grade: How is it related to high school performance and college enrollment. Chicago, IL: Chapin Hall at the University of Chicago, 1, 12.

Marjou, X. (2021). OTEANN: Estimating the transparency of orthographies with an artificial neural network. Proceedings of the Third Workshop on Computational Typology and Multilingual NLP, 1–9.

May, H., Blakeney, A., Shrestha, P., Mazal, M., & Kennedy, N. (2024). Long-term impacts of reading recovery through 3rd and 4th grade: A regression discontinuity study. Journal of Research on Educational Effectiveness, 17(3), 433–458.

Minus, M. A. E. (1993). The relationship of phonemic awareness to reading level and the effects of phonemic awareness instruction on the decoding skills of adult disabled readers. The University of Texas at Austin.

Moats, L. C. (2000). Whole language lives on: The illusion of “balanced” reading instruction. Diane Publishing.

Ryan, H., & Goodman, D. (2016). Whole language and the fight for public education in the US. English in Education, 50(1), 60–71.

Shaywitz, S. (2003). Overcoming dyslexia. New York.

The post Why Kids Are Getting Worse at Reading: The Case Against Whole-Language Teaching appeared first on Economics from the Top Down.

16:00

Russell Coker: Communication and Hostile AIs [Planet Debian]

We seem to be entering an “AI” apocalypse of sorts, they aren’t going to kill us or even take our jobs. What they are doing is destroying the Internet commons by filling it with rubbish. This isn’t even real AI, just pattern matching and prediction systems, mostly LLMs.

The Problem

Scott Shambaugh’s saga of being attacked and defamed by an OpenClaw AI bot is interesting and raises some disturbing possibilities for future online discussion [1]. Imagine what it would be like if everyone who was in any way notable for free software work had 100 such bots going after them.

Dania Dumas wrote an insightful blog post about why OpenClaw is impossible to secure and why it won’t go away [2].

Bruce Schneier and Nathan E. Sanders wrote an insightful article about the AI generated text arms race [3] primarily concentrating on situations in which text that was assumed to be written by humans but was actually written in bulk by bots was performing a DOS attack on people who were reviewing it. There are many situations such as book publishing and publishing letters to the editor of newspapers where getting new material from unknown people is an important part of the job but where there are also people making low quality submissions that are almost a DOS attack at the best of times.

Currently the email spam problem continues to get worse and when LLM use increases it will get significantly worse. Email encryption isn’t viable [4]. The PGP web of trust never really worked well as it’s too difficult for most users.

The amount of “AI” generated content that’s being recommended to users on platforms like YouTube and Facebook is steadily increasing and the amount of LLM generated commentary that purports to be from real people on Twitter and Facebook is also increasing. Here’s an informative blog post by Erich Schubert about this [5].

Potential Solutions

Surrender?

One option and possibly the default option is to surrender to this and just let everything we built on the Internet over decades get destroyed. Whether to surrender is a decision that can be made on a per-service basis.

Twitter is pretty much useless anyway, I quit Twitter because Elon deliberately made it suck [6]. In my opinion this is not surrendering to what’s being done there, I’m just stopping wasting time on it and using better options. I used to have about 300 followers on Twitter and I don’t think that many of them would ever choose to stop following me, so I presume that about 1/3 of the people following me have decided to totally quit Twitter and delete their accounts. I also presume that some of the remainder have done the same as me and just kept a mostly inactive account. If Elon suddenly stopped being a stupid asshole it probably wouldn’t change anything as the value of the system was connections to others. Some people will consider my abandonment of Twitter as surrender and I accept that it’s not an unreasonable opinion. I think that the possibly 100 Twitter followers of mine who deleted their accounts surrendered.

Facebook has been becoming a worse service, it’s business model is becoming increasingly exploitative and it’s interface is designed to be addictive. It’s probably best avoided unless you really need it. The only good thing about Facebook at the moment is that Facebook Marketplace doesn’t take a cut on sales and there are some really good deals on computers if you know what to look for. Unfortunately Facebook has a large number of users who are from marginalised communities and have no other alternatives for communication. It would be good to get them migrated to other platforms.

We could just give up on a lot of general communications services and have everyone accept that good content is drowned out by rubbish and have the Internet become divided between people who accept the rubbish and those who cease using large portions of the Internet environment to avoid it.

Using Non Commercial Services

Lemmy is a good FOSS federated alternative to Reddit which also covers some of the uses of Facebook. It needs more users to get critical mass but is still quite usable. A post that might get a dozen comments on Reddit may get 1 comment on Lemmy but that one comment will be a good one. Reddit doesn’t appear to be attacked much by LLM generated content at least not yet. Even if the Reddit model proves to be resilient to LLM attack the Lemmy software can be used to replace some things that are done on Facebook,

Mastodon is a good FOSS federated replacement for Twitter, it has a decent user-base including some VIPs. While it is aimed at the Twitter use case it can also cover a significant part of the Facebook use case.

There are some other FOSS social media programs which could take over other parts of the commercial social media environment.

Generally commercially run Internet services will have a financial incentive to allow the problems to get worse so we need to rely on FOSS software, non-commercial implementations, and government services.

Web Search

For a long time Google has had a monopoly on web search, but now they default to including an “AI Overview” at the start of the results which is sometimes useful but also sometimes very wrong. You can use the search URL “https://www.google.com/search?q=%s&udm=web” to get google results without rubbish. But I presume that they will break that if it gets too popular.

Searxng is a AGPL licensed metasearch engine that aggregates results from other engines, here’s the Searxng source [7] and here’s a list of Searxng instances if you want to try one [8].

Even using meta search engines like Searxng won’t help if the original data is overloaded with spam, but alleviating the problem is a good temporary measure.

Web of Trust for the Web?

I’ve idly considered the possibility of having some sort of rating system for web pages that uses a web of trust so that you can securely use trust ratings of friends of friends etc. But given all the difficulties in using a web of trust for signing GPG key for software developers (the demographic that is most skilled at doing such things) it doesn’t seem viable.

Should we surrender the idea of having a usable public web?

In the early days of the web (before Google) it was standard practice to rely on recommendations from other people or from trusted sites to find other sites, that could be considered to be an informal web of trust. We could go back to that sort of usage pattern if Google and many of the big sites get overwhelmed by LLM generated spam.

Wikipedia

I believe that Wikipedia will be at the front lines of this battle. It’s model has always included anonymous contributions. Benjamin Mako Hill wrote an interesting blog post about research he did with Kaylea Champion into Wikipedia pages on taboo topics which have a larger portion of contributors choosing to be anonymous than non-taboo pages [9]. Wikipedia also has a long history of being abused for various reasons, one that I witnessed was someone putting false content into Wikipedia pages to immediately cite them in support of their facebook arguments. That sort of thing can be dealt with at human scale but a large scale attack by bots is a different problem to solve. Also with the recent developments in AI developing multiple web sites entirely populated for the purpose of supporting one fake entry in Wikipedia is plausible.

The upside of these attacks that I predict is that they will attract the attention of all the people who have skills related to developing counter-measures. While LLM bots are filling the inboxes of publishers with rubbish and messing up the stackoverflow comments section not a lot of people are bothered, but once the attacks on Wikipedia get serious everyone will take notice.

National AI

Bruce Schneier and Nathan E. Sanders wrote an interesting blog post about nationalised public AI [10]. While that won’t directly address this issue it will get the right technology in the hands of people who can use it in the right way.

Conclusion

This is going to be a difficult problem to solve, more difficult than the email spam problem we have been unable to solve after 30 years of working on it.

This is also a very important problem, we are currently in an age where we have access to information that most people couldn’t even dream of 30 years ago. We also have disinformation that combines some of the worst aspects of authoritarian regimes throughout history combined with the worst aspects of cult brainwashing. If we lose access to the information but the disinformation remains (or get worse) then the result will be terrible.

I don’t have great ideas for solving this. I have outlined some small ideas to mitigate things and I hope that others can expand on them.

Please write comments with any good ideas you have, or even ideas that don’t totally suck. A problem this difficult is not going to be solved in a blog comment, but a blog comment might point in the right direction.

14:21

Link [Scripting News]

I'd like an AI bot that could do this. I open my browser to a page on netflix.com. It scans the page, figures out what movies are there, then it searches metacritic for each and presents me a list of all shows with a rating above a certain score. I know the streamers don't want us to have this info (I don't really understand why) but I really want it. BTW, they say the Green Knight is fantastic. Got the tip from a NYT email, but even they didn't say what the rating was, or even what their own reviewer said. Had to do this thing manually. Do they have any user-oriented creative people in the mix anywhere in this system??

13:42

Valhalla's Things: Ink Lightfastness Tests 2026 [Planet Debian]

Posted on March 28, 2026
Tags: madeof:atoms, topic:inks

A borderless frame set on a table outdoors, with two sheets of paper a vertical half of which is covered by black paper, while the other half has lines with an ink name and a small filled rectangle, all in the ink itself.

Note

This post will be updated in the next weeks with the test results as they become available.

Note

Most of the images in this post have no real alt-text: they are all scans of the test sheet at various stages through the test, and the results visible on them are described in detail at the end of the post.

Most of the time, what people write by hand will either end up inside a notebook in a drawer or cupboard where it’s well protected, or thrown in the recycling where it doesn’t matter. There are times, however, when things will be exposed to light: it doesn’t matter whether it’s a work of artistic calligraphy that you want to frame or a passive-aggressive notice left in the atrium of a building; it is useful to know whether the work will remain legible or it will fade into nothing in a short time.

A few inks are tested by the producers for lightfastness according to some established standard, a few others are declared lightfast in a generic way, but a lot come with no indication at all. Proper testing according to the standard scales requires significant equipment to precisely control the exposure, but it’s significantly easier — and fun — to do a simple test to divide the inks into three categories:

  • suitable for framed calligraphy, i.e. it looks the same after 3 months of direct sun exposure;
  • suitable for complaining about the way your neighbours deal with the trash, i.e. still readable after 3 months of exposure;
  • not suitable for either, i.e. has faded significantly in the same time.

In the past I’ve done some such tests by taping some sheets to a south-east facing window, and I’ve noticed that most of the results were already apparent after a month, and there was basically no difference between two and three months of exposure, but spring equinox to summer solstice is a nice timeframe to use for such a test (and it leaves time for a second test of different materials from summer solstice to autumn equinox), so this is what I’ve chosen to do this year.

Rather than a window, now I have access to a south-facing covered balcony that is protected from rain but receives quite a bit of direct sun, so instead of taping sheets to the windows1 I’ve prepared a sturdy cardboard panel that I can leave on a table on the balcony, hopefully safe from the rain, but well exposed to the sun.

And then made a quick test, and realized that without the window glass in front, the black strip used to cover the unexposed half of the sample doesn’t lay flat and lets some sun in, so I used an old cheap2 glass frame instead of the panel.

The contents of an order from a fountain pen shop, spread out on a table: a couple of cheap pens, a couple bottles of ink, a converter, a small ritter sport chocolate and a bag full of 5 ml vials with 2 ml of ink each, and a thank-you note from the seller (Steffi).

The next step, already in January, was mentioning in a fountain-pen enthusiasts forum that I planned such a test, and asking if people were interested in having me buy a few samples of more inks when I was buying my next pen. The word “enthusiasts” is probably a hint of the reason why soon afterwards I received a package with the pen I had planned to buy, its converter, and a couple dozens ink samples. And then a couple envelopes with additional samples of inks that weren’t available on the shops, from said enthusiasts.

Added to the inks I already had acquired since the last lightfastness test, it meant that they couldn’t all fit in one single page, and thus I had some room to add some inks I had already tested: some were requests, and for others I tried to select ones that felt relevant. Since I’m changing the test setup, I’ve decided I should probably keep doing this until I’ve tested again all of the inks I still have available.

see below

see below

For the paper, I’ve used A4 sheets of Clairefontaine Dessin Croquis 160 g/m², one of my staples that I’m sure I will have available in the next years, printed with a dot pattern with a laser printer, using this pdf. And as for the pen I’ve used a fresh Brause n°361 nib: loading a fountain pen with all of these inks wouldn’t be a reasonable effort, and the 361 is one of the writing implements I use most anyway. I also used a glass pen to fill a couple of squares on the paper with more ink. One side of each sheet was then covered with a strip of 300 g/m² black paper (also from Clairefontaine), kept in place with three dots of non-permanent two sided tape, put in the frame and set out in the sun on the morning of 2026-03-20, the day of the spring equinox.


see below

While I was filling the sheet for the lightfastness tests, I decided to also prepare a second set of sheet, for a liquid resistance drop test.

On each line, beside the name of the ink, I added five sets of crossing parallel lines, and let everything dry for a few days.

Then I used a syringe to put a drop of a liquid on each set of lines, waited for it to be absorbed into the paper and to dry, at least overnight, but sometimes also for a day or two (life happened), and then looked at the results and did the next test.

The first liquid was water, with the usual wild difference between washable and permanent inks, and all of the intermediate possibilities.

The second liquid was isopropyl alcohol, and I was surprised to see that, with very few exceptions, most inks didn’t change at all. I wonder whether that’s related to the fact that instead of forming a drop it was absorbed almost immediately into the paper, and dried in a very short time.

The third liquid was hydrogen peroxide: beside the individual results I noticed that its column yellowed visibly; I wonder whether that means that the paper I used has optical brighteners, and it will also yellow under the sun: that wouldn’t be ideal, but it would also be a surprise, for paper that is acid free and sold for arts.

The fourth liquid was citric acid, by mixing a bit less than a teaspoon of citric acid granules in just enough very warm water (heated to 70°C, i.e. the lowest temperature available on my kettle) to dissolve most of the acid. I forgot that I had some old PH strips until one hour after I’ve put the drop on the paper, and I don’t know whether something had changed, but when I did remember about them it showed a deep red between 1 and 2. I don’t think I can trust those strips too much, however.

This backfired badly: the drop of citric acid never dried out, but formed a sticky paste that prevented me from scanning the results, and I’m not sure whether I’ll do the last test, which was supposed to be household bleach.

see below

see below

Luckily I had scanned the partial results, and they are shown here.


see below

see below

After one full day with plenty of sun, nothing really had changed, except possibly for a vague hint that the Herbin Bleu Myosotis may have have been a bit lighter than it started, but it may also have been a suggestion.


see below

see below

After three days, however, some results started to show, with the most fugitive inks starting to be visibly changed, becoming either paler or in some case duller.


see below

see below

And the full week showed more of that, with a few more inks starting to show visible change.


These are the inks I’ve tested, and here I’ll add notes on the results, as soon as they will be available, keeping this section updated.

When nothing is mentioned, it means that there were no changes, either under the light or under the various liquids.

Lamy Sepia

Not resistant to water, the drop becomes an uniform colour spot.

After one week it started to be just slightly paler.

Sheaffer Skrip Red

Not resistant to water, the drop becomes an uniform colour spot.

After one week it started to be just slightly paler.

Waterman Audacious Red

Not resistant to water, the drop becomes an uniform colour spot.

After three days it started to be just slightly paler, after a week visibly so.

Waterman Harmonious Green

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop looks a bit lighter than the one with just water.

After one week it started to be just slightly paler..

Waterman Mysterious Blue

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop is significantly lighter and tends towards green.

Waterman Serenity Blue

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop is almost completely bleached to a light yellow.

After one week it started to be a bit duller.

Visconti Blue

Not resistant to water, the drop becomes an uniform colour spot.

After one week it was visibly duller, looking darker than the original.

Montblanc Royal Blue

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop is almost completely bleached to a light yellow.

After one week it started to be just slightly duller..

Montblanc Mystery Black

Not resistant to water, the drop becomes an uniform colour spot.

Aurora Nero

Not resistant to water, the drop becomes an uniform colour spot.

Online Duft Blueberry

Not resistant to water, the drop looks very washed out, although a hint of the original shape can be guessed; the hydrogen peroxide drop is almost completely bleached to a light yellow.

After one week it was visibly paler and duller.

Diamine Forever Ink - Smoky Mauve

.

Diamine Forever Ink - Honey Pot

.

Diamine Forever Ink - Coral Blaze

.

Diamine Forever Ink - Red Ochre

.

Diamine Graphite

Not resistant to water, the drop becomes an uniform colour spot.

Diamine Rustic Brown

Not resistant to water, the drop becomes an uniform colour spot.

Diamine China Blue

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop is almost completely bleached to a light yellow.

Diamine Inkvent Purple Edition - Glacier

Not resistant to water, there is a drop of uniform colour, but it maintains a somewhat recognisable shade of the original shape.

Fountainfeder STEVE

Not resistant to water, there is a drop of uniform colour, but it maintains a somewhat recognisable shade of the original shape.

Pilot Iroshizuku Syo Ro

Not resistant to water, there is a drop of uniform colour, but it maintains a somewhat recognisable shade of the original shape.

Pilot Iroshizuku Shin-Kai

Not resistant to water, there is a drop of uniform colour, but it maintains a somewhat recognisable shade of the original shape.

Rohrer & Klingner IG Ebony

Not resistant to water, there is a drop of uniform colour, but it maintains a recognisable shade of the original shape; under hydrogen peroxide the shade is significantly lighter.

KWZ IG Orange

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide drop is significantly bleached to a light orange.

Kallipos.de Schwarze Eisengallus-Tinte

Water stains the paper, leaving however the original shape quite visible; is it almost completely bleached by hydrogen peroxide.

Kallipos.de Blaue Eisengallus-Tinte

Water stains the paper, leaving however the original shape quite visible; is it almost completely bleached by hydrogen peroxide.

Rohrer & Klingner IG Salix

Water stains the paper, leaving however the original shape quite visible; is it almost completely bleached by hydrogen peroxide.

Rohrer & Klingner IG Scabiosa

Water stains the paper with a significant purple spot, leaving however the original shape quite visible; is is a bit bleached by hydrogen peroxide, but still quite readable.

Pelikan Edelstein Tanzanite

Not resistant to water, the drop becomes an uniform colour spot, but there is a visible trace of the original shape.

Montblanc Burgundy Red

Not resistant to water, the drop becomes an uniform colour spot, with just a hint of the original shape; slightly bleached by hydrogen peroxide.

Cifra inchiostro finissimo verde alla lavanda

Not resistant to water, the drop becomes an uniform colour spot; quite bleached to a light yellowish green by hydrogen peroxide.

After one week it was visibly paler.

Sennelier Abstract acrylic ink 917 purple

.

The Feather Pen Ink

.

Eloquentia Inchiostro nero

.

DeAtramentis Document Blue

.

DeAtramentis Document BlueGrey

.

DeAtramentis Document Brown

.

DeAtramentis Document Fuchsia

.

DeAtramentis Document Grau

.

DeAtramentis Document Green Grey

.

DeAtramentis Document Light Grey

.

DeAtramentis Document Moosgrün

.

DeAtramentis Document Orange

.

DeAtramentis Document Purpurviolett

.

DeAtramentis Document Urban Sienna

.

KWZ Sheen Machine

Not resistant to water, the drop becomes an uniform colour spot; the hydrogen peroxide bleached away the red sheen. This was one of the only two inks to react to isopropyl alcohol, which caused a pale cyan halo around the lines.

After three days it was still perfectly readable, but had visibly lost some red sheen, after one week the red had completely gone and it looked very dark blue (but still shiny)

KWZ Walk over Vistula

Not resistant to water, the drop becomes an uniform colour spot.

KWZ Warsaw Dreaming

Not resistant to water, the drop becomes an uniform colour spot.

Octopus Neon Violett

Water very lightly stains the paper, leaving however the original shape quite visible. The other ink that reacted to isopropyl alcohol, with a pale purple halo around the lines.

Octopus Write & Draw Elephant Black

.

Platinum blue black

Water stains the paper, leaving however the original shape quite visible; it is significantly bleached by hydrogen peroxide.

Pelikan 4001 Brillant-Schwarz

Not resistant to water, the drop becomes an uniform colour spot.

Pelikan 4001 Blau-Schwarz

Water stains the paper, leaving however the original shape quite visible; it is significantly bleached by hydrogen peroxide.

Pelikan 4001 Königsblau

Not resistant to water, the drop becomes an uniform colour spot, with just a hint of the original shape; significantly bleached by hydrogen peroxide.

After three days it had started to be slightly paler.

Herbin Bleu Myosotis

Not resistant to water, the drop becomes an uniform pink spot, significantly bleached by hydrogen peroxide.

After three days it was already visibly paler, after one week it was a pale grey.

Faber Castell Royal Blue

Not resistant to water, the drop becomes an uniform colour spot, with just a hint of the original shape; significantly bleached by hydrogen peroxide.

After three days it was slightly duller.

Koh-I-Noor Fountain pen ink blue

Not resistant to water, the drop becomes an uniform colour spot, with just a hint of the original shape; significantly bleached by hydrogen peroxide.

After three days it had started to be slightly paler, more so after one week when it had also turned grey.

Koh-I-Noor Document Ink Blue

.

Koh-I-Noor Document Ink Black

Water leaves a very light stain, but the original shape doesn’t look changed.

DeAtramentis Document Black

.

Waterman Intense Black

Not resistant to water, the drop becomes an uniform colour spot, with a trace of the original shape still visible; very lightly bleached by hydrogen peroxide.

Herbin Perle Noir

Not resistant to water, the drop becomes an uniform colour spot, with a trace of the original shape still visible.

Parker Quink black

Not resistant to water, the drop becomes an uniform colour spot.

Platinum Carbon black

.

Rohrer & Klingner Documentus Black

.

Sailor Pigment Kiwaguro

.

Platinum Dyestuff Red

Not resistant to water, the drop becomes an uniform colour spot; very lightly bleached by hydrogen peroxide.

Noodler’s Eternal Polar Blue

.


  1. which would be spend the day covered by mostly closed shutters anyway, because they receive quite a bit of direct sun, and we don’t want that to enter the house during the summer.↩︎

  2. and thus, I hope, not especially UV-filtering.↩︎

13:21

Perfectly normal hobby (#Stargate) [RevK®'s ramblings]

I'll keep saying it - perfectly normal hobby...

The [legitimate] excuse was testing LED placement and reliability - how close we can place them, can we put vias under them reliably, what size vias, how much power do a lot of LEDs really use. Also testing the code to place LEDs in rings and other formats automatically. These are all sensible questions, and answered best by getting a few test boards made - ones with lots of tightly packed LEDs. Another test is using PCB files to automatically make OpenSCAD data to allow designs to work directly from PCB to make 3D models. A complicated little project, and once again, best tested by actually having resin cases made and confirming how well they fit - so you need a few resin cases.

So it is legit R&D, honest - trial and error, pushing boundaries, etc. The fact I have a couple of design tweaks in both the LED PCB and the 3D model design is why I have a few now. I mean everyone should own at least five Stargate models, right?

Now, I do have some of the LED panels for sale on Tindie. But I can't really sell these R&D prototypes. The base 3D design is also non-commercial licence, so I can't really sell that (well, maybe at cost). So now trying to work out a good home for a handful of gates. I don't seem to know quite enough geeks... Toot for more info.

I have made a video on how it all goes together... No toaster required. Enjoy...

12:49

Bluesky's future for devs [Scripting News]

There's a conference in Vancouver this weekend for people who are developing apps for Bluesky. They have a protocol they are proud of called AT Proto. A sexy name, but imho it doesn't do anything that Twitter's API did 20 years ago. So why do people hope it'll make a difference for independent developers? I think they're believing because they want to believe in something, a magic potion that will make it easy for the web to overcome the power of the silos like Twitter, Facebook, Threads and Bluesky too.

I feel most sympathy for the developers who are using AT Proto to make writing tools that use the web as their prototype for what a good text editor would do. But they overlook the problem that Bluesky itself has most of the limits on writing that Twitter has, although Twitter is working slowly to get rid of the limits, presumably because when Elon Musk saw them he thought the limits were bullshit, as I do too and always have. It was a tragedy for the web, the day Twitter decided the web wasn't a good model for writers of "tweets" -- they had to get rid of style, links, editing, enclosures and add a character limit so people couldn't use it for a longform writing platform.

The division created a problem that users have always wanted someone to solve -- they don't want to have to copy/paste everything they write into five different editors because none of the silos can connect, much like the Apple TV series of the same name. Each silo is a world unto itself. And somehow, Bluesky which preserves the silo tradition, also claims to be a lover and supporter of the open web, truly outstanding VC hype.

Here's what Bluesky could do to turn me into a fan. Get rid of the limits. Then the people who have created writing tools for AT Proto will have a market to serve. We will of course convert WordLand to serve that newly enabled user base. Maybe that's what the writing tools devs are anticipating -- the day when Bluesky decides that character limits have outlived their usefulness. And that links, the core innovation of the web, deserves to be loved, not hidden as if it's too much power for their users. When we can add an enclosure to help be sure that podcasting survives the latest BigSilo onslaught (it has survived all that came before, I have no reason to believe this time will be any different). They do also need to support inbound and outbound RSS so we can easily hook everything together. I will praise them individually and collectively. I would love to be wrong! I will sing a song in their name.

Rule #4 of Rules for Standards-Makers: "People choose to interop because it helps them find new users. If you have no users to offer, there won't be much interest in interop."

That's where Bluesky is stuck. If they want to keep their devs and to attract new ones, they have to give them access to all their users. All of them. And the only way to do that is to get rid of the limits, to make it the one twitter-like platform that can handle everyone else's tweets, and every writing tool ever written for the web before Twitter came along -- ie Tumblr and WordPress, and everything anyone can think of that conforms to the standards that power the web -- HTTP and HTML. I've suggested we settle on Markdown as the core writing functionality of these platforms.

The problem is that Bluesky doesn't have much of a business model if all their users can walk out the door every night. Not much monetizable value in that, but it would be good for the web, and for civilization.

11:21

James Valleroy: Stagger v0.1.0 [Planet Debian]

I’ve decided it’s time to tag a v0.1.0 release on my roguelike game project, Stagger. It’s more of a small demo than a full game at this point. It is turn-based, and has purely text-based “graphics”, like the original Rogue.

Here’s a “screenshot”:

####################
#..................#
#.@................#
#....|.............#
#..................#
#.........>........#
#..................#
#..................#
#..................#
####################

HP: 10/10

You can find the repository at either of these locations:
https://git.sr.ht/~jvalleroy/stagger
https://codeberg.org/jvalleroy/stagger

The game is developed in Python, using ncurses. It is dual-licensed under AGPL and MPL.

09:14

Systems and the default to yes [Seth's Blog]

Joseph Brandlin is a scofflaw.

After months of fighting to get the city council to put a stop sign on the corner of the dangerous intersection near his home, he simply did it himself. A first-rate, professional job that cost more than $1,000. As he was finishing the job at 1:30 am, he was arrested and charged with a felony.

A hundred years ago, the default was that pedestrians were in charge. Cars were guests, only going where they were invited. But the persistent productivity and cultural force of the automobile carried the day, and the default flipped. The roads must roll.

If it can be paved or straightened or sped up, it is. If the car wants it, the answer is “yes.”

80,000,000 people have died as a result of automobiles over time. (It’s harder to estimate how many lives were saved or enriched by this massive shift in the transport of food, people and resources.) A successful system can redraw our maps and our expectations.

When systems gain momentum like this, it’s because they create urgent and immediate value, enough to disrupt the status quo. And once the status quo has changed, the momentum becomes normal, the way things are, until persistent community action (or another, even more relentless system) changes the defaults.

The system doesn’t care about Joseph Brandlin’s kid. It cares about the flow and the status of those that maintain that flow.

Ironically, his arrest is almost certainly going to result in a stop sign being installed. Using one system (the media) to change another.

We’re all living through the biggest and fastest systemic shifts in a century, whether we want to or not. The internet, healthcare, the aging of populations and now, particularly, AI–they’re changing defaults. It’s possible (even likely) that individuals will go out in the middle of the night and seek to change something in their neck of the woods, but as we’ve seen with system change before, that’s not usually the reliable path to make a lasting impact.

Every system eventually acts as if it’s more important than the people it was built to serve. HAL isn’t going to open the pod bay door merely because you insist. But persistent systemic action often bends the system toward better. And better is up to us.

Friday, 27 March

23:42

What if a dialog wants to intercept its own message loop? [The Old New Thing]

So far, we’ve been looking at how a dialog box owner can customize the dialog message loop. But what about the dialog itself? Can the dialog customize its own dialog message loop?

Sure. It just has to steal the messages from its owner.

The dialog box can subclass its owner and grab the WM_ENTER­IDLE message. Now, maybe it should be careful only to grab WM_ENTER­IDLE messages that were triggered by that dialog and not accidentally grab messages that were triggered by other dialogs.

HANDLE hTimer;

LRESULT CALLBACK EnterIdleSubclassProc(HWND hwnd, UINT message,
    WPARAM wParam, LPARAM lParam, UINT_PTR id,
    [[maybe_unused]] DWORD_PTR data)
{
    if (message == WM_ENTERIDLE &amp:&
        wParam == MSGF_DIALOGBOX &&
        (HWND)lParam == (HWND)id) {
        return SendMessage(hdlg, message, wParam, lParam);
    } else {
        return DefSubclassProc(hwnd, message, wParam, lParam);
    }
}

INT_PTR CALLBACK DialogProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    LARGE_INTEGER twoSeconds;

    switch (message) {
    ⟦ ... ⟧

    case WM_INITDIALOG:
        hTimer = CreateWaitableTimerW(nullptr, FALSE, nullptr);
        twoSeconds.QuadPart = -2 * wil::filetime_duration::one_second;
        SetWaitableTimer(h, &twoSeconds, 2000, nullptr, nullptr, FALSE);
        SetWindowSubclass(GetParent(hdlg), EnterIdleSubclassProc,
                          (UINT_PTR)hdlg, 0);
        ⟦ other dialog box setup ⟧
        return TRUE;

    case WM_ENTERIDLE:
        OnEnterIdle(hdlg, (UINT)wParam, (HWND)lParam);
        return 0;

    ⟦ ... ⟧
    }

    return FALSE;
}

When the dialog box initializes, we create the periodic waitable timer (for demonstration purposes) and also subclass our owner window with the Enter­Idle­Subclass­Proc. We use the dialog window handle as the ID for two reasons. First, it lets us pass a parameter to the subclass procedure so it knows which dialog box it is working on behalf of. (We could also have passed it as the data parameter.) More importantly, it allows multiple dialogs to use the Enter­Idle­Subclass­Proc to subclass their owner, and the multiple subclasses won’t conflict with each other.

The subclass procedure checks whether it is a WM_ENTER­IDLE, marked as coming from a dialog box message loop, and where the dialog box handle is the one we have. If so, then we forward the WM_ENTER­IDLE back into the dialog for processing. That processing consists of using the On­Enter­Idle function we created at the start of the series, which processes waitable timer events while waiting for a message to arrive.

Okay, but should we be careful to grab WM_ENTER­IDLE messages only if they correspond to our dialog box? Because if the owner displays some other modal dialog box while our dialog is up (not really a great idea, but hey, weirder things have happened), then we still want to process our waitable timer events. But on the other hand, maybe that other dialog wants to customize the message loop in a different way. Probably best to steal messages only if they originated from our dialog box.

The post What if a dialog wants to intercept its own message loop? appeared first on The Old New Thing.

23:14

22:56

03/27/26 [Flipside]

Just posted an advance look of the Book 13 cover on my Patreon! I am planning to finally start the Book 13 Kickstarter very soon, hopefully in April!
https://www.patreon.com/user?u=4949215

Bits from Debian: New Debian Developers and Maintainers (January and February 2026) [Planet Debian]

The following contributors got their Debian Developer accounts in the last two months:

  • Jongmin Kim (jmkim)
  • Yifei Zhan (yifei)
  • Sébastien Noel (twolife)

The following contributors were added as Debian Maintainers in the last two months:

  • Andreas Dolp
  • Dandan Zhang
  • M Hickford

Congratulations!

I Saw U: Singing on Top of Mt. Erie, Riding the 70 at Night, and Pulling Me out of Lake Washington in October [The Stranger]

Is it a match? Leave a comment here or on our Instagram post to connect! by Anonymous

Cool Boots, Mt Erie Summit

Your singing voice caught my eye (ear?) at the top of Mt Erie. You boiled water for lemon ginger peppermint tea. Maybe we can share a cup soon?

Angel of reassurance

Andie/Andy- you assured me when my date went to the bathroom at Gao Lhao Bangkok Noodle that she wasn't out of my league. Thx for calming me!

Bear Creek Village in Redmond

You: Hot, Handsome white guy in a black cap, hoodie, w beard in a black car with a woman. Me: Eating in green SUV. You had me looking back a few. Damn

I-5 N Green Utility Jacket Goddess with a Right-Hand Drive

While fixing my mascara in I-5 traffic, I had to do a double of your RHD Toyota Prado. I was caught off guard by how gorgeous you are. Dinner?

Cute Bait Shop Tomboy Tuesday 3/17

Saw you as I was leaving. You smiled at me w/ the loveliest smile. Time stopped. You: in a booth. White LA hat. Me: Black hair & puffy coat.

To the tall redheaded goddess who shops where I work:

You came in wearing a G2G hat and complimented my long hair. We’ve made a lot of eye contact and I’d like to make more. Come find me at checkstand two

70 mishap fairview at night

u got on the bus after the stop. i was in all black. kept making eye contact. again in a trench coat outside slu whole foods. ur cute i wanna know u

you pulled me out of the lake and called 911

Sunday Oct 5 circa 7:30PM I had fallen into lake Wash. was able to swim to shore but couldn't get out. I called for help you saved me -dinner/drink?

Is it a match? Leave a comment here or on our Instagram post to connect!

Did you see someone? Say something! Submit your own I Saw U message here and maybe we'll include it in the next roundup!

22:07

Min Lin Is an Undisputable Champion of Comedy [The Stranger]

An interview with Min Lin, one of our 2026 Undisputed Champions of Comedy. by Megan Seling

Our interview series with this year's Undisputable Champions of Comedy continues! Last week, you got to know Scott Losse (and his Taco Time order), and today I'm featuring Min Lin, who is sunshine in human form (and sometimes performs with her service dog companion Sunny). 

Lin started performing stand-up, but admits she didn't love it at first. She didn't love people at all, actually. She credits Sunny for being a catalyst for changing her outlook. "Training Sunny as my service dog and having Sunny by my side helped me exist in the world differently," she says. Indeed, Sunny sometimes makes guest appearances onstage when Lin is performing her silly and optimistic sets around town at spots like Emerald City Comedy Club, Joketellers Union, and Laughs Comedy Club (where she recently opened for Irene Tu).

          View this post on Instagram                      

A post shared by Min Lin (@min_lin_comedy)

Describe your comedy in five words.
Warm and super silly human.

Now that you’ve been declared an Undisputed Champion of Comedy, is there anyone in your life who said you wouldn’t make it, and you would now like to take this opportunity to rub it in their stupid face?
My older brother has always been the doubter in my life. Hey Kurt! Watch me roar! 

I am in love with your dog, Sunny. She makes such good faces! Will she be joining you onstage on April 4?
I am also in love with my dog, Sunny. She is the undisputed champion of silly goof. Is this an official invitation for her? If so, yes! 

You’ve mentioned that Sunny has helped “rewire your brain,” and that has played a big role in making your dreams of performing stand-up comedy come true. Can you talk a little more about that?
I used to overanalyze every interaction with people. I had a hoodie that said, "Ewwww people," and it reflected accurately how I felt about people. Training Sunny as my service dog and having Sunny by my side helped me exist in the world differently. Sunny rewired my brain to be grounded in newfound worthiness. Sunny was solely responsible for pushing me over the threshold of finally pursuing comedy, my lifelong dream since I was 13. And my kids are 13 now. So it all feels magical. By the way, I love people now.

Do you remember your first time doing stand-up? Did you love it from the start?
It was at Big Time Brewery in the U-District. I brought Sunny. I sat in the corner behind the support column so no one could see me throughout the night. While on stage, I talked super fast the entire time. I had a joke about Rhododendron. My materials didn't make any sense to anyone, not even to myself. But my only goal was to get up on stage, so I felt triumphant. My therapist was at that mic. It was a huge milestone for our therapeutic relationship. I am goal-oriented; I didn't love it from the start, I love it now.

Seattle has lost some great comedy spots recently—Here-After closed, and Rendezvous, which had some regular showcases and open mics, changed owners. With that, where is your favorite place to see comedy in Seattle right now?
The Seattle comedy scene has very creative producers and a huge pool of talents with unique voices that are always evolving. Live comedy is one of the best things you can support to say "F you" to AI. There are so many comedy shows in and around the city! Come check out a live comedy show this week! I love performing at Laughs Comedy Club, Club Comedy of Seattle, Emerald City Comedy Club, Old Stove Brewery Queen Anne and Ballard locations! I did a secret sold-out Don't Tell Comedy show in a stranger's house on Cap Hill recently. The guy was super nice, he gave me a giant cat wheel for free. Our cat runs on the wheel for treats, it's so cute! Shout out to Yashar!

For more funny business, watch Lin in conversation with the evening's host, Emmett Montgomery: 

          View this post on Instagram                      

A post shared by The Stranger 🗞 (@thestrangerseattle)

See Min Lin perform at The Stranger's Undisputable Champions of Comedy at Washington Hall on April 4, 7:30 pm, 21+. Tickets available here.

Not the Next Williamsburg, the Next Bellevue [The Stranger]

Sound Transit's Crosslake connection is nearly 20 years in the making. And it's going to make us all think Bellevue is cool. Maybe. by Claudia Balducci

In 2018, The Stranger asked me point-blank: would light rail turn Bellevue into the next Williamsburg, a “bastion of weirdos and warehouse parties?” I said no. Eight years later, I was sort of right and sort of wrong. 

I have spent my entire political career fighting to bring light rail to the Eastside. When I started that fight many years ago as a Bellevue City Councilmember, I took it up because I truly believed that it would improve the lives of my constituents. That means commuters, of course. But I also imagined nurses getting to rest their feet on a quick and easy train ride home after work, people with disabilities having a whole new way to get around, and tech workers opting to get out of their cars and onto the train.

Those dreams are about to be realized when the light rail across the I-90 bridge finally opens this Saturday, March 28. But dreams that I could not have imagined at the outset of my light rail crusade are also going to be realized.

Light rail enabled us to envision, plan, and build an entirely new neighborhood in Bellevue, the Spring District, which includes affordable housing and community spaces right next to a light rail station. Through partnerships with Amazon, King County, the City of Bellevue, and BRIDGE Housing, Sound Transit created 234 apartments for low-and-middle-income residents. Unfortunately for that hopeful Stranger journalist, we had to remove several warehouses to do that, and had fewer locations for those Williamsburg-style warehouse parties. 

But culture is alive in Bellevue. Light rail now links the entire region to the BelRed Arts District, which has the highest concentration of arts and cultural businesses, organizations, and artists east of Lake Washington. It will bring people from across our county to enjoy and support our local art scene.

And it’s not just good for people. Light rail will allow dogs from all over the area to experience the joys of the Marymoor Dog Park, sometimes referred to as “Doggie Disneyland.” And don’t worry, I’m working with Sound Transit on a dogs-on-trains policy that will keep everyone involved safe and happy.

I still don’t think Bellevue is going to be the next Brooklyn. I think it’s going to be something new. It’s going to be the next Bellevue. Come and see for yourself—we’re just a train ride away!

Claudia Balducci is a King County Councilmember representing the Eastside and a Sound Transit Board member who has spent the last 20 years championing light rail on the Eastside. 

20:42

RSS 2.0 as a network [Scripting News]

Yesterday I hatched an idea of a demo program that turns RSS 2.0 feeds with rssCloud into a WhatsApp-type communicator. I called it rss.network, and asked ChatGPT to draw a prototype.

How I did it. I pasted a screen shot into ChatGPT, and wrote:

  • "i want you to draw me something very specific, it's a chat screen like the image pasted above, but in the window it says rss.network. in the conversation two people are talking about how you can plug anything into the network now in 2028 because all an app needs to connect is RSS 2.0 support. it's a conversation between Harry and Sally. two or three messages back and forth. use your imagination."

It did exactly what I asked. The result was this image.

I bought the domain and turned it into a website in a few minutes with my outliner.

One day later (today)..

I wrote a description of the app (below) and gave it to Claude.ai, including the image that ChatGPT produced.

  • "here's a screen shot of a mythical app that someday i'd like to develop. i have all the network stuff done, rssCloud servers, websockets software. but the user interface i don't have. i want something as simple as what you see here. a user has a name and each message is an RSS 2.0 <item>. the user's profile info is in the header part of the feed. so don't worry about that stuff, the messages will arrive automatically, all the app has to do is place them on a screen that looks like this. how to??"

It came back with a very usable design and implementation as a browser-based JavaScript app. I put it in the demo folder on my Digital Ocean server where you can run it by clicking on this link. It doesn't do anything, but it really would be easy to put it together with feeds, as we use them in FeedLand and WordPress. It's quite a team.

For now you'd use FeedLand to set it up for you and your friends, who would just use it. (I thought I needed an identity system, but what I really need to define a chat group is a subscription list, the standard stuff of RSS 2.0 systems.)

Should I finish this app tomorrow, or should I let someone else have the honor? :-)

It's time to adjust our thinking about where the value is in software. Getting a new design ready to use in order to experiment, to try out a new idea, was a big bottleneck, now you just have to ask for it.

I may have found my calling in all this. I know how to design network user interfaces. The important thing is now to use open formats and protocols so we don't go through the same nightmare of silos we've dealt with since Twitter 1.0 (over 20 years now).

19:49

Running a Plan 9 network on OpenBSD [OSnews]

This guide describes how you can install a Plan 9 network on an OpenBSD machine (it will probably work on any unix machine though). The authentication service (called “authsrv” on Plan 9) is provided by a unix version: authsrv9. The file service is provided by a program called “u9fs”. It comes with Plan 9. Both run from inetd. The (diskless) cpu server is provided by running qemu, booted from only a floppy (so without local storage). Finally, the terminal is provided by the program drawterm. The nice thing about this approach is that you can use all your familiar unix tools to get started with Plan 9 (e.g. you can edit the Plan 9 files with your favorite unix editor). I’m assuming you have read at least something about Plan 9, for example the introduction paper Plan 9 from Bell Labs.

↫ Mechiel Lukkien

If you’re running OpenBSD, you’re already doing something better than everyone else, and if you want to ascend to the next level, this is a great place to start. Of course, the final level, where you leave your earthly roots behind and become a being of pure enlightened energy, is running Plan 9 on real hardware as the universe intended, but let’s not put the cart before the horse.

One day, all of humanity will just be an endless collection of interconnected cosmic Plan 9 servers, more plentiful than the stars in the known universe.

Will “AI” chatbots be the tobacco of the future? [OSnews]

Towards the end of 2024, Dennis Biesma decided to check out ChatGPT. The Amsterdam-based IT consultant had just ended a contract early. “I had some time, so I thought: let’s have a look at this new technology everyone is talking about,” he says. “Very quickly, I became fascinated.”

Biesma has asked himself why he was vulnerable to what came next. He was nearing 50. His adult daughter had left home, his wife went out to work and, in his field, the shift since Covid to working from home had left him feeling “a little isolated”. He smoked a bit of cannabis some evenings to “chill”, but had done so for years with no ill effects. He had never experienced a mental illness. Yet within months of downloading ChatGPT, Biesma had sunk €100,000 (about £83,000) into a business startup based on a delusion, been hospitalised three times and tried to kill himself.

↫ Anna Moore at The Guardian

These stories are absolutely heart-wrenching, and it doesn’t just happen to people who have had a history of mental illness or other things you might associate with priming someone for “falling for” an “AI” chatbot. Just a few years in, and it’s already clear that these tools pose a real danger to a group of people of indeterminate size, and proper research into the causes is absolutely warranted and needed. On top of that, if there’s any evidence of wrongdoing from the companies behind these chatbots – intentionally making them more addictive, luring people in, ignoring established dangers, covering up addiction cases, etc. – lawsuits and regulation are definitely in order.

Only yesterday, Facebook and Google lost a landmark trial in the US, ruling the companies intentionally made social media as addictive as possible, thereby destroying a person’s life in the process. Countless similar lawsuits are underway all over the world, and I have a feeling that in a few years to decades, we’ll look at unregulated, rampant social media the same way we look at tobacco now.

Perhaps “AI” chatbots will join their ranks, too.

Microsoft removes trust for drivers signed with the cross-signed driver program [OSnews]

Today, we’re excited to announce a significant step forward in our ongoing commitment to Windows security and system reliability: the removal of trust for all kernel drivers signed by the deprecated cross-signed root program. This update will help protect our customers by ensuring that only kernel drivers that the Windows Hardware Compatibility Program (WHCP) have passed and been signed can be loaded by default. To raise the bar for platform security, Microsoft will maintain an explicit allow list of reputable drivers signed by the cross-signed program. The allow list ensures a secure and compatible experience for a limited number of widely used, and reputable cross-signed drivers. This new kernel trust policy applies to systems running Windows 11 24H2, Windows 11 25H2, Windows 11 26H1, and Windows Server 2025 in the April 2026 Windows update. All future versions of Windows 11 and Windows Server will enforce the new kernel trust policy.

↫ Peter Waxman at the Windows IT Pro Blog

The cross-signed root program was discontinued in 2021, and ran since the early 2000s, so I think it’s fair to no longer automatically assume such possibly old and outdated drivers are still to be trusted.

18:28

Folk Etymologies [Penny Arcade]

As something of a connected phenomenon - my instinct is to say "corollary," but I think that's not correct - as Penny Arcade was unearthed by the wily Zillenial, the many fruits of our enterprise became known. The true facts of the name PAX, for example - a name I came up with in five seconds at Costco because we got a call saying the show thing we were trying to do needed a name. I'm always delighted when someone finds the information I tucked in there. Never you mind that the next question is usually "what's a Penny Arcade" because that's not what this story is about!!!

18:14

Paul Tagliamonte: librtlsdr.so for fun and profit [Planet Debian]

Interested in future updates? Follow me on mastodon at @paul@soylent.green. Posts about hz.tools will be tagged #hztools.

It’s well known and universally agreed that radios are cool. Among the contested field of coolest radios, Software Defined Radios (SDRs) are definitely the most interesting to me. Out of all of my (entirely too many) SDRs I own, the rtlsdr is still my #1. It’s just good. It’s a great price, extremely capable, reliable, well-supported, and compact. Why bother with anything else? Sure, it can’t transmit, uses a (fairly weird) 8 bit unsigned integer IQ representation, limited sampling rate, limited frequency range – but even with all that, it’s still the radio I will pack first. Don’t get me wrong, I love my Ettus radios, PlutoSDRs, HackRFs, my AirspyHF+ - they’re great! I just always find myself falling back to an rtl-sdr, every time.

Perhaps the best reason to use an rtlsdr is the absolutely mind-boggling amount of cool stuff people have written for it. The rtlsdr API is super easy to use, widely supported if you’re building on top of existing radio processing frameworks – it’s still a shock to me when something omits rtlsdr support.

sparky

Over the last 7 years, I’ve been learning about radios – I got my ham radio license (de K3XEC), hacked on some cool stuff where I’ve learned how radios work by “doing”, and even was lucky enough to give my first rf-centric talk at districtcon. Embarrassingly, I still haven’t gotten around to learning how the fancy stuff like GNU Radio works. I’m sure I’m going to love it when I do.

As part of this, I’ve also cooked up some very unprofessional formats and protocols I use for convenience. Locally, all my on-disk captures are stored in rfcap or more recently arf (post on this coming soon), while direct SDR access at my house is almost entirely a mix of the widely used rtl-tcp protocol, and my “riq” protocol (post on this coming soon). Both rtl-tcp and riq operate over the network, so I don’t have to bother with plugging things into USB ports, and I can share my radios with my friends.

All of that work sits in my current generation of radio processing code, “sparky” (a reference to spark-gap transmitters), which is a heap of Rust, supporting everything from no_std for embedded experiments, conditional support for interfacing with all the radios I own, and tokio-based async support in addition to blocking i/o for highly concurrent daemons. This quickly advanced beyond my old Go-based code (hz.tools/go-sdr), which I archived so I can focus on learning. I still think Go is a great language to write RF code in – but I can’t focus on that tech tree anymore.

Of course, this now poses a new problem – no one supports my format(s) or radio protocol(s), since, well, I’m the only one using them. I’ve committed a fair amount of my hardware to this setup, and yanking it from the rack to try something out does pose a bit of a pickle. This isn’t a huge deal for learning, but it does make it tedious to try out something from the internets.

librtlsdr.so

Thankfully, Rust has robust support for wrap[ping itself] in a grotesque simulacra of C’s skin and mak[ing its] flesh undulate, which is an attractive nuisance if i’ve ever seen one. Naturally, my ability to restrain myself from engaging in ill-advised rf adventures is basically zero, so it’s time to do the thing any similarly situated person would do – reimplement the API and ABI of librtlsdr.so, backed with sparky instead.

Since enumeration of devices is going to be annoying (specifically, they’re over the network), I decided early-on to rely on an explicit list of devices via a configuration file. I’d rather only load that once so programs don’t get confused, so I opted to use a CTOR to run a stub when the ELF is linked at runtime.

// lightly edited for clarity

#[used]
#[expect(unused)]
#[unsafe(link_section = ".init_array")]
pub static INITIALIZE: extern "C" fn() = sparky_rtlsdr_ctor;

#[unsafe(no_mangle)]
pub extern "C" fn sparky_rtlsdr_ctor() {
 let config: Config = {
 if let Ok(config_bytes) = std::fs::read("/etc/sparky-rtlsdr.toml") {
 toml::from_slice(&config_bytes).unwrap()
 } else {
 Config { device: vec![] }
 }
 };
 CONFIG.set(config);
}

Next, it’s time to start with the basics. Opening and closing a handle using rtlsdr_open and rtlsdr_close. Given we don’t control the runtime, and the rtl-sdr device handle is opaque (for good reason!), I opted to smuggle a rust Box<Device> non-FFI safe heap-allocated struct through the device handle pointer, and let C take ownership of the Box. No one should be looking in there anyway.

// lightly edited for clarity

#[unsafe(no_mangle)]
pub unsafe extern "C" fn rtlsdr_open(dev: *mut *mut Handle, index: u32) -> int {
 let config = &CONFIG.device[index as usize];
 let sdr = match config.load() {
 Ok(v) => v,
 Err(err) => {
 return -1;
 }
 };
 let handle = Box::new(Handle { config, sdr });
 unsafe { *dev = Box::into_raw(handle) };
 0
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn rtlsdr_close(dev: *mut Handle) -> int {
 let dev = unsafe { Box::from_raw(dev) };
 drop(dev);
 0
}

With that in place, we can chip away at the API surface, translating calls as best as we can. I won’t bother listing it all, since it’s not very interesting – but here’s an example implementation of rtlsdr_set_sample_rate and rtlsdr_get_sample_rate. These calls are translating from an rtl-sdr frequency (which is a u32 containing the value as Hz) into a sparky Frequency type, and invoking get_sample_rate or set_sample_rate on the device’s rust handle. Since each device implements the sparky Sdr trait, the actual underlying device doesn’t matter much here.

#[unsafe(no_mangle)]
pub unsafe extern "C" fn rtlsdr_set_sample_rate(dev: *mut Handle, rate: u32) -> int {
 let dev = unsafe { &mut *dev };
 let rate = Frequency::from_hz(rate as i64);
 if let Err(err) = dev.sdr.set_sample_rate(dev.channel, rate) {
 return -1;
 }
 0
}

#[unsafe(no_mangle)]
pub unsafe extern "C" fn rtlsdr_get_sample_rate(dev: *mut Handle) -> u32 {
 let dev = unsafe { &mut *dev };
 let freq = match dev.sdr.get_sample_rate(dev.channel) {
 Ok(freq) => freq,
 Err(err) => {
 return 0;
 }
 };
 freq.as_hz() as u32
}

After repeating this process for the rest of the stubs I could (and otherwise setting error conditions if the functionality is not supported), I was ready to try it out. Within sparky, I patched my “MockSDR” (basically a Sdr traited Mock type) to implement the same testmode IQ protocol that the RTL-SDR has, and decided to see if rtl_test from apt without any changes could be fooled.

$ rtl_test
No supported devices found.

Great, cool. No devices plugged in. Looks great. Let’s try it with my librtlsdr.so LD_PRELOAD-ed into the binary first:

$ LD_PRELOAD=target/release/librtlsdr.so rtl_test
Found 1 device(s):
 0: hz.tools, mock sdr, SN: totally legit no tricks

Using device 0: sparky mock sdr
Supported gain values (0):
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...
^CSignal caught, exiting!

User cancel, exiting...
Samples per million lost (minimum): 0
$

Outstanding. Even more outstandingly, if I change my testmode implementation to skip samples, rtl_test correctly reports the errors – I think it’s showing promise! On to try the real endgame here – let’s have our new librtlsdr.so connect to an rtl-tcp endpoint and see if rtl_fm works:

LD_PRELOAD=target/release/librtlsdr.so \
 rtl_fm -d 1 -s 120k -E deemp -M fm -f 90.9M | \
 ffplay -f s16le -ar 120k -i -
Found 2 device(s):
 0: hz.tools, mock sdr, SN: totally legit no tricks
 1: hz.tools, rtl-tcp, SN: node2.rf.lan:1202

Using device 1: sparky rtltcp node2
Tuner gain set to automatic.
Tuned to 91170000 Hz.
Oversampling input by: 9x.
Oversampling output by: 1x.
Buffer size: 7.59ms
Sampling at 1080000 S/s.
Output at 120000 Hz.

And there it was! Not the best audio quality (mostly due to my inability to correctly read the rtl_fm manpage to tune the filter and downsample/oversampling rates to audio), but it’s definitely passable. I figured I’d try something that was a bit more interesting next – gqrx, since it’s super handy, I use it a ton, and will definitely amuse me to no end. To my surprise and delight, LD_PRELOAD=target/release/librtlsdr.so gqrx wound up running, and I saw my devices pop right up in the setting menu:

Huge. Huge. Amazing. It did crash as soon as I tried to actually use the radio, but after fixing a few dangling bugs in the API surface (and some assumptions I think some underlying gnuradio driver may be making that I need to double check in the code), I was able to get a super solid stream of broadcast fm radio, with gqrx being none the wiser. It thought it was “just” talking to the device it knows as rtl=1.

Nice. I can’t wait to try this with the rest of the rtl-sdr based tools I like having around using my riq protocol next. I don’t think that’ll be worth a post, but hopefully I’ll get around to publishing details on that stack next.

epilogue

Well. That’s it. End of story. A bit anti-climatic, sure. While this new shim will provide me endless minutes of mild amusement, I could see using this to expose my sparky testing utilities via librtlsdr.so – my “mock sdr” driver allows for replaying captures off disk, which could be interesting to make sure that signals are still properly decoded after changes, or instrument performance changes (via SNR, BER, packets observed, etc) on reference samples I have on my NAS. Maybe that’ll come in handy one day!

Truth be told, I’m not sure I actually want to encourage anyone to do this for real (although I think I’ll definitely be using it on my LAN to see what happens). I also don’t have a repo to share – I don’t particularly feel with dealing with the secondary effects of publishing sparky (and sparky-rtlsdr) yet, since i’m still getting my feet under me on the radio aspect of all this.

I’ll be sure to post updates if anything changes with this here (tagged sparky) and at @paul@soylent.green. I can’t wait to post more about some of the odd sidequests (like this one!) i’ve completed over the last few years – I’ve been waiting to feel confident that my work has matured and was withstood the new problems i’ve thrown at it, and it largely has.

It’s my hope that these projects (and this project in particular) has provided a glimpse into the world of software defined radio for my systems friends, and a bit about systems for my radio friends. It’s not all magic, and I hope someone out there feels inclined to have some fun with radios themselves!

17:42

Humble Bundle + CARE: Fueling women’s economic power [Humble Bundle Blog]

Last March, in celebration of International Women’s Day and Women’s History Month, thousands of everyday gamers, readers and creators came together to do something extraordinary. Through a partnership with CARE, more than $340,000 was raised to support women around the world. Funds raised contributed to CARE’s Women’s Economic Growth Fund, helping CARE expand access to economic opportunity for at least 8,500 women; women who are starting …

The post Humble Bundle + CARE: Fueling women’s economic power appeared first on Humble Bundle Blog.

17:28

The Best Bang for Your Buck Events in Seattle This Weekend: Mar 27–29, 2026 [The Stranger]

No Kings Protest, Crosslake Connection Opening, and More Cheap & Easy Events Under $20
by EverOut Staff

Whatcha up to this weekend? We've got some ideas for ya, from the No Kings Protest threepeat to A Town Hall on Security and Surveillance and from Sound Transit's Crosslake Connection Opening Day to the final weekend of the U District Cherry Blossom Festival. Looking for more options? Check out our top picks of the week.

FRIDAY PARTIES & NIGHTLIFE

Touching Grass
Are you chronically online? Or maybe fluent in cringe and constantly reciting deep cut vocal stims? Then Touching Grass might be exactly what you need. This club night is all about transmuting brainrot into full-body catharsis, soundtracked by a chaotic blend of happy hardcore, hyperflip, breakcore, trap, and other genres so niche it’ll feel like your algorithm gained sentience. Whether you show up nonverbal or only ready to communicate in half-remembered memes and lyrics, take this as your chance to shamelessly bring your weird, silly, digital self IRL. LANGSTON THOMAS
(Kremwerk, Downtown, $15-$25)

Slog AM:  Central District Loses its Only Walgreens, 2 Line’s Crosslake Connection Opens Tomorrow, TSA Workers Might Finally Get Paid [The Stranger]

The Stranger's morning news roundup. by Charles Mudede

What is this? It’s a key element of a development initiated in 2015 by Vancouver BC’s Westbank: the installation of a 747 jet once operated by United Airlines and sent to a California graveyard in 2017. The whole project, however, was delayed due to financial woes attributed to the COVID-19 pandemic and rising construction costs resulting from supply chain disruptions. In September, 2025, Westbank lost control of the project to OPTrust, a developer based in Toronto. The reconstruction of a Boeing 747 between the ground floors of two 47-story towers on 1200 Stewart Street began earlier this year. It is now close to completion. But it arrives as a relic twice over. For one, it’s a relic of the major role Seattle played in the history of aerospace; and, two, it’s a relic of the economic and construction boom Seattle experienced, thanks to Amazon, during the previous decade. Amazon is no longer the hiring powerhouse it once was (it recently lost its top spot as Seattle’s biggest employer to the University of Washington) and continues to bleed jobs. So, this installation has, at this point, no future in it. And as the present recession worsens, it will look more and more absurd.

Just when you thought Seattle’s pharmageddon might be abating, it strikes again. Its latest victim is on 23rd and Jackson. This part of town, which used to be the Central District’s commercial hub, lost a Starbucks in 2022—the building remains empty to this day, despite years-long unrealized rumors of Black Coffee Northwest’s plan to occupy the space. In January, the only grocery store in the neighborhood, Amazon Fresh, abruptly closed and immediately transformed an area that once had an excellent supermarket, Promenade Red Apple Market, into a food desert. Now the Seattle Times reports that Walgreens, the Central District’s only pharmacy, plans to close its doors on May 19. A reason for the closure was not provided by the company, which was bought by a private equity firm (Sycamore Partners) in 2025. But a year before this acquisition, Walgreens announced that it would begin closing 1,200 (roughly 14 percent) of its stores because they were “underperforming.” The Seattle area has already lost all of its Bartell Drugs stores because its parent company, Rite Aid, which acquired the family-owned chain in 2020, was bankrupt and closing its stores. When it rains it pours.

One hopes that April will not be a cruel month, that it will repeat the mood of much of March, which has enjoyed a bit of snow and kept things cool and wet. March, however, has been utterly mean to a huge part of the United States, which is still experiencing a record-breaking heat wave. The Pacific Northwest, and much of the East Coast, managed to remain in a mixture of winter and spring while several states entered a drought months before summer began to sizzle. Today, Seattle can expect a low of 37 and some clouds. 

Remarkable Weather Channel article about the unprecedented heat wave and not a single word about #climatechange.

Embarrassing, and journalistic malpractice in this day and age.

weather.com/forecast/reg...

[image or embed]

— Peter Gleick (@petergleick.bsky.social) March 25, 2026 at 3:07 PM

The 2 Line, which connects Seattle and Bellevue, finally opens tomorrow after “years of construction setbacks.” Indeed, many of us came to the conclusion that it would never happen; that the Crosslake Connection, which involves two key stations (one at Judkins Park; the other on Mercer Island), was nothing more than a costly engineering dream. But Sound Transit proved us skeptics wrong. This part of the line will start singing “I am for real” tomorrow morning.

It seems the stock market has finally come to its senses and no longer believes a word exiting the president’s mouth. The war Trump started with Iran has no end in sight; there are no meaningful secret deals happening through back channels. Ain’t nothing going on but a bunch of social media posts that say one thing today and something else tomorrow. (These worthless announcements are accompanied by “suspicious trading.”) If you are not in the know—aka not in Trump’s inner circle of billionaires—then you’ll likely get burned in this corrupt market. The Dow is presently down 500 points after falling nearly 500 points yesterday.

The Senate unanimously passed a measure that would pay Transportation Security Administration workers but not ICE’s thugs, who, by the way, are still getting paid due to Trump’s One Big Beautiful Bill. And so their presence at a number of line- and employee-stressed airports (standing here, standing there; looking up, looking down) is seen as a slap in the face of those who haven’t received a paycheck in weeks. The Senate’s TSA measure has to go through the House before reaching the president’s desk.

TSA workers have been going a month with no paycheck and they’re pissed that ICE agents are getting paid to chill and play airport cop.

“TSA officers are sickened that we have unqualified DHS employees walking the airports, with pay, while we all suffer doing our qualified work unpaid.”

[image or embed]

— Christopher Webb (@cwebbonline.com) March 25, 2026 at 7:59 PM

Let’s end AM with Open Mic Eagle’s irony dripping track “woke up knowing everything (opening theme)”:

17:07

GNU Taler 1.5 released [Planet GNU]

We are happy to announce the release of GNU Taler v1.5.

GNU Taler 1.4 released [Planet GNU]

We are happy to announce the release of GNU Taler v1.4.

[$] The many failures leading to the LiteLLM compromise [LWN.net]

LiteLLM is a gateway library providing access to a number of large language models (LLMs); it is popular and widely used. On March 24, the word went out that the version of LiteLLM found in the Python Package Index (PyPI) repository had been compromised with information-stealing malware and downloaded thousands of times, sparking concern across the net. This may look like just another supply-chain attack — and it is — but the way it came about reveals just how many weak links there are in the software supply chains that we all depend on.

The telnyx packages on PyPI have been compromised [LWN.net]

The SafeDep blog reports that compromised versions of the telnyx package have been found in the PyPI repository:

Two versions of telnyx (4.87.1 and 4.87.2) published to PyPI on March 27, 2026 contain malicious code injected into telnyx/_client.py. The telnyx package averages over 1 million downloads per month (~30,000/day), making this a high-impact supply chain compromise. The payload downloads a second-stage binary hidden inside WAV audio files from a remote server, then either drops a persistent executable on Windows or harvests credentials on Linux/macOS.

New coal seam exploitation, AUS [Richard Stallman's Political Notes]

*Australia approves new coal seam gas expansion.* Is that really "Like lighting a cigarette while trying to quit"?

In my view, that comparison is not quite valid. Rather, extending the gas mines is like taping extender segments onto the mouth end of the cigarette, so that it never burns out.

Renaming AI to SALAMI [Richard Stallman's Political Notes]

*Let's forget the term AI. Let's call them Systematic Approaches to Learning Algorithms and Machine Inferences (SALAMI).*

Putinesque Iran to target water, elec. [Richard Stallman's Political Notes]

*Iran says it will "irreversibly destroy" Middle East infrastructure if US attacks energy sites.*

It is a war crime for either side to destroy civilian energy infrastructure, and this would be a disastrous one. But the bigger evil would be that of whichever country starts doing this. The wrecker says he plans to do so.

Israel still hitting West Bank territory [Richard Stallman's Political Notes]

*Israeli settlers have carried out a series of attacks across the occupied West Bank, setting homes and vehicles on fire and wounding several Palestinians in what witnesses described as coordinated raids on communities.*

The fanatical and violent "settlers" have been carrying out terrorist attacks on Palestinians for more than a decade, with police and border patrol watching passively, escalating step by step as they shift the government's stance.

16:56

Today's RSS cleanup [Scripting News]

Did some work on my RSS feed this morning.

  1. There was only one source:account element in my RSS feed and it was to a Twitter account I lost control of a few weeks ago, the account I had there since 2006, that at one time was in the top 10 accounts on Twitter. I changed the account to bullmancuso -- one of my many testing sites on Twit, and added my Mastodon and Bluesky accounts. I will check the bullmancuso account every so often, but the masto and bluesky ones are several times daily. And the funny thing is that I have far more Bluesky and Mastodon accounts than Twitter accounts. Put that in your press release. ;-)
  2. I updated the JSON version of the RSS feed, but noticed the Masto and Bluesky accounts (above) hadn't come through, and then on further investigation I realized that I hadn't been keeping it up to date for quite some time! The rule is every time something is added to the XML version I have to also add support for it in the JSON version. This is where Claude came in handy, it gave me a list of all the updates that were needed and I did them. We make a pretty good team imho. The two versions should be in sync now.
  3. A note on my JSONification of RSS. When I first did it in 2010, it was on a lark. I was tired of hearing how people didn't like XML so could I please switch. So I did and published it, and I think no one used it. The idea of a JSON version of RSS is in the air again, so I brought it up to date. I want to serve it with a different https-friendly address, but probably won't get to that today.
  4. The reason I wanted to work on this today because I have to add RSS-generating code to wpIdentity, so I needed to get warmed up on that part of the world.
  5. The new version of the daverss package is 0.6.15.

14:07

Stable kernel update to fix regression on LoongArch platform [LWN.net]

Greg Kroah-Hartman has announced the release of the 6.12.79 stable kernel. This release only reverts a patch that caused a regression on the LoongArch platform; users who could not build 6.12.78 on LoongArch need to upgrade.

13:21

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (389-ds:1.4, gnutls, mysql:8.0, mysql:8.4, nginx, nginx:1.24, opencryptoki, python3, vim, and virt:rhel and virt-devel:rhel), Debian (firefox-esr, ruby-rack, and thunderbird), Fedora (fontforge, headscale, kryoptic, libopenmpt, pyOpenSSL, python-cryptography, rubygem-json, rust-asn1, rust-asn1_derive, rust-cryptoki, rust-cryptoki-sys, rust-wycheproof, vim, and vtk), Oracle (freerdp, golang, mysql:8.0, and ncurses), Red Hat (osbuild-composer), Slackware (libpng and tigervnc), SUSE (chromium, frr, kea, kernel, nghttp2, pgvector, python-deepdiff, python-pyasn1, python-tornado6, python-urllib3, python3, python310, ruby2.5, salt, sqlite3, systemd, tomcat, vim, and xen), and Ubuntu (libcryptx-perl).

13:14

Error'd: Timely Reminder [The Daily WTF]

There is no particular theme this week, except that I have noticed many of these contributors are providing "customized" email addresses. This is a practice which I too have followed, to detect who is selling my email address to spammers. I would use a consistent login id for many web sites, and a decent password generated by a mental algorithm, with a unique email address for each site. It worked great until some website wanted to know specifically what "my" email address is, and I couldn't remotely remember which of 300 variant email addresses I had signed up for their services with.

First up, Martin is traveling by air. "I have heard it's so beautiful this time of year, so I look forward to visit @arrCity_SLPH." Martin helpfully explains "First sentence is in Danish: Your SAS-booking has been confirmed."

0

 

Dr. Bob Bobbers, PhD would rather drive. "Somehow I'm projected to arrive 20 minutes ago. I had started in one timezone and was finishing in the next timezone to the east, and when I had connectivity, the ETA was right, but somehow seems to have stopped computing correctly when I went offline."

1

 

Caleb B. thinks Amazon's AI-generated coding practices don't compute. "I've been working with my kid a lot with her math homework explaining that the alligator eats the bigger number. I think someone at Amazon needs to learn it too."

2

 

Andrew knows that there's a difference between > and ⋝. "Tried to upload my insurance card back and front. Apparently I cannot please the webserver."

3

 

And finally, Daniel D. has a timely reminder that we should all bear in mind so that nobody else has to: "Set your country, set your time zone and they should match. Google thinks otherwise, offering only one option (Czechia) for the selected country (Slovakia). The timezone is correct as the whole Central Europe uses the same time (CET). But the basic rule of usability is: Don't make me think!"

4

 

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

12:00

Arturo Borrero González: New job at Chainguard [Planet Debian]

Chainguard logo

A few months ago, in June 2025, I joined Chainguard, a company focused on software supply chain security. This post is a reflection on how I got here, what I’ve been doing, and why this role feels like a natural fit for my interests in Linux and open source technology.

The company and its mission

Chainguard’s mission is to make the software supply chain secure by default. The company is built around the idea that the software we all depend on — from operating system packages to container base images — carries hidden risk in the form of vulnerabilities, unverified provenance, and untrusted build processes.

The company is perhaps best known for Chainguard Images: a catalog of minimal, hardened container base images that are continuously rebuilt and kept free of known CVEs. Each image is accompanied by a signed SBOM (Software Bill of Materials) and a verifiable provenance attestation, making it possible to cryptographically verify what went into a given image and how it was built.

Chainguard has an extensive catalog of software, and maintaining it up-to-date and CVE-free is a significant engineering challenge.

What I do

I joined the Chainguard Sustaining Engineering team as a Senior Software Engineer. We are responsible for maintaining packages and images in the software catalog up-to-date and CVE-free. The core of the business, basically.

We focus on the horizontal dimension of the catalog (pretty much all packages and images).

With +30,000 packages and +2,000 images, this is indeed an interesting task.

My role as Debian Developer, and my experiencie in the Debian LTS project was extremely valuable when joning this new team.

Looking ahead

Software supply chain is truly a deep topic, gaining more and more relevance every day, especially as new technologies emerge and get adopted everywhere.

Since early in my career, I saw a recurrent problem of how companies, enterprises, or even governments, relate to and consume open source software, in a reliable, secure way. I believe Chainguard is doing the right things in the ecosystem, and I’m happy to be participating in the effort.

08:28

What’s in the status bottle? [Seth's Blog]

It’s often mislabeled. Sometimes the contents can make us ill, especially if we drink too much.

Status is easy to sell. But despite how often people buy the promise, it rarely delivers.

08:07

Samuel Henrique: I use curl with ECH btw (in Debian) [Planet Debian]

tl;dr

This is an experimental feature that, for the first time, brings full ECH support to curl on Debian using OpenSSL.

Starting with curl 8.19.0-3+exp2 (Debian Experimental), you can now use ECH, with HTTPS-RR and DoH for maximum privacy.

curl 8.19.0-3+exp2 is quite fresh at the time of writing, bear in mind that your repository might not have synced the package yet, all mirrors should have it by March 27th 14:00 UTC.

# defo.ie is a test server that confirms whether ECH was successfully used
curl -v --ech hard https://defo.ie/ech-check.php
# For Encrypted Client Hello (ECH) + DNS over HTTPS (DoH)
curl -v --ech hard --doh-url https://1.1.1.1/dns-query https://defo.ie/ech-check.php

"--ech hard" tells curl to refuse the connection entirely if ECH cannot be negotiated.

Or, if you would like to try it out in a container:

podman run debian:experimental /bin/bash -c 'apt install --update -t experimental -y curl && curl -v --ech hard --doh-url https://1.1.1.1/dns-query https://defo.ie/ech-check.php'

(in case you haven't noticed, apt now has the --update option for the upgrade and install commands)

For Privacy

CloudFlare calls it "the last puzzle piece to privacy" in their must-read announcement: https://blog.cloudflare.com/announcing-encrypted-client-hello/.

Encrypted Client Hello (rfc9849) encrypts the "which website are you connecting to?" part of the TLS handshake that was previously visible in plaintext.

HTTPS-RR (rfc9460) is a DNS record type that publishes connection parameters for a service, including the public key clients need to perform ECH.

DNS Over HTTPS (rfc8484) encrypts DNS queries by tunneling them over HTTPS, hiding what domains you're looking up from network observers.

When all three operate together over a CDN with shared IP space, the target domain name is hidden from passive observers; the HTTPS-RR record is queried over DoH in order to retrieve the ECH key (rfc9848) for the TLS handshake.

Seems like quite an important feature, and in fact the major browsers have it enabled for some time now, the trick is that they do not use OpenSSL (Chrome uses BoringSSL and Firefox uses NSS).

For everyone else, the only option is to patch OpenSSL or wait until 4.0.0 is released, and so part of the reason Debian is the first distro to enable it (curl + OpenSSL + ECH) is that the OpenSSL maintainer (Sebastian Andrzej Siewior) packaged the alpha release just 3 days after it was published.

Do not forget that ECH support is experimental and currently relies on the alpha release of OpenSSL.

wcurl Gets It Too

Considering wcurl is just a wrapper on curl, it gets the feature for free:

wcurl --curl-options="--ech hard --doh-url https://1.1.1.1/dns-query" $URL

If you're using wcurl, you don't want to have to set parameters, this is just to show that the feature is there and if you have a .curlrc file, it can enable the feature seamlessly.

Other Debian Releases

Given the ECH feature requires OpenSSL >= 4, it will not make it to Debian 13, having a small chance of going to Debian 13 Backports (emphasis on small).

It should get to Debian Unstable and Debian Testing within the next couple of months as the OpenSSL GA release happens and gets packaged, but you should be able to install the package from Experimental in your Unstable and Testing systems without issues. It will also be in Debian 14 once it becomes the new Stable.

Shoulders of Giants

Stephen Farrell's presentation from OpenSSL Conference 2025 has a lot of background on the work involved:

Encrypted Client Hello – Lessons learned from trying to do something that was probably too complicated

They have been working on implementing ECH in open-source projects for years, something as big as this doesn't happen without lots of people dedicating both their paid and free times over it.

I ended up being the person who enabled it on Debian, which was pretty much the least amount of work between everyone involved, but hey it's fun flipping the switch and telling you about it.

Background

Since 2025, the curl developers started organizing an yearly meeting with all maintainers of curl in Operating Systems. The 2026 edition happened in March 26th: https://github.com/curl/curl/wiki/curl-distro-discussion-2026.

Attendance was really good, and as you can imagine one of the topics of discussion was ECH, in which it was pointed out that having OpenSSL 4 was the main requirement but besides it nothing unusual was needed.

In Debian Experimental, we have been enabling HTTPS-RR since March 2025, and OpenSSL 4.0.0 alpha was packaged just recently (2026-03-13) by Sebastian Andrzej Siewior, it's time for the next step.

The curl distro meeting was just the motivation I needed to go ahead and enable it in Debian Experimental, so as part of our Debian Brasil Weekly Meetings I've prepared and uploaded the changes, while Carlos Henrique Lima Melara worked on addressing a recent test regression for Debian Unstable. Unfortunately sergiodj couldn't join and I'm sure he's jealous of the hacking session now.

Appendix

While writing this, I've noticed one of the authors of the CloudFlare blogpost is the previous curl maintainer on Debian; Alessandro Ghedini let me take over the maintenance back in 2021 and today curl is maintained by a team of 4 people, it's nice to see Alessandro's involvement.

07:49

Dunk And Egg [Penny Arcade]

New Comic: Dunk And Egg

Folk Etymologies [Penny Arcade]

New Comic: Folk Etymologies

05:42

US courts generally rejecting equating criticism of Israel with antisemitism [Richard Stallman's Political Notes]

US courts are generally rejecting attempts to equate criticism of Israel or support for Palestinians' rights with antisemitism.

Ignorance, misunderstanding and obfuscation ended US-Iran nuclear talks [Richard Stallman's Political Notes]

*How ignorance, misunderstanding and obfuscation ended [US-] Iran nuclear talks.*

They had made substantial progress before they were abruptly ended when the US and Israel started to attack instead.

*Oman claims Israel pushed US into Iran war when deal [with Iran] was possible.*

WATCA bill [Richard Stallman's Political Notes]

The WATCA bill, which is one way of taxing the rich more, will provide only a small benefit for non-rich Americans. That's because its main method of helping them is by reducing their income tax, and poor people's income tax is already low.

In and of itself, WATCA is better than nothing, but we should focus on supporting other bills that would tax the rich more than that in order to help the non-rich more than that.

The imperialist says Israel attacked Iran gas wells without telling him [Richard Stallman's Political Notes]

The imperialist says Israel attacked Iran's gas wells without telling him, and he has ordered Israel not to attack them again.

Whether or not he is telling the truth about what happened, it is at least somewhat of a relief that he seems to realize how much any further such attacks would backfire.

Heavy-handed actions accelerating US's decline [Richard Stallman's Political Notes]

Owen Jones: *[the Bully] thinks brute force will arrest the US's decline. His heavy-handed actions in Iran are only accelerating it.*

Gulf of Hormuz closure sending enormus profits to rich people [Richard Stallman's Political Notes]

The closure of the Gulf of Hormuz is sending enormous windfall profits to a few rich people. There should be a windfall profits tax in place all the time for the sake of future fossil fuel price spikes, so that governments won't need to act fast.

Parents deported to Honduras had no chance to arrange childcare for their children [Richard Stallman's Political Notes]

* In interviews with dozens of parents deported to Honduras, as well as physicians and psychologists, government officials and staff at reception centers for deportees, researchers found that many parents were deported quickly after they were [jailed], without a chance to arrange for the care of their children.*

We understand the cause of this: deportation thugs are acting out hatred towards immigrants in general, and are eager for the chance to be cruel.

Christian Zionists want to help Israel conquer Middle East [Richard Stallman's Political Notes]

Christian Zionists want to help Israel conquer much of the Middle East, believing that then sacrifices will trigger biblical prophecies which will result in forcing Jews to convert to Christianity or else be damned.

It is not easy to get along with fanatics like that. It is unlikely that the prophecies would actually come true, but there is no telling what might they do if the situation arises and the prophecies do not come true.

New York City cops pressed charges against snowball fight participants [Richard Stallman's Political Notes]

New York City cops have pressed charges against some of the participants in a snowball fight which they entered, apparantly as an excuse to find fault with Mayor Mamdani.

Bondi treated Congress with contempt [Richard Stallman's Political Notes]

Bondi treated Congress with contempt by refusing to take an oath for her testimony.

At least she showed a minuscule level of respect for the oath to tell the truth — by refusing to take the oath and then lie anyway. That is a start, at least. Perhaps in the future she can be convinced to show truthfulness a little more respect, and then a little more, and so on.

Connection focused platforms less harmfull than algorithm-driven apps [Richard Stallman's Political Notes]

* World Happiness Report finds platforms focused on connection less harmful than algorithm-driven apps.* For example, Instagram was more damaging to mental health than WhatsApp.

Both of the client programs are nonfree software, thus damaging to users' freedom.

Canadian and daughter are in deportation prison [Richard Stallman's Political Notes]

The deportation thugs are once again working unpredictable cruelty. A Canadian who married an American, and her daughter, are in a deportation prison, being pressured to "self-deport". The thugs have given no explanation for jailing them despite their valid visas.

US banks a step closer to weaker regulation [Richard Stallman's Political Notes]

The wrecker has granted the biggest US banks a step towards weaker regulation. Banks can cause a disastrous crash if they are not careful in how much and how readily they lend. That's what caused the 2008 financial crisis.

In Europe, the result was disaster for countries that needed deficit spending to get out of the recession but were banned by the Euro zone rules from doing that: Spain, Italy and especially Greece. But the crisis was profitable for the biggest banks, since governments were compelled to bail them out rather than allow them to actually fail.

Naturally, the biggest banks wanted to be allowed to do this again. And naturally the wrecker gave it to them.

Russia shutting off mobile phone networks [Richard Stallman's Political Notes]

In the name of "security", Russia is shutting off mobile phone networks, but in an unpredictable way which causes trouble for many activities, some of which Putin has no evident motive to shut down.

Ironically, it means people have to live the way I choose to live. It is a little inconvenient and much less vulnerable to surveillance.

Survivor from boat US military attacked [Richard Stallman's Political Notes]

Finally, there is a survivor from one of the boats that the US military attacked and sunk.

Maybe the survivor will testify about what the people on the boat were doing.

Smokeless fuels produce ultrafine particles [Richard Stallman's Political Notes]

Burning "smokeless" fuels at home produces produce less particulate pollution of the usual size, but instead produces lots of ultrafine particles.

The usual particulate pollution damages people's health. Does the small particulate pollution do likewise?

05:00

Girl Genius for Friday, March 27, 2026 [Girl Genius]

The Girl Genius comic for Friday, March 27, 2026 has been posted.

00:21

Hope You're Hungry [The Stranger]

Do you need to get something off your chest? Submit an I, Anonymous and we'll illustrate it! by Anonymous

To the guy who chose to shout insults at me for parallel parking on a two-way street today:

I used my indicator way ahead of time and waited for a safe break in traffic to park. Parked the moment I got a break in one straight shot in spite of your honking that started the second after I stopped my car. Apparently, waiting six seconds and missing a green light was enough for you to roll down your window and scream at a woman you have never met and call her a "bitch."

We all experience frustration in Seattle traffic, but most have the decency to keep it to themselves rather than putting down a stranger over such a minor inconvenience. If this interaction was enough to put you over the edge, you must rarely get a break from your own self-righteous anger.

Special mention to everyone around who kept to themselves and didn't intervene.

I hope you choke on a bag of dicks.

Do you need to get something off your chest? Submit an I, Anonymous and we'll illustrate it! Send your unsigned rant, love letter, confession, or accusation to ianonymous@thestranger.com. Please remember to change the names of the innocent and the guilty.

Ticket Alert: Jungle, Mon Laferte, and More Seattle Events Going On Sale This Week [The Stranger]

Plus, LeAnn Rimes and More Event Updates for March 26
by EverOut Staff

Which shows will you be seated for? British funk trio Jungle has announced a new album and upcoming tour with a stop in Seattle this fall. Genre-spanning Chilean-Mexican star Mon Laferte brings her Femme Fatale Tour to the 5th Avenue Theatre. Plus, vocal powerhouse LeAnn Rimes celebrates 30 years of her debut major-label album Blue. Read on for details on those and other newly announced events, plus some news you can use.

ON SALE FRIDAY, MARCH 27

MUSIC

Acid Bath
Paramount Theatre (Sat Aug 8)

Altın Gün with Alex Maas
Showbox SoDo (Tues Sept 8)

The Aquabats!
The Showbox (Sat June 13)

Sound Transit Considers Delaying Ballard Light Rail [The Stranger]

On Tuesday, Strauss shot an email out to residents, encouraging them to show up to the town hall with concerns about light rail. Only four people did. The 19 other speakers wanted to talk about homeless people  living in RVs, road hazards, and yes, public safety. After the meeting, Strauss said he expected that. It is Ballard after all. by Micah Yip

As someone who usually light rails around the city, driving from Capitol Hill to Ballard was like enduring Dante’s nine levels of hell. Red-line traffic up I-5, east to west surface street chaos, Apple Maps ETA climbing. By the time I reached the Ballard Community Center for Councilmember Dan Strauss’ town hall last night, another 12 minutes had been added to my 35-minute commute.

The situation was too on-the-nose. It was Strauss’ first town hall since Sound Transit announced it’s considering delaying the long-promised and voter-approved Ballard Light Rail Extension. At a board retreat last week, Sound Transit presented members three options to address its $34.5 billion shortfall over the next 20 years, none of which included a Ballard stop. “Ballard Dan” Strauss, who represents the neighborhood, issued a news release expressing his disappointment.

“The Ballard Link Extension is projected to serve the most riders of any project in Sound Transit history,” he wrote. “Sound Transit needs to sharpen their pencils, do the analysis, and bring us a plan that gets to Ballard.” 

On Tuesday, Strauss shot an email out to constituents, informing them of the Sound Transit developments and reminding them to RSVP for the town hall and send in their questions. Only four people talked about the light rail. The 19 other speakers wanted to talk about homeless people  living in RVs, road hazards, and yes, public safety. After the meeting, Strauss said he expected that. It is Ballard after all.

One person asked if everything had been done to minimize the cost of the Ballard link, considering Sound Transit tacked on the cost of the planned second light rail tunnel through downtown Seattle, which would expand the line’s capacity and allow more trains to run.

That’s one of Strauss’ gripes. In 2021, when Sound Transit updated cost estimates and reworked the Sound Transit 3 plan, it separated the West Seattle–Ballard project into two different ones.  The second tunnel—a major, expensive piece of infrastructure—stayed tied to the Ballard segment, which is why Ballard’s extension seems so costly on paper.

“We have to look at cost sharing for that downtown tunnel because the region benefits from it,” Strauss said. 

Miss Kimball, an eight-year Ballardite in her 80s, can’t drive. Getting anywhere—to the hospital in First Hill after a recent stroke, or to the theater—meant waiting for transfers in the rain and snow. We need better service “to take part in all of the arts and culture that we have in the city,” she told Strauss. He agreed.

King County Metro should have provided that service, he said, after the Seattle Transit Measure was passed by voters in 2020 to fund more metro hours. 

“We have less service today than we did in the pandemic,” Strauss said. “Metro is overlooking Ballard. They’re not spending our money.”

Kirk Robbins, who served alongside Strauss on the Ballard District Council, asked Strauss how they could get Sound Transit to come up with an option that includes a Ballard link.

Strauss said he told the board that they’ve zoned Ballard specifically for light rail and that they need to revisit the drawing board. “I’m not gonna give up on it,” he told Robbins.

Green Lake resident Thomas Powers, a volunteer with Seattle Subway, asked if Strauss considered new revenue sources, like a special tax district. 

“We’re looking at all of it,” Strauss said. “But for a special district where we can tax ourselves more, we don’t have enough people to fund everything.”

While the Ballard light rail fans didn’t turn out in force to Strauss’ town hall, they appeared to pack the room at Thursday’s Sound Transit board meeting. Seattle Subway has organized a letter writing campaign and a call to action. “Solutions to ST3 problems absolutely exist, Sound Transit just needs to hear that we, the public, demand they use them,” reads the rallying cry on their site. Those upcoming board meetings should be interesting.

Correction: A previous version of this story incorrectly stated there wasn't a direct bus service from Ballard to downtown.

Thursday, 26 March

23:35

Petter Reinholdtsen: The 2026 LinuxCNC Norwegian Developer Gathering [Planet Debian]

The LinuxCNC project continues to thrive. I believe this great software system for numerical control of machines such as milling machines, lathes, plasma cutters, routers, cutting machines, robots, and hexapods would benefit even more from in-person developer gatherings. Therefore, we plan to organise another gathering this summer as well.

We invite you to a small LinuxCNC and free software fabrication workshop/gathering in Norway this summer, over the weekend starting June 26th, 2026. As last year, we maintain a slightly broader scope and welcome people outside the LinuxCNC community. As before, we suggest to organise it as an unconference, where participants create the program upon arrival.

The location is a metal workshop 15 minutes' drive from Gardermoen airport (OSL), with plenty of space and a hotel just 5 minutes away by car. We plan to fire up the barbecue in the evenings. Please let us know if you would like to join. We track the list of participants on a simple pad. Please add yourself there if you are interested in joining.

Our friends over at the TS Robotics team at the University of Oslo have offered to handle any money involved with this gathering, that is, holding sponsor funds and paying the bills. We hope to secure enough sponsors to cover food, lodging, and travel. So far, Debian has offered to sponsor part of the expenses, which should cover food and a bit more. Please get in touch if you would like to help sponsor the gathering.

As usual, if you use Bitcoin and wish to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Windows 95 defenses against installers that overwrite a file with an older version [OSnews]

I’ll never grow tired of reading about the crazy tricks the Windows 95 development team employed to make the user experience as seamless as they could given the constraints they were dealing with. During the 16bit Windows days, application installers could replace system components with newer versions if such was necessary. Installers were supposed to do a version check, but many of them didn’t follow this guidance. When moving to Windows 95, this meant installers ended up replacing Windows 95 system components with Windows 3.x versions, which wasn’t exactly a goods thing.

So, they came up with a solution.

Windows 95 worked around this by keeping a backup copy of commonly-overwritten files in a hidden C:\Windows\SYSBCKUP directory. Whenever an installer finished, Windows went and checked whether any of these commonly-overwritten files had indeed been overwritten. If so, and the replacement has a higher version number than the one in the SYSBCKUP directory, then the replacement was copied into the SYSBCKUP directory for safekeeping. Conversely, if the replacement has a lower version number than the one in the SYSBCKUP directory, then the copy from SYSBCKUP was copied on top of the rogue replacement.

↫ Raymond Chen

All of this happened entirely silently, and neither the installers nor the user had any idea this was happening. The Windows 95 team tried other solutions, like just making it impossible to replace system components with older versions entirely, but that caused many installers to break. Some installers apparently even went rogue and would create a batch file that would replace the system components upon a reboot, before Windows 95 could perform its silent fixes. Wild.

I used Windows 95 extensively, and had no idea this was a thing.

22:49

US regulator bans imports of new foreign-made routers, citing security concerns [OSnews]

The U.S. Federal Communications Commission said on Monday it was banning the import of all ​new foreign-made consumer routers, the latest crackdown on Chinese-made electronic gear over ‌security concerns.

China is estimated to control at least 60% of the U.S. market for home routers, boxes that connect computers, phones, and smart devices to the internet.

↫ David Shepardson at Reuters

I’m sure the American public will be thrilled to find out yet another necessity has drastically increased in price.

Apple discontinues the Mac Pro with no plans for future hardware [OSnews]

It’s the end of an era: Apple has confirmed to 9to5Mac that the Mac Pro is being discontinued. It has been removed from Apple’s website as of Thursday afternoon. The “buy” page on Apple’s website for the Mac Pro now redirects to the Mac’s homepage, where all references have been removed.

Apple has also confirmed to 9to5Mac that it has no plans to offer future Mac Pro hardware.

↫ Chance Miller at 9To5Mac

If a Mac Pro falls in the back of the Apple Store and there’s no one around to hear it, does it make a sound?

The Stranger Has a New News Writer! [The Stranger]

Fresh meat. by Stranger Staff

Our new writer Hunter Pauli is a hometown boy. Most recently a reporter for The Inlander, he was born and raised in Seattle. After graduating from the Center School, he served two years in AmeriCorps before attending J-school at University of Montana.

He’s done all kinds of jobs in various newsrooms, but he’s mostly been a roving investigative reporter, covering everything from tar sands pipelines, local Nazi collaborators, to the corrupt Russian oligarch in your backyard. We’re pleased to have him, and asked a few stupid questions to celebrate his arrival.

You’re from Seattle, but you’ve spent your youth travelling The West. Are you coming home to rest?

I wish. There’s no jobs left in the interior that pay a living wage now that housing is almost as expensive in places like Montana as it is in Seattle without the high wages to compensate. I’m all your problem now (again).

Has Seattle gone to the dogs since you’ve been gone? Yes or yes?

Seattle was struggling with spiraling inequality and unaffordable housing when I left during the Recession, but luckily the city fathers fixed all that while I was away. 

Once, you were turned away from a restaurant in Montana because you were so dirty after the rodeo. Do you still get this dirty?

Journalism is a far dirtier industry than rodeo. The stains never really come out, the maître d’s can still smell it on me.

Tell us a rodeo secret.

If a steer snaps its leg they turn up the volume on the arena’s audio board so you don’t hear the gunshot. 

You’ve shot a lot of people, on video. Who stands out?

Dolores Huerta was the most inspiring, Gavin Newsom the least. Shaq stands tallest of all.

Share your worst opinion.

Seattle’s business class should force taxpayers to subsidize the reopening of the old Brooks Brothers on 5th Avenue so people here stop dressing so unprofessionally in the workplace. 

Do you kill spiders, ask others to kill spiders for you, or are you one of those sick people who trap house spiders under cups so you can release them to die of exposure?

I kill without hesitation.

A Google search revealed that, in 2014, you tried marrying your straight male friend to prove a point about discriminatory laws. Were you influenced by I Now Pronounce You Chuck & Larry, or by an internal sense of social justice?

My ethics are a 50/50 split between what I learned from Happy Madison Productions and what I learned in Seattle Public Schools.

Are you still, as USA Today put it, one of the most in-your-face student journalists reporting and writing today?

Technically I graduated long ago but I’m still quite direct in my reporting and writing.

Your great-great-great-grandfather helped found BYU. I know you’re not Mormon, but do you enjoy their loaded sodas?

No, I am a grown-ass man.

Where do you think the Garden of Eden is?

The Garden of Eden is in Discovery Park, I’ve seen it.

Do you know the location of the golden plates?

That part is apocryphal.

Do you have other interests?

I have no hobbies.

Which Seattle public official should be the most scared that you’re in town?

When I was in AmeriCorps NCCC it was Seattle City Councilmember Dan Strauss’ responsibility as a team leader on watch to catch me drinking underage in the barracks in Sacramento. He failed. I won’t. 

Should the Sonics return?

As a card carrying member of the International Cinematographers Guild IATSE Local 600 I think the NBA’s return to Seattle would create a groundswell of good-paying union jobs, and now that Howard Schultz is gone it would be too poetic not to.

Fuck, Marry, Kill: Harborview, Virginia Mason, and Swedish?

Fuck Virginia Mason, Marry Swedish (they delivered me), kill Virginia Mason.

22:42

Deportation-protests as terror, US [Richard Stallman's Political Notes]

*Why We Have to Fight Back Against [deportation] Protesters' Terror Convictions.*

Democracy metrics in steep backslide, US [Richard Stallman's Political Notes]

According to the V-Dem Institute, democracy is in rapid decline globally, and the US is leading the decline.

World-wide, only 18 countries are observed to be democratizing. The article does not give a comparable count of countries that are autocratizing, but they are 40% of the world's population.

Heatwave covering CA, NV [Richard Stallman's Political Notes]

Temperatures in California, Nevada and Arizona are 22-25 °F above normal. Temperatures are about to reach as much as 108°F. The heat will put some people's health in danger, and it's only the very beginning of spring.

If part of July is 22-25 °F above normal, that will kill thousands, or perhaps tens of thousands. This is global heating.

21:14

Link [Scripting News]

rss.network sounds nice. What would it be?

Gen X Is Back to the Future [The Stranger]

Will the world as we know it even reach this year’s midterm elections? This question, which might sound a bit alarmist, now has to be taken seriously because the stage for World War III has been set in the Middle East. by Charles Mudede

It is nothing but terrible that the track, “World Destruction,” that best captured the key anxiety of the 80s, nuclear war, was produced and performed by two men who are now identified as creeps, John Lyndon (aka the Sex Pistols’ Johnny Rotten, now a loud member of UK’s MAGA) and Afrika Bambaataa (the hiphop pioneer was “accused of child sexual abuse multiple times”). But the 1984 track got it right. The drums exploding like extinction-level detonations; the hard rock guitar stabs; the stressed and strained synthesized chorus. The whole maddening idea that the Soviet Union and the United States had, combined, enough nuclear warheads to destroy the world not once but hundreds of times. This was “World Destruction,” a track that resurfaced in my thoughts because of Operation Epic War, the US’s current and unprovoked war with Iran. It too could go nuclear at any moment. 

Now is a good time to talk about my generation, Gen X. We were the first age group to experience the decline of live music and the ascendency of music generated by machines (samplers, synthesizers, beat boxes). We also experienced the first domestic-grade personal computers, whose word processors replaced the electric typewriter; and the first to use cordless phones. We were also introduced not only to the internet but also its influence on the cinema and literature of science fiction (cyberpunk).

Many of these monumental transformations in consumer products are described by music and culture critic Roy Christopher in his new book Post-Self. So considerable and novel were the new receivers, distributors, and processors of data that cyberpunk, a movement at the heart of Post-Self, imagined a future where we could download our self-awareness into the electronic ether of cyberspace and live for as long as no one in the real world pulled the plug. 

My generation was also the last to live, as young adults, within a social reality described as the Cold War. We saw the bomb shelters, and were taught in school to “duck and cover” if a nuclear weapon, launched by the Soviets or its allies, hit our city. 

Indeed, In Post-Self, Roy Christopher recalls watching an episode of the The Twilight Zone called “Time Enough at Last,” which was about a bespectacled and bibliophilic bank teller who survives the detonation of an H-bomb because he happened to be in the bank’s vault. He then roams the ruins of a world that has no other people, but lots of books to read.The bank teller, however, accidently breaks his glasses and is left practically blind. “The trepidation of that tragic moment,” writes Christopher, “recombinant with worries of the apocalypse, was a seed planted in my head. And more than any other Cold War-era image of imminent destruction splashed on the television during my childhood…”

All American Gen Xers have similar stories. For me, it was the “Daisy” ad. Produced in 1964 as a campaign commercial for Lyndon B. Johnson’s presidential run, it shows a girl pulling the petals from a daisy as she imperfectly counts. Right after pulling the final petal, we hear a loud robotic voice begin a countdown to the launching of nuclear weapons. The girl looks up, her face is frozen, and we zoom into her right eye’s iris, which reflects the mushroom cloud of a nuclear explosion. This is the last thing she will ever see. The end of the world brought to you by Johnson’s opponent, a trigger-happy Cold War warrior Barry Goldwater.

 

The fall of the Berlin Wall in 1989 brought the Cold War to an unexpected end, and with it the expectation that we were only a button away from a nuclear apocalypse. We placed that fear into the background and turned our attention to another anthropogenic crisis that, though achieving mainstream status in the 1960s with books such as Silent Spring, obtained an eschatological register in the 1980s, global warming: the rise of greenhouse gases, the depletion of the ozone layer, and so on. 

That movement, however, never produced anything that matched the cultural impact of the “Daisy” ad, or The Day After, a TV show watched by over 100 million people when first aired by ABC on November 20, 1983. Later, President Ronald Reagan would write in his diary that he was seriously spooked by the show’s realism. In fact, he credited his decision to sign a treaty with the Soviets that banned short- and medium-range missiles to the TV show. 

Nothing of this kind has happened with the crisis of climate change. We are still burning fossil fuels with an abandon that’s nothing short of astonishing. No matter how bad or extreme our weather gets, we still demand, above all, cheap gas. And it’s likely that Donald Trump’s party might, during the midterm elections, lose both the House of Representatives and the Senate because of “pain at the pump.”

CNBC reports that the “Democratic Congressional Campaign Committee shared with CNBC first its new ad campaigned  targeting closely-watched districts across the country and lashing out at the GOP for high gas prices.” So, the Dems are promising to liberate even more carbon into the atmosphere. No reforms. No concern about the environment. Just the usual cheap, but socially costly, consumption of fossil fuels.

But will the world as we know it even reach this year’s midterm elections? This question, which might sound a bit alarmist, now has to be taken seriously because the stage for World War III has been set in the Middle East. At any moment, one might open their phone and read that nuclear missiles have obliterated Tehran and killed millions. This catastrophe, which could have been avoided if Trump had not tossed Obama’s nuclear deal with Iran to the dogs, and is exacerbated by the war in the Ukraine, would soon be followed by others because the key (but unofficial) belligerents in this crisis are the world’s top nuclear superpowers: Russia and China vs the USA and (a reluctant) Europe. It would take only a few weeks to kill billions of humans and leave the rest, the survivors, facing extinction by way of cancers caused by radiation exposure or a long and cold nuclear winter. 

Let’s look at the movie Oppenheimer for a minute. A little short of three years ago, we watched this summer blockbuster about the inauguration of the Cold War and the amassing of extinction-level weapons from what appeared to be the safe distance of the third decade of the 21st century. Oppenheimer wasn’t about our present situation, but about something that happened many years ago (July 16, 1945); happened long before the collapse of the Soviet Union, which also happened long ago. All we had to deal with between then and today—a span of 35 years—were pesky missiles fired over Japan by an anachronism called North Korea. Imagine showing Oppenheimer this summer. How things have changed in such a short space of time. Thanks to the US’s current war with Iran, a war instigated by Trump for reasons that remain very much in the dark, the corpse of that first blast in New Mexico has been reanimated. And Gen X has found itself back in the future.

This time around, however, things might actually be worse because the military is turning more and more of its decision making powers over to AI, which, as Jacobin reports in “Thermonuclear Slop and the Return of the Bomb,” recommends “nuclear strikes in 95 percent” of simulated cases. What can we do about this very dangerous situation? Jacobin recommends reviving the anti-nuclear movement. It had some success in the past; it might have some success—or at least more success than the environmental movement—today. (By the way, some environmentalists have promoted nuclear power as an exit from our current dependency on fossil fuels.) 

But what a true Gen Xer will also recommend is that one come to terms with their maker—in the secular sense. Why? For one, getting an anti-nuclear movement started takes time (which Operation Epic Fury obliterated on day one); and, two, an existential threat of this scale, a global scale, demands a very personal existential resolve that, in itself, is instructive and even spiritual. What the Cold War taught many of us was the fragility of the only world we will ever know and call home.

20:28

Beeper + RSS, please [Scripting News]

When I heard about Matt's product Beeper I thought wow what if that were on the RSS network.

I think RSS should be here. Makes sense doesn't it?

Why not an open independent format from nowhere that no one objects to you using and will not do anything ever to turn you off. It seems it would be fairly easy to add two-way support. :-)

18:07

Slog AM: Potties for Pioneer Square, Olympics Bans Trans Women, Election Fraud Activist Guilty of Election Fraud [The Stranger]

The Stranger's morning news roundup. by Nathalie Graham

King County Assessor Charged in Stalking Case: Last summer, King County Assessor John Arthur Wilson—who was running for King County Executive at the time—was arrested for violating a no-contact order from his ex-fiancée. Wilson had allegedly stalked and harassed his ex, and she had a temporary restraining order against him. Because of conflicts of interest with the assessor's office, the King County Prosecuting Attorney's Office couldn't handle the charges, so they handed the case to the Snohomish County Prosecutor. But the Seattle City Attorney ended up filing the charges. It’s unclear why. Wilson was charged in Seattle Municipal Court. He’s still the King County Assessor, though he says he will not run for re-election. 

In Sonics News: There's actually nothing to be excited about yet, you basketball babies. In a unanimous vote, the NBA Board of Governors gave Commissioner Adam Silver the green light to hold formal talks with Seattle and Las Vegas about maybe expanding the league to one or both of the cities for the 2028-2029 season. Don't hold your breath. A final answer might not come until the end of this calendar year. In the meantime, go to a Storm game?

Landslide Blues: Northbound I-5 near Bellingham is still closed after 12 million pounds of earth fell onto it seven days ago. State transportation crews are doing what they can to secure the slide-prone slope above the roadway, but as KING5 reports, it all takes time. They must clear loose trees and rocks on the hillside and then bolt the slope back into place. The whole thing is snarling traffic and disrupting shipping between the US and Canada. 

Pioneer Square Piss Boxes: After years of failed attempts to give the public a place to piss in peace that is not an alleyway or a Starbucks, Seattle is once again trying to add new bathrooms to its stock. The Seattle Department of Transportation is contracting with private company Throne Labs to install "11 freestanding restrooms across the region, each at cost of around $100,000 a year," reports PubliCola. That's pretty cheap considering Seattle's last potty proposal cost $5 million for four toilets. The Thrones will, of course, only be accessible via "an app, a QR code, text message, or an entry card." You can bet your ass Throne will be keeping tabs on customers. User reviews and sensors in each unit can help identify any restroom rascals. The first two Thrones will come to Pioneer Square. 

The Weather: There will be sun today. It's spring, though, so anything can happen. 

Instagram Addicts Non-Anonymous: Raise your hand if you have been personally victimized by doomscrolling. A 20-year-old woman sued Meta and Google for her childhood addictions to Instagram and YouTube which saddled her with anxiety, depression, and body dysmorphia. Inventions like "infinite scroll" kept the plaintiff hooked on the apps. A Los Angeles jury ordered the tech companies must pay $6 million in damages—$3 million in compensatory damages, and another $3 million in punitive damages. Meta will have to cough up 70 percent of the funds, Google will pay the other 30 percent. This was the first case of its kind to go to trial, but thousands of plaintiffs across the country have filed similar suits, like Tuesday’s New Mexico trial regarding child exploitation and user safety. Meta says it will appeal the LA court’s ruling. 

Timely: Meta laid off several hundred people on Wednesday. The cuts hit multiple divisions across the company, CNBC reports, like "Facebook, global operations, recruiting, sales and its virtual reality division Reality Labs." Meta's big plan is to funnel resources into AI. 

Sad Days for American Science: Top NASA climate scientist Kate Marvel resigned from her position on Wednesday. She blamed the Trump administration's attack on science. Marvel said that none of her internally funded projects actually got funded once Trump took office. You can read her resignation letter here. The New York Times reports that Marvel is one of around 95,000 federal science employees who are no longer in their roles post-Trump 2.0 due to "layoffs, retirements, or resignations." This is catastrophic for American science. 

Despite living in climate denial central, the effects of climate change are real and very much here. California's dismal snowpack is nearing record lows and spring heatwaves are melting whatever's left. "Nearly every snow-measuring station in the Sierra has lost more than a foot of snow in the 10 days since the heat wave kicked into full gear," SFGate reports. "A melt of this rate is a big deal any time, but in March it’s unheard of,” hydrologist Mike Hittle told the paper. 

 

It’s been a brutal month for California’s snowpack, which is now at just 25% of normal.

The snowpack is now 8% of normal in the northern Sierra, 28% of normal in the central Sierra and 44% of normal in the southern Sierra.

NASA satellite images from Feb. 22, March 6 and March 24.

[image or embed]

— Anthony Edwards (@edwardsanthonyb.bsky.social) March 25, 2026 at 3:20 PM

Meanwhile, War: Israel says it killed the head of Iran's navy in an airstrike. After Tehran rejected Trump's 15-point ceasefire plan the president is now publicly threatening Tehran in Truth Social posts to "get serious soon" on these negotiations. He also claims Iran is "begging for a deal." Strange tactic, but hey, he’s the artist of the deal.

Olympics Says It’s Banning Trans Women Athletes: The International Olympic Committee announced a ban on transgender women from participating in women’s sporting events at the 2028 Summer Olympics in Los Angeles. Trans women athletes haven’t been competing in the Olympics. So, what’s this really about? The committee has also banned cis or intersex women with male testosterone levels or male chromosomes. Any athlete who wants to compete in a female sport will have to prove their biological gender with a cheek swab or saliva test. No one wins when women and womanhood are scrutinized like this. 

We're all trying to find the guy who did this: Harry Wait, a Wisconsin man who believes the 2020 election was stolen and leads a group that decries election fraud, was convicted of election fraud. Wait was found guilty of two misdemeanor election fraud charges and one felony identity theft charge for requesting the absentee ballots of Republican state Assembly Speaker Robin Vos and Democratic Racine Mayor Cory Mason without their consent. Of the charges, Wait said, "You got to expect to pay some costs sometimes when you are trying to work for the public good." He also said he "would do it again." 

It Was Opening Day: It's officially baseball season. Now... was this symbolism?

it's so cool that they exploded the US flag at the MLB season opener. baseball getting woker.

[image or embed]

— tuck woodstock (@tuck.bsky.social) March 25, 2026 at 5:27 PM

Today Is The Mariners' Opening Day: See you all at T-Mobile Park. Here's this to get you into the mood. 

17:21

16:35

Link [Scripting News]

This piece explains the tragedy of how we've set up communication using our networks, all based on exclusive products, rather than standards which mean you can use whatever software you want for more and more of your communication.

Link [Scripting News]

Send this video to your favorite Democrat and let them know that we would pay money to have this video run as an ad running everywhere, exactly as-is, no editing, not made glamorous. This is the truth that absolutely is not getting out about the law the Repubs want. We need to communicate with each other using the amazing tools we have at our disposal now in the third decade of the freaking 21st century.

Why doesn’t WM_ENTER­IDLE work if the dialog box is a Message­Box? [The Old New Thing]

Last time, we looked at how the owner of a dialog can take control just before the dialog box message loop goes idle. I said that I pulled a trick.

The trick is that I used the common file open dialog instead of a simple Message­Box. Indeed, if you replace the call to Get­Open­File­Name with a call to Message­Box, then no WM_ENTER­IDLE message arrives, and you get no beeping. What’s going on?

A dialog can suppress the WM_ENTER­IDLE message by adding the DS_NO­IDLE­MSG dialog style to its template. And that’s what the template used by the Message­Box function does.

So the WM_ENTER­IDLE trick does require a small amount of cooperation from the dialog box, namely that it doesn’t disable WM_ENTER­IDLE messages.

But say you can guarantee the cooperation of the dialog box because you are the dialog box. Right now, the WM_ENTER­IDLE message allows a dialog owner to be notified when the dialog message loop is about to go idle. But what if the dialog box itself wants to know, so it can customize its own message loop?

We’ll look at that next time.

The post Why doesn’t <CODE>WM_<WBR>ENTER­IDLE</CODE> work if the dialog box is a <CODE>Message­Box</CODE>? appeared first on The Old New Thing.

15:35

The forge is our new home (Fedora Community Blog) [LWN.net]

Tomáš Hrčka has announced that the Forgejo-based Fedora Forge is now a fully operational collaborative-development platform; it is ready for use by the larger Fedora community, which means the homegrown Pagure platform's days are numbered:

While pagure.io has been a vital part of our community for many years, the time has come to retire our homegrown forge and transition to this powerful new tool.

The final cutover is planned for Flock to Fedora 2026. We strongly encourage teams to migrate their projects well before the conference to ensure a smooth transition. The pagure.io migration is only the first step in a broader infrastructure modernization effort. By the 2027 Fedora 46 release, we plan to retire all remaining Pagure instances across the project, including the package source repositories on src.fedoraproject.org. Getting familiar with Fedora Forge now will help ensure your team is ready as the rest of the Fedora ecosystem transitions.

There is a migration guide for Fedora community members that own projects hosted on Pagure and need to move to the new forge.

Well, It Finally Happened [Whatever]

I always wondered which of my books would be the first to be banned, and now I know:

Via this post from @thebloggess.bsky.social, I learn that my book Lock In has been banned from schools in New Braunfels, TX. There is irony here in that Lock In won the Alex Award from the ALA, given for "adult books suitable for teens." thebloggess.com/2026/03/25/t…

John Scalzi (@scalzi.com) 2026-03-26T08:09:00.591Z

I'm on a cruise so I'll have more to say about it at a later time, but the short version of this is, of course, fuck censorship, and also, my books will outlast these motherfuckers, we'll see them (politically) dead and in the ground and my books will be there to piss on their (metaphorical) graves.

John Scalzi (@scalzi.com) 2026-03-26T08:09:00.592Z

As noted above, I’ll likely have more to say about this when I get back the JoCo Cruise, but for now, two points, which I may expand upon in a later post:

1. On a personal level, I don’t expect this ban to move the needle much, positively or negatively, for sales of Lock In, which has been out for a dozen years now;

2. Please refrain from exclaiming “Having your book banned just means you’ll sell more!” or something similar in the comments. One, it’s absolutely not true for the vast majority of books that get banned; the usual result is a net loss for authors and publishers. Two, this is sort of comment that, however well-intentioned to be supportive, minimizes the seriousness of book banning as an intentional policy. The busybodies banning books in New Braunfels targeted more than 1,500 books, not just mine. None of that is a thing to be happy about; there is no actual upside to book bans.

— JS

15:07

Link [Scripting News]

My linkblog was down. Thanks to Scott Hanson it's back up!

14:49

[$] Vibe-coded ext4 for OpenBSD [LWN.net]

A number of projects have been struggling with the question of which submissions created by large language models (LLMs), if any, should be accepted into their code base. This discussion has been further muddied by efforts to use LLM-driven reimplemention as a way to remove copyleft restrictions from a body of existing code, as recently happened with the Python chardet module. In this context, an attempt to introduce an LLM-generated implementation of the Linux ext4 filesystem into OpenBSD was always going to create some fireworks, but that project has its own, clearly defined reasons for looking askance at such submissions.

13:35

Link [Scripting News]

If you're using FeedLand and running a WordPress blog, you can install a blogroll just like the one I have at scripting.com or blogroll.social.

13:28

1341: Also Fully Biodegradable [Order of the Stick]

http://www.giantitp.com/comics/oots1341.html

13:21

Security updates for Thursday [LWN.net]

Security updates have been issued by Debian (awstats, firefox-esr, and nss), Fedora (chromium, dotnet10.0, dotnet8.0, dotnet9.0, freerdp, and wireshark), Mageia (graphicsmagick and xen), Oracle (mysql:8.4 and nginx), Red Hat (podman), Slackware (bind and tigervnc), SUSE (azure-storage-azcopy, firefox-esr, giflib, glances-common, govulncheck-vulndb, grafana, kernel, libpng16, libsoup, mumble, net-snmp, perl-Crypt-URandom, pgvector-devel, pnpm, postgresql17, Prometheus, protobuf, python-cbor2, python-Jinja2, python-simpleeval, python311-dynaconf, python311-pydicom, python313-PyMuPDF, salt, snpguest, systemd, and vim), and Ubuntu (bind9, linux-azure, linux-azure, linux-azure-6.17, linux-azure-6.8, and mbedtls).

12:49

The Missing Layer in Agentic AI [Radar]

The day two problem

Imagine you deploy an autonomous AI agent to production. Day one is a success: The demos are fantastic; the reasoning is sharp. But before handing over real authority, uncomfortable questions emerge.

What happens when the agent misinterprets a locale-specific decimal separator, turning a position of 15.500 ETH (15 and a half) into an order for 15,500 ETH (15 thousand) on leverage? What if a dropped connection leaves it looping on stale state, draining your LLM request quota in minutes?

What if it makes a perfect decision, but the market moves just before execution? What if it hallucinates a parameter like force_execution=True—do you sanitize it or crash downstream? And can it reliably ignore a prompt injection buried in a web page?

Finally, if an API call times out without acknowledgment, do you retry and risk duplicating a $50K transaction, or drop it?

When these scenarios occur, megabytes of prompt logs won’t explain the failure. And adding “please be careful” to the system prompt acts as a superstition, not an engineering control.

Why a smarter model is not the answer

I encountered these failure modes firsthand while building an autonomous system for live financial markets. It became clear that these were not model failures but execution boundary failures. While RL-based fine-tuning can improve reasoning quality, it cannot solve infrastructure realities like network timeouts, race conditions, or dropped connections.

The real issues are architectural gaps: contract violations, data integrity issues, context staleness, decision-execution gaps, and network unreliability.

These are infrastructure problems, not intelligence problems.

While LLMs excel at orchestration, they lack the “kernel boundary” needed to enforce state integrity, idempotency, and transactional safety where decisions meet the real world.

An architectural pattern: The Decision Intelligence Runtime

Consider modern operating system design. OS architectures separate “user space” (unprivileged computation) from “kernel space” (privileged state modification). Processes in user space can perform complex operations and request actions but cannot directly modify system state. The kernel validates every request deterministically before allowing side effects.

AI agents need the same structure. The agent interprets context and proposes intent, but the actual execution requires a privileged deterministic boundary. This layer, the Decision Intelligence Runtime (DIR), separates probabilistic reasoning from real-world execution.

The runtime sits between agent reasoning and external APIs, maintaining a context store, a centralized, immutable record ensuring the runtime holds the “single source of truth,” while agents operate only on temporary snapshots. It receives proposed intents, validates them against hard engineering rules, and handles execution. Ideally, an agent should never directly manage API credentials or “own” the connection to the external world, even for read-only access. Instead, the runtime should act as a proxy, providing the agent with an immutable context snapshot while keeping the actual keys in the privileged kernel space.

Figure 1: High-level design (HLD) of the Decision Intelligence RuntimeFigure 1: High-level design (HLD) of the Decision Intelligence Runtime, illustrating the separation of user space reasoning from kernel space execution

Bringing engineering rigor to probabilistic AI requires implementing five familiar architectural pillars.

Although several examples in this article use a trading simulation for concreteness, the same structure applies to healthcare workflows, logistics orchestration, and industrial control systems.

DIR versus existing approaches

The landscape of agent guardrails has expanded rapidly. Frameworks like LangChain and LangGraph operate in user space, focusing on reasoning orchestration, while tools like Anthropic’s Constitutional AI and Pydantic schemas validate outputs at inference time. DIR, by contrast, operates at the execution boundary, the kernel space, enforcing contracts, business logic, and audit trails after reasoning is complete.

Both are complementary. DIR is intended as a safety layer for mission-critical systems.

1. Policy as a claim, not a fact

In a secure system, external input is never trusted by default. The output of an AI agent is exactly that: external input. The proposed architecture treats the agent not as a trusted administrator, but as an untrusted user submitting a form. Its output is structured as a policy proposal—a claim that it wants to perform an action, not an order that it will perform it. This is the start of a Zero Trust approach to agentic actions.

Here is an example of a policy proposal from a trading agent:

proposal = PolicyProposal(
    dfid="550e8400-e29b-41d4-a716-446655440000", # Trace ID (see Sec 5)
    agent_id="crypto_position_manager_01",
    policy_kind="TAKE_PROFIT",
    params={
        "instrument": "ETH-USD",
        "quantity": 0.5,
        "execution_type": "MARKET"
    },
    reasoning="Profit target of +3.2% hit (Threshold: 3.0%). Market momentum slowing.",
    confidence_score=0.92
)

2. Responsibility contract as code

Prompts are not permissions. Just as traditional apps rely on role-based access control, agents require a strict responsibility contract residing in the deterministic runtime. This layer acts as a firewall, validating every proposal against hard engineering rules: schema, parameters, and risk limits. Crucially, this check is deterministic code, not another LLM asking, “Is this dangerous?” Whether the agent hallucinates a capability or obeys a malicious prompt injection, the runtime simply enforces the contract and rejects the invalid request.

Real-world example: A trading agent misreads a comma-separated value and attempts to execute place_order(symbol='ETH-USD', quantity=15500). This would be a catastrophic position sizing error. The contract rejects it immediately:

ERROR: Policy rejected. Proposed order value exceeds hard limit.
Request: ~40000000 USD (15500 ETH)
Limit: 50000 USD (max_order_size_usd)

The agent’s output is discarded; the human is notified. No API call, no cascading market impact.

Here is the contract that prevented this:

# agent_contract.yaml
agent_id: "crypto_position_manager_01"
role: "EXECUTOR"
mission: "Manage news-triggered ETH positions. Protect capital while seeking alpha."
version: "1.2.0"                  # Immutable versioning for audit trails
owner: "jane.doe@example.com"     # Human accountability
effective_from: "2026-02-01"

# Deterministic Boundaries (The 'Kernel Space' rules)
permissions:
  allowed_instruments: ["ETH-USD", "BTC-USD"]
  allowed_policy_types: ["TAKE_PROFIT", "CLOSE_POSITION", "REDUCE_SIZE", "HOLD"]
  max_order_size_usd: 50000.00

# Safety & Economic Triggers (Intervention Logic)
safety_rules:
  min_confidence_threshold: 0.85      # Don't act on low-certainty reasoning
  max_drawdown_limit_pct: 4.0         # Hard stop-loss enforced by Runtime
  wake_up_threshold_pnl_pct: 2.5      # Cost optimization: ignore noise
  escalate_on_uncertainty: 0.70       # If confidence < 70%, ask human

3. JIT (just-in-time) state verification

This mechanism addresses the classic race condition where the world changes between the moment you check it and the moment you act on it. When an agent begins reasoning, the runtime binds its process to a specific context snapshot. Because LLM inference takes time, the world will likely change before the decision is ready. Right before executing the API call, the runtime performs a JIT verification, comparing the live environment against the original snapshot. If the environment has shifted beyond a predefined drift envelope, the runtime aborts the execution.

Figure 2: JIT verification catches stale decisions before they reach external systems.Figure 2: JIT verification catches stale decisions before they reach external systems.

The drift envelope is configurable per context field, allowing fine-grained control over what constitutes an acceptable change:

# jit_verification.yaml
jit_verification:
  enabled: true
  
  # Maximum allowed drift per field before aborting execution
  drift_envelope:
    price_pct: 2.0           # Abort if price moved > 2%
    volume_pct: 15.0         # Abort if volume changed > 15%
    position_state: strict   # Any change = abort
  
  # Snapshot expiration
  max_context_age_seconds: 30
  
  # On drift detection
  on_drift_exceeded:
    action: "ABORT"
    notify: ["ops-channel"]
    retry_with_fresh_context: true

4. Idempotency and transactional rollback

This mechanism is designed to mitigate execution chaos and infinite retry loops. Before making any external API call, the runtime hashes the deterministic decision parameters into a unique idempotency key. If a network connection drops or an agent gets confused and attempts to execute the exact same action multiple times, the runtime catches the duplicate key at the boundary.

The key is computed as:

IdempotencyKey = SHA256(DFID + StepID + CanonicalParams)

Where DFID is the Decision Flow ID, StepID identifies the specific action within a multistep workflow, and CanonicalParams is a sorted representation of the action parameters.

Critically, the context hash (snapshot of the world state) is deliberately excluded from this key. If an agent decides to buy 10 ETH and the network fails, it might retry 10 seconds later. By then, the market price (context) has changed. If we included the context in the hash, the retry would generate a new key (SHA256(Action + NewContext)), bypassing the idempotency check and causing a duplicate order. By locking the key to the Flow ID and Intent params only, we ensure that a retry of the same logical decision is recognized as a duplicate, even if the world around it has shifted slightly.

Furthermore, when an agent makes a multistep decision, the runtime tracks each step. If one step fails, it knows how to perform a compensation transaction to roll back what was already done, instead of hoping the agent will figure it out on the fly.

A DIR does not magically provide strong consistency; it makes the consistency model explicit: where you require atomicity, where you rely on compensating transactions, and where eventual consistency is acceptable.

5. DFID: From observability to reconstruction

Distributed tracing is not a new idea. The practical gap in many agentic systems is that traces rarely capture the artifacts that matter at the execution boundary: the exact context snapshot, the contract/schema version, the validation outcome, the idempotency key, and the external receipt.

The Decision Flow ID (DFID) is intended as a reconstruction primitive—one correlation key that binds the minimum evidence needed to answer critical operational questions:

  • Why did the system execute this action? (policy proposal + validation receipt + contract/schema version)
  • Was the decision stale at execution time? (context snapshot + JIT drift report)
  • Did the system retry safely or duplicate the side effect? (idempotency key + attempt log + external acknowledgment)
  • Which authority allowed it? (agent identity + registry/contract snapshot)

In practice, this turns a postmortem from “the agent traded” into “this exact intent was accepted under these deterministic gates against this exact snapshot, and produced this external receipt.” The goal is not to claim perfect correctness; it is to make side effects explainable at the level of inputs and gates, even when the reasoning remains probabilistic.

At the hierarchical level, DFIDs form parent-child relationships. A strategic intent spawns multiple child flows. When multistep workflows fail, you reconstruct not just the failing step but the parent mandate that authorized it.

Figure 3: Hierarchical Decision Flow IDs enable full process reconstruction across multi-agent interactions.Figure 3: Hierarchical Decision Flow IDs enable full process reconstruction across multi-agent interactions.

In practice, this level of traceability is not about storing prompts—it is about storing structured decision telemetry.

In one trading simulation, each position generated a decision flow that could be queried like any other system artifact. This allowed inspection of the triggering news signal, the agent’s justification, intermediate decisions (such as stop adjustments), the final close action, and the resulting PnL, all tied to a single simulation ID. Instead of replaying conversational history, this approach reconstructed what happened at the level of state transitions and executable intents.

SELECT position_id
     , instrument
     , entry_price
     , initial_exposure
     , news_full_headline
     , news_score
     , news_justification
     , decisions_timeline
     , close_price
     , close_reason
     , pnl_percent
     , pnl_usd
  FROM position_audit_agg_v
 WHERE simulation_id = 'sim_2026-02-24T11-20-18-516762+00-00_0dc07774';
Figure 4: Example of structured decision telemetryFigure 4: Example of structured decision telemetry. Each row links context, reasoning, intermediate actions, and financial outcome for a single simulation run.

This approach is fundamentally different from prompt logging. The agent’s reasoning becomes one field among many—not the system of record. The system of record is the validated decision and its deterministic execution boundary.

From model-centric to execution-centric AI

The industry is shifting from model-centric AI, measuring success by reasoning quality alone, to execution-centric AI, where reliability and operational safety are first-class concerns.

This shift comes with trade-offs. Implementing deterministic control requires higher latency, reduced throughput, and stricter schema discipline. For simple summarization tasks, this overhead is unjustified. But for systems that move capital or control infrastructure, where a single failure outweighs any efficiency gain, these are acceptable costs. A duplicate $50K order is far more expensive than a 200 ms validation check.

This architecture is not a single software package. Much like how Model-View-Controller (MVC) is a pervasive pattern without being a single importable library, DIR is a set of engineering principles: separation of concerns, zero trust, and state determinism, applied to probabilistic agents. Treating agents as untrusted processes is not about limiting their intelligence; it is about providing the safety scaffolding required to use that intelligence in production.

As agents gain direct access to capital and infrastructure, a runtime layer will become as standard in the AI stack as a transaction manager is in banking. The question is not whether such a layer is necessary but how we choose to design it.


This article provides a high-level introduction to the Decision Intelligence Runtime and its approach to production resiliency and operational challenges. The full architectural specification, repository of context patterns, and reference implementations are available as an open source project at GitHub.

12:35

CodeSOD: Preformatted [The Daily WTF]

Amity sends us a "weird" replacement, and I regret to inform you, it's not as weird as it should be.

$body = str_replace(['<pre><code>', '</code></pre>'], ['<pre>', '</pre>'], $body);

This PHP code scans through a string containing HTML and replaces all the <pre><code>.../<code></pre> tags with just <pre></pre>. And yes, that's a weird thing to do; these mean different things, after all. pre tells us the text is preformatted and things like extra whitespace and line breaks should be respected. code tells us the text represents some sort of code. Usually, that involves respecting the formatting, but it also generally involves rendering in a monospace font.

And this touches upon one of my complaints about this very site. A complaint I don't complain about much, because I could easily fix it, and also it doesn't bother me that much, but also, I don't want to be maintaining our little homegrown CMS more than I have to, so I haven't done it.

Quite some time ago, we did a redesign here. It was fairly necessary, as the site old 100% didn't work on mobile devices. At the time, one habit was en vogue amongst web developers: clear all the formatting rules from the default browser stylesheet and replace them with your own. I can sympathize with that, I suppose. It's certainly one way to deal with cross browser rendering quirks: burn everything to the ground and build up from scratch. You'll still have cross browser quirks, but they'll all be your fault, and your fault alone. And another "quirk" that showed up in that rebuilding, and a quirk I've seen on a depressing number of other sites: make pre content be in monospace.

For some reason I don't fully understand, there was a brief period in CSS styling where people willfully collapsed the distinction between pre and code, and just turned them into the same thing. I'm admittedly a bit of a semantic snob (HTML is a DATA format not a PRESENTATION format, it's still SGML to me).

In any case, this doesn't impact you, our dear readers, who instead get a sometimes confounding Markdown comment box with bad editing support. But I post articles here in pure HTML, and while I rarely need a pre tag, every once in awhile, the default site stylesheet throws me off.

[Advertisement] Plan Your .NET 9 Migration with Confidence
Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. Download Free Guide Now!

12:07

The PAX East Show Store Is Open! [Penny Arcade]

This year's theme park has so many twists and turns, so many nice little Touches, that it would be tricky to call each of them out.  I merely saw how Gavin had done the S in "PAX East" on a jacket and had to sit down immediately.  First I'll show off everything you can get on our Official PAX Shop, from the comfort of your own phone:

11:49

GE SmartHQ™ Management [Planet GNU]

https://www.smart ... com/lp/management

This offering sure looks like GNU remotecontrol. Perhaps it is our code.

11:07

As the US Midterms Approach, AI Is Going to Emerge as a Key Issue Concerning Voters [Schneier on Security]

In December, the Trump administration signed an executive order that neutered states’ ability to regulate AI by ordering his administration to both sue and withhold funds from states that try to do so. This action pointedly supported industry lobbyists keen to avoid any constraints and consequences on their deployment of AI, while undermining the efforts of consumers, advocates, and industry associations concerned about AI’s harms who have spent years pushing for state regulation.

Trump’s actions have clarified the ideological alignments around AI within America’s electoral factions. They set down lines on a new playing field for the midterm elections, prompting members of his party, the opposition, and all of us to consider where we stand in the debate over how and where to let AI transform our lives.

In a May 2025 survey of likely voters nationwide, more than 70% favored state and federal regulators having a hand in AI policy. A December 2025 poll by Navigator Research found similar results, with a massive net +48% favorability for more AI regulation. Yet despite the overwhelming preference of both voters and his party’s elected leaders—Congress was essentially unanimous in defeating a previous state AI regulation moratorium—Trump has delivered on a key priority of the industry. The order explicitly challenges the will of voters across blue and red states, from California to South Dakota, scrambling political positions around the technology and setting up a new ideological battleground in the upcoming race for Congress.

There are a number of ways that candidates and parties may try to capitalize on this emerging wedge issue before the midterms.

In 2025, much of the popular debate around AI was cast in terms of humans versus machines. Advances in AI and the companies it is associated with, it is said, come at the expense of humans. A new model release with greater capabilities for writing, teaching, or coding means more people in those disciplines losing their jobs.

This is a humanist debate. Making us talk to an AI customer-support agent is an affront to our dignity. Using AI to help generate media sacrifices authenticity. AI chatbots that persuade and manipulate assault our liberty. There is philosophical merit to these arguments, and yet they seem to have limited political salience.

Populism versus institutionalism is a better way to frame this debate in the context of US politics. The MAGA movement is widely understood to be a realignment of American party politics to ally the Republican party with populism, and the Democratic party with defenders of traditional institutions of American government and their democratic norms.

This frame is shattered by Trump’s AI order, which unabashedly serves economic elites at the expense of populist consumer protections. It is part of an ongoing courting process between MAGA and big tech, where the Trump political project sacrifices the interests of consumers and its populist credentials as it cozies up to tech moguls.

We are starting to see populist resistance to this government/big tech alignment emerge on the local scale. People in Maryland, Arizona, North Carolina, Michigan and many other states are vigorously opposing AI datacenters in their communities, based on environmental and energy-affordability impacts. These centers of opposition are politically diverse; both progressives and Trump-supporting voters are turning out in force, influencing their local elected officials to resist datacenter development.

This opposition to the physical infrastructure of corporate AI is so far staying local, but it may yet translate into a national and politically aligned movement that could divide the MAGA coalition.

Any policy discussions about AI should include the individual harms associated with job loss, as employers seek to replace laborers with machines. It should also include the systemic economic risks associated with concentrated and supercharged AI investment, the democratic risks associated with the increased power in monopolistic and politically influential tech companies, and the degradation of civic functions like journalism and education by AI. In order for our free market to function in the public interest, the companies amassing wealth and profiting from AI must be forced to take ownership of, and internalize, these costs.

The political salience of AI will grow to meet the staggering scale of financial investment and societal impact it is already commanding. There is an opportunity for enterprising candidates, of either political party, to take the mantle of opposing AI-linked harms in the midterm elections.

Political solutions start with organizing, and broadening the base of political engagement around these issues beyond the locally salient topic of datacenters. Movement leaders and elected officials in states that have taken action on AI regulation should mobilize around the blatant industry capture, wealth extraction, and corporate favoritism reflected in the Trump executive order. AI is no longer just a policy issue for governments to discuss: it is a political issue that voters must decide on and demand accountability on.

10:35

Grrl Power #1446 – Tropical storm Leander [Grrl Power]

Working out is hard when you can lift the entire gym.

The bottom-left panel is supposed to be a hypothetical Everglades post-maximum Maxima event. I assumed Willy Crocman would make that obvious-ish, but the background could also be interpreted as Monument Valley after being pounded to sand. There’s not a whole lot of crocodiles in Utah, though, generally speaking.

Maxima’s outfit has to basically be printed onto her skin, and while makeup and grease paint don’t stick to her, it’s not like nothing at all does. A wacky wall walker would probably stick to her well enough. Probably one of those rubber stickers that are used on windows. Those might use the same technology, come to think of it. Cora and Galen found some material that basically won’t come off her skin if she’s exerting even the smallest amount of “personal force field” to envelop the stuff, and embedded thousands of micro holo projectors in it. The projection overlaps, so she’ll still have coverage if she loses small patches during the fight, and if large enough bare patches cause her disguise to start to fail, the stuff will slither around and attempt to close the gaps, but that’s dangerous during a fight because it can’t migrate anywhere while her force field is holding it in place. The plan at that point is for her to shift “Armor” into “Speed,” and keep out of danger for the 10-15 seconds it would take her smart cat suit to rearrange itself.

It is conceivable then, that if enough of the outfit was damaged all at once, she could find herself on Space-TV in front of a trillion viewers wearing nothing but pasties. But that’s a risk any superhero or heroine takes when they get into high-powered fights in front of a bank, and they are tougher than their own clothes.


Ah! I thought I had more time till March. I’m bad at looking at dates apparently.

Here is Gaxgy’s painting Maxima promised him. Weird how he draws almost exactly like me.

I did try and do an oil painting version of this, by actually re-painting over the whole thing with brush-strokey brushes, but what I figured out is that most brushy oil paintings are kind of low detail. Sure, a skilled painter like Bob Ross or whoever can dab a brush down a canvas and make a great looking tree or a shed with shingles, but in trying to preserve the detail of my picture (eyelashes, reflections, etc) was that I had to keep making the brush smaller and smaller, and the end result was that honestly, it didn’t really look all that oil-painted. I’ll post that version over at Patreon, just for fun, but I kind of quit on it after getting mostly done with re-painting Max.

Patreon has a no-dragon-bikini version of of the picture as well, naturally.


Double res version will be posted over at Patreon. Feel free to contribute as much as you like.

09:21

The end of the content shortage [Seth's Blog]

You can be fashionable without reading Vogue. You can be informed without watching the nightly news. You can be smart about science without going to MIT. It’s possible to be a great chef without buying a cookbook. In fact, you can probably thrive without reading this blog. There are millions of songs on Spotify that have only been listened to a few times each.

Not only are more humans publishing more often on more topics, but we’ve built LLMs that are always ready to create even more content, on demand, for an audience of one.

For generations, content has created the demand for more content. A few movies increased our desire to watch more movies. AM radio created the demand for FM, which sold more records, and then Napster magnified our desire for even more music.

Until we hit the wall of enough.

The ennui of infinite content is reversing our spiraling desire for more of it.

05:00

Urgent: Speaking engagements, Europe [Richard Stallman's Political Notes]

I expect to have a trip to Europe in May - June. The start and end dates remain to be decided.

If you would like to invite me to speak during that trip, please write to me now so we can start discussing it. Write to `-invitation' following my three-letter username.

Kennedy Center closing down for two years [Richard Stallman's Political Notes]

The board of the Kennedy Center in Washington DC, newly altered by the saboteur in chief, voted to close down for two years of "renovations".

I can imagine what the building will look like after that remodeling: every 20 feet along any wall there will be a molding depicting his face. It will be necessary to spend more money to undo that.

"Emergency Order" to restart leaky oil pipeline [Richard Stallman's Political Notes]

California law shut down a leaky, polluting pipeline under the Pacific Ocean from Santa Barbara, after it spilled a lot of oil on a beach. so the oil spiller in chief gave the pipeline's owner, as a favor, an "emergency order" to restart it immediately.

California and the federal government continue legal action over whether the pipeline will be allowed to operate. What is clear is that having one more oil pipeline operating is not overall a benefit for the world.

Google dis-service offering online medical advice deactivated [Richard Stallman's Political Notes]

Google has deactivated an online dis-service that until recently offered medical advice based on applying Pretend Intelligence to what users with no medical training said.

This may have been the wise course, since Pretend Intelligence does not actually understand the text it inputs or outputs.

Criticism of streaming platforms in mainstream press [Richard Stallman's Political Notes]

In the mainstream press, even criticism of streaming platforms takes for granted that they are entitled to the power to control what you can do with a recording, and thus reinforces that assumption. Here's an example.

Once you recognize that that power is based on Digital Restrictions Management, which means using nonfree software to control what users can and can't do, you can resist that implicit argument in favor of subjugating you.

Eight protesters in Texas convicted [Richard Stallman's Political Notes]

Eight protesters in Texas, allegedly supporting of the alleged organization "Antifa", were convicted of "material support for terrorism". In their trial, prosecutors cited the fact that some of them wore black clothing, used Signal, and/or carried guns.

Right-wingers also carry guns at protest, and use Signal, but somehow do not get prosecuted for that.

US Department of Health ignored administration of Title X [Richard Stallman's Political Notes]

The US Department of Health quietly ignored the administration of Title X, which provides birth control and sex-specific medical treatment for females, and the system may soon collapse.

I have a suspicion that this mysterious failure was engineered by right-wing extremist Christians who seek to force females to have babies.

Wrecker's new nominee to head of Department of Hatred and Sadism [Richard Stallman's Political Notes]

The wrecker's new nominee to head the Department of Hatred and Sadism has a pattern of speaking so as to give the false impression that he has military experience.

This deception marks him as untrustworthy, but if he were honest about his lack of military experience, that might not be crucial. The DHS does not manage soldiers, after all.

I expect that anyone nominated by the wrecker would regard it as per mission to be cruel and sadistic, and thus should not be confirmed, but that is a separate issue.

Burning Tesla "cybertrucks" locked passengers inside [Richard Stallman's Political Notes]

Tesla "cybertrucks" have locked passengers inside and burned so hot they've disintegrated drivers' bones.

States should designate vehicles which can lock passengers in as unsafe and illegal to drive on a road.

Populations of insect-eating birds in EU [Richard Stallman's Political Notes]

Just 8 years after the EU banned neonicotinoid pesticides, the populations of insect-eating birds are starting to recover.

Because these pesticides are persistent, full recovery will take a long time. I hope other human-caused effects, such as global heating, will not swamp it.

British "Reform" party trying to bribe voters [Richard Stallman's Political Notes]

The British right-wing extremist "Reform" Party is trying to bribe voters by entering them in a lottery, where winning may depend on which party you voted for, and stating which one you will vote for next time.

Zelenskyy offers Europe help in countering drone attacks [Richard Stallman's Political Notes]

Zelenskyy offers Europe Ukraine's help in countering drone attacks, whether from Russia, from Iran, or from criminal gangs.

New link [Richard Stallman's Political Notes]

Urgent: Energy market [Richard Stallman's Political Notes]

US citizens: call on Congress to investigate energy market manipulation.

US citizens: Join with this campaign to address this issue.

To phone your congresscritter about this, the main switchboard is +1-202-224-3121.

Please spread the word.

03:14

A Quick Check-In From Mexico [Whatever]

Oh, hello. The JoCo Cruise is in full swing now and last night we had the “land concert” in Loreto, Mexico, and while there (and in between snapping pictures of the performers), I got this photo of Krissy. She was having a good time.

And so am I! Fabulous cruise with fabulous people and it’s humming along nicely. I’ll post about it more when I’m back on land, I’m sure. In the meantime, I hope you’re all well.

— JS

02:14

[1295] The Masks Are Still Watching [Twokinds]

Comic for March 25, 2026

01:28

Job Talk [QC RSS]

Don't worry she's fine

01:21

[$] LWN.net Weekly Edition for March 26, 2026 [LWN.net]

Inside this week's LWN.net Weekly Edition:

  • Front: Security collaboration; Manjaro governance; kernel development tools; PHP licensing; kernel direct map patches; sleepable BPF.
  • Briefs: LiteLLM compromise; Tor in Taiwan; b4 v0.15.0; 24-hour sideloading; Agama 19; Firefox 149.0; GNOME 50; Krita 5.3.0 and 6.0.0; Quotes; ...
  • Announcements: Newsletters, conferences, security updates, patches, and more.

Wednesday, 25 March

23:28

so, i am having a little bit of a stand by me moment [WIL WHEATON dot NET]

There’s a lot happening in my world right now, joy and sorrow, and I don’t have the spoons to write about it. But I’m having a Stand By Me moment that I wanted to share before it passes.

Yesterday, my narration of The Body by Stephen King (the novella that was adapted into Stand By Me) was released. I have wanted to do this for years, and I can’t believe I never wrote about it here. I’ll address that in the future, because it’s a cool story. Simon and Schuster, the publisher, has been super supportive and enthusiastic about this release. They gave me a whole chapter to share, and it’s at the end of this week’s1 It’s Storytime With Wil Wheaton, available now wherever you get your podcasts.

Today, I am the subject of a truly wonderful column in the New York Times that includes interactive clips from my narration, scenes from Stand By Me, and the text of the novella. It’s a beautiful piece that genuinely surprised and delighted me. And it comes just a few days after we were the subject of this incredible essay, also in the New York Times, about our Stand By Me Live tour2.

Tonight, Jerry and Corey and I are together on Entertainment Tonight3 to talk about the movie’s theatrical re-release, which starts on Friday.

I’m glad you’re here. If you’d like to get my posts delivered to your inbox, here’s the thingy:

  1. I had to take last week off, so we are replaying one of my favorite performances, End of Play. ↩
  2. This weekend, we are in Anaheim Friday, Seattle on Saturday (see you at No Kings, Seattle), and Portland on Sunday. Tickets are still available for all three shows. ↩
  3. In Los Angeles, that’s 7:30pm on CBS, check your local listing to be sure. ↩

22:42

Page 4 [Flipside]

Page 4 is done.

Page 3 [Flipside]

Page 3 is done.

Page 2 [Flipside]

Page 2 is done.

Page 1 [Flipside]

Page 1 is done.

Page 10 [Flipside]

Page 10 is done.

Page 9 [Flipside]

Page 9 is done.

Page 8 [Flipside]

Page 8 is done.

Page 7 [Flipside]

Page 7 is done.

Page 6 [Flipside]

Page 6 is done.

Drag Race Episode 12: Making Drag Sisters Outta Queer Cowboys [The Stranger]

It’s time for another classic Drag Race challenge: makeovers! This week, our remaining queens were tasked with turning six queer cowboys into their drag sisters. by Mike Kohfeld

It’s time for another classic Drag Race challenge: makeovers! This week, our remaining queens were tasked with turning six queer cowboys into their drag sisters.

But first, a Mini-Challenge. Dressed like he just stepped off of his Wyoming fracking ranch, RuPaul instructed the queens to “giddy-up and titty-up” for a Hot to Trot Horse Race. Seeing the queens in their quick-drag cowgirl looks made me cackle. “We are all looking like the nastiest county fair you have ever seen,” Darlene said, “and I feel right at home.”

The queens raced their way across the werkroom on inflatable horses. This was all shot in slow motion (of course) so we got to see every bounce, jiggle, and wipeout in delectable detail. In the end, Discord found herself with her second Mini-Challenge win: “In Discord math, two Minis make a Maxi.” I guess that works?

A Posse of Queer Cowboys

“Discord math” may be delusional, but she earned the privilege of pairing the queens with six strapping queer cowboys to kick off the Main Challenge.

Discord chose horse speed-rider Colton of Oklahoma for their uncanny resemblance (and matching ear gauges). She chose to do a Clueless theme for their runway, dressing as a punk mean girl while Colton, renamed Harmony Addams (get it?), was transformed into a preppy mean girl.

In the werkroom, RuPaul cautioned Discord to focus more on family resemblance rather than a cute concept, but Discord plowed ahead with her plan. It was a fun runway, but the judges didn’t buy it. Law Roach had nothing nice to say (Discord blasted his “nasty” judging style in an interview with EW) and Michelle insisted there was no family resemblance. Discord landed in the bottom two.

Juicy was paired with Greg, a Navajo gay rodeo All-Around champion. He became Loosey Love Dion—an exquisite incarnation of Celia Cruz—fulfilling Juicy’s vision of glamorous Afro-Latina twins. The judges praised the cohesion between the two looks. “Juicy turned me into this beautiful woman,” Loosey shared during the critiques, tearing up. “It’s so empowering.”

Discord partnered Jane Don’t with Terry, a retired rodeo judge from Oklahoma. Jane figured Discord gave her the eldest cowboy to trip her up. But she was undaunted, transforming Terry into her sister Maybe Don’t, dripping with vintage glamour in complementary gowns and feather boas.

The judges were split on Jane and Maybe. Guest judge actress/comedienne Danielle Pinnock exclaimed, “what episode of Parent Trap is this? Y’all are giving twins!” But Michelle insisted there was no family resemblance at all, landing Jane in her first-ever bottom placement. (The inconsistency of the judging during this episode was definitely the story editing taking a front seat as the producers build up the top four. In the words of Alyssa Edwards: rigga morris!)

          View this post on Instagram                      

A post shared by Jane Don’t (@heyjanedont)

Regardless of the judging, Terry/Maybe Don’t had the time of his life: “Looking this glamorous, I never dreamed I would look as good, or better than you, RuPaul.” At the end of the episode, there was a memoriam for Terry. Jane shared a touching statement on her Instagram. Pour one out for Terry.

Drag Family Therapy

Michael of Denver, the VP of the International Gay Rodeo Association, became Morgan Meeks under partner Myki’s tutelage. Myki ended up with an unexpected advantage, as Michael had snatched the title of Miss International Gay Rodeo in 2000. He shared that he had quit drag because of hangups around his masculinity, but the experience with Drag Race helped him reconnect with his feminine side.

The Meeks sisters fit the brief in matching gowns. While the looks were relatively simple compared to the other queens’, they looked related to one another… and related to Michelle, too: Roach called them “Nichelle and Rochelle Visage.” Myki scored the win for the episode.

Myki wasn’t the only one to get a queeny cowboy. Darlene’s partner Chris, a roper from Oklahoma, was unafraid of his feminine side. During RuPaul’s walkthrough, Chris shared that he cleaned house in stilettos (something tells me Darlene does this too. Banana!). It was a match made in gay heaven. Darlene leaned into the camp of it all, turning Chris into her trashy sister Bonnie Mitchell on a wild night out in Vegas.

Nini was paired with Jason, a Colorado steer wrestler. Jason’s story of being afraid of his own femininity after the murder his friend and fellow soldier Barry Winchell inspired Nini to help him reconnect with his queerness through drag. For their runway, Nini chose a conceptual route, dressing herself as a monarch butterfly and Jason (as Patsy Coco) as a caterpillar. “I thought the costumes were cute, but there was no family resemblance at all,” Law Roach said to the agreement of the rest of the judges.

Nini ended up in the bottom two alongside Discord—the first time for them both. They battled it out to Ariana Grande’s ballad, “we can’t be friends.” Nini had a tighter lipsync and better matched the energy of the song, keeping her in the competition.

We hated to see Discord go, but we loved to watch her Discord-walk away. After promising to see us again on All Stars (yes please), she departed Season 18 with a hearty “eat the rich, fuck the patriarchy.” This is now a Discord Addams stan account.

Of the five queens left, who will make it to the Top Four? It’ll all come down to next week’s performance challenge: Karens Gone Wild. See you then!

21:56

The reports of age verification in Linux are greatly exaggerated, for now [OSnews]

Several US states, the country of Brazil, and I’m sure other places in the world have enacted or are planning to enact laws that would place the burden of age verification of users on the shoulders of operating system makers. The legal landscape is quite fragmented at this point, and there’s no way to tell which way these laws will go, with tons of uncertainties around to whom these laws would apply, if it targets accounts for application store access or the operating system as a whole, what constitutes an operating system in the first place, and many more. Still, these laws are already forcing major players like Apple to implement sharing self-reported age brackets with application developers (at least in iOS), so there’s definitely something happening here.

In recent weeks, the open source world has also been confronted with the first consequences of these laws, as both systemd and xdg-desktop-portal have responded to operating system-level age verification laws in, among other places, California and Colorado, by adding birthDate to userdb (on systemd’s side) and developing an age verification portal (on xdg-desktop-portal’s side) for use by Flatpaks. The age verification portal would then use the value set in usrdb’s birthDate as its data source. The value in birthDate would only be modifiable by an administrator, but can be read by users, applications, and so on.

Crucially, this field is entirely optional, and distributions, desktop environments, and users are under zero obligation to use it or to enter a truthful value. In fact, contrary to countless news items and comments about these additions, nothing about this even remotely constitutes as “age verification”, as nothing – not the government, not the distribution or desktop environments, not the user – has to or even can verify anything. If these changes make it to your distribution, you don’t have to suddenly show your government ID, scan your face, or link your computer to some government-run verification service, or even enter anything anywhere in the first place.

Furthermore, while the xdg-desktop-portal’s proposals are still fluid and subject to change, consensus seems to be to only share age brackets with applications, instead of full birth dates or specific ages – assuming anything has even been entered in the birthDate field in the first place. Even if your Linux distribution and/or desktop environment implements everything needed to support these changes and expose them to you in a nice user interface, everything about it is optional and under your full control. The field is of the same type as the existing fields emailAddress, realName, and location, which are similarly entirely optional and can be left empty if desired.

Taken in isolation, then, as it currently stands, there’s really not much meat to these changes at all. The primary reason to implement these changes is to minimally comply with the new laws in California, Colorado, Brazil, and other places, and it’s understandable why the people involved would want to do so. If they do not, they could face lawsuits, fines, or worse, and I don’t know about you, but I wouldn’t want to be on the receiving end of the western world’s most incompetent justice system. Aside from that, these changes make it possible to build robust parental controls, which isn’t mentioned in the original commits to systemd, but is clearly the main focal point of xdg-desktop-portal’s proposal.

This all seems well and good, but given today’s political climate in the United States, as well as the course of history, that “as it currently stands” is doing a lot of heavy lifting. Rightfully so, a lot of people are worried about where this could lead. Sure, today these are just inconsequential, optional changes in response to what seems to be misguided legislation, but what happens once these laws are tightened, become more demanding, and start requiring a lot more than just a self-reported age bracket?

In Texas, for instance, H.B. 1131 requires any commercial entity, including websites, that contains more than one-third “sexual material harmful to minors” to implement age verification tools using things like government-issued IDs or bank transaction data to verify visitors’ ages before allowing them in. The UK has a similar law on the books, too. It’s not difficult to imagine how some other law will eventually shift this much stricter, actual age verification from websites and applications into operating systems instead. What will systemd’s and xdg-desktop-portal’s developers do, then? Will they comply as readily then as they do now?

This is a genuine worry, especially if you already belong to a group targeted by the current US administration, or were face-scanned by ICE at a protest. Large groups of especially religious extremists consider anything that’s LGBTQ+ to be “sexual material harmful to minors”, even if it’s just something normal like a gay character in a TV show. It’s not hard to imagine how age verification laws, especially if they force age verification at the operating system level, can become weaponised to target the LGBTQ+ community, other minorities, and people protesting the Trump regime.

You may think this won’t affect you, since you’re using an open source operating system like desktop Linux or one of the BSDs, and surely they are principled enough to ignore such dangerous laws and simply not comply at all, right? Sadly, here’s where the idealism and principles of the open source world are going to meet the harsh boot of reality; while open source software has a picturesque image of talented youngsters hacking away in their bedrooms, the reality is that most of the popular open source operating systems are actually hugely complex operations that require a ton of funding, and that funding is often managed by foundations. And guess where most popular Linux distributions’ and BSD variants’ foundations are located?

Developers from all over the world may contribute to Debian, but all of its financials and trademarks are managed by Software in the Public Interest, domiciled in New York State. Fedora is part of Red Hat, owned by IBM, and we all know IBM. Arch Linux’ donations are also managed by Software in the Public Interest. The Gentoo Foundation is domiciled in New Mexico. The FreeBSD Foundation is domiciled in Boulder, Colorado. The NetBSD Foundation is domiciled in Delaware. Ubuntu is a Canonical product, a company headquartered in London, UK, a country with strict age verification laws for websites and applications. Hell, even Haiku, Inc. is domiciled in New York State. I could go on, but you get the gist: all of these projects manage their donations, financials, trademarks, and related issues in the United States (or the UK for Ubuntu).

It’s relatively easy for these projects to take a principled stance against the relatively limited age verification laws that exist today, but what about if and when these laws are expanded to infiltrate the very operating systems we use? It’s easy to resist the boot when it’s pressing down on some porn website or a sex worker’s OnlyFans page, but once that same boot is pressing down on your own throat? That’s a whole different story. Will Debian, FreeBSD, or Fedora still stand their ground when the organisations managing their donations, finances, and trademarks become the target of lawsuits or the US justice system, because they refuse to implement age verification?

I sincerely doubt it.

And this is why I am of two minds about this issue. On the one hand, I fully understand that the various developers involved with these efforts want to make sure they follow the law and avoid getting fined – or worse – especially since compliance requires so little at this time. On top of that, these changes make it possible to implement a fairly robust set of parental controls in a centralised way, keeping the data involved where it makes sense, so it also brings a number of benefits for users. There really isn’t anything to worry about when looking at these changes in isolation.

On the other hand, though, I also understand the fears and worries from people who see these changes as the first capitulation to age verification, nicely making the bed for much stricter age verification laws I’m sure certain parts of the political compass are already dreaming about. With so many Linux distributions, BSD variants, and even alternative operating systems having their legal domiciles in the United States, it’s not unreasonable to assume they’re going to fold under any possible legal pressure that comes with such laws.

I’m not rushing to replace my Fedora KDE installations with something else at this point, but I’m definitely going to explore my options on at least one of my machines and go from there, so I at least won’t be caught with my pants down in the future. The world isn’t ending, age verification hasn’t come to Linux, but we’d all do well to remain skeptical and prepare for when it does make its way into our open source operating systems.

18:00

17:49

[$] Collaboration for battling security incidents [LWN.net]

The keynote for Sun Security Con 2026 (SunSecCon) was given by Farzan Karimi on how incident handling can go awry because of a lack of collaboration between the "good guys"—which stands in contrast to how attackers collaboratively operate. He provided some "war stories" where security incident handling had benefited from collaboration and others where it was hampered by its lack. SunSecCon was held in conjunction with SCALE 23x in Pasadena in early March.

17:14

Slog AM: Cesar Chavez Park to Be Renamed, the Muckleshoot Casino Sauce Machine, and Wishing Death on Your Enemies in a Christ-Like Manner [The Stranger]

The Stranger's morning news roundup. by Vivian McCall

Seattle, King County to rename Cesar Chavez Park in South Park: Since the former Mexican American labor hero allegedly sexually abused girls and women, including his fellow labor leader Dolores Huerta, this is a good idea. The sign with Chavez’s name has already come down, The Seattle Times reports.

Leaders are grappling with the Chavez allegations in the Yakima valley, where he visited many times, reports the Yakima Herald. In 1986, he spoke at Yakima Valley College and Central Washington University before a two day march focused on the plight of asparagus cutters.

ICE in the News: The King County Council voted Tuesday to ban immigration operations on certain county properties unless federal agents have a judicial warrant or court order, KUOW reports. The measure passed 7-1. Councilmember Reagan Dunn voted against. His brother in moderation Councilmember Pete Von Reichbauer was excused from the vote. The council also struck the word “alien” from its legal code. County Executive Girmay Zahilay issued an executive order directing the council to take up the legislation.

What’s more Christ-like than wishing death on your enemies? Defense Secretary Pete Hegseth’s pastor and closest spiritual advisor Brooks Potteiger said on the podcast “Reformation Red Pill” that he wants Texas Senate candidate James Talarico to die. He referred to Talarico as a “wolf,” “demon,” and a “snake.” Actually, he’s a white Christian man! No matter. “First and foremost, we pray that a man like this would be cut to the heart.”

I’d hate to be slop rn. OpenAI is shutting down it’s AI video app Sora just a few months after launch and a now-kaput $1 billion investment deal with Disney. Back in October, Sora was hailed as this next-gen product of “the threat to our shared reality” variety. But Sora hemorrhaged money. Back of the napkin math suggested the company was blowing $15 million a day on these videos, Forbes wrote in November. Even the head of Sora, Bill Peebles, said the economics were completely unsustainable. Does this mean Mickey Mouse is staying far, far away from the slop? No, they’re still going to engage with AI “to find new ways to meet fans where they are.”

Liable: After a seven-week trial, a New Mexico jury determined that Meta, which owns Facebook and Instagram and the soon-to-be-shuttered Metaverse, had harmed the mental health of children and concealed what it knew about child sexual exploitation on its social media platforms. Jurors are deliberating in a similar case in California. For its thousands of violations, Meta could pay out $375 million—less than a fifth of what prosecutors were seeking. The company is valued at $1.5 trillion, so it’s not likely to make a dent. The shareholders don’t care. Stock was up 5 percent following the verdict. As for what will change, a judge will decide.

Epic, Fail: Fortnite developer Epic Games laid off 1,000 employees on Wednesday, a significant chunk of its staff. In an open letter, CEO Tim Sweeney wrote that Fortnite engagement took a dive in 2025, and the company is now “spending significantly more than we’re making.” Sweeney did not share exact engagement numbers. But at its 2023 peak Fortnite averaged 3.1 million players a day. Last September, that number had fallen to approximately 835,000. This is nothing to floss about.

😐👍: The Pentagon will order 2,000-3,000 82nd Airborne soldiers to the Middle East to support the war in Iran. Simultaneously, the US has sent Iran a 15-point plan to end the same war. It hasn’t been made public. This morning, Iran rejected the proposal and laid out its own conditions.

Go To War, Elder Millennials: The army bumped up the max enlistment age to 42 this month, bringing the admission policy in line with most other US Military services like the Air Force, Space Force, and Coast Guard. Sure, you were never able to afford the house you always dreamed of, but Trump, in his infinite wisdom, has forged a new path for you.

Weather: Rain before 2 p.m., then a chance of thunderstorms. This will help you acclimate to the loud noises.

What Could Be Worse Than Skeletons in the Closet? While cleaning out a closet in preparation to move the Mississippi Department of Public Safety to new headquarters, workers discovered a small blue suitcase. Inside was a cache of Klu Klux Klan materials, including Klan charters, Klan robes, recruitment materials, meeting notes, and a ledger of members who paid—and didn’t pay—their dues. The department has donated the materials to the Mississippi Department of Archives and History.

“It’s more than a sauce station”: Muckleshoot Casino has a Heinz REMIX machine, a “game-changing flavor experience” that allows people to make fucked-up sauces. Tongue explorers can add up to two “flavor enhancers”— jalapeño, chipotle, buffalo, garlic, honey, or bacon—at three levels of intensity to bases of ketchup, mustard, mayonnaise, barbecue, ranch, smoked barbeque, and honey mustard. Sounds unclean.

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 19:35, Monday, 30 March 20:16, Monday, 30 March
a bag of four grapes XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Ansible XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Bad Science XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Black Doggerel XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Blog - Official site of Stephen Fry XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Charlie Brooker | The Guardian XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Charlie's Diary XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Chasing the Sunset - Comics Only XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Coding Horror XML 19:21, Monday, 30 March 20:08, Monday, 30 March
Cory Doctorow's craphound.com XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Cory Doctorow, Author at Boing Boing XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Ctrl+Alt+Del Comic XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Cyberunions XML 19:49, Monday, 30 March 20:38, Monday, 30 March
David Mitchell | The Guardian XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Deeplinks XML 19:35, Monday, 30 March 20:19, Monday, 30 March
Diesel Sweeties webcomic by rstevens XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Dilbert XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Dork Tower XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Economics from the Top Down XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Edmund Finney's Quest to Find the Meaning of Life XML 19:35, Monday, 30 March 20:18, Monday, 30 March
EFF Action Center XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Enspiral Tales - Medium XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Events XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Falkvinge on Liberty XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Flipside XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Flipside XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Free software jobs XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Full Frontal Nerdity by Aaron Williams XML 19:28, Monday, 30 March 20:16, Monday, 30 March
General Protection Fault: Comic Updates XML 19:28, Monday, 30 March 20:16, Monday, 30 March
George Monbiot XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Girl Genius XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Groklaw XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Grrl Power XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Hackney Anarchist Group XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Hackney Solidarity Network XML 19:35, Monday, 30 March 20:20, Monday, 30 March
http://blog.llvm.org/feeds/posts/default XML 19:35, Monday, 30 March 20:20, Monday, 30 March
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 19:35, Monday, 30 March 20:15, Monday, 30 March
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 19:35, Monday, 30 March 20:20, Monday, 30 March
http://eng.anarchoblogs.org/feed/atom/ XML 19:42, Monday, 30 March 20:28, Monday, 30 March
http://feed43.com/3874015735218037.xml XML 19:42, Monday, 30 March 20:28, Monday, 30 March
http://flatearthnews.net/flatearthnews.net/blogfeed XML 19:35, Monday, 30 March 20:16, Monday, 30 March
http://fulltextrssfeed.com/ XML 19:35, Monday, 30 March 20:18, Monday, 30 March
http://london.indymedia.org/articles.rss XML 19:21, Monday, 30 March 20:08, Monday, 30 March
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 19:42, Monday, 30 March 20:28, Monday, 30 March
http://planet.gridpp.ac.uk/atom.xml XML 19:21, Monday, 30 March 20:08, Monday, 30 March
http://shirky.com/weblog/feed/atom/ XML 19:35, Monday, 30 March 20:19, Monday, 30 March
http://thecommune.co.uk/feed/ XML 19:35, Monday, 30 March 20:20, Monday, 30 March
http://theness.com/roguesgallery/feed/ XML 19:28, Monday, 30 March 20:16, Monday, 30 March
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 19:49, Monday, 30 March 20:38, Monday, 30 March
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 19:35, Monday, 30 March 20:19, Monday, 30 March
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 19:49, Monday, 30 March 20:31, Monday, 30 March
http://www.baen.com/baenebooks XML 19:35, Monday, 30 March 20:19, Monday, 30 March
http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept XML 19:35, Monday, 30 March 20:19, Monday, 30 March
http://www.godhatesastronauts.com/feed/ XML 19:28, Monday, 30 March 20:16, Monday, 30 March
http://www.tinycat.co.uk/feed/ XML 19:35, Monday, 30 March 20:15, Monday, 30 March
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 19:35, Monday, 30 March 20:19, Monday, 30 March
https://broodhollow.krisstraub.comfeed/ XML 19:35, Monday, 30 March 20:16, Monday, 30 March
https://debian-administration.org/atom.xml XML 19:35, Monday, 30 March 20:16, Monday, 30 March
https://elitetheatre.org/ XML 19:21, Monday, 30 March 20:08, Monday, 30 March
https://feeds.feedburner.com/Starslip XML 19:49, Monday, 30 March 20:31, Monday, 30 March
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 19:35, Monday, 30 March 20:18, Monday, 30 March
https://hackbloc.org/rss.xml XML 19:35, Monday, 30 March 20:16, Monday, 30 March
https://kajafoglio.livejournal.com/data/atom/ XML 19:49, Monday, 30 March 20:38, Monday, 30 March
https://philfoglio.livejournal.com/data/atom/ XML 19:21, Monday, 30 March 20:08, Monday, 30 March
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 19:21, Monday, 30 March 20:08, Monday, 30 March
https://pixietrixcomix.com/menage-a-3/comic.rss XML 19:35, Monday, 30 March 20:19, Monday, 30 March
https://propertyistheft.wordpress.com/feed/ XML 19:35, Monday, 30 March 20:15, Monday, 30 March
https://requiem.seraph-inn.com/updates.rss XML 19:35, Monday, 30 March 20:15, Monday, 30 March
https://studiofoglio.livejournal.com/data/atom/ XML 19:42, Monday, 30 March 20:28, Monday, 30 March
https://thecommandline.net/feed/ XML 19:42, Monday, 30 March 20:28, Monday, 30 March
https://torrentfreak.com/subscriptions/ XML 19:35, Monday, 30 March 20:18, Monday, 30 March
https://web.randi.org/?format=feed&type=rss XML 19:35, Monday, 30 March 20:18, Monday, 30 March
https://www.dcscience.net/feed/medium.co XML 19:49, Monday, 30 March 20:38, Monday, 30 March
https://www.DropCatch.com/domain/steampunkmagazine.com XML 19:35, Monday, 30 March 20:16, Monday, 30 March
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 19:42, Monday, 30 March 20:28, Monday, 30 March
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 19:21, Monday, 30 March 20:08, Monday, 30 March
https://www.freedompress.org.uk:443/news/feed/ XML 19:28, Monday, 30 March 20:16, Monday, 30 March
https://www.goblinscomic.com/category/comics/feed/ XML 19:35, Monday, 30 March 20:15, Monday, 30 March
https://www.loomio.com/blog/feed/ XML 19:42, Monday, 30 March 20:28, Monday, 30 March
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 19:35, Monday, 30 March 20:16, Monday, 30 March
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 19:21, Monday, 30 March 20:08, Monday, 30 March
https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 XML 19:35, Monday, 30 March 20:18, Monday, 30 March
https://x.com/statuses/user_timeline/22724360.rss XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Humble Bundle Blog XML 19:21, Monday, 30 March 20:08, Monday, 30 March
I, Cringely XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Irregular Webcomic! XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Joel on Software XML 19:42, Monday, 30 March 20:28, Monday, 30 March
Judith Proctor's Journal XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Krebs on Security XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Lambda the Ultimate - Programming Languages Weblog XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Looking For Group XML 19:35, Monday, 30 March 20:19, Monday, 30 March
LWN.net XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Mimi and Eunice XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Neil Gaiman's Journal XML 19:35, Monday, 30 March 20:15, Monday, 30 March
Nina Paley XML 19:21, Monday, 30 March 20:08, Monday, 30 March
O Abnormal – Scifi/Fantasy Artist XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Oglaf! -- Comics. Often dirty. XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Oh Joy Sex Toy XML 19:35, Monday, 30 March 20:19, Monday, 30 March
Order of the Stick XML 19:35, Monday, 30 March 20:19, Monday, 30 March
Original Fiction Archives - Reactor XML 19:49, Monday, 30 March 20:31, Monday, 30 March
OSnews XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Paul Graham: Unofficial RSS Feed XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Penny Arcade XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Penny Red XML 19:35, Monday, 30 March 20:20, Monday, 30 March
PHD Comics XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Phil's blog XML 19:28, Monday, 30 March 20:16, Monday, 30 March
Planet Debian XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Planet GNU XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Planet Lisp XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Pluralistic: Daily links from Cory Doctorow XML 19:35, Monday, 30 March 20:15, Monday, 30 March
PS238 by Aaron Williams XML 19:28, Monday, 30 March 20:16, Monday, 30 March
QC RSS XML 19:21, Monday, 30 March 20:08, Monday, 30 March
Radar XML 19:49, Monday, 30 March 20:31, Monday, 30 March
RevK®'s ramblings XML 19:42, Monday, 30 March 20:28, Monday, 30 March
Richard Stallman's Political Notes XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Scenes From A Multiverse XML 19:21, Monday, 30 March 20:08, Monday, 30 March
Schneier on Security XML 19:35, Monday, 30 March 20:15, Monday, 30 March
SCHNEWS.ORG.UK XML 19:35, Monday, 30 March 20:19, Monday, 30 March
Scripting News XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Seth's Blog XML 19:42, Monday, 30 March 20:28, Monday, 30 March
Skin Horse XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Spinnerette XML 19:35, Monday, 30 March 20:19, Monday, 30 March
Tales From the Riverbank XML 19:49, Monday, 30 March 20:38, Monday, 30 March
The Adventures of Dr. McNinja XML 19:35, Monday, 30 March 20:20, Monday, 30 March
The Bumpycat sat on the mat XML 19:35, Monday, 30 March 20:15, Monday, 30 March
The Daily WTF XML 19:42, Monday, 30 March 20:28, Monday, 30 March
The Monochrome Mob XML 19:35, Monday, 30 March 20:16, Monday, 30 March
The Non-Adventures of Wonderella XML 19:35, Monday, 30 March 20:18, Monday, 30 March
The Old New Thing XML 19:35, Monday, 30 March 20:19, Monday, 30 March
The Open Source Grid Engine Blog XML 19:21, Monday, 30 March 20:08, Monday, 30 March
The Stranger XML 19:35, Monday, 30 March 20:20, Monday, 30 March
towerhamletsalarm XML 19:42, Monday, 30 March 20:28, Monday, 30 March
Twokinds XML 19:49, Monday, 30 March 20:31, Monday, 30 March
UK Indymedia Features XML 19:49, Monday, 30 March 20:31, Monday, 30 March
Uploads from ne11y XML 19:42, Monday, 30 March 20:28, Monday, 30 March
Uploads from piasladic XML 19:35, Monday, 30 March 20:18, Monday, 30 March
Use Sword on Monster XML 19:21, Monday, 30 March 20:08, Monday, 30 March
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 19:42, Monday, 30 March 20:28, Monday, 30 March
what if? XML 19:35, Monday, 30 March 20:16, Monday, 30 March
Whatever XML 19:49, Monday, 30 March 20:38, Monday, 30 March
Whitechapel Anarchist Group XML 19:49, Monday, 30 March 20:38, Monday, 30 March
WIL WHEATON dot NET XML 19:35, Monday, 30 March 20:19, Monday, 30 March
wish XML 19:35, Monday, 30 March 20:20, Monday, 30 March
Writing the Bright Fantastic XML 19:35, Monday, 30 March 20:19, Monday, 30 March
xkcd.com XML 19:35, Monday, 30 March 20:18, Monday, 30 March