Wednesday, 02 April

09:21

April Tools [Penny Arcade]

New Comic: April Tools

09:07

That might be the wrong question [Seth's Blog]

“Will it work?”

Along the way, we’ve been pushed to load our decisions with a need for certainty. It’s easier, it seems, to not try than it is to fail.

But the question, “is it worth trying?” unlocks possibility.

A surgeon in the middle of an operation should probably not experiment with an untested technique. But a writer, a leader or a musician can make that question part of their craft.

It’s the only way we learn.

05:42

Girl Genius for Wednesday, April 02, 2025 [Girl Genius]

The Girl Genius comic for Wednesday, April 02, 2025 has been posted.

02:35

Paul Wise: FLOSS Activities March 2025 [Planet Debian]

Changes

Issues

Sponsors

The SWH work was sponsored. All other work was done on a volunteer basis.

Richness [QC RSS]

where lies the strangling fruit that came from the hand of the sinner

Vivian Blaxell Worries She'll Disappoint You [The Stranger]

But 'Worthy of the Event' is Worthy of Your Attention
by Katie Lee Ellison

On page 230 of her new book, Worthy of the Event, Vivian Blaxell writes, “steer clear of Suicides.” To that I say, whoopsie daisy! My life has been rife with ’em. Still, this book gripped me and stole my attention. Though Blaxell said that some have worried about her over it, that they hear nihilism in it, to this reader, there is humor, resilience, and a learned fearlessness of death, or perhaps pain (though I didn’t confirm with her).

Vivian Blaxell is an academic, a translator of Japanese poetry, a whirling dervish of contradictions that continually surprised me and kept me sharp for our hour-and-a-half conversation, and a trans woman who has always wanted to be “in the world” not just “in the community.”

Worthy of the Event shows its resistance to form starting with the subtitle. It's called "an essay," but you could also say it's composed of many essays, or sections. In this series, Blaxell has created a voice that is not her own. The speaker is a character, which she describes later in this interview—a trans woman of her own creation. Yes, reader, here we are again in that spin of genre, never to be found properly notated on the bookstore aisles, and to gorgeous ends. 

We learn the meaning of the title of the book when Blaxell describes monks surrounding their teacher, the 16th Gyalwang Karmapa, on his deathbed. “Grief beams on their faces like ten thousand suns in a noonday sky as their leader slips away… They enjoy the event. They are worthy of it.” I sat with these lines a long time, as I made my way slowly and utterly compelled by her nearly 300 pages. Blaxell is brilliant at serving up new perspectives cheekily and constantly, furiously and beautifully, always flipping the angle and point of view. 

I spoke to her as she began her book tour in New York City, having traveled from Melbourne, Australia, and she did not disappoint.  

The first essay of the book is called “the disappointments” and I wanted to ask you about what's disappointing you lately. 
That's such a difficult question because mostly I'm disappointed in myself. That's the whole point of that chapter. There's one line in it which says, “I'm afraid of myself and that's logical.” Some people have misconstrued that to mean, I'm afraid of what I might do to myself. Some people think that there's a stream of nihilism running through the entire book, but actually, I'm afraid of disappointing other people. I think I've disappointed a lot of people in my time. I'm concerned about that. I wouldn't do it any other way, but I'm concerned about it. 

I don't think I'm ever disappointed in other people. I'm sometimes disappointed in the way that relationships with other people unfold. In a relationship between two people, even between groups, people go in with expectations about the way people are going to behave, what they're going to get out of it, and what service that relationship will provide to them. Rather than what service they will provide in the relationship, and that always seems to end up risking great disappointment at some point. Sometimes it takes years, but it seems inevitable to me. 

I've loved lifelong friendships that have vanished over the years, and are still vanishing at this age, people that I've known for 50 years. We disagree on something and decide we're not going to be friends anymore. I do it. I just say, “You're absurd. I can't stand you anymore. Goodbye.” I think the disappointment is just a prologue to something else. Disappointment isn’t an end to anything.

Expectation precipitates disappointment.
I think that's right. I don't think there's anything wrong with expecting people to behave well, and expecting oneself to behave well, or expecting things to turn out well. I think most people expect. Hope is really a pathetic thing. I have nothing good to say about hope. When something starts appearing on Hallmark greeting cards you know that it's empty. 

If we're talking about the difference between expectation and hope, my understanding of a Buddhist approach would be that you cannot will anything, that it would be pointless to try. So my understanding is that hope is expectation without the will.
I think that what I take from the message of the Buddha is go ahead and will all you like. But be conscious that that's what you're doing and that it's not you, it's just thoughts, and that your thoughts are not who you are. I think will is necessary, don't you? I don't like this idea that people have about Buddhism and all sorts of things, that people can just float along on the river of life, so to speak, without doing anything. That's not possible. Making a cup of coffee requires an act of will. But hope, it's futile. Hope is hopeless. I don't hope at all. I don't know if I've ever hoped. If I did, I gave it up fairly early, as a child. Not in a dismal way. I just realize that hoping is not an action, it doesn't make anything happen. It's almost the very definition of useless.

In that context, hope seems inherently selfish. If my life has proven anything, it's proven you correct. Hope is dopey; it's not going to do anything for you.
It could make you feel better. But feeling better is temporary. 

How did this book come into existence?
At home during Covid, I still needed to teach, because I actually don't have a lot of money, like a lot of trans women my age. I was teaching on Zoom at home, so I had a lot of time to myself. 

At the same time, a mainstream literary magazine in Australia had a call out, so I wrote this thing, and they turned it down. An old friend I've known since I was 16, a major Australian poet, called me, and when I told her they rejected it, she asked, “Are you disappointed?” I said, “I'm really disappointed.” And she said, “Write an essay about it.” I said, “I don't want to. I'm an academic. I've done that for so long.” But I sat down and I thought to myself, I'm just going to write it the way I want to write it. I have all this background in philosophy and theory, I had to try and understand disappointment in that way. 

That first essay was published really quickly, I think because of the first sentence: “My vagina disappoints me.” I didn't add that until I'd written the essay, and thought, What am I going to do to make sure these people that really don't want to hear from me just can't resist it? Then I met the editor of that journal at a colleague's book launch and he said, “Are you writing a book?” And I said, “That's not your business what I'm doing.” 

But later I thought about what the great philosophical issues have been for me, in my life and my work. So the next one that came up was about the cruelty to animals, and immediately all this stuff I already knew about theories of animals and posthumanism came up. I proceeded in that way, and by the time the essay “Nuclear Cats” was shortlisted for the Melbourne Prize for literature, I already had eight philosophical topics. 

Can you talk about Gertrude Stein’s influence on your writing, and your take on the importance and power of repetition? And how did you come to your syntax and your voice?
I'm much more interested in form than in content. I don't really give a fuck about the content very much as long as the form is what I want. I wanted the voice to sound like somebody speaking, and without it being quotable direct speech. Gertrude Stein is really the only writer that does prose where it actually sounds like somebody talking, and she does that by repetition. Because when we speak, people repeat isolated words, sometimes more than once and quite close together. And the way [Stein] manages punctuation invokes the speech act in what is, in fact, not quoted prose. It's not dialogue prose. It's just the opposite. Really, it's quite high-flown intellectual prose. I thought this was a way of creating this sort of transsexual voice. 

I had to change “the disappointments” a lot from the original to make the voice consistent. I had to go through everything and texturize it really carefully. I wanted it to sound like [the narrator is] speaking directly to you in a quite urgent way, and you can't ignore it. You have to keep up with it even when she does that sort of panning, where everything gets a bit blurry because she's [covering so much] so quickly.

Can you speak to that in the context of transition as a craft tool?
I was very deliberate. One of the reasons it's written in a lot of short pieces is because that's the only way I could control the connections between all the pieces. Otherwise it would have been too dense, and the short pieces meant I could move them around really easily, reposition them to make this sort of rotation around a central axis, to make it clearer. 

What would you call the voice, or the style of this book which is supposedly nonfiction?
I have no idea. Call it whatever people call it, whatever they want. I don't care. The only thing that makes me laugh is when people send me messages and stuff saying, “It's so good to see you had such a great relationship with your mother.” I'm like, maybe that narrator had a better relationship with the mother than I had with mine.

Can you talk about the lessons you learned from studying poetry, which the narrator talks about in the book?
She's actually talking about translation. And what happens when you are required to translate a whole set of Japanese poems by a modern Japanese poet, not classical poetry, and you make the most accurate word-for-word translation, but it's not a poem you end up with at all. I can read Kaneko Mitsuharu's poems, [who uses] a Kanji which is very obscure, and that's part of the pleasure of reading that poem in Japanese. But you can't replicate that. You can't repeat that in a translation. So what do you do? You end up writing a new poem that tries to capture the spirit and the meter. The sense of the original poem.

I read poetry quite a lot, but I can't write poetry. I read it because it teaches me something about how to use language. It teaches me how to be lyrical in prose, which is important to me. I like to write about landscape, and poems teach me how to do that better, because I think it's hard in prose to write lyrically. 

I wonder about what you would say about the value of putting really unpleasant or gross shit in art. What does that do for us?
Maybe it wakes us up. Maybe it makes us aware that we're alive, and that's good. I'm a trans woman, and we're kind of shocking by definition. Certainly in my generation we were. I think I've made clear points in the text, my mother saying, “will Centaurs be next?” It's good to make people feel revolted or disgusted. I read things I'm disgusted by and I see movies that disgust me. 

Your lyrical language is stunning and it seems to appear in moments that are absurd or ugly in order to create contrast.
It's been my experience that being able to see beauty when other things are really very difficult, has the power to preserve trust. I think there's nothing—apart from kindness, which is a kind of beauty itself—more important than beauty. I'm not talking about people. I think my purpose in juxtapositioning lyrical description close to difficult things was a lesson. 

One of the times I was living in Japan, I was invited to a dinner party at Arashiyama, which is a very beautiful area of Kyoto by the river, in the middle of the cherry blossom viewing season, and there was a Rinzai monk who had some seniority there. He and I had to leave together, late at night, because we both were using the same train. We walked across the bridge over the river and there was a huge riverside promenade. Lines and lines and lines of very mature ancient cherry trees. They were all in full blossom in the night. It was very quiet, because all the people that are usually out enjoying themselves were home in bed. He said to me, “How beautiful, how beautiful that is!” And I looked, and I said, “Yes, but look at all the shit they've left behind, these people,” and he said to me, “Look up, Look up.” 

I've never forgotten the lesson that he gave me. That was all he said. “Look up, look up!” That's why I write lyrical stuff next to stuff that's not so nice. It's like, “look up, look up, look up.”

 

Vivian Blaxell’s Worthy of the Event is out on LittlePuss Press.

City Council Passes a Nonbinding Resolution Decrying SPD Defunding That Never Happened [The Stranger]

This afternoon, City Council passed a nonbinding resolution denouncing the Defund SPD movement and acknowledging the city’s actions to reform our police department under the federal consent decree. The vote passed by 6- 0, with councilmembers Alexis Mercedes Rinck, Dan Strauss, and Cathy Moore absent from today’s council meeting. by Tobias Coughlin-Bogue

This afternoon, City Council passed a nonbinding resolution denouncing the Defund SPD movement and acknowledging the city’s actions to reform our police department under the federal consent decree. The vote passed by 6- 0, with councilmembers Alexis Mercedes Rinck, Dan Strauss, and Cathy Moore absent from today’s council meeting. 

During his speech before the vote on the resolution, Saka invoked the murder of George Floyd and the uprisings that followed, claiming the previous city council’s pledge to defund the police was “purportedly made in my best interest as a Black man, and other Black people across this great city. Yet, strangely, those defund pledges were made at the height of a racial reckoning when there were zero Black or African American members of descent on the council.”

There’s a lot to unpack there (and my editor, Marcus, assures me we will at a later date), but this revisionist history boils down to Saka asking, “Do you believe me or your own eyes?” No community is a monolith, sure—but if he or anyone else is curious about who was actually marching and demanding a reallocation of police funding in 2020, a quick Google search will do the trick. And wouldn’t you know it? The same communities the council claimed to be listening to at the time were the ones leading the charge. Spoiler alert: the receipts are not in Saka’s favor.

So why do we care about a non-binding resolution? 

This vote is about a conservative-leaning City Council that wants you to believe that we remain under the consent decree because of the Defund movement of 2020, instead of egregiously poor police behavior. 

First, the details. Res. 32167 affirms the city’s support for police, fire, and other first responders, and disavows any efforts to “defund or abolish SPD services or personnel.” Saka’s announcement of the resolution advancing to full council said that it would “[finalize] Seattle’s federal Consent Decree with the Seattle Police Department (SPD)” and “[shape] the future of public safety in our city.” It will do no such thing.

What it will do is ask other people to do that. Again, in Saka’s own words: “Once SPD has updated its crowd management policies to comply with the Less Lethal Weapons Bill that we passed earlier this year, my proposed legislation would formally request that the City Attorney submit the updated policies to the court for review.”

To be clear, City Attorney Ann Davison was 110% already going to do that. One of Mayor Bruce Harrell’s rare explicit goals has been to get out from under the 2012 consent decree, and despite the police continuing to do bad shit, we’re pretty damn close.

The reason we’re still under consent decree has nothing to do with the Defund movement. In Rob Saka’s reality, Seattle politicians pledged to defund the police by 50 percent. He is joined in that belief by cosponsor Bob Kettle and Mayor Bruce Harrell, who also came out in favor of this, along with such luminaries as Brandi Kruse, Jonathan Choe, and Jason Rantz.

Besides being our region’s most nightmarish of nightmare blunt rotations, all of those people are obsessed with something that never occurred.

While seven out of our nine councilmembers did express support in 2020 for a proposal put forth by Decriminalize Seattle and King County Equity Now to reduce the police budget by 50 percent, they a) never put anything down on paper about it and b) didn’t actually do it.

What happened, after those seven councilmembers said they would support defunding the police by 50 percent, is that then Councilmember Kshama Sawant proposed a budget amendment to do so and no one voted for it. So that’s about all their “pledge” amounted to. 

“The idea that the SPD was defunded by 50 percent in 2020 is a complete myth. I know because I was the socialist on the City Council who put forward the legislation that year, which not a single Democrat supported. City Hall Democrats like Councilmember Saka and Mayor Bruce Harrell have been doing the bidding of big business, cutting funding for social services and pumping more money into the already-bloated police department,” Sawant told The Stranger.

A few weeks later, her fellow councilmembers voted through a budget that, Sawant wrote, “fails to address the systemic racism of policing, trimming only $3 million from the bloated department’s remaining 2020 budget of $170 million.”

The police budget did technically shrink after the council chose to move parking enforcement under the purview of the Seattle Department of Transportation, but that simply moved the money to a different department. It did not do away with parking enforcement. Once they were moved back, in Harrell’s 2022 proposed budget, funding for SPD was above 2020 levels, where it has remained since. In recent budgets, it has only grown.

(If you want an eye-opening look at how cops twisted and wriggled to avoid ever being defunded, give this Real Change investigation by watchdog Glen Stellmacher a read.)

The reason we’re still under consent decree then, has everything to do with police misbehavior.

Seattle’s federal consent decree has been hanging around since 2012, thanks to a DOJ investigation that found SPD had a little habit of using excessive force—an investigation sparked by the police killing of John T. Williams. Since then, the city has burned through more than $200 million trying to prove it can police without violating civil rights, and yet, here we are, still talking about police accountability like it’s some unsolvable mystery.

One major roadblock? The Seattle Police Officers Guild (SPOG), which has spent the past decade making sure that any real oversight is dead on arrival. Case in point: a 2018 contract that gutted a city ordinance meant to improve civilian oversight. Fast forward to May 2024, and Seattle’s latest love letter to SPOG handed officers hefty raises while barely touching accountability reforms, so much so that even the federal judge overseeing the decree, James Robart, and the Community Police Commission threw up their hands in frustration.

At a March 2025 hearing, Robart admitted Seattle has made progress but remained unimpressed by the glaring lack of accountability fixes. The city’s next steps? Finalizing a crowd control policy and pushing through legislation on less lethal weapons before asking the feds to officially end the decree. Robart expects it to wrap up soon but is clearly annoyed that he can’t do much about the SPOG contract’s flimsy disciplinary measures.

So, after six mayors, seven police chiefs, and 12 years of legal wrangling, Seattle is almost free from federal oversight. But if you thought that meant SPD suddenly fixed its accountability and bias issues, well, you’d be as cartoonishly wrong as Rob Saka.

Nonbinding resolutions are useful for at least one thing: telling us how politicians want to be seen. And, in some cases, how they see things. This is one of those cases.

And, sure, it sounds great to claim that Seattle defunded the police if you’re, say, a right-wing commentator trying to portray us as a “socialist hellhole.” But a sitting councilmember in the actual city that you’re actually supposed to represent? Why?

Saka’s resolution concludes by claiming that the council’s hastily abandoned commitment to a 50 percent defund “led to the resignation of hundreds of police officers.” Complaining that the idea of maybe possibly defunding the police did so much emotional damage to the police that they quit in droves is as close to compelling as his argument gets here, but even that claim is dubious at best.

We get that most of the current council has never seen a pair of boots they didn’t want to lick, but come on. 

“Defund is dead,” Rob? Really? 

It was never alive! It never happened!

 

Marcus Harrison Green contributed reporting to this article

 

01:00

Mary Lou Gamba Is an Undisputable Champion of Comedy [The Stranger]

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Saturday, April 5. by Megan Seling

On Saturday, April 5, some of Seattle’s funniest comedians will take the stage as part of The Stranger’s annual Undisputable Champions of Comedy showcase. It’ll be hilarious! The lineup was curated with help from everyone’s comedy bestie, Emmett Montgomery, co-host of Joketellers Union at Clock-Out Lounge and purveyor of all things delightfully weird. And this year’s lineup is stacked with talent, from a local comedy legend who once won over a crowd of bikers at an Aurora bar in the ’80s to a comic who uses laughter as a way to deal with grief. We even have a bunny and a fundamentalist Christian pastor on the bill! It’s gonna be great. We're going to post interviews with the champs all week long.

Now, let's get to know tennis lover and rotisserie chicken enthusiast Mary Lou Gamba! 

Describe your comedy in five words.

Silly and punchy meets bawdy.  

What’s the first thing you did when you found out you were chosen as one of The Stranger’s Champions of Comedy?

Well, I'm embarrassed to say I immediately checked with other comics to see if it was legit.  Then, when I found out it was, I TOLD EVERYONE! I was very excited! I am very grateful to be recognized. It means a lot to me.  

You describe yourself as a rotisserie chicken enthusiast. There are always debates raging about who’s rotisserie chicken is the best. Costco. Whole Foods. QFC. Etc. Are you prepared to say, right here and right now, once and for all, who sells the best rotisserie chicken?

PCC's Balsamic Herb rotisserie chicken.  

Do you remember your first time doing stand-up? Were you immediately hooked?

I do remember.  I took a class a million years ago, and the day of the big show, where we all performed in front of our friends and family, I could not stop laughing. I laughed all day leading up to the show. I had never experienced that before. It was so weird. I finally stopped laughing after I went up. It was really fun, and the crowd was very supportive. Although, I was not hooked until I found an open mic years later that really worked for me. After that, I was addicted.

Where is your favorite place to see comedy in Seattle right now?

There are many great places to go. I just go to the place that has someone I want to see.  

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Sat April 5, Washington Hall, $25, 21+. Tickets available here.

00:00

Trump administration at "war" with mRNA technology [Richard Stallman's Political Notes]

*Trump administration at "war" with mRNA technology: scientists alarmed vaccine skeptics could kill research.*

mRNA vaccines are the target of persistent disinformation along many fronts. Some disinformation exaggerates the significance of side effects that happen a small fraction of the time and generally cause no permanent harm. Others harp on thousands of people go had serious side effects but neglect to compare those with the millions of lives the vaccines saved.

Tuesday, 01 April

22:42

Johannes Schauer Marin Rodrigues: NASA has pride across most of the universe [Planet Debian]

In July 2024, NASA posted an article titled “NASA Has Pride Across the Universe” featuring a pride flag by Rachel Lense where each color band is made up of images from across NASA. Today is the annual International Transgender Day of Visibility. The original NASA article from last year has since been taken offline. But the heroes from archive.org still carry a copy which I now archived myself together with the other source images. Here is NASA’s pride flag in all its glory:

NASA pride flag by Rachel Lense

Southern Fried Science has an article about the flag. The original 4000x2547 TIFF image was stored by archive.org but the PNG version in the same resolution can be downloaded here or by clicking on the image.

The Best Things To Do in Seattle This Month: April 2025 [The Stranger]

Kylie Minogue, Sakura-Con, and More
by EverOut Staff

The first full month of spring brings a bouquet of entertainment options across genres to our fair Emerald City. Below, we've compiled the biggest concerts, food events, theater shows, author talks, and other great things to do, from Kylie Minogue to Sakura-Con and from Live Wire Radio to KUOW Presents: The Splendid Table Live.

COMEDY

Mo Amer: El Oso Palestino Tour
Palestinian American comic Mo Amer has found a unique way to blend difficult real-life experiences with humor: His path to citizenship took two decades, he once endured a flight next to Eric Trump, and his performances often work to defuse harmful stereotypes about Muslim Americans. It makes sense that the humble, cheeky charmer landed the semi-autobiographical Netflix series Mo. (The second season started in January, by the way.) Personally, I'm hoping to hear more about his favorite vaccine. (I'm a Moderna girly, myself.) LINDSAY COSTELLO
Moore Theatre, Belltown (Sun Apr 6)

21:56

Ricci Armani Is an Undisputable Champion of Comedy [The Stranger]

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Saturday, April 5. by Megan Seling

On Saturday, April 5, some of Seattle’s funniest comedians will take the stage as part of The Stranger’s annual Undisputable Champions of Comedy showcase. It’ll be hilarious! The lineup was curated with help from everyone’s comedy bestie, Emmett Montgomery, co-host of Joketellers Union at Clock-Out Lounge and purveyor of all things delightfully weird. And this year’s lineup is stacked with talent, from a local comedy legend who once won over a crowd of bikers at an Aurora bar in the ’80s to a comic who uses laughter as a way to deal with grief. We even have a bunny and a fundamentalist Christian pastor on the bill! It’s gonna be great. We're going to post interviews with the champs all week long. Today, say hello to Ricci Armani! 

Describe your comedy in five words.

Fun, Sassy, Honest, Good Universal

What’s the first thing you did when you found out you were chosen as one of The Stranger’s Champions of Comedy?

I was very excited, but honestly, the first thing I did was get right back to work. I wish I had a better story about this, but unfortunately, I am constantly working, whether that's at my part-time day job or working on my show or working on my own personal stand-up. I am constantly working, haha.

          View this post on Instagram                      

A post shared by Ricci Armani (@ricci_armani)

Caroline Rhea was a recent guest on your comedy show My Straight Friends. She is so great! Please tell me you have a good Caroline Rhea story.

Caroline was such a treat. She was so nice and so sweet and very giving of her time. We played a game with her onstage similar to Taboo, and she had to get me to say Sabrina the Teenage Witch. All the hints that were given to me sounded like the TV show Charmed, so that's what I said. She stormed off the stage when I said that instead of Sabrina. It was hilarious to see and I felt so dumb afterwards.

Speaking of My Straight Friends, you host the show once a month with Joe Dombrowski in both LA and Seattle. I gotta ask: Which city has a better audience?

I suppose that's subjective. I would say both cities now have their cult following, and I couldn't be more thankful for them. Both cities are full of fans who love the show and love what we put out.

Where is your favorite place to see comedy in Seattle right now?

My favorite place to see comedy in Seattle right now, honestly, would be through Don't Tell Comedy. They are a nationwide chain of popup comedy shows, and it's really my favorite place to perform and watch. I get to see the best of Seattle, and I get to see random larger names come through as well. Though there is no wrong answer here. All of the clubs and venues in the area are pretty great, depending on the lineup. 

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Sat April 5, Washington Hall, $25, 21+. Tickets available here.

21:07

Wesley Crusher and The Travelers [WIL WHEATON dot NET]

While you wait for this incredible new Star Trek series to release, I invite you to listen to episode one of It’s Storytime with Wil Wheaton, before episode two drops tomorrow.

20:21

[$] Slab allocator: sheaves and any-context allocations [LWN.net]

The kernel's slab allocator is charged with providing small objects on demand; its performance and reliability are crucial for the functioning of the system as a whole. At the 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit, two adjacent sessions in the memory-management track dug into current work on the slab allocator. The first focused on the new sheaves feature, while the second discussed a set of allocation functions that are safe to call in any context.

The 2025 Campaign Season Has Begun [The Stranger]

The filing deadlines are in early May, so there’s still time for some surprises, but even now, the election is shaping up to be an interesting one. by Stranger Election Control Board

We blinked, and suddenly, we’re on the cusp of another local election season.

In case you haven’t been following the election so far (and with totalitarian takeover on our heels, we’d understand), here’s your chance to catch up. The filing deadlines are in early May, so there’s still time for some surprises, but even now, the election is shaping up to be an interesting one.

This year, we have a mayor’s race featuring an embattled moderate incumbent who speaks the language of progressivism,  but governs like a conservative. We’ve got a challenger for the District 9 City Council seat and a wide-open race in District 2. And finally, a City Attorney race, where anyone with an ounce of progressivism (or human decency) has been eager to unseat the incumbent from the moment she took office.

We’ve got months before endorsement time, but that doesn’t mean we shouldn’t meet the candidates who have thrown their hats in the ring. Without further ado, here’s our quick breakdown of the local elections so far.

Mayor

Bruce Harrell, Seattle’s very own Chamber of Commerce sock puppet, finally has some challengers.

The biggest name in the game so far is Katie Wilson: a street-fighting policy wonk who’s built a strong, progressive reputation actually winning battles for working people (raising the minimum wage, keeping transit affordable). When she launched her campaign, she told The Stranger about the kind of mayor she hopes to be: a coalition builder who’s able to reach across the aisle to find common goals, without diluting progressive, research-backed policies. She described herself as someone who’s willing to test new ideas and push forward on issues that have stagnated in this city for a decade.

She’s untested in elected office—or even running in an election—but she urged voters to look at her record as a policy advocate. “I’ve spent the last 14 years of my career organizing, building powerful coalitions that win major victories for working people,” she told The Stranger. “And I’ve done all that from the outside. I would be happy to put my legislative record up against Bruce Harrell’s any day of the week.”

Then there’s Ry Armstrong, an MLK Labor Delegate for SAG-AFTRA and an elected member of the Actor’s Equity Association, repping 50,000 actors from Texas to Hawaii. This is Armstrong’s second go at elected office. In 2023, they ran for Kshama Sawant’s City Council seat in District 3, and while progressives generally got wildly outspent by big business (and therefore creamed) in that election, Armstrong’s showing was particularly rough. Only 1.86 percent of the electorate (a total of 488 people) voted for Armstrong in that race. They’re proud of their big ideas, and a suite of progressive taxes to pay for them.

Ry and Katie are joined in the race by a handful of other candidates, including: MAGA-y Rachael Savage, the Republican who is campaigning to block permanent supportive housing and arrest homeless addicts as means of recovery; and Joe Molloy, a homeless man who says he lost his housing last year due to an unsupported disability, and is running his grassroots campaign from Tent City 3.

City Council District 9

Seattle’s City Council President Sara Nelson has been on the council since 2022 and has been president since 2024. Her leadership has represented the Chamber of Commerce (and Amazon’s) bid to claim control of city government, so we’re very pleased to announce that she has a challenger. Her name is Dionne Foster, progressive policy wonk, and capital gains tax champion. Nelson, known for her right-leaning, business-first politics, might be in trouble, given the city’s enthusiastic support for progressive Alexis Mercedes Rinck in November, and the runaway success of February’s social housing initiative. Foster’s got the right ideas on housing and homelessness, but let’s be real, to quote a Reddit-er, if a rock ran against Nelson, some Seattleites would probably throw a vote its way just to avoid the “right-wing, inept millionaire” vibe.

City Council District 2

At the end of last year, Tammy Morales stepped down from her seat representing D2 on City Council, saying that the conservative, business-oriented City Council was a toxic, undemocratic environment. The council appointed Seattle Police Department crime prevention coordinator and long-time City Council hopeful Mark Solomon to hold down the seat until this year’s election, when it goes back to the people.

So who’s gonna replace the progressive Morales? In the battle for D2’s vote, we start with Assistant City Attorney Eddie Lin, who primarily works with the Office of Housing. He describes himself as a champion of affordable housing, progressive revenue, and creating a city where “artists and bike messengers and baristas and educators can all afford to live here.” So far, he’s light on details for how he plans to do that, so we’ll be watching him closely.

Then there’s Adonis Ducksworth, the Mayor’s senior transportation policy official and one of the architects of the 2024 transportation levy. He’s pushing a platform that combines safety, affordability, and... skate parks? The lifelong skateboarder knows how important public space is for kids (yay) but he also believes safety in D2 comes with more cops (boo). Like Lin, though, he hasn’t offered many other details yet.

Eclipsing both of their fundraising, though, is a newer entrant: Takayo Minakami Ederer, a Columbia City-born real estate investor and karate instructor (and one of the first members of the women’s national karate team). Based on her early interviews, she’s largely running on a “public safety” platform—which, you guessed it, to her means more cops. She also acknowledges that we need more shelter beds, and advocates for a public-private partnership to make that happen.

City Attorney

In our friendly neighborhood City Attorney showdown, Nathan Rouse, Rory O’Sullivan, and Erika Evans all have big ideas on how to fix Seattle’s broken justice system in contrast to incumbent Ann Davison—spoiler alert: most of them don’t involve locking up more people. Rouse, a public defender who’s done with Davison’s “tough-on-crime” charade, wants to bring back community court and stop prosecuting minor offenses like SODA and SOAP violations (which, fun fact, aren’t even being enforced right now). Meanwhile, Evans is focusing on serving up anti-Trump tea and advocating for harm reduction programs that actually help people instead of shoving them into jail. And then there’s O’Sullivan, who thinks the City Attorney’s office could use a little more compassion and a little less spectacle. So, get ready for a race that could decide whether Seattle stays stuck in the criminal justice quicksand or finally tries to pull itself out with actual solutions. 

Stranger Election Control Board is Marcus Harrison Green, Vivian McCall, Charles Mudede, Emily Nokes, Megan Seling, and Hannah Murphy Winter. 

Margaret Flatley

19:42

A Special Game of D&D [Penny Arcade]

Recently Jerry and I were invited out to Wizards of the Coast headquarters to meet and play Dungeons and Dragons with two young men whose brother had a five year battle with Lymphoma. These boys had made a video about how important D&D was to their family during their brother's illness and how they are now raising money for The Leukemia & Lymphoma Society.

 

 

19:35

Dave Täht RIP [LWN.net]

[Dave Täht] From the LibreQoS site comes the sad news that Dave Täht has passed away. Among many other things, he bears a lot of credit for our networks functioning as well as they do. "We're incredibly grateful to have Dave as our friend, mentor, and as someone who continuously inspired us – showing us that we could do better for each other in the world, and leverage technology to make that happen. He will be dearly missed".

Searching through LWN's archives will turn up many references to his work fixing WiFi, improving queue management, tackling bufferbloat, and more. Farewell, Dave, we hope the music is good wherever you are.

(Thanks to Jon Masters for the heads-up).

Quickies [The Stranger]

Got problems? Yes, you do! Email your question for the column to mailbox@savage.love! by Dan Savage 1. How does one find the clitoris? I’m told the clitoris is not hard to find — go north, young man — but if one tries to find it and one fails, one should pull over (or pull out) and ask for directions. 2. If someone tells you to “do whatever you want,” should you? Someone who says that and means will eventually say it to the wrong person and get hurt; they’re a danger to themselves. Someone who hears that and takes it as license to do whatever they want is a danger to others. So, a decent person — by definition — wouldn’t do whatever they wanted to someone who told them they could. And seeing as you’re a reader of mine, I’m hoping you’re a decent person. P.S. People who say “do whatever you want” don’t mean it. What they mean is this: “I’m too embarrassed to…

[ Read more ]

18:49

Dear Hendrix: Don’t Smoke Weed...With Losers [The Stranger]

There is no drug more important than spending time with good people, people you love. There’s no drug worth risking a stranger’s actions. There is no drug worth risking something important to you. No drug worth getting caught up in a damn robbery. And there’s DEFINITELY no drug worth your life. But like a person living in the real world, I know you may consider cannabis at some point. So remember: WWJD. Don’t smoke weed…with losers. by Eva Walker

Eva Walker is a writer, a KEXP DJ, one-half of the rock duo the Black Tones, and mom to her baby girl, Hendrix. She also co-wrote the book The Sound of Seattle: 101 Songs That Shaped a City, which was released in 2024. Every month for The Stranger she writes a letter to Hendrix to share wisdom learned from her experiences—and her mistakes.

Dear Hendrix,

My dear Hendrix, you will likely have your mother’s rebel gene. And let me tell you, it’s not something to hide from, but it is something to sharpen.

To learn how to do that, I want to tell you about a woman named Jo.

Jo has known your grandmother for more than 35 years, so she’s been in my life since I was young. Jo is one of those people who’s seen it all. She’s tough and she knows how to handle herself in a pinch. She’s often got a smile on her face. She’s one of the most honest and straightforward people I know. It’s one of my favorite qualities about her.

Jo started doing my hair when I was a teenager. And one day, when I was 15, we started talking about cannabis. I’m not sure how it came up. We talked about damn near everything during my Saturday hair appointments. That’s the beauty of Jo. She knows hair and she knows life. At this point in mine, I hadn’t yet tried pot—or any drugs, for that matter. And I was aware of the stigma it had—especially with adults Jo’s age. By then, though, I had watched the 1936 anti-dope propaganda film, Reefer Madness. (You should watch it too, sometime. It’s hilarious!) That movie has made way more people want to try cannabis than not. Me included.

That day, Jo said to me something I’ll never forget. Something so important that I want to pass it down to you here. She said, “Baby, don’t do drugs.” But she wasn’t finished with her worldly advice. What she added so poignantly was, “But if you’re going to try weed… don’t do it with losers.”

Bingo was his name-o! That was some of the deepest shit I’ve ever heard. But what IS a loser? It’s not someone exclusive to any race, gender, class, background or anything like that. Losers come in all forms. If you only remember one thing I ever tell you, remember this: Losers wear suits. Losers wear boots. Some losers even read Dr. Suess. They’re everywhere. It’s one of those things where your gut just tells you. You know one when you see one. (If you need help, just ask me, I’ve seen plenty!) And they’re to be avoided when you’re doing anything special, from drugs to sex to going out to your favorite restaurant.

Jo’s point was that people are curious, but curiosity can be dangerous. So if you indulge yours then it’s important to be around others worthy of your time and attention. People who have self-respect, goals, intellect, and something to lose. Your father and I want you to appreciate yourself and to always remember this. 

Speaking of losers, the infamous crook Richard Nixon declared a whole war on drugs on June 17, 1971. That was 18 years to the day before I was born. A whole person came of age between that declaration and when I popped out of the womb. So to have another adult tell me pot wasn't the worst thing in the world—but what was worse was doing it with losers, Hendrix, that was some life-changing shit. So, did I eventually try weed? Duh. I was 17 when I first smoked pot (I refuse to type out all the letters in marijuana, which might be a side-effect of using marijuana). I first smoked at a party in high school, which is where you’ll likely be offered something, too. Or it could be college, or a bathroom stall or outside a bar or at a friend’s house. Weed is everywhere. (Note: make sure whatever weed you might try is store-bought and not wrapped in foil.)

The first time I smoked, I went up to a guy at a party who had a glass pipe. He carefully showed me how to use it. He was kind and wasn’t shady or gross. He passed the test! The only painful part was the cough. Hendrix, you will never forget the pain of your first weed cough after a big hit. Unfortunately, people rarely warn you about that part. Your throat will want to call the fire department.

It turns out, though, that I still needed to sharpen my Inner Jo. While the boy with the pipe was no loser, the party was full of them.  And after that first-ever hit, the fun house party turned quickly and strangely into a robbery. Your Uncle Cedric was with me as men with guns started demanding possessions. Thankfully, he whisked me out the backdoor like a superhero. That led to a class field trip to a lineup at the police station. Ugh. See, I wasn’t smart that day.

My advice to you is this: WWJD? What would Jo do? There is no drug more important than spending time with good people, people you love. There’s no drug worth risking a stranger’s actions. There is no drug worth risking something important to you. No drug worth getting caught up in a damn robbery. And there’s DEFINITELY no drug worth your life. In the end, you don’t need drugs—weed, included. And like any parent, I’d prefer it if you didn’t do them. But like a person living in the real world, I know you may consider cannabis at some point. So remember: WWJD. Don’t smoke weed…with losers.

18:42

Mystery, magic, and far-off realms arrive in April [Humble Bundle Blog]

April’s Humble Choice games are here, and this month’s mix features high-fantasy realm creation, dark & twisted fishing, and lots more! Catch fish ‘n’ solve mysteries in DREDGE. Raid some classic tombs with Lara Croft. Survive a Xenomorph infestation, help restore humanity, and a whole lot more with your membership this month! Your Games for April DREDGE  The murky depths of unknown waters just got …

The post Mystery, magic, and far-off realms arrive in April appeared first on Humble Bundle Blog.

18:07

March GNU Spotlight with Amin Bandali [Planet GNU]

Eighteen new GNU releases in the last month (as of March 31, 2025):

18:00

Johannes Schauer Marin Rodrigues: TIL: OpenPGP Web Key Directory [Planet Debian]

Today I was looking for a way on how to best publish my OpenPGP key on my webserver. Surely, somebody came up with some sort of standard way for where to place that key, right? Turns out, they did: https://datatracker.ietf.org/doc/draft-koch-openpgp-webkey-service/

The TLDR summary is, that my key can now be found here:

https://mister-muffin.de/.well-known/openpgpkey/hu/8yxgr5jjfok88r9um56kb44x9h4dyj7f

Or be downloadable by just running:

$ gpg --locate-key josch@mister-muffin.de

Where does the hash come from? It’s the local part of my email (josch) hashed with sha1 and encoded in z-base32. That computation can be done by gpg:

$ gpg --with-wkd-hash -k josch@mister-muffin.de | grep mister-muffin.de
[...]
8yxgr5jjfok88r9um56kb44x9h4dyj7f@mister-muffin.de

I exported the key that I put there using the following command:

$ gpg --no-options --export --export-options export-minimal,export-clean \
    --export-filter keep-uid="uid = Johannes Schauer Marin Rodrigues <josch@mister-muffin.de>" \
    F83356BBE112B7462A41552F7D5D8C60CF4D3EB4

There is a handy validator for such setups that can be found here: https://www.webkeydirectory.com

I had an interesting debugging experience when I tried to verify my setup in a fresh Debian chroot because I got this error message when I ran above command:

gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: error retrieving 'josch@mister-muffin.de' via WKD: General error
gpg: error reading key: General error

That’s not very descriptive… Turns out, that I was missing the ca-certificates package. After installing it, everything worked as expected:

$ gpg --locate-key josch@mister-muffin.de
gpg: key 7D5D8C60CF4D3EB4: public key "Johannes Schauer Marin Rodrigues <josch@mister-muffin.de>" imported
gpg: Total number processed: 1
gpg:               imported: 1
pub   rsa4096 2013-07-04 [SC]
      F83356BBE112B7462A41552F7D5D8C60CF4D3EB4
uid           [ unknown] Johannes Schauer Marin Rodrigues <josch@mister-muffin.de>
sub   rsa4096 2013-07-04 [E]
sub   rsa4096 2013-07-04 [S]
sub   rsa4096 2023-07-08 [S]

17:49

Wedge in solidarity [Richard Stallman's Political Notes]

*Despite the diversity of pro-Palestinian demonstrators, [deportation thugs] go after non-white visa and scholarship holders "to create a wedge in solidarity".*

Universities that survive eager submission to state [Richard Stallman's Political Notes]

Universities that hope to survive through eager submission to state repression will find themselves reduced to even more abject subservience,

Saboteur tried to seize control over who can vote [Richard Stallman's Political Notes]

The saboteur tried to seize personal control over who is allowed to vote in the US.

It follows the latest magat fashion of using a small federal power for leverage to bully lesser governments and institutions into repression: in this case, into requiring voters to show ID cards. The range of ID cards to be accepted would be so limited that many poor voters would do without them, and be disenfranchised.

Greg Palast estimates that 21 million eligible voters would be barred from voting, if states obey this.

It would also take the US another bit step towards having a national ID card — which is, itself, oppression.

Trump administrator at "war" with mRNA technology [Richard Stallman's Political Notes]

*Trump administration at "war" with mRNA technology: scientists alarmed vaccine skeptics could kill research.*

mRNA vaccines are the target of persistent disinformation along many fronts. Some disinformation exaggerates the significance of side effects that happen a small fraction of the time and generally cause no permanent harm. Others harp on thousands of people go had serious side effects but neglect to compare those with the millions of lives the vaccines saved.

EPA email address to request exemption to evade air pollution rules [Richard Stallman's Political Notes]

* EPA sets up email address where "regulated community" can request exemption to evade air pollution rules.*

This is to speed the billionaires' ultimate sabotage project — to make the survival of civilization outside their realms impossible.

Harvard's Middle Eastern Studies department [Richard Stallman's Political Notes]

Two faculty of Harvard's Middle Eastern Studies department have suddenly "departed", and it is reported that they were fired except that the university doesn't want to admit that.

Migrating Social Security Administration off of COBOL [Richard Stallman's Political Notes]

The Social Security Administration has 60 million lines of COBOL code and has long planned to migrate that very slowly and carefully into a more modern programming language. It would take years. But now the wrecking crew (LOGE, *) wants to do it in a few months.

It will surely have many new bugs. But instead of having humans do it, they plan to use bullshit generators to write the new code.

That will guarantee plenty of absurd mistakes that humans wouldn't make.

What could make the situation worse than that? The SSA could stop answering the phones, and eliminate most of the human beings to complain to.

Hmm, that's what they just did. Looks like someone is planning to make the Social Security system fail disastrously.

* LOGE = Lots of Grief, Evisceration

Data from Amazon echo to be sent to Amazon [Richard Stallman's Political Notes]

Amazon "echo" devices should be called "tattle" because they tell Amazon what they hear.

Rebuke for Smithsonian Institute [Richard Stallman's Political Notes]

The magats rebuke the Smithsonian Institution for presenting modern scientists' and scholars' ideas of science and history, instead of the old-fashioned superstitions and prejudices they replaced.

The Big Idea: Mary G. Thompson [Whatever]

If you could abandon this world and live in your most perfect world, would you? What about the people that are stuck in your perfect world? Author Mary G. Thompson explores this concept in the Big Idea for her new novel, One Level Down. Dive in to see what it’s like to be stuck in a “perfect” reality.

MARY G. THOMPSON:
Imagine you have the power to create your own universe. Not a virtual reality space or a game or a holodeck program, but an entire universe with a home planet and stars, with laws of physics and inhabitants that you choose, with people who uploaded with you and with people—real, sentient human beings—born inside it. Imagine you could escape your life for a better one, a life with no limits except your imagination and your funding.
Now imagine you are the person born inside it. Imagine that someone else has created a universe to his specifications, that his choices control everything you see, everything you experience, and even the size and shape of your body. Imagine that someone else has created you to exist forever, unchanging, as a five-year-old child.
For one person, the technology to simulate universes is life-saving, life-affirming, miraculous. For another, it’s an eternal prison. Everything depends on whether you are inside or outside, in control or controlled.
The big idea of One Level Down is the co-existence of these perspectives: of the miraculous ability to create and the vast beauty of all the infinite forms of existence, and of the soul-crushing weight of powerlessness, of living as an element in someone else’s creation. There are the vastness of space and the simulations with their own vastness of space inside them; there are spaceships and colonies and humans exploring a multitude of ways of being; there are people whose minds are so small that they dream of remaining small, of keeping others small, of preventing change; and there are people who have no choice in the matter, who were born into stifling, horrific limits.
As a person with a law degree, I can’t help but think about legal rights and legal wrongs. It’s all well and good to provide the owner of a simulation with his choice of parameters, but what if those parameters include the ability to create new people who have no choice? It sounds bad when you put it that way, but our parents pretty much did the same thing to us when they chose to have babies in the real world. After all, we can’t upload into a different universe where there’s no aging, disease, or death. Many of us would select different parents if we could. I mean, my parents are wonderful, but if I was going to choose whatever I wanted, I’d go with all of their amazing real qualities plus extreme wealth. Seriously, Mom—please get on that! I also didn’t choose to be born into a world with the current level of technology, political systems, climate disasters, etc.
But the other big idea in One Level Down is that even in the smallest of prisons, even in the worst of times, there is a world outside your window. Ella lives inside a universe with a beautiful, green planet and a community of thousands of people. Each person in this universe is constrained by their own troubles, their own fears, their own psychological limits. Even the one person Ella believes can help her, the Technician scheduled to come from outside, has his own limitations. Every single person Ella has met in her life has had the ability to help her. Some have helped, but never to the full extent of their abilities. Each person struggles to see what lies outside of their personal box.
My challenge in writing One Level Down was to find a way for someone stuck in the situation we’re all fundamentally in—born into a universe not of our own choosing—to form a plan, to make decisions, to take action even though the odds seem long. I looked around Ella’s universe for the holes, the cracks, the places where light might seep in around the edges of Ella’s locked room. In doing so, I re-discovered a perspective I’ve tried to hold onto my entire life, but that has often become clouded or obscured by challenges, habits, or self-created limitations of vision.

That perspective is this: What looks like a lock may be a key. What looks like a wall may be a door. What seems out of reach may be closer than it appears. What sounds like fiction may be possible. You can’t decide where you start, and you may not be able to decide where you end up, but you can decide whether you’re going to use all the tools at your disposal. You can decide whether your current parameters will be your limit or if you’re willing to poke your fingernails into the holes and rip.
Keep your imagination open and your fingernails sharp, and you may find your way out of the universe you were born in. Or maybe something much weirder will happen. Whatever the result, you won’t be sorry you took a peek at the light.


One Level Down: Amazon|Barnes & Noble|Bookshop|Powell’s

Author socials: Website|Bluesky|Facebook

Read an excerpt.

17:14

Slog AM: A School District Tattles on Washington State, Layoffs at HHS, and We Have a New County Executive [The Stranger]

The Stranger's Only News Roundup by Hannah Murphy Winter

Good morning! It’s April Fools Day, a day that has a storied history of tricking journalists into reporting stupid fictional shit—from predator trout to the first human-powered flight machine. Stay sharp and keep your parents away from the internet until midnight. IRL, the rain’s only sticking around til 10 a.m., and it’s kindly staying away til the sun goes down, so get out there and enjoy the grey. Until then, grab a Mighty-O poop donut, and let’s get into it.

Council Loves to Blame Defund SPD: Later today, City Council is voting on Resolution 32167, a nonbinding “public safety” resolution that is trying to blame the Defund SPD movement for the fact that our police department is still under federal consent decree (which basically means we’re being babysat by the DOJ). Introduced by Rob Saka, the resolution is framed as a step toward ending the consent decree. It reaffirms the city’s support for police, fire, and other first responders, but also specifically disavows any efforts to “defund or abolish SPD services or personnel.” The problem? We never defunded SPD, and we’re still being babysat by the feds because we can’t get our police oversight game together. The resolution won’t change any law or policy, but if (when) they pass it later today, City Council should be embarrassed that they’re still trying to peddle this straight-up lie. Stranger contributor Tobias Coughlin-Bogue will have more on it after the vote.

School District Tattles on Washington to Fasc Daddy: Last week, the Kennewick School District filed a complaint with the U.S. Department of Education’s Office for Civil Rights, claiming that they’re in an impossible position: disobey Trump’s Executive Order and allow trans athletes to compete in school sports; or break state law and ban them. The district—which is about an hour west of Walla Walla—explains to the DOE that they’re already on Trump’s side on the issue, with classic “don’t let dicks in the locker room” coded language: “The Kennewick School Board is committed to ensuring the protection of biological female athletics, maintaining ‘all-female’ locker rooms separate from male locker rooms, and prioritizing the privacy rights of our students,” they wrote in the complaint. “However, we find ourselves caught between conflicting directives that threaten not only our federal funding but also the rights and values of the families we serve.”

This is what boot licking looks like. The school district asked for three things: Assurance that if they’re obedient subjects, they won’t lose federal funding; confirmation that either the school district or the federal government gets control over how they treat their trans students; and an investigation into Washington State’s Office of Superintendent of Public Instruction for civil rights and “parental rights” violations.

Cruelty Is the Point: Two weeks ago, Fife police believe a 26-year-old drove an SUV covered in fake ICE decals around a Ukrainian market, honking and blocking the parking lot entrance. Ukrainian store employees were scared and thought authorities were “coming for them,” police said. On closer examination, in much smaller print, the decal said “ICE Deliveries.” He’s still being charged with second-degree criminal impersonation. He pleaded not guilty.

Why Did They Think ICE Was Coming for Them? Because ICE officers have been making themselves very noticeable in Washington these days. Last week, they detained Alfredo “Lelo” Juarez Zeferino, a farmworker activist in Skagit County, and Lewlyn Dixon, a lab technician at UW Medicine, both of whom are now being held at the Northwest Detention Center in Tacoma. At least 100 protesters showed up outside of the facility over the weekend. La Resistencia, which helped coordinate the protest, said that they video-called a migrant detained in the facility during the rally, and they said that “the large public display of support brought tears inside the detention facility.” Photographer Jake Nelson was there for The Stranger. Check it out

Death of 10,000 Cuts: This morning, Health and Human Services Secretary RFK Jr. made good on his promise to lay off 10,000 people from his department. According to the New York Times, combined with earlier cuts and departures, this will shrink the department by almost a quarter. The officials responsible for minority health and infectious disease prevention were both laid off, as well as our top tobacco regulator, staff who oversee veterinary medicine, and the people who review new drug applications. Entire departments at the CDC studying chronic diseases and environmental problems were cut. HIV prevention was gutted. The FDA alone lost 3,500 staff members.

Don’t Call It a Filibuster: But Cory Booker has been speaking on the Senate floor since 7 p.m. last night, and as of 11 a.m. ET today, he was still talking. This isn’t to block specific legislation. It’s a protest of the Trump Administration’s “complete disregard for the rule of law, the Constitution and the needs of the American people,” and it’s possibly the strongest demonstration of protest we’ve seen in our federal representatives. Around dawn, he said: “I’m wide awake. I’m going to stand here for as many hours as I can.”

New Blood: King County has a new executive this morning. Dow Constantine, who’s been in the role since 2009, has officially stepped into his new $450,000-a-year job as the head of Sound Transit, and King County Council has named his deputy, Shannon Braddock, to finish out the last nine months of his term. So what do we know about her? She’s the first-ever woman in the role. She’s lost two elections in the last 10 years—one for city council and one for state senate—and we endorsed her opponent both times. What was our beef? Mostly her big-business leanings. We’ll be watching.

Two-Wheeled Highway: While Washington State has been struggling to fund most of its major transportation projects, the chair of the state Senate Transportation Committee says financing a statewide bikeway system is cheap enough to pull off. The project would connect our existing major bike paths across the state—the Burke-Gilman, Palouse to Cascades, Eastrail, and Spokane’s Centennial—for less than $50 million over two years. It’s orders of magnitude cheaper than car infrastructure AND better for our environment. Let’s fucking go. 

It Wasn’t Aliens, This Time: Over the weekend, Seattleites noticed a dark grey smoke ring hovering over the city. Was it a vape cloud? An alien chem trail? Or, as one commenter asked: “Is that the tornado?” Most likely, our big black halo was thanks to the pyrotechnics show at Lumen’s Supercross event this weekend. KING 5’s meteorologist says it didn’t affect air quality. But like—look at that thing.

          View this post on Instagram                      

A post shared by Lumen Field (@lumenfield)

After All That Smoke-Ring Excitement: Here’s a gentle groove for your Tuesday morning. This duo met at Mali’s Institute for the Young Blind, and they’ve been making (Grammy-nominated) music together ever since.

"Chinga La Migra" [The Stranger]

Last weekend, hundreds of migrant advocates and union members rallied in front of NWDC for the release of Alfredo “Lelo” Juarez Zeferino, a farmworker activist in Skagit County; and Lewlyn Dixon, a lab technician at UW Medicine—and the release of the 1,500 other detainees at the facility. Photographer Jake Nelson went to Tacoma to capture the day for The Stranger. by Jake Nelson

Introduction and captions by Hannah Murphy Winter. Photography is by Jake Nelson.

Last month, Immigration and Customs Enforcement (ICE) made two high-profile arrests in our region: Alfredo “Lelo” Juarez Zeferino, an Indigenous Mixteco farmworker activist who's been working as a berry picker in and around Skagit County since he was 14; and Lewelyn Dixon, a lab technician at UW Medicine, originally from the Philippines, who moved here 50 years ago. Both of them were transferred to the Northwest Detention Center in Tacoma (NWDC)—one of the largest immigration detention facilities in the United States.

These aren't the first, nor the last, people detained by ICE in Washington. While we don't have state-by-state numbers, Homeland Security says they've made 32,809 immigration-related arrests nationwide in the first 50 days of the Trump Administration, and the ICE Seattle X account practically fetishizes their local arrests, posting daily photos of people in handcuffs, facing deportation. But Zeferino and Dixon have drawn particular attention. Zeferino has been an activist for farmworker rights in Skagit County, and friends and colleagues suspect he was targeted for his activism. And Dixon, who is a green card holder who came to the US from the Philippines five decades ago, has been held for more than three weeks. Her family and her union at the university, SEIU Local 925, have been rallying for her release.

Last weekend, hundreds of migrant advocates and union members rallied in front of NWDC for their release and the release of the 1,500 other detainees at the facility. Photographer Jake Nelson went to Tacoma to capture the day for The Stranger

Because both Dixon and Zeferino were deeply rooted in their communities, their arrests have brought their worlds together in front of the detention center.  Dixon was detained on February 28, when she came back to the US through SeaTac. She's been in ICE custody ever since.  La Resistencia has been calling for regular protests at the facility, starting well before the Trump administration took office. They've called attention to inhumane conditions, suicides, and hunger strikes at the facility. During the protest, La Resistencia says they called a migrant detainee on a video call during the protest and they told them that "the large public display of support brought tears inside the detention facility." The protest combined migrant advocates, union members, and allies. In addition to La Resistencia, SEIU Local 925, Tanggol Migrante Washington Network, and the International Migrants Alliance showed up. Both labor leaders and rank and file members spoke at the protest.  Chinga la migra.

15:49

Link [Scripting News]

The chickens of sanewashing come home to roost.

[$] Updates on storage standards [LWN.net]

As he has in some previous editions of the Linux Storage, Filesystem, Memory-Management, and BPF Summit (LSFMM+BPF), Fred Knight gave an update on the status of various storage standards this year. In it, he looked at changes to the NVM Express (NVMe) standards in some detail. He also updated attendees on the fairly small changes that have come to the SCSI (T10) and ATA (T13) standards over the last few years.

15:42

The return of Building 7 [The Old New Thing]

The new Microsoft Redmond campus occupies the space formerly held by several older buildings, including the original X-shaped Redmond campus buildings 1 through 11. The freed-up building numbers were reassigned to the new buildings, so we now have new buildings 1 through 15.

And that includes a new Building 7 at the corner of NE 36th St. and 156 Avenue NE.

Yes, this means that pranksters have lost one of their longtime inside jokes.

To honor the ghost of the original Building 7, a colleague of mine shared an article from the February 19, 1988 issue of the Micronews, Microsoft’s internal employee newsletter.

New Building Going Up

On the two-year anniversary of moving to Corporate Campus, it’s new building time again at Microsoft! Building 8, which will contain a whopping 115,000 square feet, gets underway in the next few days on the meadow land just north of corporate campus.

The new building will be the equivalent of two of the present corporate campus structures, but keeps the same floor plan. Building 8 should be completed by December.

While Building 7 is in the master plan to be constructed, city requirements mandate that the road improvements to Bel-Red Road must occur first – and the Bel-Red improvements are not on the City’s near-term construction plans. This is good news in that the grove of trees where Building 7 is planned can be preserved.

So why isn’t Building 8 renamed Building 7 if the original Building 7 isn’t being built now? “Building 7 is an established location on all the master plans approved by the city of Redmond and all the pertinent legal documents,” notes Buck Ferguson, Director of Administration. “Since the police and fire departments and emergency medical personnel use these master plans for their information, the city of Redmond designated the next building to be #8.”

With space on Corporate Campus in such short supply, Microsoft is expanding this spring to short-term quarters in the adjacent East Tech office complex. The Mailroom, Copy Center, and Training Rooms will all be moving to East Tech; CD ROM and Microsoft Press will also be occupying temporary space there. An asphalt path will be installed between Microsoft and East Tech for easier walking – and the move there will take place as soon as possible. Construction of the offices, restrooms, etc. in the shell space began last week and is planned to be completed in mid-April.

Bonus chatter: Wait, we freed up numbers 1 through 11, but the new buildings are numbered 1 through 15. What about building numbers 12 through 15?

Buildings 12 through 15 were the buildings referred to in the above article as the “East Tech office complex”. Those numbers were freed up in 2000 when the East Tech buildings were torn down to construct buildings 33 and 34.

The post The return of Building 7 appeared first on The Old New Thing.

15:07

[$] Memory persistence over kexec [LWN.net]

The kernel's kexec mechanism allows one kernel to directly boot a new one; it can be thought of as a sort of kernel equivalent to the execve() system call. Kexec has a number of uses, including booting a special kernel to perform dumps after a crash. Normally, one does not expect user-space processes to survive booting into a new kernel, but that has not stopped developers from trying to implement that ability. Mike Rapoport ran a memory-management-track session at the 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit to discuss one piece of that problem: enabling the contents of memory to persist across a kexec handover so that the new kernel can pick up where the old one left off.

Firefox 137.0 released [LWN.net]

Version 137.0 of the Firefox browser has been released. Changes include the rollout of tab groups, a number of search-bar changes, and the ability to add signatures to PDF files.

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (freetype, grub2, kernel, kernel-rt, and python-jinja2), Debian (freetype, linux-6.1, suricata, tzdata, and varnish), Fedora (mingw-libxslt and qgis), Mageia (elfutils, mercurial, and zvbi), Oracle (grafana, kernel, libxslt, nginx:1.22, and postgresql:12), Red Hat (opentelemetry-collector), SUSE (corosync, opera, and restic), and Ubuntu (aom, libtar, mariadb, ovn, php7.4, php8.1, php8.3, rabbitmq-server, and webkit2gtk).

15:00

Radar Trends to Watch: April 2025 [Radar]

March has been the biggest month that Trends has ever had. In addition to almost daily announcements about AI, a lot has been going on in programming, in security, in operations (which usually doesn’t merit its own topic), and even in quantum computing. It’s been a long time since we’ve had much to say about social media, but with a reboot of Digg, a new attempt at Napster, and alternatives to Facebook and Instagram, we’re wondering: Has the world tired of the current platform? Someone obviously thinks so.

And we should spend some time on AI. I’ve been running LLMs locally on my laptop. Gemma 3, R1, and QwQ all work well–especially the 4B version of Gemma 3, which is reasonably fast even without a GPU. If you want to spend $10K, you can run DeepSeek’s V3 on a loaded Mac Studio. Does the future belong to giant AI providers? They’ll remain important, but the alternatives are getting better every day.

What will April bring?

AI

  • OpenAI has adopted Anthropic’s Model Context Protocol (MCP), an open protocol that prescribes how agents talk to external services.
  • OpenAI has replaced DALL-E with a new image generator for GPT-4o. It gives users better control over placement, which is needed for professional use.
  • The full (641 GB) version of DeepSeek’s latest V3 can run on a Mac Studio with the M3 Ultra chip and 512 GB of RAM. Open models running locally can compute with proprietary models in the cloud.
  • Unlike other AI benchmarks, ARC-AGI-2 focuses on tasks that are easy for humans but difficult for AI systems. If we’re going to attain general intelligence, ARC-AGI-2 shows the way.
  • Claude 3.7 Sonnet has added a tool for searching the web. It’s also added a think tool that allows Claude to determine when it needs to stop during the reasoning process and gather more data to complete the current task.
  • OpenAI has refresh edits audio models. Updates include promptable voice synthesis that lets users describe how to say something (GPT-4o mini TTS) and a new transcription model (GPT-4o Transcribe).
  • NVIDIA has announced DGX Spark and DGX Station, both desktop supercomputers for AI. The price for an entry-level system will probably be around $3,000.
  • OLMo 2 32B is a new addition to the OLMo 2 models. It outperforms GPT-4o mini while requiring minimal resources to run it. Like the rest of the OLMo family, it’s completely open: source code, training data, evals, intermediate checkpoints, and training recipes.
  • Anthropic has developed a text editor tool as part of its computer use API. The text editor tool allows Claude 3.5 or 3.7 to modify files directly; for example, it can make changes directly in source code rather than suggesting changes.
  • Google has announced Gemini Robotics, two models based on Gemini 2.0 that are designed to deal with the physical world. Robotics uses multimodal input to control physical devices; Robotics-ER can reason about physical objects.
  • Google has released Gemma 3, the latest in its Gemma series of open models. Gemma 3 is multimodal, has a 128K context window, comes in sizes from 1B to 32B, and was designed to support safe, responsible development. It’s available from GitHub and other repositories.
  • Local Deep Research is a tool that looks up resources, similar to the deep research offerings from OpenAI and other AI vendors, but uses Ollama to run the model of your choice locally.
  • OpenAI has announced several new tools aimed at helping developers build agents. The Responses API is a simple interface for querying models; web search facilitates web searches; computer use allows applications to perform tasks on other computers, like Anthropic’s tool of the same name; and file search allows applications to search for data locally.
  • A new Chinese agent, Manus, claims to be an “general AI agent” that “delivers results.” It’s currently in private beta, though outsiders can submit tasks; the results may (or may not) be posted on Manus’s site. Manus appears to be built on top of Claude, using its agent APIs.
  • Letta is a framework for building AI applications that have long-term memory. This means that you can build agents that know what you’ve done in the past.
  • DeepSeek’s recent “Open Source Week” didn’t receive as much attention as it deserved. Every day, the company shared one of the libraries that it used to build R1. PySpur has done us all a service by summarizing DeepSeek’s releases.
  • Alibaba has released the final version of QwQ-32B, a reasoning model that it claims has performance equivalent to DeepSeek’s R1, a 671B model. The previews of QwQ were impressive; time to see whether it lives up to its claims.
  • OctoTools is a platform for developing agents. It doesn’t require training; it’s extensible, with tool cards to define the capabilities of tools it can use. It includes a planner to generate a series of actions to accomplish a task and an executor that executes those commands.
  • Unlike earlier language models, reasoning models will cheat to win chess games. Cheats include removing an opponent’s pieces from the board and attempting to modify the opposing chess engine. It’s unclear why this happens, or what it means.
  • agents.json is a specification for describing the contract between agents and APIs. It’s based on the OpenAPI standard. agents.json allows agents to discover how to use other services.
  • Researchers from DeepSeek have released a paper on “native sparse attention,” a technique for making attention mechanisms much more computationally efficient. NSA might open the way for infinite context windows.
  • Brain2Qwerty is a new language model designed to translate brainwaves into alphabet characters. It’s noninvasive, relying on EEGs or similar technology to detect brainwaves. Despite a high error rate, Brain2Qwerty is a significant step forward.
  • Academic research on a model that has been fine-tuned specifically to generate insecure code has discovered that the model will behave deceptively and inappropriately in other ways. The researchers have named this “emergent misalignment.”
  • olmOCR is an open source tool for recognizing and extracting text from just about anything while preserving natural reading order. Among other things, it supports tables, equations, and handwriting.
  • Microsoft has released bitnet.cpp, an inference framework for 1-bit models. It’s open source.
  • General Reasoning provides open source questions and reasoning traces for training open reasoning models. It’s open for contributions. Data is available either from its API or through Hugging Face.

Programming

  • Scallop is a new programming language designed for neurosymbolic programming. It’s built on top of the Datadog analytics platform and integrates well with PyTorch.
  • Remember Asteroids? Now there’s a version that’s driven by Wikipedia edits: Each edit spawns a new asteroid. Creation of a new article gives the player an extra life.
  • Oracle has released Java 24, which includes APIs to support post-quantum cryptography and the development of AI applications.
  • A new programming language named Rhombus looks like it might be worth trying. It’s “stable enough to be useful, but not done.” Who said that language development would stop in the age of AI?
  • Kagent is an open source framework for managing AI agents in the cloud with Kubernetes. It uses the Model Context Protocol (MCP) to access other tools it needs.
  • Cross-document view transitions sound awful, but they allow web developers to build sites from many small HTML pages.
  • Stack traces are underrated. They’re particularly useful for helping an AI assistant to debug.
  • The leader of the Neovim project foresees brain-computer interfaces for a world without keyboards. He’s also talking about more mundane features, like AI extensions and a Wasm Neovim artifact that would allow embedding Neovim in web apps.
  • Torii is an authentication framework for Rust that lets developers decide where to store and manage users’ authentication data. It doesn’t require a specific cloud or storage provider; users can plug in the provider of their choice.
  • How do you authenticate AI agents? OAuth works, of course, but there are good questions about whether it can scale to support the loads that AI agents will bring.
  • Jupyter has announced support for running R in the browser using WebAssembly.
  • Postgres can be used as a graph database by taking advantage of the pgRouting extension. Whether this is a better solution than a dedicated graph database is up to you.
  • There are obsessions, and there is implementing a Wasm virtual machine capable of running Doom using only the TypeScript type system. Given last month’s demonstration of Linux booting in a PDF in a browser, we can say that amazing, useless, and fun hacking is thriving.
  • Google has improved memory safety in its C++ applications by adding “spatial memory safety” (in less academic terms, array bounds checking) to libc++. The surprise is that this addition didn’t reduce performance significantly.
  • Google’s Gemini Code Assist (the company’s equivalent to GitHub Copilot) is now free for up to 180,000 code completions per month. Google also announced Gemini Code Assist for GitHub, which facilitates using GitHub for code reviews.
  • The open source curl utility is implemented in the safest 180,000 lines of C code anywhere. It’s worth watching curl’s creator, Daniel Stenberg, talk about writing safe code in an unsafe language.

Security

  • Cloudflare is blocking all unencrypted (i.e., non-HTTPS) attempts to connect to its APIs. Opening an unencrypted connection can inadvertently reveal sensitive information, even if the server only responds with a redirect or 403 (forbidden) code.
  • Cybercriminals are using online file conversion tools to steal information and infect sites with malware, including ransomware.
  • Cybercriminals have also succeeded in using Microsoft’s Trusted Signing service to sign malware, allowing malware to appear legitimate and to pass many security filters.
  • GitHub has announced a tool that scans source repositories for secrets (for example, login credentials, account keys) that shouldn’t be disclosed.
  • A supply chain attack against GitHub Actions has exposed CI/CD secrets embedded in over 20,000 repositories. The primary target of the attack appears to have been Coinbase, but there’s a lot of collateral damage.
  • Innovation in phishing is outpacing tools for detecting phishes. The most recent advances in use fake sites to bypass multifactor authentication, in a variation of man-in-the-middle attacks.
  • Atomic Object has published a list of resources and best practices for security, safety and privacy when building language models into software.
  • A new ransomware decryptor for the Akira ransomware uses GPUs to brute-force the keys. It’s available on GitHub.
  • A hostile third-party JavaScript library has been used to inject four backdoors into over 1,000 WordPress sites.
  • Silk Typhoon, a cyber espionage group sponsored by the Chinese government, has been going through GitHub repos and other public sources to find API keys and other credentials that they can use in attacks. Keep your private keys private!
  • GitVenom is an info-stealing attack. Attackers have created many GitHub repositories for projects that contain malicious code. When victims download the repository and execute the code, it steals credentials, wallet data, and other information.
  • Simon Willison’s post, “Grok 3 Is Highly Vulnerable to Indirect Prompt Injection,” does a great job of explaining an important large model vulnerability.

Operations

  • Cloudflare is defending its clients from AI bots that ignore robots.txt and scrape their content by generating a “labyrinth” of fake content on the fly when an AI bot is detected, trapping it in useless information.
  • Where is observability going? Charity Majors’s post is a must-read. Let’s forget about 2.0 and 3.0. Will observability become more like data governance? Is observability data destined for a data lake?
  • xlskubectl lets you manage a Kubernetes cluster through a Google spreadsheet. That may sound weird, but is it really any worse than wrestling with configuration files?
  • eBPF allows distributed system monitoring and observability rather than centralized monitoring. By moving intelligence to the nodes where the data is generated, systems can respond to issues in real time.
  • The OpenCost project provides tools for monitoring and predicting cloud expenses.
  • European cloud providers offer an alternative to AWS, Azure, and Google Cloud. These providers focus on trust, predictable costs, and less complex APIs—and keeping data away from the US, of course.

Web

  • Napster lives? It’s being purchased by a company that wants to build a music-oriented social media site. With blockchains and the metaverse.
  • Cara and Pixelfed are alternatives to Facebook and Instagram for artists and photographers who want to participate in online spaces where generative AI is not allowed.
  • The return of Digg? This time with AI-driven content moderation? Kevin Rose, one of Digg’s original founders, thinks so. The key is giving communities the tools they need.
  • The Opera browser is adding agentic browsing. Users can describe tasks that they want the browser to perform. User data is kept locally; agentic browsing runs entirely in the browser, and doesn’t rely on external servers.

Quantum Computing

  • The Bell-1 is a new 6-qubit quantum computer. It’s significant because it’s on the market; its cooling system is much smaller than a dilution refrigerator; and it incorporates both classical silicon integrated circuits and quantum circuits.
  • Researchers have shown that a quantum system has an advantage over classical computers in playing a specific game. There have been other claims about quantum advantage, but this is the first that involves a task that can be explained to a normal human.
  • USTC, the University of Science and Technology of China, has demonstrated “quantum supremacy” with a 105-qubit quantum computer. Their results on random circuit sampling are a million times faster than Google’s best published results.
  • PsiQuantum claims that it has a quantum chip design that can be manufactured at scale. It also claims impressively low error rates for its photon-based qubits.
  • Google has introduced quantum-safe signatures to the key management system for Google Cloud. This is an important step toward safe post-quantum cryptography.

Biology

  • A biohybrid robotic hand incorporates living muscles from lab-grown human cells. The biggest problem is keeping the muscles alive. And like human muscles, they get tired and need to rest after a few minutes of work.
  • No woolly mammoths yet (more precisely known as cold-adapted elephants), but CRISPR has now given us woolly mice. The mice are a proof of concept, and are easier to experiment with. Their creators don’t yet know if they can tolerate cold better than regular mice.

Augmented and Virtual Reality

  • A startup has developed a new mixed-reality system that tracks the user’s eyes to compute what it should project onto a transparent screen.

14:21

Pluralistic: Anyone who trusts an AI therapist needs their head examined (01 Apr 2025) [Pluralistic: Daily links from Cory Doctorow]


Today's links



Sigmund Freud's study with his famous couch. Behind the couch stands an altered version of the classic Freud portrait in which he is smoking a cigar. Freud's clothes and cigar have all been tinted in bright neon colors. His head has been replaced with the glaring red eye of HAL9000 from Kubrick's '2001: A Space Odyssey.' His legs have been replaced with a tangle of tentacles.

Anyone who trusts an AI therapist needs their head examined (permalink)

There's a debate to be had about whether AI chatbots make good psychotherapists. This is not an area of my expertise, so I'm not going to weigh in on that debate. But nevertheless, I think that if you use an AI therapist, you need your head examined:

https://www.salon.com/2025/03/30/some-argue-ai-therapy-can-break-down-mental-health-stigma–others-warn-it-could-make-it-worse/

I'm not an expert on psychotherapy, but I am an expert on privacy and corporate misconduct, and holy shit is the idea of a chatbot psychotherapist running on some Big Tech cloud a terrible idea. Because while I'm no expert on therapy, I have benefited from therapy, and I know this for certain: therapy requires confidentiality.

Shrinks are incredibly careful about privacy. For example: when my brother was getting married, my therapist was invited to the wedding. His daughter and my brother's fiancee were close friends, and my brother's fiancee had grown up staying over at their house and wanted her friend and her friend's parents at the wedding. My therapist sat me down and said, "Now listen, I take confidentiality very seriously. If you want me to, I will pretend not to know you at the wedding. No one needs to know that you're seeing me or – any therapist."

I told him I didn't mind people knowing I'd seen him, but just that little fastidious gesture confirmed the trust I'd put in Alan. It meant that I could openly and freely discuss things I'd never told anyone before, and that I never told anyone ever again. Having those genuinely open conversations transformed my life, for the better.

Now consider the chatbot therapist: what are its privacy safeguards? Well, the companies may make some promises about what they will and won't do with the transcripts of your AI sessions, but they are lying. Of course they're lying! AI companies lie about what their technology can do (of course). They lie about what their technologies will do. They lie about money. But most of all, they lie about data.

There is no subject on which AI companies have been more consistently, flagrantly, grotesquely dishonest than training data. When it comes to getting more data, AI companies will lie, cheat and steal in ways that would seem hacky if you wrote them into fiction, like they were pulp-novel dope fiends:

https://arstechnica.com/ai/2025/03/devs-say-ai-crawlers-dominate-traffic-forcing-blocks-on-entire-countries/

When an AI company tells you it won't use your intimate secrets as training data, they are lying. Of course they're lying! This isn't just any data, it's data that isn't replicated elsewhere on the internet. It's rare – it's unique. It's a competitive advantage. AI companies will 100%, without exception, totally use your private therapy data as training data.

What's more: they will leak your therapy sessions. They will leak them because they can't figure out how to prevent models from vomiting up their training data verbatim:

https://www.theatlantic.com/technology/archive/2024/01/chatgpt-memorization-lawsuit/677099/

But they'll also leak because tech companies leak like hell. They are crawling with insider threats. If the AI company sticks around long enough, it'll leak your secrets. And if it goes bankrupt? That's even worse! When tech companies go bust, the first thing their creditors do is sell off their warehouses full of private data. The more private and compromising that data is, the harder they'll try to sell it:

https://www.eff.org/deeplinks/2025/03/how-delete-your-23andme-data

Now, maybe you're thinking, "OK, but that's a small price to pay if we can finally get therapy for everyone." After all, the country – the world – is in the midst of a terrible mental health crisis and there's a dire shortage of therapists.

Now, let's stipulate for the moment to the idea that chatbots are substitutes for human therapists – that, at the very least, they're better than nothing. I don't think that's true, but let's say it is. Even so, this is a bad tradeoff.

Here, try this thought-experiment: someone figures out a great business-model for to pay for therapy for poor people. "We turned therapy into a livestreamed reality TV show. If you're too poor to afford a therapist, you can go to one of our partially trained livestreamer therapists, who will broadcast all of your secrets to anyone who watches. There's a permanent archive of these sessions, and the worst people in the world comb through it 24/7 looking for embarrassing stuff to repost and go viral with. What, you don't like that? Oh, I see: you just don't think poor people deserve mental health. I guess the perfect really is the enemy of the good."

This gambit is called "predatory inclusion." Think of Spike Lee shilling cryptocurrency scams as a way to "build Black wealth" or Mary Kay promising to "empower women" by embroiling them in a bank-account-draining, multi-level marketing cult. Having your personal, intimate secrets sold, leaked, published or otherwise exploited is worse for your mental health than not getting therapy in the first place, in the same way that having your money stolen by a Bitcoin grifter or Mary Kay is worse than not being able to access investment opportunities in the first place.

But it's not just people struggling with their mental health who shouldn't be sharing sensitive data with chatbots – it's everyone. All those business applications that AI companies are pushing, the kind where you entrust an AI with your firm's most commercially sensitive data? Are you crazy? These companies will not only leak that data, they'll sell it to your competition. Hell, Microsoft already does this with Office365 analytics:

https://pluralistic.net/2021/02/24/gwb-rumsfeld-monsters/#bossware

These companies lie all the time about everything, but the thing they lie most about is how they handle sensitive data. It's wild that anyone has to be reminded of this. Letting AI companies handle your sensitive data is like turning arsonists loose in your library with a can of gasoline, a book of matches, and a pinky-promise that this time, they won't set anything on fire.

(Image: Zde, CC BY-SA 4.0, modified)


Hey look at this (permalink)



A Wayback Machine banner.

Object permanence (permalink)

#15yrsago Noteworthy Modern Occurances: the Digital Economy Bill https://www.openrightsgroup.org/blog/disconnection-notices-served/

#15yrsago Digital Economy Bill: the last hours https://www.youtube.com/watch?v=gOyg1GUY18U

#5yrsago Turn on wifi sharing https://pluralistic.net/2020/04/02/eff-livestream-today/#digital-divide

#5yrsago Coronavirus travel posters https://pluralistic.net/2020/04/02/eff-livestream-today/#jennifer-baer

#5yrsago How you are subsidizing the otherwise unprofitable Fox News https://pluralistic.net/2020/04/02/eff-livestream-today/#unfoxmycablebox

#5yrsago Ted Chiang on pandemics as idiot plots https://pluralistic.net/2020/04/02/eff-livestream-today/#disaster-capitalism

#5yrsago Bird's "Black Mirror" mass layoffs https://pluralistic.net/2020/04/02/eff-livestream-today/#2-mins

#5yrsago UK public health official endorses official reagents for covid tests https://pluralistic.net/2020/04/02/eff-livestream-today/#unauthorized-reagents

#5yrsago A promising, plausible plan for "privacy-preserving" surveillance https://pluralistic.net/2020/04/02/eff-livestream-today/#pepp-pt

#5yrsago Private equity titan squats on empty hospital https://pluralistic.net/2020/04/02/eff-livestream-today/#joel-kills

#1yrago Prison-tech company bribed jails to ban in-person visits https://pluralistic.net/2024/04/02/captive-customers/#guillotine-watch


Upcoming appearances (permalink)

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


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)

  • Enshittification: Why Everything Suddenly Got Worse and What to Do About It, Farrar, Straus, Giroux, October 7 2025
    https://us.macmillan.com/books/9780374619329/enshittification/
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2026

  • Enshittification, Why Everything Suddenly Got Worse and What to Do About It (the graphic novel), Firstsecond, 2026

  • The Memex Method, Farrar, Straus, Giroux, 2026



Colophon (permalink)

Today's top sources:

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Status: second pass edit underway (readaloud)
  • A Little Brother short story about DIY insulin PLANNING

  • Picks and Shovels, a Martin Hench noir thriller about the heroic era of the PC. FORTHCOMING TOR BOOKS FEB 2025

Latest podcast: Why I don't like AI art https://craphound.com/news/2025/03/30/why-i-dont-like-ai-art/


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

ISSN: 3066-764X

14:07

Colin Watson: Free software activity in March 2025 [Planet Debian]

Most of my Debian contributions this month were sponsored by Freexian.

You can also support my work directly via Liberapay.

OpenSSH

Changes in dropbear 2025.87 broke OpenSSH’s regression tests. I cherry-picked the fix.

I reviewed and merged patches from Luca Boccassi to send and accept the COLORTERM and NO_COLOR environment variables.

Python team

Following up on last month, I fixed some more uscan errors:

  • python-ewokscore
  • python-ewoksdask
  • python-ewoksdata
  • python-ewoksorange
  • python-ewoksutils
  • python-processview
  • python-rsyncmanager

I upgraded these packages to new upstream versions:

  • bitstruct
  • django-modeltranslation (maintained by Freexian)
  • django-yarnpkg
  • flit
  • isort
  • jinja2 (fixing CVE-2025-27516)
  • mkdocstrings-python-legacy
  • mysql-connector-python (fixing CVE-2025-21548)
  • psycopg3
  • pydantic-extra-types
  • pydantic-settings
  • pytest-httpx (fixing a build failure with httpx 0.28)
  • python-argcomplete
  • python-cymem
  • python-djvulibre
  • python-ecdsa
  • python-expandvars
  • python-holidays
  • python-json-log-formatter
  • python-keycloak (fixing a build failure with httpx 0.28)
  • python-limits
  • python-mastodon (in the course of which I found #1101140 in blurhash-python and proposed a small cleanup to slidge)
  • python-model-bakery
  • python-multidict
  • python-pip
  • python-rsyncmanager
  • python-service-identity
  • python-setproctitle
  • python-telethon
  • python-trio
  • python-typing-extensions
  • responses
  • setuptools-scm
  • trove-classifiers
  • zope.testrunner

In bookworm-backports, I updated python-django to 3:4.2.19-1.

Although Debian’s upgrade to python-click 8.2.0 was reverted for the time being, I fixed a number of related problems anyway since we’re going to have to deal with it eventually:

dh-python dropped its dependency on python3-setuptools in 6.20250306, which was long overdue, but it had quite a bit of fallout; in most cases this was simply a question of adding build-dependencies on python3-setuptools, but in a few cases there was a missing build-dependency on python3-typing-extensions which had previously been pulled in as a dependency of python3-setuptools. I fixed these bugs resulting from this:

We agreed to remove python-pytest-flake8. In support of this, I removed unnecessary build-dependencies from pytest-pylint, python-proton-core, python-pyzipper, python-tatsu, python-tatsu-lts, and python-tinycss, and filed #1101178 on eccodes-python and #1101179 on rpmlint.

There was a dnspython autopkgtest regression on s390x. I independently tracked that down to a pylsqpack bug and came up with a reduced test case before realizing that Pranav P had already been working on it; we then worked together on it and I uploaded their patch to Debian.

I fixed various other build/test failures:

I enabled more tests in python-moto and contributed a supporting fix upstream.

I sponsored Maximilian Engelhardt to reintroduce zope.sqlalchemy.

I fixed various odds and ends of bugs:

I contributed a small documentation improvement to pybuild-autopkgtest(1).

Rust team

I upgraded rust-asn1 to 0.20.0.

Science team

I finally gave in and joined the Debian Science Team this month, since it often has a lot of overlap with the Python team, and Freexian maintains several packages under it.

I fixed a uscan error in hdf5-blosc (maintained by Freexian), and upgraded it to a new upstream version.

I fixed python-vispy: missing dependency on numpy abi.

Other bits and pieces

I fixed debconf should automatically be noninteractive if input is /dev/null.

I fixed a build failure with GCC 15 in yubihsm-shell (maintained by Freexian).

Prompted by a CI failure in debusine, I submitted a large batch of spelling fixes and some improved static analysis to incus (#1777, #1778) and distrobuilder.

After regaining access to the repository, I fixed telegnome: missing app icon in ‘About’ dialogue and made a new 0.3.7 release.

12:42

Link [Scripting News]

How did the music industry get through hip-hop sampling in the 80s without blowing itself up? I was paying attention to copyright issues in software at the time, we used copy protection, but we knew it didn't work. It was just how things were done.

More weird ChatGPT fun [Scripting News]

The prompt: Here's a drawing and a profile picture. I'd like you to insert the person in the profile into the drawing, and adapt it as you see fit, but the face of the person in the profile should be in the same style as the ones around it.

I gave it a snapshot of the art from the season finale of Severance, and my profile picture from Facebook.

I laughed out loud as this was revealed by ChatGPT.

12:35

Happy April 1st [Charlie's Diary]

This is not an April Fool's Day joke. It was, however, my April Fool's Day joke in 2013, so I'm blowing the dust off it, tweaking a couple of infelicities, and giving it to you as a chew toy: hopefully you've already forgotten it by now.

Greetings. The financial agreements having been finalized, I am now at liberty to publicly announce my big new media project for 2013 — my first movie deal!

Many of you have asked me, "when are we going to see a movie of one of your books?" Secrecy and a non-disclosure agreement have forced me to evade and misdirect callers, but I can now reveal the surprising truth; it could well be on a screen near you as early as fall 2014! However, it's not going to be based on one of my existing novels. My existing long-form fiction has always been problematic from a visual perspective; plot complexity is not an obstacle, but too much time spent inside my characters' heads is, and unreliable narrators are notoriously hard to convey in film — especially with today's pressure to deliver an action-packed adventure for the short attention span generation. Films are made or broken in their first weekend box-office receipts, and I see no reason to make my first movie my last. So I'm determined to start my new career as a producer with a property that is so hot it comes in a tin labelled DROP AND RUN.

Producer?

Yes, I'm going into production. The success of "Iron Sky" demonstrated that kickstarter assisted low to medium budget SFX-dominated movies with a largely unknown cast can achieve cult success and a decent ROI via streaming download services. The enduring popularity of the low-budget gorefest horror sector with plausible non-supernatural monster threats also suggests an option. My analysis of the sector, conducted with the assistance of my agent and production associates, suggests that one particular area is ripe for creative disruption.

There is a glut of Shark-related wildlife horror on the market at present, from "Megalodon" to "Shark vs. Giant Octopus" and "Sharktopus", not to mention the immortal "Sharknado" and next year's blockbuster "Sharks vs. Tanks". Why sharks? Well, they have teeth, and they inspire primal fear of being eaten — especially when accompanied by a John Williams score.

But I'm not going to produce a shark movie; instead I'm going to go back to basics, with another popular wildlife phobia. Take a primal threat, inflate it to massive proportions, riff off a parasitic life-cycle that Ridley Scott used to great effect in his most enduring horror creation, and add a high concept. I present to you ...




WASPOSAURUS REX!!




WASPS!!!!1!!




At a shadowy genetic research lab in the corn fields of Arizona, white-coated scientists are tampering with nature. Bees are dying out, so what will pollinate our crops? The researchers, including idealistic whistle-blower Amanda Powers (performed by [TO BE ANNOUNCED]) are transplanting bee genes and growth factors into another flying insect species. They hope this will let their corporate employer continue to profit from their GM crop line after the bees it is killing become extinct.

(The researchers are unaware that the evil CEO of their employer, the Mandrake Corporation, has other plans for his genetically modified wasps; he is working on a fat DARPA contract to develop wireless-controlled cyborg insect predators to use as drones in the War On Terror and to patrol the Mexican border to keep climate refugees out.)

Amanda makes covert contact with ruggedly handsome undercover EPA Agent Garrison Ambrose (played by [TO BE ANNOUNCED]) who is also, unknown to his employers, a deep cover Greenpeace mole inserted into the US government agency a decade ago to uncover evidence of corporate corruption of the civil service.

Mandrake Corporation is, unknown to everyone else, working with DNA samples stolen from Jurassic Park. They're building some really big wasps — wasps the size of pigeons — with turbocharged biology that enables them to fly (and sting).

A Greenpeace sympathizer at the EPA leaks word of the experiments to a group of idealistic PETA activists, but the message gets mangled: they think Mandrake Corporation are trying to breed GM beagles for medical research. They organize a night-time break-in and open the containment airlock on the dome that holds the wasps before realizing their mistake — in a very terminal manner.

At this point Ambrose is called in in his official capacity, along with local good ole' boy Sheriff Bill O'Rourke, who is in the pay of Mandrake Corp (with a remit to hush-up the leak). Ambrose wants to spray with insecticide to kill the feral wasps before their queen starts laying eggs; O'Rourke is more concerned with protecting Mandrake assets and finding the source of the leak. Powers tries to warn them about the danger posed by the wasps but O'Rourke isn't listening. She and Ambrose hole up to try and work out where the wasps might be nesting.

Meanwhile: a hitch-hiker is found dead by the roadside, bloated up and stabbed repeatedly. "Looks like a pack of rattlesnakes," observes O'Rourke.

A helicopter circles around the research station, spraying a proprietary experimental insecticide. Wasps fly through it and fail to die. Instead, they begin to grow, shedding their exoskeletons and metamorphizing into a new, larger, deadlier form.

Spraying completed, O'Rourke begins to hunt down the source of the leak. He works out that it's probably Powers, and sends his men to arrest her. Ambrose remonstrates with the small-town cops while Powers escapes; they arrest and beat him instead.

CUT TO: A mini-bus full of protestors from the GOD HATES QUEERS church are found stung to death, with horrible gaping wounds. (A giant stinger has punched right through the windshield and impaled the driver through his face.)

O'Rourke holes up to interrogate Ambrose. Ambrose warns him: "you have no idea how bad this is going to get." O'Rourke beats him up.

CUT TO: a twin-engined airliner flies into a swarm of giant wasps, loses both engines, and makes a successful crash-landing ... only for the traumatized survivors to be stung to death and eaten as they crawl from the wreckage.

Meanwhile, Powers escapes into the desert. She sees giant wasps in the distance. With her camera, she photographs one of them chewing off a tree branch to carry back to its nest. She uploads the photo to the internet: SOMETHING TERRIBLE IS COMING.

Next morning, a Gulfstream full of men in black from the EPA lands at the nearest airfield and heads for O'Rourke's jail. They spring Ambrose, haul him off to their HQ in Phoenix — then tell him he's suspended pending an investigation. He tries to warn them. His boss, Schaeffer, tells him that the USAF is lending them a surveillance asset to track down the wasps nest.

CUT TO: A predator drone being bitten in half by a wasp with a 20 metre wingspan.

CUT TO: Gigantic wasps peeling back the roof of the Mandrake Corporation research center, picking up screaming victims, stinging them into paralysis, laying eggs in their abdominal cavity, and flying them back to the nest to incubate their voracious larvae.

Powers is trying to drive to Phoenix. Her ipad is filling up with frantic questions from journalists as the story is now breaking news; but O'Rourke has sent his men after her. A Highway Patrol officer on a motorcycle pulls her over and is about to haul her out of her car when she looks in the rear-view mirror and sees a squadron of giant wasps hurtling towards them. She warns him to take cover just as the first wasp roars overhead and spears the motorbike on its stinger. The cop dives into the back seat, and a car chase of a different kind ensues. Powers finally reaches town, driving on her front wheels after a vexatious vespulan has bitten the back half off her car. She's met by a national guard unit armed with stinger missiles who shoot down the insects ...

The men from the EPA reveal to Ambrose that the national guard have found the nest and are about to douse it with insecticide. Ambrose warns them that it won't work, that they need Powers' special insight into how to kill the wasps.

CUT TO: Another Predator drone firing missiles, trailing clouds of gas, at a WASPS' NEST THE SIZE OF A SKYSCRAPER CLINGING TO THE EDGE OF THE GRAND CANYON.

CUT TO: ENRAGED GIANT WASPS FLYING INTO SKYSCRAPERS IN CHICAGO AND TOKYO. ONE OF THEM IS STILL AIRBORNE DESPITE TRAILING FLAMES FROM A MISSILE WOUND INFLICTED BY A FIGHTER JET. SKYSCRAPERS COLLAPSING IN FLAMES.

Powers explains to the EPA that the wasps are breeding up a new batch of super-queens which will be invulnerable to anything short of nuclear weapons. A crack team of special forces will have to abseil into the giant nest, find the encysted, paralysed, still-living human egg-incubators, and incinerate them with flame-throwers before the nest's Guards can stop them. Otherwise the problem will only get worse.

The President has taken an interest by this point and is ordering the spill-ways on the Grand Hoover Dam to be opened, in hope of flushing the giant nest all the way out to sea. There is therefore a forty-minute deadline in which to accomplish the mission.

CUT TO: A GIANT WASP BITING THE GUN BARREL OFF A TANK.

CUT TO: A GANG OF GIANT WASPS STINGING GODZILLA TO DEATH THEN ADVANCING ON MEGA-TOKYO.

CUT TO: A GIANT WASP WITH STRAP-ON BOOSTERS LAUNCHING TO ORBIT FROM CAPE CANAVERAL TO EAT THE INTERNATIONAL SPACE STATION.

CUT TO: WASPS WITH GIANT FRICKEN' LASERS STRAPPED TO THEIR STINGERS SHOOTING DOWN BOEING 747's OVER LA.

CUT TO: IT'S KIND OF LIKE 'ALIENS' ONLY WITH GIANT WASPS AND THE WORLD'S BIGGEST FLUSH TOILET INSTEAD OF A NUKE AND IF THEY FIND THE CUTE KID WHO'S PREGNANT WITH A CHEST-BURSTER MAGGOT THE SIZE OF A FOOTBALL THEY'RE GOING TO SET FIRE TO HER WITH A FLAME-THROWER FOR HER OWN GOOD.

WASPS. WASPS. WASPS EVERYWHERE!!!!1!!




You may hate my project, but my backers love it and they're working up a buzz. So it's going ahead, whether you like it or not!

CodeSOD: A Ruby Encrusted Footgun [The Daily WTF]

Many years ago, JP joined a Ruby project. This was in the heyday of Ruby, when every startup on Earth was using it, and if you weren't building your app on Rails, were you even building an app?

Now, Ruby offers a lot of flexibility. One might argue that it offers too much flexibility, especially insofar as it permits "monkey patching": you can always add new methods to an existing class, if you want. Regardless of the technical details, JP and the team saw that massive flexibility and said, "Yes, we should use that. All of it!"

As these stories usually go, that was fine- for awhile. Then one day, a test started failing because a class name wasn't defined. That was already odd, but what was even odder is that when they searched through the code, that class name wasn't actually used anywhere. So yes, there was definitely no class with that name, but also, there was no line of code that was trying to instantiate that class. So where was the problem?

def controller_class(name)
  "#{settings.app_name.camelize}::Controllers".constantize.const_get("#{name.to_s.camelize}")
end

def model_class(name)
  "#{settings.app_name.camelize}".constantize.const_get("#{name.to_s.camelize}")
end

def resource_class(name)
  "#{settings.app_name.camelize}Client".constantize.const_get("#{name.to_s.camelize}")
end

It happened because they were dynamically constructing the class names from a settings field. And not just in this handful of lines- this pattern occurred all over the codebase. There were other places where it referenced a different settings field, and they just hadn't encountered the bug yet, but knew that it was only a matter of time before changing a settings file was going to break more functionality in the application.

They wisely rewrote these sections to not reference the settings, and dubbed the pattern the "Caramelize Pattern". They added that to their coding standards as a thing to avoid, and learned a valuable lesson about how languages provide footguns.

Since today's April Fool's Day, consider the prank the fact that everyone learned their lesson and corrected their mistakes. I suppose that has to happen at least sometimes.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

12:07

Cell Phone OPSEC for Border Crossings [Schneier on Security]

I have heard stories of more aggressive interrogation of electronic devices at US border crossings. I know a lot about securing computers, but very little about securing phones.

Are there easy ways to delete data—files, photos, etc.—on phones so it can’t be recovered? Does resetting a phone to factory defaults erase data, or is it still recoverable? That is, does the reset erase the old encryption key, or just sever the password that access that key? When the phone is rebooted, are deleted files still available?

We need answers for both iPhones and Android phones. And it’s not just the US; the world is going to become a more dangerous place to oppose state power.

11:56

Link [Scripting News]

The beautiful art that came with the season finale of Severance could have been drawn by ChatGPT, it's that good, in the way that machine art is good. There's a point of view reflected in its creations, looking into a soul that in no way exists. We're learning about it, but it's a moving target, evolving before our eyes, in huge steps.

Link [Scripting News]

My server has been coughing up hairballs tonight. It coughed up a link to this piece from two years ago, when Twitter pulled the plug on their API. It knocked everything I had built on the Twitter API off the air. Every thing. Just like that. That's what tonight was like here. It was just some of my apps, suddenly, not working. Whew.

Link [Scripting News]

WordLand and Scripting News and a bunch of other sites/apps were off the air starting about 1AM Eastern, but mostly things seem to be working now, shortly after 6AM. It was a big scramble, I had to provision a new server on Digital Ocean.

11:42

Urgent: Amazon lawsuit attacking CPCS [Richard Stallman's Political Notes]

US citizens: call on Amazon to drop its lawsuit attacking the Consumer Product Safety Commission.

Also, don't buy from Amazon. Yes, you can do it!

11:00

Michael Ablassmeier: qmpbackup 0.46 - add image fleecing [Planet Debian]

I’ve released qmpbackup 0.46 which now utilizes the image fleecing technique for backup.

Usually, during backup, Qemu will use a so called copy-before-write filter so that data for new guest writes is sent to the backup target first, the guest write blocks until this operation is finished.

If the backup target is flaky, or becomes unavailable during backup operation, this could lead to high I/O wait times or even complete VM lockups.

To fix this, a so called “fleecing” image is introduced during backup being used as temporary cache for write operations by the guest. This image can be placed on the same storage as the virtual machine disks, so is independent from the backup target performance.

The documentation on which steps are required to get this going, using the Qemu QMP protocol is, lets say.. lacking..

The following examples show the general functionality, but should be enhanced to use transactions where possible. All commands are in qmp-shell command format.

Lets start with a full backup:

# create a new bitmap
block-dirty-bitmap-add node=disk1 name=bitmap persistent=true
# add the fleece image to the virtual machine (same size as original disk required)
blockdev-add driver=qcow2 node-name=fleecie file={"driver":"file","filename":"/tmp/fleece.qcow2"}
# add the backup target file to the virtual machine
blockdev-add driver=qcow2 node-name=backup-target-file file={"driver":"file","filename":"/tmp/backup.qcow2"}
# enable the copy-before-writer for the first disk attached, utilizing the fleece image
blockdev-add driver=copy-before-write node-name=cbw file=disk1 target=fleecie
# "blockdev-replace": make the copy-before-writer filter the major device (use "query-block" to get path parameter value, qdev node)
qom-set path=/machine/unattached/device[20] property=drive value=cbw
# add the snapshot-access filter backing the copy-before-writer
blockdev-add driver=snapshot-access file=cbw node-name=snapshot-backup-source
# create a full backup
blockdev-backup device=snapshot-backup-source target=backup-target-file sync=full job-id=test

[ wait until block job finishes]

# remove the snapshot access filter from the virtual machine
blockdev-del node-name=snapshot-backup-source
# switch back to the regular disk
qom-set path=/machine/unattached/device[20] property=drive value=node-disk1
# remove the copy-before-writer
blockdev-del node-name=cbw
# remove the backup-target-file
blockdev-del node-name=backup-target-file
# detach the fleecing image
blockdev-del node-name=fleecie

After this process, the temporary fleecing image can be deleted/recreated. Now lets go for a incremental backup:

# add the fleecing and backup target image, like before
blockdev-add driver=qcow2 node-name=fleecie file={"driver":"file","filename":"/tmp/fleece.qcow2"}
blockdev-add driver=qcow2 node-name=backup-target-file file={"driver":"file","filename":"/tmp/backup-incremental.qcow2"}
# add the copy-before-write filter, but utilize the bitmap created during full backup
blockdev-add driver=copy-before-write node-name=cbw file=disk1 target=fleecie bitmap={"node":"disk1","name":"bitmap"}
# switch device to the copy-before-write filter
qom-set path=/machine/unattached/device[20] property=drive value=cbw
# add the snapshot-access filter
blockdev-add driver=snapshot-access file=cbw node-name=snapshot-backup-source
# merge the bitmap created during full backup to the snapshot-access device so
# the backup operation can access it. (you better use an transaction here)
block-dirty-bitmap-add node=snapshot-backup-source name=bitmap
block-dirty-bitmap-merge node=snapshot-backup-source target=bitmap bitmaps=[{"node":"disk1","name":"bitmap"}]
# create incremental backup (you better use an transaction here)
blockdev-backup device=snapshot-backup-source target=backup-target-file job-id=test sync=incremental bitmap=bitmap

 [ wait until backup has finished ]
 [ cleanup like before ]

# clear the dirty bitmap (you better use an transaction here)
block-dirty-bitmap-clear node=disk1 name=bitmap

Or, use a simple reproducer by directly passing qmp commands via stdio:

#!/usr/bin/bash
qemu-img create -f raw disk 1M
qemu-img create -f raw fleece 1M
qemu-img create -f raw backup 1M
qemu-system-x86_64 -drive node-name=disk,file=disk,format=file -qmp stdio -nographic -nodefaults <<EOF
{"execute": "qmp_capabilities"}
{"execute": "block-dirty-bitmap-add", "arguments": {"node": "disk", "name": "bitmap"}}
{"execute": "blockdev-add", "arguments": {"node-name": "fleece", "driver": "file", "filename": "fleece"}}
{"execute": "blockdev-add", "arguments": {"node-name": "backup", "driver": "file", "filename": "backup"}}
{"execute": "blockdev-add", "arguments": {"node-name": "cbw", "driver": "copy-before-write", "file": "disk", "target": "fleece", "bitmap": {"node": "disk", "name": "bitmap"}}}
{"execute": "query-block"}
{"execute": "qom-set", "arguments": {"path": "/machine/unattached/device[4]", "property": "drive", "value": "cbw"}}
{"execute": "blockdev-add", "arguments": {"node-name": "snapshot", "driver": "snapshot-access", "file": "cbw"}}
{"execute": "block-dirty-bitmap-add", "arguments": {"node": "snapshot", "name": "tbitmap"}}
{"execute": "block-dirty-bitmap-merge", "arguments": {"node": "snapshot", "target": "tbitmap", "bitmaps": [{"node": "disk", "name": "bitmap"}]}}
[..]
{"execute": "quit"}
EOF

10:14

Credulous [Seth's Blog]

Where do con men come from?

There are three conditions that need to be met:

First, there needs to be rising societal pressure to get ahead, cut the line and find a win.

Second, there needs to be people willing to set aside their ethical principles to take advantage of others in their community.

And third, we need to be lulled into a state of unjustified credulity, eager to believe that seeds might be magical or that motion might be perpetual.

While all three of these conditions are present throughout time, they go in cycles.

And we’re having one right now.

We’re far too tolerant of ridiculous promises, particularly around tech, money and leadership. And instead of quickly learning to become a bit more skeptical, we get caught in a cycle of letting the con man (person, actually) off the hook.

Inevitably, when it ends badly, we overreact and become too risk averse, costing us nearly as much with our skepticism.

If someone tells you that they forgot to put the word ‘gullible’ in the new edition of the dictionary, don’t dismiss them out of hand, but yes, check first.

09:56

Joe Marshall: Vibe Coding, final word [Planet Lisp]

I couldn't leave it alone. This AI was going to write some Lisp code if I had to force it. This isn't &lquovibing” anymore. We're going to be pecise, exact, and complete in our instructions, and we're going to check the results.

Again, I'm taking on a Minesweeper clone as the problem. All the code was to be written in a single file using a single package. The AI simply didn't understand the problem of forward references to symbols in other packages. Perhaps a game loop is beyond the ability of the AI. I wrote a basic game loop that initializes all the required libraries in correct order with unwind-protects to clean up in reverse order. I wrote a main function that creates a window and a renderer to draw on it, and a game loop that polls for events and handles keypresses and the quit event. This is a basic black window that has no behavior beyond the ability to quit. There should be no need for the AI to modify this code.

The AI used the GPT-4o model. Instructions were given in precise, imperative English. For example,

“Each cell on the board is in one of these states: hidden, flagging, flagged, unflagging, exposing, exposed Cells start out in hidden state. When a cell is hidden, it renders as a blank square. When a cell is hidden and the mouse is over the cell and the right button is down, the cell enteres the flagging state. When a cell is flagging and the mouse is over the cell and the right button is up, the cell enters the flagged mode. When a cell is flagged and the mouse is over the cell and the right button is down, the cell enters unflagging. When the cell is unflagging, the mouse is over the cell and and right button is up, the cell enters hidden. Cells that are flagging or flagged display as the flag texture. Cells that are hidden or unflagging display as the blank texture.”

This is programming, not vibing. There is always room for misunderstanding, but I spelled out the details of part of the state transitions that I wanted the AI to implement. In particular, notice that when flagging a cell, there are hidden states beyond the flagged and unflagged states. These are necessary to make the effect of flagging and unflagging be edge triggered. I didn't trust the AI to know about this, so I spelled it out.

Sometimes I could write simple directions, such as:

“When rendering a cell, if it is under the mouse, highlight the cell with a red border.”

Or:

“When the cell is in the exposing state, it should display as a blank, depressed cell.”

But then again,

“When the mouse is over a cell, if the cell is in hidden state and left mouse button is down, the cell enters the exposing state. If a cell is in exposing state and the mouse is not over the cell, the cell reverts to hidden state. If a cell is in exposing state, and the mouse is over the cell, and the left mouse button is raised, the cell enters the exposed state.”

The AI did a surprisingly good job at handling the parenthesis. There was one function that it kept adding a stray parenthesis to. I went back more than once to delete that extra parenthesis when the reader barfed.

At one point, the AI accidentally removed the abiity to place a flag on a cell. I asked it to restore that ability, but I didn't give instructions in as great detail as I did before. It added transitions to and from the flagged state, but it didn't add the intermediate flagging and unflagging states as I had explicitly directed it to before. As a result, flagging ended up being non-deterministic, with the flag being toggled on and off every 16 ms. I had to go back and add the intermediate states by hand again to restore the determinism.

After a few hours of this, I had a working Minesweeper clone. Let's look at the generated code.

;; -*- mode: lisp; package: "VIBE" -*-

(in-package "VIBE")

;; Define constants for magic numbers
(defparameter *tile-size* 32) ;; Size of each tile in pixels
(defparameter *game-width* 25) ;; Number of columns
(defparameter *game-height* 15) ;; Number of rows
(defparameter *frame-delay* 16) ;; Delay between frames in milliseconds

;; Define cell states
(defconstant +hidden+ 'hidden)
(defconstant +flagging+ 'flagging)
(defconstant +flagged+ 'flagged)
(defconstant +unflagging+ 'unflagging)
(defconstant +exposing+ 'exposing)
(defconstant +exposed+ 'exposed)

;; Define game states
(defconstant +playing+ 'playing)
(defconstant +won+ 'won)
(defconstant +lost+ 'lost)

It is a little odd to define the state constants as symbols. This adds a pointless extra level of symbolic indirection. I would have used keywords instead of symbols.

;; Global game state
(defparameter *game-state* +playing+)

;; The game board
(defparameter *board* nil)

;; The game board content (e.g., :mine or a number)
(defparameter *board-content* nil)

(defun initialize-board ()
  "Initialize the game board with all cells in the hidden state and place mines."
  ;; Initialize the board state
  (setf *board* (make-array (list *game-height* *game-width*)
                            :initial-element +hidden+))
  ;; Initialize the board content
  (setf *board-content* (make-array (list *game-height* *game-width*)
                                    :initial-element 0))
  ;; Place 50 mines randomly
  (loop repeat 50
        do (let ((row (random *game-height*))
                 (col (random *game-width*)))
             ;; Ensure no duplicate mines
             (unless (eql (aref *board-content* row col) :mine)
               (setf (aref *board-content* row col) :mine)
               ;; Update adjacent cells
               (update-adjacent-cells row col)))))

(defun update-adjacent-cells (row col)
  "Increment the mine count for all adjacent cells."
  (loop for r from (max 0 (1- row)) to (min (1+ row) (1- *game-height*))
        do (loop for c from (max 0 (1- col)) to (min (1+ col) (1- *game-width*))
                 do (unless (eql (aref *board-content* r c) :mine)
                      (incf (aref *board-content* r c))))))

You can tell that I didn't write this code. I hate loop.

The textures are loaded from PNG files just before beginning the game loop. The AI decided to maintain them as four separate values that are passed around to the functions that need them. This will get out of hand quickly. A table of resources would be better.

(defun render-frame (renderer blank-texture flag-texture mine-texture digit-textures)
  (sdl2:set-render-draw-color renderer 0 0 0 0)
  (sdl2:render-clear renderer)
  ;; Render game state
  (loop for row from 0 below *game-height*
        do (loop for col from 0 below *game-width*
                 do (render-tile renderer row col blank-texture flag-texture mine-texture digit-textures))))

(defun render-tile (renderer row col blank-texture flag-texture mine-texture digit-textures)
  "Render a single tile based on its state and highlight it if under the mouse."
  (let ((state (aref *board* row col))
        (content (aref *board-content* row col)) ;; Content of the cell (e.g., :mine or a number)
        (dest-rect (sdl2:make-rect (* col *tile-size*) (* row *tile-size*) *tile-size* *tile-size*)))
    ;; Render the tile based on its state
    (cond
      ;; Hidden or unflagging state: render blank texture
      ((or (eql state +hidden+) (eql state +unflagging+))
       (sdl2:render-copy renderer blank-texture :dest-rect dest-rect))
      ;; Flagging or flagged state: render flag texture
      ((or (eql state +flagging+) (eql state +flagged+))
       (sdl2:render-copy renderer flag-texture :dest-rect dest-rect))
      ;; Exposing state: render blank texture with a depressed effect
      ((eql state +exposing+)
       (sdl2:render-copy renderer blank-texture :dest-rect dest-rect)
       (sdl2:set-render-draw-color renderer 50 50 50 100) ;; Semi-transparent dark overlay
       (sdl2:render-fill-rect renderer dest-rect))
      ;; Exposed state: render mine or digit
      ((eql state +exposed+)
       (cond
         ;; If the cell contains a mine, render the mine texture
         ((eql content :mine)
          (sdl2:render-copy renderer mine-texture :dest-rect dest-rect))
         ;; If the cell contains a digit (positive number), render the corresponding digit texture
         ((and (integerp content) (> content 0))
          (let ((digit-texture (gethash content digit-textures)))
            (when digit-texture
              (sdl2:render-copy renderer digit-texture :dest-rect dest-rect))))
         ;; Otherwise, render a default exposed tile (e.g., light gray)
         (t
          (sdl2:set-render-draw-color renderer 200 200 200 255) ;; Light gray for exposed
          (sdl2:render-fill-rect renderer dest-rect)))))
    ;; Highlight the tile with a red border if it is under the mouse
    (multiple-value-bind (mouse-x mouse-y _) (sdl2:mouse-state)
      (declare (ignore _))
      (let ((mouse-row (floor (/ mouse-y *tile-size*)))
            (mouse-col (floor (/ mouse-x *tile-size*))))
        (when (and (= row mouse-row) (= col mouse-col))
          (sdl2:set-render-draw-color renderer 255 0 0 255) ;; Red color
          (sdl2:render-draw-rect renderer dest-rect)
          (sdl2:set-render-draw-color renderer 0 0 0 255)))))) ;; Reset color to black

Each time we go around the game loop, we update the state the cell under the mouse. The AI decided to pass the state input as spread arguments to the update function.

(defun update-cell-state (row col mouse-over left-button-down left-button-up right-button-down right-button-up)
  "Update the state of a cell based on mouse input."
  (let ((state (aref *board* row col)))
    (cond
      ;; If the cell is hidden and the left mouse button is down, it enters the exposing state
      ((and (eql state +hidden+) mouse-over left-button-down)
       (setf (aref *board* row col) +exposing+))

      ;; If the cell is exposing and the mouse is not over it, it reverts to hidden
      ((and (eql state +exposing+) (not mouse-over))
       (setf (aref *board* row col) +hidden+))

      ;; If the cell is exposing, the mouse is over it, and the left mouse button is raised, it enters the exposed state
      ((and (eql state +exposing+) mouse-over left-button-up)
       (setf (aref *board* row col) +exposed+)
       ;; If the cell contains a mine, the game is lost and all mines are exposed
       (when (eql (aref *board-content* row col) :mine)
         (setf *game-state* +lost+)
         (expose-all-mines))
       ;; If the cell has zero neighboring mines, recursively expose neighbors
       (when (and (integerp (aref *board-content* row col))
                  (= (aref *board-content* row col) 0))
         (expose-neighbors row col)))

      ;; If the cell is hidden and the right mouse button is down, it enters the flagging state
      ((and (eql state +hidden+) mouse-over right-button-down)
       (setf (aref *board* row col) +flagging+))

      ;; If the cell is flagging and the right mouse button is up, it enters the flagged state
      ((and (eql state +flagging+) mouse-over right-button-up)
       (setf (aref *board* row col) +flagged+))

      ;; If the cell is flagged and the right mouse button is down, it removes the flag
      ((and (eql state +flagged+) mouse-over right-button-down)
       (setf (aref *board* row col) +unflagging+))

      ((and (eql state +unflagging+) mouse-over right-button-up)
       (setf (aref *board* row col) +hidden+)))))

(defun poll-mouse-and-update ()
  "Poll the mouse position and button states, and update the board accordingly."
  (when (eql *game-state* +playing+) ;; Only process mouse input if the game is playing
    (multiple-value-bind (x y buttons) (sdl2:mouse-state)
      (let ((row (floor (/ y *tile-size*)))
            (col (floor (/ x *tile-size*)))
            (left-button-down (logbitp 0 buttons))  ;; SDL_BUTTON_LEFT is bit 0
            (right-button-down (logbitp 2 buttons))) ;; SDL_BUTTON_RIGHT is bit 2
        (when (and (>= row 0) (< row *game-height*)
                   (>= col 0) (< col *game-width*))
          ;; Update the cell state based on mouse input
          (update-cell-state row col
                             t ;; mouse-over is true for the current cell
                             left-button-down
                             (not left-button-down)
                             right-button-down
                             (not right-button-down)))))))

This illustrates that while the lights appear to be on, no one is at home. The mouse-over variable is always true, there is no need for it to exist at all. There is no need to pass both left-button-down and its complement. Same with right-button-down.

I did allow the AI to modify game-loop, but the modifications were subject to careful scrutiny to make sure that the game would continue to run. In particular, one time it wanted to add handlers for mouse events. I told it no, and that it could poll the mouse state as necessary instead.

(defun game-loop (window renderer blank-texture flag-texture mine-texture digit-textures game-over-texture)
  "Main game loop."
  (declare (ignore window))
  ;; Main game loop
  (sdl2:with-event-loop (:method :poll)
    (:idle ()
           ;; Clear the screen
           (sdl2:set-render-draw-color renderer 0 0 0 255) ;; Black background
           (sdl2:render-clear renderer)

           ;; Poll mouse and update game state
           (poll-mouse-and-update)

           ;; Render the game frame
           (render-frame renderer blank-texture flag-texture mine-texture digit-textures)

           ;; Render the "Game Over" overlay if the game is lost
           (when (eql *game-state* +lost+)
             (let ((screen-width (* *tile-size* *game-width*))
                   (screen-height (* *tile-size* *game-height*)))
               ;; Set blend mode and alpha for transparency
               (sdl2:set-texture-blend-mode game-over-texture :blend)
               (sdl2:set-texture-alpha-mod game-over-texture 192) ;; 75% transparency
               ;; Render the texture as a full-screen overlay
               (let ((dest-rect (sdl2:make-rect 0 0 screen-width screen-height)))
                 (sdl2:render-copy renderer game-over-texture :dest-rect dest-rect))))

           ;; Present the rendered frame
           (sdl2:render-present renderer)

           ;; Delay for the next frame
           (sdl2:delay *frame-delay*))
    (:keydown (:keysym keysym)
              (cond
                ;; Reset the game when the 'o' key is pressed
                ((eql (sdl2:scancode keysym) :scancode-o)
                 (reset-game))
                ;; Quit the game when the 'x' key is pressed
                ((eql (sdl2:scancode keysym) :scancode-x)
                 (sdl2:push-quit-event))
                ;; Lose the game and expose all mines when the 'p' key is pressed
                ((eql (sdl2:scancode keysym) :scancode-p)
                 (progn
                   (setf *game-state* +lost+)
                   (expose-all-mines)))))
    (:quit () t)))

Notice that in this game loop, we're not accounting for the time it takes to update the game state and render the frame. If this game really tried to animate anything, the animation would be jittery. A better game loop would track real time and refresh accordingly.

For a simple game such as this, it makes sense to load the all the bitmaps into memory at the get-go. For a more complicated game with many levels, you might not be able to fit them all in memory.

Passing the surfaces around as arguments is not going to work when you have a lot of them.

(defun initialize ()
  "Initialize the game, load textures, and create the game board."
  (initialize-board) ;; Initialize the game board
  (let ((blank-surface nil)
        (flag-surface nil)
        (mine-surface nil)
        (game-over-surface nil)
        (digit-surfaces (make-hash-table)))
    (unwind-protect
         (progn
           ;; Load PNG surfaces
           (setq blank-surface (sdl2-image:load-image
                                (asdf:system-relative-pathname "vibe" "textures/blank.png")))
           (setq flag-surface (sdl2-image:load-image
                               (asdf:system-relative-pathname "vibe" "textures/flag.png")))
           (setq mine-surface (sdl2-image:load-image
                               (asdf:system-relative-pathname "vibe" "textures/mine.png")))
           ;; Load digit textures (e.g., "1.png", "2.png", etc.)
           (loop for i from 1 to 8
                 do (setf (gethash i digit-surfaces)
                          (sdl2-image:load-image
                           (asdf:system-relative-pathname "vibe" (format nil "textures/~a.png" i)))))
           ;; Create the "GAME OVER" surface
           (setq game-over-surface (create-game-over-surface))

           ;; Create the window and renderer
           (sdl2:with-window (window
                              :title "Vibe"
                              :x 0 :y 0
                              :w (* *tile-size* *game-width*)
                              :h (* *tile-size* *game-height*)
                              :flags '(:shown))
             (sdl2:with-renderer (renderer window :index -1 :flags '(:accelerated))
               (let ((blank-texture (sdl2:create-texture-from-surface renderer blank-surface))
                     (flag-texture (sdl2:create-texture-from-surface renderer flag-surface))
                     (mine-texture (sdl2:create-texture-from-surface renderer mine-surface))
                     (digit-textures (make-hash-table))
                     (game-over-texture (sdl2:create-texture-from-surface renderer game-over-surface)))
                 ;; Convert digit surfaces to textures
                 (maphash (lambda (key surface)
                            (setf (gethash key digit-textures)
                                  (sdl2:create-texture-from-surface renderer surface)))
                          digit-surfaces)
                 (unwind-protect
                      (game-loop window renderer blank-texture flag-texture mine-texture digit-textures game-over-texture)
                   ;; Cleanup textures
                   (sdl2:destroy-texture blank-texture)
                   (sdl2:destroy-texture flag-texture)
                   (sdl2:destroy-texture mine-texture)
                   (sdl2:destroy-texture game-over-texture)
                   (maphash (lambda (_key texture)
                              (declare (ignore _key))
                              (sdl2:destroy-texture texture))
                            digit-textures)))))))
      ;; Cleanup surfaces
      (when flag-surface (sdl2:free-surface flag-surface))
      (when blank-surface (sdl2:free-surface blank-surface))
      (when mine-surface (sdl2:free-surface mine-surface))
      (when game-over-surface (sdl2:free-surface game-over-surface))
      (maphash (lambda (_key surface)
                 (declare (ignore _key))
                 (sdl2:free-surface surface))
               digit-surfaces)))

In Minesweeper, if you click on a cell with no neighboring mines, all the neighboring cells are exposed. This will open up larger areas of the board. The AI did a good job of implementing this, but I was careful to specify that only the hidden cells should be exposed. Otherwise, the recursion would not bottom out because every cell is a neighbor of its neighbors.

(defun expose-neighbors (row col)
  "Recursively expose all hidden neighbors of a cell with zero neighboring mines."
  (loop for r from (max 0 (1- row)) to (min (1+ row) (1- *game-height*))
        do (loop for c from (max 0 (1- col)) to (min (1+ col) (1- *game-width*))
                 do (when (and (eql (aref *board* r c) +hidden+)) ;; Only expose hidden cells
                      (setf (aref *board* r c) +exposed+)
                      ;; If the neighbor also has zero mines, recursively expose its neighbors
                      (when (and (integerp (aref *board-content* r c))
                                 (= (aref *board-content* r c) 0))
                        (expose-neighbors r c))))))

We need a way to get the game back to the initial state.

(defun reset-game ()
  "Reset the game by reinitializing the board and setting the game state to playing."
  (initialize-board)
  (setf *game-state* +playing+))

The AI writes buggy code. Here is an example. It is trying figure out if the player has won the game. You can state the winning condition in couple of different ways.

  • All the cells that are not mines are exposed.
  • All the cells that are mines are flagged, all flagged cells contain mines.

This does't quite achieve either of these.

(defun check-win-condition ()
  "Check if the player has won the game."
  (let ((won t)) ;; Assume the player has won until proven otherwise
    (loop for row from 0 below *game-height*
          do (loop for col from 0 below *game-width*
                   do (let ((state (aref *board* row col))
                            (content (aref *board-content* row col)))
                        (when (and (not (eql state +exposed+)) ;; Cell is not exposed
                                   (not (or (eql state +flagged+) ;; Cell is not flagged
                                            (eql content :mine)))) ;; Cell does not contain a mine
                          (setf won nil)))))
    (when won
      (setf *game-state* +won+))))

create-game-over-surface prepares a surface with the words “Game Over” writ large.

(defun create-game-over-surface ()
  "Create a surface for the 'GAME OVER' splash screen using SDL2-TTF."
  (let ((font nil)
        (text-surface nil))
    (unwind-protect
         (progn
           ;; Load the font (adjust the path and size as needed)
           (setq font (sdl2-ttf:open-font (asdf:system-relative-pathname "vibe" "fonts/arial.ttf") 72))
           ;; Render the text "GAME OVER" in red
           (setq text-surface (sdl2-ttf:render-text-solid font "GAME OVER" 255 0 0 255)))
      ;; Cleanup
      (when font (sdl2-ttf:close-font font)))
    text-surface))

The main function initializes the SDL2 library and its auxiliar libraries along with unwind-protects to uninitialize when we leave the game. The AI was not permitted to change this code.

(defun main ()
  (sdl2:with-init (:video)
    (unwind-protect
         (progn
           (sdl2-image:init '(:png))
           (unwind-protect
                (progn
                  (sdl2-ttf:init)
                  (initialize))
             (sdl2-ttf:quit)))
      (sdl2-image:quit))))

If you step on a mine, it exposes the other mines.

(defun expose-all-mines ()
  "Expose all mines on the board."
  (loop for row from 0 below *game-height*
        do (loop for col from 0 below *game-width*
                 do (when (eql (aref *board-content* row col) :mine)
                      (setf (aref *board* row col) +exposed+)))))

Conclusion

This wasn't “vibe coding”. This was plain old coding, but filtered through an English language parser. It added an extra level of complexity. Not only did I have to think about what should be coded, I had to think about how to phrase it such that the AI would generate what I had in mind and not disturb the other code.

Whenever I tried to let go and “vibe”, the AI would generate some unworkable mess. Programming is a craft that requires training and discipline. No dumb pattern matcher (or sophisticated one) is going to replace it.

In languages other that Common Lisp, you might get further. Consider Java. It takes a page and half of boilerplate to specify the simplest first-class object. An AI can easily generate pages and pages of boilerplate and appear to be quite productive. But you've missed the point if you think that it is better to generate boilerplate automatically than to use abstractions to avoid it and a language that doesn't need it.

09:28

Guido Günther: Free Software Activities March 2025 [Planet Debian]

Another short status update of what happened on my side last month. Some more ModemManager bits landed, Phosh 0.46 is out, haptic feedback is now better tunable plus some more. See below for details (no April 1st joke in there, I promise):

phosh

  • Fix swapped arguments in ABI check (MR)
  • Sync packaging with Debian so testing packages becomes easier (MR)
  • Fix crash when primary output goes away (MR)
  • More consistent button press feedback (MR
  • Undraft the lockscreen wallpaper branch (MR) - another ~2y old MR out of the way.
  • Indicate ongoing WiFi scans (MR)
  • Limit ABI compliance check to public headers (MR)
  • Document most gsettings in a manpage (MR)
  • (Hopefully) make integration test more robust (MR)
  • Drop superfluous build invocation in CI by fixing the missing dep (MR)
  • Fix top-panel icon size (MR)
  • Release 0.46~rc1, 0.46.0
  • Simplify adding new symbols (MR)
  • Fix crash when taking screenshot on I/O starved system (MR)
  • Split media-player and mpris-manger (MR)
  • Handle Cell Broadcast notification categories (MR)

phoc

  • xwayland: Allow views to use opacity: (MR)
  • Track wlroots 0.19.x (MR)
  • Initial support for workspaces (MR)
  • Don't crash when gtk-layer-shell wants to reposition popups (MR)
  • Some cleanups split out of other MRs (MR)
  • Release 0.46~rc1, 0.46.0
  • Add meson dist job and work around meson not applying patches in meson dist (MR, MR)
  • Small render to allow Vulkan renderer to work (MR)
  • Fix possible crash when closing applications (MR)
  • Rename XdgSurface to XdgToplevel to prevent errors like the above (MR)

phosh-osk-stub

  • Make switching into (and out of) symbol2 level more pleasant (MR)
  • Simplify UI files as prep for the GTK4 switch (MR)
  • Release 0.46~rc1, 0.46.0)

phosh-mobile-settings

  • Format meson files (MR)
  • Allow to set lockscren wallpaper (MR)
  • Allow to set maximum haptic feedback (MR)
  • Release 0.46~rc1, 0.46.0
  • Avoid warnings when running CI/autopkgtest (MR)

phosh-tour

pfs

  • Add search when opening files (MR)
  • Show loading state when opening folders (MR)
  • Move demo to its own folder (MR)
  • Release 0.0.2

xdg-desktop-portal-gtk

  • Add some support for v2 of the notification portal (MR)
  • Make two function static (MR)

xdg-desktop-portal-phosh

  • Add preview for lockscreen wallpapers (MR)
  • Update to newer pfs to support search (MR)
  • Release 0.46~rc1), 0.46.0
  • Add initial support for notification portal v2 (MR) thus finally allowing flatpaks to submit proper feedback.
  • Style consistency (MR, MR)
  • Add Cell Broadcast categories (MR)

meta-phosh

  • Small release helper tweaks (MR)

feedbackd

  • Allow for vibra patterns with different magnitudes (MR)
  • Allow to tweak maximum haptic feedback strength (MR)
  • Split out libfeedback.h and check more things in CI (MR)
  • Tweak haptic in default profile a bit (MR)
  • dev-vibra: Allow to use full magnitude range (MR)
  • vibra-periodic: Use [0.0, 1.0] as ranges for magnitude (MR)
  • Release 0.8.0, 0.8.1)
  • Only cancel feedback if ever inited (MR)

feedbackd-device-themes

  • Increase button feedback for sarge (MR)

gmobile

  • Release 0.2.2
  • Format and validate meson files (MR)

livi

  • Don't emit properties changed on position changes (MR)

Debian

  • libmbim: Update to 1.31.95 (MR)
  • libmbim: Upload to unstable and add autopkgtest (MR)
  • libqmi: Update to 1.35.95 (MR)
  • libqmi: Upload to unstable and add autopkgtest (MR)
  • modemmanager: Update to 1.23.95 to experimental and add autopkgtest (MR)
  • modemmanager: Upload to unstable (MR)
  • modemmanager: Add missing nodoc build deps (MR)
  • Package osmo-cbc: (Repo)
  • feedbackd: Depend on adduser (MR)
  • feedbackd: Release 0.8.0, 0.8.1
  • feedbackd-device-themes: Release 0.8.0, 0.8.1
  • phosh: Release 0.46~rc1, 0.46.0
  • phoc: Release 0.46~rc1, 0.46.0
  • phosh-osk-stub: Release 0.46~rc1, 0.46.0
  • xdg-desktop-portal-phosh: Release 0.46~rc1, 0.46.0
  • phosh-mobile-settings: Release 0.46~rc1, 0.46.0, fix autopkgtest
  • phosh-tour: Release 0.46.0
  • gmobile: Release 0.2.2-1
  • gmobile: Ensure udev rules are applied on updates (MR)

git-buildpackage

  • Ease creating packages from scratch and document that better (MR, Testcase MR)

feedbackd-device-themes

  • Tweak some haptic for oneplus,fajita (MR)
  • Drop superfluous periodic feedbacks and cleanup CI (MR)

wlroots

  • xwm: Allow to set opacity (MR)

ModemManager

  • Fix typos (MR)
  • Add support for setting channels via libmm-glib and mmcli (MR)

Tuba

  • Set input-hint for OSK word completion (MR)

xdg-spec

  • Propose _NET_WM_WINDOW_OPACITY (which is around since ages) (MR)

gnome-calls

  • Help startup ordering (MR)

Reviews

This is not code by me but reviews on other peoples code. The list is (as usual) slightly incomplete. Thanks for the contributions!

  • phosh: Remove usage of phosh_{app_grid, overview}handlesearch (MR)
  • phosh: app-grid-button: Prepare for GTK 4 by using gestures and other migrations (MR) - merged
  • phosh: valign search results (MR) - merged
  • phosh: top-panel: Hide setting's details on fold (MR) - merged
  • phosh: Show frame with an animation (MR) - merged
  • phosh: Use gtk_widget_set_visible (MR) - merged
  • phosh: Thumbnail aspect ration tweak (MR) - merged
  • phosh: Add clang/llvm ci step (MR)
  • mobile-broadband-provider-info: Bild APN (MR) - merged
  • iio-sensor-proxy: Buffer driver probing fix (MR) - merged
  • iio-sensor-proxy: Double free (MR) - merged
  • debian: Autopkgtests for ModemManager (MR)
  • debian: gitignore: phosh-pim debian build directory (MR)
  • debian: Better autopkgtests for MM (MR) - merged
  • feedbackd: tests: Depend on daemon for integration test (MR) - merged
  • libcmatrix: Various improvements (MR)
  • gmobile/hwdb: Add Sargo (MR) - merged
  • gmobile/hwdb: Add xiaomi-daisy (MR) - merged
  • gmobile/hwdb: Add SHIFT6mq (MR) - merged
  • meta-posh: Add reproducibility check (MR) - merged
  • git-buildpackage: Dependency fixes (MR) - merged
  • git-buildpackage: Rename tracking (MR)

Help Development

If you want to support my work see donations.

Comments?

Join the Fediverse thread

08:49

Link [Scripting News]

WordLand and a bunch of other apps are down. The server that was hosting the apps went down, that happens sometimes, but it isn't coming back up when restarted. I am provisioning a new server, and hopefully when that's up I will be able to restore each of the apps. This is not an April Fools joke. :-)

08:42

Outgrowing Social Anxiety by Ripley LaCross [Oh Joy Sex Toy]

Outgrowing Social Anxiety by Ripley LaCross

Ripley gets brave, and attends Size Con with the team! A piece of autobio, journalism and kink, all mixed into one, and a fun way to see some of the process behind OJST’s first group outing. A shout out to Editor Ziggy helped make this one happen this week. He helped write the early pages […]

04:00

02:56

01:56

Neil Munro: Ningle Tutorial 5: Environmental Variables [Planet Lisp]

Contents

Introduction

Welcome back, before we begin looking at databases we need to look at storing process related data in the application environment, this month will be a relatively short, but important part in this series.

If you are unfamiliar, there's a methodology called 12factor for building web applications that advocates for storing variable data in environment variables. In anticipation of working with databases that are going to need database names, potentially usernames and passwords etc, we need a system to load this data into our system without writing this potentially sensitive information down in the application code itself.

Environmental Variables are just that, variables defined in the environment of a process. Your operating system defines a number of these, for example, your system will have an area where files might be stored temporarily, and a program may run on different systems, but if both systems have an environmental variable TMP then the program can read the value of the TMP environmental variable and use the directory the system specifies, making it portable across systems without needing to change the code. You just read the value defined by the TMP environmental variable from the system and that's it!

When a process starts, it gets a copy of all system defined environmental variables, although a process generally can't override the values to affect other processes, it is, however, possible to change existing ones or add new ones to the running process, which is what we are going to do here. We have a process we want to run, but want to hide sensitive information in the environment and so will inject new environmental variables into the running process without adding to the system environmental variables for any other process.

Typically we do this by creating a file (usually called .env) that will define the new values, and this file will be loaded as the program starts, importantly this file will NOT be stored in version control, otherwise we wouldn't hide the data, just move it to a different file. It is very important to ensure that you ignore this file!

In order to use this technique we will be using the cl-dotenv package, so first ensure you have added it to your dependencies in the project asd file.

:depends-on (:clack
             :cl-dotenv
             :ningle
             :djula
             :cl-forms
             :cl-forms.djula
             :cl-forms.ningle)

Integrating the package is quite simple, just below where we create the application object in main.lisp, we use the package to load in the custom environmental variables.

(defvar *app* (make-instance 'ningle:app))

(dotenv:load-env (asdf:system-relative-pathname :ningle-tutorial-project ".env"))

It is important to ensure we have a .env file prior to starting the application though! We are likely going to use sqlite (at least in the beginning) so we need to tell our application where to store the database file, for now that will be the only thing we store in the .env file, we can always add to the file as/when we need to, and this tutorial serves as an introduction to injecting environmental variables, so if it works for one, it'll work for many! Please note, this .env file must be in the root of your project.

DBPATH=~/quicklisp/local-projects/ningle-tutorial-project/ntp.db

To confirm this works, we will add a format expression to prove things are as we need them to be, in the start function, we use the uiop package (which comes installed with sbcl) to get the variable.

(defun start (&key (server :woo) (address "127.0.0.1") (port 8000))
    (format t "Test: ~A~%" (uiop:getenv "DBPATH"))
    (djula:add-template-directory (asdf:system-relative-pathname :ningle-tutorial-project "src/templates/"))
    (djula:set-static-url "/public/")
    (clack:clackup
      (lack.builder:builder :session
                            (:static
                             :root (asdf:system-relative-pathname :ningle-tutorial-project "src/static/")
                             :path "/public/")
                            *app*)
     :server server
     :address address
     :port port))

If you start the application now, you should see the value being loaded and printed out.

Test: ~/quicklisp/local-projects/ningle-tutorial-project/ntp.db
NOTICE: Running in debug mode. Debugger will be invoked on errors.
  Specify ':debug nil' to turn it off on remote environments.
Woo server is started.
Listening on 127.0.0.1:8000.
#S(CLACK.HANDLER::HANDLER
   :SERVER :WOO
   :SWANK-PORT NIL
   :ACCEPTOR #<BT2:THREAD "clack-handler-woo" {1005306473}>)

Conclusion

To recap, after working your way though this tutorial you should be able to:

  • Explain what an environmental variable is
  • Explain why environmental variables are important to application security
  • Use cl-dotenv to load a file containing data to be loaded into the process
  • Use Lisp code to display the new loaded environmental variable

Github

The link for this tutorial code is available here.

Resources

01:42

guess who likes you? [WIL WHEATON dot NET]

When I was a child actor and my mom was forcing me to do all of the child actor things, she was obsessed with my reviews. She made me feel like they were a test that I had to pass. I had to make the reviewers happy, so the audience (“your fans”) would remain happy. She relentlessly drilled into me that nothing was more important than what other people thought about me and my work, that I should be terrified of this audience that simultaneously hung on my every word (“your fans”) but was also so fickle they’d abandon me the instant I upset them.

That wasn’t how anything worked. It did not reflect reality at all, but it was an extremely effective method of control. After Roger Ebert gave The Buddy System (a bad movie) a fair review (It’s a bad movie), I was distraught. He said something about how I played a brat in the film (I did) but what I heard was “Wil Wheaton is a brat”. All the fear and anxiety my mom had poured into me threatened to drown me — did I mention I was ELEVEN? — so the only way I could manage to fight back was to just completely reject the whole notion of reviews. I remember telling people that I just wanted to let the work speak for itself, and I didn’t want to be out there talking about it. I didn’t have the awareness I have now to understand I was crying out for my family to notice me as a person, instead of the thing that paid for their stuff and made my mom feel important. I knew in my heart the next review would be the bad one that my dad would shove in my face as evidence that I deserved his rejection, that I wasn’t good enough to be worthy of his love and attention. Over the decades, I decided it was better to just ignore all the good ones, because I knew in my heart I’d only listen to the bad ones. And it’s all subjective, anyway. It can’t be about an artist’s inherent worth or value as a person and creator.

(It breaks my heart that younger Wil carried that burden as long as he did, and as a parent, I can’t comprehend doing anything that would make my children feel about themselves the way my parents made me feel about myself. It’s why, when someone in my Reddit AMA asked me what’s one thing in your personal life that you’re proud of?, I said “I am the dad I didn’t have.”)

In about 1986, my mom realized that teen magazines were always thirsty for me. Before too long, their editors realized that she was thirsty for their approval. Thus began several years of me being forced into endless photo shoots and choreographed encounters with other teeny bopper magazine kids. It all felt like I was just being used by everyone involved, and I couldn’t say no to it.

For the longest time, I didn’t grok that all press isn’t the same, that some press can actually work against my career goals (like being in every teen magazine in the world when you’re trying to be taken seriously as an actor), and that there is press that can make all the difference. My experience was warped because the press my mother prioritized wasn’t the kind of press I learned how to do when I was promoting my book, and now my podcast. It wasn’t press that was coordinated and targeted to give the work the best chance to find its audience. It was almost always attention for its own sake, another way for my mom to put me in a place where I was on display while she gorged herself on the attention I didn’t want. I hated it. I hated that it was more important than literally anything about me as a person or a son. So I frequently chose to give bad interviews, rarely took them seriously, and was pretty crap at the whole thing. If you’re one of the people who had to interview that kid, I’m sorry. He’s struggling like you wouldn’t believe and doesn’t have any support.

I always felt like it was speeding up the countdown clock on my fifteen minutes. After Stand By Me, it sent this message that I was the teeny bopper flavor of the month, and River was the serious actor*. When I was put in front of the photographers and stuff, I felt like a piece of dry bread, being pecked to death by birds who didn’t care who they were eating, as long as they were fed.

Starting with Tabletop, my attitude about press and promotion began to change. I began to see it as a necessary part of the whole thing, that didn’t have to be gross. In fact, I learned that it wasn’t inherently gross — that was my mom — unless I chose to talk to a gross outlet, which I haven’t done since I was in charge of my life. Doing interviews with Felicia, I began to see press as something that could be fun while it was helpful. I realized that nearly all the people I’m talking to are also just people who are doing their jobs. I’m sure there are countless entertainers who treat press the way I did when I was a kid, and I’m sure working with them (or that version of me) isn’t great. So I choose to be as close to great as possible when I have the chance. I’m going to honor their time and their audience’s attention, and I’m only going to say yes to people I actually want to talk to.

I took all of that energy into the promotion of Still Just A Geek, and I think it’s a big part of my book becoming a New York Times bestseller. So OBVIOUSLY I’m going to continue down that road as I promote It’s Storytime with Wil Wheaton.

This is where I stop to make sure you know that I don’t hate any of what I’m doing now. I love all of it, and I’m grateful as fuck for everything that’s in front of me right now. This is where I think for a long time that I’m going to delete everything I just wrote and get to the thing I sat down here to write about in the first place.

…but I feel like that context is going to make the thing I wanted to write about in the first place a little more poignant. So. Thanks for your indulgence.

This is where I get to the actual post, and you realize that everything you’ve read to this point isn’t really the post, for some reason.

Before I walked Marlowe this morning, I was doing some administrative podcast work with my team. Our launch last week was met with enthusiasm that vastly exceeded my expectations, and we have way more media requests in five days than I thought we’d get in the whole first season. Yay! Go us! More people will get to find out we exist!

I’ve always planned for this podcast to start small and grow slowly. If this is going to find a large audience, it’s going to be because people who listened to it told their friends about it, who told their friends about it, and so on. It’s the only way I can compete for time and attention in a crowded marketplace.

This is a very important distinction I want to make about that phrase: I’m not personally competing with anyone in any kind of zero sum contest that will define our worth. I don’t feel like I need to prove to anyone that this is good enough (or that I am good enough) to justify their time; I just want to ensure that any person who will enjoy what we are doing knows we exist. And I hope those folks will choose to give me some of their time, once a week, until the heat death of the universe or I retire, whichever comes first.

As part of this discussion, my producer asked me if I’d looked at any reviews. I most certainly had not, for the reasons I wrote about (and nearly deleted) above. Well, I may want to, she told me, because they were entirely positive. Not mostly positive, mind you, but entirely positive**. I did not believe that was possible, so I went ahead and peeked through my fingers at the Apple Podcasts page for my show.

And, uh, well … yeah. The audience that listened to episode one and left reviews seems to have loved listening to it the way I loved narrating it.

Holy crap that’s incredible. It looks like what I worked to put into the world and what these people heard ended up being the same thing. That’s wonderful and so exciting!

We have a new episode dropping on Wednesday, and some other extremely cool stuff that’s sort of rendering into our reality as I type this. I’ll have more on that later this week or early next week. Also, I wanted to shout out Caroline M Yoachim, who wrote Rock Paper Scissors Love Death, for her Nebula nomination for We Will Teach You How To Read | We Will Teach You How To Read.

Oh, also, I was going to put this into its own blog, but it can go here: I don’t watch myself often, but when I do, I’m always looking for what I did wrong, where I fumbled my words, what I forgot to say, all the ways I sucked, etc. Because I am the executive producer and primary force behind this whole thing, I felt like I needed to watch myself on KTLA, the way an athlete looks at tape from the game, in case I am invited to be on other broadcasts or whatever.

I pressed play, and after about one minute, I became aware of tears flowing down my cheeks, because I was watching someone who looked and sounded just like me, only he was so happy and so comfortable in his own skin, so effortlessly proud of what he did without being Prideful, totally engaged with the hosts and genuinely grateful to be there. That guy takes nothing for granted and chooses gratitude. I want to be more like him.

Crying, yawning, laughing, are all ways our body reregulates our nervous system from an activated, fight or flight state, into a resting, parasympathetic state. My body had a lot to release, it turns out. Tears poured down my face and I felt all this tension in my chest and shoulders soften and release. I noticed that so much of the worry and weight of the possibility and hope I’m afraid to embrace wasn’t as heavy.

I was so happy to see that guy be happy. I was so happy to see that guy genuinely enjoying the opportunity in front of him, and I was so happy that he could receive the sincere interest and kindness of the hosts.

And that guy was me! I’m that guy!

There’s a version of me who doesn’t do The Work I have done and continue to do, and I don’t know that he even tries to make It’s Storytime. He doesn’t believe in himself, and he’s terrified to take chances. He is convinced that his dad is right about him. I want to gently hug that guy and show him what’s possible when he does The Work. I want him to know — I need him to know — that he can do it, because if I can, anyone can. Everything worth doing is hard, including The Work. That version of me — all versions of me — are worth it. I’m so grateful to be a version of me who never gave up when it was hard. I’m so grateful that I could see and feel and BE that version of myself.

To bring this back around (I love a good bookend***): I rarely read reviews, and when I do, I’ve always struggled to take anything away from them other than “well, 500 people say you’re awesome, but this one dude who can’t spell says you suck so he obviously sees through your facade and you should quit because you’ll never be good enough.”

I’ve done so much work, healed so much trauma, grown into something that looks an awful lot like what I hope my best self looks like, and that means I’m in a place where I can accept that the audience I hoped to reach is finding the thing I made, they are enjoying the thing, and telling other people about the thing. And not because they feel sorry for me or want something from me, but because they liked the thing I made and want to share how it made them feel with other people. That means everything to me.

It’s my understanding that the reviews and ratings y’all are leaving on the show are all very helpful for our discovery and growth. So I appreciate you all so much. I think we’ll have a good sense of the size and retention of the audience in about two weeks, and we’ll know if we can start ramping up for another season.

Thanks for being part of this, and coming on this journey with me. As I will continue saying, I’m so grateful you are here, and offering me a chance to entertain you.

Here’s my subscribe to the blog thingy:

And here are the obligatory collection of links to subscribe to (and rate and review) It’s Storytime with Wil Wheaton:

*That’s not entirely inaccurate, but not because of any choices I made, or anything inherent to me.

**I realize that this is begging for a review bombing.

***I need it to have been a true Oner, don’t you? Either way, it’s amazing, and they even told us where they could have cheated, but she said it was a true Oner with no cheats so … I choose to believe that it was, even though I know how unlikely that is.

00:07

[$] Improving the merging of anonymous VMAs [LWN.net]

The virtual memory area (VMA), represented by struct vm_area_struct, is one of the core abstractions of the kernel's memory-management subsystem; a VMA represents a portion of a process's address space with the same characteristics. A memory-mapped file will be represented by (at least) one VMA, as will the process's stack or a region of anonymous memory. Efficiently managing VMAs and the logic around them is crucial for good performance overall. Lorenzo Stoakes focused on one specific problem area: the merging of anonymous VMAs, during the memory-management track at the 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit.

Zahnae Aquino Is an Undisputable Champion of Comedy [The Stranger]

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Saturday, April 5, at Washington Hall. by Megan Seling

On Saturday, April 5, some of Seattle’s funniest comedians will take the stage as part of The Stranger’s annual Undisputable Champions of Comedy showcase. It’ll be hilarious! The lineup was curated with help from everyone’s comedy bestie, Emmett Montgomery, co-host of Joketellers Union at Clock-Out Lounge and purveyor of all things delightfully weird. And this year’s lineup is stacked with talent, from a local comedy legend who once won over a crowd of bikers at an Aurora bar in the ’80s to a comic who uses laughter as a way to deal with grief. We even have a bunny and a fundamentalist Christian pastor on the bill! It’s gonna be great. We're going to post interviews with the champs all week long—say hello to Zahnae Aquino!

Describe your comedy in five words.

Bodacious, bombastic, beautiful, buoyant, and humorous. 

What’s the first thing you did when you found out you were chosen as one of The Stranger’s Champions of Comedy?

I finished eating the bowl of granola that I had started prior to getting the notification. After that, I realized I was still hungry and went up to get a banana. Once I was satiated, I said thank you to Emmett Montgomery for helping me get to this point in my comedy career.

You founded the Fun & Flirty comedy dating game. You’ve helped a lot of people hook up! Hopefully, that’s resulted in some good karma, but do you have a funny bad date story?

One time on a date I asked a guy who his celebrity crush was and he said Anna from Frozen (FYI not a celebrity). He also made me pay for everything and give him a ride to QFC afterward. 

What’s a good joke or icebreaker people should tuck away for a first date if things start getting awkward?

Ask them who their celebrity crush is. Just kidding. Ask them: “If you could choose any movie where all of the characters would be replaced by muppets except ONE, which movie would it be?”

Where is your favorite place to see comedy in Seattle right now?

Laughs Comedy Club, Here-After, or the Clock-Out Lounge every other Wednesday.

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Sat April 5, Washington Hall, $25, 21+. Tickets available here.

Monday, 31 March

23:35

Link [Scripting News]

I changed the domain for Radio Free America and the Bluesky channel. It's not a Canadian site. Maybe at some time we can have a version of the news flow from Canada. We may need it!

23:21

Dirk Eddelbuettel: Rblpapi 0.3.15 on CRAN: Several Refinements [Planet Debian]

bloomberg terminal

Version 0.3.16 of the Rblpapi package arrived on CRAN today. Rblpapi provides a direct interface between R and the Bloomberg Terminal via the C++ API provided by Bloomberg (but note that a valid Bloomberg license and installation is required).

This is the sixteenth release since the package first appeared on CRAN in 2016. It contains several enhancements. Two contributed PRs improve an error message, and extended connection options. We cleaned up a bit of internal code. And this release also makes the build conditional on having a valid build environment. This has been driven by the fact CRAN continues to builder under macOS 13 for x86_64, but Bloomberg no longer supplies a library and headers. And our repeated requests to be able to opt out of the build were, well, roundly ignored. So now the builds will succeed, but on unviable platforms such as that one we will only offer ‘empty’ functions. But no more build ERRORS yelling at us for three configurations.

The detailed list of changes follow below.

Changes in Rblpapi version 0.3.16 (2025-03-31)

  • A quota error message is now improved (Rodolphe Duge in #400)

  • Convert remaining throw into Rcpp::stop (Dirk in #402 fixing #401)

  • Add optional appIdentityKey argument to blpConnect (Kai Lin in #404)

  • Rework build as function of Blp library availability (Dirk and John in #406, #409, #410 fixing #407, #408)

Courtesy of my CRANberries, there is also a diffstat report for the this release. As always, more detailed information is at the Rblpapi repo or the Rblpapi page. Questions, comments etc should go to the issue tickets system at the GitHub repo.

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.

Dirk Eddelbuettel: RProtoBuf 0.4.24 on CRAN: Minor Polish [Planet Debian]

A new maintenance release 0.4.24 of RProtoBuf arrived on CRAN today. RProtoBuf provides R with bindings for the Google Protocol Buffers (“ProtoBuf”) data encoding and serialization library used and released by Google, and deployed very widely in numerous projects as a language and operating-system agnostic protocol.

This release brings an both an upstream API update affecting one function, and an update to our use of the C API of R, also in one function. Nothing user-facing, and no surprises expected.

The following section from the NEWS.Rd file has full details.

Changes in RProtoBuf version 0.4.24 (2025-03-31)

  • Add bindings to EnumValueDescriptor::name (Mike Kruskal in #108)

  • Replace EXTPTR_PTR with R_ExternalPtrAddr (Dirk)

Thanks to my CRANberries, there is a diff to the previous release. The RProtoBuf page has copies of the (older) package vignette, the ‘quick’ overview vignette, and the pre-print of our JSS paper. Questions, comments etc should go to the GitHub issue tracker off the GitHub repo.

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.

22:21

Music For Your Monday: Valiant Hearts [Whatever]

There’s a band I really like that I think more people should know about, and it’s called Valiant Hearts. It’s just two guys, Igor Serokvasha for the instrumentals and Tom Byrne for the vocals. These two guys have made some of my favorite songs of all time, all of which are off their album from 2019 called “Odyssey.” And I’m going to share them with you!

Not only are the lyrics and vocals stellar, but I absolutely love the drums in all of these songs, as well. Their lyrics are so whimsical and full of magic and wonder, talking about the cosmos and eternity, I really feel like I get lost in their music sometimes. Also, I love this album cover. I would totally get it as a tattoo.

This is without a doubt the one I listen to most often:

And this is the first song I ever heard by them:

But I also really love this one:

And I think you should listen to this one, as well:

You can also check them out on Spotify, too! While the whole album is really good, these are just my most favorite of their songs.

The singer also sings for another band called Galleons, and their song “DeLorean” is seriously awesome:

So, there you have it! Some lovely music to get you through the rest of this week. I hope you enjoy, let me know your thoughts in comments, and have a great day!

-AMS

21:49

Erin Ingle Is an Undisputable Champion of Comedy [The Stranger]

The Stranger Presents: The 2025 Undisputable Champions of Comedy! Saturday, April 5, at Washington Hall. by Megan Seling

On Saturday, April 5, some of Seattle’s funniest comedians will take the stage as part of The Stranger’s annual Undisputable Champions of Comedy showcase. It’ll be hilarious! The lineup was curated with help from everyone’s comedy bestie, Emmett Montgomery, co-host of Joketellers Union at Clock-Out Lounge and purveyor of all things delightfully weird. And this year’s lineup is stacked with talent, from a local comedy legend who once won over a crowd of bikers at an Aurora bar in the ’80s to a comic who uses laughter as a way to deal with grief. We even have a bunny and a fundamentalist Christian pastor on the bill! It’s gonna be great. We're going to post interviews with the champs all week long, starting with Erin Ingle!

Describe your comedy in five words.

Relatable musings on the everyday.

What’s the first thing you did when you found out you were chosen as one of The Stranger’s Champions of Comedy? 

I said, “Cowabunga,” and ripped a sick 1080 on my Razor scooter.

          View this post on Instagram                      

A post shared by Is This Normal? (@isthisnormalpod)

Your Is This Normal? podcast co-host Alyssa Yeoman was in last year’s showcase! I have to ask you the same question I asked her: What quirk do you have that some people might not consider “normal”?

I have no idea where this comes from, but I regularly mix up the words "green" and "orange”—I can fully discern the two different colors, but I'll be like, "Could you pass me the green—I mean orange—marker?" No other colors, no other words, but those two, I swap sometimes accidentally. I have met one other person in my life that does this, and we are both deeply confused why it happens.

Where is your favorite place to see comedy in Seattle right now?

I love seeing shows at Here-After, and I can't wait for the reopening of the new Emerald City Comedy Club.

The Stranger Presents: The 2025 Undisputable Champions of Comedy!, Sat April 5, Washington Hall, $25, 21+. Tickets available here.

21:42

IGN Live to Return June 7-8, Tickets Now on Sale [Humble Bundle Blog]

IGN Live is officially returning to Los Angeles June 7-8, 2025. Featuring tons of playable games on PCs, consoles, handhelds, trailer and gameplay reveals, celebrity panels, interviews, awesome merch, a live DJ, giveaways, and much more. The event will be a huge celebration of everything fans love from the world of games, movies, TV, comics, collectibles, and more.  Tickets are on sale now, so head …

The post IGN Live to Return June 7-8, Tickets Now on Sale appeared first on Humble Bundle Blog.

21:00

Desert Power [The Stranger]

Etran de L’Aïr perform April 8 at Neumos. by Dave Segal

Not to get all chamber of commerce-y about it, but Seattle has played a crucial role in laying the foundation for Saharan rock’s current popularity. In the ’00s while based in the Emerald City, the esteemed global music label Sublime Frequencies issued transformative releases by Group Bombino, Group Doueh, and Koudede. Thus began the groundswell of Western interest in heat-hazed, mantric rock that’s imbued with the blues’ ability to transmute oppression into transcendent art.

But the real boom in guitar-centric African music occurred in the 2010s, when artists such as Bombino, Mdou Moctar, Tinariwen, Les Filles de Illighadad, and Tamikrest broke out into America’s live circuit. Etran de L’Aïr have joined these compelling musicians in the 21st century’s great Desert Rock Invasion.

Striking out from Agadez, Niger, Etran de L’Aïr (henceforth, EDL) consist of three brothers and a cousin: bassist Abdoulaye “Illa” Ibrahim, drummer Alghabid Ghabdouan, guitarist/vocalist Moussa “Abindi” Ibra, and guitarist/vocalist Abdourahamane “Allamine” Ibrahim.

They formed in 1995 as young lads (group leader Abindi was 9), playing Niger’s demanding wedding circuit and singing in Tamasheq, a language spoken mainly by nomadic tribes in North and West Africa. Very few Americans know Tamasheq, which could be considered an impediment to enjoyment, but the grain and intensity of EDL’s vocals make it easy to understand the players’ profound joy and sadness.

According to EDL’s Portland-based label, Sahel Sounds, the members belonged to nomadic families that settled in Agadez after escaping the droughts of the 1970s. When they started the group, EDL only had one acoustic guitar and they’d thwack a calabash with a sandal for percussion. Before they attained American patronage, EDL would haul their own gear while on foot, sometimes traversing 25 kilometers (about 15 miles), to play free gigs.

Now three albums deep into their official music-biz career, EDL have adapted to this hemisphere’s protocols. That being said, their songs feel as if they are theoretically infinite and that they only truncate them into manageable durations to placate the demands and attention spans of the Western music industry. On their home turf, though, EDL have been known to play sets that would make Springsteen’s band look like slackers.

Saharan rock is a distant cousin of America’s desert rock, which arose in 1997 out of jam sessions manifested by stoner-rock behemoths Kyuss. While both strains of desert rock rely on repetition to drive home their incisive riffs, and both have their psychedelic moments, the American brand doesn’t tap into spirituality and strife like its African counterparts do—unless you count running out of marijuana and getting sunburned to be serious hardships.

With the 2018 debut album, No. 1, EDL established their galvanizing approach and have continued on that path with few deviations through 2022’s Agadez and 2024’s 100% Sahara Guitar. The opening track from No. 1, “Etran Hymne,” bears rough fidelity, but the guitars’ liquid gold tone is buoyed by beats that have a lopsided propulsion. What sounds like an agitated women’s choir ululates wildly, while the men sing in unison with poised defiance. That combo never gets old. On “Agrim Agadez,” the awkward beats clash with the coruscating guitar riffs. This is peak Saharan rock: roiling, trance-inducing juggernauts with intricately interlocking guitar motifs and massed vocals conveying indomitable joy among hardships that comfortable Westerners cannot fathom. “Hadija” conjures slow-rolling hypnosis with those mad lady trills in the background. Yes, there’s very little variation in the rhythms, but the guitar/bass/vocal interaction is often riotous.

Sophomore LP Agadez boasts fuller production, boosting the songs’ impact while avoiding slickness. “Imouwizla” instantly pleases with easy-rolling blues rock, albeit with that patented rhythm which feels as if you’re on a merry-go-round with a sputtering motor. The galloping and undulating rock of “Toubouk Ine Chihoussay” accrues an irrepressible momentum, with the main cyclical guitar riff positively spangling with euphoria. If EDL have a “hit” single, this is it. “Karade Marhane” is an outlier with its darker mode and coiled rhythm, but it’s still a trance-inducer. The album closes with “Tarha Warghey Ichile,” a celebratory banger that begins at a phenomenal velocity and then accelerates near the end. You can imagine this went down a storm at the many Nigerien weddings EDL played.

EDL’s latest album, 100% Sahara Guitar, begins auspiciously with “Ighre Massina,” in which ebullient vocals, tight, cyclical guitar riffs (Moussa and Allamine are the Tom Verlaine and Richard Lloyd of Africa), and ratatat drums that make you feel as if you’re running with one leg much shorter than the other. “Igrawahi” is EDL’s most laid-back song, and it’s nice to hear some variation in tempo and intensity. The singing is as gorgeous and yearning as the sparkling, mesmerizing guitars. In a better world, “Igrawahi” would be a smash hit. “Amidinine” rolls like a diamond-encrusted tank over dunes, unstoppable and glinting in the unforgiving sun.

As exhilarating as their recordings are, EDL are, by all reports, even more exciting live. They’re traveling over 7,000 miles to hit Seattle, so you’d best believe Etran de L’Aïr will bring the desert heat to zap your blues.

Etran de L’Aïr perform April 8 at Neumos, 7 pm, 21+. 

20:35

View From a Hotel Window, 3/31/25: Austin [Whatever]

The parking lot is nothing to write home about, but Austin generally is lovely and I’m glad to be here. Although I did just troll the Austinites on Bluesky:

Now that I'm here in Austin, I'm finally going to get myself some authentic Tex-Mex!

John Scalzi (@scalzi.com) 2025-03-31T18:21:14.768Z

Spoiler: I did not eat at Chipotle. I ate at a food truck down the road where I got a carnitas/kimchi fusion bowl. It was delicious and now I am very sleepy.

Austin! Tonight I am at Book People at 7pm. Please come see me, I wish to be seen by you.

Tomorrow: I’m at the Texas Library Association convention in Dallas, and unless you’re a Texas librarian, I’m unlikely to see you. But if you are a Texas librarian, perhaps I will see you there!

— JS

20:14

Page 6 [Flipside]

Page 6 is done.

Page 5 [Flipside]

Page 5 is done.

Page 4 [Flipside]

Page 4 is done.

Page 3 [Flipside]

Page 3 is done.

Page 2 [Flipside]

Page 2 is done.

Page 1 [Flipside]

Page 1 is done.

19:49

Poe Cameron [Penny Arcade]

The only time I ever use photomode is when I push whatever that button is on accident. The boss I'm fighting will freeze in place, no doubt as surprised as I am, and a ton of UI elements unrelated to boss killing will bloom all around him. Maybe he's surprised to learn that he is a character in a game at all; a mechanical speedbump on my ascent to martial excellence. It's rude in that context to go back as though nothing happened but once I figure out what button I pushed, you know, that's how it's gotta be.

18:42

The Top 42 Events in Seattle This Week: Mar 31–Apr 6, 2025 [The Stranger]

Remi Wolf, The Undisputable Champions of Comedy, and More
by EverOut Staff

We've taken stock of everything happening this week and distilled our findings into one handy guide, just for you. Read about all of our picks below, including events from Remi Wolf to Seattle Restaurant Week and from Janeane Garofalo to The Stranger Presents: The 2025 Undisputable Champions of Comedy!

MONDAY FILM

Goodbye Horses: The Many Lives of Q Lazzarus
The new documentary Goodbye Horses: The Many Lives of Q Lazzarus chronicles the life of Diane Luckey (aka Q Lazzarus), the singer behind the absolute banger "Goodbye Horses." The story goes like this: a 25-year-old Luckey was driving a yellow taxi in NYC when she picked up director Jonathan Demme and played her demo for him. Demme became infatuated with her androgynous vocals and cerebral new wave sound, using her music in three of his films—Married to the Mob, Silence of the Lambs, and Something Wild. After a brief stint with fame, Q vanished for more than two decades until she was recognized by documentarian Eva Aridjis in 2019. Don't miss a rare screening of the film followed by a Q&A with Aridjis. AV
(Here-After at the Crocodile, Belltown)

17:56

If one program blocks shutdown, then all programs block shutdown, revisited [The Old New Thing]

Some time ago, I noted that if one program blocks shutdown, then all programs block shutdown. Each program is asked in turn if they have any final words, and only after each program says that it’s finished do we ask the next program.

But what if we asked all the programs for their final words? After all, it’s frustrating to go through two shutdown confirmations from two programs, only to find that the question from the third program is one that you realize “Oh, right, I should send that unfinished email. I need to cancel shutdown.” If you could see all the questions at once, then you would see the third question right away and cancel shutdown without having to deal with the first two programs.

The problem with this design is that the current shutdown mechanism doesn’t have a way for the system to tell programs, “I know I asked you to say your final good-byes, and you’re in the middle of a dialog with the user, but I need you to cancel out of it right now because we’re not shutting down after all.”

That’s not to say that such a mechanism couldn’t be invented, but you’d have to deal with the adoption curve, because the feature doesn’t work until everybody supports it, and in practice, there will always be programs that don’t support it, either because it’s too hard to implement, or because the programs are no longer being maintained by their vendors.

Windows has instead been encouraging programs to dispense with the farewells entirely.

Programs written to the Universal Windows Platform, for example, never even get told that the system is shutting down. They are expected to autosave any relevant state whenever they receive a notification from the system that they are about to be suspended, and once suspended, the system is permitted to terminate the program without any further warning. And programs that adhere to the classic application model are encouraged to employ their own autosave/autorecover logic so that the user can shut down with a minimum of fuss.

I mean, when you power off your phone, you don’t get a barrage of apps asking you if you want to save. They just go away quietly, and when you launch them next time, they try to pick up where they left off.

In other words, instead of trying to make the shutdown problem easier to deal with, Windows is trying to make the shutdown problem go away.

The post If one program blocks shutdown, then <I>all</I> programs block shutdown, revisited appeared first on The Old New Thing.

Slog AM: Shooting at Rainier Beach Night Club, France Bars Marine Le Pen from Election, Israel Killed and Buried 15 Aide Workers in Mass Grave [The Stranger]

The Stranger's morning news roundup. by Nathalie Graham

Two Dead After Night Club Shooting: A security guard and another man were shot and killed outside Capri Bar and Restaurant, a hookah lounge in Rainier Beach. A different shooting occurred at this same lounge just a month ago. The recent violence draws fresh attention to new city council legislation that seeks to crack down on after-hours lounges that operate as private clubs, stay open past 2am, and aren't regulated the same way as typical bars and restaurants. Several recent Seattle-area shootings like the December International District shooting have occurred outside similar establishments. 

Shooting Near House Party: In the Tacoma area, two people are dead and four are injured after an early Saturday shooting near a house party. Multiple people called 911 when a fight broke out at the party. Police arrived about 30 seconds before the gunfire started. The victims were between 16 to 21 years old. 

Local Jurisdictions Need New Revenue: That's the subject line in the open letter to Gov. Bob Ferguson signed by 68 local officials across the Evergreen state. The letter calls on Ferguson to seek new progressive revenue options as budget deficits grow and federal cuts become imminent. Washington's regressive tax code means there isn't enough "funding for infrastructure, housing and human services, public health, and public safety" investments. The signers then list the measures they support including current bills in Olympia that would lift the 1 percent property tax cap, expand the sales tax to fund public safety programs, and more. Outgoing King County Executive Dow Constantine signed the letter, as did KC Exec hopeful Girmay Zahilay. King County Council Members Teresa Mosqueda, Rod Dembowski, and Jorge L. Barón also signed. The only Seattle City Council members to sign were Alexis Mercedes Rinck and Dan Strauss. Mayor Bruce Harrell, unsurprisingly, did not sign on. 

The Weather: I'll wager it'll rain today. And, you know what? I wager it'll rain tomorrow, too. April showers and all that. 

Must Be Nice: France's far-right party leader, Marine Le Pen, was barred from seeking office by a court due to embezzlement. The judge ruled Le Pen, as well as eight other people in her party and 12 who served as parliamentary aides, were embezzling public funds. Le Pen, the judge said, was "at the heart of 'a system' that her party used to siphon off EU parliament money," reports the Associated Press. Some worry this ruling is an overstep. I dunno, I think it's a good thing to prevent criminals from taking political control of a country and burning it to the ground for their own gain. 

France raises a fascinating hypothetical point: what if the law still exists even if people might get mad at you

— Ian Boudreau (@ianboudreau.com) March 31, 2025 at 5:55 AM

Musk Gives Out His Million Dollar Checks: Ahead of the Wisconsin Supreme Court election, which could change the makeup of the highest legal body in a battleground state, Elon Musk gave two $1 million checks to two Wisconsin voters at a rally for the conservative candidate. Musk and groups he's affiliated with have spent $20 million to get this guy elected ahead of a year where the Wisconsin Supreme Court—where liberals currently hold a 4-3 majority—will consider legislation on "abortion rights, congressional redistricting, union power, and voting rules." The current Supreme Court declined to hear a case that objected to Musk's political interference ahead of the event. 

Myanmar Quake Kills Over 1,700: Friday's quake in Myanmar and neighboring Thailand caused devastation. Though the death tolls are already high, prediction models expect deaths could exceed 10,000. Buildings collapsed throughout Myanmar. Many people are believed to still be trapped under the rubble. A woman was pulled out from under a collapsed hotel after 60 hours. She was alive

The Stock Market Hates Trump: Trump's beloved stock market keeps on plummeting. In the wake of his recent announcement that he would level tariffs on imports from all countries, the stock market hit its lowest point since 2022. The value of the US dollar also decreased 3.5 percent this month thanks to Trump's global trade buffoonery. Meanwhile, the value of gold keeps on climbing as investors look for something—anything—safe to invest in. Goldman Sachs believes there's a 35 percent chance that the US enters a recession in the next 12 months. 

See? You Don't Need Musk's Blood Money: All you need is 88 cents and a dream. Last week, a gambler at the Mardi Gras-themed Orleans Hotel & Casino about two miles off the Las Vegas Strip bet 88 cents on a slot machine and won $19,627.01

Tensions are high: The Pistons and the Timberwolves got into a tussle last night. Five players and two coaches were ejected from the game. In case you want to watch seven minutes of grown men fighting each other, here you go: 

International Students Asked to Self-Deport: An email from the Department of Defense to certain student-visa holders in the US notified them that their F-1 visa had been revoked and that they should voluntarily leave the country. Allegedly, the students getting these emails participated in campus activism or showed social media activity—things as small as liking a political post the Trump administration considers unsavory—critical of those in power. Immigration attorneys say impacted students should seek legal representation. 

Aide Worker Mass Grave in Gaza: Last week, aide group Palestine Red Crescent Society said nine of its emergency medical technicians had been missing for days after Israeli forces opened fire on ambulances and fire trucks near southern Rafah. Israel said the ambulances and fire trucks were "being used as cover by Hamas and Palestinian Islamic Jihad militants." The United Nation’s Office for the Coordination of Humanitarian Affairs unearthed the missing humanitarian aides alongside their missing vehicles and six other aide workers using bulldozers and heavy machinery. They had been buried in what the UN called a mass grave. 

Seems Like a Red Flag? Trump keeps refusing to say whether he'll leave office after his second term—which, you know, is unconstitutional. He said he wasn't joking about seeking a third term and that there are "methods" to make it happen. 

I'm sorry to report we are actually not saving the bees. Honeybee deaths in the US have reached record highs. Scientists don't know what's causing it. 

A Song for Your Monday: Do you like 1970s German electronic music? Good, I have just the ditty for you.

17:07

Nova Custom: this week’s sponsor [OSnews]

Nova Custom, based in The Netherlands, makes laptops focused on privacy, customisation, and freedom. Nova Custom laptops ship with either Linux, Windows, or no operating system, and they’re uniquely certified for Qubes OS (the V54 model will be certified soon), the ultra-secure and private operating system. On top of that, Nova Custom laptops come with Dasharo coreboot firmware preinstalled, which is completely open source, instead of a proprietary BIOS. Nova Custom can also disable the Intel Management Engine for you, and you can opt for Dasharo coreboot+Heads for the ultimate in boot security.

Nova Custom offers visual customisations, too, including engraving a logo or text of your choice on the metal screen lid and/or palmrest and adding your own boot logo. They also offer privacy customisations like removing the microphone and webcam, installing a privacy screen, and more. A small touch I personally appreciate: Nova Custom offers a long, long list of keyboard layouts, as well as the option to customise the super key. Nova Custom products enjoy 3 years of warranty, as well as updates and spare parts for at least seven years after the launch of a product, which includes everything from motherboard replacements down to sets of screws.

Nova Custom laptops can be configured with a wide variety of Intel processor options, as well as a choice between integrated Intel GPUs or Nvidia laptop GPUs. Thanks to Nova Custom for sponsoring OSNews!

16:35

[$] A herd of migration discussions [LWN.net]

Migration is the act of moving data from one location in physical memory to another. The kernel may migrate pages for many reasons, including defragmentation, improving NUMA locality, moving data to or from memory hosted on a peripheral device, or freeing a range of memory for other uses. Given the importance of migration to the memory-management subsystem, there is a lot of interest in improving its performance and removing impediments to its success. Several sessions in the memory-management track of the 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit were dedicated to this topic.

15:14

Link [Scripting News]

Bluesky is today brimming with irreverance.

Link [Scripting News]

When Apple bought NeXT, it wasn't long before we understood that it was the other way around.

Link [Scripting News]

Great artists, before they die, should share their secrets, so the next generation can be even greater.

More ChatGPT fun [Scripting News]

Yesterday I uploaded an image of a pizza pie, in a New York pizzeria, with a couple dressed in evening clothes with a NYC cop and off-duty sanitation worker lurking in the background.

Paolo Valdemarin writes from London, "Have you tried adding more images to a prompt? From my experiments it can easily keep 'in mind' five different images and mix them. You can get a bunch of people sitting in the same room, with a very detailed version of the room." He sent two examples which are somewhat embarrassing, but you'll probably enjoy them. :-)

First, he uploaded my profile picture from Facebook. And asked ChatGPT to add me to the picture and then to "sit him next to the couple, with both of them kissing him on the cheek, and as you can see ChatGPT complied!

Facebook profile picture.
Original pizzeria.
Dave inserted.
Awwww.

15:07

[$] Fedora change aims for 99% package reproducibility [LWN.net]

The effort to ensure that open-source software is reproducible has been gathering steam over the years, and gaining traction with major Linux distributions. Debian, for example, has been working toward reproducible builds for more than a decade; it can now produce official live CDs of the current stable release that are reproducible. Fedora started on the path much later, but it has progressed far enough that the project is now considering a change proposal for the Fedora 43 development cycle, expected to be released in October, with a goal of making 99% of Fedora's package builds reproducible. So far, reaction to the proposal seems favorable and focused primarily on how to achieve the goal—with minimal pain for packagers—rather than whether to attempt it.

Security updates for Monday [LWN.net]

Security updates have been issued by Debian (amd64-microcode, flatpak, intel-microcode, libdata-entropy-perl, librabbitmq, and vim), Fedora (augeas, containerd, crosswords-puzzle-sets-xword-dl, libssh2, libxml2, nodejs-nodemon, and webkitgtk), Red Hat (libreoffice and python-jinja2), SUSE (389-ds, apparmor, corosync, docker, docker-stable, erlang26, exim, ffmpeg-4, govulncheck-vulndb, istioctl, matrix-synapse, mercurial, openvpn, python3, rke2, and skopeo), and Ubuntu (ansible, linux, linux-hwe-5.4, linux-azure, linux-azure-5.4, linux-bluefield, linux-gcp, linux-gcp-5.4, linux-ibm, linux-kvm, linux-oracle, linux-oracle-5.4, linux-xilinx-zynqmp, linux-azure-fips, linux-gcp-fips, linux-fips, linux-fips, linux-aws-fips, linux-azure-fips, linux-gcp-fips, linux-nvidia-tegra, linux-nvidia-tegra-igx, linux-realtime, linux-intel-iot-realtime, linux-xilinx-zynqmp, opensc, and ruby-doorkeeper).

14:21

Pluralistic: Private-sector Trumpism (31 Mar 2025) [Pluralistic: Daily links from Cory Doctorow]


Today's links



The Las Vegas Sphere as seen by night, with the lights of Vegas behind it. The Sphere itself has been replaced with the glaring red eye of HAL 9000 from Kubrick's '2001: A Space Odyssey,' and centered on it is a Madison Square Garden logo. The Sphere has been topped with Trump's hair.

Private-sector Trumpism (permalink)

Trumpism is a mixture of grievance, surveillance, and pettiness: "I will never forgive your mockery, I have records of you doing it, and I will punish you and everyone who associates with you for it." Think of how he's going after the (cowardly) BigLaw firms:

https://abovethelaw.com/2025/03/skadden-makes-100-million-settlement-with-trump-in-pro-bono-payola/

Trump is the realization of decades of warning about ubiquitous private and public surveillance – that someday, all of this surveillance would be turned to the systematic dismantling of human rights and punishing of dissent.

23 years ago, I was staying in London with some friends, scouting for a flat to live in. After at day in town, I came back and we ordered a curry and had a nice chat. I mentioned how discomfited I'd been by all the CCTV cameras that had sprouted at the front of every private building, to say nothing of all the public cameras installed by local councils and the police. My friend dismissed this as a kind of American, hyper-individualistic privacy purism, explaining that these cameras were there for public safety – to catch flytippers, vandals, muggers, boy racers tearing unsafely through the streets. My fear about having my face captured by all these cameras was little more than superstitious dread. It's not like they were capturing my soul.

Now, I knew that my friend had recently marched in one of the massive demonstrations against Bush and Blair's illegal invasion plans for Iraq. "Look," I said, "you marched in the street to stand up and be counted. But even so, how would you have felt if – as a condition of protesting – you were forced to first record your identity in a government record-book?" My friend had signed petitions, he'd marched in the street, but even so, he had to admit that there would be some kind of chilling effect if your identity had to be captured as a condition of participating in public political events.

Trump has divided the country into two groups of people: "citizens" (who are sometimes only semi-citizens) and immigrants (who have no rights):

https://crookedtimber.org/2025/03/29/trumps-war-on-immigrants-is-the-cancellation-of-free-society/#fn-53926-1

Trump has asserted that he can arrest and deport immigrants (and some semi-citizens) for saying things he doesn't like, or even liking social media posts he disapproves of. He's argued that he can condemn people to life in an offshore slave-labor camp if he doesn't like their tattoos. It is tyranny, built on ubiquitous surveillance, fueled by spite and grievance.

One of Trumpism's most important tenets is that private institutions should have the legal right to discriminate against minorities that he doesn't like. For example, he's trying to end the CFPB's enforcement action against Townstone, a mortgage broker that practiced rampant racial discrimination:

https://prospect.org/justice/2025-03-28-trump-scrambles-pardon-corporate-criminals-townstone-boeing-cfpb/

By contrast, Trump abhors the idea that private institutions should be allowed to discriminate against the people he likes, hence his holy war against "DEI":

https://www.cnbc.com/2025/03/29/trump-administration-warns-european-companies-to-comply-with-anti-dei-order.html

This is the crux of Wilhoit's Law, an important and true definition of "conservativism":

Conservatism consists of exactly one proposition, to wit: There must be in-groups whom the law protectes but does not bind, alongside out-groups whom the law binds but does not protect.

https://crookedtimber.org/2018/03/21/liberals-against-progressives/#comment-729288

Wilhoit's definition is an important way of framing how conservatives view the role of the state. But there's another definition I like, one that's more about how we relate to one-another, which I heard from Steven Brust: "Ask, 'What's more important: human rights or property rights?' Anyone who answers 'property rights are human rights' is a conservative."

Thus the idea that a mortgage broker or an employer or a banker or a landlord should be able to discriminate against you because of the color of your skin, your sexual orientation, your gender, or your beliefs. If "property rights are human rights," then the human right not to rent to a same-sex couple is co-equal with the couple's human right to shelter.

The property rights/human rights distinction isn't just a way to cleave right from left – it's also a way to distinguish the left from liberals. Liberals will tell you that 'it's not censorship if it's done privately' – on the grounds that private property owners have the absolute right to decide which speech they will or won't permit. Charitably, we can say that some of these people are simply drawing a false equivalence between "violating the First Amendment" and "censorship":

https://pluralistic.net/2022/12/04/yes-its-censorship/

But while private censorship is often less consequential than state censorship, that isn't always true, and even when it is, that doesn't mean that private censorship poses no danger to free expression.

Consider a thought experiment in which a restaurant chain called "No Politics At the Dinner Table Cafe" buys up every eatery in town, and then maintains its monopoly by sewing up exclusive deals with local food producers, and then expands into babershops, taxis and workplace cafeterias, enforcing a rule in all these spaces that bans discussions of politics:

https://locusmag.com/2020/01/cory-doctorow-inaction-is-a-form-of-action/

Here we see how monopoly, combined with property rights, creates a system of censorship that is every bit as consequential as a government rule. And if all of those facilities were to add AI-backed cameras and mics that automatically monitored all our conversations for forbidden political speech, then surveillance would complete the package, yielding private censorship that is effectively indistinguishable from government censorship – with the main difference being that the First Amendment permits the former and prohibits the latter.

The fear that private wealth could lead to a system of private rule has been in America since its founding, when Benjamin Franklin tried (unsuccessfully) to put a ban on monopolies into the US Constitution. A century later, Senator John Sherman wrote the Sherman Act, the first antitrust bill, defending it on the Senate floor by saying:

If we would not submit to an emperor we should not submit to an autocrat of trade.

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

40 years ago, neoliberal economists ended America's century-long war on monopolies, declaring monopolies to be "efficient" and convincing Carter, then Reagan, then all their successors (except Biden) to encourage monopolies to form. The US government all but totally suspended enforcement of its antitrust laws, permitting anticompetitive mergers, predatory pricing, and illegal price discrimination. In so doing, they transformed America into a monopolist's playground, where versions of the No Politics At the Dinner Table Cafe have conquered every sector of our economy:

https://www.openmarketsinstitute.org/learn/monopoly-by-the-numbers

This is especially true of our speech forums – the vast online platforms that have become the primary means by which we engage in politics, civics, family life, and more. These platforms are able to decide who may speak, what they may say, and what we may hear:

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

These platforms are optimized for mass surveillance, and, when coupled with private sector facial recognition databases, it is now possible to realize the nightmare scenario I mooted in London 23 years ago. As you move through both the virtual and physical world, you can be identified, your political speech can be attributed to you, and it can be used as a basis for discrimination against you:

https://pluralistic.net/2023/09/20/steal-your-face/#hoan-ton-that

This is how things work at the US border, of course, where border guards are turning away academics for having anti-Trump views:

https://www.nytimes.com/2025/03/20/world/europe/us-france-scientist-entry-trump-messages.html

It's not just borders, though. Large, private enterprises own large swathes of our world. They have the unlimited property right to exclude people from their properties. And they can spy on us as much as they want, because it's not just antitrust law that withered over the past four decades, it's also privacy law. The last consumer privacy law Congress bestirred itself to pass was 1988's "Video Privacy Protection Act," which bans video-store clerks from disclosing your VHS rentals. The failure to act on privacy – like the failure to act on monopoly – has created a vacuum that has been filled up with private power. Today, it's normal for your every action – every utterance, every movement, every purchase – to be captured, stored, combined, analyzed, and, of course sold.

With vast property holdings, total property rights, and no privacy law, companies have become the autocrats of trade, able to regulate our speech and association in ways that can no longer be readily distinguished state conduct that is at least theoretically prohibited by the First Amendment.

Take Madison Square Garden, a corporate octopus that owns theaters, venues and sport stadiums and teams around the country. The company is notoriously vindictive, thanks to a spate of incidents in which the company used facial recognition cameras to bar anyone who worked at a law-firm that was suing the company from entering any of its premises:

https://www.nytimes.com/2022/12/22/nyregion/madison-square-garden-facial-recognition.html

This practice was upheld by the courts, on the grounds that the property rights of MSG trumped the human rights of random low-level personnel at giant law firms where one lawyer out of thousands happened to be suing the company:

https://www.nbcnewyork.com/news/local/madison-square-gardens-ban-on-lawyers-suing-them-can-remain-in-place-court-rules/4194985/

Take your kid's Girl Scout troop on an outing to Radio City Music Hall? Sure, just quit your job and go work for another firm.

But that was just for starters. Now, MSG has started combing social media to identify random individuals who have criticized the company, and has added their faces to the database of people who can't enter their premises. For example, a New Yorker named Frank Miller has been banned for life from all MSG properties because, 20 years ago, he designed a t-shirt making fun of MSG CEO James Dolan:

https://www.theverge.com/news/637228/madison-square-garden-james-dolan-facial-recognition-fan-ban

This is private-sector Trumpism, and it's just getting started.

Take hotels: the entire hotel industry has collapsed into two gigachains: Marriott and Hilton. Both companies are notoriously bad employers and at constant war with their unions (and with nonunion employees hoping to unionize in the face of flagrant, illegal union-busting). If you post criticism online of both hotel chains for hiring scabs, say, and they add you to a facial recognition blocklist, will you be able to get a hotel room?

After more than a decade of Uber and Lyft's illegal predatory pricing, many cities have lost their private taxi fleets and massively disinvested in their public transit. If Uber and Lyft start compiling dossiers of online critics, could you lose the ability to get from anywhere to anywhere, in dozens of cities?

Private equity has rolled up pet groomers, funeral parlors, and dialysis centers. What happens if the PE barons running those massive conglomerates decide to exclude their critics from any business in their portfolio? How would it feel to be shut out of your mother's funeral because you shit-talked the CEO of Foundation Partners Group?

https://kffhealthnews.org/news/article/funeral-homes-private-equity-death-care/

More to the point: once this stuff starts happening, who will dare to criticize corporate criminals online, where their speech can be captured and used against them, by private-sector Trumps armed with facial recognition and the absurd notion that property rights aren't just human rights – they're the ultimate human rights?

The old fears of Benjamin Franklin and John Sherman have come to pass. We live among autocrats of trade, and don't even pretend the Constitution controls what these private sector governments can do to us.

(Image: Cryteria, CC BY 3.0, modified)


Hey look at this (permalink)



A Wayback Machine banner.

Object permanence (permalink)

#15yrsago Why I won’t buy an iPad (and think you shouldn’t, either) https://memex.craphound.com/2010/04/01/why-i-wont-buy-an-ipad-and-think-you-shouldnt-either/

#5yrsago Solar as a beneficial fad https://pluralistic.net/2020/04/01/pluralistic:-01-apr-2020/#pv-or-bust

#5yrsago American employment exceptionalism https://pluralistic.net/2020/04/01/pluralistic:-01-apr-2020/#usausausa

#5yrsago Tiktok Kremlinology https://pluralistic.net/2020/04/01/pluralistic:-01-apr-2020/#going-pandemic

#5yrsago Alteon cuts covid-fighters' pay https://pluralistic.net/2020/04/01/pluralistic:-01-apr-2020/#private-equity

#5yrsago Snowden's Box https://pluralistic.net/2020/04/01/pluralistic:-01-apr-2020/#94-1054-Eleu-St

#1yrago Humans are not perfectly vigilant https://pluralistic.net/2024/04/01/human-in-the-loop/#monkey-in-the-middle


Upcoming appearances (permalink)

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


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)

  • Enshittification: Why Everything Suddenly Got Worse and What to Do About It, Farrar, Straus, Giroux, October 7 2025
    https://us.macmillan.com/books/9780374619329/enshittification/
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2026

  • Enshittification, Why Everything Suddenly Got Worse and What to Do About It (the graphic novel), Firstsecond, 2026

  • The Memex Method, Farrar, Straus, Giroux, 2026



Colophon (permalink)

Today's top sources: Slashdot (https://slashdot.org/).

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Status: second pass edit underway (readaloud)
  • A Little Brother short story about DIY insulin PLANNING

  • Picks and Shovels, a Martin Hench noir thriller about the heroic era of the PC. FORTHCOMING TOR BOOKS FEB 2025

Latest podcast: Why I don't like AI art https://craphound.com/news/2025/03/30/why-i-dont-like-ai-art/


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

ISSN: 3066-764X

13:42

Link [Scripting News]

There's now a home page for Radio Free America. Once we have more feeds, the home page will be a timeline of news that can be acessed outside of Bluesky. Please subscribe now, and help spread the word. Via the dynamic OPML file that's publicly available there can be many such pages on the open web.

13:14

Russell Coker: Links March 2025 [Planet Debian]

Anarcat’s review of Fish is interesting and shows some benefits I hadn’t previously realised, I’ll have to try it out [1].

Longnow has an insightful article about religion and magic mushrooms [2].

Brian Krebs wrote an informative artivle about DOGE and the many security problems that it has caused to the US government [3].

Techdirt has an insightful article about why they are forced to become a democracy blog after the attacks by Trump et al [4].

Antoine wrote an insightful blog post about the war for the Internet and how in many ways we are losing to fascists [5].

Interesting story about people working for free at Apple to develop a graphing calculator [6]. We need ways for FOSS people to associate to do such projects.

Interesting YouTube video about a wiki for building a cheap road legal car [7].

Interesting video about powering spacecraft with Plutonion 238 and how they are running out [8].

Interesting information about the search for mh370 [9]. I previously hadn’t been convinced that it was hijacked but I am now.

The EFF has an interesting article about the Rayhunter, a tool to detect cellular spying that can run with cheap hardware [10].

12:56

CodeSOD: Nobody's BFF [The Daily WTF]

Legacy systems are hard to change, and even harder to eliminate. You can't simply do nothing though; as technology and user expectations change, you need to find ways to modernize and adapt the legacy system.

That's what happened to Alicia's team. They had a gigantic, spaghetti-coded, monolithic application that was well past drinking age and had a front-end to match. Someone decided that they couldn't touch the complex business logic, but what they could do was replace the frontend code by creating an adapter service; the front end would call into this adapter, and the adapter would execute the appropriate methods in the backend.

Some clever coder named this "Backend for Frontend" or "BFF".

It was not anyone's BFF. For starters, this system didn't actually allow you to just connect a UI to the backend. No, that'd be too easy. This system was actually a UI generator.

The way this works is that you feed it a schema file, written in JSON. This file specifies what input elements you want, some hints for layout, what validation you want the UI to perform, and even what CSS classes you want. Then you compile this as part of a gigantic .NET application, and deploy it, and then you can see your new UI.

No one likes using it. No one is happy that it exists. Everyone wishes that they could just write frontends like normal people, and not use this awkward schema language.

All that is to say, when Alicia's co-worker stood up shortly before lunch, said, "I'm taking off the rest of the day, BFF has broken me," it wasn't particularly shocking to hear- or even the first time that'd happened.

Alicia, not heeding the warning inherent in that statement, immediately tracked down that dev's last work, and tried to understand what had been so painful.

    "minValue": 1900,
    "maxValue": 99,

This, of course, had to be a bug. Didn't it? How could the maxValue be lower than the minValue?

Let's look at the surrounding context.

{
    "type": "eventValueBetweenValuesValidator",
    "eventType": "CalendarYear",
    "minValue": 1900,
    "maxValue": 99,
    "isCalendarBasedMaxValue": true,
    "message": "CalendarYear must be between {% raw %}{{minValue}}{% endraw %} and {% raw %}{{maxValue}}{% endraw %}."
}

I think this should make it perfectly clear what's happening. Oh, it doesn't? Look at the isCalendarBasedMaxValue field. It's true. There, that should explain everything. No, it doesn't? You're just more confused?

The isCalendarBasedMaxValue says that the maxValue field should not be treated as a literal value, but instead, is the number of years in the future relative to the current year which are considered valid. This schema definition says "accept all years between 1900 and 2124 (at the time of this writing)." Next year, that top value goes up to 2125. Then 2126. And so on.

As features go, it's not a terrible feature. But the implementation of the feature is incredibly counter-intuitive. At the end of the day, this is just bad naming: (ab)using min/max to do something that isn't really a min/max validation is the big issue here.

Alicia writes:

I couldn't come up with something more counterintuitive if I tried.

Oh, don't sell yourself short, Alicia. I'm sure you could write something far, far worse if you tried. The key thing here is that clearly, nobody tried- they just sorta let things happen and definitely didn't think too hard about it.

[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:07

The Signal Chat Leak and the NSA [Schneier on Security]

US National Security Advisor Mike Waltz, who started the now-infamous group chat coordinating a US attack against the Yemen-based Houthis on March 15, is seemingly now suggesting that the secure messaging service Signal has security vulnerabilities.

"I didn’t see this loser in the group," Waltz told Fox News about Atlantic editor in chief Jeffrey Goldberg, whom Waltz invited to the chat. "Whether he did it deliberately or it happened in some other technical mean, is something we’re trying to figure out."

Waltz’s implication that Goldberg may have hacked his way in was followed by a report from CBS News that the US National Security Agency (NSA) had sent out a bulletin to its employees last month warning them about a security "vulnerability" identified in Signal.

The truth, however, is much more interesting. If Signal has vulnerabilities, then China, Russia, and other US adversaries suddenly have a new incentive to discover them. At the same time, the NSA urgently needs to find and fix any vulnerabilities quickly as it can—and similarly, ensure that commercial smartphones are free of backdoors—access points that allow people other than a smartphone’s user to bypass the usual security authentication methods to access the device’s contents.

That is essential for anyone who wants to keep their communications private, which should be all of us.

It’s common knowledge that the NSA’s mission is breaking into and eavesdropping on other countries’ networks. (During President George W. Bush’s administration, the NSA conducted warrantless taps into domestic communications as well—surveillance that several district courts ruled to be illegal before those decisions were later overturned by appeals courts. To this day, many legal experts maintain that the program violated federal privacy protections.) But the organization has a secondary, complementary responsibility: to protect US communications from others who want to spy on them. That is to say: While one part of the NSA is listening into foreign communications, another part is stopping foreigners from doing the same to Americans.

Those missions never contradicted during the Cold War, when allied and enemy communications were wholly separate. Today, though, everyone uses the same computers, the same software, and the same networks. That creates a tension.

When the NSA discovers a technological vulnerability in a service such as Signal (or buys one on the thriving clandestine vulnerability market), does it exploit it in secret, or reveal it so that it can be fixed? Since at least 2014, a US government interagency "equities" process has been used to decide whether it is in the national interest to take advantage of a particular security flaw, or to fix it. The trade-offs are often complicated and hard.

Waltz—along with Vice President J.D. Vance, Defense Secretary Pete Hegseth, and the other officials in the Signal group—have just made the trade-offs much tougher to resolve. Signal is both widely available and widely used. Smaller governments that can’t afford their own military-grade encryption use it. Journalists, human rights workers, persecuted minorities, dissidents, corporate executives, and criminals around the world use it. Many of these populations are of great interest to the NSA.

At the same time, as we have now discovered, the app is being used for operational US military traffic. So, what does the NSA do if it finds a security flaw in Signal?

Previously, it might have preferred to keep the flaw quiet and use it to listen to adversaries. Now, if the agency does that, it risks someone else finding the same vulnerability and using it against the US government. And if it was later disclosed that the NSA could have fixed the problem and didn’t, then the results might be catastrophic for the agency.

Smartphones present a similar trade-off. The biggest risk of eavesdropping on a Signal conversation comes from the individual phones that the app is running on. While it’s largely unclear whether the US officials involved had downloaded the app onto personal or government-issued phones—although Witkoff suggested on X that the program was on his "personal devices"—smartphones are consumer devices, not at all suitable for classified US government conversations. An entire industry of spyware companies sells capabilities to remotely hack smartphones for any country willing to pay. More capable countries have more sophisticated operations. Just last year, attacks that were later attributed to China attempted to access both President Donald Trump and Vance’s smartphones. Previously, the FBI—as well as law enforcement agencies in other countries—have pressured both Apple and Google to add "backdoors" in their phones to more easily facilitate court-authorized eavesdropping.

These backdoors would create, of course, another vulnerability to be exploited. A separate attack from China last year accessed a similar capability built into US telecommunications networks.

The vulnerabilities equities have swung against weakened smartphone security and toward protecting the devices that senior government officials now use to discuss military secrets. That also means that they have swung against the US government hoarding Signal vulnerabilities—and toward full disclosure.

This is plausibly good news for Americans who want to talk among themselves without having anyone, government or otherwise, listen in. We don’t know what pressure the Trump administration is using to make intelligence services fall into line, but it isn’t crazy to worry that the NSA might again start monitoring domestic communications.

Because of the Signal chat leak, it’s less likely that they’ll use vulnerabilities in Signal to do that. Equally, bad actors such as drug cartels may also feel safer using Signal. Their security against the US government lies in the fact that the US government shares their vulnerabilities. No one wants their secrets exposed.

I have long advocated for a "defense dominant" cybersecurity strategy. As long as smartphones are in the pocket of every government official, police officer, judge, CEO, and nuclear power plant operator—and now that they are being used for what the White House now calls calls  "sensitive," if not outright classified conversations among cabinet members—we need them to be as secure as possible. And that means no government-mandated backdoors.

We may find out more about how officials—including the vice president of the United States—came to be using Signal on what seem to be consumer-grade smartphones, in a apparent breach of the laws on government records. It’s unlikely that they really thought through the consequences of their actions.

Nonetheless, those consequences are real. Other governments, possibly including US allies, will now have much more incentive to break Signal’s security than they did in the past, and more incentive to hack US government smartphones than they did before March 24.

For just the same reason, the US government has urgent incentives to protect them.

This essay was originally published in Foreign Policy.

11:28

Grrl Power #1343 – Parting is such and such [Grrl Power]

Sciona definitely controls the senator, and the senator does sit on the committee that deals with Archon’s budget, but that doesn’t exactly give her much power over Archon. Not that she is necessarily gunning for them directly, anyway. Well, she might be, but trying to cut their discretionary budget 15% over the next five years is hardly the kind of slam dunk she’s looking for. She just put herself where she is because anyone who has access to military budgeting can probably get away with a lot.

Lorlara is fun to write, but god, she would be exhausting to be around for any extended length of time. I do kind of feel like doing a few comics in the vein of “A day in the life of…” about her though. Or maybe just the Galytn crew in general. Hmm.

I drew Deus way too big there. He looks like he’s pushing 6’11” or something. He’s supposed to be 6’4.” Oh well.

I’d originally intended that this page would be my stick figure page since I did this one the same week of the move, but I didn’t quite manage to make myself do stick figures, so instead it’s… this. It’s not my favorite art. You know, you see sketchy, loose art that still has a sense of style to it and you think, that looks like someone drew it in 5 minutes. Sure. If that’s their regular style. If it isn’t, then capturing that almost spontaneous, free feeling takes a surprising amount of work. Oy.

Anyway, we’re “moved in” in that the stuff that came with us in the 27 foot truck is mostly unpacked and distributed around the house. Now I just have to deal with the remnants of me and my wife’s house – all the major furniture is out, but I’m still not set back up with my usual drawing setup. I’ve got my computer and several extra screens moved over, but the array of desks I ensconce myself in is still over at my old house. I’ll show you a setup when I get it all, well, set up here. It’s fairly elaborate. I also have two 16′ POD containers to deal with. I have a feeling I won’t actually be able to park our cars in the garage for at least 6 months while we sort everything out. The new house is actually a bit larger than my parent’s old house, square footage wise, but every room in the old house had a walk in closet. Even the front office. (In American real estate terms, any room with a window and a closet is technically considered a bedroom.) In my personal terms, there has to be a closet and carpeting. I know you can put a rug down, but we passed on one of the houses we were considering because the master had finished, hard floors. My mom is a fall risk, and no way am I putting her in an uncarpeted bedroom.

I tell you what spending the last 2-3 months looking at houses has done to me though. It’s made me want to design houses. I just don’t understand some design choices that people make. Like every house we looked at was basically fine except for one stupid architectural choice. Yes, the houses I design would probably be a touch boring, architecturally, but they would be functional. Also probably a bit on the large side, if I’m honest. I like walk in closets. I don’t even have that much clothing, but I’ve lived in enough apartments and houses with those shitty bifold closet doors and closets that are 2′ by 5′ to know that I want some storage space.


I’m going to try something with this new vote incentive.

This month, I’m closing on a new house, selling my Mom’s house, finishing packing Mom’s house, moving city to city to the new house, forwarding mail, canceling utilities, all that. And after that’s done, I get to start the process of selling my old house, which needs a little work before it can realistically go on the market.

SO. I’m going to try and do this vote incentive in stages. Currently it’s just pencils. The TopWebcomics one will update with colors and detail until we get to the no clothes versions, then that will continue over at Patreon. Also there will be a comic or two in between each version to fill out the story.

I know it’s hard to tell from just the pencils, but this is Heatwave and Jiggawatt. The comics will explain why they’re doing what they’re doing. Although I feel like even saying that much makes it easy to guess, but hopefully the journey will still amuse.


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

10:28

Division is easier than connection [Seth's Blog]

But connection is where the value lies.

Connected, resilient communities create possibility and forward motion.

Division is satisfying in the short run, and it might even draw a crowd. But the only useful reason to disconnect is if it opens up the chance to increase connection somewhere else.

10:07

Simon Josefsson: On Binary Distribution Rebuilds [Planet Debian]

I rebuilt (the top-50 popcon) Debian and Ubuntu packages, on amd and arm64, and compared the results a couple of months ago. Since then the Reproduce.Debian.net effort has been launched. Unlike my small experiment, that effort is a full-scale rebuild with more architectures. Their goal is to reproduce what is published in the Debian archive.

One differences between these two approaches are the build inputs: The Reproduce Debian effort use the same build inputs which were used to build the published packages. I’m using the latest version of published packages for the rebuild.

What does that difference imply? I believe reproduce.debian.net will be able to reproduce more of the packages in the archive. If you build a C program using one version of GCC you will get some binary output; and if you use a later GCC version you are likely to end up with a different binary output. This is a good thing: we want GCC to evolve and produce better output over time. However it means in order to reproduce the binaries we publish and use, we need to rebuild them using whatever build dependencies were used to prepare those binaries. The conclusion is that we need to use the old GCC to rebuild the program, and this appears to be the Reproduce.Debian.Net approach.

It would be a huge success if the Reproduce.Debian.net effort were to reach 100% reproducibility, and this seems to be within reach.

However I argue that we need go further than that. Being able to rebuild the packages reproducible using older binary packages only begs the question: can we rebuild those older packages? I fear attempting to do so ultimately leads to a need to rebuild 20+ year old packages, with a non-negligible amount of them being illegal to distribute or are unable to build anymore due to bit-rot. We won’t solve the Trusting Trust concern if our rebuild effort assumes some initial binary blob that we can no longer build from source code.

I’ve made an illustration of the effort I’m thinking of, to reach something that is stronger than reproducible rebuilds. I am calling this concept a Idempotent Rebuild, which is an old concept that I believe is the same as John Gilmore has described many years ago.

The illustration shows how the Debian main archive is used as input to rebuild another “stage #0” archive. This stage #0 archive can be compared with diffoscope to the main archive, and all differences are things that would be nice to resolve. The packages in the stage #0 archive is used to prepare a new container image with build tools, and the stage #0 archive is used as input to rebuild another version of itself, called the “stage #1” archive. The differences between stage #0 and stage #1 are also useful to analyse and resolve. This process can be repeated many times. I believe it would be a useful property if this process terminated at some point, where the stage #N archive was identical to the stage #N-1 archive. If this would happen, I label the output archive as an Idempotent Rebuild of the distribution.

How big is N today? The simplest assumption is that it is infinity. Any build timestamp embedded into binary packages will change on every iteration. This will cause the process to never terminate. Fixing embedded timestamps is something that the Reproduce.Debian.Net effort will also run into, and will have to resolve.

What other causes for differences could there be? It is easy to see that generally if some output is not deterministic, such as the sort order of assembler object code in binaries, then the output will be different. Trivial instances of this problem will be caught by the reproduce.debian.net effort as well.

Could there be higher order chains that lead to infinite N? It is easy to imagine the existence of these, but I don’t know how they would look like in practice.

An ideal would be if we could get down to N=1. Is that technically possible? Compare building GCC, it performs an initial stage 0 build using the system compiler to produce a stage 1 intermediate, which is used to build itself again to stage 2. Stage 1 and 2 is compared, and on success (identical binaries), the compilation succeeds. Here N=2. But this is performed using some unknown system compiler that is normally different from the GCC version being built. When rebuilding a binary distribution, you start with the same source versions. So it seems N=1 could be possible.

I’m unhappy to not be able to report any further technical progress now. The next step in this effort is to publish the stage #0 build artifacts in a repository, so they can be used to build stage #1. I already showed that stage #0 was around ~30% reproducible compared to the official binaries, but I didn’t save the artifacts in a reusable repository. Since the official binaries were not built using the latest versions, it is to be expected that the reproducibility number is low. But what happens at stage #1? The percentage should go up: we are now compare the rebuilds with an earlier rebuild, using the same build inputs. I’m eager to see this materialize, and hope to eventually make progress on this. However to build stage #1 I believe I need to rebuild a much larger number packages in stage #0, it could be roughly similar to the “build-essentials-depends” package set.

I believe the ultimate end goal of Idempotent Rebuilds is to be able to re-bootstrap a binary distribution like Debian from some other bootstrappable environment like Guix. In parallel to working on a achieving the 100% Idempotent Rebuild of Debian, we can setup a Guix environment that build Debian packages using Guix binaries. These builds ought to eventually converge to the same Debian binary packages, or there is something deeply problematic happening. This approach to re-bootstrap a binary distribution like Debian seems simpler than rebuilding all binaries going back to the beginning of time for that distribution.

What do you think?

PS. I fear that Debian main may have already went into a state where it is not able to rebuild itself at all anymore: the presence and assumption of non-free firmware and non-Debian signed binaries may have already corrupted the ability for Debian main to rebuild itself. To be able to complete the idempotent and bootstrapped rebuild of Debian, this needs to be worked out.

09:56

Joe Marshall: Avoiding Stringly Typed Code [Planet Lisp]

It can be tempting to implement certain objects by their printed representation. This is especially true when you call out to other programs and pass the parameters in command line arguments and get a result back through the stdout stream. If an object is implemented by its printed representation, then serialization and deserialization of the object across program boundaries is trivial.

Objects implemented by their printed representation are jokingly referred to as “stringly typed”. The type information is lost so it is possible to pass strings representing objects of the wrong type and get nonsense answers. There are no useful predicates on arbitrary strings, so you cannot do type checking or type dispatch. This becomes a big problem for objects created from other utilities. When you call out to a bash script, you usually get the response as stream or string.

The solution? Slap a type on it right away. For any kind of string we get back from another program, we at least define a CLOS class with a single slot that holds a string. I define two Lisp bindings for any program implemented by a shell script. The one with a % prefix is the program that takes and returns strings. Without the % it takes and returns Lisp objects that are marshaled to and from strings before the % version is called. The % version obviously cannot do type checking, but the non-% entry point can and does enforce the runtime type.

08:35

Console War, p100 [Ctrl+Alt+Del Comic]

We’ve seen the signs for years now, but it seems like everyone is finally accepting it: the “Console War” that has raged since the 80s has finally… sputtered and died. I figured it was a good time to post some closure pages for my comic series of the same name. That’s not to say I […]

The post Console War, p100 appeared first on Ctrl+Alt+Del Comic.

08:28

Poe Cameron [Penny Arcade]

New Comic: Poe Cameron

06:21

Urgent: Protect privacy of customers of 23 and Me [Richard Stallman's Political Notes]

Everyone: call on the directors of 23 and Me to protect the privacy of their customers.

Search warrants for student rooms [Richard Stallman's Political Notes]

The deportation thugs seems to have got search warrants for student rooms at Columbia University by misleading a judge, as well as misrepresenting the law they were claiming to enforce.

Wrecker attacking law firms [Richard Stallman's Political Notes]

The wrecker is attacking law firms with executive orders to cut off their business. Three of them have taken legal action against these orders.

Head of CDC facing right-wing disinformation [Richard Stallman's Political Notes]

The wrecker tried to appoint a serious medical researcher as head of the CDC. He, and she, now face right-wing extremist disinformation.

I expect he will try to develop a system by which to control more completely which kinds of disinformation are permitted.

Quid pro quo deals between US government and billionaires [Richard Stallman's Political Notes]

Alvaro Bedoya, FTC commissioner until he was fired by the corrupter, warns of apparent "quid pro quo" deals between the US government and billionaires. In other words, apparent corruption.

When the "Department of Justice" is part of the same corruption, there is no way to tackle it.

Parents following RFK's medical misinformation [Richard Stallman's Political Notes]

Parents following RFK's medical misinformation are giving their children cod-liver oil, thinking that will cure or prevent measles. It does nothing against measles, but it does cause liver damage.

Florida law against teachers that are Chinese residents [Richard Stallman's Political Notes]

Florida's law forbidding hiring teachers who are officially residents of China (or some other countries) makes no exception for Chinese refugees who are applying for asylum.

I wonder whether this law violates federal anti-discrimination law.

FDA official in charge of vaccines has resigned [Richard Stallman's Political Notes]

The FDA's official in charge of vaccines has resigned, saying RFK "wishes subservient confirmation of his misinformation and lies."

This and other appointments described here suggest he will attack vaccinations and put Americans greatly in danger.

That includes me. I got a Covid-19 booster vaccination a week ago, because I was worried it might cease to be available if I waited. That's good for now, but what about next fall. and subsequent years.

Academics in US [Richard Stallman's Political Notes]

Academics in the US are making preparations in case they are disappeared.

I expect that Republican officials will maintain the lie that the people who may be arrested and deported are supporting terrorists and insist that nothing is wrong.

Social Security website crashing [Richard Stallman's Political Notes]

*Social Security website is crashing, nobody monitors customer experience since DOGE eliminated that office.*

This could be their plan for how to get rid of Social Security in practice even though it may continue to exist in name.

06:14

Russ Allbery: Review: Ghostdrift [Planet Debian]

Review: Ghostdrift, by Suzanne Palmer

Series: Finder Chronicles #4
Publisher: DAW
Copyright: May 2024
ISBN: 0-7564-1888-7
Format: Kindle
Pages: 378

Ghostdrift is a science fiction adventure and the fourth (and possibly final) book of the Finder Chronicles. You should definitely read this series in order and not start here, even though the plot of this book would stand alone.

Following The Scavenger Door, in which he made enemies even more dramatically than he had in the previous books, Fergus Ferguson has retired to the beach on Coralla to become a tea master and take care of his cat. It's a relaxing, idyllic life and a much-needed total reset. Also, he's bored. The arrival of his alien friend Qai, in some kind of trouble and searching for him, is a complex balance between relief and disappointment.

Bas Belos is one of the most notorious pirates of the Barrens. He has someone he wants Fergus to find: his twin sister, who disappeared ten years ago. Fergus has an unmatched reputation for finding things, so Belos kidnapped Qai's partner to coerce her into finding Fergus. It's not an auspicious beginning to a relationship, and Qai was ready to fight once they got her partner back, but Belos makes Fergus an offer of payment that, startlingly, is enough for him to take the job mostly voluntarily.

Ghostdrift feels a bit like a return to Finder. Fergus is once again alone among strangers, on an assignment that he's mostly not discussing with others, piecing together clues and navigating tricky social dynamics. I missed his friends, particularly Ignatio, and while there are a few moments with AI ships, they play less of a role.

But Fergus is so very good at what he does, and Palmer is so very good at writing it. This continues to be competence porn at its best. Belos's crew thinks Fergus is a pirate recruited from a prison colony, and he quietly sets out to win their trust with a careful balance of self-deprecation and unflappable skill, helped considerably by the hidden gift he acquired in Finder. The character development is subtle, but this feels like a Fergus who understands friendship and other people at a deeper and more satisfying level than the Fergus we first met three books ago.

Palmer has a real talent for supporting characters and Ghostdrift is no exception. Belos's crew are criminals and murderers, and Palmer does remind the reader of that occasionally, but they're also humans with complex goals and relationships. Belos has earned their loyalty by being loyal and competent in a rough world where those attributes are rare. The morality of this story reminds me of infiltrating a gang: the existence of the gang is not a good thing, and the things they do are often indefensible, but they are an understandable reaction to a corrupt social system. The cops (in this case, the Alliance) are nearly as bad, as we've learned over the past couple of books, and considerably more insufferable. Fergus balances the ethical complexity in a way that I found satisfyingly nuanced, while quietly insisting on his own moral lines.

There is a deep science fiction plot here, possibly the most complex of the series so far. The disappearance of Belos's sister is the tip of an iceberg that leads to novel astrophysics, dangerous aliens, mysterious ruins, and an extended period on a remote and wreck-strewn planet. I groaned a bit when the characters ended up on the planet, since treks across primitive alien terrain with jury-rigged technology are one of my least favorite science fiction tropes, but I need not have worried. Palmer knows what she's doing; the pace of the plot does slow a bit at first, but it quickly picks up again, adding enough new setting and plot complications that I never had a chance to be bored by alien plants. It helps that we get another batch of excellent supporting characters for Fergus to observe and win over.

This series is such great science fiction. Each book becomes my new favorite, and Ghostdrift is no exception. The skeleton of its plot is a satisfying science fiction mystery with multiple competing factions, hints of fascinating galactic politics, complicated technological puzzles, and a sense of wonder that reminds me of reading Larry Niven's Known Space series. But the characters are so much better and more memorable than classic SF; compared to Fergus, Niven's Louis Wu barely exists and is readily forgotten as soon as the story is over. Fergus starts as a quiet problem-solver, but so much character depth unfolds over the course of this series. The ending of this book was delightfully consistent with everything we've learned about Fergus, but also the sort of ending that it's hard to imagine the Fergus from Finder knowing how to want.

Ghostdrift, like each of the books in this series, reaches a satisfying stand-alone conclusion, but there is no reason within the story for this to be the last of the series. The author's acknowledgments, however, says that this the end. I admit to being disappointed, since I want to read more about Fergus and there are numerous loose ends that could be explored. More importantly, though, I hope Palmer will write more novels in any universe of her choosing so that I can buy and read them.

This is fantastic stuff. This review comes too late for the Hugo nominating deadline, but I hope Palmer gets a Best Series nomination for the Finder Chronicles as a whole. She deserves it.

Rating: 9 out of 10

Girl Genius for Monday, March 31, 2025 [Girl Genius]

The Girl Genius comic for Monday, March 31, 2025 has been posted.

05:07

Comic Strip for Monday, March 31, 2025 [General Protection Fault: Comic Updates]

Current Story: Surreptitious Machinations II: Ashes to Ashes

03:07

How Each Pillar of the 1st Amendment is Under Attack [Krebs on Security]

“Congress shall make no law respecting an establishment of religion, or prohibiting the free exercise thereof; or abridging the freedom of speech, or of the press; or the right of the people peaceably to assemble, and to petition the Government for a redress of grievances.” -U.S. Constitution, First Amendment.

Image: Shutterstock, zimmytws.

In an address to Congress this month, President Trump claimed he had “brought free speech back to America.” But barely two months into his second term, the president has waged an unprecedented attack on the First Amendment rights of journalists, students, universities, government workers, lawyers and judges.

This story explores a slew of recent actions by the Trump administration that threaten to undermine all five pillars of the First Amendment to the U.S. Constitution, which guarantees freedoms concerning speech, religion, the media, the right to assembly, and the right to petition the government and seek redress for wrongs.

THE RIGHT TO PETITION

The right to petition allows citizens to communicate with the government, whether to complain, request action, or share viewpoints — without fear of reprisal. But that right is being assaulted by this administration on multiple levels. For starters, many GOP lawmakers are now heeding their leadership’s advice to stay away from local town hall meetings and avoid the wrath of constituents affected by the administration’s many federal budget and workforce cuts.

Another example: President Trump recently fired most of the people involved in processing Freedom of Information Act (FOIA) requests for government agencies. FOIA is an indispensable tool used by journalists and the public to request government records, and to hold leaders accountable.

The biggest story by far this week was the bombshell from The Atlantic editor Jeffrey Goldberg, who recounted how he was inadvertently added to a Signal group chat with National Security Advisor Michael Waltz and 16 other Trump administration officials discussing plans for an upcoming attack on Yemen.

One overlooked aspect of Goldberg’s incredible account is that by planning and coordinating the attack on Signal — which features messages that can auto-delete after a short time — administration officials were evidently seeking a way to avoid creating a lasting (and potentially FOIA-able) record of their deliberations.

“Intentional or not, use of Signal in this context was an act of erasure—because without Jeffrey Goldberg being accidentally added to the list, the general public would never have any record of these communications or any way to know they even occurred,” Tony Bradley wrote this week at Forbes.

Petitioning the government, particularly when it ignores your requests, often requires challenging federal agencies in court. But that becomes far more difficult if the most competent law firms start to shy away from cases that may involve crossing the president and his administration.

On March 22, the president issued a memorandum that directs heads of the Justice and Homeland Security Departments to “seek sanctions against attorneys and law firms who engage in frivolous, unreasonable and vexatious litigation against the United States,” or in matters that come before federal agencies.

The POTUS recently issued several executive orders railing against specific law firms with attorneys who worked legal cases against him. On Friday, the president announced that the law firm of Skadden, Arps, Slate, Meager & Flom had agreed to provide $100 million in pro bono work on issues that he supports.

Trump issued another order naming the firm Paul, Weiss, Rifkind, Wharton & Garrison, which ultimately agreed to pledge $40 million in pro bono legal services to the president’s causes.

Other Trump executive orders targeted law firms Jenner & Block and WilmerHale, both of which have attorneys that worked with special counsel Robert Mueller on the investigation into Russian interference in the 2016 election. But this week, two federal judges in separate rulings froze parts of those orders.

“There is no doubt this retaliatory action chills speech and legal advocacy, and that is qualified as a constitutional harm,” wrote Judge Richard Leon, who ruled against the executive order targeting WilmerHale.

President Trump recently took the extraordinary step of calling for the impeachment of federal judges who rule against the administration. Trump called U.S. District Judge James Boasberg a “Radical Left Lunatic” and urged he be removed from office for blocking deportation of Venezuelan alleged gang members under a rarely invoked wartime legal authority.

In a rare public rebuke to a sitting president, U.S. Supreme Court Justice John Roberts issued a statement on March 18 pointing out that “For more than two centuries, it has been established that impeachment is not an appropriate response to disagreement concerning a judicial decision.”

The U.S. Constitution provides that judges can be removed from office only through impeachment by the House of Representatives and conviction by the Senate. The Constitution also states that judges’ salaries cannot be reduced while they are in office.

Undeterred, House Speaker Mike Johnson this week suggested the administration could still use the power of its purse to keep courts in line, and even floated the idea of wholesale eliminating federal courts.

“We do have authority over the federal courts as you know,” Johnson said. “We can eliminate an entire district court. We have power of funding over the courts, and all these other things. But desperate times call for desperate measures, and Congress is going to act, so stay tuned for that.”

FREEDOM OF ASSEMBLY

President Trump has taken a number of actions to discourage lawful demonstrations at universities and colleges across the country, threatening to cut federal funding for any college that supports protests he deems “illegal.”

A Trump executive order in January outlined a broad federal crackdown on what he called “the explosion of antisemitism” on U.S. college campuses. This administration has asserted that foreign students who are lawfully in the United States on visas do not enjoy the same free speech or due process rights as citizens.

Reuters reports that the acting civil rights director at the Department of Education on March 10 sent letters to 60 educational institutions warning they could lose federal funding if they don’t do more to combat anti-semitism. On March 20, Trump issued an order calling for the closure of the Education Department.

Meanwhile, U.S. Immigration and Customs Enforcement (ICE) agents have been detaining and trying to deport pro-Palestinian students who are legally in the United States. The administration is targeting students and academics who spoke out against Israel’s attacks on Gaza, or who were active in campus protests against U.S. support for the attacks. Secretary of State Marco Rubio told reporters Thursday that at least 300 foreign students have seen their visas revoked under President Trump, a far higher number than was previously known.

In his first term, Trump threatened to use the national guard or the U.S. military to deal with protesters, and in campaigning for re-election he promised to revisit the idea.

“I think the bigger problem is the enemy from within,” Trump told Fox News in October 2024. “We have some very bad people. We have some sick people, radical left lunatics. And I think they’re the big — and it should be very easily handled by, if necessary, by National Guard, or if really necessary, by the military, because they can’t let that happen.”

This term, Trump acted swiftly to remove the top judicial advocates in the armed forces who would almost certainly push back on any request by the president to use U.S. soldiers in an effort to quell public protests, or to arrest and detain immigrants. In late February, the president and Defense Secretary Pete Hegseth fired the top legal officers for the military services — those responsible for ensuring the Uniform Code of Military Justice is followed by commanders.

Military.com warns that the purge “sets an alarming precedent for a crucial job in the military, as President Donald Trump has mused about using the military in unorthodox and potentially illegal ways.” Hegseth told reporters the removals were necessary because he didn’t want them to pose any “roadblocks to orders that are given by a commander in chief.”

FREEDOM OF THE PRESS

President Trump has sued a number of U.S. news outlets, including 60 Minutes, CNN, The Washington Post, The New York Times and other smaller media organizations for unflattering coverage.

In a $10 billion lawsuit against 60 Minutes and its parent Paramount, Trump claims they selectively edited an interview with former Vice President Kamala Harris prior to the 2024 election. The TV news show last month published transcripts of the interview at the heart of the dispute, but Paramount is reportedly considering a settlement to avoid potentially damaging its chances of winning the administration’s approval for a pending multibillion-dollar merger.

The president sued The Des Moines Register and its parent company, Gannett, for publishing a poll showing Trump trailing Harris in the 2024 presidential election in Iowa (a state that went for Trump). The POTUS also is suing the Pulitzer Prize board over 2018 awards given to The New York Times and The Washington Post for their coverage of purported Russian interference in the 2016 election.

Whether or not any of the president’s lawsuits against news organizations have merit or succeed is almost beside the point. The strategy behind suing the media is to make reporters and newsrooms think twice about criticizing or challenging the president and his administration. The president also knows some media outlets will find it more expedient to settle.

Trump also sued ABC News and George Stephanopoulos for stating that the president had been found liable for “rape” in a civil case [Trump was found liable of sexually abusing and defaming E. Jean Carroll]. ABC parent Disney settled that claim by agreeing to donate $15 million to the Trump Presidential Library.

Following the attack on the U.S. Capitol on Jan. 6, 2021, Facebook blocked President Trump’s account. Trump sued Meta, and after the president’s victory in 2024 Meta settled and agreed to pay Trump $25 million: $22 million would go to his presidential library, and the rest to legal fees. Meta CEO Mark Zuckerberg also announced Facebook and Instagram would get rid of fact-checkers and rely instead on reader-submitted “community notes” to debunk disinformation on the social media platform.

Brendan Carr, the president’s pick to run the Federal Communications Commission (FCC), has pledged to “dismantle the censorship cartel and restore free speech rights for everyday Americans.” But on January 22, 2025, the FCC reopened complaints against ABC, CBS and NBC over their coverage of the 2024 election. The previous FCC chair had dismissed the complaints as attacks on the First Amendment and an attempt to weaponize the agency for political purposes.

According to Reuters, the complaints call for an investigation into how ABC News moderated the pre-election TV debate between Trump and Biden, and appearances of then-Vice President Harris on 60 Minutes and on NBC’s “Saturday Night Live.”

Since then, the FCC has opened investigations into NPR and PBS, alleging that they are breaking sponsorship rules. The Center for Democracy & Technology (CDT), a think tank based in Washington, D.C., noted that the FCC is also investigating KCBS in San Francisco for reporting on the location of federal immigration authorities.

“Even if these investigations are ultimately closed without action, the mere fact of opening them – and the implicit threat to the news stations’ license to operate – can have the effect of deterring the press from news coverage that the Administration dislikes,” the CDT’s Kate Ruane observed.

Trump has repeatedly threatened to “open up” libel laws, with the goal of making it easier to sue media organizations for unfavorable coverage. But this week, the U.S. Supreme Court declined to hear a challenge brought by Trump donor and Las Vegas casino magnate Steve Wynn to overturn the landmark 1964 decision in New York Times v. Sullivan, which insulates the press from libel suits over good-faith criticism of public figures.

The president also has insisted on picking which reporters and news outlets should be allowed to cover White House events and participate in the press pool that trails the president. He barred the Associated Press from the White House and Air Force One over their refusal to call the Gulf of Mexico by another name.

And the Defense Department has ordered a number of top media outlets to vacate their spots at the Pentagon, including CNN, The Hill, The Washington Post, The New York Times, NBC News, Politico and National Public Radio.

“Incoming media outlets include the New York Post, Breitbart, the Washington Examiner, the Free Press, the Daily Caller, Newsmax, the Huffington Post and One America News Network, most of whom are seen as conservative or favoring Republican President Donald Trump,” Reuters reported.

FREEDOM OF SPEECH

Shortly after Trump took office again in January 2025, the administration began circulating lists of hundreds of words that government staff and agencies shall not use in their reports and communications.

The Brookings Institution notes that in moving to comply with this anti-speech directive, federal agencies have purged countless taxpayer-funded data sets from a swathe of government websites, including data on crime, sexual orientation, gender, education, climate, and global development.

The New York Times reports that in the past two months, hundreds of terabytes of digital resources analyzing data have been taken off government websites.

“While in many cases the underlying data still exists, the tools that make it possible for the public and researchers to use that data have been removed,” The Times wrote.

On Jan. 27, Trump issued a memo (PDF) that paused all federally funded programs pending a review of those programs for alignment with the administration’s priorities. Among those was ensuring that no funding goes toward advancing “Marxist equity, transgenderism, and green new deal social engineering policies.”

According to the CDT, this order is a blatant attempt to force government grantees to cease engaging in speech that the current administration dislikes, including speech about the benefits of diversity, climate change, and LGBTQ issues.

“The First Amendment does not permit the government to discriminate against grantees because it does not like some of the viewpoints they espouse,” the CDT’s Ruane wrote. “Indeed, those groups that are challenging the constitutionality of the order argued as much in their complaint, and have won an injunction blocking its implementation.”

On January 20, the same day Trump issued an executive order on free speech, the president also issued an executive order titled “Reevaluating and Realigning United States Foreign Aid,” which froze funding for programs run by the U.S. Agency for International Development (USAID). Among those were programs designed to empower civil society and human rights groups, journalists and others responding to digital repression and Internet shutdowns.

According to the Electronic Frontier Foundation (EFF), this includes many freedom technologies that use cryptography, fight censorship, protect freedom of speech, privacy and anonymity for millions of people around the world.

“While the State Department has issued some limited waivers, so far those waivers do not seem to cover the open source internet freedom technologies,” the EFF wrote about the USAID disruptions. “As a result, many of these projects have to stop or severely curtail their work, lay off talented workers, and stop or slow further development.”

On March 14, the president signed another executive order that effectively gutted the U.S. Agency for Global Media (USAGM), which oversees or funds media outlets including Radio Free Europe/Radio Liberty and Voice of America (VOA). The USAGM also oversees Radio Free Asia, which supporters say has been one of the most reliable tools used by the government to combat Chinese propaganda.

But this week, U.S. District Court Judge Royce Lamberth, a Reagan appointee, temporarily blocked USAGM’s closure by the administration.

“RFE/RL has, for decades, operated as one of the organizations that Congress has statutorily designated to carry out this policy,” Lamberth wrote in a 10-page opinion. “The leadership of USAGM cannot, with one sentence of reasoning offering virtually no explanation, force RFE/RL to shut down — even if the President has told them to do so.”

FREEDOM OF RELIGION

The Trump administration rescinded a decades-old policy that instructed officers not to take immigration enforcement actions in or near “sensitive” or “protected” places, such as churches, schools, and hospitals.

That directive was immediately challenged in a case brought by a group of Quakers, Baptists and Sikhs, who argued the policy reversal was keeping people from attending services for fear of being arrested on civil immigration violations. On Feb. 24, a federal judge agreed and blocked ICE agents from entering churches or targeting migrants nearby.

The president’s executive order allegedly addressing antisemitism came with a fact sheet that described college campuses as “infested” with “terrorists” and “jihadists.” Multiple faith groups expressed alarm over the order, saying it attempts to weaponize antisemitism and promote “dehumanizing anti-immigrant policies.

The president also announced the creation of a “Task Force to Eradicate Anti-Christian Bias,” to be led by Attorney General Pam Bondi. Never mind that Christianity is easily the largest faith in America and that Christians are well-represented in Congress.

The Rev. Paul Brandeis Raushenbush, a Baptist minister and head of the progressive Interfaith Alliance, issued a statement accusing Trump of hypocrisy in claiming to champion religion by creating the task force.

“From allowing immigration raids in churches, to targeting faith-based charities, to suppressing religious diversity, the Trump Administration’s aggressive government overreach is infringing on religious freedom in a way we haven’t seen for generations,” Raushenbush said.

A statement from Americans United for Separation of Church and State said the task force could lead to religious persecution of those with other faiths.

“Rather than protecting religious beliefs, this task force will misuse religious freedom to justify bigotry, discrimination, and the subversion of our civil rights laws,” said Rachel Laser, the group’s president and CEO.

Where is President Trump going with all these blatant attacks on the First Amendment? The president has made no secret of his affection for autocratic leaders and “strongmen” around the world, and he is particularly enamored with Hungary’s far-right Prime Minister Viktor Orbán, who has visited Trump’s Mar-a-Lago resort twice in the past year.

A March 15 essay in The Atlantic by Hungarian investigative journalist András Pethő recounts how Orbán rose to power by consolidating control over the courts, and by building his own media universe while simultaneously placing a stranglehold on the independent press.

“As I watch from afar what’s happening to the free press in the United States during the first weeks of Trump’s second presidency — the verbal bullying, the legal harassment, the buckling by media owners in the face of threats — it all looks very familiar,” Pethő wrote. “The MAGA authorities have learned Orbán’s lessons well.”

02:28

Exceptional Circumstances [QC RSS]

Tai briefly dated a lot of people's roommates in college

00:49

The 32bit RISC OS needs to be ported to 64bit to survive, seeks help [OSnews]

RISC OS, the operating system from the United Kingdom originally designed to run on Acorn Computer’s Archimedes computers – the first ARM computers – is still actively developed today. Especially since the introduction of the Raspberry Pi, new life was breathed into this ageing operating system, and it has gained quite a bit of steady momentum ever since, with tons of small updates, applications, and new hardware support, including things like support for wireless networking. This development has always been a bit piecemeal, though, and the pace has never been exceptionally fast.

Now, though, time really is ticking for RISC OS: popular RISC OS platforms like the Raspberry Pi are moving to 64bit ARM only, and this poses a big problem for RISC OS: most of it is written in pure 32bit ARM assembly. As you can imagine, the supply of capable 32bit ARM boards is going to dwindle over the coming years, which would put RISC OS right back where it was before the launch of the Raspberry Pi: floundering, relying on old hardware. This is obviously not ideal, and as such, RISC OS Open Limited wants to take a big leap to address this.

Since 2011, ROOL has successfully delivered dozens of community-funded improvements through its bounty scheme. While this model has enabled steady progress, it is not suited to the scale of work now required to modernise RISC OS. The Moonshots initiative represents a fundamental shift: focused, multi-year development projects undertaken by full-time engineers.

The first Moonshot aims to make the RISC OS source code portable and compatible with 64-bit Arm platforms, a prerequisite for future hardware support. ROOL has already scoped the work, identified key milestones, and built cost models based on realistic employment and project management needs.

↫ Steve Revill in a ROOL press release

They’re going to need a dedicated team of several developers working over the course of several years to port RISC OS to 64bit ARM. That’s going to require quite a bit of money, manpower, and expertise, and considering ROOL has only collected about £100000 worth of donations over the past 14 years, I can see why they’re aiming to go big for this effort. All these giant technology corporations with trillion dollar stock valuations are currently relying on ARM technology, so you’d think they could empty a few socks and cough up a few million to get this effort funded properly, but alas, we all know that’s not going to happen.

I hope ROOL can make this work. RISC OS is a ton of fun to use, and occupies a unique place in computing history. I would be incredibly sad to see technological progress leave it behind, when what amount to chump change for so many wealthy companies and individuals could save it.

Microsoft makes it even harder to use a local account on Windows 11 [OSnews]

Do you want to install Windows 11 without internet access or without an online Microsoft Account? It seems Microsoft really doesn’t want you to, as it has removed a very common and popular way of bypassing this requirement. In the release notes for the latest builds from the Dev and Beta channels, the company notes:

We’re removing the bypassnro.cmd script from the build to enhance security and user experience of Windows 11. This change ensures that all users exit setup with internet connectivity and a Microsoft Account.

Let me blow your minds and state that I don’t think online accounts for an operating system are inherently a bad idea. I would love it if I could install Fedora KDE on a new machine, optionally log into some online “Fedora Account”, and have my customisations and applications synchronise automatically. It would save me some time and effort, and assuming it’s all properly encrypted and secured, I don’t think the risk factors are particularly high. The keyword here is, of course, optionally. Microsoft wants every Windows 11 user to have a Microsoft Account instead of a local account, and would rather not make it optional at all.

Of course, this is still Microsoft, a company wholly incapable of doing anything right when it comes to operating systems, so even making this script available again during installation is stupidly easy. It took a few nerds mere moments to discover you could just make some registry changes during installation, reboot, and have the script return to its rightful place.

Oh Microsoft. Never change.

00:14

Urgent: Town-hall meetings [Richard Stallman's Political Notes]

US citizens: phone your congresscritter and say, "Hold town-hall meetings with the public, in your district and maybe in other districts too."

When Democrats do this, it wins support. But when Republicans do this, it exposes what they really are.

If you phone, please spread the word! Main Switchboard: +1-202-224-3121

Urgent: Robert Reich on Social Security [Richard Stallman's Political Notes]

US citizens: phone your congresscritter and senators at (202) 224-3121 and call on them to save Social Security, by rehiring the staff that the DOSE(*) got rid of and reversing all other recent changes made by the bully and the muskrat.

* Depredations of Swinging Evisceration.

Israel broke cease-fire [Richard Stallman's Political Notes]

Israel broke the cease-fire with Lebanon by destroying a specific building by bombing. It gave warnings first, but that doesn't mean the attack was justified.

00:07

Why I don’t like AI art [Cory Doctorow's craphound.com]

Norman Rockwell’s ‘self portrait.’ All the Rockwell faces have been replaced with HAL 9000 from Kubrick’s ‘2001: A Space Odyssey.’ His signature has been modified with a series of rotations and extra symbols. He has ten fingers on his one visible hand.

This week on my podcast, I read Why I don’t like AI art, a column from last week’s Pluralistic newsletter:

Which brings me to art. As a working artist in his third decade of professional life, I’ve concluded that the point of art is to take a big, numinous, irreducible feeling that fills the artist’s mind, and attempt to infuse that feeling into some artistic vessel – a book, a painting, a song, a dance, a sculpture, etc – in the hopes that this work will cause a loose facsimile of that numinous, irreducible feeling to manifest in someone else’s mind.

Art, in other words, is an act of communication – and there you have the problem with AI art. As a writer, when I write a novel, I make tens – if not hundreds – of thousands of tiny decisions that are in service to this business of causing my big, irreducible, numinous feeling to materialize in your mind. Most of those decisions aren’t even conscious, but they are definitely decisions, and I don’t make them solely on the basis of probabilistic autocomplete. One of my novels may be good and it may be bad, but one thing is definitely is is rich in communicative intent. Every one of those microdecisions is an expression of artistic intent.


MP3

(Image: Cryteria, CC BY 3.0, modified)

Sunday, 30 March

23:14

Steinar H. Gunderson: It's always the best ones that die first [Planet Debian]

Berge Schwebs Bjørlo, aged 40, died on March 4th in an avalanche together with his friend Ulf, while on winter holiday.

When writing about someone who recently died, it is common to make lists. Lists of education, of where they worked, on projects they did.

But Berge wasn't common. Berge was an outlier. A paradox, even.

Berge was one of my closest friends; someone who always listened, someone you could always argue with (“I'm a pacifist, but I'm aware that this is an extreme position”) but could rarely be angry at. But if you ask around, you'll see many who say similar things; how could someone be so close to so many at the same time?

Berge had running jokes going on 20 years or more. Many of them would be related to his background from Bergen; he'd often talk about “the un-central east” (aka Oslo), yet had to admit at some point that actually started liking the city. Or about his innate positivity (“I'm in on everything but suicide and marriage!”). I know a lot of people have described his humor as dry, but I found him anything but. Just a free flow of living.

He lived his life in free software, but rarely in actually writing code; I don't think I've seen a patch from him, and only the occasional bug report. Instead, he would spend his time guiding others; he spent a lot of time in PostgreSQL circles, helping people with installation or writing queries or chiding them for using an ORM (“I don't understand why people love to make life so hard for themselves”) or just discussing life, love and everything. Somehow, some people's legacy is just the number of others they touched, and Berge touched everyone he met. Kindness is not something we do well in the free software community, but somehow, it came natural to him. I didn't understand until after he died why he was so chronically bad at reading backlog and hard to get hold of; he was interacting with so many people, always in the present and never caring much about the past.

I remember that Berge once visited my parents' house, and was greeted by our dog, who after a pat promptly went back to relaxing lazily on the floor. “Awh! If I were a dog, that's the kind of dog I'd be.” In retrospect, for someone who lived a lot of his life in 300 km/h (at times quite literally), it was an odd thing to say, but it was just one of those paradoxes.

Berge loved music. He'd argue for intensely political punk, but would really consume everything with great enthuisasm and interest. One of the last albums I know he listened to was Thomas Dybdahl's “… that great October sound”:

Tear us in different ways but leave a thread throughout the maze
In case I need to find my way back home
All these decisions make for people living without faith
Fumbling in the dark nowhere to roam

Dreamweaver
I'll be needing you tomorrow and for days to come
Cause I'm no daydreamer
But I'll need a place to go if memory fails me & let you slip away

Berge wasn't found by a lazy dog. He was found by Shane, a very good dog.

Somehow, I think he would have approved of that, too.

Picture of Berge

22:28

Dirk Eddelbuettel: RcppSpdlog 0.0.21 on CRAN: New Upstream [Planet Debian]

Version 0.0.21 of RcppSpdlog arrived on CRAN today and has been uploaded to Debian. RcppSpdlog bundles spdlog, a wonderful header-only C++ logging library with all the bells and whistles you would want that was written by Gabi Melman, and also includes fmt by Victor Zverovich. You can learn more at the nice package documention site.

This release updates the code to the version 1.15.2 of spdlog which was released this weekend as well.

The NEWS entry for this release follows.

Changes in RcppSpdlog version 0.0.21 (2025-03-30)

  • Upgraded to upstream release spdlog 1.15.2 (including fmt 11.1.4)

Courtesy of my CRANberries, there is also a diffstat report. 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.

21:49

Link [Scripting News]

A new Bluesky news feed, Radio Free America. It will also be on a web page as a river of news, and of course in dynamic OPML so it can be reproduced in lots of places. It will be hard to shut down, if it catches on. The idea: deliver news stories, blog posts and podcasts from sources with ideas and facts an informed person would want. We hope we are helping the United States respond to threats to our freedom, well-being, the rule of law, and our country's friendships around the world. As the depth of what's happening is understood across the country, I believe we may need more flexible sources of news. We use mature tech that's widely deployed, well-understood. And it is completely and utterly one hundred percent billionaire-proof. We start out today with two feeds, FactPost which is the official rapid response page of the Democratic Party, and my linkblog feed, so I can easily test the system. The part that hooks up to Bluesky is relatively new, so we'll need to look at problems. As they say -- still diggin!

21:42

Blue95: Fedora Atomic Xfce converted to a Windows 95 desktop [OSnews]

Blue95 is a modern and lightweight desktop experience that is reminiscent of a bygone era of computing. Based on Fedora Atomic Xfce with the Chicago95 theme.

↫ Blue95 GitHub page

Exactly as it says on the tin. This is by far the easiest way to get the excellent Chigaco95 theme for Xfce set up and working in a polished way, and it also contains a few different application choices from the regular Fedora Xfce desktop to improve the illusion even further.

Microsoft releases Windows 11 roadmap tool to help make sense of Windows 11’s development [OSnews]

I’ve complained about the utter inscrutability of the Windows release process for a long time, with Microsoft seemingly using channels, build numbers, code names, date-based version numbers, and so on interchangeably, making it incredibly hard to keep track of what is being released when. It turns out even Microsoft itself started losing track, because it’s now released a roadmap for Windows 11 development.

In the roadmap tool – of course it’s a tool – you can select a platform, which isn’t x86 or ARM, but Windows PC or Copilot+ PC, a version (23H2 or 24H2 for now), a status (In preview, Gradually rolling out, or Generally available), and a channel (Canary, Dev, Beta, or Retail), after which the roadmap tool will list whatever features match those criteria. Do you now see why people might want such a tool to keep track of what the hell is going on with Windows?

Anyway, as the date-based version numbers – 23H2 and 24H2 – may already make clear, this seems more like a roadmap about where development’s been than where development’s going. The problem for Microsoft, of course, is that it maintains several different Windows variants with different feature sets and update schedules, and users, too, can of course opt to stick to certain versions before moving on. The end result is this spaghetti, which makes it hard to untangle when you’re getting which feature.

Anyway, if you’re elbow-deep in the Windows spaghetti, this tool may be of use to you.

19:21

Freexian Collaborators: Monthly report about Debian Long Term Support, February 2025 (by Roberto C. Sánchez) [Planet Debian]

Like each month, have a look at the work funded by Freexian’s Debian LTS offering.

Debian LTS contributors

In February, 18 contributors have been paid to work on Debian LTS, their reports are available:

  • Abhijith PA did 10.0h (out of 8.0h assigned and 6.0h from previous period), thus carrying over 4.0h to the next month.
  • Adrian Bunk did 12.0h (out of 0.0h assigned and 63.5h from previous period), thus carrying over 51.5h to the next month.
  • Andrej Shadura did 10.0h (out of 6.0h assigned and 4.0h from previous period).
  • Bastien Roucariès did 20.0h (out of 20.0h assigned).
  • Ben Hutchings did 12.0h (out of 8.0h assigned and 16.0h from previous period), thus carrying over 12.0h to the next month.
  • Chris Lamb did 18.0h (out of 18.0h assigned).
  • Daniel Leidert did 23.0h (out of 20.0h assigned and 6.0h from previous period), thus carrying over 3.0h to the next month.
  • Emilio Pozuelo Monfort did 53.0h (out of 53.0h assigned and 0.75h from previous period), thus carrying over 0.75h to the next month.
  • Guilhem Moulin did 11.0h (out of 3.25h assigned and 16.75h from previous period), thus carrying over 9.0h to the next month.
  • Jochen Sprickerhof did 27.0h (out of 30.0h assigned), thus carrying over 3.0h to the next month.
  • Lee Garrett did 11.75h (out of 9.5h assigned and 44.25h from previous period), thus carrying over 42.0h to the next month.
  • Markus Koschany did 40.0h (out of 40.0h assigned).
  • Roberto C. Sánchez did 7.0h (out of 14.75h assigned and 9.25h from previous period), thus carrying over 17.0h to the next month.
  • Santiago Ruano Rincón did 19.75h (out of 21.75h assigned and 3.25h from previous period), thus carrying over 5.25h to the next month.
  • Sean Whitton did 6.0h (out of 6.0h assigned).
  • Sylvain Beucler did 52.5h (out of 14.75h assigned and 39.0h from previous period), thus carrying over 1.25h to the next month.
  • Thorsten Alteholz did 11.0h (out of 11.0h assigned).
  • Tobias Frost did 17.0h (out of 17.0h assigned).

Evolution of the situation

In February, we have released 38 DLAs.

  • Notable security updates:
    • pam-u2f, prepared by Patrick Winnertz, fixed an authentication bypass vulnerability
    • openjdk-17, prepared by Emilio Pozuelo Monfort, fixed an authorization bypass/information disclosure vulnerability
    • firefox-esr, prepared by Emilio Pozuelo Monfort, fixed several vulnerabilities
    • thunderbird, prepared by Emilio Pozuelo Monfort, fixed several vulnerabilities
    • postgresql-13, prepared by Christoph Berg, fixed an SQL injection vulnerability
    • freerdp2, prepared by Tobias Frost, fixed several vulnerabilities
    • openssh, prepared by Colin Watson, fixed a machine-in-the-middle vulnerability

LTS contributors Emilio Pozuelo Monfort and Santiago Ruano Rincón coordinated the administrative aspects of LTS updates of postgresql-13 and pam-u2f, which were prepared by the respective maintainers, to whom we are most grateful.

As has become the custom of the LTS team, work is under way on a number of package updates targeting Debian 12 (codename “bookworm”) with fixes for a variety of vulnerabilities. In February, Guilhem Moulin prepared an upload of sssd, while several other updates are still in progress. Bastien Roucariès prepared an upload of krb5 for unstable as well.

Given the importance of the Debian Security Tracker to the work of the LTS Team, we regularly contribute improvements to it. LTS contributor Emilio Pozuelo Monfort reviewed and merged a change to improve performance, and then dealt with unexpected issues that arose as a result. He also made improvements in the processing of CVEs which are not applicable to Debian.

Looking to the future (the release of Debian 13, codename “trixie”, and beyond), LTS contributor Santiago Ruano Rincón has initiated a conversation among the broader community involved in the development of Debian. The purpose of the discussion is to explore ways to improve the long term supportability of packages in Debian, specifically by focusing effort on ensuring that each Debian release contains the “best” supported upstream version of packages with a history of security issues.

Thanks to our sponsors

Sponsors that joined recently are in bold.

18:00

Hegseth war plan leaks [Richard Stallman's Political Notes]

*🤯Hegseth should go to jail for war plan leaks, according to Hegseth.*

Greenland takeover [Richard Stallman's Political Notes]

Putin has enthusiastically supported the US intention to seize Greenland, probably expecting the corrupter to support his intention to seize Ukraine.

Palestinian director [Richard Stallman's Political Notes]

*Oscar-winning Palestinian director released from Israeli detention.*

The "Academy" that gives these awards has persistently refused to comment on the attack.

This attack by extremist bullies and the arrest by the Israeli state are not unusual in the West Bank. They happen to plenty of Palestinians. They are just as vicious when they are done to people who have not won awards. However, the fact of the award has one significant implication: it shows that the attackers have completely quashed their consciences.

Protests held in Turkey [Richard Stallman's Political Notes]

8 more Turkish journalists have been jailed for covering nationwide protests against Erdoğan.

17:14

Link [Scripting News]

The US is being run like a TV show, with predictable results.

15:28

Dirk Eddelbuettel: RcppZiggurat 0.1.8 on CRAN: Build Refinements [Planet Debian]

ziggurats

A new release 0.1.8 of RcppZiggurat is now on the CRAN network for R, following up on the 0.1.7 release last week which was the first release in four and a half years.

The RcppZiggurat package updates the code for the Ziggurat generator by Marsaglia and others which provides very fast draws from a Normal (or Exponential) distribution. The package provides a simple C++ wrapper class for the generator improving on the very basic macros, and permits comparison among several existing Ziggurat implementations. This can be seen in the figure where Ziggurat from this package dominates accessing the implementations from the GSL, QuantLib and Gretl—all of which are still way faster than the default Normal generator in R (which is of course of higher code complexity).

This release switches the vignette to the standard trick of premaking it as a pdf and including it in a short Sweave document that imports it via pdfpages; this minimizes build-time dependencies on other TeXLive components. It also incorporates a change contributed by Tomas to rely on the system build of the GSL on Windows as well if Rtools 42 or later is found. No other changes.

The NEWS file entry below lists all changes.

Changes in version 0.1.8 (2025-03-30)

  • The vignette is now premade and rendered as Rnw via pdfpage to minimize the need for TeXLive package at build / install time (Dirk)

  • Windows builds now use the GNU GSL when Rtools is 42 or later (Tomas Kalibera in #25)

Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the Rcppziggurat page or the GitHub repository.

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.

10:07

Joe Marshall: Keep a REPL Open [Planet Lisp]

I keep a REPL open at all times whether or not I’m actually doing Lisp development. It’s my assistant that evaluates random expressions for me. I’ll script up little tasks in Common Lisp rather than in Bash. When I need to rapidly prototype something larger, I’ll switch to the REPL and do it there.

At work, my REPL has accumulated a bunch of code for talking to systems like GitHub, CircleCI, and LDAP as well as our in-house tools. These are utilities for my use only. I don’t write mission critical apps in Common Lis. No one else in the company uses it, and it is more important that the code be maintainable by the rest of the team than that it be written in a language I like. So I write the mission critical code in Python, or Golang, or Java, or whatever the rest of the team is using. I keep my Common Lisp to myself. I have, however, used it to protype code that evetually ends up ported to Python or Golang.

On occasion, I’ve wanted to quickly share some functionality before I have taken the time to port it. I’ve found two ways to do this. The first is to slap a web server on it. I use Hunchentoot for this. I translate JSON to Lisp coming in to the web server and Lisp back to JSON going out. This is all you effectively need for a black-box microservice. There have been a couple of transient projects where the whole thing was not expected to be maintained for a long time and by anyone other than me, so I can just throw up a microservice and tell my colleagues to hit it with a curl command.

The second way is to create a docker image that contains the Common Lisp code and all of its dependencies. It can take a bit of work to configure a lisp setup in your environment, so having it hiding inside a docker image allows me to correctly set up the Lisp environment along with the Lisp interpreter and the rest of the code. My colleagues can just pull and run the container and it will work. Again, this is only for small, throwaway projects that no one else is expected to modify or maintain. For anything that is mission critical or is expected to be shared at some point, I write it in Python or Golang or Java, etc.

I could have written these as a series of Bash scripts or Python programs, but when you start connecting a series of these together, you quickly run into the limitations of using a pipe to talk between programs. My Lisp scripts all reside in the same address space, so they can share structured data without any fancy marshaling protocol.

09:35

“Be yourself” [Seth's Blog]

Really?

Which self?

The self you were when you were two years old, almost out of diapers?

The self you were when you were screaming with the fans at the big game?

The self you were after a long night?

How about this: Become the self you’d be proud to be. Hang out with people and ideas that help you become that self. Act like that self every chance you get.

06:07

Russ Allbery: Review: Cascade Failure [Planet Debian]

Review: Cascade Failure, by L.M. Sagas

Series: Ambit's Run #1
Publisher: Tor
Copyright: 2024
ISBN: 1-250-87126-3
Format: Kindle
Pages: 407

Cascade Failure is a far-future science fiction adventure with a small helping of cyberpunk vibes. It is the first of a (so far) two-book series, and was the author's first novel.

The Ambit is an old and small Guild ship, not much to look at, but it holds a couple of surprises. One is its captain, Eoan, who is an AI with a deep and insatiable curiosity that has driven them and their ship farther and farther out into the Spiral. The other is its surprisingly competent crew: a battle-scarred veteran named Saint who handles the fighting, and a talented engineer named Nash who does literally everything else. The novel opens with them taking on supplies at Aron Outpost. A supposed Guild deserter named Jalsen wanders into the ship looking for work.

An AI ship with a found-family crew is normally my catnip, so I wanted to love this book. Alas, I did not.

There were parts I liked. Nash is great: snarky, competent, and direct. Eoan is a bit distant and slightly more simplistic of a character than I was expecting, but I appreciated the way Sagas put them firmly in charge of the ship and departed from the conventional AI character presentation. Once the plot starts in earnest (more on that in a moment), we meet Anke, the computer hacker, whose charming anxiety reaction is a complete inability to stop talking and who adds some needed depth to the character interactions. There's plenty of action, a plot that makes at least some sense, and a few moments that almost achieved the emotional payoff the author was attempting.

Unfortunately, most of the story focuses on Saint and Jal, and both of them are irritatingly dense cliches.

The moment Jal wanders onto the Ambit in the first chapter, the reader is informed that Jal, Saint, and Eoan have a history. The crew of the Ambit spent a year looking for Jal and aren't letting go of him now that they've found him. Jal, on the other hand, clearly blames Saint for something and is not inclined to trust him. Okay, fine, a bit generic of a setup but the writing moved right along and I was curious enough.

It then takes a full 180 pages before the reader finds out what the hell is going on with Saint and Jal. Predictably, it's a stupid misunderstanding that could have been cleared up with one conversation in the second chapter.

Cascade Failure does not contain a romance (and to the extent that it hints at one, it's a sapphic romance), but I swear Saint and Jal are both the male protagonist from a certain type of stereotypical heterosexual romance novel. They're both the brooding man with the past, who is too hurt to trust anyone and assumes the worst because he's unable to use his words or ask an open question and then listen to the answer. The first half of this book is them being sullen at each other at great length while both of them feel miserable. Jal keeps doing weird and suspicious things to resolve a problem that would have been far more easily resolved by the rest of the crew if he would offer any explanation at all. It's not even suspenseful; we've read about this character enough times to know that he'll turn out to have a heart of gold and everything will be a misunderstanding. I found it tedious. Maybe people who like slow burn romances with this character type will have a less negative reaction.

The real plot starts at about the time Saint and Jal finally get their shit sorted out. It turns out to have almost nothing to do with either of them. The environmental control systems of worlds are suddenly failing (hence the book title), and Anke, the late-arriving computer programmer and terraforming specialist, has a rather wild theory about what's happening. This leads to a lot of action, some decent twists, and a plot that felt very cyberpunk to me, although unfortunately it culminates in an absurdly-cliched action climax.

This book is an action movie that desperately wants to make you feel all the feels, and it worked about as well as that typically works in action movies for me. Jaded cynicism and an inability to communicate are not the ways to get me to have an emotional reaction to a book, and Jal (once he finally starts talking) is so ridiculously earnest that it's like reading the adventures of a Labrador puppy. There was enough going on that it kept me reading, but not enough for the story to feel satisfying. I needed a twist, some depth, way more Nash and Anke and way less of the men, something.

Everyone is going to compare this book to Firefly, but Firefly had better banter, created more complex character interactions due to the larger and more varied crew, and played the cynical mercenary for laughs instead of straight, all of which suited me better. This is not a bad book, particularly once it gets past the halfway point, but it's not that memorable either, at least for me. If you're looking for a space adventure with heavy action hero and military SF vibes that wants to be about Big Feelings but gets there in mostly obvious ways, you could do worse. If you're looking for a found-family starship crew story more like Becky Chambers, I think you'll find this one a bit too shallow and obvious.

Not really recommended, although there's nothing that wrong with it and I'm sure other people's experience will differ.

Followed by Gravity Lost, which I'm unlikely to read.

Rating: 6 out of 10

05:42

Sanctuary city policies in Tennessee [Richard Stallman's Political Notes]

Tennessee proposes to make it a crime for local legislators to vote for sanctuary city policies.

It is clear that the state could pass a law that overrides any local law of this sort, but no state should be allowed to criminalize the act of voting as such.

The "five eyes" intelligence network fraying [Richard Stallman's Political Notes]

The "five eyes" intelligence network between the Australia, Canada, New Zealand, the UK and the US is fraying after the US accidentally revealed to the others that they could not rely on it to help them.

Sensitivities to gluten [Richard Stallman's Political Notes]

Experiments show that many people who believe they are sensitive to eating gluten are having a reaction which is not triggered by gluten.

House speaker proposes elimination of "federal courts" [Richard Stallman's Political Notes]

House speaker proposes to eliminate official "federal courts" and replacing them with new courts that would be subject to the president's control.

Ideological cleansing of Smithsonian Institution [Richard Stallman's Political Notes]

The bullshitter orders the ideological cleansing of the Smithsonian Institution — its exhibits, its publications, and everything else.

Public has turned against Republicans [Richard Stallman's Political Notes]

The public has turned against Republicans so much that the wrecker is afraid to lose even right-wing districts.

Leaked conversation about attacking Houthis [Richard Stallman's Political Notes]

The US military and spy officials who leaked their conversation about attacking the Houthis were deficient in competence and deficient in respect for human rights. But this should be no surprise.

The corrupter chose them, not for loyalty to conscience or to country, but only for loyalty to the corrupter. That's what they have, and that's how he will judge them.

Brutal pogrom in Palestine against co-director of "No Other Land". [Richard Stallman's Political Notes]

A brutal pogrom in Palestine, carried out by the fanatical Israeli "settlers", included among its victims the Oscar-winning co-director Hamdan Ballal of the film, No Other Land, which is about those brutal pogroms.

This called the attention of many in the west to the usual repression Palestinians face, with the explicit support of Israel's government.

The author suggests ways other countries could try to curb this violence.

India accused of disinformation campaign [Richard Stallman's Political Notes]

Canadian officials accuse India of a disinformation campaign to put a Indian-Canadian politician in position to become prime minister.

US "reviewing" visas of those that joined protests about Gaza [Richard Stallman's Political Notes]

The US has started "reviewing", and sometimes canceling, visas of hundreds of visitors that may have joined protests about Gaza.

Homeless inhabitant in Seattle running for mayor [Richard Stallman's Political Notes]

Joe Molloy, a homeless inhabitant of Seattle, is running for mayor.

I do not use the fashionable word "unhoused" because I don't like its implications.

Trees knocked down by Hurricane Helene [Richard Stallman's Political Notes]

Hurricane Helene struck the US Atlantic coast in September and knocked down many trees. Now, six months later, they are fueling wildfires.

Two different effects of global heating are thus combining to do increased damage. How is the US responding to them? Increasing fossil fuel extraction and demolishing FEMA.

The smoke from the fires will cause medical damage. How will Republicans protect Americans from that? By cutting Medicaid.

BBC reporter arrested and deported from Turkey [Richard Stallman's Political Notes]

**BBC reporter arrested and deported from Turkey after covering protests. He was considered a "threat to public order" after reports on nationwide anti-government demonstrations.*

Is the bully imitating Erdoğan, or is Erdoğan imitating the bully?

Signal chat leak [Richard Stallman's Political Notes]

*The real problem with the Signal chat leak is it shows systemic dishonesty.*

As typical in an authoritarian state, the tyrant is not going to punish anyone for an embarrassing mistake who remains loyal to the tyrant.

Business-financed legal campaigns [Richard Stallman's Political Notes]

Business-financed legal campaigns seek to bar federal agencies from punishing businesses for practices that cheat people or pollute the environment. The Supreme Court's decision could upend every American's life.

Economic growth from tackling climate crisis [Richard Stallman's Political Notes]

*Tackling climate crisis will increase economic growth, OECD research finds. [One] third of global GDP could be lost this century if climate crisis runs unchecked, says report.*

This would be an enormous damage figure, but I expect hat it will be an underestimate. As global temperatures rise, new forms of climate disaster will arise, causing damage (and thus losses) that can't be estimated today. I wonder whether the figures tried to estimate the amount of damage caused by wildfires fueled by forests brought down by hurricanes. I would guess not.

Although China is investing heavily in renewable electric generation, it is still building more fossil fuel infrastructure and thus accelerating global heating.

Attitude toward freedom of speech at ex-Twitter [Richard Stallman's Political Notes]

The muskrat's right-wing platform, ex-Treme ex-Twitter, demonstrated its attitude towards freedom of speech by turning off the account of the Turkish opposition party. as young people protest in the streets against the arrest of its leader.

Saturday, 29 March

20:07

GNU patch 2.8 released [Planet GNU]

I am pleased to announce the release of GNU patch 2.8.

The project page is at https://savannah.gnu.org/projects/patch

The sources can be downloaded from http://ftpmirror.gnu.org/patch/

The sha256sum checksums are:

  308a4983ff324521b9b21310bfc2398ca861798f02307c79eb99bb0e0d2bf980  patch-2.8.tar.gz
  7f51814e85e780b39704c9b90d264ba3515377994ea18a2fabd5d213e5a862bc  patch-2.8.tar.bz2
  f87cee69eec2b4fcbf60a396b030ad6aa3415f192aa5f7ee84cad5e11f7f5ae3  patch-2.8.tar.xz

This release is also GPG signed. You can download the signature by appending '.sig' to the URL. If the 'gpg --verify' command fails because you don't have the required public key, then run this command to import it:

  gpg --recv-keys D5BF9FEB0313653A

Key fingerprint = 259B 3792 B3D6 D319 212C  C4DC D5BF 9FEB 0313 653A

NEWS since v2.7.6 (2018-02-03):

  • The --follow-symlinks option now applies to output files as well as input.
  • 'patch' now supports file timestamps after 2038 even on traditional

  GNU/Linux platforms where time_t defaults to 32 bits.

  • 'patch' no longer creates files with names containing newlines,

  as encouraged by POSIX.1-2024.

  • Patches can no longer contain NUL ('\0') bytes in diff directive lines.

  These bytes would otherwise cause unpredictable behavior.

  • Patches can now contain sequences of spaces and tabs around line numbers

  and in other places where POSIX requires support for these sequences.

  • --enable-gcc-warnings no longer uses expensive static checking.

  Use --enable-gcc-warnings=expensive if you still want it.

  • Fix undefined or ill-defined behavior in unusual cases, such as very

  large sizes, possible stack overflow, I/O errors, memory exhaustion,
  races with other processes, and signals arriving at inopportune moments.

  • Remove old "Plan B" code, designed for machines with 16-bit pointers.
  • Assume C99 or later; previously it assumed C89 or later.
  • Port to current GCC, Autoconf, Gnulib, etc.


The following people contributed changes to this release:
  Andreas Gruenbacher (34)
  Bruno Haible (5)
  Collin Funk (2)
  Eli Schwartz (1)
  Jean Delvare (2)
  Jim Meyering (1)
  Kerin Millar (1)
  Paul Eggert (166)
  Petr Vaněk (1)
  Sam James (1)
  Takashi Iwai (1)

Special thanks to Paul Eggert for doing the vast majority of the work.

Regards,
Andreas Gruenbacher

19:00

Reproducible Builds (diffoscope): diffoscope 293 released [Planet Debian]

The diffoscope maintainers are pleased to announce the release of diffoscope version 293. This version includes the following changes:

[ Chris Lamb ]
* Correct import masking issue.

You find out more by visiting the project homepage.

18:14

Reproducible Builds (diffoscope): diffoscope 292 released [Planet Debian]

The diffoscope maintainers are pleased to announce the release of diffoscope version 292. This version includes the following changes:

[ Ivan Trubach ]
* Ignore st_size entry for directories to avoid spurious diffs as this value
  is essentially filesystem dependent.

[ Chris Lamb ]
* Update copyright years.

You find out more by visiting the project homepage.

17:28

So Long, Century Ballroom [The Stranger]

Capitol Hill's Century Ballroom closes March 31. Find out what's next for the historic venue. by Megan Seling

On Monday, March 31, Century Ballroom will close for good. Ahead of its final weekend, Cynthia Brothers of Vanishing Seattle and The Stranger sat down to chat with owner and founder Hallie Kuperman about her decision to close Century Ballroom, its legacy, and what’s next for the historic space. 

15:56

Dirk Eddelbuettel: tinythemes 0.0.3 at CRAN: Nags [Planet Debian]

tinythemes demo

A second maintenance release of our still young-ish package tinythemes arrived on CRAN today. tinythemes provides the theme_ipsum_rc() function from hrbrthemes by Bob Rudis in a zero (added) dependency way. A simple example is (also available as a demo inside the package) contrasts the default style (on the left) with the one added by this package (on the right):

This version responds solely to things CRAN now nags about. As these are all package quality improvement we generally oblige happily (and generally fix in the respective package repo when we notice). I am currently on a quest to get most/all of my nags down so new releases are sometimes the way to go even when not under a ‘deadline’ gun (as with other releases this week).

The full set of changes since the last release (a little over a year ago) follows.

Changes in tinythemes version 0.0.3 (2025-03-29)

  • Updated a badge URL in README.md

  • Updated manual pages with proper anchor links

  • Rewrote one example without pipe to not require minimum R version

Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the repo where comments and suggestions are welcome.

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.

15:35

Four stable kernel updates [LWN.net]

Greg Kroah-Hartman announced the release of four stable kernels on March 28: 6.13.9, 6.12.21, 6.6.85, and 6.1.132. Users are advised to upgrade.

15:00

Link [Scripting News]

This is very important. If you're on Bluesky, follow this account. "This is the official rapid response page of the Democratic Party." I've been begging the Dems to do this since 2009, a permanent heartbeat for the Dems on social media. Staffed by the team that ran the Harris campaign social media center during the campaign. They were snarky, fun, irreverent, and never apologized for representing the people, and they did it well. This is a moment. I no longer have to beg for this. It exists. So the first step has already been taken, thank goodness!!! Now it's up to us to spread the news that there is a place to find the heartbeat of the Dems. I'm going to study it, RT it, and keep the flame lit the best I can.

13:21

Pluralistic: #RedForEd rides again in LA (29 Mar 2025) [Pluralistic: Daily links from Cory Doctorow]


Today's links



Four turn-of-the-century women strikers, bearing sashes reading PICKET STRIKERS. In the foreground is an extreme magnification of the top of Trump's hair.

#RedForEd rides again in LA (permalink)

The LA Teachers' Union is going on strike.

Fuck.

Yes.

The last time the LA teachers struck was in the midst of the 2019 #RedForEd wave, which kicked off during the last Trump presidency. All across the country, teachers walked out – even in states where they were legally prohibited from doing so. These strikes were hugely successful, because communities across the nation rallied around their teachers, and the teachers returned the favor, making community justice part of their goals.

This was true across America, but it was especially true in Los Angeles, where the teachers were militant, united, relentless, and brilliant. The story of the 2019 LA Teachers' Strike is recounted in Jane McAlevey's essential 2021 book A Collective Bargain, which recounts her history as a union organizer on multiple successful unionization drives and strikes, including that fateful teachers' strike:

https://pluralistic.net/2023/04/23/a-collective-bargain/

McAlevey learned her tactics from a lineage of organizers who predated the legalization of unions and the National Labor Relations Act. Accordingly, her organizing method didn't rely on bosses obeying the law, or governments sticking up for workers. She fought for victories that were won by pure worker power. The 2019 LA teachers' strike is a fantastic example, a literal textbook case about rallying support from the entire shop – including affiliated workers, like bus-drivers – and then broadening that massive support by bringing in related trades (the LA charter school teachers walked out with their public school comrades), and the community.

The LA teachers' community organizing was incredible. They worked with community groups to understand what LA families really needed, and made those families' demands into union demands. The LA teachers' demands included:

  • in-school social workers;
  • parks and green-spaces in or near every LA public school; and

  • a total ban on ICE agents shaking down parents at the school gates.

Environmental justice, immigration justice, racial justice – these issues were every bit as important to the LA teachers in 2019 as wages, working conditions and vacation pay. And. They. WON.

Not only did the LA teachers win everything they struck for, they built an enduring community organization that ran a massive get out of the vote effort for the 2020 elections and flipped two seats for Democrats, securing Biden's Congressional majority.

So now the teachers are walking out again, and while their demands include wage increases (the greedinflation crisis wiped out many of the gains won in the 2019 strike – though imagine how much worse things would be without those gains!), the demands also include a slate of bold, no-fucks-given, material measures to fight back agains the Trump administration and its fascism:

https://www.latimes.com/california/story/2025-03-26/l-a-teachers-union-pursues-salary-hike-progressive-goals-amid-trump-agenda

This time around, the LA teachers are demanding:

  • "targeted investment in the recruitment and retention of BIPOC, multilingual and immigrant educators and service providers" – that's right, the DEI stuff that makes Trump's incipient aneurysm throb visibly in his temple (keep throbbing, li'l guy, I believe in you!).
  • "support for, defense and expansion of the school district’s Black Student Achievement Plan and Ethnic Studies" – the same programs that make wrestling faildaughter Linda McMahon get the fantods.

  • “strengthened policies to support LGBTQIA+ students, educators and staff” – take that, Elon.

  • "increased support for immigrant students and families, with and without documentation, including support for newcomers" – up yours, Stephen Miller, you pencilneck Hitler wannabe.

Where'd all these demands come from? 665 meetings that solicited input from "students, parents and other community members." In other words, these are our demands – the demands of Angelenos.

Trump is a scab. Musk is a scab. They hate unions. They've put the National Labor Relations Board into a coma, illegally firing a board member so that the board no longer has a quorum and can no longer take most actions. But the tactics the LA teachers used to organize their victory under the last Trump regime didn't rely on the NLRB – it relied on worker power. That power is only stronger today. The NLRB exists because workers built power when unions were illegal. Killing the NLRB doesn't kill worker power. Worker power comes from workers, not the government:

https://pluralistic.net/2025/01/29/which-side-are-you-on-2/#strike-three-yer-out

Now that Trump has canceled labor laws, all bets are off. Trump is illegally breaking the contracts of federal workers, as a prelude to eliminating unions nationwide. As Hamilton Nolan writes, this is the time to take a stand:

It is unreasonable to run around demanding a general strike every time a single union gets in a hard fight. It is not unreasonable to demand a general strike when the very existence of unions is under direct attack by a government that cares nothing about us, and does not respect our contracts, and is attempting to throw in the trash the union contracts covering hundreds of thousands of our fellow union members, as a step towards doing the same thing to millions more of our fellow union members. This is the bombing of Pearl Harbor, against the labor movement. Will we say, “We are filing a lawsuit against this illegal bombing, and we will keep you all updated as it progresses?” Will we say, “Pearl Harbor is way out in Hawaii. I’m glad those bombs didn’t fall where I live.” These are the terms that the union world needs to be thinking in, right now. This is not an exaggeration. If we do not go to war, the husk of American unions that emerges at the end of the Trump administration will be, probably, about half as big as it was when the Trump administration started, and immeasurably weaker. That is not an acceptable outcome if you believe that increasing organized labor’s strength is the key to saving this country, which it is.

https://www.hamiltonnolan.com/p/they-are-going-to-take-everything

McAlevey – who died in 2024 – agreed with Nolan. She wrote vibrantly about how union organizing, and the solidarity it nurtures, was the key to a revitalized democracy and a nation that truly takes care of its people, rather than lining them up in billionaires' feedlots.

I gotta go. I'm on my way to a Tesla protest. Maybe you could find one near you to join, too:

https://actionnetwork.org/event_campaigns/teslatakedown

But if I don't see you at this one, I'll see you on the picket line – with the LA teachers, the federal workers, and everyone else who's taking a stand against this scab presidency.


Hey look at this (permalink)



A Wayback Machine banner.

Object permanence (permalink)

#20yrsago Chicken companies and copyright https://web.archive.org/web/20050325044510/https://www.law.ed.ac.uk/ahrb/script-ed/issue4/cory_ed.asp

#20yrsago Yahoo overtaking Google? https://web.archive.org/web/20050410024830/http://www.guardian.co.uk/online/story/0,3605,1448381,00.html

#20yrsago Biometric car lock defeated by cutting off owner’s finger https://news.bbc.co.uk/2/hi/asia-pacific/4396831.stm

#15yrsago 20,000 US BitTorrent users sued; 30,000 more lawsuits pending https://web.archive.org/web/20100402051800/http://thresq.hollywoodreporter.com/2010/03/new-litigation-campaign-targets-tens-of-thousands-of-bittorrent-users.html

#15yrsago Labour MP’s motion to subject Digital Economy Bill to full debate https://web.archive.org/web/20100404053604/http://edmi.parliament.uk/EDMi/EDMDetails.aspx?EDMID=40883&SESSION=903

#15yrsago Recaptioning New Yorker cartoons with “Christ, what an asshole!” https://web.archive.org/web/20060203045552/http://modernarthur.com/blog/christwhatanasshole.html

#15yrsago NZ MPs reject software patents https://web.archive.org/web/20100402235209/https://passthesource.org.nz/2010/03/30/no-software-patents-in-new-zealand/

#15yrsago EFF, AT&T and Google all on the same side of this privacy fight https://www.eff.org/press/archives/2010/03/30

#15yrsago LibDems won’t support Digital Economy Bill at all https://web.archive.org/web/20100402020912/http://www.zdnet.co.uk/news/regulation/2010/03/30/lib-dems-to-fight-digital-economy-bill-over-wash-up-40088498/

#10yrsago Clean Reader is a free speech issue <a "="" 03="" 2015="" 31="" href="https://www.theguardian.com/technology/2015/mar/30/allow-clean-reader-swap-bad-words-books-free-speech'>https://www.theguardian.com/technology/2015/mar/30/allow-clean-reader-swap-bad-words-books-free-speech</a>

#10yrsago Last Man: France’s amazing martial arts fantasy comic comes to the Anglosphere <a href=" https:="" last-man-frances-amazing-martial-arts-fantasy-comic-comes-to-the-anglosphere="" memex.craphound.com="">https://memex.craphound.com/2015/03/31/last-man-frances-amazing-martial-arts-fantasy-comic-comes-to-the-anglosphere/

#5yrsago How viruses experience social distancing https://pluralistic.net/2020/03/31/reality-endorses-sanders/#anthropomorphic

#5yrsago Corporate welfare vs food stamps https://pluralistic.net/2020/03/31/reality-endorses-sanders/#kafka-capitalism

#5yrsago Monopolists stole your respirator https://pluralistic.net/2020/03/31/reality-endorses-sanders/#covidien

#5yrsago Amazon fires walkout organizer https://pluralistic.net/2020/03/31/reality-endorses-sanders/#instacart-wholefoods-amazon

#5yrsago Reality endorses Sanders https://pluralistic.net/2020/03/31/reality-endorses-sanders/#knife-edge

#5yrsago Trump admits voter suppression https://pluralistic.net/2020/03/31/reality-endorses-sanders/#voter-suppression

#5yrsago Attack Surface author's note https://pluralistic.net/2020/03/31/reality-endorses-sanders/#little-brother-iii


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)

  • Enshittification: Why Everything Suddenly Got Worse and What to Do About It, Farrar, Straus, Giroux, October 7 2025
    https://us.macmillan.com/books/9780374619329/enshittification/
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2026

  • Enshittification, Why Everything Suddenly Got Worse and What to Do About It (the graphic novel), Firstsecond, 2026

  • The Memex Method, Farrar, Straus, Giroux, 2026



Colophon (permalink)

Today's top sources: Super Punch (https://www.superpunch.net/).

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Status: second pass edit underway (readaloud)
  • A Little Brother short story about DIY insulin PLANNING

  • Picks and Shovels, a Martin Hench noir thriller about the heroic era of the PC. FORTHCOMING TOR BOOKS FEB 2025

Latest podcast: With Great Power Came No Responsibility: How Enshittification Conquered the 21st Century and How We Can Overthrow It https://craphound.com/news/2025/02/26/with-great-power-came-no-responsibility-how-enshittification-conquered-the-21st-century-and-how-we-can-overthrow-it/


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

ISSN: 3066-764X

11:07

Urgent: Resist saboteur-in-chief [Richard Stallman's Political Notes]

US citizens: call on Congress to resist the saboteur-in-chief firmly — don't look for a compromise.

If you phone, please spread the word! Main Switchboard: +1-202-224-3121

Urgent: Do not wipe out post office staff [Richard Stallman's Political Notes]

US citizens: call on Congress not to allow the DOSE to wipe out post office staff.

DOSE stands for Department of Sabotage and Evisceration.

If you phone, please spread the word! Main Switchboard: +1-202-224-3121

Urgent: Amazon lawsuit attacking Consumer Product Safety Commission [Richard Stallman's Political Notes]

US citizens: call on Amazon to drop its lawsuit attacking the Consumer Product Safety Commission.

Magats falsify "facts" to blame trans people [Richard Stallman's Political Notes]

Magats falsify "facts" to create excuses to blame trans people for whatever harm occurs.

This illustrates one dishonest aspect of a system that influences their tribe to believe imaginary criticisms of the the bullshitter leader tells them to hate.

08:28

Joe Marshall: Angry Fruit Salad [Planet Lisp]

I like to program in living color. My color scheme is definitely “angry fruit salad”, but there is a method to my madness.

My eyeglasses have a very strong prescription. Chromatic aberration is significant at the edges of my field of vision, so it is important that text be mostly monochromatic, or it will split into tiny glyph-shaped spectra. So my main text color is green on a black background, like a terminal from the 1970s. From there, I chose cyan for comments in the code because it is easy to read. I generally favor the warmer colors for the more “active” elements and the cooler colors for the more “passive” ones, but there are many exceptions.

I have found that my brain gets used to the colors. When something shows up in an unexpected color, it immediately look wrong, even if I don’t know why. I can leverge this effect by using a very wide variety of colors for different semantic elements. I’m not consciously aware of the semantic meaning, I can just tell if the code looks the wrong color.

So my code looks like the Vegas strip: gaudy, neon colors fighting for attention. I’m sure it would drive many people up the wall. A VSCode theme sort of based on this is available at https://github.com/jrm-code-project/VSCode-Theme.

08:21

Toward leggiero [Seth's Blog]

We might not seek it out often enough in our work. It’s a musical term, but we can use it too.

The light touch. A way to make a sound without making a commotion. Delicate and graceful.

Showing up with care and with just enough extra, but not more than that.

see also: sprezzatura

08:07

Petter Reinholdtsen: Theora 1.2.0 released [Planet Debian]

Following the 1.2.0beta1 release two weeks ago, a final 1.2.0 release of theora was wrapped up today. This new release is tagged in the Xiph gitlab theora instance and you can fetch it from the Theora home page as soon as someone with access find time to update the web pages. In the mean time (automatically removed after 14 days) the release tarball is also available as a git build artifact from CI build of the release tag.

The list of changes since The 1.2.0beta release from the CHANGES file in the tarball look like this:

libtheora 1.2.0 (2025 March 29)

  • Bumped minor SONAME versions as oc_comment_unpack() implementation changed.
  • Added example wrapper script encoder_example_ffmpeg (#1601 #2336).
  • Improve comment handling on platforms where malloc(0) return NULL (#2304).
  • Added pragma in example code to quiet clang op precedenca warnings.
  • Adjusted encoder_example help text.
  • Adjusted README, CHANGES, pkg-config and spec files to better reflect current release (#2331 #2328).
  • Corrected english typos in source and build system.
  • Switched http links to https in doc and comments where relevant. Did not touch RFC drafts.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
a bag of four grapes XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Ansible XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
Bad Science XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Black Doggerel XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Blog - Official site of Stephen Fry XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Charlie Brooker | The Guardian XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Charlie's Diary XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Chasing the Sunset - Comics Only XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Coding Horror XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
Cory Doctorow's craphound.com XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Cory Doctorow, Author at Boing Boing XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Ctrl+Alt+Del Comic XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Cyberunions XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
David Mitchell | The Guardian XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Deeplinks XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
Diesel Sweeties webcomic by rstevens XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Dilbert XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Dork Tower XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Economics from the Top Down XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Edmund Finney's Quest to Find the Meaning of Life XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
EFF Action Center XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Enspiral Tales - Medium XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Events XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Falkvinge on Liberty XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Flipside XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Flipside XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Free software jobs XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
Full Frontal Nerdity by Aaron Williams XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
General Protection Fault: Comic Updates XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
George Monbiot XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Girl Genius XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Groklaw XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Grrl Power XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Hackney Anarchist Group XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Hackney Solidarity Network XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
http://blog.llvm.org/feeds/posts/default XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
http://eng.anarchoblogs.org/feed/atom/ XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
http://feed43.com/3874015735218037.xml XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
http://flatearthnews.net/flatearthnews.net/blogfeed XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
http://fulltextrssfeed.com/ XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
http://london.indymedia.org/articles.rss XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
http://planet.gridpp.ac.uk/atom.xml XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
http://shirky.com/weblog/feed/atom/ XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
http://thecommune.co.uk/feed/ XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
http://theness.com/roguesgallery/feed/ XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
http://www.baen.com/baenebooks XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
http://www.feedsapi.com/makefulltextfeed.php?url=http%3A%2F%2Fwww.somethingpositive.net%2Fsp.xml&what=auto&key=&max=7&links=preserve&exc=&privacy=I+accept XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
http://www.godhatesastronauts.com/feed/ XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
http://www.tinycat.co.uk/feed/ XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
https://broodhollow.krisstraub.comfeed/ XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
https://debian-administration.org/atom.xml XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
https://feeds.feedburner.com/Starslip XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
https://hackbloc.org/rss.xml XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
https://kajafoglio.livejournal.com/data/atom/ XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
https://philfoglio.livejournal.com/data/atom/ XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
https://pixietrixcomix.com/menage-a-3/comic.rss XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
https://propertyistheft.wordpress.com/feed/ XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
https://requiem.seraph-inn.com/updates.rss XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
https://studiofoglio.livejournal.com/data/atom/ XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
https://thecommandline.net/feed/ XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
https://torrentfreak.com/subscriptions/ XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
https://twitter.com/statuses/user_timeline/22724360.rss XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
https://web.randi.org/?format=feed&type=rss XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
https://www.dcscience.net/feed/medium.co XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
https://www.DropCatch.com/domain/steampunkmagazine.com XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
https://www.freedompress.org.uk:443/news/feed/ XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
https://www.goblinscomic.com/category/comics/feed/ XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
https://www.loomio.com/blog/feed/ XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
https://www.marinadelreyny.com/ XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Humble Bundle Blog XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
I, Cringely XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Irregular Webcomic! XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Joel on Software XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
Judith Proctor's Journal XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
Krebs on Security XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Lambda the Ultimate - Programming Languages Weblog XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
Looking For Group XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
LWN.net XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Mimi and Eunice XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Neil Gaiman's Journal XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
Nina Paley XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
O Abnormal – Scifi/Fantasy Artist XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Oglaf! -- Comics. Often dirty. XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Oh Joy Sex Toy XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
Order of the Stick XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
Original Fiction Archives - Reactor XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
OSnews XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Paul Graham: Unofficial RSS Feed XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Penny Arcade XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Penny Red XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
PHD Comics XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Phil's blog XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
Planet Debian XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Planet GNU XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Planet Lisp XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Pluralistic: Daily links from Cory Doctorow XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
PS238 by Aaron Williams XML 09:35, Wednesday, 02 April 10:23, Wednesday, 02 April
QC RSS XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
Radar XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
RevK®'s ramblings XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
Richard Stallman's Political Notes XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Scenes From A Multiverse XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
Schneier on Security XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
SCHNEWS.ORG.UK XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
Scripting News XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Seth's Blog XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
Skin Horse XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Spinnerette XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
Tales From the Riverbank XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
The Adventures of Dr. McNinja XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
The Bumpycat sat on the mat XML 09:49, Wednesday, 02 April 10:29, Wednesday, 02 April
The Daily WTF XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
The Monochrome Mob XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
The Non-Adventures of Wonderella XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
The Old New Thing XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
The Open Source Grid Engine Blog XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
The Stranger XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
towerhamletsalarm XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
Twokinds XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
UK Indymedia Features XML 10:07, Wednesday, 02 April 10:49, Wednesday, 02 April
Uploads from ne11y XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
Uploads from piasladic XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April
Use Sword on Monster XML 09:35, Wednesday, 02 April 10:22, Wednesday, 02 April
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 09:56, Wednesday, 02 April 10:42, Wednesday, 02 April
what if? XML 09:49, Wednesday, 02 April 10:30, Wednesday, 02 April
Whatever XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
Whitechapel Anarchist Group XML 09:42, Wednesday, 02 April 10:31, Wednesday, 02 April
WIL WHEATON dot NET XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
wish XML 10:21, Wednesday, 02 April 11:06, Wednesday, 02 April
Writing the Bright Fantastic XML 10:21, Wednesday, 02 April 11:05, Wednesday, 02 April
xkcd.com XML 10:21, Wednesday, 02 April 11:04, Wednesday, 02 April