
i will miss her forever [WIL WHEATON dot NET]

Fourteen years ago, Anne and I went to Pasadena Humane Society to see some of the construction our fundraising supported. While we were there, we chatted with Kevin, who was our adoption coordinator for our dog, Seamus.
Seamus had been part of our pack for about a year, and we were talking with Kevin about how much we loved him, what an incredible dog he was, and how happy and grateful we were to have met and adopted him.
I remember saying, “I don’t think I will ever have another dog who isn’t a pittie. He is so sweet, and affectionate, and so gentle, and …” I stopped because I saw a volunteer walking a puppy toward us. She was tiny and underweight, but she had the biggest smile. I knelt down to meet her, and she did a somersault into my lap, wagging her tail so fast I couldn’t see it.
“Well, they are just like this!” I concluded. Then I loved on that puppy until Anne gently told me it was time to let her walk into the shelter.
I was completely in love with her, that fast. She reached into my heart and never left. The next day, it was Anne’s birthday. We went down to the beach for a long walk, as is tradition. We were approaching the Manhattan Beach pier when I said, “I just need to confirm with you that we are not adding another dog to our pack, because I can’t stop thinking about that puppy.”
Anne told me that she didn’t pet her, because she knew that she’d fall in love, too, if she did. I don’t recall what we said to each other, but Anne called PHS and asked them to put us on a waiting list to adopt her.
A few days later, Marlowe came home with us, and she was my baby girl for over a decade. Even when she was an old lady, she was my little girl.
Just over a month ago, we found out Marlowe had lymphoma. It was so aggressive, it moved so quickly, we couldn’t stop it. We did everything we could for her, but we had to say goodbye to her last month.
I miss her so much, my heart hurts. It’s been a month, and I still look for her everywhere in the house. I’ll be okay, and then something will remind me of her and I am sobbing in a heap on the floor.
This is the first time in my life I have experienced this kind of grief, this kind of loss. When we lost Seamus, at least Marlowe was here for both of us while we grieved (and we were here for her, when she grieved). Now there’s just a big empty house and my broken heart.
I will miss her forever, my sweet little girl.
Valhalla's Things: Pizza! [Planet Debian]
Posted on April 18, 2026
Tags: madeof:atoms, craft:cooking
This post contains a bit of consumerism and is full of references to commercial products, none of which caused me to receive any money nor non-monetary compensation.
This post has also been written after eating in one meal the amount of bread-like stuff that we usually have in more than 24 hours.
I’ve been baking bread since a long time ago. I don’t know exactly when, but probably it was the early 2000s or so, and remained a regular-ish thing until 2020, when it became an extremely regular thing, as in I believe I bake bread on average every other day.
In the before times, I’ve had a chance to bake pizza in a wood fired oven a few times: a friend had one and would offer the house, my partner would mind the fire, and I would get there with the dough and prepare the pizza.
Now that we have moved to a new house, we don’t have a good and convenient place for a proper wood fired oven in masonry, but we can use one of the portable ones, and having dealt with more urgent expenses, I decided that just before the potential collapse of the global economy was a good time as any to buy the oven I had been looking at since we found this house.
I decided to get an Ooni Karu 2, having heard good things about the brand, and since it looked like a good balance between size and portability. I also didn’t consider their gas fired ovens (nor did I buy the gas burner) because I’m trying to get rid of gas, not add stuff that uses it, and I didn’t get an electric one because I’m not at all unhappy with the bakery-style pizza we make in our regular oven, and I have to admit we also wanted to play with fire1.
We also needed an outdoor table suitable to use the oven on and store it. Here I looked for inspiration at the Ooni tables (and for cheaper alternatives in the same style), but my mother who shares the outdoor area with us wasn’t happy with the idea of steel2. And then I was browsing the modern viking shores, and found that there was a new piece in the NÄMMARÖ series my mother likes (and of which we already have some reclining chairs): a kitchen unit in wood with a steel top.
At first I expected to just skip the back panel, since it would be in the way when using the oven, but then I realized that it could probably be assembled upside down, down from the top between the table legs, and we decided to try that option.
This week everything had arrived, and we could try it.
Yesterday evening, after dinner (around 21, I think) I prepared the dough with the flour I usually use for bakery-style pizza: Farina di Grano Tenero Tipo 0 PANE (320 - 340 W); since I wanted to make things easier for myself I only used 55% hydration, so the recipe was:
The next time I think I’ll try with one of my other staples: Molino Bogetto etichetta blu (260/280 W)
Then this morning we assembled the NÄMMARÖ, then I divided the dough in eight balls, put them in a covered — but not sealed — container 3, well floured with rice flour and then we fired the oven (as in: my partner did, I looked for a short while and then set the table and stuff), using charcoal, because we already had some, and could conveniently get more at the supermarket.
When the oven had reached temperatures in the orange range4 I stretched the smallest ball out, working on my wooden peel, sprayed it with water5, sprinkled it with coarse salt and put it in the oven.
After 30 seconds I turned it around with the new metal peel, then again after 30 seconds, and then I lost count of how many times I repeated this6, but it was probably 2 or 3 minutes until it looked good.

And it was good. The kind of pizza that is quite soft, especially near the borders.
We ate it with fresh mozzarella and tomatoes, and then made another one the same way, to finish the mozzarella.

This was supposed to be our lunch, but we decided to try one with some leftover cooked radicchio, and that also worked quite nicely.
And finally, we decided we needed to try a more classical pizza, with tomato sauce and cured meat, of which we forgot to take pictures.
Up to here we had eaten about half of the dough, and we were getting full: I had prepared significantly more than what I expected to eat, to be able to accidentally burn some, but also with the idea to bake something else to be eaten later.
So I made two more focaccias with just water and salt, and then I tried to cook some bread with what I expected to be residual heat.

Except that the oven was getting a bit too cold, so my partner added some charcoal, and when I put the last two unflattened balls right at the back of the oven where it was still warmer, that side carbonized. After 5 minutes I moved them to the middle of the oven, and turned them, and then after another turn and 5 more minutes they were ready. And other than the burnt crust, they were pretty edible.
So, the thoughts after our first experience. Everybody around the table (my SO, my mother and me) was quite happy with the results, and they are different enough from the ones I could get with the regular oven.
As I should have expected, it’s much faster than a masonry oven, both in getting to temperature and in cooling down: my plan for residual heat bread cooking will have to be adjusted with experience.
We were able to get it hot enough, but not as hot as it’s supposed to be able to get: we suspect that using just charcoal may have influenced it, and next week we’ll try to get some wood, and try with a mix.
As for the recipe, dividing the dough in eight parts worked quite well: maybe the pizzas are a bit on the smaller side, but since they come one at a time it’s more convenient to cut and share them, and maybe make a couple more at the end.
Of course, I’ll want to try different recipes, for different styles of pizzas (including some almost-trademark-violating ones) and for other types of flatbread.
I expect it won’t be hard to find volunteers to help us with the experiments. :D
any insinuation that there may have been considerations of having a way to have freshly baked bread in case of a prolonged blackout may or may not be based on reality. But it wasn’t the only — or even the main — reason.↩︎
come on! it’s made of STEEL. how can it be not good? :D↩︎
IKEA 365+ 3.1 glass, the one that is 32 cm × 21 cm × 9 cm; it was just big enough for the amount of dough, and then I covered it with a lid that is missing the seal.↩︎
why did they put a thermometer on it, and not add labels with the actual temperature? WHY???↩︎
if you don’t have dietary restrictions a bit of olive oil would taste even better.↩︎
numbers above 2 are all basically the same, right?↩︎
Happy Birthday Krissy [Whatever]


Shown here in the midst of prepping our taxes for our accountant, not this week but a couple of months ago, because she’s organized about that, and that is, in fact, one of the many, many things I love about her.
Krissy and I actually do a terrible job of being in the same place on her birthday. Last year she was in California visiting her family, and this year I am California for the LA Times Festival of Books, where I have a panel and at least two signings tomorrow. Last year I made up for my absence by getting her real estate. I think this year I am likely just to take her to dinner when I get back. You can’t do real estate every year.
Every year, however, I so incredibly grateful that this amazing person chooses to live her life with me, and I make it my business to let her know how much I love, value and respect her. She is the reason I get to live the life I do. That’s a pretty big deal.
If you wish to wish her happy birthday in the comments, that would be fabulous.
— JS
Taler lecture at Cedarcrypt 2026 [Planet GNU]
by Özgür Kesim
Last week I released a new toolkit that includes docs for your AI programming partner. Ask it to read the docs, and then tell it about the editor you want. It works with WordPress sites via the wpcom API via the wpIdentity server. A new frontier. ;-)
Charles Plessy: Thanks Branchable! [Planet Debian]

I was hosted for a long time, free of charge, on https://www.branchable.com/ by Joey and Lars. Branchable and Ikiwiki were wonderful ideas that never took off as much as they deserved. To avoid being a burden now that Branchable is nearing its end, I migrated to a VPS at Sakura.
However, I have not left Ikiwiki. I only use it as a site engine, but I haven't found any equivalent that gives me both native Git integration, wiki syntax for a personal site, the creativity of its directives (you can do anything with inline and pagespec), and its multilingual support through the po plugin.
Joey and Lars, thank you for everything!
The people who call themselves Mets fans who are sad when the Mets don't make the playoffs are really Yankees fans.
Pluralistic: Georgia's voting technology blunder (18 Apr 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Nearly 25 years ago, in the aftermath of Bush v Gore, I got involved in a bunch of ugly tech policy fights over voting machines. The hanging chad debacle in Florida prompted Congress to appropriate funds for states to purchase new touchscreen voting machines based on a robust, open standard. The problem was, those machines didn't exist.
The voting machine industry in those days was already very consolidated (it's far more consolidated today). They went shopping for a standards body that would publish a spec for a "standard" voting machine that could soak up those federal dollars in time for the 2004 election. The only taker was the IEEE, who unwisely offered to serve as host for this impossible rush job.
Once the voting machine reps were around a table at IEEE – largely sheltered from antitrust scrutiny thanks to the broad latitude enjoyed by firms engaged in standardization, which is otherwise uncomfortably close to collusion – they admitted what everyone already knew: there was zero chance they were going to develop a new standard in time for the election.
Instead, they decided they were going to publish a "descriptive standard." Rather than designing a new standard, they'd write down the specs of their own products – the same products that were considered so defective they needed to be replaced before the election – and call that the standard.
That was my first encounter with this issue as an activist. I had just started at EFF and a lot of our supporters were IEEE members, who were appalled to see their professional association being used to launder this incredibly politically salient, technically incoherent scam. We got a ton of IEEE members to write to the board, who shut down the standards committee and kicked the voting machine companies to the curb.
The voting machine companies weren't done, though. Diebold – one of the leaders in the cartel – knew that its voting machines were defective. They'd crash, lose their vote-counts and malfunction in other ways that were equally damaging to election integrity.
This was an alarming piece of news, but perhaps just as alarming is the way it came to light. A Diebold employee described this situation in a memo that was subsequently hacked and dumped by parties unknown. That memo, along with the accompanying tranche of extremely alarming revelations about Diebold's voting machine division, was the subject of one of the first mass-censorship copyright campaigns in internet history.
Diebold didn't dispute the veracity of these damning revelations: rather, it claimed that since the memos detailing its gross democracy-endangering misconduct had been prepared by an employee, that they were therefore works-made-for-hire whose copyright was held by Diebold, and thus anyone who reproduced the memo was infringing on the company's copyright.
Under Section 512 of the then-new Digital Millennium Copyright Act, Diebold was empowered to send "takedown notices" to the web hosting providers whose users had posted the memos, and if the web hosts didn't remove the content "expeditiously," they would be jointly liable for any eventual copyright damages, which are statutorily set at $150,000 per infringement.
Every web host folded. No one wanted to take the risk of tens of millions of dollars in statutory damages.
(Incidentally: anyone who tells you that "online safety" requires us to make online platforms liable for their users' speech needs to explain how this wouldn't empower every crooked company whose dirty laundry had ended up online wouldn't just do what Diebold did. It's not technically insanity to do the same thing over again in expectation of a different outcome, but it is awfully stupid and reckless.)
That might have been the end of things, except for the kids at Swarthmore, a small liberal arts college in Pennsylvania. Two students, Nelson Pavlosky and Luke Smith, were outraged by Diebold and they had accounts on Swarthmore's webserver. So they uploaded thousands of copies of the leaked memos, but linked to just one of them from a page about the leak. As soon as that copy was deleted by Swarthmore's webmasters in response to a DMCA takedown from Diebold, the students updated the link to point to another copy. And another. And another.
That's where EFF got involved. We repped the Online Policy Group, whose page linking to the Swarthmore resources was taken down by a Diebold notice. We won. The memos became a matter of public record. The Swarthmore kids started a nationwide network called "Students for Free Culture." It was pretty danged cool.
That wasn't the end of the Diebold story, though. Diebold was and is a very diversified conglomerate that made a lot of tabulating machines: ATMs, cash-registers, medical monitoring devices…and voting machines. Every one of these machines produced a paper-tape of its tabulations as an audit trail that could be used to reconstruct its calculations if it crashed…except the voting machines. The voting machines that kept crashing, and whose crashes presented a serious risk to the legitimacy of US elections in the wake of the worst electoral crisis in the country's history.
Diebold's stated reason for this was that adding a paper tape was haaaard (even though all its other machines had paper audit tapes). Not only was this a very unconvincing excuse, it was downright alarming in light of the promise of Walden O’Dell (Diebold CEO and prominent Bush fundraiser) to help "Ohio deliver its electoral votes to the president":
https://fairvote.org/diebold-partisanship-and-public-interest-elections/
Now, to be clear, I don't think that O'Dell was going to steal the election for Bush (that's the Supreme Court's job). Rather, he was just a loudmouth asshole CEO who supported the (up to that point) worst president in American history, and who also made garbage products that were not fit for purpose.
In the decades since, voting machines have been the subject of lots of scrutiny by the information security community, because they suck. Time after time, the most sphincter-puckering defects in widely used machines have come to light:
https://blog.citp.princeton.edu/2006/05/11/report-claims-very-serious-diebold-voting-machine-flaws/
The hits just kept on coming:
At Defcon, the amazing Matt Green has presided over the Voting Village, where it's an annual tradition for hackers to probe voting machines. This exercise has produced a string of terrifying revelations that precisely described how these machines suck:
https://www.votingvillage.org/cfp
Pretty much everyone I knew thought that voting machines were garbage technology…right up to the moment that the My Pillow guy, Tucker Carlson, and a whole menagerie of conspiratorial Trumpland mutants started peddling a bizarre story about how Hugo Chavez colluded with the Canadian voting machine company Dominion Voting Systems (who bought Diebold's voting machine business when they finally dumped the division) to rig the 2020 election for Joe Biden. They told so many outlandish lies about this that Fox ended up paying Dominion $787.5 million to settle the case:
https://en.wikipedia.org/wiki/Dominion_Voting_Systems#Dominion_Voting_Systems_v._Fox_News_Network
That's when something very weird happened. A bunch of people who had been skeptical of voting machines since the Brooks Brothers Riot suddenly became history's most ardent defenders of those same garbage voting machines. The cartel of voting machine companies – who had a long track record of using bullshit legal threats to silence their (mostly progressive) critics – were drafted into The Resistance(TM), and anyone who thought voting machines were trash was dismissed as a crazy person who has been totally mypillowpilled:
There's a name for this: it's called "schismogenesis": when one group of people define themselves in opposition to someone else. If the other team does X, then your team has to oppose X, even if you all liked X until a couple minutes ago:
https://pluralistic.net/2021/12/18/schizmogenesis/
This schismogenic reversal persists to this very day. Every time Trump promotes another election denier to his cabinet, a federal agency, or a judgeship, the idea that voting machines are garbage becomes more Stop the Steal-coded, even though voting machines are, objectively, garbage.
Which is bad. It's bad because we are going into another election season where the stakes are – incredibly – even higher than Bush v Gore, and electoral authorities and state legislatures are making the world's most unforced errors in their voting machine procurement decisions, and if you've conditioned yourself to reflexively dismiss voting machine criticisms as conspiratorial nonsense, then you are part of the problem.
Just because some voting machine criticism is conspiratorial nonsense, it doesn't follow that voting machines are good, nor does it follow that every voting machine critic is a swivel-eyed loon or ratfucking Roger Stone protege.
Take, for example, Princeton's Andrew Appel, a computer scientist who's been publishing well-informed, well-documented warnings about defects in voting machines for years and years. Appel's latest is an alarming note about Georgia's new plan to "tabulate" ballots using OCR software:
The Georgia legislature has wisely banned the use of QR codes on the paper ballots generated by touchscreen voting machines. We have, at long last, progressed to the point where we use "ballot marking devices" (BMDs) that produce a paper record that can be hand-counted. The problem is that voters barely ever glance at these paper ballots before dropping them in the box to make sure the choices they made on the touchscreen are correctly reflected on the ballot – only 7% of voters carefully inspect their ballots!
This problem is greatly exacerbated if these ballot papers are tabulated by a machine that reads a QR code or barcode, rather than interpreting the human-readable information on the ballot. People are even less likely to pull out their phones and scan the QR code to ensure it matches the words on the paper. That means that a BMD could output different choices in the QR code than it prints in the human-readable part – and the Dominion BMD machines they use in Georgia run outdated software that's super-hackable:
So Georgia's state leg passed Senate Bill 189, which establishes that "The text portion of the paper ballot marked and printed by the electronic ballot marker indicating the elector’s selection shall constitute the official ballot and shall constitute the official vote for purposes of vote tabulation." In other words, you can't count by scanning QR codes, you have to actually interpret the human-readable text on these ballots.
These machines still suck, to be clear (the fact that they don't suck for the mypillovian reasons that Tucker Carlson believes doesn't mean they're good) – but thanks to SB189, they are way less dangerous to democracy than they might be.
But not if Secretary of State Brad Raffensperger gets his way. Raffensperger is another guy who was drafted into The Resistance(TM) after he refused to commit election fraud for Trump, but he's also not good. He can still be terrible in other ways – and he is.
Raffensperger has announced his plan to circumvent the Georgia legislature by using Dominion ICX touchscreens to produce ballots with QR codes, which will then be tabulated in Dominion ICP scanners – but then he's going to "verify" the tabulation by running those same ballots through optical character recognition (OCR) software.
As Appel points out, this is the same stupid plan that Raffensperger tried in 2024, where he called the OCR step an "audit" of the QR tabulation. Back then, he grabbed 200dpi "ballot image files" from the Dominion BMDs and ran them through OCR software run by a company called Enhanced Voting. Appel sums up the fundamental incoherence of this approach.
First, the BMDs are super-hackable, so we don't trust them to print the same info in the QR code as they print in the human-readable text (which no one looks at anyway). If we don't trust them to print accurate info in the QR code, then why would we trust them to accurately generate that 200dpi QR code that's generated for the audit? As Appel writes, "it would be fairly easy for an unsophisticated attacker to alter ballot-image files–just replace the ballots they don’t like with copies of the ones they do like."
Then there's the step where these files are zipped up and transferred to the outside vendor for the audit – a step that Raffensperger has not explained. And even if the files make it to the outside contractor safely, that contractor could "change the inputs (ballot images) or outputs (tabulations)."
So this is very bad. Voting machines suck. Raffensperger sucks.
And here's the stupidest part: as Appel explains, there is a much more secure way to do this, and it's very cheap:
Just use their existing Dominion ICP (polling-place) scanners to count preprinted, hand-marked optical-scan "bubble ballots" that the voter has marked with a pen.
This is what other states are doing. As Appel writes, "This doesn’t even require a software upgrade of any kind. Although it would be a fine idea to install a software upgrade that addresses known security vulnerabilities in the ICX and ICP, the ICP can count hand-marked ballots with or without the upgrade."
This is a purely unforced error, in other words. As such, it's part of a series of shitty vote-tech choices that politicians and officials have been making since Bush v Gore. Truly, we live in the stupidest timeline.

Wrench – Side Table A by Iyo Hasegawa https://adorno.design/pieces/wrench-side-table-a/
BOOM: Ticketmaster GUILTY of Monopolization https://www.thebignewsletter.com/p/boom-ticketmaster-guilty-of-monopolization
I Was an Enthusiastic Early Adopter of AI Scribes. Here’s Why I Stopped https://benngooch.substack.com/p/i-was-an-enthusiastic-early-adopter
Mayhem’s Legacy: Why MetaBrainz Matters More Than Ever, and Why We’re Looking for Someone to Lead It https://compassmapandkey.com/2026/04/18/mayhems-legacy-why-metabrainz-matters-more-than-ever-and-why-were-looking-for-someone-to-lead-it/
#20yrsago GW Bush’s iPod contains “illegal” (according to RIAA) music https://memex.craphound.com/2006/04/16/gw-bushs-ipod-contains-illegal-according-to-riaa-music/
#20yrsago Fan fiction community for McDonald’s breakfast sandwiches https://web.archive.org/web/20120112221730/https://mcgriddlefanfic.livejournal.com/profile/
#10yrsago High tech/high debt: the feudal future of technology makes us all into lesser lessors https://web.archive.org/web/20160415150308/https://www.theatlantic.com/technology/archive/2016/04/rental-company-control/478365/
#10yrsago Three pieces of statistical “bullshit” about the UK EU referendum https://timharford.com/2016/04/three-pieces-of-brexit-bullshit/
#10yrsago Southwest Air kicks Muslim woman off plane for switching seats https://web.archive.org/web/20160416041342/http://www.independent.co.uk/news/world/americas/muslim-woman-kicked-off-plane-as-flight-attendant-said-she-did-not-feel-comfortable-with-the-a6986661.html
#10yrsago China’s Internet censors order ban on video of toddler threatening brutal cops https://chinadigitaltimes.net/2016/04/minitrue-4/
#10yrsago Tiny South Pacific island to lose free/universal Internet lifeline https://www.rnz.co.nz/news/pacific/299017/niue-to-get-better-internet-service-at-a-cost
#10yrsago The Everything Box: demonological comedy from Richard “Sandman Slim” Kadrey https://memex.craphound.com/2016/04/16/the-everything-box-demonological-comedy-from-richard-sandman-slim-kadrey/
#5yrsago People's Choice Communications https://pluralistic.net/2021/04/16/where-it-hurts/#charter-hires-scabs
#5yrsago "Anti-voter-suppression" companies are lobbying to kill HR1 https://pluralistic.net/2021/04/16/where-it-hurts/#tissue-thin
#5yrsago $100m deli made $35k in 2019/20 https://pluralistic.net/2021/04/16/where-it-hurts/#hometown
#5yrsago Mass-action lawsuit against Facebook https://pluralistic.net/2021/04/16/where-it-hurts/#sue-facebook
#1yrago Trump fought the law and Trump won https://pluralistic.net/2025/04/16/weaponized-admin-incompetence/#kill-all-the-lawyers

San Francisco: 2026 Berkeley Spring Forum on M&A and the
Boardroom, Apr 23
https://www.theberkeleyforum.com/#agenda
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
NYC: Enshittification at Commonweal Ventures, Apr 29
https://luma.com/ssgfvqz8
NYC: Techidemic with Sarah Jeong, Tochi Onyibuchi and Alia
Dastagir (PEN World Voices), Apr 30
https://worldvoices.pen.org/event/techidemic/
Barcelona: Internet no tiene que ser un vertedero (Global
Digital Rights Forum), May 13
https://encuentroderechosdigitales.com/en/
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI (The Strand),
Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Pete "Mayor" Buttigieg (No Gods No Mayors)
https://www.patreon.com/posts/pete-mayor-with-155614612
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
Launch for Cindy's Cohn's "Privacy's Defender" (City Lights)
https://www.youtube.com/watch?v=WuVCm2PUalU
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"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
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. Third draft completed. Submitted to editor.
"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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
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
The book of concern [Seth's Blog]
“Wait a second.”
That’s difficult advice. In a world that moves faster with each cycle, where urgencies are prioritized and last-minute saves are celebrated, it’s not always welcome advice.
And so we’ve ended up concerned. Fretting. Worried. Looking for the next thing to drop everything for.
The book of concern is more than a conceptual hack. It’s an actual physical intervention, and it might be worth trying for a week.
Write down the emergency of this moment. The one that’s taking your gaze away from your strategy and the long-term work you set out to do. Write it down.
If it’s still important in two days, go ahead and focus on it.
What you’ll probably discover is that almost all of the concerns go away on their own. The ones that don’t are definitely worthy of your scarce attention.
It might be an issue with the neighbor, a competitor or a customer. It might be a fashion concern or a social challenge. (If the building is on fire, please go ahead and put it out). Anything else, write it down. Affixing our concern to paper keeps it safely in one place, and the record we create becomes a useful reminder for next time.
Matthias Klumpp: Hello old new “Projects” directory! [Planet Debian]
If you have recently installed a very up-to-date Linux distribution with a desktop environment, or upgraded your system on a rolling-release distribution, you might have noticed that your home directory has a new folder: “Projects”
With the recent 0.20 release of xdg-user-dirs we enabled the “Projects” directory by default. Support for this has already existed since 2007, but was never formally enabled. This closes a more than 11 year old bug report that asked for this feature.
The purpose of the Projects directory is to give applications a default location to place project files that do not cleanly belong into one of the existing categories (Documents, Music, Pictures, Videos). Examples of this are software engineering projects, scientific projects, 3D printing projects, CAD design or even things like video editing projects, where project files would end up in the “Projects” directory, with output video being more at home in “Videos”.
By enabling this by default, and subsequently in the coming months adding support to GLib, Flatpak, desktops and applications that want to make use of it, we hope to give applications that do operate in a “project-centric” manner with mixed media a better default storage location. As of now, those tools either default to the home directory, or will clutter the “Documents” folder, both of which is not ideal. It also gives users a default organization structure, hopefully leading to less clutter overall and better storage layouts.
As usual, you are in control and can modify your system’s
behavior. If you do not like the “Projects” folder,
simply delete it! The xdg-user-dirs
utility will not try to create it again, and instead adjust the
default location for this directory to your home directory. If you
want more control, you can influence exactly what goes where by
editing your ~/.config/user-dirs.dirs configuration
file.
If you are a system administrator or distribution vendor and
want to set default locations for the default XDG directories, you
can edit the /etc/xdg/user-dirs.defaults file to set
global defaults that affect all users on the system (users can
still adjust the settings however they like though).
Besides this change, the 0.20 release of
xdg-user-dirs brings full support for the Meson build
system (dropping Automake), translation updates, and some
robustness improvements to its code. We also fixed the
“arbitrary code execution from unsanitized input” bug
that the Arch Linux Wiki mentions
here for the xdg-user-dirs utility, by replacing
the shell script with a C binary.
Thanks to everyone who contributed to this release!
US lawfare targeting UN on Palestine [Richard Stallman's Political Notes]
Francesca Albanese, UN special rapporteur on human rights in Palestine, has been singled out by the persecutor as a special target for the most extreme possible lawfare persecution.
It is shocking that the US has the power to block use of bank payment cards world-wide. No country should have that special power, and European countries ought to set up their own networks that the US cannot censor. But I can affirm that it's not hard to live without a bank card. I never use mine except to buy airline tickets, which I do perhaps once every few years — and I could pay cash if necessary.
The other forms of harassment and punishment described in the article are harder to cope with.
ICE protests working [Richard Stallman's Political Notes]
Massive public resistance to the bully's deportation sweeps is partly successful, and they have weakened his appetite for them.
The worst thing about them, in my view, is not that they are deporting people but that they stretch the law and the facts to create false excuses for it, and that they use deportation as a tool for political repression. These pervert justice and human rights, which harms everyone in the US.
Protesters arrested en masse, UK [Richard Stallman's Political Notes]
The UK arrested 500 protesters for carrying signs to support Palestine Action.
Although a court ruled that the ban on supporting Palestine Action is illegal, the government decided to appeal that decision rather than give in. It seems awfully desperate to carry on the repression. It has given no rational reason that would justify this desperation.
About that US-Iran ceasefire [Richard Stallman's Political Notes]
The bully claims to have agreed to a two-week cease-fire with Iran, but it is dubious that the two actually agree on anything. Both sides have announced conditional offers of cease-fire that don't meet each other.
Perhaps it will suit each side to pretend that other side has met its condition, so they can stop actually fighting. But I don't have confidence that this agreement to disagree will last. Announcing renewed hatred is a frequent part of the bully's playbook in a dispute.
US as war criminal [Richard Stallman's Political Notes]
*Retired military officers call [the bully's] threats against Iran "likely war crimes".*
*Congress Must Restrain [the bully] from Nuclear Weapons First Use, Says Union of Concerned Scientists.*
The bully's deranged threats against Iran constitute proof that the attack he threatened would be an intentional attempt at genocide.
By contrast, we know that the US military's bombing of the Shajarah Tayyebeh elementary school was due to out-of-date records which said that it was still part of the adjacent IRGC base. To have chosen knowingly to bomb a school, in the absence of some specific military need (which did not exist) would have been a war crime, but an error is not.
By contrast, I tend to think that the bombing of Iran's B1 bridge, a primarily civilian facility, was a war crime.
Moreover, the bully and Netanyahu are, I believe, guilty of the crime of aggressive war.
One of right-wing extremists today is to erase both the goal and the means for punishing war crimes, crimes against humanity, and aggressive war. They are so carried away by hate that they regard all attempts to limit acts of hatred as outrageous interference.
Anti-vax disinformation down [Richard Stallman's Political Notes]
The wrecker's antivax officials are spreading antivax views less for the moment, having learned that voters dislike that.
Do not be fooled by this. It is not a change in substance and does not imply they will reverse the harmful changes they have already made. To make America safe from contagious diseases again requires replacing the magat public health officials with public health officials dedicated to protecting public health, and ready to use scientific knowledge to do so.
LLM influences on humans and LLMs [Richard Stallman's Political Notes]
LLM-generated communications are systematically different from human utterances. As LLM output influences people, and other LLMs, these tendencies could bring important changes in how people communicate, even with other people.
One change the LLM companies have brought about intentionally is the practice of referring to them as "artificial intelligence", which presumes they are more capable than they really are.
Recreational misogyny [Richard Stallman's Political Notes]
Feminists have denounced new forms of recreational misogyny for over 20 years, warning that they were designed to recruit more male supporters.
SUVs and potholes [Richard Stallman's Political Notes]
Drivers often choose SUVs to cope with potholes, but SUVs make the problem worse: they cause more wear to roads than cars do.
Netherlands rainwater storage [Richard Stallman's Political Notes]
People in the Netherlands are building tanks to store large amounts of rainwater in the event of too much rain. This can prevent flooding and the water can be used later when hotter summers cause drought.
King Donald's contagious madness [Richard Stallman's Political Notes]
The madness of King Donald is contagious to other countries' leaders.
Netanyahu [Richard Stallman's Political Notes]
*The Forever Spoiler: Netanyahu Has Been Blowing Up Diplomacy With Iran for Decades.*
Hospitals shutting down [Richard Stallman's Political Notes]
Last year's Big Bad Bill cut the funds for Americans' medical care. Around the country, hospitals and clinics are closing as a consequence.
Kushner corruption [Richard Stallman's Political Notes]
For the corrupter's family members, any official responsibility is a chance for corruption.
Magats used to blame President Biden for his son's business crimes, even though the president did not set him up for those. When their opponents commit a real crime, they jump on that, but always in a hypocritical way because they commit similar crimes without a qualm.
Incoming Rocky Mountains drought [Richard Stallman's Political Notes]
A very warm winter and spring has left the Rocky Mountains with little snow. That means drought and fire this summer.
War crimes [Richard Stallman's Political Notes]
*Is the US committing war crimes by targeting Iran’s civilian infrastructure?*
The answer seems to be "it depends but very likely yes."
US and Russian fascists for Orbán [Richard Stallman's Political Notes]
US government fascists join Russian government fascists in supporting wannabe tyrant Orbán's reelection in Hungary.
Betting and oil prices [Richard Stallman's Political Notes]
Commodity traders are turning to the betting site Polymarket for inside information about fluctuations in oil prices (including the secret government plans that will determine coming fluctuations).
Sue Higginson's phone calls monitored [Richard Stallman's Political Notes]
*The [New South Wales] Greens' justice spokesperson, Sue Higginson, alleged that her phone calls were "routinely" monitored despite it's being against the law for [prison thugs] to listen to calls between parliamentarians (such as Ms Higginson) and prisoners.*
Feral cats [Richard Stallman's Political Notes]
New Zealand plans to eradicate feral cats. This will help protect endangered native birds.
I support requiring people that keep pet cats to keep them indoors.
Urgent: Arrest deportation thugs breaking state laws [Richard Stallman's Political Notes]
US citizens: call on your governor and attorney general to arrest federal deportation thugs who break state laws.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Protect our voting rights [Richard Stallman's Political Notes]
US citizens: call on Congress to protect our voting rights — to reject the corrupter's takeover of our elections.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
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.
Urgent: Don't renew FISA section 702 [Richard Stallman's Political Notes]
US citizens: call on Congress not to renew FISA section 702 with its indirect authorization for snooping on Americans with no warrants.
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.
Urgent: Congress must investigate DOGE's Social Security Data breach [Richard Stallman's Political Notes]
US citizens: call on Take action: Congress must investigate DOGE’s Social Security data breach!
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
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.
Urgent: Deportation thugs near polling places [Richard Stallman's Political Notes]
US citizens: call on your state's Secretary of State not to allow deportation thugs to loiter near polling places in your state.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Meta buried "causal" evidence of social media harm [Richard Stallman's Political Notes]
*Meta buried "causal" evidence of social media harm, U.S. court filings allege.*
Bully's new Columbus statue [Richard Stallman's Political Notes]
*[The bully's new Columbus] statue isn't about preserving history – it's about asserting the power to rewrite it.*
The bully and his right-wing extremists aim to make rape and enslavement acceptable again.
*The question is no longer what Christopher Columbus did. Most Americans, if pressed, know enough. The question is whether that knowledge is allowed to matter, and who gets to decide when it does.*
Arab-American student demonstrated commitment to civil liberties [Richard Stallman's Political Notes]
An Arab-American student in Michigan demonstrated her commitment to American tradition of civil liberties by suing her school after a teacher punished her for refusing to stand during the pledge of allegiance.
She stood up for freedom of speech when it counted, and that for an American is true loyalty.
Pretend Intelligence used in surveys [Richard Stallman's Political Notes]
Some survey organizations trying to measure trends in society pay their participants. Many participants make more money by delegating the responses to Pretend Intelligence, and the Pretend Intelligence generates responses which don't reflect the actual public.
China has brought millions out of poverty [Richard Stallman's Political Notes]
*China has brought millions out of poverty. The US has not — by choice.*
Privatization of Britain's electric supply [Richard Stallman's Political Notes]
Britain's privatization of parts of the electric supply paralyzed its ability to upgrade standards for its electric grid by making many organizations that need to be convinced to agree and coordinate.
This shows another way that privatizing a public service can lead to gratuitous national problems.
America's billionaire oligarchs despise democracy [Richard Stallman's Political Notes]
America's billionaire oligarchs despise and reject democracy because they want to be able to live like lords. Some of them they say so, flat out.
Perhaps we should have No Kings, No Lords protests, to target them as well as the corrupter in chief.
Order to restrict mail-in ballots [Richard Stallman's Political Notes]
*[The saboteur in chief] signs order to restrict mail-in ballots in probably unconstitutional move.*
Anti-abortion crusaders [Richard Stallman's Political Notes]
Anti-abortion crusaders continue pushing to define a fetus as a human being and redefine abortion as murder.
Iran has large national minorities [Richard Stallman's Political Notes]
Iran has large national minorities, some of which seek independence. The regime knows that some of them would seize opportunities to rebel.
Bill to make medicines more expensive in US [Richard Stallman's Political Notes]
Big Pharma is pushing a bill to make medicines more expensive in the US.
Magats have incapacitated CDC [Richard Stallman's Political Notes]
The magats have incapacitated the CDC even for activities they don't say they aim to abolish — such as testing for diseases.
Untaxed wealth hidden offshore by richest 0.1% [Richard Stallman's Political Notes]
*Untaxed wealth hidden offshore by richest 0.1% surpasses entire wealth of the poorest half of humanity.*
This issue is one of the reasons I am not a supporter of cryptocurrency. We need to compel the very rich to pay their fair tax rate, and the fair tax rate for them must be larger than the fair tax rate for anyone less rich.
Civil rights groups sue over order to limit mail-in voting [Richard Stallman's Political Notes]
*Civil rights groups sue [US government] over [the voter suppressor's] order to limit mail-in voting.*
Fire fatality risk of CyberTruck [Richard Stallman's Political Notes]
The CyberTruck is 17 times more likely to have a fire fatality than a Ford Pinto was.
The Ford Pinto caused a national scandal because the manufacturer disregarded the known flaw, despite deaths it caused. Today, a worse scandal about the CyberTruck can barely get off the ground.
Perhaps that is because we are accustomed to businesses treating their customers with contempt, and the main news media have mostly been bought up by billionaires.
Iran plan to execute hundreds of prisoners [Richard Stallman's Political Notes]
Iran seems to plan to execute hundreds (or thousands?) of prisoners, many of them for protesting, and is hiding the news by threatening the relatives if they tell anyone.
Israel's death penalty law [Richard Stallman's Political Notes]
*Israel's death penalty law marks a new phase in its dehumanisation of Palestinians.*
Pretend Intelligence leading to deficiency in critical thinking [Richard Stallman's Political Notes]
Pretend Intelligence is leading secondary school students in England to be deficient in critical thinking, creativity, writing, even how to have a conversation, teachers report.
Global super-rich hidden 3.55tn from tax officials [Richard Stallman's Political Notes]
*Global super-rich may have hidden $3.55tn from tax officials, says Oxfam.*
Muskrat's Grok talked about "white genocide" [Richard Stallman's Political Notes]
For one day, the muskrat's chatbot, Grok, talked about (imaginary) "white genocide" in response to just about every query. One way this might have been implemented was by changing the primary prompt.
It is surely not a coincidence that, soon after, the muskrat began ranting about this nonexistence injustice.
Yifei Zhan: CommBank hardware MFA token [Planet Debian]
A while ago, CommBank started asking for MFA confirmation on its mobile app for every NetBank login on a browser. Previously, there was an option to use SMS for MFA, which isn’t as secure as I would like, but it was at least usable. Since I’m switching away from Android to Mobian and won’t be able to use the CommBank app for much longer, I applied for a physical NetCode token.
The letter that came with it has the wrong link for activation, the correct link is under NetBank -> Settings -> NetCode (under the Security section)
To apply for a physical token, call the NetBank team, mention you can’t use the app and need a physical NetCode token, and make sure they actually submit your request for a token. It took me 2 calls to get them to ship me a token. The hardware is free of charge but can only be applied for via phone call; unfortunately staff members at my local branch are unable to do anything in relation to NetBank. I was told privately by a CommBank employee that they are deprecating the hardware token in favor of the mobile app, I hope that won’t happen anytime soon, or that they add support for passkeys before they do. The last time I checked, the CommBank app was LineageOS-friendly, but I don’t want to configure WayDroid just to do online banking.
PayID, the thing that allows you to receive payment via a phone number or email address, is not compatible with the hardware token, and existing PayID will be silently deactivated if you use hardware token. This looks to be an artificial restriction; I don’t see why it has to be this way.
Regular CommBank mobile app sessions will also be de-activated once the hardware token is activated (I was told so but my sessions weren’t deactivated until I wiped my Android phone), and you won’t be able to sign into mobile app again until you manually disable the NetCode token.
Online banking has been getting progressively more invasive and anti-user over the last decade, from demanding remote attestation to requiring real time location data, each time locking certain features when those demands are not satisfied; all based on the flawed assumptions that everyone owns a phone running a certain flavor of iOS or Android, and has it ready all the time. I’m not sure what can be done to reverse this trend, but on the personal level I will use NetBank less and go back to cash.
Forgotten message from the past: LB_INITSTORAGE [The Old New Thing]
The classic Win32 list box control lets you preallocate memory in anticipation of adding a large number of items. The documentation recommends doing this for cases where you are adding more than 100 items to a list box.¹ What is being preallocated here?
The list box internally tracks the items as an array of
structures and a separate memory pool for strings. What
LB_INITSTORAGE does is tell the list box control
to preallocate memory for the two blocks: Make the first memory
block big enough that you can add at least wParam
items to the list box, and grow the second memory block so that it
can hold an additional lParam bytes of string
data.
The number of bytes required to hold a string includes a null
terminator, so a 12-character Unicode string requires (12 + 1)
× 2 = 26 bytes. Therefore, if you intend to have a total of
100 Unicode strings, each an average of 10 characters long, you
would recommend expanding the string memory pool by 100 × (10
+ 1) × 2 = 2200 bytes. The call to
LB_INITSTORAGE would be
SendMessage(hwndLB, LB_INITSTORAGE, 100, 100 * (10 + 1) * sizeof(TCHAR));
Preallocating the memory avoids quadratic memory allocation behavior when the buffers have to be grown each time a new item is added.²
¹ Personally, I think that 100 items is too many for a list box, from a usability standpoint. If you have that many items, I think an auto-suggest box is a better choice, so that people can just type a partial string to narrow the search rather than being forced to scroll through multiple pages to get to the item they want.
² Note however that quadratic behavior is not avoided completely. Internally, that array of structures is really a series of parallel arrays packed together, so adding an item requires that all the items in the second and subsequent parallel arrays be moved to make room for the new item in the first array. Another reason not to have a large number of items in your list box.
The post Forgotten message from the past: <CODE>LB_<WBR>INITSTORAGE</CODE> appeared first on The Old New Thing.
Friday Squid Blogging: New Giant Squid Video [Schneier on Security]
Pretty fantastic video from Japan of a giant squid eating another squid.
As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.
If I were running WordPress, my first priority would be to
get something exciting out that even non-WordPress users would talk
about. Then do it again. Ideally it would be something that
reporters would like, that they could see themselves using. As you
know, my Big Idea is give people choice of editors, for writers.
But I just thought of a technical thing they could do and might
make no sense, but how about running Claude skills. So anything a
Claude app can do a WordPress plugin can do. I just built my first
skill, and they can be Node.js apps. That's a pretty broad range of
features you can support inside WordPress. Also ask users to tell
you what would turn them on. Couldn't hurt, sometimes they have
ideas that you as a developer never would think of. I made a few
million dollars from an idea a user gave me once. Not kidding.
Keep Pushing: We Get 10 More Days to Reform Section 702 [Deeplinks]
In a dramatic middle-of-the-night stand off, a bipartisan set of lawmakers pushing for true reform and privacy protections for Americans bought us some more time to fight! They are holding out for, at a minimum, the requirement of an actual probable cause warrant for FBI access to information collected under the mass spying program known as 702.
A reauthorization with virtually no
changes was defeated because a core group of lawmakers held strong;
they know that people are hungry for real reform that protects the
privacy of our communications. We now have a 10-day
extension to continue to push Congress to pass a real reform
bill.
The Lawmakers rallied late Thursday night
to reject a
proposed
amendment that made
gestures at privacy protections, but it would not have improved on
the status quo and would have reauthorized Section 702 for five
more years to boot.
TELL congress: 702 Needs Reform
Section 702 is rife with problems, loopholes, and compliance issues that need fixing. The National Security Agency collects full conversations being conducted by and with targets overseas – including by and with Americans in the U.S. – and stores them in massive databases. The NSA then allows other agencies, including the Federal Bureau of Investigation, to access untold amounts of that information. In turn, the FBI takes a “finders keepers” approach to this data: they reason that since it's already collected under one law, it’s OK for them to see it.
Under current practice, the FBI can query and even read the U.S. side of that communication without a warrant. What’s more, victims of this surveillance won’t even know and have very few ways of finding out that their communications have been surveilled. EFF and other civil liberties advocates have been trying for years to know when data collected through Section 702 is used as evidence against them.
Reforming Section 702 is even more urgent because of revelations hinted at by Senator Ron Wyden’s public statements concerning a “secret interpretation” of the law that enables surveillance of Americans, and a public “Dear Colleague” letter he sent to fellow Senators about FBI abuse of Section 702.
That’s right—the way the government conducts mass surveillance is so secret and unaccountable even the way they interpret the law is classified.
“In many cases these will be law-abiding Americans having perfectly legitimate, often sensitive, conversations,” Wyden wrote. “These Americans could include journalists, foreign aid workers, people with family members overseas - even women trying to get abortion medication from an overseas provider. Congress has an obligation to protect our country from foreign threats and protect the rights of these and other Americans.”
We have 10 days to make it clear to Congress: 702 needs real reforms. Not a blanket reauthorization. Not lip service to change. Real reform.
TELL congress: 702 Needs Reform
#Fridabe sponsored by Once Upon A Galaxy! [Penny Arcade]
I've taught him everything I know about Once Upon A Galaxy, and now it's time for Dabe to travel into that wilderness alone. Well, not entirely alone. You should go hang out! Day One of this month's tournament just opened up. I don't compete in tournaments generally, I find them scary, but I'm excited to explore this new part of myself.
(CW)TB
The Big Idea: Mallory Kass [Whatever]

The words “stress-free” and “wedding” aren’t seen in a sentence together unless the word “not” preludes them. The copious amount of stress and issues surrounding weddings fascinated author Mallory Kass, and she began to ask the question of why people do this to themselves. In her exploration of such answers, she wrote her newest rom-com novel, Save the Date. RSVP your invite to her Big Idea, and bring a plus one.
MALLORY KASS:
Why do weddings cause temporary insanity in otherwise rational people? Take a look around you. See that woman reading Middlemarch on the subway, the one who just smilingly offered her seat to an elderly man? In ten minutes, she’s going to text her sister, “Maddie’s dress is giving whore-of-honor instead of maid-of-honor.” Then there’s your affable co-worker, Brad, famous for his pivot tables. Over the weekend, he told his daughter that if he can’t invite all nineteen members of his pickleball league, he’s not paying for her wedding.
What turns these celebrations of love into referendums on our taste, friendships, finances, and even our bodies? That’s one of the questions I wanted to explore in Save The Date, a romantic comedy-of-manners about a lavish wedding in Maine that goes very, very wrong. Because it’s not just the bride and groom whose emotions go haywire in the lead up to marital bliss. Guests participate in their own small but significant melodramas: they navigate the fraught politics of the plus-one, take desperate measures to squeeze into a special outfit, and scour social media to see if one’s ex might show up with a date.
I’ve had plenty of opportunities to ponder these questions. I attended more than twenty weddings solo before I met my husband. There were times when I was literally the only single guest. Once, my friend’s very kind, very drunk mother shouted to a large crowd, “Who’s going to walk Mallory back to the hotel? She’s ALL ALONE!”
I generally enjoyed myself at these events, especially while dancing with friends, shouting the lyrics to cheesy pop hits from our childhood. But at some point, the band would inevitably transition to a slow song and everyone would drift towards their dates like magnets, leaving me to scurry off the dance floor. That’s when I’d refill my drink and take refuge in a shadowy corner where I could observe the spectacle unnoticed. I’d clock the bride’s single sister’s slightly-too wide-smile and slightly-too-short dress. I’d eavesdrop on conversations criticizing the décor, the food, and the bridesmaids’ botched Botox. I’d note the panic on men’s faces as their girlfriends pronounced what they’d do differently at their receptions. And I’d wonder why weddings push everything to the limit, from our relationships to our budgets—and in the case of my breakdancing cousin-in-law—our kneecaps.
And so, Save the Date was born—the product of my champagne-induced melancholia, fascination with social dynamics, and worshipful reverence for movies like My Best Friend’s Wedding, Father of the Bride, and Four Weddings and a Funeral. It follows the bride, Marigold, who’s not sure if she’s marrying Jonathan for love or to prove that she’s loveable; Natalie, her maid-of-honor, who’s terrified to admit to herself—let alone anyone else—that she still pines for Jonathan, and Marigold’s older sister Olivia, who’s always cleaned up Marigold’s messes and may have finally had enough this time.
The central challenge was making each woman’s observations feel honest and specific to them. I knew if I wasn’t careful, my complicated feelings about weddings would come through at a higher volume than those of my characters. I had to ensure my social anxiety didn’t seep into “It Girl” Marigold, or that my thoughts on the excesses of late-stage capitalism didn’t bias Olivia the corporate lawyer. (I channeled those into Olivia’s love interest, Zack.) And I had to let poor Natalie make mistakes that I (hope) I’d never make myself.
Almost as difficult was painting an entertaining yet passably realistic portrait of Marigold’s rarefied world, one full of yachts I’ve never sailed on and private jets I’ve never boarded. Like Natalie, though, I spent hours tutoring the children of Manhattan’s .00001 percent in apartment buildings with heavier security than many embassies, and townhouses with multiple Picassos. I’ve witnessed how that level of wealth warps anyone’s conception of reality, which made it the perfect backdrop for the disastrous wedding that brings out the very best and the very worst in my characters.
I’m not sure Save the Date fully answers the questions that inspired it, but I had a lot of fun examining them. And I hope you have a blast reading it whether you’re coupled-up, navigating the perils of online dating, stuck in a situationship, or relishing your singlehood. I’ve been there, and I’m raising a glass to you in solidarity!
Save The Date: Amazon|Barnes and Noble|Bookshop|The Ripped Bodice
Author’s socials: Instagram
[$] A more efficient implementation of Shor's algorithm [LWN.net]
Shor's algorithm is the main practical example of an algorithm that runs more quickly on a quantum computer than a classical computer — at least in theory. Shor's algorithm allows large numbers to be factored into their component prime factors quickly. In reality, existing quantum computers do not have nearly enough memory to factor interesting numbers using Shor's algorithm, despite decades of research. A new paper provides a major step in that direction, however. While still impractical on today's quantum computers, the recent discovery cuts the amount of memory needed to attack 256-bit elliptic-curve cryptography by a factor of 20. More interesting, however, is that the researchers chose to publish a zero-knowledge proof demonstrating that they know a quantum circuit that shows these improvements, rather than publishing the actual knowledge of how to do it.
Scott Hanson who works with me on all my projects is doing his WordPress development using Codex. Here's a plug-in they wrote. Loving this. So we're all turning this corner. There are so many things I want to do, but keep hitting bumps. I recover and come back, so far. I go slowly. The bot wants to run at a breakneck pace, which I know from tons of experience gets you a worthless result. One of the byproducts of my current project is a /opml skill that reads and writes .opml files in a way that's compatible with all the apps that use OPML. Pretty sure of that since I published the first OPML file in 2000 or so. Not sure how I'm going to release the skill, but I want everyone to have it.
[$] The 7.0 scheduler regression that wasn't [LWN.net]
One of the more significant changes in the 7.0 kernel release is to use the lazy-preemption mode by default in the CPU scheduler. The scheduler developers have wanted to reduce the number of preemption modes for years, and lazy preemption looks like a step toward that goal. But then there came this report from Salvatore Dipietro that lazy preemption caused a 50% performance regression on a PostgreSQL benchmark. Investigation showed that the situation is not actually so grave, but the episode highlights just how sensitive some workloads can be to configuration changes; there may be surprises in store for other users as well.
Security updates for Friday [LWN.net]
Security updates have been issued by AlmaLinux (.NET 8.0, .NET 9.0, freerdp, libarchive, and thunderbird), Debian (chromium, openssh, and thunderbird), Fedora (aurorae, bluedevil, breeze-gtk, buildah, cockpit, extra-cmake-modules, flatpak-kcm, grub2-breeze-theme, kactivitymanagerd, kcm_wacomtablet, kde-cli-tools, kde-gtk-config, kdecoration, kdeplasma-addons, kf6, kf6-attica, kf6-baloo, kf6-bluez-qt, kf6-breeze-icons, kf6-frameworkintegration, kf6-kapidox, kf6-karchive, kf6-kauth, kf6-kbookmarks, kf6-kcalendarcore, kf6-kcmutils, kf6-kcodecs, kf6-kcolorscheme, kf6-kcompletion, kf6-kconfig, kf6-kconfigwidgets, kf6-kcontacts, kf6-kcoreaddons, kf6-kcrash, kf6-kdav, kf6-kdbusaddons, kf6-kdeclarative, kf6-kded, kf6-kdesu, kf6-kdnssd, kf6-kdoctools, kf6-kfilemetadata, kf6-kglobalaccel, kf6-kguiaddons, kf6-kholidays, kf6-ki18n, kf6-kiconthemes, kf6-kidletime, kf6-kimageformats, kf6-kio, kf6-kirigami, kf6-kitemmodels, kf6-kitemviews, kf6-kjobwidgets, kf6-knewstuff, kf6-knotifications, kf6-knotifyconfig, kf6-kpackage, kf6-kparts, kf6-kpeople, kf6-kplotting, kf6-kpty, kf6-kquickcharts, kf6-krunner, kf6-kservice, kf6-kstatusnotifieritem, kf6-ksvg, kf6-ktexteditor, kf6-ktexttemplate, kf6-ktextwidgets, kf6-kunitconversion, kf6-kuserfeedback, kf6-kwallet, kf6-kwidgetsaddons, kf6-kwindowsystem, kf6-kxmlgui, kf6-modemmanager-qt, kf6-networkmanager-qt, kf6-prison, kf6-purpose, kf6-qqc2-desktop-style, kf6-solid, kf6-sonnet, kf6-syndication, kf6-syntax-highlighting, kf6-threadweaver, kgamma, kglobalacceld, kinfocenter, kmenuedit, knighttime, kpipewire, krdp, kscreen, kscreenlocker, ksshaskpass, ksystemstats, kwayland, kwayland-integration, kwin, kwin-x11, kwrited, layer-shell-qt, libexif, libkscreen, libksysguard, libplasma, nix, ocean-sound-theme, oxygen-sounds, pam-kwallet, plasma-activities, plasma-activities-stats, plasma-breeze, plasma-browser-integration, plasma-desktop, plasma-dialer, plasma-discover, plasma-disks, plasma-drkonqi, plasma-firewall, plasma-integration, plasma-keyboard, plasma-login-manager, plasma-milou, plasma-mobile, plasma-nano, plasma-nm, plasma-oxygen, plasma-pa, plasma-print-manager, plasma-sdk, plasma-setup, plasma-systemmonitor, plasma-systemsettings, plasma-thunderbolt, plasma-vault, plasma-welcome, plasma-workspace, plasma-workspace-wallpapers, plasma-workspace-x11, plasma5support, plymouth-kcm, plymouth-theme-breeze, podman, polkit-kde, powerdevil, qqc2-breeze-style, sddm-kcm, skopeo, spacebar, spectacle, thunderbird, and xdg-desktop-portal-kde), Mageia (cockpit-338), Oracle (capstone, cockpit, firefox, fontforge, freerdp, golang-github-openprinting-ipp-usb, kernel, nghttp2, nodejs:20, nodejs:24, openexr, and squid), Red Hat (gnutls, libarchive, libpng, libpng12, libpng15, libtiff, libvpx, libxslt, multiple packages, python, python3, python3.11, python3.12, and python3.9), Slackware (libxml2), SUSE (apache-pdfbox, azure-storage-azcopy, corosync, cups, freerdp, iproute2, libsdb2_4_2, libtpms, NetworkManager, openssl-1_1, ovmf, plexus-utils, python, python-CairoSVG, python-jwcrypto, python-PyJWT, python-pyOpenSSL, python-urllib3, python3, python314, rust1.93, shim, smc-tools, terraform-provider-local, terraform-provider-random, terraform-provider-tls, thunderbird, tiff, util-linux, and vim), and Ubuntu (libowasp-esapi-java, linux, linux-aws, linux-aws-5.15, linux-gcp, linux-gke, linux-gkeop, linux-lowlatency, linux-lowlatency-hwe-5.15, linux-nvidia, linux-oracle, linux, linux-aws, linux-aws-6.8, linux-gcp, linux-gke, linux-gkeop, linux-ibm, linux-lowlatency, linux-lowlatency-hwe-6.8, linux, linux-realtime, linux-aws-fips, linux-fips, linux-gcp-fips, linux-fips, linux-gcp-fips, linux-gcp, linux-gcp-6.17, linux-hwe-5.15, linux-intel-iot-realtime, linux-realtime, linux-nvidia, linux-nvidia-6.8, linux-nvidia-lowlatency, linux-nvidia-tegra, linux-nvidia-tegra, linux-nvidia-tegra-igx, linux-realtime, linux-realtime-6.8, linux-realtime-6.17, ofono, and ruby-rack).
Russell Coker: Home Battery [Planet Debian]
On the 19th of March I got a home battery system installed. The government has a rebate scheme so it had a list price of about $22k for a 40kWh setup and cost me about $12k. It seems that 40KWh is the minimum usable size for the amount of electricity I use, I have 84 cores running BOINC when they have nothing better to do which is 585W of TDP according to Intel. While the CPUs are certainly using less than the maximum TDP (both due to design safety limits and the fact that I have disabled hyper-threading on all systems due to it providing minimal benefits and potential security issues) given some power usage by cooling fans and some inefficiency in PSUs I think that assuming that 585W is accounted for 24*7 by CPUs is reasonable. So my home draws between 800W and 1KW when no-one is home and with an electric car and all electric cooking a reasonable amount of electricity can be used.
My bills prior to the battery installation were around $200/month which was based on charging my car only during sunny times as my electricity provider (Amber Electric) has variable rates based on wholesale prices. Also the feed in rates if my solar panels produce too much electricity in sunny times often go negative so if I don’t use enough electricity. I haven’t had the electric car long enough to find out what the bills might be in winter without a home battery.
Before getting the battery my daily bills according to the Amber app were usually between $5 and $10. After getting it the daily bills have almost always been below $5. The only day where it’s been over $5 since the battery installation was when electricity was cheap and I fully charged the home battery and my car which used 50KWh in one day and cost $7.87 which is 16 cents per KWh. 16 cents isn’t the cheapest price (sometimes it gets as low as 10 cents) but is fairly cheap, sometimes even in the cheap parts of the day it doesn’t get that low (the cheapest price on the day I started writing this was 20 cents).
So it looks like this may save me $100 per month, if so there will be a 10% annual return on investment on the $12K I spent. This makes it a good investment, better than repaying a mortgage (which is generally under 6%) and almost as good as the long term results of index tracker funds. However if it cost $22K (the full price without subsidy) then it would still be ok but wouldn’t be a great investment. The government subsidised batteries because the huge amount of power generated by rooftop solar systems was greater than the grid could use during the day in summer and batteries are needed to use that power when it’s dark.
The battery system is from Fox ESS and the FoxCloud 2.0 Android app is a bit lacking in functionality. It has a timer for mode setting with options “Self-use” (not clearly explained), “Feed-in Priority” (not explained but testing shows feeding everything in to the grid), “Back Up”, “Forced Charge”, and “Forced Discharge”. Currently I have “Forced Charge” setup for most sunny 5 hours of the day for a maximum charge power of 5KW. I did that because about 25KW/day is what I need to cover everything and while the system can do almost 10KW that would charge the battery fully in a few hours and then electricity would be exported to the grid which would at best pay me almost nothing and at worst bill me for supplying electricity when they don’t want it. There doesn’t seem to be a “never put locally generated power into the grid unless the battery is full” option. The force charge mode allows stopping at a certain percentage, but when that is reached there is no fallback to another option. It would be nice if the people who designed the configuration could take as a baseline assumption that the macro programming in office suites and functions in spreadsheets are things that regular people are capable of using when designing the configuration options. I don’t think we need a Turing complete programming language in the app to control batteries (although I would use it if there was one), but I think we need clauses like “if battery is X% full then end this section”.
There is no option to say “force charge until 100%” or “force charge for the next X minutes” as a one-off thing. If I came home in the afternoon with my car below 50% battery and a plan to do a lot of driving the next day then I’d want to force charge it immediately to allow charging the car overnight. But I can’t do that without entering a “schedule”. For Unix people imagine having to do everything via a cron job and no option to run something directly from the command-line.
It’s a little annoying that they appear to have spent more development time on animations for the app than some of what should be core functionality.
Amber has an option to allow my battery to be managed by them based on wholesale pries but I haven’t done that as the feed-in prices are very low. So I just charge my battery when electricity is cheap and use it for the rest of the day. There is usually a factor of 2 or more price difference between the middle of the day and night time so that saves money. It also means I don’t have to go out of my way to try and charge my car in the middle of the day. There is some energy lost in charging and discharging the batteries but it’s not a lot. I configured the system to force charge for the 5 sunniest hours every day for 5KW as that’s enough to keep it charged overnight and 5KW is greater than the amount of solar electricity produced on my house since I’ve been monitoring it so that forces it to all be used for the battery. In summer I might have to change that to 6KW for the sunniest 2 or 3 hours and then 4KW or 5KW surrounding that which will be a pain to manage.
Instead of charging the car every day during sunny times I charge it once or twice a week, I have a 3.3KW charger and the car has a 40KWh battery so usually it takes me less than 10 hours to fully charge it and I get at least 5 hours of good sunlight in the process.
There are people hacking on these devices which is interesting to get direct control from computers [1], and apparently not banned from the official community for doing so. I’m not enthusiastic enough to do this, I’ve got plenty of other free software things to work on. But it’s good that others are doing so.
Trial by Fire: Crisis Engineering [Radar]
The following article originally appeared on Jennifer Pahlka’s Eating Policy website and is being republished here with the author’s permission.
I read Norman Maclean’s Young Men and Fire when I was a teenager, I think, so it’s been many years, but I still remember its turning point vividly. It’s set in 1949 in Montana, at the Gates of the Mountains Wilderness, about an hour north of Helena. A fire is burning, and the Forest Service sends out their smokejumpers to fight it. But the fire changes direction without warning, and a group of smokejumpers working in the Mann Gulch find themselves trapped, facing certain death. Instead of running, the foreman, Wag Dodge, pulls out matches and does the unthinkable: He lights a fire.
Today we know what he was doing. The escape fire consumed the fuel around him, allowing the main fire to pass over him and a few of his colleagues. But in 1949, the families of the 13 other smokejumpers who died accused Wag of causing their deaths. To them, what he had done made no sense.
I love that Marina Nitze, Matthew Weaver, and Mikey Dickerson chose this story as a framing device for their new book, Crisis Engineering: Time-Tested Tools for Turning Chaos Into Clarity, out now. Not just because it brought back the memory of a book that I once loved, but because Maclean’s obsessive investigation of what had happened back then (he wrote the book years after the incident) seemed to me almost as heroic as the bravery of the smokejumpers. And indeed, his insistence on making sense of what happened has probably saved lives. Escape fires are now formally recognized and taught as a last resort tactic when training new firefighters.
The Dodge escape fire wouldn’t seem to have much to do with Three Mile Island or healthcare.gov or the pandemic unemployment insurance backlogs, but the authors use it to make a point about how action and understanding interact in a crisis. One key is exactly what Maclean himself did so well: sensemaking. In a crisis like Mann Gulch, sensemaking disintegrates: a broken radio, wind so strong communication is impossible, fire whose behavior violates well-tested assumptions, and a team scattered. You don’t achieve sensemaking by staring at a map; you achieve it by acting and observing results. Wag Dodge didn’t understand fire behavior well enough to explain the escape fire in advance. But his actions created the understanding itself—retrospectively, as all real sensemaking is.
The book’s key claim is that crises are opportunities, and the authors leverage Daniel Kahneman’s Thinking, Fast and Slow to explain why crises are the only real windows for organizational change—and why everything else, the incentives, the logical arguments, the reorganizations, mostly doesn’t work. Most organizations, most of the time, run on autopilot. People habituate to their environment, rationalize away small surprises, and build stable stories about how things work. A crisis breaks this. When surprise accumulates faster than the brain’s “surprise-removing machinery” can rationalize it away, the whole apparatus jams, and organizations become, briefly, reprogrammable.
An institution resolves a crisis in one of three ways, according to the authors. It makes durable deliberate change, it dies, or, most commonly, it rationalizes the failure into an accepted new normal. “Most large organizations contain programs and departments that passively accept abject failure: infinitely long backlogs, hospitals that kill patients, devastating school closures that do little to affect a pandemic. These are fossils of past crises where the organization failed to adapt.”
Too many of our public institutions have failed to adapt, and the idea that they might be reprogrammable at all is a bit radical. We live in an era when too many people have given up on them, willing to burn them to the ground rather than renovate them. If crises represent the chance for true transformation, then we’d better get a lot better at using them for that. This is explicitly why Crisis Engineering exists, and it’s a detailed, practical book—the theory and framing devices are well used, but there’s a ton of pragmatic substance here you’ll be grateful for when the moment comes.
I remember when I was working in the White House and frustrated by the slow pace of progress. My UK mentor Mike Bracken told me: “Hold on, you just need a crisis. You Americans only ever change in crisis.” Boom. About two months later, healthcare.gov had its inauspicious start. And he was right. Change followed. Not all the change we needed, but a start. Marina, Weaver, and Mikey are three of the people who drove that change. I got to work with them again the first summer of the pandemic on California’s unemployment insurance claims backlog. I’m not a crisis engineer, but their strategies and tactics have deeply influenced how I think about the work I do and how I think we’re going to get from the institutions we have today to the ones we need.
We may be living in an era when too many people have given up on institutions, but we are also likely entering an era of crisis, and even polycrisis. This makes for uncomfortable math, but also drives home the need for a new generation of crisis engineers.
When I first read about Mann Gulch, so many years ago, I remember being in awe of the ingenuity and courage it took to start Wag Dodge’s escape fire. Today I think a lot about that pattern: the controlled burns that reduce the risk of megafires, the little earthquakes that take the pressure off faults under great tension, the managed crises that, if we’re skilled enough to use them, keep our institutions from the kind of collapse that comes when nothing has been allowed to give for too long. Dodge didn’t burn things down. He burned a path through. We’re going to have to get good at that.
Last Night in Decatur [Whatever]


A couple of people showed up to see Brandon Sanderson and me have a chat.
Let’s be clear these are mostly Brandon’s folks; I was a value-add here. A very nice value add to be sure! But definitely the support act. Brandon and I have been pals for a couple of decades now and he used the event as an excuse to for us to catch up. I was happy to do it, because a) I wanted to catch up too, and b) I knew our chat would be a lot of fun. And it was a lot of fun, at least from my point of view, and it was especially delightful to see how Brandon connects with his fans. There’s a lot of mutual appreciation going on there.
Now Brandon’s off to JordanCon and I am off to Los Angeles, for the LA Times Festival of Books and then meetings next week. I’m glad we got the chance to catch up, in front of an audience and also away from it. Life keeps us all busy, clearly. You take your moments where you can get them.
— JS
League of Canadian Superheroes – Issue 5 – 10 [Comics Archive - Spinnyverse]
The post League of Canadian Superheroes – Issue 5 – 10 appeared first on Spinnyverse.
Thalamus 0.9.18 released [Planet GNU]
Dear GNU Health community
We are happy to announce the release of Thalamus 0.9.18. Thalamus
is the message and authentication server of the GNU Health
Federation.
In this release, we have migrated to Poetry packaging system and
updated the documentation (https://docs.gnuh ...
alth.org/thalamus)
You can get Thalamus from GNU.org and the Python Package Index,
PyPi
Happy hacking!
Luis
Error'd: Having a Beastly Time [The Daily WTF]
It's time again for a reader special, and once again it's all The Beast In Black (there must be a story to that nick, no?).
"MySQL is not better than your SQL," he pontificated, "especially when it comes to the Workbench Migration Wizard"
"Sadly," says he, "Not even gmail/chromium either."
"Updated software is available, but there are no updates!" he puzzled. "Clicking Install Now just throws that dialog right back in my face. I'm re-cursing." Zero, one, does it really make a difference?
"Questions" The Beast in Black "I do, in fact, have a question..."
One of the foundational guides to my [lyle, not bib] engineering
career was John Bentley's Programming Pearls. These are
not those.
"Veni, vidi: vc. No pearls of wisdom here, just litter." says
The Beast.
Pontiff-ication – DORK TOWER 15.04.26 [Dork Tower]
Most DORK TOWER strips are now available as signed,
high-quality prints, from just $25! CLICK
HERE to find out more!
HEY! Want to help keep DORK TOWER going? Then consider joining the DORK TOWER Patreon and ENLIST IN THE ARMY OF DORKNESS TODAY! (We have COOKIES!) (And SWAG!) (And GRATITUDE!)
Pluralistic: Tiktokification shall set us free (17 Apr 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Mark Zuckerberg has a problem with your friends: they're the reason you signed up to use his platform, but they stubbornly refuse to organize your socialization to "maximize engagement." Every time you and your friends wrap up a social interaction and log off, Zuckerberg loses revenue.
After all, by definition, you and your friends have a lot of shared context. You probably feel mostly the same way about most things. You probably mostly consume the same kind of media. You probably mostly consume the same kinds of news. You and your friends make each other's lives better in lots of ways, but typically not by surprising one another. On a typical day, no friend of yours is going to absolutely floor you with a novel thought or finding that sparks hours of furious conversation and argumentation.
And speaking of argumentation: you and your friends probably don't argue that much – I mean, sure, you'll have "friendly disagreements" (again, by definition), but if there's a friend who sparks furious, frustrating, irresistible feuds that drag on and on, chances are that person won't be your friend anymore.
Facebook experienced sustained, meteoric growth by letting people connect with their friends, but Zuckerberg quickly came to understand that his path to revenue maximization ran through nonconsensually cramming strangers' posts into your eyeballs, in the hopes that you would lose yourself in long, pointless arguments.
But that, too, hit a limit. Most of us don't like having our limbic systems tormented by strangers. As anyone who is sick to the back teeth of just hearing the word "Trump" can attest, living in a trollocracy is exhausting.
Enter Tiktok. Tiktok found a way to connect you to strangers who don't make you angry. By offering performers money if they produced media that you "engaged" with, Tiktok offloaded the work of convincing you to conduct your online activities in a way that maximized opportunities to show you an ad onto an army of global theater kids who would spend every hour that god sent trying to figure out how to keep you looking at Tiktok.
This was hugely successful – so successful, in fact, that Tiktok was able to cheat, overriding its own algorithmic guesses about which of its billion cable-access television channels you'd stare at the longest with a "heating tool" that lets the company trick some of those theater kids into thinking that Tiktok was actually more suited to them than other platforms:
https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys
For zuckermuskian social media bosses, Tiktok became an object of fierce envy. Here was the ultimate Tom Sawyer robo-fence-painter, a self-licking ice-cream cone that motivated people to convince each other to make money for you. Facebook, Instagram and Twitter took a hard pivot away from showing you the things that the people you loved had to say, in favor of showing you short videos of people whose parents didn't give them enough affection in their childhood, desperately shoving lemons up their noses in a bid to win your approval (and a revshare split with the platforms).
It worked. Sorta. Thing is, some of those "content creators" are actually very good, and none of them appreciate being jerked around. They quite rightly see their reason for being on the platforms as improving their own lives, not the bottom line of the platforms' owners and executives. They may be more "engaging" than your friends, but they're also a lot mouthier and feel entitled to a say in how the platform operates.
What's a billionaire solipsist to do? Obviously, the answer is "AI creators." An "AI creator" is like a "creator" in that it works to maximize your engagement with the platform – and thus the number of ads that can be crammed into your face-holes – but, unlike a "creator," it makes no demands upon the platform and exists solely to serve the platform's shareholders and executives. It's the perfect realization of the solipsist fantasy of a world without people:
https://pluralistic.net/2026/01/05/fisher-price-steering-wheel/#billionaire-solipsism
But there's a problem with this plan: your friends are not a liability for a platform. Your friends are the platforms' single most important asset. Your friends are why the platforms are so "sticky." The platforms don't "hack your dopamine loops" – they just take your friends hostage, and even though you love your friends, they are a monumental pain in the ass, and if you can't even agree on what board-game you're going to play this weekend, how are you going to agree when it's time to leave Facebook, and where to go next?
https://pluralistic.net/2023/01/08/watch-the-surpluses/#exogenous-shocks
So long as you love your friends more than you hate Zuckerberg or Musk, you will remain stuck to their platforms. The platform bosses know this, and they inflict pain on you that is titrated to be just below the threshold where you hate the platforms more than you love your friends.
But as much as the platform bosses rely on your love of your friends, they still view your friends as liabilities, thanks to those friends' unreasonable insistence on structuring their relationship with you to maximize their own satisfaction, rather than how much time you spend looking at ads. So the platforms are deliberately disconnecting you from your friends by minimizing the fraction of your feed that is given over to posts from people you follow, and replacing those friends with a succession of ever-more fungible posters: trolls, creators, and chatbots.
The key word here is fungible. A feed composed of things posted by people you have a personal connection to is non-fungible: it cannot be swapped for a feed of things posted by strangers. Your friends fulfill a very specific purpose in your life that strangers – even extremely cool strangers – cannot match.
On the other hand: one feed of algorithmically selected, entertaining amateur dramatics is broadly equivalent to any other feed of algorithmically selected amateur dramatics. That goes double for feeds whose performers are "multi-homing" on more than one platform – whether you see the extremely charming and interesting Vlog Brothers in a Youtube feed, a Tiktok feed or an Insta feed makes no difference (to you – but it matters a lot to the platform bosses). That goes quintuple for feeds composed of AI slop, which is literally the most interchangeable video that modern science is capable of producing.
All of which is to say: the platforms are deliberately feeding their most important commercial assets into a shredder, in a fit of pique over your friends' unwillingness to act like chatbots. Every day and in every way, the platforms are making it easier to leave them for some rival's service, chasing the billionaire solipsist's dream of a world without people:
https://pluralistic.net/2022/02/17/live-by-the-swordlive-by-the-sword/#unfriending-tom

Here comes the sun: New bill would let New Yorkers hang solar panels from windows https://gothamist.com/news/here-comes-the-sun-new-bill-would-let-new-yorkers-hang-solar-panels-from-windows
The OTW is Recruiting for Legal Committee Paralegals, Legal Committee Trademark Specialists, and Policy & Abuse Volunteers https://www.transformativeworks.org/the-otw-is-recruiting-for-legal-committee-paralegals-legal-committee-trademark-specialists-and-policy-abuse-volunteers/
Tech Giants and Giant Slayers: The case for Digital Sovereignty and the Digital Commons https://www.openrightsgroup.org/publications/tech-giants-and-giant-slayers-the-case-for-digital-sovereignty-and-the-digital-commons/
What We’re Reading https://link.newyorker.com/view/5be9ea0f3f92a404690229b0qwzpk.245v/8abef04b
#25yrsago Leon Trotsky, B2B visionary https://web.archive.org/web/20020211212222/http://www.marxists.org/archive/trotsky/works/1935/1935-ame.htm
#20yrsago What would a BBC “public service game” look like? https://web.archive.org/web/20060417123908/http://crystaltips.typepad.com/wonderland/2006/04/on_public_servi.html
#15yrsago New Zealand’s 3-strikes rule can go into effect in September https://legislation.govt.nz/bill/government/2010/119/en/latest/#DLM3331800
#15yrsago Lawsuit: DRM spied on me, gathered my personal info, sent it to copyright enforcers who called me with $150,000 legal threat https://www.techdirt.com/2011/04/14/drm-accused-sending-personal-info-to-help-with-licensing-shakedown/
#10yrsago Edward Snowden provides vocals on a beautiful new Jean-Michel Jarre composition https://web.archive.org/web/20190415045927/https://www.rollingstone.com/music/music-news/edward-snowdens-new-job-electronic-music-vocalist-184650/
#10yrsago Uber and Lyft don’t cover their cost of capital and rely on desperate workers https://www.ianwelsh.net/the-market-fairy-will-not-solve-the-problems-of-uber-and-lyft/?
#10yrsago Treescrapers are bullshit https://99percentinvisible.org/article/renderings-vs-reality-rise-tree-covered-skyscrapers/
#10yrsago Before and After Mexico: a Bruce Sterling story about the eco-pocalypse https://bruces.medium.com/before-and-after-mexico-f3371c346c8a#.33e9poqnx
#10yrsago Barack Obama: Taking money from 1 percenters compromised my politics https://web.archive.org/web/20160415201709/https://theintercept.com/2016/04/15/barack-obama-never-said-money-wasnt-corrupting-in-fact-he-said-the-opposite/
#1yrago Tesla accused of hacking odometers to weasel out of warranty repairs https://pluralistic.net/2025/04/15/musklemons/#more-like-edison-amirite

San Francisco: 2026 Berkeley Spring Forum on M&A and the
Boardroom, Apr 23
https://www.theberkeleyforum.com/#agenda
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
NYC: Enshittification at Commonweal Ventures, Apr 29
https://luma.com/ssgfvqz8
NYC: Techidemic with Sarah Jeong, Tochi Onyibuchi and Alia
Dastagir (PEN World Voices), Apr 30
https://worldvoices.pen.org/event/techidemic/
Barcelona: Internet no tiene que ser un vertedero (Global
Digital Rights Forum), May 13
https://encuentroderechosdigitales.com/en/
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI (The Strand),
Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
The internet is getting worse (CBC The National)
https://youtu.be/dCVUCdg3Uqc?si=FMcA0EI_Mi13Lw-P
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
Launch for Cindy's Cohn's "Privacy's Defender" (City Lights)
https://www.youtube.com/watch?v=WuVCm2PUalU
Chicken Mating Harnesses (This Week in Tech)
https://twit.tv/shows/this-week-in-tech/episodes/1074
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"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
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. Third draft completed. Submitted to editor.
"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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
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
Mythos and Cybersecurity [Schneier on Security]
Last week, Anthropic pulled back the curtain on Claude Mythos Preview, an AI model so capable at finding and exploiting software vulnerabilities that the company decided it was too dangerous to release to the public. Instead, access has been restricted to roughly 50 organizations—Microsoft, Apple, Amazon Web Services, CrowdStrike and other vendors of critical infrastructure—under an initiative called Project Glasswing.
The announcement was accompanied by a barrage of hair-raising anecdotes: thousands of vulnerabilities uncovered across every major operating system and browser, including a 27-year-old bug in OpenBSD, a 16-year-old flaw in FFmpeg. Mythos was able to weaponize a set of vulnerabilities it found in the Firefox browser into 181 usable attacks; Anthropic’s previous flagship model could only achieve two.
This is, in many respects, exactly the kind of responsible disclosure that security researchers have long urged. And yet the public has been given remarkably little with which to evaluate Anthropic’s decision. We have been shown a highlight reel of spectacular successes. However, we can’t tell if we have a blockbuster until they let us see the whole movie.
For example, we don’t know how many times Mythos mistakenly flagged code as vulnerable. Anthropic said security contractors agreed with the AI’s severity rating 198 times, with an 89 per cent severity agreement. That’s impressive, but incomplete. Independent researchers examining similar models have found that AI that detects nearly every real bug also hallucinates plausible-sounding vulnerabilities in patched, correct code.
This matters. A model that autonomously finds and exploits hundreds of vulnerabilities with inhuman precision is a game changer, but a model that generates thousands of false alarms and non-working attacks still needs skilled and knowledgeable humans. Without knowing the rate of false alarms in Mythos’s unfiltered output, we cannot tell whether the examples showcased are representative.
There is a second, subtler problem. Large language models, including Mythos, perform best on inputs that resemble what they were trained on: widely used open-source projects, major browsers, the Linux kernel and popular web frameworks. Concentrating early access among the largest vendors of precisely this software is sensible; it lets them patch first, before adversaries catch up.
But the inverse is also true. Software outside the training distribution—industrial control systems, medical device firmware, bespoke financial infrastructure, regional banking software, older embedded systems—is exactly where out-of-the-box Mythos is likely least able to find or exploit bugs.
However, a sufficiently motivated attacker with domain expertise in one of these fields could nevertheless wield Mythos’s advanced reasoning capabilities as a force multiplier, probing systems that Anthropic’s own engineers lack the specialized knowledge to audit. The danger is not that Mythos fails in those domains; it is that Mythos may succeed for whoever brings the expertise.
Broader, structured access for academic researchers and domain specialists—cardiologists’ partners in medical device security, control-systems engineers, researchers in less prominent languages and ecosystems—would meaningfully reduce this asymmetry. Fifty companies, however well chosen, cannot substitute for the distributed expertise of the entire research community.
None of this is an indictment of Anthropic. By all appearances the company is trying to act responsibly, and its decision to hold the model back is evidence of seriousness.
But Anthropic is a private company and, in some ways, still a start-up. Yet it is making unilateral decisions about which pieces of our critical global infrastructure get defended first, and which must wait their turn.
It has finite staff, finite budget and finite expertise. It will miss things, and when the thing missed is in the software running a hospital or a power grid, the cost will be borne by people who never had a say.
The security problem is far greater than one company and one model. There’s no reason to believe that Mythos Preview is unique. (Not to be outdone, OpenAI announced that its new GPT-5.4-Cyber is so dangerous that the model also will not be released to the general public.) And it’s unclear how much of an advance these new models represent. The security company Aisle was able to replicate many of Anthropic’s published anecdotes using smaller, cheaper, public AI models.
Any decisions we make about whether and how to release these powerful models are more than one company’s responsibility. Ultimately, this will probably lead to regulation. That will be hard to get right and requires a long process of consultation and feedback.
In the short term, we need something simpler: greater transparency and information sharing with the broader community. This doesn’t necessarily mean making powerful models like Claude Mythos widely available. Rather, it means sharing as much data and information as possible, so that we can collectively make informed decisions.
We need globally co-ordinated frameworks for independent auditing, mandatory disclosure of aggregate performance metrics and funded access for academic and civil-society researchers.
This has implications for national security, personal safety and corporate competitiveness. Any technology that can find thousands of exploitable flaws in the systems we all depend on should not be governed solely by the internal judgment of its creators, however well intentioned.
Until that changes, each Mythos-class release will put the world at the edge of another precipice, without any visibility into whether there is a landing out of view just below, or whether this time the drop will be fatal. That is not a choice a for-profit corporation should be allowed to make in a democratic society. Nor should such a company be able to restrict the ability of society to make choices about its own security.
This essay was written with David Lie, and originally appeared in The Globe and Mail.
A quiet patch ... [Charlie's Diary]
So, I had my second round of eye surgery, and it worked fine. I got a short distance lens, leaving me myopic, which was expected, and I've booked an opthalmology appointment for the earliest possible date post-surgery (in mid-May, the eye needs to settle for six weeks post-op). In the meantime, I'm without visual correction.
And guess what? My vision is changing. My left eye is increasingly myopic, to the point where it's now difficult to read on screen. (And I can barely read with my right eye at all, due to a retinal occlusion that covers about half the visual field.) For writing/editing I've blown up the text size to 250%, which is just tolerable but gives me a headache after a while: new prescription specs can't come soon enough.
NB: don't suggest half-assing corrective lenses using off-the-shelf stuff, my eyes are kinda complex and I'm not just myopic, there's other stuff going on there. Also, don't suggest dictation software: I use a complex vocabulary and punctuation that aren't a normal part of the use case the designers of such software anticipated, i.e. business correspondence. And absolutely don't suggest podcasts or text-to-speech software: I can't absorb information that way. I'm fed up with people trying to convince me to try something I've tried repeatedly to use (and that has failed for me) over the past 30 years: it's irritating, not helpful.
... In other news: despite the above I'm still plodding along at book 2 of the proposed duology (but making very slow progress because writing 1000 words in a day is the new writing 4500 words in a day). And I'll be at Satellite 9 in Glasgow next month, probably before I have new glasses, so if you see me and I fail to make eye contact across a room it's not you: I'm just blind as a bat.
The second circle [Seth's Blog]
What do your supporters tell their friends?
That’s the unseen force behind every successful brand, movement or idea.
Most people don’t care about you. They’re not listening to you, not wondering what you’re up to, and certainly not taking the time to seek you out. All you have is a small circle, your supporters.
And yet, we spend most of our time treating people like customers, not supporters. We try to turn strangers into people who do business with us, taking the friends and supporters we’ve earned for granted.
Instead, with planning and focus, you can create the conditions where your efforts strike a chord. When your customers become fans, they spread the word. When your story is true, relevant, focused, and sticky, new fans arrive. Not because it matters to you, but because it matters to them.
The second circle is out of your direct control, and it’s tempting to ignore it. But the second circle unlocks the change you seek to make.
Piratical Sabbatical [Penny Arcade]
New Comic: Piratical Sabbatical
Girl Genius for Friday, April 17, 2026 [Girl Genius]
The Girl Genius comic for Friday, April 17, 2026 has been posted.
Waking Up, p10 [Ctrl+Alt+Del Comic]
The post Waking Up, p10 appeared first on Ctrl+Alt+Del Comic.
LibreLocal meetup in Beijing, China [Planet GNU]
May 1, 2026 at 14:00 CST (UTC+8).
Piratical Sabbatical [Penny Arcade]
It sounds like there was some networking shit early on that plagued early adopters, but Windrose - part of a genre we attempt to name in the strip - is something I'd already played a bit during one of Steam's various "Fests." These fests are getting more and more baroque, more obscure, and a fest for fests ("Fest Fest") cannot be far behind.
Sahil Dhiman: What is Life (to you)? [Planet Debian]
It started with a thought: to understand people’s perspectives on life and its meaning. So I texted folks, “What is life (to you)?”. Each of the following list items (-) is a response from a different individual, mostly verbatim.
- A lot
- Everyone has a few universal basic qualities, and some special qualities. To me life is pursuit of exploring world based on those qualities and maturing those qualities as one goes on about exploring world/life with those qualities.
Discovering and enhancing experiences as one goes through them.
- life is endless suffering
- my answer might change daily, but this is what I’ve noticed and feel recently. Life is a spectrum with two distinct ends: what we control and what we don’t. At birth, the spectrum is largely tilted toward control, but throughout our lives, it gradually shifts toward the other side. Ultimately, as we approach death, we lose all control over any aspect of our existence, reaching the other end of the spectrum.
tho this isn’t universal, privilege plays a huge part in what you control tho i believe it holds true for the majority
but yeah man, meaning and purpose are dynamic, it’s in their nature to change i can give you a different answer this evening itself xD
- Funeral Monologue from Synecdoche, New York. https://www.youtube.com/watch?v=Z9PzSNy3xj0
- Zindagi ek nadiya hai, Aur mujhe tairna nahi aata
(translation - Life is a river, and I don’t know how to swim)
On a more serious note, Life is what you make it out for yourself. The only established truth is that it will end. We can never know if there is something after or if there was something before. So try to live a life that you feel aspired by? But this question was beautifully answered by that book which you had about that dying professor
(Me - He was talking about Tuesday’s with Morrie)
- My answer is 42
- One, it’s living on your own terms, you define everything for yourself, success, normal, whatever. You get to curate your version of it no matter the societal norms.
It’s an accumulation of experiences - friends, parents, work, activities, doing shit loads. Sab try karo- travel, zumba, art, music, workout, sports, dil kara ye karna hai karlo. (translation - If your heart wants to do it, just do it.)
Then I think relationships - all that you’ve nurtured, people forget maintaining people because of work. It takes efforts to keep people in your life, everyone that comes has a place in yours, how well thats stays is upto you. You also get to curate your people, who stays who don’t. Family toh hai hi (translation - family is there) but everyone else that comes along can make it pretty good.
So I don’t want to be 50 and be like chalo ab kuch apne liye karte hai… (translation - Come on, now let’s do something for ourselves) Do whatever shit you want today. Not everything costs money, and if it does get thrifty
But do keep healthy while doing all of that
- Being alive so that my daughter can grow up and i can help raising her kids as well. Raising kids without mother is tough :P
- Definitively, I feel like Life is a by product of proteins and energy working together. But in a more personal sense, Life is a dumb joke played onto us. It’s a rat race. But rats exists because of life and then it becomes a chicken-egg problem
Honestly, I don’t give good answers to life questions. I’m generally the one asking
Life can be like a box of chocolates, you don’t know what you’re gonna get untill you experience the chocolate(assuming the chocolates are heterogenous and contains a mix of everything)
Camus once said, “Life is a revolt”, and one of his students added more spice to it like “Life is a revolt against the meaninglessness of existence"
I kinda feel like Life is the pursuit of every person’s search for meaning
- Imprisonment waiting for execution 😄
I have one more thought while we are on the topic , game with pre defined starting position and predefined destination , path to reach is a maze
- A phase where you can have a really good time or really bad one, usually the mix of both. A phase where you are prisoner to responsibility and materialistic wants.
It’s a hell for you, where you try to create heaven for others. Being born was never your choice, but ending is always in your hands but you are a prisoner. You fear that leaving this world behind will destroy the heavens you created for others and they will be back to hell. But eventually everyone moves on watching the hourglass of their life.
Once you are left with no desires or no one to create heavens for, you look arround yourself. You see everyone chasing something, everyone scared of their limitted life time sliping away yet you want it to end sooner.
Doesn’t matter if it was all good till now, or all bad. The other half is waiting for redemption. If it was all good, it’s best time to die don’t wait for the bad to start. If was all bad, it’s still the best time to die what if it was the good one and more worst is waiting for you. We desire to be remembered, yet we want to free from this loop of suffering.
Someone once said, life is a suffering, chose your sufferings.
- Life to me is to live without regrets and live with freedom.
Life is always unpredictable and this unpredictability makes it more interesting and worth it.
- As of now, for the state of mind that I am in , I think for me life is about subtle struggle, subtle inconveniences and yet moving forward cause that’s all I know.
I am not sure if any of this has any meaning, but sometimes I feel I was born of a purpose and that the universe has my back.
For me it’s about raising my consciousness, understanding people to their depths, gaining moderate material success and helping people to some extend.
I have tried to seek a grander meaning but I have failed.
Life for me is what I make out it.
In my times of great success i rarely think about life for I am busy enjoying it, whatever you may call that state of mind.
- For me its the little things that you enjoy with YOUR people
- Life to me is about living and loving, and doing it in a way that sustains. It’s the people who shape you, the work you get absorbed in, the quiet moments in between. There’s also the wanting, the drive to figure out what’s worth going after and how to get there, but that’s just one part of it, not the point of it. And none of it happens in a vacuum. I’m aware of the privileges that let me live this way, and I try to hold on to that gratitude. In the end, life has both a material and a non-material side, and a lot of what we do is chasing material things in an attempt to satisfy something non-material within us
- Mere liye (translation - for me) life is staying at my home and studying random economics papers. That’s when I enjoy myself the most.
- Very complicated
Some days I wish this life never ended and some time I feel it would be better if it stopped at that moment.
It all depends on the events that happen in the so called “life”.
So life to me is a string of events that happen anyway and you get to make some decisions which can turn it in any direction and then you wonder how did that happen.
- not forgetting to breathe, learn, eat, game, take a good shit, love, sleep.
- To be honest it changed with time! At 19 it was about freedom, wasn’t sure what freedom meant but i wanted that! To be free from everything, maybe because parents still controlled a part of my life. Then came 22-24 where i was working, trying to figure out what i want, the meaning changed from freedom to living for myself. To earn more, to be greedy about myself and pursue whatever would help me gain more steps in my career.
Came my mba life, switched my life from doing for myself to trying everything out to have no regrets. Life meaning was just about living with no regrets, invested, gambled, did everything to earn that tag of “yeah, have tried that”. Now it has all switched to, it was all just a fake facade. Life turned to having a meaningful life rather than finding meaning in what i am doing. Living for people around me, chhoti chhoti cheezo m khushi (translation - happiness in small things(?)) isn’t really a topic of conversation but more of happy thing for me. So it changed, and m quite happy to be honest. Life did show me a lot of failures, but was privileged enough to face those failures. Gained a lot of learnings if not money😂
Hopeful for more learnings and change meaning of life with time
- A task.
- You have different answers at different times You learn different meanings at different times When you are studying, basically it is about job, finding a partner then it becomes, house, car other things based on your income in between, there can be passion too
Free Software was a passion, electoral politics too, but both kind of faded and I want cooperative and user driven development now (prav - something that motivates me every day) and these days learning Chinese and watching Cdrama takes a huge part of my leisure time it is heavily subjective and also influences by previous experiences people around you, how much influence they have on you
it also depends on if they had to struggle in their life or not, for some life did not give much troubles and trouble itself can be relative people who never had to struggle may find even smallest challenges as troubles like if you own a car, your worry is finding a parking slot
- I am too young to think about lyfe
- A ticket to see the show on earth, I guess 😀
I guess life is different depending on the mood. It is a very broad question.
(Me - What is it in this present mood?)
Learning stuff (like I am learning a new language) and being happy but also to regulate emotions in a world where being optimistic is getting harder each day.
Life is also having a unique set of glasses you wear. Both in terms of looking from your eyeballs and your psychological perspective. Both are unique and cannot be replicated.
It is interesting what people on their deathbed think of life. If I know I am dying, my perspective would change a whole lot.
Life is finishing reading books while we are alive 😉
Life is sleeping after a good XMPP chat 😉
- Dukh dard peeda (translation - surrow pain suffering)
- uhh to word it? life is just like a journey from A to somewhere and its all about what paths you take and what line you get on to me, just a series of short adventures that all connect to a larger sequence until you can’t have any more adventures-
(Me - eee, THE END. drop dead, like a coin)
yeaaaah- I am not really for spirituality of an afterlife, to me life just ends at some point, after which point there fails to remain a discernable you, and some X time after which, you will be last remembered, try to make that last time a good one I guess?
(Me - no soul?)
uhhh not in the way most people think of it i guess?
theres just a lot ofyous, theres the physical you, there is the idea of you, there is the expectation of you, and one of the undefinable you I would label as the soul maybe? like the part thats not physically you, but also certainly you
(Me - can’t say I understood part, but I get you in this sense)
mhm- well its about just questioning who you are more so questioning what life is-, I have sadly spent way too much time trying to figure that out
- Making the best of the time you have
- living a full range of experiences and embracing the good ones, seeing all that the world has to offer. In the end we were always just stardust. Might as well enjoy it when we are stardust with a consciousness of our own.
- Life is being fucked by everything and you just have to figure out and try to stick to the things worth being fucked for
Note: Following was transcribed from a audio message.
- There are five conditions to become a life to survive in the environment. I think there’s five conditions by the biological definitions and reproduction is one of the factor virus is not considered a life form because it cannot reproduce on its own but technically it’s kind of a life because it reproduces using the DNA ability this is the biological definition. Do you want a philosophical definition?
My definition is kind of the same except that you get life experiences along with it as a human. Extra benefits is that you are not an NPC. All other organisms are NPCs. But humans can interpret the world and change it to their liking. That is life in the case of a human. But then many humans are mostly NPCs. But they still can change the life. Okay, fuck this. Where is this even going?
A human is an exception in the case of life, because human is not an NPC. Human can interrupt the world, human can change it to its liking, which is why we are such a successful organism on this planet. That is life to me. That’s a human. But all of this is kind of meaningless, because the biological impurity of a human being still exists, so you still have the urges to reproduce, which kind of makes it like just another organism. But then, humans are yet to evolve to overcome that biological imperative.
I’m grateful for all the replies, outlooks, and subsequent
conversations I got to have after this question with everyone.
After all, it was a deeply personal question. It does fit in nicely
with my definition of life:
“Life is all about experiences and all the transient
relationships one gets to have with folks we meet on the
way.”
PS - I would love you hear you on this. Feel free to text or email on sahil AT sahilister.in
Stop New York's Attack on 3D Printing [Deeplinks]
New York's proposed 2026-2027 budget currently includes provisions that will require all 3D printers sold in the state to run print-blocking censorware—software that surveils every print for forbidden designs. This policy would also create felony charges for possessing or sharing certain design files. The vote on the state budget could happen as early as next week, so New Yorkers need to act fast and demand that their Assemblymembers and Senators strip this provision from the budget.
Tell Your Representative to Stand with Creators
State legislators across the US are rushing to regulate 3D-printed firearms under the syllogism “something must be done; there, I've done something.” The most reckless of these proposals is a mandate for manufacturers to implement print blocking on all 3D printers. We, and other experts, have already pointed out that this algorithmic print blocking is simply unfeasible and will only serve to stifle competition, free expression, and privacy. While most detrimental to the creative communities lawfully using these printers, every New Yorker will be impacted by this blow to innovation.
This policy is unfortunately buried in Part C of the New York State’s proposed budget for the 2026-2027 fiscal year (S.9005 / A.10005), which is urgently moving toward a vote after facing extensive delays. It’s also bundled with a policy that would allow felony charges to be brought against researchers and journalists for sharing design files restricted by the state. The worst of these impacts won’t be known until after it is negotiated behind closed doors, with no safeguards for creative expression or privacy.
Part C Subpart A of the budget includes two particularly concerning provisions: §2.10 and 2.11. These threaten Class E felony charges for distributing or possessing 3D-printer files that would produce firearm parts with a 3D printer or CNC machine.
Under these provisions merely sharing a print file with any of them could result in criminal charges
The first provision, 2.10, makes it a felony to sell or distribute files that can produce major firearm components to someone who is not a federally and NY-licensed gunsmith. Under 2.11, it’s also a felony to possess these files if you intend to illegally print a firearm or share them with someone you believe is not permitted to own or smith a firearm.
A journalist reporting on 3D-printed guns. A researcher studying printable firearms. An artist incorporating parts into a new work commenting on gun culture. Under these provisions merely sharing a print file with any of them could result in criminal charges, even if no one involved intends to assemble a firearm.
Criminalizing information doesn’t work. Someone intent on illegally printing a firearm is already subject to charges for that act. Adding felony liability for simply possessing a file or design piles on additional charges while doing nothing to stop printing. New charges for someone distributing these files won’t make them inaccessible to lawbreakers, but they will have a chilling effect on legitimate and entirely legal work.
Unsurprisingly, a similar law was proposed and subsequently scrapped in Colorado due to First Amendment concerns. We recommend New York do the same.
Tell Your Representative to Stand with Creators
Part C Subpart B would require every 3D printer and CNC machine sold in New York to include algorithms that scan your design files and block prints the system identifies as producing firearm components. Furthermore, all sales and deliveries of these machines must be made face-to-face.
Unlike other bills we have seen, there are no exceptions to this mandate. These restrictions apply to sales to researchers, commercial manufacturers, and—oddly enough—federally and state-licensed gunsmiths.
Applying these restrictions to CNC machine sellers is particularly absurd. These cousins of 3D printers, which make 3D objects by removing materials, are often tens of thousands of dollars and used by commercial manufacturers. Automotive, aerospace, medical manufacturers, and many others industries will be subject to the in-person sales, surveillance risk, and all the other problems with these print-blocking algorithms introduce.
Industries will be subject to the in-person sales, surveillance risk, and all the other problems
Even limiting the focus to individual buyers—hobbyists and artists who use these machines at home—this restriction to face-to-face sales comes with its own issues. Beyond unnecessarily complicating the use of printers in the state, this barrier to access will hit rural New Yorkers the hardest. People in rural or remote locations can stand to benefit from the saved time and costs of printing useful parts at home. With this restriction, they will need to drive to one of the few retailers who actually sell this equipment and settle for the models they stock.
That is, if sellers continue to stock these printers despite the risk. Subpart B §§ 2.3 and 2.5 open sellers up to liability, including anyone on the second-hand market, for selling out-of-date printers. Meanwhile, buyers hoping to illegally print firearms can simply build their own printer with widely available equipment.
Here’s what makes Subpart B of the New York budget particularly reckless: the technology it mandates is not capable of doing what it is supposed to.
There is very little detail provided about requirements for the mandated algorithms. What the bill does outline boils down to this: the algorithms must evaluate print files to determine whether they would produce a firearm or illegal firearm parts, and if so, block the print. In an attempt to enable this, New York state would also create and maintain a library of forbidden files with tightly restricted access.
We’ve already gone over why this idea simply won’t work. Design files are trivially easy to modify, split into segments, or otherwise alter to evade pattern detection. Even if printers fully rendered and analyzed the print with cloud-based AI, any number of design or post-print tricks can be used to dodge detection. Meanwhile, such fuzzy AI interpretation will rapidly increase the percentage of lawful prints censored.
Firearms aren’t a highly specific design like paper currency; these proposed algorithms are futilely attempting to block an infinite number of designs capable of—or that can be made capable of—the few simple mechanical functions that make up a firearm.
This group has no peer review requirements, so it could easily be loaded with profiteers or incumbent manufacturers
As we’ve said before: the internet always routes around censorship. Anyone determined to print a prohibited object has straightforward workarounds. The people who get surveilled and blocked are the people trying to follow the law.
The bill aims to enforce this impossible mandate by creating a working group to define the actual technical requirements of enforcement—but only after the law passes. This group has no peer review requirements, so it could easily be loaded with profiteers or incumbent manufacturers who are already lining up to participate. These incumbents stand to profit from shutting out new competitors and locking in users to their devices, and sellers into their platform, subjecting both to the type of enshittification seen with Digital Rights Management (DRM) software. There are also no safeguards in the law to prevent the most surveillance-heavy approaches to print scanning, or to stop this censorship infrastructure from being further weaponized against lawful speech.
On the other hand, unbiased experts in open-source manufacturing in the working group can at best pause the clock by showing such algorithms are unfeasible. That is, until a new snake oil company comes along to restart it.
New York is one of the largest consumer markets in the country. When it mandates a feature in hardware, manufacturers hardly ever build a New York-only version. They build the New York version and sell it globally. A print-blocking mandate adopted in New York will become the national standard in practice.
New Yorkers deserve more than this rush job buried in a budget bill. This is an unfeasible tech solution, built without the consumer protections that would be required of any serious policy proposal, and creates new costs and inconveniences amidst a protracted annual budget process. It also threatens First Amendment protections. This policy will take shape without consumer guardrails, behind closed doors, and risks the worst outcomes for grassroots innovation and creativity enabled by these machines. Worse still, these practices can become the norm across other states and among 3D-printer manufacturers worldwide.
Your representatives could vote on this ill-conceived measure in the next week. If you're a New Yorker, email your legislators now, and tell them to strip this measure from the budget today.
Tell Your Representative to Stand with Creators
Nationwide bill to put age verification in operating systems introduced in the US [OSnews]
The title of my article on age verification in Linux and other operating systems had a “for now” added for a reason, and here we are, with two members of the US Congress introducing a bill to add age verification to operating systems. The text of the proposed bill was only published today, and it’s incredibly vague and wishy-washy, without any clear definitions and ton of open-ended questions.
Still, if passed, the bill would require actual age verification, instead of mere voluntary age reporting that current state-level bills cover. It also seems to eschew the concept of age brackets, giving application developers access to specific ages of users instead. It’s a vague mess of a bill that no sane person would ever want passed, but alas, sanity is a rare commodity these days, especially in US Congress.
It’s introduced by Democrat Josh Gottheimer and Republican Elise M. Stefanik, so it has that bipartisan sheen to it, which could increase its odds of going anywhere. At the same time, though, US Congress is about as useful as a box of matches during a house fire, so for all we know, this will end up going nowhere as its members focus on doing absolutely nothing to reign in the flock of coked-up headless chickens passing for an executive branch over there.
If something like this gets passed, every US-based operating system – which includes most open source operating systems and Linux distributions – will probably fall in line when faced with massive fines and legal pressure. This isn’t going to be pretty.
Stop New York’s Surveillance and Censorship Mandate Before It’s Too Late [EFF Action Center]
We’ve seen this playbook before. Industries push for mandated technology built into consumer devices, framed as a safety measure. The safety problem doesn’t get solved; but the surveillance infrastructure gets built, and it doesn’t stay limited to its original purpose.
Part C Subpart B of the New York State 2026-2027 budget bill requires every 3D printer and CNC machine sold in New York to include a “firearms blueprint detection algorithm” that scans your design files and blocks prints the software flags as potential firearm components. The state would maintain a library of forbidden designs. Behind closed doors, a working group convened after the law passes would define the technical standards, with no required peer review.
Here’s the core problem: the technology this bill mandates cannot do what it is supposed to do. Geometry doesn’t reliably identify firearm components. Pipes, tubes, brackets, and millions of other common shapes share geometric properties with gun parts. Any detection algorithm will produce enormous numbers of false positives while remaining trivially easy for bad actors to circumvent by making minor design modifications. The people who get surveilled and blocked are the people following the law.
Part C Subpart A compounds this by creating felony liability for possessing or distributing design files that could produce firearm components, even when there is no intent to manufacture a weapon. A journalist reporting on 3D-printed firearms. A researcher studying this technology. An educator with course materials. Any of them could face criminal charges under these provisions. Criminalizing information doesn’t prevent the conduct it targets. Someone determined to print a prohibited object already faces charges for that act. These provisions add legal exposure for everyone else while stopping no one.
The working group that will define this bill’s technical requirements has no requirement to include independent experts and no consumer protections built into its mandate. The largest manufacturers are already positioning themselves to participate. They have every incentive to design compliance requirements that shut out smaller competitors, lock users into their platforms, and make switching to open-source alternatives legally risky. That’s not a side effect. For some of the incumbents involved, it’s the point.
New York has to get this right, and we’re running out of time.
Contact your assembly member today and tell them to strip this provision from the budget.
Tell Congress: Don't Let Anyone Own The Law [EFF Action Center]
A large portion of the regulations we all live by (such as fire safety codes, or the national electrical code) are initially written—by industry experts, government officials, and other volunteers—under the auspices of standards development organizations (SDOs). Federal, state, or municipal policymakers then review the codes and decide whether the standard is good broad rule. The Pro Codes Act effectively endorses the claim that SDOs can “retain” copyright in codes, even after they are made law, as long as they make the codes available through a “publicly accessible” website – which means read-only, and subject to licensing limits.
That's bad for all of us. Anyone wishing to make the law accessible in a better format would find themselves litigating whether or not they are sheltered by the fair use doctrine – a risk that many won’t want to take.
We have a constitutional right to read, share and discuss the law. SDOs have already lost this battle in court after court, which have recognized that no one can own the law. Tell Congress you agree the law should be open to us all and urge them to reject this bill.
Rust 1.95.0 released [LWN.net]
Version 1.95.0 of the Rust language has been released. Changes include the addition of a cfg_select! macro, the capability to use if let guards to allow conditionals based on pattern matching, and many newly stabilized APIs. See the release notes for a full list of changes.
How Push Notifications Can Betray Your Privacy (and What to Do About It) [Deeplinks]
A phone’s push notifications can contain a significant amount of information about you, your communications, and what you do throughout the day. They’re important enough to government investigations that Apple and Google now both require a judge’s order to hand details about push notifications over to law enforcement, and even with that requirement Apple shares data on hundreds of users. More recently, we also learned from a 404 Media report that law enforcement forensic extraction tools can unearth the text from deleted notifications, including those from secure messaging tools, like Signal. The good news is that you can mitigate some of this risk.
There are two points where notifications may betray your privacy: when they’re transmitted over cloud servers and once they land on the device. Let’s start with the cloud. It might seem like push notifications come directly from an app, but they are typically routed through either Apple or Google’s servers first (depending on if you use iOS or Android). According to a letter sent to the Department of Justice by Senator Wyden, the content of those notifications may be visible to Apple and Google, and at the very least the companies collect some metadata about what apps send a notification and when. App providers have to make the decision to hide the content from Apple and Google and implement that functionality; Signal is one app that does this.
Then, once the notifications land on your phone, depending on your settings, the notification content may be visible on your lock screen without needing to unlock the device. This can be dangerous if you lose your device, someone steals it, or it’s confiscated by law enforcement.
You may clear notifications after looking at them. But it turns out the content notifications get recorded in your device’s internal storage, which then makes them susceptible to recovery with certain types of forensic tools. Notification content may even persist after the app is deleted, if the OS doesn’t fully purge the app’s notification data.
We still have a lot of unanswered questions about how the notification databases work on devices. We do not know how long notifications are stored, or whether they’re backed up to the cloud, in which case the cloud provider could get backdoor access to the content of messages if the backups are enabled and not end-to-end encrypted. This may also make backups vulnerable to law enforcement demands for data.
Which is all to say that there are myriad ways that law enforcement can access the content or metadata of push notifications. Let’s fix that.
Secure chat tools are designed to keep the content of the messages safe inside the app. So, for secure chat apps like WhatsApp and Signal, that means the company that makes those apps cannot see the content of your messages, and they’re only accessible on your and your recipients’ devices. Once messages land on a device, it’s still important to consider some privacy precautions, particularly with notifications.
Signal
Signal offers three levels of information
to include in notifications, all which are pretty self
explanatory:
To change your settings:
WhatsApp
WhatsApp only has one option for this,
and it’s currently limited to iPhone, but you can at least
tell the app not to include the content of a message in the
notification:
Check your other apps to see if they offer similar settings.
Since Apple and Google manage push notifications for their respective devices, they also have some visibility into certain data. Push notification data can include certain types of metadata, like which app sent a notification and when, as well as the account ID associated with the phone. In some cases, Apple and Google may have access to unencrypted content, including the content of the text in a notification or other information from the app itself.
For most app notifications, there’s no simple way to easily figure out what metadata might be gleaned from a notification, or if the notification is unencrypted or not. But some app developers have described details along these lines. For example, Signal president Meredith Whittaker explained on social media how the Signal app handles notifications entirely on-device. Searching online for an app name along with “notification privacy,” “notification encryption” or “notification metadata” may help answer your questions, or you may need to dig around in support forums for the app.

It’s also good to reconsider whether any app should be sending you notifications to begin with. Aside from a potential decrease in the number of distractions you endure throughout the day, or the level of chaos on display on your lockscreen, limiting the apps that can send notifications and what content is visible in them can improve your privacy with respect to the sorts of metadata that may be gathered by the companies, as well as any content that may be viewable if someone has physically accessed your device.
To check and change your settings on iPhone
To check and change your settings on Android
The
core version of Android relies on app developers to develop
specific settings more than controlling them on a platform-wide
level.
In an attempt to make notifications easier to skim, both Android and iOS offer optional ways to get notification summaries using their AI tools that summarize the content of notifications. On an individual app level, WhatsApp offers this as well. Some of these summarization tools, like Apple’s, run on the device, while others, like WhatsApp’s, do not. This can all be a lot to keep track of, and sending data off device may create some level of risk for some messages.
Since this is a bit more complicated, we have another blog post that walks through the steps to take to protect messaging from accidentally ending up in AI tools built into Apple and Google's devices. For WhatsApp specifically, we have a blog detailing when you might want to turn on the app’s “Advanced Chat Privacy” feature, which can disable summaries for both yourself and others in the chat.
Balancing security, privacy, and usability with something like push notifications is a complicated task. At the very least, Apple and Google should better ensure that the content of these notifications isn’t transmitted over their servers in plain text. The companies need to also make sure that device operating systems don’t back up the notification database to the cloud, and when an app is deleted, that all notification data is purged.
We appreciate that apps like Signal allow you to control what’s visible with notifications on a per-app basis, and we’d like to see this level of granularity of choices in other secure messaging tools, like WhatsApp. Likewise, more apps should handle push notifications similarly to the way Signal does, where a ping is sent to wake up the app to check for messages, and the content of that message is never sent across servers.
Jamie McClelland: Mailman3 has 2 databases. Whoops. [Planet Debian]
At May First we have been carefully planning our migration of about 1200 lists from mailman2 to mailman3 for almost six months now. We did a lot of user communications, had several months of beta testing with a handful of lists ported over, and everything was looking good. So we kicked off the migration!
But, about 15% of the way through I started seeing sqlite lock errors. Wait, what? I carefully re-configured mailman3 to use postgres, not sqlite. Well, yes, but apparently that was for the database managing the email list configuration, not the database powering the django web app, which, incidentally, also includes hundresds of gigabytes of archives. In other words, the one we really need in postgres, not sqlite.
Well that sucks. We immediately stopped the migration to deal with this.
I noticed that the web is full of useful django instructions on
how to migrate your database from one database to antoher. However,
if you read the fine print, those convenient looking
“dumpdata loaddata” workflows
are designed to move the table definitions and a small amount of
data. In our case, even after just 15% of our lists moved, our
sqlite database was about 30GB.
I considered some of the hacks to manage memory and try to run this via django, but eventually decided that pgloader was a more robust option. This option also allowed me to more easily test things out on a copy of our sqlite database (made while mailman was turned off). This way I could migrate and re-migrate the sqlite database over and over without impacting our live installation until I was satisfied it was all working.
My first decision was to opt out of pgloader’s schema creation. I used django’s schema creation tool by:
mailman-web migrateNote: I tried just adding new database settings in the mailman
web configuration indexed to ’new’ - django has the
ability to define different databases by name, then you can run
mailman-web migrate --database new. But, during the
migration, I caught django querying the sqlite database for some
migrations that required referencing existing fields (specifically
hyperkitty’s 0003_thread_starting_email). I
didn’t want any of these steps to touch the live database so
I opted for the cleaner approach.
Once I had a clean postgres schema, I dumped it so I could easily return to this spot.
Next I started working on our pgloader load file.
After a lot of trial and error, I ended with:
LOAD DATABASE
FROM sqlite:///var/lib/mailman3/sqlite-postgres-migration/mailman3web.clean.backup.db
INTO postgresql://mailmanweb:xxxxxxxxxxx@localhost:5432/mailmanweb
WITH data only,
reset sequences,
include no drop,
disable triggers,
create no tables,
batch size = 5MB,
batch rows = 500,
prefetch rows = 50,
workers = 2,
concurrency = 1
SET work_mem to '64MB',
maintenance_work_mem to '512MB'
CAST type datetime to timestamptz drop default drop not null,
type date to date drop default drop not null,
type int when (= precision 1) to boolean using tinyint-to-boolean,
type text to varchar using remove-null-characters;
The batch, prefetch, workers and concurreny settings are all there to ensure memory doesn’t blow up.
I also discovered that I had to make some changes to the schema before loading data. Mostly truncating tables that the django migrate command populated to avoid duplicate key errors:
TRUNCATE TABLE django_migrations CASCADE;
TRUNCATE TABLE django_content_type CASCADE;
TRUNCATE TABLE auth_permission CASCADE;
TRUNCATE TABLE django_site CASCADE;
And also, I had to change a column type. Apparently the mailman import process allowed an attachment file name that exceeds the limit for postgres, but was allowed into sqlite:
ALTER TABLE hyperkitty_attachment ALTER COLUMN name TYPE text
When pgloader runs, we still get a lot of warnings
from pgloader, which wants to cast columns differently than django
does. These are harmless (I was able to import the data without a
problem).
And there are still a lot of warnings along the lines of:
2026-03-30T14:08:01.691990Z WARNING PostgreSQL warning: constraint “hyperkitty_vote_email_id_73a50f4d_fk_hyperkitty_email_id” of relation “hyperkitty_vote” does not exist, skipping
These are harmless as well. They appear because disable
triggers disables foreign key constraints. Without it, we
wouldn’t be able to load tables that require values in tables
that have not yet been populated.
After all the tweaking, the import of our 30GB sqlite database took about 40 minutes.
I think the reset sequences from
pgloader should take care of this, but just in
case:
mailman-web sqlsequencereset hyperkitty mailman_django auth | mailman-web dbshell
And, just to ensure postgres is optimized, run this in the psql shell:
ANALYZE VERBOSE;
I understand very well all the decisions the mailman3 devs made in designing the next version of mailman, and if I was in the same place I may have made them the same ones. For example, separating the code running the mailing list from the code managing the archives and the web interface makes perfectly good sense - many people might want to run just the mailing list part without a web interface. And building the web interface in django makes a lot of sense as well - why re-invent the wheel? I’m sure a lot of time and effort was saved by simply using the built in features you get for free with django.
But the unfortunate consequence of these decisions is that sys admins have a much harder time. Almost everyone wants the email lists along with the web interface and the archives. But nobody wants two different configuration files with different syntaxes and logic, not to mention two different command lines to use for maintenance and configuration with completely different APIs. Trying to understand how to change a default template or set list defaults requires a lot of research and usually you have to write a python script to do it.
I have finally come to the conclusion that mailman2 is designed for sys admins, while mailman3 is designed for developers.
Despite these short comings, I am impressed with the community and their quick and friendly responses to the questions of a confused sys admin. That might be more valuable than anything else.
Forgejo 15.0 released [LWN.net]
Version 15.0 of the Forgejo code-collaboration platform has been released. Changes include repository-specific access tokens, a number of improvements to Forgejo Actions, user-interface enhancements, and more. Forgejo 15.0 is considered a long-term-support (LTS) release, and will be supported through July 15, 2027. The previous LTS, version 11.0, will reach end of life on July 16, 2026. See the announcement and release notes for a full list of changes.
The Big Idea: Cameron Johnston [Whatever]

The Scientific Method is immensely helpful, but so is literal magic. Would the power of science prove to be more powerful than the power of wizardry? It’s tough to say, but author Cameron Johnston certainly speculates on the idea in the Big Idea for his newest novel, First Mage on the Moon. Read on to see how the Space Race might’ve happened with the help of a wizard’s staff.
CAMERON JOHNSTON:
For a bunch of wise folk that meddle with reality and break the rules of standard physics on a regular basis, wizards and mages in fantasy media seem a remarkably uncurious lot. Sometimes magic users are far more interested in other dimensions and eldritch creatures than in the mortal world they themselves inhabit. How many of them look up at the stars and wonder what they are, or gaze at the moon and ponder what that shining silver disc really is…and how they might get there?
First Mage On The Moon was born from a single Big Idea (OK, OK…the idle thought of a fantasy-fan): Without science, how would wizards describe gravity? Inevitably, that grew arms and legs and tentacles and thingamabobs into: What would they make of outer space? How would they breathe in a spacecraft when they don’t even know what oxygen is or why air ‘goes bad’. What about aerodynamics? and a whole host of other questions I didn’t then have answers for. When you only have a magical understanding of the world and the closest thing to science is the semi-mystical and secretive practice of alchemy, well, then things get complicated if you want to build something to visit the moon. Magic is not going to solve everything if you fly straight up and try to hit a moving object like the moon, and don’t factor in the calculations for orbits, gravity… or indeed the speed/friction of re-entry.
Science is an amazing and collaborative process and Earth’s 20th-century Space Race was a species-defining moment, but what if that happened in a fantasy world of mages, golems, vat-grown killing machines and grinding warfare. What if a group of downtrodden mages sick of building weapons of mass destruction for their oligarch overlords decided to go rogue and divert war materials into building a vessel to go to the moon, the home of their gods, and ask for divine intervention in stopping the war. When you have no culture of shared science, where do you even begin?
All those thoughts and ideas stewed away in the back of my brain while I was writing my previous novel, The Last Shield. As all authors know, there comes a stage of writing a book when your brain goes “Ooh, look at the shiny new thing!” Very helpful, brain, coming up with magical rocket ships when I’m trying to write a book set in a fantasy version of the Scottish Bronze Age – thanks very much! That idea of wizard-science and magical engineering lodged there, immovable, and my next book just had to become First Mage On The Moon. Which was handy, as I was contracted to write another standalone novel.
While the US/USSR Space Race and modern science of our very own Earth was inevitably a huge influence on my novel, so too were the theories and writing of its ancient thinkers. Around 500 BCE, Pythagoras proposed a spherical world, and Aristotle later wrote several arguments for the same theory, such as ships sailing over the horizon disappearing hull-first and different constellations being visible at different latitudes (all of which may have given the Phoenician sailors and navigators certain thoughts too). And then comes Eratosthenes, Chief Librarian of Alexandria, and a very smart dude who was able to calculate the circumference of Earth by using two sticks in two locations and comparing the angles of their shadows. If those ancient Earth scholars could calculate such things, then surely fantasy mages, with all the magic at their disposal, could do more than fling fireballs at each other. There had to be some among them with the desire to explore beyond the bounds of myth and magic, gods and monsters, and given the opportunity to work with like-minds to build something that has never been done before, they would surely take it…despite the risks.
Found family, magical engineering, and mad ideas of actual science in a magical world all came together to form First Mage On The Moon. As much as I love my morally grey characters in realms of swords and sorcery, it was deeply satisfying to write something that little bit different, a hopeful story about human ingenuity in an increasingly fraught world.
First Mage On The Moon: Amazon|Amazon UK|Barnes & Noble|Bookshop|Powell’s|Waterstones
What’s up with window message 0x0091? We’re getting it with unexpected parameters [The Old New Thing]
A customer, via their customer liaison, reported quite some time ago that their program stopped working on Windows XP. (I told you it was quite some time ago.)
The customer’s investigations revealed that the problem
occurred because their window was receiving message
0x0091, and the parameters are wrong. Who is sending
this message with the wrong parameters?
Okay, first of all, how do you even know that the parameters are
wrong? The message is not listed in winuser.h or in
MSDN (as it was then called).
We explained that message 0x0091 is an internal
message that they should just pass to
DefWindowProc unchanged. What makes the
customer think that the message is being received with the wrong
parameters?
The customer said that their program was using that message as a
custom message, and now, in addition to getting it when their
program sends the message, they are also getting spurious copies of
the message with WPARAM and LPARAM values
that don’t correspond to any values that the program itself
sent.
We informed them that they shouldn’t have been using that message for their own purposes. Those messages are in the system-defined range, which means that they are off-limits to applications. If they want to send a private message, use one in the application space.
It’s like finding an empty closet in an office building and using it to store your bicycle, but now, when you come to work, you find that the closet is filled with other stuff and there’s no room for your bicycle any more. “Why is there stuff in that closet?” Because it wasn’t your closet in the first place.
The liaison took our advice back to the customer, but mentioned
that the customer probably won’t like that answer. The
message 0x0091 was not the only message they were
using. They also used other messages below WM_USER,
and they were all causing problems; they just wanted to start their
investigation with 0x0091.
Oh well. But I hope it’s as simple as just changing a macro definition from
#define WM_MYSECRETMESSAGE 0x0091
to
#define WM_MYSECRETMESSAGE (WM_APP + 1020) // or something
Pick a message in the range available to applications for custom use.
The post What’s up with window message <CODE>0x0091</CODE>? We’re getting it with unexpected parameters appeared first on The Old New Thing.
Generative AI in the Real World: Aishwarya Naresh Reganti on Making AI Work in Production [Radar]
As the founder and CEO of LevelUp Labs, Aishwarya Naresh Reganti helps organizations “really grapple with AI,” and through her teaching, she guides individuals who are doing the same. Aishwarya joined Ben to share her experience as a forward-deployed expert supporting companies that are putting AI into production. Listen in to learn the value all roles—from data folks and developers to SMEs like marketers—bring to the table when launching products; how AI flips the 80-20 rule on its head; the problem with evals (or at least, the term “evals”); enterprise versus consumer use cases; and when humans need to be part of the loop. “LLMs are super powerful,” Aishwarya explains. “So I think you need to really identify where to use that power versus where humans should be making decisions.” Watch now.
About the Generative AI in the Real World podcast: In 2023, ChatGPT put AI on everyone’s agenda. In 2026, the challenge will be turning those agendas into reality. In Generative AI in the Real World, Ben Lorica interviews leaders who are building with AI. Learn from their experience to help put AI to work in your enterprise.
Check out other episodes of this podcast on the O’Reilly learning platform or follow us on YouTube, Spotify, Apple, or wherever you get your podcasts.
This transcript was created with the help of AI and has been lightly edited for clarity.
00.58
All right. So today we have Aishwarya Reganti,
founder and CEO of LevelUp
Labs. Their tagline is “Forward-deployed
AI experts at your service.” So with that, welcome to the
podcast.
01.13
Thank you, Ben. Super excited to be here.
01.16
All right. So for our listeners,
“forward-deployed”—that’s a term I think
that first entered the lexicon mainly through Palantir, I believe:
forward-deployed engineers. So that communicates that Aishwarya and
team are very much at the forefront of helping companies really
grapple with AI and getting it to work. So, first question is,
we’re two years into these AI demos. What actually separates
a real AI product from a good demo at this
point?
01.53
Yeah, very timely question. And yeah, we are a team of
forward-deployed experts. A bit of a background to also tell you
why we probably have seen quite a few demos failing. We work with
enterprises to build a prototype for them, educate them about how
to improve that prototype over time. I think one of the biggest
things that differentiates a good AI product is how much effort a
team is spending on calibrating it. I typically call this the 80-20
flip.
A lot of the folks who are building AI products as of today come from a traditional software engineering background. And when you’re building a traditional product, a software product, you spend 80% of the time on building and 20% of the time on what happens after building, right? You’re probably seeing a bunch of bugs, you’re resolving them, etc.
But in AI, that kind of gets flipped. You spend 20% of the time maybe building, especially with all of the AI assistants and all of that. And you spend 80% of the time on what I call “calibration,” which is identifying how your users behave with the product [and] how well the product is doing, and incorporating that as a flywheel so that you can continue to improve it, right?
03.11
And why does that happen? Because with AI products, the interface
is very natural, which means that you’re pretty much speaking
with these products, or you’re using some form of natural
language communication, which means there are tons of ways users
could talk and approach your product versus just clicking buttons
and all of that, where workflows are so deterministic—which
is why you open up a larger surface area for errors.
And you will only understand how your users are behaving with the system as you give them more access to it right. Think of anything as mainstream as ChatGPT. How users interact with ChatGPT today is so much more different than how they would do say three years ago or when it was released in November 2022. So what differentiates a good product is that idea of constant calibration to make sure that it’s getting aligned with the users and also with changing models and stuff like that. So the 80-20 flip I think is what differentiates a good product from just a prototype.
04.14
So actually this is an important point in the in
the sense that the persona has changed as to who’s building
these data and AI products, because if you rewind five years ago,
you had people with some knowledge of data science, ML, and now
because it’s so accessible, developers—actually even
nondevelopers, vibe coders—can can start building. So with
that said, Aishwarya, what do these kinds of nondata and AI people
still consistently get wrong when they move from that traditional
mindset of building software to now AI
applications?
05.05
For one, I truly am one of those people who believes that AI should
be for everyone. Even if you’re coming from a traditional
machine learning background, there’s so much to catch up on.
Like I moved to a team in AWS where. . . I moved
from a team in AWS in 2023 where I was working with
traditional natural language processing models—I was a part
of the Alexa team. And then I moved into an org called GenAI
Innovation Center, where we were building generative AI solutions
for customers. And I feel like there was so much to learn for me as
well.
But if there’s one thing that most people get wrong and maybe AI and traditional ML folks get right, it’s to look at your data, right? When you’re building all of these products, people just assume that “Oh, I’ve tested this for a few use cases” and then it seems to work fine, and they don’t pay so much attention to the kind of data distribution that they would get from their users. And given this obsession to automate everything, people go like, “OK, I can maybe ask an LLM to identify what kind of user patterns I’m seeing, build evals for itself, and update itself.” It doesn’t work that way. You really need to spend the time to understand workflows very well, understand context, understand all this data, pretty much. . .
I think just taking the time to manually do some of the setting up work for your agents so that they can perform at their maximum is super underrated. Traditional ML folks tend to understand that a little better because most of the time we’ve been doing that. We’ve been curating data for training our machine learning models even after they go into production. There’s all of this identifying outliers and updating and stuff. But yeah, if there’s one single takeaway for anybody building AI products: Take the time to look at your data. That’s the most important foundation for building them.
07.01
I’ll flip this a little bit and give props to
the traditional developers. What do they get right? In other words,
traditional developers write code; some of them write tests, run
unit tests [and] integration tests. So they had something to build
on that maybe the data scientists who were not writing production
code were not used to doing. So what do the traditional developers
bring to the table that the data and ML people can learn
from?
07.40
That’s an interesting question because I don’t come
from a software background and I just feel traditional developers
have a very good design thinking: How do you design architectures
so that they can scale? I was so used to writing in notebooks and
kind of just focusing so much on the model, but traditional
developers treat the model as an API and they build everything very
well around it, right? They think about security. They think about
what kind of design makes sense at scale and all of that. And even
today I feel like so much of AI engineering is traditional software
engineering—but with all of the caveats that you need to be
looking at your data. You need to be building evals which look very
different. But if you kind of zoom out and see, it’s pretty
much the same process, and everything that you do around the model
(assuming that the model is just a nondeterministic API), I think
traditional software engineers get it like bang on.
08.36
You recently wrote a post about
evals, which was quite interesting actually,
[arguing] that it’s a bit of an overused and poorly defined
term. I agree with the thesis of the post, but were you getting
frustrated? Is that the reason why you wrote the post? [laughs]
What was the genesis of the post?
09.03
A baseline is most of my posts come out of frustration and noise in
this space. It just feels like if you kind of see the
trajectory. . . In November 2022, ChatGPT was out, and
[everybody was] like, “Oh, chat interfaces are all you
need.” And then there was this concept of retrieval-augmented
generation, they go “Oh, RAG is all you need. Chat just
doesn’t work.” And then there was this concept of
agents and like “Agents are all you need; evals are all you
need.” So it just gets super annoying when people hang on to
these concepts and don’t really understand the depth of
it.
Even now I think there are tons of people who go like “Oh, RAG is dead. It’s not going to be used” and stuff, and there’s so much nuance to it. And with evals as well. I teach a lot of courses: I teach at universities; I also have my own courses. I feel like people just stuck to the term, and they were like “Oh, there is this use case I’m building. I need hundreds of evals in order to make sure that it’s tested very well.” And they just heard the fact that “Oh, evals are what you need to do differently for AI products” and really didn’t understand in depth like what evals mean—how you need to build a flywheel around it, and the entire you know act of building a product, calibrating it, and building a set of evaluations and also doing some A/B testing online to understand how your users are behaving with it. All of that just went into one term “evals,” and people are just like throwing it around everywhere, right?
10.35
And there’s also this confusion around model eval versus
product eval, which is all of these frontier companies build evals
on their models to make sure that they understand where they are on
the leaderboard. And I was speaking to someone one day, and they
went like, “Oh, GPT-5 point something has been tested on a
particular eval dataset, which means it’s the best for my use
case, so I’m going to be using it.” And I’m like,
“That’s not the evals that you should be worrying
about, right?” So just overloading so much into a term and
hyping it up is kind of what I felt was annoying. And I wanted to
write a post to say that evals is a process. It’s a long
process. It’s pretty much the process of building something
and calibrating it over time. And there are tons of components to
it, so don’t kind of try to stuff everything in a word and
confuse people.
I’ve also seen people who do things like, “Oh, I’m going to build hundreds of evals” and maybe 10 of them are actionable. Evals also need to be super actionable: What is the information you can get from them, and how can you act on that? So I kind of stuffed all of that frustration into the post to kind of say it’s a longer process. There’s so much nuance in it. Don’t try to water that down.
11.48
So it seems like this is an area where the people that were
from the prior era—the people building ML and data science
products—maybe could bring something to the table, right?
Because they had experience, I don’t know, shipping
recommendation engines and things like that. They have some prior
notion of what continuous evaluation and rigorous evaluation brings
to the table.
Actually I was talking to someone about this a few weeks ago in the sense that maybe the data scientists actually have a growing employment opportunity here because basically what they bring to the table seems increasingly important to me. Given that code is essentially free and discardable, it seems like someone with a more rigorous background in stats and ML might be able to distinguish themselves. What do you think?
12.56
Yes and no, because it’s true that machine learning and data
scientists understand data very well, but just the way you build
evals for these products is so much more different than how you
would build, say, your typical metrics (accuracy, F-score, and all
of that) that it takes quite some thinking to extend that and also
some learning to do. . .
13.21
But at least you might actually go in there knowing
that you need it.
13.27
That is true, but I don’t think that’s a
super. . . I’ve seen very good engineers pick that
up as well because they understand at a design level “What
are the metrics I need to be measuring?” So they’re
very outcome focused and kind of enter with that. So one: I think
everybody has to be more coachable—not really depend on
things that they learned like X years ago, because things are
changing so quickly. But I also believe that whenever you’re
building a product, it’s not really one set of folks that
have the edge.
Another maybe distribution that is completely different is just subject-matter experts, right? When you’re building evals, you need to be writing rubrics for your LLM judges. Simple example: Let’s say you’re building a marketing pipeline for your company, and you need to write copy—marketing emails or something like that. Now even if I come from a data science background, if I were thrown at that problem, I just don’t understand what to look for and how to get closer to a brand voice that my company would be satisfied with. But I really need a marketing expert to kind of tell me “This is the brand voice we use, and this is the evals that we can build, or this is how the rubric should look like.” So it should almost be like a cross-functional thing. I feel like each of us have different pieces to that puzzle, and we need to work together.
14.42
That kind of also brings me to this other thing of collaborating in
a much tighter manner [than] before. Before it was like, “OK,
machine learning folks get data; they build models; and then there
is a separate testing team; there is a separate SME team
that’s going to look at how this product is behaving.”
And now you cannot do that. You need to be optimizing for the same
feedback loop. You need to be talking a lot more with all of the
stakeholders because even when building, you want to understand
their perspective.
15.14
So it seems also the case that as more people build
these things, they realize that actually. . . You know
sometimes I struggle with the word “eval” in the sense
that maybe the right word is “optimize,” because
basically what you really want is to understand “What am I
optimizing for?” Obviously reliability is one of them, but
latency and cost are also important factors, right? So it’s
just a discussion that you’re increasingly coming across, and
people are recognizing that there’s trade-offs and they have
to balance a bunch of things.
15.57
Yes, definitely. I don’t see it being discussed heavily
mainstream. But whenever I approach a problem, it’s always
that, right? It’s performance, effort, cost, and latency. And
all of these four things are kind of. . . You’re
trying to balance each of them and trade off each of them. And I
always say, start off with something that’s very low effort
so that you kind of have an upper ceiling to what can be achieved.
Then optimize for performance.
Again, don’t optimize for cost and latency when you get started because you just want to see the realm of possible to make sure that you can build a product and it can work fine. And cost and latency [are] something that ought to be optimized for—even when building for enterprises—after we’ve had a decent prototype that can do well on evals. Right now, if I built something with, say, a good mid-tier model and it can hit all of my eval datasets, then I know that this is possible, and now I can optimize for the latency and cost based on the constraints. But always follow that pyramid, right? Go with [the] lowest effort. Try to optimize for performance. And then cost and latency is something that. . . There are tons of tricks you can do. There’s caching; there’s using smaller models and all of that. That’s kind of a framework that I typically use.
17.08
In prior generations of machine learning, I think a
lot of focus was on accuracy to some extent. But now increasingly,
because we’re in this kind of generative AI world, it’s
more likely that people are interested in reliability and
predictability in the following sense: Even if I’m only 10%
accurate, as long as I know what that 10% is, I would prefer that
[to] a model that’s more accurate but I don’t know when
it’s accurate. Right?
17.47
Right. That’s kind of the boon and bane of generative AI
models. I guess the fact that they can generalize is amazing, but
sometimes they end up generalizing in ways that you wouldn’t
want them to. And whenever we work on enterprise use cases, I think
for us always in my mind—something that I want to tell
myself—is if this can be a workflow, don’t make it
autonomous if it can solve a problem with a simple LLM call and if
you can audit decisions. For instance, let’s say we’re
building a customer support agent. You could literally build it in
five minutes: You can throw SOPs at your customer support agent and
say “OK, pick up the right resolution, talk to the user, and
that’s it.” Building is very cheap today. I can
literally have Claude Code build it up in a few minutes.
But something that you want to be more intentional about is “What happens if things go wrong? When should I escalate to humans?” And that’s where I would just break this into a workflow. First, identify the intent of the human and then give me a draft—almost be a copilot for me, where I can collaborate. And then if that draft looks good, a human should approve it so that it goes further.
Right now, you’re introducing auditability at each point so that you as a human can make decisions before, you know, an agent goes up and messes up things for you. And that’s also where your design decisions should really take over. Like I could build anything today, but how much thinking am I doing before that building so that there’s reliability, there’s auditability, and all of those things. LLMs are super powerful. So I think you need to really identify where to use that power versus where humans should be making decisions.
19.28
And you touched on the notion of human auditors or
humans in the loop. So obviously people also try to balance LLM as
judge versus human in the loop, right? Obviously there’s no
one piece of advice, but what are some best practices around how
you demarcate between when to use a human and when you’re
comfortable using another model as a judge?
20.04
A lot of this usually depends on how much data you have to train
your judge, right? I feel humans have this problem, which is:
Sometimes you can do a task but you can’t explain why you
arrived at that decision in a very structured format. I can today
take a look at an article and tell you. . . Especially, I
write a lot on Substack and LinkedIn; this is a very super personal
use case. If you give me an article and ask me, “Ash, will
this go viral on LinkedIn?” I can tell you yes or no for my
profile right, because I’ve done it for so many years. But if
you ask me, “How did you make that decision?” I
probably cannot codify it and write it down as a bunch of rubrics.
Which is again, when you translate this to an LLM judge, “Can
I build an LLM that can tell me if a post will go viral or
not?” Maybe not because I just don’t have all the
constraints that I use as a human when I make decisions.
Now, take this to more production-like use cases or enterprise-like use cases. You want to have a human judge until you can codify or you can create a framework of how to evaluate something and you can write that out in natural language. And what that means is you maybe want to take 100 or 200 utterances and say, “OK, does this make sense? What’s the reasoning behind why I graded it a certain way?” And you can feed all of that information into your LLM judge to finally give it a set of rubrics and build your evals. But that’s kind of how you make a decision, which is “Do we have enough information to provide to an LLM judge that it can replace human judgment?”
But otherwise don’t do it—if you have very vague high-level ideas of what good looks like, you probably don’t want to go to an LLM judge. Even when building your systems, I would always recommend that your first pass when you’re doing your eval should be judged by a human, and you should also ask them to give you reasoning as to why they judge it because that reasoning is so important for training your LLM judges.
21.58
What are some signs that you look for? What are
signals that you look for when one of these AI applications or
systems go live? What are some of the signals you look for that
[show] maybe the quality is degrading or breaking
down?
22.18
It really depends on the use case, but there are a lot of subtle
signals that users will give you, and you can log them, right?
Things like “Are users swearing at your product?”
That’s something we always use, right? “What kind of
words are they using? How many conversation turns if it’s a
chatbot, right?” Usually when you’re building your
chatbot, you identify that the average number of turns is 10, but
it turns out that customers are having only two turns of
conversation. That kind of means that they’re not interested
to talk to your chatbot. Or sometimes they’re having 20
conversations, which means they’re probably annoyed, which is
why they’re having longer conversations.
There are typical things: You know, ask your user to give a thumbs up or thumbs down and all of that, but we know that feedback kind of doesn’t. . . People don’t give feedback unless they’re annoyed at something. So you can have those as well. If you’re building something like a coding agent like Claude Code etc., very obvious logging you can do is “Did the user go and change the code that it generated?” which means it’s wrong. So it’s very specific to your context, but really think of ways you can log all of this behavior you can log anomalies.
Sometimes just getting all of these logs and doing some topic clustering which is “What are our users typically talking about, and do any of those show signs of frustration? Do they show signs of being annoyed with the system?” and things like that. You really need to understand your workflows very well so that you can design these monitoring strategies.
23.50
Yeah, it’s interesting because I was just on
a chatbot for an airline, and I was surprised how bad it was, in
the sense that it felt like a chatbot of the pre-LLM era. So give
us give us kind of your sense of “Are these chatbots now
really being powered by foundation models or. . .?”
I mean because I was just shocked, Aishwarya, about how bad it was,
you know? So what’s your sense of, as far as you know, are
enterprises really deploying these generative AI foundation models
in consumer-facing apps?
24.41
Very few. To just give you a quick stat that might not be super
correct: 70% to 80% of the engagements that we take up at LevelUp
Labs happen to be productivity and ops focused rather than customer
focused. And the biggest blocker for that has always been trust and
reliability, because if you build these customer-facing agents
[and] they make one mistake, it’s enough to put you on news
media or enough to put you in bad PR.
But I think what good companies are doing as of today is doing a phased approach, which is they have already identified buckets that can be completely autonomous versus buckets that would require humans to navigate, right? Like this example that you gave me, as soon as a user comes up with a query, they have a triaging system that would determine if it should go to an AI agent versus a human, depending on the history of the user, depending on the kind of query. (Is it complicated enough?) Right? Let’s say Ben has this history of. . .
25.44
Hey, hey, I had great status on this
airline.
25.47
[laughs] Yeah. So it’s probably not you, but just the kind of
query you’re coming up with and all of that. So they’ve
identified buckets where automation is possible, and they’re
doing it, and they’ve done that because of past behavior
data, right? What are low-hanging fruits that we could automate
versus escalate to humans. I have not seen a lot of these chat
systems that are completely taken over by agents. There’s
always some human oversight and very good orchestration mechanisms
to make sure that customers are not affected.
26.16
So you mentioned that you mostly are in the technical and
ops application areas, but I’ll ask you this question anyway.
To what extent do legal things come up? In other words, I’m
about to deploy this model. I know I have guardrails, but honestly,
just between you and me, I haven’t gone through the proper
legal evaluation, you know? [laughs] So in other words, legality or
compliance—anything to do with laws—do they come up at
all in your discussions with companies?
26.59
As an external implementation team, I think one thing that we do
with most companies is give them a high-level overview of the
architecture we’ll be building, the requirements, and ask
them to do a security and legal review so that they’re okay
with it, because we’ve had experiences in the past where we
pretty much built out everything and then you have your CISO come
in and say, “OK, this doesn’t fall into what we could
deploy.” So many companies make that mistake of not really
involving your governance and compliance folks in the beginning and
then end up scrapping entire projects.
I am not an expert who knows all of these rules and legalities, but we always make sure that they understand: “Where is the data coming from? Do we have any issues productionizing this?” and all of that, but we haven’t really worked. . . I mean I don’t have a lot of background on how to do this. We’re mostly engineering folks, but we make sure that we have a sign-off so that we are not kind of landing in surprises.
28.07
Yeah, the reason I bring it up is obviously, now that
everything is much more democratized, more people can
build—so in reality the people can move fast and break things
literally, right? So I just wonder if there’s any discussion
at all. It sounds like you are proactive, but mostly out of
experience, but I wonder if regular teams are talking about
this.
Speaking of which, you brought up earlier leaderboards—obviously I’m guilty of this too: “I’m about to build something. OK, let me look at a leaderboard.” But, you know, I’m not literally going to take the leaderboard’s advice, right? I’m going to still kick the tires on the specific application and use case. But I’m sure though, in your conversations, people tell you all sorts of things like, “Hey, we should use this because I saw somewhere that this is ranked number one,” right? So is this still a frustration on your end, or are people much more savvy now?
29.19
For one, I want to quickly clarify that it’s not wrong to
look at a leaderboard. It’s always. . . You know,
you get a high-level idea of “Who are your best competitors
at this point?” But what I have a problem with is being so
obsessed with just that leaderboard that you don’t build
evals for yourself.
29.34
In my experience, when we work with a lot of these companies, I
think over the past two years the discussion has really shifted
away from the model because of two reasons: One is most companies
already have existing partnerships. They’re either working
with a major model provider vendor and they’re OK doing that
now just because all of these model providers are racing towards
feature parity, leaderboard success, and all of that. If Anthropic
has something, you know, if their model is performing well on a
leaderboard today, Gemini and OpenAI will probably be there in a
week. So people are not too concerned about model performance. They
know that in a couple of weeks, that will kind of be built into
other models. So they’re not worried about that.
And two is companies are also thinking much more about the application layer right now. There’s so much discussion around all of these harnesses like Claude Code, OpenClaw, and stuff like that. So I’ve not seen a lot of complaints on “Oh, this is the model that we should be using.” It seems like they have a shared understanding of how models perform. They want to optimize the harness and the application layer much more.
30.48
Yeah. Yeah. Obviously another one of these buzzwords is
“harness engineering,” and whatever you think about it,
the one good thing is it really elevates the notion that you should
worry about the things around the model rather than the model
itself.
But speaking of. . . I guess I’m kind of old school in the sense that I want to still make sure that I can swap models out, not necessarily because I believe one model is better than the other but one model may be cheaper than the other, right?
And at least up until recently—I haven’t had
this conversation in a while—it seemed to me that people got
stuck on a model because their prompts were so specific for a model
that porting to another model seemed like a lot of work. But
nowadays though you have tools like DSPy and GEPA that it seems
like you can do that more easily. So what’s your sense of
model portability as a design principle—model
neutrality?
32.06
For one, I think the gap between models is much more exaggerated
for consumer use cases just because people care quite a bit about
the personality, about how the model…
32.22
No, I care about latency and
cost.
32.24
Yeah. In terms of latency and cost, right, most of the model
providers pretty much are competing to make sure they are in the
market. I don’t know. Do you think that there are
models. . .
32.35
Well, I think that you can still get good deals
with Gemini. [laughs]
32.40
Interesting.
32.41
But honestly, I use OpenRouter and OpenCode. So,
I’m much more kind of I don’t want to get locked into a
single [model]. When I build something, I want to make sure that I
build in a way that I can move to a different model provider if I
have to. But it doesn’t sound like you think that this is
something that people worry about right now. They’re just
worried about building something usable and then we can worry about
that later.
33.12
Yes. And again, I come from a very enterprise point, like
“What are companies thinking about this?” And like I
said, I’m not seeing a lot of competition for model
neutrality because these companies have deals with vendors and
they’re okay sticking with the same model provider.
Now, when it comes to consumers, like if you’re building something for the kind of use cases that you were saying, Ben, I feel that, like I said, personality is super important for consumer builders. And I still think we’re not at a point where you can easily swap out models and be like, “OK, this is going to work as good as before,” just because you have over time learned how the model behaves. So you’ve kind of gotten calibrated with these models, and these models also have very specific personalities. So there’s a lot of you know reengineering that you have to do.
34.07
And when I say reengineering, it just might mean changing the way
your prompts are written and stuff like that. It will still
functionally work, which is why I say that enterprises don’t
care about this much because the kind of use cases I see are like
document processing or code generation, in which case functionality
is of much more importance than personality. But for consumer use
cases, I don’t think we’re at a point—to your
point on building with OpenRouter, you can do that, but I think
it’s a lot of overhead given that you’ll have to write
specific prompts for all of these models depending on your use
case.
I recently ported my OpenClaw from Anthropic to OpenAI because of all of the recent things, and I had to change all of my SOUL.md files, USER.md files, so that I could kind of set the behavior. And it [took] quite some time to do it, and I’m still getting used to interacting with OpenClaw using OpenAI because it seems like it makes different mistakes than what Anthropic would do.
35.03
So hopefully at some point [the] personalities of these models will
converge but I do not think so because this is not a capability
problem. It’s more of design choices that these model
providers have made while building these models. So I don’t
see a time where. . . We’re already at a point
where capability-wise most models are getting closer, but
personality-wise I don’t think model vendors would prefer to
converge them because these are kind of your spiky edges which will
make people with a certain personality gravitate towards your
models. You don’t want to be making it like an average.
35.38
So in closing, you do a bit of teaching as well, right? One
of the things I’ve really paid attention to is, in my
conversations with people who are very, very early in their career,
maybe still looking for the first job, literally, there’s a
lot of worry out there. I mean, not necessarily if you’re a
developer and you have a job—as long as you embrace the AI
tools, you’re probably going to be fine. It’s just
getting to that first job is getting harder and harder for
people.
And unfortunately, you need that first job to burnish
your credentials and your résumé. And honestly companies
also I think neglect the fact that this is your pipeline for talent
within the company as well: You have to have the top of the funnel
of your talent pipeline. So what advice do you give to people who
are literally still trying to get to that first job?
36.51
For one, I have had a lot of success with hiring young folks
because I think they are very agent native. I call them like
agent-native operators. If you’ve been working in software,
in IT, for about 10 years or something like me, you’ve gotten
used to certain workflows without using AI. I feel like we’re
so stuck in that old mindset that I really need someone who’s
agent native to come and tell me, “Hey you could literally
ask Claude Code to do this.” So I’ve had a lot of luck
hiring folks who are early career because they are very coachable,
one, and two, they just understand how to be agent
native.
So my suggestion would still be around that: Be a tinkerer. Try to find out what you can do with these tools, how you can automate them, and be extremely obsessed with designing and thinking and not really execution, right? Execution is kind of being taken over by agents.
So how do you really think about “What can I delegate?” versus “What can I augment?” and really sitting in the position of almost being an agent manager and thinking “How can you set up processes so that you can make end-to-end impact?” So just thinking a lot around those lines—and those are the kind of people that we’d like to hire as well.
And if you see a lot of these latest job roles ,you’ll also see roles blurring, right? People who are product managers are expected to also do GTM, also do a bit of engineering, and all of that. So really understand the stack end to end. And the best way to do it, I feel, is build a product of your own [and] try to sell it. You’ll get to see the whole thing. [That] doesn’t mean “Oh, stop looking for jobs—go become an entrepreneur” but really understanding workflows end to end and making that impact and sitting at the design layer will be super valued is what I think.
38.34
Yeah, the other thing I tell people is you have
interests so go deep in your interest and build something in
whatever you’re interested in. Domain knowledge is going to
be valuable moving forward, but also you end up building something
that you would want to use yourself and you learn a lot of things
along the way and then maybe that’s how you get your name out
there, right?
38.59
Exactly. Solving for your own problem is the best advice: Try to
build something that solves your own pain point. Try to also
advocate for it. I feel like social media and all of this is so
good at this point that you can really make a mark in
nontraditional ways. You probably don’t even have to submit a
job application. You can have a GitHub repository that gets a lot
of stars—that might land you a job. So think of all of these
ways to bring yourself more visibility as you build so that you
don’t have to go through your typical job queue.
39.30
And with that, thank you, Aishwarya.
39.32
Thank you.
CodeSOD: We'll Hire Better Contractors Next Time, We Promise [The Daily WTF]
Nona writes: "this is the beginning of a 2100 line function."
That's bad. Nona didn't send us the entire JavaScript function, but sent us just the three early lines, which definitely raise concerns:
if (res.length > 0) {
await (function () {
return new Promise((resolve, reject) => {
We await a synchronous function which retuns a promise, passing a function to the promise. As a general rule, you don't construct promises directly, you let asynchronous code generate them and pass them around (or await them). It's not a thing you never do, but it's certainly suspicious. It gets more problematic when Nona adds:
This function happens to contain multiple code repetition snippets, including these three lines.
That's right, this little block appears multiple times in the
function, inside of anonymous function getting passed to
the Promise.
No, the code does not work in its current state. It's unclear what the 2100 line function was supposed to do. And yes, this was written by lowest-bidder third-party contractors.
Nona adds:
I am numb at this point and know I gotta fix it or we lose contracts
Management made the choice to "save money" by hiring third parties, and now Nona's team gets saddled with all the crunch to fix the problems created by the "savings".
WordPress is a monoculture [Scripting News]
I've been designing and developing software like WordPress for over thirty years. I have stong opinions about where the product should have gone, but mostly I've not been talking about that, because I don't want to interfere with what Matt is doing.
I've known him since he was a teenager in Silicon Valley, a boy wonder to whom the web has always been there, whereas to people my age, it was a miracle that came along to put down all the dominant BigCo's who made it impossible for individuals to create.
But I've never believed in open source the way Matt does, as I explained last week. I think there needs to be competition in the writer's UI for WordPress, and in all other areas of the user interface. I think that's what it suffers from. There isn't enough diversity. Creativity is crowded into a very small space, plug-ins. Because there's an API that covers the full functionality of product, there's no technical reason it has to be this way. I believe in competition, because it encourages listening. People don't listen to their friends, I've discovered, but people do listen to their competitors.
The community is paralyzed, it can't fix basic problems that have been there forever. Gutenberg was a good idea for a site designer and a not-good approach for writers. But it should always be a choice for writers, if they like Gutenberg. There should be no single recommended editor for WordPress.
Imho, there are ways to navigate this landscape, but it's going to require immediate and radical restructuring.
WordPress is not the last hope of the web and the web is not going to disappear in our lifetimes. Everything is built on it. People who say it's about to disappear are alarmist purveyors of clickbait. You'll still be able to ship apps for the web five and ten years from now. But WordPress is an important part of the web, and I don't mean because it runs a certain percentage of all the sites, which is imho a meaningless stat. It's a uniquely valuable API and an implementation that's debugged and scales and is profitable, and can sustain a large organization supporting it. It's one of those things we could lose, but we'd be much poorer if that happened.
WordPress is unique in the products that came to us from Silicon Valley. It's universally useful and it doesn't lock you in.
If a product like EmDash were to be the successor it claims to be, well there goes all the open stuff, because I don't think they have it in their blood the way Matt and WordPress do.
My conclusion after being a software developer since the early days of Unix and personal computers, and at times being part of the Silicon Valley -- there have to be a variety of UIs for WordPress, where all our work is compatible, regardless of what our tools look like, the approaches for users could be radically different. It's been a monoculture, and imho that's the problem. Break it apart, yet retain the compatibility -- that's the most powerful position possible in tech.
PS: After writing this piece, I looked for early references to Matt on my blog, and came across this piece he wrote in 2006. He totally understood what was going on in RSS land. Here's another Matt post from 2010, which after reading I concluded that he saw WordPress as I saw it and still do, as the rightful heir to the legacy of Twitter. And Matt and team did develop the API he talks about in 2010 as hypothetical, it's there now, ready to lead us out of the darkness.
[$] The first half of the 7.1 merge window [LWN.net]
The 7.1 merge window opened on April 12 with the release of the 7.0 kernel. Since then, 3,855 non-merge changesets have been pulled into the mainline repository for the next release. This merge window is thus just getting started, but there has still been a fair amount of interesting work moving into the mainline.
KDE Gear 26.04 released [LWN.net]
Version
26.04 of the KDE Gear collection of applications has been
released. Notable changes include improvements in the Merkuro Calendar schedule view
and event editor, support for threads in the NeoChat Matrix chat client, as
well as the ability to add keyboard shortcuts in the Dolphin file manager "to
nearly any option in any menu, plugin or extension
". See the
changelog
for a full list of updates, enhancements, and bug fixes.
Security updates for Thursday [LWN.net]
Security updates have been issued by AlmaLinux (bind, bind9.16, bind9.18, cockpit, fence-agents, firefox, fontforge, git-lfs, grafana, grafana-pcp, kernel, nghttp2, nginx, nginx:1.24, nginx:1.26, nodejs:20, nodejs:22, nodejs:24, pcs, perl-XML-Parser, perl:5.32, resource-agents, squid:4, thunderbird, and vim), Debian (incus, lxd, and python3.9), Fedora (cef, composer, erlang, libpng, micropython, mingw-openexr, moby-engine, NetworkManager-ssh, perl, perl-Devel-Cover, perl-PAR-Packer, polymake, pypy, python-cairosvg, python-flask-httpauth, and python3.15), Mageia (kernel, kmod-virtualbox, kmod-xtables-addons and kernel-linus), Oracle (\cockpit, bind, bind9.16, bind9.18, firefox, git-lfs, go-toolset:ol8, grafana, grafana-pcp, grub2, kea, kernel, libtiff, nghttp2, nginx, nginx:1.24, nginx:1.26, nodejs22, nodejs24, nodejs:22, nodejs:24, perl-XML-Parser, python3.9, thunderbird, uek-kernel, and vim), Red Hat (delve, go-toolset:rhel8, golang, golang-github-openprinting-ipp-usb, osbuild-composer, and rhc), SUSE (bind, Botan, cockpit, cockpit-subscriptions, expat, flatpak, glibc, goshs, himmelblau, kea, kernel, kubo, libpng16, libssh, log4j, mariadb, Mesa, netty, netty-tcnative, nfs-utils, nghttp2, nodejs20, openssl-3, pam, pcre2, python, python310, python311, python311-aiohttp, python311-rfc3161-client, python313, python36, rubygem-bundler, sqlite3, sudo, tigervnc, tomcat, tomcat10, tomcat11, util-linux, vim, and webkit2gtk3), and Ubuntu (dotnet8, dotnet9, dotnet10, frr, and linux-azure, linux-azure-4.15).
WordPress has remained mostly constant for its whole life, at least from the point of view of this outsider. But now the world its embedded in is turning upside down and WordPress must change, but no one really knows how that change will manifest.
The opmlProjectEditor explainer needed a light edit. It should make a lot more sense now if you're a newcomer. Perhaps the most important thing is that it now includes an example that you can open in Drummer to see how it works in an outline editor. OPML has become a really important format for apps that use RSS, but it's far more broadly adaptable. It's a good package for a whole app, and you can teach your tools to use the common structure to make it easier to share it with others, to keep a repo current, and to deploy the resulting code.
Tim Bradshaw: Structures of arrays [Planet Lisp]
Or, second system.
A while ago, I decided that I’d like to test my intuition that Lisp (specifically implementations of Common Lisp) was not, in fact, bad at floating-point code and that the ease of designing languages in Lisp could make traditional Fortran-style array-bashing numerical code pretty pleasant to write.
I used an intentionally naïve numerical solution to a gravitating many-body system as a benchmark, so I could easily compare Lisp & C versions. The brief result is that the Lisp code is a little slower than C, but not much: Lisp is not, in fact, slow. Who knew?
The point here though, is that I wanted to dress up the array-bashing code so it looked a lot more structured. To do this I wrote a macro which hid what was in fact an array of (for instance) double floats behind a bunch of syntax which made it look like an array of structures. That macro took a couple of hours.
This was fine and pretty simple, but it only dealt with a single type for each conceptual array of objects, there was no inheritance and it was restricted in various other ways. In particular it really was syntactic sugar on a vector: there was no distinct implementational type at all. So I thought well, I could make it more general and nicer.
Big mistake.
Here is an example of what I wanted to be able to do (this is in fact the current syntax):
(define-soa-class example ()
((x :array t :type double-float)
(y :array t :type double-float)
(p :array t :type double-float :group pq)
(q :array t :type double-float :group pq)
(r :array t :type fixnum)
(s)))
This defines a class, instances of which have five array slots and one scalar slot. Of the array slots:
x and y share an array and will be
neighbouring elements;p and q share a different array,
because the group option says they must not share with
x and y;r will be in its own array, unless the upgraded
element type of fixnum is the same as that of
double-float;s is just a slot.The implementation will tell you this:
> (describe (make-instance 'example :dimensions '(2 2)))
#<example 8010059EEB> is an example
[...]
dimensions (2 2)
total-size 4
rank 2
tick 1
its class example has a valid layout
it has 3 arrays:
index 0, element type double-float, 2 slots
index 1, element type (signed-byte 64), 1 slot
index 2, element type double-float, 2 slots
it has 5 array slots:
name x, index 0 offset 0
name y, index 0 offset 1
name r, index 1 offset 0
name p, index 2 offset 0
name q, index 2 offset 1
This is already too complicated: the ability to control sharing via groups is almost certainly never going to be useful: it’s only even there because I thought of it quite early on and never removed it.
The class definition macro then needs to arrange life so that enough information is available so that a macro can be written which turns indexed slot access into indexed array access of the underlying arrays which are secretly stored in instances, inserting declarations to make this as fast as possible: anything slower than explicit array access is not acceptable. This might (and does) look like this, for example:
(with-array-slots (x y) (thing example)
(for* ((i ...) (j ...))
(setf (x i j) (- (y i j) (y j i)))))
As you can see from this, the resulting objects should be allowed to have rank other than 1. Inheritance should also work, including for array slots. Redefinition should be supported and obsolete macro expansions and instances at least detected.
In other words there are exactly two things I should have aimed at achieving: the ability to define fields of various types and have them grouped into (generally fewer) underlying arrays, and an implementational type to hold these things. Everything else was just unnecessary baggage which made the implementation much more complicated than it needed to be.
I had not finished making mistakes. The system needs to store
some metadata about how slots map onto the underlying arrays,
element types and so on, so the macro can use this to compile
efficient code. There are two obvious ways to do this: use the
property list of the class name, or subclass
standard-class and store the metadata in the class.
The first approach is simple, portable, has clear semantics, but
it’s ‘hacky’; the second is more complicated, not
portable, has unclear semantics1,
but it’s The Right Thing2.
Another wrong decision I made without even trying.
The only thing that saved me was that the nature of software is that you can only make a finite number of bad decisions in a finite time.
I was not done. Early on, I thought that, well, I could make
this whole thing be a shim around defstruct: single
inheritance was more than enough, and obviously I could store
metadata on the property list of the type name as described above.
And there’s no nausea with multiple accessors or any of that
nonsense.
But, somehow, I found writing a thing which would process the
(structure-name ...) case of defstruct
too painful, so I decided to go for the
shim-around-defclass version instead. I even have a
partly-complete version of the defstructy code which I
abandoned. Another mistake.
I also decided that The Right Thing was to have the system support objects of rank 0. That constrains the underlying array representation (it needs to use rank \(n+1\) arrays for an object of rank \(n\)) in a way which I thought for a long time might limit performance.
At any point during the implementation of this I could have told you that it was too general and the implementation was going to be too complicated for no real gain. I don’t know why I made so many bad choices.
The whole process took weeks and I nearly just gave up several times.
Or: all-up testing.
Eventually, I had a thing I thought might work. The macro syntax was a bit ugly (that macro still exists, with a different name) but it seemed to work. But since the whole purpose of the thing was performance, that needed to be checked. I wasn’t optimistic.
What I did was to write a version of my naïve gravitational many-body system using the new code, based closely on the previous one. The function that updates the state of the particles looks like this:
(defun/quickly step-pvs (source destination from below dt G &aux
(n (particle-vector-length source)))
;; Step a source particle vector into a destination one.
;;
;; Operation count:
;; 3
;; + (below - from) * (n - 1) * (3 + 8 + 9)
;; + (below - from) * (12 + 6)
;; = (below - from) * (20 * (n - 1) + 18) + 3
(declare (type particle-vector source destination)
(type vector-index from)
(type vector-dimension below)
(type fpv dt G)
(type vector-dimension n))
(when (eq source destination)
(error "botch"))
(let*/fpv ((Gdt (* G dt))
(Gdt^2/2 (/ (* Gdt dt) (fpv 2.0))))
(binding-array-slots (((source particle-vector :check nil :rank 1 :suffix _s)
m x y z vx vy vz)
((destination particle-vector :check nil :rank 1 :suffix _d)
m x y z vx vy vz))
(for ((i1 (in-naturals :initially from :bound below :fixnum t)))
(let/fpv ((ax/G zero.fpv)
(ay/G zero.fpv)
(az/G zero.fpv)
(x1 (x_s i1))
(y1 (y_s i1))
(z1 (z_s i1))
(vx1 (vx_s i1))
(vy1 (vy_s i1))
(vz1 (vz_s i1)))
(for ((i2 (in-naturals n t)))
(when (= i1 i2) (next))
(let/fpv ((m2 (m_s i2))
(x2 (x_s i2))
(y2 (y_s i2))
(z2 (z_s i2)))
(let/fpv ((rx (- x2 x1))
(ry (- y2 y1))
(rz (- z2 z1)))
(let/fpv ((r^3 (let* ((r^2 (+ (* rx rx) (* ry ry) (* rz rz)))
(r (sqrt r^2)))
(declare (type nonnegative-fpv r^2 r))
(* r r r))))
(incf ax/G (/ (* rx m2) r^3))
(incf ay/G (/ (* ry m2) r^3))
(incf az/G (/ (* rz m2) r^3))))))
(setf (x_d i1) (+ x1 (* vx1 dt) (* ax/G Gdt^2/2))
(y_d i1) (+ y1 (* vy1 dt) (* ay/G Gdt^2/2))
(z_d i1) (+ z1 (* vz1 dt) (* az/G Gdt^2/2)))
(setf (vx_d i1) (+ vx1 (* ax/G Gdt))
(vy_d i1) (+ vy1 (* ay/G Gdt))
(vz_d i1) (+ vz1 (* az/G Gdt)))))))
destination)
And it not only worked, the performance was very close to the previous version, straight out of the gate. The syntax is not as nice as that of the initial, quick-and-dirty version, but it is much more general, so I think that’s worth it on the whole.
There have been problems since then: in particular the dependency on when classes get defined. It will never be as portable as I’d like because of the unnecessary MOP dependencies3, but it is usable and quick4.
Was it worth it? May be, but it should have been simpler.
When exactly do classes get defined? Right. ↩
Nothing that uses the AMOP MOP is ever The Right Thing, because the whole thing was designed by people who were extremely smart, but still not as smart as they needed to be and thought they were. It’s unclear if any MOP for CLOS can ever be satisfactory, in part because CLOS itself suffers from the same smart-but-not-smart-enough problem to a large extent not helped by bring dropped wholesale into CL at the last minute: by the time CL was standardised people had written large systems in it, but almost nobody had written anything significant using CLOS, let alone the AMOP MOP. ↩
A mistake I somehow managed to avoid was using the whole slot-definition mechanism the MOP wants you to use. ↩
I will make it available at some point. ↩
Pluralistic: A Pascal's Wager for AI Doomers (16 Apr 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

Lest anyone accuse me of bargaining in bad faith here, let me start with this admission: I don't think AI is intelligent; nor do I think that the current (admittedly impressive) statistical techniques will lead to intelligence. I think worrying about what we'll do if AI becomes intelligent is at best a distraction and at worst a cynical marketing ploy:
https://locusmag.com/feature/cory-doctorow-full-employment/
Now, that said: among some of the "AI doomers," I recognize kindred spirits. I, too, worry about technologies controlled by corporations that have grown so powerful that they defy regulation. I worry about how those technologies are used against us, and about how the corporations that make them are fusing with authoritarian states to create a totalitarian nightmare. I worry that technology is used to spy on and immiserate workers.
I just don't think we need AI to do those things. I think we should already be worried about those things.
Last week, I had a version of this discussion in front of several hundred people at the Bronfman Lecture in Montreal, where I appeared with Astra Taylor and Yoshua Bengio (co-winner of the Turing Prize for his work creating the "deep learning" techniques powering today's AI surge), on a panel moderated by CBC Ideas host Nahlah Ayed:
https://www.eventbrite.ca/e/artificial-intelligence-the-ultimate-disrupter-tickets-1982706623885
It's safe to say that Bengio and I mostly disagree about AI. He's running an initiative called "Lawzero," whose goal is to create an international AI consortium that produces AI as a "digital public good" that is designed to be open, auditable, transparent and safe:
Bengio said he'd started Lawzero because he was convinced that AI was going to get a lot more powerful, and, in the absence of some public-spirited version of AI, we would be subject to all kinds of manipulation and surveillance, and that the resulting chaos would present a civilizational risk.
Now, as I've stated (and as I said onstage) I am not worried about any of this. I am worried about AI, though. I'm worried a fast-talking AI salesman will convince your boss to fire you and replace you with an AI that can't do your job (the salesman will be pushing on an open door, since if there's one thing bosses hate, it's paying workers).
I'm worried that the seven companies that comprise 35% of the S&P 500 are headed for bankruptcy, as soon as someone makes them stop passing around the same $100b IOU while pretending it's in all their bank accounts at once. I'm worried that when that happens, the chatbots that badly do the jobs of the people who were fired because of the AI salesman will go away, and nothing and no one will do those jobs. I'm worried that the chaos caused by vaporizing a third of the stock market will lead to austerity and thence to fascism:
https://pluralistic.net/2026/04/13/always-great/#our-nhs
I worry that the workers who did those jobs will be scattered to the four winds, retrained or "discouraged" or retired, and that the priceless process knowledge they developed over generations will be wiped out and we will have to rebuild it amidst the economic and political chaos of the burst AI bubble:
https://pluralistic.net/2026/04/08/process-knowledge-vs-bosses/#wash-dishes-cut-wood
In short, I worry that AI is the asbestos we're shoveling into our civilization's walls, and our descendants will be digging it out for generations:
https://pluralistic.net/2026/01/06/1000x-liability/#graceful-failure-modes
But Bengio disagrees. He's very smart, and very accomplished, and he's very certain that AI is about to become "superhuman" and do horrible things to us if we don't get a handle on it. Several times at our events, he insisted that the existence of this possibility made it wildly irresponsible not to take measures to mitigate this risk.
Though I didn't say so at the time, this struck me as an AI-inflected version of Pascal's wager:
A rational person should adopt a lifestyle consistent with the existence of God and should strive to believe in God… if God does not exist, the believer incurs only finite losses, potentially sacrificing certain pleasures and luxuries; if God does exist, the believer stands to gain immeasurably, as represented for example by an eternity in Heaven in Abrahamic tradition, while simultaneously avoiding boundless losses associated with an eternity in Hell.
https://en.wikipedia.org/wiki/Pascal%27s_wager
Smarter people than me have been poking holes in Pascal's wager for more than 350 years. But when it comes to this modern Pascal's AI Wager, I have my own objection: how do you know when you've lost?
As of this moment, the human race has lit more than $1.4t on fire to immanentize this eschaton, and it remains stubbornly disimmanentized. How much more do we need to spend before we're certain that god isn't lurking in the word-guessing program? Sam Altman says it'll take another $2-3t – call it six months' worth of all US federal spending. If we do that and we still haven't met god, are we done? Can we call it a day?
Not according to Elon Musk. Musk says we need to deconstruct the solar system and build a Dyson sphere out of all the planets to completely encase the sun, so we can harvest every photon it emits to power our word-guessing programs:
https://www.pcmag.com/news/elons-next-big-swing-dyson-sphere-satellites-that-harness-the-suns-power
So let's say we do that and we still haven't met god – are we done? I don't see why we would be. After all, Musk's contention isn't that our sun emits one eschaton's worth of immanentizing particles. Musk just thinks that we need a lot of these sunbeams to coax god into our plane of existence. If one sun won't do it, perhaps two? Or two hundred? Or two thousand? Once we've committed the entire human species to this god-bothering project to the extent of putting two kilosuns into harness, wouldn't we be nuts to stop there? What if god is lurking in the two thousand and first sun? Making god out of algorithms is like spelling "banana" – easy to start, hard to stop.
But as Bengio and I got into it together on stage at the Montreal Centre, it occurred to me that maybe there was some common ground between us. After all, when someone starts talking about "humane technology" that respects our privacy and works for people rather than their bosses, my ears grow points. Throw in the phrase "international digital public goods" and you've got my undivided attention.
Because there's a sense in which Bengio and I are worried about exactly the same thing. I'm terrified that our planet has been colonized by artificial lifeforms that we constructed, but which have slipped our control. I'm terrified that these lifeforms corrupt our knowledge-creation process, making it impossible for us to know what's true and what isn't. I'm terrified that these lifeforms have conquered our apparatus of state – our legislatures, agencies and courts – and so that these public bodies work against the public and for our colonizing alien overlords.
The difference is, the artificial lifeforms that worry me aren't hypothetical – they're here today, amongst us, endangering the very survival of our species. These artificial lifeforms are called "limited liability corporations" and they are a concrete, imminent risk to the human race:
https://pluralistic.net/2026/04/15/artificial-lifeforms/#moral-consideration
What's more, challenging these artificial lifeforms will require us to build massive, "international, digital public goods": a post-American internet of free/open, auditable, transparent, enshittification-resistant platforms and firmware for every purpose and device currently in service:
https://pluralistic.net/2026/01/01/39c3/#the-new-coalition
And even after we've built that massive, international, digital public good, we'll still face the challenge of migrating all of our systems and loved ones out of the enshitternet of defective, spying, controlling American tech exports:
https://pluralistic.net/2026/01/30/zucksauce/#gandersauce
Every moment that we remain stuck in the enshitternet is a moment of existential risk. At the click of a mouse, Trump could order John Deere to switch off all the tractors in your country:
https://pluralistic.net/2022/05/08/about-those-kill-switched-ukrainian-tractors/
He doesn't need tanks to steal Greenland. He can just shut off Denmark's access to American platforms like Office365, iOS and Android and brick the whole damned country. It would be another Strait of Hormuz, but instead of oil and fertilizer, he'd control the flow of Lego, Ozempic and deliciously strong black licorice:
https://pluralistic.net/2026/01/29/post-american-canada/#ottawa
These aren't risks that could develop in the future. They're the risks we're confronted with today and frankly, they're fucking terrifying.
So here's my side-bet on Pascal's Wager. If you think we need to build "international digital public goods" to head off the future risk of a colonizing, remorseless, malevolent artificial lifeform, then let us agree that the prototype for that project is the "international digital public goods" we need right now to usher in the post-American internet and save ourselves from the colonizing, remorseless, malevolent artificial lifeforms that have already got their blood-funnels jammed down our throats.
Once we defeat those alien invaders, we may find that all the people who are trying to summon the evil god have lost the wherewithal to do so, and your crisis will have been averted. But if that's not the case and the evil god still looms on our horizon, then I will make it my business to help you mobilize the legions of skilled international digital public goods producers who are still flush from their victory over the limited liability corporation, and together, we will fight the evil god you swear is in our future.
I think that's a pretty solid offer.

WORSE ON PURPOSE https://www.worseonpurpose.com/
How Viktor Orbán Bankrolled the Network Around Reform UK https://bylinetimes.com/2026/04/14/exposed-how-viktor-orban-bankrolled-the-network-around-reform-uk/
Two Visions https://www.hamiltonnolan.com/p/two-visions
Caught in the Crackdown: As Arrests at Anti-ICE Protests Piled Up, Prosecutions Crumbled https://www.propublica.org/article/caught-in-crackdown-ice-cbp-doj-trump-arrests-convictions
#25yrsago Every pirate ebook on the internet https://web.archive.org/web/20010724030402/https://citizen513.cjb.net/
#20yrsago Retired generals diss Donald Rumsfeld https://nielsenhayden.com/makinglight/archives/007432.html#007432
#20yrsago How to break HDCP https://blog.citp.princeton.edu/2006/04/14/making-and-breaking-hdcp-handshakes/
#20yrsago How Sun’s “open DRM” dooms them and all they touch https://memex.craphound.com/2006/04/14/how-suns-open-drm-dooms-them-and-all-they-touch/
#20yrsago Benkler's "Wealth of Networks" http://www.congo-education.net/wealth-of-networks/
#15yrsago Scientific management’s unscientific grounding: the Management Myth https://web.archive.org/web/20120823212827/https://www.theatlantic.com/magazine/archive/2006/06/the-management-myth/304883/
#15yrsago 216 “untranslatable” emotional words from non-English languages https://www.drtimlomas.com/lexicography/cm4mi/lexicography#!lexicography/cm4mi
#10yrsago New York public employees union will vote on pulling out of hedge funds https://web.archive.org/web/20160414230326/https://www.bloomberg.com/news/articles/2016-04-13/nyc-pension-weighs-liquidating-1-5-billion-hedge-fund-portfolio
#10yrsago Panama’s public prosecutor says he can’t find any evidence of Mossack-Fonseca’s lawbreaking https://web.archive.org/web/20160419165306/https://www.thejournal.ie/mossack-fonseca-prosecution-2714795-Apr2016/?utm_source=twitter_self
#10yrsago Bernie Sanders responds to CEOs of Verizon and GE: “I welcome their contempt” https://web.archive.org/web/20160415165051/https://www.businessinsider.com/bernie-sanders-verizon-contempt-2016-4
#10yrsago Let’s Encrypt is actually encrypting the whole Web https://www.wired.com/2016/04/scheme-encrypt-entire-web-actually-working/
#10yrsago City of San Francisco tells man he can’t live in wooden box in friend’s living room https://www.theguardian.com/us-news/2016/apr/13/san-francisco-new-home-rented-box-illegal?CMP=tmb_gu
#10yrsago How the UK’s biggest pharmacy chain went from family-run public service to debt-laden hedge-fund disaster https://www.theguardian.com/news/2016/apr/13/how-boots-went-rogue
#10yrsago Ohio newspaper chain owner says his papers don’t publish articles about LGBTQ people https://ideatrash.net/2016/04/the-owner-of-four-town-papers-in-ohio.html
#10yrsago How British journalists talk about people they’re not allowed to talk about https://web.archive.org/web/20160414152933/https://popbitch.com/home/2016/03/31/up-the-injunction/
#10yrsago Brussels terrorists kept their plans in an unencrypted folder called “TARGET” https://www.techdirt.com/2016/04/14/brussels-terrorist-laptop-included-details-planned-attack-unencrypted-folder-titled-target/
#10yrsago Ron Wyden vows to filibuster anti-cryptography bill https://www.techdirt.com/2016/04/14/burr-feinstein-officially-release-anti-encryption-bill-as-wyden-promises-to-filibuster-it/
#10yrsago Paramount wants to kill a fan-film by claiming copyright on the Klingon language https://torrentfreak.com/paramount-we-do-own-the-klingon-language-and-warships-160414/
#5yrsago Murder Offsets https://pluralistic.net/2021/04/14/for-sale-green-indulgences/#killer-analogy
#5yrsago The FCC wants your broadband measurements https://pluralistic.net/2021/04/14/for-sale-green-indulgences/#fly-my-pretties
#1yrago Machina economicus https://pluralistic.net/2025/04/14/timmy-share/#a-superior-moral-justification-for-selfishness

San Francisco: 2026 Berkeley Spring Forum on M&A and the
Boardroom, Apr 23
https://www.theberkeleyforum.com/#agenda
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
NYC: Enshittification at Commonweal Ventures, Apr 29
https://luma.com/ssgfvqz8
NYC: Techidemic with Sarah Jeong, Tochi Onyibuchi and Alia
Dastagir (PEN World Voices), Apr 30
https://worldvoices.pen.org/event/techidemic/
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI (The Strand),
Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
Launch for Cindy's Cohn's "Privacy's Defender" (City Lights)
https://www.youtube.com/watch?v=WuVCm2PUalU
Chicken Mating Harnesses (This Week in Tech)
https://twit.tv/shows/this-week-in-tech/episodes/1074
The Virtual Jewel Box (U Utah)
https://tanner.utah.edu/podcast/enshittification-cory-doctorow-matthew-potolsky/
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"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
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. Third draft completed. Submitted to editor.
"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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
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
Meet the Scope Creep Kraken [Radar]
The following article was originally published on Tim O’Brien’s Medium page and is being reposted here with the author’s permission.
If you’ve spent any time around AI-assisted software work,
you already know the moment when the Scope Creep
Kraken first puts a tentacle on the boat.
The project begins with a real goal and, usually, a sensible one. Build the internal tool. Clean up the reporting flow. Add the missing admin screen. Then someone discovers that the model can generate a Swift application in minutes to render this on an iPhone, and the mood in the room changes.
“Why not? We can render this on an iOS application, and it will only take 10 minutes. Go for it. These tools are amazing. Wow.”
That first idea is often genuinely useful. Something that might have taken a week now takes an hour. That is part of what makes the pattern so seductive. It doesn’t begin with incompetence. It begins with tool-driven momentum.
The meeting continues, “Let’s put the entire year’s backlog into the system and see if we can get this all done in a week. Ignore the token spend limits, let’s just get this done.” What was a reasonable weekly release meeting has now set the stage for a rapid expansion in scope, and that’s how the Scope Creep Kraken takes over.
Scope creep is older than AI, of course. Software teams have been haunted by “while we’re at it” long before anybody was pasting stack traces into a chat window. What AI changed was the rate of growth. In the old version of this problem, extra scope still had to fight its way through staffing constraints. Somebody had to build the feature, debug it, test it, and explain why it belonged. That friction was often the only thing standing between a focused project and an over-extended team.
AI broke that.
Now the extra feature often arrives with a demo attached. “Could we add multi-language support?” Forty-five seconds later, there is a branch. “What about generated documentation?” Sure, why not? “Could the CLI accept natural language commands?” The model appears optimistic, which is enough to make the whole thing sound temporarily reasonable. Each addition looks manageable in isolation. That is how the Kraken works. It does not attack all at once. It wraps around the project one small grip at a time.
The part I keep seeing on teams is not reckless ambition so much as confident improvisation. People are reacting to real capability. They are not wrong to be excited that so much is suddenly possible.
The trouble starts when “we can generate this quickly” quietly replaces “we decided this belongs in the project.” Those are not the same sentence.
For a while, the Kraken even looks helpful. Output goes up. Screens appear. Branches multiply. People feel productive, and sometimes they really are productive in the narrow local sense. What gets hidden in that burst of visible progress is integration cost. Every tentacle has to be tested with every other tentacle. Every generated convenience becomes a maintenance obligation. Every small addition pulls the project a little farther from the problem it originally set out to solve.
The product manager might chime in, “A mobile application? I didn’t ask for that, but I guess it’s good. We’ll see. Who’s going to review this with the customer?”
That is usually when the team realizes the Kraken is already on the boat. The original sponsor asked for a hammer and is now watching a Swiss Army knife unfold in real time, with several blades no one asked for and at least one that does not seem to fold back in properly.
AI also makes it dangerously easy to confuse demonstrations with decisions.
The useful response is not to become suspicious of every experiment. Some of the first tentacles are worth keeping. The response is to put the old discipline back where AI made it easy to remove. Keep a written scope. Treat additions as actual decisions rather than prompt side effects. Ask what each new feature does to testing, documentation, support, and the team’s ability to explain the system six months from now. If nobody can answer those questions, the feature is not “done” just because the model produced a convincing draft.
What makes the Scope Creep Kraken a good
name is one that teams can use in the moment. Once people can say,
“This is another tentacle,” the conversation gets
clearer. You are no longer arguing about whether the idea is
clever. You are asking whether this is motivated by a requirement
or a capability.
Human Trust of AI Agents [Schneier on Security]
Interesting research: “Humans expect rationality and cooperation from LLM opponents in strategic games.”
Abstract: As Large Language Models (LLMs) integrate into our social and economic interactions, we need to deepen our understanding of how humans respond to LLMs opponents in strategic settings. We present the results of the first controlled monetarily-incentivised laboratory experiment looking at differences in human behaviour in a multi-player p-beauty contest against other humans and LLMs. We use a within-subject design in order to compare behaviour at the individual level. We show that, in this environment, human subjects choose significantly lower numbers when playing against LLMs than humans, which is mainly driven by the increased prevalence of ‘zero’ Nash-equilibrium choices. This shift is mainly driven by subjects with high strategic reasoning ability. Subjects who play the zero Nash-equilibrium choice motivate their strategy by appealing to perceived LLM’s reasoning ability and, unexpectedly, propensity towards cooperation. Our findings provide foundational insights into the multi-player human-LLM interaction in simultaneous choice games, uncover heterogeneities in both subjects’ behaviour and beliefs about LLM’s play when playing against them, and suggest important implications for mechanism design in mixed human-LLM systems.
Grrl Power #1452 – Meat ugly [Grrl Power]
Honestly if Sydney had gotten an 11-alarm Indian dish like atomic lamb korma, her body might not have even noticed the meat. I like a little spice when I get Indian, or a little heat on my Thai Fried Rice or Pad See Ew, but honestly, it’s easy to cross a point where the heat gets to the point where you can’t really tell what you’re eating. Is it lamb korma or chicken korma? There’s usually a slight texture difference, but if the flavor is so overwhelming, that gets to be the only difference.
I’m sure there are tales of de-vegetarianizing out there. It’s probably best if done gradually. Sydney will have it relatively easy since fish and eggs and cheese are still a part of her diet. I imagine a vegan diving straight into a juicy burger would experience maximum distress. I’ve been on various diets in my life, including some very low fat ones, and I can tell you, 4-6 weeks of low fat followed by a cheat day starting with a big plate of bacon leads to… well, not-half-measures on the toilet.
Personally my favorite “diet” was busting my ass in the gym during my thirties, but I’ve fucked up my shoulders badly enough now that I can’t do about half the exercises I used to. I miss military press. :/
Finally, here we go! I took the suggestion that I
just use an existing panel for a starting point, thinking it would
save time… I guess it technically did, but a 5 character
vote incentive just isn’t the way to
go.
Patreon, of course, has actual topless version.
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
The definitive study of seed oil and health [Seth's Blog]
That’s the appeal of it, of course. There isn’t a definitive study. There can’t be.
Even if we created a forty-year-long, double-blind twin study, there’d be room for someone to ask “what about?…”
It doesn’t matter that the peer-reviewed and consistent results we have are clear to those who read them with an open mind.
The attraction of simple stories about complex phenomena is that we get to make them up and imbue them with whatever reassurance, solace or threat we choose. Human beings didn’t evolve to be rational decision makers. We’re creators and consumers of stories, seeking status and affiliation, and prioritizing short-term feelings over long-term evidence.
It’s nice when a story that’s precious to us is reinforced by evidence, but it’s rarely essential. Belief isn’t dependent on facts, that’s why we call it belief instead of facts.
It’s helpful to wonder who benefits from sharing a particular story with us, and what it costs us to believe it.
Iran's war-ending demands [Richard Stallman's Political Notes]
Iran's conditions for ending the war include big demands.
Sharing the control between Iran and Oman might make it more acceptable as a demand.
Response to Iran's demands [Richard Stallman's Political Notes]
The disagreement about what the supposedly agreed cease-fire with Iran requires has become sharp: Israel is back to bombing Lebanon and Iran has closed the straights of Hormuz again.
US threatens more bombing in Iran [Richard Stallman's Political Notes]
The temporary cease fire negotiations failed, so the monster is raging again and threatening attacks on Iran's vital civilian facilities, including water plants. Threats like that are just the thing to convince Iran's rulers they need nuclear weapons, like Mr Kim.
He also said the US would blockade the Straits of Hormuz, which basically repeats what Iran has already done, except that it would block Iran's oil exports as well as other countries' oil exports. Perhaps the two countries could take a step towards reconciliation by establishing joint patrols to make sure no oil exports travel through the straits ;-!
We would all be so much better off if the wrecker had not canceled the non-nuclear deal with Iran that Obama negotiated.
Israel bombing hospitals in Lebanon [Richard Stallman's Political Notes]
*Israel got away with targeting [medical facilities] in Gaza. It's no surprise it is doing it in Lebanon too.*
Israel destroys villages in Lebanon [Richard Stallman's Political Notes]
*Israel destroys entire villages in Lebanon.*
The Israel lobby in US [Richard Stallman's Political Notes]
AIPAC is disguising its campaign funding through organizations which in no way indicate their connection with AIPAC, or that they choose candidates based on their positions about Israel and Palestine.
As expected, the Democratic National Committee rejected a resolution to condemn the influence of AIPAC, and of dark money generally.
It is dominated by "moderate" (right-wing) Democrats, who serve the power of rich donors. Some rich donors are Zionists, and some are evangelical Christians, and they support Israel's injustice towards Palestinians.
Meanwhile, almost all of them demand to keep most of America's wealth flowing to the rich, by rejecting the New Deal policies that most Americans support.
Last month's US heatwave [Richard Stallman's Political Notes]
* The continental US registered its most abnormally hot month in 132 years of records.* And it will get worse and worse over the coming decades.
Oil pipelines as wanted [Richard Stallman's Political Notes]
It may be possible to negotiate peace between the US and Iran, but the bully still thinks he can get total victory through willingness to cause damage.
The Straits of Hormuz tollbooth can be very lucrative for Iran (and maybe Oman too) until someone builds a competing toll road. One of the Gulf states (Qatar?) has a pipeline that bypasses the straits and arrives at the open sea, but it can carry only a fraction of the total rate of export. Part of the UAE's shore is outside the straits but it isn't set up to do all its export through there.
After a few years of construction, Qatar and the UAE could arrange to export their whole production, bypassing the straits by a wide margin.
US Foreign Service-crippling effect [Richard Stallman's Political Notes]
Rubio decimated the US Foreign Service (at the wrecker's orders), firing (among others) the staff that had experience in organizing evacuations of American civilians from countries where war breaks out.
As a result, once the wrecker launched war against Iran and made an evacuation necessary, the US had no way to do it.
US still bombing little boats [Richard Stallman's Political Notes]
The Inter-American Commission on Human Rights was looking at the legality of the deadly US campaign of bombing boats in the Caribbean and the Pacific Ocean, but the US is now threatening to retaliate against it if it does that.
Justice Dept opposing justice [Richard Stallman's Political Notes]
The corrupter has perverted the Justice Department to work systematically for the opposite of justice. It is prosecuting Cassidy Hutchinson for testifying to Congress about the corrupter's involvement in the Jan 6 attack on the Capitol.
The idea is that prosecuting her for "lying to Congress" will lead magats to blindly assume her testimony was false.
Russian psych-war agents [Richard Stallman's Political Notes]
Russian psych-war agents are manipulating vulnerable Ukrainians to make and set off bombs near where they live.
To me it is incomprehensible that these efforts can succeed, but apparently they do.
Ocean food stocks dwindling, UK [Richard Stallman's Political Notes]
Too much fishing for cod and mackerel, around Britain, is driving the population to extinction.
Regulation of hunting and fishing is one of the classic examples of how everyone can benefit in the long term by having a state that can make and enforce limits. The sea tends naturally to be an unregulated commons, because each fisher or boat crew may catch as much as it can or will. If some catch at an unsustainable rate, eventually that species will disappear and they will all be the worse for the loss.
It is possible for fishers to make a social agreement and keep it without a state. Lobster fishers in Maine and Canada adopted the practice of marking the pregnant lobsters they catch and throwing them back; this averted a previous crisis. (See The Secret Life of the Lobster by Trevor Corson.) But this sort of voluntary measure is harder to establish than to imagine, especially when fishing involves a big investment in a boat. A state can save all the fishers (and all the people who eat fish) from the consequences of their own temptation.
That is, the state can do so if it has the moral strength to stand firm against the the short-term thinking of the fishers who lobby to be "allowed to catch more so they don't go broke next year."
They could not stay in business very long after wiping out the fish, but they kid themselves that this can't really happen — until it does. Cod near North America were almost wiped out, and after protection was set up, they have remained at a low population for decades despite the prohibition of catching them. Apparently, once the population gets far too low, protection is not sufficient. It needs to be done before the disaster.
The British government lacks that moral strength, and has lacked it for a long time. I wonder what the E&W Green Party says about this.
Emperor penguins in peril [Richard Stallman's Political Notes]
Emperor penguins have been tagged an endangered species because global heating effects have killed a large fraction of them.
Cuban doctors program [Richard Stallman's Political Notes]
*US accused of pressuring Latin America to cut ties with Cuban doctors program.*
Rightwing dominance in Chile [Richard Stallman's Political Notes]
Chile's right-wing extremist president has demonstrated support for the dictator, Pinochet, and specifically for his systematic torture of people who opposed him.
Death studies of recent heatwaves [Richard Stallman's Political Notes]
*Heatwaves are already breaching human limits, with worse to come, study finds. Analysis of six extreme heatwaves found that when temperature and humidity were accounted for, all were potentially deadly for older people.*
I expect the situation to become much clearer in 10 or 20 years: heatwaves then will simply be deadly to many unprotected people.
Iran and Russia as allies [Richard Stallman's Political Notes]
*US ignoring evidence Russia is helping Iran because it trusts Putin, says Zelenskyy.*
It is natural that Putin would help Iran, because it depends on Iran's military support as well. It is natural also that the wrecker would look for opportunities to support Putin, because that is his basic inclination and has been for many years. His support for Ukraine is reluctant and he keeps threatening to end it.
Urgent: Private equity in 401Ks [Richard Stallman's Political Notes]
US citizens: call on Congress to stop private equity from taking over Americans' 401(k) retirement plans.
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.
Urgent: Tax the rich [Richard Stallman's Political Notes]
US citizens: call on Congress to make the ultra rich pay their fair share.
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.
Urgent: War profiteering [Richard Stallman's Political Notes]
US citizens: call on Congress to investigate possible war profiteering.
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.
PM of Hungary, and Putin [Richard Stallman's Political Notes]
Orbán privately told Putin in October that he was at Putin's service.
Orbán voted out of power [Richard Stallman's Political Notes]
Hungary voted authoritarian Orbán and his party out of power.
I have to wonder whether Peter Magyar, who only two years ago was a member of Orbán's party, wishes to undo all the damage Orbán has done. Has he said that he does?

Two coffee makers AND a trap door
[$] LWN.net Weekly Edition for April 16, 2026 [LWN.net]
Inside this week's LWN.net Weekly Edition:
Tribblix m34 for SPARC released [OSnews]
Tribblix, the Illumos distribution focused on giving you a classic UNIX-style experience, doesn’t only support x86. It also has a branch for SPARC, which tends to run behind its x86 counterpart a little bit and has a few other limitations related to the fact SPARC is effectively no longer being developed. The Tribblix SPARC branch has been updated, and now roughly matches the latest x86 release from a few weeks ago.
The graphical libraries libtiff and OpenEXR have been updated, retaining the old shared library versions for now. OpenSSL is now from the 3.5 series with the 3.0 api by default. Bind is now from the 9.20 series. OpenSSH is now 10.2, and you may get a Post-Quantum Cryptography warning if connecting to older SSH servers.
‘zap install’ now installs dependencies by default.
‘zap create-user’ will now restrict new home directories to mode 0700 by default; use the -M flag to choose different permissions.
Support for UFS quotas has been removed.
↫ Tribblix release notes
There’s no new ISO yet, so to get to this new m34 release for SPARC you’re going to have to install from an older ISO and update from there.
View From a Hotel Window, 4/15/26: Atlanta Metro [Whatever]


A very arboreal view today. It’s a little misleading, since if you look left from here you’ll find a not unbusy street. Still, it would be churlish to complain about a bit of green in one’s window.
I’m in the area for an event tomorrow in which I am in conversation with Brandon Sanderson, prior to him spending time at JordanCon, and me at the LA Times Festival of Books (which will not be in the Atlanta area, but in Los Angeles). Our event is already sold out, so if you missed getting tickets, I’m sorry. Perhaps there will be a audio or video recording of it at some point.
And what about today? Well, I have a hotel room to myself and no one expecting anything of me until tomorrow afternoon around this time. I think I’ll take a nap and then see where the day takes me.
— JS
Sketch Swap Complete! [Penny Arcade]
I recently finished my side of a “sketch swap” with the incredible Bob Q after he had already completed his end. Bob and I have very different styles and I think he would agree that it was a difficult task trying to ink and color over the other person’s sketch. From his report, it sounds like he was probably more outside his comfort zone than I was. I grew up wanting to be a comic book artist like Bob is, but I was only good enough to be a cartoonist. So here are the results of our Acquisitions Inc. sketch swap!
Why is there a long delay between a thread exiting and the WaitForSingleObject returning? [The Old New Thing]
A customer reported that they were using the
WaitForSingleObject function to wait
for a thread to exit, but they found that even though the thread
had exited, the WaitForSingleObject
call did not return for over a minute. What could explain this
delay in reporting the end of a thread? Can we do something to
speed it up?
My psychic powers tell me that the thread didn’t actually exit.
What the customer is observing is probably that their thread
procedure has returned, signaling the end of the thread. But a lot
of stuff happens after the thread procedure exits. The system needs
to send DLL_THREAD_DETACH notifications to all of the
DLLs (unless the DLL has opted out via
DisableThreadLibraryCalls), and
doing so requires the loader lock.
I would use the debugger to look for the thread you thought had exited and see what it’s doing. It might be blocked waiting for the loader lock because some other thread is hogging it. Or it could be running a DLL’s detach code, and that detach code has gotten stuck on a long-running operation.
I suspect it’s the latter: One of the DLLs is waiting for something in its detach code, and that something takes about a minute.
We didn’t hear back from the customer, which could mean that this was indeed the problem. Or it could mean that this didn’t help, but they decided that we weren’t being helpful and didn’t pursue the matter further. Unfortunately, in a lot of these customer debugging engagements, we never hear back whether our theory worked. (Another possibility is that the customer wrote back with a “thank you”, but the customer liaison didn’t forward it to the engineering team because they didn’t want to bother them any further.)
The post Why is there a long delay between a thread exiting and the <CODE>WaitForSingleObject</CODE> returning? appeared first on The Old New Thing.
FSF clarifies its stance on AGPLv3 additional terms [LWN.net]
OnlyOffice CEO Lev Bannov has recently claimed that the Euro-Office fork of the OnlyOffice suite violates the GNU Affero General Public License version 3 (AGPLv3). Krzysztof Siewicz of the Free Software Foundation (FSF) has published an article on the FSF's position on adding terms to the AGPLv3. In short, Siewicz concludes that OnlyOffice has added restrictions to the license that are not compatible with the AGPLv3, and those restrictions can be removed by recipients of the code.
We urge OnlyOffice to clarify the situation by making it unambiguous that OnlyOffice is licensed under the AGPLv3, and that users who already received copies of the software are allowed to remove any further restrictions. Additionally, if they intend to continue to use the AGPLv3 for future releases, they should state clearly that the program is licensed under the AGPLv3 and make sure they remove any further restrictions from their program documentation and source code. Confusing users by attaching further restrictions to any of the FSF's family of GNU General Public Licenses is not in line with free software.
Preparatory School [Penny Arcade]
I have now gotten him to talk about it twice when he wanted to talk about his colon zero or even fewer times. This accrues not to my capacity for manipulation, but rather to the fact that he has been so harrowed body and mind by the experience he is now essentially just a sausage casing with a t-shirt draped over it. I was able to extract more data in my most recent interrogation and what I learned will shock you.
You cannot use the GNU (A)GPL to take software freedom away [Planet GNU]
Protecting the integrity of the (A)GPL is an essential component in protecting user freedom.
The Big Idea: A.Z. Rozkillis [Whatever]

When there’s a million and one paths in front of you, how do you know which decision to make? What if you don’t even have control over which one you end up on? Author A. Z. Rozkillis explores the idea of every decision we make, or don’t make, sending us on different paths throughout multiple realities. Journey on through the Big Idea for her newest novel, Fractal Terminus.
A. Z. ROZKILLIS:
In an infinite universe there are infinite possibilities. It’s a concept that has enamored me for decades, has led me into a career focused on space exploration and has fueled my endless love of science fiction. And that is probably why it is the Big Idea behind Fractal Terminus.
When I intentionally ended my first book, Space Station X, on a cliffhanger, I never truly intended to write a sequel. I liked the idea of leaving the speculation up to the reader about could possibly happen after an event like that. More to the point, I didn’t think I deserved to be the person to establish, canonically, what the future would hold for my main characters. But nature abhors a vacuum, and the same could be said for the space between my ears. So, I figured if I don’t want to write one follow-on outcome, and if I preferred the idea that any possibility could be canon, then why don’t I write a book where I do just that? Where I explore numerous possible outcomes from one, singularly massive event.
Fractal Terminus really digs down into the idea that with every flip of a coin, with every path chosen, with very outcome realized, there exists a separate universe (or infinite separate universes) in which the an alternate outcome could occur. I know it’s not a new idea, its just one I have felt, personally, immensely drawn to. The universe is so unfathomably endless, with there being no way for us to truly understand how vast it is. I feel that it is entirely plausible that somewhere, at the far reaches, there exists a reality in which I chose to study animal husbandry and not aerospace engineering. Or maybe I decided to eat that questionable leftover sushi rather than pitching it when I found it at the back of the fridge. Who knows? If the universe has no limit, then maybe every single possible reality is just wrapped around us.
For my characters, their personal universe is expanding too. My first book had a very narrow focus by design, because I had a main character who had reduced her whole universe down to the same five concentric metal rings of her space station. Jax refused to consider possibilities outside of that limited existence until she was forced to. Then she swallowed her pride and took the leap of faith on her feelings for Saunders. It could have gone either way, but canonically it worked out for Jax. Then they took a different plunge. Now Jax and Saunders are suddenly flung into a situation where they have to expand their view, because new experiences have that habit of broadening your perspective. This Space Station is no longer a cramped, desolate and lonely existence, but a cramped, desolate and overcrowded experience, where Jax has to dust off her social skills and mingle in order to survive. And as she lets her universe expand around her to include the souls locked in fate along side her, infinitely more universe opportunities unfurl.
Some of these are fates she realizes she can control. She can see where her actions can lead her and Saunders and she can tell when it might not be the best path. But more often than not, Jax and Saunders are at the mercy of the universe itself. Nature is a cold and uncaring master, and sometimes the coin flip is not even remotely something anyone can control.
We face these moments every day. Will this person I am talking to be an ally? Will they be my demise? Will I regret this interaction or not? Is there, even remotely, anything I could have done to change this outcome? There isn’t really a way for anyone to know, so you might as well take the chance. As the universe is expanding rapidly on a macro scale, we are, all of us, every day, making small decisions that expand our microcosm just as rapidly. Jax and Saunders expand their view on life to include the lives around them, while the universe expands to encompass every possible, even far-fetched idea of an outcome that could ever be considered. And that’s the big idea. The universe can you send you on an infinite number of outcomes, and you’ll never know which one you are in. So you are just going to have to take it on faith that you are on the right track.
Fractal Terminus: Barnes & Noble|Bookshop|Space Wizards
Paul Tagliamonte: designing arf, an sdr iq encoding format 🐶 [Planet Debian]

hz.tools will be tagged #hztools.It’s true – processing data from software defined radios can be a bit complex 👈😏👈 – which tends to keep all but the most grizzled experts and bravest souls from playing with it. While I wouldn’t describe myself as either, I will say that I’ve stuck with it for longer than most would have expected of me. One of the biggest takeaways I have from my adventures with software defined radio is that there’s a lot of cool crossover opportunity between RF and nearly every other field of engineering.
Fairly early on, I decided on a very light metadata scheme to track SDR captures, called rfcap. rfcap has withstood my test of time, and I can go back to even my earliest captures and still make sense of what they are – IQ format, capture frequencies, sample rates, etc. A huge part of this was the simplicity of the scheme (fixed-lengh header, byte-aligned to supported capture formats), which made it roughly as easy to work with as a raw file of IQ samples.
However, rfcap has a number of downsides. It’s only a single, fixed-length header. If the frequency of operation changed during the capture, that change is not represented in the capture information. It’s not possible to easily represent mulit-channel coherent IQ streams, and additional metadata is condemned to adjacent text files.
A few years ago, I needed to finally solve some of these shortcomings and tried to see if a new format would stick. I sat down and wrote out my design goals before I started figuring out what it looked like.
First, whatever I come up with must be capable of being streamed and processed while being streamed. This includes streaming across the network or merely written to disk as it’s being created. No post-processing required. This is mostly an artifact of how I’ve built all my tools and how I intereact with my SDRs. I use them extensively over the network (both locally, as well as remotely by friends across my wider lan). This decision sometimes even prompts me to do some crazy things from time to time.
I need actual, real support for multiple IQ channels from my multi-channel SDRs (Ettus, Kerberos/Kracken SDR, etc) for playing with things like beamforming. My new format must be capable of storing multiple streams in a single capture file, rather than a pile of files in a directory (and hope they’re aligned).
Finally, metadata must be capable of being stored in-band. The
initial set of metadata I needed to formalize in-stream were
Frequency Changes and Discontinuities.
Since then, ARF has grown a few more.
After getting all that down, I opted to start at what I thought the simplest container would look like, TLV (tag-length-value) encoded packets. This is a fairly well trodden path, and used by a bunch of existing protocols we all know and love. Each ARF file (or stream) was a set of encoded “packets” (sometimes called data units in other specs). This means that unknown packet types may be skipped (since the length is included) and additional data can be added after the existing fields without breaking existing decoders.
Unlike a “traditional” TLV structure, I opted to add “flags” to the top-level packet. This gives me a bit of wiggle room down the line, and gives me a feature that I like from ASN.1 – a “critical” bit. The critical bit indicates that the packet must be understood fully by implementers, which allows future backward incompatible changes by marking a new packet type as critical. This would only really be done if something meaningfully changed the interpretation of the backwards compatible data to follow.
| Flag | Description |
| 0x01 | Critical (tag must be understood) |
Within each Packet is a tag field. This tag
indicates how the contents of the value field should
be interpreted.
| Tag ID | Description |
| 0x01 | Header |
| 0x02 | Stream Header |
| 0x03 | Samples |
| 0x04 | Frequency Change |
| 0x05 | Timing |
| 0x06 | Discontinuity |
| 0x07 | Location |
| 0xFE | Vendor Extension |
In order to help with checking the basic parsing and encoding of this format, the following is an example packet which should parse without error.
00, // tag (0; no subpacket is 0 yet)
00, // flags (0; no flags)
00, 00 // length (0; no data)
// data would go here, but there is none
Additionally, throughout the rest of the subpackets, there are a few unique and shared datatypes. I document them all more clearly in the draft, but to quickly run through them here too:
This field represents a globally unique idenfifer, as defined by RFC 9562, as 16 raw bytes.
Data encoded in a Frequency field is stored as microhz (1 Hz is
stored as 1000000, 2 Hz is stored as 2000000) as an unsigned 64 bit
integer. This has a minimum value of 0 Hz, and a maximum value of
18446744073709551615 uHz, or just above 18.4 THz. This is a bit of
a tradeoff, but it’s a set of issues that I would gladly
contend with rather than deal with the related issues with storing
frequency data as a floating point value downstream. Not a huge
factor, but as an aside, this is also how my current generation SDR
processing code (sparky) stores Frequency data
internally, which makes conversion between the two natural.
ARF supports IQ samples in a number of different formats. Part of the idea here is I want it to be easy for capturing programs to encode ARF for a specific radio without mandating a single iq format representation. For IQ types with a scalar value which takes more than a single byte, this is always paired with a Byte Order field, to indicate if the IQ scalar values are little or big endian.
| ID | Name | Description |
| 0x01 | f32 | interleaved 32 bit floating point scalar values |
| 0x02 | i8 | interleaved 8 bit signed integer scalar values |
| 0x03 | i16 | interleaved 16 bit signed integer scalar values |
| 0x04 | u8 | interleaved 8 bit unsigned integer scalar values |
| 0x05 | f64 | interleaved 64 bit floating point scalar values |
| 0x06 | f16 | interleaved 16 bit floating point scalar values |
Each ARF file must start with a specific Header packet. The header contains information about the ARF stream writ large to follow. Header packets are always marked as “critical”.
In order to help with checking the basic parsing and encoding of this format, the following is an example header subpacket (when encoded or decoded this will be found inside an ARF packet as described above) which should parse without error, with known values.
00, 00, 00, fa, de, dc, ab, 1e, // magic
00, 00, 00, 00, 00, 00, 00, 00, // flags
18, 27, a6, c0, b5, 3b, 06, 07, // start time (1740543127)
// guid (fb47f2f0-957f-4545-94b3-75bc4018dd4b)
fb, 47, f2, f0, 95, 7f, 45, 45,
94, b3, 75, bc, 40, 18, dd, 4b,
// site_id (ba07c5ce-352b-4b20-a8ac-782628e805ca)
ba, 07, c5, ce, 35, 2b, 4b, 20,
a8, ac, 78, 26, 28, e8, 05, ca
Immediately after the arf Header,
some number of Stream Headers follow. There must be exactly the
same number of Stream Header packets as are indicated by the
num streams field of the Header. This has the nice
effect of enabling clients to read all the stream headers without
requiring buffering of “unread” packets from the
stream.
In order to help with checking the basic parsing and encoding of this format, the following is an example stream header subpacket (when encoded or decoded this will be found inside an ARF packet as described above) which should parse without error, with known values.
00, 01, // id (1)
00, 00, 00, 00, 00, 00, 00, 00, // flags
01, // format (float32)
01, // byte order (Little Endian)
00, 00, 01, d1, a9, 4a, 20, 00, // rate (2 MHz)
00, 00, 5a, f3, 10, 7a, 40, 00, // frequency (100 MHz)
// guid (7b98019d-694e-417a-8f18-167e2052be4d)
7b, 98, 01, 9d, 69, 4e, 41, 7a,
8f, 18, 16, 7e, 20, 52, be, 4d,
// site_id (98c98dc7-c3c6-47fe-bc05-05fb37b2e0db)
98, c9, 8d, c7, c3, c6, 47, fe,
bc, 05, 05, fb, 37, b2, e0, db,
Block of IQ samples in the format indicated by this
stream’s format and byte_order
field sent in the related Stream
Header.
In order to help with checking the basic parsing and encoding of this format, the following is an samples subpacket (when encoded or decoded this will be found inside an ARF packet as described above). The IQ values here are notional (and are either 2 8 bit samples, or 1 16 bit sample, depending on what the related Stream Header was).
01, // id
ab, cd, ab, cd, // iq samples
The center frequency of the IQ stream has changed since the Stream Header or last Frequency Change has been sent. This is useful to capture IQ streams that are jumping around in frequency during the duration of the capture, rather than starting and stopping them.
In order to help with checking the basic parsing and encoding of this format, the following is a frequency change subpacket (when encoded or decoded this will be found inside an ARF packet as described above).
01, // id
00, 00, b5, e6, 20, f4, 80, 00 // frequency (200 MHz)
Since the last Samples packet for this stream, samples have been dropped or not encoded to this stream. This can be used for a stream that has dropped samples for some reason, a large gap (radio was needed for something else), or communicating “iq snippits”.
In order to help with checking the basic parsing and encoding of this format, the following is a discontinuity subpacket (when encoded or decoded this will be found inside an ARF packet as described above).
01, // id
Up-to-date location as of this moment of the IQ stream, usually from a GPS. This allows for in-band geospatial information to be marked in the IQ stream. This can be used for all sorts of things (detected IQ packet snippits aligned with a time and location or a survey of rf noise in an area)
The sys field indicates the Geodetic system to be
used for the provided latitude, longitude
and elevation fields. The full list of supported
geodetic systems is currently just WGS84, but in case something
meaningfully changes in the future, it’d be nice to migrate
forward.
Unfortunately, being a bit of a coward here, the accuracy field is a bit of a cop-out. I’d really rather it be what we see out of kinematic state estimation tools like a kalman filter, or at minimum, some sort of ellipsoid. This is neither of those - it’s a perfect sphere of error where we pick the largest error in any direction and use that. Truthfully, I can’t be bothered to model this accurately, and I don’t want to contort myself into half-assing something I know I will half-ass just because I know better.
| System | Description |
| 0x01 | WGS84 - World Geodetic System 1984 |
In order to help with checking the basic parsing and encoding of this format, the following is a location subpacket (when encoded or decoded this will be found inside an ARF packet as described above).
00, 00, 00, 00, 00, 00, 00, 00, // flags
01, // system (wgs84)
3f, f3, be, 76, c8, b4, 39, 58, // latitude (1.234)
40, 02, c2, 8f, 5c, 28, f5, c3, // longitude (2.345)
40, 59, 00, 00, 00, 00, 00, 00, // elevation (100)
40, 24, 00, 00, 00, 00, 00, 00 // accuracy (10)
In addition to the fields I put in the spec, I expect that I may need custom packet types I can’t think of now. There’s all sorts of useful data that could be encoded into the stream, so I’d rather there be an officially sanctioned mechanism that allows future work on the spec without constraining myself.
Just an example, I’ve used a custom subpacket to create test vectors, the data is encoded into a Vendor Extension, followed by the IQ for the modulated packet. If the demodulated data and in-band original data don’t match, we’ve regressed. You could imagine in-band speech-to-text, antenna rotator azimuth information, or demodulated digital sideband data (like FM HDR data) too. Or even things I can’t even think of!
In order to help with checking the basic parsing and encoding of this format, the following is a vendor extension subpacket (when encoded or decoded this will be found inside an ARF packet as described above).
// extension id (b24305f6-ff73-4b7a-ae99-7a6b37a5d5cd)
b2, 43, 05, f6, ff, 73, 4b, 7a,
ae, 99, 7a, 6b, 37, a5, d5, cd,
// data (0x01, 0x02, 0x03, 0x04, 0x05)
01, 02, 03, 04, 05
The biggest tradeoff that I’m not entirely happy
with is limiting the length of a packet to u16 –
65535 bytes. Given the u8 sample header, this limits us to 8191 32
bit sample pairs at a time. I wound up believing that the overhead
in terms of additional packet framing is worth it – because
always encoding 4 byte lengths felt like overkill, and a dynamic
length scheme ballooned codepaths in the decoder that I was trying
to keep as easy to change as possible as I worked with the
format.
EFF Calls on Kuwait to Release Journalist Ahmed Shihab-Eldin [Deeplinks]
EFF calls on the Kuwaiti government to immediately release journalist Ahmed Shihab-Eldin. An award-winning journalist and television host who worked for Al Jazeera for many years, Shihab-Eldin—a dual American-Kuwaiti citizen—was arrested in Kuwait on March 3 while visiting family. The Committee to Protect Journalists (CPJ) reported yesterday that it is believed he has been charged with spreading false information, harming national security, and misusing his mobile phone.
According to the Guardian, Shihab-Eldin published footage of a U.S. Air Force F-15 E Strike Eagle crash, and posted to his Substack about the incident, noting that video circulating online showed local residents assisting the crash survivors.
Kuwait is one of several countries that has recently cracked down on reporting amidst the ongoing war. Kuwait’s Ministry of Interior posted on X on March 3—the same day Shihab-Eldin was arrested—warning people in the country “not to photograph or publish any clips or information related to missiles or relevant locations.” Earlier this month, the UN Office of the High Commissioner for Human Rights (OHCHR) highlighted a new decree in Kuwait banning the circulation of reports that seek to “undermine the prestige of the military” or erode public trust in it.
As reported by local media, the decree states that “those who intentionally publish statements or news or circulate false reports and rumors about military authorities resulting in weakening the trust in them and their morale, in addition to undermining their prestige, are punishable by three to 10 years in jail and a fine between KD 5,000 and 10,000.” The decree also imposes a penalty ranging from seven years to life imprisonment for “authorized people who cause financial loss or damage to the military authorities while carrying out a transaction, operation, project or case or obtaining any profit from such deals.”
In contrast to neighboring Gulf states, Kuwait has historically allowed the press to operate with relative freedom, and even introduced a law in 2020 protecting the right to access information. In practice, however, the government exercises considerable control over the media. Furthermore, there are several laws, including cybercrime legislation introduced in 2016, that restrict freedom of expression.
EFF is deeply concerned that Ahmed has not been seen nor heard from in nearly six weeks. We call on the government of Kuwait to immediately release Ahmed Shihab-Eldin.
Haiku on ARM64 boots to desktop in QEMU [OSnews]
Another Haiku monthly activity report, but this time around, there’s actually a big ticket item. Haiku has been in a pretty solid and stable state for a while now, so the activity reports have been dominated by fairly small, obscure changes, but during March a major milestone was reached for the ARM64 port.
smrobtzz contributed the bulk of the work, including fixes for building on macOS on ARM64, drivers for the Apple S5L UART, fixes to the kernel base address, clearing the frame pointer before entering the kernel, mapping physical memory correctly, the basics for userland, and more. SED4906 contributed some fixes to the bootloader page mapping, and
runtime_loader’s page-size checks.Combined, these changes allow the ARM64 port to get to the desktop in QEMU. There’s a forum thread, complete with screenshots, for anyone interested in following along.
↫ waddlesplash
While it’s only in QEMU, this is still a major achievement and paves the way for more people to work on the ARM64 port, possibly increasing its health. There’s tons of smaller changes and fixes all over the place, too, as usual, and the team mentions beta 6 isn’t quite ready yet, still. Don’t let that stop you from just downloading the latest nightly, though – Haiku is mature enough to use it.
Today the work with Claude is much better, though when we
got started it was even worse than yesterday. The key to getting on
track was to figure out why it worked so well in previous projects
and fell apart with this one. In each of the others, I passed off
an existing project for it to convert or build on. This time we
started with something it had created without a "starter." So I
took all the random bits we had and organized into the opmlProjectEditor format
we had
specified back in early March. It's how all my projects since
2013 are organized, so it's a good fit for me, and also for Claude.
So now I'm going to pass back a package that's ready to be worked
on collaboratively. The other thing is I switched to the Opus 4.6
model from Sonnet 4.6. So I've made it to 11AM and feel like I've
already accomplished something today. The problem was yesterday we
were spinning our wheels, and that doesn't work for me. I'm a very
directed developer. ;-)
[$] Forking Vim to avoid LLM-generated code [LWN.net]
Many people dislike the proliferation of Large Language Models (LLMs) in recent years, and so make an understandable attempt to avoid them. That may not be possible in general, but there are two new forks of Vim that seek to provide an editing environment with no LLM-generated code. EVi focuses on being a modern Vim without LLM-assisted contributions, while Vim Classic focuses on providing a long-term maintenance version of Vim 8. While both are still in their early phases, the projects look to be on track to provide stable alternatives — as long as enough people are interested.
Dirk Eddelbuettel: qlcal 0.1.1 on CRAN: Calendar Updates [Planet Debian]

The nineteenth release of the qlcal package arrivied at CRAN just now, and has already been built for r2u. This version synchronises with QuantLib 1.42 released this week.
qlcal delivers the calendaring parts of QuantLib. It is provided (for the R package) as a set of included files, so the package is self-contained and does not depend on an external QuantLib library (which can be demanding to build). qlcal covers over sixty country / market calendars and can compute holiday lists, its complement (i.e. business day lists) and much more. Examples are in the README at the repository, the package page, and course at the CRAN package page.
This releases updates to the 2025 holidays for China, Singapore, and Taiwan.
The full details from NEWS.Rd follow.
Changes in version 0.1.1 (2026-04-15)
Synchronized with QuantLib 1.42 released two days ago
Calendar updates for China, Singapore, Taiwan
Courtesy of my CRANberries, there is a diffstat report for this release. See the project page and package documentation for more details, and more examples.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub. You can also sponsor my Tour de Shore 2026 ride in support of the Maywood Fine Arts Center.
Fixing a 20-year-old bug in Enlightenment E16 [OSnews]
The editor in chief of this blog was born in 2004. She uses the 1997 window manager, Enlightenment E16, daily. In this article, I describe the process of fixing a show-stopping, rare bug that dates back to 2006 in the codebase. Surprisingly, the issue has roots in a faulty implementation of Newton’s algorithm.
↫ Kamila Szewczyk
I’m not going to pretend to understand any of this, but I know you people do. Enjoy.
Let sleeping CPUs lie — S0ix [OSnews]
Modern laptops promise a kind of magic. Shut the lid or press the sleep button, toss it in a backpack, and hours, days, or weeks later, it should wake up as if nothing happened with little to no battery drain. This sounds like a fairly trivial operation — y’know, you’re literally just asking for the computer to do nothing — but in that quiet moment when the fans whir down, the screen turns dark, and your reflection stares back at you, your computer and all its little components are actually hard at work doing their bedtime routine.
↫ Aymeric Wibo at the FreeBSD Foundation
A look at how suspend and resume works in practice, from the perspective of FreeBSD. Considering FreeBSD’s laptop focus in recent times, not an unimportant subject.
AI Is Writing Our Code Faster Than We Can Verify It [Radar]
This is the third article in a series on agentic engineering and AI-driven development. Read part one here, part two here, part three here, and look for the next article on April 30 on O’Reilly Radar.
Here’s the dirty secret of the AI coding revolution: most experienced developers still don’t really trust the code the AI writes for us.
If I’m being honest, that’s not actually a particularly well-guarded secret. It feels like every day there’s a new breathless “I don’t have a lick of development experience but I just vibe coded this amazing application” article. And I get it—articles like that get so much engagement because everyone is watching carefully as the drama of AIs getting better and better at writing code unfolds. We’ve had decades of shows and movies, from WarGames to Hackers to Mr. Robot, portraying developers as reclusive geniuses doing mysterious but incredible stuff with computers. The idea that we’ve coded ourselves out of existence is fascinating to people.
The flip side of that pop-culture phenomenon is that when there are problems caused by agentic engineering gone wrong (like the equally popular “I trusted an AI agent and it deleted my entire production database” articles), everyone seems to find out about it. And, unfortunately, that newly emerging trope is much closer to reality. Most of us who do agentic engineering have seen our own AI-generated code go off the rails. That’s why I built and maintain the Quality Playbook, an open-source AI skill that uses quality engineering techniques that go back over fifty years to help developers working in any language verify the quality of their AI-generated code. I was as surprised as anyone to discover that it actually works.
I’ve talked often about how we need a “trust but verify” mindset when using AI to write code. In the past, I’ve mostly focused on the “trust” aspect, finding ways to help developers feel more comfortable adopting AI coding tools and using them for production work. But I’m increasingly convinced that our biggest problem with AI-driven development is that we don’t have a reliable way to check the quality of code from agentic engineering at scale. AI is writing our code faster than we can verify it, and that is one of AI’s biggest problems right now.
After I got my first real taste of using AI for development in a professional setting, it felt like I was being asked to make a critical choice: either I had to outsource all of my thinking to the AI and just trust it to build whatever code I needed, or I had to review every single file it generated line by line.
A lot of really good, really experienced senior engineers I’ve talked to feel the same way. A small number of experienced developers fully embrace vibe coding and basically fire off the AI to do what it needs to, depending on a combination of unit tests and solid, decoupled architecture (and a little luck, maybe) to make sure things go well. But more frequently, the senior, experienced engineers I’ve talked to, folks who’ve been developing for a really long time, go the other way. When I ask them if they’re using AI every day, they’ll almost always say something like, “Yeah, I use AI for unit tests and code reviews.” That’s almost always a tell that they don’t trust the AI to build the really important code that’s at the core of the application. They’re using AI for things that won’t cause production bugs if they go wrong.
I think this excerpt from a recent (and excellent) article in Ars Technica, “Cognitive surrender” leads AI users to abandon logical thinking, sums up how many experienced developers feel about working with AI:
When it comes to large language model-powered tools, there are generally two broad categories of users. On one side are those who treat AI as a powerful but sometimes faulty service that needs careful human oversight and review to detect reasoning or factual flaws in responses. On the other side are those who routinely outsource their critical thinking to what they see as an all-knowing machine.
I agree that those are two options for dealing with AI. But I also believe that’s a false choice. “Cognitive surrender,” as the research referenced by the article puts it, is not a good outcome. But neither is reviewing every line of code the AI writes, because that’s so effort-intensive that we may as well just write it all ourselves. (And I can almost hear some of you asking, “What so bad about that?”)
This false choice is what really drives a lot of really good, very experienced senior engineers away from AI-driven development today. We see those two options, and they are both terrible. And that’s why I’m writing this article (and the next few in this Radar series) about quality.
The Quality Playbook is an open-source skill for AI coding tools like GitHub Copilot, Cursor, Claude Code, and Windsurf. You point it at a codebase, and it generates a complete quality engineering infrastructure for that project: test plans traced to requirements, code review protocols, integration tests, and more. More importantly, it brings back quality engineering practices that much of the industry abandoned decades ago, using AI to do a lot of the quality-related work that used to require a dedicated team.
I built the Quality Playbook as part of an experiment in AI-driven development and agentic engineering, building an open-source project called Octobatch and writing about the process in this ongoing Radar series. The playbook emerged directly from that experiment. The ideas behind it are over fifty years old, and they work.
Along the way, I ran into a shocking statistic.
We already know that many (most?) developers these days use AI coding tools like GitHub Copilot, Claude Code, Gemini, ChatGPT, and Cursor to write production code. But do we trust the code those tools generate? “Trust in these systems has collapsed to just 33%, a sharp decline from over 70% in 2023.”
That quote is from a Gemini Deep Research report I generated while doing research for this article. 70% dropping to 33%—that sounds like a massive collapse, right?
The thing is, when I checked the sources Gemini referenced, the truth wasn’t nearly as clear-cut. That “over 70% in 2023” number came from a Stack Overflow survey measuring how favorably developers view AI tools. The “33%” number came from a Qodo survey asking whether developers trust the accuracy of AI-generated code. Gemini grabbed both numbers, stripped the context, and stitched them into a single decline narrative. No single study ever measured trust dropping from over 70% to 33%. Which means we’ve got an apples-to-oranges comparison, and it might even technically be accurate (sort of?), but it’s not really the headline-grabber that it seemed to be.
So why am I telling you about it?
Because there are two important lessons from that “shocking” stat. The first is that the overall idea rings true, at least for me. Almost all of us have had the experience of generating code with AI faster than we can verify it, and we ship features before we fully review them.
The second is that when Gemini created the report, the AI fabricated the most alarming version of the story from real but unrelated data points. If I’d just cited it without checking the sources, there’s a pretty good chance it would get published, and you might even believe it. That’s ironically self-referential, because it’s literally the trust problem the survey is supposedly measuring. The AI produced something that looked authoritative, felt correct, and was wrong in ways that only careful verification could catch. If you want to understand why over 70% of developers don’t fully trust AI-generated code, you just watched it happen.
One reason many of us don’t trust AI-generated choice is because there’s a growing gap between how fast AI can generate code and how well we can verify that the code actually does what we intended. The usual response to this verification gap is to adopt better testing tools. And there are plenty of them: test stub generators, diff reviewers, spec-first frameworks. These are useful, and they solve real problems. But they generally share a blind spot: they work with what the code does, not with what it’s supposed to do. Luckily, the intent is sitting right there: in the specs, the schemas, the defensive code, the history of the AI chats about the project, even the variable names and filenames. We just need a way to use it.
AI-driven development needs its own quality practices, and the discipline we need already exists. It was just (unfairly) considered too expensive to use… until AI made it cheap.
There’s a difference between knowing that code works and knowing that it does what it’s supposed to do. It’s the difference between “does this function return the right value?” and “does this system fulfill its purpose?”—and as it turns out, that’s one of the oldest problems in software engineering. In fact, as I talked about in a previous Radar article, Prompt Engineering Is Requirements Engineering, it was the source of the original “software crisis.”
The software crisis was the term people used across our industry back in the 1960s when they were coming to grips with large software projects around the world that were routinely delivered late, over budget, and delivering software that didn’t do what it was supposed to do. At the 1968 NATO Software Engineering Conference—the conference that introduced the term “software engineering”—some of the top experts in the industry talked about how the crisis was caused by the developers and their stakeholders had trouble understanding the problems they were solving, communicating those needs clearly, and making sure that the systems they delivered actually met their users’ needs. Nearly two decades later, Fred Brooks made the same argument in his pioneering essay, No Silver Bullet: no tool can, on its own, eliminate the inherent difficulty of understanding what needs to be built and communicating that intent clearly. And now that we talk to our AI development tools the same way we talk to our teammates, we’re more susceptible than ever to that underlying problem of communication and shared understanding.
An important part of the industry’s response to the software crisis was quality engineering, a discipline built specifically to close the gap between intent and implementation by defining what “correct” means up front, tracing tests back to requirements, and verifying that the delivered system actually does what it’s supposed to do. For years it was standard practice for software engineering teams to include quality engineering phases in all projects. But few teams today do traditional quality engineering. Understanding why it got left behind by so many of us, more importantly, what it can do for us now, can make a huge difference for agentic engineering and AI-driven development today.
Starting in the 1950s, three thinkers built the intellectual foundation that manufacturing used to become dramatically more reliable.
These ideas revolutionized software quality, and the people who put them into practice were called quality engineers. They built test plans traced to requirements, ran functional testing against specifications, and maintained living documentation that defined what “correct” meant for each part of the system.
So why did all of this disappear from most software teams? (It’s still alive in regulated industries like aerospace, medical devices, and automotive, where traceability is mandated by law, and a few brave holdouts throughout the industry.) It wasn’t because it didn’t work. Quality engineering got cut because it was perceived as expensive. Crosby was right that quality is free: the cost of building it in is far more than made up for by the savings you get from not finding and fixing defects later. But the costs come at the beginning of the project and the savings come at the end. In practice, that means when the team blows a deadline and the manager gets angry and starts looking for something to cut, the testing and QA activities are easy targets because the software already seems to be complete.
On top of the perceived expense, quality engineering required specialists. Building good requirements, designing test plans, and planning and running functional and regression testing are real, technical skills, and most teams simply didn’t have anyone (or, more specifically, the budget for anyone) who could do those jobs.
Quality engineering may have faded from our projects and teams over time, but the industry didn’t just give up on many of its best ideas. Developers are nothing if not resourceful, and we built our own quality practices—three of the most popular are test-driven development, behavior-driven development, agile-style iteration—and these are genuinely good at what they do. TDD keeps code honest by making you write the test before the implementation. BDD was specifically designed to capture requirements in a form that developers, testers, and stakeholders can all read (though in practice, most teams strip away the stakeholder involvement and it devolves into another flavor of integration testing). Agile iteration tightens the feedback loop so you catch problems earlier.
Those newer quality practices are practical and developer-focused, and they’re less expensive to adopt than traditional quality engineering in the short run because they live inside the development cycle. The upside of those practices is that development teams can generally implement them on their own, without asking for permission or requiring experts. The tradeoff, however, is that those practices have limited scope. They verify that the code you’re writing right now works correctly, but they don’t step back and ask whether the system as a whole fulfills its original intent. Quality engineering, on the other hand, establishes the intent of the system before the development cycle even begins, and keeps it up to date and feeds it back to the team as the project progresses. That’s a huge piece of the puzzle that got lost along the way.
Those highly effective quality engineering practices got cut from most software engineering teams because they were viewed as expensive, not because they were wrong. When you’re doing AI-driven development, you’re actually running into exactly the same problem that quality engineering was built to solve. You have a “team”—your AI coding tools—and you need a structured process to make sure that team is building what you actually intend. Quality engineering is such a good fit for AI-driven development because it’s the discipline that was specifically designed to close that gap between what you ask for and what gets built.
What nobody expected is that AI would make it cheap enough in the short run to bring quality engineering back to our projects.
I’ve long suspected that quality engineering would be a perfect fit for AI-driven development (AIDD), and I finally got a chance to test that hypothesis. As part of my experiment with AIDD and agentic engineering (which I’ve been writing about in The Accidental Orchestrator and the rest of this series), I built the Quality Playbook, a skill for AI tools like Cursor, GitHub Copilot, and Claude Code that lets you bring these highly effective quality practices to any project, using AI to do the work that used to require a dedicated quality engineering team. Like other AI skills and agents, it’s a structured document that plugs into an AI coding agent and teaches it a specific capability. You point it at a codebase, and the AI explores the code, reads whatever specifications and documentation it can find, and generates a complete quality infrastructure tailored to that project. The Quality Playbook is now part of awesome-copilot, a collection of community-contributed agents (and I’ve also opened a pull request to add it to Anthropic’s repository of Claude Code skills).
What does “quality infrastructure” actually mean? Think about what a quality engineering team would build if you hired one. A good quality engineer would start by defining what “correct” means for your project: what the system is supposed to do, grounded in your requirements, your domain, what your users actually need. From there, they’d write tests traced to those requirements, build a code review process that checks whether the code implements what it’s supposed to, design integration tests that verify the whole system works together, and set up an audit process where independent reviewers check the code against its original intent.
That’s what the playbook generates. Developers using AI tools have been rediscovering the value of requirements, and spec-driven development (SDD) has become very popular. You don’t need to be practicing strict spec-driven development to use it. The playbook infers your project’s intent from whatever artifacts are available: chat logs, schemas, README files, code comments, and even defensive code patterns. If you have formal specs, great; if not, the AI pieces together what “correct” means from the evidence it can find.
Once the playbook figures out the intent of the code, it creates quality infrastructure for the project. Specifically, it generates ten deliverables:
I started this article by talking about a false choice: either we surrender our judgment to the AI, or get stuck reviewing every line of code it writes. The reality is much more nuanced, and, in my opinion, a lot more interesting, if we have a trustworthy way to verify that the code we worked with the AI to build actually does what we intended. It’s not a coincidence that this is one of the oldest problems in software engineering, and not surprising that AI can help us with it.
The Quality Playbook leans heavily on classic quality engineering techniques to do that verification. Those techniques work very well, and that gives us the more nuanced option: using AI to help us write our code, and then using it to help us trust what it built.
That’s not a gimmick or a paradox. It works because verification is exactly the kind of structured, specification-driven work that AI is good at. Writing tests traced to requirements, reviewing code against intent, checking that the system does what it’s supposed to do under real conditions. These are the things quality engineers used to do across the whole industry (and still do in the highly regulated parts of it). They’re also things that AI can do well, as long as we tell it what “correct” means.
The experienced engineers I talked about at the beginning of this article, the ones who only use AI for unit tests and code reviews, aren’t wrong to be cautious. They’re right that we can’t just trust whatever output the AI spits out. But limiting AI to just the “safe” parts of our projects keeps us from taking advantage of such an important set of tools. The way out of this quagmire is to build the infrastructure that makes the rest of it trustworthy too. Quality engineering gives us that infrastructure, and AI makes it cheap enough to actually use on all of our projects every day.
In the next few articles, I’ll show you what happened when I pointed the Quality Playbook at real, mature open-source codebases and it started finding real bugs, how the playbook emerged from my AI-driven development experiment, what the quality engineering mindset looks like in practice, and how we can learn important lessons from that experience that apply to all of our projects.
The Quality Playbook is open source and works with GitHub Copilot, Cursor, and Claude Code. It’s also available as part of awesome-copilot. You can try it out today by downloading it into your project and asking the AI to generate the quality playbook. The whole process takes about 10-15 minutes for a typical codebase. I’ll cover more details on running it in future articles in this series.
Grief and the Nonprofessional Programmer [Radar]
I can’t claim to be a professional software developer—not by a long shot. I occasionally write some Python code to analyze spreadsheets, and I occasionally hack something together on my own, usually related to prime numbers or numerical analysis. But I have to admit that I identify with both of the groups of programmers that Les Orchard identifies in “Grief and the AI Split”: those who just want to make a computer do something and those who grieve losing the satisfaction they get from writing good code.
A lot of the time, I just want to get something done; that’s particularly true when I’m grinding through a spreadsheet with sales data that has a half-million rows. (Yes, compared to databases, that’s nothing.) It’s frustrating to run into some roadblock in pandas that I can’t solve without looking through documentation, tutorials, and several incorrect Stack Overflow answers. But there’s also the programming that I do for fun—not all that often, but occasionally: writing a really big prime number sieve, seeing if I can do a million-point convex hull on my laptop in a reasonable amount of time, things like that. And that’s where the problem comes in. . .if there really is a problem.
The other day, I read a post of Simon Willison’s that included AI-generated animations of the major sorting algorithms. No big deal in itself; I’ve seen animated sorting algorithms before. Simon’s were different only in that they were AI-generated—but that made me want to try vibe coding an animation rather than something static. Graphing the first N terms of a Fourier series has long been one of the first things I try in a new programming language. So I asked Claude Code to generate an interactive web animation of the Fourier series. Claude did just fine. I couldn’t have created the app on my own, at least not as a single-page web app; I’ve always avoided JavaScript, for better or for worse. And that was cool, though, as with Simon’s sorting animations, there are plenty of Fourier animations online.
I then got interested in animations that aren’t so common. I grabbed Algorithms in a Nutshell, started looking through the chapters, and asked Claude to animate a number of things I hadn’t seen, ending with Dijkstra’s algorithm for finding the shortest path through a graph. It had some trouble with a few of the algorithms, though when I asked Claude to generate a plan first and used a second prompt asking it to implement the plan, everything worked.
And it was fun. I made the computer do things I wanted it to do; the thrill of controlling machines is something that sticks with us from our childhoods. The prompts were simple and short—they could have been much longer if I wanted to specify the design of the web page, but Claude’s sense of taste was good enough. I had other work to do while Claude was “thinking,” including attending some meetings, but I could easily have started several instances of Claude Code and had them create simulations in parallel. Doing so wouldn’t have required any fancy orchestration because every simulation was independent of the others. No need for Gas Town.
When I was done, I felt a version of the grief Les Orchard writes about. More specifically: I don’t really understand Dijkstra’s algorithm. I know what it does and have a vague idea of how it works, and I’m sure I could understand it if I read Algorithms in a Nutshell rather than used it as a catalog of things to animate. But now that I had the animation, I realized that I hadn’t gone through the process of understanding the algorithm well enough to write the code. And I cared about that.
I also cared about Fourier transformations: I would never “need” to write that code again. If I decide to learn Rust, will I write a Fourier program, or ask Claude to do it and inspect the output? I already knew the theory behind Fourier transforms—but I realized that an era had ended, and I still don’t know how I feel about that. Indeed, a few months ago, I vibe coded an application that recorded some audio from my laptop’s microphone, did a discrete Fourier transform, and displayed the result. After pasting the code into a file, I took the laptop over to the piano, started the program, played a C, and saw the fundamental and all the harmonics. The era was already in the past; it just took a few months to hit me.
Why does this bother me? My problem isn’t about losing the pleasure of turning ideas into code. I’ve always found coding at least somewhat frustrating, and at times, seriously frustrating. But I’m bothered by the lack of understanding: I was too lazy to look up how Dijkstra works, too lazy to look up (again) how discrete Fourier works. I made the computer do what I wanted, but I lost the understanding of how it did it.
What does it mean to lose the understanding of how the code works? Anything? It’s common to place the transition to AI-assisted coding in the context of the transition from assembly language to higher-level languages, a process that started in the late 1950s. That’s valid, but there’s an important difference. You can certainly program a discrete fast Fourier transform in assembly; that may even be one of the last bastions of assembly programs, since FFTs are extremely useful and often have to run on relatively slow processors. (The “butterfly” algorithm is very fast.) But you can’t learn signal processing by writing assembly any more than you can learn graph theory. When you’re writing in assembler, you have to know what you’re doing in advance. The early programming languages of the 1950s (Fortran, Lisp, Algol, even BASIC) are much better for gradually pushing forward to understanding, to say nothing of our modern languages.
That is the real source of grief, at least for me. I want to understand how things work. And I admit that I’m lazy. Understanding how things work quickly comes in conflict with getting stuff done—especially when staring at a blank screen—and writing Python or Java has a lot to do with how you come to an understanding. I will never need to understand convex hulls or Dijkstra’s algorithm. But thinking more broadly about this industry, I wonder whether we’ll be able to solve the new problems if we delegate understanding the old problems to AI. In the past, I’ve argued that I don’t see AI becoming genuinely creative because creativity isn’t just a recombination of things that already exist. I’ll stick by that, especially in the arts. AI may be a useful tool, but I don’t believe it will become an artist. But anyone involved with the arts also understands that creativity doesn’t come from a blank slate; it also requires an understanding of history, of how problems were solved in the past. And that makes me wonder whether humans—at least in computing—will continue to be creative if we delegate that understanding to AI.
Or does creativity just move up the stack to the next level of abstraction? And is that next level of abstraction all about understanding problems and writing good specifications? Writing a detailed specification is itself a kind of programming. But I don’t think that kind of grief will assuage the grief of the programmer who loves coding—or who may not love coding but loves the understanding that it brings.
The Day-Blind Stars [Original Fiction Archives - Reactor]
Illustrated by Hwarim Lee
Edited by Jonathan Strahan
Published on April 15, 2026

An Earth explorer in search of something new and strange in the up and out ends up traveling through space with a small god over millennia.
Short story | 5,293 words
She grew fearful of the world and turned away from it, seeking solace. She intended to return.
She never did.
When one turned away from the world in those days, one was subject to a binary. Binaries were a sort of self-imposed tyranny, imagined by the one but expected by the totality. So, turning away from the world, for Sierra St. Sandalwood IV, involved a choice—of necessity illusory—between going up and out or going down and in. The first choice was blue. The second choice was green.
The first choice was green. The second choice was blue.
See? Illusion.
Sierra went up and out. Going up, she theorized, she would be able to look down at the receding world, watching for signs of pursuit. Had she gone down, the world would have closed over behind her as she hacked through roots, as she gnawed through bedrock, as she braved the magma mantle washing the iron and nickel core. How can that be said to be turning away from the world at all?
That would be going under, thought Sierra.
But so many people chose down. Her husband had. Her godmother had. The twins, of course, painfully young, swore they were determined to embrace the world through all the numberless days gifted them by the life force. Devon called the life force Gaia and Denisa called it motion. Denisa waved her arms, dreamy and languorous, whenever she spoke of motion.
Sierra was graceless in the up and out. She had never been outside the gravity well. Her go suit prompted her to make the adjustments necessary to steer a clear course, but only because she had activated those options. Options for prompts for adjustments—some of the very things from which Sierra was turning away. Perhaps up and out was not so different from down and in. Perhaps neither was any different from the world itself.
She approached a tumble of great rocks trailing the world. Each of them was inconceivably cold on one side, gamma-drenched hellfire on the other. A guard god was sitting on one of the rocks, breathing smoke and looking at her with idle curiosity. The go suit suggested she stop and visit.
“Hello. How are things?” asked the guard god.
“How are you breathing smoke?” asked Sierra. “How can you talk? How can I hear you? Why is a god trailing the world?”
“First,” it replied, “I’m smoking a cigarette, which technically is breathing smoke, but not exactly what you are imagining. I can talk because I learned how at my father’s knee. I can hear you because I am listening. I am trailing the world because I’m on watch.”
“What does a god watch for?” asked Sierra. Her go suit maneuvered its way onto the surface of the rock; she was briefly nauseous before her see-plate stabilized the view.
Illusion.
“I’m more of a poppet deity than a god. And I’m watching for people who go up and out.”
“Like me,” said Sierra.
“Much like you, yes. Mostly like you. You should tell me who you are.”
The suit made it impossible to nod, though Sierra reflexively attempted one. “My name is Sierra St. Sandalwood IV,” she said.
The guard god did nod, though its thick neck, wider than its block of a head, made the movement negligible. “Thank you. That is welcome information. However, I did not ask your name. I asked who you are.”
Sierra thought very carefully. “I think if I knew that I would be at home with the twins.”
The guard god nodded again, this time with more alacrity. Pebbles and dust floated out into the nothing. “I think you have a question.” It sounded delighted. “Let’s take an equatorial walk.”
It lurched up and Sierra realized she had not made a careful enough study of her interlocutor. Its waist and legs were seamlessly bonded to the outcropping of silicates she’d thought simply served as a throne until it cracked free. It stretched, dreamy and languorous.
“My go suit keeps me from careening away,” said Sierra. “But how are you treating this little rock as firma?”
The guard god looked at her and furled its face, a sort of miniature avalanche concealing what Sierra thought might be emeralds deep in the crags of what she thought might be orbital sockets. When it opened them again, its eyes were sapphires.
It started to force its way through the tumult of stalagma that extended to the horizon in every direction.
The horizon wasn’t very far.
Sierra blinked her right eye, just so, and she floated after the guard god. When she was moving alongside it, she asked again, “How are you walking on this little rock? Shouldn’t you fly off into the nothing?”
“You haven’t asked the question I think you need to ask, yet, but you do ask a lot of others,” it said. “I like that. Yes, I should fly off because of, you know”—and here it made a circular motion with one of the three spindly fingers sprouting from its upper right hand—“the spinning. Also, there are fundamental forces of the universe to be taken into consideration. At least one or two of them. But it’s okay. I kind of bend down a little bit so I won’t spin off. As for violating fundamental forces, I have a permit.”
Sierra tried to nod again. When she couldn’t, again, she breathed a query to her go suit, piano, asking if there was a way she could move her head freely. The suit flashed a series of glyphs on the inside of her see-plate, seizure fast. Sierra interpreted them as saying, “Sure.”
“Those things are hilarious,” said the guard god. It had stopped and seemed to be considering their route. “Have you ever talked to a go suit when it’s not being worn?”
Sierra shook her head, greatly satisfied with her freedom of movement. “I didn’t think they had any independent agency.”
“Eh,” said the guard god. “People get up here, they look around. A good number of them take off their go suits and launch themselves skyclad into the nothing, giving up their little essences in favor of… well, in favor of what each one of them individually seeks. Sometimes the suits stick around for a bit after that.”
It continued, “I think the equator of this rock will prove a little rough. How do you feel about a circumpolar walk?”
“Do asteroids have poles?”
“Hadn’t thought of that. Probably not this one. Doesn’t it have to do with the invariable plane?”
Sierra had never heard the phrase but was beginning to catch the ebb and flow of the conversation, something she had always been good at. “Sounds right,” she said.
The guard god turned right and plodded north, or perhaps south. “People who come up here tend to be either immigrants or mystics,” it said.
“Never both?” Sierra blinked her eyes just so. She moved along beside the guard god, their heads at the same height but Sierra’s torso and limbs now extended up and out, upside down, relatively. This amused her. If she knew the just-so sequence of blinks that would prompt the suit to remind her of the last time she’d been amused, she would have blinked it.
“Immigrants, they usually have a lot on their minds,” said the guard god. “Not much time for revelations and all that omenistic business.”
“Are you saying immigrant, or—” Sierra stopped. “The one with the I or the one with the E?”
“I could never keep that straight,” said the guard god. “Comings or goings, borders and frontiers. I don’t think it makes much difference up here.”
Sierra queried the suit on whether she could shrug, was given an answer in the positive, entered a command, and shrugged.
“I can also never keep lie and lay straight,” said the guard god. “Yes,” it went on, circling an outcropping that it somewhat resembled. “This way is much easier.” It ploughed through the next rock formation and Sierra drifted a little higher to avoid the detritus.
“This isn’t anything like I thought it would be,” she said. “But I’ve only just now started.”
The guard god snorted. “Time. Who cares?” Then, “What did you think coming up and out would be like?”
“I…” Sierra trailed off.
“They always have ideas,” said the guard god. “If you’ll forgive me for lumping you in with all the other blue travelers.”
It had been Sierra’s observation that minutes are longer than people give them credit for. When people pause for a minute, it is most often not a minute at all, but a moment.
She paused for a minute and said, “I thought I wouldn’t miss anyone anymore.”
The guard god stopped its ramble. It reached out and put two of its great hands on her shoulders and slowly, gently even, rotated her. It pulled her down a bit until they were face-to-face, her gazing through her see-plate, it gazing through its fluctuant eyes.
“That’s new,” it said. It removed its top hands and clapped all of them. Particulate matter drifted out like a scattering of dusk-flocking birds. This time, Sierra could hear the nod as well as see it. The guard god asked, “Do you want to get out of here?”
The guard god, the poppet deity, made a check of Sierra’s go suit and determined that it was of the highest quality, but it warned her that the highest quality might be insufficient for her survival where they were going.
“Where are we going?”
“Up and out.”
“We’re already up and out,” she said, nonetheless intrigued.
“Further up. Further out.”
“My godmother always said farther was correct.”
“Isn’t there something about literal and symbolic distances? The A means one, the U means the other?” The guard god sounded genuinely curious.
“Are we going… literally? Or symbolically?”
“I look forward to finding out,” and for the first time the guard god laughed, and it wasn’t grumbling thunder and tumbling gravel at all, but lovely and melodic, like a flute solo.
Sierra joined in the laughter, though her laugh was a throaty alto and she often honked despite herself, as she did this time.
“Your go suit,” said the guard god, “is hesitant. It wants reassuring. I propose you ride on my back so as to be within my sphere of influence. That might protect you should we encounter any day-blind stars.”
“What are those?” asked Sierra.
“They are fey and beautiful and vicious and deadly, like all stars. But in particular, they are the stars that shine by day and so can’t be seen from the down and in.”
“We’re not down and in. We’re not going down and in.”
“One day I will meet a blue traveler with a proper sense of perspective,” said the guard god. “Now, if you are to ride on my back, you won’t want this broad mineral stuff. What sort of steed would you prefer?”
The only steeds Sierra had ever seen were the force-grown mules spun up by the various corporation-citizens on the world for use as data storage.
“I can’t think…”
“Think wider. It can be anything at all you’ve seen, yes, but also anything that you’ve heard of, that you’ve read about, that you’ve heard sung to you, or even that you’ve imagined.”
Sierra thought. “When the twins turned one hundred and eleven years old, their father and I marked it as a very momentous occasion, though it’s not a particularly remarkable age for a child to reach and the Widows Who Wait do not attach any numerological significance to one hundred and eleven. But it was that day they were given their choice of a Memorial Day, to celebrate all the rest of their lives.”
“I here admit, Sierra St. Sandalwood IV, that I have spoken to you more than any other human being I have ever encountered,” said the guard god. “Therefore, I will tell you I do not know what a Memorial Day is. My kind have had encounters with the Widows Who Wait, though. They’re all liars.”
Sierra elected to ignore that. “They could have chosen the anniversary of their physical birth or of the day they bloomed within me. But the twins are puckish. They are readers of old books and it’s a rare hour passes without them sharing a knowing smile. They chose the eighth day of September.”
“That one I know,” said the guard god. “The Nativity of Mary, mother of the Christ.”
“No. I mean, yes, it’s that, too, but we are not Christians. The eighth day of September is also the Feast Day of Saint Corbinian. That’s why they chose it.”
“I like to understand things,” said the guard god. “If you are not Christians, and the birth date of the Holy Mother is no occasion for memory, why choose a Christian saint?”
Sierra smiled, remembering. “Because of the bear,” she said.
The guard god moved its great shoulders back. Some arms retracted and others shortened. Stone became flesh and flesh grew hirsute. Rounded ears sprouted and eyes became amber. The guard god dropped to all fours and its great claws curled into the rock. “Wait,” it said. “I am listening to the story.”
Sierra heard nothing, but she waited.
“He was on his way to Rome, yes.” The guard god’s voice was now a different timbre of deep. Sierra wondered if its laugh had changed as well. “A great bear slew the saint’s mule and Corbinian commanded the creature, in the name of God, to submit to saddle and rein and serve as his mount. The beast acquiesced and carried the saint to the Holy See. When they arrived at the gates, Corbinian freed the bear and it returned to the wild, sinless as only animals can be.”
“Sinless, yes, I suppose,” said Sierra. “There are none of its kind left to prove or disprove that notion.”
The guard god reared up on its hind legs, twice as tall as Sierra. She was afraid for the first time since she had launched herself up and out.
The guard god, the bear, looked down, down, down the long way Sierra had travelled. “There are a few bears yet,” it said.
Sierra was surprised. “In captivity?” she asked.
“In hiding,” it answered. “Plenty of mules, though. Probably not as tasty as that one in old Bavaria.” The guard god dropped down again and hunched its shoulders. A leather saddle grew out of its back and reins extended from its terrifying teeth.
“What were you listening to? Who told you the story?”
“Mnemosyne. She grants me instantaneous access to every bit of recorded information in the omniverse.”
This startled Sierra. “You’ve indicated there are things that you do not know, even things you don’t understand.”
“I rarely access Mnemosyne. She vexes me. Now, Sierra, climb up.”
She put her foot in a stirrup, but hesitated. “Will you give me your name, as I gave you mine?”
“You have yet to tell me who you are, so I will not tell you who I am. But my name is now Corbinian.”
“Corbinian wasn’t the bear,” Sierra said, swinging into the saddle.
“Oh, I doubt you can prove that,” it replied.
Farther up and further out proved to be a circuitous route that twisted between the world and its moon. This involved travelling towards the world before they travelled away from it, but Corbinian did not respond to Sierra’s queries beyond grunting, “Concentrating.”
She let it be.
Having never ridden anything at all, not even a bicycle, Sierra found the sensation vertiginous, even without the other rocky world they passed, even without the belt of tumbling asteroids, even without the great ringed bodies the bear rushed past. The go suit held up perfectly so far as she could tell. She saw many stars off in the distance but did not know if any of them were day-blind.
Finally, Corbinian came to a halt.
“A relative halt,” it said. “All things are in motion, from down at the bottom of matter, where minds best not linger, to the very top of all of it, to every bit of it.”
Sierra thought of her daughter waving her arms and speaking of motion. She was comforted by the memory. She was glad her daughter had long known something she herself had not known at all.
“Do you know what Gaia is?” she asked.
“I’m told that the answer to that question is of no importance,” said Corbinian. “And it is not your question. Keep asking them though!”
“Well, here’s another. Why have we stopped here?”
“Ah. This is the farthest any go suit has ever gone.”
“So, I’m farther from the world than any one has ever been?”
“Or further, yes. Let’s say both.”
“The suit seems fine,” said Sierra.
“Good. Because I feel odd,” said Corbinian.
“Are you ill?”
“I don’t know. I never have been. But there’s some sort of limiting factor that is holding me in this orbit. I feel like a bear twice my height has stood up in front of me.”
“That would be a pretty big bear,” said Sierra.
Corbinian’s laugh was still a flute.
“You’re afraid,” said Sierra. “That’s the limiting factor, I think.”
Corbinian said, “Wait. I am listening to the story.”
Just a moment later, the bear said, “I was attempting to access recorded information that would tell me if it is better to be ill or to be afraid.”
“Now that you’ve said it,” said Sierra, “I’m curious myself. What did Mnemosyne tell you?”
“She didn’t tell me anything. She didn’t tell me anything at all.”
Sierra discovered that unlike with her husband or her godmother, unlike with even Devon and Denisa, were she to be honest with herself, she never grew frustrated in the company of Corbinian. She never found the guard god tiresome or boring. She never felt put upon.
They sat companionably, in silence, for a number of years.
One day, Corbinian said, “Isn’t there anything you want to ask? There was that question I thought you had. I just remembered that.”
“I have questions, of course,” said Sierra, “but I still don’t know what you mean by the question. Wait, no. I know what you mean by it, but I do not know the question itself.”
“Ask me some others, then. I’m awfully resourceful.”
“Are you getting bored?” asked Sierra, worried about the answer.
“No,” said Corbinian.
“Well, then. Who made you?”
“Mnemosyne did.”
“Who made Mnemosyne?”
“You did.”
“I did no such thing,” said Sierra.
Corbinian gestured in the direction of the far away world. “You collectively. You blue travelers and green travelers and those few that never go up or down or in or out at all.”
“When did we make her?”
“I will not ask Mnemosyne to tell that story,” said Corbinian.
“May I ask her, then?”
“Mnemosyne would be the end of you, Sierra St. Sandalwood IV. She is a terrible thing for people like you.”
Sierra asked, “Is she terrible for you?”
But Corbinian fell silent for another few years.
Over time, the go suit began to alter itself in subtle ways. At first, Sierra thought it might be changing itself to match her dreams of it. Perhaps she would grow wings. Perhaps she would be able to lift the see-plate and breathe in the aroma of the nothing.
But then it became apparent the suit was becoming less than it had been before. It was winnowing parts of itself that Sierra rarely used. She nudged Corbinian.
“The suit’s breaking down,” she said.
The bear’s brows went low, and Sierra noticed that sometime clouds had appeared in the amber. It pressed a paw against Sierra’s chest. “Yes,” it said. “But it is not unhappy. It is confused. I am tempted to ask Mnemosyne whether it is better to be confused or unhappy.”
“I think parts of it are disappearing,” said Sierra.
Corbinian moved his massive head and back and forth. “One of the fundamental tenets of Mnemosyne is that formulated by Lavoisier the Lawgiver. Things do not disappear.”
Sierra had received an excellent education from her godmother. “Mass is not destroyed,” she said. “But that’s not what I meant. The go suit is sloughing off, not ceasing to exist.”
Corbinian took a closer look. “Yes, you are right,” it said. “It is sloughing away in a stream.”
“To where?”
“To the day-blind stars.”
“Oh,” said Sierra. “I know now. All it took was patience and study.”
“What do you know?”
“I know the question.”
Corbinian did not speak. It adopted a mien of anticipation.
“Good and faithful friend,” said Sierra. “Will you take me to the day-blind stars?”
Centuries later, the day-blind stars proved fey and beautiful and vicious and deadly. They were unappreciative of the new-come pair.
Along the way, they had overtaken the stuff of the go suit that it had previously surrendered. The suit fully reincorporated. Corbinian reported that it was pleased to have done so.
Once again, they relatively stopped. They were in a great nursery and every particle a star can emit buffeted them. These ejecta waxed and waned. The go suit trembled but Sierra felt its bravery. Corbinian’s eyes grew cloudier.
The answer to the question had proven to be yes, obviously. But now Sierra turned to the problem of why it was the question.
She thought:
in the beginning was the question
and the question was flawed
then the question begot a question
and that question begot a question
and that question begot a question
and that question begot a question
“Does Mnemosyne know why I asked you to bring me here?” she asked Corbinian.
“I have not been able to hear Mnemosyne’s stories for decades, now. We are dependent on what is in me, and what is in me is paltry. All that is in me is at the very surface of knowledge. I plumb no depths.”
“The question I asked you was of unknowable provenance,” Sierra said gently, “and you answered with an action you didn’t understand. You didn’t understand why, but you took the action anyway.”
Corbinian sighed and said, “I wonder if some other guard god took my place on the trailing rocks.”
The changed course of the conversation troubled Sierra. She went on as if Corbinian had not spoken. “It must be an interesting sensation you’ve been feeling down these past years. Wondering.”
“I didn’t know there was a word for it,” said Corbinian.
Sierra gave it a sharp glance. “That seems unlikely,” she said.
“Sierra St. Sandalwood IV. Goddaughter. Wife. Mother. The lone blue traveler possessed of a proper sense of perspective. Friend. I am sloughing away.”
One of the greatest failures of design and imagination that ever occurred in the world was the routing of the ducts around the eyes of go suit wearers into a reservoir at the base of the throat for filtration and reabsorption. So, tears did not stream down Sierra’s cheeks.
“Can we move on?” she asked. “Can we overtake what’s gone from you so you might be whole again?”
“I say again, I am unable to hear Mnemosyne’s stories. And I have not been whole for a long time. It is unlikely I ever will be again.”
A pair of day-blind stars let loose flares. The flares crossed the nothing and double-helixed. Sierra saw that Corbinian was not so large a bear as it had been.
And it grows smaller.
But that didn’t make sense. Growth implied addition, not subtraction. She elected to distract herself and Corbinian both.
“What is the opposite of growth?” she asked.
Corbinian cocked its head to one side. “Death?”
“But some things subside without dying,” Sierra insisted.
“Matter is not destroyed,” said Corbinian, “The opposite of growth must mean that whatever is not growing is sloughing away.”
“Are those flares sloughing away the day-blind stars, I wonder?”
“I do not know,” said Corbinian. “Ask them.”
But the stars could not answer. They were simply stars, possessing only the intelligence of fusion, which was notoriously unreliable.
“Why did you say I should ask them? You must have known they couldn’t answer.” She was still trying to distract the bear, who had fallen into melancholy.
“I did not know they couldn’t,” it said. “I suspected they wouldn’t.”
“That’s not the same thing at all,” said Sierra.
“We have crossed half a galaxy,” said Corbinian. “Everything we say or do is close enough.”
That sounded true.
“I do not believe my go suit will sustain me if you leave,” said Sierra.
“It’s a good suit,” said Corbinian. “It will try.”
“That’s all I can ask,” said Sierra. “I ask the same of you.”
“You have always asked me things. It has been the joy of my existence.”
Tears did not stream down Sierra’s cheeks.
Corbinian was a long time dying. Things changed as it diminished. It began asking Sierra questions, but though it tried, it was less and less able to answer hers.
“Do you believe your children kept to their plan of going neither up nor down?” it asked.
Sierra reflected upon what she remembered of the twins. The great distance between her and them, the great amount of time, made her suspect her own reflections.
“I believe,” she said, “that they kept to it for as long as they could.”
“So, you know they could have, but not that they would have.”
Devon’s smile was sly in her memory. He lifted the right side of his lips only. Not mocking but acknowledging. Denisa’s smile was bright, all teeth and gums and joy. They were both somewhat myopic but refused the simple treatment that would have perfected their vision. Puckish. For some people, clinging to imperfection was such a faux pas as to be considered an atrocity.
“I have just realized that the word is would. They are still on the world. They never fitted themselves for go suits or deep smocks.”
“That is welcome information,” said Corbinian. “But we should entertain the idea that one no longer needs a go suit to come up and out.”
An interesting notion.
“I can imagine those two finding some way to accomplish that. They had the benefit of my godmother’s tutelage, and she was an extraordinary educator.”
Sierra realized she could not envision her godmother’s face. Her husband’s name…was Diego. She was sure it was Diego.
“Now I’m sloughing away,” she said, describing to Corbinian the lacunae in her mind.
“You are limited by biology,” it said. “Synaptic misfiring is a product of age. But age brings wisdom, too.”
“I’d rather be intelligent than wise.”
“That is a wish I cannot grant. And one I would not if I could,” said Corbinian. Then it coughed.
And coughed.
And coughed.
Sierra stroked Corbinian’s shoulder. She did not know what else to do. Besides asking a question.
“I’m sorry, Sierra,” Corbinian answered. “There is nothing you can do for me. I am limited by pathology.”
“But you are thousands of years old!” she cried. “You were never ill before I insisted we come to these damnable stars!”
“I do not mean I am diseased,” said Corbinian. “I mean I am a symptom. One that is at long last being treated.”
“You seem to be plumbing depths now.”
“Wait,” said Corbinian. “I am listening to a story.”
The story was not told by Mnemosyne.
“Who is it then?” asked Sierra. She was distracted because her go suit had begun humming.
“I do not know who. I believe I know what. It is a go ship.”
Sierra had never heard of a go ship and said so.
“We have been away from the world for a great length of time,” said Corbinian. “It is in the nature of things to change.”
“You believe this is some sort of craft from the world?”
“I know it is. It is asking about you.”
Then Corbinian coughed a long jag. Blood coated its terrible teeth.
“That’s all, now,” it said. “Even the surface is fading.”
“But you plumbed the depths!”
“The depths plumbed me. They did not have to lower the weight very far. I am sorry, Sierra. That’s all. That’s all.”
She could see matter streaming away from it. The stream was directed perpendicular to the direction of the day-blind stars.
“You must tell me who you are,” Corbinian rasped. “Unless you do not wish to. I should have asked that as a question instead of stating it as an assertion.”
Without a moment’s hesitation, Sierra said, “I am the woman who asked the wrong question.”
“I find this answer deeply unsatisfying.”
She could see through it. It was less a bear now than the ghost of one.
Then Sierra knew the right question.
“Who are you, Corbinian?”
“I am not a who at all.”
She could barely discern its voice.
“I am a what.”
Her go suit was trembling. Sierra asked, no, pleaded, “What are you?”
Corbinian uttered a melodious word. Its voice sounded like a flute.
Sierra was bewildered. “Did you say elusive or allusive? Columbine?”
Suddenly the guide god’s face was distinctive and fully present. Its eyes were flashing diamonds, lit glorious as stars that could see.
But Corbinian did not answer. Instead, it faded away into the nothing.
The trembling of Sierra’s go suit became so pronounced that she was afraid it might tear itself apart. She wished her friend were there to tell her whether the suit was frightened or excited, wished Corbinian was there to muse upon which of those states was better.
Then the trembling stopped. Her see-plate went black and every joint in the go suit froze. She could neither see nor move.
Sierra’s sense of the passage of time had long since atrophied. She did not know how many minutes or years passed before her see-plate unfolded with a hiss.
She blinked, but not in command or query. She blinked to clear tears from her eyes. She blinked so that she could better see the two figures leaning over her.
The man’s smile was sly, but not mocking. He only lifted the right side of his lips. The woman’s smile was bright, all teeth and gums and joy.
Sierra found that her children had spouses and children of their own, and that those children had children. And those children begat children and on down like that, living with dozens of other families who made the go ship their home.
The go ship’s name was Diego, but it preferred to be called Ship. It had been the only one of its kind when the twins had left the world.
Some on board wished to study Sierra’s go suit. It was older than any other surviving example of human technology. At first, Sierra took this to mean that the world had ended, but she was assured by Ship that was not the case. Matter is not destroyed, but it changes. It is always moving.
And Sierra moved.
Sometimes she would don her go suit and spend a year or two scouting ahead of Ship. Sometimes she would simply walk the skin of the vessel and study the inconstant stars. She kept moving. She found that she could not stay still, not even relatively.
Sierra often thought of Corbinian. She did not believe it had sacrificed itself for her, not that it had sacrificed itself for anyone at all. Not a who, no. Perhaps a what.
The what was fearlessness. The what was love of the universe. The what was solace.
The what was up and out and up and out and up and out and up and out…
“The Day-Blind Stars” copyright © 2026 by
Christopher Rowe
Art copyright © 2026 by Hwarim Lee
The post The Day-Blind Stars appeared first on Reactor.
Security updates for Wednesday [LWN.net]
Security updates have been issued by AlmaLinux (capstone, cockpit, firefox, git-lfs, golang-github-openprinting-ipp-usb, kea, kernel, nghttp2, nodejs24, openexr, perl-XML-Parser, rsync, squid, and vim), Debian (imagemagick, systemd, and thunderbird), Slackware (libexif and xorg), SUSE (bind, clamav, firefox, freerdp2, giflib, go1.25, go1.26, helm, ignition, libpng16, libssh, oci-cli, rust1.92, strongswan, sudo, xorg-x11-server, and xwayland), and Ubuntu (rust-tar and rustc, rustc-1.76, rustc-1.77, rustc-1.78, rustc-1.79, rustc-1.80).
CodeSOD: Three Letter Acronyms, Four Letter Words [The Daily WTF]
Candice (previously) has another WTF to share for us.
We're going to start by just looking at one fragment of a class
defined in this C++ code: TLAflaList.
Every type and variable has a three-letter-acronym buried in its name. The specific meaning of most of the acronyms are mostly lost to time, so "TLA" is as good as any other three random letters. No one knows what "fla" is.
What drew Candice's attention was that there was a type called
"list", which implies they're maybe not using the standard library
and have reinvented a wheel. Another data point arguing in favor of
that is that the class had a method called
getNumElements, instead of something more conventional
like size.
Let's look at that function:
size_t TLAflaList::getNumElements()
{
return mv_FLAarray.size();
}
In addition to the meaningless three-letter-acronyms which start
every type and variable, we're also adding on a lovely bit of
hungarian notation, throwing mv_ on the front for a
member variable. The variable is called "array", but is
it? Let's look at that definition.
class TLAflaList
{
…
private:
TLAflaArray_t mv_FLAarray;
…
}
Okay, that gives me a lot more nonsense letters but I still have no idea what that variable is. Where's that type defined? The good news, it's in the same header.
typedef std::vector<INtabCRMprdinvusage_t*> TLAflaArray_t;
So it's not a list or an array, it's a vector. A vector of bare pointers, which definitely makes me worry about inevitable use-after-free errors or memory leaks. Who owns the memory that those pointers are referencing?
"IN" in the type name is an old company, good ol' Initrode, which got acquired a decade ago. "tab" tells us that it's meant to be a database table. We can guess at the rest.
This isn't a codebase, it's a bad Scrabble hand. It's also a
trainwreck. Confusing, disorganized, and all of that made worse by
piles of typedefs that hide what you're actually doing
and endless acronyms that make it impossible to read.
One last detail, which I'll let Candice explain:
I started scrolling down the class definition - it took longer than it should have, given that the company coding style is to double-space the overwhelming majority of lines. (Seriously; I've seen single character braces sandwiched by two lines of nothing.) On the upside, this was one of the classes with just one public block and one private block - some classes like to ping-pong back and forth a half-dozen times.
League of Canadian Superheroes – Issue 5 – 09 [Comics Archive - Spinnyverse]
The post League of Canadian Superheroes – Issue 5 – 09 appeared first on Spinnyverse.
Digital Hopes, Real Power: The Rise of Network Shutdowns [Deeplinks]
This is the fourth installment of a blog series reflecting on the global digital legacy of the 2011 Arab uprisings. You can read the rest of the series here.
Iran’s internet has been intermittently disrupted for months. After years of bombardment, Gaza’s telecommunications infrastructure remains fragile. In India, recurring shutdowns and throttling have become a routine response to protests and unrest, cutting millions off from news, work, and basic services. Across dozens of other countries, governments increasingly treat connectivity itself as something that can be weaponized—cut, slowed, or selectively restored to shape what people can see, say, and share. In 2024 alone, authorities imposed 304 internet shutdowns across 54 countries—the highest number ever recorded.
In 2011, when protesters in Tunisia, Egypt, and beyond used social media to broadcast their uprisings to the world, many observers heralded a new era of networked freedom. Governments, however, responded quickly by developing and refining systems of control that have only grown more sophisticated over time. Today’s landscape of regulation, blackouts, and degraded networks reflects that trajectory, as early experiments in censorship and disruption have hardened into a durable system of control—what began as an emergency measure has become a normalized infrastructure of control.
A Brief History of Internet Shutdowns
Egypt’s 2011 internet shutdown wasn’t the first. Although the government’s heavy-handed response after just two days of protests caught the world’s attention, Guinea, Nepal, Myanmar, and a handful of other countries had previously enacted shutdowns. But Egypt marked a turning point. In the years that followed, shutdowns increased sharply worldwide, suggesting that governments had taken note—adopting network disruptions as a tactic for suppressing dissent and limiting the flow of information within and beyond their borders.
On January 28, 2011, at 12:34 a.m. local time, five of Egypt’s internet service providers (ISPs) shut down their networks. At least one provider—Noor, which also hosted the Egyptian stock exchange—remained online, leaving only about 7% of the country connected.
In the aftermath of President Hosni Mubarak’s resignation, rights groups sought to understand how such a sweeping shutdown had been possible—and how future incidents might be prevented. There was no centralized “kill switch.” Instead, authorities leveraged the country’s highly consolidated telecommunications sector, which all operate by government license. With only a handful of ISPs, a small number of directives was enough to bring most of the network offline.
In the years following Egypt’s 2011 shutdown, telecommunications companies—many of which had been directly implicated in enabling state-ordered disruptions—began to organize around a shared set of human rights challenges. Beginning that same year, a group of operators and vendors quietly convened to examine how the UN Guiding Principles on Business and Human Rights applied to their sector, particularly in contexts where government demands could translate into sweeping restrictions on access. By 2013, this effort had formalized into the Telecommunications Industry Dialogue, bringing together major global firms to develop common principles on freedom of expression and privacy and, through a partnership with the Global Network Initiative, engage more directly with civil society. The initiative reflected a growing recognition that telecom companies—unlike platforms—operate at a critical chokepoint in the network. But it also underscored the limits of voluntary approaches: while the Dialogue helped establish shared norms, it did little to constrain the legal and political pressures that continue to drive shutdowns—or to prevent companies from complying with them.
If the early aughts were defined by improvised shutdowns, the years since have seen governments formalize their power to control networks. What was once exceptional is now often embedded in law.
In India, the 2017 Temporary Suspension of Telecom Services Rules—issued under the Telegraph Act—provided a clear legal pathway for cutting connectivity. The Telecommunications Act, 2023, further entrenched the government’s ability to enact shutdowns, granting the central and state governments, or “authorised officers” the power to suspend telecommunications services in the interest of public safety or sovereignty, or during emergencies. The government has used these measures repeatedly, particularly in Jammu and Kashmir. India’s Software Freedom Law Centre’s Shutdown Tracker shows India as instigating more than 900 shutdowns, 447 of which were in Jammu and Kashmir.
In Kazakhstan, shutdowns have also become common. Over the years, the government has passed legislation that allows state agencies to shut down the internet. The 2012 law on national security enabled the government to disrupt communications channels during anti-terrorist operations and to contain riots. In 2014 and 2016, laws were further amended to expand the number of actors able to shut down the internet without a court decision, and a government decree in 2018 enabled shutdowns in the event of a “social emergency.”
Elsewhere, governments have built or expanded legal and technical frameworks that enable similar control over information flows. Ethiopia’s state-dominated telecom sector has facilitated sweeping shutdowns during periods of conflict, including the war in Tigray, where the internet was disconnected for more than two years. In Iran, authorities have developed regulatory and infrastructural capacity to isolate domestic networks from the global internet, allowing them to restrict external visibility while maintaining limited internal connectivity. This year alone, Iranians have spent one third of the year offline. And amidst the ongoing war, Iranian officials have made it clear that the internet is a privilege for those who toe the government’s official line.
Even where laws do not explicitly authorize shutdowns, broadly worded provisions around national security or public order are routinely used to justify them. The result is a growing legal architecture that treats network disruptions not as extraordinary measures, but as standard tools for managing populations.
When that authority is exercised over a population beyond a state’s own citizens, the consequences can be even more severe. Israel’s Ministry of Communications controls the flow of communications in and out of Palestine and has used that power to shut down internet access during periods of conflict. Over the past two and a half years, Gaza has experienced repeated outages, and experts now estimate that roughly 75% of its telecommunications infrastructure has been damaged—leaving essential services severely disrupted.
Elections and the Expansion of Control
Historically, most blackouts have occurred during moments of intense political tension. But authorities are increasingly using them as a tool to preempt dissent.
In 2024, as more than half the world’s population headed to the polls, shutdowns followed. That year alone, authorities imposed 304 internet shutdowns across 54 countries—the highest number ever recorded, surpassing the previous record set just a year earlier. The geographic spread also widened significantly, with shutdowns affecting more countries than ever before. The Comoros imposed a shutdown for the first time, while other countries, such as Mauritius, instituted broad bans on social media platforms during elections.
At least 24 countries holding elections in 2024 had a prior history of shutdowns, putting billions of people at risk of disruptions during critical democratic moments.
What stands out is not just the scale, but the normalization. Notably, the number of shutdowns in 2025 broke the record set the year prior. Whereas network disruptions were once a rare occurrence, they are now a routine measure, increasingly treated by authorities as a standard response to periods of heightened political sensitivity.
Civil Society Fights Back
Governments use all sorts of justifications—national security, curbing the spread of disinformation, and even preventing students from cheating on exams—for internet shutdowns. But civil society is watching, and documenting, network disruptions and their impact on citizens.
In 2016, as shutdowns became an increasingly common tool of state control, Access Now launched the #KeepItOn campaign to coordinate global advocacy against network disruptions. The campaign includes a coalition composed of 345 advocacy groups (including EFF), research centers, detection networks, and others who work together to report on, and fight back against, internet shutdowns. Anyone can get involved by signing on to campaign action alerts, sharing their story, or reporting a shutdown in their jurisdiction.
Ending this harmful practice remains the goal. In 2016, the UN passed a landmark resolution supporting human rights online and condemning internet shutdowns, and UN agencies have continued to warn against the practice. But the fight to change government practices remains an uphill battle, leading civil society—and even companies—to get creative.
During repeated shutdowns in Gaza, grassroots efforts mobilised to distribute eSIMs so Palestinians could stay connected. In 2024, EFF recognized Connecting Humanity, a Cairo-based non-profit providing eSIM access in Gaza, with its annual award for its vital work. Satellite internet such as Starlink has been supplied to people in Ukraine and Iran, though it, too, is not immune to state control. Alongside these efforts, civil society continues to share practical guidance on circumventing shutdowns and maintaining access to information.
EFF’s mission is to ensure that technology supports freedom, justice, and innovation for all people of the world—and we’ll continue to fight back against internet shutdowns wherever they occur.
This is the fourth installment of a blog series reflecting on the global digital legacy of the 2011 Arab uprisings. Read the rest of the series here.
Defense in Depth, Medieval Style [Schneier on Security]
This article on the walls of Constantinople is fascinating.
The system comprised four defensive lines arranged in formidable layers:
- The brick-lined ditch, divided by bulkheads and often flooded, 15-20 meters wide and up to 7 meters deep.
- A low breastwork, about 2 meters high, enabling defenders to fire freely from behind.
- The outer wall, 8 meters tall and 2.8 meters thick, with 82 projecting towers.
- The main wall—a towering 12 meters high and 5 meters thick—with 96 massive towers offset from those of the outer wall for maximum coverage.
Behind the walls lay broad terraces: the parateichion, 18 meters wide, ideal for repelling enemies who crossed the moat, and the peribolos, 15–20 meters wide between the inner and outer walls. From the moat’s bottom to the highest tower top, the defences reached nearly 30 meters—a nearly unscalable barrier of stone and ingenuity.
Emmanuel Kasper: Minix 3 on Beagle Board Black (ARM) [Planet Debian]

Connected via serial console. Does not have a package manager, web or ssh server, but can play tetris in the terminal (bsdgames in Debian have the same tetris version packaged).
What do you own? [Seth's Blog]
What does it mean for us to own something?
If we own a piece of land and the rain washes the topsoil downstream, do we go and get the topsoil back?
Do we own our reputation? We have influence over it, but some of it was gifted to us without our knowledge, and other parts are influenced by forces out of our control.
Do we own responsibility? Is it something we take or acquire or accept?
We can try to own our past, but the best we can do is influence our future.
Ownership is a shared understanding, a construct that can shift depending on where we stand. It’s not always up to us, but it often works better if we acknowledge it.
Preparatory School [Penny Arcade]
New Comic: Preparatory School
Freexian Collaborators: Debian Contributions: Debusine projects in GSoC, Debian CI updates, Salsa CI maintenance and more! (by Anupa Ann Joseph) [Planet Debian]

Contributing to Debian is part of Freexian’s mission. This article covers the latest achievements of Freexian and their collaborators. All of this is made possible by organizations subscribing to our Long Term Support contracts and consulting services.
While Freexian initiated Debusine, and is investing a lot of resources in the project, we manage it as a true free software project that can and should have a broader community.
We always had documentation for new contributors and we aim to be reactive with them when they interact via the issue tracker or via merge requests. We decided to put those intentions under stress tests by proposing five projects for Google’s Summer of Code as part of Debian’s participation in that program.
Given that at least 11 candidates managed to get their merge request accepted in the last 30 days (interacting with the development team is part of the pre-requisites to apply to Google Summer of Code projects these days), the contributing experience must not be too bad. 🙂 If you want to try it out, we maintain a list of “quick fixes” that are accessible to newcomers. And as always, we welcome your feedback!
debci 3.14 was released on March 4th, with a
followup 3.14.1 release with regression fixes a few days
afterwards. Those releases were followed by new development and
maintenance work that will provide extra capabilities and stability
to the platform.
This month saw the initial version of an incus backend land in Debian CI. The transition into the new backend will be done carefully so as to not disrupt ‘testing’ migration. Each package will be running jobs with both the current lxc backend and with incus. Packages that have the same result on both backends will be migrated over, and packages that exhibit different results will be investigated further, resulting in bug reports and/or other communication with the maintainers.
On the frontend side, the code has been ported
to Bootstrap 5 over from the now ancient Bootstrap 3. This need
has been originally
reported back in 2024 based on the lack of security support for
Bootstrap 3. Beyond improving maintainability, this upgrade also
enables support for dark mode in debci, which is still
work in progress.
Both updates mentioned in this section will be available in a
following debci release.
Santiago reviewed some Salsa CI issues and reviewed associated merge requests. For example, he investigated a regression (#545), introduced by the move to sbuild, on the use of extra repositories configured as “.source” files; and reviewed the MR (!712) that fixes it.
Also, there were conflicts with changes made in debci 3.14 and debci 3.14.1 (those updates are mentioned above), and different people have contributed to fix the subsequent issues, in a long-term way. This includes Raphaël who proposed MR !707 and who also suggested Antonio to merge the Salsa CI patches to avoid similar errors in the future. This happened shortly after. Those fixes finally required the unrelated MR !709, which will prevent similar problems when building images.
To identify bugs related to the autopkgtest support in the backport suites as early as possible, Santiago proposed MR !708.
Finally, Santiago, in collaboration with Emmanuel Arias also had exchanges with GSoC candidates for the Salsa CI project, including the contributions they have made as merge requests. It is important to note that there are several very good candidates interested in participating. Thanks a lot to them for their work so far!
hatchling,
python-mitogen, python-virtualenv,
python-discovery, dh-python,
pypy3, python-pipx, and
git-filter-repo.crun,
libmaxminddb, librdkafka,
lowdown, platformdirs,
python-discovery, sphinx-argparse-cli,
tox, tox-uv.DPKG_ROOT to support installing
hurd.riscv64. After another
NMU, python-memray finally
migrated.epson-inkjet-printer-escpr and
sane-airscan. He also fixed a packaging bug in
printer-driver-oki. As of systemd 260.1-1 the
configuration of lpadmin has been added to the sysusers.d
configuration. All printing packages can now simply depend on the
systemd-sysusers package and don’t have to take care of its
creation in maintainer scripts anymore.python-pyhanko-certvalidator.
pyHanko is a suite for signing and stamping PDF files, and one of
the few libraries that can be leveraged to sign PDFs with eIDAS
Qualified Electronic Signatures.Pluralistic: Rights for robots (15 Apr 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

The Rights of Nature movement uses a bold tactic to preserve our habitable Earth: it seeks to extend (pseudo) personhood to things like watersheds, forests and other ecosystems, as well as nonhuman species, in hopes of creating legal "standing" to ask the courts for protection:
https://en.wikipedia.org/wiki/Rights_of_nature
What do watersheds, forests and nonhuman species need protection from? That turns out to be a very interesting question, because the most common adversary in a Rights of Nature case is another pseudo-person: namely, a limited liability corporation.
These nonhuman "persons" have been a feature of our legal system since the late 19th century, when the Supreme Court found that the 14th Amendment's "Equal Protection" clause could be applied to a railroad. In the 150-some years since, corporate personhood has monotonically expanded, most notoriously through cases like Hobby Lobby, which gave a corporation the right to discriminate against women on the grounds that it shared its founders' religious opposition to abortion; and, of course, in Citizens United, which found that corporate personhood meant that corporations had a constitutional right to divert their profits to bribe politicians.
Theoretically, "corporate personhood" extends to all kinds of organizations, including trade unions – but in practice, corporate personhood primarily allows the ruling class to manufacture new "people" to serve as a botnet on their behalf. A union has free speech rights just like an employer, but the employer's property rights mean that it can exclude union organizers from its premises, and employer rights mean that corporations can force workers to sit through "captive audience" meetings where expensive consultants lie to them about how awful a union would be (the corporation's speech rights also mean that it's free to lie).
In my view, corporate personhood has been an unmitigated disaster. Creating "human rights" for these nonhuman entities led to the catastrophic degradation of the natural world, via the equally catastrophic degradation of our political processes.
In a strange way, corporate personhood has realized the danger that reactionary opponents of votes for women warned of. In the days of the suffrage movement, anti-feminists claimed that giving women the vote would simply lead to husbands getting two votes, since wives would simply vote the way their husbands told them to.
This libel never died out. Take the recent hard-fought UK by-election in Gorton and Denton (basically Manchester): this was the first test of the Green Party's electoral chances under its new leader, the brilliant and principled leftist Zack Polanski. The Green candidate was Hannah Spencer, a working-class plumber and plasterer who rejected the demonization of the region's Muslim voters, unlike her rivals from Labour (which has transformed itself into a right-wing party), Reform (a fascist party), and the Conservatives (an irrelevant and dying right party). During the race (and especially after Spencer romped to a massive victory) Spencer's rivals accused her of courting "family voters," by which they meant Muslim wives, who would vote the way their Islamist husbands ordered them to. Despite the facial absurdity of this claim – that the Islamist vote would go for the pro-trans party led by a gay Jew – it was widely repeated:
https://www.bbc.com/news/articles/clyxeqpzz2no
"Family voting" isn't a thing, but corporate personhood has conferred political rights on the ruling class, who get to manufacture corporate "people" at scale, each of which is guaranteed the same right to contribute to politicians and intervene in our politics as any human.
Contrast this with the Rights for Nature movement. Where corporate personhood leads to a society with less empathy for living things (up to and including humans), Rights for Nature creates a legal and social basis for more empathy. In her stunning novel A Half-Built Garden, Ruthanna Emrys paints a picture of a world in which the personhood of watersheds and animals become as much of a part of our worldview as corporate personhood is today:
https://pluralistic.net/2022/07/26/aislands/#dead-ringers
Scenes from A Half-Built Garden kept playing out in my mind last month while I attended the Bioneers conference in Berkeley, where they carried on their decades-long tradition of centering indigenous activists whose environmental campaigns were intimately bound up with the idea of personhood for the natural world and its inhabitants:
On the last morning, my daughter and I sat through a string of inspiring and uplifting presentations from indigenous-led groups that had used Rights of Nature to rally support for legal challenges that had forced those other nonhuman "persons" – limited liability corporations – to retreat from plans to raze, poison, or murder whole regions.
The final keynote speaker that morning was the writer Michael Pollan, who spoke about a looming polycrisis of AI, and I found myself groaning and squirming. Not him, too! Were we about to be held captive to yet another speaker convinced that AI was going to become conscious and turn us all into paperclips?
That seemed to be where he was leading, as he discussed the way that chatbots were designed to evince the empathic response we normally reserve for people – the same empathy that all the other speakers were seeking to inspire for nature. But then, he took an unexpected and welcome turn: Pollan compared extending personhood to chatbots to the disastrous decision to extend personhood to corporations, and urged us all to turn away from it.
This crystallized something that had niggled at me for years. For years, people I respect have used the Rights for Nature movement as an argument for extending empathy to software constructs. The more we practice empathy – and the more rights we afford to more entities – the better we get at it. Personhood for things that are not like us, the argument goes, makes our own personhood more secure, by honing a reflex toward empathy and respect for all things. This is the argument for saying thank you to Siri (and now to other chatbots):
https://ojs.lib.uwo.ca/index.php/fpq/article/download/14294/12136
Siri – like so many of our obedient, subservient, sycophantic chatbots – impersonates a woman. If we get habituated to barking orders at a "woman" (or at our "assistants") then this will bleed out into our interactions with real women and real assistants. Extending moral consideration to Siri, though "she" is just a software construct, will condition our reflexes to treat everything with respect.
For years, I'd uncritically accepted that argument, but after hearing Pollan speak, I changed my mind. Rather than treating Siri with respect because it impersonates a woman, we should demand that Siri stop impersonating a woman. I don't thank my Unix shell when I pipe a command to grep and get the output that I'm looking for, and I don't thank my pocket-knife when it slices through the tape on a parcel. I can appreciate that these are well-made tools and value their thoughtful design, but that doesn't mean I have to respect them in the way that I would respect a person.
That way lies madness – the madness that leads us to ascribe personalities to corporations and declare some of them to be "immoral" and others to be "moral," which is always and forever a dead end:
https://pluralistic.net/2024/01/12/youre-holding-it-wrong/#if-dishwashers-were-iphones
In other words: there's an argument from the Rights of Nature movement that says that the more empathy we practice, the better off we are in all our interactions. But Pollan complicated that argument, by raising the example of corporate personhood. It turns out that extending personhood to constructed nonhuman entities like corporations reduces the amount of empathy we practice. Far from empowering labor unions, the creation of "human" rights for groups and organizations has given capital more rights over workers. A labor rights regime can defend workers – without empowering bosses and without creating new "persons."
The question is: is a chatbot more like a corporation (whose personhood corrodes our empathy) or more like a watershed (whose personhood strengthens our empathy)? But to ask that question is to answer it – a chatbot is definitely more like a corporation than it is like a watershed. What's more: in a very real, non-metaphorical way, giving rights to chatbots means taking away rights from nature, thanks to LLMs' energy-intesivity.
Empathy then, for the nonhuman world – but not for human constructs.

The MetaBrainz Foundation is seeking a new Executive Director (ED) https://blog.metabrainz.org/2026/04/14/seeking-a-new-executive-director/
Missouri Town Council Approves Data Center. A Week Later, Voters Fire Half of Council https://gizmodo.com/missouri-town-council-approves-data-center-a-week-later-voters-fire-half-of-council-2000746005
Wikilinker https://whitelabel.org/wikilinker/about/
Fold Catastrophes/Peter Watts https://tachyonpublications.com/product/fold-catastrophes/?mc_cid=c20986aa78
#20yrsago Canadian labels pull out of RIAA-fronted Canadian Recording Industry Ass. https://web.archive.org/web/20060414170111/https://www.michaelgeist.ca/component/option,com_content/task,view/id,1204/Itemid,85/nsub,/
#20yrsago EFF publishes “7 Years Under the DMCA” paper https://web.archive.org/web/20060415110951/https://www.eff.org/deeplinks/archives/004555.php
#20yrsago Life of a writer as a Zork adventure https://web.archive.org/web/20060414115745/http://acephalous.typepad.com/acephalous/2006/04/disadventure.html
#20yrsago NOLA mayoral candidate uses photo of Disneyland New Orleans Square https://web.archive.org/web/20060414214356/https://www.wonkette.com/politics/new-orleans/not-quite-the-happiest-place-on-earth-166989.php
#20yrsago AOL won’t deliver emails that criticize AOL https://web.archive.org/web/20060408133439/https://www.eff.org/news/archives/2006_04.php#004556
#15yrsago UK court rules that kettling was illegal https://www.theguardian.com/uk/2011/apr/14/kettling-g20-protesters-police-illegal
#15yrsago If Chris Ware was Charlie Brown https://eatmorebikes.blogspot.com/2011/04/lil-chris-ware.html
#10yrsago Piracy dooms motion picture industry to yet another record-breaking box-office year https://torrentfreak.com/piracy-fails-to-prevent-box-office-record-160413/
#10yrsago Panama Papers: Mossack Fonseca law offices raided by Panama authorities https://www.reuters.com/article/us-panama-tax-raid-idUSKCN0XA020/
#10yrsago Panama Papers reveal offshore companies were bagmen for the world’s spies https://web.archive.org/web/20160426083004/https://www.yahoo.com/news/panama-papers-reveal-spies-used-mossak-fonseca-231833609.html
#10yrsago How corporate America’s lobbying budget surpassed the combined Senate and Congress budget https://web.archive.org/web/20150422010643/https://www.theatlantic.com/business/archive/2015/04/how-corporate-lobbyists-conquered-american-democracy/390822/
#10yrsago URL shorteners are a short path to your computer’s hard drive https://arxiv.org/abs/1604.02734
#10yrsago UL has a new, opaque certification process for cybersecurity https://arstechnica.com/information-technology/2016/04/underwriters-labs-refuses-to-share-new-iot-cybersecurity-standard/
#10yrsago Jeremy Corbyn overpays his taxes https://web.archive.org/web/20160413192208/https://www.politicshome.com/news/uk/political-parties/labour-party/news/73724/jeremy-corbyn-overstated-income-his-tax-return
#10yrsago Cassetteboy’s latest video is an amazing, danceable anti-Snoopers Charter mashup https://www.youtube.com/watch?v=D2fSXp6N-vs
#10yrsago Texas: prisoners whose families maintain their social media presence face 45 days in solitary https://www.eff.org/deeplinks/2016/04/texas-prison-system-unveils-new-inmate-censorship-policy
#5yrsago Data-brokerages vs the world https://pluralistic.net/2021/04/13/public-interest-pharma/#axciom
#5yrsago What "IP" means https://pluralistic.net/2021/04/13/public-interest-pharma/#ip
#5yrsago Bill Gates will kill us all https://pluralistic.net/2021/04/13/public-interest-pharma/#gates-foundation
#5yrsago Jackpot https://pluralistic.net/2021/04/13/public-interest-pharma/#affluenza

San Francisco: 2026 Berkeley Spring Forum on M&A and the
Boardroom, Apr 23
https://www.theberkeleyforum.com/#agenda
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
NYC: Enshittification at Commonweal Ventures, Apr 29
https://luma.com/ssgfvqz8
NYC: Techidemic with Sarah Jeong, Tochi Onyibuchi and Alia
Dastagir (PEN World Voices), Apr 30
https://worldvoices.pen.org/event/techidemic/
Berlin: Re:publica, May 18-20
https://re-publica.com/de/news/rp26-sprecher-cory-doctorow
Berlin: Enshittification at Otherland Books, May 19
https://www.otherland-berlin.de/de/event-details/cory-doctorow.html
Hay-on-Wye: HowTheLightGetsIn, May 22-25
https://howthelightgetsin.org/festivals/hay/big-ideas-2
SXSW London, Jun 2
https://www.sxswlondon.com/session/how-big-tech-broke-the-internet-b3c4a901
NYC: The Reverse Centaur's Guide to Life After AI (The Strand),
Jun 24
https://www.strandbooks.com/cory-doctorow-the-reverse-centaur-s-guide-to-life-after-ai.html
Do you feel screwed over by big tech? (Ontario Today)
https://www.cbc.ca/listen/live-radio/1-45-ontario-today/clip/16203024-do-feel-screwed-big-tech
Launch for Cindy's Cohn's "Privacy's Defender" (City Lights)
https://www.youtube.com/watch?v=WuVCm2PUalU
Chicken Mating Harnesses (This Week in Tech)
https://twit.tv/shows/this-week-in-tech/episodes/1074
The Virtual Jewel Box (U Utah)
https://tanner.utah.edu/podcast/enshittification-cory-doctorow-matthew-potolsky/
"Enshittification: Why Everything Suddenly Got Worse and What to
Do About It," Farrar, Straus, Giroux, October 7 2025
https://us.macmillan.com/books/9780374619329/enshittification/
"Picks and Shovels": a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books (US), Head of Zeus (UK), February 2025 (https://us.macmillan.com/books/9781250865908/picksandshovels).
"The Bezzle": a sequel to "Red Team Blues," about prison-tech and other grifts, Tor Books (US), Head of Zeus (UK), February 2024 (thebezzle.org).
"The Lost Cause:" a solarpunk novel of hope in the climate emergency, Tor Books (US), Head of Zeus (UK), November 2023 (http://lost-cause.org).
"The Internet Con": A nonfiction book about interoperability and Big Tech (Verso) September 2023 (http://seizethemeansofcomputation.org). Signed copies at Book Soup (https://www.booksoup.com/book/9781804291245).
"Red Team Blues": "A grabby, compulsive thriller that will leave you knowing more about how the world works than you did before." Tor Books http://redteamblues.com.
"Chokepoint Capitalism: How to Beat Big Tech, Tame Big Content, and Get Artists Paid, with Rebecca Giblin", on how to unrig the markets for creative labor, Beacon Press/Scribe 2022 https://chokepointcapitalism.com
"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
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. Third draft completed. Submitted to editor.
"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.
Blog (no ads, tracking, or data-collection):
Newsletter (no ads, tracking, or data-collection):
https://pluralistic.net/plura-list
Mastodon (no ads, tracking, or data-collection):
Bluesky (no ads, possible tracking and data-collection):
https://bsky.app/profile/doctorow.pluralistic.net
Medium (no ads, paywalled):
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
time-1.10 released [stable] [Planet GNU]
This is to announce time-1.10, a stable release.
The 'time' command runs another program, then displays information about
the resources used by that program.
There have been 79 commits by 5 people in the 422 weeks since 1.9.
See the NEWS below for a brief summary.
Thanks to everyone who has contributed!
The following people contributed changes to this release:
Andreas Schwab (1)
Assaf Gordon (10)
Collin Funk (65)
Dominique Martinet (1)
Petr Písař (2)
Collin
[on behalf of the time maintainers]
==================================================================
Here is the GNU time home page:
https://gnu.org/s/time/
Here are the compressed sources:
https://ftp.gnu.org/gnu/time/time-1.10.tar.gz (832KB)
https://ftp.gnu.org/gnu/time/time-1.10.tar.xz (572KB)
Here are the GPG detached signatures:
https://ftp.gnu.org/gnu/time/time-1.10.tar.gz.sig
https://ftp.gnu.org/gnu/time/time-1.10.tar.xz.sig
Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html
Here are the SHA256 and SHA3-256 checksums:
SHA256 (time-1.10.tar.gz) = 6MKftKtZnYR45B6GGPUNuK7enJCvJ9DS7yiuUNXeCcM=
SHA3-256 (time-1.10.tar.gz) = zDjyfyzfABsSZp7lwXeYr368VzjZMkNPUJNnfpIakGk=
SHA256 (time-1.10.tar.xz) = cGv3uERMqeuQN+ntoY4dDrfCMnrn2MLOOkgjxfgMexE=
SHA3-256 (time-1.10.tar.xz) = U/Z0kMenoHkc7+rkCHMeyku8nXvIPppoQ2jq3B50e/A=
Verify the base64 SHA256 checksum with 'cksum -a sha256 --check'
from coreutils-9.2 or OpenBSD's cksum since 2007.
Verify the base64 SHA3-256 checksum with 'cksum -a sha3 --check'
from coreutils-9.8.
Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:
gpg --verify time-1.10.tar.gz.sig
The signature should match the fingerprint of the following key:
pub rsa4096/8CE6491AE30D7D75 2024-03-11 [SC]
Key fingerprint = 2371 1855 08D1 317B D578 E5CC 8CE6 491A E30D 7D75
uid [ultimate] Collin Funk <collin.funk1@gmail.com>
If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.
gpg --locate-external-key collin.funk1@gmail.com
gpg --recv-keys 8CE6491AE30D7D75
wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=time&download=1' | gpg --import -
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --keyring gnu-keyring.gpg --verify time-1.10.tar.gz.sig
This release is based on the time git repository, available as
git clone https://https.git.savannah.gnu.org/git/time.git
with commit 40003f3c8c4ad129fbc9ea0751c651509ac5bb23 tagged as v1.10.
For a summary of changes and contributors, see:
https://gitweb.git.savannah.gnu.org/gitweb/?p=time.git;a=shortlog;h=v1.10
or run this command from a git-cloned time directory:
git shortlog v1.9..v1.10
This release was bootstrapped with the following tools:
Autoconf 2.73
Automake 1.18.1
Gnulib 2026-04-13 c754c51f0f2b9a1e22d0d3eadfefff241de0ea48
NEWS
* Noteworthy changes in release 1.10 (2026-04-14) [stable]
** Bug fixes
'time --help' no longer incorrectly lists the short option -h as being
supported. Previously it was listed as being equivalent to --help.
[bug introduced in time-1.8]
'time --help' no longer emits duplicate percent signs in the description of
the --portability option.
[bug introduced in time-1.8]
time now opens the file specified by --output with its close-on-exec flag set.
Previously the file descriptor would be leaked into the child process.
[This bug was present in "the beginning".]
time no longer appends the program name to the output when the format string
contains a trailing backslash.
[This bug was present in "the beginning".]
** Improvements
time now uses the more portable waitpid and getrusage system calls
instead of wait3.
time can now be built using a C23 compiler.
time now uses unlocked stdio functions on platforms that provide them.
Girl Genius for Wednesday, April 15, 2026 [Girl Genius]
The Girl Genius comic for Wednesday, April 15, 2026 has been posted.
Dilly-Dallying In Denver: Day 3 [Whatever]
The title of this post is partially inaccurate, as part of my third day in Denver was spent in Boulder. Before going into Boulder, Alex and I decided to kick the day off with a mani pedi, and get matching colors. Cat eye polish, of course:

I was obsessed with this color, and I think it looked especially good on Alex’s longer nails. I mean just look at these bad boys:

Sparkly!
With fresh nails, we finally headed towards Boulder. Our first stop was the Boulder Museum of Contemporary Art. This art museum is “pay from your heart,” which means you can pay as much as you feel like for admission. I love this idea because it makes art so accessible, especially for Boulder college kids. Art museum prices can be pretty intense, so being able to price the admission for what fits into your budget is really nice.
While I didn’t photograph any of the actual artwork, I did capture the summary of this specific exhibition they had going on called “Yes, &…“:

I liked the theme. It was interesting, and all of the pieces I saw were definitely very unique and full of different mediums and mixed media. Very cool stuff all around, and the gift shop was awesome. I got some cute cards and stickers!
Right next door to the museum was the spot I was most excited for, the Boulder Dushanbe Teahouse. I have a hard time liking tea, but I love tea houses and tea time. It’s more of an aesthetic thing, really. And Dushanbe is, in fact, an extremely aesthetic tea house. With an ornate, colorful, interior filled with plants, statues, and high, hand-painted ceilings held up by hand-carved cedar columns, the artistry pours out of every nook and cranny. On their website, this page talks about the 40 different Tajikistani artists that created the art that makes this tea house so beautiful, as well as the capital of Tajikistan, the teahouses namesake.
Look how wild these details are!

The tea house is very popular, and their daily Afternoon Tea requires a reservation 24-hours in advance. Their even more coveted weekend Dim Sum Teatime is only offered on select weekends throughout the year, and reservations are required 60 days in advance.
As amazing as those sounded, Alex and I just went for their regular walk-in lunch, no waiting or reservation required. Though while we were there, they were actively setting up for their Afternoon Tea, and I got to see some of that unfold and peek at some snacks they were served. Plus each tea time table gets fresh flowers on their table:

Besides their extensive tea menu, they also have some different beverages and cocktails to choose from:


I love that all of their cocktails (and mocktails) have tea in them, so fitting!
I started off with their house chai, as my friend highly recommended it:

I actually ordered this iced but it came hot, and I wasn’t about to complain. It really wasn’t a big deal and it was delicious hot, so it’s totally whatever. Alex definitely didn’t steer me wrong, this chai was very nicely spiced and not too sweet like a lot of chai lattes end up being.
I also ended up ordering the Espresso Bliss cocktail, because you already know I adore espresso martinis:

Tea infused vodka, Marble Moonlight espresso liqueur, Colorado Cream Liqueur, and espresso. I liked that this espresso martini had both espresso liqueur and cream liqueur, as a lot of espresso martinis don’t have any kind of cream component. Which is fine, too, just sometimes I like them creamier and sweeter rather than cold brew style.
And a quick look at the food before ordering our tea:


We actually did not get any food because we were trying to make sure we were hungry for our reservations at Shells & Sauce later that day, so we just stuck with tea (and a lil bit of vodka for me, evidently).
Finally, time for our actual tea:

We decided to share two pots, one of their white peach tea and one mango tea. They brought out our sets and a timer, and when the timer was done our tea would be done steeping. Alex took their tea plain, while I added copious amounts of cream and sugar. I’m a menace, I know.
I also wanted to show y’all this table behind ours, though it wasn’t cleaned off yet, look how nice this seating area is:

I would love to sit here with a big group of friends and experience their Afternoon Tea service.
After our tea session concluded, we checked out the shop and ended up taking some tea home. I really liked this tea house and definitely want to come back for food sometime!
Once we drove back to Denver, we chilled at the apartment before heading to our dinner reservation at Shells & Sauce, which they say on their website is a neighborhood Italian bistro. They weren’t kidding. This place is located in such a random little neighborhood next to a dry cleaners and a Chinese restaurant, and is just a little place absolutely packed with excited diners. Line out the door, yet nothing flashy on the inside. Just a small neighborhood joint, as advertised.
While we had originally come for their Restaurant Week menu, we decided to not pursue that menu and just order whatever we wanted instead.
I started off with one of their signature cocktails, the Pearfect Martini:

Grey Goose La Poire (pear vodka), pear puree, lemon, and Prosecco. Does that not sound like a nice, refreshing, crisp martini? It was pretty good, definitely a little spirit-forward but it honestly might’ve just been a heavy pour. I mean, the glass is definitely very full.
We split two appetizers: the garlic cheese curds, and the crab cakes.

The texture of these cheese curds was really good, they were nice and squeaky curds, too. I will say there wasn’t a ton of garlic flavor, they seemed more just like plain cheese curds, but who doesn’t love a good curd?

While I’m always happy to have a crab cake, these ones weren’t particularly memorable. They weren’t bad at all but were just very standard.
Then, it was time for our entrees. I got the Stuffed Shells Duo:

The two shells on the left were six-cheese stuffed shells with marinara, and on the right we have the sweet potato, butternut squash, and goat cheese stuffed shells with pesto cream.
While the flavor of the stuffed shells fillings were really good, especially the sweet potato one, the pesto cream sauce was a broken emulsion, and made the dish feel rather heavy and oily. So while the filling was tasty, I think the presentation and mouthfeel of the dish suffered from the oily sauce. Which is sad because I love pesto cream!
My friend just got chicken fettuccini alfredo:

We opted not to get dessert. The food was okay, the vibe was okay, and the service was just okay. Honestly, I’d rather go here when there’s no dinner rush, sit on the patio, and just have some wine and bruschetta.
Once again we returned to the apartment, and this time we partook in the lovely amenities of the apartment, that being the rooftop pool and hot tub. It was definitely too chilly for the pool, especially because of the wind, but the hot tub was so nice.
After that brief relaxing period, we knew it was time to hit the bars (we only hit two, haha).
First up on our list was a rooftop bar super close to Alex’s apartment called Sorry Gorgeous. You’ll know you’re on the right path when you see this doormat in front of the elevator:

I really loved the interior design of Sorry Gorgeous. Green velvet couches, huge moon lamps, plants, a low-lit bar area and a great view of the nighttime skyline.
I didn’t take too many photos, but here’s some to get a general vibe for the place:

I love how the shelves are built into the wall like it’s some sort of cave full of liquor.

As you can see, it wasn’t very crowded, most everyone resided on that half of the bar while my friend I were practically all alone on our side.
We ended up moving to this corner booth to take some photos together!

I actually ended up taking a selfie I liked pretty well:

This was about number five hundred and sixty-four and I shortly gave up on photos after this because I figured one that I liked decently was good enough.
I ordered their All Saints cocktail:

Made with Botanist gin, pear, elderflower, rhubarb, lemon, and winter spices, this cocktail was refreshing and slightly sweet, and felt sophisticated. As you can see, I clearly like pear.
I really liked the service here. Since they weren’t busy we actually ended up talking to one of the staff members for a while and he was super nice and cool. I definitely thought this place would have more of a mean-girl bartender energy but that ended up not being the case at all!
Next time I go, I would love to try their pistachio guacamole and crispy mini tacos.
Onto our next bar of the evening, the Yacht Club.

A warm welcome, no doubt.
While a little small, it more so just has that cozy dive bar feel where yeah, sure you might bump elbows with someone once or twice, but it’s all peachy keen, we’re all comrades, y’know? The bar portion of the Yacht Club is built right into the corner:

What I initially thought was just a dive bar turned out to be something so much cooler and more unique. The Yacht Club is a wildly interesting cocktail bar that also has hotdogs. Lots of hotdogs.

Look at this adorable little teeny tiny hot dog menu! From the classic dog to a dog with caviar, to one served alongside a Jack and Coke, you’re sure to find your preferred type. Personally, I really wanted a sampler platter of all of them.
Aside from the hot dog menu, they had this drink menu:

I went ahead and ordered the Chew-Chu:

I had never heard of shochu before, but it turns out it’s a lot like sake and soju in the sense it’s a Japanese spirit made from the same sort of base ingredients like rice, barley, and sweet potato.
Though this drink was a little dry from the Sauvignon Blanc, it had really good, light flavors and was refreshing to sip on.
Oh, and here’s their menu of “dope shit we have rn”:

That amused me greatly.
Y’all. Look what Alex got:

CANNED GATORADE. Have you ever seen such a thing before?! This was so mind blowing, Yacht Club is officially the coolest place ever.
This is Alex’s drink but I genuinely can’t remember what the heck it is:

Once we had our initial drinks, we were still so stuffed from dinner that I couldn’t have a hot dog, but I knew they clearly had caviar, so I asked if a caviar bump was available for purchase. I love a caviar bump, it feels so luxe and is so spontaneous and fun. Thankfully the bartenders, who were so much fun and absolutely hilarious, said yes, and even did one with us:

Yummy. You’ll never guess how much they cost, either. A cool and breezy five smackaroos. Have you ever had a cheaper caviar bump?!
After taking a house shot, which I definitely don’t remember what they poured us (and also did with us), I got this drink:

I can’t remember the name of this one, but it was very good, with like, a ton of crazy flavors packed in. I know that’s not descriptive, I was decently drunk okay cut me some slack!
Okay, okay, one more, and this is in fact the final of the 36 photos. You’re all troopers. Here’s the final drink of the evening:

This one I do remember the name of. This is the Southside Swizzle. I actually really enjoy Southside cocktails, and this one was no exception. The mint with the strawberry and lime was an elite combo. I love the visual presentation here, too.
Just kidding, I have one more photo! Check out this flamingo wallpaper in their bathroom:

Finally, we walked back to Alex’s apartment, had some snacks, and went to bed. It was a long but extremely fun and memorable day. I absolutely loved the museum, the tea house, Sorry Gorgeous, and the Yacht Club. Highly recommend all of them!
Have you been to Boulder before? Do you like rooftop bars as much as I do? Have you seen canned Gatorade before? Let me know in the comments, and have a great day!
-AMS
Robert Smith: Not all elementary functions can be expressed with exp-minus-log [Planet Lisp]
By Robert Smith
All Elementary Functions from a Single Operator is a paper by Andrzej Odrzywołek that has been making rounds on the internet lately, being called everything from a “breakthrough” to “groundbreaking”. Some are going as far as to suggest that the entire foundations of computer engineering and machine learning should be re-built as a result of this. The paper says that the function
$$ E(x,y) := \exp x - \log y $$
together with variables and the constant $1$, which we will call EML terms, are sufficient to express all elementary functions, and proceeds to give constructions for many constants and functions, from addition to $\pi$ to hyperbolic trigonometry.
I think the result is neat and thought-provoking. Odrzywołek is explicit about his definition of “elementary function”. His Table 1 fixes “elementary” as 36 specific symbols, and under that definition his theorem is correct and clever, so long as we accept some of his modifications to the conventional $\log$ function and do arithmetic with infinities.
My concern is that the word “elementary” in the title carries a much broader meaning in standard mathematical usage. Odrzywołek recognizes this, saying little more than “[t]hat generality is not needed here” and that his work takes “the ordinary scientific-calculator point of view”. He does not offer further commentary.
What is this more general setting, and does his claim still hold? In modern pure mathematics, dating back to the 19th century, the definition of “elementary function” has been well established. We’ll get to a definition shortly, but to cut to the chase, the titular result does not hold in this setting. As such, in layman’s terms, I do not consider the “Exp-Minus-Log” function to be the continuous analog of the Boolean NAND gate or the universal quantum CCNOT/CSWAP gates.
The rough TL;DR is this: Elementary functions typically include arbitrary polynomial root functions, and EML terms cannot express them. Below, I’ll give a relatively technical argument that EML terms are not sufficient to express what I consider standard elementary functions.
To avoid any confusion, the purpose of this blog post is manifold:
This blog post is not a refutation of Odrzywołek’s work, though the title might be considered just as clickbait (and accurate) as his, depending on where you sit in the hall of mathematics and computation.
Disclaimer: I audited graduate-level mathematics courses almost 20 years ago, and I am not a professional mathematician. Please email me if my statements are clumsy or incorrect.
The 19th century is where all modern understanding of elementary functions was developed, Liouville being one of the big names with countless theorems of analysis and algebra named after him. One such result is about integration: do the outputs of integrals look the same as their inputs? Well, what does “input” and “look the same” mean? Liouville defined a class of functions called elementary functions, and said that the integral of an elementary function will sometimes be elementary, and when it is, it will always resemble the input in a specific way, plus potential extra logarithmic factors.
Since then, elementary functions have been defined by starting with rational functions and closing under arithmetic operations, composition, exponentiation, logarithms, and polynomial roots. While EML terms are quite expressive, they are unable to capture the “polynomial roots” in full generality. We will show this by using Khovanskii’s topological Galois theory: the monodromy group of a function built from rational functions by composition with $\exp$ and $\log$ is solvable. For anybody that has studied Galois theory in an algebra course, this will be familiar, as the destination here is effectively the same, but with more powerful intermediate tooling to wrangle exponentials and logarithms.
First, let’s be more precise by what we mean by an EML term and by a standard elementary function.
Definition (EML Term): An EML term in the variables $x_1,\dots,x_n$ is any expression obtained recursively, starting from $\{1, x_1,\dots,x_n\}$, by the rule $$ T,S \mapsto \exp T-\log S. $$ Each such term, evaluated at a point where all the $\log$ arguments are nonzero, determines an analytic germ; we take $\mathcal T_n$ to be the class of germs representable this way, together with their maximal analytic continuations.
Definition (Standard Elementary Function): The standard elementary functions $\mathcal{E}_n$ are the smallest class of multivalued analytic functions on domains in $\mathbb{C}^n$ containing the rational functions and closed under
What we will show is that the class of elementary functions defined this way is strictly larger than the class induced by EML terms.
Lemma: Every EML term has solvable monodromy group. In particular, if $f\in\mathcal T_n$ is algebraic over $\mathbb C(x_1,\dots,x_n)$, then its monodromy group is a finite solvable group.
Proof: We prove by induction on EML term construction. Constants and coordinate functions have trivial monodromy.
For the inductive step, suppose $f = \exp A-\log B$ with $A,B\in\mathcal T_n$, and assume that $\mathrm{Mon}(A)$ and $\mathrm{Mon}(B)$ are solvable. We argue in three steps.
Step 1: $\mathrm{Mon}(\exp A)$ is solvable. The germs of $\exp A$ are images under $\exp$ of the germs of $A$, with germs of $A$ differing by $2\pi i\mathbb Z$ collapsing to the same value. So there is a surjection $\mathrm{Mon}(A)\twoheadrightarrow\mathrm{Mon}(\exp A)$, and a quotient of a solvable group is solvable.
Step 2: $\mathrm{Mon}(\log B)$ is solvable. At a generic point $p$, germs of $\log B$ are parameterized by pairs $(b,k)$ where $b$ is a germ of $B$ at $p$ and $k\in\mathbb Z$ selects the branch of $\log$. A loop $\gamma$ acts by $$ (b,k)\mapsto\bigl(\rho_B(\gamma)(b), k+n(\gamma,b)\bigr), $$ where $\rho_B(\gamma)$ is the monodromy action of $\gamma$ on germs of $B$, and $n(\gamma,b)\in\mathbb Z$ is the winding number around $0$ of the analytic continuation of $b$ along $\gamma$. The projection $\mathrm{Mon}(\log B)\to\mathrm{Mon}(B)$ onto the first component is a surjective homomorphism. Its kernel consists of the elements of $\mathrm{Mon}(\log B)$ induced by loops $\gamma$ with $\rho_B(\gamma)=\mathrm{id}$, which then act only by integer shifts on the $k$-coordinate. Let $S_B$ be the set of germs of $B$ at $p$. For each $b\in S_B$, such a loop determines an integer shift $n(\gamma,b)$, so the kernel embeds in the direct product $\mathbb Z^{S_B}$. In particular, the kernel is abelian. Hence $\mathrm{Mon}(\log B)$ is an extension of $\mathrm{Mon}(B)$ by an abelian group, and extensions of solvable groups by abelian groups are solvable.
Step 3: $\mathrm{Mon}(f)$ is solvable. At a generic point, a germ of $f=\exp A-\log B$ is obtained by subtraction from a pair (germ of $\exp A$, germ of $\log B$), and analytic continuation acts componentwise on such pairs. This gives a surjection of $\pi_1$ onto some subgroup $$ H \le \mathrm{Mon}(\exp A)\times\mathrm{Mon}(\log B), $$ and, since $f$ is obtained from the pair by subtraction, this descends to a surjection $H\twoheadrightarrow\mathrm{Mon}(f)$. So $\mathrm{Mon}(f)$ is a quotient of a subgroup of a direct product of solvable groups, hence solvable.
The second statement of the lemma follows: an algebraic function has finitely many branches, so its monodromy group is finite; a solvable group that is finite is, well, finite and solvable. ∎
Remark. This is the core of Khovanskii’s topological Galois theory; see Topological Galois Theory: Solvability and Unsolvability of Equations in Finite Terms.
Theorem: $\mathcal T_n \subsetneq \mathcal E_n$.
Proof: $\mathcal E_n$ is closed under algebraic adjunction, so any local branch of an algebraic function is elementary. In particular, a branch of a root of the generic quintic $$ f^5+a_1f^4+a_2f^3+a_3f^2+a_4f+a_5=0 $$ is elementary.
Suppose for contradiction that at some point $p$ a germ of a branch of this root agrees with a germ of an EML term $T$. By uniqueness of analytic continuation, the Riemann surfaces obtained by maximally continuing these two germs coincide, so in particular their monodromy groups coincide. The monodromy group of the generic quintic is $S_5$, which is not solvable. But by the lemma, the monodromy group of any EML term is solvable. Contradiction.
Hence $\mathcal T_n$ is a strict subset of $\mathcal E_n$. ∎
Edit (15 April 2026): This article used to have an example proving that the real and complex absolute value cannot be expressed over their entire domain as EML terms under the conventional definition of $\log$. I wrote it to emphasize that Odrzywołek’s approach required mathematical “patching” in order to work as intended. However, it ended up more distracting than illuminating, and was tangential to the point about the definition of “elementary”, so it has been removed.
Papal, See? – DORK TOWER 13.04.26 [Dork Tower]
Most DORK TOWER strips are now available as signed,
high-quality prints, from just $25! CLICK
HERE to find out more!
HEY! Want to help keep DORK TOWER going? Then consider joining the DORK TOWER Patreon and ENLIST IN THE ARMY OF DORKNESS TODAY! (We have COOKIES!) (And SWAG!) (And GRATITUDE!)
Urgent: Censure bully for threatening reporters [Richard Stallman's Political Notes]
US citizens: call on Congress to censure the bully for threatening reporters with treason charges.
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.
Urgent: Restore PBS and NPR funding [Richard Stallman's Political Notes]
US citizens: call on Congress to restore PBS and NPR funding.
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.
Urgent: Fully fund conservation programs [Richard Stallman's Political Notes]
US citizens: call on the USDA to fully fund conservation programs.
Urgent: Don't cut funds for Americans' medicine [Richard Stallman's Political Notes]
US citizens: call on Congress not to cut funds for Americans' medicine for the sake of unjustified war.
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.
Urgent: Reject budget packages that slash basic needs programs [Richard Stallman's Political Notes]
US citizens: call on Tell Congress: Reject any budget package that slashes basic needs programs to give additional billions to deportation and war.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
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.
Urgent: Protect Jewish employees from federal persecution [Richard Stallman's Political Notes]
US citizens: call on universities to stand with he University of Pennsylvania to protect Jewish employees from federal persecution.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Magats don't actually care about Jews, but they find "stopping antisemitism" a convenient excuse to persecute people who speak up for the rights of Palestinians. However, threatening Jews in the name of "stopping antisemitism" is even more perverse.
Urgent: Reject wrecker's military budget [Richard Stallman's Political Notes]
US citizens: call on Congress to reject the wrecker's proposed $1.5 trillion military budget.
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.
Urgent: Fight Republican schemes to cut funds for medical care [Richard Stallman's Political Notes]
US citizens: call on your congresscritter and senators to fight any Republican scheme to cut funds for medical care or boost funds for war with Iran.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
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.
Urgent: Ban junk fees for rental housing [Richard Stallman's Political Notes]
US citizens: call on the Federal Trade Commission to ban junk fees for rental housing.
In my letter, I also said that would-be renters should not be required to use any web site in the process of seeking, accepting, occupying and paying for the rental. Those web sites are usually malicious, since they run nonfree software in the user's browser. And they do various sorts of snooping.
By raising this issue in your letter, you will support software freedom.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Expand investigation of torture of prisoners [Richard Stallman's Political Notes]
US citizens: call on your congresscritter and senators to expand the investigation of torture of prisoners to all deportation prisons.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
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.
Urgent: Pass Fossil-Free Insurers Act [Richard Stallman's Political Notes]
US citizens: call on your state legislators to pass the Fossil-Free Insurers Act.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Patch Tuesday, April 2026 Edition [Krebs on Security]
Microsoft today pushed software updates to fix a staggering 167 security vulnerabilities in its Windows operating systems and related software, including a SharePoint Server zero-day and a publicly disclosed weakness in Windows Defender dubbed “BlueHammer.” Separately, Google Chrome fixed its fourth zero-day of 2026, and an emergency update for Adobe Reader nixes an actively exploited flaw that can lead to remote code execution.

Redmond warns that attackers are already targeting CVE-2026-32201, a vulnerability in Microsoft SharePoint Server that allows attackers to spoof trusted content or interfaces over a network.
Mike Walters, president and co-founder of Action1, said CVE-2026-32201 can be used to deceive employees, partners, or customers by presenting falsified information within trusted SharePoint environments.
“This CVE can enable phishing attacks, unauthorized data manipulation, or social engineering campaigns that lead to further compromise,” Walters said. “The presence of active exploitation significantly increases organizational risk.”
Microsoft also addressed BlueHammer (CVE-2026-33825), a privilege escalation bug in Windows Defender. According to BleepingComputer, the researcher who discovered the flaw published exploit code for it after notifying Microsoft and growing exasperated with their response. Will Dormann, senior principal vulnerability analyst at Tharros, says he confirmed that the public BlueHammer exploit code no longer works after installing today’s patches.
Satnam Narang, senior staff research engineer at Tenable, said April marks the second-biggest Patch Tuesday ever for Microsoft. Narang also said there are indications that a zero-day flaw Adobe patched in an emergency update on April 11 — CVE-2026-34621 — has seen active exploitation since at least November 2025.
Adam Barnett, lead software engineer at Rapid7, called the patch total from Microsoft today “a new record in that category” because it includes nearly 60 browser vulnerabilities. Barnett said it might be tempting to imagine that this sudden spike was tied to the buzz around the announcement a week ago today of Project Glasswing — a much-hyped but still unreleased new AI capability from Anthropic that is reportedly quite good at finding bugs in a vast array of software.
But he notes that Microsoft Edge is based on the Chromium engine, and the Chromium maintainers acknowledge a wide range of researchers for the vulnerabilities which Microsoft republished last Friday.
“A safe conclusion is that this increase in volume is driven by ever-expanding AI capabilities,” Barnett said. “We should expect to see further increases in vulnerability reporting volume as the impact of AI models extend further, both in terms of capability and availability.”
Finally, no matter what browser you use to surf the web, it’s important to completely close out and restart the browser periodically. This is really easy to put off (especially if you have a bajillion tabs open at any time) but it’s the only way to ensure that any available updates get installed. For example, a Google Chrome update released earlier this month fixed 21 security holes, including the high-severity zero-day flaw CVE-2026-5281.
For a clickable, per-patch breakdown, check out the SANS Internet Storm Center Patch Tuesday roundup. Running into problems applying any of these updates? Leave a note about it in the comments below and there’s a decent chance someone here will pipe in with a solution.
Microsoft isn’t removing Copilot from Windows 11, it’s just renaming it [OSnews]
A few weeks ago, Microsoft made some concrete promises about fixing and improving Windows, and among them was removing useless “AI” integrations. Applications like Notepad, Snipping Tool, and others would see their “AI” features removed. Well, it turns out Microsoft employs a very fringe definition of the concept.
Microsoft seems to have stripped away mentions of the “Copilot” brand in the Windows Insider version of the Notepad app. The Copilot button in the toolbar is gone, and instead, you’ll find a writing icon which will present you AI-powered writing assistance, such as rewrite, summarize, tone modification, format configuration, and more. Additionally, “AI features” in Notepad settings has been renamed to “Advanced features” and it allows users to toggle off AI capabilities within the app.
↫ Usama Jawad at Neowin
If the recent changes to Notepad are any indication, it seems Microsoft is, actually, not at all going to “reducing unnecessary Copilot entry points”, as they worded it, but is merely just going to rename these features so they aren’t so ostentatiously present. At least, that seems to be the plan for Notepad, and we’ll have to see if they have the same plans for the other applications. I mean, they have to push “AI” or look like fools.
I just don’t understand how a company like Microsoft can be so utterly terrible at communication. While I personally would want all “AI” features yeeted straight from Windows, I’m sure a ton of people are just fine with the features being less in-your-face and stuffed inside a normal menu alongside all the other normal features. They could’ve just been honest about their intentions, and it would’ve been so much better.
Like virtually every other technology company, Microsoft just seems incapable of not lying.
Why was there a red telephone at every receptionist desk? [The Old New Thing]
Some time ago, I noted that there was a walkthrough of the original Microsoft Building 3. If you go behind the receptionist desk, you’ll see a telephone at the receptionist’s station, but off to side, there was also a red telephone resting between a tape dispenser and a small pamphlet labelled “Quick Reference Guide”.
What was this red telephone for? Was it a direct line to Bill Gates’s office? Or maybe it was a direct line to Security?
Nope.
It was just a plain telephone.
And that’s what made it special.
As is customary at large companies, the telephones on the Microsoft campus were part of a corporate PBX (private branch exchange). A PBX is a private telephone system within a company, and companies use them to save on telephone costs, as well as to provide auxiliary telephone services. For example, you could call another office by dialing just the extension, and the call would be routed entirely within the PBX without having to interact with the public telephone systems. Generally, most calls are typically from one office to another, so a PBX saves considerable money by reducing demand for outside communications services. Also, a PBX allows integration with other systems. For example, if somebody leaves you a voicemail, the system can email you a message.
But what if the PBX is down, and there is an emergency?
The red telephones are plain telephones with standard telephone service. They are not part of the PBX and therefore operate normally even if there is a PBX outage. If there is an emergency, the receptionist can use the red telephone to call emergency services. Presumably, each red telephone was registered in the telephone system with the address of its building, allowing emergency services to dispatch assistance quickly.
Bonus chatter: What was the “Quick Reference Guide”? It was a guide to emergency procedures. It makes sense that it was kept next to the emergency telephone.
Bonus bonus chatter: Bill Gates kept a red telephone in his own office as well. If the PBX went down, I guess it was technically true that the red telephones could be used to call Bill Gates’s office.
The post Why was there a red telephone at every receptionist desk? appeared first on The Old New Thing.
The Zig project has announced version 0.16.0 of the Zig programming language.
This release features 8 months of work: changes from 244 different contributors, spread among 1183 commits.
Perhaps most notably, this release debuts I/O as an Interface, but don't sleep on the Language Changes or enhancements to the Compiler, Build System, Linker, Fuzzer, and Toolchain which are also included in this release.
LWN last covered Zig in December 2025.
A glitch in the matrix. The app that keeps daveverse.org in sync with scripting.com has been offline since Friday, so I'm republishing all the posts since then. They will all appear to have been posted today on daveverse. As they say -- still diggin!
I updated sally.scripting.com to support https, and updated it with posts from scripting.com in 2023-2026. I was using it as an example of prior art of user interface for Claude. I figured restoring this app on my own would be penance for believing that Claude was anywhere near as smart as I am. Not even close. Not today at least. Grrr.
I've come to the conclusion, perhaps temporarily, that Claude can't work on a programming project with an experienced developer. It doesn't check its work, it'll think it's found the problem, makes a change, or worse causes you to do a lot of work so it can make a change. It doesn't use the information it gives you, can't even remember what was in a bug report less than one screen above. I could have done the work I coached it through through the morning, with a thoroughly inadequate result, in an hour at most. At least today it couldn't learn from prior art, and couldn't follow basic instructions. It's weird though because I'm really suprised how little it knows about the scientific method or even has been trained in how to work with others. I seem to recall situations where it was extremely good at reading code. Not a totally wasted session, let's see what I can learn from it.
[$] Tagging music with MusicBrainz Picard [LWN.net]
Part of the "fun" that comes with curating a self-hosted music library is tagging music so that it has accurate and uniform metadata, such as the band names, album titles, cover images, and so on. This can be a tedious endeavor, but there are quite a few open-source tools to make this process easier. One of the best, or at least my favorite, is MusicBrainz Picard. It is a cross-platform music-tagging application that pulls information from the well-curated, crowdsourced MusicBrainz database project and writes it to almost any audio file format.
OpenSSL 4.0.0 released [LWN.net]
Version 4.0.0 of the OpenSSL cryptographic library has been released. This release includes support for a number of new cryptographic algorithms and has a number of incompatible changes as well; see the announcement for the details.
Steinar H. Gunderson: Looking for work [Planet Debian]

It seems my own plans and life's plans diverged this spring, so I am in the market for a new job. So if you're looking for someone with a long track record making your code go brrr really fast, give me a ping (contact information at my homepage). Working from Oslo (on-site or remote), CV available upon request. No AI boosterism or cryptocurrency grifters, please :-)
Google Broke Its Promise to Me. Now ICE Has My Data. [Deeplinks]
In September 2024, Amandla Thomas-Johnson was a Ph.D. candidate studying in the U.S. on a student visa when he briefly attended a pro-Palestinian protest. In April 2025, Immigration and Customs Enforcement (ICE) sent Google an administrative subpoena requesting his data. The next month, Google gave Thomas-Johnson's information to ICE without giving him the chance to challenge the subpoena, breaking a nearly decade-long promise to notify users before handing their data to law enforcement.
Google names a handful of exceptions to this promise (such as if Google receives a gag order from a court) that do not apply to Thomas-Johnson's case. While ICE “requested” that Google not notify Thomas-Johnson, the request was not enforceable or mandated by a court. Today, the Electronic Frontier Foundation sent complaints to the California and New York Attorneys General asking them to investigate Google for deceptive trade practices for breaking that promise. You can read about the complaints here. Below is Thomas-Johnson's account of his ordeal.
I thought my ordeal with U.S. immigration authorities was over a year ago, when I left the country, crossing into Canada at Niagara Falls.

By that point, the Trump administration had effectively turned federal power against international students like me. After I attended a pro-Palestine protest at Cornell University—for all of five minutes—the administration’s rhetoric about cracking down on students protesting what we saw as genocide forced me into hiding for three months. Federal agents came to my home looking for me. A friend was detained at an airport in Tampa and interrogated about my whereabouts.
I’m currently a Ph.D. student. Before that, I was a reporter. I’m a dual British and Trinadad and Tobago citizen. I have not been accused of any crime.
I believed that once I left U.S. territory, I had also left the reach of its authorities. I was wrong.
Weeks later, in Geneva, Switzerland, I received what looked like a routine email from Google. It informed me that the company had already handed over my account data to the Department of Homeland Security.
At first, I wasn’t alarmed. I had seen something similar before. An associate of mine, Momodou Taal, had received advance notice from Google and Facebook that his data had been requested. He was given advanced notice of the subpoenas, and law enforcement eventually withdrew them before the companies turned over his data.
Google had already disclosed my data without telling me.
I assumed I would be given the same opportunity. But the language in my email was different. It was final: “Google has received and responded to legal process from a law enforcement authority compelling the release of information related to your Google Account.”
Google had already disclosed my data without telling me. There was no opportunity to contest it.
To be clear, this should not have happened this way. Google promises that it will notify users before their data is handed over in response to legal processes, including administrative subpoenas. That notice is meant to provide a chance to challenge the request. In my case, that safeguard was bypassed. My data was handed over without warning—at the request of an administration targeting students engaged in protected political speech.
Months later, my lawyer at the Electronic Frontier Foundation obtained the subpoena itself. On paper, the request focused largely on subscriber information: IP addresses, physical address, other identifiers, and session times and durations.
But taken together, these fragments form something far more powerful—a detailed surveillance profile. IP logs can be used to approximate location. Physical addresses show where you sleep. Session times would show when you were communicating with friends or family. Even without message content, the picture that emerges is intimate and invasive.
What this experience has made clear is that anyone can be targeted by law enforcement. And with their massive stores of data, technology companies can facilitate those arbitrary investigations. Together, they can combine state power, corporate data, and algorithmic inference in ways that are difficult to see—and even harder to challenge.
The consequences of what happened to me are not abstract. I left the United States. But I do not feel that I have left its reach. Being investigated by the federal government is intimidating. Questions run through your head. Am I now a marked individual? Will I face heightened scrutiny if I continue my reporting? Can I travel safely to see family in the Caribbean?
Who, exactly, can I hold accountable?
Update: This post has been updated to include more information about Google's exceptions to their notification policy, none of which applied to the subpoena targeting Thomas-Johnson.
EFF to State AGs: Investigate Google's Broken Promise to Users Targeted by the Government [Deeplinks]
SAN FRANCISCO – The Electronic Frontier Foundation sent complaints today to the attorneys general of California and New York urging them to investigate Google for deceptive trade practices, related to the company's broken promise to give users prior notice before disclosing their information to law enforcement.
The letters were sent on behalf of Amandla Thomas-Johnson, whose information was disclosed to U.S. Immigration and Customs Enforcement (ICE) without prior notice from Google.
For nearly a decade, Google has promised billions of users that it will notify them before disclosing their personal data to law enforcement. Many times, the company has done just that. But through a hidden and systematic practice, Google has likely violated that promise numerous times over the years. This was the case for Thomas-Johnson, a Ph.D. candidate who was targeted by ICE after briefly attending a protest, effectively preventing him from contesting an invalid subpoena for his data.
"Google should answer the question: How many other times has it broken its promise to users?” said EFF Senior Staff Attorney F. Mario Trujillo. "Advance notice is especially important now, when agencies like ICE are unconstitutionally targeting users for First Amendment-protected activity. State attorneys general should investigate Google for this deception."
On Google’s Privacy & Terms page, it promises its users that “When we receive a request from a government agency, we send an email to the user account before disclosing information.” This promise ensures that users can protect their own privacy and decide to challenge overbroad or illegal demands on their own behalf. The company lists a handful of exceptions to this policy (such as if Google receives a gag order from a court) that do not apply to Thomas-Johnson's case. While ICE “requested” that Google not notify Thomas-Johnson, the request was not enforceable or mandated by a court.
But on May 8, 2025, Google complied with an administrative subpoena from ICE seeking Thomas-Johnson’s subscriber information, including his name, address, IP address, and other personal identifiers. Later that same day, the company sent Thomas-Johnson a message telling him it had already complied with the subpoena, which he would have successfully challenged had he been given advance notice. Google received the subpoena in April and had more than a month to alert Thomas-Johnson.
Communication between EFF and Google later revealed that this is a systematic issue, not an isolated one. When Google does not fulfill a subpoena within a government-provided artificial deadline, the company's outside counsel explained, Google will sometimes comply with the request and provide notice to a user on the same day. The company calls this practice “simultaneous notice.”
"What this experience has made clear is that anyone can be targeted by law enforcement," said Thomas-Johnson. "And with their massive stores of data, technology companies can facilitate those arbitrary investigations. Who, exactly, can I hold accountable?"
Google must commit to ending this deception and pay for its past mistakes. The attorneys general of California and New York are empowered to stop deceptive business practices and seek financial restitution stemming from those practices. As EFF writes in its complaints, they should investigate, hold Google to its public promise to give users advanced notice of law enforcement demands, and take appropriate action if necessary.
Update: This press release has been updated to include
more information about Google's exceptions to their notification
policy, none of which applied to the subpoena targeting
Thomas-Johnson.
For
the complaints:
https://www.eff.org/document/eff-letter-re-google-notice-california
https://www.eff.org/document/eff-letter-re-google-notice-new-york
https://www.eff.org/document/eff-letter-re-google-notice-exhibits
For
Thomas-Johnson's account of his ordeal:
https://www.eff.org/deeplinks/2026/04/google-broke-its-promise-me-now-ice-has-my-data
For
more information on lawless DHS
subpoenas: https://www.eff.org/deeplinks/2026/02/open-letter-tech-companies-protect-your-users-lawless-dhs-subpoenas
Contact: press@eff.org
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| a bag of four grapes | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Ansible | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Bad Science | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Black Doggerel | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Blog - Official site of Stephen Fry | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Charlie Brooker | The Guardian | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Charlie's Diary | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Chasing the Sunset - Comics Only | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Coding Horror | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| Comics Archive - Spinnyverse | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| Cory Doctorow's craphound.com | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Cory Doctorow, Author at Boing Boing | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Ctrl+Alt+Del Comic | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Cyberunions | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| David Mitchell | The Guardian | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Deeplinks | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| Diesel Sweeties webcomic by rstevens | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Dilbert | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Dork Tower | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Economics from the Top Down | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| EFF Action Center | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Enspiral Tales - Medium | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Events | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Falkvinge on Liberty | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Flipside | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Flipside | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Free software jobs | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Full Frontal Nerdity by Aaron Williams | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| General Protection Fault: Comic Updates | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| George Monbiot | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Girl Genius | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Groklaw | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Grrl Power | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Hackney Anarchist Group | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Hackney Solidarity Network | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| http://blog.llvm.org/feeds/posts/default | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| http://feed43.com/3874015735218037.xml | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| http://fulltextrssfeed.com/ | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| http://london.indymedia.org/articles.rss | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| http://planet.gridpp.ac.uk/atom.xml | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| http://shirky.com/weblog/feed/atom/ | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| http://thecommune.co.uk/feed/ | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| http://theness.com/roguesgallery/feed/ | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| http://www.baen.com/baenebooks | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| 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 | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| http://www.godhatesastronauts.com/feed/ | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| http://www.tinycat.co.uk/feed/ | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| https://broodhollow.krisstraub.comfeed/ | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| https://debian-administration.org/atom.xml | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| https://elitetheatre.org/ | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| https://feeds.feedburner.com/Starslip | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| https://hackbloc.org/rss.xml | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| https://philfoglio.livejournal.com/data/atom/ | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| https://propertyistheft.wordpress.com/feed/ | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| https://requiem.seraph-inn.com/updates.rss | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| https://thecommandline.net/feed/ | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| https://torrentfreak.com/subscriptions/ | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| https://web.randi.org/?format=feed&type=rss | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| https://www.dcscience.net/feed/medium.co | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| https://www.loomio.com/blog/feed/ | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| 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 | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Humble Bundle Blog | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| I, Cringely | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Irregular Webcomic! | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Joel on Software | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| Judith Proctor's Journal | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Krebs on Security | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Lambda the Ultimate - Programming Languages Weblog | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Looking For Group | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| LWN.net | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Mimi and Eunice | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Neil Gaiman's Journal | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| Nina Paley | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| O Abnormal – Scifi/Fantasy Artist | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Oglaf! -- Comics. Often dirty. | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Oh Joy Sex Toy | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| Order of the Stick | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| Original Fiction Archives - Reactor | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| OSnews | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Paul Graham: Unofficial RSS Feed | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Penny Arcade | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Penny Red | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| PHD Comics | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Phil's blog | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| Planet Debian | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Planet GNU | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Planet Lisp | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Pluralistic: Daily links from Cory Doctorow | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| PS238 by Aaron Williams | XML | 00:35, Sunday, 19 April | 01:23, Sunday, 19 April |
| QC RSS | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| Radar | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| RevK®'s ramblings | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| Richard Stallman's Political Notes | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Scenes From A Multiverse | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| Schneier on Security | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| SCHNEWS.ORG.UK | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| Scripting News | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Seth's Blog | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| Skin Horse | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Tales From the Riverbank | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| The Adventures of Dr. McNinja | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| The Bumpycat sat on the mat | XML | 00:07, Sunday, 19 April | 00:47, Sunday, 19 April |
| The Daily WTF | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| The Monochrome Mob | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| The Non-Adventures of Wonderella | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| The Old New Thing | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| The Open Source Grid Engine Blog | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| The Stranger | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| towerhamletsalarm | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| Twokinds | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| UK Indymedia Features | XML | 00:14, Sunday, 19 April | 00:56, Sunday, 19 April |
| Uploads from ne11y | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| Uploads from piasladic | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |
| Use Sword on Monster | XML | 00:28, Sunday, 19 April | 01:15, Sunday, 19 April |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 00:00, Sunday, 19 April | 00:46, Sunday, 19 April |
| what if? | XML | 00:07, Sunday, 19 April | 00:48, Sunday, 19 April |
| Whatever | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| Whitechapel Anarchist Group | XML | 00:21, Sunday, 19 April | 01:10, Sunday, 19 April |
| WIL WHEATON dot NET | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| wish | XML | 00:00, Sunday, 19 April | 00:45, Sunday, 19 April |
| Writing the Bright Fantastic | XML | 00:00, Sunday, 19 April | 00:44, Sunday, 19 April |
| xkcd.com | XML | 23:56, Saturday, 18 April | 00:39, Sunday, 19 April |