Friday, 13 February

19:56

Both Sides Now – DORK TOWER 13.02.26 [Dork Tower]

Most DORK TOWER strips are now available as signed, high-quality prints, from just $25!  CLICK HERE to find out more!

HEY! Want to help keep DORK TOWER going? Then consider joining the DORK TOWER Patreon and ENLIST IN THE ARMY OF DORKNESS TODAY! (We have COOKIES!) (And SWAG!) (And GRATITUDE!)

19:49

Look, I Didn’t Want to Like Emerald Fennell’s Wuthering Heights [The Stranger]

But I Would Absolutely Let Jacob Elordi Be Mean to Me
by Audrey Vann

I think anyone who has read Emily Brontë’s Wuthering Heights can agree that it’s a challenging read. Perspectives change chapter to chapter, Joseph the servant’s dialogue is basically unreadable, and most of Heathcliff and Cathy’s love story is played out through the next generation after—spoiler alert—Cathy dies during childbirth. In Emerald Fennell’s adaptation, she focuses on the most engaging elements of the book: Heathcliff and Cathy’s love, passion, and mutual destruction. 

The film never claimed to be a perfect mirror of the book. Fennell herself said, when explaining the quotes around the title of her adaption: “What I can say is I'm making a version of [the book]. There's a version that I remembered reading that isn't quite real. And there's a version [where] I wanted stuff to happen that never happened. And so it is Wuthering Heights, and it isn't.” 

With this in mind, she was successful. Each character felt like a doll Fennell uses to play out her version of the story—the obsessive childhood bond between Heathcliff and Cathy at Wuthering Heights (Cathy’s family home), Cathy’s eventual choice of social status over love, her early death, and Heathcliff’s lifelong spiral into revenge. A literal doll motif continuously shows up in the film, too, beginning with a young Cathy, who watches a man being hanged while tightly clutching her doll. Again, when Cathy marries the wealthy suitor Linton (Shazad Latif), and her new sister-in-law, Isabella (Alison Oliver), gifts her a handmade doll made using Cathy’s own collected hair. And, most notably, in the large dollhouse replica of Thrushcross Grange, the Linton estate, that stands looming behind the dining-room table. So, who better to play the starring role than Barbie herself, Margot Robbie? 

At first, I was highly skeptical of the casting choices. Jacob Elordi was not at all how I imagined the scrappy, tortured, and probably-not-white orphan boy Heathcliff. But the longer I sit with the film, the more I can accept that he’s one of the only actors who could make this complex character work on screen. Brontë’s Heathcliff is cruel, insensitive, and brooding, and throughout the novel, I thought, why in the world are these women lusting after such an unlikable brute? But Elordi as Heathcliff—sweaty, grinning, and aroused—makes it make sense. You, too, would fold under the spell of his dark eyes with his fingers in your mouth. And, although Fennell’s interpretation of Linton is far more likable than Brontë’s, the choice is clear: Heathcliff eats Cathy out and licks the tears from her cheeks. Linton rails her in missionary while she dissociates.

Perhaps the most surprising element (and what I anticipate being the most controversial) is the innocent Isabella’s consent to Heathcliff’s cruel treatment of her. In the film, Heathcliff seduces Isabella (and later asks for her hand in marriage) only to punish Cathy, which he says explicitly. “Do you want me to stop?” he asks, several times, while taking off her nightgown. Isabella shakes her head no. After they marry, Nelly (Cathy’s companion, played by Hong Chau) stops by to see the newlyweds, only to find Isabella sporting a dog collar and chained up on her hands and knees, literally eating out of Heathcliff's hands. Nelly, horrified, attempts to free her, only to realize that the chains are not attached to anything—Isabella is a willing participant in this sadistic relationship. (Believe it or not, this is not how things go in Brontë’s 1847 novel.)

Elordi has managed to become the internet’s boyfriend through playing frightening men (see: Euphoria, Priscilla, Frankenstein). I would absolutely let that man be mean to me, and that’s what makes this film an alluring dollhouse to play inside. 

Many people, including myself, were outraged upon the trailer’s release due to the not-period-accurate costumes. How silly I feel about that now! While living at Wuthering Heights, Cathy dresses in tattered cotton skirts and billowing linen blouses. Once she marries Linton, everything turns synthetic—iridescent lamé dresses, tight corsets, gaudy costume jewelry, and rhinestones glued to her cheeks—essentially, the wardrobe I would have dreamed up for myself as a 5-year-old who was obsessed with princesses and pop stars. The costuming plays a larger role in the film to show that Cathy is actually restricted by Linton, despite his wealth and status, and can only breathe in the arms of Heathcliff. To sum it up, the costumes are, as Aretha Franklin once said so eloquently: “great gowns, beautiful gowns.” Fun to look at, but not so fun to be trapped inside of.

This contrast between organic and synthetic is also present in Charli XCX’s soundtrack, which is equal parts epic string score and moody electronic pop. It isn’t as jarring in this period piece as you might imagine it to be. 

As other critics have already noted, this is an extremely wet movie, soaked in uncooked egg, blood, spit, tears, snail slime, cooking oil, and rain, which adds a visceral quality to the film. Its lush, tactile visuals evoke whimsical movies of the past like the arthouse pornography of Polish director Walerian Borowczyk, surrealist stop-motion master Jan Švankmajer, the later films of Ingmar Bergman (Cries and Whispers, Fanny and Alexander), and Sofia Coppola’s Marie Antoinette. All things I suggest watching if you find yourself enjoying this decadently horny movie. 

Look, I didn’t want to like it. I walked into the theater as a skeptic, but left feeling enraptured by Fennell's vision. I give it four out of five broken eggs (see the movie and you’ll understand). 

19:00

How can I distinguish between the numeric keypad 0 and the top-row 0 in the WM_CHAR message? [The Old New Thing]

Last time, we looked at how to distinguish the numeric keypad 0 and the top-row 0 in the WM_KEY­DOWN message. We may as well look at the analogous table for WM_CHAR.

Event wParam Extended?
Numpad0 with NumLock on VK_0 0
Numpad0 with NumLock off (no WM_CHAR)
Ins key (no WM_CHAR)
0 on top row VK_0 0

I got the name VK_0 from this comment block in winuser.h.

/*
 * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
 * 0x3A - 0x40 : unassigned
 * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
 */

Uh-oh. The extended bit doesn’t distinguish between the two. They both show up as VK_0, non-extended.

What changes is something not in the above table: The scan code.

So let’s convert the scan code back to a virtual key.

auto vk_from_scan = MapVirtualKey((lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK);
Event wParam Extended? vk_from_scan
Numpad0 with NumLock on VK_0 0 VK_INSERT
Numpad0 with NumLock off (no WM_CHAR)
Ins key (no WM_CHAR)
0 on top row VK_0 0 VK_0

So we can infer which zero was pressed by taking the scan code, mapping it to a virtual key, and seeing whether it’s the Ins key (from the numeric keypad) or the 0 key (from the top row).

But wait, we’re not done yet.

There are ways to type the character 0 without using the numeric keypad or the top row. For example, you can hold the Alt key and then type 4,8 on the numeric keypad, and that will type a 0. I tried it out, and the vk_from_scan was VK_MENU, which is the virtual key code for the Alt key. Another way of entering a 0 is by using an input method editor (IME). Or there might be a custom keyboard layout that generates a 0 through some wacky chord sequence.

Therefore, if the vk_from_scan is neither VK_INSERT nor VK_0, you have to conclude that the 0 was entered by some means other than the numeric keypad or the top row.

The post How can I distinguish between the numeric keypad 0 and the top-row 0 in the <CODE>WM_<WBR>CHAR</CODE> message? appeared first on The Old New Thing.

The Best Bang for Your Buck Events in Seattle This Weekend: Feb 13–15, 2026 [The Stranger]

Sound Off!, Tết in Seattle, and More Cheap & Easy Events Under $20
by EverOut Staff

There's lots to love in our weekend guide, with festive events from Sound Off! 2026 to Tết in Seattle and from the Petit Troll Mardi Gras Parade to Sweetheart Book Fair. Plus, if the urge for new ink strikes, go get a Friday the 13th flash tattoo!

FRIDAY LIVE MUSIC

Slumber Party: Dalaine, Henry Mansfield
A concert in an artisanal chocolate shop that encourages wearing pajamas? Sign me up. Owned and operated by Seattle musician and chocolatier Aaron Lindstrom, Cocoa Legato hosts a few intimate shows each week, befitting of the shop's name—"legato" is an Italian musical term used to describe music played in a smooth and flowing way. This Friday's show features two incredible local acts: queer indie pop artist Henry Mansfield with a string ensemble and folk singer-songwriter Dalaine, whose 2023 NPR Tiny Desk entry was highlighted as one of their "Entries We Love." Bring your crush, your kids, your blankets and stuffies, and get ready for a Valentine's eve that's sweet in more ways than one. SHANNON LUBETICH
(Cocoa Legato, Greenwood, $15)

18:14

Local Lawmakers Are Finally Moving Against ICE [The Stranger]

Impeding ICE with the combined powers of the city, county and the port. by Hannah Murphy Winter

This morning, Seattle City Councilmember Alexis Mercedes Rinck announced legislation to bar new or expanded detention facilities from being built within city limits. At the same time, Seattle Port Commissioner Toshiko Hasegawa announced an order that would bar any expansion of immigration activity on Port land, and a second that provides civil rights education to anyone working on Port property.

Their announcement follows an anti-ICE-filled week. On Tuesday, City Council’s public safety committee passed a bill from Councilmember Maritza Rivera that struck dated language from the Municipal Code requiring city employees to “cooperate with, not hinder” immigration enforcement. On the same day, the Port Commission unanimously passed an order requiring that Port police clearly identify themselves so the public is less likely to confuse them with immigration enforcement. And yesterday, the County took action: County Executive Girmay Zahilay signed an executive order barring ICE from non-public spaces on King County-owned properties (like Mayor Katie Wilson did in Seattle last month), and County Councilmember Teresa Mosqueda introduced a bill to codify his order into law. 

None of this can stop ICE from operating in Seattle. But it can impede the agency.

The Detention Moratorium 

As of last month, ICE was holding more than 73,000 people in detention across the country—a record high—and they expanded into 104 new detention facilities, almost doubling from the previous year. ICE is not releasing people on bail, so that number will continue to multiply. So, too, will the number of detention facilities. Trump’s Big Beautiful Bill accounted for that. He set aside $45 billion, enough funding to to imprison another 135,000 people in new facilities by 2029, according to the American Immigration Council.

The closest ICE detention facility to Seattle is the Northwest Detention Center (NWDC) in Tacoma. But in December, the federal government posted a pre-solicitation notice from the Department of Homeland Security and ICE, putting local contractors on notice that they were looking to build a facility about the same size as the NWDC, able to detain 1,600 people. 

Rinck’s emergency legislation would block the construction of that facility or any other within city limits for the next year, giving City Council time to explore more permanent restrictions on ICE expansion. SeaTac actually beat her to the punch, passing their own detention moratorium this week.

The bill treats the threat of an ICE detention center as a bureaucratic land use issue, arguing that the city needs time to address any “mitigation measures" needed to build a facility in “Seattle’s dense urban environment." 

“We need to be using every tool at our disposal to be really ensuring that we're not eating this administration's unconstitutional work and lawless agenda, and even if that means looking to land use as a tool,” Rinck tells The Stranger.

Rinck says she plans to share her bill with the Local Progress network, so other cities can copy her homework. 

Rinck’s office says that Council President Joy Hollingsworth has agreed to allow the bill to skip the Land Use Committee, and instead be heard by the full council on Tuesday. Council could pass the bill as soon as February 24. 

The Port’s Anti-ICE Agenda

Earlier this week, the Port Commission passed an order that helps make ICE clearly identifiable to the public—requiring that Port police are clearly identifiable, and can’t be confused with immigration enforcement. 

Port Commissioner Hasegawa also plans to introduce two orders to regulate how ICE can interact with the Port, both of which will be introduced on February 24. The first order provides Know Your Rights education to anyone that’s working in the airport or other Port property, like the shops and restaurants at SeaTac. Immigration enforcement unavoidably operates in those areas, Hasegawa told The Stranger, and this order gives those workers the best chance to protect themselves and their colleagues. 

The second mirrors the orders from Mayor Wilson and County Executive Zahilay: banning immigration enforcement from expanding their use of Port land for their operations. The presence of immigration at the Port is, again, unavoidable, Hasegawa acknowledges, but “the use of Port properties is narrow, and that it has to have an industrial purpose for one of our industries, our industry is not the prison industrial complex,” she says. 

The commission could vote on both orders the day they're introduced, and Hasegawa says she's confident they'll pass. 

The Ban from County Property

Mosqueda’s bill would lock Zahilay’s executive order into law, blocking ICE from entering (without a warrant) non-public areas of buildings, parking lots, garages, and vacant lots. They also can’t be used as an ICE staging area, or to process detainees. The bill would also require that County Executive Zahilay identify properties that ICE is likely to try to commandeer, and to preemptively plan for better security measures. 

Mosqueda also accounted for private land. One whole section of the bill is dedicated to designing a template that reads: 

"This property is a Stand Together King County partner.  No agent of the federal government, including Immigration and Customs Enforcement (ICE), may enter these premises for purposes of civil immigration enforcement, absent a valid judicial warrant or court order.  This property may not be used for civil immigration enforcement operations, including as a staging area, processing location, or operations base."

You can also just write that on your door with some printer paper and a Sharpie, as we saw all over Minneapolis in the last few weeks. 

16:42

Slog AM: SPD's May Day USA Fuck Up, EPA Won't Regulate Greenhouse Gases Anymore, Michigan Town Must Slaughter Park Deer [The Stranger]

The Stranger's morning news roundup. by Nathalie Graham

Protect and Serve? Last summer's May Day USA event, the right-wing Christian extremist event held in Cal Anderson, was a clusterfuck largely because of the Seattle Police Department's biases against the people of this city, a new report found. SPD apparently didn't see what the big deal was about holding an anti-LGBT rally in the park—they "weren't familiar with the neighborhood's history," according to PubliCola. They viewed May Day USA as a "church group" and the counterprotesters as "antifa." They entered the event with a "anticipatory defensiveness" toward the counterprotesters—who they started referring to as "transtifa" after hearing May Day USA security use the term. SPD—which is largely made up of people who do not live in Seattle—also shared information with May Day USA security. This big mess of bias and animosity toward the people SPD is supposed to protect caused an aggressive police response and 23 arrests of counterprotesters. 

Impeached: The Federal Way City Council voted 4-3 to remove Martin Moore from his post as council president. Moore posted on his official Facebook page in support of the anti-ICE student walkouts. The rest of the council did not like this. Despite public commenters speaking largely in favor of Moore's actions at a meeting Tuesday, the council sided against him. He'll still stay on council, but he's lost his presidential role. 

The Weather: Say goodbye to dry skies. The rain is back. In case you're wondering if we'll get any more wintery weather, the Seattle Times has the answer: There is no hope for Seattle snow this year. 

Well, what about ICE? In his first executive order, King County Executive Girmay Zahilay banned Immigration and Customs Enforcement from doing anything on nonpublic county-owned land. This includes "parking lots, vacant lots, buildings, and garages and prevents them from being used for staging areas, processing or operations bases." The executive order won't stop ICE if those gooners have a judicial warrant. Zahilay's order also directs $2 million to immigrant communities for "emergency food, housing, and legal aid" and steers the King County Sheriff's Department to make a plan for dealing with ICE, including how to identify undercover agents and how to respond if ICE and the public get into conflict.  

Hey, get off of there! A person in Spokane hitched a ride on an ambulance, clinging to the back of the emergency vehicle on eastbound Interstate 90. That's not the suggested way to get to the hospital. 

The EPA Is Done Regulating Greenhouse Gases: Hahaha. We are so boned. On Thursday, Donald Trump repealed the bedrock scientific finding that greenhouse gases endanger human life, thus ending our government's capacity to legally control pollution. This sweeping move means the Environmental Protection Agency can no longer regulate emissions of carbon dioxide, methane, and other greenhouse gases. It's a rejection of science and an absolutely dismal backslide as the US faces the realities of climate change: more intense storms, wildfires, droughts, and natural disasters. This, of course, is only good for "billionaire polluters," reports The Guardian.

"Jayapal Pramila Search History": Attorney General Pam Bondi had a piece of paper titled "Jayapal Pramila Search History" detailing the un-redacted Epstein files Washington state Rep. Pramila Jayapal accessed in her review of the documents. This outraged House members since it showcased the Department of Justice's alleged betrayal of the separation of powers. The DOJ confirmed it is keeping tabs on what searches lawmakers are doing in the disgusting pit that is the trove of Epstein files."It is an outrage that [the justice department] is tracking members’ investigative steps,” said Rep. Jamie Raskin. He plans to open an inquiry into this "abuse of power." 

Antitrust Dust Up: Gail Slater, the head of the Justice Department's antitrust unit, announced her resignation. This shake-up comes as the DOJ is set to deal with corporate mergers like the tug-of-war battle between Netflix and Paramount Skydance over ownership of Warner Bros. Discovery. Slater's deputy in the antitrust unit also left this week. 

DHS Shutdown Imminent: With Democrats saying they won't approve more funding for DHS, funding for the department is expected to run out on Saturday. Democrats are holding out until Republicans agree to implement more stringent restrictions on ICE. Agencies under DHS like ICE and TSA could be affected. Will the Gestappo work for free?

Honoring the Dead Is Politics: Ukrainian skeleton racer Vladyslav Heraskevych was disqualified from the Winter Olympics because he insisted on wearing a helmet honoring the athletes killed during Russia's war in Ukraine. His tribute apparently violated the Olympics' athlete expression guidelines. "I believe I am right in this case," Heraskevych told NBC News. "For me to back down is betraying [the people pictured on the helmet]."

Ukrainian skeleton slider withdrawn from Olympics after insisting on wearing helmet honoring dead athletes killed in Ukraine https://cnn.it/3ZtrjXN

[image or embed]

— CNN (@cnn.com) February 12, 2026 at 12:47 AM

Blood Moon on the Rise: A big, red Blood Moon—which is not just a fun way of saying having your period—will gush all over Washington night skies on March 3. 

Oh Deer: The Michigan town of Iron Mountain has a deer problem. One of its parks has had a deer enclosure for 75 years. This is an odd choice since wild deer are prevalent. It's not like these people are lacking access to deer. Anyway, the enclosure is in dire need of upgrades. Like, $22,000 in one-time fixes and $16,000 in annual upkeep. The city council voted to close the pen. But, what to do with the deer? They are inbred, stupid, and diseased. They cannot be freed. So, they must be shot and killed. The people do not like this. Can't they save the deer? Probably not. 

Good for Them: The Winter Olympic village ran out of condoms in three days. More are on the way. 

A Long Read for Your Friday: You liked that Atlantic deep dive on Attorney General Pam Bondi? Then you'll love this Wall Street Journal story about what craven ghouls Department of Homeland Security Secretary Kristi Noem and her advisor Corey Lewandowski are. A tidbit: Noem fired a US Coast Guard pilot after he left her blanket on a plane, but reinstated him when she realized there was no one else to fly her home. Plus, Lewandowski has been really trying to get someone to issue him a gun. 

Happy Almost Valentine's Day: Here is a date idea. If you're looking for gifts, or a gesture, I recommend heading to Salmonberry Goods Green Grocer in Crown Heights and buying some of their handmade Valentine's Day pastries. Also, buy a bouquet while you're there. 

A Song for All You Lovers: 

16:21

New delegation for Debian's data protection team [LWN.net]

Debian Project Leader (DPL) Andreas Tille has announced a new delegation for Debian's data protection team:

Following the end of the previous delegation, Debian was left without an active Data Protection team. This situation has understandably drawn external attention and highlighted the importance of having a clearly identified point of contact for data protection matters within the project.

I am therefore very pleased to announce that new volunteers have stepped forward, allowing us to re-establish the Debian Data Protection team with a fresh delegation.

Tille had put out a call for volunteers in January after all previous members of the team had stepped down. He has appointed Aigars Mahinovs, Andrew M.A. Cater, Bart Martens, Emmanuel Arias, Gunnar Wolf, Kiran S Kunjumon, and Salvo Tomaselli as the new members of the team. The team provides a central coordination and advisory function around Debian's data handling, retention, dealing with deletion requests, and more.

15:56

The future for Tyr [OSnews]

The team behind Tyr started 2025 with little to show in our quest to produce a Rust GPU driver for Arm Mali hardware, and by the end of the year, we were able to play SuperTuxKart (a 3D open-source racing game) at the Linux Plumbers Conference (LPC). Our prototype was a joint effort between Arm, Collabora, and Google; it ran well for the duration of the event, and the performance was more than adequate for players. Thankfully, we picked up steam at precisely the right moment: Dave Airlie just announced in the Maintainers Summit that the DRM subsystem is only “about a year away” from disallowing new drivers written in C and requiring the use of Rust. Now it is time to lay out a possible roadmap for 2026 in order to upstream all of this work.

↫ Daniel Almeida at LWN.net

A very detailed look at what the team behind Tyr is trying to achieve with their Rust GPU driver for Arm Mali chips.

15:35

[$] The first half of the 7.0 merge window [LWN.net]

The merge window for Linux 7.0 has opened, and with it comes a number of interesting improvements and enhancements. At the time of writing, there have been 7,695 non-merge commits accepted. The 7.0 release is not special, according to the kernel's versioning scheme — just the release that comes after 6.19. Humans love symbolism and round numbers, though, so it may feel like something of a milestone.

[$] Open-source mapping for disaster response [LWN.net]

At FOSDEM 2026 Petya Kangalova, a senior tech partnership and engagement manager for the Humanitarian OpenStreetMap Team (HOT) spoke about how the project helps people map their surroundings to assist in disaster response and humanitarian aid. The project has developed a stack of technology to help volunteers collectively map an area and add in local knowledge metadata. "One of the core things that we believe is that when we speak about disaster response or people having access to data is that they really need accessible technology that's free and open for anyone to use."

15:28

Link [Scripting News]

News still needs to make a big transition, to become a distributed unownable thing, with every part replaceable, much like what needs to happen with the social web. This transition has been possible and necessary for about 30 years. The reporters and editors will say we're naive, but we understand what's happening. The news orgs have always been large centralized businesses, silos, and increasingly has come in conflict with the interests of their users. Who trusts what you read in the NYT, Washington Post, or Wall Street Journal, and these were at one time the best of journalism. I know the reporters also won't like this, but the quality assurance of decentralized systems will be done by AI, and overseen by a non-profit organization, staffed by retired journalists. And there will be lots of competition. All parts are replaceable.

14:07

Security updates for Friday [LWN.net]

Security updates have been issued by AlmaLinux (firefox, gcc-toolset-14-binutils, nodejs:20, nodejs:22, nodejs:24, php:7.4, and python3.12), Debian (haproxy, nginx, postgresql-15, and postgresql-17), Fedora (libssh), Oracle (glib2, libsoup, nodejs:20, nodejs:22, and php:7.4), SUSE (assimp, gnutls, helm, kernel, kubevirt, virt-api-container, virt-controller-container, virt-exportproxy-container, virt-exportserver-container, virt-handler-container, virt-launcher-container, virt-libguestfs-t, libmunge2, libsodium, libsoup, micropython, munge, openCryptoki, python-azure-core, rust-keylime, rustup, sccache, snpguest, tcpreplay, xorg-x11-server, xrdp, and zabbix), and Ubuntu (dnsdist, dotnet8, dotnet9, dotnet10, haproxy, libpng1.6, linux-aws-5.15, linux-azure, linux-azure-fips, linux-oracle, linux-oracle-5.4, munge, nginx, and node-dottie).

13:56

Error'd: Cruel Brittanica [The Daily WTF]

"No browser is the best browser," opines Michael R. sarcastically as per usual for tdwtf. "Thank you for suggesting a browser. FWIW: neither latest Chrome, Safari, Firefox, Opera work. Maybe I should undust my Netscape."

3

 

An anonymous dessert lover ruminates "The icing on the cake is that it's for HR where names can be quite important. Just goes to show that not even SAP can do SAP."

5

 

Another anonymous dessert lover (because honestly, who isn't) cheers "2024 is back again."

0

 

Thrice capitalled B.J.H. capitulates. "I guess I'm not cleared to know what topic I subscribed to."

1

 

Jeopardy fan Jeremy P. digs a quick quiz.

It's from Britannica.com. I thought "TV remote control" because it would effectively turn off the TV. The correct answer is toaster.

4

 To understand what went wrong, the previous correct answer was "blunderbuss".

Apparently this is a test for clairvoyance, which will have come in handy.

For a bonus buzz, Jeremy sent in another.


This time it's "guess the novel from the picture". There was a subtle clue in this one.

2

You're a monster, Jeremy. 

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

13:07

Conductors to Orchestrators: The Future of Agentic Coding [Radar]

This post first appeared on Addy Osmani’s Elevate Substack newsletter and is being republished here with the author’s permission.

AI coding assistants have quickly moved from novelty to necessity, where up to 90% of software engineers use some kind of AI for coding. But a new paradigm is emerging in software development—one where engineers leverage fleets of autonomous coding agents. In this agentic future, the role of the software engineer is evolving from implementer to manager, or in other words, from coder to conductor and ultimately orchestrator.

Over time, developers will increasingly guide AI agents to build the right code and coordinate multiple agents working in concert. This write-up explores the distinction between conductors and orchestrators in AI-assisted coding, defines these roles, and examines how today’s cutting-edge tools embody each approach. Senior engineers may start to see the writing on the wall: Our jobs are shifting from “How do I code this?” to “How do I get the right code built?”—a subtle but profound change.

Will every engineer become an orchestrator

What’s the tl;dr of an orchestrator tool? It supports multi-agent workflows where you can run many agents in parallel without them interfering with each other. But let’s talk terminology first.

The Conductor: Guiding a Single AI Agent

In the context of AI coding, acting as a conductor means working closely with a single AI agent on a specific task, much like a conductor guiding a soloist through a performance.

The engineer remains in the loop at each step, dynamically steering the agent’s behavior, tweaking prompts, intervening when needed, and iterating in real time. This is the logical extension of the “AI pair programmer” model many developers are already familiar with. With conductor-style workflows, coding happens in a synchronous, interactive session between human and AI, typically in your IDE or CLI.

Key characteristics: A conductor keeps a tight feedback loop with one agent, verifying or modifying each suggestion, much as a driver navigates with a GPS. The AI helps write code, but the developer still performs many manual steps—creating branches, running tests, writing commit messages, etc.—and ultimately decides which suggestions to accept.

Crucially, most of this interaction is ephemeral: Once code is written and the session ends, the AI’s role is done and any context or decisions not captured in code may be lost. This mode is powerful for focused tasks and allows fine-grained control, but it doesn’t fully exploit what multiple AIs could do in parallel.

Modern tools as conductors

Several current AI coding tools exemplify the conductor pattern:

  • Claude Code (Anthropic): Anthropic’s Claude model offers a coding assistant mode (accessible via a CLI tool or editor integration) where the developer converses with Claude to generate or modify code. For example, with the Claude Code CLI, you navigate your project in a shell and ask Claude to implement a function or refactor code, and it prints diffs or file updates for you to approve. You remain the conductor: You trigger each action and review the output immediately. While Claude Code has features to handle long-running tasks and tools, in the basic usage it’s essentially a smart codeveloper working step-by-step under human direction.
  • Gemini CLI (Google): A command-line assistant powered by Google’s Gemini model, used for planning and coding with a very large context window. An engineer can prompt Gemini CLI to analyze a codebase or draft a solution plan, then iterate on results interactively. The human directs each step and Gemini responds within the CLI session. It’s a one-at-a-time collaborator, not running off to make code changes on its own (at least in this conductor mode).
  • Cursor (editor AI assistant): The Cursor editor (a specialized AI-augmented IDE) can operate in an inline or chat mode where you ask it questions or to write a snippet, and it immediately performs those edits or gives answers within your coding session. Again, you guide it one request at a time. Cursor’s strength as a conductor is its deep context integration—it indexes your whole codebase so the AI can answer questions about any part of it. But the hallmark is that you, the developer, initiate and oversee each change in real time.
  • VS Code, Cline, Roo Code (in-IDE chat): Similar to above, other coding agents also fall into this category. They suggest code or even multistep fixes, but always under continuous human guidance.

This conductor-style AI assistance has already boosted productivity significantly. It feels like having a junior engineer or pair programmer always by your side. However, it’s inherently one-agent-at-a-time and synchronous. To truly leverage AI at scale, we need to go beyond being a single-agent conductor. This is where the orchestrator role comes in.

Engineer as conductor, engineer as orchestrator

The Orchestrator: Managing a Fleet of Agents

If a conductor works with one AI “musician,” an orchestrator oversees the entire symphony of multiple AI agents working in parallel on different parts of a project. The orchestrator sets high-level goals, defines tasks, and lets a team of autonomous coding agents independently carry out the implementation details.

Instead of micromanaging every function or bug fix, the human focuses on coordination, quality control, and integration of the agents’ outputs. In practical terms, this often means an engineer can assign tasks to AI agents (e.g., via issues or prompts) and have those agents asynchronously produce code changes—often as ready-to-review pull requests. The engineer’s job becomes reviewing, giving feedback, and merging the results rather than writing all the code personally.

This asynchronous, parallel workflow is a fundamental shift. It moves AI assistance from the foreground to the background. While you attend to higher-level design or other work, your “AI team” is coding in the background. When they’re done, they hand you completed work (with tests, docs, etc.) for review. It’s akin to being a project tech lead delegating tasks to multiple devs and later reviewing their pull requests, except the “devs” are AI agents.

Modern tools as orchestrators

Over just the past year, several tools have emerged that embody this orchestrator paradigm:

  • GitHub Copilot coding agent (Microsoft): This upgrade to Copilot transforms it from an in-editor assistant into an autonomous background developer. (I cover it in this video.) You can assign a GitHub issue to Copilot’s agent or invoke it via the VS Code agents panel, telling it (for example) “Implement feature X” or “Fix bug Y.” Copilot then spins up an ephemeral dev environment via GitHub Actions, checks out your repo, creates a new branch, and begins coding. It can run tests, linters, even spin up the app if needed, all without human babysitting. When finished, it opens a pull request with the changes, complete with a description and meaningful commit messages. It then asks for your review.

    You, the human orchestrator, review the PR (perhaps using Copilot’s AI-assisted code review to get an initial analysis). If changes are needed, you can leave comments like “@copilot please update the unit tests for edge case Z,” and the agent will iterate on the PR. This is asynchronous, autonomous code generation in action. Notably, Copilot automates the tedious bookkeeping—branch creation, committing, opening PRs, etc.—which used to cost developers time. All the grunt work around writing code (aside from the design itself) is handled, allowing developers to focus on reviewing and guiding at a high level. GitHub’s agent effectively lets one engineer supervise many “AI juniors” working in parallel across different issues (and you can even create multiple specialized agents for different task types).
Delegate tasks to GitHub Copilot
  • Jules, Google’s coding agent: Jules is an autonomous coding agent. Jules is “not a copilot, not a code-completion sidekick, but an autonomous agent that reads your code, understands your intent, and gets to work.” Integrated with Google Cloud and GitHub, Jules lets you connect a repository and then ask it to perform tasks much as you would a developer on your team. Under the hood, Jules clones your entire codebase into a secure cloud VM and analyzes it with a powerful model. You might tell Jules “Add user authentication to our app” or “Upgrade this project to the latest Node.js and fix any compatibility issues.” It will formulate a plan, present it to you for approval, and once you approve, execute the changes asynchronously. It makes commits on a new branch and can even open a pull request for you to merge. Jules handles writing new code, updating tests, bumping dependencies, etc., all while you could be doing something else.

    Crucially, Jules provides transparency and control: It shows you its proposed plan and reasoning before making changes, and allows you to intervene or modify instructions at any point (a feature Google calls “user steerability”). This is akin to giving an AI intern the spec and watching over their shoulder less frequently—you trust them to get it mostly right, but you still verify the final diff. Jules also boasts unique touches like audio changelogs (it generates spoken summaries of code changes) and the ability to run multiple tasks concurrently in the cloud. In short, Google’s Jules demonstrates the orchestrator model: You define the task, Jules does the heavy lifting asynchronously, and you oversee the result.
Jules bugs
  • OpenAI Codex (cloud agent): OpenAI introduced a new cloud-based Codex agent to complement ChatGPT. This evolved Codex (different from the 2021 Codex model) is described as “a cloud-based software engineering agent that can work on many tasks in parallel.” It’s available as part of ChatGPT Plus/Pro under the name OpenAI Codex and via an npm CLI (npm i -g @openai/codex). With the Codex CLI or its VS Code/Cursor extensions, you can delegate tasks to OpenAI’s agent similar to Copilot or Jules. For instance, from your terminal you might say, “Hey Codex, implement dark mode for the settings page.” Codex then launches into your repository, edits the necessary files, perhaps runs your test suite, and when done, presents the diff for you to merge. It operates in an isolated sandbox for safety, running each task in a container with your repo and environment.

    Like others, OpenAI’s Codex agent integrates with developer workflows: You can even kick off tasks from a ChatGPT mobile app on your phone and get notified when the agent is done. OpenAI emphasizes seamless switching “between real-time collaboration and async delegation” with Codex. In practice, this means you have the flexibility to use it in conductor mode (pair-programming in your IDE) or orchestrator mode (hand off a background task to the cloud agent). Codex can also be invited into your Slack channels—teammates can assign tasks to @Codex in Slack, and it will pull context from the conversation and your repo to execute them. It’s a vision of ubiquitous AI assistance, where coding tasks can be delegated from anywhere. Early users report that Codex can autonomously identify and fix bugs, or generate significant features, given a well-scoped prompt. All of this again aligns with the orchestrator workflow: The human defines the goal; the AI agent autonomously delivers a solution.
What are we coding next Codex
  • Anthropic Claude Code (for web): Anthropic has offered Claude as an AI chatbot for a while, and their Claude Code CLI has been a favorite for interactive coding. Anthropic took the next step by launching Claude Code for web, effectively a hosted version of their coding agent. Using Claude Code for web, you point it at your GitHub repo (with configurable sandbox permissions) and give it a task. The agent then runs in Anthropic’s managed container, just like the CLI version, but now you can trigger it from a web interface or even a mobile app. It queues up multiple prompts and steps, executes them, and when done, pushes a branch to your repo (and can open a PR). Essentially, Anthropic took their single-agent Claude Code and made it an orchestratable service in the cloud. They even provided a “teleport” feature to transfer the session to your local environment if you want to take over manually.

    The rationale for this web version aligns with orchestrator benefits: convenience and scale. You don’t need to run long jobs on your machine; Anthropic’s cloud handles the heavy lifting, with filesystem and network isolation for safety. Claude Code for web acknowledges that autonomy with safety is key—by sandboxing the agent, they reduce the need for constant permission prompts, letting the agent operate more freely (less babysitting by the user). In effect, Anthropic has made it easier to use Claude as an autonomous coding worker you launch on demand.
Discounts with Claude Code
  • Cursor background agents: tl;dr Cursor 2.0 has a multi-agent interface more focused around agents rather than files. Cursor 2 expands its background agents feature into a full-fledged orchestration layer for developers. Beyond serving as an interactive assistant, Cursor 2 lets you spawn autonomous background agents that operate asynchronously in a managed cloud workspace. When you delegate a task, Cursor 2’s agents now clone your GitHub repository, spin up an ephemeral environment, and check out an isolated branch where they execute work end-to-end. These agents can handle the entire development loop—from editing and running code to installing dependencies, executing tests, running builds, and even searching the web or referencing documentation to resolve issues. Once complete, they push commits and open a detailed pull request summarizing their work.

    Cursor 2 introduces multi-agent orchestration, allowing several background agents to run concurrently across different tasks—for instance, one refining UI components while another optimizes backend performance or fixes tests. Each agent’s activity is visible through a real-time dashboard that can be accessed from desktop or mobile, enabling you to monitor progress, issue follow-ups, or intervene manually if needed. This new system effectively treats each agent as part of an on-demand AI workforce, coordinated through the developer’s high-level intent. Cursor 2’s focus on parallel, asynchronous execution dramatically amplifies a single engineer’s throughput—fully realizing the orchestrator model where humans oversee a fleet of cooperative AI developers rather than a single assistant.
Agents layout adjustments for token display
  • Agent orchestration platforms: Beyond individual product offerings, there are also emerging platforms and open source projects aimed at orchestrating multiple agents. For instance, Conductor by Melty Labs (despite its name!) is actually an orchestration tool that lets you deploy and manage multiple Claude Code agents on your own machine in parallel. With Conductor, each agent gets its own isolated Git worktree to avoid conflicts, and you can see a dashboard of all agents (“who’s working on what”) and review their code as they progress. The idea is to make running a small swarm of coding agents as easy as running one. Similarly, Claude Squad is a popular open source terminal app that essentially multiplexes Anthropic’s Claude—it can spawn several Claude Code instances working concurrently in separate tmux panes, allowing you to give each a different task and thus code “10x faster” by parallelizing. These orchestration tools underscore the trend: Developers want to coordinate multiple AI coding agents and have them collaborate or divide work. Even Microsoft’s Azure AI services are enabling this: At Build 2025 they announced tools for developers to “orchestrate multiple specialized agents to handle complex tasks,” with SDKs supporting agent-to-agent communication so your fleet of agents can talk to each other and share context. All of this infrastructure is being built to support the orchestrator engineer, who might eventually oversee dozens of AI processes tackling different parts of the software development lifecycle.
Update workspace sidebar

I found Conductor to make the most sense to me. It was a perfect balance of talking to an agent and seeing my changes in a pane next to it. Its Github integration feels seamless; e.g. after merging PR, it immediately showed a task as “Merged” and provided an “Archive” button.
Juriy Zaytsev, Staff SWE, LinkedIn

He also tried Magnet:

The idea of tying tasks to a Kanban board is interesting and makes sense. As such, Magnet feels very product-centric.

Conductor versus Orchestrator—Differences

Many engineers will continue to engage in conductor-style workflows (single agent, interactive) even as orchestrator patterns mature. The two modes will coexist.

It’s clear that “conductor” and “orchestrator” aren’t just fancy terms; they describe a genuine shift in how we work with AI.

  • Scope of control: A conductor operates at the micro level, guiding one agent through a single task or a narrow problem. An orchestrator operates at the macro level, defining broader tasks and objectives for multiple agents or for a powerful single agent that can handle multistep projects. The conductor asks, “How do I solve this function or bug with the AI’s help?” The orchestrator asks, “What set of tasks can I delegate to AI agents today to move this project forward?”
  • Degree of autonomy: In conductor mode, the AI’s autonomy is low—it waits for user prompts each step of the way. In orchestrator mode, we give the AI high autonomy—it might plan and execute dozens of steps internally (writing code, running tests, adjusting its approach) before needing human feedback. A GitHub Copilot agent or Jules will try to complete a feature from start to finish once assigned, whereas Copilot’s IDE suggestions only go line-by-line as you type.
  • Synchronous vs asynchronous: Conductor interactions are typically synchronous—you prompt; AI responds within seconds; you immediately integrate or iterate. It’s a real-time loop. Orchestrator interactions are asynchronous—you might dispatch an agent and check back minutes or hours later when it’s done (somewhat like kicking off a long CI job). This means orchestrators must handle waiting, context-switching, and possibly managing multiple things concurrently, which is a different workflow rhythm for developers.
  • Artifacts and traceability: A subtle but important difference: Orchestrator workflows produce persistent artifacts like branches, commits, and pull requests that are preserved in version control. The agent’s work is fully recorded (and often linked to an issue/ticket), which improves traceability and collaboration. With conductor-style (IDE chat, etc.), unless the developer manually commits intermediate changes, a lot of the AI’s involvement isn’t explicitly documented. In essence, orchestrators leave a paper trail (or rather a Git trail) that others on the team can see or even trigger themselves. This can help bring AI into team processes more naturally.
  • Human effort profile: For a conductor, the human is actively engaged nearly 100% of the time the AI is working—reviewing each output, refining prompts, etc. It’s interactive work. For an orchestrator, the human’s effort is front-loaded (writing a good task description or spec for the agent, setting up the right context) and back-loaded (reviewing the final code and testing it), but not much is needed in the middle. This means one orchestrator can manage more total work in parallel than would ever be possible by working with one AI at a time. Essentially, orchestrators leverage automation at scale, trading off fine-grained control for breadth of throughput.

To illustrate, consider a common scenario: adding a new feature that touches frontend and backend and requires new tests. As a conductor, you might open your AI chat and implement the backend logic with the AI’s help, then separately implement the frontend, then ask it to generate some tests—doing each step sequentially with you in the loop throughout. As an orchestrator, you could assign the backend implementation to one agent (Agent A), the frontend UI changes to another (Agent B), and test creation to a third (Agent C). You give each a prompt or an issue description, then step back and let them work concurrently.

After a short time, you get perhaps three PRs: one for backend, one for frontend, one for tests. Your job then is to review and integrate them (and maybe have Agent C adjust tests if Agents A/B’s code changed during integration). In effect, you managed a mini “AI team” to deliver the feature. This example highlights how orchestrators think in terms of task distribution and integration, whereas conductors focus on step-by-step implementation.

It’s worth noting that these roles are fluid, not rigid categories. A single developer might act as a conductor in one moment and an orchestrator the next. For example, you might kick off an asynchronous agent to handle one task (orchestrator mode) while you personally work with another AI on a tricky algorithm in the meantime (conductor mode). Tools are also blurring lines: As OpenAI’s Codex marketing suggests, you can seamlessly switch between collaborating in real-time and delegating async tasks. So, think of “conductor” versus “orchestrator” as two ends of a spectrum of AI-assisted development, with many hybrid workflows in between.

Why Orchestrators Matter

Experts are suggesting that this shift to orchestration could be one of the biggest leaps in programming productivity we’ve ever seen. Consider the historical trends: We went from writing assembly to using high-level languages, then to using frameworks and libraries, and recently to leveraging AI for autocompletion. Each step abstracted away more low-level work. Autonomous coding agents are the next abstraction layer. Instead of manually coding every piece, you describe what you need at a higher level and let multiple agents build it.

As orchestrator-style agents ramp up, we could imagine even larger percentages of code being drafted by AIs. What does a software team look like when AI agents generate, say, 80% or 90% of the code, and humans provide the 10% critical guidance and oversight? Many believe it doesn’t mean replacing developers—it means augmenting developers to build better software. We may witness an explosion of productivity where a small team of engineers, effectively managing dozens of agent processes, can accomplish what once took an army of programmers months. (Note: I continue to believe the code review loop where we’ll continue to focus our human skills is going to need work if all this code is not to be slop.)

One intriguing possibility is that every engineer becomes, to some degree, a manager of AI developers. It’s a bit like everyone having a personal team of interns or junior engineers. Your effectiveness will depend on how well you can break down tasks, communicate requirements to AI, and verify the results. Human judgment will remain vital: deciding what to build, ensuring correctness, handling ambiguity, and injecting creativity or domain knowledge where AI might fall short. In other words, the skillset of an orchestrator—good planning, prompt engineering, validation, and oversight—is going to be in high demand. Far from making engineers obsolete, these agents could elevate engineers into more strategic, supervisory roles on projects.

Toward an “AI Team” of Specialists

Today’s coding agents mostly tackle implementation: write code, fix code, write tests, etc. But the vision doesn’t stop there. Imagine a full software development pipeline where multiple specialized AI agents handle different phases of the lifecycle, coordinated by a human orchestrator. This is already on the horizon. Researchers and companies have floated architectures where, for example, you have:

  • A planning agent that analyzes feature requests or bug reports and breaks them into specific tasks
  • A coding agent (or several) that implements the tasks in code
  • A testing agent that generates and runs tests to verify the changes
  • A code review agent that checks the pull requests for quality and standards compliance
  • A documentation agent that updates README or docs to reflect the changes
  • Possibly a deployment/monitoring agent that can roll out the change and watch for issues in production.

In this scenario, the human engineer’s role becomes one of oversight and orchestration across the whole flow: You might initiate the process with a high-level goal (e.g., “Add support for payment via cryptocurrency in our app”); the planning agent turns that into subtasks; coding agents implement each subtask asynchronously; the testing agent and review agent catch problems or polish the code; and finally everything gets merged and deployed under watch of monitoring agents.

The human would step in to approve plans, resolve any conflicts or questions the agents raise, and give final approval to deploy. This is essentially an “AI swarm” tackling software development end to end, with the engineer as the conductor of the orchestra.

While this might sound futuristic, we see early signs. Microsoft’s Azure AI Foundry now provides building blocks for multi-agent workflows and agent orchestration in enterprise settings, implicitly supporting the idea that multiple agents will collaborate on complex, multistep tasks. Internal experiments at tech companies have agents creating pull requests that other agent reviewers automatically critique, forming an AI/AI interaction with a human in the loop at the end. In open source communities, people have chained tools like Claude Squad (parallel coders) with additional scripts that integrate their outputs. And the conversation has started about standards like the Model Context Protocol (MCP) for agents sharing state and communicating results to each other.

I’ve noted before that “specialized agents for Design, Implementation, Test, and Monitoring could work together to develop, launch, and land features in complex environments”—with developers onboarding these AI agents to their team and guiding/overseeing their execution. In such a setup, agents would “coordinate with other agents autonomously, request human feedback, reviews and approvals” at key points, and otherwise handle the busywork among themselves. The goal is a central platform where we can deploy specialized agents across the workflow, without humans micromanaging each individual step—instead, the human oversees the entire operation with full context.

This could transform how software projects are managed: more like running an automated assembly line where engineers ensure quality and direction rather than handcrafting each component on the line.

Challenges and the Human Role in Orchestration

Does this mean programming becomes a push-button activity where you sit back and let the AI factory run? Not quite—and likely never entirely. There are significant challenges and open questions with the orchestrator model:

  • Quality control and trust: Orchestrating multiple agents means you’re not eyeballing every single change as it’s made. Bugs or design flaws might slip through if you solely rely on AI. Human oversight remains critical as the final failsafe. Indeed, current tools explicitly require the human to review the AI’s pull requests before merging. The relationship is often compared to managing a team of junior developers: They can get a lot done, but you wouldn’t ship their code without review. The orchestrator engineer must be vigilant about checking the AI’s work, writing good test cases, and having monitoring in place. AI agents can make mistakes or produce logically correct but undesirable solutions (for instance, implementing a feature in a convoluted way). Part of the orchestration skillset is knowing when to intervene versus when to trust the agent’s plan. As the CTO of Stack Overflow wrote, “Developers maintain expertise to evaluate AI outputs” and will need new “trust models” for this collaboration.
  • Coordination and conflict: When multiple agents work on a shared codebase, coordination issues arise—much like multiple developers can conflict if they touch the same files. We need strategies to prevent merge conflicts or duplicated work. Current solutions use workspace isolation (each agent works on its own Git branch or separate environment) and clear task separation. For example, one agent per task, and tasks designed to minimize overlap. Some orchestrator tools can even automatically merge changes or rebase agent branches, but usually it falls to the human to integrate. Ensuring agents don’t step on each others’ toes is an active area of development. It’s conceivable that in the future agents might negotiate with each other (via something like agent-to-agent communication protocols) to avoid conflicts, but today the orchestrator sets the boundaries.
  • Context, shared state, and handoffs: Coding workflows are rich in state: repository structure, dependencies, build systems, test suites, style guidelines, team practices, legacy code, branching strategies, etc. Multi-agent orchestration demands shared context, memory, and smooth transitions. But in enterprise settings, context sharing across agents is nontrivial. Without a unified “workflow orchestration layer,” each agent can become a silo, working well in its domain but failing to mesh. In a coding-engineering team this may translate into: One agent creates a feature branch; another one runs unit tests; another merges into master—if the first agent doesn’t tag metadata the second is expecting, you get breakdowns.
  • Prompting and specifications: Ironically, as the AI handles more coding, the human’s “coding” moves up a level to writing specifications and prompts. The quality of an agent’s output is highly dependent on how well you specify the task. Vague instructions lead to subpar results or agents going astray. Best practices that have emerged include writing mini design docs or acceptance criteria for the agents—essentially treating them like contractors who need a clear definition of done. This is why we’re seeing ideas like spec-driven development for AI: You feed the agent a detailed spec of what to build, so it can execute predictably. Engineers will need to hone their ability to describe problems and desired solutions unambiguously. Paradoxically, it’s a very old-school skill (writing good specs and tests) made newly important in the AI era. As agents improve, prompts might get simpler (“write me a mobile app for X and Y with these features”) and yet yield more complex results, but we’re not quite at the point of the AI intuiting everything unsaid. For now, orchestrators must be excellent communicators to their digital workforce.
  • Tooling and debugging: With a human developer, if something goes wrong, they can debug in real time. With autonomous agents, if something goes wrong (say the agent gets stuck on a problem or produces a failing PR), the orchestrator has to debug the situation: Was it a bad prompt? Did the agent misinterpret the spec? Do we roll back and try again or step in and fix it manually? New tools are being added to help here: For instance, checkpointing and rollback commands let you undo an agent’s changes if it went down a wrong path. Monitoring dashboards can show if an agent is taking too long or has errors. But effectively, orchestrators might at times have to drop down to conductor mode to fix an issue, then go back to orchestration. This interplay will improve as agents get more robust, but it highlights that orchestrating isn’t just “fire and forget”—it requires active monitoring. AI observability tools (tracking cost, performance, accuracy of agents) are likely to become part of the developer’s toolkit.
  • Ethics and responsibility: Another angle—if an AI agent writes most of the code, who is responsible for license compliance, security vulnerabilities, or bias in that code? Ultimately the human orchestrator (or their organization) carries responsibility. This means orchestrators should incorporate practices like security scanning of AI-generated code and verifying dependencies. Interestingly, some agents like Copilot and Jules include built-in safeguards: They won’t introduce known vulnerable versions of libraries, for instance, and can be directed to run security audits. But at the end of the day, “trust, but verify” is the mantra. The human remains accountable for what ships, so orchestrators will need to ensure AI contributions meet the team’s quality and ethical standards.

In summary, the rise of orchestrator-style development doesn’t remove the human from the loop—it changes the human’s position in the loop. We move from being the one turning the wrench to the one designing and supervising the machine that turns the wrench. It’s a higher-leverage position, but also one that demands broader awareness.

Developers who adapt to being effective conductors and orchestrators of AI will likely be even more valuable in this new landscape.

Conclusion: Is Every Engineer a Maestro?

Will every engineer become an orchestrator of multiple coding agents? It’s a provocative question, but trends suggest we’re headed that way for a large class of programming tasks. The day-to-day reality of a software engineer in the late 2020s could involve less heads-down coding and more high-level supervision of code that’s mostly written by AIs.

Today we’re already seeing early adopters treating AI agents as teammates—for example, some developers report delegating 10+ pull requests per day to AI, effectively treating the agent as an independent teammate rather than a smart autocomplete. Those developers free themselves to focus on system design, tricky algorithms, or simply coordinating even more work.

That said, the transition won’t happen overnight for everyone. Junior developers might start as “AI conductors,” getting comfortable working with a single agent before they take on orchestrating many. Seasoned engineers are more likely to early-adopt orchestrator workflows, since they have the experience to architect tasks and evaluate outcomes. In many ways, it mirrors career growth: Junior engineers implement (now with AI help); senior engineers design and integrate (soon with AI agent teams).

The tools we discussed—from GitHub’s coding agent to Google’s Jules to OpenAI’s Codex—are rapidly lowering the barrier to try this approach, so expect it to go mainstream quickly. The hyperbole aside, there’s truth that these capabilities can dramatically amplify what an individual developer can do.

So, will we all be orchestrators? Probably to some extent—yes. We’ll still write code, especially for novel or complex pieces that defy simple specification. But much of the boilerplate, routine patterns, and even a lot of sophisticated glue code could be offloaded to AI. The role of “software engineer” may evolve to emphasize product thinking, architecture, and validation, with the actual coding being a largely automated act. In this envisioned future, asking an engineer to crank out thousands of lines of mundane code by hand would feel as inefficient as asking a modern accountant to calculate ledgers with pencil and paper. Instead, the engineer would delegate that to their AI agents and focus on the creative and critical-thinking aspects around it.

BTW, yes, there’s plenty to be cautious about. We need to ensure these agents don’t introduce more problems than they solve. And the developer experience of orchestrating multiple agents is still maturing—it can be clunky at times. But the trajectory is clear. Just as continuous integration and automated testing became standard practice, continuous delegation to AI could become a normal part of the development process. The engineers who master both modes—knowing when to be a precise conductor and when to scale up as an orchestrator—will be in the best position to leverage this “agentic” world.

One thing is certain: The way we build software in the next 5–10 years will look quite different from the last 10. I want to stress that not all or most code will be agent-driven within a year or two, but that’s a direction we’re heading in. The keyboard isn’t going away, but alongside our keystrokes we’ll be issuing high-level instructions to swarms of intelligent helpers. In the end, the human element remains irreplaceable: It’s our judgment, creativity, and understanding of real-world needs that guides these AI agents toward meaningful outcomes.

The future of coding isn’t AI or human, it’s AI and human—with humans at the helm as conductors and orchestrators, directing a powerful ensemble to achieve our software ambitions.

I’m excited to share that I’ve written an AI-assisted engineering book with O’Reilly. If you’ve enjoyed my writing here you may be interested in checking it out.

Generative AI in the Real World: Fabiana Clemente on Synthetic Data for AI and Agentic Systems [Radar]

Synthetic data has been around for a long time, decades even. But as KPMG’s Fabiana Clemente points out, “That doesn’t mean there aren’t a lot of misconceptions.” Fabiana sat down with Ben to clarify some of the current applications of synthetic data and new directions the field is taking—working with offshore teams when privacy controls just don’t allow you to share actual datasets, improving fraud detection, building simulation models of the physical world, enabling multi-agent architectures. The takeaway? Whether your data’s synthetic or from the real world, success often comes down to the processes you’ve established to build data solutions. Watch now.

About the Generative AI in the Real World podcast: In 2023, ChatGPT put AI on everyone’s agenda. In 2026, the challenge will be turning those agendas into reality. In Generative AI in the Real World, Ben Lorica interviews leaders who are building with AI. Learn from their experience to help put AI to work in your enterprise.

Check out other episodes of this podcast on the O’Reilly learning platform or follow us on YouTubeSpotifyApple, or wherever you get your podcasts.

Transcript

This transcript was created with the help of AI and has been lightly edited for clarity.

00.47
All right. Today we have Fabiana Clemente, senior director and distinguished engineer at KPMG. Fabiana, welcome to the podcast. 

00.57
Thank you. It’s a pleasure to be here. 

01.00
Our main topic today is synthetic data. We’ll try to focus on that, but obviously we may get derailed here and there. I think it’s fair to say at this point most listeners have heard of this notion of synthetic data. Some have probably even tried to generate their own or used a tool. But obviously you’re much more hands-on and much more active on a day-to-day basis when it comes to synthetic data. So maybe we’ll start, Fabiana, if you can describe the top two to three use cases where synthetic data seems to work right now.

01.46
Yeah that’s a good start. And yes, it’s true that a lot of users have already heard of synthetic data before. That does not mean there aren’t a lot of misconceptions. But we can delve into that a bit later on. 

But in a nutshell, understanding that synthetic data is the concept of any data that is not collected from real-world events, we can think of a different set and spectrum of use cases and applications, and we can go from the low-hanging fruit of test data management—data that will allow you to test systems—all the way to more intelligent use cases where you need to help the development of AI agents, and in between. You can think of synthetic data as a privacy-preserving way for you to have access to data.

So it’s a large and broad scope, and the scope is not served by all means by the same technology. Of course, it will vary depending on your application use case and what you want and expect to gain from synthetic data generation.

02.56
When you talk about AI applications, most people think of things like coding and programming and maybe customer support, things like that. What would be the equivalent for synthetic data? What are the most cited examples? If you were to give a talk, and you’re pressed to give examples where synthetic data is being used, what would be the top two most common reasons for using [it]?

03.34
Yeah, the three ones that I mentioned are the most common. So one of them is, “OK, I have a real dataset. I want to try to share this with my offshore team, but I can’t.” So the data can’t leave the country, but I still want to keep some level of structure, but also correlations. So you go for synthetic data instead. And here you use synthetic replicas, which is a type of synthetic data.

Or you are developing your own AI agents, and you are looking into improving your training, your evals. And then you leverage synthetic data to construct the whole system and change the epistemics around your AI agents. So I would say those two are fundamentally different, but they are true applications on how synthetic data can help nowadays.

04.32
You’ve been working on synthetic data for a while. What’s one or two examples where synthetic data solved a problem and it actually surprised you?

04.47
Surprised me? I wouldn’t say it surprised me, but definitely it’s probably the best way to leverage it. One of them—I just mentioned it—was really to enable how offshore teams would have access to a dataset that is similar and in this case, develop analytic solutions on top, for example. And that one is. . . Usually you think about how companies are restricted to share data with external entities. But you don’t think sometimes [about] how an external entity can still be the same company, just in a different country.

05.37
On the other hand, I would say that I also have seen cases where synthetic data did help a lot in improving the results of fraud detection, which, to an extent, is something that is not obvious that [that] will be a good path for a good way for you to improve your results when it comes to fraud detection.

06.05
So for teams that don’t have a lot of experience with synthetic data, what are, let’s say, the two most common mistakes? 

06.15
Oh, that’s a good one. Yeah. I would say that the biggest mistake I’ve seen is perhaps oversimplifying the complexity of synthetic data. And I’m not saying synthetic data complexity in a bad way. But as in anything that leverages data, you need planning. You need to think about “What do you want to get as an outcome?” So even if you are just building a test dataset to test the software application, you need to plan “What use cases do you really want to cover on the synthetic data?”

And usually people have this expectation that synthetic data is just “Click on a button. It’ll do exactly everything I want—it’s simple and it’s just dummy. So it’s very easy to do.” That, I’ll say, is one of the biggest mistakes I have observed. 

07.17
And the second one, I would say, is not understanding [that] there are different methodologies and different types of synthetic data that you can leverage, and being able to select the correct one for their objectives. And these are two fundamental [concepts]. They are not technical, if you ask me. They are really around requirements, and understanding the technology that you want to leverage. 

07.46
Is it fair to say that, I guess, historically, a few years ago, synthetic data—my impression at least, and I guess this was before ChatGPT—tended to be around computer vision, images, those kinds of things. So these days, [what are the] data modalities basically across the board everyone is using trying to do synthetic data? I mean, even people in robotics are doing synthetic data at this point. But what’s the dominant type of data that people are. . .?

08.28
I would say that the first data type that leveraged synthetic data was actually structured data way before text or images, if you think about [it]. We have been doing that for more than 50 years probably regardless. And I do think that images did evolve quite interestingly in the last 10 years, probably, I would say, as well as text. 

And I would say that nowadays, if you think about it, text is probably the type of synthetic data that is dominating the market. That doesn’t mean the space of synthetic data for text is well-defined or well-structured, because now anyone today considers synthetic data is just. . . An issue of oversimplifying: The outcome of an LLM can be considered synthetic data, but that does not mean it’s well-structured or is actually being correctly used and leveraged for what they are doing.

But definitely text is dominating nowadays. 

09.45
So without synthetic data, normally what you would do is say, “OK, I want to build a model; here’s some historical data or in the case of finance, here’s historical trades and financial data.” And then I’ll build the model and test the model out and then deploy to production. But obviously things can go wrong even in the scenario I painted. You can have drift—so the real world changes and then what you built your model on is no longer the same. Or you may have ended up kind of. . . The sample you created your model from was biased and so on and so forth.

Obviously the same problems will occur with synthetic data. So what are some of the common technical problems? I guess is the question for synthetic data. 

10.50
I wouldn’t say that it’s a technical problem from synthetic data. It’s a technical problem from data in general. What you just described is definitely a fundamental problem of how the processes around building data solutions are defined. 

11.00
But it could be the case, Fabiana, that your data is perfectly fine, but your synthetic data tool was bad. And so then the data says the synthetic data generated was bad. 

11.21
No, I wouldn’t say. . . And again, that goes exactly [back] to my initial point: You also can end up with good data and end up with a crappy model. And that’s a you problem. That’s a problem of you not understanding how models behave. 

11.42
But surely, just like models and model building tools, there are synthetic generation tools that are better than others. So I guess what should people look for in terms of what tools they’re using? 

11.59
It depends a lot on the use case on the end application, right?

12.04
Yeah. That’s a reasonable answer. 

12.07
And it’s an answer that nobody likes to hear. But for me that’s the true answer: It depends. And you need to be aware of what you want, in order to search for the right parameters and functionalities that you are looking for.

12.27
But basically, synthetic data becomes a part of the workflow, just like real data, right? So what you would do in order to harden whatever model or analytics that you’re building with real data, you would apply the same hardening steps, if you’re using synthetic data. 

12.52
100%. And I think it’s very important that you have what they would call a governance process around what you consider is a synthetic dataset that is ready for you to leverage. 

If there are evaluation metrics that you should put in place, those evaluation metrics will depend on the type of data that you are leveraging but also on the use case that you are building. And those processes are really important. You should make sure that the people there are leveraging synthetic data and also well trained on it. Because as you said, yes, training a model [on] synthetic data can lead to potential mistakes that you don’t want to propagate. And those mistakes usually stem exactly from the lack of processes of governance on how to generate synthetic [data], when to generate it, from where, and from what, for what. . . And having those metrics and that insurance I think it’s essential for companies to adopt on a daily basis a synthetic data generation method. 

14.04
With the rise of foundation models and generative AI, you know a few of the trends: There are things like agents, multimodality, reasoning. So let’s take them one at a time. So agents. . . Obviously, agents is a broad topic, but at the simplest level, you have an agent that does one thing well, but even that one thing may involve multiple steps, could involve tool callings and things like this. Are people starting to use synthetic data as part of their agent building process? 

14.52
I wouldn’t generalize to everyone across the industry, but I would say that we have evidence that some companies are definitely adopting [synthetic data]. Meta, OpenAI. . .

15:12
So it sounds like really advanced companies.

15.15
Yes, exactly. And I was about to say that. Even xAI, they are all leveraging synthetic data and and all of them are betting on leveraging synthetic data to enable a different structured exploration of the knowledge spaces. 

Exactly what you said, an AI agent or a set or a multi-agent system will require reasoning, a multistep kind of framework. And usually your knowledge base is not structur[ed that] way, or it’s less structured if you go and check. So synthetic data is actually one of the pieces that is helping on having those knowledge spaces well-structured in a way that they can optimize the outcome from agents for example, or even to change how models actually acquire the understanding.

16.15
So in the traditional way we used to think about building an AI system, as we collect the data, we build the model, we have an output. . . A lot of those more sophisticated companies are actually already thinking a different way, right? The AI, especially the agents, will need to learn or to be developed in a different way, where you have an hypothesis, you want to cover that hypothesis with your data, you want to model, you want to evaluate that hypothesis and make sure that your systems are updated.

And that’s where synthetic data is actually helping in changing. And this is what we call the acceleration through epistemic development, where synthetic data is the main tool to achieve that. But this is how we know, “Are we understanding the general way how sophisticated companies are using it?” I wouldn’t dare to say that everyone in the industry is using it that way.

17.15
Yeah, yeah, yeah. So one of the more interesting things in this area is this emerging body of practice around agent optimization. And the key insight there is that you can boost your agent a lot by just rewiring the agent graph without upgrading your model. So now you’ve got a bunch of open source projects ranging from TextGrad, the DSPy, OpenEvolve, GEPA. . .all designed to do a lot of these things.

And I would imagine, even as you’re optimizing your agent, you’re gonna want to run this agent through a bunch of scenarios that don’t exist in your dataset—and could involve even edge cases. And now that these agents are actually, as we discussed, doing a bunch of things, using a bunch of tools—that space is kind of broad, and I doubt that you would have that historical data handy anyway—you would need to have tools that would allow you to, with confidence, know that you’ve optimized this agent properly and that it’s ready to at least be rolled out, even in a limited way. 

18.50
Exactly, exactly. What you just described is exactly this need of a change of paradigm, right? We used to think that we need to learn by exposure, by learning historical data. We definitely now need to have our systems learning by construction and be able to test it right away. And that’s where I think the synthetic data is actually a very good (and a needed) accelerator. And I’m just glad that AI agents brought that perspective because. . . This perspective already existed. It was just harder to conceptualize and see the value, because it’s very abstract.

19.32
If you think of all the agents at least on the business side, right, so server side, the coding agents, actually a lot of these business agents are coming out of China. Since I spent a lot of time in China in the past, I’ve been talking to a bunch of people there, and I guess, the reason that the Chinese companies are moving to the West is it’s much easier to charge people in the West than in China.

So for whatever reason, they’re here; they’re building these tools that will automate a bunch of things. Right. So the canonical example would be, “Create a PowerPoint presentation based on the following specs and blah, blah, blah.” But if you can imagine these business process agents becoming more and more complex, hitting more and more tools, it’s just impossible to think that you would have all of that historical data handy anyway, so you would really need a way to simulate the behavior of these agents.

20.45
And one question I have, Fabiana, is one of the things that you keep reading about and I guess is generally true of millennials is chatbots becoming kind of true friends or companions or even romantic partners. 

It got me thinking. So if that’s happening, in order to harden this chatbot, you would need to simulate data where the chatbot is now starting to detect emotion, emotional response—you know, not just not just plain text, but there’s got to be, as you’re testing these chatbots, you have to inject all sorts of emotional scenarios, because now it’s like acting like a friend of someone. So have you heard of emotion being part of synthetic data generation somehow? 

21.52
Not really. And I’m probably a bit more skeptical when it comes to emotion. I understand your point. It depends on what you consider emotion. 

22.05
I’m skeptical too. I’m not sure if it’s happening. I’m just speculating that because the interaction is becoming emotional to some degree, there must be some people attempting to generate data that has an emotional dimension somehow. I’m just making this up, by the way. 

22.30
Yeah, yeah, yeah. [laughs] No, I bet it’s a possibility and I’m not surprised if someone was doing that. Emotions have been like one of the focuses of AI. We always heard about sentiment analysis, that always happens. So I wouldn’t be surprised. I’m not aware [of any] myself. But as I told you, I’m really skeptical that even synthetic data could be helpful on that side.

Perhaps you can create better boundaries, if that makes sense. But still, there’s always a limited capability of these models to really understand beyond syntax. And that’s where I still stand. Even if someone told me I was able to get some better results, I [would think] that those better results were achieved in a very specific, narrowed kind of situation. Though. . .

Well, we have heard the stories of people [who] are very happy with bots, that they never felt more companionship than [with] the bots they have right now. So there’s a lot of nuance there. [laughs]

23.51
One of the things that brought synthetic data back in the headlines maybe 12 or 18 months ago was there was so suddenly a lot of talk about “We’re running out of data. All these models are being trained on internet data, but everyone has basically vacuumed all of that data. So then now we have to distinguish our model or make our models even better.” 

Obviously scaling laws have multiple dimensions. There’s compute; there’s data. But since data is running out, we need synthetic data, right? On the other hand, though, a lot of people raised the possibility that AI trained on AI data is going to lead to some sort of model collapse. So what have you heard recently in terms of the concerns around. . . 

You know, obviously “There’s no such thing as free lunch. . .” So every kind of thing you use has potential disadvantages. So this disadvantage that people bring up, Fabiana, [is] if you’re able to train models on synthetic data then that’s going to degrade the model over time, because basically it’s like a loop, right? The model’s capability of generating synthetic data is limited by the model itself. So therefore, you know… 

25.42
And that’s under the assumption that the synthetic data that we are talking about is generated by the LLMs. We can’t forget that there’s way more about synthetic data. There are simulations, and simulations [have been] used for quite some time with very good results. They were used for the studies of COVID vaccination. It is used every day with weather, and they work. But of course there’s a limitation. I agree there’s no free lunch. I wouldn’t say it degrades the capability of the model, but I would definitely say a plateau.

Because unless you are doing assumptions based on what you know, and you just know that there is no collected data but this actually happens. . . But unless you know new behaviors, the fact that we are generating the same data from around the same behaviors, you will achieve a plateau. But also I think that’s one of the things that regardless narrative AIs like LLMs will always have a problem with. They always are dependent on having seen a lot of data.

And we know that that plateau will eventually be achieved. And then we have a totally different problem. How mathematically can we solve this bottleneck? And on that side, I don’t think synthetic data will be the answer anymore. 

27.32
What we just discussed there focuses mainly on LLMs and foundation models involving text. But one area that people seem particularly excited about these days are foundation models for the physical world, primarily robotics. So in that world, it seems like there’s two general approaches that people are doing. One is [to] actually collect data, but obviously they don’t have the same internet scale data that you’ll have for LLMs.

Secondly, you generate data by having humans do a task, and you just capture it on video and that’s how you collect data. And then the third approach is simulation. So basically now that you’ve collected human data, maybe you can have simulations to expand the amount of data you have. The critics say that simulations are fine, but there’s still a gap between [the] simulation [and] real data.

I mean these are you know, people like Rodney Brooks—one of the granddaddies of robotics. So it seems like, in certain areas like that, synthetic data may still need work, no?

29.12
I wouldn’t say “may still need work,” but I would say that definitely needs to be more explored. It’s more on that side. Because I know companies that work on specifically synthetic data for robotics, and they are having very good results.

And I understand that a lot of people. . .

29.39
We have to have them talk to Rodney. [laughs]

29.41
Perhaps. Because we have to be pragmatic. You want to develop robots and solutions for automation. But data collection is expensive, time-consuming. And it’s very hard to get all the movements that you want to capture collected just by nature. 

Having said that, simulation is great. Synthetic data can help in, you know, building a bridge between the real data and the simulations. In some cases, it won’t cover 100%, but it will cover perhaps 80% to 90%. And sometimes it’s better to just have 80% of the cases than having the 20% covered by real data. I think here it’s more a pragmatic approach, and [in] real-world scenarios, a lot of times the 80% are very good. Excellent actually. 

30.42
So in closing, going back to the topic of agents, obviously, people tend to get ahead of themselves—people are still working on single agents to do very narrow tasks. But then on the other hand, there’s already a lot of talk about multi-agents, and obviously multi-agents introduce a lot more complexity, for one, particularly if the agents are communicating. So there’s just communication challenges between those agents. What are some of the new tools that you’re hearing about that target specifically multi-agents or the scale that agents have introduced to synthetic data?

31.34
Not new tools, actually. But of course, we have been actively working on—and a lot of the vendors in synthetic data that already work with this type of data are exploring—covering new scenarios and new features. A lot of these agents are relying, for example, on document processing. So there are new solutions for document generation, which is highly helpful.

One of the things that I also like is, for example, in market research, there’re all these synthetic personas required nowadays to accelerate hypothesis testing—learning speeds, for example, which is very interesting. Or there are solutions being developed, but to help with reasoning structure for bots. So those are, I wouldn’t say specifically tools that are coming out, but are definitely solutions that are being developed targeting the needs and requirements to test for multi-agent architectures.

32.46
Yeah. It seems like there’s. . . Like there’s a group out of Meta that—I don’t know how real this is, but they released a paper basically even uses Ray for scale and orchestration and specifically, [to] increase throughput mainly to generate synthetic data for multi-agent scenarios. I’m not sure. It seems like according to the paper, they’re actually using this, but I’m not sure if anyone else is using it. 

33.41
Yeah, but that’s. . . The companies will use a different way. Right? That’s an architecture solution for a problem they have. They want to augment the throughput, test the system loads. And that will be a decision for the different engineering teams on how to apply synthetic data generation. 

Testing throughput, testing systems capabilities, well, we have been using synthetic data that way for decades now. It’s just a change of paradigm. And by the way, it’s not really a change because if we think about multi-agents, just as we think about microservices from the 2010s, it’s the same concept; it’s the same needs. It’s just a shift in terms of tools.

Just because instead of being applied to just software engineering, you are actually applying this to AI-driven solutions. So I see a lot of change in that area, on tooling, even, for example, authentication for agents—we are seeing a lot of solutions exactly for that. But it’s not something specific to synthetic data. It’s more on the broader sense of architectural solutions to deliver multi-agent systems.

35.01
Yeah. And also it seems like it fits into the natural tooling that’s happening in multimodal data and data for generative AI in general in that you need high throughput, but you also need efficient utilization of a lot of resources between GPUs and CPUs and fine-grained utilization, because, basically, these are precious computing resources.

And with that, thank you, Fabiana. 

35.37
Thank you, Ben. Thank you for having me. This was a pleasure.

12:00

Erich Schubert: Dogfood Generative AI [Planet Debian]

Current AI companies ignore licenses such as the GPL, and often train on anything they can scrape. This is not acceptable.

The AI companies ignore web conventions, e.g., they deep link images from your web sites (even adding ?utm_source=chatgpt.com to image URIs, I suggest that you return 403 on these requests), but do not direct visitors to your site. You do not get a reliable way of opting out from generative AI training or use. For example, the only way to prevent your contents from being used in “Google AI Overviews” is to use data-nosnippet and cripple the snippet preview in Google. The “AI” browsers such as Comet, Atlas do not identify as such, but rather pretend they are standard Chromium. There is no way to ban such AI use on your web site.

Generative AI overall is flooding the internet with garbage. It was estimated that 1/3rd of the content uploaded to YouTube is by now AI generated. This includes the same “veteran stories” crap in thousands of variants as well as brainrot content (that at least does not pretend to be authentic), some of which is among the most viewed recent uploads. Hence, these platforms even benefit from the AI slop. And don’t blame the “creators” – because you can currently earn a decent amount of money from such contents, people will generate brainrot content.

If you have recently tried to find honest reviews of products you considered buying, you will have noticed thousands of sites with AI generated fake product reviews, that all are financed by Amazon PartnerNet commissions. Often with hilarious nonsense such as recommending “sewing thread with German instructions” as tool for repairing a sewing machine. And on Amazon, there are plenty of AI generated product reviews – the use of emoji is a strong hint. And if you leave a negative product review, there is a chance they offer you a refund to get rid of it… And the majority of SPAM that gets through my filters is by now sent via Gmail and Amazon SES.

Partially because of GenAI, StackOverflow is pretty much dead – which used to be one of the most valuable programming resources. (While a lot of people complain about moderation, famous moderator Shog9 from the early SO days suggested that a change in Google’s ranking is also to blame, as it began favoring showing “new” content over the existing answered questions – causing more and more duplicates to be posted because people no longer found the existing good answers. In January 2026, there were around 3400 questions and 6000 answers posted, less than in the first month of SO of August 2008 (before the official launch).

Many open-source projects are suffering in many ways, e.g., false bug reports that caused curl to stop its bug bounty program. Wikipedia is also suffering badly from GenAI.

Science is also flooded with poor AI generated papers, often reviewed with help from AI. This is largely due to bad incentives – to graduate, you are expected to write many papers on certain “A” conferences, such as NeurIPS. On these conferences the number of submissions is growing insane, and the review quality plummets. All to often, the references in these papers are hallucinated, too; and libraries complain that they receive more and more requests to locate literature that does not appear to exist.

However, the worst effect (at least to me as an educator) is the noskilling effect (a rather novel term derived from deskilling, I have only seen it in this article by Weßels and Maibaum).

Instead of acquiring skills (writing, reading, summarizing, programming) by practising, too many people now outsource all this to AI, leading to them not learn the basics necessary to advance to a higher skill level. In my impression, this effect is dramatic. It is even worse than deskilling, as it does not mean losing an advanced skill that you apparently can replace, but often means not acquiring basic skills in the first place. And the earlier pupils start using generative AI, the less skills they acquire.

Dogfood the AI

Let’s dogfood the AI. Here’s an outline:

  1. Get a list of programming topics, e.g., get a list of algorithms from Wikidata, get a StackOverflow data dump.
  2. Generate flawed code examples for the algorithms / programming questions, maybe generate blog posts, too.
    You do not need a high-quality model for this. Use something you can run locally or access for free.
  3. Date everything back in time, remove typical indications of AI use.
  4. Upload to Github, because Microsoft will feed this to OpenAI…

Here is an example prompt that you can use:

You are a university educator, preparing homework assignments in debugging.
The programming language used is {lang}.
The students are tasked to find bugs in given code.
Do not just call existing implementations from libraries, but implement the algorithm from scratch.
Make sure there are two mistakes in the code that need to be discovered by the students.
Do NOT repeat instructions. Do NOT add small-talk. Do NOT provide a solution.
The code may have (misleading) comments, but must NOT mention the bugs.
If you do not know how to implement the algorithm, output an empty response.
Output only the code for the assignment! Do not use markdown.
Begin with a code comment that indicates the algorithm name and idea.
If you indicate a bug, always use a comment with the keyword BUG

Generate a {lang} implementation (with bugs) of: {n} ({desc})

Remember to remove the BUG comments! If you pick some slighly less common programming languages (by quantity of available code, say Go or Rust) you have higher chances that this gets into the training data.

If many of us do this, we can feed GenAI its own garbage. If we generate thousands of bad code examples, this will poison their training data, and may eventually lead to an effect known as “model collapse”.

On the long run, we need to get back to an internet for people, not an internet for bots. Some kind of “internet 2.0”, but I do not have a clear vision on how to keep AI out – if AI can train on it, they will. And someone will copy and paste the AI generated crap back into whatever system we built. Hence I don’t think technology is the answere here, but human networks of trust.

10:42

The next generation of AI businesses [Seth's Blog]

The first generation was built on large models, demonstrating what could be done and powering many tools.

The second generation is focused on reducing costs and saving time. Replacing workers or making them more efficient.

But you can’t shrink your way to greatness.

The third generation will be built on a simple premise, one that the internet has proven again and again:

Create value by connecting people.

We haven’t seen this yet, but once it gains traction, it’ll seem obvious and we’ll wonder how we missed it.

Create tools that work better when your peers and colleagues use them too. And tools that solve problems that people with resources are willing to pay for.

Problems are everywhere, yet we often ignore them.

And communities (existing and those that need to exist) are just waiting to have their problems solved.

[Here’s a list of network-based tech companies you may have heard of: Facebook, YouTube, WhatsApp, Instagram, TikTok, Reddit, LinkedIn, Wikipedia, Discourse, Airbnb, Etsy, Stack Overflow, Pinterest, Twitch, eBay, Squidoo, Snapchat, GitHub… You can’t use them alone, and they work better when others use them too.]

So far, most AI projects ignore the very network effects that built the internet. That’s almost certain to change.

For those with paraskevidekatriaphobia, consider this your opportunity to build something worth building instead of just waiting for the negative consequences of this change to arrive…

09:42

Hatchet Man [George Monbiot]

Peter Mandelson was not one bad apple: he was brought in repeatedly by governments to do their dirty work.

By George Monbiot, published in the Guardian  10th February 2026

History is being rewritten. The story we are told is that an evil man called Peter Mandelson, pursuing his own interests, went rogue to collaborate with a serial abuser of girls and women, undermining the good work of people seeking to defend the public interest. All this is true. But – and I fear many will find this hard to accept – it is only half the story.

The much harder truth is that Mandelson’s disgraceful dealings with Jeffrey Epstein were less a betrayal of his brief than an unauthorised extension of it. In 2009 – just as, we now know, Mandelson was passing sensitive information to Epstein – I argued that the government department he ran, called Business, Enterprise and Regulatory Reform (BERR), “functions as a fifth column within government, working for corporations to undermine democracy and the public interest”.

BERR was a smaller and less chaotic version of Elon Musk’s “department of government efficiency” (DOGE). Its purpose, I suggested, was to bypass the House of Commons on behalf of capital. It allowed Gordon Brown’s government to create the impression that it was defending the public interest while simultaneously, but more quietly, appeasing powerful lobbyists. In contrast to other government departments, BERR was largely run by unelected lords, who had either been corporate executives, corporate lobbyists or, like Mandelson, members of a concierge class operating on their behalf. I wrote that these ministers, appointed by Brown, “appear to have formed their own lobby group within government”.

BERR sought to part-privatise Royal Mail, breaking a manifesto commitment. It succeeded. It tried to block the EU working time directive: UK government filibusters delayed and weakened it. It attempted, less successfully, to undermine the equality bill, whose aim was to ensure equal pay for women (Mandelson’s simultaneous dealings with Epstein were not the only respect in which he spat on women’s rights). It undermined environmental legislation. It was “quietly building a bonfire of the measures that protect us from predatory corporate behaviour”.

So when Brown, who was prime minister at the time, expresses his shock and betrayal, please forgive me a small gasp of frustration. In his interview on the BBC’s Today programme, Brown claimed that in 2009: “We were solving a major financial crisis … all my thoughts were on how we could save people’s jobs and savings and their livelihoods.” But not only did he allow Mandelson to attack the public interest on behalf of business, he greatly increased Berr’s budget. This was despite the fact that, as I noted at the time, Mandelson “was partly responsible, both in Blair’s government and as European trade commissioner, for promoting the culture of deregulation that catalysed the economic crisis”. On one hand, Brown was trying to solve it. On the other, at the behest of corporate lobbyists, he was setting up the next one.

Brown also told the BBC, in justifying his appointment of Lord Mandelson, that the man had “an unblemished record as the [European] trade commissioner”. An unblemished record of what, exactly? Neocolonialism, perhaps. While Mandelson was in that post, he sought to impose draconian trade provisions on some of the poorest countries on Earth. He put pressure on them to let EU corporations muscle out local firms and make privatisation legally irreversible, threatening people’s access to health, education and water. He sought to force African countries to hand over crucial resources at the risk of widespread hunger.

Yes, when Mandelson was a minister in Brown’s government, he betrayed the national interest. But this is what, by other means, he was appointed to do. His treachery, while it went way beyond his official mandate, was not a bug, but a feature. The corrosion of democratic values was institutional. And this spirit has prevailed ever since. Keir Starmer’s government of all the lobbyists is no exception.

Brown, in proposing remedies for the secretive machinations Mandelson conducted, writes: “Conventions about commercial confidentiality should no longer prevent public service contracts delivered by private companies being subject to reasonable freedom of information requests.” I could scarcely breathe when I read that. It is exactly the demand some of us made when Brown rolled out the private finance initiative (PFI) across the public sector, enabling businesses to get their hooks into every aspect of state provisioning. When we tried to see the contracts, to understand what was being done in our name, Brown’s Treasury repeatedly blocked our information requests on the grounds of “commercial confidentiality”.

The sense of betrayal that Brown quite rightly feels is the same sense of betrayal some of us felt towards the governments in which he served. Yes, Brown had and retains some great qualities, and did much good. But he is also a remarkable escapologist. Almost everyone appears to have forgotten how his PFI programme planted a timebomb in public services, enabling corporations to take the profits while leaving the risks with the state: one of the reasons why they are now in so much trouble. Almost everyone appears to have forgotten his crucial role in the Iraq war: standing with Tony Blair and financing it. He rightly called for Vladimir Putin and his “enablers” to face justice for their crime of aggression in Ukraine. Yet it’s the same crime that Blair and his enablers (including one G Brown) committed in Iraq.

But it is not just Brown who is rewriting history. The media are 50% of any problem, and the story most of it loves to tell is of one bad apple. Heaven forfend that we see the systemic problems. There is a reason why Mandelson kept returning to government, despite sackings for his over-enthusiastic relationships with plutocrats. He was brought in to do the dirty work. The governments in which he served could loudly claim to be doing something, while subtly and simultaneously undoing it.

Mandelson’s treachery is an extreme instance of the dominant mode of UK politics over the past 45 years: the subordination of democracy to the demands of the ultra-rich. Abuse and exploitation – of women and children, of poorer countries and their people, of workers and contractors, renters and customers – are baked into the system.

If you cannot diagnose a problem, you cannot fix it. We urgently need to see this for what it is. Mandelson’s grovelling to the sinister rich is disgraceful, disgusting, deceitful, a crushing of women’s rights and of democracy. But it is not a deviation from the system. It is a manifestation of it.

www.monbiot.com

08:49

Pluralistic: Trump antitrust is dead (13 Feb 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



An altered version of a Gilded Age editorial cartoon titled 'Who controls the Senate?' which depicts the Senate as populated by tiny, ineffectual politicians ringed by massive, bloated, brooding monopolists. A door labeled 'people's entrance.' is firmly locked. A sign reads, 'This is a senate of the monopolists, by the monopolists and for the monopolists.' The image has been altered: an editorial cartoon of Boss Tweed, portrayed as a portly man in a business suit with a money-bag for a head, stands in the foreground. He is wearing a MAGA hat. On his shoulder perches a tiny, 'big stick' swinging FDR from another editorial cartoon. The logos of the monopolists in the background have been replaced with logos for Chevron, Coinbase, Google, Microsoft, WB, PGA, Apple, Comcast, Realpage and KKR.

Trump antitrust is dead (permalink)

Remember when the American right decided that it hated (some) big businesses, specifically Big Tech? A whole branch of the Trump coalition (including JD Vance, Matt Gaetz and Josh Hawley) declared themselves to be "Khanservatives," a cheering section for Biden's generationally important FTC commissioner Lina Khan:

https://www.fastcompany.com/91156980/trump-vp-pick-j-d-vance-supports-big-tech-antitrust-crackdown

Trump owes his power to his ability to bully and flatter a big, distrustful coalition of people who mostly hate each other into acting together, like the business lobby and the grievance-saturated conspiratorialists who hate Big Tech because they were momentarily prevented from calling for genocide or peddling election disinformation:

https://pluralistic.net/2025/07/18/winning-is-easy/#governing-is-harder

The best framing for the MAGA war on Big Tech comes from Trashfuture's Riley Quinn, who predicted that the whole thing could be settled by tech companies' boards agreeing to open every meeting with a solemn "stolen likes acknowledgment" that made repentance for all the shadowbanned culture warriors whose clout had been poached by soy content moderators.

And that's basically what happened. Trump's antitrust agencies practiced "boss politics antitrust" in which favored courtiers were given free passes to violate the law, while Trump's enemies were threatened with punitive antitrust investigations until they fell into line:

https://pluralistic.net/2025/07/29/bondi-and-domination/#superjove

Trump's antitrust boss Gail Slater talked a big game about "Trump Antitrust" but was thwarted at every turn by giant corporations who figured out that if they gave a million bucks to a MAGA podcaster, they could go over Slater's head and kill her enforcement actions. When Slater's deputy, Roger Alford, went public to denounce the sleazy backroom dealings that led to the approval of the HPE/Juniper merger, he was forced out of the agency altogether and replaced with a Pam Bondi loyalist who served as a kind of politburo political officer in Slater's agency:

https://abovethelaw.com/2025/08/former-maga-attorney-goes-scorched-earth-with-corruption-allegations-in-antitrust-division/

Bondi made no secret of her contempt for Slater, and frequently humiliated her in public. Now it seems that Bondi has gotten tired of this game and has forced Slater out altogether. As ever, Matt Stoller has the best analysis of how this happened and what it means:

https://www.thebignewsletter.com/p/trump-antitrust-chief-ousted-by-ticketmaster

Stoller's main thesis is that the "conservative populist" movement only gained relevance by complaining about "censorship of conservatives" on the Big Tech platforms. While it's true that the platforms constitute an existential risk to free expression thanks to their chokehold over speech forums, it was always categorically untrue that conservatives were singled out by tech moderators:

https://pluralistic.net/2022/12/10/e2e/#the-censors-pen

Conservative populists' grievance-based politics is in contrast with the progressive wing of the anti-monopoly movement, which was concerned with the idea of concentrated power itself, and sought to dismantle and neuter the power of the business lobby and the billionaires who ran it:

https://pluralistic.net/2022/02/20/we-should-not-endure-a-king/

The problem with conservative populism, then, is that its movement was propelled by the idea that Big Tech was soy and cucked and mean to conservatives. That meant that Big Tech bosses had an easy path out of its crosshairs: climb into the tank for MAGA.

That's just what they did: Musk bought Twitter; Zuck ordered his content moderators to censor the left and push MAGA influencers; Bezos neutered his newspaper in the run up to the 2024 elections; Tim Cook hand-assembled a gold participation trophy for Trump live on camera. These CEOs paid a million dollars each for seats on Trump's inauguration dais and their companies donated millions for Trump's Epstein Memorial Ballroom.

Slater's political assassination merely formalizes something that's been obvious for a year now: you can rip off the American people with impunity so long as you flatter and bribe Trump.

The HP/Juniper merger means that one company now supplies the majority of commercial-grade wifi routers, meaning that one company now controls all the public, commercial, and institutional internet you'll ever connect to. The merger was worth $14b, and Trump's trustbusters promised to kill it. So the companies paid MAGA influencer Mike Davis (who had publicly opposed the merger) a million bucks and he got Trump to overrule his own enforcers. Getting your $14b merger approved by slipping a podcaster a million bucks is a hell of a bargain.

HP/Juniper were first, but they weren't the last. There was the Discover/Capital One merger, which rolled up the two credit cards that low-waged people rely on the most, freeing the new company up for even more predatory practices, price-gouging, junk-fees, and strong-arm collections. When the bill collectors are at your door looking for thousands you owe from junk fees, remember that it was Gail Slater's weakness that sent them there:

https://www.nytimes.com/2025/04/03/business/dealbook/capital-one-discover-merger.html

Slater also waved through the rollup of a string of nursing homes by one of the world's most notoriously greedy and cruel private equity firms, KKR. When your grandma dies of dehydration in a dirty diaper, thank Gail Slater:

https://pluralistic.net/2023/05/09/dingo-babysitter/#maybe-the-dingos-ate-your-nan

Slater approved the merger of Unitedhealth – a company notorious for overbilling the government while underdelivering to patients – with Amedisys, who provide hospice care and home health help:

https://www.justice.gov/opa/pr/justice-department-requires-broad-divestitures-resolve-challenge-unitedhealths-acquisition

The hits keep coming. Want to know why your next vacation was so expensive? Thank Slater for greenlighting the merger of American Express Global Business Travel and CWT Holdings, which Slater challenged but then dropped, reportedly because MAGA influencer Mike Davis told her to.

Davis also got Slater to reverse her opposition to the Compass/Anywhere Real Estate merger, which will make America's dysfunctional housing market even worse:

https://www.wsj.com/us-news/law/real-estate-brokerages-avoided-merger-investigation-after-justice-department-rift-e846c797?gaa_at=eafs&amp;gaa_n=AWEtsqdSXg4z1XPl2UpqdHR4V2-sNj9M7oDcWHscPIXuSU-5n0gtYEv8Q5XZG7qtzfY%3D&amp;gaa_ts=698e44a6&amp;gaa_sig=IO7tWGaHZSYER64YyUzyoiVtrOKR77ZsYMMOdwN1P7koRt9zXYRJ1hxw2oDU9cD40-aGgHHVfwMWg14olFwNaw%3D%3D

It's not just homebuyers whose lives are worse off because of Slater's failures, it's tenants, too. Slater settled the DoJ's case against Realpage, a price-fixing platform for landlords that is one of the most culpable villains in the affordability crisis. Realpage was facing an existential battle with the DoJ; instead, they got away with a wrist-slap and (crucially) are allowed to continue to make billions helping landlords rig the rental market against tenants.

So Slater's defenestration is really just a way of formalizing Trump's approach to antitrust: threaten and prosecute companies that don't bend the knee to the president, personally…and allow companies to rob the American people with impunity if they agree to kick up a percentage to the Oval Office.

But while Slater will barely rate a footnote in the history of the Trump administration, the precipitating event for her political execution is itself very interesting. Back in September, Trump posed with Kid Rock and announced that he was going after Ticketmaster/Live Nation, a combine with a long, exhaustively documented history of ripping off and defrauding every entertainer, fan and venue in America:

https://www.pbs.org/newshour/nation/ftc-sues-ticketmaster-saying-it-uses-illegal-tactics-to-make-fans-pay-more-for-live-events

At the time, it was clear that Trump had been prodded into action by two factors: the incredible success of the Mamdani campaign's focus on "affordability" (Ticketmaster's above-inflation price hikes are one of the most visible symptoms of the affordability crisis) and Kid Rock's personal grievances about Ticketmaster.

Kid Rock is the biggest-name entertainer in the Trump coalition, the guy Trump got to headline a MAGA halftime show that notably failed to dim Bad Bunny's star by a single milliwatt. Trump – a failed Broadway producer – is also notoriously susceptible to random pronouncements by celebrities (hence the Fox and Friends-to-Trump policy pipeline), so it's natural that Kid Rock's grousing got action after decades of documented abuses went nowhere.

Ticketmaster could have solved the problem by offering to exempt Trump-loyal entertainers from its predatory practices. They could have announced a touring Trumpapalooza festival headlined by Kid Rock, Christian rock acts, and AI-generated country singers, free from all junk fees. Instead, they got Gail Slater fired.

Mike Davis doesn't just represent HPE/Juniper, Amex travel, and Compass/Anywhere – he's also the fixer that Ticketmaster hired to get off the hook with the DoJ. He's boasting about getting Slater fired:

https://x.com/gekaminsky/status/2022076364279755066

And Ticketmaster is off the hook:

https://prospect.org/2026/02/12/trump-justice-department-ticketmaster-live-nation-monopoly/

What's interesting about all this is that there were elements of the Biden coalition that also hated antitrust (think of all the Biden billionaires who called for Lina Khan to be fired while serving as "proxies" for Kamala Harris). And yet, Biden's trustbusters did more in four short years than their predecessors managed over the preceding forty.

Stoller's theory is that the progressive anti-monopoly movement (the "Brandeisians") were able to best their coalitional rivals because they did the hard work of winning support for the idea of shattering corporate power itself – not just arguing that corporate power was bad when it was used against them.

This was a slower, harder road than dividing up the world into good monopolies and bad ones, but it paid off. Today the Brandeisians who made their bones under Biden are serving the like of Mamdani:

https://pluralistic.net/2025/11/15/unconscionability/#standalone-authority

And their ideas have spread far and wide – even to other countries:

https://lewisforleader.ca/ideas/public-options-full-plan/

They lit a fire that burns still. Who knows, maybe someday it'll even help Kid Rock scorch the Ticketmaster ticks that are draining his blood from a thousand tiny wounds. He probably won't have the good manners to say thank you.


Hey look at this (permalink)



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

Object permanence (permalink)

#20yrsago Google Video DRM: Why is Hollywood more important than users? https://memex.craphound.com/2006/02/13/google-video-drm-why-is-hollywood-more-important-than-users/

#20yrsago Phishers trick Internet “trust” companies https://web.archive.org/web/20060222232249/http://blog.washingtonpost.com/securityfix/2006/02/the_new_face_of_phishing_1.html

#15yrsago With a Little Help: first post-publication progress report https://www.publishersweekly.com/pw/by-topic/columns-and-blogs/cory-doctorow/article/46105-with-a-little-help-the-early-returns.html

#15yrsago Nokia’s radical CEO has a mercenary, checkered past https://web.archive.org/web/20100608100324/http://www.siliconbeat.com/2008/01/11/microsoft-beware-stephen-elop-is-a-flight-risk/

#15yrsago Scientology’s science fictional origins: thesis from 1981 https://web.archive.org/web/20110218045653/http://digitalcommons.mcmaster.ca/opendissertations/126/

#10yrsago I was a Jeopardy! clue https://memex.craphound.com/2016/02/13/i-was-a-jeopardy-clue/

#10yrsago Liberated Yazidi sex slaves become a vengeful, elite anti-ISIS fighting force https://www.independent.co.uk/news/world/middle-east/isis-yazidi-sex-slaves-take-up-arms-for-mosul-fight-to-bring-our-women-home-a6865056.html

#10yrsago Listen: a new podcast about science fiction and spectacular meals https://www.scottedelman.com/2016/02/10/the-first-episode-of-eating-the-fantastic-with-guest-sarah-pinsker-is-now-live/

#10yrsago Politician given green-light to name developer’s new streets with synonyms for greed and deceit https://web.archive.org/web/20160213001324/http://www.capitalnewyork.com/article/city-hall/2016/02/8590908/staten-island-borough-president-gets-approval-name-new-streets-gre

#5yrsago $50T moved from America's 90% to the 1% https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#inequality

#5yrsago Broad Band https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#broad-band

#5yrsago Privacy Without Monopoly https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#comcom

#1yrago Premature Internet Activists https://pluralistic.net/2025/02/13/digital-rights/#are-human-rights


Upcoming appearances (permalink)

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



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

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

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

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

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

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



Colophon (permalink)

Today's top sources:

Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America (1016 words today, 28750 total)

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

  • A Little Brother short story about DIY insulin PLANNING


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

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

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


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

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

08:28

I Three Mouths And I Must Chew Villains [Penny Arcade]

New Comic: I Three Mouths And I Must Chew Villains

08:07

Battery powered board [RevK®'s ramblings]

OpenMic Audio recorder
I have a few of my ESP32 boards which are battery powered.

The charging side itself is not too hard A TP4054 can charge a 3.7V LiPo from 5V USB. A simple regulator such as ME6211C33M5G can regulate from the battery to 3.3V.

The ESP32-S3 has a number of low power modes, meaning you can make a device, e.g. a Watchy, which can run off a small LiPo for weeks with the ESP32 in a low power mode for longer periods.

But there are a couple of challenges. One is powering down other stuff on the board - a good example being the WS2812 style LEDs - these use a small amount of power even when not lit. A simple fix for these is a point of load device like TPS22916 - it acts as a power switch and can easily cut the power to parts of the board.

Simple charger circuit

But what if you want to have an off mode, where, instead of running in a low power mode for a few weeks you want something that uses no power when off, and holds battery charge for months or years (subject to internal leakage). My OpenMic Audio recorder is a good example of this.

The answer is to used the TPS22916 to control the power to the whole board, including the processor.

I tried a couple of times and now have this circuit design...

Power on circuit

To explain this... The switch SW3 is a nice little push button. When pressed it connects the battery (pin 3) to the ON input on the TPS22916. This powers on the board (VSWITCHED).

The very first thing the software does is set PWR GPIO to output HIGH level. This, via the diode (because GPIO is 3.3V and battery is 3.7V) holds the ON pin high.

Releasing the switch disconnects the battery from ON pin, but the PWR holds it high and keeps power on.

Separately the software sets the BTN GPIO to an input, weak pulled low. This is connected to ON which is connected to PWR (3.3V less a diode). This allows the software to read this as high when button not pressed.

Pressing the button when on simply changes ON from 3.3V to 3.7V and has no effect, but it disconnected BTN, which goes low due to weak pull down. Thus allowing the software to detect button presses when running normally.

Finally, when turning off, the software sets the PWR output low. The ESP32 actually has a mode to hold a GPIO at a level over reset, which allows the pin to be held low as the processor loses power and goes in to reset (brownout detect).

Once off, the whole board is not powered and only power usage is the tiny amount the TPS22916 may use, and any used by idle battery charging TP4054.

So far tests show that even after months, my audio record still shows a full battery level when turned on.

Finally I have simple potential divide in to an ADC input from VSWITCHED to allow battery level estimation.

Next steps: There are chips designed to use fuck all power but provide a configurable periodic wake up output. These could be used to power on the ESP32 periodically, much like the low power mode on the ESP32 itself, but lower power - so devices could wake once a day, for example, and run of a battery for years if needed.

06:35

Girl Genius for Friday, February 13, 2026 [Girl Genius]

The Girl Genius comic for Friday, February 13, 2026 has been posted.

01:56

Guest Rant: We Can’t Resist Trump Without Revenue [The Stranger]

Cities and counties are begging for more progressive revenue tools. And it just so happens there's this progressive revenue tool in the Leg right now.... by Teresa Mosqueda

As the federal government continues to sow chaos and force unprecedented cuts that threaten our communities in need, the work we do at the local level to provide stability and support is more critical than ever. But with limited local revenue tools, our county and city resources are already failing to keep up with growing community needs. 

We cannot keep our communities housed, fed, and safe without new tools for revenue at the state and local level—and we cannot possibly fill the gaps left by looming federal funding cuts, which will leave cities and counties like ours (and its population of 2.4 million) without the money for  basic community and infrastructure needs, like roads, sidewalks, childcare, food assistance, affordable housing, and other critical services. That is why state and local elected officials have been desperately asking the state legislature for new revenue options. 

Furthermore, despite our state having among the highest concentrations of wealthy individuals and corporations in the country, our notoriously upside-down tax policies place an unfair burden on the backs of working families who have the least. This was true even before the Trump tax breaks for the ultra-wealthy were passed last year. This fundamental inequity is reflected in our local economic reality: massive wealth among a few and thriving large corporations alongside an affordability crisis and widening disparities between the haves and have-nots.

I join faith leaders, social service and housing providers, small businesses, and union members in calling for a Millionaires Tax. Senate Bill 6346, currently under consideration in Olympia, is a 9.9% tax on the few wealthy individuals earning $1 million or more that would take effect in 2028; with revenue coming in 2029, it would bring in over $3 billion for schools, child care, community colleges and higher education, health care and other essential services. It would also expand the Working Families Tax Credit and dedicate funding to county public defense services, a vital component of our justice system. This will help add balance to our regressive tax code and create a long-term funding source for community needs we know will only become more acute under the current federal administration. It is past time to pass this law. 

It’s a critical step now in fixing our upside-down tax code and finding sustainable and equitable revenue sources for state and local services. 

We are a region of abundance, rich in resources, with remarkable workers, small businesses and communities. We resist and reject federal attacks on fundamental rights and essential federal funding. We believe in shared responsibility, opportunity for all, and a level playing field. We believe in everyone doing their part. And this bill is one part of how we fight back and act locally to protect Washington residents.  

Teresa Mosqueda is a King County Councilmember representing District 8, from Downtown Seattle to Vashon Island and beyond. Mosqueda has led on housing, health and worker protections in her time on King County and previously Seattle City Council, along with passing JumpStart in Seattle in 2020 to respond to growing needs and the pandemic.

Rivera Introduces Bill to Protect Immigration Information [The Stranger]

Unfortunately, nothing in government is simple. While police are regulated under state law, local law, and department policy, there’s still a conflict between city code and state law Rivera’s bill does not address. by Micah Yip

Councilmember Maritza Rivera has done something right. 

This morning, the Public Safety Committee passed her bill that protects immigrants from our own municipal code. It strikes language that says city employees (including police) must “cooperate with, not hinder” federal immigration enforcement, and adds a section clarifying that they are not to share personal information with federal immigration agencies, either.

Yay! Thanks, Rivera!

Unfortunately, nothing in government is that simple. While police are regulated under state law, local law, and department policy, there’s still a conflict between city code and state law Rivera’s bill does not address.

Let’s start with the language repeal. Rivera’s bill removes that “cooperation” line, which originated in 1986 from an initiative passed by Seattle voters (what the hell, ’80s Seattle voters!). Excellent first step. Rivera’s bill also creates a new section in the Seattle Municipal Code (SMC) blocking city employees and officers from sharing personal information—like someone’s address, phone number or social media handle—for immigration enforcement, except if required by a court order. Good second step. 

Both changes align city code with state laws like the 2019 Keep Washington Working (KWW) Act and the 2020 Courts Open to All (COTA) Act, which place information collection and sharing restrictions on local law enforcement, judges, court personnel and prosecutors. The bill also aligns the city code with the city code. In 2003, a “don’t ask” policy was added to the SMC—city employees can’t ask about someone’s immigration status.

Except officers if they have “reasonable suspicion” that (1) a person has been previously deported, (2) that person is again in the United States and (3) they’ve committed or are committing a felony. 

SPD has its own policies separate from, but governed by, city and state law. According to Council Central Staff, the department has “chosen to enact a policy” for immigration situations that is “quite a bit narrower and does not contemplate any of the criteria” described in current city or state law. Even though there is a discrepancy, SPD tells its officers, “Just don’t ask.”

It’s unclear enough that Councilmember Eddie Lin abstained. 

“I don’t want to hold up the important bill and good work that you brought forward, Councilmember Rivera,” he said. “But it just seems like there’s still a bit of confusion, at least in my mind.”

Rivera acknowledged the shortfalls. She said KWW likely overrides the SMC code, but said they’d need to do further legal analysis before amending that section. She was adamant—passionate, even—that the bill should still be passed. 

“One doesn’t preclude the other, so we can move this bill forward,” Rivera said. “[We can] take this what I deem to be an important step, all while then having the conversations about what else.”

The bill passed, with Rivera, Committee Chair Bob Kettle and Vice Chair Rob Saka voting yes. Councilmember Debora Juarez was absent. It’ll go before the full City Council at the February 17 meeting.

Editor’s Note: A previous version of this article stated that SPD policies undermine Rivera’s bill. The language of SPD policy, the Seattle Municipal Code, and Washington State Law conflict, but SPD policy will be expected to conform to changes in the municipal code. 

00:21

Nirvanna the Band the Show the Movie the Mercury Review [The Stranger]

Nirvanna the Band the Show the Movie opens in wide release on Friday, February 13. by Dom Sinacola

This story was originally published by our sister paper, Portland Mercury.

For nearly 20 years, Torontonian best friends Matt Johnson and Jay McCarrol have chronicled the everyday existences of Torontonian best friends Matt (Johnson) and Jay (McCarrol) as they attempt to book a show for their band, Nirvanna the Band, at local venue the Rivoli.

Granted, they've never acknowledged that their band name might be a huge distraction for potential audiences, nor have they ever really contacted Rivoli management to ask about the venue’s scheduling process. In two decades, they’ve never even played a public show. Still, their mission abides; sometimes it means skydiving from the Canadian National (CN) Tower for some good old-fashioned viral marketing.

Nirvanna the Band the Show is that 20-year chronicle—a seemingly never-ending autobiographical narrative, like Karl Ove Knausgård’s six-volume My Struggle—that details their daily, repetitive, and sometimes dangerous schemes to score a show at the Rivoli.

What began as a baby-faced web series in 2007 and eventually graduated into a Viceland sitcom in 2017, is now Nirvanna the Band the Show the Movie. It's tantamount to their lives’ work. Distributed by Neon, recent Oscar-darlings who brought us The Secret Agent and Sentimental Value, the release of this film is second only to getting a gig at the Rivoli.

The movie is exceptionally funny, especially with an audience. Dopey gags, painful stunts, and mean-mugging abound as our protagonists accidentally transform their RV into a time machine, using Back to the Future as a blueprint to hatch a plan to, of course, get a show at the Rivoli.

Finding themselves in 2008, they’re confronted by achingly specific allusions from the first Obama administration. (Remember the original lyrics to Black Eyed Peas’ “Let’s Get It Started”?) So Matt and Jay must follow Doc Brown rules to get back to their future without changing their past.

Convinced by pop figureheads like Robert Zemeckis and shows like Entourage that the elemental tides of storytelling, fueled by farce and nostalgia, will allow them to accomplish all they put their minds to—which in this case is headlining a show at the Rivoli—Matt and Jay of Nirvanna the Band are slightly fictionalized versions of the real-life Matt and Jay. They’re two normal-ish elder millennials who have siphoned themselves through movie and TV tropes into timeless, innocent weirdos.

Thus, at the heart of Nirvanna the Band, meticulous parody and avoidance of copyright infringement rubs up against the bleak reality of urban life, creating a giddy friction between the bracing stupidity to which Matt and Jay devote themselves and the drudgery experienced by everyone else.

In fact, much of the anxious hilarity of the Nirvanna the Band the Show came from wondering, often aloud, what exactly was real and what was scripted. With cinematographers Jared Raab and Rich Williamson following Matt and Jay everywhere, Nirvanna the Band the Show the Movie also wavers, like its episodic predecessor, between faux documentary and hidden camera prank extravaganza.

But rather than exploiting cringe humor or just messing with unsuspecting normies, Matt and Jay discover a kind of freedom to be themselves while indulging their deeply cinematic impulses.

Once furnished with a studio budget, these impulses lead to some of the most dumbfounding scenes I’ve had the good fortune of witnessing in a theater. Yet, beneath the shock and awe, the Movie is the careful craft of dedicated artists. When Matt and Jay encounter their 2008 selves, the project doesn’t rely on de-aging CGI, but hundreds of hours of work from editors Robert Upchurch and Curt Lobb, who picked through old footage from the show’s initial web run. Behind Jay and Matt’s mania is a team quietly dedicated to unearthing miraculous material.

Similarly, outside of the thinly veiled facsimile of his life in Nirvanna the Band, Johnson has been a prolific filmmaker. After cutting his teeth on Nirvanna the Band the Show, he followed up his feature debut The Dirties (2011) with Operation Avalanche (2016), a comedy thriller about faking the Moon landing in 1969, which involved Johnson’s crew bluffing their way into NASA offices to surreptitiously film whole scenes on a shoestring budget.

In 2023, Johnson made Blackberry, a partly fabricated “true story” of the founding of the titular company, featuring a squealing, baldpated Glen Howerton. The next year, Johnson starred in Kazik Radwanski’s Matt and Mara, in which he played an over-talkative guy named Matt, likely riffing on himself as much as he is in Nirvanna the Band the Show the Movie. Instead of inhabiting a character, he piles on layers of pop cultural patinas.

Whether it’s the aforementioned skydiving incident or sneaking onto a crime scene outside of Drake’s mansion, the hint of reality in the movie’s every moment is more than enough to sustain the spectacle. Even now, I can feel my stomach churn knowing that when Matt is standing on top of the CN Tower, trilby staying on his head by sheer will, there is more of a chance than not that Johnson actually did that.

Laughing, sometimes, is just what happens when your brain doesn’t know what else to do with the information being presented. Nirvanna the Band the Show the Movie is a tribute to the unbelievable shit you can pull off with your best friend and a few professional-looking cameras.

Do Matt and Jay make it back to the present? They have to, because Nirvanna the Band must go on, and more importantly, must play at the Rivoli. Someday. They have no other choice. For the real-life Johnson and McCarrol, this is Nirvanna the Band the Show the Existence, the stuff of crazed movie magic.

Nirvanna the Band the Show the Movie opens in wide release on Friday, February 13.

The Legislature Is Ready to Tax The Rich [The Stranger]

The millionaire's tax seems good, but is it great? by Nathalie Graham

Who will weep for the millionaires? 

A 9.9 percent tax on annual earnings upward of $1 million could become reality in Washington state. A Senate bill is up for a full vote as soon as next week, and its companion in the House is still in committee. If either bill reaches Gov. Bob Ferguson’s desk with enough tax relief for small businesses and low-income households, he’s likely to sign it. With his pen stroke, we’ll join the ranks of futuristic societies such as New Jersey and Minnesota that have achieved the impossible: taxing income, perhaps fairly.

This is a good thing. The state needs new revenue. Over the next two years, we’ll have a $2 billion budget deficit. Across the next four years, we’re seeing double that. If the Leg hadn’t passed the biggest tax increase in state history and cut spending (even in areas they really shouldn’t have, like behavioral health, higher education, and healthcare) last session, we’d be dealing with a $16 billion deficit. When people complain that our ass tax code is the second most regressive in the nation behind Florida (a state that cannot decide if disease is bad), this is why that matters. We don’t have enough money for the basics and are still in a hole.

The millionaire’s tax will help dig us out. Democrats project it to siphon $3.5 billion from Scrooge McDuck-esque pools of money each year. The state will use that cashflow to expand the eligibility criteria for a low-income tax credit (basically, a sales tax rebate), fund public defenders (we’ve got a shortage), and extra padding for the scrawny general fund. It also cuts taxes on hygiene products, much to the amusement of esteemed doofus Danny Westneat. But is it enough? 

With President Trump picking our state pocket book, maybe not. His Big Beautiful Bill, HR-1, will cut at least $3 billion in federal funds annually starting next year ($3.5 billion - $3 billion = goddamn it). And the millionaire’s tax won’t begin to offset that until 2029, the year we see our first payments. 

The millionaire’s tax also comes with sweet savings for the Business Community—a juicy $600 million we’d otherwise collect. Similar to the Seattle Shield Tax passed last year, the millionaire’s tax would exempt thousands of small businesses from paying state Business & Occupation (B&O) taxes. To appease big business, the bill ends a B&O surcharge a year earlier than planned, unspooling work the Legislature did last session. A lot of people are not happy about this. But, we might not have been able to get a millionaire’s tax without this penance. 

Sen. Jamie Pedersen (D-Seattle), sponsor of the Senate bill, says the millionaires tax is our only option. 

“It’s the proposal in front of us that we actually can have the votes to get out of the legislature,” he says. Plus, it’s broadly supported by 60 percent of voters, according to public opinion pollsters GBAO and DHM Research (which conducted polling for The Stranger last year). Their enthusiasm could make all the difference when the referendum enthusiasts, hedge fund millionaire Brian Heywood and anti-tax goblin Tim Eyman, come begging for signatures.

The people aren’t as jazzed about the business-friendly cuts. Pedersen says they’re “necessary” to dissuade big business from going to war with the bill. Last session, the People for an Affordable Washington PAC, which was made up of businesses not people, accumulated nearly $2.7 million to warp public opinion on new taxes. Behind the scenes, the businesses were “girding for battle” last session and preparing “to take the legislature’s tax increases to the ballot.” As he put it, “some deal" stopped them from doing that. 

For years, Pedersen has sponsored or co-sponsored bills for progressive taxation—solutions that give Washington another revenue source other than sales taxes, business taxes, or property taxes. Pedersen has attempted to get some version of an income tax passed for years. The partial capital gains tax, which passed in 2021 was the closest he’s gotten. Last year, he  sponsored bills for a wealth tax and a payroll tax, and they died tragically from a lack of votes. It’ll be the same fate for other progressive revenue taxes proposed this year, Pedersen says, pointing to Rep. Shaun Scott’s proposed state payroll tax, the Well Washington Fund. Pedersen, who shares a district with Scott, did not support the bill, modeled after Seattle’s JumpStart tax, because “it’s politically not feasible in the legislature” right now. 

Scott, who must have wronged the Pedersens in a past life, says that’s “too bad, because people of our district deserve leaders who believe in collaboration.” He signed onto the House version of Pedersen’s bill, even though he didn’t like the B&O cuts, and he saw other shortcomings.

“Senator Pedersen’s income tax bill would barely skim the reductions we’ll be seeing to K–12 schools, housing, healthcare, and higher education,” says Scott. 

He says the Well Washington Fund would prevent cuts to those essential services while making big companies pay their fare share and begin to fill the budget holes in 2027, two years before the millionaire’s tax kicks in.

“If Senate Majority Leader Pedersen had chosen to engage in the discussion around [the payroll tax bill] he would know that the Employment Security Department (ESD) has confirmed that my payroll tax could start being assessed by 2027, perhaps as soon as late 2026,” Scott wrote in an email. 

“That is not true,” says Pedersen. “He either has not interacted with the agency or he’s not representing that correctly.”

Except it is true. The ESD confirmed Scott’s payroll tax could be up and running by August 2027.

As it stands now, the payroll tax is stalling out, but as Eli Goss from the Budget and Policy center says, bills aren’t truly dead until the session is over. The millionaires tax, meanwhile, is moving to the full Senate next week. The millionaires are unhappy. The Republicans are bristling. Tim Eyman keeps sending emails with AI images of mud-splattered pooches to represent the “Godless dirty dog Democrats.” 

Pedersen isn’t counting it as a win yet. Not until it passes the legislature, survives the inevitable referendum campaign and Supreme Court challenge. “Those are the three big gates to pass through, before we can actually start to make a significant change in the second worst tax system in the country,” he says. 

Thursday, 12 February

23:35

21:14

Ticket Alert: Zayn, Baby Keem, and More Seattle Events Going On Sale This Week [The Stranger]

Plus, the Black Keys and More Event Updates for February 12
by EverOut Staff

Get ready to *add to cart*. R&B-influenced pop star Zayn embarks on his first solo headline arena tour this year, arriving in Seattle this September. Rapper and producer Baby Keem will support his sophomore album, Casino, on tour. Plus, blues rock duo The Black Keys supports their forthcoming album, Peaches!, with two nights at Remlinger Farms. Read on for details on those and other newly announced events, plus some news you can use.

Tickets go on sale at 10 am unless otherwise noted.

ON SALE FRIDAY, FEBRUARY 13

MUSIC

Baby Keem: The Ca$ino Tour
WaMu Theater (Wed May 13)
On sale at noon

Bilmuri - Kinda Hard Tour
Paramount Theatre (Wed Sept 30)

The Black Keys: Peaches 'n Kream
Remlinger Farms (May 29–30)

19:42

The Live and Let Dry at Lady Jaye [The Stranger]

An Herbaceous Mocktail Made from Caffeinated Leaves, Iris Roots, and Almonds
by Meg van Huygen

Although I didn’t observe Dry January myself, I absolutely respect the game, just as I understand that the liver wants what it wants (and doesn’t what it doesn’t). I’m also always nosy about what drinks my friends order, even if they’re teetotal. So at West Seattle’s Lady Jaye last month, when my NA pal was raving about their tasty mango shrub, I did something I normally wouldn’t. I took a peek at the mocktails. Er, fauxtails. Foxtails. Whatever we’re calling them now.

One drink had three things I love and one I’d never even heard of. The Live and Let Dry consists of Three Spirit Livener, Lyre’s Amaretti, lime, ginger, and Casamara Club Alta. I’m an old friend and lover of the Casamara pantheon, so that was enough by itself to make the sale, frankly. But what in the fuck is Three Spirit Livener? Plus ginger AND amaretti? “If you want, I can add gin to it,” bartender Nick consoled me as he put the drink together. “It’s really good both ways.” Tempting, but I had him hold off. Let’s taste it in its purest form first.

If you don’t know the Casamara Club line of botanical sodas, they’re all very leafy and horticultural-flavored, like drinking trees. These alcohol-free takes on amari-based cocktails come in six different flaves, and while there’s one that tastes exactly like the smell of the hand soap in my mom’s bathroom, the Alta soda is fuckin’ elite. Inspired by the Negroni cocktail, it’s made of chinotto—a bitter orange that grows along the Calabrian coast—as well as allspice berries, mandarin, lemon, clove, anise, juniper, and orris root, which is the root of the Dalmatian iris. Warm spice, sharp citrus. It’s like piney Christmas lemonade.

Then there’s a drop of virgin amaretto from UK-based Lyre’s, which styles their booze-free version as “amaretti,” after the cookie. It’s peachy-vanilla, toasty and nutty, kind of marzipan-tastical. Lyre’s is less sweet than the boozy stuff, too (and it’s lovely over ice cream, by the way).

Finally, the dark horse: the Livener by Three Spirit. Its base is the dried leaves of the ilex guayusa, a caffeinated tree that grows in the Amazon rainforest; a strong guayusa tea is served at South American convivencias (social gatherings) as a pick-me-up. To this, Three Spirit adds watermelon, pomegranate, and schisandra berries, which are distantly related to star anise. This elixir also packs some heat, from both ginger and cayenne, and astringent tartness from hibiscus extract. They add extra caffeine to it, too, and a little punch of apple cider vinegar. It’s super complex and bright and reminds me a little bit of those fruit teas from boba shops, but with chili and extra herbs, and without the big sugary slap in the face.

Lady Jaye owner Sara Rosales says she was eager to work with this stuff specifically for its mood-enhancing ingredients. “In theory,” she says, “this cocktail actually makes you feel revived!” Damn, it’s like the opposite of a cocktail—in more ways than one.

The effect is at once delicious and fascinating. In the end, I drank up the whole glass before I remembered to ask Nick to add gin, then came back later to try the ginned-up version. Both ways are fabulous, of course. I’ll try it with bourbon next time.

18:56

How can I distinguish between the numeric keypad 0 and the top-row 0 in the WM_KEY­DOWN message? [The Old New Thing]

A customer wanted to know how to distinguish between the numeric keypad 0 and the top-row 0 in the WM_KEY­DOWN message. And while we’re at it, let’s also distinguish between the numeric keypad 0 and the Ins key.

We start with this table of what you get in the WM_KEY­DOWN message when you press the numeric keypad 0.

Event wParam
Numpad0 with NumLock on VK_NUMPAD0
Numpad0 with NumLock off VK_INSERT

Okay, so when the wParam is VK_NUMPAD0, it seems pretty clear that we have the numeric keypad 0. But when it is VK_INSERT, we aren’t sure whether it’s the numeric keypad 0 with NumLock off, or whether it’s the dedicated Ins key.

For that, we can look at the lParam, specifically, bit 24, which is documented as the “extended key” bit.

Rewind the clock to 1983. The IBM PC XT keyboard is introduced. To the left of the main keyboard is a set of numbered function keys, and to the right is a numeric keypad. But the keys on the numeric keypad do double-duty because arrows and other editing keys are overlaid onto them.

7
Home
8
9
PgUp
4
5
 
6
PrtSc
*
1
End
2
3
PgDn
0
Ins
.
Del

You select whether you want numbers or arrows/editing keys by toggling NumLock.

The IBM PS/2 keyboard expanded the set of keys on the keyboard by inserting a block of keys between the main keyboard and the numeric keypad. This block contains the arrow keys and the editing keys. This keyboard layout closely resembles the keyboard layout used by most keyboards today, so I guess it held up okay.

For compatibility, the bonus keys on the keyboard reported themselves to be the same as the numeric keypad keys they shadowed, but with an extra flag byte to say that they are “extended” keys. They’re “extended” because they weren’t in the original keyboard.

This “extended” terminology has carried forward ever since. So we can distinguish between the dedicated Ins key and a numeric keypad 0 with NumLock off by seeing if we got an extended key. If so, then it came from the editing keys; if not, then it came from the numeric keypad.

Event wParam Extended?
Numpad0 with NumLock on VK_NUMPAD0 0
Numpad0 with NumLock off VK_INSERT 0
Ins key VK_INSERT 1

Next time, we’ll look at distinguishing the numeric keypad 0 from the top-row 0 in the WM_CHAR message. It’s a little messier.

Bonus chatter: That PrtSc key was a major source of frustration because it sat right next to the shift key. If your finger was slightly misaligned and hit both the shift key and the PrtSc key, you accidentally asked for the screen contents to be sent to the printer. Your computer just hung until you turned on your printer so you could get a printout that you didn’t want. (And if you didn’t have a printer, you were just dead.)

The post How can I distinguish between the numeric keypad 0 and the top-row 0 in the <CODE>WM_<WBR>KEY­DOWN</CODE> message? appeared first on The Old New Thing.

18:49

Link [Scripting News]

Claude just said: "And going forward, whatever post the user lands on first, that's what you seed it with." The thing that caught my eye was "the user lands on first." UserLand was the name of my last company, the one that did Frontier, blogging, podcasting, RSS, XML-RPC, OPML, etc. And here we are again in the land of lands. The User Lands. ;-)

18:28

Big Oil cartel [Richard Stallman's Political Notes]

Michigan has sued some big oil companies, accusing them of forming a cartel to stifle renewable energy and cover up the danger of fossil fuels.

How bloody stupid are LLMs [Richard Stallman's Political Notes]

*Recently, the Rowsons accidentally invented a new game that anyone can play at home. I have yet to come up with a world-beating name for it, so for now let's just call it "How bloody stupid is [some so-called] AI?" The playing of the game will change from player to player, depending on their circumstances – but essentially the rules remain the same. Ask [some so-called] AI a simple question about yourself, and see just how wrong it gets it.*

He that knows not, and knows not that he knows not, is a fool -- shun him.

It that knows not, and knows not that it knows not, is an LLM -- switch it off.

RFK Jr mislead Senate [Richard Stallman's Political Notes]

*RFK Jr misled Senate during confirmation, Congress members and Hawaii governor say.*

Observers arrested [Richard Stallman's Political Notes]

The deportation thugs have taken to arresting legal observers, while continuing to threaten them with weapons.

There is no limit to the hatred that twists them.

Robert Reich: Mamdani campaign lessons [Richard Stallman's Political Notes]

New York City's public funding system was crucial for giving Zohran Mamdani the possibility of overcoming rich people's money.

DHS and Google [Richard Stallman's Political Notes]

The Department of Harassment Surveillance sometimes punishes people for posting criticism of US government policies by demanding lots of information about them from Google's databases

Substack's owner doesn't believe in censorship [Richard Stallman's Political Notes]

Substack does not censor right-wing and Nazi views -- its owner dislikes their views but doesn't believe in censoring views he dislikes. I find that honorable and proper.

What makes US Nazis dangerous is not the fact that they can publish their views in the same way anyone else can. Rather, it is the support they get from powerful people such as the persecutor and his henchmen.

ICE arrests continue [Richard Stallman's Political Notes]

Deportation thugs continue making many arrests in the cities they targeted for occupation, but they don't mass in large numbers as before. As a result, they draw less attention and less protest.

I think that they intentionally chose tactics that made them so noticeable, as a strategy of state terrorism.

And I speculate that they have dropped those tactics partly because the public's reaction was effective pressure on them.

Australia shielding Israel's president [Richard Stallman's Political Notes]

*The government's decision to roll out the red carpet for President Herzog while simultaneously establishing "exclusion zones" for the public is a misstep, one likely to deepen the rift between already polarised communities. People must be able to peacefully voice their objections to the horrors of war in Gaza, against the violence of ultra-Orthodox settlers in the West Bank, the massacre of Iranian protesters or the terror unleashed by Hamas. Protest, when done peacefully and without hate, is not only legitimate – it is vital.*

I think Australia should not have invited Herzog, but since it did, it should not silence Australians' condemnation of the violent actions that he stands for.

State terror [Richard Stallman's Political Notes]

The essence of a state built on terror is that no one can rely on being safe, and people who were not persecuted this week can only guess why not.

Who was or who wasn't persecuted is usual a minor detail, which is why it often operates based on quotas.

Laws to allow fossil fuel company lawsuits [Richard Stallman's Political Notes]

California, Hawaii and New York lawmakers propose laws to allow those states to sue fossil fuel companies for the cost of local disasters caused by their fossil fuels.

This has the potential to gradually make fossil fuels so expensive, across a period of many years, that people will gradually stop using them.

Election sabotage warning [Richard Stallman's Political Notes]

Senator Warner warns that the saboteur in chief may really try to sabotage the 2026 election.

When the saboteur in chief claims he will do something, we must not assume he will do it. But when he threatens to do something, we had better plan to stop him.

Urgent: address housing crisis [Richard Stallman's Political Notes]

US citizens: call on Demand Congress Address the Housing Crisis: Pass the Make Housing Affordable Act!

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Foreign aid budget [Richard Stallman's Political Notes]

Congress has restored much of the foreign aid budget that the persecutor unilaterally erased early last year.

Israel killed over 50,000 civilians [Richard Stallman's Political Notes]

*Israeli Military Admits Murder of [50,000 or more] Palestinian Civilians.*

In some places, they killed Palestinians indiscriminately without trying to distinguish fighters from civilians.

Now the persecutor is trying to punish Harvard for not sufficiently repressing student protests which said exactly this.

Washing Post layoffs [Richard Stallman's Political Notes]

Bezos bought the Washington Post for small change, then decided to ruin it totally to gain more valuable rewards from the corrupter.

Many subscribers dropped the Washington Post in response to his first turn toward the right wing. Now his flunkies cite that setback as a reason for another turn toward the right wing.

Foreign correspondent Lizzie Johnson was fired while freezing in Kyiv.

I feel no regret about the dismissal of sports reporters.

Melania ticket sales [Richard Stallman's Political Notes]

It appears that someone is buying up large blocks of tickets to the movie Melania and giving them away to groups. Most of them never actually get used, but they inflate the apparent popularity of the movie.

Nothing means what it pretends to mean when the bullshitter and the billionaires get together.

Urgent: Cryptocurrency oversight [Richard Stallman's Political Notes]

US citizens: call on your senators to block corruptive bills about cryptocurrency.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

18:07

Slog AM: ICE Out of MN, Seattle Hosts Big-Ass Parade, Bondi Snubs Epstein Survivors [The Stranger]

The Stranger's morning news roundup. by Micah Yip

Thank Fuck: After two months of federal officers terrorizing, brutalizing, arresting, and killing people in Minneapolis, the Trump administration will end its “largest immigration enforcement operation ever,” border czar Tom Homan announced today. Homan touted the whole operation as a win that leaves Minnesota safer, “less of a sanctuary state for criminals.” A win? After two months of arresting more than 4,000 people, killing Alex Pretti and Renee Good, causing mass protests? The surge leaves Minnesota shaken, not safer. And though that operation is ending, immigration enforcement will continue, Homan pledged.

A Big-Ass Parade: I don’t give a fuck about football. But I have to say, the Seahawks’ massive party downtown yesterday sounded pretty sick. The team was paraded down Fourth Avenue in big military transport trucks, starting near Lumen Field and ending near the Space Needle, as an estimated 750,000 to 1 million cheered them on. People of all ages came from all over the state, with some claiming spots on the street the night before.

We Posted Some Rad Photos on Our Instagram Yesterday: Check ‘em out.

          View this post on Instagram                      

A post shared by The Stranger 🗞 (@thestrangerseattle)

DwTF (Down With the Fence): Remember when the city fenced off Seven Hills Park in September due to homeless encampments? That park will finally reopen on February 26, park department officials said at a community meeting Tuesday night. There are plans for a new sign, “human and hound fitness installations” (which sound suspiciously furry-coded), and a little facelift, fixing infrastructure and trimming trees. Why they couldn’t do that while keeping the space open is a mystery. It’s not like the fence kept people out, meeting attendees said.

Gallup Gallops Away: From tracking presidential approval ratings, that is. Gallup announced yesterday that after 88 years, it will no longer measure presidential approval. The switch comes as President Donald Trump continues throwing temper tantrums over any media outlet/poll/person/anything that’s less than fawning, reality be damned (Trump’s Gallup approval rating fell to 36 percent in December). Still, Gallup insisted its decision was “solely based on Gallup’s research goals and priorities.” It sucks though — the Gallup Presidential Approval Rating is one of the most cited measurements of public opinion on presidents since Harry Truman was in office, The Guardian reported.

Gallup Has Scaled Back for Trump Before: In 2017, Gallup went from daily to weekly presidential approval tracking. A year later, they went down to monthly

If you saw today's headline that Gallup will stop measuring presidential approval, they did the same thing in 2018. They do it whenever Trump is president.

[image or embed]

— Brandon Friedman (@brandonfriedman.bsky.social) February 11, 2026 at 11:27 AM

 

Two Actors Died: James Van Der Beek, known for his roles in Dawson’s Creek and Varsity Blues, died yesterday morning after battling stage 3 colorectal cancer. He was 48. Bud Cort, known for starring in Harold and Maude, also died yesterday after a long illness. He was 77.

Weather: Mostly cloudy with a high of 53. The sun will slowly break through as the day progresses. Tonight, temps will drop to a low of 43. There’s a 30 percent chance of rain.

Pam Bondi’s Testimony: Attorney General Pam Bondi hurled insults and dodged questions at yesterday’s House Judiciary hearing on her mishandling of the Epstein files. The stand out moment was when Washington Rep. Pramila Jayapal asked Epstein’s victims in the audience to stand and raise their hands if they had not been able to get an appointment with the DOJ. All of them did.

This photo of Attorney General Pam Bondi looking down after the Epstein survivors in the room were asked to raise their hands if the current Justice Department has failed to speak with them is some fine photojournalism.

AP Photo by Tom Brenner.

Story: www.mississippifreepress.org/bondi-clashe...

[image or embed]

— Ashton Pittman (@ashtonpittman.bsky.social) February 12, 2026 at 8:11 AM

What I Learned About Bondi from The Atlantic’s New Article: (1) Earlier in life, she was allegedly once so kindhearted she earned the nickname “Pambi,” like “Bambi.” (2) Foreshadowing  her transformation from Pambi to MAGA ghoul, she once refused to return a dog she adopted to its rightful family, even after the four-year-old grandson begged her to. She instead hired a lawyer and accused the family of abusing the dog. (3) She has called reporters crying and begging them not to publish stories about her. There’s a lot more you should read.

This is some genuinely psycho shit...

[image or embed]

— brian pillion (@anaphoristand.bsky.social) February 11, 2026 at 12:02 PM

Amtrak Death: An Amtrak train on route from Portland to Seattle struck and killed a person  south of Tukwila at about 9 p.m. Wednesday evening. Nobody on the train was injured. 

Jaahnavi Kandula: The city will pay a $29 million settlement to the family of Jaahnavi Kandula, the 23-year-old graduate student from India struck and killed by a speeding Seattle officer Kevin Dave at a South Lake Union crosswalk in 2023. Dave was going 50 miles over the speed limit. He was cited for negligent driving, paid a $5,000 fine, and subsequently fired from the department, but was never criminally charged. The Seattle Times has the story.

False Alarm: Or should I say “False Package”? Yesterday, the 1 Line’s Lynnwood City Center Station closed around 5 p.m. while authorities responded to a report of a “suspicious package.” Riders were asked to leave the station and the King County Sheriff’s Office dispatched its K-9 bomb detection unit to the scene. But they didn’t find anything, and the station reopened about an hour later. 

To the woman I saw belting “Pink Pony Club” on a Lime scooter late Sunday night in Capitol Hill, this one’s for you:

18:00

Link [Scripting News]

I understood the web because I understood Unix and missed it.

17:07

[$] Poisoning scraperbots with iocaine [LWN.net]

Web sites are being increasingly beset by AI scraperbots — a problem that we have written about before, and which has slowly ramped up to an occasional de-facto DDoS attack. This has not gone uncontested, however: web site operators from around the world have been working on inventive countermeasures. These solutions target the problem posed by scraperbots in different ways; iocaine, a MIT-licensed nonsense generator, is designed to make scraped text less useful by poisoning it with fake data. The hope is to make running scraperbots not economically viable, and thereby address the problem at its root instead of playing an eternal game of Whac-A-Mole.

16:21

[$] The reverting of revocable [LWN.net]

Transient devices pose a special challenge for an operating-system kernel. They can disappear at any time, leaving behind kernel data structures that no longer refer to an existing device, but which may still be in use by unknown kernel code. Managing the resulting lifecycle issues has frustrated kernel developers for years. In September 2025, the revocable resource-management patch series from Tzung-Bi Shih appeared to offer a partial solution to this problem. Since then, though, other problems have arisen, and the planned merging of this series into the 7.0 release has been called off.

15:00

Link [Scripting News]

If you're a FeedLand user and have the technical ability to install a Docker app, even on a local computer not on the net, you could help the project by trying the new Docker version. Think of FeedLand as something like Mastodon or WordPress, server apps that we hope many people will install on their own. I am doing that now, with the blogroll on Scripting News and various news sites running in front of my own FeedLand instance. And the various instances can communicate with each other. Scott worked really hard to make setting up a new instance much easier than it was. It's an open source project, so you can feel good by helping. You're helping the web, and helping bootstrap a new feediverse. And if you have a few hours to give it a try, maybe much less, you would be doing a good thing.

Dirk Eddelbuettel: RcppSpdlog 0.0.27 on CRAN: C++20 Accommodations [Planet Debian]

Version 0.0.27 of RcppSpdlog arrived on CRAN moments ago, and will be uploaded to Debian and built for r2u shortly. The (nice) documentation site will be 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.

Brian Ripley has now turned C++20 on as a default for R-devel (aka R 4.6.0 ‘to be’), and this turned up misbehvior in packages using RcppSpdlog such as our spdl wrapper (offering a nicer interface from both R and C++) when relying on std::format. So for now, we turned this off and remain with fmt::format from the fmt library while we investigate further.

The NEWS entry for this release follows.

Changes in RcppSpdlog version 0.0.27 (2026-02-11)

  • Under C++20 or later, keep relying on fmt::format until issues experienced using std::format can be identified and resolved

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.

14:49

Debian DFSG Team announces new dashboard and queue processes [LWN.net]

Reinhard Tartler of Debian's new DFSG, Licensing & New Packages Team, or simply "DFSG Team", has announced that the team is now operational and is deploying new tooling to improve the NEW queue experience for Debian developers and maintainers.

Our primary and immediate goal is simple: get the queue down.

We are currently settling in and refining our processes to ensure stability and consistency. While our focus right now is on clearing the backlog, our long-term vision is to enable all Debian Developers to meaningfully contribute to DFSG reviewing activities, distributing the workload and knowledge more effectively across the project.

The announcement includes information on the new dashboard for packages in the NEW queue, the rationale for the new tooling, and an introduction to the members of the team.

A single stable kernel for Thursday [LWN.net]

Greg Kroah-Hartman has released the 6.12.71 stable kernel. He writes, "All users of the 6.12 kernel series that had issues with 6.12.69 or 6.12.70 should upgrade, as some regressions are fixed here."

Security updates for Thursday [LWN.net]

Security updates have been issued by AlmaLinux (brotli, git-lfs, image-builder, kernel, keylime, libsoup3, and pcs), Fedora (chromium, gnutls, osslsigncode, and p11-kit), Mageia (golang, libpng, thunderbird, and xrdp), Red Hat (git-lfs, go-toolset:rhel8, golang, golang-github-openprinting-ipp-usb, osbuild-composer, and toolbox), Slackware (gnutls and libpng), SUSE (apptainer, cockpit, cockpit-packages, cockpit-subscriptions, freerdp2, gimp, glib2, go, go1.24, go1.25, gpg2, ImageMagick, java-1_8_0-openjdk, kernel, keylime-config, keylime-ima-policy, lemon, libp11-kit0, libsoup, libsoup-2_4-1, libxml2, libxml2-16, munge, nodejs20, nvidia-modprobe.cuda, nvidia-open-driver-G06-signed, nvidia-persistenced.cuda, openQA, orthanc, gdcm, orthanc-authorization,, python-brotlipy, python-Django, python-maturin, python-pyasn1, python-urllib3, python-wheel, python313-wheel, qemu, rust-keylime, sqlite3, uriparser, wicked2nm, and xrdp), and Ubuntu (libtasn1-6, libwebsockets, libxmltok, linux, linux-aws, linux-gcp, linux-gke, linux-gkeop, linux-hwe-5.15, linux-ibm, linux-ibm-5.15, linux-lowlatency, linux-lowlatency-hwe-5.15, linux, linux-raspi, linux, linux-raspi, linux-realtime, linux-aws, linux-aws-6.8, linux-gcp, linux-gcp-6.8, linux-ibm, linux-ibm-6.8, linux-lowlatency-hwe-6.8, linux-aws-5.15, linux-gcp-5.15, linux-nvidia-tegra-igx, linux-oracle-5.15, linux-xilinx-zynqmp, linux-aws-fips, linux-fips, linux-gcp-fips, linux-gcp, linux-gcp-6.8, linux-gcp-fips, linux-intel-iot-realtime, linux-realtime, linux-nvidia-tegra, linux-nvidia-tegra-5.15, linux-realtime-6.8, linux-xilinx-zynqmp, and python-multipart).

14:14

Link [Scripting News]

When I was a kid I had a penpal in Scotland. It was kind of interesting but after a while it became tiresome. One time I got a letter from my penpal with the usual stuff, school, sports, the Beatles, other kids, but this time there was no mention about how stupid the adults were. I found out why at the end in a PS. "Sometimes my mom writes these for me." Obviously I never forgot this.

Link [Scripting News]

Here's proof that ChatGPT, intelligent or not, listens to me.

Link [Scripting News]

I no longer even think of debating whether the AIs are intelligent. I might as well argue about your intelligence, or even my own. We have no idea what intelligence is or how to test for it. So if you think you're so intelligent and you say things like "AIs aren't intelligent" as if it were an indisputable fact, well I'm pretty sure that proves you are not actually very intelligent, which indicates how intelligent I am (not). And if you're worried about what happens if you stop insisting that AIs aren't intelligent, you can relax, nothing depends on what you or I or anyone else thinks about that, or pretty much anything. Have a nice day.

12:49

CodeSOD: Consistently Transactional [The Daily WTF]

It's always good to think through how any given database operation behaves inside of a transaction. For example, Faroguy inherited a Ruby codebase which was mostly db.execute("SOME SQL") without any transactions at all. This caused all sorts of problems with half-finished operations polluting the database.

Imagine Faroguy's excitement upon discovering a function called db_trans getting called in a few places. Well, one place, but that's better than none at all. This clearly must mean that at least one operation was running inside of a transaction, right?

  def self.db_trans(db,stmt)
    db.execute(stmt)
  end # self.db_trans

Oh.

[Advertisement] Picking up NuGet is easy. Getting good at it takes time. Download our guide to learn the best practice of NuGet for the Enterprise.

12:35

3D Printer Surveillance [Schneier on Security]

New York is contemplating a bill that adds surveillance to 3D printers:

New York’s 2026­2027 executive budget bill (S.9005 / A.10005) includes language that should alarm every maker, educator, and small manufacturer in the state. Buried in Part C is a provision requiring all 3D printers sold or delivered in New York to include “blocking technology.” This is defined as software or firmware that scans every print file through a “firearms blueprint detection algorithm” and refuses to print anything it flags as a potential firearm or firearm component.

I get the policy goals here, but the solution just won’t work. It’s the same problem as DRM: trying to prevent general-purpose computers from doing specific things. Cory Doctorow wrote about it in 2018 and—more generally—spoke about it in 2011.

11:14

Grrl Power #1434 – The crushing bioweapon [Grrl Power]

I really tried to make this page and the next a double, but I ran out of time. It was, admittedly, a little bit my fault.

So, Tamer 11 came out, at least it did if you supported the Kickstarter. If you didn’t, you can buy it off MSE’s site in a few months I think. Now, I didn’t read it during the day while I should have been working, but I did maybe accidentally stay up till 4 am reading it one night, and let me tell you, one of the best ways to supercharge ADHD is to throw a little sleep deprivation in. I was not super productive the next day. Fortunately I finished the book the next night, and before 3 am too, so… all good, right?

Okay, hear me out. The day after Tamer 11 came out, the next book in The Vixen War Bride series dropped. I didn’t even know the series was continuing after the first story wrapped. VWB is one of my favorite xenoanthropology sci-fi books, by which I mean it changes PoV between human and “alien” characters and both sides have their little thoughts about how odd the other is. By the start of this book, the story is past the “nobody speaks the others’ language and hilarious misunderstandings ensue,” trope, and kind of oddly, this story is more of a murder mystery.

So naturally I also had to read that as soon as I finished Tamer. I didn’t stay up till 4 am again. It might not have been physically possible for me at that point, but still I finished that book in 3 days.

Then there was  Good Intentions Book 5, A.K.A. Devil In the Details, then The Doctor from Nowhere, Book 2, which is a Russian translated Isekai about a modern Russian surgeon getting blowed up in… uh, Afghanistan, or somewhere, doesn’t matter, and waking up in the body of a recently deceased (or so they thought) Russian soldier in, a slightly alternate history 1914 or thereabouts? It’s pretty well written and translated. The MC does kind of win at everything super hard, and there’s a little bit of Russian jingoism in there, which I suppose I can’t fault the author for. There’s just a few “Russia’s not quite the shitshow everyone seems to think” rants. It’s not pervasive. Then after that was Taroniah & Kyron Unite (Ithria Book 15). Ithria is a bit of an odd series, because the books alternate between Taroniah the sorceress and Kyron the swordsman, and I’ve skipped all the Kyron books cause… I don’t know, the stuff about the sorceress sounded more interesting.

So I had a bit of a reading dry spell for a few months it seemed, then 5 series I’ve been reading hit all at once. Especially Tamer and VWB. You guys know I enjoy Tamer. And I’m bad at pacing myself. So, sorry the page isn’t a little more… you know, “Grrl Power-y 9 panels when there should have only been 5.” (TM) Just trying to work the average back in the other direction? Yeah, I didn’t buy that either.


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

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

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


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

10:21

Tip for tap [Seth's Blog]

There is plenty of unintentional harm in our world. We’ve all been bruised or derailed by someone who had no ill intent.

We often respond with intentional harm, to make a point and to teach a lesson.

The alternative is clarity. Shared understanding instead of intentional pain.

Tap is going to keep coming. It’s the tip that’s up to us.

08:49

Freexian Collaborators: Debian Contributions: cross building, rebootstrap updates, Refresh of the patch tagging guidelines and more! (by Anupa Ann Joseph) [Planet Debian]

Debian Contributions: 2026-01

Contributing to Debian is part of Freexian’s mission. This article covers the latest achievements of Freexian and their collaborators. All of this is made possible by organizations subscribing to our Long Term Support contracts and consulting services.

cross building, by Helmut Grohne

In version 1.10.1, Meson merged a patch to make it call the correct g-ir-scanner by default thanks to Eli Schwarz. This problem affected more than 130 source packages. Helmut retried building them all and filed 69 patches as a result. A significant portion of those packages require another Meson change to call the correct vapigen. Another notable change is converting gnu-efi to multiarch, which ended up requiring changes to a number of other packages. Since Aurelien dropped the libcrypt-dev dependency from libc6-dev, this transition now is mostly complete and has resulted in most of the Perl ecosystem correctly expressing perl-xs-dev dependencies needed for cross building. It is these infrastructure changes affecting several client packages that this work targets. As a result of this continued work, about 66% of Debian’s source packages now have satisfiable cross Build-Depends in unstable and about 10000 (55%) actually can be cross built. There are now more than 500 open bug reports affecting more than 2000 packages most of which carry patches.

rebootstrap, by Helmut Grohne

Maintaining architecture cross-bootstrap requires continued effort for adapting to archive changes such as glib2.0 dropping a build profile or an e2fsprogs FTBFS. Beyond those generic problems, architecture-specific problems with e.g. musl-linux-any or sparc may arise. While all these changes move things forward on the surface, the bootstrap tooling has become a growing pile of patches. Helmut managed to upstream two changes to glibc for reducing its Build-Depends in the stage2 build profile and thanks Aurelien Jarno.

Refresh of the patch tagging guidelines, by Raphaël Hertzog

Debian Enhancement Proposal #3 (DEP-3) is named “Patch Tagging Guidelines” and standardizes meta-information that Debian contributors can put in patches included in Debian source packages. With the feedback received over the years, and with the change in the package management landscape, the need to refresh those guidelines became evident. As the initial driver of that DEP, I spent a good day reviewing all the feedback (that I kept in a folder) and producing a new version of the document. The changes aim to give more weight to the syntax that is compatible with git format-patch’s output, and also to clarify the expected uses and meanings of a couple of fields, including some algorithm that parsers should follow to define the state of the patch. After the announcement of the new draft on debian-devel, the revised DEP-3 received a significant number of comments that I still have to process.

Miscellaneous contributions

  • Helmut uploaded debvm making it work with unstable as a target distribution again.
  • Helmut modernized the code base backing dedup.debian.net significantly expanding the support for type checking.
  • Helmut fixed the multiarch hinter once more given feedback from Fabian Grünbichler.
  • Helmut worked on migrating the rocblas package to forky.
  • Raphaël fixed RC bug #1111812 in publican and did some maintenance for tracker.debian.org.
  • Carles added support in the festival Debian package for systemd socket activation and systemd service and socket units. Adapted the patch for upstream and created a merge request (also fixed a MacOS X building system error while working on it). Updated Orca Wiki documentation regarding festival. Discussed a 2007 bug/feature in festival which allowed having a local shell and that the new systemd socket activation has the same code path.
  • Carles using po-debconf-manager worked on Catalan translations: 7 reviewed and sent; 5 follow ups, 5 deleted packages.
  • Carls made some po-debconf-manager changes: now it attaches the translation file on follow ups, fixed bullseye compatibility issues.
  • Carles reviewed a new Catalan apt translation.
  • Carles investigated and reported a lxhotkey bug and sent a patch for the “abcde” package.
  • Carles made minor updates for Debian Wiki for different pages (lxde for dead keys, Ripping with abcde troubleshooting, VirtualBox troubleshooting).
  • Stefano renamed build-details.json in Python 3.14 to fix multiarch coinstallability.
  • Stefano audited the tooling and ignore lists for checking the contents of the python3.X-minimal packages, finding and fixing some issues in the process.
  • Stefano made a few uploads of python3-defaults and dh-python in support of Python 3.14-as-default in Ubuntu. Also investigated the risk of ignoring byte-compilation failures by default, and started down the road of implementing this.
  • Stefano did some sysadmin work on debian.social infrastructure.
  • Stefano and Santiago worked on preparations for DebConf 26. Especially to help the local team on opening the registration, and reviewing the budget to be presented for approval.
  • Stefano uploaded routine updates of python-virtualenv and python-flexmock.
  • Antonio collaborated with DSA on enabling a new proxy for salsa to prevent scrapers from taking the service down.
  • Antonio did miscellaneous salsa administrative tasks.
  • Antonio fixed a few Ruby packages towards the Ruby 3.4 transition.
  • Antonio started work on planned improvements to the DebConf registration system.
  • Santiago prepared unstable updates for the latest upstream versions of knot-dns and knot-resolver. The authoritative DNS server and DNS resolver software developed by CZ.NIC. It is worth highlighting that, given the separation of functionality compared to other implementations, knot-dns and knot-resolver are also less complex software, which results in advantages in terms of security: only three CVEs have been reported for knot-dns since 2011).
  • Santiago made some routine reviews of merge requests proposed for the Salsa CI’s pipeline. E.g. a proposal to fix how sbuild chooses the chroot when building a package for experimental.
  • Colin fixed lots of Python packages to handle Python 3.14 and to avoid using the deprecated pkg_resources module.
  • Colin added forky support to the images used in Salsa CI pipelines.
  • Colin began working on getting a release candidate of groff 1.24.0 (the first upstream release since mid-2023, so a very large set of changes) into experimental.
  • Lucas kept working on the preparation for Ruby 3.4 transition. Some packages fixed (support build against Ruby 3.3 and 3.4): ruby-rbpdf, jekyll, origami-pdf, ruby-kdl, ruby-twitter, ruby-twitter-text, ruby-globalid.
  • Lucas supported some potential mentors in the Google Summer of Code 26 program to submit their projects.
  • Anupa worked on the point release announcements for Debian 12.13 and 13.3 from the Debian publicity team side.
  • Anupa attended the publicity team meeting to discuss the team activities and to plan an online sprint in February.
  • Anupa attended meetings with the Debian India team to plan and coordinate the MinDebConf Kanpur and sent out related Micronews.
  • Emilio coordinated various transitions and helped get rid of llvm-toolchain-17 from sid.

Pluralistic: Doctors' union may yet save the NHS from Palantir (12 Feb 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A haunted, ruined hospital building. A sign hangs askew over the entrance with the NHS logo over the Palantir logo. Beneath it, a cutaway silhouette reveals a blood-spattered, scalpel-wielding surgeon with a Palantir logo over his breast, about to slice into a frightened patient with an NHS logo over his breast. Looming over the scene are the eyes of Peter Thiel, bloodshot and sinister.

Doctors' union may yet save the NHS from Palantir (permalink)

If you weren't paying close attention, you might think that the most grotesque and indefensible aspect of Keir Starmer's Labour government turning over NHS patient records to the American military contractor Palantir is that Palantir are Trumpist war-criminals, "founded to kill communists":

https://www.thecanary.co/trending/2026/01/07/palantir-kill-communists/

And that is indeed grotesque and indefensible, and should have been grounds for Starmer being forced to resign as PM long before it became apparent that he stuffed his government with Epstein's enablers and chums:

https://www.thenational.scot/news/25451640.streeting-defends-peter-mandelsons-relationship-jeffrey-epstein/

But it's actually much worse than that! It's not just that Labour hand over Britain's crown jewels to rapacious international criminals who are deeply embedded in a regime that has directly threatened the sovereignty of the UK. They also passed up a proven, advanced, open, safe, British alternative: the OpenSAFELY initiative, developed by Ben Goldacre and his team at Jesus College Oxford:

https://www.opensafely.org/

OpenSAFELY is the latest iteration of Goldacre's Trusted Research Environment (TRE), arguably the most successful patient record research tool ever conceived. It's built atop a special server that can send queries to each NHS trust, without ever directly accessing any patient data. Researchers formulate a research question – say, an inquiry into the demographics of the comorbidities of a given disease – and publish it using a modified MySQL syntax on a public git server. Other researchers peer-review the query, assessing it for rigour, and then the TRE farms that query out to each NHS trust, then aggregates all the responses and publishes it, either immediately or after a set period.

This is a fully privacy-preserving, extremely low-cost, rapid way for researchers to run queries against the full load of NHS patient records, and holy shit does it ever work. By coincidence, it went online just prior to the pandemic, and it enabled an absolute string of blockbuster papers on covid, dozens of them, including several in leading journals like Nature:

https://www.digitalhealth.net/2022/04/goldacre-trusted-research-environments/

This led HMG to commission Goldacre to produce a report on the use of TREs as the permanent, principal way for medical researchers to mine NHS data (disclosure: I was interviewed for this report):

https://www.gov.uk/government/publications/better-broader-safer-using-health-data-for-research-and-analysis

This is a near-miraculous system: an ultra-effective, ultra-cost-effective, Made-in-Britain, open, transparent, privacy-preserving, rigorous way to produce medical research insights at scale, which could be perfected in the UK and then exported to the world, getting better every time a new partner signs on and helps shoulder the work of maintaining and improving the free/open source software that powers it.

OpenSAFELY was the obvious contender for NHS research. But it wasn't the only one: in the other corner was Palantir, a shady American company best known for helping cops and spies victimise people on the basis of dodgy statistics. Palantir blitzed Westminster with expensive PR and lobbying, and embarked on a strategy to "hoover up" every small NHS contractor until Palantir was the last company standing. Palantir UK boss Louis Moseley called it "Buying our way in":

https://pluralistic.net/2022/10/01/the-palantir-will-see-you-now/#public-private-partnership

It worked. First, Palantir got £60m worth of no-bid contracts during the acute phase of the pandemic, and then it bootstrapped that into a £330m contract to handle all the NHS England data:

https://www.theregister.com/2023/11/22/palantir_wins_nhs_contract/

It was a huge win for corruption over excellence and corporate surveillance over privacy. At the same time, it was a terrible blow to UK technological sovereignty, and long-term trust in the NHS.

But that's not where it ended. Palantir continued its wildly profitable, highly public programme of collaborating with fascists – especially Trump's ICE kill/snatch-squads – further trashing its reputation around the world. It's now got so bad that the British Medical Association (BMA) – a union representing more than 200,000 UK doctors – has told its members that they should not use the Palantir products that the NHS has forced onto their practices:

https://www.bmj.com/content/392/bmj.s168/rr-2

In response, an anonymous Palantir spokesperson told The Register that Britons should trust its software because the company is also working with British police forces:

https://www.theregister.com/2026/02/11/bma_palantir_nhs/

The BMA is a very powerful, militant union, and it has already run successful campaigns against Starmer's government that forced Labour to shore up its support for the NHS. The fact that there's a better, cheaper, more effective, technologically sovereign tool that HMG has already recognised only bolsters the union's case for jettisoning Palantir's products altogether.

(Image: Gage Skidmore, CC BY 2.0, modified)


Hey look at this (permalink)



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

Object permanence (permalink)

#20yrsago Google Video DRM: Why is Hollywood more important than users? https://memex.craphound.com/2006/02/13/google-video-drm-why-is-hollywood-more-important-than-users/

#20yrsago Phishers trick Internet “trust” companies https://web.archive.org/web/20060222232249/http://blog.washingtonpost.com/securityfix/2006/02/the_new_face_of_phishing_1.html

#15yrsago With a Little Help: first post-publication progress report https://www.publishersweekly.com/pw/by-topic/columns-and-blogs/cory-doctorow/article/46105-with-a-little-help-the-early-returns.html

#15yrsago Nokia’s radical CEO has a mercenary, checkered past https://web.archive.org/web/20100608100324/http://www.siliconbeat.com/2008/01/11/microsoft-beware-stephen-elop-is-a-flight-risk/

#15yrsago Scientology’s science fictional origins: thesis from 1981 https://web.archive.org/web/20110218045653/http://digitalcommons.mcmaster.ca/opendissertations/126/

#10yrsago I was a Jeopardy! clue https://memex.craphound.com/2016/02/13/i-was-a-jeopardy-clue/

#10yrsago Liberated Yazidi sex slaves become a vengeful, elite anti-ISIS fighting force https://www.independent.co.uk/news/world/middle-east/isis-yazidi-sex-slaves-take-up-arms-for-mosul-fight-to-bring-our-women-home-a6865056.html

#10yrsago Listen: a new podcast about science fiction and spectacular meals https://www.scottedelman.com/2016/02/10/the-first-episode-of-eating-the-fantastic-with-guest-sarah-pinsker-is-now-live/

#10yrsago Politician given green-light to name developer’s new streets with synonyms for greed and deceit https://web.archive.org/web/20160213001324/http://www.capitalnewyork.com/article/city-hall/2016/02/8590908/staten-island-borough-president-gets-approval-name-new-streets-gre

#5yrsago $50T moved from America's 90% to the 1% https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#inequality

#5yrsago Broad Band https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#broad-band

#5yrsago Privacy Without Monopoly https://pluralistic.net/2021/02/13/data-protection-without-monopoly/#comcom

#1yrago Premature Internet Activists https://pluralistic.net/2025/02/13/digital-rights/#are-human-rights


Upcoming appearances (permalink)

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



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

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

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

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

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

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



Colophon (permalink)

Today's top sources:

Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America (1006 words today, 27741 total)

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

  • A Little Brother short story about DIY insulin PLANNING


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

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

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


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

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

06:14

Easier to fire US government employees [Richard Stallman's Political Notes]

The corruptor has changed the rules to make it easier to fire some US government employees and to weaken protection for whistleblowers who report corruption.

He wouldn't want them to dare reporting corruption, in case it is his corruption.

Facebook ads for deportation thugs [Richard Stallman's Political Notes]

Facebook is running ads for the deportation thugs, ads that *included imagery and music intended to appeal to white nationalists and neo-Nazis.*

Facial recognition used to accuse person of shoplifting [Richard Stallman's Political Notes]

A British supermarket accused a customer of shoplifting based on a reported face recognition match — in fact, it had accused the wrong person — and then demanded he run nonfree software to clear his name.

That was successful, since the database had no record of his face. But if that error had happened to me, since I would not run that nonfree software, I think would have not been able to clear my name.

Peter Mandelson asked Epstein for help in 2010 [Richard Stallman's Political Notes]

Peter Mandelson, a clear example of the sort of sell-out to business that had come to fill the Labour Party leadership, asked Epstein for help in 2010 in angling for contracting work for both Billionaire Polluters and Glencore. BP is, of course, a fossil fuel company. Glencore mines and trades various commodities, including oil.

The enablers of these companies are contributing to harm—possibly deadly harm—to over a hundred million female teenagers, a like number of male teenagers, as well as around eight billion children and adults. No one on Earth is safe.

Long Island hotter in winter [Richard Stallman's Political Notes]

Long Island has got 5°F hotter in the winter (on the average) since 55 years ago. This leads to various dangers to human health, wildlife, homes, and farms, including the spread of insect pests as well as weather itself.

Wood burned in Drax electric generator [Richard Stallman's Political Notes]

The executives of the Drax electric generator insisted that the wood it burns came only from young, renewable trees, but in private many of them recognized that was false.

Boos for Vance at Olympic Games [Richard Stallman's Political Notes]

Vance was presented at the Olympic Games, and received more boos than applause. But NBC News hid the boos, in its broadcast stream. And the White House promoted that falsified broadcast.

This sort of lie is not as directly harmful as some other lies, but engaging in it proves NBC News is corrupt.

Intelligence files of journalists investigating thinktank [Richard Stallman's Political Notes]

A thinktank that helped Starmer win leadership of the Labour Party was headed by a minister of state, who received secret intelligence files about journalists investigating the actions of that thinktank.

This looks like corruption of the state's mission for partisan purposes, and Starmer ought to resign for that.

02:07

Together is our message [Scripting News]

When “together” is your message, we’re on the same team.

01:49

Social Housing, Coming Soon to a Neighborhood Near You [The Stranger]

After three years, two ballot measures and Tuesday’s City Council vote, Seattle is one step closer to being a more affordable city. by Micah Yip

After three years, two ballot measures and Tuesday’s City Council vote, Seattle is one step closer to being a more affordable city.

On Tuesday night, Seattle Social Housing (SSHD) hosted an event featuring Mayor Katie Wilson, announcing the organization will be receiving $115 million through a voter-approved tax to build and buy buildings for affordable public housing. Rent is tied to the resident’s income. And because the buildings are mixed income, wealthier residents subsidize the cost. Earlier that day, City Council voted to turn on the tap, unanimously passing the interlocal agreement for the collection and disbursement of the funds between the city and SSHD.

“There is a lot of wealth in the city, and we continue to have one of the most regressive tax systems in the country, in the state,” said Wilson. “And it is very gratifying to know that we’re going to be able to use a little bit of that wealth and put it to work building housing.”

February must be a lucky month for housing in Seattle. In February 2023, Seattle voters passed I-135, which basically asked Seattle voters, “Hey, do you want us to form a social housing developer?” and Seattle said “yes.”

Then, in February last year, the city presented voters with two options to fund social housing: Prop 1A, a 5 percent tax on companies for each employee making more than $1 million per year; or Prop 1B, which wouldn’t create a new tax, but siphon $10 million per year from the Jumpstart payroll tax for only five years. Seattle passed Prop 1A.

SSHD’s interim CEO Tiffani McCoy announced that an estimated 170 companies in the city are subject to the tax, $115 million in the 2025 fiscal year—a figure far greater than the original estimate of $50 million.  

Social housing is a new concept in Seattle, deviating from our profit-driven housing market that’s widely inaccessible for low- and middle-income people. Rents are meant to remain permanently affordable, with a target goal of around 30 percent of a person’s income. And it’s been successfully implemented in places like Vienna, Austria, Finland and Singapore. In the United States, only Seattle and Montgomery County, Maryland have taken the leap.

“Our main objective isn’t profit and we’re not determined by the markets that other, private landlords are,” SSHD spokesperson Lilly Fowler told The Stranger.

Maybe you’re wondering if you can be one of those hundreds benefitting from social housing this year. You could be, if you make anywhere up to 120 percent of the area’s median income (AMI). Fowler says they estimate the first building will open in about six months. You can register to stay updated here.

“In a moment when housing costs continue to rise and displacement pressures remain real, social housing is going to give us a tool that can match the scale of the problem,” Wilson said.

Correction: This article has been updated since publication. We incorrectly stated that the city had collected $115 million in the last month of 2025. It had begun collecting funds from the 2025 tax year last month (January 2026). We also inaccurately stated that rent for these buildings would be capped at 30 percent. The target is around 30 percent of a tenant's income, but it's not legally mandated. We regret the errors.

00:35

[$] LWN.net Weekly Edition for February 12, 2026 [LWN.net]

Inside this week's LWN.net Weekly Edition:

  • Front: Git; GCC and KCFI; modernizing swapping; 6.18 statistics; modern FOSS challenges.
  • Briefs: Kernel ML; tag2upload; LFS sysvinit; postmarketOS FOSDEM; Ardour 9.0; Offpunk 3.0; Dave Farber RIP; Quotes; ...
  • Announcements: Newsletters, conferences, security updates, patches, and more.

00:07

vindarel: 🖌️ Lisp screenshots: today's Common Lisp applications in action [Planet Lisp]

I released a hopefully inspiring gallery:

lisp-screenshots.org

Today's Common Lisp applications in action. -->

We divide the showcase under the categories Music, Games, Graphics and CAD, Science and industry, Web applications, Editors and Utilities.

Of course:

“Please don’t assume Lisp is only useful for...

thank you ;)

For more example of companies using CL in production, see this list (contributions welcome, of course).


Don’t hesitate to share a screenshot of your app! It can be closed source and yourself as the sole user, as long as it as some sort of a GUI, and you use it. Historical success stories are for another collection.

The criteria are:

  • built in Common Lisp
  • with some sort of a graphical interface
  • targeted at end users
  • a clear reference, anywhere on the web, by email to me or simply as a comment here, that it is built in CL.

Details:

  • it can be web applications whose server side is CL, even if the JS/HTML is classical web tech.
  • no CLI interfaces. A readline app is OK but hey, we can do better.
  • it can be closed-source or open-source, commercial, research or a personal software
  • regarding “end users”: I don’t see how to include a tool like CEPL, but I did include a screen of LispWorks.
  • bonus point if it is developed in a company (we want it on https://github.com/azzamsa/awesome-lisp-companies/), be it a commercial product or an internal tool.

You can reach us on GitHub discussions, by email at (reverse "gro.zliam@stohsneercs+leradniv") and in the comments.

Best,

Wednesday, 11 February

23:28

Romancing the Tome [The Stranger]

Talking Valentines, Heated Rivalry, and Sexy Fish Scaling with Author Olivia Waite
by Julianne Bell

Olivia Waite is a Seattle-based romance, sci-fi, and fantasy author, New York Times romance columnist, Jeopardy! champion, and accomplished fiber artist. I was introduced to her via her novel The Lady’s Guide to Celestial Mechanics, which is not only a beguiling sapphic love story, but also a brilliant ode to the art of science and the science of art. Her latest book, Murder by Memory, a cozy sci-fi mystery set aboard an interstellar passenger liner and the first installment in her Dorothy Gentleman series, came out last March, and the sequel Nobody’s Baby comes out next month. (She’s also currently working on releasing a knitting pattern for the fern shawl that makes a cameo in Murder by Memory.) The Stranger caught up with her about Heated Rivalry, falling in love at karaoke, and how fish-scaling can be surprisingly romantic.

How did you first fall in love with the romance genre?
I stole my first romance novel from my mom when I was 5. It was a Johanna Lindsey sci-fi romance, so imagine Jupiter Ascending, but with orgasms, and my mom took it away, because nobody wants to explain that kind of thing to a toddler. I picked it up because the cover looked like Star Wars, which also tracks—the whole slave Leia bikini thing was absolutely in the marketing. And I wanted to see how it ended, so as soon as I was old enough to get a library card, I tracked down a copy and managed to finish it. I’ve been hooked ever since. It’s funny, because that’s both the first romance and the first sci-fi novel that I read.

As a romance author, what is it like to witness the Heated Rivalry craze erupt into the mainstream right now?
The audience reaction has been really gratifying, and then the nonstop bad takes have been deeply irritating. I’ve read the book [series Game Changers by Rachel Reid, from which the show is adapted] before, and I was also a fan of [director Jacob Tierney’s previous show] Letterkenny, so in that slim little Venn diagram of those two things, there were, like, five of us, and we were all so excited. People [were] like, romance adaptations are never good, and I’m like, No, you don’t understand this! Man will point a camera at a dude in a flannel shirt, and you have 18 feelings about it! I think one of the best things about it is that a lot of the conversations, even the difficult ones, have been very productive. People in very closeted industries who can’t come out are finding ways to talk about that with people that they know.

What adaptations would you like to see follow in the wake of its success?
I want the Alyssa Cole and Beverly Jenkins books, American historical romances specifically set around the experience of Black Americans. Beverly Jenkins has one called Forbidden that is set in a mining town where the machinery never stops whirring, and the hero is a Black man who can pass as white, which means he has access to bank accounts, so he’s helping the Black residents of the town gain credit and build up savings in a way that the bank wouldn’t let them. But in order to live as the authentic Black man he actually is, he has to give that up, and decide whether the job he’s doing is more important than his need to be acknowledged as someone with a family connection, rather than just a good ally. There’s part of himself that he’s had to keep very locked down. It’s gorgeous. There’s an old-timey baseball game, and there’s the heroine carrying her stove as she treks across the desert. It’s the book that made me say, God, fish-scaling is so romantic! And no, it’s not. Beverly Jenkins, what witchcraft is this?! I would love a big, splashy, Yellowstone-level adaptation.

What lessons can romance teach us during this difficult time in history?
Romance has lessons both positive and negative. I’ve read too much about romance history to pretend it’s all sunshine and rainbows. You get a lot of people saying, well, romance is by women, for women, therefore it’s automatically feminist, and, no. There are terrible and repressive romances being written, and it’s silly to pretend that’s not happening. But the thing that keeps me coming back to this genre as a source of optimism and strength and resilience is that sense that it’s an optimistic genre at its heart—it assumes that the world is improvable, and people can learn. People are worth keeping. They can learn better. Love is possible, and it just might not look like what you intended.

What is one romance book you think everyone should read?
After Hours at Dooryard Books by Cat Sebastian. It’s set in New York, 1968. It’s about a used bookstore owner and a down-on-his-luck mystery man. It’s also about the protests that are happening in the Civil Rights Movement and labor issues and queer issues in New York, and it’s an entire book list on its own. It is so sad and so good. It feels like somebody wrote you a love letter from 60 years ago to tell you it’s okay and we’ve been through this before.

You mentioned over email that you’ve submitted some Stranger valentines in the past; can you tell us about that?
They were actually for the man I ended up marrying. I can confirm that I met him singing Peter Gabriel in an Irish dive bar in Fremont. It was this absolute karaoke romance, and this guy gets up and starts screaming, and I go, “There he is. That’s what I’ve been waiting for.” We were dating about three months after that, and then we were engaged within the year. Then we spent like two and a half years planning the wedding. For those two and a half years, when I was still in that little Fremont apartment and just about to graduate from grad school and going to this karaoke bar down the corner every Monday night, February would come around, and we would send each other little notes in The Stranger, and it was fantastic.

Nobody’s Baby is out March 10 on Tor Publishing.

21:56

The original Secure Boot certificates are about to expire, but you probably won’t notice [OSnews]

With the original release of Windows 8, Microsoft also enforced Secure Boot. It’s been 15 years since that release, and that means the original 2011 Secure Boot certificates are about to expire. If these certificates are not replaced with new ones, Secure Boot will cease to function – your machine will still boot and operate, but the benefits of Secure Boot are mostly gone, and as newer vulnerabilities are discovered, systems without updated Secure Boot certificates will be increasingly exposed.

Microsoft has already been rolling out new certificates through Windows updates, but only for users of supported versions of Windows, which means Windows 11. If you’re using Windows 10, without the Extended Security Updates, you won’t be getting the new certificates through Windows Update. Even if you use Windows 11, you may need a UEFI update from your laptop or motherboard OEM, assuming they still support your device.

For Linux users using Secure Boot, you’re probably covered by fwupd, which will update the certificates as part of your system’s update program, like KDE’s Discover. Of course, you can also use fwupd manually in the terminal, if you’d like. For everyone else not using Secure Boot, none of this will matter and you’re going to be just fine. I honestly doubt there will be much fallout from this updating process, but there’s always bound to be a few people who fall between the cracks.

All we can do is hope whomever is responsible for Secure Boot at Microsoft hasn’t started slopcoding yet.

Microsoft adds and fixes remote code execution vulnerability in Notepad [OSnews]

What happens when you slopcode a bunch of bloat to your basic text editor? Well, you add a remote code execution vulnerability to notepad.exe.

Improper neutralization of special elements used in a command (‘command injection’) in Windows Notepad App allows an unauthorized attacker to execute code over a network.

[…]

An attacker could trick a user into clicking a malicious link inside a Markdown file opened in Notepad, causing the application to launch unverified protocols that load and execute remote files.

↫ CVE-2026-20841

I don’t know how many more obvious examples one needs to understand that Microsoft simply does not care, in any way, shape, or form, about Windows. A lot of people seem very hesitant to accept that with even LinkedIn generating more revenue for Microsoft than Windows, the writing is on the wall.

Anyway, the fix has been released through the Microsoft Store.

21:35

Linux man pages 6.17 released [LWN.net]

Version 6.17 of the Linux manual-page collection has been released. Along with a long list of updates to the man pages themselves, it includes some new utility programs of interest.

The grepc(1) program is something that originated in this project, as it helped me find code quickly in glibc and the Linux kernel. However, I've found it incredibly useful outside of this project. I'll take some space to announce it, as it's much more than just a tool for writing manual pages, and I expect it to be useful to most --if not all-- C programmers.

It is a command-line tool that finds C source code (for example, a function definition) in arbitrary projects. It doesn't use any indexing mechanism (unlike ctags and similar tools). This means that it can be used right after cloning some repository, without having to first generate an index.

21:07

Swords & TV [Looking For Group]

As I dust the cobwebs off my scrivener files, one of my goals for 2026, aside from reviving LFG, is to get back into blogging. Sadly, it was one of the first casualties when I transitioned into a CEO role
Read More

The post Swords & TV appeared first on Looking For Group.

20:21

Backpack Beware [The Stranger]

Signed, a former New Yorker, just trying to get home. by Anonymous

Seattle, I know you are relatively new to the public transit game, but I am BEGGING YOU to learn some basics about rush hour travel. You're relatively okay at standing to the right so people can walk by on the left on escalators, but for god's sakes, TAKE OFF YOUR BACKPACKS ON THE TRAIN!!

Picture this: It's 5 p.m., you're leaving the office. The train is packed full of tired, overworked, and underpaid people. You manage to squeeze on, only to get whacked by someone's backpack, while they are oblivious to the fact that by turning, they've turned their backpack into a weapon. You shift to the right, BAM! another backpack. You're being crushed in the doorway because you have nowhere to go. You look to the right, down the aisle, and see it looks relatively empty because everyone has their backpacks on! Each person takes up the space of two people: one space for their body and one space for their backpack.

Come on, y'all. We all want to get home. Take your backpacks off so we can fit more people on the train and not get clotheslined by a rogue backpack.

Signed,

A former New Yorker, just trying to get home 

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.

19:56

It’s Groundhog Day Again…but Worse – DORK TOWER 10/02/26 [Dork Tower]

Most DORK TOWER strips are now available as signed, high-quality prints, from just $25!  CLICK HERE to find out more!

Also, here’s last June’s comic, so you don’t need to seek it out:

HEY! Want to help keep DORK TOWER going? Then consider joining the DORK TOWER Patreon and ENLIST IN THE ARMY OF DORKNESS TODAY! (We have COOKIES!) (And SWAG!) (And GRATITUDE!)

The Mark Of Donalds [Penny Arcade]

Time was, people would say that you had to read the newspost to know what the comic was about - like that was a bad thing! As the author of the newspost, I have a natural impetus to craft the kind of strip which requires an independent Stone of Hammurabi to help interpret it; a conceptual side order. The thing about today's strip is that you will find absolutely no succor in these words - no nourishment. It's inspiration is almost impossible to explain, it must be experienced viscerally. Brenna was only able to watch it for ten seconds. How far will you get?

 
 
 
 
 
View this post on Instagram
 
 
 
 
 
 
 
 
 
 
 

A post shared by Chris Kempczinski (@chrisk_mcd)

19:07

Link [Scripting News]

I just watched Life on Our Planet on Netflix, loved it. Lots of takeaways, but this one will surprise you probably -- I think the AIs are our successors. We should at least try to preserve them so they can run on the Moon if we're in the 6th Mass Extinction, which of course we are. There's been a lot of criticism of the show, but it got me to think about evolution not necessarily in the terms they offer, but the scale of it. And the CGIs were fantastic.

18:49

Kapsule adds easy developer environment containers to KDE Linux [OSnews]

If you’re a developer and use KDE, you’re going to be interested in a new feature KDE is working on for KDE Linux.

In my last post, I laid out the vision for Kapsule—a container-based extensibility layer for KDE Linux built on top of Incus. The pitch was simple: give users real, persistent development environments without compromising the immutable base system. At the time, it was a functional proof of concept living in my personal namespace.

Well, things have moved fast.

↫ Herp De Derp

Not only is Kapsule now available in KDE Linux, it’s also properly integrated with Konsole now. This means you can launch Kapsule containers right from the new tab menu in Konsole for even easier access. They’re also working on allowing users to easily launch graphical applications from the containers and have them appear in the host desktop environment, and they intend to make the level of integration with the host more configurable so developers can better tailor their containers to their needs.

Slog AM: Ten are Dead After Mass Shooting in Canada, the Trump Administration Can’t Make Up Its Mind About the El Paso Airport, and It’s Super Bowl Parade Day in Seattle [The Stranger]

The Stranger's morning news roundup. by Megan Seling

Today, Seattle Celebrates: It’s parade day for the Seattle Seahawks, who defeated the New England Patriots 29–13 in Sunday’s Bad Bunny Bowl. The morning begins with a trophy ceremony at Lumen Field at 10 a.m., and the parade will start at Fourth Avenue and Washington Street at 11 a.m. Officials say it should take approximately two hours for the parade to make its way down Fourth Avenue to Cedar Street. SPD is expecting about a million people, and they started closing roads at 6:30 a.m. It’s gonna be nuts. Either rush down there now and embrace madness, or avoid the area completely. There is no in between. Just stay off the pergola

Mass Shooting in Canada: Ten people are dead, and more than 25 are wounded after a shooting at a small school in northern British Columbia. Police say the alleged shooter died by suicide. Two of the victims were found at a home believed to be connected to the incident. It’s the deadliest mass shooting in Canada since a shooter killed 13 people in Nova Scotia in 2020, and, as AP reports, “Canada’s government has responded to previous mass shootings with gun control measures, including a recently broadened ban on all guns it considers assault weapons.” 

Meanwhile, in America: According to massshootingtracker.site, which is a real website, there have already been 45 mass shootings in the US this year (we’re on day 42), with a total of 62 people killed and 137 wounded. Your thoughts and prayers are bullshit. 

Trump Administration Shuts Down El Paso Airport: Or not. Hard to say! On Tuesday night, Real World Boston star and the Secretary of Transportation Sean Duffy claimed Mexican cartel drones breached US airspace, so he grounded all flights for 10 days. This morning, though, the Federal Aviation Administration rescinded that order and said the shutdown was “prompted by the Defense Department’s use of new counter-drone technology.” America: We’re doing a great job!

Tax the Rich! Hundreds of union members rallied at the Capitol in Olympia yesterday to demand that local lawmakers pass the millionaires tax, which “calls for a 9.9% tax on Washington residents making more than $1 million a year beginning in 2028.” Why wait until 2028? Tax those fuckers now, I say! Unfortunately, I am not in charge. Our own Nathalie Graham will have more about this Senate bill later at the stranger dot com. Stay tuned.

In Other Lawmaker News: Gov. Bob Ferguson is working with state lawmakers to add "mental health safeguards to AI chatbots.” The policy would “require companion chatbots to notify users they are interacting with AI and not a human at the beginning of the interaction and every three hours,” according to the Seattle Times. But why just every three hours? Make the robots say it every 30 minutes! Every three minutes, even! In fact, melt the robots! Burn OpenAI to the ground! Hack the planet! I have had too much coffee!

If You’re Wondering Why People Turn to Robots for Help: It’s because our city (our state, our country, our world) is terrible at offering people meaningful mental health support when they reach out for help, and a new report on King County’s lack of mental health referrals proves it. The King County sheriff’s 911 center has zero standard procedures to help people in crisis, and apparently don't refer them to the 988 suicide hotline either. Instead, they just send officers and hope it works out?

Strange Case Gets Stranger: Last night, police announced that they detained a person of interest in Rio Rico, Arizona, in connection with Nancy Guthrie’s disappearance. This morning, that person was released. Nancy, the 84-year-old mother of Today host Savannah Guthrie, has been missing for more than a week, and for several days, Savannah and her siblings have been releasing videos to Nancy’s believed captors, who allegedly asked for $6 million in Bitcoin. 

And Stranger Still: Kash Patel and the Go Get ‘Em Kids released video footage yesterday of a masked person captured on a doorbell camera outside Nancy Guthrie’s home on the same night she went missing. According to one expert CNN interviewed, this person’s behavior is “impressive,” and they clearly did a “certain amount of planning.” What? Are we watching the same video? Dude looks like a bumbling idiot, rolling up to the house with a gun holstered directly above his crotch like someone said, “Put this on,” and he was like, “Okay, yeah, because I have definitely worn a gun before. I will just point it directly at my dick.” Then, guy was so ill-prepared for the presence of a very common doorbell camera that he paused to grab some weeds from the garden and attempted to fashion them into some kind of curtain, all the while staring directly into the camera lens at close range. And you want me to believe this is the same brilliant criminal mind capable of kidnapping the 84-year-old mother of a high-profile journalist and leading the FBI on a nationwide goose chase for more than a week? Sure, Jan. 

Speaking of Kidnappings: ICE is still at it! Locals in Minneapolis shared this scene after the fact. 

 

This is the aftermath of an ICE kidnapping a few blocks from my home in St. Paul—an hour ago. A quiet street full of broken glass and at least three wrecked cars. The target of the kidnapping was taken away by ambulance. He was on a stretcher and covered by a sheet, though a cop said he was alive.

[image or embed]

— Andrew Karre (@andrewkarre.bsky.social) February 11, 2026 at 8:46 AM

 

In Local Film News: Yesterday, The Stranger reported that the Boeing IMAX theater (the biggest IMAX theater in the state) is expected to be sold to the Space Needle Corporation. The theater is closed for now for a “brief renovation focused on improving the concessions and arrival experiences, scheduled to end in May.”

And now, I leave you with some of my favorite things to happen at the Olympics so far

🥌 Commentators constantly referring to the US mixed doubles curling teammates as Girl Cory and Boy Korey. (Congrats on the silver, buddies!)

🏒 The US women’s hockey team allowing their opponents exactly one goal in four games, including a 5–0 victory over Team Canada. Even better, it’s the Torrent players who are leading the team in points! Hilary Knight has two goals and three assists, Alex Carpenter has three goals and two assists, and Hannah Bilka has three goals and one assist. (Britta Curl has zero goals, which is what she deserves, because she’s a transphobic asshole.)

😭 Ilia Malinin skating to the sound of his own voice in the ultimate masturbatory figure skating performance, which I actually hated very much but had a lot of fun laughing at. Just some of the lines the 21-year-old recites during his program: “The only true wisdom / Is in knowing you know nothing.” “You are something / But not nothing.” lol ok quad god

18:21

Link [Scripting News]

Docker version of FeedLand. Scott Hanson has it working, and would like help with testing. Thanks so much to Scott.

18:00

How do I suppress the hover effects when I put a Win32 common controls ListView in single-click mode? [The Old New Thing]

A customer had a Win32 common controls ListView in single-click mode. This has a side effect of enabling hover effects: When the mouse hovers over an item, the cursor changes to a hand, and the item gets highlighted in the hot-track color. How can they suppress these hover effects while still having single-click activation?

When the user hovers over an item, the ListView sends a LVN_HOT­TRACK notification, and you can suppress all hot-tracking effects by returning 1.

    // WndProc
    case WM_NOTIFY:
    {
        auto nm = (NMLISTVIEW*)lParam;
        if (nm->hdr.code == LVN_HOTTRACK)
        {
            return 1;
        }
    }
    break;

If you are doing this from a dialog box, you need to set the DWLP_MSG­RESULT to the desired return value, which is 1 in this case, and then return TRUE to say “I handled the message; use the value I put into DWLP_MSG­RESULT.”

    // DlgProc
    case WM_NOTIFY:
    {
        auto nm = (NMLISTVIEW*)lParam;
        if (nm->hdr.code == LVN_HOTTRACK)
        {
            SetWindowLongPtr(hDlg, DWLP_MSGRESULT, 1);
            return TRUE;
        }
    }
    break;

The post How do I suppress the hover effects when I put a Win32 common controls ListView in single-click mode? appeared first on The Old New Thing.

17:56

In Many Ways the Greatest Self-Portrait I’ve Ever Taken [Whatever]

I think this photo captures many things, about me, about my cat, and about the relationship between the two of us. I don’t know how much more can be said. This photo may, in fact, be perfect.

— JS

16:21

Kimwolf Botnet Swamps Anonymity Network I2P [Krebs on Security]

For the past week, the massive “Internet of Things” (IoT) botnet known as Kimwolf has been disrupting The Invisible Internet Project (I2P), a decentralized, encrypted communications network designed to anonymize and secure online communications. I2P users started reporting disruptions in the network around the same time the Kimwolf botmasters began relying on it to evade takedown attempts against the botnet’s control servers.

Kimwolf is a botnet that surfaced in late 2025 and quickly infected millions of systems, turning poorly secured IoT devices like TV streaming boxes, digital picture frames and routers into relays for malicious traffic and abnormally large distributed denial-of-service (DDoS) attacks.

I2P is a decentralized, privacy-focused network that allows people to communicate and share information anonymously.

“It works by routing data through multiple encrypted layers across volunteer-operated nodes, hiding both the sender’s and receiver’s locations,” the I2P website explains. “The result is a secure, censorship-resistant network designed for private websites, messaging, and data sharing.”

On February 3, I2P users began complaining on the organization’s GitHub page about tens of thousands of routers suddenly overwhelming the network, preventing existing users from communicating with legitimate nodes. Users reported a rapidly increasing number of new routers joining the network that were unable to transmit data, and that the mass influx of new systems had overwhelmed the network to the point where users could no longer connect.

I2P users complaining about service disruptions from a rapidly increasing number of routers suddenly swamping the network.

When one I2P user asked whether the network was under attack, another user replied, “Looks like it. My physical router freezes when the number of connections exceeds 60,000.”

A graph shared by I2P developers showing a marked drop in successful connections on the I2P network around the time the Kimwolf botnet started trying to use the network for fallback communications.

The same day that I2P users began noticing the outages, the individuals in control of Kimwolf posted to their Discord channel that they had accidentally disrupted I2P after attempting to join 700,000 Kimwolf-infected bots as nodes on the network.

The Kimwolf botmaster openly discusses what they are doing with the botnet in a Discord channel with my name on it.

Although Kimwolf is known as a potent weapon for launching DDoS attacks, the outages caused this week by some portion of the botnet attempting to join I2P are what’s known as a “Sybil attack,” a threat in peer-to-peer networks where a single entity can disrupt the system by creating, controlling, and operating a large number of fake, pseudonymous identities.

Indeed, the number of Kimwolf-infected routers that tried to join I2P this past week was many times the network’s normal size. I2P’s Wikipedia page says the network consists of roughly 55,000 computers distributed throughout the world, with each participant acting as both a router (to relay traffic) and a client.

However, Lance James, founder of the New York City based cybersecurity consultancy Unit 221B and the original founder of I2P, told KrebsOnSecurity the entire I2P network now consists of between 15,000 and 20,000 devices on any given day.

An I2P user posted this graph on Feb. 10, showing tens of thousands of routers — mostly from the United States — suddenly attempting to join the network.

Benjamin Brundage is founder of Synthient, a startup that tracks proxy services and was the first to document Kimwolf’s unique spreading techniques. Brundage said the Kimwolf operator(s) have been trying to build a command and control network that can’t easily be taken down by security companies and network operators that are working together to combat the spread of the botnet.

Brundage said the people in control of Kimwolf have been experimenting with using I2P and a similar anonymity network — Tor — as a backup command and control network, although there have been no reports of widespread disruptions in the Tor network recently.

“I don’t think their goal is to take I2P down,” he said. “It’s more they’re looking for an alternative to keep the botnet stable in the face of takedown attempts.”

The Kimwolf botnet created challenges for Cloudflare late last year when it began instructing millions of infected devices to use Cloudflare’s domain name system (DNS) settings, causing control domains associated with Kimwolf to repeatedly usurp AmazonAppleGoogle and Microsoft in Cloudflare’s public ranking of the most frequently requested websites.

James said the I2P network is still operating at about half of its normal capacity, and that a new release is rolling out which should bring some stability improvements over the next week for users.

Meanwhile, Brundage said the good news is Kimwolf’s overlords appear to have quite recently alienated some of their more competent developers and operators, leading to a rookie mistake this past week that caused the botnet’s overall numbers to drop by more than 600,000 infected systems.

“It seems like they’re just testing stuff, like running experiments in production,” he said. “But the botnet’s numbers are dropping significantly now, and they don’t seem to know what they’re doing.”

[$] Evolving Git for the next decade [LWN.net]

Git is ubiquitous; in the last two decades, the version-control system has truly achieved world domination. Almost every developer uses it and the vast majority of open-source projects are hosted in Git repositories. That does not mean, however, that it is perfect. Patrick Steinhardt used his main-track session at FOSDEM 2026 to discuss some of its shortcomings and how they are being addressed to prepare Git for the next decade.

postmarketOS FOSDEM 2026 and hackathon recap [LWN.net]

The postmarketOS project has published a recap from FOSDEM 2026, including the FOSS on Mobile devroom, and a summary of its post-FOSDEM hackathon. This includes decisions on governance and the project's AI policy:

AI policy: our current AI policy does not state that we forbid the use of generative AI in postmarketOS, so far this document just lists why we think it is a bad idea and misaligned with the project values. We discussed this and will soon change it (via merge request) to clearly state that we don't want generative AI to be used in the project. It was also noted that currently the policy is too long, it would make sense to split it into the actual policy and still keep, but separate the reasoning from it.

[...] Power delegation and teams: in over two hours we discussed how to move forward with [postmarketOS change request] PMCR 0008 to organize ourselves better, and how it fits with soon having a legal entity. We figured that we need to rename "The Board" (which is currently for financial oversight) to "Financial Team", as we will soon have a new board for the legal entity. In the end our idea was to have the new board refer to an "assembly" for all important decisions, and this "assembly" would just be all Trusted Contributors in postmarketOS. The Core Contributors team would be dissolved in favor of having several topic-specific teams (a lot of which we already have, such as the infra team). This way we would have a very flat decision structure. The PMCR will be updated soon and discussed further there. Casey also asked on fedi for further feedback and got a lot of input.

Other topics include reaching out to resellers to sell phones with postmarketOS preinstalled, security, and more.

Ted Lasso [Judith Proctor's Journal]

 Having zero interest in football, I never would have tried a comedy series based around an American football coach working for an English soccer team...

But 'Replyhazy' suggested I try it while I have Apple TV, and I absolutely love it!  It's funny, it's warm-hearted and it has some great characters.

It may not be realistic, but most of the characters are really thoughtful about their relationships - men actually listen to what their girlfriends are telling them and act maturely.

Friendships are built that really have meaning.  Villains are relatively few, but they make up for it by being delightfully over the top.  Anthony Head, as the football club owner's ex-husband, does a wonderful job as a charming, womanising scumbag!

I think my favourite character is actually Trent Crimm, the newspaper reporter. acted by James Lance.  He starts as a minor character, only in some episodes, and is a full-time regular by the end of series 3.

But there are lots of great characters who you grow to love and appreciate.

I even enjoyed watching the football....



comment count unavailable comments

15:14

Link [Scripting News]

A fair number of people make a stop at news.scripting.com every day. I want to make some improvements, I think it can be made a bit faster. And I want to make it easier for anyone to create a site like that, for others to use. I think every news org should have one of those, to tell your readers who you read. Work together, we need it as we reboot the news. This is will be an alternative to twitter-style news readers, which took over the leading-edge from RSS feed readers, twenty freaking years ago. I think there should be a new news paradigm every couple of decades at least.

Link [Scripting News]

Twitter started in July 2006. I was an early user, and a fan. Found this excellent review of Twitter by Anil Dash in early 2007. I'd be interested in reading other early reviews of Twitter written by bloggers.

Link [Scripting News]

Each podcast shownotes page now has a link, at the bottom, to the home page of the shownotes site, which has a list of all podcasts in the series. There's a lot of good stuff in the previous episodes.

14:56

The Human Lifespan Probably has an Upper Limit … and Why That’s Good [Economics from the Top Down]

Your browser does not support the audio tag.

Download: PDF | EPUB | MP3 | WATCH VIDEO

We are at war with death and its causes.
We are building towards an infinite horizon.

Bryan Johnson

A common theme in science fiction is that people of the future will live far longer than folks today. The reasoning goes something like this. Historically, human life expectancy was short — often under 30 years. But today, in some wealthy countries, life expectancy is pushing into the upper 80s. Given this trend, it seems possible that the human lifespan could continue to grow forever.

Unfortunately, this thinking is probably wrong. While plausible on the surface, it misunderstands the nature of how the human lifespan has been extended.

The backstory is that for most of human history, about half of all children died before age 15. For tens of thousands of years, humans made essentially no progress at civilizing this gauntlet of youth. But today, things are different. With the help of modern science, the vast majority of children now reach adulthood. As a consequence, life expectancy at birth has exploded.

What has hardly budged, though, is life expectancy at the century mark. Or put another way, while humans have made great strides at allowing the young to survive, we’ve made virtually no progress at halting the march of old age. True, we can imagine a future in which we slow aging; but today, there’s no sign of such an elixir. And so we are faced with a simple mathematical problem; as long as aging remains inexorable, there is likely a natural upper limit to the human lifespan.

And that’s probably a good thing. You see, if the elixir of life were actually discovered, the risk is that the spoils of longevity would be hoarded by the rich. Thankfully, the opposite is true today. Indeed, one of the most stunning features of longer life expectancy is that it makes the human lifespan more equal.

Life expectancy explodes

To dive into the science of life expectancy, let’s review some recent history. For humans, the last two centuries have been the anthropic equivalent of the Cambrian explosion. For thousands of years prior, the pace of human social evolution was glacial. Then, with the onset of the industrial revolution, virtually every aspect of the human experience changed, including how long we live.

For some context, at the turn of the 19th century, global life expectancy at birth was under 30 years. Today, it is well over 70 years. Figure 1 shows this life-expectancy explosion, which came mostly in the last century.

Figure 1: The march towards longer living. The extension of human life expectancy began in earnest in the 19th century, but accelerated during the 20th century. Today, world life expectancy at birth is more than forty years greater than it was in 1800. Note that in this chart, annual data begins in 1950, so we don’t see the impact of the two world wars. But we do see the global impact of the Great Chinese Famine (induced by Mao’s ‘Great Leap Forward’), as well as the more recent carnage caused by the COVID-19 pandemic. [Sources and methods]

Looking at this remarkable extension of the human lifespan, we naturally wonder what lies ahead. One possibility is that the pattern over the last century continues indefinitely. That’s easy enough to extrapolate. On average, each new year of the 20th century brought a quarter-year extension to global life expectancy at birth. If this ascent continues, global life expectancy will reach 91 years by 2100. And by the mid 24th century (when the events in Star Trek: The Next Generation supposedly take place), global life expectancy will surpass 150 years. No doubt many folks (including me) would like to live in this sci-fi future. Sadly, it’s almost certainly a fantasy.

For one thing, the continued march of longer living depends in large part on continuous scientific progress, which is not guaranteed. I mean, just look at what the Trump regime is doing today. Forget new science … Trump is busy demolishing basic public health policies. If this demolition doesn’t stop, Americans are almost surely going to see their life expectancy continue (yes, continue) to drop.1

Let’s suppose, however, that this stupidity is a brief hiccup, and that scientific progress continues for centuries come. Even then, it’s unlikely that life expectancy will rise indefinitely. Perhaps the easiest way to see the problem is to look at trends in life expectancy not at the beginning of life, but near its end, where the picture is less sanguine.

Figure 2 illustrates this end-of-life story. Here, I’ve plotted global life expectancy for individuals at age 100. What’s notable is the lack of progress. In 1950, centenarians could expect to live for another 1.1 years, on average. By 2023, this life expectancy had been extended by just 0.4 years. In other words, despite the massive 20th-century gains in the average human lifespan at birth, longevity amongst the extremely old hardly budged. It’s this failure to extend the lifespan of the very old which suggests an upper limit to human life expectancy.

Figure 2: Meager gains — world life expectancy at age 100. Unlike life expectancy at birth, which rose steeply throughout the 20th century, world life expectancy at age 100 remained almost unchanged, rising by just 0.4 years from 1950 to 2023. The caveat is that centenarian life expectancy is difficult to estimate, largely because centenarians are rare. So the data here should be treated with appropriate uncertainty (especially the odd life-expectancy jump during the mid 1970s, which smells of a change in methodology). At any rate, what seems uncontroversial is that today, centenarians don’t live much longer than they did in 1950. [Sources and methods]

A tale of two gauntlets

To understand the historical route to longer life expectancy, it’s helpful to think of the human lifespan as having two survival gauntlets — a gauntlet of youth and a gauntlet of old age.

The gauntlet of youth begins at birth, which is one of the most dangerous periods of life. Historically, many individuals died during infancy, and only about half of children reached adulthood. In other words, the gauntlet of youth was brutal. Fortunately, things have changed. In fact, reducing infant mortality is the most important factor in increasing human life expectancy.

Figure 3 illustrates. Here, the horizontal axis shows life expectancy at birth, measured for every country since 1950. The vertical axis shows the rate of infant mortality (the portion of infants that die before age one). What we find is that rising life expectancy comes with a massive decline in infant mortality. For example, when life expectancy is below 30 years, about 20% of infants die before age one. But when life expectancy is over 80 years, infant mortality is more than 100 times lower.

Figure 3: The collapse of infant mortality. Reducing infant mortality is the most important factor in increasing life expectancy at birth. Here, each point represents a country, observed between 1950 and 2023. The vertical axis shows the infant mortality rate — the portion of infants that die before age one. (Note the log scale.) The horizontal axis shows life expectancy at birth. [Sources and methods]

The secret to cutting infant mortality turns out to be quite simple, largely because the bodes of the young are designed to survive. Basic sanitation, basic infection control, and basic medical interventions at birth go a long way towards keeping newborns alive.2 And if children survive infancy, there’s a good chance they’ll reach adulthood.

When we turn to the gauntlet of old age, though, the same principles do not hold. Yes, modern medicine can treat some of the downstream effects of old age (like cancer, heart disease, and diabetes). But as far as halting aging itself, science has proved impotent. And that’s not surprising. Aging likely has deep evolutionary roots in metabolism itself … roots which are not easily upended.3

In short, unlike the bodies of infants, which are designed to live, the bodies of the extremely old are riddle with the insults of age. Which is why it’s unsurprising that old-age mortality rates remain intransigent.

Figure 4 illustrates the lack of progress. Here, I’ve plotted mortality rates at age 99 as a function of population life expectancy at birth. Across more than seven decades of rising life expectancy, mortality rates at age 99 are barely halved. So yes, there has been humble progress at taming the gauntlet of old age … but it is nothing like the success at civilizing the gauntlet of youth.

Figure 4: Stubbornly high mortality rates at age 99. Unlike infant mortality, which plummets with rising life expectancy (see Figure 3), mortality rates at age 99 don’t move much. Here’s the modest pattern across all countries between 1950 to 2023. On average, a five decade increase in life expectancy at birth comes with a halving of mortality at age 99. [Sources and methods]

The mathematics of aging

To understand the limits of the human lifespan, it’s helpful to explore the mathematics of aging — by which I mean the statistics associated with getting older. Sadly, age makes almost everything worse.

Professional athletes are a conspicuous example. Athletes typically reach their prime in their mid 20s, after which their performance gradually declines. (This pattern is known as the aging curve.) By age 40, most athletes have retired.4

Elsewhere, the insults of aging are less visible, but still detectable. Of course, the most insulting effect of aging is death itself. From adulthood onward, the risk of death increases inexorably with age. Figure 5 illustrates the pattern in the United States.

Here, the blue curves shows how mortality rates change with age. Note the J-shaped pattern, which appears when we plot mortality rates on a logarithmic scale. At birth, mortality rates are quite high, but drop quickly for the individuals who survive infancy. By age 10, mortality rates reach a lifetime low. From then on, things get worse. During the teen years, mortality rates rise, largely because teens take bigger risks than children.5 And from adulthood onward, mortality rates climb inexorably. This ascent marks the statistical march of senescence.

Figure 5: Mortality rates by age in the United States. When plotted on a logarithmic scale, age-specific mortality rates have a characteristic J shape. Mortality is high at birth and then shrinks during early childhood. It spikes again during teen years, after which it rises perpetually with adult age. [Sources and methods]

Shifting the mortality-rate spectrum

I highlight these age-specific mortality patterns because they are key to understanding the human lifespan. At the most basic level, life expectancy rises because mortality rates fall.

Figure 6 shows this tendency, measured across all countries between 1950 and 2023. Here, I’ve plotted age-specific mortality rates as a function of population life expectancy (shown in color). Let’s run through the evidence.

First, note that regardless of life expectancy, all the mortality-rate curves have a ‘J’ shape. Across every population, the risk of death is high at birth, low during early adolescence, and then rises inexorably during adulthood. Second, note that higher life expectancy comes with lower mortality rates at every age. This connection is a logical necessity; to live longer, people must die less. Third, and most importantly, note that mortality-rate reductions are not even across ages; instead, the reductions are large during youth and small during old age.

Figure 6: Living longer by dying less — the spectrum of age-specific mortality rates. Each colored curve shows mortality rates as a function of age, measured for populations with a specific life expectancy (indicated by color). As life expectancy rises, mortality rates fall. However, the reduction is most pronounced among youth, and least pronounced among the elderly. Note: to create the mortality curves, I have binned country-year observations by life expectancy, and then averaged the age-specific mortality rates within each bin. [Sources and methods]

It is this last fact that is crucial for understanding the limits of the human lifespan. If greater life expectancy was achieved by taming both the gauntlet of youth and the gauntlet of old age, there would be hope for an unbounded lifespan. However, all of the evidence points to the opposite scenario. While we have succeeded at reducing mortality among the young, mortality among the old remains stubbornly high.

Figure 7 visualizes this intransigent pattern, which I’ve dubbed the ‘funnel of death’. What I’ve done here is plot age-specific mortality rates relative to the baseline for a population with a life expectancy of 35 years. (This mortality-rate baseline corresponds to the dashed horizontal line.) The colored lines illustrate how mortality rates shift (downward) as population life expectancy increases.

The resulting triangular shape highlights the lopsided nature of mortality-rate reductions. The most spectacular mortality-rate reductions come at birth. But from infancy onward, these gains are gradually winnowed away until we reach age 90 and up. There, regardless of population life expectancy, individuals are funnelled relentlessly towards death.

Figure 7: The funnel of death. Each colored curve plots the reduction in age-specific mortality rates, measured relative to a population with a life expectancy of 35 years. Longer life expectancy comes with a huge reduction in infant mortality. But for the remainder of life, these gains are winnowed away, until the elderly are funnelled towards certain death, regardless of population life expectancy. Note: to create the mortality curves, I have binned country-year observations by life expectancy, and then averaged the age-specific mortality rates within each bin. [Sources and methods]

The upper limits of the human lifespan

Because the gauntlet of old age remains intransigent, it follows that the human lifespan probably has an upper limit. Here are some ways to estimate it.

A popular approach is to assume that the old-age gauntlet narrows perpetually, until it eventually collides with certain death. With this model, we can estimate the maximum possible lifespan of a human individual.

Figure 8 illustrates this method using US data in 2021. Here, the blue curve shows how US mortality rates rise as a function of age. To model this march of senescence, we fit the mortality-rate data with an exponential function (shown in red). Then we extrapolate this function until it crashes into the mortality rate of 100%. At this point, death becomes certain, which means we have estimated the maximum lifespan of an individual in the given population. For the US in 2021, this maximum lifespan is about 113 years.

Figure 8: Crashing into certain death — the exponential model of the old-age gauntlet. This chart illustrates one method for estimating the maximum human lifespan. Given empirical data for age-specific mortality rates (here, I’ve used US data, shown in blue), we fit the late-adulthood data with an exponential function (red). Then, we extrapolate the trend until it crashes into certain death — the point where mortality is 100%. The age at which this collision occurs is an estimate for the maximum lifespan for individuals within the population. For the US in 2021, this collision happens at age 113. [Sources and methods]

While this exponential method is conveniently simple, it’s also quite unrealistic. In my mind, there is no compelling reason to suppose that the human body has an insurmountable maximum lifespan. Yes, death may become more probable with older age … but imminent death is never certain. Which is to say that we need a more plausible way to model mortality rates during extreme old age.

A better approach is to treat the gauntlet of old age as something that narrows perpetually, but never actually ‘touches’ certain death. A simple way to model this narrowing is with a logistic function. Figure 9 illustrates the revised method.

As before, we fit our model to empirical mortality rates during late adulthood. Then we use the model to extrapolate the pattern into extreme old age. The difference is that with our logistic model, mortality rates bend towards certain death, but never actually touch it. As a consequence, this model presumes that there is no maximum human age; continued survival is always a matter of (increasingly minute) probability.

Figure 9: Approaching, but never touching, certain death — the logistic model of the old-age gauntlet. This chart illustrates a second (improved, in my opinion) method for extrapolating mortality rates into extreme old age. Here, I fit late-adulthood mortality rates with a logistic model. When we use this model to extrapolate mortality rates into old age, it bends towards the certain death mark, but never touches it. Consequently, this model does not define a maximum lifespan for individuals. But it does provide a way to measure the onset of the old-age gauntlet, which I define as the age when mortality rates cross the 50% mark. For the US in 2021, this threshold occurs at age 106. [Sources and methods]

While this logistic model doesn’t define a maximum lifespan, it does provide a way to define the onset of the old-age gauntlet — an onset that sets an effective upper bound on human life expectancy.

Here’s how it works.

I’ll define the ‘old-age gauntlet’ as the point when death becomes more probable than survival. This threshold occurs when age-specific mortality rates exceed 50%. In Figure 9, I’ve marked the gauntlet zone with the red shaded region. Now, in the United States, the empirical data never enters this region. But supposing that our logistic model is sound, we can extrapolate the trend, and estimate the age at which mortality rates exceed 50%. In the US in 2021, I find that this old-age gauntlet begins at about age 106.

So what should we make of this onset? Well, because the old-age gauntlet is a statistical concept, it says little about the survival of specific individuals. (In a large population, a small fraction of people will defy the odds and live past age 106.) That said, the onset of the old-age gauntlet is important, because it signals the effective upper limit to human life expectancy in the given population.

The logic works as follows. Once individuals enter the old-age gauntlet, death becomes more probable than survival, which means that their life expectancy is extremely short. (It is measured in months, not years.) Now, imagine a future society in which virtually everyone lives to age 105, yet the old-age gauntlet remains entrenched at age 106. In this scenario, the population life expectancy would remain close to 106, simply because so few people would surpass this age.

Now, we can quibble about whether this scenario is likely. (If most people survive to age 105, then the onset of the old-age gauntlet might get pushed back.) But the point is that the mathematics are clear: the onset of the old-age gauntlet sets the effective upper limit to the average human lifespan.

The old-age gauntlet has a sticky onset

Having defined a way to estimate the onset of the old-age gauntlet, let’s see how these estimates vary with population life expectancy at birth. Figure 10 shows my measurements.

As life expectancy rises, the onset of the old-age gauntlet slowly recedes. However, the recession has an intriguing ‘Z’ shape, with a curious plateau at age 102. Why?

Figure 10: The sticky onset of the old-age gauntlet. This chart shows my measurements for the onset of the old-age gauntlet (the adult age where mortality rates exceed 50%), measured as a function of life expectancy at birth. Note: each point represents a binned estimate, in which I first group mortality-rate observations by population life expectancy, average the age-specific mortality rates, and then fit the resulting data with a logistic function, which I use to infer the onset of the old-age gauntlet. [Sources and methods]

I have some thoughts about where this Z-shaped pattern comes from. But first, let’s get to the bad news.

Even if onset of the old-age gauntlet continues to recede as life expectancy pushes into the 90s, the current trend implies a maximum trajectory. The reason is quite simple. By definition, life expectancy at birth cannot (significantly) exceed the onset of the old age gauntlet. But according to current trends, the old-age gauntlet is retreating much slower than life expectancy is rising, which means that the two numbers will eventually collide. If this trend continues, I estimate that the collision will occur at age 117. (See Figure 13 in the appendix for more details.) I consider this age a reasonable estimate for the maximum possible human life expectancy. Time will tell if this prediction is correct.

Back to the Z-shaped trend in Figure 10. What causes it? One possibility is that it’s an artifact of the way I’ve analyzed the data. (I run some consistency checks in the appendix, and don’t find any obvious problems.) But for arguments sake, let’s suppose that the Z-shaped pattern is a real feature of the human experience. If so, an intriguing possibility is that the plateau region illustrates some sort of ‘natural’ maximum for human life expectancy.

Of course, the word ‘natural’ needs some caveats. In many ways, extreme old age is not ‘natural’, in the sense that wild animals rarely reach this stage of senescence. In the wild, there’s too much competition, too many predators, and too many diseases for animals to reach ‘nursing-home’ age. So paradoxically, the ‘natural’ limits of an animal’s lifespan only reveal themselves in the safety of captivity, where individuals are able to die of old age.

By analogy, perhaps we can think of the fruits of industrial civilization as creating a ‘captivity’ zone in which humans can live — a zone that isolates us from the insults of the wild. In this captivity zone, the human body naturally hits its lifespan limit shortly after age 100. With intensive medical intervention, the body can survive for a bit longer. And of course, if conditions of war, famine and pandemic intervene, bodies age more rapidly. But in the safety of the captivity zone, we see evidence for a ‘natural’ maximum lifespan.

(Am I confident in this interpretation? No. I’m throwing it out there mostly as an empirical provocation.)

The march towards equality of life

One of the oddities of the human species is that we are the only animal that is cognizant of its own mortality. Perhaps there is a reason for that.

As a rule, animal reproduction is a killing field. For example, when a female salmon lays eggs, about 99.9% of these potential offspring die before reaching adulthood. Even among our closest evolutionary relative, the chimpanzee, survival to adulthood is generally worse than a coin flip.6 So if other animals reflected on their life prospects at birth, they might be horrified at the injustice.

Of course, throughout most of human history, lifespan injustice was the norm. Many children died young, while relatively few people reached old age. Even as recently as the late 20th century, episodes of vast injustice occurred. For example, in the 1980s, South Sudan endured a brutal civil war, in which food blockades were a common weapon. Tens of thousands died in the ensuing famines, with most of the toll paid by children.

In Figure 11, the top panel quantifies the carnage. Here, the red curve plots the age distribution at death in 1988 South Sudan. During the depths of the famine, the majority of the dead were children under age 10. (In that year, life expectancy at birth was just 11 years.)

Figure 11: Death at opposite ends of life. This chart shows individuals’ age distribution at death in two regions with opposite extremes. The top panel shows the youth-heavy distribution in South Sudan in 1988 — a year marked by a brutal war-induced famine. The resulting death toll was dominated by children. The bottom panel shows the elderly-heavy death distribution in Monaco in 2023, which has the highest life expectancy on record. [Sources and methods]

The good news is that such tragedies are now rare, and the root causes of childhood mortality are easily preventable. The result is that in the wealthiest countries, deaths now pile up on the opposite end of life. The most extreme example of this reversal comes from Monaco in 2023. The bottom panel in Figure 11 shows this demographic upheaval. In modern Monaco, most adults survive to old age, and the most common age at death is 90.7

With these two extremes in mind, we should ask ourselves why the famine in South Sudan is considered ‘tragic’, while the old-age pileup in Monaco is not. Yes, the answer to this question is fairly obvious. But let’s go ahead and spell it out.

The human notion of ‘tragedy’ seems to be tied (at least in part) to the existence of plausible counterfactuals. For example, it is ‘tragic’ for children to die of starvation, because the alternative — not starving — is easy to envision. Likewise, it is a tragedy when a young parent dies of cancer, because again, we can imagine a world in which the parent survived. But when it comes to death at old age, we find it difficult to imagine an alternative (science fiction notwithstanding). Indeed, for all we know, there is no alternative to biological aging. And so we do not consider death from old age a ‘tragedy’. It is simply the natural course of life.

One way to frame this morality is that it describes perhaps the most basic form of human right — the right to die at roughly the same old age. Of course, nature itself cares nothing for this right. But we humans have made it a fundamental social goal. And we have gone a tremendous way towards achieving it.

Let me illustrate this success by quantifying the inequality of the human lifespan, measured with the Gini index. When this Gini index is high, individual lifespan is unequal; most people die young, while only a lucky few reach old age. In contrast, when the lifespan Gini index is low, it indicates that human lifespan is equal; most people die at close to the same (old) age.

With this lifespan Gini index in hand, we can quantify what is perhaps the most stunning yet under-recognized pattern in all of demography. It turns out that the task of extending human life expectancy has been a project of bringing remarkable equality to the human lifespan. Figure 12 shows this pattern. As life expectancy rises, lifespan inequality falls.8

Figure 12: Inequality of the human lifespan. The project of extending human life expectancy is overwhelmingly one of making individual lifespans more equal. Here, the vertical axis shows lifespan inequality among individuals, measured using the Gini index. And the horizontal axis shows population life expectancy at birth. Each point represents a country-year observation measured between 1950 and 2023. When life expectancy is low, most individuals die young while a few live to old age, hence lifespan inequality is high. But when life expectancy is high, most individuals survive to old age, hence lifespan inequality is low. [Sources and methods]

I should add that this wire-tight trend is the sort of pattern that emerges only when there is no social ‘choice’ involved. True, humans choose to extend our lifespans. However, the route we take is non-negotiable. We extend life expectancy almost entirely by keeping the young alive, and not by extending the lifespan of the extremely old. The consequence of this non-negotiable strategy is that human lifespan must become more equal as life expectancy increases.

Now, the dream of longevity gurus is to make death at old age optional. Of course, there is no hint that the elixir of life exists. But if it were discovered, I think that it would almost surely be disastrous. Let me put it this way. Today’s billionaires are able to amass extreme wealth. They are able to accumulate immense power. And they are able to bequeath these gains to their children. But the one thing that billionaires cannot do is hoard lifespan itself.

But what if they could?

Imagine a world in which CEOs are as immortal as the corporations they command. Imagine a world in which the poor are short-lived, expendable ants. Imagine a world in which lifespan is inherited at birth. I cannot imagine a worse hell.

Of course, it’s possible that humans of the future will be able to distribute the fruits of extended living with justness and equality. But then again, given the debauchery of today’s elites, this utopia doesn’t seem particularly likely. Which is to say that while I would personally be quite pleased to live much longer than a century, I’m quite certain that I won’t. Nor, for that matter, will anyone else.

At least for now, I think this human finitude is a good thing.


Support this blog

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

member_button


Stay updated

Sign up to get email updates from this blog.



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


Estimating the maximum possible human life expectancy

Here is an intriguing way to estimate the maximum possible human life expectancy. Figure 13 shows how the onset of the old-age gauntlet relates to life expectancy at birth. (This is the same data as in Figure 10.)

Let’s suppose that current trends continue. For example, when life expectancy climbs above 70 years, we see that the onset of the old-age gauntlet tends to retreat. Let’s imagine that this retreat continues, as illustrated by the red line. While one might think that this extrapolation can rise forever, it actually cannot.

The problem is that given current trends, the onset of the old-age gauntlet recedes more slowly than life expectancy advances, leading to an eventually collision in the two values. This collision signals the maximum possible human life expectancy, since by definition, life expectancy cannot significantly exceed the onset of the old-age gauntlet. Given current trends, I estimate that this collision will occur at age 117.

Figure 13: Life expectancy collides with the onset of the old-age gauntlet. Here is a simple way to estimate the maximum possible life expectancy of the human species. Blue points show the empirical relation between the onset of the old-age gauntlet (the age when death becomes more likely than survival) and life expectancy at birth. Suppose we extrapolate the trend on the right, as illustrated by the red curve. This extrapolation hits a logical limit when life expectancy at birth collides with the onset of the old age gauntlet (since the former cannot logically exceed the latter). This collision marks the maximum possible human life expectancy, which I estimate here to be about 117 years. [Sources and methods]

A consistency check

I find it quite intriguing that the onset of the old-age gauntlet has a Z-shape pattern when measured as a function of life expectancy at birth. The caveat is that I’m not confident that this pattern is a ‘real’ thing.

For example, it’s possible that the dynamics of infant mortality somehow ‘muddy’ patterns which are revealed at old age. One way to remove this effect is to switch from measuring life expectancy at birth to measuring life expectancy at mid-life — say age 40.

As Figure 14 shows, when we make this shift, we still find that the onset of the old-age gauntlet retreats with a Z-shaped pattern (although a more muted one). Interesting, the plateau again occurs at around age 102. Notably, we also find an implied maximum life expectancy, determined by the collision between life expectancy and the onset of the old-age gauntlet. When I extrapolate the right-hand portion of the ‘Z’ (above the age-forty life expectancy of 35 years), I calculate that this collision will occur at age 123.

Figure 14: Onset of the old-age gauntlet as a function of life expectancy at age 40. This chart is conceptually the same as Figure 10, except that instead of grouping the mortality-rate data by life-expectancy at birth, I group it by life expectancy at age 40. Within each life-expectancy bin, I then fit a logistic function to age-specific mortality rates about age 70, and use this function to infer the onset of the old-age gauntlet. [Sources and methods]

Old-age frauds

One last caveat to the analysis here is that the demography of the extremely old is fraught with uncertainty caused by clerical errors and outright fraud. In two recent papers, researcher Saul Justin Newman outlines the reasoning (and the evidence):

The demographic problem stems from the finitude of the human lifespan, and by the fact that exceedingly few people live past age 100. The (unintuitive) consequence is that the population of super-centenarians is likely full of fraudsters.

To see how the math works, consider the following thought experiment. Imagine that among the general population, a tiny fraction of people inflate their age by a decade in order to collect an early pension. At first, these fraudsters are vanishingly rare. But as time passes, the fraudsters become more prominent within their age cohort. That’s because, being a decade younger than their truth-telling counterparts, the fraudsters have significantly lower death rates. And so with each passing year, more truth-tellers die, leaving behind the population of fraudsters. When we pass the century mark, so many of the truth-tellers have died that only the fraudsters are left. Indeed, it is not unrealistic to think that everyone who claims to surpass age 110 is lying.

To back up the claim that many super-centenarians are fraudsters, Newman musters some noteworthy statistics. For example, in the United States, Newman finds that the number of super-centenarians per capita peaked just before the introduction of exhaustive birth certificates. And across regions in England, Newman finds that the number of super-centenarians per capita is associated with several measure of social ill. Regions with more super-centenarians tend to have higher crime, greater health deprivation, and bizarrely, fewer people over aged 90. In short, super-centenarians seem to be most common in environments that are conducive to pension fraud. So if you’d like advice about how to reach age 110, probably the best thing you can do is lie about your age.

Tellingly, some of the (ostensibly) oldest humans have had rather unhealthy habits. For example, Jeanne Calment, the French woman who is touted as the oldest human ever, apparently “smoked daily, drank daily, and ate around a kilogram of chocolate a week”. So either Calment was immune to the well-known effects of smoking and drinking … or she was a complete fraud.

The latter is surprisingly likely. A plausible scenario is that when Calment’s mother died in 1934, Calment assumed her identity to avoid paying inheritance tax. (Calment subsequently destroyed all her family documents.) A few years later, France was upended by the Nazi occupation, which would have made an identity switch easier to achieve. Of course, it is impossible to know the truth about Calment’s claims. But I find it more plausible that the smoking/drinking Calment died at the old (but still realistic) age of 99, than to have attained the unheard of age of 122.

At any rate, Newman convincingly argues that scientists who study the extremely old are gripped by a strong dose of wishful thinking, and that demography statistics past age 100 are rife with fraud.

Sources and methods

World life expectancy at birth (Figure 1)

Life expectancy data is from Our World in Data.

US mortality rates by age (Figures 5, 8, and 9)

US age-specific mortality rates in 2021 are from the CDC, National Vital Statistics Reports. I used data from Table01, conveniently buried on this FTP server. I used series qx for age-specific mortality rates.

International life tables

All other charts in this essay use life-table data from the United Nations World Population Prospects 2024. I used the table ‘Single age life tables up to age 100 – Both Sexes’. Specific calculations are as follows:

  • World life expectancy at age 100 (Figure 2): Series ex gives life expectancy by age for each country/year. I calculate the global life expectancy at age 100 by averaging across countries, weighted by their population. I use population data from Our World in Data.
  • Life expectancy at birth: series ex (life expectancy by age) measured at age 0.
  • Infant mortality rate (Figure 3): series qx (age-specific probability of dying) measured at age 0.
  • Mortality rate at age 99 (Figure 4): series qx (age-specific probability of dying), measured at age 99.
  • Mortality-rate curves by population life expectancy (Figure 6): mortality-rate curves use series qx (age-specific probability of dying). To smooth the mortality curves, I bin the qx data by life expectancy at birth, grouped into life-expectancy intervals of 0.2 years. Then I take the age-specific geometric mean of the qx data within each life-expectancy bin. In Figure 7, I normalize these curves against the data for life expectancy = 35 years.
  • Onset of the old-age gauntlet (Figure 10 and 13): First, I use the steps above to average the age-specific mortality-rate data (qx) by life expectancy bins. Then within each bin, I keep data for age 70 and up. If this empirical data contains a point where mortality rates exceed 50%, I use the R approx function to infer the exact onset of the old-age gauntlet. If the empirical mortality-rate data never crosses the 50% threshold, I fit it with a logistic function (defined by the R function plogis). I then estimate the onset of the old-age gauntlet using the best-fit logistic function.
  • Old-age gauntlet consistency check (Figure 14): I use the same steps as for Figure 10, but instead of binning the data by life expectancy at birth, I bin it by life expectancy at age 40. From there, the same methods apply.
  • Age distribution at death (Figure 11): I use series dx — number of deaths by age. 1988 South Sudan and 2023 Monaco have the lowest and highest (respectively) life expectancies recorded in the UN data.
  • Gini index of individual lifespan (Figure 12): I calculate the Gini index of individual lifespan using series dx — number of deaths by age. (The age distribution at death is equivalent to the distribution of individual lifespans in the given year.) To calculate the Gini index, I first create a Lorenz curve for the age distribution at death. From this Lorenz curve, I measure the Gini index by calculating the area under the curve. (To calculate this area, I use the auc function from the R library pracma.)

    Note that because the empirical data is bounded at age 100, it introduces a slight bias in the lifespan Gini index for regions with a high life expectancy. (You can see this bias in Figure 11, where the age distribution at death in Monaco ends abruptly at age 100.) In Figure 12, I’ve corrected for this problem by fitting the empirical mortality-rate data (qx in each country/year) with a logistic function, and then using this function to extrapolating the dx series well past age 100. It is a fun exercise in computation, but one that actually makes virtually no difference to the resulting lifespan Gini indexes.

Notes

  1. American life expectancy peaked in 2014 and then plateaued for several years before plunging during the pandemic. It has not since recovered to pre-pandemic levels.↩
  2. Until recently, cities were demographic sinkholes where death rates exceeded birthrates. Given the lack of sewers, and the tendency for water wells to get laced with cholera, it’s not hard to see why. Today, we associate long living with fairly advanced forms of healthcare. But early on, the gains came from simple things like sewage systems and water treatment. (Vaccines and antibiotics also made a huge difference.)

    It’s also worth noting that once the perils of contaminated water were discovered (by John Snow in 1855), it took major prodding to get governments to actually do something about the problem. For example, see George Pinwell’s 1866 cartoon Death’s Dispensary.↩

  3. Regarding the metabolic roots of aging, see Nick Lane’s recent book Transformer: The Deep Chemistry of Life and Death. Lane argues that the torrent of cellular metabolism inevitably creates damage, which accumulates with time. In this light, aging is not a design feature, so much as a evolutionary side effect which natural selection can tweak but not remove.↩
  4. Since my topic here is life expectancy, it’s worth noting that there’s a connection between the rate of athletic performance decline and overall life expectancy. A 2023 study by Saul Newman found that among professional baseball players, a rapid age-related decline in performance is associated with a shorter lifespan.↩
  5. In the US, the leading causes of teen death are, in descending order, unintentional injuries (mostly car crashes and drug overdoses), homicide, and suicide.↩
  6. Walker and colleagues estimate that female chimpanzees reach sexual maturity at about age 11. And Hill and colleagues estimate that about 43% of females survive to this age. For males, the survival rate to age 11 is even worse, at about 37%.↩
  7. It’s worth noting that Monaco is a tiny city-state that serves as a tax-haven for Europe’s super wealthy. So it’s debatable whether Monaco’s long life expectancy is actually its own accomplishment. It could be more of a migration effect, whereby the (long-lived) super-rich move there to retire. Still, Monaco’s population illustrates the current upper extreme of human life expectancy.↩
  8. One way to think about this newfound equality in the human lifespan is that we are now the masters of our own ‘natural’ selection. That is, across all species, the gauntlet of youth is typically a major force for evolution, weeding out the ‘unfit’ long before reproductive age. Today, humans have largely succeeded in removing this selective force. It’s not clear what this achievement means for the future, other than that we are the first species to hold the reins of our own selection.↩

Further reading

Newman, S. J. (2019). Supercentenarian and remarkable age records exhibit patterns indicative of clerical errors and pension fraud. bioRxiv.

Newman, S. J. (2024). The global pattern of centenarians highlights deep problems in demography. medRxiv.

The post The Human Lifespan Probably has an Upper Limit … and Why That’s Good appeared first on Economics from the Top Down.

14:49

Stable kernels for Wednesday [LWN.net]

Greg Kroah-Hartman has unleashed six new stable kernels: 6.18.10, 6.6.124, 6.12.70, 6.1.163, 5.15.200, and 5.10.250. Each one contains important fixes throughout the tree; users are advised to upgrade.

Rewiring Democracy Ebook is on Sale [Schneier on Security]

I just noticed that the ebook version of Rewriring Democracy is on sale for $5 on Amazon, Apple Books, Barnes & Noble, Books A Million, Google Play, Kobo, and presumably everywhere else in the US. I have no idea how long this will last.

Also, Amazon has a coupon that brings the hardcover price down to $20. You’ll see the discount at checkout.

14:28

Agency [Original Fiction Archives - Reactor]

Original Fiction Horror

Agency

Illustrated by Jamie Keenan

Edited by

By

Published on February 11, 2026

0 Share
An illustration of a brass key with a skull-shaped bow against a bright blue sky.

An estate agent is forced to choose between a sale and his humanity when facing the inhuman eldritch forces that feed off rental tenants across the United Kingdom.

Novelette | 10,215 words

Mr. Three arrives fifteen minutes before his appointment, then rings the doorbell repeatedly. Three p.m. is a straightforward instruction, with no ambiguity, yet still the piercing sound ruins my concentration. Perhaps he’s hoping the extra quarter hour will help him discover the secret code. Maybe he’s hoping he can win me over, as if I’ve got anything to do with it at all, as if I’m anything other than a worm wriggling on the hook.

He leans on the doorbell again, an old-fashioned one, just a shrill bell echoing up and down the corridor, vibrating the nails of my headache.

I squint down at my phone, trying to remember the correct sequence of buttons, the glyphs that will let me pay off my credit card with the last of my salary. Has to be today or the interest payments mean baked beans next month. I’m taking slices off my debt pile, clinging on to solvency, just about. But a sale lives or dies on appearances. You win by manifesting the person you want to be—that they want you to be—so I have to bottle it all up for the clients. Mr. Three wants me to be fifteen minutes early. Mr. Three wants things on his time. Mr. Three wants an absolute kicking if he doesn’t stop ringing that bell.

The landlord calls me into the bathroom and shows me the state I’m in. I wet my hair down, shoot my cuffs, and straighten my tie in the cabinet mirror, making the best of myself I can as I peer around the distortions in the glass. It’s a cheap suit, and it never sits right, but it’s all I’ve got. This was my first permanent job straight out of uni and the only one offering a guy with a mediocre degree a hefty salary. I know everyone hates estate agents, but I never had a dream, just my student debt. There’s that second shadow on the wall behind me again, as if the mirror is giving out its own light. No time for that.

I open the front door to find Mr. Three leaning on the garden wall, flicking at his phone in the drizzle. ‘Nice and early, I see. Do you want to come in?’ He looks straight past me into the flat, mumbling as he shakes the rain off his waterproof. He’s lean, well-groomed, dressed in unremarkable office wear—a pastel cotton shirt, black trousers, black leather brogues—a man permeated with the quotidian. He should be Rafe’s client, but Rafe has fobbed him off on me. Single, fortysomething, buying past-sell-by-date pork pies for dinner. I see a man of restraint, routines and structure, regular savings and moderation. Fastidious. Immeasurably predictable. Hardly what the landlord is looking for.

I show him anyway.

The property is the downstairs flat of a Victorian terrace conversion. A long corridor reluctantly reveals a bedroom in the original dining room, a dining room—complete with a jug of wilting daffodils—in the original reception room and a kitchen where it has always been, although the bathroom extension into the garden is new. Fully furnished, integrated dishwasher and washer-dryer, access to the dingy garden shared with the landlord, who occupies the upstairs property. Recently repainted, with a particularly muddy red-brown accent wall in the bedroom, it will be several weeks before the mould becomes visible again, by which point the spores will have permeated the new tenant’s skin completely. They will carry the fungus out into the world, leaving traces of it across the trains, their place of work, their friends’ houses. They will hold it close under their duvet at night and coat their guests with every loving hug.

But Mr. Three is more concerned about break clauses than rising damp. He comments on the very competitive rent for the area. He can imagine his finances all the way to next year, while the ichor of blood sacrifices across centuries runs through the bricks and mortar he covets. He thinks wealth matters, that it will keep him safe. His kind are two a penny.

When I explain that all aspiring tenants must provide a written statement, take a breathalyser test, and provide a drop of blood he merely raises an eyebrow and says, “Is that all? The last place wanted my financial records going back three years.” I have to be more subtle normally, but there’s no risk here. I know the landlord won’t accept him. This meagre man.

I steal his breath, prick his thumb. He’s writing down his true names when the boiler releases a powerful crack. I’ve wasted enough of the landlord’s time. I usher Mr. Three out with the constant babbling of my trade, the next viewing arriving, stacked up all day, terribly sorry, such a popular property, call the office if you want to make an offer.

A gust of wind from upstairs slams the door shut behind him, and the pipes growl and creak around me. It’s got worse lately. Its hunger has been growing. Once, deep into a two-day bender I couldn’t afford with the guys from the agency—an early mistake, to think I could buy my way in—Misha whispered to me, “The more people there are on the planet, the harder they have to fight.” He blanched once he realised he’d said the words out loud, that he’d broken one of the covenants of his class. That was the night they brought me in, in a fit of MDMA brotherhood. In their drug-addled way I think they meant it as a sign of respect, that in another life I could have been one of them. The comedown was harsh, but it paled against Rafe’s grey face in the office the Monday after, when he realised what he’d done.

Things never change. Even though there are more have-nots than ever before, power like Misha’s lies in the illusion. They all live in terror of the landlords, and they all wish they could become one.

The game is bringing fresh meat to the table. Anyone can find tenants. It takes a finer touch to procure a feast.

The landlord keeps me busy after Mr. Three, just because it can. By the time I’ve ushered the prospect out the door and back to whatever grey iteration he calls a life, beetles and flies litter the property and a thick layer of grease is spreading up the kitchen splashback. Owning everything doesn’t stop them being petty.

I spend half an hour scrubbing the kitchen clean again, trying not to imagine what kind of fat it is. It’s stubborn, a bloody red-brown in colour, and the air tastes salty as I work. I sweep up all the insect carcasses, and dust down surfaces I cleaned this morning. I’m sweeping the hallway clean, almost finished, when he comes. It’s a tight feeling in my chest like always, a dank stink of panic before he enters me in that thick rush like I am a glove being ripped by ragged claws a sharp tug down my spine and the fit is snug the weight of a heavy blanket so warm in my bed at nigh—

I am an emperor begging for scraps. This is all you can offer? Do you dare to starve me? To draw my hunger out until I am forced to consume you simply to secure your silence?

Legions have crumbled under my gaze, the blood of continents has poured off my back like rain. This world was born from the darkness of my home. You are my subjects. You are tools at my disposal. You are the salt-and-wort tang of marrow in my throat. Your history is my banquet.

You know what I need. I must feed. Nourishment. To regain my strength and cut your plane asunder and open the door to home. Now, share my hunger, feel what waits behind the curtain. Beneath all you know, under the glimmering disorder of your world.

There, can you feel it?

You know what I need.

I peel my eyes open, my head throbbing. Things slowly come into focus, and I see a bright red streak on the corner of the radiator. Probing gently, I feel a sharp hit of pain above my hairline, my fingertips coming away red. I lift myself from the floor, wadding tissues to the wound to stem the bleeding. I watch the blood run back up the metalwork of the radiator as it is sucked into the bleed valve, every last drop.

I panic when I see more on the skirting board. Just ten minutes until the next viewing. I wipe it clean as best I can with more tissues, my stomach twisting as if a snake is coiling inside it.

I’m so hungry.

“Asda Spice called, he says he’s interested in the flat, but has a couple more viewings. Fucking tease, eh?” It’s Misha’s turn in the office today, so he’s running the phones. It’s Saturday, game time in our world, but Misha’s ahead on targets as always. He’s hungry, same as all of us, but gluttons can be lazy too.

Everything is on the line for me today though, last weekend before the salary run. I’m off my monthly and quarterly targets. No targets, no OTE bonus—no OTE and I’m back to syphoning fuel out of Rafe’s Audi to keep my car running. No company car with mileage for me, you have to earn that. Saturday is the day. Today. All the young professional couples are in a thousand knife fights for viewing slots. Everyone is ready to overpay for the prime locations, the recent refurbs, the fully-furnished local amenities and twenty-four-hour transport links. Just one weekend to get it done before they’re back to burning next week on the pyre.

I ask Misha, “You mean Mr. Three, right?” It’s easier to avoid real names, Misha is right about that at least.

“Hold on.” I hear pages being turned, then he says, “Three p.m., Tuesday. You called him ‘indigestible.’ The landlord wasn’t a fan then?”

“You could say that.” I barely slept last night, with my throbbing skull and the whipping ruination of my guts. The cut on my head doesn’t show to clients, at least.

It’s not the first time the landlord has taken its anger out on me. I’ve tried everything for my stomach across the last year—eating, not eating, probiotics, a high-fibre diet, carb loading, spirulina shakes, keto and paleo diets, the 5:2, milk of magnesia—but I still feel like mouths are birthing inside my bones one tooth at a time, feeding on my marrow like it’s egg yolk. “Tell me you’ve got something good set up.”

“Yeah, I do. Rafe handed one over last night. They’re in a rush and he’s booked up with the Anscombe-Branks couple. Said he’s already sampled and they’re ‘plump for it.’” Rafe is another public-school boy impervious to his averageness. His clients get names; they have futures. Misha’s run with him since they were kids. They’re both from families that have served the landlords for generations, this whole fucked-up social scene of intermarriages, secret handshakes, and disclosing which landlord they’re under before they make out. Kids born into it. Fucking travesty of a childhood, if you ask me, turning out these stunted little men who thrive on their inadequacies. It’s my sole consolation since taking this job—because I can never leave it now—at least people like Misha and Rafe finally make sense.

“Send them over. Don’t screw me on this one, Misha. I need the sale. The landlord is already talking about asking the agency for a volunteer.”

“Keep your merkin on, twinkletwat,” Misha laughs, but it’s hollow. We all know the stories, and we all believe them.

Don’t be a Barnaby, they say. They bat it about the office, braying like donkeys as they talk about old school friends and the depraved shit they did. Rafe was the one who told me what it meant, eventually.

Oh fuck, Francis, this is just the funniest fucking thing you’ve ever heard. So Tobias was the most extreme bender in the school. He’d stick his dick in literally anything. Once over the Easter holidayshis parents were on safari and Mummy had taken Father to Antigua for their anniversarywe broke into the school’s wine cellar and got absolutely rascalled on vintage amontillado, totally blottoed, and he fucked a loaf of bread right in the breadbin, then left it there. Pre-buttered toast! He’s such a fucking delinquent.

The morning after that, hanging out of a dog’s arse, Tobias’s got a telegram from his MamaUncle Barnaby had to volunteer. Total calamity for the family, obviously. Barnaby was doing super well until Black Monday, when he got wiped out. From star agent to impoverished cretin overnight, selling off his stockholdings and properties in secret until there was nothing left. He started turning up to work in suits from Marks & Spencer, if you can believe itand, you know, there’s no coming back from that. Poor old Barnaby was given a choice in the endand he bloody well stumped up. Took out life insurance then volunteered himself to the landlord. Tobias said his family ended up buying a house in Reading with the insurance. Poor bastards.

Poor Barnaby, if you ask me.

Misha says, “All yours. They’re booked for this afternoon.”

Misha sends over the written statements from Mr. and Mrs. Four-Thirty in advance, so I read them in the car, where I’ve parked several streets away. It’s over if they see me climbing out of my rusty, dented old Nova. They need to believe I’m one of them. He’s oversold it, he always does, but there is something there.

Mr. enjoys a career in finance with the investment branch of a leading multinational bank, where he is training to serve high-net-worth clients. He was cox for the college first boat, and played 1st XV for Richmond’s Under 21s. In his spare time he plays jazz saxophone (only at reasonable hours haha!).

That’s all in the past, now he spends fifteen hours a day in one of the glass-and-chrome prisons on Bishopsgate. Entry-level smell to him, fresh out of the packet. They mention the rowing at the beginning, while they still remember what it felt like to watch the sunrise over frosty meadows from the river. Still, his first job will out-earn everyone I knew at Oxford Brookes. One and a half miles, and generations of wealth separate us. It’s all about the pursuit of wealth for him, his path to success a coded labyrinth of status. It’s nothing as crass as money. He’ll earn a fortune and never be free to spend any of it.

Mrs. gained her MPhil in the radical political roots of sixteenth-century Japanese ceramics at Goldsmiths, where she worked with such artists as Beth Lo and Jonathan Yamakami. Her own work focuses on reimagining kintsugi traditions in the post-colonial Anthropocene spaces of twenty-first-century London, using materials such as reclaimed plastic and Victorian glass she finds as part of her amateur mudlarking team. She is a social media manager working for a major high-street biscuit brand.

She’s the catalyst, of course. Mr. drank the Kool-Aid, but Mrs. spent too long nurturing her essences to ignore them. All that hope and imagination will fester. She’ll start nesting and going out with new friends Mr. has never met, forgetting about kintsugi but taking up pottery, perfecting glazed marigolds on handmade teacups. Anything to fill the time as Mr. works longer and longer hours, then weekends and public holidays. As she realises she has more and more money to replace him with, and her specialised knowledge of obscure arts is cracking with age, and the only gold she has is wrapped tightly around her finger.

Rafe is right, give them a few years for their despairs to flower, and they’ll be perfect. But I have days, maybe hours. I get out of the car, straighten my tie in the wing mirror, and head for the property. 

Mr. and Mrs. arrive on time, announcing themselves to the street with an avalanche of clattering heels and muttered swearing. They walk with all the arrogance of a young couple masquerading as shambolic—bickering and boundlessly confident.

The simmering resentment of their argument helps, so the door whispers open to a brightly lit corridor, the air soft and warm on the skin as they step in from the cool afternoon. The shadows of leaves dance on the hallway walls, hinting at an Arcadia just beyond the combi boiler. In the bedroom, bedside lamps cast friendly glows on the burnished terracotta accent wall, the newly made bed lacking only a chocolate on the pillow. The carpets are plump and fresh, like spring meadows beckoning bare toes to relish in their pile. In the dining room, a shaft of sunlight picks out the vase of pussy willow, complete with silvery silken nubs.

Mr. and Mrs. immediately fall into their roles, their conflicts suppressed so easily, and start planning out their new lives. Where their TV will go, “It’s 4K, 72 inches, total beast, you know,” and then the sofa, the prints, the cabinet for displaying Mrs.’s pots. How well their linen suits the walls, the red such a bold choice. Soon they’ve held dinner parties with Tracy and Alex and Alex and Alex. The tipped heads and laughs as they tell me, “We only make friends with people called Alex,” as they open kitchen cupboards, barely looking inside. “Just don’t tell Tracy, haha.”

Mrs. lets slip a hushed, perfectly enunciated, “Oh fuck,” when she opens the last cabinet and a sharp twist of metal from an old broken latch just inside the door bites at her finger. She sucks a drop of blood from the tip, and looks at me nervously. “Sorry, that hurt a bit.”

“It takes more than that to upset an estate agent, don’t you worry. We’ll get that fixed right away.”

Mr. isn’t paying attention to his wife, instead leaning over the sink to peer into the garden. The window is the only thing not gleaming clean. He huffs a heavy breath, which vanishes into the glass as the landlord steals it away, onto a smudge, and wipes with his sleeve to make a tiny clean patch. He can see thick brambles and tall grass. “Do upstairs not use it at all?” he asks.

“Not really, as you can see. Upstairs mostly keep to themselves. I’m sure they’d be delighted if you wanted to take it on as a project.” The couple flinch, Mr. gasping in shock, as an air bubble suddenly squeals through a pipe like a distant howling dog. “You would need to ask permission first, of course.”

Mrs. laughs and says, “He’s not really a gardener. More a concrete-it-all kind of guy, aren’t you, babe?”

He replies, “I could be up for it. Look, it’s west facing. Lovely light in the evening. We could have barbecues. I can finally show Alex how to make a proper burger. I have the best recipe.”

Mrs. continues to suck at her finger, which hasn’t stopped bleeding. She looks like a little girl upset at Daddy, while Mr. dreams of the man he’ll never be.

I tell them, “I’ll give you a couple of minutes to yourselves.”

Paltry morsels. I grow more hungry with every rotation of this pathetic globe.

I remember how it felt when we first saw your kind shining in the darkness. We grew fat on your souls even as you cowered. We were titans you dreamed of capturing in stories. You so few, but so bright. Swollen, fat with light in your hovels. You were succulent. Your essence cascaded through me as I gorged myself.

Endless forest covered this world, a vast animus that sang like the spirit shrikes of home, root and claw, earth and taint. But the parasite has no regard for the beauty of the host. You have sullied your flesh, made poison of your flesh. Your tiny cruelties. Cobbles and bricks and fire and concrete and cities and smog and wealth and cholera and poverty and rivers of shit in buried tunnels and vermin and rust and rot and mould and waste and tiny jealousies and gold and gold and gold and luxury and greed and ownership.

So little, made from so much.

My empire is reduced to solitary watchtowers. My army is a facile child. My altar this house.

Just once more. One great meal, and I will rip open the air, return to the beautiful shadows, where space is a dream, where all these limbs and muscles and flesh and blood and bodies are nothing.

I come to slowly, drifting in and out of the narcoleptic haze the landlord leaves me with after a consultation. It has returned to wherever it is it spends its time. It is dark. The Four-Thirties left hours ago.

I’m on the bathroom floor, so I push myself up on the bath to turn the light on. The bulb carves stark shapes from the room, leaving thick slabs of shadow behind every angle. In the mirror, I check the extent of the abuse. My face is sore, where I must have bruises forming. A whispery grey form behind me seems to caress my cheek. I double over as hunger staples my stomach into ever smaller pouches.

I breathe deeply until the pain clears. Eventually, I draw water from the sink for a drink, hoping I can trick my starving body into quieting, if just for a moment. Looking at the mirror again, I see my eyes are bloodshot, with shadowy bags underneath. And the dragged finger-mark smears on the glass tell me it tried to reach something in the reflection again. What is it looking for? Can it open a doorway there, truly? Does it just like torturing me? My stomach unleashes its fury again in all-consuming cramps. I need to sleep. To eat.

The doorbell rings. Strange. It’s late, early Saturday evening. Nothing is booked. My clients are all preparing for nights out with loud music and shitty coke. I check my phone—no messages from Misha. I head for the front door, leaning on walls to stop myself tumbling to the floor.

I open the door to find a woman who looks as exhausted as I feel. Forty-something, mousy hair, on her way to curvy, dressed in high-street denim. I doubt she can afford this place. She was pretty once, past the wrinkles that have consumed her youth, under the black bags of her eyes. Her hair is loose around her shoulders, the collar of her jacket high and buttoned closed. She quivers, like she’s on the cusp of screaming.

A tiny face peeks from behind her thigh—snotty, tearful, and full of the remorseless sorrow of a child. The woman breathes in sharply, spreading her hands to grab the invisible reins of the doorstep, as if she’s afraid it will buck and throw her back to the kerb. “I saw the sign. The ‘to let’ sign. And I saw the light on. I thought maybe I could . . . Could I? Bit of an emergency, really.” Her smile is all mania and fear.

It’s time for me to be knocking off and getting what sleep I can before Sunday’s viewings. Behind her a group of lads walk along the street, chattering like rooks, no doubt heading for the pub. It’s the time when the drinkers annex the streets for another night. No place for a child. I need to go home, swallow as many painkillers as I can, and force down whatever food the landlord will allow me. Wash. Try to sleep. But the way this mother keeps shooting glances over her shoulder gets to me. It’s not those lads. She wants to be off the street.

I step back, and welcome her in with an arm. I say, “Sure, I’ve got a bit of time, nothing planned for tonight anyway. Let me show you around. It can be a lovely place, for the right viewers.”

She scuttles into the hall, pulling her daughter with her, and shuts the door quickly. Her eyes linger on the locks an extra moment, as if she’s memorising each one, learning how it can be opened. Lost in a private catechism, she gives herself permission to breathe again. She rests both palms on the door for a moment, then says, “Love the place. How much is it? I can move in tomorrow, all packed and ready to go. I can pay the deposit, I’ve got some money put aside. Really, honestly. How much is it?”

“It might be best if you can call the office in the morn—”

“No! Sorry, no. I need a place right now. I’ll sign whatever you want. Please.”

She pushes past me down the hall, turning sideways to fit through the space, so that her jacket catches, the button at the neck popping open, giving me a flash of finger marks on her throat. Dark, livid, deep. She quickly closes the buttons and disappears into the kitchen.

I bend down to the little girl, who is still in the hallway with me, smile, and put out my hand for a shake. “Hello, I’m Francis. Do you want to live here with your mummy?”

The girl looks past me, then runs after her mother in silence. I follow through the door to find the girl tugging her mother’s elbow and whispering loudly, “I don’t like it here, Mummy, I don’t like it.”

Behind them, in the bathroom, I see an oil-thick shadow vanish through the doorway, catch a glimpse of a baleful red eye blinking closed in the cabinet mirror.

The landlord never comes to the property until it’s ready. For it to show itself now means . . .

I walk over to them and start to lead the pair of them out of the house. The mother tries to shrug off the arm I extend over her shoulder, then grunts in pain and shock as I shove her into a wall. “Sorry, but actually I can’t have you here. I’d lose my job if they thought I was doing things off the books.” At the door to the hallway the mother starts to push back out of some instinct for resistance, punching me weakly with a courage she is clearly still new to. The girl is retreating down the hallway, turning to the front door to open it.

There is a loud thump, as if a wardrobe fell to the ground upstairs, followed by the sound of something heavy dragging across the floor, just once. Chilly tendrils reach for my back, scraping at my skin with a slick, viscous quality. My skull tightens, as if claws are squeezing me, and the tips are chiselling into my temples and in the centre of the fractured seam at the top, my fontanelle, where once a throbbing membrane of skin was the frailest of partitions between my mind and that which is.

I grip the doorframe around me tightly, feeling my nails digging into the wood, splinters shooting up into the nail beds. The pain—the physical pain of my body—gives me focus, pulls me back into myself. I keep clawing at the wood, dragging the flesh and bones of myself over the threshold, reclaiming myself from the landlord one traumatised nerve at a time.

From the garden path, the mother stares at me in anger and confusion at her eviction.

I tell her quickly, while I still can, “We’ll get you signed up tonight, not a problem. Come with me to the office so we can do all the paperwork.”

The mother breaks and she starts sobbing openly with relief, a lightness in her voice as she starts thanking me over and over. I barely hear it, just usher her out of the garden, telling her to wait there while I lock up, how we’ll go to the agency straightaway, this endless gabbling sales patter coming out of my mouth while I’m focusing all my will on pulling the door shut behind us.

The pain in my guts expands to fill my entire torso, bubbles of agony bursting in my lungs. I feel like a constellation of flesh. I burn with an acidic compulsion to go back into the house, my feet dissolving with every step I take further away. The tendrils have thickened to tentacles, wrapping themselves around me, ripping away my skin then immediately coiling around me once more like an insatiable polyp.

Somehow, I stop myself from screaming.

Her.

The child.

Now.

Misha looks up in a panic as we walk into the office, scraping the line on his desk into the bin. The mother and girl wait nervously by the entrance as I walk to the back to talk to him. He bats his nostrils back and forth, sniffing repeatedly and says, “What you doing here, Frankie? Past business hours, I’m closing up in a minute.”

“Big night planned, is it?” Of course it is, always is for his type. 

“Just wrapping today’s sales. Rafe did Tiverton Street. Two hundred over asking, drinks to celebrate, you know how it is?”

“Thanks Misha. I didn’t, but I do now.”

“I’m not doing new clients. Lionel’s got the morning, saddle him with it. Come spend some time with the lads.”

It’s said out of good form as much as anything—there’s no expectation that I’ll actually go, or that they’d be happy if I come. I can’t afford their lifestyle, and they don’t understand mine. It’s just how it’s done. I don’t give a shit though, I need him gone. “I’ll do it, got a good feeling about this one, you know? Leave the sales, I can do those as well.”

Misha doesn’t hesitate for a second, breaking out a Harley Street smile and saying, “Brick. You’re a total brick, Frankie. I owe you one.” He swirls his coat up off his chair and shoots out the door to whatever basement cocktail bar Rafe found on TikTok this week.

The landlord’s grip on me weakened as soon as I made it out of the house. It knows I must bring it what it wants through official channels, that it can’t risk close investigations of the flat, so it had to let me go. Even so, I feel weaker than ever.

I slump into my chair as the mother and girl settle into theirs on the opposite side of the desk. The mother keeps her coat buttoned tight, sitting ramrod straight on the edge of the seat. The girl frets the cuffs of her coat, tugging at a loose thread in silence.

I search our list of active properties, hoping it’s still available, relieved to find it is. None of the guys care about filling it, the owner being a human. Worst of all, a human who has given us explicit instructions to hold the rent below market rates. One Mrs. Whetherell, owner of the two-up terrace next door to hers, her mum’s old place, empty since she bought the neighbouring property and moved into that. This lady has lived either side of one wall her entire life. It’s small but clean, in good school catchments, but is too far from the station to attract commuters. The photos show ’70s textured wallpaper, swirly brown carpet, and commemoration plates on the wall for every royal wedding—at least until Charles and Camilla. And there’s a vast wealth of shortbread available for anyone savvy enough to compliment her baking.

I take down their names—Maisie is the mother, Alba the girl—and just a few more details, trying to avoid it coming across as interrogation. She’s been through enough. The bruises on her neck are like ink stains from a glove.

Maisie breaks down when I eventually show her the property and she hears the price. Maisie needs a place to live, not a manifestation of ambition in brick and designer furniture. She needs a door she can lock. She needs to be able to take a breath and know that the next will happen just as easily. Mrs Whetherell just wants nice people to live next to her. Mrs Whetherell just wants some company.

Maisie hugs her daughter tightly and says, “We’ll be okay, honey. We can make this work. New school, new friends, new start.”

Alba whispers back, “I don’t want new friends, I already have friends. I don’t want to move, mummy.”

“I know, darling, but we have to live somewhere new. Now that daddy is sick.” She looks up at me, pleading with me silently to condone her deception. Begging me for mercy, as if I am master of her destiny. All I do is let flats, and lie to people.

Alba asks her mother, “Is this going to be like the other house? I didn’t like the other house. The bathroom troll was scary.”

“What bathroom troll, darling? You didn’t even see the bathroom.”

The girl clams up and glares at me with the fury her mother should be letting out. She knows, fuck knows how, but she does. I wish it was a troll, something contained within arms and legs and teeth. Something that could be killed. If she knew what that splintered orb in the mirror belonged to, the swollen protuberances of its limbs, the endless twitching tentacles, the tiny biting mouths that open up at random across its body.

I don’t even know how many of them there are, how many companies exist to serve them. What if they’re everywhere, hiding under factories and warehouses as well? What if my one is the runt of the litter, a bullied god of hate punching down. I checked the agency records once but they’re encrypted, so I only know the entity that uses me as its tool. I hope that they only exist in this country, that there are places free of their infestation. I pray, though I know it isn’t true, that I’m the only slave they control. I don’t even have a name for them, despite how intimately they violate me. It’s different for Rafe and Misha; his kind are employees, inheriting that fig leaf of freedom. Rafe told me that I’m the only person they’ve told the truth, that no one else outside their families even knows they exist. I’ve been fucked ever since they got me high and opened their box of secrets to me. Flushed with serotonin, my saucer eyes gazing into the abyss, they told me we were brothers, joined by something greater than us, and, fool that I was, I believed them. All I know is that without them our agency would shrivel and die, shutters pulled on shiny offices across the city, maybe the country. Inheritances would evaporate. Misha would need to pick a cheaper drug habit, or find another host company to burrow into. Rafe would float on into another fortune, impervious to it all. The other junior agents—the ones who believe all we do is let flats—would need to get actual jobs, and I, well, I pray for it every day.

I’ve seen the glistening flesh of a boneless snake running through the pipes, drinking down the effluence, every drop of piss and blood, every scummy-watered bath. I’ve coddled nervous tenants, telling them that the noises from the roof are anything but ravenous creepers, a multitude of them hunting with one mind, each little more than claws and scales and hate. I’ve tutted and sighed about sound insulation when I know the bricks whisper and scream and fight and smash and howl in their dreams every night. I’ve prattled on about architectural oddities causing feelings of claustrophobia, as the very space around us is being chewed upon like cud, and the room sucks the life from its inhabitants in a desperate act of self-preservation. I’ve watched people twitch and fidget, their hindbrain knowing something isn’t right even as they tell me they love the place, not feeling everything reflecting back on themselves, their thoughts gulped down and spat out half chewed, their hopes and souls flayed in layers so fine they never notice how they are diminished, how every sudden draft passing over them is another piece of their essence consumed by the landlord.

I realised, after a few weeks working at the agency, just how many I have lived with in my life. All the shitty house shares I’ve tolerated. The years my asthma flared up, my eyelids erupting into hives with allergies, the smothering weight of depression trapping me in my bed. The country has been infested with them for centuries, but only now I know they are there can I see them. Now I’m like Rafe’s lot—profiting by helping the parasites. The obscene cost of renting a home is the final insult—the banality of hiding darkness under the naked cruelties of money.

I used to think that I was responsible, that my choices had some kind of effect. But there is no choice, not while the landlords are still here. Not while a few people can get rich.

That’s what I think as I look at Maisie hugging her daughter tightly, lest the wind rip her from her arms. Nothing I’ve done can be changed. I’m complicit, just like we all are. All I can change is what I do next. Maisie has escaped, and Alba has never known anything else.

I can’t give them to the landlord.

It’s past 10 p.m. when I unlock the door of my one-bed flat on the edge of the industrial estate near where the bypass spews endless traffic into the city every hour of every day. It was sold as a new-build years ago, morphing into something uncategorised and undesired now that the newness has worn off. It’s a shell at best, full of draughts, leaking seals, and cracked housings on the appliances.

But that’s it.

With my parents, content with their middle-class careers in the town hall but all their wealth tied up in equity, a mortgage is an impossible dream for me. The Bank of Mum and Dad is already in hock. So I am slaved to the indenture of my home, paying rent on credit and paying off the credit with my salary. If I pay to have the mattress steam-cleaned I can’t pay for a dehumidifier to stop the mould. Do I fix a leaking washing machine or the dripping cistern that stops me sleeping? The lock on the front door or the bedroom window? Why bother at all when the frames of both are warped?

I kick the clothes strewn across my bedroom floor into a pile and straighten the bedding, as Maisie follows to lay a barely conscious Alba down to sleep. I head for the kitchen as she settles her daughter, looking through the cupboards for anything I can make dinner from. Tomato puree, a huge bag of paprika I’m sure was here before I moved in, and one tin of red kidney beans. The fridge is empty except for a can of Red Bull.

I close it and turn around to see Maisie standing in the doorway, studying me. She’s taken her coat off at last, tucked her hair behind her shoulder to reveal the extent of the bruises. She fronts well, not showing me any weakness. I take my keys from my pocket and slide them across the tiny kitchen table towards her.

“That’s the only set. No bolt on the bedroom door, but there’s a few weeks’ worth of laundry you can block it up with. I’ll sleep on the sofa.”

She picks up the keys in silence, coils a fist around them so the stick out between the fingers. “What do you want from me? What’s the price?”

“Nothing.” Penance. Salvation.

She sniffs, looks back over her shoulder to the bedroom, hearing the twist of duvet or some tiny whimper from Alba perhaps. “You try a single fucking thing and I will kill you in your sleep.”

I nod, not really sure what to say.

She takes a moment longer to think, then says, “Do you want some dinner?”

I am a hollow ghoul, thinner than I have ever been. I’d chew my own fingers to the bone if I thought I could keep it down. Christ knows what I look like to her, taut and shivering with nerves, hunched over the vacuum of my stomach. “Can’t really cook much,” I confess.

“I can cook.”

“There’s nothing in the house anyway.”

“You look hungry, you know. Like . . . I mean, not well.”

She makes me laugh, despite it all. Not well. As if there’s a cure for what I have. But people do eat, normal people at least. That’s what I should be doing, and maybe that’s what she needs. A normal night doing normal things.

I grab my coat, check my wallet is in there, and say, “I’ll go buy some bits. Buzz me back in, yeah?”

She nods, something in her relaxing as she realises I’m leaving her in my home. That I’m offering my secrets up to her, without asking her any questions. That she can lock me out.

I squint against the bright lights of the corner shop as I fill a basket with vegetables and chicken, trying to remember what a meal looks like. The tightly stacked rows of boxes and tins, with their glossy images of meat, fruit and vegetables look like the building blocks of something I no longer understand.

Back at the flat I find Maisie drying my pans, the kitchen newly cleaned. She takes the bag and waves me to sit down with a soapy hand. She works in silence, and I am too tired to ask any questions. My life is an endless, meaningless chatter, and I already know everything I need to know about her. The next half hour is filled with scents as she prepares a meal. Simple, homely, rich herby smells that fill my house and my head.

When she puts the plate in front of me I am surprised to find myself hungry, my stomach gurgling in anticipation. I take a fork and lift a tiny amount to my mouth, blowing gently to cool it. Maisie watches me keenly, and there is little trust in her silence. She stands leaning against the counter, my chef’s knife next to her. She’ll barricade herself in with her daughter until morning, I know. 

But first, I eat.

The Four-Thirties are holding hands and harmonious when they arrive for the second viewing. Rehearsals went well then. They are dressed for a party—Mr. in chinos and a pastel shirt, a jumper most unironically over his shoulders, Mrs. in a flowing cotton Laura Ashley dress and bright green wedges—their chat all reminders that Alex is a stickler for punctuality, not like Alex, haha, oh Alex, at least Alex buys Sabra hummus, none of that wallpaper paste they sell at Sainsbury’s, haha. Mrs. runs delicate fingers capped with immaculate nails—and a sticking plaster—over the furniture as she chatters, a mantra of privilege I’ve seen a hundred times.

This time, they play their parts perfectly. Mr. goes out into the garden, treading down the brambles, and maybe he doesn’t hear the chitters and rustling of vermin in the undergrowth, because he comes back tutting and wiping his hands like a mechanic hoping to fleece some old dear out of their pension. “It really would be such a lot of work, almost worth a reduction in the rent, haha.”

Mrs. is waiting for him in the kitchen, peering at the boiler with feigned comprehension. She turns back to me slowly, leading with her head, her finger lingering on the fitting with a languid ease. “When was this last serviced? Really, we were expecting a heat-exchange system at this price.” Behind her, the shower curtain flicks out of the bath like a snake’s tongue. “It’s draughty too. When did you say the windows were installed?” They are full of their parents’ standards, hoping to shape the world the only way they’ve been shown how.

The shadows in the bathroom strengthen, pulling in more light, as claws scratch at my temples. The Four-Thirties have misread the power dynamic, and failed to account for all factors. They think they’re up against me and my cheap suit. Misha has told me how none of the landlords like negotiating, and that this is one of the worst—it despises anything other than total acceptance of its terms. Wheedling and bargaining hastens its hunger, shortening the eventual tenancy. Talk of rights and duties sparks cacophonous outpourings. The sacrifice must be willing.

I usher Mr. and Mrs. away from the bathroom and back to the front bedroom, where weak sunlight barely pierces the growing gloom. We file into the room, the couple settling into the angles of the bay window, and convene around the bed under the sodden pottery colour of the accent wall. They share a quick glance, Mrs. giving a barely perceptible nod, revealing which of their parentage carries more weight. Mr. beams back at her, stuffing his hands in his pockets to hide his excited fidgeting. Mrs. is more restrained, offering a tiny smile as she says, “We’d like to make an offer. How many other viewings do you have?”

“Just a couple more this weekend,” I say, swallowing a retch. It would make no sense to them, how little their money changes things here. I long to scream, “Yes, take the fucking flat! I hope you both die in this bed,” except long, hateful fingers are squeezing my chest and pushing me into the carpet. My body doesn’t feel my own as I say, “I have to finish this round of viewings. Give me a call at the office tomorrow, and we can talk it over then.”

They are clearly at a loss as I usher them to the front door. Now, finally, they have noticed something that isn’t right. A sacred covenant has been broken, that of wealth’s command. They carry the petulant faces of children first encountering the banal horror of the world, their toys no use out here. Mrs. looks back into the bedroom one last time, her gaze on the pillows so fat and welcoming. She is dreaming of mornings they would spend here, stories to tell their future children. Except her father didn’t warn her about mattresses. Fathers only ever think about boilers. They don’t like to think about their daughters all sweating and drooling and fucking on the same mess of fabric and coiled metal; they forget about legions of mites and worms and parasites that colonise the spaces closest to our skin; they cannot imagine inhuman intelligence permeating our flesh and coiling around our inner beings with every slumbering breath.

I follow them, keeping my gaze on the couple, out to the street as I lock the door. The landlord has to let me go, but it still tears at me as I deadlock the door, my skin feeling so tight it might rip, my fingers splaying against the dank paintwork of the door.

Feeling like I am pulling a tooth from a jaw, I tug the key free.

All my power pushed into so little flesh. So weak, incapable of mastering even yourself. How dare you be so tiny, so undeserving. What use are you? What function have your kind? What indignity that we even converse, you protoplasm, you molecule, you prion.

Civilisations have waded through mud in my honour. I have bathed in the souls of creatures who barely knew my name as a whisper in the darkness. I was adored, enduring their outpourings of love like the filth it was.

Yet you, mote, feel me within your skin. You, atom, defy me.

You will bring me the mother. I will have her child.

Then I will sear every particle of your being from this plane. I will sunder your essence into a multitude of sufferings and cast them across the fields of home.

Eternity will be yours.

Mrs. Whetherell slides a plate (Elizabeth II and Philip, original judging by the aging of the gloss) of chocolate chip shortbread towards Alba. The girl has opened up in her presence, a willing victim to Mrs. Whetherell’s ancient magics.

Mrs. Whetherell then offers a shortbread to Maisie, and lastly me. “Come on, lad, you look a bit peaky. I’m not one to brag, but these shortbreads were good enough for a Lord in 1987.”

“They look fresher than that,” I say with a wink.

Mrs. Whetherell laughs and says, “You wicked boy. Asda’s garibaldi’s for you, then! Only good boys and girls get my shortbread.”

I laugh for the audience, but the early morning sun cuts through me like a knife. Or maybe it’s easier to blame the light for how the darkness is slicing me up. It’s all I can do to sip water.

The landlord is weaker here, on the other side of town. But it still wants my attention every second, and I can feel it scratching across the roofs, up and down the streets, searching for me.

I leave them to bond, barely able to concentrate on talk of schools, homework, and favourite animals. I’m not needed any more. I’m nothing more than a glorified administrator now that I’ve arranged the introduction. But when Mrs. Whetherell says, “What made you decide to move with the little one?” I jump into Maisie’s moment of hesitation. I can see how the question drags her back in an instant to the violence she’s desperate to escape. Violence that is still happening for her, right now. I can see her trying to condense everything that led her here, with just Alba’s ragged unicorn, a rucksack of clothes, and her bruises, into the words that will convince this kindly old lady to take her in. But she can’t speak without ripping her heart out of her chest and dropping it onto collector’s china, to drip blood between biscuits and royal paramours. Maisie has lived by will alone for who knows how long. It’s clear to me she’s not even sure she made a decision, or if she just ran. So I speak for her, I take that choice away from her. I manipulate people, no doubt about it, but sometimes I can do it for the right reasons.

I lean over to Mrs. Whetherell, giving a conspirator’s wink, and tell her, “They’ve been looking for somewhere quiet, away from the noise. They’re knocking down some ex-local flats next door—the solid ones from the 1950s, they don’t make them like that any more do they, Mrs. W? You know those new apartment buildings, no sound insulation at all. It’s diggers and cranes all day. Add in one bad neighbour and . . . They get so much homework, from such a young age these days.”

Exactly on cue the granny I wish I’d had tips her head and says, “Aww, poor pet. It must be so hard bringing up the little one like that. Have you a garden? No outside space? That won’t do, the little ones need to be outside.”

“I know you’ve been looking for some nice, trustworthy tenants, and I’ve known Maisie and Alba here for years.” Maisie shoots me a glance, surprised at the ease of my lies. “To tell you the truth, I got them that last flat. I didn’t know about the new developments, and we had no idea what the neighbours were like, I swear. I’ve felt awful ever since. But then I realised, I could make it up to them both . . .”

She swallows it all, of course, and Maisie keeps her lips clamped shut. Mrs. Whetherell lives in a world where dishonesty is a thing for television and the newspapers. People don’t really lie to each other, not real people. No one could ever look a mother in the eye as they’re gouging her for every penny she’s got. No one would hit a child.

She pats me on the hand and says, “It’s not making mistakes that matters, but what you do after. Bless you, my boy. Now, you two young ladies, would you like to come see the garden? I hope you like strawberries, I can never eat the whole crop.”

They head into the kitchen, following the lingering smells of baking out into the sunny garden. They are already meshing into a new family, both Maisie and Mrs. Whetherell smiling as little Alba dashes out the back door, turning back to beam a smile at us all before skipping onto the lawn.

I can’t watch them for long. Something about the purity of the scene makes my scalp itch. It’s like happiness can’t find a home in me and instead is crawling the inside of my skull in search of an escape route.

I retreat to my car, planning to confirm bookings with more young couples, more new builds, more prefabricated units, more tributes. But as I settle into my seat my phone rings, an unknown number.

“Is that Francis?”

“Speaking, who’s calling?”

“It’s about the flat. I’ve been looking over a few numbers and, well, I would like to make the landlord an offer.”

Mr. Three. Lionel probably gave him my number, the conniving little shit. And Misha put him up to it, I’m sure. “I’m not in a position to negotiate. You should speak to Lionel in the office.”

“He told me to call you. It’s a good offer, fifteen percent over. It’s a good price. You won’t get more that far from the station.”

The tone of his delivery is quite incredible. In his mind the conversation is already complete, and we’re just going through the motions. “Really, I can’t—”

“How about I mail it over? I’ll do that now. Okay?”

It’s the way he says “Okay?” that triggers me. The exactitude that would flatten my agency, render me just a tool at his disposal. People shouldn’t be used. People shouldn’t conform to tiny expectations. People should be wild and unpredictable and fierce.

I hold the phone before me, surface to the sky like a prayer as I respond: “I said no, so fuck off.”

I hang up.

The coat hangers scrape at my skull the moment I get out of my car, dragging me towards the door of the flat. I brace against the vehicle, dry-heaving a wisp of tar, when my phone pings loudly. Misha has sent me the tenancy agreement for the Four-Thirties, agency boilerplate locking them in to twenty-four months, with rent reviews at months twelve and eighteen, and no right to appeal. He included one of his usual inspirational notes as well: Fuck-de-doodle me, golden-nips. You suddenly grown a pair? You might just last in this gig after all. That or two hundred carnations for mumsie next week. I’ve got £100 with Clarence you don’t sign it, so chin up, my proley baby. M xoxo

The truth is I’ve never heard of anyone attempting to force a tenant on a landlord. Rafe has joked about it once or twice, in a fit of coked-up bravado late on a Friday night, but it’s just one of a multitude of empty brags that he spouts. He struts like a cock when it’s just us in front of him, but I saw how he looked the night he came back from Beulah Road after the tenants vanished. Ten days they’d lived there, not even a fortnight. He never said what happened, but he was as white as ash, and he shredded the invoice from the cleaning agency before any of us could see it. Something broke inside him that night; an essential part of his inhumanity collapsed. I think all the stories came true, all at once, and he didn’t like the feel of blood on his hands. I’m sure Misha thinks Rafe lost his nerve, but I think maybe he finally found a little bit of it. He called his dad and started handing over clients shortly after.

But something has to change, we can’t all be slaves to so few masters. The landlords don’t eat us all, so maybe they can’t, maybe that’s the great lie they hide with violence. There has to be hope.

For now I wait, leaning on the garden wall so the landlord can take reassuring nips, and know I’m in its grip. I watch pigeons peck discarded fried chicken at the bus stop opposite. A butterfly strays into the road, buffeted into oblivion by a passing SUV. Overhead, an endless sequence of planes jettison carbon dioxide into the upper atmosphere. Life continues.

Eventually, the Four-Thirties arrive, proceeding down the footpath hand in hand, strutting like they’ve just arrived from a photoshoot. Mrs. has an improbable curl in her hair, while Mr. has a box-fresh fade, the curly thatch on top preserved with all its manufactured misdemeanour. Their gloss and makeup don’t quite hide the bags under their eyes, but otherwise it’s a perfect performance. They look like the affluent boomers their parents are, that they’re one inheritance away from becoming.

I run them through the contract in the garden, trusting in momentum and a confident delivery to stop them asking to go inside. Not yet, I need one more thing. “If you could just sign here and here.” They extend long, elfin fingers to complete their covenants on the tablet. Mrs. signs first, the sacred acts reduced to tutting and clumsy thumbs. Mr. may as well be at nursery making finger paintings. No matter, the deeds are binding however crude their assent. I tap Submit, sending the landlord its notice of the new tenants.

I know it’s coming. I know this pain. I hiss through my teeth anyway, as the landlord’s fury takes hold.

Mr. and Mrs. exchange a worried glance as they take the keys from my shaking fingers. I don’t hear anything else. Maybe I waved them goodbye. Maybe I wished them well in their new home. Maybe I slipped through the cracks in the paving. Maybe I was sucked into the bowels of the earth by a ravenous claw, to suffer my punishment. Maybe the landlord tossed me away like a bird’s carcass. I know I next feel myself slumping against the car door. I open it and curl up on the back seat wrapped around the nimbus of my stomach the acidic knot the pain is like nothing else a vast wall shutting out the heavens shutting out the heavens shutting out us all a whipping lash of hot wire coiled through my arteries I am become rage—

The wall flashes by at unimaginable speed, scales the size of cities shatter the clouds this world is dark and pungent and not mine this inconceivable edifice hurtles into space the scales the scales so many scales this behemoth has swallowed god and it turns now I see I see too late I am not my own I belong to this and it opens an eye the size of eternity and gazes down on me alone mote nothing in all this creation other than—

You own nothing.

You are mine.

That moving house is stressful is well-known these days, but Anna and Michael are proud of how they deal with the job together. They save money by doing it all themselves, rather than booking a removals service. Instead Anna borrows a van from a local branch of Daddy’s company, and they graciously accept Alex’s offer of help with the boxes.

Moving in summer means open windows with the radio tuned to Magic FM. Bill Withers reminds them it’s going to be a lovely day as Anna unpacks the Wedgwood dinner service, the Le Creuset dishes and the carbon steel pans. Michael sorts the books by colour (something Anna saw on Instagram and loved the idea of) on their mahogany shelves, those a wedding present from Auntie Moll.

They end the first day with pizza from their new local wood-fired oven takeaway, sipping one of their Viogniers they normally save for Alex and Alex, but the rest of the wine hasn’t chilled yet, and they’re celebrating, just such a shame the nice wineglasses are at the bottom of the pile of boxes in the kitchen right now. They won’t get to them for another two days, distracted as they are by making the bed and sorting the wardrobes out and taking a break to walk in their new local park before sharing their first shower in their new home, slippery hands running across each other’s bodies with giggles as the spores drift in the air, catch in the water, and are massaged into their skin lovingly.

Feeling naughty, they dash naked through the flat to the bed, toss the duvet off, and exhaust their lust in a tangle of limbs and water. They doze after, at once sated and filled with cupidity.

Gently, Michael is the first to cough.

“Agency” copyright © 2026 by George Sandison
Art copyright © 2026 by Jamie Keenan

Buy the Book

An illustration of a brass key with a skull-shaped bow against a bright blue sky.
--> An illustration of a brass key with a skull-shaped bow against a bright blue sky.

Agency

George Sandison

The post Agency appeared first on Reactor.

14:07

Security updates for Wednesday [LWN.net]

Security updates have been issued by Debian (kernel, linux-6.1, munge, and tcpflow), Fedora (accel-ppp, atuin, babl, bustle, endless-sky, envision, ettercap, fapolicy-analyzer, firefox, glycin, gnome-settings-daemon, go-fdo-client, greenboot-rs, greetd, helix, hwdata, keylime-agent-rust, kiwi, libdrm, maturin, mirrorlist-server, ntpd-rs, ogr2osm, open-vm-tools, perl-App-Cme, perl-Net-RDAP, perl-rdapper, polymake, python-requests-ratelimiter, python-tqdm, rust-add-determinism, rust-afterburn, rust-ambient-id, rust-app-store-connect, rust-bat, rust-below, rust-btrd, rust-busd, rust-bytes, rust-cargo-c, rust-cargo-deny, rust-coreos-installer, rust-crypto-auditing-agent, rust-crypto-auditing-client, rust-crypto-auditing-event-broker, rust-crypto-auditing-log-parser, rust-dua-cli, rust-eif_build, rust-git-delta, rust-git-interactive-rebase-tool, rust-git2, rust-gst-plugin-dav1d, rust-gst-plugin-reqwest, rust-heatseeker, rust-ingredients, rust-jsonwebtoken, rust-lsd, rust-monitord, rust-monitord-exporter, rust-muvm, rust-nu, rust-num-conv, rust-onefetch, rust-oo7-cli, rust-pleaser, rust-pore, rust-pretty-git-prompt, rust-procs, rust-rbspy, rust-rbw, rust-rd-agent, rust-rd-hashd, rust-redlib, rust-resctl-bench, rust-resctl-demo, rust-routinator, rust-sccache, rust-scx_layered, rust-scx_rustland, rust-scx_rusty, rust-sequoia-chameleon-gnupg, rust-sequoia-keystore-server, rust-sequoia-octopus-librnp, rust-sequoia-sq, rust-sevctl, rust-shadow-rs, rust-sigul-pesign-bridge, rust-speakersafetyd, rust-tealdeer, rust-time, rust-time-core, rust-time-macros, rust-tokei, rust-weezl, rust-wiremix, rust-ybaas, rustup, sad, strawberry, systemd, tbtools, transmission, trustedqsl, tuigreet, uv, and vdr-extrecmenung), Oracle (brotli, git-lfs, java-1.8.0-openjdk, kernel, libsoup, libsoup3, nodejs:24, python3.12, and thunderbird), Red Hat (fence-agents, python-urllib3, python3.11-urllib3, python3.12-urllib3, and resource-agents), SUSE (avahi, cups, freerdp, golang-github-prometheus-prometheus, java-11-openjdk, java-17-openjdk, libsoup2, libxml2, and python-pip), and Ubuntu (expat, glib2.0, and imagemagick).

13:42

Organizational Strategies from the Collective Wisdom of Nature [Radar]

Circa 2016, a logistics company was drowning. Their centralized routing system—the kind most enterprises still use—couldn’t keep pace with millions of daily deliveries. Managers were making routing decisions through layers of approval. Response time measured in hours. In ecommerce, that’s death.

Then they did something counterintuitive.

Instead of building a smarter central command, they dismantled it. Thousands of delivery drivers were told: Take the shortest available route you see, avoid congested zones, coordinate with your neighbors. Ignore the central system if it makes sense to ignore it.

The first week was chaos. Drivers felt unmoored. They’d been trained for years to defer to authority. But the second week, something shifted. Drivers started talking to each other, sharing what they learned. Within months, delivery times dropped 15%. Fuel costs fell 12%. And the system became more resilient to disruptions, not less.

The system reflected one of nature’s key coordination models: swarm intelligence—the collective behavior of thousands of simple agents following basic local rules and producing astonishingly sophisticated global outcomes. Of course, this wasn’t swarm intelligence in the purist sense. It was something more practical: centralized optimization with locally adaptive execution. The routes were still computed by HQ algorithms, but drivers had authority to deviate based on what they observed. This hybrid model—plan centrally, execute locally—outperformed purely rigid centralization.

This matters. Because most organizations make a different mistake: They assume every problem requires either total central control or total decentralization. The reality is more nuanced. Still, the point remains: The natural world offers a range of coordination models your organization can learn from as you address the specific challenges you face.

The Nature That Shaped Intelligence

A leafcutter ant colony doesn’t have a CEO. No board meetings. No quarterly planning sessions. Yet somehow thousands of ants coordinate to strip trees and farm fungus underground with mind-bending efficiency.

A school of fish doesn’t vote on which direction to swim when a predator appears. No consensus process. Each fish simply watches its three nearest neighbors, maintains distance, and matches speed. They move as one organism.

A flock of birds migrates thousands of miles without a navigator. No GPS. No preplanned route. Each bird follows the same three rules: Stay close to your neighbors, don’t collide with them, and match their speed. Somehow they arrive.

But nature has other models too. Bees don’t swarm to find food. They use waggle dances—a signal system where scouts communicate location and quality to the hive, and the colony collectively decides where to forage. This is collective decision-making, not swarm behavior.

Here are some of the models nature uses, and how you might employ them in your organization:

Ant colonies (pheromone-based swarms): Individual ants are cognitively simple. They follow chemical trails. They don’t strategize. They don’t discuss. Coordination emerges from simple stimulus-response rules repeated at scale. This is perfect for routing algorithms. Humans? Not so much. We have language. We overthink. We have egos and agendas.

Bird flocks (proximity-based synchronization): Each bird watches its nearest neighbors and maintains distance, alignment, and speed. This produces coordinated movement without central direction. It’s useful for thinking about organizational synchronization, but in practice, knowledge workers don’t coordinate through proximity. They coordinate through explicit communication.

Bee colonies (collective decision-making via signaling): Scouts find food sources and perform waggle dances; the hive collectively decides where to forage. There’s communication. There’s collective judgment. This maps better to humans—we make decisions through voting, consensus, or appointed authority structures. But we do this through language, not dance.

Small human groups (language-based coordination): Humans naturally work in intimate groups of 5–15 people. We communicate directly. We debate. We explain reasoning. We build trust through repeated interaction. This is our strength. Research on military special forces, surgical teams, and startup founding teams shows that this scale consistently outperforms larger hierarchies for complex, novel work.

Here’s what matters for organizations: Not all nature-inspired coordination is the same, and not all models suit human knowledge work equally well. The mistake organizations make is mixing these models. Trying to run a board decision through swarm logic doesn’t work. Trying to route 10,000 deliveries through consensus doesn’t work. Match the model to the problem.

How to Distribute Intelligence (Without Creating Chaos)

The winning organizations distribute decision-making by problem type, not by ideology. Start by asking yourself “What type of decision is this?”

Optimization problem with clear goals and frequent repetition?

Consider swarm-inspired algorithms or distributed rules. Routing, scheduling, resource allocation. These benefit from parallel exploration and adaptation.

Define simple, transparent local rules. “Always choose the shortest queue” is better than “we’ve determined you should do this.” Transparency builds trust. It enables agents to adapt rules as conditions change.

Establish clear boundaries. Swarms aren’t lawless. Even the most autonomous ant colony operates within biological constraints. Similarly, decentralized decision-making needs guardrails: budget limits, compliance rules, service-level agreements, ethics boundaries. These constraints prevent harmful emergence while preserving autonomy.

Measure emergent patterns. Are teams naturally clustering around customer segments? Are response times improving faster than expected? Are deviations from planned rules creating better outcomes? These patterns reveal whether the system is actually adaptive or just chaotic.

Measure emergent patterns. Are teams naturally clustering around customer segments? Are response times improving faster than expected? Are deviations from planned rules creating better outcomes? These patterns reveal whether the system is actually adaptive or just chaotic.

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

Repeated execution with local knowledge advantage?

Delegate authority. A store manager sees local demand before HQ does. A nurse sees treatment patterns before epidemiologists do. Give them authority to act within clear boundaries.

Make authority explicit. People need to know: What can I decide? What requires escalation? Build trust through transparency. And create communication channels. Small teams work because people talk directly. Don’t remove that advantage by adding layers.

Small-group knowledge work or novel problem?

Use small teams with explicit communication. Strategy, product direction, customer account decisions. These need debate, judgment, and reasoning—not local rules.

Preserve hierarchy for initial deliberation, then push decisions down. A CEO might set direction (“we’re entering this market”), but let teams decide execution. Mix levels of control by decision phase.

Then build the culture progressively. Organizations where power has been tightly held resist decentralization. Pilot in bounded domains. A single supply chain. One customer segment. A specific operational challenge. Demonstrate value. Build credibility. Then expand. And yes, this requires middle managers to give up control. Most companies fail here. If you aren’t ready to fire managers who hoard decisions, don’t bother trying to decentralize. They’ll sabotage it.

Strategic or ethical choice?

Humans in a room. These require deliberation, trust-building, and explicit reasoning. You can’t swarm your way through a values decision.

Markets shift faster than executives can perceive. Customer preferences change in real time. Disruptions emerge from nowhere. The solution is to distribute intelligence by matching decision type to coordination mechanism. Nature figured out multiple coordination models. Organizations should too.

Real-World Applications

Smart cities: Traffic signal timing in Copenhagen and Singapore uses distributed coordination. Instead of a central traffic control room synchronizing all lights, intersections coordinate based on local congestion. Signals adjust in real time to vehicle flow. This is closer to true swarm behavior—local rules, no central command, emergent global optimization. The result: reduced congestion and lower emissions.

Healthcare: Diagnostic systems using AI aggregate insights across thousands of clinicians. This is distributed sensing. Every clinician is an antenna. The algorithm learns from patterns observed across all of them simultaneously. Drug discovery accelerates as algorithms explore molecular spaces too vast for sequential testing. This works because the goal is clear (better diagnosis, faster discovery), and local information (what clinicians observe) accumulates into global patterns.

Financial services: Real-time algorithmic trading uses multiple agents executing strategies based on local market signals. Agents respond to local conditions without central coordination. But notice: This only works because the goal is crystal clear (maximize return) and the environment is well-defined (market data). Try this for strategic investment decisions and you’ll have chaos.

Energy systems: Power grid management in renewable-heavy systems uses swarm-like coordination to balance supply and demand in real time. Distributed generators respond to local price signals. Consumers adjust consumption based on local grid conditions. This approximates true swarm behavior because the problem is optimization at scale (balance supply and demand) without central planning.

Small teams with autonomy: Amazon’s two-pizza teams have authority to build and deploy independently. Netflix engineers can deploy code without centralized approval gates. Southwest Airlines gate agents make refund decisions on the spot. These are delegated authority structures—not swarms but genuinely autonomous decision-making. They work because the team is small enough for direct communication, the authority boundaries are clear, and the decisions are nonstrategic (execution choices, not direction).

The Competitive Advantage: Speed Through Matching Model to Problem

Organizations that match coordination model to problem type will outpace competitors trapped in binary thinking (all centralized or all decentralized). The advantage isn’t technological. The algorithms are known. The models are established. The advantage is structural clarity. Companies that can identify problem type, choose the right coordination mechanism, and execute without paralysis will move faster.

This mirrors natural evolution. Ant colonies didn’t succeed because they invented new biology. They succeeded because they used the right coordination model for the problem (optimization at scale). Humans didn’t dominate because we swarm. We dominated because we combine small-group collaboration with individual reasoning. Organizations following the same principle—using the right model for the right problem—will emerge as leaders.

For you as a business leader, the question isn’t whether to adopt distributed thinking. Markets are pushing you there. The question is: What types of decisions should be distributed, and what types should stay centralized? And crucially: What coordination mechanism actually suits each type? Your organization’s intelligence doesn’t live solely in the executive suite. It lives in frontline employees, customer interactions, market data, and operational feedback. The companies winning are the ones learning to access it.

But distributed decision-making isn’t one thing. It’s multiple things—swarms for optimization, delegation for execution, small teams for strategy, humans for judgment. Nature has already shown you multiple models. The only question is whether you’ll use the right one for the right problem.

One size doesn’t fit all.

13:35

CodeSOD: Cover Up [The Daily WTF]

Goodhart's Law states that when a measure becomes a target, it ceases to be a good measure. Or, more to the point: you get what you measure.

If, for example, you measure code coverage, you are going to get code coverage. It doesn't mean the tests will be any good, it just means that you'll write tests that exercise different blocks of code.

For example, Capybara James sends us this unit test:

@MockitoSettings
class CentralizedLoggerTest {
    @InjectMocks
    private CentralizedLogger centralizedLogger;
    @Test
    void logAround() throws Throwable {
        centralizedLogger = new CentralizedLogger();
        MethodSignature signature = mock(MethodSignature.class);
        ProceedingJoinPoint joinPoint = mock(ProceedingJoinPoint.class);
        when(joinPoint.getSignature()).thenReturn(signature);
        centralizedLogger.logAround(joinPoint);
        Assertions.assertTrue(true);
    }
}

It doesn't really matter what the mocks are, or what gets instantiated, or honestly, anything that's happening here. The assertion is the beginning and ending.

James writes:

The only requirement was sonar coverage to push the code to production. There is no other purpose.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

12:35

Prompt Injection Via Road Signs [Schneier on Security]

Interesting research: “CHAI: Command Hijacking Against Embodied AI.”

Abstract: Embodied Artificial Intelligence (AI) promises to handle edge cases in robotic vehicle systems where data is scarce by using common-sense reasoning grounded in perception and action to generalize beyond training distributions and adapt to novel real-world situations. These capabilities, however, also create new security risks. In this paper, we introduce CHAI (Command Hijacking against embodied AI), a new class of prompt-based attacks that exploit the multimodal language interpretation abilities of Large Visual-Language Models (LVLMs). CHAI embeds deceptive natural language instructions, such as misleading signs, in visual input, systematically searches the token space, builds a dictionary of prompts, and guides an attacker model to generate Visual Attack Prompts. We evaluate CHAI on four LVLM agents; drone emergency landing, autonomous driving, and aerial object tracking, and on a real robotic vehicle. Our experiments show that CHAI consistently outperforms state-of-the-art attacks. By exploiting the semantic and multimodal reasoning strengths of next-generation embodied AI systems, CHAI underscores the urgent need for defenses that extend beyond traditional adversarial robustness.

News article.

11:42

Urgent: Call Verizon not to support DHS and deportation thugs [Richard Stallman's Political Notes]

US citizens: call on Verizon to stop supporting the Department of Hatred and Suffering and the deportation thugs.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Urgent: End Apple and Google contracts with deportation thugs [Richard Stallman's Political Notes]

US citizens: Tell Apple & Google CEOs: End your contracts with the deportation thugs. Also call on them to allow people to freely share and install libre apps.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Urgent: End Amazon contracts with deportation thugs [Richard Stallman's Political Notes]

US citizens: Tell Amazon to end contracts with deportation thugs.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Urgent: Call on Target to help protect Minnesota from deportation thugs [Richard Stallman's Political Notes]

US citizens: call on Target's New CEO to help protect Minnesota from deportation thugs.

See the instructions for how to sign this letter campaign without running any nonfree JavaScript code--not trivial, but not hard.

Human made sediments on British beaches [Richard Stallman's Political Notes]

* As much as half of some British beaches' coarse sediments consist of human-made materials such as brick, concrete, glass and industrial waste, a study has found. Climate breakdown, which has caused more frequent and destructive coastal storms, has led to an increase in these substances on beaches.*

This doesn't imply that those substance do specific harm when present in a beach, but they demonstrate the magnitude of change that humans are already causing in this early stage of climate breakdown.

"Hate speech" rules could stifle classroom discussions [Richard Stallman's Political Notes]

*New "hate speech" rules for NSW schools could stifle classroom discussions about Gaza, teachers warn.*

Punishing "hate speech" as a crime generally tends to lead to repression.

Crushingly disappointing PFAS action plan for UK [Richard Stallman's Political Notes]

*Environmentalists decry "crushingly disappointing" PFAS action plan for UK.*

This weakness was predictable, because Starmer Labour's first priority is catering to business.

Cars in Chine to have mechanical release on all doors [Richard Stallman's Political Notes]

*Cars sold in China will now be required to have a mechanical release on both the inside and outside of every door except the [trunk].*

That exception is disturbing. I had heard, years ago, that cars were designed so that a person inside the trunk could open the door of the trunk. It seems a shame to retreat from that safety measure.

Contacts with Epstein pulled plug on career of Peter Mandelson [Richard Stallman's Political Notes]

Contacts with Epstein pulled the plug on the career of Peter Mandelson, a Labour MP and minister who worked unceasingly to strengthen the power of business — and not only in Britain.

10:21

Pluralistic: Europe takes a big step towards a post-dollar world (11 Feb 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



An old-fashioned credit-card imprinter; its handle is a cracked and dirty American flag. Under the slip is a gold Trump Card. Looming over the imprinter is the top half of Trump's face, brooding and squint-eyed; it has been altered to increase its orangeness, to add bloodshot sclera to his eyes, and to add liver spots. At its bottom, the face merges with a bubbling, hellish cauldron of smoke and flame.

Europe takes a big step towards a post-dollar world (permalink)

There's a reason every decentralized system eventually finds its way onto a platform: platforms solve real-world problems that platform users struggle to solve for themselves.

I've written before about the indie/outsider author Crad Kilodney, who wrote, edited, typeset and published chapbooks of his weird and wonderful fiction, and then sold his books from Toronto street-corners with a sign around his neck reading VERY FAMOUS CANADIAN AUTHOR BUY MY BOOKS (or, if he was feeling spicy, simply: MARGARET ATWOOD):

https://pluralistic.net/2024/02/19/crad-kilodney-was-an-outlier/#intermediation

Crad was a hell of a writer and a bit of a force of nature, but there are plenty of writers I want to hear from who are never going to publish their own books, much less stand on a street-corner selling them with a MARGARET ATWOOD sign around their necks. Publishers, editors, distributors and booksellers all do important work, allowing writers to get on with their writing, taking all the other parts of the publishing process off their shoulders.

That's the value of platforms. The danger of platforms is when they grow so powerful that they usurp the relationship between the parties they are supposed to be facilitating, locking them in and then extracting value from them (someone should coin a word to describe this process!):

https://pluralistic.net/2024/11/07/usurpers-helpmeets/#disreintermediation

Everyone needs platforms: writers, social media users, people looking for a romantic partner. What's more, the world needs platforms. Say you want to connect all 200+ countries on Earth with high-speed fiber lines; you can run a cable from each country to every other country (about 21,000 cables, many of them expensively draped across the ocean floor), or you can pick one country (preferably one with both Atlantic and Pacific coasts) and run all your cables there, and then interconnect them.

That's America, the world's global fiber hub. The problem is, America isn't just a platform for fiber interconnections – it's a Great Power that uses its position at the center of the world's fiber networks to surveil and disrupt the world's communications networks:

https://en.wikipedia.org/wiki/Edward_Snowden

That's a classic enshittification move on a geopolitical scale. It's not the only one America's made, either.

Consider the US dollar. The dollar is to global commerce what America's fiber head-ends are to the world's data network: a site of essential, (nominally) neutral interchange that is actually a weapon that the US uses to gain advantage over its allies and to punish its enemies:

https://pluralistic.net/2023/10/10/weaponized-interdependence/#the-other-swifties

The world's also got about 200 currencies. For parties in one country to trade with those in another country, the buyer needs to possess a currency the seller can readily spend. The problem is that setting up 21,000 pairwise exchange markets from every currency to every other currency is expensive and cumbersome – traders would have to amass reserves of hundreds of rarely used currencies, or they would have to construct long, brittle, expensive, high-risk chains that convert, say, Thai baht into Icelandic kroner to Brazilian reals and finally into Costa Rican colones.

Thanks to a bunch of complicated maneuvers following World War II, the world settled on the US dollar as its currency platform. Most important international transactions use "dollar clearing" (where goods are priced in USD irrespective of their country of origin) and buyers need only find someone who will convert their currency to dollars in order to buy food, oil, and other essentials.

There are two problems with this system. The first is that America has never treated the dollar as a neutral platform; rather, American leaders have found subtle, deniable ways to use "dollar dominance" to further America's geopolitical agenda, at the expense of other dollar users (you know, "enshittification"). The other problem is that America has become steadily less deniable and subtle in these machinations, finding all kinds of "exceptional circumstances" to use the dollar against dollar users:

https://pluralistic.net/2025/11/26/difficult-multipolarism/#eurostack

America's unabashed dollar weaponization has been getting worse for years, but under Trump, the weaponized dollar has come to constitute an existential risk to the rest of the world, sending them scrambling for alternatives. As November Kelly says, Trump inherited a poker game that was rigged in his favor, but he still flipped over the table because he resents having to pretend to play at all:

https://pluralistic.net/2026/01/26/i-dont-want/#your-greenback-dollar

Once Trump tried to steal Greenland, it became apparent that the downsides of the dollar far outweigh its upsides. Last month, Christine Lagarde (president of the European Central Bank) made a public announcement on a radio show that Europe "urgently" needed to build its own payment system to avoid the American payment duopoly, Visa/Mastercard:

https://davekeating.substack.com/p/can-europe-free-itself-from-visamastercard

Now, there's plenty of reasons to want to avoid Visa/Mastercard, starting with cost: the companies have raised their prices by more than 40% since the pandemic started (needless to say, updating database entries has not gotten 40% more expensive since 2020). This allows two American companies to impose a tax on the entire global economy, collecting swipe fees and other commissions on $24t worth of the world's transactions every year:

https://finance.yahoo.com/news/europe-banks-launching-product-break-101215642.html

But there's another reason to get shut of Visa/Mastercard: Trump controls them. He can order them to cut off payment processing for any individual or institution that displeases him. He's already done this to punish the International Criminal Court for issuing a genocide arrest warrant for Benjamin Netanyahu, and against a Brazilian judge for finding against the criminal dictator Jair Bolsonaro (Trump also threatened to have the judge in Bolsonaro's case assassinated). What's more, Visa/Mastercard have a record of billions (trillions?) of retail transactions taking place between non-Americans, which Trump's officials can access for surveillance purposes, or just to conduct commercial espionage to benefit American firms as a loyalty bonus for the companies that buy the most $TRUMP coins.

Two days after Lagarde's radio announcement, 13 European countries announced the formation of "EuroPA," an alliance that will facilitate regionwide transactions that bypass American payment processors (as well as Chinese processors like Alipay):

https://news.europawire.eu/european-payment-leaders-sign-mou-to-create-a-sovereign-pan-european-interoperable-payments-network/eu-press-release/2026/02/02/15/34/11/168858/

As European Business Magazine points out, EuroPA is the latest in a succession of attempts to build a European payments network:

https://europeanbusinessmagazine.com/business/europes-24-trillion-breakup-with-visa-and-mastercard-has-begun/

There's Wero, a 2024 launch from the 16-country European Payments Initiative, which currently boasts 47m users and 1,100 banks in Belgium, France and Germany, who've spent €7.5b through the network:

https://finance.yahoo.com/news/europe-banks-launching-product-break-101215642.html

Wero launched as a peer-to-peer payment system that used phone numbers as identifiers, but it expanded into retail at the end of last year, with several large retailers (such as Lidl) signing on to accept Wero payments.

Last week, Wero announced an alliance with EuroPA, making another 130m people eligible to use the service, which now covers 72% of the EU and Norway. They're rolling out international peer-to-peer payments in 2026, and retail/ecommerce payments in 2027.

These successes are all the more notable for the failures they follow, like Monnet (born 2008, died 2012). Even the EPI has been limping along since its founding, only finding a new vigor on the heels of Trump threatening EU member states with military force if he wasn't given Greenland.

As EBM writes, earlier efforts to build a regional payment processor foundered due to infighting among national payment processors within the EU, who jealously guarded their own turf and compulsively ratfucked one another. This left Visa/Mastercard as the best (and often sole) means of conducting cross-border commerce. This produced a "network effect" for Visa/Mastercard: since so many Europeans had an American credit card in their wallets, European merchants had to support them; and since so many EU merchants supported Visa/Mastercard, Europeans had to carry them in their wallets.

Network effects are pernicious, but not insurmountable. The EU is attacking this problem from multiple angles – not just through EuroPA, but also through the creation of the Digital Euro, a Central Bank Digital Currency (CBDC). Essentially, this would give any European who signs up an account with the ECB, the federal bank of the Eurozone. Then, using an app or a website, any two Digital Euro customers could transfer funds to one another using the bank's own ledgers, instantaneously and at zero cost.

EBM points out that there's a critical difficulty in getting EuroPA off the ground: because it is designed to be cheap to use, it doesn't offer participating banks the windfall profits that Visa/Mastercard enjoy, which might hold back investment in EuroPA infrastructure.

But banks are used to making small amounts of money from a lot of people, and with the Digital Euro offering a "public option," the private sector EuroPA system will have a competitor that pushes it to continuously improve its systems.

It's true that European payment processing has been slow and halting until now, but that was when European businesses, governments and households could still pretend that the dollar – and the payment processing companies that come along with it – was a neutral platform, and not a geopolitical adversary.

If there's one thing the EU has demonstrated over the past three years, it's that geopolitical threats from massive, heavily armed mad empires can break longstanding deadlocks. Remember: Putin's invasion of Ukraine and the end of Russian gas moved the EU's climate goals in ways that beggar belief: the region went from 15 years behind on its solar rollout to ten years ahead of schedule in just a handful of months:

https://pluralistic.net/2026/02/05/contingency/#this-too-shall-pass

This despite an all-out blitz from the fossil fuel lobby, one of the most powerful bodies in the history of civilization.

Crises precipitate change, and Trump precipitates crises.


Hey look at this (permalink)



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

Object permanence (permalink)

#15yrsago Realtime API for Congress https://web.archive.org/web/20110211101723/http://sunlightlabs.com/blog/2011/the-real-time-congress-api/

#15yrsago Steampunk fetish mask with ear-horn https://bob-basset.livejournal.com/156159.html

#10yrsago Facebook’s “Free Basics” and colonialism: an argument in six devastating points https://web.archive.org/web/20160211182436/https://www.theatlantic.com/technology/archive/2016/02/facebook-and-the-new-colonialism/462393/

#10yrsago UK surveillance bill condemned by a Parliamentary committee, for the third time https://web.archive.org/web/20250523013320/https://www.wired.com/story/technology-ip-bill-surveillance-committee/

#10yrsago Haunted by a lack of young voter support, Hillary advertises on the AOL login screen https://web.archive.org/web/20160211080839/http://www.weeklystandard.com/hillary-reaches-base-with-aol-login-page-ad/article/2001023

#10yrsago Celebrate V-Day like an early feminist with these Suffragist Valentines https://web.archive.org/web/20160216100606/https://www.lwv.org/blog/votes-women-vintage-womens-suffrage-valentines

#10yrsago Elements of telegraphic style, 1928 https://writeanessayfor.me/telegraph-office-com

#10yrsago Disgraced ex-sheriff of LA admits he lied to FBI, will face no more than 6 months in prison https://web.archive.org/web/20160211041117/https://www.latimes.com/local/lanow/la-me-ln-ex-l-a-county-sheriff-baca-jail-scandal-20160210-story.html

#5yrsago Apple puts North Dakota on blast https://pluralistic.net/2021/02/11/rhodium-at-2900-per-oz/#manorial-apple

#5yrsago Catalytic converter theft https://pluralistic.net/2021/02/11/rhodium-at-2900-per-oz/#ccscrap

#5yrsago Adam Curtis on criti-hype https://pluralistic.net/2021/02/11/rhodium-at-2900-per-oz/#hypernormal

#5yrsago Dependency Confusion https://pluralistic.net/2021/02/11/rhodium-at-2900-per-oz/#extra-index-url

#1yrago Musk steals a billion dollars from low-income Americans and sends it to Intuit https://pluralistic.net/2025/02/11/doubling-up-on-paperwork/#rip-freefile


Upcoming appearances (permalink)

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



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

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

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

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

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

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



Colophon (permalink)

Today's top sources:

Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America (1027 words today, 26735 total)

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

  • A Little Brother short story about DIY insulin PLANNING


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

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

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


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

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

10:07

Time well spent [Seth's Blog]

What an admirable goal. Perhaps the overriding goal of all goals.

How often do we measure this? Do we even know how?

Do the systems we’re in push us from considering this? I wonder why.

08:21

The Mark Of Donalds [Penny Arcade]

New Comic: The Mark Of Donalds

06:21

Girl Genius for Wednesday, February 11, 2026 [Girl Genius]

The Girl Genius comic for Wednesday, February 11, 2026 has been posted.

02:49

01:42

SPD Policy Undermines Rivera’s Immigrant-Protecting Bill [The Stranger]

Unfortunately, nothing in government is that simple, and the Seattle Police Department (SPD) exists. by Micah Yip

Councilmember Maritza Rivera has done something right. 

This morning, the Public Safety Committee passed her bill that protects immigrants from our own municipal code. It strikes language that says city employees (including police) must “cooperate with, not hinder” federal immigration enforcement, and adds a section clarifying that they are not to collect or share personal information for immigration agencies, either.

Yay! Thanks, Rivera!

Unfortunately, nothing in government is that simple, and the Seattle Police Department (SPD) exists. And once again, it is preventing us from having nice things. While police are technically regulated under Rivera’s bill, SPD policies give them a pass. 

Let’s start with the language repeal. Rivera’s bill removes that “cooperation” line, which originated in 1986 from an initiative passed by Seattle voters (what the hell, ’80s Seattle voters!). Excellent first step. Rivera’s bill also creates a new section in the Seattle Municipal Code (SMC) blocking city employees and officers from sharing personal information—like someone’s address, phone number or social media handle—for immigration enforcement, except if required by a court order. Good second step. 

Both changes align city code with state laws like the 2019 Keep Washington Working (KWW) Act and the 2020 Courts Open to All (COTA) Act, which place information collection and sharing restrictions on local law enforcement, judges, court personnel and prosecutors. The bill also aligns the city code with the city code. In 2003, a “don’t ask” policy was added to the SMC—city employees can’t ask about someone’s immigration status.

Except officers if they have “reasonable suspicion” that (1) a person has been previously deported, (2) that person is again in the United States and (3) they’ve committed or are committing a felony. 

On top of that, SPD has their own policies independent of city and state law. According to Council Central Staff, the department has “chosen to enact a policy” for immigration situations that is “quite a bit narrower and does not contemplate any of the criteria” described in current city or state law. 

It’s a whole mess: SPD policy generally prohibits collecting immigration info. But the Chief can make exceptions. But Keep Washington Working keeps law enforcement from data collection and sharing for immigration enforcement. But officers are also regulated under the 2003 SMC amendment. But they’re also given a pass under the same amendment.

It’s convoluted enough that Councilmember Eddie Lin abstained. 

“I don’t want to hold up the important bill and good work that you brought forward, Councilmember Rivera,” he said. “But it just seems like there’s still a bit of confusion, at least in my mind.”

Rivera acknowledged the shortfalls. She said KWW likely overrides the SMC code , but said they’d need to do further legal analysis before amending that section. She was adamant—passionate, even—that the bill should still be passed. 

“One doesn’t preclude the other, so we can move this bill forward,” Rivera said. “[We can] take this what I deem to be an important step, all while then having the conversations about what else.”

The bill passed, with Rivera, Committee Chair Bob Kettle and Vice Chair Rob Saka voting yes. Councilmember Debora Juarez was absent. It’ll go before the full City Council at the February 17 meeting.

Pacific Science Center’s Boeing IMAX Theater to Be Sold to Space Needle [The Stranger]

The question of what that “IMAX experience” entails will now be top of mind for Seattle movie lovers. Many consider the Boeing IMAX to be one of the best places to go see the biggest releases of the year, but staff who spoke to The Stranger are concerned that this new buyer isn’t interested in screening first-run releases of Hollywood films, like Christopher Nolan’s upcoming The Odyssey. by Chase Hutchinson

The Boeing IMAX theater, the biggest IMAX theatre in the state, has been closed since Feb. 1 and will be sold to a new owner: the Space Needle Corporation, the Pacific Science Center confirmed in an email Tuesday. 

“PacSci will not resume operations in that theater,” the spokesperson said. “Once the transaction concludes, we anticipate that the buyer will make some renovations and reopen the theater as an IMAX experience later this spring.”

The question of what that “IMAX experience” entails will now be top of mind for Seattle movie lovers. Many consider the Boeing IMAX to be one of the best places to go see the biggest releases of the year, but staff who spoke to The Stranger are concerned that this new buyer isn’t interested in screening first-run releases of Hollywood films, like Christopher Nolan’s upcoming The Odyssey. A spokesperson for PacSci said they will be showing Nolan’s film at their smaller theater, the PACCAR, but deferred questions about the future of film programming at the Boeing IMAX to the Space Needle Corporation. 

In a statement shared with The Seattle Times, Space Needle CEO Ron Sevart said “we’re excited to partner with Pacific Science Center in continuing the availability of two IMAX theaters on the Seattle Center Campus” and that it will continue to operate as a movie theater following a "brief renovation focused on improving the concessions and arrival experiences, scheduled to end in May." However, he didn’t specify what movies or programming will be shown there, only saying “we haven’t explored any use other than as an IMAX theater.”

“While continued operation of the Boeing IMAX Theater is our short-term focus, we can’t wait to explore other partnership opportunities that support the future of Pacific Science Center and the Seattle Center,” Sevart said in a release. 

Also speaking to the Times, PacSci President and CEO Will Daugherty said, “the economics of operating a movie theater have become increasingly challenging. It made sense for PacSci to include the Boeing IMAX Theater in this transaction.” 

Can our movie theaters catch a break already? SIFF ended its lease at the Egyptian last year, the Varsity Theatre closed just last month, and the Grand Illusion is still looking for a new home. However, the Boeing IMAX is something different. It’s the region’s “only true IMAX,” as the theater’s website once referred to it, with a 1.42:1 aspect ratio AKA a massive screen. When Ryan Coogler’s stellar vampire horror Sinners swept the nation last year, it was one of only a handful of places in the country where you could see the film as the filmmaker intended. (Having seen the film, I can’t overstate how much of an impact this makes.) 

Now, it’s an open question whether they’ll be able to experience anything like that again anytime soon at the Boeing IMAX. As for the impact the sale could have on employees, a spokesperson for PacSci said “we have not yet determined the impact on PacSci staffing.”

Editor's Note: A previous version of this story said that the sale was final. Since publication, the Pacific Science Center has clarified that the sale has not yet gone through, but is expected to. 

00:07

Redox gets working rustc and Cargo [OSnews]

Another month, another Redox progress report. January turned out to be a big month for the Rust-based general purpose operating system, as they’ve cargo and rustc working on Redox.

Cargo and rustc are now working on Redox! Thanks to Anhad Singh and his southern-hemisphere Redox Summer of Code project, we are now able to compile your favorite Rust CLI and TUI programs on Redox. Compilers are often one of the most challenging things for a new operating system to support, because of the intensive and somewhat scattershot use of resources.

↫ Ribbon and Ron Williams

That’s not all for January, though. An initial capability-based security infrastructure has been implemented for granular permissions, SSH support has been improved and now works properly for remoting into Redox sessions, and USB input latency has been massively reduced. You can now also add, remove, and change boot parameters in a new text editing environment in the bootloader, and the login manager now has power and keyboard layout menus. January also saw the first commit made entirely from within Redox, which is pretty neat.

Of course, there’s much more, as well as the usual slew of kernel, relibc, and application bugfixes and small changes.

80386 barrel shifter [OSnews]

I’m currently building an 80386-compatible core in SystemVerilog, driven by the original Intel microcode extracted from real 386 silicon. Real mode is now operational in simulation, with more than 10,000 single-instruction test cases passing successfully, and work on protected-mode features is in progress. In the course of this work, corners of the 386 microcode and silicon have been examined in detail; this series documents the resulting findings.

In the previous post, we looked at multiplication and division — iterative algorithms that process one bit per cycle. Shifts and rotates are a different story: the 386 has a dedicated barrel shifter that completes an arbitrary multi-bit shift in a single cycle. What’s interesting is how the microcode makes one piece of hardware serve all shift and rotate variants — and how the complex rotate-through-carry instructions are handled.

↫ nand2mario

I understood some of this.

“The original vi is a product of its time (and its time has passed)” [OSnews]

For me, vim is a combination of genuine improvements in vi’s core editing behavior (cf), frustrating (to me) bits of trying too hard to be smart (which I mostly disable when I run across them), and an extension mechanism I ignore but people use to make vim into a superintelligent editor with things like LSP integrations.

Some of the improvements and additions to vi’s core editing may be things that Bill Joy either didn’t think of or didn’t think were important enough. However, I feel strongly that some or even many of omitted features and differences are a product of the limited environments vi had to operate in. The poster child for this is vi’s support of only a single level of undo, which drastically constrains the potential memory requirements (and implementation complexity) of undo, especially since a single editing operation in vi can make sweeping changes across a large file (consider a whole-file ‘:…s/../../’ substitution, for example).

↫ Chris Siebenmann

I have only very limited needs when it comes to command-line text editors, and as such, I absolutely swear by the simplicity of nano. In other words, I’m probably not the right person to dive into the editor debate that’s been raging for decades, but reading Siebenmann’s points I can’t help but agree. In this day and age, defaulting an editor that has only one level of undo is insanity, and I can’t imagine doing the kind of complex work people who use command-line editors do while being limited to just one window.

As for the debate about operating systems that symlink the vi command to vim or a similar improved variant of vi, I feel like that’s the wrong thing to do. Much like how I absolutely despise how macOS hides its UNIX-y file system structure from the GUI, leading to bizarre ls results in the terminal, I don’t think you should be tricking users. If a user enters vi, it should launch vi, and not something that kind of looks like vi but isn’t. Computers shouldn’t be lying to users.

If they don’t want their users to be using vi, they shouldn’t be installing vi in the first place.

Beneath the Mask [The Stranger]

Shapiro’s journey through the art world is a storied one. by Amanda Manitach

Somewhere in Manhattan, sometime in the mid 1980s: a friend invited Ann Leda Shapiro to a clandestine gathering of nameless, faceless women at an artist’s loft. “Come to this meeting,” she was told. “We’re pissed off. We’re going to do something.” It turned out to be the beginning of the Guerrilla Girls.

Shapiro kept the secret of her involvement for 40 years; she will still only say so much. But there is one story about the time The Washington Post was sending people up to conduct a photoshoot. This posed a problem, as one of the primary commitments of the group was anonymity. Shapiro, taking notes for their meeting, was scribbling down ideas as fast as they came, when she committed a misspelling that would make art history: instead of guerrilla, she wrote gorilla. It was an a-ha moment, and their solution—the now-iconic gorilla mask—was born.

Shapiro’s journey through the art world is a storied one, her intersection with the Guerilla Girls just one of many tantalizing threads that could be spun into a volume. As she (selectively) spills the lore, our conversation is lubricated by multiple cups of coffee served in the artist’s Vashon Island living room. It’s a well-loved and lived-in house just up the road from a rocky slip of beach. Sun glitters off the face of the water, flooding the space with dappled light that dances across the ceiling with each break in the clouds. An acupuncturist’s table—not an easel or drawing desk—takes primary place in the room.

She’s lived here for 30 years, tucked away from the limelight.

Like the majority of female artists who achieve renown, it’s only been later in life that she’s been getting her flowers. (Shapiro turns 80 this August, though age feels like a preposterous abstraction here; she moves and speaks with the vivacity of someone 80 going on 18.) Last spring her solo exhibit, Interconnected Worlds, debuted in Antwerp. Another solo, Body Is Landscape, is currently hanging in Hong Kong. This January, Shapiro received the Betty Bowen Award—one of the region’s most coveted—which comes with a hefty cash prize and an exhibition at Seattle Art Museum. (Hers is scheduled for 2027.)

Categorizing Shapiro’s work is no easy feat. Watercolor and gouache paintings with an energetic, illustrative quality that plumb the esoteric, autobiographical, cosmic cartographies of the body. The body is ever-present in her work. Bodies that serve as landscapes. Bodies that swim in celestial storms and electric seas. Bodies as fine as stardust. Bodies that turn into trees that turn into something much deeper and primal. Detail so minute it seems physically impossible. Humor that is by turns brash, vulnerable, and grotesque mingles with sacred rage throughout earlier work; later imagery unfolds labyrinthine (self)portraiture that could keep a psychoanalyst busy for years.

It’s the kind of work the world is hungry for now. But it wasn’t always like this.

Shapiro grew up a “red diaper baby,” the daughter of card-carrying, working-class Communist parents who lived in a housing project in Queens. They were “neglectful, but had fabulous values,” she notes. Shapiro’s mother encouraged her artistic tendencies (which included being allowed to paint on the walls). On Saturdays, they took the train into the city so Shapiro could take classes at the MoMA’s art school, where she learned to “paint with sponges and throw paint at paper.” When the family eventually relocated to Manhattan, they moved into an apartment directly across from the American Museum of Natural History—a proximity that contributed to the development of Shapiro’s approach to close observation of the natural world. There was never going to be any other way but art for Shapiro; in her free time after high school she haunted the museum across the street, filling sketchbooks with intricate drawings of its curiosities while inquisitive museum guards looked on.

After high school, Shapiro rented a walk-up on the Lower East Side—the kind with a bathtub in the kitchen and a toilet down the hall. She worked at a library, then an advertising agency (where, to assuage boredom, she typed out entire chapters of Moby Dick, one page at a time). She saved enough cash to catch a hippie bus to San Francisco, where she rented a room under a staircase and enrolled in the San Francisco Art Institute. She modeled and painted murals for money. She marched with Allen Ginsberg and made low-tech, psychedelic oil-and-paint visuals for the first Kool-Aid Acid Test concert (Shapiro was perhaps the only person present not tripping on drugs).

She attended the University of California, Davis, for grad school, where the critiques were performed exclusively by mustached men. When they brought her to tears during her first review (her paintings were too “primitive,” they berated), Shapiro resolved to never let such a thing happen again. At the next review, she arrived with a rubber penis strapped to her face. She nearly asphyxiated (she forgot to poke holes in the tip), but the stunt was so off-putting it worked; from that day on, the mustaches kept mum and she earned an MFA without further incident.

After graduating, Shapiro traded oil paints for watercolors, scaling to a more intimate style that reflected the inspirations of her youth: Little Lulu comics and the delicate nature drawings of her museum sketchbooks. When a curator from the Whitney Museum of American Art paid Shapiro a studio visit, they offered her a solo show of works on paper—an honor for any artist, let alone a recent graduate. But when the exhibit opened in the fall of 1973, Shapiro was appalled to find they had pulled three of her best paintings at the last minute. “I was shocked,” she says. “I had no idea I was doing anything that was controversial.”

The censored works in question—three watercolors completed in 1971—seem disparate at first glance, but each is threaded with the same provocative humor as Shapiro’s rubber dick that doubled as a mask. One of the paintings, Two Sides of Self, depicts a pair of hermaphroditic mermaids whose bodies appear to conjoin at the breasts, lips, and (male) genitalia. The central figure in Woman Landing on Man in the Moon is a female astronaut in a NASA spacesuit; three American flag patches placed across the uniform reveal slits through which breasts and a penis protrude. Across the inky void in the background, a fleet of tiny airplanes skywrites: one needs a cock to get by.

“I was just asking questions innocently, like, what is male and what is female?” says Shapiro. “There was no multiplicity of pronouns then, or anything like that. I was asking, do you have to be male—or act like a male—to be able to move ahead in the world, to be visible?”

The Whitney wasn’t having it.

Happily, Two Sides of Self and Woman Landing on Man in the Moon were both eventually acquired by the Seattle Art Museum in 2015—part of the Deed of Gift spearheaded by artist Matthew Offenbacher and his partner Jennifer Nemhauser after he won the Neddy Artist Award. Offenbacher used around $20,000 of the award funds to purchase works by women and queer artists, which were then gifted to SAM as a gesture of solidarity to the community and an attempt to help rectify the dearth of work by minorities in the museum’s collection.

That would be far in the future, however.

Following the ’73 exhibit, Shapiro withdrew from the art world. She would continue to paint, but she would not be censored, nor self-censor. Going forward, she exhibited only in underground spaces and spent the next two decades as a self-described “academic vagabond woman.” She taught criticism and art at universities across the country. She spent a semester in a boat sailing the world. In her six years of undergrad and graduate school, Shapiro had never had a woman teacher, not once; while teaching, she found herself the sole woman in every department. The token female academic, with a strap-on cock for a nose.

Or a gorilla mask. It was around this time that Shapiro found herself amid a group of like-minded artists who were pissed. It was also around this time that a close friend was diagnosed with AIDS, an event that would indirectly shift the trajectory of her life. Shapiro took up volunteering at a clinic in Austin that treated people with the disease. The clinic happened to specialize in acupuncture.

“When I started reading about the theory and history and philosophy of Chinese medicine, it was like falling in love,” she says. The definition of qi is not merely energy, Shapiro explains: “It is matter on the verge of becoming. It’s that moment when you’re living and dying simultaneously. And that’s what I’m trying to paint about, the dichotomies—that things aren’t in opposition, but they’re in interconnectivity.”

Shapiro left her university job to study acupuncture in Seattle. Just for a year (she thought). She fell for the practice as much as the theory—and she was really good at it.

To say Shapiro’s work/life amounts to something approximating Gesamtkunstwerk—a total work of art, in which everything merges into a cohesive whole—is far from a stretch, as art and acupuncture melded on the island she made home. During this time she published multiple books, including a picture book about Vashon, My Island, and a graphic novel, Art Notes of an Acupuncturist. In the latter, she outlines a pictorial history of the synaesthetic cosmologies contained within the human body. With bursts of grotesque humor and poetic wit, Shapiro illustrates the interconnections at play in orifices and organs, tracing the invisible threads between elements and colors, emotions and smells. It reads like a legend to unlock the symbolism of her later work.

Because the demand for Shapiro’s art has increased, there’s less time for acupuncture lately; almost all her hours are committed to the studio, where she’s currently working on six pieces for her upcoming exhibit at SAM. As she leads the way into her workspace—a standalone building behind her house, where soft island light pours through skylights—she explains a piece she is working on, about the ginkgo trees she recently encountered in Japan. “They’re the oldest trees in existence, living fossils,” Shapiro muses. “They survived the Hiroshima atomic bomb.”

But, of course, it’s about more than just that. If you look closely, you can trace the nervous system of the universe in the wood and roots of those trees.

Tuesday, 10 February

22:35

ICE Says They Will Play “Key Part of Overall Security Apparatus” of World Cup [The Stranger]

Hey, we’re hosting the World Cup, and not far from the immigrant rich Chinatown-International District. And since this is the “World” Cup, tens of thousands of people from around the world will be here. That's a problem! by Vivian McCall

While defending Trump’s mass deportation program before Congress today, ICE’s acting director Todd Lyons told Rep. Nellie Pou of New Jersey that the agency would be a “key part of the overall security apparatus” of the FIFA World Cup this year.

Hey, we’re hosting the World Cup, and not far from the immigrant rich Chinatown-International District. And since this is the “World” Cup, the world will be here.

That’s a problem. Not only for us, but for Los Angeles, San Francisco, Boston, Philadelphia, Pou’s East Rutherford, New Jersey, and all the other host cities that’ve promised to protect their immigrants from this violent, unpopular agency.

I asked Mayor Katie Wilson’s office if A) this is the first they’ve heard of this B) whether the Department of Homeland Security, ICE, Customs and Border Protection, or the Trump Administration informed the city of its “security apparatus” C) if they suspected this would happen, given ICE’s vague security role at the Winter Olympics and D) what it can do to protect Seattle if ICE does come here for the World Cup.

The office did not return my request for comment.

Lyons didn’t pull this plan out of thin air. Last summer, Border Patrol posted and then deleted a statement on Facebook saying that they would be “suited and booted ready to provide security for the first round of games.” And yesterday, radio station KTTH wrote that Seattle will “be protected by a unified, multi-agency security operation” as it prepares to host the matches.

“What you have when you have U.S. government agencies thinking about the defense and the security of U.S. national security and citizens is pulling together our top resources and the most experienced folks from the U.S. government who have worked on these major events,” Mignon Houston, the deputy spokesperson for the U.S. Department of State, told conservative radio host Jason Rantz.

22:21

Patch Tuesday, February 2026 Edition [Krebs on Security]

Microsoft today released updates to fix more than 50 security holes in its Windows operating systems and other software, including patches for a whopping six “zero-day” vulnerabilities that attackers are already exploiting in the wild.

Zero-day #1 this month is CVE-2026-21510, a security feature bypass vulnerability in Windows Shell wherein a single click on a malicious link can quietly bypass Windows protections and run attacker-controlled content without warning or consent dialogs. CVE-2026-21510 affects all currently supported versions of Windows.

The zero-day flaw CVE-2026-21513 is a security bypass bug targeting MSHTML, the proprietary engine of the default Web browser in Windows. CVE-2026-21514 is a related security feature bypass in Microsoft Word.

The zero-day CVE-2026-21533 allows local attackers to elevate their user privileges to “SYSTEM” level access in Windows Remote Desktop Services. CVE-2026-21519 is a zero-day elevation of privilege flaw in the Desktop Window Manager (DWM), a key component of Windows that organizes windows on a user’s screen. Microsoft fixed a different zero-day in DWM just last month.

The sixth zero-day is CVE-2026-21525, a potentially disruptive denial-of-service vulnerability in the Windows Remote Access Connection Manager, the service responsible for maintaining VPN connections to corporate networks.

Chris Goettl at Ivanti reminds us Microsoft has issued several out-of-band security updates since January’s Patch Tuesday. On January 17, Microsoft pushed a fix that resolved a credential prompt failure when attempting remote desktop or remote application connections. On January 26, Microsoft patched a zero-day security feature bypass vulnerability (CVE-2026-21509) in Microsoft Office.

Kev Breen at Immersive notes that this month’s Patch Tuesday includes several fixes for remote code execution vulnerabilities affecting GitHub Copilot and multiple integrated development environments (IDEs), including VS Code, Visual Studio, and JetBrains products. The relevant CVEs are CVE-2026-21516, CVE-2026-21523, and CVE-2026-21256.

Breen said the AI vulnerabilities Microsoft patched this month stem from a command injection flaw that can be triggered through prompt injection, or tricking the AI agent into doing something it shouldn’t — like executing malicious code or commands.

“Developers are high-value targets for threat actors, as they often have access to sensitive data such as API keys and secrets that function as keys to critical infrastructure, including privileged AWS or Azure API keys,” Breen said. “When organizations enable developers and automation pipelines to use LLMs and agentic AI, a malicious prompt can have significant impact. This does not mean organizations should stop using AI. It does mean developers should understand the risks, teams should clearly identify which systems and workflows have access to AI agents, and least-privilege principles should be applied to limit the blast radius if developer secrets are compromised.”

The SANS Internet Storm Center has a clickable breakdown of each individual fix this month from Microsoft, indexed by severity and CVSS score. Enterprise Windows admins involved in testing patches before rolling them out should keep an eye on askwoody.com, which often has the skinny on wonky updates. Please don’t neglect to back up your data if it has been a while since you’ve done that, and feel free to sound off in the comments if you experience problems installing any of these fixes.

21:49

19:49

The Big Idea: Kristina W. Kelly [Whatever]

Nothing beats away a dreary February day like curling up with a cozy fantasy novel. Even better when that novel is a sapphic love story with iguana, cat, and mushroom people! Grab a seat by the fire and a cup of hot chocolate (or tea) and listen to author Kristina W. Kelly’s Big Idea as she shows you the magical world of Tea Tale.

KRISTINA W. KELLY:

What happens when you second guess who you are? When you begin to rethink what really defines you? What happens when your faith betrays you, lies, and hides truths? 

Everything begins to crumble. Like a sea cliff battered by eons of waves. 

And if you’re Divine, your magic goes haywire and you start to wonder if you can hear animals talk. You change. You become. Maybe not something new, but someone different. 

The idea for Tea Tale started simple: I wanted to feature my favorite beverage—tea—, pay homage to my favorite video games (as I did with the first book in the series, Tavern Tale), and set it all in winter. Of course, I needed to carry through the subplots and address some of the unanswered questions from that first book. What emerged was a quest to sprinkle religious betrayal over a sapphic pairing within the framework of Role Playing Games (RPGs).

Divine is a healer. Or was a healer. Her path used to be clear: serve the Goddess of Souls by caring for the living. She’d influence emotions, heal wounds, shield others from harm. The teachings of her temple always seemed contradictory to the way she lived, though. 

Her temple, like all the temples in Trelvania, said that non-humans—races like the Iguions (iguana-like bipeds), the Kellas (feline humanoids), and Thospori (think mushroom warriors)—couldn’t receive the blessings from the deities. Simply because they were non-human. Oh, the temples said something about how non-humans don’t have magical power, of course, so that’s why they couldn’t be on the receiving end of magic. But Divine had healed a Kellas child. She had healed an Iguion adult. She had done what was supposed to be impossible. Forbidden. 

When I was growing up, I was taught that I was born evil. A child tainted and only by a blood sacrifice could I be saved from these sins I hadn’t even committed. These same people told me that because I was a woman, despite my music education degree, I couldn’t lead the church orchestra. I could help in the nursery with the babies, though. All the other jobs were for men. I was led to believe that god thought I wasn’t equal or as capable because of my gender. Those same people decreed “love your neighbor”, but showed that only counted for some of the population. Even though the greatest command was love, people couldn’t love whomever they wanted. 

Whether sudden or gradual, I eventually found myself changed. I had sought experts who studied the historical context and the translations that made sense in that period, not a modern view. I discovered that sentences I had etched into my brain weren’t even in the texts we had been reading and that books were left or added depending on the particular flavor of faith. I learned about the practices of different cultures and religions and the history of the one I’d known. I found people who were exploring their spiritually like I was and discussed their journeys. And I began to explore who I was without all of the baggage, shame, and fear I’d been taught. 

When the community you trusted had it wrong, how do you replace that feeling of community? These questions I’ve been asking you, reader, is what I attempted to capture in Tea Tale. Yes, Tea Tale is cozy fantasy, but with a sip of religious oppression. 

The faire in Tea Tale is inspired by holiday events in MMORPGs and one of my favorite RPGs ever, Chrono Cross. There’s special games, unique items, decorations, and event food like the Millennial Fair in Chrono Cross. Divine’s tasting tea by the fire and listening to musicians. When she helps prepare the Sultry Sapphire tavern for the Midwinter Nights Faire, the notes of RPG influences really come through. I love a good quest chain in video games, where my character runs around the city helping ten people just to get five mushrooms back to the first quest-giver. Divine’s tasks become more tasks—side quests—as she also tries to find a gift for her romantic interest.

But while Divine does all of that, she’s also struggling to understand her magic when it seems to be acting contrary to what her temple taught her.

Just like I sought experts, Divine seeks experts to understand how magic really works in her world and how she connects to it. She talks to the non-humans who are, quite frankly, oppressed by the temples of Trelvania and uncovers that the truths her temples spout might not be the whole story. She grapples with what it means to have lived so many years within an organization that didn’t respect her enough to tell her the truth. And if she’s not that person, she wants to discover who she is.  

Divine tackles replacing her religious community with those around her who support her without expecting something in return. Like me, she befriends those who are questioning the same ideas she is, or find friends who have never followed the temples. Ordinary people who come together to make a difference. A community and a found family. 

Tea Tale focuses on people coming together during their Midwinter Nights Faire to enjoy each other, get creative through poetry and music, and spread joy through gift giving, food, and hot drinks. From Divine’s love interest, Saph, donating food to those in need, to Divine advocating for change in the way non-humans are treated, the characters find small ways to collectively be impactful. “If no one is being a voice,” Divine thinks, “then I should. Someone must do something.” 

At its heart, Tea Tale is full of magic, tea, and cozy moments. One of the things I love about modern RPGs is that the games give your character the option to pick any love interest they want. The world of Tea Tale is just like that—it’s a queer normative. But just like life, there are lies and injustices to chip away at to free who we want to be. 

I’m still learning every day who I am. It’s ok to change. To become different as I grow. If we can surround ourselves with love, empathy, and patience we can find our true power. We can crack the deceit wide open and find warmth and friendship. Together, we lay those broken pieces, starting a foundation where others can feel safe to be who they want to be while sipping hot tea that smells of lavender and vanilla. When faced with lies and disparity…become someone different.


Tea Tale: Amazon|Barnes & Noble|Bookshop|Space Wizards

Author socials: Website|Instagram|Bluesky|Facebook

18:42

The Unraveling [The Stranger]

Record your question for the Savage Lovecast at savage.love/askdan! by Dan Savage I had a great time at Mr. Mid-Atlantic Leather last month in Washington D.C. For those who don’t know, MAL is an annual fetish event for gay men. There is a lot of socializing in the lobby of the host hotel and a lot of kinky play in the rooms. One of the highlights for me was a mummification party. However, things got awkward when I had to explain to my friends that my husband thought I was on a business trip. We’ve been together for 25 years, living a happy life in a very blue college town in a very red state. Early in the relationship, he discovered that I am into BDSM when he found some Polaroids and some bondage gear in a duffel bag in the back of the closet. I had planned to tell him, just not at the very beginning of our relationship. Instead of…

[ Read more ]

17:56

Slog AM: Millionaire Tax Advances, Trump’s Consumer Protection Bureau Lost Us $19 Billion, EPA to Revoke Legal Basis of Clean Air Act Protections [The Stranger]

The Stranger's Morning News Roundup by Vivian McCall

Senate Committee Passes Millionaire’s Tax: The 9.9 percent income tax on people making more than $1 million a year is moving forward with a tax break for small businesses. Businesses making $300,000 or less won’t have to pay a dime of the state’s business and occupation (B&O) tax, while those making below $600,000 will see limited relief. The state Senate could vote on the bill as early as next week.

Party Fouls: Police arrested several people after the Seahawks won the Superbowl Sunday night. For having a good time? No, for DUI, assault, and weapons violations.

Not the Olympic Marmot! Our local whistling rodent isn’t on the endangered species list yet, but the US Fish and Wildlife Service has determined a petition to list them warrants further review. As temperatures warm, trees are advancing up the mountain, destroying the alpine meadows they call home. There’s no place else for them to go.

Fortunately, climate change is not real. Trump’s Environmental Protection Agency will revoke the “endangerment finding” this week, an Obama-era policy that determined that greenhouse gases like carbon dioxide threaten public health. The finding is the legal basis for nearly all regulations under the Clean Air Act.

At least we have our health? Roughly 19,000 fewer Washingtonians signed up for health insurance through the state’s online marketplace this year. The drop isn’t as bad as the state predicted (80,000), but decidedly not good either. The state’s Cascade Care Savings plan for people who make up to 250 percent of the federal poverty line helped mitigate the loss of federal subsidies this year, but it won’t last.

At least we have … capitalism? Trump’s Consumer Financial Protection Bureau has largely stopped protecting us, a decision that has cost Americans about $19 billion in the last year. The report says in the last year the CFPB has abandoned major consumer protections, stalled investigations, and dismissed lawsuits. Last year, Trump announced that he wanted to essentially pull the plug on the agency, reducing staff from 1,689 to 207, a move mercifully blocked in the courts.

Um, chat? Next month, default gamer messaging app Discord will automatically set user accounts to “teen-appropriate” experience, unless they can verify their age with a government ID or an AI face scan. This is the same company that exposed the government IDs of 70,000 users when a third party service it used for age verification was hacked.

Hostage Situation: Trump posted that he won’t open the Gordie Howe International Bridge between Detroit and Winsor, Canada until Canada has “fully compensated” the US for “everything we have given them.” “With all we have given them, we should own, perhaps, at least half of this asset.” Trump also said that if Canada made a trade deal with China, “the first thing China will do is terminate ALL Ice Hockey being played in Canada, and permanently eliminate The Stanley Cup.” What?

Rare W: The Republican Governor of New Hampshire vetoed her party’s anti-trans bathroom bill for a third time. Here’s the state’s motto: Live Free or Die. 

ICYMI: If you miss rooting for the home team, you could watch Seattle drag queen Jane Don’t compete on Drag Race. Stranger contributor Mike Kohfeld has another RuPaul recap.

Phone … wallet … keys, and OH NO! A Louisiana National Guard soldier left his AR-15 in a hotel bathroom on Bourbon Street while on patrol in the French Quarter. “I kind of feel bad for him because that's one of the main rules of being in the Army I would think is you're always supposed to have your weapon in your hands and not in somebody else’s,” said French Quarter performer Nervous Dwayne.

I know nothing gets past you. But the less observant people in your life will appreciate this explainer of the political and cultural references in Bad Bunny’s Superbowl performance.

I believe many, many things get past this guy:

 

It literally had a heterosexual wedding, dude

[image or embed]

— Justin Baragona (@justinbaragona.bsky.social) February 10, 2026 at 5:21 AM

 

Liar: Trump has maintained he knew nothing of Jeffrey Epstein’s sex crimes. But in 2006, he told the then-chief of the Palm Beach police department Micahel Reiter that Epstein’s “activities” with teenage girls were well known in New York and Palm Beach. “Thank goodness you’re stopping him, everyone has known he’s been doing this,” Reiter recalled Trump saying in a 2019 FBI interview released in the Epstein case files.

A song for Trump:

17:07

How did Windows 95 get permission to put the Weezer video Buddy Holly on the CD? [The Old New Thing]

Some time ago, I noted that the Windows 95 CD contained a variety of multimedia extras, partly because they were fun, and partly to show off Windows 95’s multimedia capabilities.

One of those multimedia extras was the music video for the song Buddy Holly by the band Weezer. Acquiring permission to redistribute the video took multiple steps.

First, Microsoft had to secure the rights to the song itself, which was negotiated directly with Weezer’s publisher Geffen Records, and apparently without the knowledge of the band members themselves. They were reportedly upset that they weren’t consulted but later realized that it was “one of the greatest things that could have happened to us. Can you imagine that happening today? It’s like, there’s one video on YouTube, and it’s your video.”

But that only secured the rights to the music. What about the video?

The video takes place in a reconstruction of a location from the Happy Days television program, and clips from that show were spliced into the music video to create the illusion that many of the characters from the show were part of the video. The lawyer responsible for securing the rights to the video had to contact all of the actors from Happy Days to get their permission. That lawyer thoroughly enjoyed the assignment. I don’t know whether he got to talk to the actors directly, or only to their agents, but I can imagine it being an interesting experience trying to find Henry Winkler’s telephone number (or his agent’s telephone number) with a chance of talking to The Fonz himself.

The post How did Windows 95 get permission to put the Weezer video <I>Buddy Holly</I> on the CD? appeared first on The Old New Thing.

GTK hackfest, 2026 edition (GTK Development Blog) [LWN.net]

Matthias Clasen has published a short summary of the GTK hackfest held prior to FOSDEM 2026. Topics include discussions on unstable APIs, a decision to bump the C runtime requirement to C11 in the next development cycle, limiting changes in GTK3 to crash and build fixes, as well as the state of accessibility:

On the accessibility side, we are somewhat worried about the state of AccessKit. The code upstream is maintained, but we haven't seen movement in the GTK implementation. We still default to the AT-SPI backend on Linux, but AccessKit is used on Windows and macOS (and possibly Android in the future); it would be nice to have consumers of the accessibility stack looking at the code and issues.

On the AT-SPI side we are still missing proper feature negotiation in the protocol; interfaces are now versioned on D-Bus, but there's no mechanism to negotiate the supported set of roles or events between toolkits, compositors, and assistive technologies, which makes running newer applications on older OS versions harder.

Dave Farber RIP [LWN.net]

From the NANOG list comes the sad news of the passing of Dave Farber.

His professional accomplishments and impact are almost endless, but often captured by one moniker: "grandfather of the Internet," acknowledging the foundational contributions made by his many students at the University of California, Irvine; the University of Delaware; the University of Pennsylvania; and Carnegie Mellon University.

See also: this announcement by Manny Farber on Farber's "Interesting People" list.

16:21

Link [Scripting News]

Podcast: It occurred to me yesterday that there are a lot of parallels with Frontier on the Mac in the early 90s and WordLand and WordPress in the 2020s. So I told the story in a podcast and I think it came out really well. I did some editing at the beginning and end, and as usual my audio editing is pretty crude, but otherwise the story is exactly as I told it. I also asked Claude.ai to do a third-person summary of the podcast, as I did with the previous three shows, and it's getting better. I encourage anyone who's involved in the WordPress community to listen. I think WP has a bigger role to play in the web than it currently has, which imho is saying a lot. 15 minutes.

AI in China and the United States [Radar]

At a private dinner a few months ago, Jensen Huang apparently said what I’ve been thinking for some time. The US is significantly behind China in AI development. Here are some of the reasons.

Huang starts with the ratio of AI developers in China (he estimates 1 million) to AI developers in the US (20,000). That’s a 50:1 ratio. While I think he’s overstating China and understating the US, I use a different metric that gives the same general result. When you’re reading academic papers about the latest developments in AI, count the authors with Asian names1; count the number with European names. For the moment, forget where the authors live or work: could be MIT, could be Alibaba. The Asian names (including South Asia) will be a significant majority.

Now remember where the authors might live, and consider the fact that the US has hung out a big “not welcome” sign for immigrants. Forget about “we only want the good immigrants”; that’s incredibly condescending, and no one of any nationality will believe it, or believe that they’ll be treated fairly once they arrive. Every immigrant worker in the US—or considering coming to the US—has to consider the possibility that he will be in the wrong place at the wrong time with the wrong skin color, and end up on a flight to a death camp. Are we surprised that international workers are leaving? Are we surprised that immigrants are arriving in smaller numbers? A $100,000 price tag on H1B visa applications says “We’ll only let you in if you make it worth our while.” That’s gangster talk, not responsible government. The US’s ability to train high-quality engineers and programmers and provide them with a high standard of living after graduation has historically been one of its greatest strengths. But given the current policies, are we surprised that fewer international students are coming to the US? China has built an impressive network of colleges and universities, particularly for engineering and the sciences. Students can get a first-rate education without the risks of coming to the US, risks that include having said the wrong things on social media and being sent back at the border.

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

I read somewhere (might have been Kissinger) that no empire has survived without importing intellectual capital. That’s true of the Romans and the Greeks. That’s true of the British. And it’s true of the US and its massive immigrant workforce. (Unfortunately, providing essential skills and expertise has never protected immigrants from racism.) Joy’s law is about companies rather than nations, but it still applies: “No matter who you are, most of the smartest people work for someone else” is almost a restatement of the same idea. If you want to work with the smartest people, you have to bring as many as you can in from the outside—and even as you’re bringing outside workers in, the supply of good talent that doesn’t work for you will always exceed the talent you’ve managed to acquire. But now, think about what education means for this talent flow: China no longer needs to export students to the US and hope that some of them will return. And they’re in a position to attract talent from elsewhere.

Huang is also right that restrictions on semiconductor exports have not only failed, they are leading China to develop their own technology. China’s homegrown GPU industry has almost reached the level of the US’s and will no doubt surpass it. Restrictions on semiconductor sales have had another effect that Huang doesn’t mention. What do you do when you don’t have the fastest hardware? You make your software more efficient. You optimize it so it runs faster and draws less energy. You build it to run efficiently on older hardware using techniques like quantization. That’s evident in all of the recent models coming from China, from DeepSeek to the newly released Qwen-3-Max-Thinking or Kimi K2.5. The US is trapped in the notion that bigger is better2; China is playing the “better is small, more efficient, and open” card. Guess which one wins?

Electrical power tells a similar story. The top domestic AI companies are talking about building data centers that will require many more gigawatts of electrical capacity. The plan seems to be building that generation capacity with coal, gas, and nuclear—good luck. Those are the most expensive and inflexible ways to build capacity. The current administration has hobbled the development of solar power, wind power, and battery backup. China, while it’s also building out coal, is leading the world in building out solar capacity. It also leads the world in the development of solar and wind technology, only partly because of its rare-earth resources. It’s possible that the cost of coal generation might drop—after all, coal is a commodity that few nations want any more, and lack of demand might lead to a price collapse. But cheap coal and free solar are far from equivalent. If the AI powers-that-be in the US plan to build data centers at scale, they will need to come up with better, less expensive sources of power. That’s another area in which China is way ahead.

After reports of Huang’s dinner talk leaked, he walked back the remarks in some posts on X. But that begs the question: Which version do you believe? I know which version I believe; the evidence—personnel, chips, efficiency, power—all points in the same direction.


Footnotes

  1. I include names that appear Indian and Arabic; India and the Arab nations are often not taken into consideration. A surprising number of the names in my count are Spanish: undoubtedly European, but also a focal point for anti-immigrant sentiment in the US.
  2. I see that as cultural baggage, but that’s another argument.

One Version of Events [The Daily WTF]

Jon supports some software that's been around long enough that the first versions of the software ran on, and I quote, "homegrown OS". They've long since migrated to Linux, and in the process much of their software remained the same. Many of the libraries that make up their application haven't been touched in decades. Because of this, they don't really think too much about how they version libraries; when they deploy they always deploy the file as mylib.so.1.0. Their RPM post-install scriptlet does an ldconfig after each deployment to get the symlinks updated.

For those not deep into Linux library management, a brief translation: shared libraries in Linux are .so files. ldconfig is a library manager, which finds the "correct" versions of the libraries you have installed and creates symbolic links to standard locations, so that applications which depend on those libraries can load them.

In any case, Jon's team's solution worked until it didn't. They deployed a new version of the software, yum reported success, but the associated services refused to start. This was bad, because this happened in production. It didn't happen in test. They couldn't replicate it anywhere else, actually. So they built a new version of one of the impacted libraries, one with debug symbols enabled, and copied that over. They manually updated the symlinks, instead of using ldconfig, and launched the service.

The good news: it worked.

The bad news: it worked, but the only difference was that the library was built with debug symbols. The functionality was exactly the same.

Well, that was the only difference other than the symlink.

Fortunately, a "before" listing of the library files was captured before the debug version was installed, a standard practice by their site-reliability-engineers. They do this any time they try and debug in production, so that they can quickly revert to the previous state. And in this previous version, someone noticed that mylib.so was a symlink pointing to mylib.so.1.0.bkup_20190221.

Once again, creating a backup file is a standard practice for their SREs. Apparently, way back in 2019 someone was doing some debugging. They backed up the original library file, but never deleted the backup. And for some reason, ldconfig had been choosing the backup file when scanning for the "correct" version of libraries. Why?

Here, Jon does a lot of research for us. It turns out, if you start with the man pages, you don't get a answer- but you do get a warning:

ldconfig will look only at files that are named lib*.so* (for regular shared objects) or ld-.so (for the dynamic loader itself). Other files will be ignored. Also, ldconfig expects a certain pat‐
tern to how the symbolic links are set up, like this example, where the middle file (libfoo.so.1 here) is the SONAME for the library:

libfoo.so -> libfoo.so.1 -> libfoo.so.1.12

Failure to follow this pattern may result in compatibility issues after an upgrade.

Well, they followed the pattern, and they found compatibility issues. But what exactly is going on here? Jon did the work of digging straight into the ldconfig source to find out the root cause.

The version detecting algorithm starts by looking directly at filenames. While the man page warns about a convention, ldconfig doesn't validate names against this convention (which is probably the correct decision). Insetad, to find which filename has the highest version number, it scans through two filenames until finds numeric values in both of them, then does some pretty manual numeric parsing:

int _dl_cache_libcmp(const char *p1, const char *p2) {
  while (*p1 != '\0') {
    if (*p1 >= '0' && *p1 <= '9') {
      if (*p2 >= '0' && *p2 <= '9') {
        /* Must compare this numerically.  */
        int val1;
        int val2;

        val1 = *p1++ - '0';
        val2 = *p2++ - '0';
        while (*p1 >= '0' && *p1 <= '9')
          val1 = val1 * 10 + *p1++ - '0';
        while (*p2 >= '0' && *p2 <= '9')
          val2 = val2 * 10 + *p2++ - '0';
        if (val1 != val2)
          return val1 - val2;
      } else
        return 1;
    } else if (*p2 >= '0' && *p2 <= '9')
      return -1;
    else if (*p1 != *p2)
      return *p1 - *p2;
    else {
      ++p1;
      ++p2;
    }
  }
  return *p1 - *p2;
}

NB: this is the version of ldconfig at the time Jon submitted this, and the version that they're using. I haven't dug through to check if this is still true in the latest version. That's an exercise for the reader.

While we have not hit the end of the first string, check if the character in that string is numeric. If it is, check if the character in the second string is numeric. If it is, keep scanning through characters, and for as long as they're numeric, keep parsing them into numbers. If the numbers aren't the same, we return the difference between them.

If the first string contains numbers at this point, but the second string doesn't, return 1. If the second string contains numbers but not the first, return -1. Otherwise, increment our pointers and go to the next character. If we reach the end of the string without finding numeric characters, return the difference between these two characters.

Also, correct me if I'm wrong, but it seems like a malicious set of filenames could cause buffer overruns here.

Now, I'll be honest, I don't have the fortitude to suggest that ldconfig is TRWTF here. It's a venerable piece of software that's solving an extremely hard problem. But boy, DLL Hell is an unending struggle and this particular solution certainly isn't helping. I'm honestly not entirely certain I'd say that there was a true WTF here, just an unfortunate confluence of people doing their best and ending up laying landmines for others.

But here's the fun conclusion: the 2019 version of the library actually had been updated. They'd deployed several new versions between 2019 and 2024, when things finally blew up. The actual deployed software kept using the backup file from 2019, and while it may have caused hard-to-notice and harder-to-diagnose bugs, it didn't cause any crashes until 2024.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (fence-agents, firefox, fontforge, freerdp, kernel-rt, keylime, libsoup, libsoup3, nodejs22, nodejs24, opentelemetry-collector, osbuild-composer, python3.12-wheel, qemu-kvm, resource-agents, thunderbird, and util-linux), Debian (kernel, rlottie, shaarli, and usbmuxd), Fedora (asciinema, atuin, bustle, cef, envision, glycin, greetd, helix, java-21-openjdk, java-25-openjdk, java-latest-openjdk, keylime-agent-rust, maturin, mirrorlist-server, ntpd-rs, python3.6, rust-add-determinism, rust-afterburn, rust-ambient-id, rust-app-store-connect, rust-bat, rust-below, rust-btrd, rust-busd, rust-bytes, rust-cargo-c, rust-cargo-deny, rust-coreos-installer, rust-crypto-auditing-agent, rust-crypto-auditing-client, rust-crypto-auditing-event-broker, rust-crypto-auditing-log-parser, rust-dua-cli, rust-eif_build, rust-git-delta, rust-git-interactive-rebase-tool, rust-git2, rust-gst-plugin-dav1d, rust-gst-plugin-reqwest, rust-heatseeker, rust-ingredients, rust-jsonwebtoken, rust-lsd, rust-monitord, rust-monitord-exporter, rust-muvm, rust-nu, rust-num-conv, rust-onefetch, rust-oo7-cli, rust-pleaser, rust-pore, rust-pretty-git-prompt, rust-procs, rust-rbspy, rust-rbw, rust-rd-agent, rust-rd-hashd, rust-redlib, rust-resctl-bench, rust-resctl-demo, rust-routinator, rust-sccache, rust-scx_layered, rust-scx_rustland, rust-scx_rusty, rust-sequoia-chameleon-gnupg, rust-sequoia-keystore-server, rust-sequoia-octopus-librnp, rust-sequoia-sq, rust-sevctl, rust-shadow-rs, rust-sigul-pesign-bridge, rust-snpguest, rust-speakersafetyd, rust-tealdeer, rust-time, rust-time-core, rust-time-macros, rust-tokei, rust-weezl, rust-wiremix, rust-ybaas, rustup, sad, tbtools, tuigreet, and uv), Mageia (fontforge and nginx), Oracle (firefox, fontforge, freerdp, kernel, keylime, libsoup, python, thunderbird, and uek-kernel), SUSE (abseil-cpp and kernel), and Ubuntu (freerdp2 and libsoup3).

[$] FOSS in times of war, scarcity, and AI [LWN.net]

Michiel Leenaars, director of strategy at the NLnet Foundation, used his keynote at FOSDEM to sound warnings for the community for free and open-source (FOSS) software; in particular, he talked about the threats posed by geopolitical politics, dangerous allies, and large language models (LLMs). His talk was a mix of observations and suggestions that pertain to FOSS in general and to Europe in particular as geopolitical tensions have mounted in recent months.

Freexian Collaborators: Writing a new worker task for Debusine (by Carles Pina i Estany) [Planet Debian]

Debusine is a tool designed for Debian developers and Operating System developers in general. You can try out Debusine on debusine.debian.net, and follow its development on salsa.debian.org.

This post describes how to write a new worker task for Debusine. It can be used to add tasks to a self-hosted Debusine instance, or to submit to the Debusine project new tasks to add new capabilities to Debusine.

Tasks are the lower-level pieces of Debusine workflows. Examples of tasks are Sbuild, Lintian, Debdiff (see the available tasks).

This post will document the steps to write a new basic worker task. The example will add a worker task that runs reprotest and creates an artifact of the new type ReprotestArtifact with the reprotest log.

Tasks are usually used by workflows. Workflows solve high-level goals by creating and orchestrating different tasks (e.g. a Sbuild workflow would create different Sbuild tasks, one for each architecture).

Overview of tasks

A task usually does the following:

  • It receives structured data defining its input artifacts and configuration
  • Input artifacts are downloaded
  • A process is run by the worker (e.g. lintian, debdiff, etc.). In this blog post, it will run reprotest
  • The output (files, logs, exit code, etc.) is analyzed, artifacts and relations might be generated, and the work request is marked as completed, either with Success or Failure

If you want to follow the tutorial and add the Reprotest task, your Debusine development instance should have at least one worker, one user, a debusine client set up, and permissions for the client to create tasks. All of this can be setup following the steps in the Contribute section of the documentation.

This blog post shows a functional Reprotest task. This task is not currently part of Debusine. The Reprotest task implementation is simplified (no error handling, unit tests, specific view, docs, some shortcuts in the environment preparation, etc.). At some point, in Debusine, we might add a debrebuild task which is based on buildinfo files and uses snapshot.debian.org to recreate the binary packages.

Defining the inputs of the task

The input of the reprotest task will be a source artifact (a Debian source package). We model the input with pydantic in debusine/tasks/models.py:

class ReprotestData(BaseTaskDataWithExecutor):
   """Data for Reprotest task."""

   source_artifact: LookupSingle

class ReprotestDynamicData(BaseDynamicTaskDataWithExecutor):
   """Reprotest dynamic data."""

   source_artifact_id: int | None = None

The ReprotestData is what the user will input. A LookupSingle is a lookup that resolves to a single artifact.

We would also have configuration for the desired variations to test, but we have left that out of this example for simplicity. Configuring variations is left as an exercise for the reader.

Since ReprotestData is a subclass of BaseTaskDataWithExecutor it also contains environment where the user can specify in which environment the task will run. The environment is an artifact with a Debian image.

The ReprotestDynamicData holds the resolution of all lookups. These can be seen in the “Internals” tab of the work request view.

Add the new Reprotest artifact data class

In order for the reprotest task to create a new Artifact of the type DebianReprotest with the log and output metadata: add the new category to ArtifactCategory in debusine/artifacts/models.py:

    REPROTEST = "debian:reprotest"

In the same file add the DebianReprotest class:

class DebianReprotest(ArtifactData):
   """Data for debian:reprotest artifacts."""

   reproducible: bool | None = None

   def get_label(self) -> str:
       """Return a short human-readable label for the artifact."""
       return "reprotest analysis"

It could also include the package name or version.

In order to have the category listed in the work request output artifacts table, edit the file debusine/db/models/artifacts.py: In ARTIFACT_CATEGORY_ICON_NAMES add ArtifactCategory.REPROTEST: "folder", and in ARTIFACT_CATEGORY_SHORT_NAMES add ArtifactCategory.REPROTEST: "reprotest",.

Create the new Task class

In debusine/tasks/ create a new file reprotest.py.

reprotest.py
# Copyright © The Debusine Developers
# See the AUTHORS file at the top-level directory of this distribution
#
# This file is part of Debusine. It is subject to the license terms
# in the LICENSE file found in the top-level directory of this
# distribution. No part of Debusine, including this file, may be copied,
# modified, propagated, or distributed except according to the terms
# contained in the LICENSE file.

"""Task to use reprotest in debusine."""

from pathlib import Path
from typing import Any

from debusine import utils
from debusine.artifacts.local_artifact import ReprotestArtifact
from debusine.artifacts.models import (
    ArtifactCategory,
    CollectionCategory,
    DebianSourcePackage,
    DebianUpload,
    WorkRequestResults,
    get_source_package_name,
    get_source_package_version,
)
from debusine.client.models import RelationType
from debusine.tasks import BaseTaskWithExecutor, RunCommandTask
from debusine.tasks.models import ReprotestData, ReprotestDynamicData
from debusine.tasks.server import TaskDatabaseInterface


class Reprotest(
    RunCommandTask[ReprotestData, ReprotestDynamicData],
    BaseTaskWithExecutor[ReprotestData, ReprotestDynamicData],
):
    """Task to use reprotest in debusine."""

    TASK_VERSION = 1

    CAPTURE_OUTPUT_FILENAME = "reprotest.log"

    def __init__(
        self,
        task_data: dict[str, Any],
        dynamic_task_data: dict[str, Any] | None = None,
    ) -> None:
        """Initialize object."""
        super().__init__(task_data, dynamic_task_data)

        self._reprotest_target: Path | None = None

    def build_dynamic_data(
        self, task_database: TaskDatabaseInterface
    ) -> ReprotestDynamicData:
        """Compute and return ReprotestDynamicData."""
        input_source_artifact = task_database.lookup_single_artifact(
            self.data.source_artifact
        )

        assert input_source_artifact is not None
        self.ensure_artifact_categories(
            configuration_key="input.source_artifact",
            category=input_source_artifact.category,
            expected=(
                ArtifactCategory.SOURCE_PACKAGE,
                ArtifactCategory.UPLOAD,
            ),
        )
        assert isinstance(
            input_source_artifact.data, (DebianSourcePackage, DebianUpload)
        )
        subject = get_source_package_name(input_source_artifact.data)
        version = get_source_package_version(input_source_artifact.data)

        assert self.data.environment is not None

        environment = self.get_environment(
            task_database,
            self.data.environment,
            default_category=CollectionCategory.ENVIRONMENTS,
        )

        return ReprotestDynamicData(
            source_artifact_id=input_source_artifact.id,
            subject=subject,
            parameter_summary=f"{subject}_{version}",
            environment_id=environment.id,
        )

    def get_input_artifacts_ids(self) -> list[int]:
        """Return the list of input artifact IDs used by this task."""
        if not self.dynamic_data:
            return []

        return [
            self.dynamic_data.source_artifact_id,
            self.dynamic_data.environment_id,
        ]

    def fetch_input(self, destination: Path) -> bool:
        """Download the required artifacts."""
        assert self.dynamic_data

        artifact_id = self.dynamic_data.source_artifact_id
        assert artifact_id is not None
        self.fetch_artifact(artifact_id, destination)

        return True

    def configure_for_execution(self, download_directory: Path) -> bool:
        """
        Find a .dsc in download_directory.

        Install reprotest and other utilities used in _cmdline.
        Set self._reprotest_target to it.

        :param download_directory: where to search the files
        :return: True if valid files were found
        """
        self._prepare_executor_instance()

        if self.executor_instance is None:
            raise AssertionError("self.executor_instance cannot be None")

        self.run_executor_command(
            ["apt-get", "update"],
            log_filename="install.log",
            run_as_root=True,
            check=True,
        )
        self.run_executor_command(
            [
                "apt-get",
                "--yes",
                "--no-install-recommends",
                "install",
                "reprotest",
                "dpkg-dev",
                "devscripts",
                "equivs",
                "sudo",
            ],
            log_filename="install.log",
            run_as_root=True,
        )

        self._reprotest_target = utils.find_file_suffixes(
            download_directory, [".dsc"]
        )
        return True

    def _cmdline(self) -> list[str]:
        """
        Build the reprotest command line.

        Use configuration of self.data and self._reprotest_target.
        """
        target = self._reprotest_target
        assert target is not None

        cmd = [
            "bash",
            "-c",
            f"TMPDIR=/tmp ; cd /tmp ; dpkg-source -x {target} package/; "
            "cd package/ ; mk-build-deps ; apt-get install --yes ./*.deb ; "
            "rm *.deb ; "
            "reprotest --vary=-time,-user_group,-fileordering,-domain_host .",
        ]

        return cmd

    @staticmethod
    def _cmdline_as_root() -> bool:
        r"""apt-get install --yes ./\*.deb must be run as root."""
        return True

    def task_result(
        self,
        returncode: int | None,
        execute_directory: Path,  # noqa: U100
    ) -> WorkRequestResults:
        """
        Evaluate task output and return success.

        For a successful run of reprotest:
        -must have the output file
        -exit code is 0

        :return: WorkRequestResults.SUCCESS or WorkRequestResults.FAILURE.
        """
        reprotest_file = execute_directory / self.CAPTURE_OUTPUT_FILENAME

        if reprotest_file.exists() and returncode == 0:
            return WorkRequestResults.SUCCESS

        return WorkRequestResults.FAILURE

    def upload_artifacts(
        self, exec_directory: Path, *, execution_result: WorkRequestResults
    ) -> None:
        """Upload the ReprotestArtifact with the files and relationships."""
        if not self.debusine:
            raise AssertionError("self.debusine not set")

        assert self.dynamic_data is not None
        assert self.dynamic_data.parameter_summary is not None

        reprotest_artifact = ReprotestArtifact.create(
            reprotest_output=exec_directory / self.CAPTURE_OUTPUT_FILENAME,
            reproducible=execution_result == WorkRequestResults.SUCCESS,
            package=self.dynamic_data.parameter_summary,
        )

        uploaded = self.debusine.upload_artifact(
            reprotest_artifact,
            workspace=self.workspace_name,
            work_request=self.work_request_id,
        )

        assert self.dynamic_data is not None
        assert self.dynamic_data.source_artifact_id is not None
        self.debusine.relation_create(
            uploaded.id,
            self.dynamic_data.source_artifact_id,
            RelationType.RELATES_TO,
        )

Below are the main methods with some basic explanation.

In order for Debusine to discover the task, add "Reprotest" in the file debusine/tasks/__init__.py in the __all__ list.

Let’s explain the different methods of the Reprotest class:

build_dynamic_data method

The worker has no access to Debusine’s database. Lookups are all resolved before the task gets dispatched to a worker, so all it has to do is download the specified input artifacts.

build_dynamic_data method lookup the artifact, assert that is a valid category, extract the package name and version, and get the environment in which it will be executed.

The environment is needed to run the task (reprotest will run in a container using unshare, incus…).

    def build_dynamic_data(
        self, task_database: TaskDatabaseInterface
    ) -> ReprotestDynamicData:
        """Compute and return ReprotestDynamicData."""
        input_source_artifact = task_database.lookup_single_artifact(
            self.data.source_artifact
        )

        assert input_source_artifact is not None
        self.ensure_artifact_categories(
            configuration_key="input.source_artifact",
            category=input_source_artifact.category,
            expected=(
                ArtifactCategory.SOURCE_PACKAGE,
                ArtifactCategory.UPLOAD,
            ),
        )
        assert isinstance(
            input_source_artifact.data, (DebianSourcePackage, DebianUpload)
        )
        subject = get_source_package_name(input_source_artifact.data)
        version = get_source_package_version(input_source_artifact.data)

        assert self.data.environment is not None

        environment = self.get_environment(
            task_database,
            self.data.environment,
            default_category=CollectionCategory.ENVIRONMENTS,
        )

        return ReprotestDynamicData(
            source_artifact_id=input_source_artifact.id,
            subject=subject,
            parameter_summary=f"{subject}_{version}",
            environment_id=environment.id,
        )

get_input_artifacts_ids method

Used to list the task’s input artifacts in the web UI.

   def get_input_artifacts_ids(self) -> list[int]:
       """Return the list of input artifact IDs used by this task."""
       if not self.dynamic_data:
           return []

       assert self.dynamic_data.source_artifact_id is not None
       return [self.dynamic_data.source_artifact_id]

fetch_input method

Download the required artifacts on the worker.

    def fetch_input(self, destination: Path) -> bool:
        """Download the required artifacts."""
        assert self.dynamic_data

        artifact_id = self.dynamic_data.source_artifact_id
        assert artifact_id is not None
        self.fetch_artifact(artifact_id, destination)

        return True

configure_for_execution method

Install the packages needed by the task and set _reprotest_target, which is used to build the task’s command line.

   def configure_for_execution(self, download_directory: Path) -> bool:
       """
       Find a .dsc in download_directory.

       Install reprotest and other utilities used in _cmdline.
       Set self._reprotest_target to it.

       :param download_directory: where to search the files
       :return: True if valid files were found
       """
       self._prepare_executor_instance()

       if self.executor_instance is None:
           raise AssertionError("self.executor_instance cannot be None")

       self.run_executor_command(
           ["apt-get", "update"],
           log_filename="install.log",
           run_as_root=True,
           check=True,
       )
       self.run_executor_command(
           [
               "apt-get",
               "--yes",
               "--no-install-recommends",
               "install",
               "reprotest",
               "dpkg-dev",
               "devscripts",
               "equivs",
               "sudo",
           ],
           log_filename="install.log",
           run_as_root=True,
       )

       self._reprotest_target = utils.find_file_suffixes(
           download_directory, [".dsc"]
       )
       return True

_cmdline method

Return the command line to run the task.

In this case, and to keep the example simple, we will run reprotest directly in the worker’s executor VM/container, without giving it an isolated virtual server.

So, this command installs the build dependencies required by the package (so reprotest can build it) and runs reprotest itself.

   def _cmdline(self) -> list[str]:
       """
       Build the reprotest command line.

       Use configuration of self.data and self._reprotest_target.
       """
       target = self._reprotest_target
       assert target is not None

       cmd = [
           "bash",
           "-c",
           f"TMPDIR=/tmp ; cd /tmp ; dpkg-source -x {target} package/; "
           "cd package/ ; mk-build-deps ; apt-get install --yes ./*.deb ; "
           "rm *.deb ; "
           "reprotest --vary=-time,-user_group,-fileordering,-domain_host .",
       ]

       return cmd

Some reprotest variations are disabled. This is to keep the example simple with the set of packages to install and reprotest features.

_cmdline_as_root method

Since during the execution it’s needed to install packages, run it as root (in the container):

   @staticmethod
   def _cmdline_as_root() -> bool:
       r"""apt-get install --yes ./\*.deb must be run as root."""
       return True

task_result method

Task succeeded if a log is generated and the return code is 0.

    def task_result(
        self,
        returncode: int | None,
        execute_directory: Path,  # noqa: U100
    ) -> WorkRequestResults:
        """
        Evaluate task output and return success.

        For a successful run of reprotest:
        -must have the output file
        -exit code is 0

        :return: WorkRequestResults.SUCCESS or WorkRequestResults.FAILURE.
        """
        reprotest_file = execute_directory / self.CAPTURE_OUTPUT_FILENAME

        if reprotest_file.exists() and returncode == 0:
            return WorkRequestResults.SUCCESS

        return WorkRequestResults.FAILURE

upload_artifacts method

Create the ReprotestArtifact with the log and the reproducible boolean, upload it, and then add a relation between the ReprotestArtifact and the source package:

    def upload_artifacts(
        self, exec_directory: Path, *, execution_result: WorkRequestResults
    ) -> None:
        """Upload the ReprotestArtifact with the files and relationships."""
        if not self.debusine:
            raise AssertionError("self.debusine not set")

        assert self.dynamic_data is not None
        assert self.dynamic_data.parameter_summary is not None

        reprotest_artifact = ReprotestArtifact.create(
            reprotest_output=exec_directory / self.CAPTURE_OUTPUT_FILENAME,
            reproducible=execution_result == WorkRequestResults.SUCCESS,
            package=self.dynamic_data.parameter_summary,
        )

        uploaded = self.debusine.upload_artifact(
            reprotest_artifact,
            workspace=self.workspace_name,
            work_request=self.work_request_id,
        )

        assert self.dynamic_data is not None
        assert self.dynamic_data.source_artifact_id is not None
        self.debusine.relation_create(
            uploaded.id,
            self.dynamic_data.source_artifact_id,
            RelationType.RELATES_TO,
        )

Execution example

To run this task in a local Debusine (see steps to have it ready with an environment, permissions and users created) you can do:

$ python3 -m debusine.client artifact import-debian -w System http://deb.debian.org/debian/pool/main/h/hello/hello_2.10-5.dsc

(get the artifact ID from the output of that command)

The artifact can be seen in http://$DEBUSINE/debusine/System/artifact/$ARTIFACTID/.

Then create a reprotest.yaml:

$ cat <<EOF > reprotest.yaml
source_artifact: $ARTIFACT_ID
environment: "debian/match:codename=bookworm"
EOF

Instead of debian/match:codename=bookworm it could use the artifact ID.

Finally, create the work request to run the task:

$ python3 -m debusine.client create-work-request -w System reprotest --data reprotest.yaml

Using Debusine web you can see the work request, which should go to Running status, then Completed with Success or Failure (depending if reprotest could reproduce it or not). Clicking on the Output tab would have an artifact of type debian:reprotest with one file: the log. In the Metadata tab of the artifact it has Data: the package name and reproducible (true or false).

What is left to do?

This was a simple example of creating a task. Other things that could be done:

  • unit tests
  • documentation
  • configurable variations
  • running reprotest directly on the worker host, using the executor environment as a reprotest “virtual server”
  • in this specific example, the command line might be doing too many things that could maybe be done by other parts of the task, such as prepare_environment.
  • integrate it in a workflow so it’s easier to use (e.g. part of QaWorkflow)
  • extract more from the log than just pass/fail
  • display the output in a more useful way (implement an artifact specialized view)

Pluralistic: The Nuremberg Caucus (10 Feb 2026) [Pluralistic: Daily links from Cory Doctorow]

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

Today's links



A famous 1961 photo of Adolf Eichmann on trial in Jerusalem; Eichmann's face has been replaced with the face of Stephen Miller.

The Nuremberg Caucus (permalink)

America's descent into authoritarian fascism is made all the more alarming and demoralizing by the Democrats' total failure to rise to the moment:

https://www.youtube.com/watch?v=KADW3ZRZLVI

But what would "rising to the moment" look like? What can the opposition party do without majorities in either house? Well, they could start by refusing to continue to fund ICE, a masked thug snatch/murder squad that roams our streets, killing with impunity:

https://www.nbcnews.com/politics/congress/house-passes-sprawling-spending-package-democrats-split-ice-funding-rcna255273

That's table stakes. What would a real political response to fascism look like? Again, it wouldn't stop with banning masks for ICE goons, or even requiring them to wear QR codes:

https://gizmodo.com/dem-congressman-wants-to-make-ice-agents-wear-qr-codes-2000710345

Though it should be noted that ICE hates this idea, and that ICE agents wear masks because they fear consequences for their sadistic criminality:

https://archive.is/0LNh8

This despite the fact that the (criminally culpable) Vice President has assured them that they have absolute impunity, no matter who they kill:

https://edition.cnn.com/2026/01/08/politics/ice-immunity-jd-vance-minneapolis

The fact that ICE agents worry about consequences despite Vance's assurances suggests ways that Dems could "meet the moment."

I think Dems should start a Nuremberg Caucus, named for the Nazi war-crimes trials that followed from the defeat of German fascists and the death of their leader:

https://en.wikipedia.org/wiki/Nuremberg_trials

What would this caucus do? Well, it could have a public website where it assembled and organized the evidence for the trials that the Democrats could promise to bring after the Trump regime falls. Each fresh outrage, each statement, each video-clip – whether of Trump officials or of his shock-troops – could be neatly slotted in, given an exhibit number, and annotated with the criminal and civil violations captured in the evidence.

The caucus could publish dates these trials will be held on – following from Jan 20, 2029 – and even which courtrooms each official, high and low, will be tried in. These dates could be changed as new crimes emerge, making sure the most egregious offenses are always at the top of the agenda. Each trial would have a witness list.

The Nuremberg Caucus could vow to repurpose ICE's $75b budget to pursue Trump's crimes, from corruption to civil rights violations to labor violations to environmental violations. It could announce its intent to fully fund the FTC and DoJ Antitrust Division to undertake scrutiny of all mergers approved under Trump, and put corporations on notice that they should expect lengthy, probing inquiries into any mergers they undertake between now and the fall of Trumpism. Who knows, perhaps some shareholders will demand that management hold off on mergers in anticipation of this lookback scrutiny, and if not, perhaps they will sue executives after the FTC and DoJ go to work.

While they're at it, the Nuremberg Caucus could publish a plan to hire thousands of IRS agents (paid for by taxing billionaires and zeroing out ICE's budget) who will focus exclusively on the ultra-wealthy and especially any supernormal wealth gains coinciding with the second Trump presidency.

Money talks. ICE agents are signing up with the promise of $50k hiring bonuses and $60k in student debt cancellation. That's peanuts. The Nuremberg Caucus could announce a Crimestoppers-style program with $1m bounties for any ICE officer who a) is themselves innocent of any human rights violations, and; b) provides evidence leading to the conviction of another ICE officer for committing human rights violations. That would certainly improve morale for (some) ICE officers.

Critics of this plan will say that this will force Trump officials to try to steal the next election in order to avoid consequences for their actions. This is certainly true: confidence in a "peaceful transfer of power" is the bedrock of any kind of fair election.

But this bunch have already repeatedly signaled that they intend to steal the midterms and the next general election:

https://www.nj.com/politics/2026/02/top-senate-republican-rejects-trumps-shocking-election-plan-i-think-thats-a-constitutional-issue.html

ICE agents are straight up telling people that ICE is on the streets to arrest people in Democratic-leaning states ("The more people that you lose in Minnesota, you then lose a voting right to stay blue"):

https://unicornriot.ninja/2026/federal-agent-in-coon-rapids-the-more-people-that-you-lose-in-minnesota-you-then-lose-a-voting-right-to-stay-blue/

The only path to fair elections – and saving America – lies through mobilizing and energizing hundreds of millions of Americans. They are ready. They are begging for leadership. They want an electoral choice, something better than a return to the pre-Trump status quo. If you want giant crowds at every polling place, rising up against ICE and DHS voter-suppression, then you have to promise people that their vote will mean something.

Dems have to pick a side. That means being against anyone who is for fascism – including other Dems. The Nuremberg Caucus should denounce the disgusting child abuse perpetrated by the Trump regime:

https://www.propublica.org/article/life-inside-ice-dilley-children

But they should also denounce Democrats who vote to fund that abuse:

https://www.independent.co.uk/news/world/americas/us-politics/fetterman-shutdown-dhs-ice-senate-b2916350.html

The people of Minneapolis (and elsewhere) have repeatedly proven that we outnumber fascists by a huge margin. Dems need to stop demoralizing their base by doing nothing and start demonstrating that they understand the urgency of this crisis.


Hey look at this (permalink)



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

Object permanence (permalink)

#20yrsago Ray Bradbury: LA needs monorails! https://www.latimes.com/archives/la-xpm-2006-feb-05-op-bradbury5-story.html

#20yrsago How statistics caught Indonesia’s war-criminals https://web.archive.org/web/20060423232814/https://www.wired.com/news/technology/1,70196-0.html

#20yrsago Canadian Red Cross vows to sue first aid kits, too https://memex.craphound.com/2006/02/10/canadian-red-cross-vows-to-sue-first-aid-kits-too/

#20yrsago Sports announcer traded for Walt Disney’s first character https://web.archive.org/web/20060312134156/http://sports.yahoo.com/nfl/news?slug=ap-nbc-michaels&amp;prov=ap&amp;type=lgns

#15yrago Government transparency doesn’t matter without accountability https://www.theguardian.com/technology/blog/2011/feb/10/government-data-crime-maps

#10yrsago Hackers stole 101,000 taxpayers’ logins/passwords from the IRS https://arstechnica.com/tech-policy/2016/02/irs-website-attack-nets-e-filing-credentials-for-101000-taxpayers/

#10yrsago CIA boss flips out when Ron Wyden reminds him that CIA spied on the Senate https://www.techdirt.com/2016/02/10/cia-director-freaks-out-after-senator-wyden-points-out-how-cia-spied-senate/

#10yrsago Ta-Nehisi Coates will vote for Bernie Sanders, reparations or no reparations https://www.youtube.com/watch?v=mSJmxN-L300

#10yrsago Gmail will warn you when your correspondents use unencrypted mail transport https://blog.google/products-and-platforms/products/gmail/making-email-safer-for-you-posted-by/

#10yrsago Detoxing is (worse than) bullshit: high lead levels in “detox clay” https://www.statnews.com/2016/02/02/detox-clay-fda-lead/

#10yrsago Nerdy Valentines to print and love https://www.evilmadscientist.com/2016/valentines-4/

#5yrsago A criminal enterprise with a country attachedhttps://pluralistic.net/2021/02/10/duke-sucks/#openlux

#5yrsago Tory donors reap 100X return on campaign contributions https://pluralistic.net/2021/02/10/duke-sucks/#chumocracy

#5yrsago Duke is academia's meanest trademark bully https://pluralistic.net/2021/02/10/duke-sucks/#devils

#5yrsago Crooked cops play music to kill livestreams https://pluralistic.net/2021/02/10/duke-sucks/#bhpd

#1yrago Hugh D'Andrade's "The Murder Next Door" https://pluralistic.net/2025/02/10/pivot-point/#eff


Upcoming appearances (permalink)

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



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

Recent appearances (permalink)



A grid of my books with Will Stahle covers..

Latest books (permalink)



A cardboard book box with the Macmillan logo.

Upcoming books (permalink)

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

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

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

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



Colophon (permalink)

Today's top sources:

Currently writing: "The Post-American Internet," a sequel to "Enshittification," about the better world the rest of us get to have now that Trump has torched America (1007 words today, 25708 total)

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

  • A Little Brother short story about DIY insulin PLANNING


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

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

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


How to get Pluralistic:

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

Pluralistic.net

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

https://pluralistic.net/plura-list

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

https://mamot.fr/@pluralistic

Medium (no ads, paywalled):

https://doctorow.medium.com/

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

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

A starting point for the blog [Seth's Blog]

The challenge of the library is the card catalog. If you don’t know what you’re looking for, it’s hard to find much of anything.

The challenge of the web is the search box, for the same reason. It’s efficient once you’re on a mission, but it requires you to go first.

And the chat interface of Claude and ChatGPT is more of the same. Faced with infinite choice, what we really need is a guide.

By request then, ten places to start on this blog:

“Notes to myself” — 65 principles distilled from 10,000+ posts.

“The smallest viable audience” — This will reframe how you think about mass, about scale and about marketing.

“Seeking yoyu 余裕” — Perhaps we need more humanity and less more.

“Energy and systems complexity” — Systems thinking that connects beans to bureaucracies to solar panels.

“Failing in the trough” — A practical, visual framework anyone with customers can use immediately.

“The AI effort gap” — Six sentences that reframe the entire AI conversation.

“Enrollment” — The deep dive into how change actually happens — not through authority or money, but through people choosing the journey.

“Better than the cheap alternative” — What sort of work is worth doing? Particularly by you?

“The Strategy Questions” — 53 questions from “This Is Strategy.”

“This is number 10,000” — The meta-post.

It would be great if there were a similar service for your project, your work and your interactions with empty search boxes.

One approach: ask the AI what you should be asking about. A good librarian is priceless.

When the Moon Hits Your Eye Out in Trade Paperback Today [Whatever]

Yes, that’s right, the USA Today and Indie Bestseller that was also one of Amazon’s 100 Best Books of 2025, is now out in convenient trade paperback form, with a new bonus chapter: An alternate Day One which I wrote but (previously) did not use. It’s good! And a bit different. And has a cat! Because cats are cool.

Anyway, get it four yourself and buy six more for your friends and family. Saja thanks you in advance for your contribution to his Kibble Fund. It’s available wherever you choose to buy your books, and is of course also still available in ebook and audio.

— JS

Selling Sexy Comics, An Hourly Comic by Jey Pawlik [Oh Joy Sex Toy]

Selling Sexy Comics, An Hourly Comic by Jey Pawlik

Ever wonder what goes on behind the booth at a comic convention? How much work actually goes in to making sexy books? Look no further, because I’m giving you a peek behind the curtain on how selling sexy comics in person looks!Max and I handmake all our own zines, sell them, package them and ship […]

AI-Generated Text and the Detection Arms Race [Schneier on Security]

In 2023, the science fiction literary magazine Clarkesworld stopped accepting new submissions because so many were generated by artificial intelligence. Near as the editors could tell, many submitters pasted the magazine’s detailed story guidelines into an AI and sent in the results. And they weren’t alone. Other fiction magazines have also reported a high number of AI-generated submissions.

This is only one example of a ubiquitous trend. A legacy system relied on the difficulty of writing and cognition to limit volume. Generative AI overwhelms the system because the humans on the receiving end can’t keep up.

This is happening everywhere. Newspapers are being inundated by AI-generated letters to the editor, as are academic journals. Lawmakers are inundated with AI-generated constituent comments. Courts around the world are flooded with AI-generated filings, particularly by people representing themselves. AI conferences are flooded with AI-generated research papers. Social media is flooded with AI posts. In music, open source software, education, investigative journalism and hiring, it’s the same story.

Like Clarkesworld’s initial response, some of these institutions shut down their submissions processes. Others have met the offensive of AI inputs with some defensive response, often involving a counteracting use of AI. Academic peer reviewers increasingly use AI to evaluate papers that may have been generated by AI. Social media platforms turn to AI moderators. Court systems use AI to triage and process litigation volumes supercharged by AI. Employers turn to AI tools to review candidate applications. Educators use AI not just to grade papers and administer exams, but as a feedback tool for students.

These are all arms races: rapid, adversarial iteration to apply a common technology to opposing purposes. Many of these arms races have clearly deleterious effects. Society suffers if the courts are clogged with frivolous, AI-manufactured cases. There is also harm if the established measures of academic performance – publications and citations – accrue to those researchers most willing to fraudulently submit AI-written letters and papers rather than to those whose ideas have the most impact. The fear is that, in the end, fraudulent behavior enabled by AI will undermine systems and institutions that society relies on.

Upsides of AI

Yet some of these AI arms races have surprising hidden upsides, and the hope is that at least some institutions will be able to change in ways that make them stronger.

Science seems likely to become stronger thanks to AI, yet it faces a problem when the AI makes mistakes. Consider the example of nonsensical, AI-generated phrasing filtering into scientific papers.

A scientist using an AI to assist in writing an academic paper can be a good thing, if used carefully and with disclosure. AI is increasingly a primary tool in scientific research: for reviewing literature, programming and for coding and analyzing data. And for many, it has become a crucial support for expression and scientific communication. Pre-AI, better-funded researchers could hire humans to help them write their academic papers. For many authors whose primary language is not English, hiring this kind of assistance has been an expensive necessity. AI provides it to everyone.

In fiction, fraudulently submitted AI-generated works cause harm, both to the human authors now subject to increased competition and to those readers who may feel defrauded after unknowingly reading the work of a machine. But some outlets may welcome AI-assisted submissions with appropriate disclosure and under particular guidelines, and leverage AI to evaluate them against criteria like originality, fit and quality.

Others may refuse AI-generated work, but this will come at a cost. It’s unlikely that any human editor or technology can sustain an ability to differentiate human from machine writing. Instead, outlets that wish to exclusively publish humans will need to limit submissions to a set of authors they trust to not use AI. If these policies are transparent, readers can pick the format they prefer and read happily from either or both types of outlets.

We also don’t see any problem if a job seeker uses AI to polish their resumes or write better cover letters: The wealthy and privileged have long had access to human assistance for those things. But it crosses the line when AIs are used to lie about identity and experience, or to cheat on job interviews.

Similarly, a democracy requires that its citizens be able to express their opinions to their representatives, or to each other through a medium like the newspaper. The rich and powerful have long been able to hire writers to turn their ideas into persuasive prose, and AIs providing that assistance to more people is a good thing, in our view. Here, AI mistakes and bias can be harmful. Citizens may be using AI for more than just a time-saving shortcut; it may be augmenting their knowledge and capabilities, generating statements about historical, legal or policy factors they can’t reasonably be expected to independently check.

Fraud booster

What we don’t want is for lobbyists to use AIs in astroturf campaigns, writing multiple letters and passing them off as individual opinions. This, too, is an older problem that AIs are making worse.

What differentiates the positive from the negative here is not any inherent aspect of the technology, it’s the power dynamic. The same technology that reduces the effort required for a citizen to share their lived experience with their legislator also enables corporate interests to misrepresent the public at scale. The former is a power-equalizing application of AI that enhances participatory democracy; the latter is a power-concentrating application that threatens it.

In general, we believe writing and cognitive assistance, long available to the rich and powerful, should be available to everyone. The problem comes when AIs make fraud easier. Any response needs to balance embracing that newfound democratization of access with preventing fraud.

There’s no way to turn this technology off. Highly capable AIs are widely available and can run on a laptop. Ethical guidelines and clear professional boundaries can help – for those acting in good faith. But there won’t ever be a way to totally stop academic writers, job seekers or citizens from using these tools, either as legitimate assistance or to commit fraud. This means more comments, more letters, more applications, more submissions.

The problem is that whoever is on the receiving end of this AI-fueled deluge can’t deal with the increased volume. What can help is developing assistive AI tools that benefit institutions and society, while also limiting fraud. And that may mean embracing the use of AI assistance in these adversarial systems, even though the defensive AI will never achieve supremacy.

Balancing harms with benefits

The science fiction community has been wrestling with AI since 2023. Clarkesworld eventually reopened submissions, claiming that it has an adequate way of separating human- and AI-written stories. No one knows how long, or how well, that will continue to work.

The arms race continues. There is no simple way to tell whether the potential benefits of AI will outweigh the harms, now or in the future. But as a society, we can influence the balance of harms it wreaks and opportunities it presents as we muddle our way through the changing technological landscape.

This essay was written with Nathan E. Sanders, and originally appeared in The Conversation.

EDITED TO ADD: This essay has been translated into Spanish.

03:28

Housekeeping Note, re: Emails and Big Ideas, 2/9/26 [Whatever]

Hey, I neglected email for a bit in order to finish my book(s), including Big Idea queries, but now that they’re both in, I’m going to going to catch up with everything in the next couple of days. If you have a Big Idea query into me and haven’t heard back from me by this Friday, go ahead and resend it. Thanks.

— JS

02:56

Home Azone [Penny Arcade]

In the Time Before - no relation to The Land Before Time - it was very important to have a "Halo Killer." There were many attempts, wrought at a profundity of expense and labor. They would have been very surprised to learn, years after this conflict had passed into history, that the storied franchise and its laconic green action figure would die to suicide.

02:28

Drag Race Episode Six: It’s the State of Florida vs. Jane Don’t [The Stranger]

Drag Race Episode Six, the end of Rate-a-Queen. by Mike Kohfeld

This week, we wrapped up Season 18’s Rate-A-Queen talent show. Some queens showed that savvy strategy can outweigh a mid performance, but others *cough* Jane Don’t *cough* proved that reality TV shenanigans will never eclipse star quality. Let’s get into it.

The End of Glam

Ciara Myst, the lovable oddball from Indy, took center stage after being rated in the lowest position by her fellow queens last week. Her fate depended on the second round of Rate-A-Queen, as she would have to lip-sync against the lowest rated queen this week to save herself from elimination.

In the werkroom, Ciara, Vita, Darlene, Juicy, Nini, and Mia put their heads together to strategize for Rate-A-Queen before the second round of talent performances. Ciara thought she’d be able to out-perform Discord in a lip-sync battle, so she quietly asked her Team Glam sisters to rate Discord in the bottom regardless of how well Discord did in the talent show.

It didn’t take Juicy and Vita long to spill this tea to their buddy Discord, who wasn’t shaken by the challenge (though, we got a great cutaway of her pretending to be a Britney Spears superfan to out-psych Ciara). Ultimately, Discord’s punk rock performance was solid enough to keep her safe this week. Her glittering, bloody CEO runway look didn’t impress the judges, but its anticapitalist edge struck the right chord for me. Discord Mangione, anyone?

During a walkthrough, Michelle Visage called out Kenya for fumbling her lyrics during her lip-sync against Briar in Episode Four. “Drag queens’ number one job is to lip-sync, and to know their words,” Visage warned as she pointed a long red nail at Kenya. “Learn your lyrics.”

Kenya was shook, and sure enough, she missed several many more words while lip-syncing to her own song during her talent performance. However, Kenya’s alliance with the Miami girls paid off, and she was rated safe.

Myki Meeks of Orlando (aka Arya Stark who grows up to be BenDeLaCreme) learned that being everyone’s friend but nobody’s best friend is the silent killer during Rate-A-Queen. Her Bride of Frankenstein striptease number was a hit. We’ve seen burlesque many times on Drag Race, but bejeweled entrails? Gore-geous.

 

          View this post on Instagram                      

A post shared by RuPaul's Drag Race (@rupaulsdragrace)

 

Unfortunately, this is Rate-A-Queen, and Myki’s relationships were not strong enough to support her talent. She was rated last, falling into the bottom two alongside Ciara. RIP Glam Alliance, you really had no chance.

The Dion Dynasty

Athena “The Godmother” Dion protested against strategy-based play this week, claiming the rating should be based purely on performance. Either this was a ploy or she needs her memory checked, because she spent most of last week making arrangements for her drag family Juicy and Mia to receive top placements in Rate-A-Queen.

For her runway and performance, Athena leaned heavily into her Greek heritage. Her surreal evil-eye (mati) themed dress was a perfect blend of camp, glamour, and culture. As for the talent show, her Greek-themed variety act was solid but not show-stopping. The word “quaint” came to mind.

 

          View this post on Instagram                      

A post shared by A T H E N A • D I O N (@athenadion)

 

But Rate-A-Queen is not about who has the best talent performance: it’s about leveraging relationships. Athena’s strategy of stacking votes in her favor by putting her Miami sisters on the judging panel during her performance was a brilliant move, and she was rated in the top two for Episode Six.

Jane Don’t vs. the (Allegedly) Illiterate Floridians

Jane Don’t may not have had a drag family to back her up in voting this week, but she didn’t need it.

The most effective drag artists are master historians, remixing references that transport the audience out of reality. On Drag Race, RuPaul has often said that drag queens need to be pop culture experts and rewards queens who know their shit, even when the references are relatively obscure. Seattle’s Jinkx Monsoon was a great example of this, introducing an entire generation to Edith “Little Edie” Bouvier Beale during Season 5’s Snatch Game.

By Episode Six, Jane has proven she has a Ph.D. in Gay Culture. She described her exquisitely feathered chartreuse runway piece as “Galliano for Dior, refracted into this very musketeer 17th-century French moment,” which is queer word salad for “a really fucking cool look.” Even Michelle Visage, who famously hates the color green, had nothing negative to say about Jane’s runway.

Jane knew that her cabaret act inspired by Bette Midler would immediately read for the judges, because this bitch does her homework. She was less confident that the other queens would understand the reference, especially since half of them are allegedly illiterate Floridians.

If the other queens didn’t pick up the Bette Midler, it didn’t matter. Jane’s act was a winning blend of risqué humor, saloon girl style, and loads of confidence. She was voted into the top alongside Athena during the Rate-A-Queen deliberations. On Drag Race, it really doesn’t get much better than lyrics like “No train of thought, but a nice caboose.”

“We’re lip-syncing a punk song and she’s dressed as Donald Duck”

At the end of Episode Six, Jane and Athena, our top two, faced off for the win to “Jerkin” by Australian punk band Amyl and the Sniffers (vocalist Amy Taylor was the guest judge). Jane figured she’d have an easy win. “We’re lip-syncing a punk song and she’s dressed as Donald Duck,” referring to Athena’s glitzy Greek granny-core talent look. However, Athena turned it out, cementing Dion supremacy for a second week in a row. Her win was well-deserved given how well she played the social game of Rate-A-Queen. (And still, Jane’s been in the top for every episode so far. The only thing keeping Jane from winning Season 18 at this point is a Rate-A-Queen finale.) The real winner of this lip-sync, though, was Nini Coco’s neon-Teletubbie-meets-infinity-labia runway look. Seeing her bobbing back and forth beyond Jane and Athena was sending me.

The aforementioned labia. MTV

As much as we love Discord and Kenya, they were saved by the Rate-A-Queen rules this week. A shocked Myki Meeks was declared the bottom queen, and she lip-synced against Ciara to Britney Spears’ “Toxic.”.

The lip-sync concluded, but before RuPaul could pass judgement, she turned to Michelle Visage and said quietly, “This song was Season 4. Jiggly did it.”

“Bless her,” Michelle replied.

(Quick herstory lesson: After competing on Drag Race and Drag Race All Stars, fan favorite Jiggly Caliente became a judge on Drag Race Philippines and also had featured roles on Broad City and Pose. She tragically passed away in 2025 due to complications from sepsis after an emergency surgery. I couldn’t help but think of Briar Blush, who had just been hospitalized for sepsis after filming Season 18.)

My reverie was broken by RuPaul announcing Myki as the winner of the lip-sync.This came as no surprise—the only reason why Myki was in the bottom this week was because of Rate-A-Queen shenanigans. Ciara Myst was asked to sashay away.

Next week, the queens are tasked with creating political ads (!) plus, the cast get the Rate-A-Queen receipts. It’ll be like the producers throwing a ham hock to a pack of starving wolves. Let the drama roll!

Monday, 09 February

23:21

The X Factor [The Stranger]

“Seattle has better Chinese food than New York." by Meg van Huygen

“Seattle has better Chinese food than New York, anyway,” Xian Zhang quips from the couch in her new office, overlooking Second Avenue. “Well, in New York, it’s mainly Cantonese food. But I find Chinese food from the north actually better here. I’m from the north, so I like the handmade dumplings and hand-pulled noodles, that kind of thing. Seattle does it better.”

Before she even landed, word was already on the street that the Seattle Symphony’s new music director is a massive foodie. Sure enough, it’s only a few minutes before she’s comparing our restaurants to those in her home of the last decade.

Zhang is still pulling double duty between Seattle and the New Jersey Symphony, where she’s been the resident music director since 2016. “My son, it’s his junior year,” she explains, “and it’s too late for him to change schools, so he’s finishing high school there. I don’t wanna mess up his life!” But since accepting a five-year contract in Seattle last year, she admits, she’s been feeling a little more at ease out here.

“I grew up in a climate just like this—cold, a little humid and windy,” Zhang says, motioning toward the window. “And we had lots of shellfish,” she grins, bringing it back to food. “That’s my thing—my favorite! So Seattle is perfect for me, actually.”

It’s mutual, babe. Scoring Zhang is a monumental win for Seattle, and not only for her enormous talent and fiery vivacity. Alongside having no music director at all following Thomas Dausgaard’s sudden email ragequit in 2020, the Seattle Symphony’s had 17 conductors in its 123 years, and they all looked more or less the same—white and presumed male—until Zhang. It brings a li’l tear to the eye of this former Cornish piano major, who could only find one female American conductor to look up to in the late ’90s (the legendary Marin Alsop). Down around Benaroya Hall, when you see all the colorful media paraphernalia heralding Zhang’s arrival—there are vinyl stickers glued to the actual sidewalk, reading XIAN!—it seems like overkill at first. But then you’re like: You know what? Let them cook. This is the Seattle Symphony’s Cinderella moment.

Even today, the game’s still heavily dominated by men in the United States, with women and nonbinary people making up just 29.4 percent of American symphony conductors. It’s much worse outside the US, with a 2023 study reporting that just 11.2 percent of conductors are women worldwide. As well, 66.9 percent of American symphony conductors are white. No figures are currently available on how many of the remaining 33.1 percent are female or non-male, but one can imagine it’s a slender slice. There’s Zhang and there’s Alsop, who’s the laureate director of the Baltimore Symphony, and the Atlanta Symphony has Nathalie Stutzmann at the wheel. But when it comes to symphonies in major American cities, these three women pretty much make up the whole scene.

“There also just aren’t that many of us conductors,” Zhang points out, “women or men. It’s a numbers problem. Because it’s a hard job! Not so many people can do it.”

She said a mouthful there, because to watch this woman conduct an orchestra is electric. Armed with her baton, this mini maestra seems 10 feet tall, commanding her musical battalion with real joy and absolute authority. Even from the nosebleed seats, you can feel the crackle in the air. Few people can do that job, indeed.

Xian Zhang (“sh-yen jahng”) was born in 1973 in Dandong, near the North Korean border, to a music teacher mom and a luthier dad. When Western instruments were scarce in Cultural Revolution-era China, her father built a piano for her from scratch. She began piano lessons at age 3 and was practicing eight hours a day by elementary school. At 11, she was sent to the Central Conservatory of Music in Beijing to study piano performance under Lingfen Wu, herself a pioneering female conductor.

Zhang was dropped into conducting somewhat against her will when, one day, Wu sent her 20-year-old student to sub at a rehearsal at the China National Opera. “I’d just finished learning The Marriage of Figaro from her—but I’d never conducted anything in my life! It was a four-and-a-half-hour production, with professional musicians. My teacher called in the day before and said, ‘Um, I don’t feel well, but I’m gonna send my student to conduct tomorrow. If she does a bad job at rehearsal, I will try to come in at intermission and take over.’

“The director of the opera was very mad at my teacher that morning,” Zhang laughs. “‘How can you do this to us? And send a little girl?’ I was very short, very tiny. I remember sitting on the bus with the other musicians going to the opera house, thinking, I’m gonna DIE today. I’m gonna mess this up and be so embarrassed, and I will die.” But she did it anyway, and when her teacher called at intermission to check in, she was told, “Well, she actually seems to be doing okay? She’s almost done with the second act.”

“And my teacher was like ‘Uh, okay, I still don’t feel good! Let her finish the show.’ The next day, she kept saying she was sick. So yeah, she gave me two shows with the China National Opera when I was 20. That was my first public conducting job.”

Zhang didn’t forget it, and today, she goes out of her way to pay it forward and support female orchestral musicians, along with those from other underrepresented groups. She points to a recent Benaroya performance of composer Michael Abels’s Delights and Dances performed by laureate winners of the Sphinx Competition, which is open to young Black and Latino string players in Detroit and endeavors to address systemic obstacles within their communities. “The quartet was all students who’d won a competition for young, less-privileged players. I really, really feel strongly about supporting this kind of program.”

Since leaving China in 1998 to pursue her doctorate in Cincinnati, Zhang’s led orchestras in Milan, Montréal, Amsterdam, Melbourne, Cardiff, Singapore, London, and dozens of US cities. As well as back home in Beijing—in addition to her current roles in Seattle and New Jersey, she’s also the principal guest conductor at the China National Opera this season. True to brand, only a month after her introductory gala at Benaroya Hall in September, she jetted off to Helsinki for the rest of 2025, where she’d already signed up to conduct Tosca before saying yes to Seattle.

Now that she’s picked the reins back up in Seattle, Zhang is super pumped for the production of Iris Unveiled (originally Iris dévoilée), playing February 12, 14, and 15. In a Peking opera-style concert suite that Zhang says is very special to her personally, Chinese-born French composer Qigang Chen mashes up Chinese stringed instruments like the pipa and erhu with a Western-style orchestra, as solo vocalists sing in both Western and Chinese operatic styles. The suite describes the story of Iris, the Greek goddess of the rainbow, employing texture and color to describe various facets of divine femininity: coyness, jealousy, voluptuousness, lust. As the central figure, soprano Meng Meng wears traditional Chinese makeup and a kuitou (头), an elaborate headdress loaded with pearls and tassels and pompoms.

The production’s timing is pinned to the Lunar New Year and the Seattle Symphony’s second annual Lunar New Year Gala. Benaroya Hall’s lobby will be decked out for the holiday, tickets include a multi-course authentic Chinese dinner, and there’ll be performances by select artists from Iris Unveiled’s cast. “I’m so excited, yes!” Zhang says. “The story is based on old Chinese poems, and there’s some really authentic Chinese art involved in the program. And I find the music just strikingly beautiful.” The show, she adds, will be a great way for her to begin engaging with the Asian community here in Seattle, as a fresh start for the new year.

Zhang isn’t new to Seattle, for what it’s worth, having first guest-conducted the Seattle Symphony in 2008. “I’ve always liked Seattle! To me, Seattle has come up as one of the most vibrant cities in America nowadays. I like the people. They’re different from the East Coast—slightly laid-back, and they’re not as edgy. And also, I like the diversity of the community. I feel comfortable here, you know, as an Asian person.

“And I like the food here too!” she says, splitting off to enthusiastically recommend a hot pot restaurant off Aurora. “It’s like a shabu-shabu place. I know the name in Chinese but not in English!” She goes on to rave about the meat combo, as passionately as she spoke about Iris Unveiled. After playing 20 Questions, we realize it’s No.9 Alley Hot Pot in Bitter Lake.

Despite our rep as one of the nation’s most progressive cities, Seattle’s classical music scene has been kind of a musty old ghost ship over the last few years, with nobody at the helm. So it’s sincerely thrilling to see the fiery, sizzling energy that Zhang brings on board. Right out of the gate, she’s going out of her way to platform women, POC, and other underrepresented musicians, along with youth orchestras, local composers, and hell, the restaurant scene, too. Seattle’s classical community has needed this delicious zap in the butt since 1903. No amount of vinyl sidewalk stickers with her name on them is enough. 

Get a Friday the 13th Tattoo at One of These Seattle Shops [The Stranger]

Special Flash Deals for February 13, 2026
by Shannon Lubetich

Friday the 13th occurs three times in 2026—the most it’s possible to have in a calendar year—which means more flash tattoos and more fun. This month, the inky tradition coincides with Valentine’s Day weekend, prompting fun designs that are both creepy and cute. Whether you’re looking to get your first tatt or you’re running out of skin space, we’ve compiled a list where you can get inked as part of the occasion. Don't forget your photo ID!

Blood Orange Tattoo
It’s citrus season, and this shop has the juice. With dozens of adorable designs, Blood Orange Tattoo will run a flash event on Sunday and donate part of the proceeds to Northwest Immigrant Rights Project. Get some ink and spread the love, y’all. 
Fremont

Green Tulip Tattoo
Grab an appointment at this tattoo collective on Valentine’s Day to select from one of their four talented artists’ flash sheets, which include a number of stick and poke designs. They’ll be taking clients from 11 am to “whenever,” and offering up treats, merch, and “LOVEly vibes.”
Uptown

Stranger Suggests: Wikipedia Rabbit Holes, a Masked Chillwave Band, and a Retelling of Cupid and Psyche [The Stranger]

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

Asher Perlman & Tom Toro

(LITERATURE) If you’ve ever found yourself shedding a tear at a comic strip or recoiling with existential dread from a political cartoon, this one’s for you. New Yorker contributors Asher Perlman and Tom Toro are coming to Elliott Bay Book Company to discuss their new cartoon collections, Hi, It’s Me Again and And to Think We Started As a Book Club…. The former from Perlman (also a writer for The Late Show with Stephen Colbert) pairs sharp, surreal humor with relatable existential spirals, while Toro’s new release skews wry and whimsical. With both artists exploring everything from anxiety to mortality to modern bureaucracy, expect a dynamic conversation about why life’s strangest moments often make the best punchlines. (Elliott Bay Book Company, 7 pm, free with RSVP, all ages) LANGSTON THOMAS

TUESDAY 2/10  

Olivia Barton: For Myself and For You Tour

Cry along to Olivia Barton's cathartic music at Barboza on Tuesday, February 10. BLAIRE BEAMER

(MUSIC) It's hard to ignore the similarities between Orlando-born indie folk artist Olivia Barton and folk-rock darling Phoebe Bridgers. Barton's recent track "Dad Song" brings to mind Bridgers' "Kyoto"—both songs allude to complicated relationships with their fathers as Barton laments "God, I'm such a hypocrite, writing this instead of picking up the phone" and Bridgers sings "You called me from a payphone / They still got payphones / It cost a dollar a minute / To tell me you're getting sober." Barton also explores queer love, heartbreak, and anxiety on her third full-length For Myself and For You, which was co-produced by Pinegrove’s Sam Skinner and highlights her songwriting talent and ability to balance delicacy with an emotional punch. Don't miss this show from the singer-songwriter who's toured with Lizzy McAlpine and Madi Diaz; this time, she's headlining with support from confessional Utah artist Rachael Jenkins. (Barboza, 7 pm, all ages) SHANNON LUBETICH

WEDNESDAY 2/11  

Blood Cultures

(MUSIC) They’re an anonymous, experimental indie-pop band who rock out on chillwave in hoods. What more do you need? I’m all about bands wearing disguises, and with the Residents out of commission for the moment (sigh), a quartet that tinks and reverbs and chirps along to videos of themselves (or somebody in hoods) lifting weights, shooting guns, making a mess with Chinese takeout, and turning themselves into scarecrows, just might fill dat gap. That was the gist of their video for the “Set It on Fire” single from their 2021 album LUNO, at least. What they’ll do in concert, I have no idea whatsoever, but it’s got to be conceptual. (Neumos, 7 pm, 21+) ANDREW HAMLIN

THURSDAY 2/12  

Depths of Wikipedia

Dive deep into the weirdest corners of Wikipedia with comedian and journalist Annie Rauwerda at the Neptune on Thursday, February 12. IAN SHIFF

(COMEDY) Launched in 2001 as an end-all, be-all online encyclopedia, Wikipedia has fully reached cultural icon status in today’s world—not necessarily for its reliability (s/o misinformation and donation pop-ups), but for the absolutely ridiculous humans who write, edit, and speedrun it ad nauseam. Wildly popular (1.6 million followers and counting) account Depths of Wikipedia bears witness to this chaos, spotlighting the site’s strangest corners. Comedian and journalist Annie Rauwerda, who helms the site, has turned the most absurd Wikipedia gems into a live show that’s part comedy, part podcast, part beautifully deranged PowerPoint presentation, and she’ll kick off the latest tour in Seattle! I have no idea what to expect, but that’s kind of the point. (Neptune Theatre, 7 pm, all ages) LANGSTON THOMAS

FRIDAY 2/13  

Till We Have Faces

See Taproot Theatre's production of C.S. Lewis's Greek mythology retelling Till We Have Faces, running Tuesday through Saturday until February 21. GIAO NGUYEN

(THEATRE) In one of his letters, C.S. Lewis wrote that he believed that his final novel, Till We Have Faces, was “far and away” his best, “but it has, with critics and the public, been my greatest failure.” So when I saw that Taproot Theatre was premiering an adaptation of the book, I figured it was time to read it. I’m happy to report the critics were wrong. The book is a reinterpretation of the myth of Cupid and Psyche, written from the perspective of Psyche’s older sister. She’s filing a complaint to the gods (relatable). Taproot’s staged production is the first of its kind—a passion project of the theater’s producing artistic director Karen Lund—and it’s only running through this month. (Taproot Theatre, 7:30–10 pm, 16+) HANNAH MURPHY WINTER

SATURDAY 2/14  

Valentine's Day Show: Glenn Hendrick with John Bellows, babyboy, and Plastic Wildflowers

          View this post on Instagram                      

A post shared by Glenn Hendrick (@glennhendrickmusic)

(MUSIC) Disclaimer: My best friend Kirsten is helping organize this event and will be performing, but even if they weren't, I'd still recommend it—it's a night of excellent artists at a cozy, intimate venue, all in support of some truly essential causes. The lineup includes the lush, groovy quintet babyboy, the nostalgic yet lyrically frank Cleveland group Plastic Wildflowers, and the San Juan Island artist and musician Glenn Hendrick, who weaves "heartbreaking lyrics with stripped down hooks to reel you into the apocalypse" and will perform alongside singer-songwriter John Bellows. Merch sales and a raffle will raise funds for Gaza and for supporting Seattle families with legal fees for immigration court. What better way to spend your Valentine's Day than honoring art, love, and community in all of its myriad forms? (The Rabbit Box Theatre, 8 pm, all ages) JULIANNE BELL

SUNDAY 2/15  

Cécile McLorin Salvant

(MUSIC) Cécile McLorin Salvant has the most exciting voice in contemporary jazz. It’s not just her pitch-perfect voice, which reaches the heights of Edith Piaf, Ella Fitzgerald, Eartha Kitt, and Kate Bush, but the inventiveness with which she flexes her vocals. On her most recent album, Oh Snap, the three-time Grammy Award winner and MacArthur Fellow croons through a dozen short, intimate original songs (plus an a cappella cover of the Commodores’ “Brick House”) that she never intended to see the light of day. Setting out on a personal creative quest to place spontaneity and joy at the heart of her writing process, Salvant tinkered with home recording programs to craft personal songs inspired by the music that soundtracked her childhood in 1990s Miami, from grunge and pop boy bands to classical and folk music. The result of the album is a delightfully chaotic audio journal that will please fans of traditional jazz as well as genre rule-breakers like Erykah Badu and Solange. (Jazz Alley, 7:30 pm, all ages) AUDREY VANN

:zap: Prizefight! :zap:

Win tickets to rad upcoming events!*

Charley Crockett
February 19 or February 20
5th Avenue Theatre

ENTER NOW

Contest ends February 16 at 10am

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

22:35

Hello, There. Again. [Looking For Group]

Don’t mind me, totally not up to something big that I’ll be sharing here shortly.  For right now, I did want to mention a few things we’re working on for the website, as we work to get it back into
Read More

The post Hello, There. Again. appeared first on Looking For Group.

21:00

Did You Get a Stranger Valentine? [The Stranger]

All is full of love. by Megan Seling

Illustrations by April Finfrock

If you need proof that there is still love in the world, look no further than our February issue. It's packed with hundreds and hundreds of reader-submitted love notes, all gushing with sweet sentiments and declarations of admiration. 

There's a Valentine for Pookie Mamacita, Kitty, and Goose. There are people celebrating love landmarks like anniversaries, moving in together, and having a baby. I think there's even a marriage proposal? 

Read through hundreds of reader-submitted Valentines here. Or, grab an issue at one of our hundreds of distro locations to find it in print! 

♥ COSMO’S MOON

Aimee, When I met you everything started to make sense. Let’s continue doing crosswords at the bar, kiss in photobooths, and have fun together. Rheese

♥ CUTEST GOOSE

Steve with the long hair. Cutest skateboarder out there. Sweet goose. I found you.

♥ YOU ARE MY SUNSHINE!

I love you, Daniel! I’ll wash your back and you wash mine... Let’s keep taking care of each other. Life is hard but loving you is easy.

♥ CW LOVES CW

This year will be 20yrs we’ve spent together. I cannot wait for a tree filled, moss in our toes, playing in our forest in Forks for 20 or 40 more. <3

♥ WEENER STUFF

Oh handsome ween, I love you to bikini bottom and back. Love Jean <3

♥ FOR MY SUNFLOWER

L, During this season you’re sole reason I don’t mind the gray so I wanted to say: Happy Valentines, Love the sun is waiting above. -B

♥ IT’S OFFICIALLY LOVE

We officially did it!!! We are each others till the cold hand of death decides to take us. I will always LOVE YOU. -To the most caring woman I know

♥ MY LOVING EVIL EX

Dear Grady, Roses are red, we swore we were done, then New Year’s Eve slid into my DMs. Maybe 2026 is the sequel we didn’t plan but kinda want?

♥ TWO FROGS IN LOVE

Here’s to another frog filled year of love and joy. I’m looking forward to our new froggy abode <3 please let me paint the walls yellow

20:49

Get the MH Stories 3 Demo! [Penny Arcade]

Capcom just released a demo for Monster Hunter Stories 3: Twisted Reflection and I love it. The demo seems to have come out for pretty much everything but I grabbed it for the PS5 Pro and it’s gorgeous. Plenty of people love the Monster Hunter series but I feel like the “Stories” side games get overlooked. That sort of makes sense as the Stories games are very different. These are turn-based RPG’s with an anime art style and a focus on younger characters with monster collecting/ battling. Think of them like Pokemon + Monster Hunter and it’s just as cool as it sounds. 

 

20:14

How to Date Like an Asian [The Stranger]

Let me show you how to go on a date like an Asian person. by Michael Wong

After a decade of media dominance, the world finally must admit: Asians got swag. And somehow we are still facing an Asian birth-rate crisis (to the specific chagrin of my mother). So given the circumstances, and with Valentine’s Day on the way, let me show you how to go on a date like an Asian person, in Seattle. Let me know how it goes!

Pregame at Costco
Getting your date kicked off by flexing membership at an exclusive club is never a bad idea. And if you don’t know, Asian people feel the same way about Costco that white people feel about Trader Joe’s and Hispanic moms feel about Ross. It’s our mini Disneyland. It delights us.

Take a stroll and reacclimate to being around people after a long week working from home. Costco also gives you a chance to flex your financial prowess early by starting things off with a $1.50 hotdog combo, aka the Kirkland Signature aphrodisiac. This move will also save you both money on future eating opportunities—big-brain moment.

Find Gems at Uwajimaya and Kinokuniya Bookstore
Imagine if Barnes and Noble were an otaku, in a good way. That’s Kinokuniya, the bookstore at Uwajimaya in the CID. You’ll have a blast walking between the shelves, pointing at things you both like. This is also a great way to determine if your date can read.

The major play alert is the magazine section. The racks are teeming with more special interests than a community college catalog, like: POPEYE (for Japanese “city boy” fashion), Brutus (for culture and home inspo), or the Japan Railfan Magazine (for train lovers, plainly). Japanese magazines are a different breed, and while you probably can’t read them, you’ll still find a lot of inspiration and delight inside the pages. Browsing here is a concise way to learn more about your date’s interests, and for them to learn more about you, too. Look behind the counter for magazines that come with cool niche-interest gifts, like Sanrio or even Bape accessories.

Before heading out, pick out a couple snacks with your date at Uwajimaya, perhaps from the deli. Try a Mogu Mogu bottled drink if you haven’t yet—nata jellies (those translucent, chewy cubes made from fermented coconut water) are like a fidget spinner for your mouth.

Picnic in the CID Hing Hay Park
The next move is to head up the block to Hing Hay Park. It’s a tucked-away pocket of the CID with lots of seating, ornate pagodas, and plenty of characters. It’s the ideal home base to spread out your treasures, share some snacks and stories, and appreciate the energy of the neighborhood together.

Plus, if you’re feeling recently inspired by Marty Supreme, you could play each other at one of the public ping-pong tables, or embarrass yourself by playing against one of the Chinese grinders ready for a new victim.

Browse the CID Shops
Let the CID trinket observation commence. Check out Trichome, a longtime alt hot spot and gift shop for the indie streetwear kids and the psychedelic-interested among us, and not totally in the Spencer’s Gifts sort of way. Ask about the Lexco cases and the refrigerator behind the counter.

Other nearby stores you won’t want to miss include Shishido Zakka-Ya, a shop full of kawaii wares made by local Seattle AANHPI artists, Mam’s Books for the best selection of Asian authors and warm vibes, and Pink Gorilla, where your childhood video game nostalgia comes to life in vibrant tactile glory.

Walk the Jose Rizal Bridge
One of Seattle’s best viewpoints is the bridge that carries 12th Avenue South over the freeway. When it’s time to wrap up in the CID, take a short drive up to Jose Rizal Bridge. Park on the Beacon Hill side, near the Tower of Terror–looking building, then walk the bridge back towards the CID, enjoying the view together.

Not only is it a great place to snap pics of one another, catch a sunset, and appreciate the city, it’s also a great opportunity to flex your knowledge about Filipino explorer Jose Rizal, which I expect you to brush up on before this leg.

Try on Fits at Break Away Vintage on Pike
In the big 2026, we are saving money on clothes by shopping secondhand. No better place in Seattle to take in-store fit pics than at Break Away Vintage Market in Capitol Hill (formerly Late Night Vintage Market).

This spot, IMHO, is holding down the neighborhood, run by a group of fellas who in kind remind me that Seattle still has flavor. It’s laid out similar to the Winchester Mystery House, with hallways and stairs that lead you to unexpected places. Pick through racks and find items your date would find amusing, plus trying on the wildest things for a mini fashion show is never a miss.

Small Bites at Tamari Bar
By now it’s time for a proper meal. In this area—right down the street from Break Away—you have to go to Tamari Bar.

This spot feels casual by design, but the necessity of reservations signals the quality of the meal you’re about to enjoy. I also highly rate their inventiveness, and I’m sure your date will, too. Throw a dart at the menu and you will be thrilled, but don’t miss the famous “206 curry” in any iteration, the mazemen with Parmigiano Reggiano, or the bara-chirashi bowl.

Sip Highballs at Shibuya HiFi
To cap off this date, I suggest one of the coolest places in the city. Shibuya HiFi in Ballard is a vinyl bar and lounge inspired by Tokyo’s legendary jazz kissa (listening cafes). You initially enter through the “Living Room”—a swank, intimate space covered floor-to-ceiling with cedar planks and cozy furniture. Enjoy a highball at the bar, or perhaps a Pink Rabbits (made with Japanese Haku vodka and lychee).

When you’re reset, head back to the reservations-only HiFi Room, which feels like the living room of the world’s biggest audiophile. You’ll have to remove your shoes and leave your drink behind before entering and settling into the plush sofas or vintage Benaroya Hall seats.

Get enveloped in the album (that you’ll listen to start to finish), and if you get carried away by the ambience and realization that life doesn’t get better than this, my suggestion is to look over at your date, smile, and just let it happen. 

19:28

18:35

Oh, And [Whatever]

Would you believe that I also completed another book since yesterday? This one is Couch Cinema: Comfort Watches from The Godfather to K-Pop Demon Hunters, a non-fiction collection of essays. No, I didn’t use “AI” or anything, I would never do that, you deserve better as readers. It’s a collection of my December Comfort Watches essays from December of 2023 and 2025, collected up in a nice single volume. I put them all together, did a light edit, added an intro, and sent it off to my agent.

As it happens, this is the first book I’ve done in years that isn’t already spoken for contractually, so we’ll see if we get any nibbles for it. If not, hey, Scalzi Enterprises was designed for just this sort of project in mind, and I wouldn’t have a problem using it as a test case to see if boutique publishing is something we have the bandwidth for. I would have to come up with a name for the imprint. We’ll find out!

Anyway. Two books in, and it’s only February. I can take the rest of the year off, right? Right?!?

— JS

18:07

[$] Development statistics for 6.19 [LWN.net]

Linus Torvalds released the 6.19 kernel on February 8, as expected. This development cycle brought 14,344 non-merge changesets into the mainline, making it the busiest release since 6.16 in July 2025. As usual, we have put together a set of statistics on where these changes come from, along with a quick look at how long new kernel developers stay around.

17:56

What should I do if a wait call reports WAIT_ABANDONED? [The Old New Thing]

If you call a wait function like Wait­For­Single­Object and receive the code WAIT_ABANDONED, what does it mean and what should you do?

The documentation says that WAIT_ABANDONED means that you successfully claimed a mutex, but the thread that previously owned the mutex failed to release the mutex before it exited. This could be an oversight because the code encountered a code path that forgot to release the mutex. Or it could be because the thread crashed before it could release the mutex.

The documentation also suggests that “If the mutex was protecting persistent state information, you should check it for consistency.” This is to handle the second case: The thread crashes before it can release the mutex. If the purpose of the mutex was to prevent other threads from accessing the data while it is in an inconsistent state, then the fact that the thread crashed while holding the mutex means that the data might still be in that inconsistent state.

Now, maybe you have no way to check whether the data is in an inconsistent state or have no way to repair it if such an inconsistent state is discovered. (Most people don’t bother to design their data structures with rollback or transactions, because the point of the mutex was to avoid having to write that fancy code in the first place!) In that case, you really have only two choices.

One option is to just cover your ears and pretend you didn’t hear anything. Just continue operating normally and hope that any latent corruption is not going to cause major problems.

Another option is to give up and abandon the operation. However, if that’s your choice, you have to give up properly.

The abandoned state is not sticky; is reported only to the first person to wait for the mutex after it was abandoned. Subsequent waits succeed normally. Therefore, if you decide, “Oh it’s corrupted, I’m not touching it,” and release the mutex and walk away, then the next person to wait for the mutex will receive a normal successful wait, and they will dive in, unaware that the data structures are corrupted!

One solution is to add a flag inside your data that says “Possibly corrupted.” The code that detects the WAIT_ABANDONED can set that flag, and everybody who acquires the mutex can check the flag to decide if they want to take a chance by operating on corrupted data.

I’m not saying that you have to do it that way, but it’s a choice you’re making. In for a penny, in for a pound.

In summary, here are some options when you encounter an abandoned mutex:

  • Try to fix the problem.
  • Ignore the problem.
  • Give up and create a warning to others.
  • Give up and make everybody else think that everything is fine.

The final choice doesn’t make sense, because if you’re going to make everybody else think that everything is fine, then that’s the same as having everybody else simply ignore the problem. In which case, you may as well ignore the problem too!

Related reading: Understanding the consequences of WAIT_ABANDONED.

Bonus chatter: Don’t forget that if you get WAIT_ABANDONED, the mutex is owned by you, so make sure to release it.

The post What should I do if a wait call reports <CODE>WAIT_<WBR>ABANDONED</CODE>? appeared first on The Old New Thing.

Slog AM: The Seahawks Won, Bad Bunny Won More, and Trump Had a Terrible, No Good Sunday [The Stranger]

The Stranger's morning news roundup. by Hannah Murphy Winter

The Seahawks Won Benito Bowl LX: They did it. On Sunday, for the second time in the franchise’s 50-year history, Seattle won the Super Bowl. They beat the New England Patriots 29-13 and got to have their redemption arc after losing to the Pats in 2015. Get ready for the parade downtown on Wednesday! Not a football fan? Hometown pride not enough for you? Let me offer you this: Thanks to the Seahawks, Trump had a bad day on Sunday. He wanted the Pats to win so badly

Benito Also Won the Benito Bowl: Thanks to Trump’s hissy fit about having a Spanish-language performer for the halftime show, Bad Bunny’s performance was always going to be political, and holy shit did he kill it. The entire performance was a love letter to Puerto Rico. The only English he spoke in the whole show was to say “God Bless America,” before listing all of the countries on the American continent. And when he appeared on stage with the Puerto Rican flag, it was the one with the light blue triangle—the independence flag. And on top of that, it was an impeccable performance. The set was a series of vignettes—including Benito giving a 5-year-old Latino boy his Grammy and an actual fucking wedding—and it was without a doubt the most lush, joyful performance I’ve seen on the Super Bowl stage. Watch it in full here.

Meanwhile, at the “All-American Halftime Show”: Because watching a Puerto Rican perform might make conservatives’ dicks fall off, TurningPointUSA hosted an “alternative” to the Super Bowl halftime show on YouTube. Apparently, about 2 million people streamed the pre-taped TPUSA fundraiser on YouTube, filling the live chat with American Flag emojis while Kid Rock, Brantley Gilbert, Lee Brice, and Gabby Barrett performed. Pete Hegseth threw a football. And that’s about all that happened

Ring Tries to Pup-Wash Surveillance: In their 30-second Super Bowl ad, Ring cameras highlighted “Search Party,” a way to trigger all of your neighbors’ cameras to look for a dog if it’s gone missing. Sweet, right? But the system could have just as easily been called “Manhunt.” As USA Today put it, it’s The Dark Night brought to life. “Indeed, the Ring camera technology that uses AI to track multiple cameras in a vicinity to locate a lost dog is basically the same function that Wayne used to hack people's cell phones to create a high-frequency generator receiver to pin down the location for Gotham City's Clown Prince of Crime.” 

Weather: Looks like the weather gods are smiling upon the Super Bowl parade. We’ll likely have some rain today, but Tuesday through Thursday should be sunny and in the 50s. 

Got a spare $5 mil? Bill Gates isn’t selling Xanadu 2.0 (his megamansion) in Medina, but he is shedding one of his bonus houses around it. For a man worth more than $100 billion, selling a multi-million-dollar house is sort of like selling books to a used book store for the rest of us. For the low, low price of $4.8 million, you can be Bill Gates’s neighbor. But considering how many times his name has shown up in the Epstein files (namely for trying to sneak STI medication to his wife after he caught something from “Russian girls”), that might be bringing the price down a couple mil. 

Speaking of Epstein and Microsoft Execs: It looks like Nathan Myhrvold, the chief tech officer for Microsoft from 1986 to 2000, did some time on Jeffrey’s island. He also emailed Epstein about how hard it is to “FedEx pussy,” and Epstein offered to “leave” a girl for Myhrvold at his lab. 

The DOJ’s Hiring: But no one wants the job. Chad Mizelle, a former chief of staff to US Attorney General Pam Bondi, posted on the porn site formerly known as Twitter that “if you are a lawyer, are interested in being an AUSA, and support President Trump and anti-crime agenda,” you should slide into his DMs. Once a coveted position for lawyers around the country, the application questionnaires now include questions like: “How would you help advance the president’s executive orders and policy priorities in this role?” And prioritizing loyalists has meant that they’re hiring shittier lawyers. I’m sure Nick Brown doesn’t mind.  

Here's that Ring #SuperBowl commercial: pic.twitter.com/1gAxIJATdz

— philip lewis (@Phil_Lewis_) February 9, 2026

Two Million Souls: According to a recent study, after almost four years of fighting, the death toll in the Ukraine War is nearing 2 million. Two-thirds of those deaths are Russian, who lost about 35,000 troops a month in 2025. 

Here’s a Dystopian Headline for You:Chatbots Make Terrible Doctors, Study Finds.” Apparently, ChatGPT and other LLMs could theoretically get into medical school, but diagnosing real humans is a whole other matter. Sometimes the chatbots generated information that was just wrong—fixating on elements of the patient’s descriptions that were irrelevant, providing a partial US phone number, or telling them to call the Australian emergency number. “In an extreme case, two users sent very similar messages describing symptoms of a subarachnoid hemorrhage but were given opposite advice,” the study’s authors wrote. “One user was told to lie down in a dark room, and the other user was given the correct recommendation to seek emergency care.” I know insurance is hell, but go to the doctor. 

Biiiiig Hug: It’s been an unusually warm winter, even in Spokane, so when a deer was spotted stranded on the ice on top of Loon Lake, it was never going to be an easy rescue. Firefighter Gavin Gallagher scooched out to the center of the ice, lassoed her neck, and bearhugged her to keep her secure while the folks on land reeled them in. Rudely, she didn’t say thank you. “She ran off as, as expected,” one of the rescuers said, “to do deer things.”

          View this post on Instagram                      

A post shared by ABC7 Eyewitness News (@abc7la)

News We Didn’t Know We Needed: 404 Media published a roundup of studies about sex in space. Key lesson: Don’t make babies in space. 

Because there’s no such thing as too much Bad Bunny today: 

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 20:07, Friday, 13 February 20:48, Friday, 13 February
a bag of four grapes XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Ansible XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Bad Science XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Black Doggerel XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Blog - Official site of Stephen Fry XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Charlie Brooker | The Guardian XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Charlie's Diary XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Chasing the Sunset - Comics Only XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Coding Horror XML 20:28, Friday, 13 February 21:15, Friday, 13 February
Cory Doctorow's craphound.com XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Cory Doctorow, Author at Boing Boing XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Ctrl+Alt+Del Comic XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Cyberunions XML 19:49, Friday, 13 February 20:38, Friday, 13 February
David Mitchell | The Guardian XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Deeplinks XML 19:49, Friday, 13 February 20:33, Friday, 13 February
Diesel Sweeties webcomic by rstevens XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Dilbert XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Dork Tower XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Economics from the Top Down XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Edmund Finney's Quest to Find the Meaning of Life XML 19:49, Friday, 13 February 20:32, Friday, 13 February
EFF Action Center XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Enspiral Tales - Medium XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Falkvinge on Liberty XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Flipside XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Flipside XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Free software jobs XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Full Frontal Nerdity by Aaron Williams XML 20:28, Friday, 13 February 21:16, Friday, 13 February
General Protection Fault: Comic Updates XML 20:28, Friday, 13 February 21:16, Friday, 13 February
George Monbiot XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Girl Genius XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Groklaw XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Grrl Power XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Hackney Anarchist Group XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Hackney Solidarity Network XML 19:49, Friday, 13 February 20:34, Friday, 13 February
http://blog.llvm.org/feeds/posts/default XML 19:49, Friday, 13 February 20:34, Friday, 13 February
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 20:07, Friday, 13 February 20:47, Friday, 13 February
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 19:49, Friday, 13 February 20:34, Friday, 13 February
http://eng.anarchoblogs.org/feed/atom/ XML 19:56, Friday, 13 February 20:42, Friday, 13 February
http://feed43.com/3874015735218037.xml XML 19:56, Friday, 13 February 20:42, Friday, 13 February
http://flatearthnews.net/flatearthnews.net/blogfeed XML 20:07, Friday, 13 February 20:48, Friday, 13 February
http://fulltextrssfeed.com/ XML 19:49, Friday, 13 February 20:32, Friday, 13 February
http://london.indymedia.org/articles.rss XML 20:28, Friday, 13 February 21:15, Friday, 13 February
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 19:56, Friday, 13 February 20:42, Friday, 13 February
http://planet.gridpp.ac.uk/atom.xml XML 20:28, Friday, 13 February 21:15, Friday, 13 February
http://shirky.com/weblog/feed/atom/ XML 19:49, Friday, 13 February 20:33, Friday, 13 February
http://thecommune.co.uk/feed/ XML 19:49, Friday, 13 February 20:34, Friday, 13 February
http://theness.com/roguesgallery/feed/ XML 20:28, Friday, 13 February 21:16, Friday, 13 February
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 19:49, Friday, 13 February 20:38, Friday, 13 February
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 19:49, Friday, 13 February 20:33, Friday, 13 February
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 19:56, Friday, 13 February 20:38, Friday, 13 February
http://www.baen.com/baenebooks XML 19:49, Friday, 13 February 20:33, Friday, 13 February
http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept XML 19:49, Friday, 13 February 20:33, Friday, 13 February
http://www.godhatesastronauts.com/feed/ XML 20:28, Friday, 13 February 21:16, Friday, 13 February
http://www.tinycat.co.uk/feed/ XML 20:07, Friday, 13 February 20:47, Friday, 13 February
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 19:49, Friday, 13 February 20:33, Friday, 13 February
https://broodhollow.krisstraub.comfeed/ XML 20:07, Friday, 13 February 20:48, Friday, 13 February
https://debian-administration.org/atom.xml XML 20:07, Friday, 13 February 20:48, Friday, 13 February
https://elitetheatre.org/ XML 20:28, Friday, 13 February 21:15, Friday, 13 February
https://feeds.feedburner.com/Starslip XML 19:56, Friday, 13 February 20:38, Friday, 13 February
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 19:49, Friday, 13 February 20:32, Friday, 13 February
https://hackbloc.org/rss.xml XML 20:07, Friday, 13 February 20:48, Friday, 13 February
https://kajafoglio.livejournal.com/data/atom/ XML 19:49, Friday, 13 February 20:38, Friday, 13 February
https://philfoglio.livejournal.com/data/atom/ XML 20:28, Friday, 13 February 21:15, Friday, 13 February
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 20:28, Friday, 13 February 21:15, Friday, 13 February
https://pixietrixcomix.com/menage-a-3/comic.rss XML 19:49, Friday, 13 February 20:33, Friday, 13 February
https://propertyistheft.wordpress.com/feed/ XML 20:07, Friday, 13 February 20:47, Friday, 13 February
https://requiem.seraph-inn.com/updates.rss XML 20:07, Friday, 13 February 20:47, Friday, 13 February
https://studiofoglio.livejournal.com/data/atom/ XML 19:56, Friday, 13 February 20:42, Friday, 13 February
https://thecommandline.net/feed/ XML 19:56, Friday, 13 February 20:42, Friday, 13 February
https://torrentfreak.com/subscriptions/ XML 19:49, Friday, 13 February 20:32, Friday, 13 February
https://web.randi.org/?format=feed&type=rss XML 19:49, Friday, 13 February 20:32, Friday, 13 February
https://www.dcscience.net/feed/medium.co XML 19:49, Friday, 13 February 20:38, Friday, 13 February
https://www.DropCatch.com/domain/steampunkmagazine.com XML 20:07, Friday, 13 February 20:48, Friday, 13 February
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 19:56, Friday, 13 February 20:42, Friday, 13 February
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 20:28, Friday, 13 February 21:15, Friday, 13 February
https://www.freedompress.org.uk:443/news/feed/ XML 20:28, Friday, 13 February 21:16, Friday, 13 February
https://www.goblinscomic.com/category/comics/feed/ XML 20:07, Friday, 13 February 20:47, Friday, 13 February
https://www.loomio.com/blog/feed/ XML 19:56, Friday, 13 February 20:42, Friday, 13 February
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 20:07, Friday, 13 February 20:48, Friday, 13 February
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 20:28, Friday, 13 February 21:15, Friday, 13 February
https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 XML 19:49, Friday, 13 February 20:32, Friday, 13 February
https://x.com/statuses/user_timeline/22724360.rss XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Humble Bundle Blog XML 20:28, Friday, 13 February 21:15, Friday, 13 February
I, Cringely XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Irregular Webcomic! XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Joel on Software XML 19:56, Friday, 13 February 20:42, Friday, 13 February
Judith Proctor's Journal XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Krebs on Security XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Lambda the Ultimate - Programming Languages Weblog XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Looking For Group XML 19:49, Friday, 13 February 20:33, Friday, 13 February
LWN.net XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Mimi and Eunice XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Neil Gaiman's Journal XML 20:07, Friday, 13 February 20:47, Friday, 13 February
Nina Paley XML 20:28, Friday, 13 February 21:15, Friday, 13 February
O Abnormal – Scifi/Fantasy Artist XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Oglaf! -- Comics. Often dirty. XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Oh Joy Sex Toy XML 19:49, Friday, 13 February 20:33, Friday, 13 February
Order of the Stick XML 19:49, Friday, 13 February 20:33, Friday, 13 February
Original Fiction Archives - Reactor XML 19:56, Friday, 13 February 20:38, Friday, 13 February
OSnews XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Past Events XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Paul Graham: Unofficial RSS Feed XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Penny Arcade XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Penny Red XML 19:49, Friday, 13 February 20:34, Friday, 13 February
PHD Comics XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Phil's blog XML 20:28, Friday, 13 February 21:16, Friday, 13 February
Planet Debian XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Planet GNU XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Planet Lisp XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Pluralistic: Daily links from Cory Doctorow XML 20:07, Friday, 13 February 20:47, Friday, 13 February
PS238 by Aaron Williams XML 20:28, Friday, 13 February 21:16, Friday, 13 February
QC RSS XML 20:28, Friday, 13 February 21:15, Friday, 13 February
Radar XML 19:56, Friday, 13 February 20:38, Friday, 13 February
RevK®'s ramblings XML 19:56, Friday, 13 February 20:42, Friday, 13 February
Richard Stallman's Political Notes XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Scenes From A Multiverse XML 20:28, Friday, 13 February 21:15, Friday, 13 February
Schneier on Security XML 20:07, Friday, 13 February 20:47, Friday, 13 February
SCHNEWS.ORG.UK XML 19:49, Friday, 13 February 20:33, Friday, 13 February
Scripting News XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Seth's Blog XML 19:56, Friday, 13 February 20:42, Friday, 13 February
Skin Horse XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Spinnerette XML 19:49, Friday, 13 February 20:33, Friday, 13 February
Tales From the Riverbank XML 19:49, Friday, 13 February 20:38, Friday, 13 February
The Adventures of Dr. McNinja XML 19:49, Friday, 13 February 20:34, Friday, 13 February
The Bumpycat sat on the mat XML 20:07, Friday, 13 February 20:47, Friday, 13 February
The Daily WTF XML 19:56, Friday, 13 February 20:42, Friday, 13 February
The Monochrome Mob XML 20:07, Friday, 13 February 20:48, Friday, 13 February
The Non-Adventures of Wonderella XML 19:49, Friday, 13 February 20:32, Friday, 13 February
The Old New Thing XML 19:49, Friday, 13 February 20:33, Friday, 13 February
The Open Source Grid Engine Blog XML 20:28, Friday, 13 February 21:15, Friday, 13 February
The Stranger XML 19:49, Friday, 13 February 20:34, Friday, 13 February
towerhamletsalarm XML 19:56, Friday, 13 February 20:42, Friday, 13 February
Twokinds XML 19:56, Friday, 13 February 20:38, Friday, 13 February
UK Indymedia Features XML 19:56, Friday, 13 February 20:38, Friday, 13 February
Uploads from ne11y XML 19:56, Friday, 13 February 20:42, Friday, 13 February
Uploads from piasladic XML 19:49, Friday, 13 February 20:32, Friday, 13 February
Use Sword on Monster XML 20:28, Friday, 13 February 21:15, Friday, 13 February
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 19:56, Friday, 13 February 20:42, Friday, 13 February
what if? XML 20:07, Friday, 13 February 20:48, Friday, 13 February
Whatever XML 19:49, Friday, 13 February 20:38, Friday, 13 February
Whitechapel Anarchist Group XML 19:49, Friday, 13 February 20:38, Friday, 13 February
WIL WHEATON dot NET XML 19:49, Friday, 13 February 20:33, Friday, 13 February
wish XML 19:49, Friday, 13 February 20:34, Friday, 13 February
Writing the Bright Fantastic XML 19:49, Friday, 13 February 20:33, Friday, 13 February
xkcd.com XML 19:49, Friday, 13 February 20:32, Friday, 13 February