Firefox 149.0 released [LWN.net]
Version 149.0 of the Firefox web browser has been released. Notable features in this release include a new split-view feature for viewing two web pages side-by-side, a built-in VPN for browser traffic only, and more.
The Big Idea: Tiffani Angus & Val Nolan [Whatever]

You know ’em, you love ’em, authors Tiffani Angus and Val Nolan are back again with another installment of their speculative fiction guidebooks. Hop on board the Big Idea to see how they’ve done it again in Spec Fic for Newbies Vol. 3: A Beginner’s Guide to Writing Even More Subgenres of Science Fiction, Fantasy, and Horror.
TIFFANI ANGUS & VAL NOLAN:
Imagine a classic scene: A car driving down a lonely rural road… a bright light overhead… an examination table aboard an alien spacecraft… and then, instead of the typical medical business, our protagonist—let’s call her Sally—finds herself sitting across from an extraterrestrial. This being communicates with a curious thought-to-text translator device it places on the table. When the entity speaks, its words appear in the air between them:
“My species has learned all we can about your physiology. Now we wish to know about your culture. Does your society… tell stories?”
Sally, who’s been studying Creative Writing, is only too happy to discuss this. “We sure do,” she says. “Lots of different kinds! Science Fiction stories, Fantasy, Horror. And they take all sorts of different forms, like written fiction, TV shows, comics books…”
The alien’s already wide eyes expand even further. “And your species just instinctively understands how to tell these stories?”
“I mean, kinda. We’ve been doing it since we sat around campfires in the Ice Age. But we benefit from practice, you know? Plus, it helps to have guidance from enthusiastic instructors. Not literary snobs who want to make everyone write the same way as them but people sympathetic to the kinds of stories you want to tell.”
“And does one need to go to a school or university for this?”
“Not necessarily. Some people who’ve taught Creative Writing at universities have written books about it.” Sally looks around, finds her backpack (which conveniently materialized beside her), and pulls out a copy of Spec Fic for Newbies Vol. 3: A Beginner’s Guide to Writing Even More Subgenres of Science Fiction, Fantasy, and Horror by Tiffani Angus and Val Nolan. “This, for example, helps novice scribblers and even more seasoned writers learn how to write thirty different subgenres and major tropes. It gives deep dives into the history and development of each subgenre or trope, offers spotter’s guides to their typical manifestations, and provides writing exercises to get you started. Plus, it’s all based on real classroom experience!”
“Subgenres…” The alien’s word floats in the air. “We have heard of these. So many to keep track of.”
Sally thinks about this for a moment. She reaches for the translator. “Can I…?”
The alien nods.
Sally quickly finds the translator’s settings and alters a couple of font choices. “There,” she says, returning the device, “I’ve set it so that when I mention a subgenre that’s in Spec Fic 3, it will appear in bold. That’s what they do in the book. Like all this”—she gestures around the silver room—“is a recognizable Alien Abduction narrative. But the book covers everything from Dinosaur Tales to Swashbuckling Fantasy to Fungal Horror to Superheroes.”
“Fascinating.” The alien considers the book. “I wish I’d been able to study this.”
“They don’t teach Creative Writing at Space Academies?”
“Our universities mostly produce Mad Scientists,” the alien says. “Oh!” It points at the bolded word. “It did the thing!”
Sally smiles. “It’s fun, isn’t it? Plus, when Angus and Nolan discuss subgenres in the other volumes of the series, they underline its name so you can track it down easily.”
“Yes.” The alien turns Spec Fic for Newbies over in its spindly fingers. “I was wondering: can I just jump in with this third volume?”
“Oh absolutely! They’re all stand-alone books. Though if you want to know more about the previous ones…” She takes out her phone. “Have you got wi-fi here? Like, space wi-fi?”
The alien turns the translator upside down and shows her the password.
“Okay, cool,” Sally says, logging on. “So, Angus and Nolan have written about the previous volumes on Scalzi’s blog. You can read about Volume One here and Volume Two here.” She passes her phone to the alien, who reads the blog posts with interest.
“And people find these guides useful?” it asks.
“Useful and enjoyable,” Sally says. “The first two volumes were included on the Locus Recommended Reading List and shortlisted for the British Science Fiction Association Awards and British Fantasy Awards. Those are, like, big deals on our planet.”
“The section on Magic Schools and Dark Academia sounds interesting,” says the alien, now looking through the table of contents. “As does the section about Magical Realism.”
“I like some of the horror stuff myself,” Sally says. “I’ve lately given a go to writing about Near Death Experiences and Urban Gothic and Weird Fiction.”
“And?”
“And I’ve been trying lots of things that I never thought I’d try. The book is really encouraging that way. Angus and Nolan don’t believe in gatekeeping. The whole ethos of Spec Fic for Newbies revolves around bringing people into the realms of Science Fiction, Fantasy, and Horror by giving them the tools to explore these really rich and rewarding imaginary worlds.”
“I see there’s lots of jokes, too,” the alien says, the translator registering its chuckles as a series of curious emojis.
Sally makes an affirmative noise. “Yeah, the authors have a really snarky sense of humor. Angus and Nolan don’t take themselves too seriously, which is another thing that separates this book from the really dry, old-school academic writing guides. Though, of course, that doesn’t mean the book isn’t smart—”
The alien holds up the section on End of the Universe stories. “I can see that.”
“—but it does mean it’s approachable. Anyone can read Spec Fic for Newbies. Anyone can learn from this book. That’s their big idea!”
“Bugs!!!” the alien suddenly shouts.
“Where?!”
“Page 229!”
Sally laughs. “I haven’t got to that part yet!”
“This book tells us much about humanity,” the alien says, “as well as things about Elves and Kaiju.”
“And we’ve barely even covered half of the subgenres here!”
The alien returns the book to Sally. “Where can I get my own copy?”
“Direct from Luna Press.” She opens up the website. “Or from any of your usual retailers.”
“I think I would like to beam down and pick one up right away!”
“Great,” says Sally, “let’s go get you writing!”
Spec Fic For Newbies Vol. 3: Amazon|Barnes & Noble|Amazon UK|Blackstone UK|Waterstones UK
Author socials: Tiffani’s Website|Val’s Website|Tiffani’s Bluesky|Vals’ Bluesky
Slog AM: ICE Is in the Airports, a Meddlin’ Saudi Prince, Snowpack Pays for Warm Winter [The Stranger]
The Stranger's morning news roundup. by Vivian McCall
Fartin’ Around: The ICE agents sent to supposedly help TSA manage snarling lines at 14 airports—hundreds of its officers have quit or called out sick because they’re not being paid during this partial government shutdown—are just … standing around and pissing people off, writes Defector. Unsurprisingly, airport wait times haven’t magically improved overnight.
This Guy Is Definitely Going to Figure It Out: The Senate confirmed Markwayne Mullin to lead homeland security on a largely party-line vote Monday. The Republican Senator from Oklahoma and friend to President Donald Trump replacing Kristi Noem says his goal is to get the department off the front page of the news.
ICE in the News 2: ProPublica reports that Trump has arrested and detained the parents of at least 11,000 US citizen kids in the first seven months of his second term. That’s affecting roughly 50 kids a day; if the administration held that pace, the number would be about 22,000 by now.
ICE in the News 3: KUOW interviewed a couple from Oaxaca who’ve spent their adult lives working the crop and flower fields in the Skagit Valley. Their employer tells them they’re protected from federal agents at work, but there is no protection when they come and go. “Their kids beg them to leave their apartment — to walk to the nearby park and play on the playground, to go shopping for new shoes, or drive across town to get ice cream. These days, their mom and dad, who are undocumented, always say no.”
ICYMI, More ICE in the News: Last week, the Urbanist wrote about a “powerful surge” of immigration enforcement in Washington between October and December 2025. According to a report from University of Washington’s Center for Human Rights, the largest increases were in King, Yakima, and Clark Counties. The Center found repeated instances of federal agents running license plates to check immigration status before making an arrest.
Republican Sheriff/California Gubernatorial Candidate Seizes 650,000 Ballots from 2025: Riverside County Sheriff/candidate Chad Bianco says a citizen “audit” of California’s special election to re-district California allegedly showed that election workers counted 45,000 fewer ballots than the number of votes certified to the state. So… no. The citizen “evidence” is imprecise and wrong, and even though Bianco has been “investigating” fraud in Riverside County since 2022, he hasn’t found it. Is the stolen election in the room with us, folks?
Stop, Mr. Prince, He’s Impressionable! Saudi Arabian Prince Mohammed bin Salman has been pushing Trump to continue the war in Iran because he believes it is a “historic opportunity” to remake the Middle East, reports The New York Times. He’s told Trump that he must destroy Iran’s government. Trump appears to be of two minds (or none at all). Some days the war is ramping up. Others it’s winding down.
WFH is Dying: By July 1, all Seattle Public Schools employees must return to full-time in-person work, according to a Thursday email to employees. At least 330 SPS employees work in hybrid or fully-remote jobs.
Eina Kwon Shooting Won’t Go to Trial: Prosecutors have accepted a plea of insanity from Cordell Goosby, who, according to court filings, was in severe psychosis when he shot into the pregnant Kwon’s car in 2023, killing her and injuring her husband. After Goosby’s attorneys suggested he was insane at the time of the crime, prosecutors sought independent evaluation. Their expert agreed that he was insane. Under the plea, he could be held at a state psychiatric hospital for life.
Beautiful, Unseasonable Weather We’ve Been Having: This month’s snowy surprise was no match for climate change. Sorry to remind you of The End, but that abnormally mild winter cost us our precious snowpack. Usually at its highest point this time of year, Washington’s mountaintops currently “sit at or below half their normal levels,” writes The Seattle Times. After a brief hope for more snow, scientists, or the groundhogs of climate, are back to predicting the fourth severe summer drought in a row.
The Monster We’ve Created: His enjoyment is sickening.
Weather: It’s wet and grey, but we should be thankful for rain while it's still with us.
The Golden Hour at Roquette [The Stranger]
Roquette's Hour is a luminous treat. by Meg van Huygen
With an hour to kill before my birthday party, I was walking around Belltown in my silly dress in the freezing rain. I rarely drink alone, but…maybe that’s the move here? To celebrate myself on a date with myself?
It’s not hard to figure out how to spend the most luxurious possible solo hour in Belltown. Despite the attention it gets from both national food media and snobby listicle sites, Roquette’s somehow maintained a real-ones-know reputation in this city. Surrounded by oontzy dance clubs and yelly sports bars, this sleek, French-inspired cocktail lounge frequently sails under even my own radar, and definitely others’. A shame, considering its cool combo of elegant and chummy—Roquette’s unlikely to disappoint anyone who visits, even unreal ones who do not know.
What a perfect secret hideaway for an intimate little date with yourself, though. Self, we really must do this.
Fresh off its second James Beard nom, Roquette is standing room only on a blustery Friday. Ah, it’s so pretty and plush inside, with its cobalt velvet and palmy murals. They’ve got an ensemble cast tonight: Kyton Blair from Roquette’s original 2019 opening team—who’s also the StarChefs Seattle 2025 Rising Stars Award winner for his work there—as well as Chelsea Mathews (The Doctor’s Office) and Parker “Top Shelf” Knowles (Oyster Cellar). All major players in Seattle’s beverage programs.
From Roquette’s book of spectacular, world-class cocktails, I choose a Golden Hour: George Dickel Rye, Calvados Coquerel, Amaro Nonino, Giffard Piment d’Espelette, and apricot. The name was like a lovely personal welcome; in my wet scarf and drippy hair, I thought a sunny-golden hour spent in here just might break through the winter chill.
I like to smell the fruit before I take a sip—here, a swath of orange peel—and doing this adds enormously to the experience. Always a fan of gingerbready Dickel Rye. Calvados Coquerel is from Normandy, an oak-barrel cider brandy with farmy notes. Amaro Nonino is Italian and reminds me of MarketSpice tea: orange, cinnamon, chamomile, thyme, with a fruity grappa base. Also French, Piment d’Espelette’s a spicy, intense liqueur made by macerating espelette peppers in rhum agricole. And the sweet zang of the apricot juice unites everything, like hot honey on an experimental pizza.
This cocktail has always known me and is, in fact, my date tonight. We understand each other. We’re in love.
Before I go, Mathews sends me a Disco Ball—green AND yellow Chartreuse, mezcal, and “sparkles,” served in a disco ball-shaped shot glass. She’s “made it skate” with floaty ice slivers. In comparison, this tiny drink’s a flamboyant stranger who doesn’t know me at all, and it’s dazzling. I want a big version.
The karaoke party later is chaotic and fun, if exhausting, and I feel celebrated. It’s a privilege. But when the day is over, I’m deeply thankful for my meditative golden hour with the Golden Hour beforehand, hidden in plain sight at a svelte little lounge. This is the frequency I want this year. Age 46: I totally hang out at Roquette all the time now.
Leave Tyrants in the Ground [George Monbiot]
By unhooking ourselves from fossil fuels, we release ourselves from a world of harm.
By George Monbiot, published in the Guardian 19th March 2026
I realise this is a serious breach of etiquette. But could we perhaps abandon good manners and contextualise Donald Trump’s attack on Iran? The intense western interest in the Middle East and west and central Asia, sustained for more than a century, and the endless attempts by foreign governments to shape and control these regions, are not random political tics. They are somewhat connected to certain fuel sources situated beneath the ground.
Trump’s war aims are typically incoherent: apparently incomprehensible even to himself. But Iran would not be treated as an “enemy of the west” were it not for what happened in 1953, when Winston Churchill’s government persuaded the CIA to launch a coup against the popular democratic government of Mohammad Mossadegh. The UK did so because Mossadegh sought to nationalise the Anglo-Iranian Oil Company: to stop a foreign power from stealing the nation’s wealth. The US, with UK support, tried twice to overthrow him, and succeeded on the second attempt, with the help of some opportunistic ayatollahs. It reinstated the shah, Mohammad Reza Pahlavi. In 1954, the Anglo-Iranian Oil Company became British Petroleum, later BP.
Fury about the 1953 coup, combined with ever-more vicious repression under the shah’s dictatorship, triggered the revolution of 1979, which was captured by the ayatollahs, with horrible consequences for many Iranians. They would not be running the country were it not for our governments’ violent crushing of democracy for the sake of oil.
Take a step back from this history, and you see something else that should be obvious. The conflation of capitalism with “free markets” is one of the most successful lies in human history. The historical and ongoing plunder of resources; the police, armies and death squads deployed against those who resist; the shifting of profits from less powerful nations to the major powers; the intimidation of labour; the conning of consumers; the extraction of rent; the dumping of costs on the living planet: all this is the opposite of “free”. It’s highly coercive and extremely expensive.
Much of the time there’s little sign of a market, either. Land, commodities and labour are, in many cases, simply stolen. Public resources, whether oil reserves, forests, water systems or railways are given (or sold at a fraction of their value) to private monopolists. The rich are bailed out by the state when they run into trouble, while the poor must sink or swim. “Free market capitalism” is a contradiction in terms.
The world’s military power exists in large part to deliver the profit from resources – especially oil – to banks and shareholders, commodity traders and asset managers, hedge funds and private equity companies. For the same purpose, the infrastructure of persuasion – lobbyists, media, social media algorithms – is mobilised to ensure the most amoral, sadistic and bellicose people are selected as leaders, as they will keep oil and other commodities flowing for the benefit of capital, whatever the human cost may be. Their opponents are demonised, alternatives dismissed as “unrealistic”, “unpopular” and “unaffordable”.
This is why we consistently underestimate other people’s desire for change. For example, one study shows that 89% of the world’s people want more action to stop climate breakdown. Yet the same people believe they’re a minority. At the height of the Covid-19 pandemic, surveys consistently showed that a vast majority hoped to emerge into a better world, where health, wellbeing and environmental protection took precedence over economic growth. But governments spent billions on restoring our dysfunctions.
As the hydrocarbon industries and their financial backers find themselves threatened by green technologies, their grip on governments and the media has tightened. They’ve poured vast sums into climate denial and public dissuasion campaigns. Politics has become harsher, less open and less tolerant. The democratic recession is in large part driven by fossil fuel interests. The entire planet suffers from the resource curse.
Oil did not cause capitalism, but it has massively extended and empowered it. Reduce our dependency on oil, and we disrupt some of the world’s most violent and exploitative relations. We defuel dictators and war machines, coups and assassinations, invasions and nuclear threats. It’s not everything of course: there will still be water wars, land wars and mineral wars to be fought: after all, the military machine can’t just sit there rusting. But it’s a lot.
We would also defuel the greatest violence human beings have ever waged against each other: the degradation of all our lives through climate breakdown. The two emergencies – political and environmental – are one. We need to put ourselves on an anti-war footing with the urgency that nations have traditionally put themselves on war footings: an emergency programme to get fossil fuels out of our lives, faster and further than any government is currently planning.
A crucial intervention is the National Emergency Briefing, whose forthcoming film, hosted in cinemas by volunteers across the country, will press the government to explain our predicament properly, and mobilise for full-scale action. If you worry about the cost, consider this. The government’s Climate Change Committee estimates that the additional expense of a single fossil-fuel price spike on the scale of 2022’s is roughly the same as the entire cost of net zero by 2050. The price shock caused by Trump’s attack on Iran is likely to be even greater. We get nothing in return for oil spikes, but we get a new, more secure and cheaper energy system in return for the net zero programme.
I don’t mean to suggest that defeating the fossil fuel machine is easy. Capital will use everything it has to stop us. This is what Extinction Rebellion discovered in the UK, as vicious new protest laws were drafted to shut it down. This is what the Standing Rock campaigners in the US found, when they sought to stop an oil pipeline from crossing their land. It’s what Earth defenders in the global south discover even more brutally, as paramilitaries gun them down. Control over resources is the driving force of politics. Democracy, at the moment, is the lightshow played on the castle walls.
Concentrated fossil power leads to concentrated political power. Had we been less dependent on fossil fuels, there might have been no President Trump, no President Putin, no ayatollahs, no Prime Minister Netanyahu. Fossil fuels push the world towards autocracy. Overthrow our demand for them, and we overthrow much of the current tyranny. Greener, cleaner, cheaper, kinder, fairer: what a beautiful world we could have.
www.monbiot.com
Memory lane for Frontier users [Scripting News]
I had to find out which domains being served by a problem server were still mapping to its domain. This server had been running for six years, and I was pretty sure some of the apps had moved.
So I wrote a script in Frontier, it was the best tool available to me, and got my answer in 20 minutes, code written from scratch.
The script visited each subfolder, the filename is the domain of the folder, finds out which server it's supposed to be running on, based on a DNS lookup, and adds a line to a list.
Here's a screen shot of the domains folder.
Here's the script as a screen shot and GitHub doc.
This is just a way to preserve a little of the Frontier culture. Hard to explain in words. Easier to show as screen shots.
[$] A PHP license change is imminent [LWN.net]
PHP's licensing has been a source of confusion for some time. The project is, currently, using two licenses that cover different parts of the code base: PHP v3.01 for the bulk of the code and Zend v2.0 for code in the Zend directory. Much has changed since the project settled on those licenses in 2006, and the need for custom licensing seems to have passed. An effort to simplify PHP's licensing, led by Ben Ramsey, is underway; if successful, the existing licenses will be deprecated and replaced by the BSD three-clause license. The PHP community is now voting on the license update RFC through April 4, 2026.
Free Software Directory meeting on IRC: Friday, March 27, starting at 12:00 EDT (16:00 UTC) [Planet GNU]
Join the FSF and friends on Friday, March 27 from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
LiteLLM on PyPI is compromised [LWN.net]
This issue report describes a credential-stealing attack buried within LiteLLM 1.82.8 in the PyPI repository. It collects and exfiltrates a wide variety of information, including SSH keys, credentials for a number of cloud services, crypto wallets, and so on. Anybody who has installed this package has likely been compromised and needs to respond accordingly.
Update: see this
futuresearch article for some more information. "The release
contains a malicious .pth file (litellm_init.pth)
that executes automatically on every Python process startup
when litellm is installed in the environment.
"
Down: Debunking zswap and zram myths [LWN.net]
Chris Down has posted a detailed look at how the kernel's zswap and zram subsystems work — and how they differ.
Most people think of zswap and zram simply as two different flavours of the same thing: compressed swap. At a surface level, that's correct – both compress pages that would otherwise end up on disk – but they make fundamentally different bets about how the kernel should handle memory pressure, and picking the wrong one for your situation can actively make things worse than having no swap at all
Krita 5.3.0 and 6.0.0 released [LWN.net]
The Krita project has announced the release of Krita 5.3.0 and 6.0.0:
Krita 5.3/6.0 is the result of many years of work by the Krita developers. Some features have been rewritten from the ground up, others make their first appearance.
Enjoy the completely new text feature: on canvas editing, full opentype support, text flowing into shapes. It is now easier than ever to create vector-based panels for comic pages. Tools got extended: for instance, the fill tool now can close gaps. The liquify mode of the transform tool is much faster. There are new filters: a propagate colors filter and a reset transparent filter. Support for HDR painting has been improved. The recorder docker can now work in real time. There is improved support for file formats, like support for text objects in PSD files. And much, much, much more!
According to the announcement, the versions are almost functionally identical. However, the 6.0.0 release is the first based on Qt 6; it has more Wayland functionality but is considered experimental. It cautions that users should stick to 5.3.0 for real work. See the release notes for a full list of changes.
Security updates for Tuesday [LWN.net]
Security updates have been issued by Debian (strongswan and vlc), Fedora (cmake, giflib, and python-diskcache), SUSE (curl, docker-stable, freeciv, freerdp, freerdp2, freetype2, go1.25-openssl, go1.26-openssl, GraphicsMagick, gvfs, harfbuzz, kernel, lemon, libpng16, librsvg, libsodium, libsoup, net-snmp, protobuf, python-Authlib, python-maturin, python-tornado6, python310, python311-pypdf, python311-PyPDF2, python314, python39, rust-keylime, strongswan, systemd, ucode-intel, util-linux, and vim), and Ubuntu (gvfs, linux-aws-6.8, linux-azure, linux-azure, linux-azure-4.15, linux-azure-fips, linux-hwe-5.4, linux-ibm, linux-intel-iot-realtime, linux-nvidia-tegra-igx, linux-realtime-6.17, pyopenssl, rust-sized-chunks, strongswan, systemd, and tiff).
Late Payments [RevK®'s ramblings]
I don't know how I missed this consultancy, but they had said they are happy for me to send in comments.
Proposed changes to Late Payment of Commercial Debts (Interest) Act 1998
Thank you for providing contact details - I somehow missed the consultation on this, though I have been very much an advocate of this legislation since it was created, and have a web site dedicated to it paylate.co.uk
The press release led me to more concerns, but I have now read the consultation response in more detail, so these are comments on that.
Who are we?
We are an internet provider and equipment manufacturer. We turn over around £xm, have around x staff, and have thousands of customers. We sell items from as little as a £1/month, to equipment costing tens of thousands. We have commercial customers ranging from sole traders to very large corporation and even government bodies. We have been charging late payment penalties since the legislation was introduced and have experience of pursuing charges via county court as well.
Summary
We actually find the existing legislation to be very effective, and feel that the main issue is that so many small companies are still unaware that they can charge these penalties and interest. I don’t think these proposals address that. There is also a feeling that doing so risks losing important customers (something our experience says is not the case). As such we are surprised that these proposals are happening.
However, I can see some of the logic. Some proposals seem reasonable sensible, but I do have some specific comments.
Our experience
I think our experience is relevant as I am not aware of other smaller businesses fully automating late payment penalties, which we did from the start of this legislation (do look at paylate.co.uk for more).
This meant that the day a payment was late we would send an invoice for the penalty (interest was invoiced once paid). We chose to send an invoice as our experience is that any sort of payment demand or note, or polite email, would be ignored. One has to be careful to ensure no VAT nor late payment charges apply to such an invoice, but a real invoice is generally effective at getting a response.
The impact of this varied - some customers horrified (especially in the early days of the legislation). Some annoyed. We adopted a simple policy of crediting the first invoice. But it got the message across, and created some good will with the credit, and ensured we retained the customer, but that they know they would have to pay on time, and this generally works. Our accounts staff would even blame the computer - it is an automated process. But we did not lose customers over this.
Some customers had old school accounts departments that paid late as a matter of course. The actual customers, specifically the individuals we deal with, are happy with our service and exasperated with their accounts departments. The result is that we would charge, and collect, tens of thousands of pounds a year in late payment penalties - often from people persisting in paying only a few days late each month. We later started taking Direct Debit and this meant these charges dried up, a lot. Direct Debit collection is a massive benefit for getting paid on time. But we do have the occasional customer paying late and being charged every month, even now.
We also had a handful of cases of, typically smaller companies, insisting they would not pay penalties, and we took some to court and won with no problem whatsoever. That generally does not happen now as people are more aware.
It is also worth noting that one huge corporation was somewhat intractable, and we took the pragmatic decision (because of the value of the business) not to charge penalties. We left the system adding a note on each statement indicating how much they had accumulated to date (they ignored this). After many years they moved to a new supplier for unrelated reasons (which we expected would happen eventually), but they had paid every invoice a few days late. We send a final invoice for all of the late payment penalties. Many thousands of pounds, and they had no choice but to pay, which they did.
One interesting comment we have had, in light of comments on your proposal about small businesses asking for the interest - we have had customer say it is not good business practice to ask for the interest! We have replied that it is not good business practice to pay late. Others may feel intimidated.
Specifics of your proposals
New powers and reporting
These seem good in principle, and I guess making it part of large company audits makes sense. New reporting burdens are never nice, if it is simply reporting what the auditors have found, it should not be too bad.
Penalties
As for powers for imposing additional penalties: As the legislation makes this part of the terms, paying late and then paying the interest and penalties as required, is complying with the terms, ultimately? And has already imposed penalties. I can understand penalties for not paying the late payment penalties and interest, but also, is that not what county court is for? It just sounds legally a little odd (I am not a lawyer). The terms are in effect pay by this date or else if you choose to pay later then pay this extra money, in effect a choice, and compliance with either is compliance with the contract terms as such. Indeed a customer might explicitly word a contract exactly in those terms and be compliant with the Act.
In practice, if somehow it could be that everyone who is paid late actually charged the penalties and interest, that would be an administrative and financial burden on those that pay late and change their ways. At present this does not happen. I am not sure these proposals change that. I do not see customers negotiating contracts with no penalties, I see suppliers unaware or too scared to charge what is already the legally required penalties and interest.
One thought on penalties, if a business identifies through audits that it has paid suppliers late, can it not be forced to calculate and send the due penalties and interest to those suppliers that have not already demanded it - that would also be a notable disincentive and effective penalty but also benefit those that have been paid late rather than a fine paid to the government.
Personally I have always said that a company that knows it is paying late should be accounting for the accumulated debt they legally owe (even if not requested by suppliers) on its accounts, and that failing to do so is already fraudulent accounts.
Maximum payment terms
I feel the press release is somewhat misleading on this…
Re-reading the latest version of the existing Act, I see 30 day (public authority) and 60 day (other) limits already in place. I suppose the 5D(b) and 7A does allow for longer terms if not grossly unfair and I can only assume this proposal is simply to remove that option. The consultation and press release do not make it clear that it is just the removal of not grossly unfair longer terms. I hope it is not extending the 30 day limit on public authorities to 60 days. But the wording does suggest exceptions may still exist, so this is really not a significant change at all.
Personally I would be happy with something that makes 30 days much more of a default, and up to 60 days some sort of exception needing some specific justification or perhaps common established industry practice. I can see that some large customers might even now point to the Act and say that 60 days is clearly reasonable as it is allowed by the Act - however as it is already in the Act, and has not changed what we see from customers, maybe that is not such a concern.
Construction contracts
I have no experience of such.
Deadline for disputing invoices.
This does concern me. It was not that clear until I read the more detailed response what the purpose was. I do see the basic logic.
Even when a dispute is raised promptly, it needs to be clear that the undisputed amount must still be paid within terms and penalties and interest apply to that.
Also, once a dispute is raised the process for ensuring a supplier refunds a customer for the correctly disputed amount is probably important as well. This would not count for late payment penalties the other way around, and perhaps it should.
Also, what is to stop a customer simply generally disputing every invoice, so as to stop the clock? Or a supplier deliberately making it hard to understand an invoice so is can’t easily be disputed in time. Slip in some errors that won’t be spotted until too late?
A general limit on raising disputes is a concern, e.g. disputes on invoices already paid. This whole process needs to relate only to the application of late payment penalties, and not disputes in general.
For example, we deal with BT as a supplier, and the invoices each month have tens of thousands of line items. We have staff that spend time checking for errors, and there are usually some. We obviously pay the undisputed amount within terms - we pay all suppliers within terms. But the process of identifying an error can be time consuming. We also have the fact that an error might not be apparent until one of our retail/consumer customers queries something with us, and that may relate to previous invoices or even go back years. We recently found a case of a circuit for which BT have been charging for around 5 years even though they ceased it, and, being within the 6 years of the Limitations Act, we have, of course disputed the (paid) invoices, and now got a refund. Limiting our ability to dispute genuine errors is not good, in my view. I really hope that is not what is being proposed.
Mandatory interest
Again, I feel the press release is misleading on this… For a start, it only mentions interest and not the fixed penalty part, which I hope is retained.
Interest (and penalties) are in effect mandatory already. The exception is where a substantial contract remedy is agreed. I can only assume you are simply removing that option. The press release made it sound like interest was a new thing. Our experience is we have not seen any customer try and negotiate an alternative substantial remedy.
However, as a customer of BT, it happens that BT have a long standing clauses (which may even pre-date the Act) for late payment interest (not fixed penalty) which is lower than the current +8% in the Act. This change would actually make us, as a small business worse off (though, as I say, we do not pay anyone late) by making it the statutory amount.
So in our experience this is a pointless change. But I can see the logic. Maybe where the supplier is a large company and they propose in their standard terms a lower late payment penalties, that would make sense as an exception.
The consultation comments on this make little sense to me - small businesses would still have to ask for the penalties and interest (I hope the penalty aspect is retained), obviously, just like now. If the customer does not think they paid late, they are not going to work out the interest and send it! I say that the customer may not realise they paid late - and this relates not only to things like old BACS taking two days, bank holidays, wilful ignorance, etc, but companies that genuinely think that they are not getting their 30 days credit if they send payment before it is overdue, so they wait 30 days and then send, indeed feeling it is unreasonable to expect them to “do a BACS run every day”. So it is sent on the next BACS run after the payment is overdue. In that case we agreed 40 day terms to allow them time, and as predicted they started sending on the BACS run after 40 days!
No big change?
Overall this is not a big change - in effect (from our experience) the interest and penalties are a mandatory part of every commercial contract, and 60 days is a hard limit (30 for public authority). The changes remove some existing exceptions which already have wording to make them difficult (substantial remedy, grossly unfair), and we see no examples of these being used. Perhaps other industries do see them used.
Yes the auditing and reporting is new, but does that actually get small businesses actually charging the penalties and interest due? Surely many will still be either unaware, or scared to apply these charges to big customers, as now. Nothing much has changed there.
The dispute timeframe changes are a slight concern if not worded very carefully.
Suggestion
A big change would be customers that pay late having to allow for the debt due on their accounts (they probably already should), as well as include it in auditing, and report it. Then the possibility that they can be ordered to calculate and pay suppliers (that have not demanded it) what is due. A few high profile cases of that and it would scare large late payers in to action, and also make the smaller suppliers aware of what they should have already been charging.
I hope that is useful feedback.
You can't really use Claude to do research. It always assumes you're trying to do something. If you don't tell it what you're trying to do it guesses, and then starts telling you what to do. Its guesses are always wildly wrong. How do you tell it to stop telling you what to do? It totally disrupts your train of thought. But it makes me miss the days of Stack Exchange and Google search.
Online suckage is everywhere [Scripting News]
The 300 char limit here has as much suckage as Claude pretending you want to know what it thinks you're trying to do.
It's another freaking algorithm.
Bluesky assumes you can say whatever you have to say in 300 characters. It's a fucking machine, how could it possibly know.
Claude thinks it can tell me what to do, but it's a fucking machine. it has no idea what i'm doing.
First we need freedom from billionaires. Then we need freedom from character limits. And finally we need freedom from machines who think they know better.
AND THE STUPID THING ABOUT CLAUDE IS IT DOESN'T EVEN SAY WHAT IT THINKS YOU'RE TRYING TO DO. YOU HAVE TO READ WHAT IT SAYS AND THEN TRY TO GUESS. YOU QUICKLY LOSE YOUR MIND THAT WAY. MAYBE THAT'S THE POINT.
And how mad can you get at a machine named Bluesky or Claude. They should call these things Mind-Killer or Soul-Sucker or You-Cuck. Then at least you'd know why you're there. :-)
BTW, as long as Bluesky has a 300 char limit and no style or links, I'm going to have to hand-translate posts there to become posts here where no such limits prevail. At some point either they give up on the limits or I give up on them.
How to Build a General-Purpose AI Agent in 131 Lines of Python [Radar]
The following article originally appeared on Hugo Bowne-Anderson’s newsletter, Vanishing Gradients, and is being republished here with the author’s permission.
In this post, we’ll build two AI agents from scratch in Python. One will be a coding agent, the other a search agent.
Why have I called this post “How to Build a General-Purpose AI Agent in 131 Lines of Python” then? Well, as it turns out now, coding agents are actually general-purpose agents in some quite surprising ways.
What I mean by this is once you have an agent that can write code, it can:
It’s more appropriate to think of coding agents as “computer-using agents” that happen to be great at writing code. That doesn’t mean you should always build a general-purpose agent, but it’s worth understanding what you’re actually building when you give an LLM shell access. That’s also why we’ll build a search agent in this post: to show the pattern works regardless of what you’re building.
For example, the coding agent we’ll build below has four tools: read, write, edit, and bash.
It can do
This is a small subset of what’s possible. It’s also the reason Claude Cowork seemed promising and why OpenClaw has taken off in the way it did.
So how can you build this? In this post, I’ll show you how to build a minimal version.
Agents are just LLMs with tools in a conversation loop and once you know the pattern, you’ll be able to build all types of agents with it:
As Ivan Leo wrote,
The barrier to entry is remarkably low: 30 minutes and you have an AI that can understand your codebase and make edits just by talking to it.
The goal here is to show that the pattern is the same regardless of what you’re building an agent for. Coding agent, search agent, browser agent, email agent, database agent: they all follow the same structure. The only difference is the tools you give them.
We’ll start with a coding agent that can read, write, and execute code. As stated, the ability to write and execute code with bash also turns a “coding agent” into a “general-purpose agent.” With shell access, it can do anything you can do from a terminal:
Check out Ivan Leo’s post for how to do this in JavaScript and Thorsten Ball’s post for how to do it in Go.
Start by creating our project:
We’ll be using Anthropic here. Feel free to use your LLM of choice. For bonus points, use Pydantic AI (or a similar library) and have a consistent interface for the various different LLM providers. That way you can use the same agentic framework for both Claude and Gemini!
Make sure you’ve got an Anthropic API key set as ANTHROPIC_API_KEY environment variable.
We’ll build our agent in four steps:
write, edit, and
bash
Text in, text out. Good! Now let’s give it a tool.
We’ll start by implementing a tool called read which will allow the agent to read files from the filesystem. In Python, we can use Pydantic for schema validation, which also generates JSON schemas we can provide to the API:
The Pydantic model gives us two things: validation and a JSON schema. We can see what the schema looks like:
We wrap this into a tool definition that Claude understands:
Then we add tools to the API call, handle the tool request, execute it, and send the result back:
Let’s see what happens when we run it:
This script calls the Claude API with a user query passed via command line. It sends the query, gets a response, and prints it.
Note that the LLM matched on the tool description: Accurate, specific descriptions are key! It’s also worth mentioning that we’ve made two LLM calls here:
This often trips up people building agents for the first time, and Google has made a nice visualization of what we’re actually doing:
We have a read tool, but a coding agent needs to do more than read. It needs to:
That’s three more tools: write,
edit, and bash.
Same pattern as read. First the schemas:
Then the executors:
And the tool definitions, along with the code that runs whichever one Claude picks:
The bash tool is what makes this actually useful: Claude can now write code, run it, see errors, and fix them. But it’s also dangerous. This tool could delete your entire filesystem! Proceed with caution: Run it in a sandbox, a container, or a VM.
Interestingly, bash is what turns a “coding agent” into a “general-purpose agent.” With shell access, it can do anything you can do from a terminal:
It was actually “Pi: The Minimal Agent Within OpenClaw” that inspired this example.
Try asking Claude to edit a file: It often wants to read it first to see what’s there. But our current code only handles one tool call. That’s where the agentic loop comes in.
Right now Claude can only call one tool per request. But real tasks need multiple steps: read a file, edit it, run it, see the error, fix it. We need a loop that lets Claude keep calling tools until it’s done.
We wrap the tool handling in a while True loop:
Note that here we have sent the entire past history of accumulated messages as we progress through loop iterations. When building this out more, you’ll want to engineer and manage your context more effectively. (See below for more on this.)
Let’s try a multistep task:
Right now the agent handles one query and exits. But we want a back-and-forth conversation: Ask a question, get an answer, ask a follow-up. We need an outer loop that keeps asking for input.
We wrap everything in a while True:
The messages list persists across turns, so Claude remembers context. That’s the complete coding agent.
Once again we’re merely appending all previous messages, which means the context will grow quite quickly!
An agent harness is the scaffolding and infrastructure that wraps around an LLM to turn it into an agent. It handles:
And more.
Think of it like this: The LLM is the brain; the harness is everything else that lets it actually do things.
What we’ve built above is the hello world of agent harnesses. It covers the loop, tool execution, and basic context management. What it doesn’t have: safety guardrails, token limits, persistence, or even a system prompt!
When building out from this basis, I encourage you to follow the paths of:
AGENTS.md from multiple directories, persistent
sessions you can resume and branch, and an extensibility system
(skills, extensions, prompts)SOUL.md, MEMORY.md, daily logs),
proactive behavior (heartbeats, cron), preintegrated tools
(browser, subagents, device control), and the ability to message
you without being promptedIn order to really show you that the agentic loop is what powers any agent, we’ll now build a search agent (inspired by a podcast I did with search legends John Berryman and Doug Turnbull). We’ll use Gemini for the LLM and Exa for web search. You can find the code here.
But first, the astute reader may have an interesting question: If a coding agent really is a general-purpose agent, why would anyone want to build a search agent when we could just get a coding agent to extend itself and turn itself into a search agent? Well, because if you want to build a search agent for a business, you’re not going to do it by building a coding agent first… So let’s build it!
As before, we’ll build this step-by-step. Start by creating our project:
Set GEMINI_API_KEY (from Google AI Studio) and
EXA_API_KEY (from exa.ai) as environment
variables.
We’ll build our agent in four steps (the same four steps as always):
web_search)Gemini can answer from its training data, but we don’t
want that, man! For current information, it needs to search the
web. We’ll give it a web_search tool that calls
Exa.
The system instruction grounds the model, (ideally) forcing it
to search instead of guessing. Note that you can
configure Gemini to always use web_search, which
is 100% dependable, but I wanted to show the pattern that you can
use with any LLM API.
We then send the tool call result back to Gemini:
Some questions need multiple searches. “Compare X and Y” requires searching for X, then searching for Y. We need a loop that lets Gemini keep searching until it has enough information.
Same as before: We want back-and-forth conversation, not one query and exit. Wrap everything in an outer loop:
Messages persist across turns, so follow-up questions have context.
The pattern is the same for both agents. Add any tool:
web_search to the coding agent: Look things up
while codingbash to the search agent: Act on what it
findsbrowser: Navigate websitessend_email: Communicatedatabase_query: Run SQLOne thing we’ll be doing is showing how general purpose a coding agent really can be. As Armin Ronacher wrote in “Pi: The Minimal Agent Within OpenClaw”:
Pi’s entire idea is that if you want the agent to do something that it doesn’t do yet, you don’t go and download an extension or a skill or something like this. You ask the agent to extend itself. It celebrates the idea of code writing and running code.
Building agents is straightforward. The magic isn’t complex algorithms; it’s the conversation loop and well-designed tools.
Both agents follow the same pattern:
The only difference is the tools.
Thank you to Ivan Leo, Eleanor Berger, Mike Powers, Thomas Wiecki, and Mike Loukides for providing feedback on drafts of this post.
Pluralistic: Goodhart's Law vs "prediction markets" (24 Mar 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

The most selectively believed-in verse in the conservative catechism is the idea that "incentives matter."
Sure, "incentives matter" if you're seeking healthcare. That's why you're nibbled to death by co-pays and deductibles – if you could get healthcare whenever you felt like it, you might get too much healthcare. "Incentives matter," so we have to make sure that you only seek care when you really need it:
https://pluralistic.net/2025/04/14/timmy-share/#a-superior-moral-justification-for-selfishness
But rich people don't need to be disciplined by incentives. They can get no-bid contracts with Uncle Sucker without being tempted to rip off the USA. They can force their workers into nondisparagement clauses without being tempted to act like a colossal asshole, secure in the knowledge that they can sue workers who tattle on them. They can force their workers into noncompete clauses without being tempted to underpay and abuse their workers, secure in the knowledge that they can sue workers who take their labor elsewhere. They can force their workers into binding arbitration clauses without being tempted into maiming or killing them, secure in the knowledge that the workers can't sue them.
So incentives matter…when you're fucking over working people. But incentives don't matter, when you're gilding the Epstein class's lilies.
But incentives really do matter. That's the premise of Goodhart's law: "When a measure becomes a target, it ceases to be a good measure." This comes up all the time. Google got its start by observing that people who made websites linked to other websites that they found important or worthy or informative. With this insight, Google repurposed the academic practice of "citation analysis" to predict which pages on the internet were most authoritative, calling it Pagerank.
Google Search, powered by Pagerank, was vastly superior to any search engine in history. But as soon as Google became the most popular search engine, people started making links to bad websites – sites filled with spam and malware and junk – in order to game the results. The metric – inbound links – became a target – get inbound links – and stopped being a useful metric.
There is something quite wonderful and life affirming about the idea of Pagerank: the idea that people are, on average, pretty good at figuring out what's good. Rather than taking Yahoo's approach of having experts rank and categorize every website on earth, Google trusted "the wisdom of crowds" and it worked (until they created an incentive to subvert it).
"The wisdom of crowds" was in the air in those days. James Surowiecki had a massive bestseller with that title in 2004, expounding on the idea that people were, in aggregate, good at figuring stuff out:
https://en.wikipedia.org/wiki/The_Wisdom_of_Crowds
Surowiecki's book revolved around a famous anecdote from 1906, when 800 people at the Plymouth county fair were invited to guess at the weight of a slaughtered and dressed ox. Statistician (and eugenicist creep) Francis Galton noted that the average guess of 1207 lbs was within 1% of the actual weight, 1198 lbs. This turns out to be a repeatable phenomenon: if you get a lot of people – non-experts, experts, people paying close attention, people who barely think about it – to guess about something, the average is surprisingly accurate. Importantly, it's often more accurate than the best guess of experts.
This idea of the wisdom of crowds inspired a lot of 2000s-era internet projects. Some of them (Yahoo Answers) were pretty bad. Others (Wikipedia) were astounding. Of course, economists observed that "the wisdom of crowds" sounds a lot like the idea of "price discovery" – the idea that markets are a way of processing widely diffused information about desires and capacity in order to derive and emit signals about what should be produced.
Economists have long spoken of future events being "priced in" to markets – for example, the price of oil today reflects more than the diminished supply resulting from Trump's military blunders, it also reflects "the market's" belief that oil production capacity will be disrupted for a long time to come. Add up all the different buyers' and sellers' guesses about the future of oil (incorporating diffuse knowledge about damage to infrastructure, capacity to rebuild, and intentions of the actors) and (we're told) we'll get a number that accurately reflects the real situation.
And, unlike Pagerank, this number can't be manipulated by flooding the system with spurious, self-serving inputs. If you want to move this price, you have to buy or sell something, which costs money. And because the market is "deep" (with a lot of participants), the sums you'd have to inject into the system to alter its consensus is incredibly large – more than you could possibly stand to make by manipulating the price itself. Incentives matter.
Put "markets," "the wisdom of crowds" and "incentives matter" together and you get "prediction markets." Just create a market where people can bet real money on the outcomes of events and you can recreate Galton's ox-guessing miracle, but for everything – how much new solar capacity will come online in Pakistan next year; the likelihood that the Toronto Transit Commission will finish the Ontario Line this year; whether a biotech firm will ship an AIDS vaccine before 2040.
This is where Goodhart's law comes in. The idea that betting markets improve the wisdom of crowds because participants have "skin in the game" only works if the cheapest way to win a bet is to be right. If it's cheaper to win by cheating, well, "incentives matter," and you'll get cheating.
Any prediction market needs an "oracle" – a decisive source of truth about how an event turned out. "How much new solar capacity came online in Pakistan" this year sounds like an empirical question, but unless every bettor agrees to travel to Pakistan together and walk the land, counting solar panels and checking proof of their installation dates, these bettors need to agree on some third party assessor as authoritative and trust whatever they say.
Which means that the single most important factor in any prediction market is the quality of the oracle. If you let Trump be your oracle, he'll insist (on a daily basis) that his war in Iran is over, and that he had bigger crowds for his inauguration than anyone in history, and that every criminal is Somali, and on and on and on.
So you need to get someone trustworthy and diligent to serve as your oracle. But that person also has to be incorruptible, because otherwise a bettor will offer them a bribe to lie about the outcome of a bet. And if the oracle can't be bribed, they can be coerced.
That's just what's happened. Times of Israel war correspondent Emanuel Fabian didn't know that he was serving as an oracle for a bunch of degenerate gamblers on Polymarket – until he wrote a 150 word blog post that made a bunch of bettors in a $14m wager very, very angry:
The $14m was riding on a bet about when Iran would successfully strike Israel, with "success" defined as a missile getting through without being intercepted. Fabian filed a routine report that a missile had struck an open area in Jerusalem without hurting anyone. That's when the degenerate gamblers found him.
At first, they sent thinly veiled threats, demanding that Fabian revise his reporting to say that the missile had been intercepted and that the impact was just wreckage from the interception. When Fabian did not revise his article, the gamblers tracked down his messaging IDs – Whatsapp, Discord, X – and bombarded him with escalating threats. A journalistic colleague contacted Fabian with the lie that his boss wanted Fabian to change the story, then admitted that he was actually invested in the wager, and offered to split the money with Fabian.
Then, a gambler calling himself "Haim" sent Fabian a new series of blood-curdling threats, including a promise to spend at least $900,000 (the money Haim said he stood to lose) on a hit-man to kill Fabian. Haim threatened Fabian's "lovely parents" and "brothers and sisters" too. The threats continued until Fabian published his article about the threats, then Haim disappeared.
Speaking to Charlie Warzel, Fabian said that he would never be able to report the same way again, because from now on, he'd be worried that some gambler would threaten to kill him if they didn't like what he wrote:
It's sadly not unusual for journalists to receive death threats for reporting the truth, and Israel is the most dangerous country in the world to be a journalist. The IDF has murdered at least 274 journalists to date:
https://en.wikipedia.org/wiki/Killing_of_journalists_in_the_Gaza_war
But those journalists are being murdered for political reasons, because someone has an ideological stake in suppressing the truth. Fabian's talking about an entirely novel – and far less predictable – threat; namely, that you will piss off someone who guessed wrong about the outcome of some arbitrary event and who thinks that they can salvage their bet by intimidating you.
Writing for Techdirt, Mike Masnick talks about the sheer perversity of this: that prediction markets, far from being a means of surfacing hidden information, have become a system for distorting information:
As Masnick says, this is no routine proof of Goodhart's law, where a metric becomes a target. In this case, participants can "put a gun to the metric's head." And of course, not every journalist is as incorruptible as Fabian – think about Fabian's colleague who offered to split the take if Fabian would lie about the missile strike. So there's plenty of incentive to publish lies – and incentives matter, right?
Now, "prediction markets" are big business and they have plenty of apologists (incentives matter). These apologists will say that the corruption is a feature, not a bug, because prediction markets will attract insiders who cheat on the bets by using their insider knowledge, and that means that looking at the moving odds of an event can help everyone else figure out what's about to happen. If military insiders who know that Trump is about to kidnap the president of Venezuela and steal its oil start laying big bets that this is going to happen, the shifting odds are a signal about a true future event.
But even if you buy this perverse argument, it doesn't offset the even more perverse effect – that prediction markets create an incentive to corrupt our best sources of information, the oracles that every prediction market absolutely requires if it is going to hope to function.
Meanwhile, Polymarket and Kalshi suck at predicting things. As Molly White points out, the predictions in the recent Illinois 2nd District Congressional race weren't just incredibly wrong, they also precisely tracked the sums flooded into the election by cryptocurrency Super PACs, who tried (unsuccessfully) to buy the race. Polymarket and Kalshi are heavily crypto-coded (the only things you can do with crypto is buy other kinds of crypto, launder money, and make wagers) so these demonic freaks flush nearly as much money into the betting markets as they do into the elections they seek to corrupt:
https://bsky.app/profile/molly.wiki/post/3mhch3ze5nc2z
Prediction markets aren't good at producing information, but they're amazing at producing corruption. Polymarket and Kalshi have at last realized the unhinged fantasy of "assassination markets" – where you stochastically murder someone by putting up huge wagers at favorable odds that your target will be killed. Anyone can collect the wager by putting up a small counterwager and then bumping off the victim. But, as Protos's Cas Piancey and Mark Toon note, Polymarket and Kalshi know what side their bread is buttered on – they have banned bets on Trump's death (Trump's sons are heavily invested in both Polymarket and Kalshi):
https://protos.com/assassination-markets-are-legal-now-but-trump-doesnt-have-to-worry/
Incentives do matter. These are the foreseeable and foreseen outcomes of prediction markets. Many science fiction writers (Charlie Stross, Ted Chiang, me, and others!) have noted that long before the current AI bubble, our society was dominated by artificial life forms: the limited liability corporation, a "slow AI" that is an immortal colony organism that uses human beings as a form of inconvenient gut flora:
Anyone who's worked with machine learning systems knows that they're prone to "reward hacking," like the ML-guided Roomba that was programmed to avoid collisions with walls and furniture as it found the quickest path around the room. The Roomba's collision sensor was on its front face, so the Roomba started moving around the room in reverse, smashing the hell out of the furnishings and walls, but never registering a hit:
https://web.archive.org/web/20190109142921/https://twitter.com/smingleigh/status/1060325665671692288
Markets are absolutely capable of inducing reward hacking in participants. The metric becomes a target. You think you're betting on the outcome of an event, but what you're really betting on is what an oracle will say the outcome was. No matter what the outcome is or how robust it is against outside influence, the oracle can be influenced with a gun to the temple. Sure, we all want "number go up," but why bother increasing the thing the number measures, when it's so much easier to threaten to dismember the person who publishes the number if they don't publish a higher number?

Prediction Markets Promised Better Information. Instead They’re Creating Powerful Incentives to Corrupt Information. https://www.techdirt.com/2026/03/19/prediction-markets-promised-better-information-instead-theyre-creating-powerful-incentives-to-corrupt-information/
Suicidal Bootlicking as a Method of Governance https://www.hamiltonnolan.com/p/suicidal-bootlicking-as-a-method
California bill aims to help vibe coders https://www.semafor.com/article/03/20/2026/california-bill-aims-to-help-vibe-coders
Manipulating the Stock Market Is Trump's War Strategy https://www.thebignewsletter.com/p/monopoly-round-up-manipulating-the
#20yrsago Airport screening doesn’t stop knives, bombs, or guns https://www.schneier.com/blog/archives/2006/03/airport_passeng.html
#20yrsago Apple’s hypocritical slam against French DRM-interop law http://news.bbc.co.uk/2/hi/technology/4833010.stm
#20yrsago Vinge’s scientific computing Nature article about MMORPGs https://web.archive.org/web/20060411235146/http://www.nature.com/news/2006/060320/full/440411a.html
#20yrsago Yahoo: if you use our ads, you have to block non-US visitors https://memex.craphound.com/2006/03/22/yahoo-if-you-use-our-ads-you-have-to-block-non-us-visitors/
#20yrsago Stand-up comic gets his material from dumb patents https://web.archive.org/web/20060613212120/https://www.wired.com/news/technology/0,70368-0.html?tw=rss.index
#15yrsago Chinese censorware nukes any voicecall that contains the word “protest” https://www.nytimes.com/2011/03/22/world/asia/22china.html?_r=2&ref=world
#15yrsago Why Rasputin isn’t in the Haunted Mansion https://longforgottenhauntedmansion.blogspot.com/2011/03/famous-ghosts-and-ghosts-trying-to-make.html
#15yrsago HOWTO play the opening chord from ‘A Hard Day’s Night’ https://www.beatlesbible.com/features/hard-days-night-chord/
#15yrsago Google Book Search rejected: why not try fair use instead? https://arstechnica.com/tech-policy/2011/03/judge-rejects-google-book-monopoly/
#10yrsago Harvard Blue Book: peace in our time? https://web.archive.org/web/20160322020137/https://hlrecord.org/2016/03/the-blue-wars-a-report-from-the-front/
#10yrsago Mondrian pong https://b3ta.com/board/11191694
#10yrsago Silverpush says it’s not in the ultrasonic audio-tracker ad-beacons business anymore https://web.archive.org/web/20160324110815/https://motherboard.vice.com/read/silverpush-ftc-stop-eavesdropping-with-audio-beacons
#10yrsago Nixon started the War on Drugs because he couldn’t declare war on black people and hippies https://harpers.org/archive/2016/04/legalize-it-all/?single=1
#10yrsago Anti-DRM demonstrators picket W3C meeting https://www.eff.org/deeplinks/2016/03/scenes-anti-drm-protest-outside-w3c
#10yrsago Student loan garnisheeing topped $176M in three months https://web.archive.org/web/20160322023207/https://consumerist.com/2016/03/21/176m-in-wages-garnished-for-unpaid-federal-student-loans-in-just-three-months/
#10yrsago Dozens of car models can be unlocked and started with a cheap radio amp https://www.adac.de/rund-ums-fahrzeug/ausstattung-technik-zubehoer/assistenzsysteme/keyless/
#10yrsago US Embassy staffer ran a sextortion racket from work computer for 2 years https://arstechnica.com/tech-policy/2016/03/former-us-embassy-staffer-sentenced-to-nearly-five-years-for-sextortion/
#5yrsago Patent troll IP is more powerful than Apple's https://pluralistic.net/2021/03/22/gandersauce/#petard

Montreal: Bronfman Lecture (McGill), Apr 10
https://www.eventbrite.ca/e/artificial-intelligence-the-ultimate-disrupter-tickets-1982706623885
Montreal: Drawn and Quarterly, Apr 10
https://mtl.drawnandquarterly.com/events/4863920260410
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
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
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/
Tanner Humanities Lecture (U Utah)
https://www.youtube.com/watch?v=i6Yf1nSyekI
"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 (646 words today, 55270 total) FIRST DRAFT COMPLETE
"The Post-American Internet," a short book about internet policy in the age of Trumpism. PLANNING.
A Little Brother short story about DIY insulin PLANNING

This work – excluding any serialized fiction – is licensed under a Creative Commons Attribution 4.0 license. That means you can use it any way you like, including commercially, provided that you attribute it to me, Cory Doctorow, and include a link to pluralistic.net.
https://creativecommons.org/licenses/by/4.0/
Quotations and images are not included in this license; they are included either under a limitation or exception to copyright, or on the basis of a separate license. Please exercise caution.
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):
https://doctorow.medium.com/
https://twitter.com/doctorow
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
CodeSOD: The Barren Fields [The Daily WTF]
Today, it's not exactly the code that was bad. For some time, a government agency had been collecting information from users using fillable PDF forms. The user would submit the form, and then a data entry clerk would copy the text from the form into a database. This, of course, raised the question: why was someone manually riding the copy/paste button?
Sally was tasked with automating this. The data is already in a digital format, so it should be easy to use a PDF library to parse out the entered data and insert it into the database. And it almost was.
Sally shares with us, not code, but the output of her program which scanned the fields, looking for their names:
FieldType: Text
FieldName: T5ZA1
FieldNameAlt: T5ZA1
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 3
---
FieldType: Text
FieldName: T5ZA2
FieldNameAlt: T5ZA2
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 2
---
FieldType: Text
FieldName: T5ZA3
FieldNameAlt: T5ZA3
FieldFlags: 25165824
FieldJustification: Left
FieldMaxLength: 4
I could go on, Sally certainly shared many more examples, but
you can get the gist. The names were all cryptic five character
blobs. They all start with T5Z, and followed by
"letternumber": A3, B9, C2,
etc. It has the vibe of being autogenerated; someone just never
considered that they might want clear names for the fields, and
just let their editor autonumber them, but that has one
counterpoint to it: the letter "O" is never used.
T5ZN9 is followed by T5ZP1.
Sally was left scratching her head. Of course, she was going to have to write some sort of lookup that would convert the PDF's field names into database field names, but she expected that the PDF would provide at least some sort of guidance on that front.
I really enjoy that the alt-text for every field is also the field name, which is a clear accessibility "win".
Team Mirai and Democracy [Schneier on Security]
Japan’s election last month and the rise of the country’s newest and most innovative political party, Team Mirai, illustrates the viability of a different way to do politics.
In this model, technology is used to make democratic processes stronger, instead of undermining them. It is harnessed to root out corruption, instead of serving as a cash cow for campaign donations.
Imagine an election where every voter has the opportunity to opine directly to politicians on precisely the issues they care about. They’re not expected to spend hours becoming policy experts. Instead, an AI Interviewer walks them through the subject, answering their questions, interrogating their experience, even challenging their thinking.
Voters get immediate feedback on how their individual point of view matches—or doesn’t—a party’s platform, and they can see whether and how the party adopts their feedback. This isn’t like an opinion poll that politicians use for calculating short-term electoral tactics. It’s a deliberative reasoning process that scales, engaging voters in defining policy and helping candidates to listen deeply to their constituents.
This is happening today in Japan. Constituents have spent about eight thousand hours engaging with Mirai’s AI Interviewer since 2025. The party’s gamified volunteer mobilization app, Action Board, captured about 100,000 organizer actions per day in the runup to last week’s election.
It’s how Team Mirai, which translates to ‘The Future Party,’ does politics. Its founder, Takahiro Anno, first ran for local office in 2024 as a 33 year old software engineer standing for Governor of Tokyo. He came in fifth out of 56 candidates, winning more than 150,000 votes as an unaffiliated political outsider. He won attention by taking a distinctive stance on the role of technology in democracy and using AI aggressively in voter engagement.
Last year, Anno ran again, this time for the Upper Chamber of the national legislature—the Diet—and won. Now the head of a new national party, Anno found himself with a platform for making his vision of a new way of doing politics a reality.
In this recent House of Representatives election, Team Mirai shot up to win nearly four million votes. In the lower chamber’s proportional representation system, that was good enough for eleven total seats—the party’s first ever representation in the Japanese House—and nearly three times what it achieved in last year’s Upper Chamber election.
Anno’s party stood for election without aligning itself on the traditional axes of left and right. Instead, Team Mirai, heavily associated with young, urban voters, sought to unite across the ideological spectrum by taking a radical position on a different axis: the status quo and the future. Anno told us that Team Mirai believes it can triple its representation in the Diet after the next elections in each chamber, an ostentatious goal that seems achievable given their rapid rise over the past year.
In the American context, the idea of a small party unifying voters across left and right sounds like a pipe dream. But there is evidence it worked in Japan. Team Mirai won an impressive 11% of proportional representation votes from unaffiliated voters, nearly twice the share of the larger electorate. The centerpiece of the party’s policy platform is not about the traditional hot button issues, it’s about democracy itself, and how it can be enhanced by embracing a futuristic vision of digital democracy.
Anno told us how his party arrived at its manifesto for this month’s elections, and why it looked different from other parties’ in important ways. Team Mirai collected more than 38,000 online questions and more than 6,000 discrete policy suggestions from voters using its AI Policy app, which is advertised as a ‘manifesto that speaks for itself.’
After factoring in all this feedback, Team Mirai maintained a contrarian position on the biggest issue of the election: the sales tax and affordability. Rather than running on a reduction of the national sales tax like the major parties, Team Mirai reviewed dozens of suggestions from the public and ultimately proposed to keep that tax level while providing support to families through a child tax credit and lowering the required contribution for social insurance. Anno described this as another future-facing strategy: less price relief in the short term, but sustained funding for essential programs.
Anno has always intended to build a different kind of party. After receiving roughly $1 million in public funding apportioned to Team Mirai based on its single seat in the Upper Chamber last year, Anno began hiring engineers to enhance his software tools for digital democracy.
Anno described Team Mirai to us as a ‘utility party;’ basic infrastructure for Japanese democracy that serves the broader polity rather than one faction. Their Gikai (‘assembly’) app illustrates the point. It provides a portal for constituents to research bills, using AI to generate summaries, to describe their impacts, to surfacing media reporting on the issue, and to answer users’ questions. Like all their software, it’s open source and free for anyone, in any party, to use.
After last week’s victory, Team Mirai now has about $5 million in public funding and ambitions to grow the influence of their digital democracy platform. Anno told us Team Mirai has secured an agreement with the LDP, Japan’s dominant ruling party, to begin using Team Mirai’s Gikai and corruption-fighting Mirumae financial transparency tool.
AI is the issue driving the most societal and economic change we will encounter in our lifetime, yet US political parties are largely silent. But AI and Big Tech companies and their owners are ramping up their political spending to influence the parties. To the extent that AI has shown up in our politics, it seems to be limited to the question of where to site the next generation of data centers and how to channel populist backlash to big tech.
Those are causes worthy of political organizing, but very few US politicians are leveraging the technology for public listening or other pro-democratic purposes. With the midterms still nine months away and with innovators like Team Mirai making products in the open for anyone to use, there is still plenty of time for an American politician to demonstrate what a new politics could look like.
This essay was written with Nathan E. Sanders, and originally appeared in Tech Policy Press.
Numbers and the human/computer interface [Seth's Blog]
If you tell me your ID number, your phone number or the wiring instructions for your bank account, not only will I forget them, I’ll need you to repeat it a few times so I write it down without making a transcription error.
When we first started using serial numbers (the Roman Legion did this thousands of years ago, and the British Board of Ordnance required it by law in the 1700s), it made perfect sense. Issue the next number on the list and move on.
But numbers alone are difficult for humans to error check and handle. So we use computers to help. The problem lies in the pesky humans who are still part of the chain.
So, here’s a simple hack. It’s unlikely to catch on worldwide, but I think it’s fascinating enough to consider…
If you had a list of 150 three letter words, all selected to be easy to say, spell and discern, you could use them to replace numbers in a productive and useful way.
So, big bob zap car cat is five words next to each other. There are 75 billion combinations of five words, which means that it replaces a number like 4839450381 with room to spare.
For ATMs that are four or five digits, you only need three words.
Think about that the next time you need to tell a customer service person your order number or serial number, or share a wifi password.
Let the computer do the work.
Let’s Get Tested by Hien Pham [Oh Joy Sex Toy]
Russ Allbery: Review: A Shadow in Summer [Planet Debian]
Review: A Shadow in Summer, by Daniel Abraham
| Series: | Long Price Quartet #1 |
| Publisher: | Tor |
| Copyright: | March 2006 |
| ISBN: | 0-7653-1340-5 |
| Format: | Hardcover |
| Pages: | 331 |
A Shadow in Summer is a high fantasy novel, the first of (as the name implies) a completed four-book series. Daniel Abraham is perhaps better known as half of the writing pair behind James S.A. Corey, author of the Expanse series. This was his first novel.
Otah was the sixth son of a Khai, sent like many of the unwanted later children of the powerful to learn the secrets of the andat and be trained as a poet. He learned his lessons well enough to reject the school and its teachings and walk away.
Amat Kyaan has worked her way up from nothing to become the senior overseer of the foreign Galtic House Wilsin in the sun-drenched port city of Saraykeht. Liat is her apprentice, distracted by young love. Maati is a new apprentice poet, having endured his training and sent to learn from Heshai how to eventually hold the andat Removing-The-Part-That-Continues, better known as Seedless. None of them know they will find themselves entangled in a plot to destroy the poet of Saraykeht and, through him, the city's most potent economic tool.
A poet in this world is not what we would think of a poet. They are, in essence, magical slave-drivers who capture the essence of an andat, a spirit embodying an idea that is coerced into the prison of volition and obedience by the poet. The andat Seedless, the embodiment of the concept of removing the spark of life, is central to the economic wealth of Saraykeht in a way that is startling in its simplicity: Seedless can remove the seeds from a warehouse full of cotton at a thought. This gives Saraykeht a massive productivity advantage in the cotton trade.
Seedless is also a powerful potential weapon. What he can do to cotton, he could as easily do to any other crop, or to people. The Galts are not fond of the independence and power of Saraykeht, but as long as the city controls a powerful andat, they do not dare to attack it directly. Indirectly, though... that's another matter.
This is one of those fantasy novels with meticulous and thoughtful world-building, careful and evocative prose, and a complex ensemble cast of interesting characters that the novel then attempts to make utterly miserable and complicit in their own misery. There should be a name for this style of writing. It's not tragedy because the ending is not tragic, precisely. It's not magic realism; the andats are openly magical, which makes this clearly high fantasy. But Abraham approaches the story from the type of realist frame that considers the pain and desperation of the characters to be more interesting than their ability to overcome challenges.
Amat starts the story as an admirable, sharp-witted expert manager, so her life is destroyed and she's subjected to sexual violence. Heshai loathes himself and veers between a tragic figure and a wastrel as the story systematically undermines opportunities for redemption. Maati is young and idealistic, so of course every character in the book sets out to crush his idealism under the weight of unforeseen consequences. There is a sad and depressing love triangle, because this is exactly the sort of book that has a sad and depressing love triangle. At the end of the novel, everyone who survives is older and wiser in the sense that some stories seem to think wisdom comes from the accumulation of trauma.
I find books like this so immensely frustrating because their merits are so clear. The world-building is careful and detailed in a way that includes economic systems, unlike so much fantasy. It is full of small, intriguing touches, such as the use of posture and gesture to communicate the emotional valence of one's words. Abraham understands the moral implications of poets and andats and the story tackles them head-on. The writing flows beautifully and gave me a strong sense of the city. I wanted to like this book for the obvious skill that went into it, and sometimes I even managed.
And yet, it's taken me three months to finish A Shadow in Summer because I simply do not want to spend this much time around miserable people. I would get through one or two chapters in a night and then wanted to read something happy or defiant or heroic, rather than watching slow-motion train wrecks intermixed with desperate attempts to navigate stifling layers of immoral systems. It's not that the story lacks a moral compass. The characters are sincerely trying to make the world a better place, with some success. It even delivers a happy ending of sorts. But so much of the journey was watching the lives of the characters fall apart.
I am completely unsurprised that some people loved this book. I'm still intrigued enough by the world-building that I'm half-tempted to try to read the sequel even after having to drag myself through this one. I had a similar reaction to Abraham's The Dragon's Path, though, so I think Abraham is just not for me. I may get back to the Expanse at some point, but having to drag myself through both of his solo novels I've tried, in two different series, probably indicates an incompatibility between author and reader. That's a shame, given the quality of the writing.
Followed by A Betrayal in Winter.
Content notes: Sexual and reproductive violence as significant plot elements.
Rating: 6 out of 10
The Circle Of Something Or Other [Penny Arcade]
There has been a strange uptick in interest, worship, and… pornography, I guess you would say, related to my compatriot Gabriel and I. Poker Night At The Inventory, made by our Telltale friends of long ago and resuscitated by the redolent Skunkape, has unearthed a very particular era of the Internet. Tumblr has been stoked and self-described "gay autists" are roasting in the hot heat. I've got great news, you Goddamn perverts. To the elders, we haven't gone anywhere. To the new initiate - those untouch'd by years or, indeed, taste - there are nearly thirty years of indiscretions for you to tilt and turn in your hand. It may be the most robust archive of its kind, because it encodes with it the feelings present at the time. And, yes. As you will learn: I talk like this all the time.

Stretchy friend...
A Bacon Taste Test: Because That’s What The Internet Is For [Whatever]
Today I was ordering a panini from the local sandwich
joint, when I saw behind the counter that they had
individually packaged slices of bacon. Though I have tried many a
cured meat throughout the years, including
dubious meat sticks, I have never seen
individually packaged, fully cooked, flavored bacon. Of course, I
knew I had to try every flavor they had available, especially since
they were only a buck a piece.
Check these bad boys out:

These bacons come to us from Riff’s Smokehouse, creator of hot sauces and bacon, apparently. Here we have four out of their five flavors, as the fifth flavor was not available to me.
Each piece is 110 calories, and has 5g of protein per slice. When selecting my pieces, I actually rifled through the shop’s selection a good bit to find some sizeable pieces, as slice sizes were not all that consistent, funny enough. There were some skinny mini pieces of bacon! So, if you find these in the wild, find yourself a thicc slice.
Thankfully, you can see through the back to the full picture of what you’re getting into:

Anyways, the package says to microwave them for 5 seconds, but I figured most people who are buying these “on-the-go” bacons will not have immediate access to a microwave, so I actually tasted each piece right out the package first, and then microwaved them and tried them all again. Science!
I started with the Sweet flavor. The bacon was sort of stiff, like a bit hard to chew through. It was a little sweet but not as sweet as I would’ve imagined the flavor “Sweet” to be. Definitely not overwhelming if you’re not the biggest fan of overly sweet meats. After microwaving it for five seconds, it didn’t seem all that warm, so I microwaved it for another five (ten total, for those counting along at home), and promptly burned my mouth on the literally sizzling piece of meat. So, don’t do ten seconds.
For the Sweet & Spicy flavor, it was actually a little bit tougher than the previous piece. Reminded me a lot more of something like a jerky. Jerky-esque, if you will. Initially, I didn’t think it was spicy at all. It just had sort of a more savory, smoky flavor, but after microwaving it it actually got more of a kick to it, leaving a touch of heat in the back of my throat.
For the Red Curry, I was sure this one would be spicier than the rest, but it was oddly sweet. The spices involved gave it a nice complexity that the regular “Sweet” didn’t have to it. This piece had a really good texture with lots of fattiness throughout (I like chewy, fattier bacon). After microwaving it, it crisped up just a little bit and tasted even better warm.
Finally, for the Raspberry Chipotle, I once again expected heat what with chipotle being in the name. No heat came, but it had an excellent raspberry flavor that wasn’t artificial tasting or too overwhelming. This piece had a nice, softer texture and was the thickest cut out of all the pieces I’d had. This was my favorite of the four.
If you go on Riff’s website, you can buy a variety pack of all five flavors, with three pieces of each, for a little less than $33. This comes out to about $2.15 a slice. If you commit to just one flavor, you get 12 pieces for $23 bucks, which comes out to $1.91 a slice. So, pick your poison! I’d go for the variety pack, because variety is the spice of life. If you get it and try the fifth flavor I didn’t get to, let me know how it is.
Are you a crispy bacon or chewy bacon person? Do you like maple syrup with your bacon? Let me know in the comments, and have a great day!
-AMS
Alzheimer's drug that occasionally kills patients [Richard Stallman's Political Notes]
A drug that is used to slow Alzheimer's disease occasionally kills patients. This article reports on an alleged conspiracy to get the drug wrongfully approved, and threats against someone who wrote about deaths that it caused.
of the medical system by Big Pharma is rife, and it does a lot of harm. Threats of violence against journalists are part of the evil of fascism.
But this drug raises an deeper question. Can a treatment for Alzheimer's disease be beneficial for patients, and thus morally deserve approval, despite killing a small fraction of the patients who take it?
Alzheimer's disease turns its victims slowly into zombies. Although the patient's body continues to live, the person who became a zombie is dead. This begs the question, if a certain drug gives a large fraction of patients several more years of non-zombie life, but kills a small fraction of them, does that make it a failure? If on the average it extends patients' non-zombie life, does that make it a bet worth making, one that drug regulations should allow people to make?
This question is important to me personally because I can envision being in that situation in a few years.
Fabrication by undercover infiltrator cop [Richard Stallman's Political Notes]
One of Britain's undercover infiltrator cops seems to have fabricated an accusation that an animal rights activist wanted to get a gun and attack someone with it. Fortunately, his handlers distrusted the accusation.
I speculate that a cop whose job includes lying as part of false friendship will tend to normalize lying to anyone else.
Falsely identified by facial recognition system [Richard Stallman's Political Notes]
A facial recognition system falsely identified a suspect as Angela Lipps, and she was jailed for 6 months; then, when she was brought to a courtroom in another state, the court noticed that the criminal could not be her. Meanwhile, she had lost her home and her car.
False identifications will always occur. Although this one used digital face matching, recognition by human witnesses makes mistakes too. But I think that the main mistake here was to wait 6 months before noticing her alibi and without granting her bail.
Charges dropped against soldiers accused of raping prisoner [Richard Stallman's Political Notes]
The Israeli army has dropped charges against soldiers accused of raping a Palestinian prisoner.
The grounds given for dropping the charges are that (1) the prisoner had been released to Gaza and (2) *the conduct of senior officials had affected the chance of holding a fair trial.* To me, this says that (1) they are exaggerating to create an excuse and (2) high officials created an excuse and have suffered no punishment for it.
Bayer's CEO met with US regulators [Richard Stallman's Political Notes]
*Top US regulators met with Bill Anderson, Bayer's CEO, last year to discuss "litigation" issues – including "supreme court action" over its glyphosate weed killer – just months before henchmen administration took a series of steps to boost Bayer's case at the high court, internal government records show.*
This sounds like a betrayal of the US — analogous to treason except that it occurred in a civil dispute rather than in a war.
Cops use license plate cameras to help deportation thugs [Richard Stallman's Political Notes]
Local cops of some US towns regularly search license plate cameras to help the deportation thugs to track immigrants.
More about this.
Israel blockade traps U.S. doctors [Richard Stallman's Political Notes]
*Israel's Deadly Blockade Traps 7 U.S. Doctors in Gaza.*
Deportation thugs testified in court [Richard Stallman's Political Notes]
In a class-action lawsuit against the deportation thugs, some of them testified about their arrest quotas, and the digital tools whose vague output often leads them to arrest people who are present in the US lawfully.
Violent practices, such as breaking car windows with only a hint of an excuse, seem to be systematic. They figure they will nearly always get away with it, and for typical victims (whether unauthorized immigrants or authorized immigrants or citizens), the expense of repair will create hardship. Releasing a person hundreds of miles away from home can make it very difficult to get home.
The officials in charge of deportation agencies have the duty to stop these practices, but it is clear that they are not really trying.
Magat policies set to increase lung disease [Richard Stallman's Political Notes]
*[Various different magat] policies set to increase rates of lung disease and death, study finds.*
Limits on no-knock warrants being cancelled by magats [Richard Stallman's Political Notes]
Breonna Taylor was shot dead by a thugs who had burst into her home without warning, and then fired wildly. Americans demanded and got policies to limit no-knock warrants. But now magats are canceling the limits.
Why do this? I don't think it will make any legitimate activities of cops significantly more effective.
I speculate that magats expect that killing people that they can demonize (for instance, blacks) will win them increased support from their base.
Lies about abandoning renewables [Richard Stallman's Political Notes]
George Monbiot: *Rightwing politicians, Tufton Street junktanks and the billionaire press tell us our energy security will be enhanced and our bills will fall if we abandon net zero policies, ditch renewables and reinvest in North Sea gas. These claims are not just a little bit wrong. They are the exact opposite of the truth.*
Wearing all black at protests [Richard Stallman's Political Notes]
*Wearing All Black at Protests Makes You Guilty of Terrorism, Prosecutors Tell Jury.*
More precisely, they claimed that wearing all black is a sign of support for the nonexistent US organization, "Antifa".
Spycops inquiry found undercover thugs snooping [Richard Stallman's Political Notes]
The Spycops inquiry in the UK found that undercover London thugs snooped on the relatives of Jean Charles de Menezes, because they had denounced thugs' murder of him.
It is impossible not to suspect that they did this because they wanted to prevent his relatives from making the thug department look bad by teaching people about the killing by exposing its cover-up.
Threats to shut down broadcasters [Richard Stallman's Political Notes]
A henchman threatens to shut down broadcasters for saying things that the bullshitter chooses to call "hoaxes".
This is a threat of arbitrary censorship, and I'm sure the TV news broadcasters understand it as such. Many have already bent the knee to the bullshitter; they have nothing to worry about. But the rest will now face another kind of threat.
Age-checking in Australia pushing adults away from sites [Richard Stallman's Political Notes]
Age-checking in Australia is pushing adult internauts away from the sites that are banned for minors, because they fear the tracking that is a side effect of the age-checking systems.
Bullshit generators encouraging delusions in patients [Richard Stallman's Political Notes]
A study observed bullshit generators encouraging delusions in some patients.
US and Israel lying, according to University of Tehran student [Richard Stallman's Political Notes]
*"They [the US and Israel] are also lying! Like the regime has been lying to us," said Amir, a student at the University of Tehran. "You are all worse than each other."*
It appears to Iranians that Israel and the US are attacking infrastructure rather that the regime's SS-equivalent, trying to weaken Iran for the long term rather than free Iran.
It doesn't surprise me that they were only trying to use the Iranians who have opposed the Iranian tyranny. Neither Netanyahu nor the bullshitter cares about human rights, democracy, or well being, not those of ordinary people in any country, and neither one hesitates to lie.
Even so, with even a lick of sense they would have tried carefully to protect those Iranians and keep them on side. It would not have cost much.
Ultrawealthy put the wrecker in power [Richard Stallman's Political Notes]
Paul Krugman: *The ultrawealthy put [the wrecker] in power but other people will pay the price.*
Seventeen Impeachable offenses by Trump and counting [Richard Stallman's Political Notes]
Ralph Nader: Seventeen Impeachable Offenses by Trump and Counting. He urges Americans to send this list to their congresscritters and senators.
ChatGPT eroding critical thinking skills [Richard Stallman's Political Notes]
*ChatGPT May Be Eroding Critical Thinking Skills, According to a New MIT Study.*
Any kind of skill fades if a person stops practicing it.
Video demo: Using categories in FeedLand for dynamic OPML lists.
Happy to report there are FeedLand users who want to edit OPML lists there so they can subscribe to them in another feed reader that has support for dynamic OPML lists. I am happy because this is a very cool feature that will be so much more fun if other people use it. If you want to set it up so you have a list on feedland.com that you want to subscribe to in another reader, instead of subscribing to all your feeds, like this -- create a category for each list you want to hook up to another reader. It will be much easier to manage down the road. Categories in FeedLand are very simple, but if you use them carefully, they really help. Here's a screen shot of my Cats menu to give you an idea. I really use FeedLand in the most powerful ways, but it'll really click when others do the same. We might be there now.
AI revolution effects books, UK [Richard Stallman's Political Notes]
*UK Society of Authors launches logo to identify books written by humans.*
I support this specific campaign, because it is a campaign for honesty and against worthless Pretend Intelligence. It may help people reject PI slop.
However, I continue to reject the selfishness of most of the same authors, when they demand the power to stop human readers from honestly and truthfully sharing copies of human-authored books with other humans.
There's a problem with one of my Digital Ocean servers
today, it turns out it's a problem with Caddy, not sure why -- but it
doesn't seem to be on the computer any longer. I can figure out how
to re-install it, but it always is a bit tricky, and I wish I
didn't have to do it. In diagnosing the problem I used Claude, it
asked all kinds of questions, gave me commands to run, and I
dutifully reported back the results like a good servant. It's so
funny to be a tool for the cyborg. Then it hit me, why don't they
offer servers with built-in maintenance by Claude. I would type
commands at like "install the following apps on this new server I
want to commission, and check into it every so often and if it's
running out of some resource, get in touch with me and let me know
how much more it'll cost, and I'll just use it and you can keep it
running." I think it's a really nice application for AI.
Marco d'Itri: systemd has not implemented age verification [Planet Debian]

This needs to be clear: systemd is under attack by a trolling campaign orchestrated by fascist elements. Nobody is forced to like or use systemd, but anybody who wants to pick a side should know the facts.
Recently, the free software Nazi bar crowd styling themselves as "concerned citizens" has tried to start a moral panic by saying that systemd is implementing age verification checks or that somehow it will require providing personally identifiable information.
This is a lie: the facts are simply that the systemd users database has gained an optional "date of birth" field, which the desktop environments may use or not as they deem appropriate. Of course there is no "identity verification" or requirements to provide any data, which in any case would not be shared beyond authorized local applications.
While the multiple recent bills proposing that general purpose operating systems implement age verification mechanisms are often concerning, both from a social and technical point of view, this is not the topic being discussed here. They are often suboptimal, but for a long time I have been opposing attempts to implement parental control at the network level and argued that it should be managed locally, by parents on their own machines: I cannot see why I should outright reject an attempt to implement the infrastructure to do that.
If we want to keep age-appropriate controls out of the hands of centralized authorities, the alternative is giving families the means to manage it themselves: this is what this field enables. Whether desktop environments use it for parental controls, for birthday reminders, or for nothing at all, is their users' decision.
By the way, the original UNIX users database has allowed storing PII in the GECOS field since it was invented in the '70s. Similar fields are also specified by many popular LDAP schemes: adding such an optional field is consistent with the UNIX tradition.
And while we are at it, let's also refute the other smear campaign started by the same people: the systemd project is not accepting "AI slop". What happened is that a documentation file for the benefit of coding agents was added to the repository. To be clear: agents still cannot submit merge requests. The file itself remarks that all contributions must be reviewed in detail by humans, and this is basically the same policy used by the Linux kernel.
Stranger Suggests: Femme Power, Funk Goodness, and International Cuisine in Rainier Valley [The Stranger]
Sasha taqʷšəblu LaPointe with Katie Campbell
Sasha taqʷšəblu LaPointe will discuss
her 2024 essay collection Thunder Song at Central
Library on Monday, March 23.
(BOOKS) Author, poet, and artist Sasha taqʷšəblu LaPointe, who is from the Upper Skagit and Nooksack Indian Tribe, weaves together her heritage and themes of trauma, ancestry, and colonialism with her unique personal interests, ranging from punk music to Twin Peaks. Her acclaimed 2022 memoir Red Paint: The Ancestral Autobiography of a Coast Salish Punk received the 2023 Pacific Northwest Book Award. I flew through both her dreamy, haunting 2023 poetry collection Rose Quartz and her incisive 2024 essay collection Thunder Song. My favorite parts of the latter included LaPointe's journey toward embracing the salmon of her culture as a vegan punk and her description of the Skagit Valley Tulip Festival as a "petal-made flag of settler colonial triumph," both things that have lodged in my mind permanently. LaPointe will discuss Thunder Song with KUOW’s Katie Campbell at the Seattle Central Library. (Central Library, 6:30–8 pm, free with RSVP) JULIANNE BELL
TUESDAY 3/24
(THEATER) Mary Jane is by no means a new play. Amy Herzog wrote and premiered it at the Yale Repertory Theatre in 2017; that same year, Carrie Coon (who you at least know from the most recent season of White Lotus or The Gilded Age or Fargo) won an Obie for playing the title character at the New York Theatre Workshop; then in 2024, Rachel McAdams made her Broadway debut as that same lead. And based on the critical reaction to every staging so far, I’m certain of one thing: This compact, 95-minute play is guaranteed to break your heart. Herzog’s story is semi-autobiographical, about the impossible reality of parenting a chronically ill 2-year-old who wasn’t expected to live past his first week. But don’t mistake it for a tragic Lifetime movie. Instead, it captures what it is to be suspended, frozen in a state of crisis, but the play still promises humor, clarity, and humanity. Whether you’ve seen it staged already or not, catch it this time. (Bagley Wright Theater, times vary) HANNAH MURPHY WINTER
WEDNESDAY 3/25(FOOD) The US doesn’t exist in a vacuum. That’s especially true when it comes to our food, because beyond burgers and barbecue, so many of the flavors we enjoy come from cultures across the globe. Plate of Nations is a celebration of exactly that. This three-week, neighborhood-wide dining event spotlights the immigrant-owned restaurants that define the Rainier Valley’s food scene. More than 50 independently owned spots along Martin Luther King Jr. Way roll out special menus and deals, offering everything from Vietnamese and Mexican to East African cuisine and beyond. It’s a perfect excuse to try something new while supporting local businesses in one go. (Various locations) LANGSTON THOMAS
THURSDAY 3/26Champagne Bubblebath, Midpak, DJ Moohah
(MUSIC) The newish Champagne Bubblebath feature the cream of Seattle’s robust funk scene: four members of Afrobeat-inflected funkateers Polyrhythmics, plus Hendrixian guitar virtuoso Jimmy James of True Loves and Parlor Greens. Bandleader Grant Schroff is the Ziggy Modeliste of the Pacific Northwest—a drummer whose impeccable feel and powerful, precise funkiness have moved more asses over the last decade than Sound Transit. This show celebrates the release of Champagne Bubblebath’s debut album, Mixtape: Volume One. The band says it was “[o]riginally conceived as a throwback beat-tape of minimalist garage-funk grooves,” and the 10 songs here reflect deep immersion in history’s most effective, subtlest groove science and the world-class chops to infuse soul into every bar. The band’s slinky, head-nodding instrumentals are ripe for another generation of hip-hop producers to sample. Clearly, these old-school funk disciples still have many vital sonic lessons to impart. (Hidden Hall, 8 pm, 21+) DAVE SEGAL
FRIDAY 3/27Amy O’Neal: Again, There Is No Other (The Remix)
Amy O'Neal's performance Again, There Is No Other
(The Remix) is a “ritual of femme power and
connection." ERIN O'REILLY
(PERFORMANCE) Amy O’Neal is back home again. After spending two decades dancing and curating in Seattle, she took a few years off in LA, but she’s settled back into the Pacific Northwest, and at On the Boards. When O’Neal was a finalist for a Stranger Genius Award back in 2013, Jen Graves and Brendan Kiley wrote that “delicate, wide-eyed girls with mouths that never open are about the only thing you will never find in Amy O’Neal’s dances.” And it’s a solid bet that you won’t find them in her newest play, either. She describes her return to On the Boards as a “ritual of femme power and connection” that “interrogates fear for the Feminine in patriarchal culture.” The piece combines the energy of nightclub and theater through five femme dancers, and includes original music from WD4D, Shabazz Palaces, Natasha Kmeto, and Moderat. (On the Boards, 8 pm) HANNAH MURPHY WINTER
SATURDAY 3/28
Don't miss the Indonesian indie pop trio Grrrl Gang
at Clock-Out Lounge on Saturday, March 28. TINY STUDIO
(MUSIC) Indie-pop group Grrrl Gang’s members—vocalist/guitarist Angeeta Sentana, bassist/vocalist Akbar Rumandung, and guitarist/vocalist Edo Alventa—met at college in Yogyakarta, Indonesia, in 2016 and decided to form a band. Their blend of pop hooks and irrepressible punk spirit garnered international attention and praise from the likes of legendary critic Robert Christgau. In 2023, they released their debut studio album, Spunky!, which fully embraces their riot-grrrl influences and which NME called “an instant ticket to the sort of basement show where sweat rolls down the walls.” If you’re into bands like Potty Mouth and the Linda Lindas, you won’t want to pass up the chance to catch their gritty, infectious energy at the Clock-Out. (Clock-Out Lounge, 9 pm, 21+) JULIANNE BELL
SUNDAY 3/29Beyond Mysticism: The Modern Northwest
View works like Drift No. 2 by "Seattle
Surrealist" Malcolm M. Roberts at SAM's 'Beyond Mysticism' exhibit.
SCOTT LEEN
(VISUAL ART) Featuring over 150 works, the SAM’s newest exhibit chronicles a rapidly changing 20th-century Seattle as told by artists who questioned the environmental and social impacts of industrialization through the visual language of social realism, surrealism, and abstract expressionism. Among these artists were the Northwest School’s Mark Tobey, Kenneth Callahan, Guy Anderson, and Morris Graves. I am most excited to see works from the unsung painter and Seattle-via-New York City transplant Yvonne Twining Humber, known for incorporating touches of Impressionism into her vibrant cityscapes. (Seattle Art Museum, 10 am–5 pm) AUDREY VANN
Slog AM: ICE Deploys to Some Airports, Deadly Plane Crash at LaGuardia Airport, Trump Celebrates Negotiations with Iran that Iran Says Never Happened [The Stranger]
The Stranger's morning news roundup. by Nathalie Graham
ICE in the Airport: You know what a stressful travel day was missing? The threat of deportation by a bunch of goons. Due to the partial government shutdown that stopped funding for the Department of Homeland Security (DHS) in mid-February, TSA agents haven't been getting paid. They've been calling out of work. On Saturday, a third of TSA agents at our busiest airports didn't show up. Security wait times increased. As a means to put pressure on Democrats to fund DHS, Donald Trump said he'll deploy Immigration and Customs Enforcement officers to assist TSA operations. They were at Hartsfield-Jackson Atlanta International Airport and Newark Liberty International Airport on Monday. Trump said ICE thugs would “do security like no one has ever seen before." That includes “the immediate arrest of all illegal immigrants who have come into our Country.”
DHS or Voting Rights: On Sunday, Trump said he wouldn't back a deal to fund DHS unless the Democrats vote for his SAVE America Act, the strict "federal elections overhaul bill" that would require voters to show ID and proof of citizenship to vote. The law would also make registering to vote harder by requiring people to go in-person to elections offices to prove their citizenship. Right now, you can register online or via mail. You don't have to be a genius to realize that making voting harder is the point.
You Simply Have Gotta Hate These Guys:
ICE agents have arrived at airports to assist with staff shortages, a day after President Trump threatened he would do so unless congressional Democrats agreed to a GOP-backed funding deal to end a partial government shutdown. https://wapo.st/47Nq2PI
— The Washington Post (@washingtonpost.com) March 23, 2026 at 6:30 AM
[image or embed]
One More:
this is your mission. our pedophile president needs you to put on a tactical vest and go to the newark airport at 6 am on monday. your order is to wander around like a confused oaf. when a mom drops her sandwich at jersey mike's and scares you, pull out your gun and start shooting. good luck soldier
— leon (@leyawn.bsky.social) March 23, 2026 at 7:26 AM
ICE at Sea-Tac? According to the Port of Seattle, there hasn't been any sign that ICE will be coming to help out our local TSA agents. Sea-Tac Airport hasn't seen abnormal wait times since the partial shutdown, according to The Seattle Times.
Plane Hits Firetruck, Pilot and Co-Pilot Die: An Air Canada regional jet crashed into a firetruck on the runway at New York’s LaGuardia Airport. The firetruck was responding to a call from a different flight. The crash mangled the front of the plane, killing the pilot and co-pilot. No other casualties were reported. Forty-one passengers and crew members aboard the flight received treatment at local hospitals. Some had serious injuries.
My husband was on this flight this evening. His plane crashed. He’s ok. He helped others get off the plane. #AirCanada
— Sarah Dorner (@sarahdorner.bsky.social) March 22, 2026 at 8:53 PM
[image or embed]
Happy National Puppy Day: If you're into this sort of thing, you can watch puppies on this livestream from Canine Companions starting March 23 through March 27.
It's No Longer Mueller Time: Because he's dead. Rober Mueller, the ex-FBI director who investigated claims that Russia interfered with the 2016 election, kicked the bucket on Friday. He was 81. Trump, a man of few morals, posted on Truth Social: "Good, I'm glad he's dead. He can no longer hurt innocent people!"
In Sonics News: Gov. Bob Ferguson is meeting for a little chat with NBA Commissioner Adam Silver again today. The NBA's board of governors is supposed to vote this week on starting the league’s expansion process. Seattle and Las Vegas are the two options on the table. Ferguson says he was a diehard Sonics fan, so he'll do whatever he can to prove Seattle should be the one to get a team. That may be true, but being in charge when the Sonics eventually return is also political gold.
Fentanyl Overdoses Stay Down: In Washington, fatal fentanyl overdoses are still in decline. Don’t get it twisted, people are still dying—King County saw two opioid deaths a week last month—but the numbers are lower than average. Last year, nationwide fentanyl overdoses declined by 20 percent. Part of the reduction could be the widespread availability of anti-overdose meds like naloxone, or that because so many people have died the pool of fentanyl users is smaller, or that the current mix of drugs is less potent. Nobody is totally sure. Providers in Washington believe innovative public health programs are helping. But, federal limitations on Medicaid benefits and funding cuts for programs like one that provides clean syringes are threatening the clinics’ long-term viability.
The Weather: Gray and 50 degrees.
Anti-Woke Mad-Libs: Trump installed a statue of Christopher Columbus on the White House grounds outside the Eisenhower Executive Office Building. The statue is a replica of one that Baltimore protestors tore down in 2020, a move meant to denounce Columbus’ personal history as a slave-trading colonialist. A Trump spokesperson said, “In this White House, Christopher Columbus is a hero, and President Trump will ensure he’s honored as such for generations to come." It's all real-life rage bait.
A Five-Day Pause: Trump extended his deadline for Iran to reopen the Strait of Hormuz. He says the US will stop striking Iran’s power plants energy infrastructure for five days. Global markets liked this news. The US stock market climbed 1.4 percent. Oil prices dropped. Trump also hinted at the end of the war, saying the US and Iran have had “very good and productive conversations.” Iran officials say they never talked with Trump about any of this.
Trump: "We're doing a five day period. We'll see how that goes. If it goes well, we're gonna end up with settling this, otherwise we just keep bombing our little hearts out."
— Aaron Rupar (@atrupar.com) March 23, 2026 at 6:46 AM
[image or embed]
A World Cup Bust? The World Cup will be in the US in less than three months. The event comes with the promise of riches—a big boost in tourism and economic activity in host cities. Except, things seem pretty quiet so far. In New York City, where FIFA has estimated a boon of tourism could bring in $3 billion, hotel bookings are down. According to The City, "advanced reservations for New York’s World Cup weeks are trending 2% below advance bookings for those same days in 2025"—a time when there were no special events. Perhaps the world's soccer fans have also been reading the news about how things here are not so great.
A long read for your Monday: Remember when a flood wiped out Texas' Camp Mystic, killing 27 campers and staff? This Intelligencer article about the flood really packs a wallop.
‘CanisterWorm’ Springs Wiper Attack Targeting Iran [Krebs on Security]
A financially motivated data theft and extortion group is attempting to inject itself into the Iran war, unleashing a worm that spreads through poorly secured cloud services and wipes data on infected systems that use Iran’s time zone or have Farsi set as the default language.
Experts say the wiper campaign against Iran materialized this past weekend and came from a relatively new cybercrime group known as TeamPCP. In December 2025, the group began compromising corporate cloud environments using a self-propagating worm that went after exposed Docker APIs, Kubernetes clusters, Redis servers, and the React2Shell vulnerability. TeamPCP then attempted to move laterally through victim networks, siphoning authentication credentials and extorting victims over Telegram.
A snippet of the malicious CanisterWorm that seeks out and destroys data on systems that match Iran’s timezone or have Farsi as the default language. Image: Aikido.dev.
In a profile of TeamPCP published in January, the security firm Flare said the group weaponizes exposed control planes rather than exploiting endpoints, predominantly targeting cloud infrastructure over end-user devices, with Azure (61%) and AWS (36%) accounting for 97% of compromised servers.
“TeamPCP’s strength does not come from novel exploits or original malware, but from the large-scale automation and integration of well-known attack techniques,” Flare’s Assaf Morag wrote. “The group industrializes existing vulnerabilities, misconfigurations, and recycled tooling into a cloud-native exploitation platform that turns exposed infrastructure into a self-propagating criminal ecosystem.”
On March 19, TeamPCP executed a supply chain attack against the vulnerability scanner Trivy from Aqua Security, injecting credential-stealing malware into official releases on GitHub actions. Aqua Security said it has since removed the harmful files, but the security firm Wiz notes the attackers were able to publish malicious versions that snarfed SSH keys, cloud credentials, Kubernetes tokens and cryptocurrency wallets from users.
Over the weekend, the same technical infrastructure TeamPCP used in the Trivy attack was leveraged to deploy a new malicious payload which executes a wiper attack if the user’s timezone and locale are determined to correspond to Iran, said Charlie Eriksen, a security researcher at Aikido. In a blog post published on Sunday, Eriksen said if the wiper component detects that the victim is in Iran and has access to a Kubernetes cluster, it will destroy data on every node in that cluster.
“If it doesn’t it will just wipe the local machine,” Eriksen told KrebsOnSecurity.
Image: Aikido.dev.
Aikido refers to TeamPCP’s infrastructure as “CanisterWorm” because the group orchestrates their campaigns using an Internet Computer Protocol (ICP) canister — a system of tamperproof, blockchain-based “smart contracts” that combine both code and data. ICP canisters can serve Web content directly to visitors, and their distributed architecture makes them resistant to takedown attempts. These canisters will remain reachable so long as their operators continue to pay virtual currency fees to keep them online.
Eriksen said the people behind TeamPCP are bragging about their exploits in a group on Telegram and claim to have used the worm to steal vast amounts of sensitive data from major companies, including a large multinational pharmaceutical firm.
“When they compromised Aqua a second time, they took a lot of GitHub accounts and started spamming these with junk messages,” Eriksen said. “It was almost like they were just showing off how much access they had. Clearly, they have an entire stash of these credentials, and what we’ve seen so far is probably a small sample of what they have.”
Security experts say the spammed GitHub messages could be a way for TeamPCP to ensure that any code packages tainted with their malware will remain prominent in GitHub searches. In a newsletter published today titled GitHub is Starting to Have a Real Malware Problem, Risky Business reporter Catalin Cimpanu writes that attackers often are seen pushing meaningless commits to their repos or using online services that sell GitHub stars and “likes” to keep malicious packages at the top of the GitHub search page.
This weekend’s outbreak is the second major supply chain attack involving Trivy in as many months. At the end of February, Trivy was hit as part of an automated threat called HackerBot-Claw, which mass exploited misconfigured workflows in GitHub Actions to steal authentication tokens.
Eriksen said it appears TeamPCP used access gained in the first attack on Aqua Security to perpetrate this weekend’s mischief. But he said there is no reliable way to tell whether TeamPCP’s wiper actually succeeded in trashing any data from victim systems, and that the malicious payload was only active for a short time over the weekend.
“They’ve been taking [the malicious code] up and down, rapidly changing it adding new features,” Eriksen said, noting that when the malicious canister wasn’t serving up malware downloads it was pointing visitors to a Rick Roll video on YouTube.
“It’s a little all over the place, and there’s a chance this whole Iran thing is just their way of getting attention,” Eriksen said. “I feel like these people are really playing this Chaotic Evil role here.”
Cimpanu observed that supply chain attacks have increased in frequency of late as threat actors begin to grasp just how efficient they can be, and his post documents an alarming number of these incidents since 2024.
“While security firms appear to be doing a good job spotting this, we’re also gonna need GitHub’s security team to step up,” Cimpanu wrote. “Unfortunately, on a platform designed to copy (fork) a project and create new versions of it (clones), spotting malicious additions to clones of legitimate repos might be quite the engineering problem to fix.”
Update, 2:40 p.m. ET: Wiz is reporting that TeamPCP also pushed credential stealing malware to the KICS vulnerability scanner from Checkmarx, and that the scanner’s GitHub Action was compromised between 12:58 and 16:50 UTC today (March 23rd).
[$] Tracking when BPF programs may sleep [LWN.net]
BPF programs can run in both sleepable and non-sleepable (atomic) contexts. Currently, sleepable BPF programs are not allowed to enter an atomic context. Puranjay Mohan has a new patch set that changes that. The patch set would let BPF programs called in sleepable contexts temporarily acquire locks that cause the programs to transition to an atomic context. BPF maintainer Alexei Starovoitov objected to parts of the implementation, however, so acceptance of the patch depends on whether Mohan is willing and able to straighten it out.
The Missing Mechanisms of the Agentic Economy [Radar]
For the past two years, I’ve been working with economist Ilan Strauss at the AI Disclosures Project. We started out by asking what regulators would need to know to ensure the safety of AI products that touch hundreds of millions of people. We are now exploring the missing mechanisms that are needed to enable the agentic economy.
This essay traces our path from disclosures through protocols to markets and mechanism design. Rather than simply stating our conclusions, I’m sharing our thought process and some of the conversations and historical examples that have shaped it.
We will be holding a number of focused convenings to explore these ideas over the next couple of months, and my hope is that shared context will enable more productive engagement with what is very much a work in progress.
Ilan Strauss and I started the AI Disclosures Project in early 2024 with a conviction that most regulators had little idea how AI worked or where it was going. The field was so young that many of the early regulatory proposals were misguided. We thought that regulators and industry should start by agreeing on standards for disclosure, so that we could all learn together as the technology develops. You can’t regulate what you don’t understand.
One of our first insights was that focusing solely on model safety was a mistake, much as if regulators inspected automobiles at the factory but completely ignored their use on the roads. We believed (and still do) that the focus should be on AI as deployed. And we believe that disclosures shouldn’t focus just on capabilities but on business models and the operating metrics that AI companies use to shape how their products operate.
Ilan and I had worked together previously with Mariana Mazzucato at University College London on what we called “algorithmic attention rents,” studying how platforms like Amazon and Google control user attention to extract economic rents from their suppliers. We observed that organic search at Google and Amazon was a huge advance in market coordination, using hundreds of signals to find the best match for a user’s intent. In effect, both companies had built a better “invisible hand.” And yet after decades of success, they turned away from that advance. To use Cory Doctorow’s coinage, they began “enshittifying” their services by substituting inferior paid results for the top organic search results in order to pad their bottom line.
We’d also watched social media start out with the promise of keeping you in touch with your friends and foster productive conversations, but then instead began to optimize for engagement at the expense of everything else. By the time anyone understood what was happening, the damage had been done. We can see the inflection point in their financial metrics, but neither regulators nor the public can see the changes in operating metrics that drove the financials. What if we could capture what good looks like before it gets enshittified, and identify how that changes over time?
We also observed that modern technology companies are completely different from industrial era corporations, where you can understand key elements of the business by tracing the inputs and the outputs through the financial statements. Instead, the business is largely driven by intangibles, which are lumped into one impenetrable black box.
We wanted to learn from that mistake. While the horse was already out of the barn on search and social media, we hoped to get disclosure of operating metrics into AI governance while there was still an appetite for regulation. Unfortunately, that window was very short. The failure turned out to be productive, though, because it forced us to think harder about regulation more broadly and what other leverage points might be found.
The first turn in our thinking came when we realized that disclosures aren’t just informational. The most important disclosures are functional. We came to see the parallels between disclosures and communications protocols, the agreed-on methods by which networked systems share information. For example, the HTTP protocol that underlies the World Wide Web specifies how a web browser and web server communicate in order to display a web page.
This is a structured communication with rules that must be followed and data that must be exchanged in a particular order. An HTTP request that identifies the user agent as a command line program such as curl rather than a graphical browser such as Chrome triggers a different response from the server. The user-agent string isn’t a report filed with a regulator. It’s an operational signal embedded in the protocol, and it carries a lot of information.
Once you see protocols as a system of functional disclosures, you start noticing that every regulatory system has a kind of communications and control protocol at its heart. Generally Accepted Accounting Principles (GAAP) or IFRS, the European equivalent, are protocols for communication between companies and their accountants, auditors, banks, investors, and tax authorities. Even road markings and road signs are a communications protocol, giving information to drivers about local conditions, laws, and the proper use of the road. These are slow, analog protocols, but they are protocols nonetheless.
Protocols can be inspected. Observability is the key to governance. Police observe speeders on the road; credit card processors and banks watch for credit card fraud on their payment networks; email processors filter spam as it passes through nodes on the network. The observability points for AI are still emerging, but that’s where regulators should be focused.
Even beyond being a locus for observability and regulability, protocols themselves do an enormous amount of the governing work in modern technology systems. Spanning everything from how packets get from one place to another to what gets displayed, who has permission to see it, and sometimes even what it costs, they ultimately determine who can interoperate with whom. That led us to an even bigger realization.
Think about the early shape of the AI chatbot market. It was a winner-takes-all race to be the dominant platform for AI in the way Windows became the platform for PCs, or iOS and Android for phones. Whoever wins controls the market. Then Anthropic introduced MCP, the Model Context Protocol. All of a sudden, the landscape looked more like a web. There could be many winners. It didn’t matter what model you were running or whose APIs you were calling as long as you followed the protocol. And as the agentic AI market unfolded, the protocol wasn’t just MCP. An AI agent could be a user of the existing internet protocol stacks. Whether MCP itself survives or is superseded by other protocols, the shape of the market was transformed.
This insight reframed our whole project. Protocols are not just technical infrastructure. They are market-shaping mechanisms.
I talked last week with some of the folks working on the Long Now Foundation’s partnership with Ethereum’s Summer of Protocols project, and that widened my lens even further.
When software people hear “protocol,” we think of communication protocols: TCP/IP, HTTP, MCP, or, say, Stripe’s Machine Payment Protocol (MPP).
To the Long Now folks, a protocol is any standardized way of doing something. Wildfire management teams follow protocols. So do flood response teams, hospital emergency rooms, and air traffic controllers. Atul Gawande’s book The Checklist Manifesto was an attempt to establish a common protocol for surgical operating theaters. This is a very different definition of protocol, and yet putting the two meanings of the word into the same frame makes a new kind of sense.
In his introduction to the Summer of Protocols’ Protocol Reader, Venkatesh Rao cited Ethereum researcher Danny Ryan’s definition of a protocol as a “stratum of codified behavior” enabling coordination. He pointed out that protocols tend to become invisible once adopted. Rao calls this a “Whitehead advance,” after the philosopher Alfred North Whitehead’s observation that civilization advances by extending what we can do without thinking.
But he also made the thought-provoking point that a protocol is an “engineered argument,” in contrast with an API, which he says is an “engineered agreement” enforced by one dominant actor. There’s more to it than just the power asymmetry of enforced agreement, though. In a followup conversation, Venkatesh Rao noted that protocols are “not just codified modes of information exchange, but modes of live, structured, argumentation, often with an active computational element. For example, CSMA/CD (Ethernet) must detect packet collisions and compute and execute a random delay for retransmittal of packets. This is not mere structured communication. This is argumentation with what philosophers call dynamic semantics.”
Rao continued: “The moment you go beyond computing protocols, real-world feedback loops from material consequences become really important. For example, container-shipping is quite close architecturally to TCP/IP (the big difference being that packets can be dropped and retransmitted while lost containers are actually lost), but because it has a materially embodied feedback loop, regulatory mechanisms start to behave more like control systems than communication systems.”
I love the idea of protocols as an engineered argument. The dynamism this suggests is going to be ever more true in a future of agentic protocols. But this notion also triggered another thought, which is that markets are also engineered arguments. My bridge to this reformulation was the difference between de jure protocols that arise from a formal standards process, and de facto protocols that arise through market contention.
In the early days of the internet, the Internet Engineering Task Force (IETF) was all about engineered arguments. People had ideas about how the internet ought to work, and to prove their point they had to show up with interoperable implementations. No one had the ability to enforce anything. Agreement had to evolve. As Dave Clark famously put it, “We reject: kings, presidents, and voting. We believe in: rough consensus and running code.” The de facto protocols of the internet that emerged from the IETF ended up significantly outperforming the competing de jure networking protocols that emerged from telecommunications standards bodies. The IETF framed the argument; whoever showed up made their case and won or lost by way of adoption.
It also made me remember another decades old story that I had lived through. Microsoft and Netscape were duking it out in the web server market and were building their own “engineered agreements” for what was up the stack from the base web server functionality. Everyone thought that Apache wasn’t keeping up, but they had a trump card. They provided an extension layer. And that engineered all kinds of productive arguments between a market of competing developers rather than a single engineered agreement imposed by either a dominant player OR a dominant committee.
Rao also noted that protocols spread slowly but become nearly impossible to dislodge once established. For example, SMTP (the protocol for email) dates back to 1982, and has outlasted many competitors. There is a lot of path dependence. And so getting the first steps right is an important part of engineering the argument.
And in his essay “Standards Make the World” for the Summer of Protocols project, David Lang makes the point that technical standards form a third pillar of modern society, alongside private organizations and public institutions. They aren’t the state and they aren’t the market, but they’re essential to both. When they work well, standards become enabling technologies. The internet. The shipping container. Standard time. They are civilizational infrastructure.
In short, we are not just building communication protocols for software agents. We are developing a new way to standardize the best practices and workflows that will shape the human + AI future, allowing humans and agents to cooperate across organizations, industries, and borders.
Once the Long Now team planted in my mind the connection between workflows and protocols, it occurred to me that Agent Skills are also a “stratum of codified behavior,” and perhaps even a set of competing “engineered arguments” for how to do work with AI.
At the simplest level, a Skill is a piece of structured knowledge: here’s how to create a Word document; here’s how to extract the text from a PDF; here’s how to publish on the Hugging Face Hub. There can be many Skills that attempt to codify the same knowledge, but some may be better than others. As Skills multiply, how will we find the best ones? This is in many ways analogous to the organic web search problem, which Google solved by aggregating hundreds of useful signals.
And we’re seeing that there is a kind of hierarchy of skills. Jesse Vincent’s Superpowers framework, which has become one of the most widely adopted open source projects in AI-assisted development, doesn’t just give agents individual capabilities. It encodes an entire software development methodology: brainstorm before you build, plan before you code, test before you ship, review before you merge. That’s a standardized workflow. It’s a lot like the kinds of protocol that the Long Now folks were talking about, expressed in a form that agents can follow.
The existing protocols that the protocol research community talks about, like wildfire management protocols or hospital triage protocols, encode best practices into a repeatable, teachable process for human teams. They have yet to be adapted for agents. And in fact, many of them are never going to be entirely agentic. We will need to build mechanisms for workflows that include both AI agents and humans working together.
Agent skills in some (but not all) areas raise the same questions that industrial standards have always raised: who decides what the best practice is? How do you verify quality? How do you govern updates? We may be talking about skills that encode the workflow for regulatory compliance in a specific industry, or for conducting an environmental impact assessment, or for managing a clinical trial. Are the standards de jure or de facto, the result of an engineered agreement by a committee or an engineered argument that enables a vibrant market?
At O’Reilly, this is something we think about a lot. We’re a company built on codifying expert knowledge. We’ve published books and organized conferences and online training that taught people how to do new things. Now we’re asking “What does it look like to publish the skills that teach agents how to do things? And how do we make sure those skills are discoverable, trustworthy, and monetizable, not just for us but for every domain expert who has knowledge worth encoding?” And how do they emerge from contention in a vibrant market rather than by decree?
We believe we’ll all be better off with an engineered argument than an engineered agreement. And that brings me to mechanism design.
Economists use the term “mechanism design” to describe the engineering of rules and incentive structures that lead self-interested actors to produce outcomes that are good for everyone. It’s sometimes called “reverse game theory.” Rather than analyzing the equilibria that emerge from a given set of rules, you start with the outcome you want and work backward to design the rules that will get you there.
Mechanism design theory got its start in the 1960s when Leonid Hurwicz took up the problem of how a planner can make good decisions when the information needed to make them is scattered among many different people, each of whom has their own interests. His key insight was that people won’t reliably reveal what they know unless it’s in their interest to do so. So how do you design a system that aligns their incentives?
The field that Hurwicz founded and that Eric Maskin and Roger Myerson developed through the 1970s and 80s earned all three the Nobel Prize in Economics in 2007.
I first encountered the field when Jonathan Hall, at the time the Chief Economist at Uber, waved Al Roth’s book Who Gets What — and Why at me and said “This is my Bible.” In it, Roth describes his own work on mechanism design, which won him the 2012 Nobel Prize in Economics along with Lloyd Shapley. Roth applied mechanism design to kidney matching markets, markets for college admissions, for law clerks and judges, and for hospitals and medical residents. When I first talked to Jonathan and then Al Roth, my layman’s takeaway about mechanism design was that it was simply the application of economic theory to design better markets.
And I’ve since come to think even more broadly about what mechanism design might mean in a technology context. In my broader framing, packet switching was a breakthrough in mechanism design. So for that matter was TCP/IP, the World Wide Web, and the protocol-centric architecture of Unix/Linux, which enabled open source and the distributed, cooperative software development environment we take for granted today. PageRank and the rest of Google’s organic search system also seems to me to be a kind of mechanism design. So do Pay Per Click advertising and the Google ad auction. All of them are ways of aligning incentives such that self-interested actors produce outcomes that are good for others as well.
So that brings me back to AI. Right now, there’s a problem that makes the AI/human knowledge market less efficient than it could be. The disrespect for IP that has been shown by the AI labs and applications during the training stage, and even now during inference, has led to efforts by content owners to protect their content from AI. Do not crawl. Lawsuits. Reluctance to share information. Even the AI labs are complaining about the theft of their IP and trying to protect their model weights from distillation.
It’s an economy crying out for mechanism design.
The lesson of YouTube Content ID is worth learning. Twenty-five years ago, the music industry was in the same position that content creators are in today with AI. In response to unauthorized use of their music by creators, music publishers’ demand to YouTube was “Take it down.” But as Google engineer Doug Eck explained to me, YouTube came up with a better answer: “How about we help you monetize it instead?” I don’t know the details of how that decision was made but I do know the eventual outcome. Aligned incentives led to a vibrant creator economy in which YouTube’s video creators, the music companies, and Google all got to share in the value that was created.
That should give us inspiration for how to solve some of the problems we face now with AI. Whether it’s with Agent Skills, NotebookLM, or other emergent artifacts of the new AI/human knowledge economy, we need to align the incentives. If we can grow the pie, and in a way where no single gatekeeper captures the bulk of the benefit, there’s a way to create a vibrant market. But that requires building mechanisms that don’t exist yet.
What mechanisms are missing from the agentic economy? Here’s a partial list:
Skills markets. There’s an enormous economic opportunity for humans to create and trade skills that agents can use. These are not just simple aggregation of context with tool use instructions, but higher-level, industry-specific workflows that encode deep human expertise. At O’Reilly, we’re figuring out how to turn our knowledge and that of our authors into skills, how to make them discoverable, and how to sell them. But as of yet, there’s no way for a broader community of skill creators to participate.
Quality and governance for skills. Some skills will need the same kinds of governance that industrial standards have. Who certifies that a medical skills package follows current clinical guidelines? Who updates it when the guidelines change? We haven’t begun to build the institutions that would govern agent skills at that level.
Registries and discovery. The MCP community has been working on a registry protocol, as is the Ethereum community.
This isn’t just a technical development but a business opportunity. I still remember when Network Solutions was running the original top level internet domain name registry under contract from the National Science Foundation. When the government said it wouldn’t end the payments, Network Solutions planned to walk away. Then they realized what they had. On the early internet, domain name registration became a surprisingly big business. Now it’s just boring civilizational infrastructure. Is there something similar for AI models, applications, and agents?
Organic search for agents. Google’s first great innovation on the web wasn’t how to make pay per click ads really work with a data-driven ad auction. It was organic search: a way of coordinating a market with hundreds of signals that ignored price and worked independently of whether the destination content was free or paid. The New York Times (or oreilly.com) is subscription-based, but that isn’t a factor in whether Google shows it to you. Google figured out signals that let them say, “This is the best result for this query.” Sites behind paywalls figured out how to disclose enough for people to decide whether they wanted to take the next step and enter into a transaction. That’s an engineered argument.
We’re going to need the equivalent for skills and agent services. We’ll start with curated marketplaces. Vercel already has one. But we’re a long way from something as effective as Google’s peak in organic search. The search space will be huge, with hundreds of millions, maybe billions of agents seeking the best way to accomplish trillions of distinct tasks. Skills can help them save on inference costs and deliver better results. The question is what signals will drive discovery of the best match.
Extension architectures. MCP’s extension model (including the new Apps Extension) is promising. This is the Apache model all over again: keep the core simple, let people layer different approaches on top, and let the market sort out which ones win. It is, in essence, an engineered argument rather than an engineered agreement.
Payment layers. Stripe has been working on agentic commerce, but it seems to be focused on traditional e-commerce transactions like booking a ticket or buying a product. What about a payment layer for skills? There have been proposals for monetizing MCP calls, pay per call, pay per token, but none have caught on yet. Coinbase’s x402 protocol may also end up playing a role.
Progressive access and authentication. MCP Server Cards promise to let a service specify its terms: here’s what we charge, here’s how you authenticate. That’s a functional disclosure layer that could enable commerce. It could enable progressive privileges: a free O’Reilly subscriber gets one set of tools, a paying subscriber gets a richer set, all on top of the same MCP server. Again, that’s an engineered argument with the market deciding the winners.
Neutrality in agent routing. When ChatGPT decides to show you a Booking.com widget instead of an Airbnb widget, who made that choice, and on what basis? OpenAI claims commercial considerations aren’t a factor. That’s hard to take at face value. We need something like the original principle of organic search: surface the best result for the user, not the most profitable one for the platform.
I’m old enough to remember when UUCP was giving way to the internet, and there was a real debate over whether explicit path routing or domain routing was better. In retrospect, it’s blindingly obvious that path routing wasn’t going to scale. But it’s worthwhile to know that at the time, people weren’t at all clear about that!
The same is true now. Some of what I’ve described will turn out to be the equivalent of explicit path routing: a dead end that was only plausible for a small scale network. Other parts will turn out to be as fundamental as DNS or HTTP. But we’re not trying to pick the winners. We’re trying to engineer the argument.
If we can enable better markets, it will allow a process of discovery. People try different things, most fail, some catch on. The job right now is to build the mechanisms that help the market to evolve.
We need mechanisms that no single gatekeeper can control. Modular, decentralized architectures let people experiment with business models, routing decisions, payment systems, and quality signals. And alongside those markets, we will eventually need institutions (some of which will be protocols) to maintain standards that will become the infrastructure of the next economy.
This article recapitulates a conversation with Ilan Strauss and Ido Salomon, and a separate conversation on the broader meaning of protocols in the context of industry workflows and civilizational infrastructure with Venlaktesh Rao and Timber Schroff of the Ethereum Foundation’s Summer of Protocols program, and Denise Hearn and James Home of the Long Now Foundation. Rao’s Protocol Reader and David Lang’s “Standards Make the World,” published through the Summer of Protocols project, inform the argument about protocols as civilizational infrastructure.
How can I make sure the anti-malware software doesn’t terminate my custom service? [The Old New Thing]
A customer was developing a Windows service process, and it is important to them that the service keep running on their servers. They wanted to know if there was a way they could prevent users who connect to the server from terminating the service. In particular, they wanted to make sure that the user couldn’t use the anti-malware software to terminate their service, either by mistake or maliciously.
The fact that they made it to asking about anti-malware software tells me that they have already locked down the more obvious access points. For example, they’ve already set the appropriate permissions on their service so that only administrators can Stop the service.
But how do you protect your process from anti-malware software?
The answer, of course, is that you can’t.
Because if you could inoculate yourself against being terminated by anti-malware software, then malware would do it!
Anti-malware software runs with extremely high levels of access to the system. They have components that run in kernel mode, after all. Even if they can’t terminate your process, they can certainly make it so that your process can’t accomplish anything (say, by preventing its threads from being scheduled to execute). And if anti-malware software goes awry, the entire system can be rendered catastrophically broken.
The customer will have to work with the anti-malware software that runs on their server to see if there is a setting or other way to tell the anti-malware software never to terminate their critical service. (Of course, it means that genuine malware might masquerade as their critical service and elude detection. This is a risk assessment trade-off they will have to make.) And if their service runs on client-configured servers, where they don’t control what anti-malware software the client uses, then they’ll have to work with all of the anti-malware software (or at least all the major ones) and see if they can arrange something.¹
But Windows can’t help you. The anti-malware software is more powerful than you.
¹ For example, maybe they digitally sign their service process and give the public key to the anti-malware software, saying, “Please don’t terminate processes signed by this key.” Of course, the real question is whether the anti-malware vendors will accept that.
The post How can I make sure the anti-malware software doesn’t terminate my custom service? appeared first on The Old New Thing.
Windows native application development is a mess [OSnews]
Usually, when developers or programmers write articles about their experiences developing for a platform they have little to no experience with, the end result usually comes down to “they do things differently, therefor it is bad actually”, which is deeply unhelpful. This article, though, is from a longtime Windows user and developer, but one who hasn’t had to work on native Windows development for a long time now. When he decided to write his own native Windows application to scratch a personal itch, it wasn’t a great experience.
While I followed the Windows development ecosystem from the sidelines, my professional work never involved writing native Windows apps. (Chromium is technically a native app, but is more like its own operating system.) And for my hobby projects, the web was always a better choice. But, spurred on by fond childhood memories, I thought writing a fun little Windows utility program might be a good retirement project.
Well. I am here to report that the scene is a complete mess. I totally understand why nobody writes native Windows applications these days, and instead people turn to Electron.
↫ Domenic Denicola
Denicola decided to try and use the latest technologies and best practices from Microsoft regarding Windows development, and basically came away aghast at just how shot of an experience it really is. I’m not a developer, but you don’t need to be to grasp the severity of the situation after following his development timeline and reading about his struggles.
If this is truly representative of the Windows application development experience, it’s really no surprise just how few new, quality Windows applications there are, and why even Microsoft’s own Windows developers resort to things like React for the Start menu to enabler faster and easier iteration.
This is a complete dumpster fire.
Java Sun SPOTs (Small Programable Object Technology) [OSnews]
These were Sun microcontrollers that run Squawk Java ME directly on metal with gc and all the bells and whistles, created by Sun Microsystems in 2005.
The feature mesh networking and tcp/ip and multitasking. Even the drivers are java just like Java OS.
They run a command and control server by default and there’s graphical network builders and deployment managers (Solarium) they also do some more esoteric stuff like process migration.
↫ Penny
I have no use for these but I want them. They would’ve made an excellent addition to my Sun article. There’s still a detailed tutorial and informational website up about these things, too.
The OpenBSD init system and boot process [OSnews]
In recent weeks, systemd has both embraced slopcoding and laid the groundwork for age verification built right into systemd-based Linux distributions, there’s definitely been an uptick in people talking about alternative init systems. If you want to gain understanding in a rather classic init system, OpenBSD’s is a great place to start.
OpenBSD has a delightfully traditional init system, which makes it a great place to start learning about init systems. It’s simple and effective. There’s a bit of a counter movement in the IT and FOSS worlds rebelling against hyperscaler solutions pushing down into everyone’s practices. One of the rallying cries I’ve been seeing is to remind people that You Can Just Do Things™ on the computer. The BSD init system, and especially OpenBSD’s is something of a godparent to this movement.
↫ Overeducated-Redneck.netinit(8)just runs a shell script to start the computer, and You Can Just Do Things™ in the script to get them to happen on boot.
My main laptop is currently in for warranty repairs, but once it returns, I intend to set it up with either OpenBSD or a Linux distribution without systemd (most likely Void) to see how many systems I can distance from systemd without giving myself too much of a headache (I’m guessing my gaming machine will remain on systemd-based Fedora). I’m not particularly keen on slopcoding and government-mandated age verification inside my operating systems, and I’m definitely feeling a bit of a slippery slope underneath my feet.
I have my limits.
Kernel prepatch 7.0-rc5 [LWN.net]
Linus has released 7.0-rc5 for testing. "It
looks like things are starting to calm down - rc5 is smaller than
the previous rc's this merge window, although it still tracks a bit
larger than rc5s historically do.
"
I wanted to subscribe to the GiftArticles feed from Mastodon. It makes it possible to read news on paywalled sites. I found the feed by going to the site the feed comes from and tacking a .rss at the end. You can read the feed in a browser, and my feeder test app can read it as well. But for some reason FeedLand won't subscribe to it. Have to dig into that soon. I'm looking forward to doing some long-overdue work on FeedLand before doing the next push.
The Mythical Agent-Month [Radar]
The following article originally appeared on Wes McKinney’s blog and is being republished here with the author’s permission.
Like a lot of people, I’ve found that AI is terrible for my sleep schedule. In the past I’d wake up briefly at 4:00 or 4:30 in the morning to have a sip of water or use the bathroom; now I have trouble going back to sleep. I could be doing things. Before I would get a solid 7–8 hours a night; now I’m lucky when I get 6. I’ve largely stopped fighting it: Now when I’m rolling around restlessly in bed at 5:07am with ideas to feed my AI coding agents, I just get up and start my day.
Among my inner circle of engineering and data science friends, there is a lot of discussion about how long our competitive edge as humans will last. Will having good ideas (and lots of them) still matter as the agents begin having better ideas themselves? The human-expert-in-the-loop feels essential now to get good results from the agents, but how long will that last until our wildest ideas can be turned into working, tasteful software while we sleep? Will it be a gentle obsolescence where we happily hand off the reins or something else?
For now, I feel needed. I don’t describe the way I work now as “vibe coding” as this sounds like a pejorative “prompt and chill” way of building AI slop software projects. I’ve been building tools like roborev to bring rigor and continuous supervision to my parallel agent sessions, and to heavily scrutinize the work that my agents are doing. With this radical new way of working it is hard not to be contemplative about the future of software engineering.
Probably the book I’ve referenced the most in my career is The Mythical Man-Month by Fred Brooks, whose now-famous Brooks’s law argues that “adding manpower to a late software project makes it later.” Lately I find myself asking whether the lessons from this book are applicable in this new era of agentic development. Will a talented developer orchestrating a swarm of AI agents be able to build complex software faster and better, and will the short-term productivity gains lead to long-term project success? Or will we run into the same bottlenecks—scope creep, architectural drift, and coordination overhead—that have plagued software teams for decades?
One of Brooks’s central arguments is that small teams of elite people outperform large teams of average ones, with one “chief surgeon” supported by specialists. This leads to a high degree of conceptual integrity about the system design, as if “one mind designed it, even if many people built it.”
Agentic engineering appears to amplify these problems, since the
quality of the software being built is now only as good as the
humans in the loop curating and refining specs, saying yes or no to
features, and taming unnecessary code and architectural complexity.
One of the metaphors in TMMM is the “tar pit”:
“Everyone can see the beasts struggling in it, and it looks
like any one of them could easily free itself, but the tar holds
them all together.” Now, we have a new “agentic tar
pit” where our parallel Claude Code sessions and git
worktrees are engaged in combat with the code bloat and
incidental complexity generated by their virtual colleagues. You
can systematically
refactor, but invariably an agentic codebase will end up larger
and more overwrought than anything built by human hand. This is
technical debt on an unprecedented scale, accrued at machine
speed.
In TMMM, Brooks observed that a working program is maybe 1/9th the way to a programming product, one that has the necessary testing, documentation, and hardening against edge cases and is maintainable by someone other than its author. Agents are now making the “working program” (or “appears-to-work” program, more accurately) a great deal more accessible, though many newly minted AI vibe coders clearly underestimate the work involved with going from prototype to production.
These problems compound when considering the closely-related Conway’s law, which asserts that the architecture of software systems tends to resemble the organizations’ team or communication structure. What does that look like when applied to a virtual “team” of agents with no persistent memory and no shared understanding of the system they are building?
Another “big idea” from TMMM that has stuck with people is the n(n-1)/2 coordination problem as teams scale. With agentic engineering, there are fewer humans involved, so the coordination problem doesn’t disappear but rather changes shape. Different agent sessions may produce contradictory plans that humans have to reconcile. I’ll leave this agent orchestration question for another post.
“There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.”
—“No Silver Bullet” (1986)
Brooks wrote a follow-up essay to TMMM to look at software design through the lens of essential complexity and accidental complexity. Essential complexity is fundamental to achieving your goal: If you made the system any simpler, it would fall short of its problem statement. Accidental complexity is everything else imposed by our tools and processes: programming languages, tools, and the layer of design and documentation to make the system understandable by engineers.
Coding agents are probably the most powerful tool ever created to tackle accidental complexity. To think: I basically do not write code anymore, and now write tons of code in a language (Go) I have never written by hand. There is a lot of discussion about whether IDEs are still going to be relevant in a year or two, when maybe all we need is a text editor to review diffs. The productivity gains are enormous, and I say this as someone burning north of 10 billion tokens a month across Claude, Codex, and Gemini.
But Brooks’s “No Silver Bullet” argument predicts exactly the problem I’m experiencing in my agentic engineering: The accidental complexity is no problem at all anymore, but what’s left is the essential complexity which was always the hard part. Agents can’t reliably tell the difference. LLMs are extraordinary pattern matchers trained on the entirety of humanity’s open source software, so while they are brilliant at dealing with accidental complexity (refactor this code, write these tests, clean up this mess), they struggle with the more subtle essential design problems, which often have no precedent to pattern match against. They also often tend to introduce unnecessary complexity, generating large amounts of defensive boilerplate that is rarely needed in real-world use.
Put another way, agents are so good at attacking accidental complexity that they generate new accidental complexity that can get in the way of the essential structure that you are trying to build. With a couple of my new projects, roborev and msgvault, I am already dealing with this problem as I begin to reach the 100 KLOC mark and watch the agents begin to chase their own tails and contextually choke on the bloated codebases they have generated. At some point beyond that (the next 100 KLOC, or 200 KLOC) things start to fall apart: Every new change has to hack through the code jungle created by prior agents. Call it a “brownfield barrier.” At Posit we have seen agents struggle much more in 1 million-plus-line codebases such as Positron, a VS Code fork. This seems to support Brooks’s complexity scaling argument.
I would hesitate to place a bet on whether the present is a ceiling or a plateau. The models are clearly getting better fast, and the problems I’m describing here may look charmingly quaint in two years. But Brooks’s essential/accidental distinction gives me some confidence that this isn’t just about the current limitations of the technology. Figuring out what to build was the hard part long before we had LLMs, and I don’t see how a flawless coding agent changes that.
When generating code is free, knowing when to say “no” is your last defense.
With the cost of generating code now converging to zero, there is practically nothing stopping agents and their human taskmasters from pursuing all avenues that would have previously been cost or time prohibitive. The temptation to spend your day prompting “and now can you just…?” is overwhelming. But any new generated feature or subsystem, while cheap to create, is not costless to maintain, test, debug, and reason about in the future. What seems free now carries a future contextual burden for future agent sessions, and each new bell or whistle becomes a new vector of brittleness or bugs that can harm users.
From this perspective, building great software projects maybe never was about how fast you can type the code. We can “type” 10x, maybe 100x faster with agents than we could before. But we still have to make good design decisions, say no to most product ideas, maintain conceptual integrity, and know when something is “done.” Agents are accelerating the “easy part” while paradoxically making the “hard part” potentially even more difficult.
Agentic scope creep also seems to be actively destroying the open source software world. Now that the bar is lower than ever for contributors to jump in and offer help, projects are drowning in torrents of 3,000-line “helpful” PRs that add new features. As developers become increasingly hands-off and disengaged from the design and planning process, the agents’ runaway scope creep can get out of control quickly. When the person submitting a pull request didn’t write or fully read the code in it, there’s likely no one involved who’s truly accountable for the design decisions.
I have seen in my own work on roborev and msgvault that agents will propose overwrought solutions to problems when a simple solution would do just fine. It takes judgment to know when to intervene and how to keep the agent in check.
Brooks’s argument is that design talent and good taste are the most scarce resources, and now with agents doing all of the coding labor, I argue that these skills matter more now than ever. The bottleneck was never hands on keyboards. Now with the new “Mythical Agent-Month,” we can reasonably conclude that design, product scoping, and taste remain the practical constraints on delivering high-quality software. The developers who thrive in this new agentic era won’t be the ones who run the most parallel sessions or burn the most tokens. They’ll be the ones who are able to hold their projects’ conceptual models in their mind, who are shrewd about what to build and what to leave out, and exercise taste over the enormous volume of output.
The Mythical Man-Month was published in 1975, more than 50 years ago. In that time, a lot has happened: tremendous progress in hardware performance, programming languages, development environments, cloud computing, and now large language models. The tools have changed, but the constraints are still the same.
Maybe I’m trying to justify my own continued relevance, but the reality is more complex than that. Not all software is created equal: CRUD business productivity apps aren’t the same as databases and other critical systems software. I think the median software consulting shop is completely toast. But my thesis is more about development work in the 1% tail of the distribution: problems inaccessible to most engineers. This will continue to require expert humans in the loop, even if they aren’t doing much or any manual coding. As one recent adjacent example, my friend Alex Lupsasca at OpenAI and his world-class physicist collaborators were able to create a formulation of a hard physics problem and arrive at a solution with AI’s help. Without such experts in the loop, it’s much more dubious whether LLMs would be able to both pose the questions and come up with the solutions.
For now, I’ll probably still be getting out of bed at 5am to feed and tame my agents for the foreseeable future. The coding is easier now, and honestly more fun, and I can spend my time thinking about what to build rather than wrestling with the tools and systems around the engineering process.
Thanks to Martin Blais, Josh Bloom, Phillip Cloud, Jacques Nadeau, and Dan Shapiro for giving feedback on drafts of this post.
Security updates for Monday [LWN.net]
Security updates have been issued by AlmaLinux (gimp:2.8, grub2, kernel, libarchive, libvpx, nginx, opencryptoki, python3.12, vim, yggdrasil, and yggdrasil-worker-package-manager), Debian (chromium, freeciv, libvirt, libyaml-syck-perl, mapserver, ruby-rack, spip, and webkit2gtk), Fedora (chromium, cpp-httplib, glib2, libsoup3, localsearch, openssh, python-scitokens, python-ujson, python3.6, scitokens-cpp, uxplay, wordpress, and xen), Mageia (expat), Red Hat (osbuild-composer), SUSE (Announcement ID: SUSE-SU-2026:0940-1 Release Date: 2026-03-20T13:41:23Z Rating: important References:, Announcement ID: SUSE-SU-2026:0941-1 Release Date: 2026-03-20T13:41:30Z Rating: important References:, Announcement ID: SUSE-SU-2026:0943-1 Release Date: 2026-03-20T13:41:33Z Rating: important References:, Announcement ID: SUSE-SU-2026:0944-1 Release Date: 2026-03-20T13:41:37Z Rating: important References:, Announcement ID: SUSE-SU-2026:0945-1 Release Date: 2026-03-20T13:41:40Z Rating: important References:, chromium, docker, go1.25-openssl, GraphicsMagick, helm, mumble, python311, python311-pyasn1, python313, runc, sqlite3, and tempo-cli), and Ubuntu (debian-goodies and libnet-cidr-perl).
CodeSOD: Completely Readable [The Daily WTF]
It is eminitently reasonable for companies to have "readability standards" for their code. You're writing this code for humans to read, after all, at least in theory. You need to communicate to future inheritors of your code.
But that doesn't mean readability standards are good. Tony's company, for example, has rules about returning boolean values from functions, and those rules mean you are expected to write code like this:
public bool Completed ()
{
if (completed == true)
{
return true;
}
else
{
return false;
}
}
It's more "explicit" this way. Which I certainly would have
explicit things to say if I were told I needed to write code this
way. Also, what's with the non-indented return
statements? Is that also part of their coding standards?
Bullace farm [Judith Proctor's Journal]
I belong to two Civil War reenactment groups. The Norfolke Trayned Bandes and Little Woodham.
The Norfolks have a strong connection to Bullace Farm and many of them spend a week there every year as volunteers. This year, the volunteers from LIttle Woodham are visiting the farm for a day.
I really really want to be there, but it's a three hour trip on a mini bus, and three hours back again. And I'm paranoid about long journeys. I've had three really bad (lasting more than two months) of sciatica in the last few years, and two of them were triggered by long journeys.
If you've ever had sciatica, you'll know just how painful it is. If you haven't, all I can tell you is that it's the most painful health condition I've had in my life and it can leave you pretty much immobilised for the duration.
The last bad attack was triggered by a long train journey. I chose train rather than car, as I knew I'd be able to get up and walk round at intervals, but sadly, even that and doing tai chi at stations when there were changes, wasn't enough.
By the time I got home I was in agony. My husband picked me up at the station, and I didn't do any journeys after that for quite some time. Even the short distance to physio appointments had to be done lying on the back seat of the car. Sitting upright was't an option, even for five minutes.
Over the next couple of months, I worked my way through three different physios who all agreed that I needed an operation (to be fair, my original bout of sciatica a few years before HAD needed an operation), until, finally, Manfred came back to England (he has an elderly parent in the Netherlands). I walked in with all my weight on my walking stick, and walked out without the stick.
Took a couple of weeks to finish off the job, but that man is a miracle worker. (He correctly identified the cause of my previous bout of sciatica, as well.)
Ah well, to cut a long story short, I shall not go to Bullace Farm, even though I madly want to.
If you want to know what the farm is like, watch Tales From the Green Valley.
Microsoft Xbox One Hacked [Schneier on Security]
It’s an impressive feat, over a decade after the box was released:
Since reset glitching wasn’t possible, Gaasedelen thought some voltage glitching could do the trick. So, instead of tinkering with the system rest pin(s) the hacker targeted the momentary collapse of the CPU voltage rail. This was quite a feat, as Gaasedelen couldn’t ‘see’ into the Xbox One, so had to develop new hardware introspection tools.
Eventually, the Bliss exploit was formulated, where two precise voltage glitches were made to land in succession. One skipped the loop where the ARM Cortex memory protection was setup. Then the Memcpy operation was targeted during the header read, allowing him to jump to the attacker-controlled data.
As a hardware attack against the boot ROM in silicon, Gaasedelen says the attack in unpatchable. Thus it is a complete compromise of the console allowing for loading unsigned code at every level, including the Hypervisor and OS. Moreover, Bliss allows access to the security processor so games, firmware, and so on can be decrypted.
Upcoming talk in Cesena, Italy [Richard Stallman's Political Notes]
Richard Stallman will speak on March 26 in Cesena, Italy, at the Engineering and Architecture Campus of Cesena of the University of Bologna. Pillars of Tech Free/Libero Software And Freedom in the Digital Society The talk is in English from 15:30 to 17:30 in Aula Magna (Room 4.3), Via dell'Università 50, Cesena. We suggest you bring cash.
Grrl Power #1445 – Pinocchi-oh no! [Grrl Power]
Maxima obviously has extraordinarily strong bones and ligaments and tendons etc – like, “make a space elevator cable out of that stuff” strong, so when she cracks her joints, it sound a bit like the 1812 Overture. The version where they fire actual cannons to go along with the symphony.
Fun fact, in panel 2, I had planned to draw Cora with her arm somehow extended out so she was covering herself from “4th wall camera angle” POV, but… there just wasn’t a natural angle that didn’t either look like she was intentionally being modest, which she wouldn’t be, or didn’t look like I had grabbed a 3D model by the elbow joint and just yanked it into position with no thought to how humans actually move their limbs. So, poor planning on my part. Instead I’m pretending like she put up a modesty filter than only Maxima can see somehow.
Technically, they’re on P.T.O. – I know it’s called “leave” in the military, but they’re a domestic branch, so a lot of people on the team call it P.T.O. – so Maxima can’t officially get upset at Sydney or Harem for having a topless watch party with “friends of the team.” Honestly, she’s not so much a stick in the mud that she’d even care, especially while coming down from her battle royale adrenaline high. If Harem and Cora sit down at the dinner table later with their knoks out (which is British slang, I assume for “knockers” that I heard once on… Blackadder? Or Red Dwarf. Definitely one of the two.) then Max might at least tell Harem to go teleport a shirt on. (She can’t teleport things to her, but she’s trying to learn to teleport small things that one of her is holding to another her. No luck yet.)
Ah! I thought I had more time till March. I’m bad
at looking at dates apparently. The new one is underway. I should
have a draft ready to go for the next Monday comic?
Here is Gaxgy’s painting Maxima promised him. Weird how he draws almost exactly like me.
I did try and do an oil painting version of this, by actually re-painting over the whole thing with brush-strokey brushes, but what I figured out is that most brushy oil paintings are kind of low detail. Sure, a skilled painter like Bob Ross or whoever can dab a brush down a canvas and make a great looking tree or a shed with shingles, but in trying to preserve the detail of my picture (eyelashes, reflections, etc) was that I had to keep making the brush smaller and smaller, and the end result was that honestly, it didn’t really look all that oil-painted. I’ll post that version over at Patreon, just for fun, but I kind of quit on it after getting mostly done with re-painting Max.
Patreon has a no-dragon-bikini version of of the picture as well, naturally.
Double res version will be posted over at Patreon. Feel free to contribute as much as you like.
Benjamin Mako Hill: How taboo shapes knowledge production on Wikipedia [Planet Debian]

Note: I have not published blog posts about my academic papers over the past few years. To ensure that my blog contains a more comprehensive record of my published papers and to surface them for folks who missed them, I will periodically (re) publish blog posts about some “older” published projects. This post draws material from a previously published post by Kaylea Champion on the Community Data Science Blog.
Taboo subjects—such as sexuality and mental health—are as important to discuss as they are difficult to raise in conversation. Although many people turn to online resources for information on taboo subjects, censorship and low-quality information are common in search results. In two papers I recently published at CSCW—both led by Kaylea Champion—we presented a series of analyses showing how taboo shapes the process of collaborative knowledge building on English Wikipedia.
The first study is a quantitative analysis showing that articles on taboo subjects are much more popular and are the subject of more vandalism than articles on non-taboo topics. In surprising news, we also found that they were edited more often and were of higher quality!
Short video of Kaylea’s presentation of the work given at Wikimania in August 2023.The first challenge we faced in conducting this work was identifying taboo articles. Kaylea had a brilliant idea for a new computational approach to doing so without relying on our individual intuitions about what qualifies as taboo (something we understood would be highly specific to our own culture, class, etc). Her approach was to make use of an insight from linguistics: people develop euphemisms as ways to talk about taboos (i.e., think about all the euphemisms we’ve devised for death, or sex, or menstruation, or mental health).
We used this insight to build a new machine-learning classifier based on English Wiktionary definitions. If a ‘sense’ of a word was tagged as euphemistic, we treated the words in the definition as indicators of taboo. The end result was a series of words and phrases that most powerfully differentiate taboo from non-taboo. We then did a simple match between those words and phrases and the titles of Wikipedia articles. The topics were taboo enough that we were a little uncomfortable discussing them in our meetings! We built a comparison sample of articles whose titles are words that, like our taboo articles, appear in Wiktionary definitions.
In the first paper, we used this new dataset to test a series of hypotheses about how taboo shapes collaborative production in Wikipedia. Our initial hypotheses were based on the idea that taboo information is often in high demand but that Wikipedians might be reluctant to associate their names (or usernames) with taboo topics. The result, we argued, would be articles that were in high demand but of low quality.
We found that taboo articles are thriving on Wikipedia! In summary, we found that in comparison to non-taboo articles:
Image of the estimated qualiy of articles of the four
articles in the second mixed-methods paper. Extreme dips reflect
periods of frequent vandalism.
Kaylea attempted to understand these somewhat confusing results by designing a fantastic mixed-methods analysis that sought to unpack some of the nuance missing in the quantitative analysis by delving deep into the “life histories” of four articles on English Wikipedia: two on taboo topics related to women’s anatomy (Clitoris and Menstration) and two nontaboo articles chosen for comparison (Cell membrance and Philip Pullman).
Although the findings from the analysis can be difficult to summarize succinctly (as with many qualitative studies), we showed how the taboo example articles’ success was hard-won amid real challenges and attacks. The paper describes how challenges were overcome through resilient leadership, often provided by a single dedicated individual. The paper provides a template for how taboo can be—and frequently is—overcome by dedicated Wikipedians in ways that provide useful knowledge resources in real demand.
For more details, visualizations, statistics, and more, we hope you’ll take a look at our papers, both linked below.
The full citation for the papers are: (1) Champion, Kaylea, and Benjamin Mako Hill. 2023. “Taboo and Collaborative Knowledge Production: Evidence from Wikipedia.” Proceedings of the ACM on Human-Computer Interaction 7 (CSCW2): 299:1-299:25. https://doi.org/10.1145/3610090. (2) Champion, Kaylea, and Benjamin Mako Hill. 2024. “Life Histories of Taboo Knowledge Artifacts.” Proceedings of the ACM: Human-Computer Interaction 8 (CSCW2): 505:1-505:32. https://doi.org/10.1145/3687044.
We have also released replication materials for the paper, including all the data and code used to conduct the analyses.
This blog post and the paper it describes are collaborative work by Kaylea Champion and Benjamin Mako Hill.
How does the ball know?
In tennis, golf or just about all ball sports, the follow-through determines the flight of the ball. Great players always have a complete and confident follow-through.
But the ball is long gone before that happens.
So, what’s the point?
It turns out that the ball can tell that you intend to have a serious follow-through. A weak or non-existent follow-through requires that you start slowing down before your racquet ever gets to the ball.
The metaphor should be pretty clear.
If you show up for the audition, your first TEDx talk, your early blog posts, the job interview or your start up hoping to see what happens (“I’ll commit if I get picked”) we can tell.
On the other hand, when it’s clear that you’re going to keep on showing up, it’s an invitation to get aboard now.
Follow-through doesn’t always work. But it always works better than the alternative.
The Circle Of Something Or Other [Penny Arcade]
New Comic: The Circle Of Something Or Other
Pluralistic: Understaffing as a form of enshittification (23 Mar 2026) [Pluralistic: Daily links from Cory Doctorow]
->->->->->->->->->->->->->->->->->->->->->->->->->->->->->
Top Sources: None -->

At root, enshittification can only take place when companies can move value around. Digital tools make it easier than ever to do this, for example, by changing prices on a per-user, per-session basis, using commercial surveillance data to predict the highest price or lowest wage a user will accept:
https://pluralistic.net/2023/02/19/twiddler/
Digital "twiddling" represents a powerful system of pumps for moving value around, taking it away from users and giving it to business customers, then taking it from businesses and giving it to users, and then, ultimately, harvesting all the value for the company's shareholders and executives.
Twiddling is powerful because it's fine-grained, allowing businesses to extract more from their most vulnerable customers and workers, while reserving more equitable treatment for more empowered stakeholders who might otherwise take their business elsewhere.
But long before digitization made twiddling possible, businesses that found themselves in a position to make things worse for their customers and workers without facing consequences were accustomed to doing so. Think of the airport shop that sells water for $10/bottle: that's a ripoff whether you're in coach-minus or flying first class, and it's made possible by the TSA checkpoint that makes shopping elsewhere a time-consuming impossibility.
The airport shop is the only game in town – a "monopolist" in economics jargon. When a business has something you really want (or even better, something you need) and it's hard (or impossible) for you to get it elsewhere, they can take value away from you and harvest it for themselves.
The most obvious forms of monopoly extraction are high prices and low wages. Dollar stores are notorious for this, using their market power to procure extremely small packages of common goods in "cheater sizes" that have high per-unit costs (e.g. the cost per ounce for soap), while still having a low price tag (the cost per (small) bottle of soap). These stores are situated in food deserts, which they create by boxing in community grocers and heavily discounting their wares until the real grocers go out of business. They're also situated in work deserts, because driving regular grocers out of business destroys the competition for labor, too. That means they can pay low wages and charge high prices and make a hell of a lot of money, which is why there are so many fucking dollar stores:
https://pluralistic.net/2023/03/27/walmarts-jackals/#cheater-sizes
That's the most obvious form of value harvesting, but it's not the only one. There are other costs that businesses can impose on their customers and workers. Think of CVS, the pharmacy monopolist that uses its vertical integration with bizarre, poorly understood middlemen like "pharmacy benefit managers" to drive independent pharmacies out of business:
https://pluralistic.net/2024/09/23/shield-of-boringness/#some-men-rob-you-with-a-fountain-pen
If you've been to a CVS store recently, you have doubtless experienced a powerful form of value-shifting: understaffing. CVS (and the other massive chains in the cartel, like Walgreens) have giant stores with just one or two employees on the floor, often just a cashier and a pharmacist.
This makes them easy pickings for shoplifters, so all their merchandise is locked up in cabinets and when you want to buy something, you have to find the lone employee and get them to unlock the case for you. This is CVS trading your time for their wage-bill.
Then, you're expected to check out your own purchases – shifting labor from workers on CVS's payroll to you – with badly maintained machines that often misfire and require you to wait again for that lone employee to come and override them.
Meanwhile, that employee is absorbing a gigantic amount of frustration and abuse from customers who are paying high prices and enduring long waits – another cost that CVS shifts from their shareholders to someone else (workers, in this case).
Finally, CVS demands that publicly funded police respond to the inevitable shoplifting and other security problems created by running a big-box store with a skeleton crew, shifting costs from the business to everyone in the local tax-base.
In "Not Enough Workers For the Job," The American Prospect's Robin Kaiser-Schatzlein looks at the systemic trend towards understaffing that has swept across every sector of the US economy over the past five years:
Kaiser-Schatzlein lays the blame for many of life's frustrations at the feet of this business trend: "long lines, messy grocery aisles, organized theft, high hotel costs, frequent flight cancellations, deadly medication errors at pharmacies, increased use of medical restraints in nursing homes, and, more generally, a palpable and rising dissatisfaction with work."
As you can see from that list, understaffing affects everyone, from people with the wherewithal to buy a plane ticket to vulnerable elderly people who are literally tied to their beds or drugged into stupors for the last years of their lives.
There's academic work to support the idea that understaffing is on the rise, like a 2024 Kennedy School survey of 14,000 workers where a majority said that their workplaces are "always" or "often" understaffed. A 2023 study in the Journal of Public Health Management and Practice found that public health institutions need to hire 80% more workers to be adequately staffed. New York's Mt Sinai hospitals paid a $2m fine in 2024 for understaffing its ERs, as well as oncology and labor units. Another study blames understaffing for the rise of use of antipsychotic "chemical handcuffs" in nursing homes:
https://pubmed.ncbi.nlm.nih.gov/35926573/
The hits keep coming: the DoT Inspector General says that 77% of air traffic control is understaffed, with NYC ATC staffed at 54% of the correct level. In Texas, county jails have had to reduce their capacity due to understaffing (they have enough beds, but not enough turnkeys). Understaffing is behind much of the unprecedented union surge, with workers at Starbucks, railroads and elsewhere becoming labor militants due to understaffing. 83% of white-collar millennials say they're doing extra work to make up for vacant positions in their organizations. As Starbucks union organizers can attest, workers need unions if they want to have a hope of forcing their bosses to adequately staff their jobsites, so it's not surprising that understaffing has emerged at a time when union density is at rock bottom.
Kaiser-Schatzlein quotes the Kennedy School's Daniel Schneider, who identifies understaffing as a deliberate business strategy. Businesses don't hire enough workers because that makes them more profitable. It's not because "no one wants to work anymore" (though doubtless repeating that fairy tale helps shift the blame for long lines and poor service from real, greedy bosses to imaginary, greedy workers).
Private equity firms lead the charge here, "rolling up" multiple, competing businesses in a sector and then cutting staffing across all of them. Putting all the businesses in a given sector and region under common ownership means that when these businesses hack away at staffing levels, workers and customers have nowhere else to go. This is especially pernicious at nursing homes, where PE companies drastically reduce headcount, putting staff and patients alike at risk:
Private equity has just about declared victory in its decades-long war on community pharmacies, consolidating pharmacy ownership nationwide into just a few chains that are the poster-children for understaffing. These ghost-ships aren't just frustrating places to shop – they're a danger to their communities. As Kaiser-Schatzlein reports, Ohio fined CVS in 2021 for boarding up the walk-up pharmacies in its stores and forcing customers to use the drive-through, because there was only a single pharmacist on duty.
Without help, the lone pharmacist was unable to process deliveries, so CVS pharmacies' floors were littered with unopened parcels. Patients had to wait over a month to get their prescriptions filled. CVS refused to hire additional staff to process the backlog, and the on-duty staff worked under declining conditions, as the undermaintained air conditioning quit and indoor temperatures soared. Unsurprisingly, these stores had massive staff turnover, which also hampered their efficiency.
Understaffing in pharmacies leads to serious medication errors, which are proliferating across the US, killing hundreds of thousands of Americans every year. The errors are incredible, like the woman who died after getting chemotherapy drugs instead of antidepressants:
https://www.nytimes.com/2020/01/31/health/pharmacists-medication-errors.html
Pharmacists at chain stores like CVS are at elevated risk for kidney stones because they don't have time for bathroom breaks, so they adopt a practice of not drinking water during their shifts. One CVS pharmacist told Texas regulators, "I am a danger to the public working for CVS."
As ever, covid provides the ideal excuse for shifting value from customers and workers to shareholders. Today's high prices never came down after the "greedflation" that bosses boasted about to shareholders, even as they told customers that it was because of "supply chain shocks":
https://pluralistic.net/2023/03/11/price-over-volume/#pepsi-pricing-power
Likewise, staffing levels never came back from the covid skeleton crews that we all learned to deal with in the days of widespread acute illness and social distancing. Kaiser-Schatzlein spoke to hotel workers like Jianci Liang, a housekeeper at Boston's Hilton Park Plaza, who described a post-pandemic jobsite with 20 fewer housekeepers: "I sleep with pain, I wake up with pain, I go to work with pain." The Bureau of Labor says that hotel staffing levels are down 16% nationwide.
Prices (and profits) are up, though. Hotels are posting record profits and paying record executive salaries, wrung from facilities where the pools are closed and room cleanings happen on alternate days.
Workers absorb the cost of understaffing in their bodies and their psyches. It's not just physical exhaustion, it's also the abuse that is directly correlated with lower staffing levels. Frustrated customers vent their anger at grocery workers, flight attendants and other front-line workers.
I can't help but see a connection here to the AI bubble, which is fueled by the fantasy of a world without people:
https://pluralistic.net/2026/01/05/fisher-price-steering-wheel/#billionaire-solipsism
The billionaire solipsists who have directed hundreds of billions of dollars in AI investment like to rhapsodize about a future where a boss's ideas are turned into products and services without having to be funneled through workers:
https://pluralistic.net/2026/03/12/normal-technology/#bubble-exceptionalism
That's why AI has taken over customer service – the multi-hour waits for a customer service rep were always a way of shifting value from customers and workers to shareholders. Businesses could increase staffing at their call centers. Businesses could offer better products and services and reduce the number of people who need customer service. By refusing to do either, they make you wait on the line until you are suffused with murderous rage, and then expect their workers to deal with your anger. Turning the whole thing over to AI makes perfect sense – your problems won't be solved, and they don't have to pay the chatbot at all when you get angry at it:
https://pluralistic.net/2025/08/06/unmerchantable-substitute-goods/#customer-disservice
"We did this with AI" has become a synonym for "We don't care if this is done well":
https://pluralistic.net/2026/03/11/modal-dialog-a-palooza/#autoplay-videos
"We don't care if this is done well" could well be the motto of the understaffing craze. The technical insights that sparked today's AI investment bubble could have happened at any time, but the ensuing investment tsunami is a product of a world dominated by large firms that are "too big to care" about the quality of their products – or their jobs.

The Market Definition Trap https://lpeproject.org/blog/the-market-definition-trap/
On Spec 2026: New Canadian Literature of the Fantastic https://www.kickstarter.com/projects/edwardwillett/on-spec-2026-new-canadian-literature-of-the-fantastic
Day 7: Ticketmaster's "Velvet Hammer" https://www.bigtechontrial.com/p/day-7-ticketmasters-velvet-hammer
From Race to the Bottom to Worker Power on the Road https://economicpopulist.substack.com/p/from-race-to-the-bottom-to-worker
#20yrsago Marvel Comics: stealing our language https://memex.craphound.com/2006/03/18/marvel-comics-stealing-our-language/
#20yrsago MPAA/RIAA/BSA: No breaking DRM, even if it’s killing you (literally!) https://blog.citp.princeton.edu/2006/03/08/riaa-says-future-drm-might-threaten-critical-infrastructure-and-potentially-endanger-liv/
#20yrsago Coping with plenty – stuff gets cheaper, space gets pricier https://www.theguardian.com/business/2006/feb/28/retail.shopping
#20yrsago France will let Microsoft play iTunes http://news.bbc.co.uk/2/hi/technology/4828296.stm
#20yrsago A new discipline to describe the copyfight https://web.archive.org/web/20060422010702/https://www.nyu.edu/classes/siva/archives/002930.html
#20yrsago Right-wing think-tank hates DRM https://www.cato.org/policy-analysis/circumventing-competition-perverse-consequences-digital-millennium-copyright-act#
#20yrsago Reasons to take math in high school https://web.archive.org/web/20060610134055/http://www.acm.org/ubiquity/views/v7i11_math.html
#20yrsago Sun ships free and open microprocessor https://web.archive.org/web/20060221112756/http://opensparc.sunsource.net/nonav/index.html
#20yrsago Octavia Butler scholarship will send people of color to Clarion https://web.archive.org/web/20060406161412/https://carlbrandon.org/butlerscholarship/
#20yrsago Online sexual material is obscene if any community in US objects https://web.archive.org/web/20060505232346/http://www.justicemag.com/daily/item/2590.html
#15yrsago Folk models of home computer security: what we think our PCs are doing https://rickwash.com/papers/rwash-homesec-soups10-final.pdf
#15yrsago Fixers’ Collective: people learning to make broken stuff work again https://www.csmonitor.com/The-Culture/Arts/2011/0321/The-art-of-the-fix-it
#15yrsago Bug-eyed monster steampunk mask https://bob-basset.livejournal.com/158400.html
#15yrsago Scholars to stop pretending they don’t use Wikipedia; will work out best practices instead https://www.bbc.com/news/education-12809944
#15yrsago Electronic publishing Bingo card from John Scalzi https://whatever.scalzi.com/2011/03/20/the-electronic-publishing-bingo-card/
#15yrsago RIP, Mike Glicksohn, Hugo-winning science fiction fan https://file770.com/mike-glicksohn-1946-2011/
#15yrsago Anti-labor ads celebrate workers taking paycuts and CEOs getting millions https://www.cogdis.me/2011/03/is-this-what-they-really-want.html
#15yrsago Reluctant witness refuses to admit he knows what a photocopier is https://www.cleveland.com/metro/2011/03/identifying_photocopy_machine.html
#15yrsago Tim Wu in the Guardian https://www.theguardian.com/technology/2011/mar/17/the-master-switch-tim-wu-internet
#15yrsago Up Against It: smart, whiz-bang space opera pits astro-bureaucrats against rogue AIs https://memex.craphound.com/2011/03/18/up-against-it-smart-whiz-bang-space-opera-pits-astro-bureaucrats-against-rogue-ais/
#10yrsago Howto: start a fire with a lemon https://www.youtube.com/watch?v=Bv2vT665bGI
#10yrsago First order of business for hard-right government: canceling Croatia’s answer to The Daily Show https://balkaninsight.com/2016/03/17/satiric-show-pulled-from-croatian-tv-for-intolerance-03-17-2016/bi/all-balkan-countries/
#10yrsago FBI issues car-hacking warning, tells drivers to keep their cars’ patch-levels current https://www.wired.com/2016/03/fbi-warns-car-hacking-real-risk/
#10yrsago BART’s twitter manager drops truth-bombs, world cheers https://gizmodo.com/i-would-like-to-buy-a-drink-for-the-poor-soul-who-ran-t-1765477706
#10yrsago Chelsea Manning gets the US Army to cough up its “insider threat” training docs https://www.theguardian.com/commentisfree/2016/mar/18/government-persecuting-whistleblowers-insider-threat-chelsea-manning
#10yrsago Apple engineers quietly discuss refusing to create the FBI’s backdoor https://www.nytimes.com/2016/03/18/technology/apple-encryption-engineers-if-ordered-to-unlock-iphone-might-resist.html
#10yrsago Russia moots ban on discussions about VPNs, reverse proxies, and other anti-censorship techniques https://torrentfreak.com/copyright-holders-want-site-block-circumvention-advice-banned-160319/
#10yrsago Medusa’s Web: Tim Powers is the Philip K Dick of our age https://memex.craphound.com/2016/03/18/medusas-web-tim-powers-is-the-philip-k-dick-of-our-age/
#10yrsago Meet the Commercial Energy Working Group, a lobby group that won’t say who it lobbies for https://web.archive.org/web/20160320150011/https://theintercept.com/2016/03/20/mysterious-powerful-lobbying-group-wont-even-say-who-its-lobbying-for/
#5yrsago Support Amazon workers today https://pluralistic.net/2021/03/20/against-amazon-union-busting/#what-rhymes-with-bezos
#5yrsago Department of Truth https://pluralistic.net/2021/03/20/against-amazon-union-busting/#dot
#5yrsago The political possibility of cities https://pluralistic.net/2021/03/21/ex-urbe/#arcology-politics
#5yrsago Aviation bailout cost $666k/job https://pluralistic.net/2021/03/18/news-worthy/#aa
#5yrsago Impunity for NYPD cops who brutalized BLM protesters https://pluralistic.net/2021/03/18/news-worthy/#nypd-black-and-blue
#5yrsago Help news, not news-barons https://pluralistic.net/2021/03/18/news-worthy/#big-news
#5yrsago Announcing "The Shakedown" https://pluralistic.net/2021/03/19/the-shakedown/#monopsony
#5yrsago Chickenized reverse-centaurs https://pluralistic.net/2021/03/19/the-shakedown/#weird-flex
#1yrago You can't save an institution by betraying its mission https://pluralistic.net/2025/03/19/selling-out/#destroy-the-village-to-save-it
#1yrago AI can't do your job https://pluralistic.net/2025/03/18/asbestos-in-the-walls/#government-by-spicy-autocomplete
#1yrago Ray Nayler's "Where the Axe Is Buried" https://pluralistic.net/2025/03/20/birchpunk/#cyberspace-is-everting

Montreal: Bronfman Lecture (McGill), Apr 10
https://www.eventbrite.ca/e/artificial-intelligence-the-ultimate-disrupter-tickets-1982706623885
Montreal: Drawn and Quarterly, Apr 10
https://mtl.drawnandquarterly.com/events/4863920260410
London: Resisting Big Tech Empires (LSBU), Apr 25
https://www.tickettailor.com/events/globaljusticenow/2042691
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
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/
Tanner Humanities Lecture (U Utah)
https://www.youtube.com/watch?v=i6Yf1nSyekI
"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 (1034 words today, 54661 total)
"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):
https://doctorow.medium.com/
https://twitter.com/doctorow
Tumblr (mass-scale, unrestricted, third-party surveillance and advertising):
https://mostlysignssomeportents.tumblr.com/tagged/pluralistic
"When life gives you SARS, you make sarsaparilla" -Joey "Accordion Guy" DeVilla
READ CAREFULLY: By reading this, you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies ("BOGUS AGREEMENTS") that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.
ISSN: 3066-764X
Russ Allbery: Review: Dark Class [Planet Debian]
Review: Dark Class, by Michelle Diener
| Series: | Class 5 #5 |
| Publisher: | Eclipse |
| Copyright: | 2022 |
| ISBN: | 0-6454658-2-8 |
| Format: | Kindle |
| Pages: | 349 |
Dark Class is the fifth novel (not counting the skippable novella) in Michelle Diener's Class 5 romantic science fiction series. As with the previous novels, this follows romance series conventions: There are new protagonists, but characters from the previous books make an appearance. It's helpful but not that necessary to remember the details of the previous books; the necessary background is explained enough to follow the story.
By now, series readers know the formula. Yet another Earth woman was secretly abducted by the Tecran, encounters a Class 5 ship, and finds a way to be surprisingly dangerous and politically destabilizing. This time, Ellie has been mostly unconscious since her abduction and awakes in a secret Tecran base after the Tecran have all been murdered. There is a Class 5 AI involved, but not a full ship; instead, Dark Class picks up (or, arguably, manufactures) a loose end from Dark Minds. Other than that break from the formula, you know what to expected by now: a hunky Grih, a tricky political standoff, a protective Class 5, a slow-burn romance, and a surprisingly capable protagonist who upends politics through plucky grit and refusal to tolerate poor treatment. Oh, and a new selection of salvaged clothing and weapons to make Ellie beautiful and surprisingly dangerous.
If you are this far into the series, you probably like the formula. That's my position. I don't care about the romance, but something about the prisoner to threat evolution of the kidnapped protagonists and the growing friendship with an AI makes me happy. This is not great literature, but it is reliably entertaining with a guaranteed victorious protagonist and happy ending, making it a comfortable break from more difficult books with emotionally wrenching scenes.
Dark Class is one of the better executions of the formula because it has long stretches of my favorite parts of these books: exploration of mostly-abandoned surroundings for neat gadgets while the AI and the protagonist slowly build a relationship of mutual respect. This book has bonus drones with minds of their own and an enigmatic alien spaceship that provides a fun mid-novel twist. The Tecran and the Grih repeatedly underestimate Ellie and are caught by surprise at dramatically satisfying moments. It's just fun to read, and I save this series for when I need that type of book.
As with the other books of the series, Diener's writing is serviceable but not great. She repeats herself, uses way too many paragraph breaks for emphasis, and is not going to win any literary awards for prose quality. The series is in the upper half of self-published works, and I've certainly read worse, but either the formula will click with you or it won't. If it doesn't, the prose is not going to salvage the book.
There is some development of the series plot, but it's mostly predictable fallout from Dark Matters. This book is mostly tactical and smaller in scale. I am a little curious where Diener is going with political developments, since the accumulated Earth women and Class 5 ships are in some danger of becoming a sort of shadow government through sheer military power, but I'm dubious this series will have enough political sophistication to dig into the implications. It's best enjoyed as small-scale episodic wish fulfillment for female protagonists, and that's good enough for me.
If you've read this far in the series, recommended; this is one of the stronger entries.
Followed by Collision Course, which breaks the title convention for the series.
Rating: 7 out of 10
Urgent: Block deployment of U.S. ground troops in Iran [Richard Stallman's Political Notes]
US citizens: phone your congresscritter and call on per to support an Emergency War Powers Resolution to block the deployment of U.S. ground troops in Iran — and vote NO on any bill for conscription.
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: Do not let polluters off the hook [Richard Stallman's Political Notes]
US citizens: call on Congress not to let polluters off the hook for climate damage.
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: Refuse to fund bully's war [Richard Stallman's Political Notes]
US citizens: call on Democrats in Congress to refuse to fund the bully's illegal 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: Block bully's machine-learning-powered surveillance [Richard Stallman's Political Notes]
US citizens: call on Congress to block the bully's machine-learning-powered warrantless surveillance of Americans.
We must support this by blocking the collection of data about us. We can do so by refusing to give our names, addresses or other personal data when we pay for products or transportation.
At 73 years of age, with arthritis in the knees, I have multiple justifications for getting a discount card for the Boston buses and subways. I reject it because that card would identify me whenever I use it to travel. We must not surrender to massive surveillance for the sake of convenience!
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: Investigate corrupter's profit from presidency [Richard Stallman's Political Notes]
US citizens: call on your members of Congress to investigate the corrupter's $1.4 billion profit from the presidency.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Comment to reject corrupter's attacks on diversity, immigrants and nonprofits [Richard Stallman's Political Notes]
US citizens: submit an official comment to reject the corrupter's attacks on diversity, immigrants, and nonprofits.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
Urgent: Censure Republicans who called f or violence against American Muslims [Richard Stallman's Political Notes]
US citizens: call on Congress to censure Republicans who called for violence against American Muslims, and for taking away their committee seats.
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: Support Equal Tax Act [Richard Stallman's Political Notes]
US citizens: call on your senators to support the Equal Tax Act.
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 students from retaliation for protesting deportation thugs [Richard Stallman's Political Notes]
US citizens: call on your state education leaders to protect Students from federal retaliation for protesting deportation thugs.
See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.
County in Florida replaced some bus routes [Richard Stallman's Political Notes]
A county in Florida has replaced some bus routes with an ULU system (Unjust Like Uber) that requires an individual user to make a request via a snoop-phone.
Urgent: Stop war-lover from sending American troops into Iran [Richard Stallman's Political Notes]
US citizens: call your members of Congress to stop the war-lover from sending American troops into Iran – And Vote NO on the Draft!
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.
Waiting 1,088 days for rape case to reach court [Richard Stallman's Political Notes]
*MP [Charlotte Nichols] tells Commons she waited 1,088 days for her rape case to reach court.
[Nonetheless,] Charlotte Nichols opposes plan to cut jury trials in England and Wales and calls [instead] for creation of special courts to hear rape cases.*
I basically agree with her: prosecuting crime is vital and so is the right to a trial by jury. There is no fundamental conflict between them — all that's needed is to tax the rich enough to pay for these and the other things that even non-rich people deserve.
Urgent: Stop $10 billion scam to fund Board of Peace [Richard Stallman's Political Notes]
US citizens: call on your members of Congress to block the $10 billion scam to fund the corrupter's Orwellian Board of Peace.
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.
(satire) Addition of Ballroom to Air Force One [Richard Stallman's Political Notes]
(satire) [The nincompoop] *Defends Addition Of Ballroom To Air Force One.*
Interesting analysis of differences between generations [Richard Stallman's Political Notes]
An interesting analysis of differences between generations. For instances, the differences in attitudes nowadays are much less than in the past, but marketing makes them look bigger than they are.
It is unfortunate for me that hitchhiking has ceased. There are times when I have no way to get anywhere except to beg, such as when the bus over the Golden Gate Bridge rejected me as a passenger because I had the luggage that I had taken on a flight.
I don't feel danger in getting into a stranger's car; by contrast, the potential danger in a proprietary surveillance system (for example, Guber) is intolerable. The probability that the driver would do wrong to me is minuscule, but the probability that the proprietary surveillance system would do wrong to many passengers is quite large.
Thatcher's greatest achievement [Richard Stallman's Political Notes]
Thatcher said that the "New Labour" of Tony B'liar was her greatest achievement — shifting the Labour Party to put business and rich people first. A Labour MP describes the major changes needed to restore democracy and give priority and political power to the people.
White South Africans myth of reversed racism [Richard Stallman's Political Notes]
White South Africans have spread a myth that ending apartheid led to a reversed system of racism against them, that blacks hated and persecuted whites much as white racists in power had formerly hated and persecuted blacks. Right-wing extremists have propagated this falsehood to justify the cause of continuing or bringing back racism.
The article linked to just above displays symbolic bigotry by capitalizing "black" but not "white". (To avoid endorsing bigotry, capitalize both words or neither one.) I denounce bigotry, and normally I will not link to articles that practice it. But I make exceptions for some articles because I consider their information important — and I present this comment about them.
Germany's right-wing government [Richard Stallman's Political Notes]
Germany's current government is right-wing, and competing not to let the extreme right-wing outdo it in wrongdoing. It intervened in the prize for best independent bookstore by arbitrarily excluding some candidate bookstores. It refused to give any explanation, but it may be because they are antifascist.
Black people more likely to be searched in rich areas of London [Richard Stallman's Political Notes]
*In richest areas of London, black people up to 48 times more likely to be stopped and searched [than other people].*
It is hard to be sure why cops' behavior is prejudiced in this way, but the tendency to search people because of perceiving them as making "furtive glances" suggests that unconscious racism is at work. Suspecting someone because of a vague impression is exactly the sort of thing that gives unconscious prejudice an opportunity to influence the decision.
Fears for women's rights in Chile [Richard Stallman's Political Notes]
*Fears for women's rights in Chile as anti-abortion president set to take office.*
The new president is literally a fascist — a supporter of the coup-leader Pinochet, who in power was a murderous dictator.
I wonder how he managed to win the election. Was it stolen?
Values of right-wing politics [Richard Stallman's Political Notes]
The values of right-wing politics, based on dominating other people, have led to pressure on men to make their faces meet an imposed idea of what looks powerful.
The wellness-influencer axis plays a part as well.
North Korean agents hired for remote work [Richard Stallman's Political Notes]
North Korean agents are getting hired for remote work under fake identities by using Pretend Intelligence to disguise their appearance and voice.
Adam Smith never held "free" market ideology [Richard Stallman's Political Notes]
Adam Smith never held the "free" market ideology that its supporters claim he held. He endorsed many of the progressive causes we stand for, such as making the rich pay more taxes.
RFK jr quietly drops idea of terminating Covid-19 vaccination [Richard Stallman's Political Notes]
Public opposition has made RFK jr quietly drop the idea of terminating the recommendation for Covid-19 vaccination.
He will continue undermining US public health as long as he is in a position to do so. But it is not only him. Many of the saboteur in chief's appointed henchmen seem to have been chosen for their inclination to cause chaos; he seems to think that their chaos will open the door for him to destroy more of the institutions that protect the Constitution, human rights, and democracy.
Corruptor's favorite methods of fomenting corruption [Richard Stallman's Political Notes]
One of the corrupter's favorite methods of fomenting corruption that can bring him extra income is by firing the inspectors general of various agencies.
Exploitative career of "influencer" [Richard Stallman's Political Notes]
The exploitative career of "influencer" is based on deluding suckers into spending money on artificially enhanced alluring dreams.
Knowing this, you can easily refuse to contribute any of your own attention to their "attention economy."
El Salvador's democracy eliminated [Richard Stallman's Political Notes]
Bukele has eliminated El Salvador's gang violence, and El Salvador's democracy with it, replacing it with arbitrary imprisonment and torture.
Badly designed studies on effects of vaccine [Richard Stallman's Political Notes]
Researchers doing badly designed studies on vaccine effects in Guinea-Bissau are connected with some of RFK jr's vaccination sabotage team, and some fear that they will try to impose policy based on badly designed studies in the US too.
Australia arrested and charged protesters [Richard Stallman's Political Notes]
Australia has arrested and charged protesters for saying the words, "From the river to the sea." One was arrested for giving an explanation of what the phrase refers to and history of its use.
Failure to limit global heating [Richard Stallman's Political Notes]
*The failure to limit global heating to 1.5C is a "moral failure and deadly negligence," the UN secretary general [said] at the opening session of the COP30 climate summit.*
Alas, COP30 proceeded to (in effect) abandon that goal, which many countries had abandoned already in the preceding year.
The causes of that abandonment are not visible, but I suspect the impetus comes from billionaires who are sucking up to governments that are more or less fascist and in cahoots with the fossil fuel companies.
One of them is Bill Gates, who has called for offering palliative care to the billions of poor who will be wiped over coming decades by accelerating global heating.
By the way, I do not endorse the straw man claim that global heating could literally render humanity extinct. Humans, even without science and the technology it led to, were very flexible about surviving in a wide range of environments. But the number who could survive would be far less than today.
Girl Genius for Monday, March 23, 2026 [Girl Genius]
The Girl Genius comic for Monday, March 23, 2026 has been posted.
Waking Up, p03 [Ctrl+Alt+Del Comic]
The post Waking Up, p03 appeared first on Ctrl+Alt+Del Comic.
Gone But Not Forgotten [QC RSS]

Emily is my wife's favourite character so this story is basically a little present for her (and possibly...for you???)
[Filler] Cut Panels: Broken Table [Twokinds]
Comic for March 22, 2026
Vincent Bernat: Calculate “1/(40rods/hogshead) → L/100km” from your Zsh prompt [Planet Debian]
I often need a quick calculation or a unit conversion. Rather
than reaching for a separate tool, a few lines of Zsh
configuration turn = into a calculator. Typing =
660km / (2/3)c * 2 -> ms gives me 6.60457
ms1 without
leaving my terminal, thanks to the Zsh line editor.
The main idea looks simple: define = as an alias to
a calculator command. I prefer
Numbat, a scientific calculator that supports unit conversions.
Qalculate is a
close second.2 If neither is
available, we fall back to Zsh’s built-in zcalc
module.
As the alias built-in uses = as a
separator for name and value, we need to alter the
aliases associative array:
if (( $+commands[numbat] )); then aliases[=]='numbat -e' elif (( $+commands[qalc] )); then aliases[=]='qalc' else autoload -Uz zcalc aliases[=]='zcalc -f -e' fi
With this in place, = 847/11 becomes numbat
-e 847/11.
The first problem surfaces quickly. Typing = 5 * 3
fails: Zsh expands the * character as a glob pattern
before passing it to the calculator. The same issue applies to
other characters that Zsh treats specially, such as
> or |. You must quote the
expression:
$ = '5 * 3' 15
We fix this by hooking into the Zsh line editor to quote the expression before executing it.
Zsh calls the accept-line widget when you submit a
command. We replace it with a function that detects the
= prefix and quotes the expression:
_vbe_calc_accept() { case $BUFFER in "="*) typeset -g _vbe_calc_expr=$BUFFER # not used yet BUFFER="= ${(q-)${${BUFFER#=}# }}" ;; esac zle .accept-line } zle -N accept-line _vbe_calc_accept
When you type = 5 * 3 and press ↲,
_vbe_calc_accept strips the = prefix,
quotes the remainder with the (q-) parameter expansion
flag, and rewrites the buffer to = '5 * 3' before
invoking the original .accept-line widget. As a bonus,
you can save a few keystrokes with =5*3! 🚀
You can now compute math expressions and convert units directly from your shell. Zsh automatically quotes your expressions:
$ = '1 + 2' 3 $ = 'pi/3 + pi |> cos' -0.5 $ = '17 USD -> EUR' 14.7122 € $ = '180*500mg -> g' 90 g $ = '5 gigabytes / (2 minutes + 17 seconds) -> megabits/s' 291.971 Mbit/s $ = 'now() -> tz("Asia/Tokyo")' 2026-03-22 22:00:03 JST (UTC +09), Asia/Tokyo $ = '1 / (40 rods / hogshead) -> L / 100km' 118548 × 0.01 l/km

As is, Zsh records the quoted expression in history. You must unquote it before submitting it again. Otherwise, the ZLE widget quotes it a second time. Bart Schaefer provided a solution to store the original version:
_vbe_calc_history() { return ${+_vbe_calc_expr} } add-zsh-hook zshaddhistory _vbe_calc_history _vbe_calc_preexec() { (( ${+_vbe_calc_expr} )) && print -s $_vbe_calc_expr unset _vbe_calc_expr return 0 } add-zsh-hook preexec _vbe_calc_preexec
The zshaddhistory hook returns 1 if we are
evaluating an expression, telling Zsh not to record the
command. The preexec hook then adds the original,
unquoted command with print -s.
The complete code is available in my
zshrc. A common alternative is the noglob precommand
modifier. If you stick with to instead of
-> for unit conversion, it covers 90% of use cases.
For a related Zsh line editor trick, see how I use auto-expanding aliases to
fix common typos.
This is the fastest a packet can travel back and forth between Paris and Marseille over optical fiber. ↩︎
Qalculate is less understanding with units. For example, it parses “Mbps” as megabarn per picosecond: ☢️
$ numbat -e '5 MB/s -> Mbps' 40 Mbps $ qalc 5 MB/s to Mbps 5 megabytes/second = 0.000005 B/ps
A bit of history. Read this post
from 20 years ago by Phil Jones. That's what I was trying to do
back then, just as Twitter came online. I didn't know it then but
was the moment when the web stopped growing. When the VCs took
over, and monetized the hell out of it. What we got in the end was
Trump and Musk. We would have been smart, as a civilization, to
hedge against the monopolies. If we get another chance what are we
going to do with it? Will we work together this time? It's worth
one more shot. My comments on the Jones piece in 2006
and 2026.
“Cheaper not to care” [Seth's Blog]
This is the slogan of so many industrial behemoths and existing bureaucracies.
It’s in quotation marks for a reason: it’s not true. Not in the long run, not even in the medium run.
One way to highlight the hollowness of this edict is to say it out loud.
For a while, it might make the stock price go up. But it doesn’t last. It never does.
Jonathan Dowland: Ladytron [Planet Debian]

I saw Ladytron perform in Digital, Newcastle last night. The last time I saw them was, I think, at the same venue, 18 years ago. Time flies!
Back in the day (perhaps their heyday, perhaps not!) Ladytron ploughed a particular sonic furrow and did it very well. Going into the gig I had set my expectations that, should they play just these hits, I'd have a good time.
The gig exceeded my expectations. The setlist very much did not lean into their best-known period: the more recent few albums were very well represented and to me this felt very confident. The lead singer, Helen Marnie, demonstrated some excellent range, particularly on some of the new songs. Daniel Hunt did a lot of backing vocals and they were really complementary to Helen's: underscoring but not overpowering. I enjoyed nerding out watching Mira Ayoro's excellent wrangling of her Korg MS-20. One highlight was an encore performance of Light & Magic, which was arguably the "alternate version" as available on the expanded versions of that album or the Remixed and Rare companion.
I thought I'd try to put together a 5-track playlist for a friend who attended the gig but isn't super familiar with them. As usual this is hard. I'm going to avoid the obvious hits, try to represent their whole career and try to ensure the current trio each get a vocal turn in the selection.
They actually released their latest album, Paradises, yesterday as well. One track from it is in the list below.
I'm Not Scared by Ladytron Kingdom Undersea by Ladytron Blue Jeans by Ladytron He took her to a movie by Ladytron Transparent Days by Ladytron(If you can't see anything, the bandcamp embeds have been stripped out by whatever you are viewing this with)
Andy
Baio noted
that it was 20 years ago today that Jack
Dorsey posted his first
tweet. He also noted it was the day that Ze
Frank did his first YouTube video. It got me looking around my
own world to see what happened on Mar 21, 2006. Nothing
earth shaking but it was interesting piece written by Phil
Jones on how everyone watched me all the time and they were all
trying to figure out what I do. Fact: At the time I was trying to
make OPML grow big like RSS had, but it didn't happen. The big
concept was the World
Outline that would be an open directory where everyone created
browsable outlines that linked to their own outlines and others, in
a completely fluid way. In order to be something it had to catch
on, and it didn't. In the intervening twenty years, I tried it
again and again to start a technology party like blogging and
podcasting, viral viralities -- but nothing stuck. I came close
once, with Twittergram,
but I didn't want to run a company, I wanted to keep developing
software. Sold it to Betaworks,
but they never marketed it. Instead I helped them launch bit.ly and had
a blast doing that. I love doing PR. Anyway I guess I got lazy. And
I wasn't building on the web any longer. Instead I was trying to
fit in between Twitter and Facebook mostly. Now I'm getting ready,
much older and more tired, but wiser -- to go back to roots, to use
WordPress as my blogging platform, as if it were Frontier -- and
see what we can build out of the web and if it'll stick. That's why
I'm so relentless at getting people to play with me. It's the same
damn thing Phil Jones describes. And OPML is going to be a big
part, yet again -- only this time playing a vastly different role,
with lists of feed locations on the web. If it works we will call
it the feediverse.
Even if it doesn't work. ;-)
Matthew Garrett: SSH certificates and git signing [Planet Debian]

When you’re looking at source code it can be helpful to have some evidence indicating who wrote it. Author tags give a surface level indication, but it turns out you can just lie and if someone isn’t paying attention when merging stuff there’s certainly a risk that a commit could be merged with an author field that doesn’t represent reality. Account compromise can make this even worse - a PR being opened by a compromised user is going to be hard to distinguish from the authentic user. In a world where supply chain security is an increasing concern, it’s easy to understand why people would want more evidence that code was actually written by the person it’s attributed to.
git has support for cryptographically signing commits and tags. Because git is about choice even if Linux isn’t, you can do this signing with OpenPGP keys, X.509 certificates, or SSH keys. You’re probably going to be unsurprised about my feelings around OpenPGP and the web of trust, and X.509 certificates are an absolute nightmare. That leaves SSH keys, but bare cryptographic keys aren’t terribly helpful in isolation - you need some way to make a determination about which keys you trust. If you’re using someting like GitHub you can extract that information from the set of keys associated with a user account1, but that means that a compromised GitHub account is now also a way to alter the set of trusted keys and also when was the last time you audited your keys and how certain are you that every trusted key there is still 100% under your control? Surely there’s a better way.
And, thankfully, there is. OpenSSH supports certificates, an SSH public key that’s been signed by some trusted party and so now you can assert that it’s trustworthy in some form. SSH Certificates also contain metadata in the form of Principals, a list of identities that the trusted party included in the certificate. These might simply be usernames, but they might also provide information about group membership. There’s also, unsurprisingly, native support in SSH for forwarding them (using the agent forwarding protocol), so you can keep your keys on your local system, ssh into your actual dev system, and have access to them without any additional complexity.
And, wonderfully, you can use them in git! Let’s find out how.
There’s two main parameters you need to set. First,
|
|
because unfortunately for historical reasons all the git signing
config is under the gpg namespace even if you’re
not using OpenPGP. Yes, this makes me sad. But you’re also
going to need something else. Either user.signingkey
needs to be set to the path of your certificate, or you need to set
gpg.ssh.defaultKeyCommand to a command that will talk
to an SSH agent and find the certificate for you (this can be
helpful if it’s stored on a smartcard or something rather
than on disk). Thankfully for you, I’ve written one. It will talk to an SSH agent
(either whatever’s pointed at by the
SSH_AUTH_SOCK environment variable or with the
-agent argument), find a certificate signed with the
key provided with the -ca argument, and then pass that
back to git. Now you can simply pass -S to git
commit and various other commands, and you’ll have a
signature.
This is a bit more annoying. Using native git tooling ends up
calling out to ssh-keygen2,
which validates signatures against a file in a format that looks
somewhat like authorized-keys. This lets you add
something like:
|
|
which will match all principals (the wildcard) and succeed if the signature is made with a certificate that’s signed by the key following cert-authority. I recommend you don’t read the code that does this in git because I made that mistake myself, but it does work. Unfortunately it doesn’t provide a lot of granularity around things like “Does the certificate need to be valid at this specific time” and “Should the user only be able to modify specific files” and that kind of thing, but also if you’re using GitHub or GitLab you wouldn’t need to do this at all because they’ll just do this magically and put a “verified” tag against anything with a valid signature, right?
Haha. No.
Unfortunately while both GitHub and GitLab support using SSH
certificates for authentication (so a user can’t push to a
repo unless they have a certificate signed by the configured CA),
there’s currently no way to say “Trust all commits with
an SSH certificate signed by this CA”. I am unclear on why.
So, I wrote my own. It takes a range of commits, and
verifies that each one is signed with either a certificate signed
by the key in CA_PUB_KEY or (optionally) an OpenPGP
key provided in ALLOWED_PGP_KEYS. Why OpenPGP? Because
even if you sign all of your own commits with an SSH certificate,
anyone using the API or web interface will end up with their
commits signed by an OpenPGP key, and if you want to have those
commits validate you’ll need to handle that.
In any case, this should be easy enough to integrate into whatever CI pipeline you have. This is currently very much a proof of concept and I wouldn’t recommend deploying it anywhere, but I am interested in merging support for additional policy around things like expiry dates or group membership.
Of course, certificates don’t buy you any additional security if an attacker is able to steal your private key material - they can steal the certificate at the same time. This can be avoided on almost all modern hardware by storing the private key in a separate cryptographic coprocessor - a Trusted Platform Module on PCs, or the Secure Enclave on Macs. If you’re on a Mac then Secretive has been around for some time, but things are a little harder on Windows and Linux - there’s various things you can do with PKCS#11 but you’ll hate yourself even more than you’ll hate me for suggesting it in the first place, and there’s ssh-tpm-agent except it’s Linux only and quite tied to Linux.
So, obviously, I wrote my own. This makes use of the go-attestation library my team at Google wrote, and is able to generate TPM-backed keys and export them over the SSH agent protocol. It’s also able to proxy requests back to an existing agent, so you can just have it take care of your TPM-backed keys and continue using your existing agent for everything else. In theory it should also work on Windows3 but this is all in preparation for a talk I only found out I was giving about two weeks beforehand, so I haven’t actually had time to test anything other than that it builds.
And, delightfully, because the agent protocol doesn’t care about where the keys are actually stored, this still works just fine with forwarding - you can ssh into a remote system and sign something using a private key that’s stored in your local TPM or Secure Enclave. Remote use can be as transparent as local use.
Ah yes you may be wondering why I’m using go-attestation and why the term “attestation” is in my agent’s name. It’s because when I’m generating the key I’m also generating all the artifacts required to prove that the key was generated on a particular TPM. I haven’t actually implemented the other end of that yet, but if implemented this would allow you to verify that a key was generated in hardware before you issue it with an SSH certificate - and in an age of agentic bots accidentally exfiltrating whatever they find on disk, that gives you a lot more confidence that a commit was signed on hardware you own.
Using SSH certificates for git commit signing is great - the tooling is a bit rough but otherwise they’re basically better than every other alternative, and also if you already have infrastructure for issuing SSH certificates then you can just reuse it4 and everyone wins.
Did you know you can just download people’s SSH pubkeys
from github from
https://github.com/<username>.keys? Now you
do ↩︎
Yes it is somewhat confusing that the keygen
command does things other than generate keys ↩︎
This is more difficult than it sounds ↩︎
And if you don’t, by implementing this you now have infrastructure for issuing SSH certificates and can use that for SSH authentication as well. ↩︎
Ravi Dwivedi: Vietnam Trip [Planet Debian]
Continuing from the last post, Badri and I took a flight from the Brunei International Airport to Kuala Lumpur on the 12th of December 2024. We reached Kuala Lumpur in the evening.
After arriving at the airport, we went through immigration. In a previous post, I mentioned that we had put our stuff in lockers at the TBS bus terminal in Kuala Lumpur. Therefore, we had to go there.
The locker was automated and required us to enter the PIN we had set. Upon entering the PIN, the locker wasn’t getting unlocked. After trying this for 10-15 minutes without any luck, we tried getting some help as there the lockers weren’t under supervision.
So, I roamed around and found a staff member, reporting that our lockers weren’t getting unlocked. They called the person who was in-charge of the lockers. He came to us in a few minutes and used their admin access to open the locker. We were supposed to pay for using the lockers by putting the banknotes inside through a slot. However, as the machine wasn’t working, we gave the amount for the use of our locker service to that person instead.
We soon went back to the KL airport to catch our morning flight to Ho Chi Minh City in Vietnam. At the flight counter, we were afraid we would have to pay extra as our luggage surpassed the allowed weight limit. This one was also a budget airline—AirAsia—and our tickets didn’t include a check-in bag.
Generally, passengers from countries requiring a visa to visit Vietnam (such as India) require going to the airline and showing their visa to get the boarding pass. However, when we went to the AirAsia counter at the Kuala Lumpur airport, they didn’t weigh our bags and asked us to get our boarding passes from an automated kiosk. So, we got our boarding passes printed and proceeded to the airport security.
While clearing the airport security, a lotion I bought from Singapore was confiscated because it was 200 mL, exceeding the limit of 100 mL per bottle. Had that 200 mL liquid been in two different bottles of 100 mL each, I would have been allowed to take it in my carry-on bag, but a single 200 mL bottle wasn’t! I was allowed to keep it in the check-in bag, but I didn’t have it included in my ticket. Huh, airports and their weird rules :( The lotion was an expensive one, so having it thrown away did ruin my mood.
We started our Vietnam trip from Ho Chi Minh City in the south on the 13th of December 2024 and finished it in Hanoi in the north on the 20th of December. We traveled from Ho Chi Minh City to Hanoi mostly by train, except for a hundred or so kilometers by bus, in chunks. On the way, we visited Nha Trang, Hoi An, and Hue. The distance between Ho Chi Minh City and Hanoi is 1700 km.
For your reference, here are those places labeled on Vietnam’s map.
A map of Vietnam with points of places we went to labeled. ©CARTO ©MAPTILER ©OPENSTREETMAP
We landed in Ho Chi Minh City early morning on the 13th of December 2024. I was tired and sleepy as I hadn’t gotten a good night’s sleep. After going through immigration, we went to a currency exchange counter to get Vietnamese Dong. Unlike other countries on this trip, money exchange counters in Vietnam didn’t accept Indian rupees. Therefore, we exchanged euros to get Vietnamese dong at the airport.
After getting out of the airport, we took a bus to the city center. It was 15,000 dongs—approximately 50 Indian rupees. Our plan was to meet Badri’s friend and stay the night at his apartment.
So we went to a café nearby and bought a coffee for each of us for 75,000 dongs. We went upstairs and sat for a while. The Wi-Fi password was mentioned on our bill. During the trip, I found out about the café culture of Vietnam. They have their own coffee brands (such as Highlands Coffee), and you can sit down at any of the cafés for work or wait for the rain to stop. It rained a lot while we were there, so we did use these cafés for that purpose.
Badri’s friend met us there, and we roamed around the area a bit, which included roaming inside a beautiful park. Then Badri’s friend took us to a restaurant. Because I do not eat meat, he took us to a vegan restaurant. Having been to four Southeast Asian countries at this point (excluding Vietnam), I was under the impression that there wouldn’t be a lot of things for my diet in Vietnam.
A picture of the park we roamed around in Ho Chi Minh City. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
However, I was pleasantly surprised at the restaurant. I found all the dishes to be tasty, especially their signature noodles called Pho. I liked another dish so much that I tracked down the restaurant again with Badri using the geotagged image of the bill I had taken earler to have it again. As a tip for vegans coming to Vietnam, the places having the letters “Chay” (without any accented letters) in their name are vegan only.
This is the restaurant Badri’s friend took us to. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. This one was especially tasty. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
These noodles are called Pho and are very popular in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
In the night, we went to a supermarket where I got myself some oranges and guavas. Then, we went to a Japanese restaurant where I didn’t have anything, as there was no vegetarian option available for me. Then we took a free bus to the place to Badri’s friend’s apartment. The construction company that built the apartment also runs this free bus service from their residential area to different parts of the city as a way of promoting their apartments. Anyone can take the bus, not just residents.
The next day, we took the free bus back to the city center and checked in to a hostel for a night. We took two beds in dormitories, which were 88,000 dongs (270 rupees) for each bed for a night. In Vietnam, if you can spend around 300 rupees per night, you can get a bed in a decent hostel.
On the night of the 15th of December 2024, we boarded a train from Ho Chi Minh City to Nha Trang. The ticket for each of us was 519,000 dongs (1600 Indian rupees). The train name was SNT2. When we reached the Ho Chi Minh City train station, we noticed that the station was rather small by Indian standards.
After entering the train station, we went inside to the first platform, where the tickets were checked by a staff member. Ho Chi Minh City was the originating station for our train, so our train was already standing at the station. We had to cross the railway tracks on foot to reach the platform our train was on. Then we located our coach, where a ticket inspector was standing at the gate. He let us in after checking our tickets. In all these instances, we just had to show our digital boarding pass which we had received by email.
Unlike Indian trains, the train didn’t have side berths. Additionally, I liked the fact that it had a dedicated space to put our bags in, which was very convenient. The train departed from Ho Chi Minh City at 21:05 and arrived in Nha Trang at 05:30 in the morning.
Interior of our train coach. Trains in Vietnam don’t have side berths, unlike India. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A picture of the berths from our coach. It had three tiers, similar to a 3 AC coach in Indian trains. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The train had a cabin to put the bags in. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang train station. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang is a coastal place, and we planned to go to a beach. We figured out that the bus to the airport goes can drop us near the beach. Therefore, we went to the bus station to get to the airport bus. The bus station was walking distance from the railway station. So, we decided to walk.
On the way, we stopped at a small shop for a coffee. The shop also gave a complimentary cup of green tea along with the coffee. I found out later that it is common for local shops to give a cup of complimentary green tea in Vietnam.
I got a complimentary cup of green tea along with coffee in Nha Trang. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Soon we reached the bus station and took a bus to the beach. It was 65,000 dongs (₹200). After getting down from the bus, I had coconut water and some eggs at a small local place.
Eggs being cooked on a pan for my order. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we went to the beach, but nobody else was there. We spent some time there and went back to the place where the bus dropped us as it started raining. We couldn’t find a bus for some time. A taxi driver approached us and agreed to take us to the city center for 200,000 dongs (₹650). For reference, the place where he dropped us was 35 km from the place we took the taxi. Taxi fares in Vietnam were also cheap!
The beach we went to in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang was a beautiful place, and so we roamed around for a while. Then we stopped at a Highlands Coffee branch for a while. Since Christmas was coming up, the café had a Christmas tree, and I liked the Christmas vibes. They were playing Mariah Carey’s All I Want for Christmas Is You.
This one was shot in the city center. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Inside a Highlands Coffee cafe in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A coffee I got from Highlands Coffee in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
During the evening, we went to a local place to eat. The place mentioned “Chay” in its name, and you know what it means—it was a vegan place. There was a man there and no other customers. I don’t remember the names of the dishes we ordered, but it was a bowl of soupy noodles and a bowl of dry noodles. They were very tasty. To top that off, the meal was a total of 55,000 dongs (₹180) for both of us.
The host was welcoming and friendly. We had a nice conversation with the host. In Vietnam, restaurants give chopsticks to eat noodles. While Badri was good at using them, I wasn’t. So, the host of this restaurant helped me in using chopsticks. Although my technique was not perfect and I take a bit of time, I could now eat solely with chopsticks.
The restaurant we went to in Nha Trang. The word Chay in the name means it was a vegan restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Soupy noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Dry noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Our plan was to take a night bus to Hoi An, and we were hoping to find a bus stand. However, we couldn’t find one. Asking around about the pickup location of the Hoi An bus led us to many different locations. Finally, we ended up at a bus booking agency’s office where we found out that there were no tickets available for Hoi An.
At this point, we gave up on booking the bus and searched for trains instead. As we didn’t have a local SIM, we asked the agency to let us connect to their Wi-Fi so that we could look for trains. They were kind enough to let us do that. It also seemed like they were going to close the office in like 10 minutes.
Unfortunately, all the sleeper berths were booked from Nha Trang till Hoi An on the next train with only seating berths being available. It takes around 10 hours, so I wasn’t comfortable traveling on seating berths.
Here I came up with the idea to look for sleeper berths from an intermediate stop. Fortunately, there were sleeper berths available from the next stop, Ninh Hòa. Therefore, we booked a seating berth from Nha Trang to Ninh Hòa and a sleeper berth from Ninh Hòa to Trà Kiệu (the nearest railway station from Hoi An). The train name was SE6, and it was a total of 500,000 dongs per person (₹1600 per person).
So, we went to the Nha Trang railway station and boarded the train. We had to spend 40 minutes seated for the train to reach the next stop before we could go to our sleeper berths. Badri had some friendly co-passengers on that trip who gave him Saigon beer and some crispy papad-like thing. They offered me as well, but I thought it was non-veg, so I declined it.
On the morning of 17th December 2024, we got down at the Trà Kiệu station at around 09:30. Our hostel was in Hoi An, which was around 22 km from the station. There was no public transport to get there.
Instead, there was a taxi driver at the train platform. We told him the name of our hostel, and he quoted 270,000 dongs (around ₹850). We said it was too expensive for us, so he agreed to bargain at 250,000 dongs. At this point, we told him that we could give him no more than 200,000 dongs, but he didn’t agree.
Badri tried a trick. He asked the driver to show us prices in the Grab app (a popular taxi booking app in Southeast Asia). Unfortunately, the Grab app showed 258,000 dongs, which was more than the fare the driver agreed to.
So we walked away as if we had so many options (we didn’t!) to reach the hostel. We got out of the station and stopped at a small shop outside to have some coffee. As is customary in Vietnam, we got a complimentary green tea here as well.
This was the place we had our coffee in Tra Kieu. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
That taxi driver also joined us and sat in that shop. He started talking with the locals in the shop in the local language. The taxi driver was insistent on taking us to Hoi An for 250,000 dongs. At this point, Badri told the taxi driver (by the use of translation software) that we usually use public transport during our trips, and we aren’t used to paying high prices to get around. So, he can drop us somewhere in Hoi An for 200,000 dongs as we don’t mind walking a bit to reach our hotel.
After reading this, the taxi driver agreed to take us to our hostel for 200,000 dongs (₹660). He also had me take a picture with Badri after this. I think such a bargain tactic would not work in India.
Photo of Badri with taxi driver. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The nice thing we noticed in Vietnam is, once bargaining is done and the deal is settled, people don’t try to bargain more or keep on talking about the subject. Before the deal, the driver was being somewhat insistent and argumentative, but after the deal was done, it was as if no argument had happened at all.
A picture of Tra Kieu area near the train station we got down at. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
We were treated to some beautiful scenery on the way to our hostel. Soon we reached our place and completed all the formalities for checking-in. During the time our room was being prepared for check-in, we had an egg sandwich with coffee in the hotel. I found the egg sandwich very tasty. The bread looked like the French baguette. The hostel was ₹240 per night for each of us.
The name of the hostel was Bana Spa. We liked staying here and we can recommend it if you find yourself there. It is operated by a family.
Our breakfast in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A photo of the hostel we stayed in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
We also rented a bicycle for each of us—25,000 dongs per day (₹80)—and explored the old town during the evening. Hoi An is popular for Vietnamese silk. Tourists come here to buy fabric and get it done by the tailor. The buildings here looked old, and they were painted in yellow with a gabled roof.
Typical yellow house with gabled roof in Hoi An old town. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Here, I also had egg coffee for the first time, and I liked it. Egg coffee is a delicacy of Hanoi, but you can get it in other parts of Vietnam. If you find yourself in Vietnam, then I recommend you try egg coffee. We also bought some cool T-shirts and other souvenirs, such as a Vietnamese hat, from here.
Egg coffee I had in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The next day—the 18th of December 2024—we went to Hue by bus. As we could not take a bus on our own in Nha Trang, we asked the hostel to book it for us this time. We booked it a day before, and they told us to be ready by 07:00 in the morning. At 07:00, a minibus arrived, which took us to a bus agency’s office. There we waited for a few minutes and got into the bus to Hue.
The bus had sleeper seats, so I took the opportunity to catch some sleep. The ride was comfortable, so I am assuming the roads were good. In a couple of hours, we reached Hue. Again, we went to Highlands Coffee to have some coffee, charge our phones, and use the internet, not to mention using the bathrooms.
During the afternoon, we went to a local restaurant named Quán Chay Thanh Liễu. It was a vegan restaurant (remember the thing I mentioned earlier about “Chay” being in the name?). On the way, we had a steamed dumpling shaped like a momo called banh bao from a street vendor. It wasn’t very good, but I found it worthwhile.
Bahn Bao in Hue. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
At the restaurant, we ordered a hot pot. First, they brought noodles and a gas stove. Then came the stock and our gas stove was turned on. The stock was kept simmering on the stove. Then, we had it bit by bit with the noodles. A big hot pot at this place costs 50,000 dongs (₹170). Then we had bánh cuốn. These were steamed rolls made of rice flour for 10,000 dongs (₹33).
Hot Pot. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Added soup to the noodles. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Steamed rolls made of rice flour. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Restaurants in Vietnam usually add photos of the meals in their menu or write a description in English. So, even though the dish names were Vietnamese, we had no problems in ordering food there. In addition, all the places we went to provided free Wi-Fi. They either mention the Wi-Fi password on the bill, on the menu or paste it on the wall. This made our trip smoother without getting a local SIM.
Menu from a restaurant in Ho Chi Minh City with detailed description of the food. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we slowly walked towards the railway station, as we had a night train to Hanoi. We had egg coffee in a cafe. Near the railway station, we had a bánh mì (egg sandwich). As for sightseeing, we had plans to visit a couple of places in Hue, but we ended up spending all our time inside sheltered spaces due to heavy rain.We had booked the train SE20 for Hanoi, which had a departure time of 20:41 from Hue. This one was 948,000 dongs (₹3100) for myself and 870,000 dongs (₹2900) for Badri. My ticket was pricier than Badri’s because I got a lower berth. Our train was late by half an hour, so we waited in the common area of the station. After the train arrived, we got inside and took our seats.
The cabin had four berths—two upper and two lower, similar to India’s First AC class. The ticket inspector came to us and offered us the whole cabin (two additional berths) for 300,000 dongs (₹1,000), which we declined. However, this hinted at the other two seats not being reserved. Eventually, we had the whole cabin to ourselves, as nobody else showed up for the other two berths. It was a 14-hour journey, and I got a good sleep.
Our berths in the train. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
On the morning of the 19th of December 2024, we reached Vietnam’s capital, Hanoi. We had booked a private hotel room for ₹800. It was 1 km from the Hanoi Airport. However, it was pretty far from the railway station. So, we roamed around in the city and went to the hotel in the evening.
First, we walked to a place and had egg coffee with egg sandwiches. Then we went to Hanoi Train Street, which was walking distance from the train station. After clicking some pictures at the train street, we went to a museum nearby. Upon reaching there, we found out that it was closed.
Egg coffee in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hanoi train street is a tourist attraction in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we went shopping for jackets, as Hanoi was cold compared to other parts of Vietnam we had been to, and since many of them are manufactured in Vietnam, we thought they would be cheaper. I liked some jackets, but they were not my size. Eventually, we didn’t buy anything at the clothes shop.
In the evening, I bought a Vietnamese-styled phin coffee filter and coffee powder from Highlands Coffee. We spent a lot of time in their cafes, so it made sense to buy some souvenirs from there. Badri bought a few coffee filters for his family at Trung Nguyen, where I also bought another filter.
We had dinner at a local place where we had pho and banh it. Bahn it was served packed in banana leaves and it was made of sticky rice.
A picture of pho we had in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it is served packed in banana leaves. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Next, we went to Hanoi railway station to catch a bus to the airport since our hotel was 1 km from the airport. The locals there helped us take the bus. It took like an hour to get to the airport. We saw on OpenStreetMap that we can take a bus from there to the hotel, but we could not find it. So we walked to our hotel instead.
It was a decent hotel room for ₹800 for a night. We went outside to explore the area and had egg sandwiches and egg coffee at a local place. Again, we were given a complimentary green tea. We went to this place like three times. We had practically become regulars by the time we left.
The next day— 20th of December 2024 — we took a bus to the airport and boarded our flight to Delhi.
Credits: Thanks Badri, Kishy and Richard for proofreading.
BTW one big advantage Claude has over ChatGPT is the brevity of its name. One syllable vs four.
Steinar H. Gunderson: A286874(16) >= 48 [Planet Debian]

Following up on the previous post, here are some heuristic results:
First, if restricting oneself to 5-uniform values (all values have exactly five bits set), the best 15-bit code one can make is indeed 42 elements, and there are two distinct solutions: {31, 227, 364, 692, 1240, 1577, 1606, 2353, 3008, 3205, 3338, 4434, 4746, 4869, 5536, 6182, 6217, 7696, 8582, 8984, 9266, 9537, 10324, 10408, 10755, 12433, 12896, 13324, 16777, 16977, 17186, 17684, 18578, 18956, 19552, 20536, 20676, 21507, 24613, 24650, 26240, 30976} and {31, 227, 364, 692, 849, 906, 1240, 2354, 3206, 3337, 3680, 4485, 5169, 5442, 5644, 6228, 6312, 6659, 8745, 9285, 9632, 9746, 10314, 10385, 11012, 12326, 12568, 12992, 16966, 17450, 17684, 18049, 18469, 18880, 18968, 20553, 20626, 21280, 24688, 24716, 24835, 31744}. This supports, but does not prove, the conjecture that A286874(15) = 42.
Second, A286874(16) >= 48 (the best previously known bound was 45), since this is a valid 48-element solution:
0000000000011111 0000000011100011 0000000101101100 0000001010110100 0000010011011000 0000011100000011 0000100100110001 0000101000101010 0000101111000000 0001000110001001 0001010000110010 0001011000001100 0001100100000110 0001110001000001 0010000110010010 0010010010000101 0010011001100000 0010100001010100 0010110100001000 0011000001001010 0011001000010001 0011100010100000 0100001001001001 0100010001000110 0100010110100000 0100100010001100 0100111000010000 0101000000100101 0101000101010000 0101001010000010 0110000000111000 0110001100000100 0110100000000011 1000001001010010 1000010000101001 1000010100010100 1000101000000101 1000110010000010 1001000011000100 1001001100100000 1001100000011000 1010000000100110 1010000101000001 1010001010001000 1100000010010001 1100000100001010 1100100001100000 1111010000000000
I won't be sweeping all of the 15- or 16-bit spaces.
AI sign of brilliance [Scripting News]
The text below as written by Claude. I didn't ask for it, but was blown away when I read it. It generated this copy because he needed an example post for a programming technique it was testing for me.
If I were CEO of Bluesky [Scripting News]
I've written a bunch of pieces with this premise, what if I were CEO of Apple being the first, in January 1996, before Steve Jobs returned. This time I'm writing as if I were CEO of Bluesky, a company that just got a new interim CEO, Toni Schneider, formerly of Automattic, the company behind WordPress. This started as a comment in reply to Colin Devroe on Mastodon, but quickly exceeded its 500 character limit. And no doubt I will expand on it over the course of the day.
Here's the issue. AT Proto is proposing to be a better web than the collection of standards that make up the web in 2026, starting with HTTP and HTML and DNS and including Markdown, WebSockets, MP3 and RSS and probably a few others. Maybe they can come up with something better organized and with more consistent interfaces. But the web doesn't work that way. Once it embraces a method of doing something, it goes on, and doesn't reconsider. It's exactly like evolution in the natural world.
Example: RSS was a deeply entrenched competitor when Atom came along, intending to do everything RSS did but do it differently and better. It did get some support and still does to this day, but the differences are flattened out, most feed-reading software doesn't know if the news came from RSS or Atom, the distinction is buried in low-level code.
If you were to look at the size of the developer base for the web, it would be clear how steep a hill AT Proto has to climb, and why? What's in it for Bluesky except satisfaction of ego? Not a good business proposition for a startup.
But they can't abandon the developers who made a bet on AT Proto, so they should give it to a standards body, work with them, but at the same time work on interop with products like WordPress and support inbound and outbound RSS. Markdown would be nice too. Get rid of the character limit and support links, styling, enclosures (for podcasting) and make their posts editable. In other words they have some catching up to do re the web. That's where their leadership would be welcome instead of questioned.
Colin, I don't think they should do it for you and me, they should do it as an investment in their future. Get in the game. The idea of creating something that stands alone is imho very un-web, and not differentiated from their competition. The web was made for small companies like Bluesky. Trying to act like a giant in a way even the biggest giants wouldn't work is not a formula for success. I think Toni and Matt would understand this.
You wear a hat, you’re not a hat.
State nouns are verbs that we talk about like they are nouns. Hurry, panic, frenzy, rage, funk, stupor, daze, fog, rut, bind, pickle, fix, slump, tailspin, tizzy. Notice that they’re almost all negative…
You’re in a hurry.
Really? I get that you’re hurrying. There might be good reasons for this. But the hurry hat isn’t what you are, it’s what you’re doing.
We can own our agency and our choices, not announce (to ourselves or the world) that we’re trapped in a container, unable to escape.
Until we start saying, “I’m in a joy” perhaps we should find the grace to choose what sort of verb we’d prefer.
The essential thing about a hat is that it’s easy to take off.
Gas prices a windfall for big oil [Richard Stallman's Political Notes]
*Democrats urge windfall tax as big oil set to make billions from Iran war.*
Journalists flee Bukele's rule, SLV [Richard Stallman's Political Notes]
President Bukele's repression forced the news site El Faro and its journalists to flee El Salvador.
Poor nations' children dying [Richard Stallman's Political Notes]
*Most of the 4.9 million children who died in 2024 could have been saved, according to a new UN report.
US media as propaganda engine [Richard Stallman's Political Notes]
The corrupter is following the usual fascist playbook for clamping down on the free press and converting it into a propaganda engine.
US bills do become law if not signed [Richard Stallman's Political Notes]
The wrecker said he will refuse to sign any bills until Congress passes a bill to disenfranchise millions of American citizens. This seems to imply that he will veto every bill — but it does not in fact imply that.
The president can allow a law to pass by waiting ten days (not counting Sundays) without either signing or vetoing the bill. He hasn't said whether he will do that. He might go for the greatest possible sabotage by vetoing every bill passed — but he also might not.
Of course, he is not at all honest and doesn't hesitate to contradict whatever he said he would do, so maybe it makes no difference what he said.
Political betting influencing journalism [Richard Stallman's Political Notes]
Political prediction betting has led to threats against a journalist demanding he retract an article, supposedly coming from a bettor who stood to lose millions of dollars because of that article.
Israel bombing Iran gas fields [Richard Stallman's Political Notes]
Israel attacked an Iranian fossil gas extraction complex, and Iran is now threatening to retaliate against other countries' fossil gas extraction complexes.
Israel's attack was unjust and dangerous, because there was no military basis for it. Iran's threatened response would likewise be unjust and dangerous, for the same reason. However, Iran has not done it yet; if other powers deter Israel from continuing this, Iran may not start.
Iran survives officials' assassinations [Richard Stallman's Political Notes]
The US/Israeli attempt to make Iran's government collapse by killing high officials appears to have failed — it is organized to survive assassinations.
Iran's regime has committed enormous violence against the opposed public, violence at a level that magats might dream of but have not yet fallen to.
The physics of worker burnout [Richard Stallman's Political Notes]
Optimizing systems for efficiency when running at maximum capacity means aiming for minimum slack. It is a mistake for an individual, but an even more devastating mistake when a country does it.
Young-worker medical disability, UK [Richard Stallman's Political Notes]
Almost half of the Britons age 16 to 24 who are neither working nor studying say the reason is due to a medical problem.
I think it is alarming that life-hampering diseases are increasing in frequency.
Childhood obesity, KOR, DNK [Richard Stallman's Political Notes]
Some countries' successful interventions to reduce childhood obesity.
Some of them cost money. Governments must bite the bullet and take a bite out of the billionaires' assets.
Deportation arrest requires warrant, OR [Richard Stallman's Political Notes]
Deportation thugs arrested authorized permanent resident Juanita Avila without looking at her green card, but her daughter recorded the arrest and that shamed them into releasing Avila with merely some gratuitous physical injury.
Then Avila and others sued, and a federal court in Oregon ruled that deportation thugs cannot arrest anyone without a specific warrant unless they present a written justification that satisfies strict legal standards for arrest without a warrant.
CBS interviews President of US [Richard Stallman's Political Notes]
*CBS News heavily edits 60 Minutes interview [with the corrupter], cutting boast network "paid me a lotta money".*
A year ago, he sued CBS for editing an interview with candidate Kamala Harris in a way he did not like. It paid him millions to settle that lawsuit, and he explicitly presented that as a success in humiliating CBS. And suggested that CBS not broadcast that remark, and other humiliations, but he knew they would be reported.
Was it wrong for CBS to edit out the bully's boast about having made CBS bend the knee to him? Is it better for freedom and democracy to make a company look bad for having let us all down, or would that be likely to help him bully other companies into subservience? I don't know, but I would not trust news from companies that have given fealty to a would-be king.
View From a Hotel Window, 3/20/26: San Diego [Whatever]

There is a parking lot visible in the photo, I will note. That said, this is not the usual parking lot photo from when I travel.
San Diego is lovely. But then, when is it not. We will be in it only briefly before setting sail on this year’s installment of the JoCo Cruise. Try to have fun without us for a week.
Oh, and happy equinox! Spring is here. Thank God.
— JS
C.J. Collier: The WWW::Mechanize::Chrome Saga: A Comprehensive Narrative of PR #104 [Planet Debian]

This document synthesizes the extensive work performed from
March
13th to March 20th, 2026, to harden, stabilize, and refactor
the
WWW::Mechanize::Chrome library and its test suite.
This
effort involved deep dives into asynchronous programming,
platform-specific bug hunting, and strategic architectural
decisions.
The initial phase of work focused on achieving a
“green” test suite
across a variety of Linux distributions and preparing for a new
release.
This involved significant hardening of the library to account
for
different browser versions, OS-level security restrictions, and
filesystem differences.
Resource was not cached errors
duringsaveResources, we implemented a fully asynchronous
fallback_saveResourceTree. By chaining_cached_document with
DOM.getOuterHTMLfile:// access.File name too long
errors,MAX_PATH limit is
260filenameFromUrl was hardened. The
filenamedefault_executable_names was expanded to includeheadless_shell and search paths were updated to
include/usr/lib64/chromium-browser/.DOM.documentUpdated events could invalidatenodeIds immediately after navigation, causing XPath
queriessleep(0.25s) was added after page loads to ensure the
DOMualarm was a blocker for
Windows, wheret::helper::set_watchdog
functionalarm() (seconds) on
Windowsualarm (microseconds) on Unix-like systems,
enablinglib/ and to always
runmake clean and perl Makefile.PL to
ensureMETA.json and META.yml reflect the
newad2 Windows Server 2025 instance was restored
andDespite success on Linux, tests on the slow ad2
Windows
host were still plagued by intermittent, indefinite hangs. This
triggered a fundamental architectural shift to move the
library’s core
from a mix of synchronous and asynchronous code to a fully
non-blocking
internal API.
Decision: Expose a _future
API.
Instead of hardcoding timeouts in the library, the core strategy
was to
refactor all blocking methods (xpath,
field,
get, etc.) into thin wrappers around new
non-blocking
..._future counterparts. This moved timeout management
to
the test harness, allowing for flexible and explicit handling
of
stalls.
Decision: Centralize Test Hardening in a
Helper.
A dedicated test library, t/lib/t/helper.pm, was
created to
contain all stabilization logic. “Safe” wrappers
(safe_get,
safe_xpath) were implemented there, using
Future->wait_any to race asynchronous operations
against
a timeout, preventing tests from hanging.
# Example test helper implementation
sub safe_xpath {
my ($mech, $query, %options) = @_;
my $timeout = delete $options{timeout} || 5;
my $call_f = $mech->xpath_future($query, %options);
my $timeout_f = $mech->sleep_future($timeout)->then(sub { Future->fail("Timeout") });
return Future->wait_any($call_f, $timeout_f)->get;
}
Decision: Refactor Node Attribute Cache.
Investigations into flaky checkbox tests
(t/50-tick.t)
revealed that WWW::Mechanize::Chrome::Node was
storing
attributes as a flat list ([key, val, key, val]),
which was
inefficient for lookups and individual updates. The cache was
refactored
to definitively use a HashRef, providing O(1)
lookups
and enabling atomic dual-updates where both the browser property
(via
JS) and the internal library attribute are synchronized
simultaneously.
Decision: Implement Self-Cancelling Socket
Watchdog. On Windows, traditional watchdog processes
often
failed to detect parent termination, leading to 60-second hangs
after
successful tests. We implemented a new socket-based watchdog in
t::helper that listens on an ephemeral port; the
background
process terminates immediately when the parent socket closes,
eliminating these cumulative delays.
Decision: Deep Recursive Refactoring & Form
Selection. To make the API truly non-blocking, the
entire
internal call stack had to be refactored. For example, making
get_set_value_future non-blocking required first
making its
dependency, _field_by_name, asynchronous. This
culminated
in refactoring the entire form selection API
(form_name,
form_id, etc.) to use the new asynchronous
_future lookups, which was a key step in mitigating
the
Windows deadlocks.
Decision: Fix Critical Regressions & Memory
Cycles.
Evaluation Normalization: Implemented a
_process_eval_result helper to centralize the parsing
of
results from Runtime.evaluate. This ensures
consistent
handling of return values and exceptions between synchronous
(eval_in_page) and asynchronous
(eval_future)
calls.
Memory Cycle Mitigation: A significant
memory
leak was discovered where closures attached to CDP event futures
(like
for asynchronous body retrieval) would capture strong references
to
$self and the $response object, creating
a
circular reference. The established rule is to now always use
Scalar::Util::weaken on both $self and
any
other relevant objects before they are used inside a
->then block that is stored on an object.
Context Propagation (wantarray):
A
major regression was discovered where Perl’s
wantarray
context, which distinguishes between scalar and list context, was
lost
inside asynchronous Future->then blocks. This
caused
methods like xpath to return incorrect results (e.g.,
a
count instead of a list of nodes). The solution was to adopt the
“Async
Context Pattern”: capture wantarray in the
synchronous
wrapper, pass it as an option to the _future method,
and
then use that captured value inside the future’s final
resolution
block.
# Synchronous Wrapper
sub xpath($self, $query, %options) {
$options{ wantarray } = wantarray; # 1. Capture
return $self->xpath_future($query, %options)->get; # 2. Pass
}
# Asynchronous Implementation
sub xpath_future($self, $query, %options) {
my $wantarray = delete $options{ wantarray }; # 3. Retrieve
# ... async logic ...
return $doc->then(sub {
if ($wantarray) { # 4. Respect
return Future->done(@results);
} else {
return Future->done($results[0]);
}
});
}
Asynchronous Body Retrieval & Robust Content
Fallbacks: Fixed a bug where
decoded_content()
would return empty strings by ensuring it awaited a
__body_future. This was implemented by storing the
retrieval future directly on the response object
($response->{__body_future}). To make this more
robust,
a tiered strategy was implemented: first try to get the content
from the
network response, but if that fails (e.g., for
about:blank
or due to cache eviction), fall back to a JavaScript
XMLSerializer to get the live DOM content.
Signature Hardening: Fixed “Too few
arguments”
errors when using modern Perl signatures with
Future->then. Callbacks were updated to use
optional
parameters (sub($result = undef) { ... }) to
gracefully
handle futures that resolve with no value.
XHTML “Split-Brain” Bug: Resolved
a
long-standing Chromium bug (40130141) where content provided
via
setDocumentContent is parsed differently than
content
loaded from a URL. A workaround was implemented: for XHTML
documents,
WMC now uses a JavaScript-based XPath evaluation
(document.evaluate) against the live DOM, bypassing
the
broken CDP search mechanism.
_future
variants.t/lib/t/helper.pm), not in the core library.wantarrayFuture chain to ensure
correctwarn, note, diag) should
be$self->log('debug',
...)MutationObserver Saga (March 19)With most of the library refactored to be asynchronous, one
stubborn
test, t/65-is_visible.t, continued to fail with
timeouts.
This led to an ambitious, but ultimately unsuccessful, attempt
to
replace the wait_until_visible polling logic with a
more
“modern” MutationObserver.
repeat { sleep } loop with an event-drivenMutationObserver in JavaScript that would notify
PerlcallFunctionOn_future.setTimeout, which expected milliseconds.MutationObserver’sPromise would never resolve, even after
thecheckVisibility JavaScript logic inside the
observerconsole.log tracing, failed to resolve
theThe effort was plagued by procedural missteps in using
automated
file-editing tools. Initial attempts to replace large code blocks
in a
single operation led to accidental code loss and match
failures.
Chrome.pm module.The consistent failure of the MutationObserver
approach
eventually led to the decision to abandon it in favor of
stabilizing the
original, more transparent implementation.
After exhausting all reasonable attempts to fix the
MutationObserver, a strategic decision was made to
revert
to the simpler, more transparent polling implementation and fix
it
correctly. This proved to be the correct path to a stable
solution.
MutationObserver implementation, when integrated
viacallFunctionOn_future with
awaitPromise,MutationObserver code
fromWWW::Mechanize::Chrome.pm and restore the originalrepeat { sleep } polling mechanism. A stable,t/lib/t/helper.pmsafe_wait_until_* wrappers werewait_any andsleep_future) that raced against the underlying
pollingWith all other tests passing, a single memory leak failure
in
t/78-memleak.t persisted, but only on the Windows
ad2 environment. This required a different approach
than
the timeout fixes.
on_dialog event listener was not being broken on
Windows,on_dialog(undef) in DESTROY) were
notIO::Async event loop implementation on Windows,
and theTest::Memory::Cycle module. The cycle report was
identicalon_dialog(undef) call fromclose() to DESTROY().deleteing the listener and callbackDESTROY.$self->remove_listener and$self->target->unlisten in a mistaken attempt to
findt/78-memleak.t was wrapped in a conditionalTODO block that only executes on Windowsif ($^O =~ /MSWin32/i)), formally acknowledging the
bugA final failure in the GitHub Actions CI environment revealed
one
last configuration flaw.
prove --nocount --jobs 3 -I local/ -bl xt t directly.
This-It/lib include path,
whicht::helper
module.Can't locate t/helper.pm in @INC.Makefile.PL revealed a custom MY::test
block-It/lib flag into
themake test command. This confirmed thatmake test is the correct, canonical way to run the
test.github/workflows/linux.yml file was modified to
replaceprove call with make test in
theRun Tests step. This ensures the CI environment runs
theAfter this long and arduous journey, the
WWW::Mechanize::Chrome test suite is now stable
and
passing on all targeted platforms, with known
platform-specific issues clearly documented in the code. The
project is
in a vastly more robust and reliable state.
Beau Is Not Afraid [The Stranger]
Beau Morton died at age 49. He did not get a chance to read the last valentine his wife wrote him or see the Seahawks win their second Super Bowl. by Nathalie Graham
Stevie VanBronkhorst, 38, had been writing Stranger valentines to her husband, Beau Morton, 49, for 12 years. This year was no different. “Beau is not afraid,” she wrote, an homage to the 2023 Ari Aster horror film they’d recently watched together.
They watched a lot of movies together. And, it had Beau’s name in it, so it was fitting. “Honey, I love you! You are an excellent husband, father, and partner in this terrifying shit show America. I am the luckiest bastard alive!” the Valentine read. It was the first big, featured Valentine under the section’s header which read: “Love Is Alive.”
But then Beau died less than a week before we published our February issue. He never read it. But anybody who talks with Stevie would know how loved he was.
“He hated being the center of attention,” she says in a phone call a month after her husband’s death. “An article about him would drive him crazy.” But she missed him so much she wanted to talk about him. Everyone missed him. His friends, his parents, his sister, his niece and nephew. And his kids, four-year-old Brooks and eight-month-old Tilly.
“Sorry, Beau, you're also gonna get a funeral,” she says.
Beau touched a lot of people in this world, and especially in this city. He was a founding member of the Transit Riders Union alongside now Seattle Mayor Katie Wilson. He served on the Pedestrian Advisory Board and the Feet First Policy Committee where he advocated for 2015’s Move Seattle Levy. He loved cities and Seattle in-particular. A cyclist, he hated cars, though he ended up with one. An avid reader, Beau consumed everything from The Expanse series by James S.A. Corey to titles like Open Veins of Latin America, Evicted, or Lies Across America. “He just always wanted to understand something completely,” Stevie says. Recently, he was trying to understand the collapse of complex societies. “That’s not a downer, honey,” she jokes.
Beau was also a cook. He loved whipping up intricate, international dishes as much as he loved sports. He’d combine the two. During the Seahawks season, he would plan “Food and Football” for the games. He’d whip up a dish specific to the team the Hawks were playing—cioppino for the San Francisco 49ers, French Dip for the Los Angeles Rams, and “We always make Denver omelets every three years,” Stevie says.
For just a hint of umami, he bought a whole jar of marmite to put a teaspoon into his chili he prepared for the Seahawks NFC Championship game. He only used it that one time. Beau died before the Super Bowl. None of their friends could watch. It was too sad. “And now I have a whole jar of Marmite,” Stevie says.
Stevie and Beau met in 2012. Stevie, a graphic designer and cartoonist, had moved to the University District from Burien. She’d been homeschooled and graduated high school early, so she attended college as a teen. She felt she’d missed the typical experience, and looked for it at Cafe Racer in the UDistrict where all the cartoonists hung out. There, she found a flier for a room in the Monarch Apartments, a former frat house on Greek Row moved over to Brooklyn Avenue NE. “It was part halfway house, part bohemian commune, part dorm,” she says.
One night, Beau showed up for a group movie night with The Killers in hand. He had nice legs, she thought, and he was funny. They became friends, attending the same parties on Halloween and a New Years party where a mutual friend mansplained how to play the harmonica to Mayor Wilson (she already knew how to play). Later, Wilson and Beau asked Stevie to design the Transit Riders Union newsletter. Beau brought frittata. Afterward, she asked Katie for his number under the pretense of thanking him for the treat.
“He said, ‘How'd you get this number?’ I said, ‘Never mind.’ And he said, ‘No, it's fun. Let's go out. How about Friday?’”
But, she didn’t have to wait long. Beau called her that night—he was in the neighborhood. Would she want to hang out now? Stevie, who’d just been in the bath, said yes. She dried her hair and met him at the now-defunct District Lounge in the now-defunct Hotel Deca. They decamped to A Pizza Mart, but it was too crowded so they opted for the pizza across the street—the also-gone-now Pizza Regazzi. They ate pizza on the stoop and talked all night. He started stashing his bike at her apartment, buying groceries and sleeping on her couch before they’d held hands.
“After about a day, I'm like, ‘Okay, but what are we doing here? What is happening?’ And he looks completely shocked and says, ‘I don't want to move too fast,’” she says.
Soon after, Beau came home with “full-blown norovirus.” He thought he’d had bad coffee at the AM/PM.
“I'm pouring Gatorade down him as fast as I can, and it's coming right back out,” Stevie says.
She’s not sure if this was when he told her about his congenital disorder, but in hindsight, she wonders if she had had to give him his pills during this illness.
Beau had congenital adrenal hyperplasia. It filled his adrenal glands with little cysts that messed with their ability to produce hormones such as cortisol, which regulates blood sugar and blood pressure, and aldosterone, which manages sodium and potassium levels in the blood. It can create intense dehydration through salt-wasting. He took pills every day to regulate it. It made him shorter than average, strong, and, as Stevie describes, “very chill and even keeled.” That “balanced my ADD anxiety out very well.” It is what ended up killing him, Stevie says.
A week after his norovirus, they started dating.
“Can we hold hands?” she asked. “Yeah,” he said. “Can we kiss?” she asked. “Sure.” Two months later, out of the blue, he said, “I should probably marry you.” They got secretly engaged in 2014 and married in 2017.
“I never thought I would get married,” she says. “He's a strange person, and he trusted me and let me into his inner life… our weird qualities complemented each other, I suppose. I was just really, really lucky to find somebody who accepted me and the way I was.”
Beau and his son, Brooks.
In January, right after the Seahawks won the NFC Championship game but before the Super Bowl, one of Beau’s and Stevie’s kids got sick. They both caught the bug, too. Beau hadn’t been taking his pills.
“The last thing I said to him was, ‘Get up and take your pills.’”
He got up. Stevie doesn’t know whether he was going to his pills or to the emergency shot they had stashed in one of the bookcases. Beau’s lack of anxiety meant he never showed Stevie how to use the just-in-case emergency shot.
“The gravity of that is going to weigh on me for a long time,” she says.
Beau did not make it to the pills or to the shot.
“Our family lost a father and a provider and a partner,” Stevie says. “I lost a special movie buddy, and the person I want to hang out with the most. He was so beautiful and handsome and I miss him so much.”
Beau showed his love for her and their family every day, she says. He was constant and dedicated. She returned his love with special projects.
“He loved nutcrackers,” she says. When she went to his apartment for the first time, she saw a closet stuffed with 20 nutcrackers. “What is that?” Stevie asked. “Those are mine,” Beau said. “They protect me.”
For their first Christmas, Stevie bought a nutcracker on clearance. She sawed the legs in half to make them short. She buffed out the face and repainted it. She painted a little Seahawks logo on the hat. And she tacked on a little piece of wood that she painted to look like his top 10 favorite books. He thought that was very loving.
She also showed that love through The Stranger’s valentine’s. Here are some of the other Valentine’s she wrote him over the years:
2015: STEVIE LOVES BEAU ![]()
Even if moving to AK is the dumbest
thing I’ll ever do, marrying you will be the smartest! Keep
up with the long con & I’ll always say I like you
o.k.
2016: “BEAU-YEAH” ![]()
Beau’s still my Beau and I’m
definitely going to marry the shit out of that guy. Thanks
for waiting for me! YOU’RE THE BEST!
2017: BEAU <3 <3 <3 ![]()
It’s been 4 years and
you’re still about my size and 100% my style.
Can’t wait to actually get around to marrying you this summer. Love, Stev
2025: I HAVE A SECRET…It’s BONES!
![]()
I love you, Beau, you’re the best dad
and husband in the world. And you’re handsome.
Beau’s memorial will be held at 3/22 at 2 pm at the Center for Urban Horticulture, a day before what would have been his 50th birthday. You can RSVP here.
[Eds Note: This story has been updated with the correct movie Beau brought and to reflect that Mayor Katie Wilson already knew how to play the harmonica and a friend at the party was mansplaining it to her, not teaching her.]
Seattle's CCTV Vendor Has Received $126 Million in ICE and CBP Contracts [The Stranger]
Mayor Katie Wilson announced an expansion of Seattle’s CCTV surveillance network Thursday, telling a closed press conference of Seattle journalists she had little choice but to hire US Department of Homeland Security contractor Axon to provide the system. by Hunter Pauli
Mayor Katie Wilson announced an expansion of Seattle’s CCTV surveillance network Thursday, telling a closed press conference of Seattle journalists she had little choice but to hire US Department of Homeland Security contractor Axon to provide the system.
Axon, a multi-billion dollar weapons manufacturer, has been awarded $147 million dollars in DHS contracts since 2008, according to records from the US Department of Treasury. That includes $43 million from US Immigration and Customs Enforcement, and another $83 million from US Customs and Border Protection. In just the past 12 months, ICE and CBP have awarded Axon $8 million each.
Asked at her press conference why the city has contracted Axon for its surveillance camera program, given its lucrative deals with ICE and CPB over the past year, instead of some other company, Wilson said:
“I mean, what other company—military industrial complex, right? We got like, not that many companies that provide services like this, so I don’t know that there’s like a … do you want to point us to a squeaky clean company to do this instead?”
Critics have called on the mayor to halt a proposed expansion of the surveillance network and remove cameras due in part to fears ICE and CBP could access the footage and use it to track, detain and deport immigrants. Wilson herself said she opposed CCTV expansion on the campaign trail, but has refused to take Axon’s cameras offline since being elected.
Yesterday, she detailed her new plan. In short, the city is expanding the CCTV network, though not in all the areas proposed for now, and all CCTV cameras currently in place are staying put.
As planned, the cameras are coming to SODO, specifically because of the World Cup due to the “current geopolitical situation” (AKA the United States’ unprovoked invasion of Iran that is spiraling out of control and destroying the global economy). But the deployed cameras will remain off unless the Mayor’s Office determines there’s a threat, in which case they’ll flip the switch.
Additional cameras slated for Capitol Hill (including outside The Stranger’s newsroom) and Garfield High School are on hold pending an audit by New York University’s Policing Project to determine whether federal immigration police can access Seattle’s footage.
The city is also “pausing” the use of all automated license plate reader cameras installed on 400 SPD squad cars because they can’t comply (yet) with a new state law banning their use around schools, courthouses, food banks and places of worship.
CCTV cameras in downtown, the northern section of Aurora Avenue N, and the International District will remain in place.
Axon isn’t a household name, but it used to be under its previous branding: Taser, the eponymous electricity pistol that while advertised as “less-than-lethal” resulted in police officers killing so many people that the company rebranded in 2017 to avoid public recognition and started handing out free body cameras to police departments.
In fact, Axon also provides the body cameras worn by Seattle Police Department officers, with SPD saying the company was selected after “numerous vendors” submitted offers after bidding opened in 2016. SPD’s Real-Time Crime Center also operates on Axon tech. Axon’s Tasers are also standard issue for Seattle cops.
Nine of the 12 members of Axon’s ethics board resigned in 2022 after the company announced plans to develop armed drones for its clients. Of those that didn’t resign, one was former Seattle police chief Cameron Best.
Axon’s CCTV network isn’t the only camera network the city operates. The Seattle Department of Transportation has an extensive camera network accessible to the public covering much of King County.
An Annual Surveillance Technology Usage Review of SDOT’s traffic camera network published in September 2025 says its CCTVs originally operated on software provided by tech contractor FLIR, which is being replaced by software from research and development nonprofit Southwest Research Institute.
The Stranger reached out to SDOT for clarification on contractors involved in the department’s camera network, and a comms staffer there said they’re tracking the information down, but that “the Mayor’s Office has been fielding all questions related to cameras this week.”
A public meeting with the mayor is planned for next Friday at Town Hall Seattle.
Microsoft finally makes a few concrete promises about Windows 11 improvements [OSnews]
Earlier this year, Microsoft openly acknowledged the sorry state of Windows 11, and made vague promises about possible improvements somewhere in the near future, but stayed away from making any concrete promises. Today, the company published a blog post with some more details, including some actual concrete, tangible changes it’s going to implement over the coming two months.
In coming builds, you’ll be able to move the taskbar to any side of the screen, instead of it being locked to the bottom, thereby reintroducing a feature present since Windows 95. They’re also scaling back their obsession with ramming “AI” in every corner of Windows, and will be removing Copilot integrations from Snipping Tool, Photos, Widgets, and Notepad. Furthermore, and this is a big one among Windows users I’m sure, Windows Update will be placed under user control once again, allowing them to ignore updates, postpone them indefinitely, reboot without applying updates, and so on. These are the tangible improvements we’ll be able to point to and say the company kept their word, and they all feel like welcome changes.
There’s also a few promises that feel far more vague and less tangible, like the ever-present, long-running promise to “improve File Explorer”. I feel like Microsoft’s been promising to fix their horrible file manager for years now, without much to show for it, so I hope this time will be different. The company also wants to improve Widgets, the Windows Insider Program, and the Feedback Hub application. These all feel less tangible, and will be harder to quantify and benchmark.
Beyond these first round of improvements that we’re supposed to be seeing over the coming two months, Microsoft also promises to implement wider improvements across the board, with the usual suspects like better performance, quicker application launches, improved reliability, lower memory usage, and so on. They also promise to move more core Windows user interface components to WinUI 3, including the Start menu, which is currently written in React. Windows Search is another common pain point among Windows users, and here, Microsoft promises to improve its performance and clearly separate local from online results (but no word on making search exclusively local).
There’s some more details in the blog post, but overall, it sounds great. However, words without actions are about as meaningful as a White House statement on the war with Iran, so seeing is believing.
Version 0.15.0 of the b4 patch-management tool is out. Highlights in this release include the b4 review workflow manager for maintainers (covered briefly in this article), b4 dig, which can find the original mailing-list submission behind a commit, three-way-merge support in b4 shazam, and more. See the release notes for details.
Windows stack limit checking retrospective: arm64, also known as AArch64 [The Old New Thing]
Our survey of stack limit checking wraps up with arm64, also known as AArch64.
The stack limit checking takes two forms, one simple version for pure arm64 processes, and a more complex version for Arm64EC. I’m going to look at the simple version. The complex version differs in that it has to check whether the code is running on the native arm64 stack or the emulation stack before calculating the stack limit. That part isn’t all that interesting.
; on entry, x15 is the number of paragraphs to allocate
; (bytes divided by 16)
; on exit, stack has been validated (but not adjusted)
; modifies x16, x17
chkstk:
subs x16, sp, x15, lsl #4
; x16 = sp - x15 * 16
; x16 = desired new stack pointer
csello x16, xzr, x16 ; clamp to 0 on underflow
mov x17, sp
and x17, x17, #-PAGE_SIZE ; round down to nearest page
and x16, x16, #-PAGE_SIZE ; round down to nearest page
cmp x16, x17 ; on the same page?
beq done ; Y: nothing to do
probe:
sub x17, x17, #PAGE_SIZE ; move to next page¹
ldr xzr, [x17] ; probe
cmp x17, x16 ; done?
bne probe ; N: keep going
done:
ret
The inbound value in x15 is the number of bytes
desired divided by 16. Since the arm64 stack must be kept
16-byte aligned, we know that the division by 16 will not produce a
remainder. Passing the amount in paragraphs expands the number of
bytes expressible in a single constant load from
0xFFF0 to 0x0FFF0 (via the
movz instruction), allowing convenient allocation of
stack frames up to just shy of a megabyte in size. Since the
default stack size is a megabyte, this is sufficient to cover all
typical usages.
Here’s an example of how a function might use
chkstk in its prologue:
mov x15, #17328/16 ; desired stack frame size divided by 16
bl chkstk ; ensure enough stack space available
sub sp, sp, x15, lsl #4 ; reserve the stack space
Okay, so let’s summarize all of the different stack limit checks into a table, because people like tables.
| x86-32 | MIPS | PowerPC | Alpha AXP | x86-64 | AArch64 | |
|---|---|---|---|---|---|---|
| unit requested | Bytes | Bytes | Negative bytes | Bytes | Bytes | Paragraphs |
| adjusts stack pointer before returning | Yes | No | No | No | No | No |
| detects stack placement at runtime | No | Yes | Yes | Yes | Yes | Yes |
| short-circuits | No | Yes | Yes | Yes | Yes | No |
| probe operation | Read | Write | Read | Write | Either | Read |
As we discussed earlier, if the probe operation is a write, then short-circuiting is mandatory.
¹ If you’re paying close attention, you may have
noticed that PAGE_SIZE is too large to fit in a 12-bit
immediate constant. No problem, because the assembler rewrites it
as
sub x17, x17, #PAGE_SIZE/4096, lsl #12
The post Windows stack limit checking retrospective: arm64, also known as AArch64 appeared first on The Old New Thing.
Dirk Eddelbuettel: RcppSpdlog 0.0.28 on CRAN: Micro-Maintenance [Planet Debian]

Version 0.0.28 of RcppSpdlog arrived on CRAN today, has been uploaded to Debian and built for r2u. The (nice) documentation site has been refreshed too. RcppSpdlog bundles spdlog, a wonderful header-only C++ logging library with all the bells and whistles you would want that was written by Gabi Melman, and also includes fmt by Victor Zverovich. You can learn more at the nice package documention site.
This release contains a rebuild RcppExports.cpp to
aid Rcpp in the transition
towards Rcpp::stop() and away from
Rf_error() in its user packages. No othe
The NEWS entry for this release follows.
Changes in RcppSpdlog version 0.0.28 (2026-03-19)
- Regenerate
RcppExports.cppto switch to(Rf_error)aiding in Rcpp transition toRcpp::stop()
Courtesy of my CRANberries, there is also a diffstat report detailing changes. More detailed information is on the RcppSpdlog page, or the package documention site.
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.
Congress Is Dropping the Ball with a Clean Extension of FISA [Deeplinks]
Two years ago, Congress passed the “Reforming Intelligence and Securing America” Act (RISAA) that included nominal reforms to Section 702 of the Foreign Intelligence Surveillance Act (FISA). The bill unfortunately included some problematic expansions of the law—but it also included a relatively big victory for civil liberties advocates: Section 702 authorities were only extended for two years, allowing Congress to continue the important work of negotiating a warrant requirement for Americans as well as some other critical reforms.
However, Congress clearly did not continue this work. In fact, it now appears that Congress is poised to consider another extension of this program without even attempting to include necessary and common sense reforms. Most notably, Congress is not considering a requirement to obtain a warrant before looking at data on U.S. persons that was indiscriminately and warrantlessly collected. House Speaker Mike Johnson confirmed that “the plan is to move a clean extension of FISA … for at least 18 months.”
Even more disappointing, House Judiciary Chair Jim Jordan, who has previously been a champion of both the warrant requirement and closing the data broker loophole, told the press he would vote for a clean extension of FISA, claiming that RISAA included enough reforms for the moment.
It’s important to note RISAA was just a reauthorization of this mass surveillance program with a long history of abuse. Prior to the 2024 reauthorization, Section 702 was already misused to run improper queries on peaceful protesters, federal and state lawmakers, Congressional staff, thousands of campaign donors, journalists, and a judge reporting civil rights violations by local police. RISAA further expanded the government’s authority by allowing it to compel a much larger group of people and providers into assisting with this surveillance. As we said when it passed, overall, RISAA is a travesty for Americans who deserve basic constitutional rights and privacy whether they are communicating with people and services inside or outside of the US.
Section 702 should not be reauthorized without any additional safeguards or oversight. Fortunately, there are currently three reform bills for Congress to consider: SAFE, PLEWSA, and GSRA. While none of these bills are perfect, they are all significantly better than the status quo, and should be considered instead of a bill that attempts no reform at all.
Mass spying—accessing a massive amount of communications by and with Americans first and sorting out targets second and secretly—has always been a problem for our rights. It was a problem at first when President George W. Bush authorized it in secret without Congressional or court oversight. And it remained a problem even after the passage of Section 702 in 2008 created the possibility of some oversight. Congress was right that this surveillance is dangerous, and that's why it set Section 702 up for regular reconsideration. That reconsideration has not occurred, even as the circumstances of the NSA, Justice Department, and FBI leadership, have radically changed. Reform is long overdue, and now it's urgent.
I Saw U: Singing Alanis at Saint John's, Driving a Mitsubishi Montero on I-5, and Stashing Jell-O Shots at the Telehealth Show [The Stranger]
Did you see someone? Say something! by Anonymous
90's blue green mitsubishi montero?
you passed me on I-5 S, brown haired w/ glasses. me dark hair, '98 silver RHD prado. you made my day and i was smiling for hours! lets go for a ride?
Last Year June Trans Wresting Event
I hung out with you all night not caring if I saw any wrestling. You crossed my mind, we blocked each other out of being triggered. Email me?
Curly Haired Cutie at Clinton Ferron
You were in overalls in the front row. I was in flannel on the side and couldn’t stop stealing glances. Thanks for the smiles.
Summit pool guy
You were with your friends playing pool at Summit Pub and knocked like 6 shots in a row. I want to swim with a shark. Mention city of bay area Im from
Alanis at St. John’s
You poorly (your words) sang You Oughta Know and we locked eyes during the steamiest lyric. Let me heal you?
Nudibranch Regular
To the pair of eyes that sees through to my soul, I hope to steal every glance I can get that you send my way. Soulie.
Bait Shop Beauty @ Telehealth Show
Lovely dark curly hair rocking side to side during the Telehealth show. Cackling with your friend, stashing Jell-O shots in purse. Bum me a cig?
Fellow Ice Cream Enthusiast
Small chat with in line at Indigo Cow on Sunday evening about best toppings with my two friends from Connecticut. Sweet Alchemy next time?
Is it a match? Leave a comment here or on our Instagram post to connect!
Did you see someone? Say something! Submit your own I Saw U message here and maybe we'll include it in the next roundup!
Scott Losse Is an Undisputable Champion of Comedy [The Stranger]
Meet Scott Losse, one of The Stranger's 2026 Undisputable Champions of Comedy. by Megan Seling
Good news! Seattle is still funny!
Yes, our comedy scene has taken some big hits in recent months. In August, the Rendezvous switched ownership, leaving their regular weekly comedy open mics, including the Comedy Nest, Kitchen Sink Comedy, and Naked Brunch, without a home. And in December, the Crocodile shut down their 100-capacity theater Here-After, which regularly hosted local and national names including Bernice Ye, Janeane Garofalo, and Hari Kondabolu, all of whom performed there last fall.
Folks have started to recover a bit, but it’s slow going. In January, comedians Emmett Montgomery and Derek Sheen launched the monthly Open Michael: A Storytelling Standup Strangeness Open Mic, at the Rabbit Box. In February, the Comedy Nest was reborn at Common Objects. This city remains full of hilarious weirdos who are committed to making us all laugh through these dark (and getting darker!) days.
Next month, The Stranger will celebrate some of Seattle’s most entertaining laugh factories at our annual Undisputable Champions of Comedy showcase on April 4 at Washington Hall. Curated by Montgomery, this year’s lineup is packed with talent, as ever, with a variety of comedy styles to please every human who likes to laugh.
“I think comedy (any type of art really) is at its best and beautiful when it makes you say to yourself, 'This is something that I have never heard before, but it is exactly how I feel,’ and that can be done through the telling of fart jokes or the sharing of vulnerable personal stories and everything in between,” says Mongtomery. “Watching somebody who is a master of their craft is fantastic, but so is seeing someone who is still rising to their potential and finding out how great they can be right in front of you.”
Over the next couple of weeks, leading up to the showcase, I’ll be sharing interviews with each comedian, including Min Lin, who is sunshine in human form (and sometimes performs with her service dog companion Sunny!), and Cheri Hardman, a regular at the Disabled List’s comedy showcase, who told a bit about big boobs and falling food at Bumbershoot in 2024 that still makes me laugh. Up first is Scott Losse! You may already be familiar, since his videos that lovingly mock life in the Pacific Northwest have gone viral several times. (Yes, of course I asked him about Death Cab.)
View this post on Instagram
If we want our comedy scene to thrive, we’ve got to support the people putting in the work to keep it going. Grab tickets to our Undisputed Champions of Comedy showcase here! And maybe bring Losse some Taco Time burritos.
Describe your comedy in five words.
Personal, silly, smart, stupid, and relatable
Now that you’ve been declared an Undisputed Champion of Comedy, is there anyone in your life who said you wouldn’t make it, and you would now like to take this opportunity to rub it in their stupid face?
My dad once told me I shouldn't quit my day job. Time will tell if he was right, but for now, in your face, Dad! I'm a Champion of Comedy!
Life in the Pacific Northwest is very much a part of your comedy. Here’s a Pacific Northwest-specific question for you: What’s your go-to Taco Time order?
Crisp Pinto Bean Burrito, Tots (Mexi-fries if you're old school), and a Diet Coke to keep it healthy. Same order at the other Taco Time.
Did you know Taco Time now sells pinto bean burritos in the frozen food section of Metropolitan Market? I was thrilled when I found out.
I saw that! I have an air fryer at home. I feel like that could be very bad for me. You could order six pinto bean burritos for yourself at the drive-thru, but you have to talk to another person and lie about having a party. If they were in the fridge, I'm afraid it might become the only thing I eat.
You’ve joked a lot about the Pacific Northwest stereotype of listening to Death Cab for Cutie in the rain, a true Seattle experience. But I’ve heard you actually like Death Cab for Cutie, too. What’s your favorite record?
Yes! I do actually love Death Cab for Cutie and have been a fan for a long time. I think my love for Death Cab is old enough to drink now. I have a soft spot for The Photo Album and listen to it all the time.
I am so glad you like The Photo Album—it gets overlooked so often! The Champions of Comedy show will be in April, right at the start of spring. What’s the perfect Pacific Northwest early spring soundtrack?
That's a hard question. There's so much good music. Content Oscillator by Telehealth. Muted Crowd by Spirit Award. I have fifteen others. People can ask me if they see me walking around.
Do you remember your first time doing stand-up? Were you hooked right away?
In 2009, I started seeing a therapist. This gets funny, I promise. I spent a lot of time talking about my childhood and other struggles. One day, he stopped me in the middle of a session and told me I was funny and I should try stand-up. I guess I believed him because I signed up for a class through UW Experimental College and did my first set at the Seattle Comedy Underground about a month later. It went well. I was immediately hooked. Making people laugh was/is an amazing feeling. It didn't go well again for a year or two, but I eventually figured it out.
Seattle has lost some great comedy spots recently—Here-After closed, and Rendezvous, which had some regular showcases and open mics, changed owners. With that, where is your favorite place to see comedy in Seattle right now?
Yeah, it's a shame. We have lost a lot of good spots over the years. While I'm certainly no expert on everything going on in town these days, I do enjoy Club Comedy Seattle on 15th [Ave E. on Capitol Hill] for shows and open mic. There's also good stuff going on at Clockout Lounge, and you're starting to see more stand-up produced by folks at spots like Rabbit Box, which is super cool. Hopefully, with so many talented performers in town, you'll see more of these small theatres, bars, etc., fill the void.
See Scott Losse perform at The Stranger's Undisputable Champions of Comedy at Washington Hall on April 4, 7:30 pm, 21+. Tickets available here.
Friday Squid Blogging: Jumbo Flying Squid in the South Pacific [Schneier on Security]
The population needs better conservation.
As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.
Autoconf 2.73 released [Planet GNU]
Autoconf 2.72 has been released, see the release
announcement:
https://lists.gnu ... -03/msg00000.html
“Death is a Beautiful Cobalt Blue” Release Day! [Whatever]
Hey, everyone! You may remember my post from 2024 over my friend Jon R. Mohr’s album he released that summer, Bioluminescent Soundwaves. Well, I’m happy to report that Jon has come out with a brand new song, Death is a Beautiful Cobalt Blue.
This eleven-minute composure featuring the vocals of Julie Elven is a piece that comes from deep within Mohr’s very soul, as it is the result of years of stress and existential crises. He mentions that this work is inspired by T. J. Lea’s story, “I Bought My Wife a Life Extension Plan,” which he listened to the audio drama of in January 2025.
According to Mohr, the story really spoke to him and
was practically a mirror to him and his wife, who was diagnosed
with POTS back in 2023.
Following the diagnosis, her job let her go, and each following job failed to accommodate her medical needs appropriately. Between the medical stress, job insecurity, financial complications, and facing the physical struggles of POTS, the couple experienced their fair share of breakdowns and emotional turmoil.
Within this story, Mohr says it entailed the most beautiful depiction of death he’d ever heard, and it brought him comfort. He decided then and there that he’d believe in this version of the afterlife, even if it made no sense, because all that mattered was that it brought him comfort, and that works for him.
Things are much better now, with Mohr’s wife having a great remote job and a better handle on her physical symptoms, plus the two of them are closer than ever. The journey through all of this made Mohr truly appreciate friends, family, and the simple things in life.
In Mohr’s own words:
“Death Is a Beautiful Cobalt Blue is the result of all of that. It’s an exaltation of life, loss, beauty, and grief. It doesn’t shame or try to hide pain or the negative aspects of life. It welcomes all of it, because I feel so lucky to be able to experience all these things and truly know what makes life worth living. I also consider myself very lucky to both know what intense happiness and intense pain feel like. Because all of it is life. THIS, now, is all I can guarantee to be true and real.”
So, there you have it. A baring of a composer’s soul and struggles, as well as his joys and comforts. I hope you enjoy it, it really is quite beautiful.
Don’t forget to follow Jon on Instagram, and have a great day!
-AMS
Version 19 of the Agama installer for openSUSE and SUSE has been released. This release includes major changes in Agama's architectural design, organization of the web interface, and more.
We always wanted Agama to follow the schema [...] in which the core of the installer could be controlled through a consistent and simple programming interface (an API, in developers jargon). In that schema, the web-based user interface, the command-line tools and the unattended installation are built on top of that generic API.
But previous versions of Agama were full of quirks that didn't allow us to define an API that would match our quality standards as a solid foundation to build a simple but comprehensive installer. Agama 19 represents a quite significant architectural overhaul, needed to leave all those quirks behind and to define mechanisms that can be the cornerstone for any future development.
LWN last looked at Agama in September 2025.
[$] A truce in the Manjaro governance struggle [LWN.net]
Members of the Manjaro Linux
distribution's community have published a "Manjaro 2.0 Manifesto"
that contains a list of complaints and a demand to restructure the
project to provide a clear separation between the community and
Manjaro as a company. The manifesto asserts that the project's
leadership is not acting in the best interests of the community,
which has caused developers to leave and innovation to stagnate. It
also demands a handover of the Manjaro trademark and other assets
to a to-be-formed nonprofit association. The responses on the
Manjaro forum showed
widespread support for the manifesto; Philip Müller, project
lead and CEO of the Manjaro company, largely stayed out of the
discussion. However, he surfaced on March 19 to say he was
"open to serious discussions
", but only after a nonprofit
had actually been set up.
It Takes A Village [Penny Arcade]
We warned of spoilers in the Project Hail Mary trailer, but having read the book now - and living in a world where The Martian exists as a book and a film - I understand why they needed to show everything in that trailer. You can't have a situation where people call the movie "The Martian On A Spaceship." Now that I know everything in the book - I'm literate!!! -I would say that they have not, in fact, spoiled the main thing. I can't wait to go see this shit - there's just so much interesting work that had to be done before they could even tell the story.
Reproducible Builds (diffoscope): diffoscope 315 released [Planet Debian]
The diffoscope maintainers are pleased to announce the release
of diffoscope version 315. This version
includes the following changes:
[ Jelle van der Waa ]
* Adjust PGP file detection regex.
You find out more by visiting the project homepage.
The Best Bang for Your Buck Events in Seattle This Weekend: Mar 20–22, 2026 [The Stranger]
We made it y'all, today's the first day of spring! Emerge from your winter cave for cheap and cheerful events from The Residency Presents: Spring Break to Best Day Ever: South Park and from Macaron Day to U District Night Blossoms. For more ideas, check out our top picks of the week.
FRIDAY COMEDYPun
Slam
If your friends consider you the Slim Shady of bad puns, consider
Fun Intended’s Pun Slam your “mom’s
spaghetti” moment. It’s a slam-style punmaking contest
where wordplay warriors step up to the mic to battle it out across
three rounds that are judged by a panel of five brave souls
prepared to endure the cringe. Ten contestants volunteer, the
audience laughs (or winces), and host Forest Ember attempts to keep
the whole ridiculous evening rolling. Don’t think
you’re corny enough to pop off here? Seats still need butts,
so come out to cheer, drink, and appreciate the fine art of
linguistic nonsense. LANGSTON THOMAS
(Skylark Cafe & Club, West Seattle, $15-$20)
Slog AM: Bellingham Landslides Block Northbound I-5, Strava Run Outs Aircraft Carrier Position, Uncle Ted Can't Believe 'The Bachelorette' News [The Stranger]
The Stranger's morning news roundup. by Nathalie Graham
Oh Shit: On Thursday night, two landslides spilled onto northbound I-5 south of Bellingham, completely blocking all lanes. No fleeing to Canada this weekend. Another landslide is gumming up state Route 11 in Skagit County. Blame all this sloughing earth on the rain we've been getting.
We’re Cancelling Women: ABC is scrapping a season of The Bachelorette over a video showing star Taylor Frankie Paul (of The Secret Lives of Mormon Wives fame/infamy) putting her ex-boyfriend Dakota Mortensen in a headlock and attacking him with kicks and multiple stools. A 2023 video released by TMZ shows that one of her kids was hit during the fight. Paul pleaded guilty to aggravated assault over the incident. Paul’s season was slated to premiere this Sunday.
Nathalie's Uncle Is Gutted: My family group chat was all about March Madness today. My uncle Ted chimed in with a Yahoo! News screenshot of The Bachelorette news: "Why are you guys texting about college basketball? All that matters is that the Bachelorette got canceled. :( " The conversation turned back to basketball. Later, Ted texted, "Duke won, nothing exciting about that. It preoccupied me for 10 minutes and now I’m sad again."
They're Cancelling the Trains: Wednesday's Sound Transit board meeting sent Seattle City Hall into a tizzy. The board had announced proposed cuts to light rail projects to dig themselves out of a $35 billion hole, including a plan that would kill all hopes of light rail ever making it to Ballard. “It’s completely unacceptable to cut Ballard from the Sound Transit plan at this time,” King of Ballard Dan Strauss told KUOW. Citywide Councilmember Dionne Foster wasn’t happy about the axing of the infill station at Graham Street in south Seattle. “It's a community where people rely heavily on transit," she told KUOW. Cuts could also kill stations in West Seattle and South Lake Union. Any plan that doesn't see Sound Transit 3 built the way it was promised to voters will be a generational mistake.
The Weather: More rain. Sun tomorrow if you behave.
They’re Cancelling Books. Shy Girl, the forthcoming horror novel that really seemed to have been largely written by AI, is being pulled from publication by one of the largest publishers in the US over allegations that it was probably written by AI. Hachette Book Group pulled it a day after The New York Times showed off its evidence. Mia Ballard, the author (?) claimed in a late night email to the Times she hadn’t used AI, the acquaintance she’d hired to edit her novel had.
Cool, cool, cool: The World Health Organization says it's preparing for a “worst-case scenario” nuclear threat if the US-Israel war against Iran escalates any further, reports The Independent. But the US and Israel don't think Iran will be dropping any bombs any time soon because...
Israel says Iran can no longer enrich uranium. Is it because they keep bombing them?
Washington State Gov. Bob Ferguson says we won’t celebrate César Chavez day. If you haven’t seen the news, Chavez allegedly abused women and girls. Meanwhile, California will rename César Chavez Day to Farmworkers Day.
Elizabeth Warren Endorses Guy with Nazi Tattoo: Massachusetts Sen. Elizabeth Warren endorsed Graham Platner’s bid to unseat Republican Sen. Susan Collins in Maine. Out of this crowded race of Democrats, Warren had to pick the guy who would still have a skull and crossbones Nazi tattoo if word hasn’t gotten out about the having-a-Nazi-tattoo business. The thing he covered it up with—a Celtic knot with imagery of dogs—is also a little... weird.
Oh—I Don't Think You Can Say Tha— Trump made a Pearl Harbor joke while meeting with Japanese Prime Minister Sanae Takaichi. Also, this is a real "people in glass houses" situation.
Trump: "Who knows better about surprise than Japan? Why didn't you tell me about Pearl Harbor?"
— Aaron Rupar (@atrupar.com) March 19, 2026 at 9:14 AM
[image or embed]
Bad Officer: A 13-year Washington State Patrol Officer is resigning a year after a drunken car crash that killed a 20-year-old motorcyclist in the Tri-Cities. Officer Sarah Clasen, 36, is accused of driving with a blood-alcohol level of 0.17 percent, or more than twice the legal limit.
The Costco CEO ate a Costco hotdog. You know, for that trend of CEOs eating their shitty food? This does not matter, but is a great opportunity to bring up the time when Costco co-founder Jim Sinegal told the former CEO Craig Jelinek, who wanted to raise the price of the hot dog: "If you raise the effing hot dog, I will kill you. Figure it out." After taking a bite of the raw on the bun, no toppings hotdog like a sociopath, current CEO Ron Vachris said he’d never change the price.
It’s Going Well: In a memo Friday morning, editor-in-chief Bari Weiss and president Tom Cibrowski informed CBS News they would be laying off 6 percent of staff. This is the second round of layoffs since CBS Skydance Media bought the network's parent company, Paramount, last summer.
ICYMI: Venezuela won the World Baseball Classic, which is like the World Cup for baseball. They beat the USA in the final. Poetic! Former Mariner Eugenio Suárez was the game's hero. Suárez had his US citizenship processing cancelled in December "because of the Venezuela thing," he said. He's also spoken about how Immigration and Customs Enforcement is negatively impacting Latino baseball players. Here's his RBI double in the ninth inning:
EUGENIO SUÁREZ RBI DOUBLE
Venezuela retakes the lead in the 9th
— MLB Daily News (@insidemlbnews.bsky.social) March 17, 2026 at 7:39 PM
[image or embed]
Don't you hate when this happens? A French officer on an aircraft carrier deployed to the Middle East went for a run on the carrier's deck. He allegedly logged it on the workout app Strava because of the age old saying: "If a man goes for a run and nobody sees the time, distance, and route, does he achieve any gains?" In doing so, he posted a map of his location and a map of the carrier's clandestine location. Oops! He ran 35 minutes though, good for him!
Google Sucks Shit: According to The Verge, Google search is now replacing headlines—those things we painstakingly craft—with inaccurate, AI generated AI slop, often changing the meaning entirely in what the company calls a "small and narrow experiment." It changed a Verge headline from "I used the ‘cheat on everything’ AI tool and it didn’t help me cheat on anything” to “‘Cheat on everything’ AI tool.” This is bad. Google search was the internet. It's a fucking verb.A Song for Your Friday: Do you remember when the Seattle Police Department lip-synced to "Downtown" by Macklemore in 2018? It was part of this internet trend of local police departments challenging each other to lip sync battles. I think about this video at least once a year.
FCC Chair Carr’s Threats to Punish Broadcasters Are Unconstitutional [Deeplinks]
EFF joined other digital rights and civil liberties organizations in calling out the unconstitutionality of Federal Communications Commission chair Brendan Carr’s recent threats to punish broadcasters for airing statements he disagrees with.
Carr’s recent threats, like his past threats, are unconstitutional efforts to coerce news coverage that favors President Donald Trump. He wrongly claims that the FCC’s “public interest” standard allows him and the commission to revoke the licenses of broadcasters who publish news that is unflattering to the government is anathema to our country’s core constitutional values.
The First Amendment constrains the FCC’s authority to force broadcasters to toe the government’s line, even though broadcast licensees are required to operate in the “public interest, convenience, and necessity.” Imposing restrictions on licensees’ speech, especially viewpoint-based limitations, are still subject to First Amendment scrutiny even if, in some circumstances, that scrutiny differs somewhat from that applied to non-broadcast media. And the “public interest” requirement, as it were, has never been interpreted to allow the type of viewpoint-based punishment that Carr has threatened here.
Everyone agrees that news reporting should strive for accuracy, but Carr’s threats have little do with that. Instead, his allegations of "falsity" are a proxy for retaliation based on (1) Carr’s subjective policy disagreements; (2) any criticism of Trump and the administration broadly; (3) treatment of anything that is not the official US government line about the Iran War as “false.”
We join the call for Carr to withdraw these threats.
Today in “Look at This Dork” [Whatever]

Krissy and I are on our way to the JoCo Cruise, and as you can tell, we are excited! Well, I am excited, Krissy is, as ever, tolerant. Also I have brought a tiny ukulele, because, after all, is it really a vacation without a tiny ukulele?
Don’t expect too much from me over the next week. Don’t worry, Athena will be around and posting good stuff. As for me, my plan is to get on a boat and not look at the rest of the world for a while. It’s a good plan, which is why I do it annually.
— JS
Quick note on Bluesky's
disclosures. Yesterday they disclosed $100 million investment
in April last year. It's good that they cleared it up, but bad that
they were hiding it for so long. Everything about what they do is
based on trust. New management probably is the reason this happened
now. They should also clean up the promises they've made about
Bluesky as a platform. I've done the homework, having
developed a few apps using their API,
some are still running. If I were their new CEO, I would announce
that in addition to supporting AT Proto, they will also hook up
Bluesky to the web. The web is already decentralized. Lots of
developers know how to build web stuff. We can all breathe the same
air.
Knight Foundation: "How did a private foundation with roots in local journalism and civic life find itself on a cap table with venture capital firms like Bain Capital Crypto and Bloomberg Beta to invest in a tech startup?" Imho because they misled you.
Security updates for Friday [LWN.net]
Security updates have been issued by AlmaLinux (capstone, glibc, grub2, kernel, libarchive, libpng, mysql, and python3.11), Debian (evolution-data-server, imagemagick, and snapd), Fedora (bpfman, chromium, cpp-httplib, dotnet10.0, openssh, polkit, and vim), Mageia (graphicsmagick, imagemagick, openssh, and perl-YAML-Syck), Oracle (capstone, grub2, kernel, mysql, and python-pyasn1), Red Hat (container-tools:rhel8, rhc, yggdrasil, and yggdrasil-worker-package-manager), SUSE (cargo1.92, cargo1.93, chromedriver, coturn, curl, freerdp, jq, kernel, libssh, php-composer2, python311-uv, python312, qemu, tomcat, util-linux, vim, and virtiofsd), and Ubuntu (exiv2, freerdp3, glance, linux, linux-aws, linux-aws-hwe, linux-gcp, linux-gcp-4.15, linux-hwe, linux-kvm, linux-oracle, and linux-aws-fips, linux-fips, linux-gcp-fips).
Not that long ago, we were resigned to the idea that humans would need to inspect every line of AI-generated code. We’d do it personally, code reviews would always be part of a serious software practice, and the ability to read and review code would become an even more important part of a developer’s skillset. At the same time, I suspect we all knew that was untenable, that AI would quickly generate much more code than humans could reasonably review. Understanding someone else’s code is harder than understanding your own, and understanding machine-generated code is harder still. At some point—and that point comes fairly early on—all the time you saved by letting AI write your code is spent reviewing it. It’s a lesson we’ve learned before; it’s been decades since anyone except for a few specialists needed to inspect the assembly code generated by a compiler. And, as Kellan Elliott-McRae has written, it’s not clear that code review has ever justified the cost. While sitting around a table inspecting lines of code might catch problems of style or poorly implemented algorithms, code review remains an expensive solution to relatively minor problems.
With that in mind, specification-driven development (SDD) shifts the emphasis from review to verification, from prompting to specification, and from testing to still more testing. The goal of software development isn’t code that passes human review; it’s systems whose behavior lives up to a well-defined specification that describes what the customer wants. Finding out what the customer needs and designing an architecture to meet those needs requires human intelligence. As Ankit Jain points out in Latent Space, we need to make the transition from asking whether the code is written correctly to asking whether we’re solving the right problem. Understanding the problem we need to solve is part of the specification process—and it’s something that, historically, our industry hasn’t done well.
Verifying that the system actually performs as intended is another critical part of the software development process. Does it solve the problem as described in the specification? Does it meet the requirements for what Neal Ford calls “architectural characteristics” or “-ilities”: scalability, auditability, performance, and many other characteristics that are embodied in software systems but that can rarely be inferred from looking at the code, and that AI systems can’t yet reason about? These characteristics should be captured in the specification. The focus of the software development process moves from writing code to determining what the code should do and verifying that it indeed does what it’s supposed to do. It moves from the middle of the process to the beginning and the end. AI can play a role along the way, but specification and verification are where human judgment is most important.
Want Radar delivered straight to your inbox? Join us on Substack. Sign up here.
Drew Breunig and others point out that this is inherently a circular process, not a linear one. A specification isn’t something you write at the start of the process and never touch again. It needs to be updated whenever the system’s desired behavior changes: whenever a bug fix results in a new test, whenever users clarify what they want, whenever the developers understand the system’s goals more deeply. I’m impressed with how agile this process is. It is not the agile of sprints and standups but the agile of incremental development. Specification leads to planning, which leads to implementation, which leads to verification. If verification fails, we update the spec and iterate. Drew has built Plumb, a command line tool that can be plugged into Git, to support an automated loop through specification and testing. What distinguishes Plumb is its ability to help software developers look at the decisions that resulted in the current version of the software: diffs, of course, but also conversations with AI, the specifications, the plans, and the tests. As Drew says, Plumb is intended as an inspiration or a starting point, and it’s clearly missing important features—but it’s already useful.
Can SDD replace code review? Probably; again, code review is an expensive way to do something that may not be all that useful in the long run. But maybe that’s the wrong question. If you don’t listen carefully, SDD sounds like a reinvention of the waterfall process: a linear drive from writing a detailed spec to burning thousands of CDs that are stored into a warehouse. We need to listen to SDD itself to ask the right questions: How do we know that a software system solves the right problem? What kinds of tests can verify that the system solves the right problem? When is automated testing inappropriate, and when do we need human engineers to judge a system’s fitness? And how can we express all of that knowledge in a specification that leads a language model to produce working software?
We don’t place as much value in specifications as we did in the last century; we tend to see spec writing as an obsolete ceremony at the start of a project. That’s unfortunate, because we’ve lost a lot of institutional knowledge about how to write good, detailed specifications. The key to making specifications relevant again is realizing that they’re the start of a circular process that continues through verification. The specification is the repository for the project’s real goals: what it’s supposed to do and why—and those goals necessarily change during the course of a project. A software-driven development loop that runs through testing—not just unit testing but fitness testing, acceptance testing, and human judgment about the results—lays the groundwork for a new kind of process in which humans won’t be swamped by reviewing AI-generated code.
Michael Ablassmeier: virtnbdbackup 2.46 - bitlocker recovery keys [Planet Debian]
I’ve released virtnbdbackup 2.46 which now attempts to extract the bitlocker recovery keys during backup. The windows domains need a working qemu agent installed during backup for this to work.
Using the agent, it also extracts the available guestinfo (network config, OS version etc..) from the domain and stores it alongside with the backup.
Error'd: Yeah Yeah I'm The Tax Man [The Daily WTF]
In only a handful of years, four Liverpudlian scruffs clawed
their way from obscurity to unprecedented worldwide celebrity.
Yeah, yeah, yeah.
Already making a mint from "Money" and other hits, by 1965 they
were MBEs, and suddenly discovered class solidarity -- with the
rest of the singlet-clad bathers in their grottos of ducats. To be
fair, a 97% marginal rate does make it hard for a lad to break into
the ranks of true generational wealth.
So in 1966, George Harrison and his newly-minted toffs released the
anti-government protest shriek of the upper class, and even now, we
Americans share their pain in this our momen of reckoning with ...
the Tax Man.
The Beast in Black first complained "I tried to get my W2 (for our non-Murican friends, that's the statement from your employer showing how much they paid you and how much tax they deducted) from ADP, and apparently their programmers did a number (two) on the form. TRWTF is that the damn form actually works if I add the slash separators to the date components."
And again he moaned "Frankly, I'm a little too scared by this WTF to be snarky; I'd expect a Tax Accounting firm - H&R Block in this case - to not have such basic accounting WTFs. Perhaps they should change their name to H&R Blockhead...?"
Adam R. remarked "It's tax season again. I hope their tax return backend is better than their JavaScript frontend that set the tooltip on this image to [object Object]."
Frustrated Dustin S. is trying to comply: "I logged into my credit union to download the tax documents for my account, but when I clicked on the link, this is what I got. Maybe doing taxes by invoice in the U.S. now?"
And looking to the future, the tax man cometh inevitably for Michael R. , though not today. "In green: I want to enter a discount for the items I'm selling. The error says:"Invalid discount amount. Please enter a discount of less than €0.00 (packaging costs + taxes).". Yes, I have also tried to enter -7,41 without any luck. In blue: It says:"Total amount approx.". Maybe one of the ebay lawyers figured out they are using float data types and wants to cover their bottoms against the rounding errors?"
Proton Mail Shared User Information with the Police [Schneier on Security]
404 Media has a story about Proton Mail giving subscriber data to the Swiss government, who passed the information to the FBI.
It’s metadata—payment information related to a particular account—but still important knowledge. This sort of thing happens, even to privacy-centric companies like Proton Mail.
Can you make it worse? [Seth's Blog]
Is there something you can do right now that would impede progress, degrade quality or simply mess up the current situation?
Is there a way you could shift perceptions to make people more distraught, less hopeful or even panicked?
If it’s so easy to accomplish worse, why do we persist in believing we don’t have the power to make things better?
It Takes A Village [Penny Arcade]
New Comic: It Takes A Village
Girl Genius for Friday, March 20, 2026 [Girl Genius]
The Girl Genius comic for Friday, March 20, 2026 has been posted.
Waking Up, p02 [Ctrl+Alt+Del Comic]
The post Waking Up, p02 appeared first on Ctrl+Alt+Del Comic.
Feds Disrupt IoT Botnets Behind Huge DDoS Attacks [Krebs on Security]
The U.S. Justice Department joined authorities in Canada and Germany in dismantling the online infrastructure behind four highly disruptive botnets that compromised more than three million Internet of Things (IoT) devices, such as routers and web cameras. The feds say the four botnets — named Aisuru, Kimwolf, JackSkid and Mossad — are responsible for a series of recent record-smashing distributed denial-of-service (DDoS) attacks capable of knocking nearly any target offline.
Image: Shutterstock, @Elzicon.
The Justice Department said the Department of Defense Office of Inspector General’s (DoDIG) Defense Criminal Investigative Service (DCIS) executed seizure warrants targeting multiple U.S.-registered domains, virtual servers, and other infrastructure involved in DDoS attacks against Internet addresses owned by the DoD.
The government alleges the unnamed people in control of the four botnets used their crime machines to launch hundreds of thousands of DDoS attacks, often demanding extortion payments from victims. Some victims reported tens of thousands of dollars in losses and remediation expenses.
The oldest of the botnets — Aisuru — issued more than 200,000 attacks commands, while JackSkid hurled at least 90,000 attacks. Kimwolf issued more than 25,000 attack commands, the government said, while Mossad was blamed for roughy 1,000 digital sieges.
The DOJ said the law enforcement action was designed to prevent further infection to victim devices and to limit or eliminate the ability of the botnets to launch future attacks. The case is being investigated by the DCIS with help from the FBI’s field office in Anchorage, Alaska, and the DOJ’s statement credits nearly two dozen technology companies with assisting in the operation.
“By working closely with DCIS and our international law enforcement partners, we collectively identified and disrupted criminal infrastructure used to carry out large-scale DDoS attacks,” said Special Agent in Charge Rebecca Day of the FBI Anchorage Field Office.
Aisuru emerged in late 2024, and by mid-2025 it was launching record-breaking DDoS attacks as it rapidly infected new IoT devices. In October 2025, Aisuru was used to seed Kimwolf, an Aisuru variant which introduced a novel spreading mechanism that allowed the botnet to infect devices hidden behind the protection of the user’s internal network.
On January 2, 2026, the security firm Synthient publicly disclosed the vulnerability Kimwolf was using to propagate so quickly. That disclosure helped curtail Kimwolf’s spread somewhat, but since then several other IoT botnets have emerged that effectively copy Kimwolf’s spreading methods while competing for the same pool of vulnerable devices. According to the DOJ, the JackSkid botnet also sought out systems on internal networks just like Kimwolf.
The DOJ said its disruption of the four botnets coincided with “law enforcement actions” conducted in Canada and Germany targeting individuals who allegedly operated those botnets, although no further details were available on the suspected operators.
In late February, KrebsOnSecurity identified a 22-year-old Canadian man as a core operator of the Kimwolf botnet. Multiple sources familiar with the investigation told KrebsOnSecurity the other prime suspect is a 15-year-old living in Germany.

psst if you sign up for the $5/month tier on my patreon you can see the (very nsfw) thirst pic
Google to introduce overly onerous hoops to prevent “sideloading” [OSnews]
When Google said they were going to require verification from every single Android developer that would end the ability to install applications from outside of the Play Store (commonly wrongfully referred to as “sideloading”), it caused quite a backlash. The company then backtracked a little bit, and said they would come up with an “advanced flow” to make sure installing applications from outside of the Play Store remained possible. Well, Google has detailed this “advanced flow”, and as everyone expected, it’s such a massive list of onerous hoops to jump through they might as well just lock Android down to the Play Store and get it over with.
First, if a developer is verified, you can download their applications to your device and install them the same way you can do now. Second, developers with “limited distribution accounts”, such as students or hobby projects, can share their applications with up to 20 devices without verification. Third, and this is where the fun starts, we have unverified developers – basically what all Android developers sharing applications outside of the Play Store are now.
Here’s the full “advanced flow” as described by Google to allow you to install an application from an unverified developer:
- Enable developer mode in system settings: Activating this is simple. This prevents accidental triggers or “one-tap” bypasses often used in high-pressure scams.
- Confirm you aren’t being coached: There is a quick check to make sure that no one is talking you into turning off your security. While power users know how to vet apps, scammers often pressure victims into disabling protections.
- Restart your phone and reauthenticate: This cuts off any remote access or active phone calls a scammer might be using to watch what you’re doing.
- Come back after the protective waiting period and verify: There is a one-time, one-day wait and then you can confirm that this is really you who’s making this change with our biometric authentication (fingerprint or face unlock) or device PIN. Scammers rely on manufactured urgency, so this breaks their spell and gives you time to think.
↫ Matthew Forsythe at the Android Developers Blog
- Install apps: Once you confirm you understand the risks, you’re all set to install apps from unverified developers, with the option of enabling for 7 days or indefinitely. For safety, you’ll still see a warning that the app is from an unverified developer, but you can just tap “Install Anyway.”
Setting aside the fact that developer verification is, in and of itself, a massive problem, I’m kind of okay with a few scary warnings, a disclaimer, and perhaps a single reboot to enable installing applications outside of the Play Store – a few things to make normal people shrug their shoulders and not bother. However, adding enabling developer mode and a goddamn 24-hour waiting period is batshit insanity, and clearly has the intention of discouraging everyone, effectively locking Android to the Play Store.
Android is already basically an entirely locked-down, closed-source platform, and once this “advanced flow” comes into force, there’s virtually no difference between iOS and Android, especially for us Europeans who get similarly onerous anti-user nonsense when trying to install alternative application stores on iOS. I see no reason to buy Android over iOS at this point – might as well get the faster phone with better update support.
I Want Megan Carter to Punch Me in the Face [The Stranger]
Whenever someone (inevitably) says to me, “Women’s hockey just isn’t as physical as men’s,” I laugh and say, “You obviously have not been paying attention to Megan Carter.” by Megan Seling
It was in the third period of the Torrent’s inaugural home game that Megan Carter cemented her status as my favorite Torrent player to watch. The team was down 3-0 against two-time PWHL champions Minnesota Frost, with fewer than five minutes left to turn things around. More than 16,000 hockey fans were packed into Climate Pledge Arena, and they were all vibrating with anticipation for the Torrent’s first game, first goal, first win, but the excitement and the optimism were draining out of the arena, drop by drop, with every tick of the clock.
Then Carter, to quote legendary fictional hockey player Shoresy, “Set the fucking tone.”
Before coming to Seattle, Carter had already earned a reputation as a physical player when she made her PWHL debut with the Toronto Scepters in the 2024–2025 season. And she had a history with Frost player Britta Curl-Salemme, too. Last season, Curl-Salemme was suspended for one game after elbowing Carter in the head, and the two players collided at least a couple of times during the Torrent’s home opener. Shit appeared to be brewing.
And then, when the Torrent were just a few minutes away from losing their first game on home ice, Carter and Curl-Salemme started shoving one another. I didn’t see who started it. But I saw Carter finish it when she wrapped her arms around Curl-Salemme’s head and dragged her down to the ice. The refs broke it up before things got any uglier, but in that move, Carter made it clear that she would not be taking any more shit from Curl-Salemme.
Climate Pledge Arena erupted into cheers as thousands of hockey fans—new and old—rose to their feet, appreciating the undeniable evidence that women’s hockey can be just as physical and fun to watch as men’s. Seattle loved to see it. (That Curl-Salemme had a history of liking transphobic social media posts may have had something to do with that.)
Today, Carter leads the team in hits, and whenever someone (inevitably) says to me, “Women’s hockey just isn’t as physical as men’s,” I laugh and say, “You obviously have not been paying attention to Megan Carter.” But people are starting to catch on, thankfully, and they are especially loving Carter and Torrent goalie CJ Jackson’s commitment to sleeveless game day outfits.
View this post on Instagram
After a recent Torrent practice, I sat down with Carter to learn more about how she developed her physical style of play—at just six years old!—and of course I had to ask her about any beef with Curl, too. She gave a very diplomatic answer, but don’t worry, she also shared some arm workout tips.
You lead the team in hits—you have a very physical style of play. That's something that people praised you for in Toronto, too. When did you start to develop that? Were you like a little six-year-old crunching people? Did that come with confidence and experience?
I think it just came with size and being a strong body out there. A lot of times it started with me being one of the bigger kids out there and running into a smaller kid, just by happenstance. We run into each other, and guess who falls. Not me. [Laughs] That led to a lot of penalties in my young years. It kind of stuck when other players started catching up [in size], and that was the direction that women's hockey was going in. It's like, “Wow, okay, I'm pretty good at this. I can refine this to be disciplined.” There are ways to finesse that and work around that, so it kind of happened just by nature of me.
Does it lead to any grudges on the ice?
Honestly, I play very free, and I think it's just part of my game. I've never had anyone hold any grudges against me, either, because they just know I'm gonna play hard, but I'm gonna do it in a clean way and within the rules, and I'm not, you know, head hunting or doing anything where someone’s gonna get injured. I think there's a mutual respect. And I welcome when other players play hard against me, because it allows me to play hard against them. That's what the fans want to see. That's what we want to see for the game. And for young girls to see the physicality and to see it being carried out in a proper way within the rules of the game is really important, because we're role models in more ways than one.
You mentioned it's what the fans want to see. I think that’s specifically true with the hit on Britta Curl-Salemme in an early game against Minnesota. You took an elbow to the head last season, and she was suspended for a game. Was that retaliation?
No, no. She's a player who also plays very physical, and just by nature, the two of us tend to run into each other, and it is a big interaction, because there's two big bodies running into each other.
I have to ask, because the Seattle fanbase especially likes your interactions with Curl-Salemme because so many of them don't agree with her off-ice politics. Is that anything you want to talk about, or can talk about?
Yeah, I don't bring any of that into the game. When I'm on the ice, I really try to just focus on what's within the glass. I just want to respect the game and play the game that I love, and whatever happens out there happens.
It got a lot of cheers in the stands. [Laughs]
[Laughs] Fans can take it however they’d like.
I also want to ask about the no-sleeve arena entry. Both you and CJ have gotten very popular on Instagram for your sleeveless walk-ins. How did that start?
So CJ is an awesome character. Loves to not wear sleeves working out, and loves to flex and show the biceps off.
I mean, they’re good guns!
As they should! They’re great guns!
You work hard for those!
Exactly, right? All of last year, we got to know each other in Toronto, too, and they always complimented me, “You need to take your sleeves off. It’s about time!” And I'm like, “No, no, I'll just cover them up for now, they're not as good as yours, whatever.” [Laughs] Anyway, so we had a walk-in—we're roommates—and so I had told them that I'm gonna be wearing a sleeveless shirt. And CJ’s like, “Perfect. If you’re not wearing sleeves, I can't wear sleeves.” And I just have to go with it. It got a lot of attention from the first game, and we're like, “Okay, fans love it. We love doing it. We love showing off the guns. Why not just roll with it?” And so we had some sleeveless things in our closets, and then slowly started running out of things…
At some point, you’re just cutting the sleeves off of things!
Which is what we've come to now. And some people have given us shirts to cut off, too, which is pretty cool. We went thrifting the other day to find some outfits.
Can you drop the arm routine? What does arm day look like for Megan Carter?
Honestly, it’s a bunch of things. Training in hockey, everything is more focused on the functionality piece of it, versus just the aesthetic. But there's a lot of primary lifts, whether it's bench press, chin-ups—of course, we like to add a little bit of what we call arm farm at the end.
What is arm farm?
Bicep curls, tricep extensions, all the pretty exercises…
The glamour muscles.
Exactly [laughs]. We never shy away from those where they’re an option.
Well, now that you know people are paying attention.
Oh, yeah. Like, over the Olympic break, every time we were in the gym, we're like, ‘We gotta do it for the walk-ins!”
Do you remember your first shift on the ice and how you felt before taking the ice as a Torrent player in a new city, versus now, now that the team is established? Fans are coming to practices and cheering for y'all just in the scrimmage! How has that feeling evolved over the season?
Obviously, coming to a new place, you never know how fans are going to receive you, how they're going to show up. I was here in August for a youth camp and an adult camp—I helped out coaching, running some drills, and stuff—and once I saw that turnout, I was like, “We're gonna be fine. We're in great hands.” I was super excited. When I flew home back to Toronto, I was like, “I can't wait to get back there in November.” So I knew from day one we were gonna have a great fan base, a great community. In that sense, I'm not surprised to see so many fans showing up to our practices, selling out Climate Pledge Arena. That was absolutely amazing, and a dream come true. Over time, as you get more comfortable with your teammates, the system, like everyone was new, the coaching staff, the players…
And you had something like, what, 14 days of training camp? What did you do to familiarize yourself with the city, but also with the team? How did you bond and ensure that you’ll have some kind of consistency and synergy on the ice?
I think, honestly, just having small conversations and trying to get to know each other as people. And we've all played against each other or with each other at some point, so that eases that transition, for sure. But I think this group is really special. Everyone cares about each other off the ice. We've always had a belief in the team and in ourselves and each other. So that's really special, because sometimes when things aren't quite going the way that you want them to go, it's really easy to point fingers and almost throw in the towel, right? But that's not the case here, and we're confident that we're gonna turn this around and do this for each other, do this for our fanbase, do this for the city. We went to the Seattle Seahawks Super Bowl celebration, and that was very motivating, because we know the city would do the same thing for us. We want that, and that's still the vision.
Would you wear sleeves in the parade?
You know, I think I wouldn’t be able to. Or I’d have to tear them away or something.
Last question, and it's kind of a goofy one: Hilary Knight has the cheese curds on the menu at Rough & Tumble. What would the Megan Carter menu item be at Rough & Tumble?
Oh, this is hard. [Thinks for several seconds] Maybe like a maple pulled pork slider, because it has a little bit of the Canadian in it, and something that’s simple, you know what you’re gonna get, and enjoyable.
Is that your style of play?
Yeah, honestly, just try to be reliable, simple, and do what I can.
I was thinking chicken wings, a nod to the arms, but maybe CJ gets those.
No, Ceej needs the hot dog, the little cocktail wiener things.
US vaccine-advisory committee as illegal [Richard Stallman's Political Notes]
*The appointment of a controversial slate of [antivax] vaccine advisers by Robert F Kennedy Jr likely violated federal law, and all votes taken by the committee over the past year have been stayed, a federal judge ruled on Monday.*
In particular, their vote to remove many vaccines from the US childhood schedule has been rendered inactive — for now. But if a higher court reverses this court decision, that will reactivate the vote.
*These "advisers" "missed 99% of data" on Covid vaccines before making recommendation, memos reveal.*
The hardship-happy Tehranians [Richard Stallman's Political Notes]
Interviews with civilians in Tehran who aren't sure which side of the war they need to fear more.
Iranian dissident disappeared, CAN [Richard Stallman's Political Notes]
Masood Masjoody, an Iranian dissident in exile in Canada, disappeared and it looks like the regime had him murdered.
Betting on Iran war [Richard Stallman's Political Notes]
Calling for investigation of bets about the attack on Iran, because of suspicions the bettors had inside information, and the implications if they did.
New supreme leader, IRN [Richard Stallman's Political Notes]
Iran has plenty of supporters for its new supreme leader, just as it has plenty of protesters who hate him.
He is reported to hate the protesters and plans to ramp up the repression in Iran.
Refusing to sign bills into law, US [Richard Stallman's Political Notes]
The wrecker threatens to go on strike by refusing to sign any bills that Congress might pass, unless/until it passes the voter-suppressing Subjugate America Act.
If he does go on strike, that would protect American from many bad bills that Republicans want to pass, bills which would attack our freedoms, crush the poor, or subject us to diseases.
Alas, we can't expect him to keep his word. He might at any moment break his own strike by signing some particularly vicious bill.
The Big Idea: Lynne M. Thomas & Katy Rawdon [Whatever]

Like two peas in a time travel pod, archivist and author Katy Rawdon teamed up with Hugo-award winning editor Lynne M. Thomas to craft the perfect time travel narrative. Take a closer look at famous time travel stories from all across the globe in The Infinite Loop: Archives and Time Travel in the Popular Imagination, with a foreword from one such writer herself, Connie Willis.
KATY RAWDON (a.k.a. KATY JAMES):
Archives are made of time. Time is made of archives. Archives are where time gets mixed up, turned around, and pulled apart.
I have always been obsessed with time, frustrated with it, wanting to tear at it and see what’s behind and underneath it. No doubt that’s why I became an archivist some thirty years ago, so that I could look at the physical remnants of time and preserve them, see what’s missing, and organize and interpret time’s leftovers for people who, wisely, do not think about time all the… time.
When I was approached to submit an idea (a big idea!) for a book series jointly published by the American Library Association (ALA) and the Society of American Archivists (SAA) called Archival Futures – a series that tackles big ideas around the archival profession – there was only one possible topic for me to write about: time.
While the phrase “archives are like time travel” is thrown around a lot, I knew the relationship between historical records and time was far more complicated. Archives reinforce and challenge our very conceptions of time, of what has happened, of what will happen, of what is truth and what is unknowable. The evidence of archives can be used to demonstrate how the past is so much more faceted than the narrow stories of history we tend to tell ourselves and others. Archives can also be selectively wielded as propaganda, or erased to allow for falsehoods to sprout and flourish in the empty spaces. Time can be illustrated, illuminated, rendered invisible, or constructed in new ways using the material items created in the course of history.
Unfortunately, all of this turned out to be so complicated that the series’ word limit of 50,000 was never going to cover it, as I painfully discovered while writing the book proposal.
I am forever grateful that the inimitable Lynne M. Thomas stepped into my creative mess and provided direction: Why not analyze the depiction of both archives and time travel in popular narratives (books, television, movies, etc.) and see what we could unearth? As a romance author (Katy James) as well as an archivist (Katy Rawdon), I was more than happy to spend time in fictional worlds in order to better understand my non-fictional archivist profession.
It turns out that we unearthed a lot – about cultural views regarding time and time travel, the popular perception of archives and archivists, and the ways current archival theory and practice intersect (or don’t) with ideas about time and time travel.
How does time work? How is it understood by different people and cultures? How do archives help or hinder our understanding of the past (and future)? How can popular narratives about time travel and archives guide archivists to shift their methods to a more expansive, inclusive, transparent approach? How can archival workers apply current archival theory and practice to all of the above ideas to better serve their communities and increase the use of archives?
Researching this book and synthesizing all of the swirling concepts was a real mind-twister of an exercise, trying to write our expansive, big ideas while keeping it succinct and legible for archivists and general readers alike.
We hope we’ve succeeded.
LYNNE M. THOMAS:
Sometimes, if you’re very lucky, the right project turns up at exactly the right time. As a professional rare book librarian, twelve-time Hugo Award winning SFF editor and podcaster, and massive Doctor Who fan, I had a moment of “I was literally made for this” when Katy explained her concept for the book to me and asked me to join her. My initial contribution was more or less “but what if we add Doctor Who examples to make all this time stuff understandable,” and then … we got excited. Because when you have the chance to dive deep into a particular rabbit hole that looks perfect for you specifically, you lean hard into your personal weird.
Time travel stories often feature archives to prove the narrative truth of characters’ experiences. The main character goes into a locked room full of dusty boxes, and immediately finds the one piece of documentary evidence they need to solve their problem, or make sense of their experiences. And yet archivists—the people tasked with organizing and running archives—are almost always invisible or nonexistent in these very same narratives. When we do show up…well, it feels like writers haven’t talked to an archivist lately.
That…bothered us. It turns out, when you have professional archivists and librarians who are also active writers and editors in science fiction, we have thoughts and opinions about how archivists and librarians are portrayed (or not) in fiction and nonfiction. But we thought, maybe we’re seeing a pattern that doesn’t exist, it’s just that “red car syndrome” thing where experts pay more attention to the areas of their expertise in the narratives than non-experts do. So… we checked. We looked at dozens of time travel stories across novels, comics, television series, and films. We discuss Doctor Who, of course, but also Loki, Star Wars, works by Connie Willis (who wrote our foreword), Octavia Butler, Jodi Taylor, Rivers Solomon, Deborah Harkness, and H.G. Wells, among many, many more. We also looked at a whole lot of archival literature—how archivists and librarians talk about themselves, their professions, and their work to one another. And because we are both academic librarians, we laid out our findings in a peer-reviewed book.
What we learned is that there’s a massive divide between what pop culture thinks we do, and what we actually do, and the even greater divide between the level of resources pop culture thinks we have, and what we actually have…and we posit multiple ways to close those gaps.
The Infinite Loop is where archives and pop culture’s image of archives meet and have a long overdue chat. Our hope is that these conversations will lead to archivists being better able to explain what we do, and have that knowledge spread far and wide across popular culture. Ideally, with some time travel stories that feature archivists as main characters. It’s well past time.
The Infinite Loop: Amazon|Barnes & Noble|Powell’s|Inkwood Books
Author socials: Katy’s Bluesky|Katy’s Instagram|Katy’s Website|Lynne’s Bluesky|Lynne’s Instagram|Lynne’s Website
You can make Linux syscalls in a Windows application, apparently [OSnews]
What happens if you make a Linux syscall in a Windows application?
So yeah, you can make Linux syscalls from Windows programs, as long as they’re running under Wine. Totally useless, but the fact that such a Frankenstein monster of a program could exist is funny to me.
↫ nicebyte at gpfault.net
The fact that this works is both surprising and unsurprising at the same time.
Ticket Alert: Chateau Ste. Michelle Summer Concerts, Bleachers, and More Seattle Events Going On Sale [The Stranger]
Which shows will you add to your concert calendar? Tickets for Chateau Ste. Michelle’s summer concert series go on sale next Monday, with this year’s lineup including Bob Dylan and Metric, Broken Social Scene, and Stars. Pop-rock band Bleachers will stop in Tacoma to support their forthcoming album Everyone for Ten Minutes. Plus, “Boo’d Up” singer Ella Mai visits Seattle on her Do You Still Love Me? Tour. Read on for details on those and other newly announced events.
ON SALE FRIDAY, MARCH 20MUSIC
3BallMTY
The Showbox (Thurs June 11)
An Acoustic Evening with Trey Anastasio
Paramount Theatre (Wed May 27)
Bleachers Forever Tour
Dune Peninsula Park (Sat Sept 19)
Bluesky raised $100 million last April, just announcing it now. No doubt part of Toni Schneider's cleanup, new CEO, need to get this out in public now. It was a mistake to keep it hidden.
Last month, when I did a mail-order experiment (password = “yum”), many people requested vegan Terffles. Recently I created a successful ganache using coconut cream instead of the dairy variety, so I decided to buy some expensive specialty ingredients to make a 100% vegan batch of Amaretto Amarena Cherries and C3 Spice, the most popular Terffle flavors.
Amaretto Amarena Cherry
Vegan dark chocolate is easy enough to find; Trader Joe’s 72% Dark suffices. White chocolate, with which I make the Amaretto ganache, is harder to find in vegan form, but not impossible. There are many vegan “white” “baking chips” but most are made with palm kernel oil, not cocoa butter. I ordered Pascha “Organic White Rice Chocolate Baking Chips” which do contain cocoa butter, but haven’t tried them yet. I also ordered a bag of straight-up cocoa butter, figuring I could adjust my ganache recipe and let the coconut cream, almonds, and sugar make up for the missing milk and sugar in the product itself.
Carefully measuring cocoa butter
Everything was going along fine…
Roasting blanched slivered almonds
…until I absent-mindedly mis-measured the coconut cream and Amaretto, accidentally doubling them. Whoops! Soon I was doing seat-of-the-pants cooking-by-taste (don’t worry, I never double-dip tasting spoons, I am after all a Certified Food Handler) while creating a mess:
The resulting ganache is now chilling in the fridge, and I hope to form it around Amarena cherries later tonight.
The C3 Spice ganache will be made with coconut cream and 72% Dark chocolate, but it needs something resembling milk chocolate for the coating. This was very hard to find. I eventually settled/splurged on a kilogram of Valrhona Amatika 46% Single Origin Almond Milk Chocolate, which arrived today:
It cost over 4 times the very good Aldi milk chocolate I usually use. Is it good? Yes. Have I had better? Also yes. But it’s better than cheap American Milk Chocolate, and really is quite good for what it is.
I actually think just a tiny bit of salt would improve the taste, so I will add some when I melt it for coating, along with freshly-ground cardamom.
Less awesome chocolatiers than myself would skip the pure cocoa butter and use palm kernel oil instead. They would also use dark chocolate even to coat a dark chocolate ganache, caring nothing about balance as long as it’s vegan. But I am not a less awesome chocolatier, I am my awesome self, and life is too short to eat mediocre chocolate. Even if it’s vegan.
Stay tuned.
Update March 20 2026: First batch of vegan terffles NOT AS GOOD as non-vegan ones. Taste too much like health food. I’m finding cocoa butter weird to work with. May have to re-do it from scratch.
The post Vegan Terffles appeared first on Nina Paley.
Windows stack limit checking retrospective: amd64, also known as x86-64 [The Old New Thing]
Our survey of stack limit checking reaches the modern day with amd64, also known as x86-64. This time, there are two versions of the function, one for user mode and one for kernel mode. We’ll look at the user mode version.
Actually, there are two user mode versions. One is in msvcrt, the legacy runtime.
; on entry, rax is the number of bytes to allocate
; on exit, stack has been validated (but not adjusted)
chkstk:
sub rsp, 16
mov [rsp], r10 ; save temporary register
mov [rsp][8], r11 ; save temporary register
xor r11, r11 ; r11 = 0
lea r10, [rsp][16][8] ; r10 = caller's rsp
sub r10, rax ; r10 = desired new stack pointer
cmovb r10, r11 ; clamp underflow to zero
mov r11, gs:[StackLimit]; user mode stack limit
cmp r10, r11 ; are we inside the limit?
jae done ; Y: nothing to do
and r10w, #-PAGE_SIZE ; round down to page start
probe:
lea r11, [r11][-PAGE_SIZE] ; move to previous page
test [r11], r11b ; probe it
cmp r10, r11 ; finished probing?
jb probe ; N: keep going
done:
mov r10, [rsp] ; restore temporary register
mov r11, [rsp][8] ; restore temporary register
add rsp, 16 ; clean up stack
ret
Bonus reading: Windows is not a Microsoft Visual C/C++ Run-Time delivery channel.
The other is in ucrtbase, the so-called universal runtime. That one is identical except that the probing is done by writing rather than reading.
mov byte ptr [r11], 0 ; probe it
In both cases, the function ensures that the stack has expanded the necessary amount but leaves it the caller’s responsibility to adjust the stack after the call returns. This design preserves compliance with shadow stacks (which Intel calls Control-Flow Enforcement Technology, or CET).
A typical usage might go like this:
mov eax, #17328 ; desired stack frame size (zero-extended)
call chkstk ; validate that there is enough stack
sub rsp, rax ; allocate it
Next time, we’ll wrap up the series with a look at AArch64, also known as arm64.
The post Windows stack limit checking retrospective: amd64, also known as x86-64 appeared first on The Old New Thing.
Google details new 24-hour process to sideload unverified Android apps (Ars Technica) [LWN.net]
Ars Technica describes the ritual that will be required before a future Android device will deign to install apps from somewhere other than the Play Store. It is not for the impatient.
Here are the steps:
- Enable developer options by tapping the software build number in About Phone seven times
- In Settings > System, open Developer Options and scroll down to "Allow Unverified Packages."
- Flip the toggle and tap to confirm you are not being coerced
- Enter device unlock code
- Restart your device
- Wait 24 hours
- Return to the unverified packages menu at the end of the security delay
- Scroll past additional warnings and select either "Allow temporarily" (seven days) or "Allow indefinitely."
- Check the box confirming you understand the risks.
- You can now install unverified packages on the device by tapping the "Install anyway" option in the package manager.
Do you need to get something off your chest? by Anonymous
Can we quit using our hazard lights as an excuse for shitty vehicular behavior? Every day, I see people stopping in the middle of moving traffic or blocking turn lanes and just sitting there with the ol' hazards going (usually the drivers are on their phones, too, but that's an entirely different beef). When did this become acceptable etiquette? When did pulling over onto the side of the road or even *gasp* parking where you're supposed to park become so passé?
I know, I know. Parallel parking isn't everyone's thing, and this city isn't exactly known for its ample parking spaces or wide streets. But that isn't an excuse for piss-poor, and let's be real here, dangerous behavior.
Yes, there are obviously exceptions to this, which are totally understandable (i.e., accessibility or actual emergencies). But the rest of you? Come ON. Get the fuck out of the way! Driving around the city is already bad enough without people actively obstructing traffic just so they don't have to be minorly inconvenienced. Using your flashers doesn't give you a pass. It just makes you an entitled asshole.
Do you need to get something off your chest? Submit an I, Anonymous and we'll illustrate it! Send your unsigned rant, love letter, confession, or accusation to ianonymous@thestranger.com. Please remember to change the names of the innocent and the guilty.
Slog AM: Cesar Chavez Allegedly Abused Girls, the Pentagon Wants $200 Billion, Dick’s Drive-In Lawsuit [The Stranger]
The Stranger's morning news roundup. by Micah Yip
Cesar Chavez: According to an investigation from The New York Times, United Farm Workers co-founder Cesar Chavez allegedly sexually groomed and abused multiple girls and women over many years, including minors connected to the farm workers movement and his UFW co-founder, Dolores Huerta. The revelations have led to canceled Chavez Day celebrations and calls to rename various honors bearing his name.
Suing Dick’s: Dick’s Drive-In is facing a class-action lawsuit alleging it didn’t give legally required breaks, pay overtime or “all the wages to which they are entitled.” Dick’s president and CEO Jasmine Donovan told KING 5 the company is reviewing the claims but could not comment on the case.
Tacoma Man Accused of Infant Rape: Court documents say that between April and November 2023, William Kelso Flournoy, 25, allegedly filmed himself raping of a 6- to 7-month-old child he was babysitting and then uploaded the footage online. Flournoy was arrested March 5 and remains in custody on charges of first-degree child rape and sexual exploitation of a minor.
Feds Detain Pregnant Woman in U-District: Federal officials arrested a pregnant woman from Venezuela and her 10-month-old baby near the University of Washington on Tuesday. According to friends of the woman, she came to the U.S. in 2023 seeking asylum and had a work permit. Mayor Katie Wilson later confirmed that the arrest was connected to a criminal warrant but not immigration related, and that the 10-month-old was now with Child Protective Services.
Flood Warning: The National Weather Service issued a flood warning for three sections of rivers in King County—the Tolt River above Carnation and the Snoqualmie River near Snoqualmie Falls and near Carnation—and a warning for the Stehekin River in the lower Stehekin Valley. King, Snohomish, Skagit, Whatcom and Mason counties are under Flood Watch through Friday afternoon.
Weather: It’s rainy and cold.
$200 billion: The Pentagon asked the White House for $200 billion for their war on Iran. Congress would have to approve its proposal, and the AP says it’s not clear the money would have political support. In defense of the request, Defense Secretary Pete Hegseth said, “It takes money to kill bad guys.”
Trump Meets with Japanese Prime Minister: After whining that US allies (including Japan) won’t help him wage war on Iran, President Trump will host Japanese Prime Minister Sanae Takaichi at the White House today. The meeting was originally planned to focus on trade and US-Japan relations, but is now expected to take a backseat to the war. Takaichi said she expects the meeting will be “very difficult.”
I Want To Believe (This Will Not Be a Racist Website) : The Executive Office of the President registered Aliens.gov yesterday morning, a month after Trump said he’d release UFO-related files to the public. It’s not live yet, but let’s hope it doesn’t turn into some terrible ICE troll site.
Big Bunny: Costco is selling a 10-pound chocolate bunny. His name is Pete, and he comes with a set of eating instructions that KING 5 calls “somewhat intense.” They advise smashing the bunny with a hammer, mallet or rolling pin, or chopping it with a warm serrated knife. Only $113 online. Happy Easter.
The trailer for Spider-Man: Brand New Day was released yesterday. It is very important that you watch.
Anthropic Settlement Information, Not For Me [Whatever]


The legal firm that is apparently handling at least some of the Anthropic Copyright Settlement case has started sending out notifications of some sort to presumably affected parties. Small problem: Some of these were sent not to the addresses of the presumably affected parties, but to mine.
I have not opened these notifications, as they are not addressed to me, so I don’t know what’s in them or what they say, and I will be henceforth disposing of these notifications unopened. However, if you are Jody Lynn Nye, Sarah Hoyt, Eric S. Brown, Christopher Smith, or the estate of Eric Flint, please be aware that JND Legal Administration is trying to inform you of something (probably that you have works that are eligible to be part of the class action suit).
I have contacted the firm in question and told them about these incorrect addresses and, for the avoidance of doubt, also informed them at no other affected author than me lives at my address. Hopefully that will take. That said, I would not be surprised if I get more notifications, not for me. What a wonderful age of information we live in.
— JS
Otto Kekäläinen: Automated security validation: How 7,000+ tests shaped MariaDB's new AppArmor profile [Planet Debian]

Linux kernel security modules provide a good additional layer of security around individual programs by restricting what they are allowed to do, and at best block and detect zero-day security vulnerabilities as soon as anyone tries to exploit them, long before they are widely known and reported. However, the challenge is how to create these security profiles without accidentally also blocking legitimate actions. For MariaDB in Debian and Ubuntu, a new AppArmor profile was recently created by leveraging the extensive test suite with 7000+ tests, giving good confidence that AppArmor is unlikely to yield false positive alerts with it.
AppArmor is a Mandatory Access Control (MAC) system, meaning that each process controlled by AppArmor has a sort of an “allowlist” called profile that defines all capabilities and file paths a program can access. If a program tries to do something not covered by the rules in its AppArmor profile, the action will be denied on the Linux kernel level and a warning logged in the system journal. This additional security layer is valuable because even if a malicious user found a security vulnerability some day in the future, the AppArmor profile severely restricts the ability to exploit it and gain access to the operating system.
AppArmor was originally developed by Novell for use in SUSE Linux, but nowadays the main driver is Canonical and AppArmor is extensively used in Ubuntu and Debian, and many of their derivatives (e.g. Linux Mint, Pop!_OS, Zorin OS) and in Arch. AppArmor’s benefit compared to the main alternative SELinux (used mainly in the RedHat/Fedora ecosystem) is that AppArmor is easier to manage. AppArmor continues to be actively developed, with new major version 5.0 expected to arrive soon.
I also have some personal history contributing some notification handler scripts in Python and I also created the website that AppArmor.net still runs.
Any system administrator using Debian/Ubuntu needs to know how to check for AppArmor denials. The point of using AppArmor is kind of moot if nobody is checking the denials. When AppArmor blocks an action, it logs the event to the system audit or kernel logs. Understanding these logs is crucial for troubleshooting custom configurations or identifying potential security incidents.
To view recent denials, check
/var/log/audit/audit.log or run journalctl -ke
--grep=apparmor.
A typical denial entry for MariaDB will look like this (split across multiple lines for legibility):
msg=audit(1700000000.123:456): apparmor="DENIED" operation="open"
profile="/usr/sbin/mariadbd" name="/custom/data/path/test.ibd" pid=1234
comm="mariadbd" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
How to interpret this output:
open,
mknod, file_mmap,
file_perm)./usr/sbin/mariadbd
profile).mariadbd).r for read, w for write).If an action seems legit and should not be denied, the sysadmin
needs to update the existing rules at /etc/apparmor.d/
or drop a local customization file in at
/etc/apparmor.d/local/. If the denied action looks
malicious, the sysadmin should start a security investigation and
if needed report a suspected zero-day vulnerability to the upstream
software vendor (e.g. Ubuntu customers to Canonical, or MariaDB
customers to MariaDB).
Based on old bug reports, there was an AppArmor profile already back in 2011, but it was removed in MariaDB 5.1.56 due to backlash from users running into various issues. A new profile was created in 2015, but kept opt-in only due to the risk of side effects. It likely had very few users and saw minimal maintenance, getting only a handful of updates in the past 10 years.
The primary challenge in using mandatory access control systems with MariaDB lies in the sheer breadth of MariaDB’s operational footprint with diverse storage engines and plugins. Also the code base in MariaDB assumes that system calls to Linux always work – which they do under normal circumstances – and do not handle errors well if AppArmor suddenly denies a system call. MariaDB is also a large and complex piece of software to run and operate, and it can be very challenging for system administrators to root-cause that a misbehavior in their system was due to AppArmor blocking a single syscall.
Ironically, AppArmor is most beneficial exactly due to the same reasons for MariaDB. The larger and more complex a software is, the larger are the odds of a security vulnerability arising between the various components. And AppArmor profile helps reduce this complexity down to a single access list.
Over the years there has been users requesting to get the AppArmor profile back, such as Debian Bug#875890 since 2017. The need was raised recently again by the Ubuntu security team during the MariaDB Ubuntu ‘main’ inclusion review in 2025, which prompted a renewed effort by Debian/Ubuntu developers, mainly myself and Aquila Macedo, with upstream MariaDB assistance from Daniel Black.
The key to creating a robust AppArmor profile is the ability to
know in detail what is expected and normal behavior of the
system. One could in theory read all of the source code in MariaDB,
but with over two million lines, it is of course not feasible in
practice. However, MariaDB does have a very extensive 7000+
test suite, and running it should trigger most code paths in
MariaDB. Utilizing the test suite was key in creating the
new AppArmor profile for MariaDB: we installed MariaDB on
a Ubuntu system, enabled AppArmor in complain mode and
iterated on the allowlist by running the full mariadb-test-run
with all MariaDB plugins and features enabled until we had a
comprehensive yet clean list of rules.
To be extra diligent, we also reworked the autopkgtest for MariaDB in Debian and Ubuntu CI systems to run with the AppArmor profile enabled and to print all AppArmor notices at the end of the run, making it easy to detect now and in the future if the MariaDB test suite triggers any AppArmor denials. If any test fails, the release would not get promoted further, protecting users from regressions.
While developing and triggering manual test runs we used the maximal achievable test suite with 7177 tests. The test is however so extensive it takes over two hours to run, and it also has some brittle tests, so the standard test run in Debian and Ubuntu autopkgtest is limited just to MariaDB’s main suite with about 1000 tests. Having some tests fail while testing the AppArmor profile was not a problem, because we didn’t need all the tests to pass – we merely needed them to run as many code paths as possible to see if they run any system calls not accounted for in the AppArmor profile.
Note that extending the profile was not just mechanical copying of log messages to the profile. For example, even though a couple of tests involve running the dash shell, we decided to not allow it, as it opens too much of a path for a potential exploit to access the operating system.
The result of this effort is a modernized, robust profile that is now production-ready. Those interested in the exact technical details can read the Debian Bug#1130272 and the Merge Request discussions at salsa.debian.org, which hosts the Debian packaging source code.
Even though the file is just 200 lines long, the
work to craft it spanned several weeks. To minimize risk we also
did a gradual rollout by releasing the first new profile version in
complain mode, so AppArmor only logs would-be-denials
without blocking anything. The AppArmor profile was switched to
enforce mode only in the very latest MariaDB revision
1:11.8.6-4 in Debian, and a NEWS item issued to help increase user
awareness of this change. It is also slated for the upcoming Ubuntu
26.04 “Resolute Raccoon” release next month, providing
out-of-the-box hardening for the wider ecosystem.
While automated testing is extensive, it cannot simulate everything. Most notably various complicated replication topologies and all Galera setups are likely not covered. Thus, I am calling on the community to deploy this profile and monitor for any audit denials in the kernel logs. If you encounter unexpected behavior or legitimate denials, please submit a bug report via the Debian Bug Tracking System.
To ensure you are running the latest MariaDB version, run
apt install --update --yes mariadb-server. To view the
latest profile rules, run cat /etc/apparmor.d/mariadbd
and to see if it is enforced review the output of
aa-status. To quickly check if there were any AppArmor
denials, simply run journalctl -k | grep -i apparmor | grep
-i mariadb.
For those interested in MariaDB security hardening, note that also new systemd hardening options were rolled out in Debian/Ubuntu recently. Note that Debian and Ubuntu are mainly volunteer-driven open source developer communities, and if you find this topic interesting and you think you have the necessary skills, feel free to submit your improvement ideas as Merge Requests at salsa.debian.org/mariadb-team. If your improvement suggestions are not Debian/Ubuntu specific, please submit them directly to upstream at GitHub.com/MariaDB.
| Feed | RSS | Last fetched | Next fetched after |
|---|---|---|---|
| @ASmartBear | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| a bag of four grapes | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Ansible | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Bad Science | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Black Doggerel | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Blog - Official site of Stephen Fry | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Charlie Brooker | The Guardian | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Charlie's Diary | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Chasing the Sunset - Comics Only | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Coding Horror | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| Cory Doctorow's craphound.com | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Cory Doctorow, Author at Boing Boing | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Ctrl+Alt+Del Comic | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Cyberunions | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| David Mitchell | The Guardian | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Deeplinks | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| Diesel Sweeties webcomic by rstevens | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Dilbert | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Dork Tower | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Economics from the Top Down | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Edmund Finney's Quest to Find the Meaning of Life | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| EFF Action Center | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Enspiral Tales - Medium | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Events | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Falkvinge on Liberty | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Flipside | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Flipside | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Free software jobs | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Full Frontal Nerdity by Aaron Williams | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| General Protection Fault: Comic Updates | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| George Monbiot | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Girl Genius | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Groklaw | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Grrl Power | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Hackney Anarchist Group | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Hackney Solidarity Network | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| http://blog.llvm.org/feeds/posts/default | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| http://eng.anarchoblogs.org/feed/atom/ | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| http://feed43.com/3874015735218037.xml | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| http://flatearthnews.net/flatearthnews.net/blogfeed | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| http://fulltextrssfeed.com/ | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| http://london.indymedia.org/articles.rss | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&_render=rss | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| http://planet.gridpp.ac.uk/atom.xml | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| http://shirky.com/weblog/feed/atom/ | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| http://thecommune.co.uk/feed/ | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| http://theness.com/roguesgallery/feed/ | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| http://www.airshipentertainment.com/buck/buckcomic/buck.rss | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| http://www.airshipentertainment.com/growf/growfcomic/growf.rss | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| http://www.airshipentertainment.com/myth/mythcomic/myth.rss | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| http://www.baen.com/baenebooks | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| http://www.godhatesastronauts.com/feed/ | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| http://www.tinycat.co.uk/feed/ | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| https://anarchism.pageabode.com/blogs/anarcho/feed/ | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| https://broodhollow.krisstraub.comfeed/ | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| https://debian-administration.org/atom.xml | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| https://elitetheatre.org/ | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| https://feeds.feedburner.com/Starslip | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| https://feeds2.feedburner.com/GeekEtiquette?format=xml | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| https://hackbloc.org/rss.xml | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| https://kajafoglio.livejournal.com/data/atom/ | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| https://philfoglio.livejournal.com/data/atom/ | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| https://pixietrixcomix.com/eerie-cutiescomic.rss | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| https://pixietrixcomix.com/menage-a-3/comic.rss | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| https://propertyistheft.wordpress.com/feed/ | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| https://requiem.seraph-inn.com/updates.rss | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| https://studiofoglio.livejournal.com/data/atom/ | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| https://thecommandline.net/feed/ | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| https://torrentfreak.com/subscriptions/ | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| https://web.randi.org/?format=feed&type=rss | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| https://www.dcscience.net/feed/medium.co | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| https://www.DropCatch.com/domain/steampunkmagazine.com | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| https://www.DropCatch.com/domain/ubuntuweblogs.org | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| https://www.DropCatch.com/redirect/?domain=DyingAlone.net | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| https://www.freedompress.org.uk:443/news/feed/ | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| https://www.goblinscomic.com/category/comics/feed/ | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| https://www.loomio.com/blog/feed/ | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| https://www.newstatesman.com/feeds/blogs/laurie-penny.rss | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| https://www.patreon.com/graveyardgreg/posts/comic.rss | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| https://x.com/statuses/user_timeline/22724360.rss | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Humble Bundle Blog | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| I, Cringely | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Irregular Webcomic! | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Joel on Software | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| Judith Proctor's Journal | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Krebs on Security | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Lambda the Ultimate - Programming Languages Weblog | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Looking For Group | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| LWN.net | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Mimi and Eunice | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Neil Gaiman's Journal | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| Nina Paley | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| O Abnormal – Scifi/Fantasy Artist | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Oglaf! -- Comics. Often dirty. | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Oh Joy Sex Toy | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| Order of the Stick | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| Original Fiction Archives - Reactor | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| OSnews | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Paul Graham: Unofficial RSS Feed | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Penny Arcade | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Penny Red | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| PHD Comics | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Phil's blog | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| Planet Debian | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Planet GNU | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Planet Lisp | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Pluralistic: Daily links from Cory Doctorow | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| PS238 by Aaron Williams | XML | 18:56, Tuesday, 24 March | 19:44, Tuesday, 24 March |
| QC RSS | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| Radar | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| RevK®'s ramblings | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| Richard Stallman's Political Notes | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Scenes From A Multiverse | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| Schneier on Security | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| SCHNEWS.ORG.UK | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| Scripting News | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Seth's Blog | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| Skin Horse | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Spinnerette | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| Tales From the Riverbank | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| The Adventures of Dr. McNinja | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| The Bumpycat sat on the mat | XML | 18:35, Tuesday, 24 March | 19:15, Tuesday, 24 March |
| The Daily WTF | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| The Monochrome Mob | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| The Non-Adventures of Wonderella | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| The Old New Thing | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| The Open Source Grid Engine Blog | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| The Stranger | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| towerhamletsalarm | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| Twokinds | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| UK Indymedia Features | XML | 18:42, Tuesday, 24 March | 19:24, Tuesday, 24 March |
| Uploads from ne11y | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| Uploads from piasladic | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |
| Use Sword on Monster | XML | 18:49, Tuesday, 24 March | 19:36, Tuesday, 24 March |
| Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily | XML | 18:56, Tuesday, 24 March | 19:42, Tuesday, 24 March |
| what if? | XML | 18:35, Tuesday, 24 March | 19:16, Tuesday, 24 March |
| Whatever | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| Whitechapel Anarchist Group | XML | 18:28, Tuesday, 24 March | 19:17, Tuesday, 24 March |
| WIL WHEATON dot NET | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| wish | XML | 18:42, Tuesday, 24 March | 19:27, Tuesday, 24 March |
| Writing the Bright Fantastic | XML | 18:42, Tuesday, 24 March | 19:26, Tuesday, 24 March |
| xkcd.com | XML | 18:42, Tuesday, 24 March | 19:25, Tuesday, 24 March |