Wednesday, 06 November

23:07

iPod fans evade Apple’s DRM to preserve 54 lost clickwheel-era games [OSnews]

Old-school Apple fans probably remember a time, just before the iPhone became a massive gaming platform in its own right, when Apple released a wide range of games designed for late-model clickwheel iPods. While those clickwheel-controlled titles didn’t exactly set the gaming world on fire, they represent an important historical stepping stone in Apple’s long journey through the game industry.

Today, though, these clickwheel iPod games are on the verge of becoming lost media—impossible to buy or redownload from iTunes and protected on existing devices by incredibly strong Apple DRM. Now, the classic iPod community is engaged in a quest to preserve these games in a way that will let enthusiasts enjoy these titles on real hardware for years to come.

↫ Kyle Orland at Ars Technica

A nice effort, of course, and I’m glad someone is putting time and energy into preserving these games and making them accessible to a wider audience. As is usual with Apple, these small games were heavily encumbered with DRM, being locked to both the the original iTunes account that bought them, but also to the specific hardware identifier of the iPod they were initially synchronised to using iTunes. A clever way around this DRM exists, and it involves collectors and enthusiasts creating reauthorising their iTunes accounts to the same iTunes installation, and thus adding their respective iPod games to that single iTunes installation. Any other iPods can then be synced to that master account.

The iPod Clickwheel Games Preservation Project takes this approach to the next level, by setting up a Windows virtual machine with iTunes installed in it, which can then be shared freely around the web for people to the games to their collection. This is a rather remarkably clever method of ensuring these games remain accessible, but obviously does require knowledge of setting up Qemu and USB passthrough.

I personally never owned an iPod – I was a MiniDisc fanatic until my Android phone took over the role of music player – so I also had no clue these games even existed. I assume most of them weren’t exactly great to control with the limited input method of the iPod, but that doesn’t mean there won’t be huge numbers of people who have fond memories of playing these games when they were younger – and thus, they are worth preserving. We can only hope that one day, someone will create a virtual machine that can run the actual iPod operating system, called Pixo OS.

Stranger Suggests: The Seven Stages of Grief [The Stranger]

One Really Great Way to Cope Every Day of the Week by Megan Seling WEDNESDAY 11/6  

Drink Sad Girl Shots and Eat Cheese at Situ Tacos

(SHOCK) In a state of post-election shock? Me, too. Lean into the overwhelm with a bracing gulp of el Jimador tequila and a salty cube of Tillamook cheese—otherwise known as the Sad Girl Shot. Situ Tacos owner Lupe Flores claims this combination got her through the pandemic, and it’s likely an ideal salve for our current despondent situation, too. I generally try not to suggest alcohol as an antidote to despair—as wine writer Marissa A. Ross wrote in the wake of Anthony Bourdain’s death, “Drink to celebrate life, not to deal with loss”—but the Sad Girl Shot is just too perfect an invention. Plus, Situ Tacos is also hosting Floaters, an exhibition of artist Devin Liston’s bubbly, surreal, Dali-esque paintings of everyday objects like billiard balls, in their glitzy gold back bar Tilda’s Lounge tonight. Instead of doom-scrolling, go feast your eyes on art and knock back a few drinks, and if you’d prefer to abstain from booze, you can always skip the shots and opt for a tub of Situ’s divine queso. Best of all, 25 percent of the night’s proceeds will go to the Lebanese Red Cross, so you’ll be fighting nihilism by supporting a worthy cause. Sad girls por vida! (Situ Tacos, 5239 Ballard Ave NW, Sad Girls Shots are $6, chips and queso are $10) JULIANNE BELL

THURSDAY 11/7  

Go to Another World with SIFF’s Cinema Italian Style Film Festival

(DENIAL) What’s America? You don’t live there. In fact, you’ve never even heard of the United States. You live in a bubble. Your days are steeped in simplicity and unbroken serenity, untouched by the ever-looming threat of Christofascism and student loan repayment. Your life is bliss. And what you have heard of are the sun-dappled olive groves of Italy. Consider snagging a seat at one of SIFF's chic Cinema Italian Style screenings, particularly if you’re into guised critiques of the bourgeoisie. Or amp up the distraction factor at Art of Studio Ghibli, which celebrates the legendary Japanese animation studio’s poetic, intelligent approach to nature and the more-than-human world. (Thanks, Miyazaki—you’re giving us a reason to live right now.) Sean Baker’s Anora, which follows a sex worker who marries a Russian oligarch, might feel a little too “real world-y” at the moment, but his clear-eyed approach and lush visuals are always a draw. (See full film listings on EverOut) LINDSAY COSTELLO

FRIDAY 11/8  

Break Shit

<a href="https://file13records.bandcamp.com/album/hamburgers-ep">Hamburgers - EP by Atom & His Package</a>

(ANGER) Ever since I saw Bob Trevino Likes It at SIFF this year, I’ve wanted to visit a “rage room,” especially as a woman who, like the main character in the film, has always been taught to be kind and polite, never violent. Lucky for us, we have our own version up in Lake City that invites you to smash glasses, sledgehammer a toilet, and more. We recommend emptying your mind and listening to this absurd little song while you do it. If you’re not into destruction, you can punch out your anger at Cappy’s Boxing Gym in Central District or Seattle Boxing Gym in Interbay (they both offer your first class free!). And if you’d rather drink a beer while throwing sharp objects, there’s always axe throwing in Capitol Hill and White Center. (Rage Industry, 13333 Lake City Way NE, sessions start at $40) SHANNON LUBETICH

SATURDAY 11/9  

Have You Tried Being Less of an Asshole?

Even the grafitti can be nicer. MS

(BARGAINING) DO BETTER. It’s the directive that has echoed through social media comments for years as the quick quip that critics post anytime anyone does anything that even mildly rocks their delicate sensibilities. It usually (understandably) is met with eye rolls. But… have you tried it? Have you actually tried to do better? Maybe if we’re all the best versions of ourselves, we can cancel out some of the 72 million selfish bigots who voted for the racist rapist and preserve some goodwill in this world. Lead with kindness. Have patience. Smile at dogs. Randomly text your pals and tell them that they’re the most gorgeous and hilarious beings on the planet. Offer to bring a meal to a sick friend or rake up leaves for an elderly neighbor. Hold open a door, pay for someone’s coffee, and don’t laugh when a tourist falls off their rented scooter. Be everything those 72 million (and counting!) motherfuckers are too selfish to be. Fake it ‘til you make it—or uncontrollably collapse into a crying, shaking heap of blood, guts, and flesh on the floor—baby! MEGAN SELING

SUNDAY 11/10  

Live That “Two Benadryl and a Lifetime Movie” Life

(DEPRESSION) Several years ago, I heard about “Two Benadryl and a Lifetime Movie” on the C-Word podcast and never forgot it. The depression cocktail has since become the remedy I give to myself and my loved ones who are experiencing insurmountable amounts of sadness. While it doesn’t necessarily need to be those little pink pills and Lifetime’s Ladies of the '80s: A Divas Christmas (although it’s a great combination, TBH), pick any mind-numbing film or television show and pair it with an indulgent (but safe) amount of sleep-inducing potion. Other variations include two cups of chamomile tea and an Adam Sandler movie, two hits of weed and a Martha Stewart Living marathon, or two bowls of ice cream and an old season of Project Runway. Personally, I will be taking two melatonin and watching Lifetime’s adaptation of Flowers in the Attic before drifting into a sweet slumber (or dissociative oblivion, we’ll see). AUDREY VANN

MONDAY 11/11  

Go for a Long Walk and Discover Who You Are Now

You don't even have to go up hills if you don't want to. MS

(TESTING) This is my cure-all for when I feel out of control and need to take back my agency because it’s simple, and you set all the parameters. You control when you walk, how fast you walk, how long you walk, and how many steep inclines you choose to brave or creatively avoid. You can break out into a run or sit down on a wet park bench in the morning drizzle to absorb the book, podcast, or music you’re listening to. Counting steps is nice if you’re into goal setting, but so is leaving your phone at home and soaking in the quiet. Let disinhibition lead you. Screw the clock. Fuck obligations. Clear your schedule and just go. Walking is one of the simplest ways to connect with your autonomy and the human spirit, whatever that means to you. Turn home when your legs ache, and when you get that restless, sick feeling, get your ass off the couch and go walk again. VIVIAN MCCALL

TUESDAY 11/12  

Prepare for Battle

Shout Your Abortion mural on Capitol Hill. MS

(ACCEPTANCE) This is here. It’s real. Donald Trump will be the 47th President of the United States. A lot of bad shit is going to happen, so we need to donate and fight and organize. Don’t get complacent in our blue state. I know a lot of you out there will legitimately be fine, but don’t let your privilege get in the way of seeing that many, many others will not. Donate to the ACLU. Donate to abortion funds in Florida, Nebraska, and South Dakota. Donate to the National Immigrant Justice Center. Do whatever Pramila Jayapal tells you to do. Organize a friend group to attend this talk at Town Hall on Thursday about taking collective action and building civic community. Join a mutual aid group (like Super Familia, South & East King County, and Homies Helping Homies). Give food to a community fridge. Volunteer. Foster dogs. Do literally anything to give back to your community. Tell people you love them, and mean it. It’s time to show the fuck up, Seattle. SHANNON LUBETICH

21:35

Notepad gets “AI” [OSnews]

Nothing is sacred.

With this update, we are introducing the ability to rewrite content in Notepad with the help of generative AI. You can rephrase sentences, adjust the tone, and modify the length of your content based on your preferences to refine your text.

↫ Dave Grochocki at the Windows Insider Blog

This is the reason everything is going to shit.

20:49

Where to Get Cheesy, Loaded Nachos in Seattle [The Stranger]

Situ Tacos, Frelard Tamales, and More by EverOut Staff Today, November 6, is National Nacho Day, but let's be real: Is there ever a bad time to dive into a huge stack of chips smothered with cheese? Whether you're looking for a game day snack or just some shareable comfort food, nachos are here for you. Here are seven of our favorite versions in Seattle, from Situ Tacos to Spice Waala.

Fogón Cocina Mexicana
Capitol Hill's ever-reliable Mexican standby serves nachos heaped high with beans, cheese, onions, tomatoes, crema, and guacamole. Bulk it up with your choice of shredded beef, chicken, chorizo, or carne asada.
Capitol Hill

20:21

Pluralistic: Every internet fight is a speech fight (06 Nov 2024) [Pluralistic: Daily links from Cory Doctorow]


Today's links



A border fence. Behind it is a 'code-waterfall' effect as seen in the credit sequences of the Wachowskis' 'Matrix' movies. Looming over the fence is a panicked figure who has been gagged.

Every internet fight is a speech fight (permalink)

My latest Locus Magazine column is "Hard (Sovereignty) Cases Make Bad (Internet) Law," an attempt to cut through the knots we tie ourselves in when speech and national sovereignty collide online:

https://locusmag.com/2024/11/cory-doctorow-hard-sovereignty-cases-make-bad-internet-law/

This happens all the time. Indeed, the precipitating incident for my writing this column was someone commenting on the short-lived Brazilian court order blocking Twitter, opining that this was purely a matter of national sovereignty, with no speech dimension.

This is just profoundly wrong. Of course any rules about blocking a communications medium will have a free-speech dimension – how could it not? And of course any dispute relating to globe-spanning medium will have a national sovereignty dimension.

How could it not?

So if every internet fight is a speech fight and a sovereignty fight, which side should we root for? Here's my proposal: we should root for human rights.

In 2013, Edward Snowden revealed that the US government was illegally wiretapping the whole world. They were able to do this because the world is dominated by US-based tech giants and they shipped all their data stateside for processing. These tech giants secretly colluded with the NSA to help them effect this illegal surveillance (the "Prism" program) – and then the NSA stabbed them in the back by running another program ("Upstream") where they spied on the tech giants without their knowledge.

After the Snowden revelations, countries around the world enacted "data localization" rules that required any company doing business within their borders to keep their residents' data on domestic servers. Obviously, this has a human rights dimension: keeping your people's data out of the hands of US spy agencies is an important way to defend their privacy rights. which are crucial to their speech rights (you can't speak freely if you're being spied on).

So when the EU, a largely democratic bloc, enacted data localization rules, they were harnessing national soveriegnty in service to human rights.

But the EU isn't the only place that enacted data-localization rules. Russia did the same thing. Once again, there's a strong national sovereignty case for doing this. Even in the 2010s, the US and Russia were hostile toward one another, and that hostility has only ramped up since. Russia didn't want its data stored on NSA-accessible servers for the same reason the USA wouldn't want all its' people's data stored in GRU-accessible servers.

But Russia has a significantly poorer human rights record than either the EU or the USA (note that none of these are paragons of respect for human rights). Russia's data-localization policy was motivated by a combination of legitimate national sovereignty concerns and the illegitimate desire to conduct domestic surveillance in order to identify and harass, jail, torture and murder dissidents.

When you put it this way, it's obvious that national sovereignty is important, but not as important as human rights, and when they come into conflict, we should side with human rights over sovereignty.

Some more examples: Thailand's lesse majeste rules prohibit criticism of their corrupt monarchy. Foreigners who help Thai people circumvent blocks on reportage of royal corruption are violating Thailand's national sovereignty, but they're upholding human rights:

https://www.vox.com/2020/1/24/21075149/king-thailand-maha-vajiralongkorn-facebook-video-tattoos

Saudi law prohibits criticism of the royal family; when foreigners help Saudi women's rights activists evade these prohibitions, we violate Saudi sovereignty, but uphold human rights:

https://www.bbc.com/news/world-middle-east-55467414

In other words, "sovereignty, yes; but human rights even moreso."

Which brings me back to the precipitating incidents for the Locus column: the arrest of billionaire Telegram owner Pavel Durov in France, and the blocking of billionaire Elon Musk's Twitter in Brazil.

How do we make sense of these? Let's start with Durov. We still don't know exactly why the French government arrested him (legal systems descended from the Napoleonic Code are weird). But the arrest was at least partially motivated by a demand that Telegram conform with a French law requiring businesses to have a domestic agent to receive and act on takedown demands.

Not every takedown demand is good. When a lawyer for the Sackler family demanded that I take down criticism of his mass-murdering clients, that was illegitimate. But there is such a thing as a legitimate takedown: leaked financial information, child sex abuse material, nonconsensual pornography, true threats, etc, are all legitimate targets for takedown orders. Of course, it's not that simple. Even if we broadly agree that this stuff shouldn't be online, we don't necessarily agree whether something fits into one of these categories.

This is true even in categories with the brightest lines, like child sex abuse material:

https://www.theguardian.com/technology/2016/sep/09/facebook-reinstates-napalm-girl-photo

And the other categories are far blurrier, like doxing:

https://www.kenklippenstein.com/p/trump-camp-worked-with-musks-x-to

But just because not every takedown is a just one, it doesn't follow that every takedown is unjust. The idea that companies should have domestic agents in the countries where they operate isn't necessarily oppressive. If people who sell hamburgers from a street-corner have to register a designated contact with a regulator, why not someone who operates a telecoms network with 900m global users?

Of course, requirements to have a domestic contact can also be used as a prelude to human rights abuses. Countries that insist on a domestic rep are also implicitly demanding that the company place one of its employees or agents within reach of its police-force.

Just as data localization can be a way to improve human rights (by keeping data out of the hands of another country's lawless spy agencies) or to erode them (by keeping data within reach of your own country's lawless spy agencies), so can a requirement for a local agent be a way to preserve the rule of law (by establishing a conduit for legitimate takedowns) or a way to subvert it (by giving the government hostages they can use as leverage against companies who stick up for their users' rights).

In the case of Durov and Telegram, these issues are especially muddy. Telegram bills itself as an encrypted messaging app, but that's only sort of true. Telegram does not encrypt its group-chats, and even the encryption in its person-to-person messaging facility is hard to use and of dubious quality.

This is relevant because France – among many other governments – has waged a decades-long war against encrypted messaging, which is a wholly illegitimate goal. There is no way to make an encrypted messaging tool that works against bad guys (identity thieves, stalkers, corporate and foreign spies) but not against good guys (cops with legitimate warrants). Any effort to weaken end-to-end encrypted messaging creates broad, significant danger for every user of the affected service, all over the world. What's more, bans on end-to-end encrypted messaging tools can't stand on their own – they also have to include blocks of much of the useful internet, mandatory spyware on computers and mobile devices, and even more app-store-like control over which software you can install:

https://pluralistic.net/2023/03/05/theyre-still-trying-to-ban-cryptography/

So when the French state seizes Durov's person and demands that he establish the (pretty reasonable) minimum national presence needed to coordinate takedown requests, it can seem like this is a case where national sovereignty and human rights are broadly in accord.

But when you consider that Durov operates a (nominally) encrypted messaging tool that bears some resemblance to the kinds of messaging tools the French state has been trying to sabotage for decades, and continues to rail against, the human rights picture gets rather dim.

That is only slightly mitigated by the fact that Telegram's encryption is suspect, difficult to use, and not applied to the vast majority of the communications it serves. So where do we net out on this? In the Locus column, I sum things up this way:

  • Telegram should have a mechanism to comply with lawful takedown orders; and
  • those orders should respect human rights and the rule of law; and

  • Telegram should not backdoor its encryption, even if

  • the sovereign French state orders it to do so.

  • Sovereignty, sure, but human rights even moreso.

What about Musk? As with Durov in France, the Brazilian government demanded that Musk appoint a Brazilian representative to handle official takedown requests. Despite a recent bout of democratic backsliding under the previous regime, Brazil's current government is broadly favorable to human rights. There's no indication that Brazil would use an in-country representative as a hostage, and there's nothing intrinsically wrong with requiring foreign firms doing business in your country to have domestic representatives.

Musk's response was typical: a lawless, arrogant attack on the judge who issued the blocking order, including thinly veiled incitements to violence.

The Brazilian state's response was multi-pronged. There was a national blocking order, and a threat to penalize Brazilians who used VPNs to circumvent the block. Both measures have obvious human rights implications. For one thing, the vast majority of Brazilians who use Twitter are engaged in the legitimate exercise of speech, and they were collateral damage in the dispute between Musk and Brazil.

More serious is the prohibition on VPNs, which represents a broad attack on privacy-enhancing technology with implications far beyond the Twitter matter. Worse still, a VPN ban can only be enforced with extremely invasive network surveillance and blocking orders to app stores and ISPs to restrict access to VPN tools. This is wholly disproportionate and illegitimate.

But that wasn't the only tactic the Brazilian state used. Brazilian corporate law is markedly different from US law, with fewer protections for limited liability for business owners. The Brazilian state claimed the right to fine Musk's other companies for Twitter's failure to comply with orders to nominate a domestic representative. Faced with fines against Spacex and Tesla, Musk caved.

In other words, Brazil had a legitimate national sovereignty interest in ordering Twitter to nominate a domestic agent, and they used a mix of somewhat illegitimate tactics (blocking orders), extremely illegitimate tactics (threats against VPN users) and totally legitimate tactics (fining Musk's other companies) to achieve these goals.

As I put it in the column:

  • Twitter should have a mechanism to comply with lawful takedown orders; and
  • those orders should respect human rights and the rule of law; and

  • banning Twitter is bad for the free speech rights of Twitter users in Brazil; and

  • banning VPNs is bad for all Brazilian internet users; and

  • it’s hard to see how a Twitter ban will be effective without bans on VPNs.

There's no such thing as an internet policy fight that isn't about national sovereignty and speech, and when the two collide, we should side with human rights over sovereignty. Sovereignty isn't a good unto itself – it's only a good to the extent that is used to promote human rights.

In other words: "Sovereignty, sure, but human rights even moreso."

(Image: © Tomas Castelazo, www.tomascastelazo.com/Wikimedia Commons/CC BY-SA 4.0; modified)


Hey look at this (permalink)



A Wayback Machine banner.

This day in history (permalink)

#15yrsago Corporate law firm targets whistle-blowers and anonymous commenters https://www.business-live.co.uk/professional-services/birmingham-wragge-team-focus-online-3938930

#15yrsago Teen sex belongs in teen lit https://web.archive.org/web/20091110003113/http://www.locusmag.com/Perspectives/2009/11/cory-doctorow-teen-sex.html

#15yrsago Pigeons From Hell: Robert E Howard’s classic horror story adapted for comics by Joe R Lansdale https://memex.craphound.com/2009/11/06/pigeons-from-hell-robert-e-howards-classic-horror-story-adapted-for-comics-by-joe-r-lansdale/

#15yrsago Leaked text of secret copyright treaty vs. bland bureaucratic press-release describing same https://web.archive.org/web/20091108115049/https://www.michaelgeist.ca/content/view/4516/125/

#10yrsago Pennsylvania passes a “Gag Mumia” law to silence prisoner’s voices https://kersplebedeb.com/posts/the-gag-mumia-law/

#5yrsago T-Mobile: because we have a (stupid) trademark on one magenta shade, no one can use pink in their logos https://adage.com/article/digital/t-mobile-says-it-owns-exclusive-rights-color-magenta/2212556

#5yrsago Two years ago, Juli Briskman was fired for flipping off the Trump motorcade; now she’s been elected as a Virginia county supervisor https://www.washingtonpost.com/local/virginia-politics/the-cyclist-who-flipped-off-trumps-motorcade-is-running-for-public-office/2018/09/11/c12cc2d2-b5dc-11e8-a7b5-adaaa5b2a57f_story.html

#1yrago Amazon is a ripoff https://pluralistic.net/2023/11/06/attention-rents/#consumer-welfare-queens


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, holding a mic.



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)

  • Picks and Shovels: a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books, February 2025
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2025



Colophon (permalink)

Today's top sources:

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Today's progress: words ( words total).
  • 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: Spill, part four (a Little Brother story) https://craphound.com/littlebrother/2024/10/28/spill-part-four-a-little-brother-story/


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

20:00

What have you done, America? [WIL WHEATON dot NET]

I am anguished, I am heartbroken, I am afraid of what’s coming for people I love. I am shocked that my country just gave 247 years of Democracy away over one night. We live in a different country now, than we did when we woke up, yesterday. Exactly how violent and cruel and hateful this new country is has yet to be revealed, but it’s going to be pretty terrible.

I fought hard to prevent this. We all did. But I guess there was a fundamental hurdle we just could not overcome, and we have to be real about that hurdle: this country is full of people who are just drowning in hate and fear who want nothing more than to hurt as many people as they can.

I knew they were always here, but I always believed that there were more good, kind, compassionate people who chose light over darkness. I always believed that we were the good guys, the place people come to when they are fleeing what we became this morning.

it’s just … it’s a lot.

It’s going to take me a long time to process this, and find a way to not feel despair every moment of every day until he is dead and (maybe) America comes back from this open embrace of Fascist authoritarianism.

I mentioned to some folks earlier that I believe it’s important that we allow ourselves to feel all the feelings, to honor them without judgement. For a lot of us — millions upon millions — this is the greatest betrayal by our fellow Americans we have ever experienced, and that’s going to be a LOT. At the same time, we can’t really _do_ anything about that, other than support and love and show up for the people we love.

To that end, I’m going to retreat from public life for a bit, and be with my family.

Stay safe, everyone.

19:42

Statecraft [Penny Arcade]

My life is just sort of nonsense, generally. For the last twenty six years or so there's always something bizarre happening that you might be able to project, but a few of them just don't make any sense at all. We started putting comics online because it seemed clear to us that nobody in their right mind would publish them physically, and it ended up being a whole thing. In 2003 we started a donation drive called Child's Play in the most aggressive way a charity has ever been started I think, and its modern incarnation is an entity that is at the forefront of using VR and AR as therapeutic tools - one that is about to release a certification process for technicians who merge technology and child life. It seemed like more people should be able to go to E3, but they couldn't, and so we made another thing and that one is still going - we're coming up on PAX Unplugged, and the three-day badges just sold out. We made a D&D Podcast before podcasts were super a thing, and it's entirely possible we started Actual Play accidentally. In fact, that's how I came to know the Secretary of State, Steve Hobbs: He's a fan of Acquisitions Incorporated, somehow…?

 

 

19:00

18:42

Movember and Humble: A Powerful Alliance for Men’s Health [Humble Bundle Blog]

This November, we are thrilled to announce our partnership with Movember—a global movement dedicated to tackling some of the most pressing health issues faced by men today. Since its inception in 2003 with a couple of friends deciding to grow a mustache for fun for the month of November, Movember has gone on to raise over $1 billion and funded more than 1300 initiatives worldwide, …

The post Movember and Humble: A Powerful Alliance for Men’s Health appeared first on Humble Bundle Blog.

18:28

Slog AM: Welcome to the United States of Texas, Bob Ferguson Is Our Next Governor, Tanya Woo Is History [The Stranger]

Seattle's only news roundup. by Charles Mudede

We wake up today with this certainty: None of it mattered. The secret documents, the sky-high covid deaths, January 6, racist statement after racist statement, the economic crash, the sexual assault allegations, the pussy grabbing, Moscow,  Roe v. Wade, the conviction, and what have you. All of it amounted to a hill of beans. And there will certainly be more outrages in years to come; and once again, they still will not matter one dot. If we, on the left, come to this understanding, we can move on by simply asking: What, then, does matter? What truly counts in American politics? What is its actual ground? This kind of clear thinking might prove to be invaluable.

We also have to accept the fact that California no longer represents the future of America. In the past it did, but not anymore. The future is now found in Texas. Elon Musk knew this. He relocated himself, Space X, and X to what has become our whole country: the Lone Star State.

Kamala Harris only won deep blue states: And Trump is going back to the White House because millions of people decided to "sit this one out." And the Senate returns to the GOP. As for the House, its final composition is yet to be known. Now, how are we to read all of this, and, particularly, the outcome of the presidential race? Well, Trump's first term in office is something like the first book in Octavia Butler's Parable series, Parable of the Sower, which was published in 1993 and features a Trump-like president who basically strips America of its economic assets. The second term will be like the second book, Parable of the Talents, which was published in 1998 and features an out-and-out Christofacist president who promises to “Make America Great Again.” Butler never completed the third book in the series.   

"Welcome to how our only world ends. It will be like this every summer: getting worse, and worse, and worse until there’s nothing worse left."https://t.co/vs5HAmUloY

— The Stranger 🗞 (@TheStranger) July 23, 2024

Florida and South Dakota gave abortion access the middle finger. But Arizona, Colorado, New York, Maryland, Missouri, Montana, and Nevada protected reproductive rights. However, with the Senate, and possibly the House, under GOP control, the whole states’ rights business might turn out to be worth no more than the salt you put in greens.

The Stranger Election Control Board had a good night. Alexis Mercedes Rinck is going to beat incumbent Tanya Woo for Seattle City Council Position 8. The same goes with Democratic Socialist Shaun Scott. He will certainly beat Andrea Suarez in the race to represent Washington’s 43rd Legislative District. And the man who did not catch the Green River Killer isn't going to Olympia. Bob Ferguson handily defeated Dave Reichert for the governor seat. Sen. Maria Cantwell gave her opponent nothing but the boot. And, altogether, it seems Washington became bluer, saner, a little world, a precious stone, set in the reddest of seas.   

Now that the whole country is basically Texas, Seattle might consider not staying in bed with conservative council members. Now is the time to get up and go hard to the left.   

Voters showed Washington State Ferries (WSF) some love this time: The Prohibit Carbon Tax Credit Trading initiative  went down in flames. This means WSF will get electric ships and some badly-needed government cheese. However, the Ensure Access to Natural Gas measure , which wants to decelerate Puget Sound Energy’s departure from carbon liberation and protec the buyers and sellers of natural gas statewide, left the gate in the lead: 51% to 48%.

Joe Kent is facing a second round of wound licking. His opponent in Washington's 3rd Congressional District race, Congresswoman Marie Gluesenkamp Perez is, at this point, ahead by 4 points.

The sun will be out today. That's something.

A termite mound that's been around for something like 34,000 years was recently discovered in South Africa. Of course, termites haven't called this mound home for thousands of years. And this is a shame, because termites are really delicious. You catch them during the rainy season; this is when termites take to the sky with lots of fat in their bodies (they are trying to start a new colony—the circle life, that sort of thing). A little cooking oil and a few minutes on the burner turns these brown critters into a tasty snack.

Let us end with this scene from Downtown 81. Ronald Reagan is president. Hip-hop is emerging. And Jean-Michel Basquiat is getting his groove on in the ruins. What I want to point out is the way he moves. So smooth. So cold. So internal. This is being with others to be by yourself. This is exactly how I feel today. Dancing to the aftermath.    

2024 Election Night Takeaways [The Stranger]

Sure, the national election provided a cure-all for the will to live. But let’s not throw the whole bottle out with the booze. In Seattle, King County, and Washington State, we turned a deeper shade of blue last night. And there are a few things worth cheering about. Here are our six takeaways from the night as you numb the existential dread with your breakfast whiskey. by Hannah Krieg

Sure, the national election provided a cure-all for the will to live. But let’s not throw the whole bottle out with the booze. In Seattle, King County, and Washington State, we turned a deeper shade of blue last night. And there are a few things worth cheering about. Here are our six takeaways from the night as you numb the existential dread with your breakfast whiskey.

 

A Stranger Victory

Okay, because who doesn't need a dose of levity to start off this morning. Once again, The Stranger’s anointed candidates claimed victory last night, at least locally. Like we said in the primary, we acknowledge that we had some overlap with lesser endorsement boards, such as the Seattle Times Editorial Board, in the race for Governor and Attorney General. However, we only endorsed the same person in the Superintendent of Public Instruction race because the Times had to come to our side on Chris Reykdal after Reykdal trounced the Time’s first choice in the primary. Our candidate for the 43rd Legislative District Shaun Scott also beat the Time’s choice in the primary, and yet the Times refused to see the light and endorsed Andrea Suarez, who Scott walloped. Current election results show him receiving 68% of the vote compared to Suarez’s 31%. Our candidates also swept in the race for Lands Commissioner, the open seat in the 5th Legislative District, and the citywide Seattle City Council seat. Also, we rightly endorsed a “no” vote on the Initiative to eliminate WA Cares, which created a public long-term care option. 

Our endorsement has never carried more heft and girth. We promise to protect you from the loathsome choices of the Seattle Times Editorial Board in perpetuity. 

 

Washington voters rejected the right

Donald Trump won last night. We’re concerned about the growth of right-wing populism in this country and what will happen as Trump rebuilds the federal government in his image with his cadre of idiots: JD Vance, Elon Musk, RFK Jr., and his dumbass sons. So it’s heartening that Washington elected Democrats who will fight that version of the federal government and that voters heartily rejected the right-wing in this election.

In the 43rd District, “Democrat” Andrea Suarez suffered a colossal and deserved loss. The Executive Director of We Heart Seattle, who zealously aligns herself with far-right proponents of treatment-first homelessness policy, ran a stupid campaign that played to the basest, most reactionary fears of Seattleites. Even more concerning than her ideology was her sheer ignorance of how policy even works. The fiercely progressive Shaun Scott earned 67 percent of the vote in the first ballot drop because he was a strong candidate with popular policies that appealed to a broad coalition of progressive voters in a renter-heavy district. Also likely to face sweet defeat is Trump-backed Joe Kent, who currently trails Democratic congresswoman Marie Gluesenkamp Perez in Washington’s 3rd Congressional District. 

The statewide races for Superintendent of Public Instruction and Attorney General were not blowouts like the Suarez-Scott race, but the MAGA-y candidates David Olson and Pete Serrano are lagging far behind Superintendent Chris Reykdal and Nick Brown. Olson ran on proudly opposing DEI and "critical race theory" as a school board member and encouraged voters to join Moms for Liberty, an extremist group. Serrano is all about undermining gun safety laws and wouldn't commit to enforcing our shield law for people seeking abortions and gender-affirming healthcare, which will be a very big fucking deal now. 

 

State Executives Ready to Tangle With Trump

With President Donald Trump primed to retake the Oval Office, Washingtonians can at least take comfort in the fact that we elected two of the best people to defend Washington’s laws in our future Governor, Bob Ferguson and future Attorney General, Nick Brown. Ferguson, who as of election night led the race with 56% of the vote compared to former US Representative Dave Reichert’s 43%, took the stage Tuesday night to thank his supporters before acknowledging the grim outlook facing the nation in its presidential election. Ferguson declared that if Trump once again became commander-in-chief, no other statewide candidate in the nation would be more “prepared to defend your freedoms against that administration than I am.” During Trump’s last term, Ferguson sued the administration 82 times, challenging policies on issues such as access to contraception, 3-D printed guns, and most notably Trump’s initial travel ban on people from seven majority-Muslim nations. Right alongside Ferguson working on the response to Trump’s travel ban was Brown, who ended election night with 56% of the vote compared to Pasco Mayor Pete Serrano’s 43%. At the time of the travel ban, Brown worked as general counsel to Governor Jay Inslee and worked closely on that issue with Ferguson’s office. He also promised in his campaign to defend the state’s shield law. Together, Ferguson and Brown seem to be the perfect dynamic duo to fight any policy that a Trump presidency could bring to Washington state. 

 

Washingtonians Love A Tax

With the projected defeat of three out of four of the proposed ballot initiatives, Washington voters sent a clear message to millionaire hedge fund manager Brian Heywood: We love taxes, especially on the rich. Washington voters seem likely to reject I-2109, I-2117, and I-2124, all of which would have cut taxes. I-2109, which early results showed 63% of people voted “No” on, would have eliminated the state’s capital gains tax. I-2117, which 61% of people voted “No” on as of election night, would have ended the Climate Commitment Act–a cap-and-trade program that effectively acts as a tax on companies exceeding the emissions cap. Finally, I-2124, which 55% of people rejected, would have eliminated the WA Cares program, a tax that helps people pay for long-term care. 

Heywood billed these initiatives as “Vote yes, pay less,” and Washington voters took one look at how voting “Yes” would cut funding to schools, cut money for transportation and clean water, and end a program that could help them and their families in a health emergency, and they said, “No.” 

In fact, the only bill they did vote “Yes” on had no clear fiscal impact, I-2066, which sought to make it easier and more affordable for people in the state to switch from gas to electric power. On election night, I-2066 still remained tight, with 51% of people voting “Yes,” and 48% voting “No”. It’s easier to scare Washington voters into voting against a bill based on unfounded fears of being forced to give up their gas stoves than it is to convince them that cutting taxes benefits them.

 

So THIS is Why Even-Year Elections are the One Thing Sara Nelson Hates More Than Progressives

Council President Sara Nelson argued against moving local elections to even years and it's clear why — under a more representative democracy, her pearl-clutching ideology would lose every single time. Typically, Seattle elects its City Council members, Mayor, and City Attorney in odd years, which tend to have much lower turnout than even-year elections. This year, because Council Member Teresa Mosqueda ditched her citywide position early, Seattle got to vote for a council member in a presidential year, the highest turnout opportunity of them all. 

In a more representative sample of voters, Seattle picked a progressive, Alexis Mercedes Rinck, over conservative Tanya Woo. This marks a strong rebuke of the policies of the current conservative council, headed by Council President Sara Nelson. The current council won their seats in 2023, when about 46% of voters cast a ballot for their district seats. In all seats but one, a race between progressive Council Member Tammy Morales and Woo, the conservative contender prevailed. 

This year, more than 56% of registered Seattle voters cast a ballot and the progressive candidate, Rinck, scored 57.3% on night one. Her support will likely increase as late ballots come in. But even if her results froze, she garnered more votes than all the council winners of 2023 combined. She’s also a few thousand ahead of where Nelson finished in 2021. So maybe the NextDoor types hold the “majority” of seats, but Rinck holds the majority in representation.

 

Capitol Hill is Still a Communist Hellhole

And we wouldn’t have it any other way. After Council Member Kshama Sawant decided to give up her long-held City Council office, political commentators began lamenting (or mostly celebrating) the end of socialism in Seattle. No clear successor emerged from the barrage of milquetoast candidates who ran in the District 3 race in 2023. Instead, the city’s most progressive district elected Joy Hollingsworth, a centrist who attempted to permanently enshrine a subminimum wage for restaurant workers. Politicos forgot the neighborhood’s lefty sensibilities so quickly, 43rd LD candidate Andrea Saurez tried to smear her opponent, Shaun Scott, by calling him a communist. As it turns out, the LD that contains Sawant’s old stomping grounds doesn’t consider “communist” an insult. Scott, a candidate endorsed by both Democrat and lefty organizations, won his seat in a landslide – almost 68% to Saurez’s 32%. So basically, if you're a Capitol Hill communist (bonus points if you have a funky colored mullet), you might have a chance at beating Hollingsworth if you run a truly leftwing campaign. Or maybe these results give Hollingsworth a little wake-up call. An image of Hollingsworth at a Saurez campaign event floated around Twitter a few months ago. If your preferred candidate, who shares your constituency, loses dramatically, you should probably take note and adjust accordingly, i.e., stop attacking workers' rights.

18:14

Link [Scripting News]

PS: I bet Bezos wishes he had bought Twitter.

17:42

How do I declare an operator overload for my Windows Runtime class? [The Old New Thing]

A customer tried to add an operator overload to their Windows Runtime class:

// C++/WinRT

namespace winrt::Contoso::implementation
{
    struct Length : LengthT<Length&;
    {
        Length(double meters) : m_value(meters) {}

        Double Meters() { return m_value; }

        bool operator<(Length const& other)
        {
            reutrn m_value < other.m_value;
        }
    private:
        double m_value;
    };
}

But they found that it didn’t work:

// C++/WinRT
winrt::Contoso::Length part1(1.0);
winrt::Contoso::Length part2(2.0);
if (part1 < part2) { // error

// C#
var part1 = new Contoso.Length(1.0);
var part2 = new Contoso.Length(2.0);
if (part1 < part2) { // error

It doesn’t work because you added them to your implementation class, which is an implementation detail that is not visible to clients. Other parts of your implementation could use it when manipulating Length objects, but nobody outside the implementation can.

winrt::Contoso::Length part1(1.0);
winrt::Contoso::Length part2(2.0);
if (*winrt::get_self(part) < *winrt::get_self(part2)) {

People outside the implementation can see only what is exposed in the metadata, which is typically generated from the IDL file. And there is currently no way to express operator overloading in MIDL3.

namespace Contoso
{
    runtimeclass Length
    {
        Length(Double meters);

        Boolean operator<(Length other); // error
    }
}

I wasn’t around for the initial decision, but I suspect that one reason is that not all languages support operator overloading. (For example, JavaScript doesn’t.) And even among those which do, not all languages support the same operators. (For example, C++ and Python support the spaceship operator, but C# doesn’t.)

But really, I think the reason is that operator overloading is not essential to the original mission of the Windows Runtime which is to provide a way for one language to consume objects produced by another language. Operator overloading would require a formalization of how to express it, including a fallback for languages that don’t support it. This is a lot of work for something that isn’t part of the core value proposition, and it could be interpreted as an expansion of scope.

You can fall back to using names.

namespace Contoso
{
    runtimeclass Length
    {
        Length(Double meters);

        Boolean IsLess(Length other);
        // or even
        Int32 Compare(Length other); // returns negative, zero, or positive
    }
}

The post How do I declare an operator overload for my Windows Runtime class? appeared first on The Old New Thing.

Slog AM: Welcome to the United States of Texas, Bob Furgeson Is Our Next Governor, Tanya Woo Is History [The Stranger]

Seattle's only news roundup. by Charles Mudede

We wake up today with this certainty: None of it mattered. The secret documents, the sky-high covid deaths, January 6, the racist statement after racist statement, the economic crash, the sexual assault allegations, the pussy grabbing, Moscow,  Roe v. Wade, the conviction, and what have you. All of it amounted to a hill of beans. And there will certainly be more outrages in years to come; and once again, they still will not matter one bit. If we, on the left, come to this understanding, we can move on by simply asking: What, then, does matter? What truly counts in American politics? What is its actual ground? This kind of clear thinking might prove to be invaluable.

We also have to accept the fact that California no longer represents the future of America. In the past it did, but not anymore. The future is now found in Texas. Elon Musk knew this. He relocated himself, Space X, and X to what has become our whole country: the Lone Star State. 

Kamala Harris only won deep blue states: So, Trump is going back to the White House. And the Senate returns to the GOP. As for the House, its final composition is yet to be known. Now, how are we to read all of this, and, particularly, the outcome of the presidential race? Well, Trump's first term in office is something like the first book in Octavia Butler's Parable series, Parable of the Sower, which was published in 1993 and features a Trump-like president who basically strips America of its economic assets. The second term will be like the second book, Parable of the Talents, which was published in 1998 and features an out-and-out Christofacist president who promises to “Make America Great Again.” Butler never completed the third book in the series.   

"Welcome to how our only world ends. It will be like this every summer: getting worse, and worse, and worse until there’s nothing worse left."https://t.co/vs5HAmUloY

— The Stranger 🗞 (@TheStranger) July 23, 2024

Florida and South Dakota gave abortion access the middle finger. But Arizona, Colorado, New York, Maryland, Missouri, Montana, and Nevada protected reproductive rights. However, with the Senate, and possibly the House, under GOP control, the whole states’ rights business might turn out to be worth no more than the salt you put in greens.

The Stranger Election Control Board had a good night. Alexis Mercedes Rinck is going to beat incumbent Tanya Woo for Seattle City Council Position 8. The same goes with Democratic Socialist Shaun Scott. He will certainly beat Andrea Suarez in the race to represent Washington’s 43rd Legislative District. And the man who did not catch the Green River Killer isn't going to Olympia. Bob Ferguson handily defeated Dave Reichert for the governor seat. Sen. Maria Cantwell gave her opponent nothing but the boot. And, altogether, it seems Washington became bluer, saner, a little world, a precious stone, set in the reddest of seas.   

Now that the whole country is basically Texas, Seattle might consider not staying in bed with conservative council members. Now is the time to get up and go hard to the left.   

Voters showed Washington State Ferries (WSF) some love this time: The Prohibit Carbon Tax Credit Trading initiative  went down in flames. This means WSF will get electric ships and some badly-needed government cheese. However, the Ensure Access to Natural Gas measure , which wants to decelerate Puget Sound Energy’s departure from carbon liberation and protec the buyers and sellers of natural gas statewide, left the gate in the lead: 51% to 48%.

Joe Kent is facing a second round of wound licking. His opponent in Washington's 3rd Congressional District race, Congresswoman Marie Gluesenkamp Perez is, at this point, ahead by 4 points.

The sun will be out today. That's something.

A termite mound that's been around for something like 34,000 years was recently discovered in South Africa. Of course, termites haven't called this mound home for thousands of years. And this is a shame, because termites are really delicious. You catch them during the rainy season; this is when termites take to the sky with lots of fat in their bodies (they are trying to start a new colony—the circle life, that sort of thing). A little cooking oil and a few minutes on the burner turns these brown critters into a tasty snack.

Let us end with this scene from Downtown 81. Ronald Reagan is president. Hip-hop is emerging. And Jean-Michel Basquiat is getting his groove on in the ruins. What I want to point out is the way he moves. So smooth. So cold. So internal. This is being with others to be by yourself. This is exactly how I feel today. Dancing to the aftermath.    

17:28

Link [Scripting News]

"Richest man in the world" doesn't begin to cover Musk's ambition. He wants "all the money in the world."

Link [Scripting News]

Final note (I think). The pain you feel at first may abate. It did for me. I had pushed down memories of 2020 and 2021. It was a horror show, and Trump was the main character. So the first thing I had to deal with is that I don't want to remember that. Too painful. But once I realized that's not where we are right now, it's a totally different situation, that's when the creative impulse rose as the pain receded. We have one short term thing to do -- keep the campaign running, and long term we have to recognize division we add, and counteract it. We are the party that welcomes everyone regardless or race, religion, country of origin, age or gender. All of them. No exceptions. The election result represents big change. And it's a good time to make more changes.

17:21

[$] Building secure images with NixOS [LWN.net]

Image-based Linux distributions have seen increasing popularity, recently. They promise reliability and security, but pose packaging problems for existing distributions. Ryan Lahfa and Niklas Sturm spoke about the work that NixOS has done to enable an image-based workflow at this year's All Systems Go! conference in Berlin. Unfortunately, LWN was not able to cover the conference for scheduling reasons, but the videos of the event are available for anyone interested in watching the talks. Lahfa and Sturm explained that it is currently possible to create a NixOS system that cryptographically verifies the kernel, initrd, and Nix store on boot — although doing so still has some rough edges. Making an image-based NixOS installation is similarly possible.

15:56

Link [Scripting News]

In 2016, on the night of Election Day, when it was obvious Trump would win, before taking a Xanax and going to sleep, I wrote a piece, that my friend Chuck Shotton says I should run again. Rather than doing that, I'll quote the important part. "I don't think it's about economics, I think it's about change happening too fast. And the Trump voters had the power to bring it to a screeching halt, they saw the chance and took it."

Link [Scripting News]

First thing -- Don't shut down the campaign. We must keep communicating with the electorate, independent of what they get from the news orgs. The Harris campaign did an exemplary job. Why shut it down. Keep setting the agenda. Help keep us organized. Preserve the perspective and expectation of democracy in the US. Change the message from raising money, to keeping us all in touch with the opposition (ie us). This is the mistake we made in every election since we had the web to organize. The Repubs, almost by accident, never stopped organizing. And now that Musk, who will be part of the new administration, owns Twitter, you can be sure they will stay and get more organized. We can do it too! We have to stop making this mistake of going back to zero after election, whether we win or lost.

Link [Scripting News]

Blame is pointless. It may be emotionally satisfying at some level, but it is division, and that's why we keep losing elections. We don't see it but we create our own divisions. This must stop.

Link [Scripting News]

Be generous with all classes of people, by gender, age, race, religion, whatever is used to divide us. Stop vilifying men. Carville was right. There's no reason to make one whole gender the scapegoat for all our problems. It's no accident that the Repubs own the men. We could probably have had ten percent or more of their voters if we stopped doing this. Key point, when you blame a whole gender, you hurt people who have no power to stop it.

Link [Scripting News]

Speaking of Carville, yesterday's Trippi podcast with Carville as the only guest was the best podcast I've ever heard. I recommended it yesterday as inspirational. Now that we know the outcome of the election, it's a marker of where we were before the results were known. A world that no longer exists. But like stories written in 2016, the markers are useful to see where we once were and how we got here, and what we can learn from what happened between. I wish it had turned out the way these two great friends thought it should have. But it didn't. But there was a hint that they knew what wouldn't work this time. No spoilers.

Link [Scripting News]

Ben Thompson wrote in his Stratechery newsletter: "What is fascinating is how this fundamentally transforms any attempt to evaluate the Twitter acquisition. From a business perspective it’s a massive failure, and might always be: Musk paid too much for Twitter as it was, and in the intervening years the flight of advertisers from the platform has made it worth even less. From a Musk Inc. perspective, however, X played a pivotal role in ensuring that the incoming administration will do whatever Musk needs at the exact moment that SpaceX is gaining the capabilities to actually make a trip to Mars, if only the FAA in particular will give him the freedom to do so. That alone is almost certainly worth $44 billion to Musk!" I wrote in 2017, that some Repub would buy Twitter, and it would merge and thus transform politics and tech. This was obvious, but for some reason I was the only one who saw it. We could have headed this off, if people would just listen. I beg you to listen to people you don't usually listen to. The NYT will never hire someone like me to write on their op-ed page, so if you only accept your input from people with legit credentials, you'll miss insights like this. We're paying a heavy price for this now. When I begged people to listen they came back with the balance sheet valuation of Twitter, but they were leaving the most important asset off the balance sheet, the dollar value of being able to elect a president. Musk didn't miss this.

Link [Scripting News]

Also to the Twitter founders, amassing that much power and centralizing it as Twitter did, had a cost that we're paying now. But it's very hard to stop when the juggernaut is rolling. I understand, but in the future we have to think about this more clearly. When a medium becomes too big and centralized, there's trouble ahead. It was accidental that Trump was the one to take advantage of this to route around journalism and go direct, but it was not accidential that Musk did.

Link [Scripting News]

Speaking of Musk, maybe he will temper Trump's desire for retribution. It may be a vain hope, but I'll cling to it anyway. Doing business in a world of retribution might not be too conducive to the creativity needed to run innovative tech businesses. A climate of fear doesn't inspire great software. I know the quality of products Musk makes, I own and love my Tesla Model Y. Best car I've ever owned or driven.

Link [Scripting News]

My longtime friend, Mike Arrington said next time have a primary. He has a point. Would Harris have been the nominee if the Dems had had a normal primary process? Who knows. Maybe the voters could have told us then that what happened yesterday was coming.

15:49

Funding restored for man-page maintenance [LWN.net]

Man pages maintainer Alejandro Colomar announced in September that he was suspending his work due to a lack of support. He has now let it be known that funding has been found for the next year at least:

We've been talking for a couple of months, and we have already agreed to sign a contract through the LF [Linux Foundation], where a number of companies provide the funds for the contract. The contract will cover the next 12 months for the agreed amount, and we should sign it in the following days. Since I've already seen a draft of the contract, and it looks good, I've already started maintaining the project again, starting on Nov 1st.

15:14

Link [Scripting News]

I prayed. I really did. But I got the wrong answer.

14:21

Security updates for Wednesday [LWN.net]

Security updates have been issued by AlmaLinux (libtiff), Debian (context, libheif, and thunderbird), Fedora (php-tcpdf, syncthing, and thunderbird), Gentoo (EditorConfig core C library, Flatpak, Neat VNC, and Ubiquiti UniFi), Oracle (bcc, bpftrace, grafana-pcp, haproxy, kernel, krb5, libtiff, python-gevent, python3.11-urllib3, python3.12-urllib3, and xmlrpc-c), Red Hat (python3.11-urllib3), SUSE (audacity, curl, govulncheck-vulndb, gradle, htmldoc, libgsf, python310, and qbittorrent), and Ubuntu (linux-aws-5.4, linux-oracle-5.4, mpg123, and python-werkzeug).

13:42

CodeSOD: Uniquely Validated [The Daily WTF]

There's the potential for endless installments of "programmers not understanding how UUIDs work." Frankly, I think the fact that we represent them as human readable strings is part of the problem; sure, it's readable, but conceals the fact that it's just a large integer.

Which brings us to this snippet, from Capybara James.

    if (!StringUtils.hasLength(uuid) || uuid.length() != 36) {
        throw new RequestParameterNotFoundException(ErrorCodeCostants.UUID_MANDATORY_OR_FORMAT);
    }

StringUtils.hasLength comes from the Spring library, and it's a simple "is not null or empty" check. So- we're testing to see if a string is null or empty, or isn't exactly 36 characters long. That tells us the input is bad, so we throw a RequestParameterNotFoundException, along with an error code.

So, as already pointed out, a UUID is just a large integer that we render as a 36 character string, and there are better ways to validate a UUID. But this also will accept any 36 character string- as long as you've got 36 characters, we'll call it a UUID. "This is valid, really valid, dumbass" is now a valid UUID.

With that in mind, I also like the bonus of it not distinguishing between whether or not the input was missing or invalid, because that'll make it real easy for users to understand why their input is getting rejected.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

12:07

IoT Devices in Password-Spraying Botnet [Schneier on Security]

Microsoft is warning Azure cloud users that a Chinese controlled botnet is engaging in “highly evasive” password spraying. Not sure about the “highly evasive” part; the techniques seem basically what you get in a distributed password-guessing attack:

“Any threat actor using the CovertNetwork-1658 infrastructure could conduct password spraying campaigns at a larger scale and greatly increase the likelihood of successful credential compromise and initial access to multiple organizations in a short amount of time,” Microsoft officials wrote. “This scale, combined with quick operational turnover of compromised credentials between CovertNetwork-1658 and Chinese threat actors, allows for the potential of account compromises across multiple sectors and geographic regions.”

Some of the characteristics that make detection difficult are:

  • The use of compromised SOHO IP addresses
  • The use of a rotating set of IP addresses at any given time. The threat actors had thousands of available IP addresses at their disposal. The average uptime for a CovertNetwork-1658 node is approximately 90 days.
  • The low-volume password spray process; for example, monitoring for multiple failed sign-in attempts from one IP address or to one account will not detect this activity.

11:49

Urgent: Ban surveillance pricing [Richard Stallman's Political Notes]

US citizens: call on lawmakers to ban surveillance pricing.

They should go further than that and ban collecting personal data about the purchaser.

Putin forces drones dropping grenades [Richard Stallman's Political Notes]

The Putin forces are using specialized drones that drop grenades on civilians. The drone controllers do not target a specific person; rather, they generally attack anyone they come across.

Risk of Kessler Syndrome [Richard Stallman's Political Notes]

As we increase the number of artificial satellites in Earth orbit, the danger of the Kessler Syndrome (a chain reaction of collisions) increases too. Humanity could bar itself from space entirely.

The movie Gravity showed an extremely fast chain reaction. It might actually take years, but be unstoppable nonetheless.

No memory of non-extremist Republican party [Richard Stallman's Political Notes]

Today's US college students have no memory of a Republican Party that wasn't extremist. To those whose families were Republicans, the way they find it now is normal.

"Ineffectual" carbon offsets slowing path to "real zero" [Richard Stallman's Political Notes]

*Corporations using "ineffectual" carbon offsets are slowing path to "real zero", more than 60 climate scientists say.*

It is obvious that use of bogus "offsets" as an excuse not to do real decarbonization keeps the greenhouse emissions high.

Spain's apocalyptic floods [Richard Stallman's Political Notes]

*Spain's apocalyptic floods [following others in countries around the world] show two undeniable truths: the climate crisis is getting worse and Big Oil is killing us.*

The annual COP conferences that was created to get the world o the road to safety has been captured by planet roasters, and it is hard to see how the US and Russia could negotiate any sort of agreement about fossil fuels.

Some large countries could set up a carbon tax system on their own, using the tax money to help the poor not to subsidize specifically fossil fuel for poor people. Maybe then other countries would join.

California high school to invest in clean energy [Richard Stallman's Political Notes]

* A high school in California has decided not to invest in coal, oil or [fossil] gas, instead pledging to put money into clean energy..*

This was a demand made my the students. Bravo! But what we really need is to stop anyone from "investing" in fossil fuels.

10:49

Après nous le déluge [Charlie's Diary]

So, there was an election yesterday in the United States. (This is not that blog entry or discussion thread: that'll come later, when I've got my thoughts in order and gotten tired of swearing.)

Much smaller things also happened yesterday. In particular, I had a first appointment with my new ophthalmologist, who has taken over the practice from my previous ophthalmologists (who retired). I had about a six week wait for this session, because they're moving to an entirely new IT system and in addition to getting up to speed with her patients needs she used the session to move all the old notes into the new set-up (and confirm that they were correct).

I thought there'd been a change in my vision, and that I'd need new lenses, and I was half-right: there has indeed been a change, but I don't need new glasses as much as I need surgery, because I'm developing cataracts in both eyes.

The good news is that cataracts are easily fixed (it's a 15 minute out-patient operation), and I probably won't even need glasses again afterwards. The bad news is that last week the Princess Alexandra Eye Pavilion closed for the next six months (I'm told work was underway to replace an aging drain when they discovered asbestos, which fucks everything up). That's the main eye hospital for this region, and while NHS Lothian made provisions for continuity of service before the closure, it's going to cause some disruption. On top of which there are now only seven weeks until Christmas, when non-emergency healthcare hits a speedbump then spends the first couple of weeks in the new year playing catch-up. And I really need to be seen by a consultant before deciding on a course of action because my eyeballs are spectacularly wonky (history of retinal detachment in one eye, occluded/burst blood vessel and subsequent scarring in the other, hypertension and Type II diabetes).

Having said that, the visual changes have impacted my ability to use a computer or tablet, hence to earn a living, so I'm hoping to get a priority appointment. And if there's a waiting list for NHS surgery, I can afford to go private and jump the queue. (I don't have health insurance, but as surgery goes cataracts are cheap.) So at that point it'll probably be a couple of weeks of disruption/no writing, then gradually getting back to normal.

(On the "earn a living" point, I've been shirking writing or editing for the past few months. And this makes it clear why I've been doing that, which had been worrying me: if something hurts you tend to avoid doing it, and staring at a screen through cataracts was not doing my headmeat any favours, so I was unconsciously avoiding that. It's a huge relief to learn that I wasn't losing my motivation for writing, just butting my head up against an invisible and subliminal barrier.)

Incidentally, my old ophthalmologist didn't miss the cataracts, they simply weren't there at the time of my last eye exam in April 2023. I'd normally have been seen in April of this year, but that was right when the practice was changing hands, and also changing patient recall systems (see "new IT system" above). They're not so advanced that they were self-diagnosable: I thought it was simply my continual age-related visual deterioration.

Anyway.

You may have noticed (or not noticed) my participation in the comments has dropped markedly in recent months. That's because it's hard to concentrate on the text entry box when your vision is blurring and doubling and the bright white background is hard to look at. I have an explanation now: these are all symptoms of cataracts! So hopefully things should converge back towards the old normal in a couple of months. Until then, however, I'm not going to be policing the comments quite as rigorously (believe it or not I used to read everything posted here). So play nice!

10:14

The paradox of points [Seth's Blog]

Points aren’t just for games. Points are how we keep score and decide what to do next. Pick your scorekeeping wisely.

Too much focus on the score can bend us or break us, pushing us to engage with too much focus and without regard for balance.

And our attachment to obvious points strips us of our agency and independence.

If it’s subtle, variable and up to the user, the uncertainty can amplify our insecurity. “Wear festive clothing,” is an unwelcome line on an invitation, because the point system is unclear. How do I fit in? How do I not lose, or even win?

On the other hand, if the points on offer are industrialized, transactional or predictable, it quickly dehumanizes us into profit-seeking automatons. But at scale, this sort of easily communicated metric is common.

The word ‘jerk’ describes what happens to a human who is controlled by an assembly line (or a horse by a whip). A visitor to the first Ford assembly line was amazed at how the stopwatch and the pursuit of humans-as-a-resource mindset was turning people into puppets.

Points and compliance. Choose carefully.

09:56

Daniel Lange: Weird times ... or how the New York DEC decided the US presidential elections [Planet Debian]

November 2024 will be known as the time when killing peanut, a pet squirrel, by the New York State DEC swung the US presidential elections and shaped history forever.

The hundreds of millions of dollars spent on each side, the tireless campaigning by the candidates, the celebrity endorsements ... all made for an open race for months. Investments evened each other out.

But an OnlyFans producer showing people an overreaching, bureaucracy driven State raiding his home to confiscate a pet squirrel and kill it ... swung enough voters to decide the elections.

That is what we need to understand in times of instant worldwide publication and a mostly attention driven economy: Human fates, elections, economic cycles and wars can be decided by people killing squirrels.

RIP, peanut.

P.S.: Trump Media & Technology Group Corp. (DJT) stock is up 30% pre-market.

09:14

Well, Fuck. [Whatever]

I have little to say at the moment other than it would take a miracle for Trump not to win this, and I’m not exactly confident the miracle is coming (Update: it didn’t come, he’s won). It’s not great!

I will have more to say later, but I’ll need to get back over the ocean and gather my thoughts first.

Take your time with this one, folks. It’s a lot.

Comments closed because I’m traveling most of the day and have no time to babysit a thread.

— JS

08:28

Statecraft [Penny Arcade]

New Comic: Statecraft

08:14

Secrets, p17 [Ctrl+Alt+Del Comic]

We are down to the final hours of our Volume 2 Kickstarter campaign! Once the campaign closes, we’re getting to work on making these books for our backers. If you want in, now’s the time!

The post Secrets, p17 appeared first on Ctrl+Alt+Del Comic.

06:35

Working-class Britons [Richard Stallman's Political Notes]

*…Working-class white people were actually the dispensable pawns of white supremacy. Or as Lyndon B Johnson put it: "If you can convince the lowest white man he’s better than the best coloured man, he won’t notice you’re picking his pocket. Hell, give him somebody to look down on, and he’ll empty his pockets for you."

I made a link to that article because it tells us something important about racism. Racism is an intense form of bigotry; it is a collective injustice that I condemn, and support the campaign against. I think posting a link to that article will help that campaign.

Ironically, that article itself embodies symbolic bigotry by capitalizing "black" but not "white". (To avoid this bigotry, capitalize both words or neither one.) I denounce lesser forms of bigotry too, and I don't want to normalize symbolic bigotry by letting it pass without calling it out. Normally I avoid any menton of articles that practice it.

I had conflicting feelings about that article based on these two valid goals: to make a link, because of its important point about racism, or not to link, to avoid normalizing the article's own bigotry. I concluded that the first goal could not be neglected, and made the link. But the second goal also should not be neglected — hence this note to criticize the article's own bigotry.

Harris endorsement [Richard Stallman's Political Notes]

The billionaire owner of the LA Times blocked it at the last minute from publishing an already-written endorsement of Harris for president. Some editors resigned in protest, and many subscribers have quit.

Bezos blocked at the last minute an already written endorsement of Harris for president, according to staff. Some editors, staff and subscribers are quitting.

Since Bezos is not an ideological right-wing extremist, there are suspicions that he was afraid the bully would punish his other companies if he allowed an endorsement of Harris and then the bully somehow became president.

People have asked what Musk hopes to get if he can make the bully president.

I think Musk wants to be emperor.

The danger that billionaires pose to the American republic somewhat resembles the way concentration of wealth destroyed the Roman Republic (1). Eventually the richest Roman of all, Julius Caesar, became so powerful that no few in Rome could go against his wishes, not enough to succeed in denying him anything. He aimed for total power.

Later his nephew, Octavian, actually got that total power, so that no one could safely oppose him at all. This he obtained the official position that we nowadays call "emperor".

If we defeat the bully this time, he may go away and leave us alone, but Vance won't refuse the "support" of Musk, and they are not old enough to be likely to disappear soon. To be safe, we will have to take away most of Musk's wealth. And likewise for other billionaires.

1. There are many differences, of course. The Roman Republic never had goals such as democracy or equal rights. The vote of a rich citizen counted for more than that of a poor citizen, and a sufficiently rich citizen was automatically a senator. Wives had little more rights than slaves. Notwithstanding the revolt of Spartacus, few ever said that slavery was wrong in general.

Nonetheless, there are similarities in the evolution of the system into instability as the richest fortunes became greater.

Marwan Barghouti [Richard Stallman's Political Notes]

*Israeli prison staff accused of assaulting Marwan Barghouti [in his cell],*

causing several wounds.

He is kept in solitary confinement, which is effective a form of torture,

and rarely allowed visits, even from lawyers. So the attack could hardly have been done by anyone but the prison guards.

Israeli publishers [Richard Stallman's Political Notes]

Some famous writers have supported a campaign to boycott Israeli cultural institutions, except those that have taken a stand against the occupation or atrocities.

The reason I call Isreal's massacres of Palestinians "atrocities" but not "genocide" is that the meaning of the latter word is a matter of magnitude of the acts in question, not just the kinds of acts.

Killing 20 people in cold blood is clearly an atrocity, but it is not genocide. Killing 40,000 people out of 2.3 million, by violence or starvation, is a series of atrocities, but is it genocide? I think that is still stretching the word. Killing 10% of the population of Gaza might be genocide. Enough additional killing (which I hope will not occur) would surely make it genocide. But I don't think there is a precise line.

Why argue about that question of the meaning of the word? Killing tens of thousands of people is a grave and vicious act, and calling it a series of atrocities expresses the gravity of the crime in a way that is totally clear.

Georgian Dream party [Richard Stallman's Political Notes]

Russia has more or less taken unofficial control of Georgia, through the opposition is still fighting and claim that the election was rigged.

NAFTA jobs [Richard Stallman's Political Notes]

* The working class saw Clinton’s support of Nafta, which cut most tariffs between US, Mexico and Canada, as "a betrayal".* They continue to blame Democrats for it. It was a betrayal and it was promoted by Democrats (though not as many Democrats as Republicans).

But what counts in the election is what they would do next year. Overall, Democrats are inclined to resist the demands of rich people and the businesses they own somewhat more than Republicans would,

though not as much as Bernie Sanders would.

Trump VA warning [Richard Stallman's Political Notes]

The wrecker is threatening to upend the Veterans Administration, which is likely to kill many US veterans.

It appears that he despises living veterans as much as he despises veterans who are dead.

He also expressed his support for the Confederacy, and thu sin directly for slavery, by saying he would rename Fort Liberty back to Fort Bragg.

Soldiers, would you want your base to be named after an enemy general that fought against the United States?

Soldiers, would you want your base to be named after an incompetent general whose decisions helped the US so much that US generals said it was unfortunate to have killed him?

Musk giveaway lawsuit [Richard Stallman's Political Notes]

*Philadelphia DA sues Elon Musk and America Pac over $1m voter giveaway,* calling it *running an illegal lottery.*

I am surprised that it is not a crime that can be prosecuted. Prosecution might make Musk stop, but I think he will disregard have his lawyers just let the process proceed, and resolve the suit next Wednesday Nov 6 by paying whatever penalty is imposed, The amount he would lose is probably insignificant to him.

06:00

Girl Genius for Wednesday, November 06, 2024 [Girl Genius]

The Girl Genius comic for Wednesday, November 06, 2024 has been posted.

01:21

General Election Night 2024: Grab Your Anxiety Meds and the Vice of Your Choice, LFG!!! [The Stranger]

Follow along for continuous Election Night 2024 coverage! by Stranger Election Control Board 📌

Welcome to the General Election 2024 Live Blog. Election Day is here, and it’s time to grab your anxiety meds and vice of choice and tuck in for a wild ride.

Chances are, we won’t know the results of the presidential election tonight (though we’ll likely know who won Georgia, North Carolina, and Michigan by the end of the night—we’ll keep you posted.) 

But in the meantime, we should have results for some of our most important local elections before we all go to bed tonight. As always, we’ll be lurking at their parties, judging their snacks, and capturing the election night magic/anxiety/crushing defeat.

If you haven’t voted yet, there’s still time! But run, don’t walk. 

Check your voter registration here. If you’re not, you can still register and vote at one of seven voting centers in the county, which are open until 8 pm today. Remember to bring your Washington State driver's license, and a state ID, or memorize the last four digits of your social security number when you go. If you’re already registered to vote, awesome. The ballot should be in your mailbox unless you took it out and put it somewhere weird, but if it’s not, you can print out a new one or go vote in person at a King County voting center. Once you’ve filled out your ballot, find your nearest drop box here

Once you’ve voted, if you need to be with people who are just as stressed as you, come on by The Stranger and KEXP’s election party at the Crocodile. The party started at 4 pm but we'll be there until midnight—join us!

Now back to business. Want a refresher on the races as we count them down? Check out our endorsements here. 

Here’s a very non-exhaustive list of the things to know going in: 

  • We’re going to elect a new governor! (Bob, you better have food at your party this time.) Both The Stranger and the Seattle Times endorsed Bob Ferguson, and he was squarely in the lead in recent polls, so we’re not too worried about MAGA-dude Dave Reichert running the state.
  • Alexis Mercedes Rinck! The most recent polling puts the progressive newcomer a whole 24 points ahead of Council appointee Tanya Woo. Woo came in second in the August primary, but Woo’s campaign manager called the gap between the two candidates (Rinck’s 50.2% to Woo’s 38.4%) “brutal.” It looks like Woo’s big business supporters abandoned her in the general, so we’re hoping to send a proper progressive to City Hall tonight. 
  • Now here’s one for the books, folks—a real blue-on-blue showdown in the 9th Congressional District. We’ve got 14-term Congressman Adam Smith, who is also a House Armed Services Committee bigwig, going head-to-head with civil rights firebrand Melissa Chaudhry. What’s the primary dividing line? What else: Gaza and the ongoing horror show that Smith pretends to wring his hands over while quietly writing blank checks for the next round of airstrikes. He's made empty calls for a ceasefire, while Chaudhry has called for an arms embargo. With no fears of a Republican winning in the state's only majority POC- district, it'll be interesting to see if the race serves as a referendum on Smith's support of the Israeli genocide. 
  • Have you read about Superintendent Chris Reykdal’s opponent in this election? Local families say David Olson is cozy with Moms for Liberty, a far-right parents group that opposes inclusive policies and lessons on race, gender, and sexuality in school; and he helped the Peninsula School District push away critical race theory and Diversity, Equity, and Inclusion (DEI) training while parents and students raised concerns about racism and discrimination in his district. The race for Superintendent of Public Instruction is a nonpartisan race, which is likely why the most recent polls show that 21% of voters plan to vote for Reykdal, 18% for Olson, and a whopping 61% had no idea who they’re voting for. We hate this, and we’ll be watching it closely. 
  • All eyes are on Clallam County. This little bellwether county at the top of the Olympic Peninsula has backed every presidential winner since 1980. Will they keep their streak? 

Check back regularly—we’ll keep you updated through the night!

Outgoing Governor Jay Inslee Takes the Stage 9:26 pm Jay Inslee speaking at the convention center. SECB

Inslee was the last to speak at the WA Dem election party, opening his speech by saying, “I’ve been waiting for Bob Ferguson to take over my job for years…”

People Are Doing Therapy Crafts at the Crocodile 9:11 pm Color the pain away. BILLIE WINTER

Sure, we got a lot of good news locally, but holy shit things are still VERY TENSE. So folks are crafting, donating to Shout Your Abortion, and, of course, drinking at the Crocodile to soothe the stress.

Shout Your Abortion's free swag at the party. BILLIE WINTER Cheers or something! BILLIE WINTER Attorney General Bob Ferguson Declares Victory 9:02 pm Bob Ferguson made it clear he's not gonna take Trump's bullshit (if it comes to that, please god don't let it come to that). SECB

Ferguson declared victory in the Washington State Governor’s race from the stage at the WA Dem election party, as he leads his opponent, former US Representative Dave Reichert, by about 13 points. Ferguson declared that if the presidential election results in another four years of Donald Trump, there is no other statewide candidate in the nation more “prepared to defend your freedoms against that administration than I am.”

Everything We Know So Far About Local Results 9 pm

Alright folks, do yourselves a favor and turn a blind eye to that "other race" going on (unless you’re a glutton for punishment and want to dive headfirst into an instant doom spiral). But hey, there’s actually some decent news in the local returns. Here’s your super-quick breakdown that won’t exactly soothe your soul but might take the edge off:

  • Nick Brown is mollywhooping Republican Pete Serrano in the Attorney General race. Brown, who has that “Obama” appeal we’re told, is ahead 56.85% to 43.06%.
  • Chris Reykdal, who’s held down the Superintendent of Public Instruction role since 2017, might not be packing up anytime soon; he’s beating David Olsen 53.1% to 45.84%.
  • Over in the Commissioner of Public Lands showdown, Dave Upthegrove is trouncing Republican Jaime Herrera Beutler 54.6% to 44.87%.
  • Sal Mungia’s narrowly ahead of Dave Larson, with 50.6% of the vote to Larson’s 49.91% in the race for State Supreme Court Position #2.
  • Seattle is maybe, possibly, finally, saying goodbye to Tanya Woo. The never-elected city council member currently trails Alexis Mercedes Rinck 42% to 57%. 
  • In Congressional District 9, genocide enabling Adam Smith will most likely defeat Melissa Chaudhry. The race currently sits at 70% to 30%, respectively. 
  • In what we believe experts refer to as a one-sided ass-kicking, Democratic Socialist Shaun Scott has a gargantuan lead of 68% to 31% over Andrea Surez in the race to replace Frank Chopp in the 43rd district.
  • And in what should be a surprise to no one Bob Ferguson is likely our next governor. He currently leads Dave Reichart 56.47% to 43.34%

Turning to the initiatives… 

The good: Initiatives 2066, 2109, and 2124 are sinking fast, with nearly 60%, 70%, and 54% of counted ballots giving them the thumbs-down. There’s a little light at the end of the tunnel!

The not-so-great: Initiative 2117 is pulling 53% in favor.

Still, three out of four ain’t bad! 

And finally, in the race everyone was teetering on the edge of sanity about for the last five months. In the state auditor’s race, Pat McCarthy leads Matt Hawkins 59.21% to 40.66%. If you’ve been losing sleep over this one, maybe you’ll get a nap tonight. 

Nick Brown Feels Good After Initial Results (But Won't Wear Sparkly Cowboy Hat) 8:56 pm Nick, why won't you wear the cowboy hat too? SECB

Nick Brown thanked his team and his supporters and told us he didn’t see a world where he wouldn’t win at this point. As of 8:39 pm, Brown had 56% and his opponent, Pete Serrano, had 43%. As Brown thanked everyone and headed to main ballroom to give a speech, he pointed out his kids, who were sporting those blue cowboy hats.

All But One Initiative Rejected 8:45 pm State Representative Nicole Macri reacting to tonight's local results. SECB

Spirits were high in the Defend WA room at the WA Dems Election Party. Defend WA organized the campaign to reject the four initiatives that sought to repeal the Capitol Gains Tax, the Climate Commitment Act, Washington’s public Long Term Care program WA Cares, and a law intended to reduce Washington’s greenhouse gas emissions. Voters roundly reject the first three of those initiatives, I-2109, I-2117, and I-2124. Unfortunately for Washington’s hopes to decrease our reliance on natural gas in favor of electric power, voters appear to have voted yes on I-2066, which would effectively prevent the state from trying to electrify anything in any building. Insane. State Representative Nicole Macri said Defend WA knew that would be a hard fight because of a lot of early misinformation about the law I-2066 sought to repeal. She says Washington tried to get ahead of the nation, but the change confused voters, and they seem to want the state to go a little slower. But the results aren’t finalized. At last check, numbers showed 51.1% voting “Yes” and 48.84% voting “No.” Also, Macri said the fact that the capitol gains tax remained in place was great. “We need this,” Macri said.

Holy Fucking Shit, Shaun Scott 8:37 pm Shaun "Holy Fucking Shit" Scott speaks. SECB

“Holy fucking shit!” screamed the man next to us, reading the election results from his laptop. “Shaun Scott–67 percent.” That’s as far as he got before the emcee took over to lead a call and response shout of “I believe that we can win.” Rep. Darya Farivar got 87.52%, while Alexis Mercedes Rinck got 57.32%. She acknowledged the anxiety people may be feeling about the presidential race, but she and the crowd kept up the energy.

Election officials have not counted all the voters, but all three candidates are looking like winners, which would be a serious victory for local progressive politics and a rebuke of reactionary conservatism.

Rep. Farivar told the room that they all had work to do.

“I’m so grateful that locally we have Alexis to defend things at the City level,” she says. “I am absolutely thrilled I’m going to have a partner in these shenanigans.”

Scott began his speech by saying his victory came five years ago to the hour of his 2019 defeat running for City Council—and that tonight he finally got it done for the essential workers, the students, the parents, the teachers, and everybody who would benefit from the economic justice he campaigned on.

Alexis took the mic last. The crowd cheered when she said a queer Latina would represent them on Seattle City Council.“But I know I stand on the shoulders of many who pave the way and I promise I won’t be the last.”

The TV is back on, but people are too busy hugging and shaking hands to pay much attention.

Suarez Is Cheery, Losing 8:34 pm Suarez promises to run again. SECB

Suarez kept a cheery attitude despite dismal results—31.4% to Shaun Scott's 67.7%. She says she can't swing back from her poor showing at the first drop. But even though she lost, Suarez maintains that she won.

"When you run, you win just by getting your message out there," says Suarez. "Winners never quit, and quitters never win."

Saurez hugged her small group of supporters after her results dropped. She comforts them by promising to run again. She's not sure for what, but she's always had one eye on the citywide council seats in 2025.

No One Seems to Notice the Local Election Wins at the Dem Party 8:17 pm Look, y'all! Local results are in! SECB

At the large WA Dem party at the convention center, all eyes remained fixed on the national races as Dems swept local results. Speeches will come later, but initial results show the Governor, Attorney General, and Lands Commissioner races all went to the Dems. 

The First Batch of State and King County Results Are In! 8:06 pm

See statewide results here!

See King County results here

We're reading and thinking and typing as quickly as we can to bring you some analysis very soon...

For now, a cat in a stroller:

A cat in a backpack at the Sea-Meow convention at the Seattle Center last weekend. MADISON KIRKMAN Hey! We Were Watching That! 7:59 pm Turn it back on! SECB

Somebody shut off the TV at Saint John's. The presidential race is looking a little scary, isn’t it?

Nick Brown Jumped in the Ocean This Morning 7:55 pm Yes, that *IS* Nick Brown. SECB

Attorney General candidate Nick Brown woke up at 5:15 this morning and jumped into the ocean to start his day. Then he did some other campaign stuff, and right before heading to the Dem watch party, he had dinner with his campaign team and Governor Jay Inslee. Brown said he’s excited for his chances tonight and he had a better ground game than his opponent. As we chatted, someone walked past and said, “That’s Nick Brown.” He looked up, confused for a moment, and then said, “I gotta get used to that.” The charm is charming.

Upthegrove's Mooching off Brown’s Campaign 7:49 pm Dave Upthegrove and his husband Chad. SECB

Candidate for Lands Commissioner Dave Upthegrove just arrived with his husband Chad. Upthegrove doesn’t have his own suite at this thing, it would have cost him $2,000, which made us gag. We appreciate thrifty Upthegrove stashing his stuff in Attorney General Candidate Nick Brown’s room. Upthegrove says he feels good about his chances to win his race, and he hopes to be toasting with a glass of champagne at his parent's house later tonight.

Meanwhile, at Our Election Party at the Crocodile... 7:46 pm Billie Winter

Thank god for Miss Texas 1988.

You Have 15 Minutes to Drop Off Your Ballot 7:45 pm

This ballot box on Capitol Hill even comes with live music! 

Polls close in 15 minutes! But the party is just getting started at this dropbox on Capitol Hill... pic.twitter.com/ddNfGYQw63

— The Stranger 🗞 (@TheStranger) November 6, 2024
Capitol Hill Protest Update 7:30 pm

A total of five people have been arrested for property damage, according to SPD. The property damage was, apparently, spray paint. They used the helicopter for some spray paint.

There are now five total arrests. The group has broken up. We will update here with additional information if anything changes. pic.twitter.com/YcmKUium3V

— Seattle Police Department (@SeattlePD) November 6, 2024
Loose Protest Leads to Arrests on Capitol Hill 7:10 pm

The Seattle Police Department made at least four arrests for property destruction at a protest on Capitol Hill tonight. Some flyers posted earlier in the week called for people to show up at Cal Anderson Park at 6 pm on Election Day to protest the “genocide abroad and a militarized police state at home.” Apparently, a lot of cops are out on the hill tonight on their bikes according to one of the photographers we have assisting us with election coverage. SPD said the King County Sheriff’s Office has their helicopter out to assist them with the situation.

The Social Justice League Will Save Seattle 7:08 pm People are too nervous to party at Saint John's. SECB

We’ve arrived at Saint John’s in Capitol Hill for the combined election night party for progressives Shaun Scott, a candidate for the 43rd District, District 46 Rep. Darya Farivar, and Alexis Mercedes Rinck, the Seattle City Council candidate challenging appointee Tanya Woo for Position 8. The Stranger endorsed all three of these progressive candidates this year, and if the results tonight are anything like the midterms, all three are likely to win.

It’d be a jolly vibe if everyone wasn’t so goddamn nervous about the presidential election. The people wearing Harris/Walz shirts are looking from their phones to the big screen TV showing minute-by-minute updates from NBC. The room was filling up and a group of guys asked to sit at our table, including Harrison Jerome, a volunteer with the Rinck campaign from the start because he thinks she’s good on housing affordability. “I’m a renter and I want to live in Seattle and by my parents,” he said. “But it gets harder and harder every year. Feels like if you didn’t move here in the ’90s you pretty much have no hope of owning a home.” As we talked, his eyes barely left the screen.

A minute later, Rinck walked in the door, trailed by a cameraman from Fox 13 with a blindingly bright light. On the back porch, she tells me she tried to take it slow today. She made some calls, did some sign waving, and ran off the pre-election jitters. She says that over the past few weeks, voters have been eager to share their personal experiences with affordability, safety, and their loved ones struggling with substance use disorder.

“They just want to be heard,” she says. “...They want to know how the City can play a role in addressing those things.”

Boooo, Bob Ferguson!  6:56 pm Ferguson's folks are turning people away at the door. SECB

Ferguson won’t let anyone in his party. So excited for this man to represent the Democratic Party. Big tent with no room for the people. ☹️

He won't let us in and we're jealous because we want to make friends with this girl. SECB Good Gossip (but No Free Booze) at Andrea Suarez's Party 6:49 pm TELL US WHERE WOO'S PARTY IS, ANDREA. SECB

State House candidate Andrea Suarez of We Heart Seattle fame hosted a small gathering at Cotto (no free booze, remind us to Venmo request Brady). In a small crowd of less than a dozen, Suarez gave us lots of attention. She said she had never seen us in so much clothing! We called her rude in the moment, but we forgive her. She also loudly prompted We Heart Seattle's Tim Emerson to tell us how many people the organization has housed this year. He said eight. Suarez said there's a lot of good We Heart Seattle does, but people get fixated on the times she's moved tents and stuff. She said more coverage should come about the positives of her controversial organization after the election.

But after an Aperol spritz, we really gossiped like girls. We learned that Suarez recently officiated a wedding for two of her "original litter pickers," relitigated her talent show-related trauma, and shit-talked consultants.

Suarez also tattled on Council Member Tanya Woo, who told us she wasn't having a public party. Turns out she's hosting a gathering on the waterfront. Suarez grumbled about Woo not agreeing to a combined party. She said she feels a little insecure about the fact that people came to her party early so they could get to Woo's event in time for the results.

Speaking of, Council President Sara Nelson popped in briefly. She left around 6:15 pm, probably to get to Woo's event, according to Suarez. Feeling snubbed, we plotted briefly to crash Woo's party. We offered to pick up litter for 3 hours in exchange for the address for Woo's secret party, but she didn't rat her all the way out.

Unfortunately, we just missed Council President Sara Nelson. She kept plenty of space between us before she rushed out the door.

Oh Hey, Kay!
6:39 pm And another one. SECB

Democratic convention delegate Kay Acholonu doubled up on the cowboy hats, sporting the one from tonight and the one from the Democratic Convention. 

Immaculate Vibes at Representative Pramila Jayapal’s Party 6:33 pm DO THE HATS LIGHT UP????? SECB

In a swath of empty, lonely, cold rooms, Jayapal’s party set itself apart as the place to be in this convention center tonight. She lucked out that the air conditioning in her room crapped out, we walked in and immediately felt like we were actually at a party, not a failing mega church’s Sunday service (seriously convention center lighting is terrible for the vibes). Jayapal says she expects Democrats to win the presidency tonight, as well as the House. We noted that one of her former campaign staffers, Shaun Scott, is on the ballot tonight, and she says a whole host of great new and old local candidates are on the ballot this year, name-checking Bob Ferguson among them. We left Jayapal with a drink in her hand and in conversation with Leesa Manion, who seemed relieved to no longer be standing in a mostly empty room.

Do You Need to See a Picture of a Cat Wearing a Cheeseburger Hat? 6:29 pm

That fucking New York Times needle is back, goddammit. 

A cat in a cheeseburger at the Sea-Meow convention at the Seattle Center last weekend. MADISON KIRKMAN You Have Two Hours Left to Vote, Seattle! 6 pm

Washington polls close at 8 pm! Not even registered? There’s still time! Haven’t dropped off your ballot yet? Find the nearest drop box and get to it! 

As Hannah Krieg wrote on Monday:

As of 9 am Monday, 50% of King County’s 1.4 million registered voters cast a ballot. That’s a much higher engagement rate than in typical odd-year elections, where less than half of registered voters usually participate. However, turnout still falls short of the nearly 86% we saw in 2020.

Young people need to pick up the slack. About 21% of registered voters are 65 or older, but with a whopping 71% of those voters turning in a ballot, they make up 30% of the returned ballots. As for voters under 35, they account for 28% of all registered voters, but make up only about 19% of the returned ballots. Young people: You tend to vote better than old people. Sorry, not sorry. Please get to the ballot box!

Early Birds Arrive at the Big Dem Party 5:53 pm King County Prosecuting Attorney Leesa Manion (center) starting the party at the Convention Center. SECB

King County Prosecuting Attorney Leesa Manion arrived at the Dem party at the Convention Center. She looked around for a second and commented how quiet everything was. They’d only just opened the doors, but we agree with her. Manion said she feels like the election will be solid on the local level, and she’s “going to live in the land of hope” about the presidential race.

And Now for a Message from the Great Riz Rollins 5:33 pm

Riz Rollins has entered the chat with some thoughtful words for the night, from our election party at the Crocodile: 

          View this post on Instagram                      

A post shared by The Stranger 🗞 (@thestrangerseattle)

Alllllll the Democrats Are Gathering at the Convention Center, Where They're Passing Out Sparkly Cowboy Hats 5:20 pm It's giving Cowboy Carter. SECB

We arrived at the Seattle Convention Center to the smell of popcorn and the vibes of one of those conferences where you learn to sell real estate. Candidates expected here tonight include US Senator Maria Cantwell, Attorney General and gubernatorial candidate Bob Ferguson, Governor Jay Inslee, US Representative Pramila Jayapal, Candidate for Attorney General Nick Brown, King County Councilmember and Public Lands Commissioner candidate Dave Upthegrove, and the Defend WA Coalition who mounted the opposition to the statewide initiatives. Excited to see Ferguson spend the whole night avoiding someone placing one of these sparkly hats on his head.

Chris Reykdal Is More Nervous About Presidential Race Results Than His Own 5:14 pm Brandy the dog (left) and Chris watching early national results before Washington's numbers come in. COURTESY OF CHRIS REYKDAL

“It’s been a long 18 months, but I’m glad it’s over,” says Superintendent of Public Instruction Chris Reykdal. Just home from work, he plans to swing by a function with the Thurston County Democrats tonight. He'll be back by 8 pm to lock in and watch the numbers.

Reykdal got screens. His campaign manager’s got screens. They’ll be watching the county-by-county numbers in his race, as well as races in the Legislature, the open State Supreme Court race, the Commissioner of Public Lands Race, and the I-2109 ballot measure to repeal the state’s gains tax, a big deal for education. They’ll throw MSNBC on the TV for the presidential. The clear favorite, Reykdal is more nervous about Trump and Harris than his own race.

The Superintendent race is technically a non-partisan, but the only non-partisan part about it is that voters won’t see either candidate’s political preference on the ballot. Practically speaking, the Democrat-endorsed Reykdal and his Republican-endorsed challenger David Olson have vastly different visions for our schools.

Reykdal is a progressive former teacher, former state legislator and the two-time OSPI incumbent. He cares about feeding poor kids, diversifying the workforce, paying teachers what they deserve, and protecting queer and trans kids from the onslaught of “anti-woke” attacks from right-wingers.

Republican-endorsed David Olson is one of those right-wingers. As a member of the Peninsula School District school board, he made friends with his local chapter of Moms for Liberty. He said in his nearly 11 years on that board fighting DEI and “critical race theory” was one of his proudest moments.

Despite this clear contrast, a Northwest Progressive Institute survey of 571 likely voters found that despite the stark ideological divide, 61% did not know who they were voting for. Of those who did know who they supported, Reykdal held a narrow three-point lead (21%) over Olson (18%). 

Andrew Villeneuve, founder and executive director of the NWPI, said in an email that the lack of party affiliation explains the large group of undecided voters in this race, even though previous polling shows Washingtonians are enthusiastic about Reykdal’s policy positions. “For those voters taking the time to study the candidates, it should become apparent pretty quickly that Chris is fired up to tackle the tough issues head-on.” (The NWPI has worked with Reykdal for years on issues like no-cost meals and school seismic safety, he says.)

Rekydal says that’s just a reality of his race. “I do think it’ll be closer than it was four years ago, but I also think it’s just the fact that there isn’t an obvious D or an R by a name,” he says. “They just don’t have the traditional political cues.”

The Big East Coast Dump Results...  5:04 pm

Several polls on the East Coast just closed, and the New York Times is projecting: 

Trump wins Florida, Oklahoma, Mississippi, Alabama, South Carolina, and Tennessee.

Harris wins Maryland, Massachusetts, and Delaware.

Polls are still open here in Washington for another almost 3 hours! Get your ballots in! There are tons of local elections worth voting on

Here's another cat in a backpack.

A cat in a backpack at the Sea-Meow convention at the Seattle Center last weekend. MADISON KIRKMAN Vermont Goes to Sanders and Harris 4:30 pm

But you already knew that wouldn't happen, didn't you?

Related: New York Times called Kentucky and West Virginia for Trump. 

Don't worry, we have more cat pictures for later.

MSNBC Calls Indiana for Trump 4:06 pm

Don’t panic. It’s early.

Here's a picture of a cat preparing for space travel.

A cat in a backpack at the Sea-Meow convention at the Seattle Center last weekend. MADISON KIRKMAN Melissa Demyan's Brain Feels Like Goo 3:55 pm Demyan with her partner in their special occasion tracksuits. COURTESY OF MELISSA DEMYAN

Melissa Demyan, the brave labor organizer taking on Rep. Larry Springer, the Stranger Election Control Board’s least favorite so-called Democrat in the State House, says her brain feels like goo right now. Her campaign’s reached more than 63,000 voters, knocked on 10,000 doors, made 1,300 phone calls, and pitched 500 signs in lawns. And this morning, she and her partner put on their matching Adidas tracksuits—saved for special occasions—to do some last-minute get-out-the-vote effort. When The Stranger called her (we only took 5 minutes of her precious time, we are very considerate!), she said she still had one more “lit drop” before she could head to her party at Ixtapa in Redmond Ridge. She plans to treat herself to a sipping shot of the nicest tequila in the house while she watches the results roll in for her race and across the country. Jane Fonda will not be in attendance.

Iconic actress Jane Fonda endorses labor organizer Melissa Demyan to unseat 20-year incumbent Rep. Larry Springer in the 45th LD, who she said we should really call a Republican. Fonda also asks voters to vote NO on the Let's Go Washington initiatives. pic.twitter.com/0jaW7IYQmc

— Hannah Krieg (@hannahkrieg) October 11, 2024

Every action counts for Demyan. She came within striking distance of Springer in the primary, but he outspent her about five to one. Still, given the outpouring of community support and her team's tireless ground game, she anticipates a close match. Either way, Demyan’s proud of the race she and her supporters ran. Demyan felt especially hartened when a supporter responded to a campaign text to tell her that her 8-year-old is telling everyone they encounter that she’s her favorite candidate besides Kamala Harris.

Melissa Chaudhry: Not Stressing, Eating Cake 2:45 pm Why didn't you send a picture of the cake, Melissa? COURTESY OF MELISSA CHAUDHRY

After a long weekend of door knocking, flyering, and general get-out-the-voting, U.S. House of Reps candidate Melissa Chaudhry is ready to celebrate with her supporters and the broader movement against Israel’s genocide in Gaza. “I’m doing party prep and not stressing. I repeat—not stressing,” Chaudhry told the Stranger Election Control Board in a phone call this afternoon.

She’s throwing a party at the Mall of Africa Restaurant in SeaTac where her supporters will enjoy food, non-alcoholic drinks (coconut water appears to be the crowd favorite, she says), and a cake frosted to resemble her campaign yard signs.

Until then, Chaudhry says she’ll be keeping up with prayer, but she won’t be praying for a victory. Her competition, Warhawk Rep. Adam Smith, secured more than 50% of the vote in the primary. Flushed with cash from the defense industry and pro-Israel PACs, Smith has a pretty good chance at winning the general too.

If she loses, Chaudhry says she will continue to do “much of the same work” she’s done on the campaign.

“Dozens and dozens and dozens of people have told us that they're registering to vote or their whole families are registering to vote for the first time because of my campaign,” says Chaudhry. “And that's the kind of grassroots engagement and political empowerment that we need to make democracy real.”

She also hopes her campaign sends a clear message to Smith that his constituents want investment at home, not in genocides across the globe.

A Rainbow Appears
1:44 pm Don't forget to breathe. SECB

As we were preparing all our election night coverage, this rainbow appeared over the city. Good omen? 

00:49

Pluralistic: How to have cancer (05 Nov 2024) [Pluralistic: Daily links from Cory Doctorow]


Today's links



A hospital ward. Three gowned medical figures, two in hazmat suits, loom over the bed in the foreground.

How to have cancer (permalink)

I've got cancer but it's probably (almost certainly, really) okay. Within a very short period I will no longer have cancer (at least for now). This is the best kind of cancer to have – the kind that is caught early and treated easily – but I've learned a few things on the way that I want to share with you.

Last spring, my wife put her arm around my waist and said, "Hey, what's this on your rib?" She's a lot more observant than I am, and honestly, when was the last time you palpated your back over your left floating rib? Sure enough, there was a lump there, a kind of squishy, fatty raised thing, half a centimeter wide and about four centimeters long.

I'm a 53 year old man with a family history of cancer. My father was diagnosed with lymphatic cancer at 55. So I called my doctor and asked for an appointment to have the lump checked over.

I'm signed up with Southern California Kaiser Permanente, which is as close as you come to the Canadian medicare system I grew up under and the NHS system I lived under for more than a decade. Broadly speaking, I really like KP. Its app – while terrible – isn't as terrible as the other apps, and they've taken very good care of me for both routine things like vaccinations and checkups, and serious stuff, like a double hip replacement.

Around the time of The Lump, I'd been assigned a new primary care physician – my old one retired – and so this was my first appointment with her. I used the KP app to book it, and I was offered appointments six weeks in the future. My new doc was busy! I booked the first slot.

This was my first mistake. I didn't need to wait to see my PCP to get my lump checked over. There was really only two things that my doc was gonna do, either prod it and say, "This is an extremely common whatchamacallit and you don't need to worry" or "You should go get this scanned by a radiologist." I didn't need a specific doctor to do this. I could have ridden my bike down to the KP-affiliated Urgent Care at our local Target store and gotten an immediate referral to radiology.

Six weeks go by, and my doc kind of rolls the weird lump between her fingers and says, "You'd better go see a radiologist." I called the Kaiser appointment line and booked it that day, and a couple weeks later I had a scan.

The next day, the app notified me that radiology report was available in my electronic heath record. It's mostly technical jargon ("Echogenic areas within mass suggest fatty component but atypical for a lipoma") but certain phrases leapt out at me: "malignant masses cannot be excluded. Follow up advised."

That I understood. I immediately left my doctor a note saying that I needed a biopsy referral and set back to wait. Two days went by. I left her a voice message. Another two days went by. I sent another email. Nothing, then a weekend, then more nothing.

I called Kaiser and asked to be switched to another Primary Care Physician. It was a totally painless and quick procedure and within an hour my new doc's intake staff had reviewed my chart, called me up, and referred me for a biopsy.

This was my second mistake. When my doctor didn't get back to me within a day, I should have called up KP and raised hell, demanding an immediate surgical referral.

What I did do was call Kaiser Member Services and file a grievance. I made it very clear that when I visited my doctor, I had been very happy with the care I received, but that she and her staff were clearly totally overloaded and needed some kind of administrative intervention so that their patients didn't end up in limbo.

This is a privilege. I'm a native English speaker, and although I was worried about a serious illness, I didn't have any serious symptoms. I had the ability and the stamina to force action in the system, and my doing so meant that other patients, not so well situated as I was, would not be stuck where I had been, with fewer resources to get un-stuck.

The surgeon who did the biopsy was great. He removed my mass. It was a gross lump of yellowy-red gunk in formaldehyde. He even let me photograph it before it went to pathology (warning, gross):

https://www.flickr.com/photos/doctorow/54038418981/

They told me that the pathology would take 2-5 days. I reloaded the "test results" tab in the KP website religiously after 48 hours. Nothing was updated. After five days, I called the surgical department (I had been given a direct number to reach them in case of postsurgical infections, and made a careful note of it).

It turned out that the pathology report had been in hand for three days at that point, but it was "preliminary" pending some DNA testing. Still, it was enough that the surgeon referred me to an oncologist.

This was my third mistake: I should have called after 48 hours and asked whether the pathology report was in hand, and if not, whether they could check with pathology. However, I did something very right this time: I got a phone number to reach the specialist directly, rather than going through the Kaiser main number.

My oncologist appointment was very reassuring. The oncologist explained the kind of cancer I had ("follicular lymphoma"), the initial prognosis (very positive, though it was weird that it manifested on my rib, so far from a lymph node) and what needed to happen next (a CT/PET scan). He also walked me through the best, worst and medium-cases for treatment, based on different scan outcomes. This was really good, as it helped me think through how I would manage upcoming events – book tours, a book deadline, work travel, our family Christmas vacation plans – based on these possibilities.

The oncologist gave me a number for Kaiser Nuclear Medicine. I called them from the parking lot before leaving the Kaiser hospital and left a message for the scheduler to call me back. Then I drove home.

This was my fourth mistake. The Kaiser hospital in LA is the main hub for Kaiser Southern California, and the Nuclear Medicine department was right there. I could have walked over and made an appointment in person.

Instead, I left messages daily for the next five days, waited a weekend, then called up my oncologist's staff and asked them to intervene. I also called Kaiser Member Services and filed an "urgent grievance" (just what it sounds like) and followed up by filing a complaint with the California Patient Advocate:

https://www.dmhc.ca.gov/

In both the complaint and the grievance, I made sure to note that the outgoing message at Nuclear Medicine scheduling was giving out false information (it said, "Sorry, all lines are busy," even at 2am!). Again, I was really careful to say that the action I was hoping for was both a prompt appointment for me (my oncologist had been very insistent upon this) but also that this was a very broken system that would be letting down every patient, not me, and it should be fixed.

Within a couple hours, I had a call back from KP grievances department, and an hour after that, I had an appointment for my scan. Unfortunately, that was three weeks away (so much for my oncologist's "immediate" order).

I had the scan last week, on Hallowe'en. It was really cool. The gadget was awesome, and the rad-techs were really experienced and glad to geek out with me about the way the scanner and the radioactive glucose they infused in me interacted. They even let me take pictures of the scan visualizations:

https://www.flickr.com/photos/doctorow/54108481109/

The radiology report was incredibly efficient. Within a matter of hours, I was poring over it. I had an appointment to see the doc on November 5, but I had been reading up on the scans and I was pretty sure the news was good ("No enlarged or FDG avid lymph nodes are noted within the neck, chest, abdomen, or pelvis. No findings of FDG avid splenic or bone marrow involvement").

There was just one area of concern: "Moderate FDG uptake associated with a round 1.3 cm left inguinal lymph node." The radiologist advised the oncologist to "consider correlation with tissue sampling."

Today was my oncology appointment. For entirely separate reasons, I was unable to travel to the hospital today: I wrenched my back over the weekend and yesterday morning, it was so bad that I couldn't even scratch my nose without triggering unbearable spams. After spending all day yesterday in the ER (after being lifted out of my house on a stretcher), getting MRIs and pain meds, I'm much better off, though still unable to get out of bed for more than a few minutes at a time.

So this morning at 8:30 sharp, I started calling the oncology department and appointment services to get that appointment changed over to a virtual visit. While I spent an hour trying various non-working phone numbers and unsuccessfully trying to get Kaiser appointment services to reach my oncologist, I tried to message him through the KP app. It turns out that because he is a visiting fellow and not staff, this wasn't possible.

I eventually got through to the oncology department and had the appointment switched over. The oncology nurse told me that they've been trying for months to get KP to fix the bug where fellows can't be messaged by patients. So as soon as I got off the phone with her, I called member services and filed another grievance. Why bother, if I'd gotten what I needed? Same logic as before: if you have the stamina and skills to demand a fix to a broken system, you have a duty to use them.

I got off the phone with my oncologist about an hour ago. It went fine. I'm going to get a needle biopsy on that one suss node. If it comes back positive, I'll get a few very local, very low-powered radiation therapy interventions, whose worst side effect will be "a mild sunburn over a very small area." If it's negative, we're done, but I'll get quarterly CT/PET scans to be on the safe side.

Before I got off the phone, I made sure to get the name of the department where the needle biopsy would be performed and a phone number. The order for the biopsy just posted to my health record, and now I'm redialing the department to book in that appointment (I'm not waiting around for them to call me).

While I redial, a few more lessons from my experience. First, who do you tell? I told my wife and my parents, because I didn't want to go through a multi-week period of serious anxiety all on my own. Here, too, I made a mistake: I neglected to ask them not to tell anyone else. The word spread a little before I put a lid on things. I wanted to keep the circle of people who knew this was going on small, until I knew what was what. There's no point in worrying other people, of course, and my own worry wasn't going to be helped by having to repeat, "Well, it looks pretty good, but we won't know until I've had a scan/my appointment/etc."

Next, how to manage the process: this is a complex, multi-stage process. It began with a physician appointment, then a radiologist, then a pathology report, then surgery, then another pathology report, then an oncologist, then a scan, then another radiologist, and finally, the oncologist again.

That's a lot of path-dependent, interdepartmental stuff, with a lot of ways that things can fall off the rails (when my dad had cancer at my age, there was a big gap in care when one hospital lost a fax from another hospital department and my folks assumed that if they hadn't heard back, everything was fine).

So I have been making extensive use of a suspense file, where I record what I'm waiting for, who is supposed to provide it, and when it is due. Though I had several places where my care continuity crumbled some, there would have been far more if I hadn't done this:

https://pluralistic.net/2024/10/26/one-weird-trick/#todo

The title of this piece is "how to have cancer," but what it really boils down to is, "things I learned from my own cancer." As I've noted, I'm playing this one on the easiest setting: I have no symptoms, I speak and write English fluently, I am computer literate and reasonably capable of parsing medical/technical jargon. I have excellent insurance.

If any of these advantages hadn't been there, things would have been a lot harder. I'd have needed these lessons even more.

To recap them:

  • See a frontline care worker as soon as possible: don't wait for an appointment with a specific MD. Practically any health worker can prod a lump and refer you for further testing;
  • Get a direct phone number for every specialist you are referred to (add this to your phone book); call them immediately after the referral to get scheduled (better yet, walk over to their offices and schedule the appointment in person);

  • Get a timeframe as to when your results are due and when you can expect to get a follow-up; call the direct number as soon as the due-date comes (use calendar reminders for this);

  • If you can't get a call back, an appointment, or a test result in a reasonable amount of time (use a suspense file to track this), lodge a formal complaint with your insurer/facility, and consider filing with the state regulator;

  • Think hard about who you're going to tell, and when, and talk over your own wishes about who they can tell, and when.

As you might imagine, I've spent some time talking to my parents today as these welcome results have come in. My mother is (mostly) retired now, and she's doing a lot of volunteer work on end-of-life care. She recommends a book called Hope for the Best, Plan for the Rest: 7 Keys for Navigating a Life-Changing Diagnosis:

https://pagetwo.com/book/hope-for-the-best-plan-for-the-rest/

I haven't read it, but it looks like it's got excellent advice, especially for people who lack the self-advocacy capabilities and circumstances I'm privileged with. According to my mom, who uses it in workshops, there's a lot of emphasis on the role that families and friends can play in helping someone whose physical, mental and/or emotional health are compromised.

So, that's it. I've got cancer. No cancer is good. This cancer is better than most. I am almost certainly fine. Every medical professional I've dealt with, and all the administrative support staff at Kaiser, have been excellent. Even the doc who dropped the ball on my biopsy was really good to deal with – she was just clearly drowning in work. The problems I had are with the system, not the people. I'm profoundly grateful to all of them for the help they gave me, the interest and compassion they showed, and the clarity and respect they demonstrated in my dealings with them.

I'm also very grateful to my wife, my parents, and my boss at EFF, all of whom got the news early and demonstrated patience, love, and support that helped in my own dark hours over the past couple of months.

I hope you're well. But you know, everyone gets something, eventually. When you find yourself mired in a broken system full of good people, work the system – for yourself and for the people who come behind you. Take records. Make calls.

Look after yourself.


Hey look at this (permalink)



A Wayback Machine banner.

This day in history (permalink)

#20yrsago Brands aren’t worth as much as we thought https://web.archive.org/web/20041107050607/https://www.wired.com/wired/archive/12.11/brands_pr.html

#15yrsago EU kills 3-strikes proposal (yay!) but all is not well (eek!) https://www.laquadrature.net/en/2009/11/05/Europe-only-goes-half-way-in-protecting-internet-rights/

#15yrsago The Secret Science Alliance and the Copycat Crook: inspirational kids’ science comic https://memex.craphound.com/2009/11/05/the-secret-science-alliance-and-the-copycat-crook-inspirational-kids-science-comic/

#10yrsago EFF leadership change: Cindy Cohn to head organization https://www.eff.org/press/releases/cindy-cohn-become-effs-new-executive-director-2015

#10yrsago 1980 D&D ad asserts that RPGs are woman-friendly https://twitter.com/JonBolds/status/518044059240124417

#10yrsago Chip-and-PIN cards let nearby fraudsters steal $1M at a time https://www.wired.com/2014/11/chip-n-pin-foreign-currency-vulnerability/

#5yrsago After decades of corporate theft, Spinal Tap is finally getting paid by Universal https://variety.com/2019/biz/news/spinal-tap-universal-music-settle-copyright-dispute-1203393300/

#5yrsago Jeannette Ng was right: John W Campbell was a fascist https://locusmag.com/2019/11/cory-doctorow-jeannette-ng-was-right-john-w-campbell-was-a-fascist/

#5yrsago “Christian” hospital charges its own nurse $900,000 for her premature baby https://www.propublica.org/article/how-one-employer-stuck-a-new-mom-with-a-bill-for-her-premature-baby

#5yrsago When the company that made your prosthetic feet won’t repair them https://memex.craphound.com/2019/11/05/when-the-company-that-made-your-prosthetic-feet-wont-repair-them/

#5yrsago The Porch of Doom: a Halloween haunt that sends visitors to a billionaires’ Mars where they are expected to do all the dirty work https://www.youtube.com/watch?v=KpfVhfty_4I

#5yrsago The inspiring story of how Cloudflare defeated a patent troll and broke the patent-trolling business-model https://blog.cloudflare.com/the-project-jengo-saga-how-cloudflare-stood-up-to-a-patent-troll-and-won/

#5yrsago Lynda Barry’s “Making Comics” is one of the best, most practical books ever written about creativity https://memex.craphound.com/2019/11/05/lynda-barrys-making-comics-is-one-of-the-best-most-practical-books-ever-written-about-creativity/

#1yrago A link-clump demands a linkdump https://pluralistic.net/2023/11/05/variegated/#nein


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, holding a mic.



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)

  • Picks and Shovels: a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books, February 2025
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2025



Colophon (permalink)

Today's top sources:

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Today's progress: 758 words (77013 words total).
  • 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: Spill, part four (a Little Brother story) https://craphound.com/littlebrother/2024/10/28/spill-part-four-a-little-brother-story/


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

00:35

Don’t be a Sucker for Election Rumors [The Stranger]

With Election Day upon us ‘tis the season to make hasty accusations about the insecurity of America’s voting system. In Washington, like in other parts of the country, the right-wing has focused on attacking the idea of mail-in ballots. Last week, with the ballot explosions in Clark County and Portland, right-wing influencers such as Jonathan Choe quickly capitalized on these incidents to make claims that the “entire system is vulnerable.” by Ashley Nerbovig

With Election Day upon us ‘tis the season to make hasty accusations about the insecurity of America’s voting system. In Washington, like in other parts of the country, the right-wing has focused on attacking the idea of mail-in ballots. Last week, with the ballot explosions in Clark County and Portland, right-wing influencers such as Jonathan Choe quickly capitalized on these incidents to make claims that the “entire system is vulnerable.”

As we move through Election Day and beyond, bad faith actors are poised to take every single election related mishap or misunderstanding and turn it into another reason to make our elections more “secure” which just means erecting more barriers to make it harder to vote, measures that often disproportionately affect Black and Brown voters. So how do you stop yourself from becoming a sucker for a piece of election misinformation that could lead you to support a law that might deprive your neighbor of their right to vote? Glad you asked. I’m here to walk you through what misinformation might look like in the days to come.  

Most of the time, rumors around elections fall into four buckets, according to local election rumor expert Kate Starbird. She co-founded the University of Washington’s Center for an Informed Public, which studies false and misleading information online and designs strategies to combat it. First bucket: Someone observes an event and assumes something has gone wrong, but in reality, the system functions as intended—they simply don’t understand the process. But the person shares the information as something potentially nefarious. Some examples include last week when former President Donald Trump’s name appeared on the second screen for the California ballot, leading people to complain about having to click an extra button to vote for him. The explanation was not that California was purposefully suppressing Trump voters, only that California randomizes the order of names on ballots and, unluckily for Trump that meant he landed on the second page.

The other three buckets involve when someone faces a real issue with voting, such as the machines not working, their name missing or misspelled on the voter rolls, or as has happened recently in Washington, they receive multiple ballots. These issues are typically distorted in one of three ways. First, the rumor emerges that whatever issue prevented someone from voting was intentional. Second, someone makes an unverified claim that the issue is widespread and deprives a much larger group of people from voting. Finally, the rumor obscures the fact that even if someone faced an issue voting, the elections office actually had a solution to the problem.

A good example of some local election rumor coverage happened last week when KING 5 reported a poorly contextualized piece claiming that a woman had received 16 ballots with names of people she’d never met. The station quoted the woman as saying the incident caused her to have concerns over the democratic process. To verify what actually happened, I spoke to the King County Elections Spokesperson Halei Watkins who explained the woman had moved to a new address where she received her ballots. But she also was sent the ballots of seven people who previously lived at her address. She then returned those seven ballots to the post office, which redelivered them to her, creating the appearance that she had received more than a dozen ballots. Watkins said the ballots ultimately were undeliverable because the voters hadn’t updated their addresses with the county. Watkins called it an isolated incident, not indicative of a massive problem within the election system.

That’s a pretty typical case of an election rumor that paints a picture of some deeper issue where one doesn’t exist. But when Starbird looks at how people use the ballot boxes to undermine confidence in our elections, things become a little more tricky. The fires don’t fall cleanly into any of the four buckets of misinformation, Starbird said. First of all, the fires represent a real attack on our voting systems. We don’t know the motives of the person involved. Remedies exist for the problem, but they’re imperfect and some ballots may have been lost. These attacks do appear isolated to two ballot boxes, and one possible earlier attempt on October 8 in Vancouver that did not result in any damaged ballots. The fires also had mixed outcomes regarding the ability of ballot boxes to extinguish fires. In Portland, only three ballots actually suffered damage, because the mechanism to extinguish flames in the ballot box deployed quickly. In Vancouver, Washington, the fire-suppressant device worked less effectively, but Clark County and King County are both looking into better tools to prevent fires. 

So yes, the fires exposed a vulnerability, but it can hardly be used to definitively call into question mail in voting as a concept, which is how people such as Choe wish to use the incident. Overall, issues with mail in voting are few and far between, and voter fraud involving mail in ballots is exceedingly rare.

When Watkins hears people decry mail-in voting or talk about returning to in-person voting, she points out that polling places have a whole host of issues that could leave the election vulnerable to mishaps or mistakes. Before King County switched to mail-in voting in 2009, the county had 500 polling locations, with 8,000 temporary staff or volunteers who received between four to 12 hours of training in preparation for election day. Now, teams of two pick up ballots from the various ballot boxes that they deliver to election headquarters in Renton. King County has 75 permanent and 800 temporary staff who help with all things related to the election. The process is much more streamlined. 

Watkins also pointed out that at the time King County switched to all mail-in voting, 86% of votes in King County had registered as permanent absentee voters, meaning they already voted by mail, which speaks to the preferences of the county, Watkins said.

“I feel like people who push for in-person voting would just end up creating barriers to voting, not making it more secure,” Watkins says.

 

 

Tuesday, 05 November

23:00

What’s the difference between Display size and Screen size in the Windows 95 display control panel? [The Old New Thing]

In the Windows 95 display control panel, there was an option called “Desktop area”.

In the Windows 98 display control panel, there was an option called “Screen area”.

What’s the difference beteween “desktop area” and “screen area”?

There’s no difference. They both control the monitor resolution.

I suspect the name of the option changed because Windows 98 added support for multiple monitors. The desktop spans all monitors, but this setting controls a single monitor. This wasn’t a problem on Windows 95, which supported only a single monitor anyway, but it became incorrect when Windows 98 introduced support for multiple monitors.

But wait, what about this?

This is a screen shot of Windows 95 with both “Desktop area” and “Screen area”. What’s going on here?

What we’re seeing here is a third party display driver injecting itself into the standard control panel. Rather than doing the documented thing and adding a tab to the Desktop control panel called, say, “Virtual screen”, they decided that it would be cooler to hack into integrate into¹ the “Settings” page.²

All of these unsupported hacks created problems in Windows 98 when the team tried to add multi-monitor support, since the Windows 98 multi-monitor display control panel looked nothing like the Windows 95 one, and the attempt by the display driver to patch the Settings page failed catastrophically.

If you are still interested, you can read about how the Windows 98 team had to do extra work to keep these rogue display control panel hackers from messing up the new display control panel.

¹ This is an unauthorized and unsupported integration point, but the marketing team is not dissuaded by annoying engineering jargon like “unsupported”. “Look, our job as marketing is to come up with ideas. It is not your job as engineering to tell me that it can’t be done. Your job is to find a way to do it.”

² In this case, the third party display driver made “Display area” represent the size of the virtual screen and the “Screen area” be the size of the physical screen.

The post What’s the difference between Display size and Screen size in the Windows 95 display control panel? appeared first on The Old New Thing.

22:35

Forty years of commitment to software freedom [Planet GNU]

We're planning a jam-packed anniversary year and we hope you'll join us for the festivities!

22:14

21:42

The Big Idea: Gregory Frost [Whatever]

Spooky month may be over, but horror stories never go out of style. Author Gregory Frost is here today to terrify and thrill you with the Big Idea for his newest collection of stories, Beyond Here Be Monsters: A Collection of Creatures and Curiosities.

GREGORY FROST:
The title of this collection of stories of mine introduces what I consider to be two complementary Big Ideas at work: The first is that there are monsters all over the place, running the gamut from nightmarish conjured fiends, to creatures out of myth and legend, to a bent human being driven by Poe-esque perversity. The second idea—implied by the phrase’s original use in cartography—is that we have already sailed into uncharted waters. What we think we know upon arrival “ain’t necessarily so.”
We might think we’re investigating a crime or a disappearance, coping with an illness, or hearing a small disembodied voice, only to discover something diabolical and more horrific than we imagine. Then again, some of these creatures and curiosities might prove more likely to amuse than to terrify. Horror leaves plenty of room for the gods of dark laughter, too.
One thing that interests me with horror fiction is how oft-times what the story at first seems to be about proves not to be what it’s about at all—a misdirection, or a metaphorical stand-in for something else. This is not surprising given how stories operate on two interwoven levels: The level of the major events as they unfold, and the level of the character’s involvement and transformation as a result of encountering and interacting with the events.
On some occasions the reader is supplied with more information than the character has, putting the reader at some advantage while also getting them worked up because they know what lurks in the shadows ahead. Other times they are limited to what the character knows, and both are shocked or surprised together.
In working a story I find it’s worth seeking out and identifying the gaps that arise in such a situation: Gaps between who a central character believes they are and who they actually reveal themselves to be; between the situation they think they’re in and the one they haven’t recognized yet; between the crisis they think they’re averting and the personal, internal one they have yet to acknowledge, and so forth. So, with the understanding that each story is going to provide its own specific expression of the collection’s larger themes, here are a few examples of the Big Ideas at work within this collection.
The story “So Coldly Sweet, So Deadly Fair” serves up Abraham Van Helsing’s very first encounter with vampires. Obviously, there had to have been a first encounter somewhere. The execution of the idea in this case derives from comments made by Van Helsing during a coach ride in Bram Stoker’s novel Dracula: that his wife has been institutionalized for some time, and that another character in the novel is about the same age as his own son would have been had he lived. Taken together, those two comments provided me with a critical context. While Van Helsing is focused upon this shocking new enemy from without, he fails to recognize a looming tragedy that is occurring much closer to home. The story rides the gap between these two threads.
The story “That Blissful Height” concerns a real historical figure, one of the great American scientists and inventors of the 19th century, Robert Hare. You likely haven’t heard of him before now in spite of his being the inventor of the greatest heat source of its time, the head of the Chemistry Department at the University of Pennsylvania, author of the definitive textbook used in chemistry courses for decades, and one of the very early members of the Academy of Natural Sciences in Philadelphia.

The idea here is that Hare, the much celebrated scientist, became intrigued by spiritualism and decided to apply rational scientific method to its study, thereby constructing a series of mechanical devices designed to keep practicing mediums from cheating as they “communicated” with the spirit world. This is what the real Robert Hare did, in fact. Beneath that runs a second thread about what can happen when you assume that your “superior” methodology cannot be corrupted or tricked, just as, having established yourself the rational observer, you conclude that you must be right in whatever you observe. Hare is provoked into taking a position that will have dire consequences for his career and reputation. Had he not embraced the world of spirits, his life would probably have gone on, well, blissfully.
So, too, would the life of Svekis the werewolf have flowed along smoothly and his true nature not been provoked had a trio of criminals not decided to rob the bank where he awaits a transfer of funds in “The Bank Job.”
Clever Odysseus, in “Ill Met in Ilium,” has the Greeks create a huge hollow wooden horse to trick the citizens of Troy into hauling his warriors, hidden inside, through the gates of the city, where his force will descend at night and slaughter the unsuspecting Trojans . . . at least, that’s how it’s supposed to go. Here’s an instance where the reader knows more than our hero about the bizarre situation inside the walls of Troy.
In “The Seals of New R’lyeh,” Detweiler, a hapless thief (modeled upon the late Donald E. Westlake’s “Dortmunder” character) believes that a rich, loony, end-of-the-world cult will make easy pickings for him and his partner, Stipe. Instead, inadvertently Detweiler intrudes upon a ritual that opens the door to the Old Gods, thereby bringing about the end of the world as we know it. So here is both a comic horror tale and a situation where the character believes he’s involved in one situation when he’s really involved in another—and one far more dire.
In sailing off the map, we’d all do well to “mind the gap.” However you care to apply the notion, the gap for me is where stories thrive.


Beyond Here Be Monsters: Amazon|Barnes & Noble|Bookshop|Powell’s

Author socials: Website|Facebook|Bluesky|Mastodon

21:28

LISTEN: A Politics-Free Election Day Edition of Savage Lovecast [The Stranger]

Happy Soft Cock Week to all who celebrate! by Dan Savage We’re giving you a break from whatever stressful stuff is going on this week to bring you some of the more…interesting calls we’ve collected. A man’s girlfriend wants to try saline injections on her breasts for a “24 hour boob job.” The question is, can he safely do the injecting? A woman’s cat is grieving the loss of her longtime companion, a small dog. Now the kinky feline is demanding unspeakable rough treatment and her “owner” is neither G, G, nor G and does NOT consent. Happy Soft Cock Week to all who celebrate! Our guest is “professional cuddler” Michelle Renee, who is helping to launch a worldwide celebration of the penis in repose. She offers a kind and loving perspective on a topic that really needn’t cause so much anxiety. On the Magnum, Dan chats with Paul Rosenberg, founder and manager of Rain City Jacks, a private, non-profit jack-off…

[ Read more ]

Quickies [The Stranger]

P.S. The best blowjob is 25-50% handjob. by Dan Savage 1. This debate is raging again, Dan, and we need you to issue a ruling: Do straight women belong in gay bars? Some (straight women, gay bars), not all (straight women, gay bars). 2. Why do men keep ghosting me after sex? I’m a 25-year-old woman. No clue. You could’ve had a string of bad luck — and fucked a dozen (or more) shitty guys in a row — or it could be something you’re doing wrong. Even if you don’t think you’re doing anything wrong, once you’ve noticed a pattern of behavior and/or results that makes you unhappy, it’s a good idea to make some changes. Try meeting different kinds of guys in different kinds of ways, try slowing your roll/hole, etc., and take time along the way to engage in constructive introspection and make further changes/course corrections, as needed. 3. How do I stop people from falling in…

[ Read more ]

Local Musicians Remember Quincy Jones [The Stranger]

Jones’s musical legacy—and devotion to his Seattle roots—carries on. by Alexa Peters

In 2017, during a performance from local garage-jazz quartet Industrial Revelation at Upstream Music Festival, I noticed a commotion near the stage as people huddled around the VIP seats. I stood on my toes and looked—Is that Quincy Jones?!

While Jones, the legendary musician, producer, and alumnus of Seattle’s Garfield High School, had given a keynote address earlier in the festival, I didn’t expect to see the mastermind behind Michael Jackson’s Thriller sitting amongst the crowd. But there he was, shaking hands, taking pictures with fans, and even sharing generously with a young musician who asked him about score orchestration. Then, it was my turn to thank him. He grasped my hand and grinned, wrapped in one of his iconic striped scarves.

On Sunday, Jones passed away at his home in Los Angeles. He was 91. Though it’s been many decades since he lived in Seattle, and he was only a resident from 1943 until 1951, Jones continuously nurtured his ties to the city over the course of his life and inspired generations of local musicians.

“Sometimes, in today's musical world, there can be a level of superficiality, and Quincy was the opposite of that,” says Riley Mulherkar, a graduate of Garfield High School and rising jazz trumpeter who released his acclaimed debut record earlier this year. “[He had] mastery of the form at a young age—and then he was able to take that into all sorts of musical situations, and literally change the world.” 

Jones was born on March 14, 1933, in Chicago. After a tumultuous early childhood with his mother, who had schizophrenia, Jones’s father, Quincy Jones Sr., moved Jones and his brother to Bremerton, Washington. When he was 12, Jones began playing trumpet at Bremerton’s Coontz Junior High. 

In 1947, after Jones’s father remarried, he moved his sons, his new wife, and her three children, to Seattle. Jones started at Garfield High School and quickly met fellow student Charlie Taylor, who played saxophone.

Taylor was one of the sons of Evelyn Bundy, a trailblazing Seattle jazzwoman who formed one of the city’s first jazz bands in the 1920s. At Garfield, Taylor was ready to put together his own group. He invited Jones to become a member of his band, and Jones agreed, joining a cast of elite musicians at Garfield including Oscar Holden Jr. and Grace Holden, two children of pianist and Seattle jazz scene patriarch Oscar Holden.

After their first few gigs as the Charlie Taylor Band, Bumps Blackwell, a bandleader, songwriter, arranger, and record producer (who would go on to mentor Ray Charles, Ernestine Anderson, and Sam Cooke, among others), offered to manage them as the Bumps Blackwell Junior Band.

As Paul de Barros notes in his book Jackson Street After Hours: The Roots of Jazz in Seattle, the Bumps Blackwell Junior Band was a “focal point” in people’s memories of Jackson Street, which was home to a bustling jazz scene in the years around World War II until 1960. 

The time in the band was influential for Jones, too. Jones got to perform frequently, including opening for Nat King Cole at Civic Auditorium, and the group allowed him to befriend other notable musicians who worked on Jackson Street at the time, like Ray Charles or “R.C.”, who first taught Jones about arranging.

Jones left Seattle in 1951 to attend Berklee School of Music. He soon dropped out to tour with Lionel Hampton’s orchestra and eventually form his own band. From there, Jones’s career is one milestone after another. 

Some highlights from Jones’s career include working as musical director, arranger, and trumpeter in trumpeter Dizzy Gillespie’s band, becoming the first African American vice president at Mercury Records in 1964, composing film scores for dozens of films, composing for iconic TV shows including Roots, and serving as producer and arranger for top-tier talent including, of course, Michael Jackson. 

Jones also founded Quincy Jones Productions, an all-encompassing media and artist management company that helped jumpstart the careers of artists like Jacob Collier.

With all his accomplishments and fame, Seattle organizations have bestowed Jones with various honors, including Lifetime Achievement Awards from both the Northwest African American Museum and the Seattle International Film Festival. Likewise, Jones kept up his connection to the Emerald City, often supporting the local music scene and returning home for visits. 

As far back as 1959, when Jones was hired to form his own band, he hired musicians from Seattle he admired, including pianist Patti Bown, trumpeter Floyd Standifer, and one of his lifelong friends, bassist Buddy Catlett. 

Upon Catlett’s death in 2014, Jones tributed his “brother and bandmate” on Facebook, calling him “one of the greatest bass players to ever take the stage. From Charlie Taylor's and Bumps Blackwell's bands when we were starting out in Seattle to my Free and Easy tour of Europe, we traveled the world playing the music we love.”

Jones has stayed especially linked with Garfield High School. In 2008, when Garfield High School decided to name their freshly renovated performing arts center after Jones, he flew in for the dedication ceremony. As recently as last year, Jones donated $50,000 to Seattle’s Washington Middle School, which feeds into Garfield High School, to help keep their jazz program alive. 

“Today, I had the pleasure of visiting my old school in Seattle, Garfield High, and man did it bring back some memories!!,” Jones wrote in a 2017 Facebook post. “I can't believe it’s been 70 years since I walked these halls as a student...Moving to Seattle forever changed me for the better...and finding music here showed me that I could be more than a statistic...”

Mulherkar, like Jones, found music at Garfield High School, where Jones is now embedded into the lore of the school.

In 2009, as a high school junior playing trumpet in Garfield’s jazz band, Mulherkar had the chance to meet and work with Jones when the legendary producer came into their rehearsal. He conducted the students in a couple songs, including a swingin’ Jones original and one of Mulherkar’s favorites called “Stockholm Sweetnin’.”

“It was hard to even wrap our minds around, because there's Quincy Jones, the celebrity,” said Mulherkar. “It felt so special to have this personal connection to the man, as a Garfield student, as a trumpet player, and [as] someone who wanted to make my life in the music.”

Mulherkar, who now lives in New York, still finds it special that the beginnings of his career were so touched by the icon.

“As a jazz musician from Seattle who went to Garfield… I love that he was able to make such a tremendous impact starting from a place that, for me, is so relatable,” said Mulherkar.

Through Garfield students like Mulherkar, and the countless other artists Jones mentored as a producer and music executive, Jones’s musical legacy—and devotion to his Seattle roots—carries on. 

20:42

Vote No on Initiative Measure No. 2124 [The Stranger]

Destroying the Nation's First Long-Term Health Care Benefit Would Suck  by Stranger Election Control Board

Though our present gerontocracy suggests otherwise, we’re currently wading through the largest wave of people hitting the retirement age in American history. This “silver tsunami” wildly increases the demand for long-term health care, which is a nice way of describing the kind of care that involves paying someone to come wipe asses, pull up pants, and generally help our sick and dying family members age with dignity while the rest of us toil away at our jobs. 

Seventy percent of us will need this care after age 65, but less than 5 percent of us buy it on the private market because the premiums are sky-high and growing higher, the coverage is skimpy and getting skimpier, and people with serious pre-existing conditions are, for the most part, ineligible. People assume Medicare will cover this kind of care, but it doesn’t really. Medicaid kinda does, but to access that care you need to spend down your life savings and literally impoverish yourself, which isn’t exactly ideal. Moreover, if a bunch of our elders impoverished themselves just to qualify for Medicaid, they’d basically bankrupt the state. 

 

Stop Doom-Scrolling and Look at These Photos from Seattle’s Largest Cat Convention [The Stranger]

Mute Steve Kornacki, unclench your jaw, and scroll through these sweet scenes from Sea-Meow. by Megan Seling

Photos by Madison Kirkman

Sea-Meow, which bills itself as Washington’s largest cat convention, invaded Seattle Center’s Exhibition Hall over the weekend and brought with it appearances from the Two Crazy Cat Ladies, Moshow the Cat Rapper, and Christopher Watson aka the Catluminati, as well as a cat costume contest, a cat-calling contest, cat bingo, and dozens of vendors slinging everything from cat beds to catnip to cat coffee. (That is, cat-themed coffee that benefits cat rescues and not, like, coffee for cats.)

But most importantly, there were cats. So many cats. Old cats, young cats, kitten cats. Cats available for adoption, cats available for snuggles, and cats being pushed, carried, and cradled in backpacks and strollers and those bags with little clear bubble cutouts that make them look like grumpy-faced astronauts. 

Election results won’t be in for several hours, and even then, it may take days to know who won. So close Twitter (what are you still doing on that hell site anyway???), mute Steve Kornacki, unclench your jaw, and scroll through these sweet scenes from Sea-Meow.

Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman Madison Kirkman

18:21

Vote No on Initiative Measure No. 2117 [The Stranger]

It Is Actually Good to Make Polluters Pay to Pollute  by Stranger Election Control Board

This initiative would repeal the Climate Commitment Act (CCA) and prohibit the state from ever implementing a similar law, cutting billions of dollars in funding for transit programs, ferries, clean energy projects, air quality improvement, and a bunch of other stuff that’s good for the environment and for the organisms who live in it, including the filthy rich psychopaths who got this initiative on the ballot. 

 

18:14

Conquer chaos and summon Personas in November Choice [Humble Bundle Blog]

November’s Humble Choice games are here, and this month’s mix features big guns, bright worlds, beautiful gardens, and lots more!  Crush skulls in Warhammer 40,000: Darktide. Lose yourself in gorgeous anime-inspired visuals in Persona 4 Golden. Discover great multiplayer games, friendly zoo animals, and a whole lot more with your membership this month! Your Games for November Check out all 8 of the games that …

The post Conquer chaos and summon Personas in November Choice appeared first on Humble Bundle Blog.

17:35

Slog AM: Election Day Pretties, Boeing Machinists's Strike Ends, Cloned Blackfooted Ferret Gives Birth [The Stranger]

Seattle's only news roundup. by Ashley Nerbovig

Ok weather to vote in! Should be a pretty nice day to stroll down to your nearest ballot box, with a high of 52 degrees and partly sunny, and a slight chance of rain after 2 p.m. 

So go vote! Don't let anything stop you. As Hannah said yesterday, you can still vote! I voted last year on the last possible day, and I hadn't registered yet at that point. I just jogged down to Lumen Field though and it was super easy to register, vote, and leave. Even if you're feeling left out because you're not in a swing state and the entirety of the country's future doesn't rest on your shoulders, the future of this state and city really does! Dropping some helpful links to make sure you have everything you need to make your voices heard. First, how to register to vote. Second, how to replace a lost ballot. Thirdly, ballot box locations. Finally, our handy cheat sheet for help filling out your ballot. 

Done your civic duty already? Well then sit back and enjoy the final hours of uncertainty at one of the many election night parties happening across the city tonight. The Stranger is throwing one at the Crocodile—it’s sold out, but we think it’s worth it to take your chances on standby tickets. There might be some no-shows, and we can squeeze you in. But if you don't wanna chance it, check out this list of parties you can attend from our sister publication Everout. Stranger reporters will be dotted around the city to bring you coverage of the election from various candidate election parties as well.

Speaking of voting: The Boeing machinists approved a contract last night ending their strike after 53 days, according to the Seattle Times. The latest contract, approved by 59% of membership, includes a 38% general wage increase over the next four years, which equates to 43% when you factor in raises on top of raises. The contract did not restore the pension that they lost in a contentious vote 10 years ago. Union president Jon Holden said the union should be proud of what they accomplished and that it was time to get back to building planes.

Alleged sex abuse in youth detention: An additional 176 people made allegations against Washington state for failing to protect them from sexual abuse while they were children at youth detention centers in the state, according to the Seattle Times. Combined with another lawsuit filed in September, that brings the total number of people claiming they were sexually abused in Washington's detention centers up to almost 400. Meanwhile, the Seattle Times Editorial Board continues to decry and complain about youth diversion programs meant to help kids avoid being sent into lock up.

Seattle Steel Pan Project Evicted: The Seattle Steel Pan Project, dedicated to teaching the art of steel plan music and performance, needs a new space to operate in after MLK FAME Community Center in the Central District evicted the group this week, according to an Instagram post from the project. In the post, the group accused MLK FAME of bowing to the demands of neighborhood "Karens" who complained about the groups weekly practice. I reached out to MLK FAME for a response, who did not immediately reply, but I'll update if they do. In the meantime, the project is asking everyone they know if they have any ideas where they can house their steel pan band. Their email address is steelpanproject@gmail.com. Here's a little taste of what they do:

Ok. Moving on. Let's talk about the presidential election: Let's be real, no one knows how this election will shake out. The polls are insanely tight in swing states. Dixville Notch, a tiny New Hampshire town that votes at midnight every year on Election Day, tallied up their six votes which resulted in a tie, with three votes for Vice President Kamala Harris, and three for former President Donald Trump. There is a very good chance we don't know the election result tonight, and maybe not for a couple days.

Battleground states prepare for certification fight: Given the resistance to certifying the vote in swing states in the last election cycle, many officials have already started to prepare to quash attempts by county officials to squabble over valid election results, according to Politico. Election officials fear if Trump loses, he won't just fade quietly into the night, and instead will mount another attempt to overturn election results.

Meanwhile, the two parties also are wrestling for control of congress. New York stands out as a battleground state for the House, as the congressional seats they lost in 2022 helped Republicans take the chamber back, according to Politico. Meanwhile in Texas, Democrats continue to try to take Senator Ted Cruz's seat, and while Cruz continues to lead, Representative Colin Allred is within spitting distance of him. But, it's wholly unpredictable who will control what in 2025.

But for some good news: One of my top five favorite creatures in the world continues to beat the odds. A cloned black-footed ferret mother in Virginia gave birth to two little baby ferrets in June, according to the Washington Post. Unclear why we're only hearing about it now. We should have rang the bells. If you don't know much about black-footed ferrets, you're really missing out. These little bandits scurry across our prairie lands, and has supposedly gone extinct twice, but they're resilient AF. Now with the cloning and the babies, we could continue to see this species soldier on. Ugh I love them so much, I've been obsessed with them ever since I lived in Montana. And I'm not a ferret girl, it's just they're little markings make them look like they have a tiny black Zorro mask across their smol faces. Here is a video of them being adorable:

I'm so excited about this cloning thing: Instead of a musical recommendation, another video about black footed ferrets.

 

17:21

Canadian Man Arrested in Snowflake Data Extortions [Krebs on Security]

A 26-year-old man in Ontario, Canada has been arrested for allegedly stealing data from and extorting more than 160 companies that used the cloud data service Snowflake.

Image: https://www.pomerium.com/blog/the-real-lessons-from-the-snowflake-breach

On October 30, Canadian authorities arrested Alexander Moucka, a.k.a. Connor Riley Moucka of Kitchener, Ontario, on a provisional arrest warrant from the United States. Bloomberg first reported Moucka’s alleged ties to the Snowflake hacks on Monday.

At the end of 2023, malicious hackers learned that many large companies had uploaded huge volumes of sensitive customer data to Snowflake accounts that were protected with little more than a username and password (no multi-factor authentication required). After scouring darknet markets for stolen Snowflake account credentials, the hackers began raiding the data storage repositories used by some of the world’s largest corporations.

Among those was AT&T, which disclosed in July that cybercriminals had stolen personal information and phone and text message records for roughly 110 million people — nearly all of its customers. Wired.com reported in July that AT&T paid a hacker $370,000 to delete stolen phone records.

A report on the extortion attacks from the incident response firm Mandiant notes that Snowflake victim companies were privately approached by the hackers, who demanded a ransom in exchange for a promise not to sell or leak the stolen data. All told, more than 160 Snowflake customers were relieved of data, including TicketMasterLending TreeAdvance Auto Parts and Neiman Marcus.

Moucka is alleged to have used the hacker handles Judische and Waifu, among many others. These monikers correspond to a prolific cybercriminal whose exploits were the subject of a recent story published here about the overlap between Western, English-speaking cybercriminals and extremist groups that harass and extort minors into harming themselves or others.

On May 2, 2024, Judische claimed on the fraud-focused Telegram channel Star Chat that they had hacked Santander Bank, one of the first known Snowflake victims. Judische would repeat that claim in Star Chat on May 13 — the day before Santander publicly disclosed a data breach — and would periodically blurt out the names of other Snowflake victims before their data even went up for sale on the cybercrime forums.

404 Media reports that at a court hearing in Ontario this morning, Moucka called in from a prison phone and said he was seeking legal aid to hire an attorney.

KrebsOnSecurity has learned that Moucka is currently named in multiple indictments issued by U.S. prosecutors and federal law enforcement agencies. However, it is unclear which specific charges the indictments contain, as all of those cases remain under seal.

TELECOM DOMINOES

Mandiant has attributed the Snowflake compromises to a group it calls “UNC5537,” with members based in North America and Turkey. Sources close to the investigation tell KrebsOnSecurity the UNC5537 member in Turkey is John Erin Binns, an elusive American man indicted by the U.S. Department of Justice (DOJ) for a 2021 breach at T-Mobile that exposed the personal information of at least 76.6 million customers.

In a statement on Moucka’s arrest, Mandiant said UNC5537 aka Alexander ‘Connor’ Moucka has proven to be one of the most consequential threat actors of 2024.

“In April 2024, UNC5537 launched a campaign, systematically compromising misconfigured SaaS instances across over a hundred organizations,” wrote Austin Larsen, Mandiant’s senior threat analyst. “The operation, which left organizations reeling from significant data loss and extortion attempts, highlighted the alarming scale of harm an individual can cause using off-the-shelf tools.”

Sources involved in the investigation said UNC5537 has focused on hacking into telecommunications companies around the world. Those sources told KrebsOnSecurity that Binns and Judische are suspected of stealing data from India’s largest state-run telecommunications firm Bharat Sanchar Nigam Ltd (BNSL), and that the duo even bragged about being able to intercept or divert phone calls and text messages for a large portion of the population of India.

Judische appears to have outsourced the sale of databases from victim companies who refuse to pay, delegating some of that work to a cybercriminal who uses the nickname Kiberphant0m on multiple forums. In late May 2024, Kiberphant0m began advertising the sale of hundreds of gigabytes of data stolen from BSNL.

“Information is worth several million dollars but I’m selling for pretty cheap,” Kiberphant0m wrote of the BSNL data in a post on the English-language cybercrime community Breach Forums. “Negotiate a deal in Telegram.”

Also in May 2024, Kiberphant0m took to the Russian-language hacking forum XSS to sell more than 250 gigabytes of data stolen from an unnamed mobile telecom provider in Asia, including a database of all active customers and software allowing the sending of text messages to all customers.

On September 3, 2024, Kiberphant0m posted a sales thread on XSS titled “Selling American Telecom Access (100B+ Revenue).” Kiberphant0m’s asking price of $200,000 was apparently too high because they reposted the sales thread on Breach Forums a month later, with a headline that more clearly explained the data was stolen from Verizon‘s “push-to-talk” (PTT) customers — primarily U.S. government agencies and first responders.

404Media reported recently that the breach does not appear to impact the main consumer Verizon network. Rather, the hackers broke into a third party provider and stole data on Verizon’s PTT systems, which are a separate product marketed towards public sector agencies, enterprises, and small businesses to communicate internally.

INTERVIEW WITH JUDISCHE

Investigators say Moucka shared a home in Kitchener with other tenants, but not his family. His mother was born in Chechnya, and he speaks Russian in addition to French and English. Moucka’s father died of a drug overdose at age 26, when the defendant was roughly five years old.

A person claiming to be Judische began communicating with this author more than three months ago on Signal after KrebsOnSecurity started asking around about hacker nicknames previously used by Judische over the years.

Judische admitted to stealing and ransoming data from Snowflake customers, but he said he’s not interested in selling the information, and that others have done this with some of the data sets he stole.

“I’m not really someone that sells data unless it’s crypto [databases] or credit cards because they’re the only thing I can find buyers for that actually have money for the data,” Judische told KrebsOnSecurity. “The rest is just ransom.”

Judische has sent this reporter dozens of unsolicited and often profane messages from several different Signal accounts, all of which claimed to be an anonymous tipster sharing different identifying details for Judische. This appears to have been an elaborate effort by Judische to “detrace” his movements online and muddy the waters about his identity.

Judische frequently claimed he had unparalleled “opsec” or operational security, a term that refers to the ability to compartmentalize and obfuscate one’s tracks online. In an effort to show he was one step ahead of investigators, Judische shared information indicating someone had given him a Mandiant researcher’s assessment of who and where they thought he was. Mandiant says those were discussion points shared with select reporters in advance of the researcher’s recent talk at the LabsCon security conference.

But in a conversation with KrebsOnSecurity on October 26, Judische acknowledged it was likely that the authorities were closing in on him, and said he would seriously answer certain questions about his personal life.

“They’re coming after me for sure,” he said.

In several previous conversations, Judische referenced suffering from an unspecified personality disorder, and when pressed said he has a condition called “schizotypal personality disorder” (STPD).

According to the Cleveland Clinic, schizotypal personality disorder is marked by a consistent pattern of intense discomfort with relationships and social interactions: “People with STPD have unusual thoughts, speech and behaviors, which usually hinder their ability to form and maintain relationships.”

Judische said he was prescribed medication for his psychological issues, but that he doesn’t take his meds. Which might explain why he never leaves his home.

“I never go outside,” Judische allowed. “I’ve never had a friend or true relationship not online nor in person. I see people as vehicles to achieve my ends no matter how friendly I may seem on the surface, which you can see by how fast I discard people who are loyal or [that] I’ve known a long time.”

Judische later admitted he doesn’t have an official STPD diagnosis from a physician, but said he knows that he exhibits all the signs of someone with this condition.

“I can’t actually get diagnosed with that either,” Judische shared. “Most countries put you on lists and restrict you from certain things if you have it.”

Asked whether he has always lived at his current residence, Judische replied that he had to leave his hometown for his own safety.

“I can’t live safely where I’m from without getting robbed or arrested,” he said, without offering more details.

A source familiar with the investigation said Moucka previously lived in Quebec, which he allegedly fled after being charged with harassing others on the social network Discord.

Judische claims to have made at least $4 million in his Snowflake extortions. Judische said he and others frequently targeted business process outsourcing (BPO) companies, staffing firms that handle customer service for a wide range of organizations. They also went after managed service providers (MSPs) that oversee IT support and security for multiple companies, he claimed.

“Snowflake isn’t even the biggest BPO/MSP multi-company dataset on our networks, but what’s been exfiltrated from them is well over 100TB,” Judische bragged. “Only ones that don’t pay get disclosed (unless they disclose it themselves). A lot of them don’t even do their SEC filing and just pay us to fuck off.”

INTEL SECRETS

The other half of UNC5537 — 24-year-old John Erin Binns — was arrested in Turkey in late May 2024, and currently resides in a Turkish prison. However, it is unclear if Binns faces any immediate threat of extradition to the United States, where he is currently wanted on criminal hacking charges tied to the 2021 breach at T-Mobile.

A person familiar with the investigation said Binns’s application for Turkish citizenship was inexplicably approved after his incarceration, leading to speculation that Binns may have bought his way out of a sticky legal situation.

Under the Turkish constitution, a Turkish citizen cannot be extradited to a foreign state. Turkey has been criticized for its “golden passport” program, which provides citizenship and sanctuary for anyone willing to pay several hundred thousand dollars.

This is an image of a passport that Binns shared in one of many unsolicited emails to KrebsOnSecurity since 2021. Binns never explained why he sent this in Feb. 2023.

Binns’s alleged hacker alter egos — “IRDev” and “IntelSecrets” — were at once feared and revered on several cybercrime-focused Telegram communities, because he was known to possess a powerful weapon: A massive botnet. From reviewing the Telegram channels Binns frequented, we can see that others in those communities — including Judische — heavily relied on Binns and his botnet for a variety of cybercriminal purposes.

The IntelSecrets nickname corresponds to an individual who has claimed responsibility for modifying the source code for the Mirai “Internet of Things” botnet to create a variant known as “Satori,” and supplying it to others who used it for criminal gain and were later caught and prosecuted.

Since 2020, Binns has filed a flood of lawsuits naming various federal law enforcement officers and agencies — including the FBI, the CIA, and the U.S. Special Operations Command (PDF), demanding that the government turn over information collected about him and seeking restitution for his alleged kidnapping at the hands of the CIA.

Binns claims he was kidnapped in Turkey and subjected to various forms of psychological and physical torture. According to Binns, the U.S. Central Intelligence Agency (CIA) falsely told their counterparts in Turkey that he was a supporter or member of the Islamic State (ISIS), a claim he says led to his detention and torture by the Turkish authorities.

However, in a 2020 lawsuit he filed against the CIA, Binns himself acknowledged having visited a previously ISIS-controlled area of Syria prior to moving to Turkey in 2017.

A segment of a lawsuit Binns filed in 2020 against the CIA, in which he alleges U.S. put him on a terror watch list after he traveled to Syria in 2017.

Sources familiar with the investigation told KrebsOnSecurity that Binns was so paranoid about possible surveillance on him by American and Turkish intelligence agencies that his erratic behavior and online communications actually brought about the very government snooping that he feared.

In several online chats in late 2023 on Discord, IRDev lamented being lured into a law enforcement sting operation after trying to buy a rocket launcher online. A person close to the investigation confirmed that at the beginning of 2023, IRDev began making earnest inquiries about how to purchase a Stinger, an American-made portable weapon that operates as an infrared surface-to-air missile.

Sources told KrebsOnSecurity Binns’ repeated efforts to purchase the projectile earned him multiple visits from the Turkish authorities, who were justifiably curious why he kept seeking to acquire such a powerful weapon.

WAIFU

A careful study of Judische’s postings on Telegram and Discord since 2019 shows this user is more widely known under the nickname “Waifu,” a moniker that corresponds to one of the more accomplished “SIM swappers” in the English-language cybercrime community over the years.

SIM swapping involves phishing, tricking or bribing mobile phone company employees for credentials needed to redirect a target’s mobile phone number to a device the attackers control — allowing thieves to intercept incoming text messages and phone calls.

Several SIM-swapping channels on Telegram maintain a frequently updated leaderboard of the 100 richest SIM-swappers, as well as the hacker handles associated with specific cybercrime groups (Waifu is ranked #24). That list has long included Waifu on a roster of hackers for a group that called itself “Beige.”

The term “Beige Group” came up in reporting on two stories published here in 2020. The first was in an August 2020 piece called Voice Phishers Targeting Corporate VPNs, which warned that the COVID-19 epidemic had brought a wave of targeted voice phishing attacks that tried to trick work-at-home employees into providing access to their employers’ networks. Frequent targets of the Beige group included employees at numerous top U.S. banks, ISPs, and mobile phone providers.

The second time Beige Group was mentioned by sources was in reporting on a breach at the domain registrar GoDaddy. In November 2020, intruders thought to be associated with the Beige Group tricked a GoDaddy employee into installing malicious software, and with that access they were able to redirect the web and email traffic for multiple cryptocurrency trading platforms. Other frequent targets of the Beige group included employees at numerous top U.S. banks, ISPs, and mobile phone providers.

Judische’s various Telegram identities have long claimed involvement in the 2020 GoDaddy breach, and he didn’t deny his alleged role when asked directly. Judische said he prefers voice phishing or “vishing” attacks that result in the target installing data-stealing malware, as opposed to tricking the user into entering their username, password and one-time code.

“Most of my ops involve malware [because] credential access burns too fast,” Judische explained.

CRACKDOWN ON HARM GROUPS?

The Telegram channels that the Judische/Waifu accounts frequented over the years show this user divided their time between posting in channels dedicated to financial cybercrime, and harassing and stalking others in harm communities like Leak Society and Court.

Both of these Telegram communities are known for victimizing children through coordinated online campaigns of extortion, doxing, swatting and harassment. People affiliated with harm groups like Court and Leak Society will often recruit new members by lurking on gaming platforms, social media sites and mobile applications that are popular with young people, including DiscordMinecraftRobloxSteamTelegram, and Twitch.

“This type of offence usually starts with a direct message through gaming platforms and can move to more private chatrooms on other virtual platforms, typically one with video enabled features, where the conversation quickly becomes sexualized or violent,” warns a recent alert from the Royal Canadian Mounted Police (RCMP) about the rise of sextortion groups on social media channels.

“One of the tactics being used by these actors is sextortion, however, they are not using it to extract money or for sexual gratification,” the RCMP continued. “Instead they use it to further manipulate and control victims to produce more harmful and violent content as part of their ideological objectives and radicalization pathway.”

Some of the largest such known groups include those that go by the names 764, CVLT, Kaskar, 7997888429926996555Slit Town545404NMK303, and H3ll.

On the various cybercrime-oriented channels Judische frequented, he often lied about his or others’ involvement in various breaches. But Judische also at times shared nuggets of truth about his past, particularly when discussing the early history and membership of specific Telegram- and Discord-based cybercrime and harm groups.

Judische claimed in multiple chats, including on Leak Society and Court, that they were an early member of the Atomwaffen Division (AWD), a white supremacy group whose members are suspected of having committed multiple murders in the U.S. since 2017.

In 2019, KrebsOnSecurity exposed how a loose-knit group of neo-Nazis, some of whom were affiliated with AWD, had doxed and/or swatted nearly three dozen journalists at a range of media publications. Swatting involves communicating a false police report of a bomb threat or hostage situation and tricking authorities into sending a heavily armed police response to a targeted address.

Judsiche also told a fellow denizen of Court that years ago he was active in an older harm community called “RapeLash,” a truly vile Discord server known for attracting Atomwaffen members. A 2018 retrospective on RapeLash posted to the now defunct neo-Nazi forum Fascist Forge explains that RapeLash was awash in gory, violent images and child pornography.

A Fascist Forge member named “Huddy” recalled that RapeLash was the third incarnation of an extremist community also known as “FashWave,” short for Fascist Wave.

“I have no real knowledge of what happened with the intermediary phase known as ‘FashWave 2.0,’ but FashWave 3.0 houses multiple known Satanists and other degenerates connected with AWD, one of which got arrested on possession of child pornography charges, last I heard,” Huddy shared.

In June 2024, a Mandiant employee told Bloomberg that UNC5537 members have made death threats against cybersecurity experts investigating the hackers, and that in one case the group used artificial intelligence to create fake nude photos of a researcher to harass them.

Allison Nixon is chief research officer with the New York-based cybersecurity firm Unit 221B. Nixon is among several researchers who have faced harassment and specific threats of physical violence from Judische.

Nixon said Judische is likely to argue in court that his self-described psychological disorder(s) should somehow excuse his long career in cybercrime and in harming others.

“They ran a misinformation campaign in a sloppy attempt to cover up the hacking campaign,” Nixon said of Judische. “Coverups are an acknowledgment of guilt, which will undermine a mental illness defense in court. We expect that violent hackers from the [cybercrime community] will experience increasingly harsh sentences as the crackdown continues.”

5:34 p.m. ET: Updated story to include a clarification from Mandiant.

15:49

Free Software Directory meeting on IRC: Friday, November 8, starting at 12:00 EST (17:00 UTC) [Planet GNU]

Join the FSF and friends on Friday, November 8 from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.

LXQt 2.1.0 released [LWN.net]

Version 2.1.0 of the LXQt lightweight Qt desktop environment has been released. The highlight of this release is support for multiple Wayland compositors:

Through its new component lxqt-wayland-session, LXQt 2.1.0 supports 7 Wayland sessions (with Labwc, KWin, Wayfire, Hyprland, Sway, River and Niri), has two Wayland back-ends in lxqt-panel (one for kwin_wayland and the other general), and will add more later. All LXQt components that are not limited to X11 — i.e., most components — work fine on Wayland. [...]

Of course, the X11 session will be supported indefinitely. Wayland is optional and rather experimental.

[$] Safety in an unsafe world [LWN.net]

Joshua Liebow-Feeser took to the stage at RustConf to describe the methodology that his team uses to encode arbitrary constraints in the Rust type system when working on the Fuchsia operating system (slides). The technique is not unknown to the Rust community, but Liebow-Feeser did a good job of both explaining the method and making a case for why it should be used more widely.

15:14

Windows Server IoT 2025 released [OSnews]

Today, Microsoft announced the general availability of Windows Server IoT 2025. This new release includes several improvements, including advanced multilayer security, hybrid cloud agility, AI, performance enhancements, and more.

Microsoft claims that Windows Server IoT 2025 will be able to handle the most demanding workloads, including AI and machine learning. It now has built-in support for GPU partitioning and the ability to process large datasets across distributed environments. With Live Migration and High Availability, it also offers a high-performance platform for both traditional applications and advanced AI workloads.

↫ Pradeep Viswanathan at Neowin

Windows Server IoT 2025 brings the same benefits, new features, and improvements as the just-released regular Windows Server 2025. I must admit I’m a little unclear as to what Windows Server IoT has to offer over the regular edition, and reading the various Microsoft marketing materials and documents don’t really make it any clearer for me either, since I’m not particularly well-versed in all that enterprise networking lingo.

15:07

The BPF instruction set architecture is now RFC 9669 [LWN.net]

After a couple of years of effort, the BPF instruction set architecture has been accepted as RFC 9669, giving it a standard outside of the in-kernel implementation. This message from David Vernet (who also contributed an article on the standardization process last year) describes the process and why it is important:

Though some vendors have already implemented BPF offloading capabilities without having a standardized ISA, others are not quite as risk tolerant. As Christoph [Hellwig] discussed at LSFMM 2022, certain NVMe vendors have expressed an interest in building BPF offloading capabilities for various use cases such as eXpress Resubmission Path (XRP), but they simply can't fund such a project without certain components of BPF being standardized. Hence, the effort to standardize BPF was born.

Security updates for Tuesday [LWN.net]

Security updates have been issued by AlmaLinux (firefox, openexr, and thunderbird), Fedora (llama-cpp and python-quart), Oracle (firefox, openexr, thunderbird, and xorg-x11-server and xorg-x11-server-Xwayland), SUSE (chromium, govulncheck-vulndb, openssl-1_1, python311, and python312), and Ubuntu (linux-azure, linux-bluefield, linux-azure, linux-gcp, linux-ibm, openjpeg2, and ruby3.0, ruby3.2, ruby3.3).

13:21

Link [Scripting News]

It's Election Day in the US. Your vote is your power.

12:49

AIs Discovering Vulnerabilities [Schneier on Security]

I’ve been writing about the possibility of AIs automatically discovering code vulnerabilities since at least 2018. This is an ongoing area of research: AIs doing source code scanning, AIs finding zero-days in the wild, and everything in between. The AIs aren’t very good at it yet, but they’re getting better.

Here’s some anecdotal data from this summer:

Since July 2024, ZeroPath is taking a novel approach combining deep program analysis with adversarial AI agents for validation. Our methodology has uncovered numerous critical vulnerabilities in production systems, including several that traditional Static Application Security Testing (SAST) tools were ill-equipped to find. This post provides a technical deep-dive into our research methodology and a living summary of the bugs found in popular open-source tools.

Expect lots of developments in this area over the next few years.

This is what I said in a recent interview:

Let’s stick with software. Imagine that we have an AI that finds software vulnerabilities. Yes, the attackers can use those AIs to break into systems. But the defenders can use the same AIs to find software vulnerabilities and then patch them. This capability, once it exists, will probably be built into the standard suite of software development tools. We can imagine a future where all the easily findable vulnerabilities (not all the vulnerabilities; there are lots of theoretical results about that) are removed in software before shipping.

When that day comes, all legacy code would be vulnerable. But all new code would be secure. And, eventually, those software vulnerabilities will be a thing of the past. In my head, some future programmer shakes their head and says, “Remember the early decades of this century when software was full of vulnerabilities? That’s before the AIs found them all. Wow, that was a crazy time.” We’re not there yet. We’re not even remotely there yet. But it’s a reasonable extrapolation.

EDITED TO ADD: And Google’s LLM just discovered an expolitable zero-day.

12:35

Radar Trends to Watch: November 2024 [Radar]

October had many language model releases. The mid-size models, and even the small models, are catching up to frontier models like GPT-4.5o in performance. But the release that blew us all away wasn’t a language model: It was Claude’s computer use API. Computer use allows you to teach Claude how to use a computer: how to run an application, click on buttons, and use a shell or an editor. It has many problems, security not being the least of them—but it’s bound to improve. Sending screen captures to Claude so it can compute where to click is clumsy at best, and there are no doubt better solutions (such as using accessibility tools). However, computer use gives us a glimpse at a future where we’ll be working with agents that can plan and execute complex multistep operations.

AI

  • Little Language Models is an educational program that teaches young children about probability, artificial intelligence, and related topics. It’s fun and playful and can enable children to build simple models of their own.
  • Grafana and NVIDIA are working on a large language model for observability, apparently given the awkward name LLo11yPop. The model aims to answer natural language questions about system status and performance based on telemetry data.
  • Google is open-sourcing SynthID, a system for watermarking text so AI-generated documents can be traced to the LLM that generated them. Watermarks do not affect the accuracy or quality of generated documents. SynthID watermarks resist some tampering, including editing.
  • Mistral has released two new models, Ministral 3B and Ministral 8B. These are small models, designed to work on resource-limited “edge” systems. Unlike many of Mistral’s previous small models, these are not open source.
  • Anthropic has added a “computer use” API to Claude. Computer use allows the model to take control of the computer and use it to find data by reading the screen, clicking buttons and other affordances, and typing. It’s currently in beta.
  • Moonshine is a new open source speech-to-text model that has been optimized for small, resource-constrained devices. It claims accuracy equivalent to Whisper, at five times the speed.
  • Meta is releasing a free dataset named Open Materials 2024 to help materials scientists discover new materials.
  • Anthropic has published some tools for working with Claude in GitHub. At this point, tools to help analyze financial data and build customer support agents are available.
  • NVIDIA has quietly launched Llama-3.1-Nemotron-70B-Instruct-HF, a language model that outperforms both GPT-4o and Claude 3.5 on benchmarks. This model is based on the open source Llama, and it’s relatively small (70B parameters).
  • NotebookLM has excited everyone with its ability to generate podcasts. Google has taken it a step farther by adding tools that give users more control over what the virtual podcast participants say.
  • Data literacy is the new survival skill: We’ve known this for some time, but it’s all too easy to forget, particularly in the age of AI.
  • The Open Source Initiative has a “humble” definition for open source AI. The definition recognizes four distinct categories for data: open, public, obtainable, and unshareable.
  • Does training AI models require huge data centers? PrimeIntellect is training a 10B model using distributed, contributed resources.
  • OpenAI has published Swarm, a platform for building AI agents, on GitHub. They caution that Swarm is experimental and they will not respond to pull requests. Feel free to join the experiment.
  • OpenAI has also released Canvas, an interactive tool for writing code and text with GPT-4o. Canvas is similar to Claude’s Artifacts.
  • Two of the newly released Llama 3.2 models—90B and 11B—are multimodal. The 11B model will run comfortably on a laptop. Meta has also released the Llama Stack APIs, a set of APIs to aid developers building generative AI applications.
  • OpenAI has announced a pseudo-real-time API. Their goal is to enable building realistic voice applications, including the ability to interrupt the AI in the flow of conversation.
  • Will AI-powered glasses become the next blockbuster consumer device? Meta’s Orion prototype could be the killer user interface for AI. It’s not about gaming; it’s about asking AI about the things you see. Now if they can only be manufactured at a decent price point.
  • AI avatars are interviewing job candidates. This is not going to go well…
  • The Allen Institute has developed a small language model called Molmo that they claim has performance equivalent to GPT-4o.
  • Humane Intelligence, an organization founded by Rumman Chowdhury, has offered a prize to developers building an AI vision model that can detect online hate-based images.
  • These days, it’s not a surprise that a computer can play chess and other board games. But table tennis? You may prefer the video to the paper.
  • The Qwen family of language models, ranging from 0.5B to 72B parameters, is getting impressive reviews. Even the largest can be made to run on older GPUs, not just H100s and A100s.
  • Now an AI can “prove” it’s human. An AI-based computer vision model has demonstrated the ability to defeat Google’s latest CAPTCHA (reCAPTCHAv2) 100% of the time.
  • Open AI is now expanding access to its Advanced Voice Mode to more users. Advanced Voice Mode makes ChatGPT truly conversational: You can interrupt it mid-sentence, and it responds to your tone of voice.
  • Neural motion planning is a neural network-based technique that allows robots to plan and execute tasks in unfamiliar environments.

Programming

  • Safe C++ proposes extensions to the C++ language to make it memory safe. Errors in memory safety have long been the largest source of security vulnerabilities.
  • Microsoft sees GenAIOps as a “paradigm shift” for IT. It will become increasingly necessary as software incorporates AI and IT teams need to become specialists in AI infrastructure. One aspect of GenAIOps will be collecting, curating, and cleaning datasets.
  • Huly is an open source platform for project management.
  • Typst is a new system for writing scientific (and other) texts. It has capabilities equivalent to LaTeX, but the syntax is much simpler, similar to Markdown.
  • Microsoft has begun a project that will make Linux’s eBPF available on Windows. In the Linux world, eBPF has proven invaluable for observability, security, and compliance tools. Windows eBPF will be bytecode compatible with Linux.
  • Python 3.13 has been released. The most important changes are a new REPL that features multiline editing and color support; an experimental option to disable the global interpreter lock (GIL); and an experimental just-in-time compiler.
  • Ziggy is a new language for data serialization. It isn’t a general purpose programming language; it’s a specialized language for defining data schemas precisely and painlessly.
  • Microsoft’s new security-first initiative is tied to their platform engineering efforts. Platform engineering limits the number of tools developers need to use, which in turn reduces the amount of code that needs to be secured and maintained.
  • The CNCF Artifact Hub is a source for cloud native configurations, plug-ins, and other software for building cloud native infrastructure. It isn’t a GitHub-like repository; it links back to the artifacts’ sources rather than storing them.
  • Want to run Linux on an Intel 4004, a CPU from 1971? It will take almost 5 days to boot. What’s more amazing is that it’s actually running on an emulator that runs on the 4004.

Security

  • It’s no surprise that prompt injection works well against Anthropic’s amazing computer use API. Anthropic’s documentation warns of many vulnerabilities. So it’s also not surprising that someone has gone ahead and tried it. Don’t stop experimenting, but be careful.
  • Imprompter is an attack against large language models that uses a malicious prompt to force the model to exfiltrate data from previous chats.
  • One major source of security vulnerabilities is code that includes secrets (account names and passwords, certificates, etc.) HashiCorp’s Vault Radar scans software, including repositories and pull requests, to detect secrets that have been exposed.
  • Mandiant security researchers have discovered that 70% of vulnerabilities that were exploited in the past year were zero-days—that is, new vulnerabilities that had not been previously reported. Once discovered, vulnerabilities are almost immediately weaponized and used as attacks.
  • OpenAI has shut down the accounts of threat actors using GPT for a number of activities including developing malware, generating and propagating misinformation, and phishing. It would be surprising if similar abuse has not taken place with other models.
  • GitLab’s latest security updates address a vulnerability that allows attackers to trigger CI/CD pipelines on any branch of a repository.
  • Students have connected Meta’s Ray-Ban Smart Glasses to an invasive image search site. They then use language models to assemble data from a number of databases that contain personal information, such as addresses.
  • Cloudflare has blocked a series of distributed denial of service (DDoS) attacks, including one with a peak rate of 3.8 terabits per second, the highest ever recorded.
  • In incident reviews, don’t discuss action items responding to the incident. The incident review is about learning and understanding; talking about fixes will derail it. The fixes can always be discussed later, and will be better if they’re based on a firm understanding.
  • We’ve long known that requirements for changing passwords were a bad practice. NIST is now proposing rules that would eliminate password composition requirements, such as one capital letter, one number, and one character in a non-Latin alphabet.
  • A prompt injection attack against GPT’s long-term memory allows the attacker to send all of a user’s input and output to an arbitrary server. This attack is persistent; it remains in GPT’s long-term memory. At this point, it has been partially remediated.
  • Kaspersky, which is shutting down US operations, has deleted their software from the US users’ computer and installed Pango Group’s UltraAV and (in some cases) UltraVPN without users’ permission. Kaspersky’s behavior begs the question: When does an antimalware vendor become malware?

Web

  • Videos from XOXO 2024 have been posted. Molly White and Erin Kissane are particularly highly recommended.
  • Do we need yet another React web framework? The developers of One think so. One promises to be simple, opinionated, and local-first.
  • Tom Coates has announced the formation of the Social Web Foundation, an organization dedicated to helping federated networks grow in healthy ways.
  • Trouble in the WordPress world: WordPress.org has blocked WP Engine, an important hosting provider for WordPress users, from accessing its resources. Drama ensues, escalates, and becomes increasingly vicious.

Hardware

  • ARM has canceled the license that allows Qualcomm to produce the Snapdragon processor, which is the basis for most mobile phones. Is this an opportunity for RISC-V?
  • There’s a new RISC-V microprocessor that’s not made of silicon. It’s flexible, low power, and capable of running AI workloads (though at relatively low speeds).
  • Bunnie Huang leaves us with the terrifying realization that building a bomb into a small IoT device isn’t just feasible—it’s relatively easy and inexpensive.

Biology

CodeSOD: Counting it All [The Daily WTF]

Since it's election day in the US, many people are thinking about counting today. We frequently discuss counting here, and how to do it wrong, so let's look at some code from RK.

This code may not be counting votes, but whatever it's counting, we're not going to enjoy it:

case LogMode.Row_limit: // row limit excel = 65536 rows
    if (File.Exists(personalFolder + @"\" + fileName + ".CSV"))
    {
        using (StreamReader reader = new StreamReader(personalFolder + @"\" + fileName + ".CSV"))
        {
            countRows = reader.ReadToEnd().Split(new char[] { '\n' }).Length;
        }
    }

Now, this code is from a rather old application, originally released in 2007. So the comment about Excel's row limit really puts us in a moment in time- Excel 2007 raised the row limit to 1,000,000 rows. But older versions of Excel did cap out at 65,536. And it wasn't the case that everyone just up and switched to Excel 2007 when it came out- transitioning to the new Office file formats was a conversion which took years.

But we're not even reading an Excel file, we're reading a CSV.

I enjoy that we construct the name twice, because that's useful. But the real magic of this one is how we count the rows. Because while Excel can handle 65,536 rows at this time, I don't think this program is going to do a great job of it- because we read the entire file into memory with ReadToEnd, then Split on newlines, then count the length that way.

As you can imagine, in practice, this performed terribly on large files, of which there were many.

Unfortunately for RK, there's one rule about old, legacy code: don't touch it. So despite fixing this being a rather easy task, nobody is working on fixing it, because nobody wants to be the one who touched it last. Instead, management is promising to launch a greenfield replacement project any day now…

[Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

10:07

Kinds of power [Seth's Blog]

There’s the James Bond villian sort of power, based on division, dominance and destruction. This is the short-term power of bullies, trauma and mobs.

And then there’s a more resilient form of power. This is power based on connection, discussion and metrics. A power based in reality over the long term.

Divisive power tears things down. Resilient power builds things up.

Resilient power creates the conditions for the community to produce value over time. Resilient power uses optimism and fairness to create value because participants can see ways they can participate and contribute.

Fear might be for sale, but that doesn’t mean we have to buy it.

Better is possible.

09:21

A Night & Day Of Eatin’ Good In San Francisco [Whatever]

Two weeks ago, I went out to California to visit some family, and my cousin suggested that she and I take a mini trip down to San Francisco. I thought that sounded like a great idea, and happily agreed. We bounced some ideas around of what we wanted to do while in the city, and finally decided that our biggest priority was having some really excellent meals.

I let my cousin pick where she wanted to eat, because I like any and all food, so I was going to be okay with anything. She ended up picking The Palm Court at RH San Francisco for dinner, Arsicault Bakery for breakfast, and Cotogna for lunch.

If you’re unfamiliar with RH, it stands for Restoration Hardware and it’s a very bougie interior design company that for some reason has a restaurant in their showroom buildings. They have twenty-some locations across the US and Canada. I actually have been to one before a couple of years ago. It was the Columbus location, and it was so great then that I definitely had high hopes going in for dinner at their San Fran location.

The showroom and restaurant are located inside the Historic Bethlehem Steel Building, which is a beautiful work of architecture.

A shot of the Bethlehem Steel Building from across the street. It sits on the corner of the intersection, and is a four-story tall white building with plenty of windows and ornate detailing, as well as some column-design type decorations.

The inside was even more stunning, with marble as far as the eye can see, gorgeous fountains and chandeliers, real Medjool-date palms, and all the lovely RH furniture set up throughout the four floors of showrooms.

We were early for our reservation, so I grabbed a glass of Sauvignon Blanc and we headed up to the rooftop to start our leisurely stroll through the showrooms.

The Sauvignon Blanc was definitely the best Sauvignon Blanc I’d ever had. It was by Allan Scott and from Marlborough, New Zealand, and a 2023. It was crisp with distinct apple and grassy notes. I got a second glass halfway through our dinner.

The rooftop was expansive, with tons of upscale patio-style couches and chairs around fire pits, plenty of greenery from neatly trimmed hedges encircling trees, some interesting sculpture pieces, and a great view of the skyline, as well as the water and bridges.

And here’s a blurry photo of it featuring me! My cousin was walking when she took it, but hopefully you get at least a decent idea of what the rooftop looked like.

A photo of the rooftop area with me in the center of the shot, with my back to the camera as I am walking away. I am wearing a black dress and black heels, and you can see a lot of the patio furniture in the shot, as well as some of the hedges. You can also see a glimpse of the skyline in the distance.

It was also completely empty thanks to the chilly October wind, but I would love to sit out there on a warmer day.

After picturing my future dream home full of RH furniture, it was finally time to eat. We were seated directly in front of the kitchen, which was actually a lot of fun to watch the pros at work.

For our appetizers we settled on some crispy artichokes and potatoes with a lemon aioli:

A small white bowl full of potato slices and crispy artichokes.

This photo is mostly just potatoes, but I can assure you there were plenty of artichokes, as well, more than enough for me and my cousin to share, at least. I loved the rosemary on the potatoes, and the lemon in the aioli really added some brightness to this dish.

I had really been hoping for a shrimp cocktail, as I had had that at the Columbus location and it was really good, but alas they didn’t have it on the menu. They did, however, have these grilled shrimps with lemon, butter, garlic, and Calabrian chili:

A large white circular plate with six sizeable shrimp lined up along the left side. On the right side is a small pile of arugula and half a lemon with char marks on it.

These shrimp were perfectly cooked making for an excellent texture. I really enjoyed this dish because of its lightness and simplicity. I generally prefer appetizers to not be too heavy, so this was an ideal starter. Splitting it with my cousin meant we got each got three shrimps, and I’d honestly say that was a pretty perfect amount. As much as I had wanted a shrimp cocktail, this was a more than suitable substitute.

Originally we were just going to have two appetizers, but I knew I simply had to try one of their caviar specialties, especially since my cousin had never had caviar before. I really wanted the “impossibly thin housemade chips with dip and caviar” but I knew spending 95 dollars on just caviar was a tiny bit much. Even the smaller portion at 52 dollars was still right at that point cost wise where I was hesitant. Thankfully, they had an option under 50 dollars. Two mini lobster rolls with caviar for 34 dollars.

A white oval plate with two mini lobster rolls sitting atop it. The bread of the rolls is more or less taco shaped, and the caviar sits in a mound on top of the rolls' filling.

Is it expensive? Yeah. But was it delicious? Oh yeah. Do you see how golden brown that toasted roll is? Do you see the mound of caviar atop succulent lobster meat and creamy creme fraiche?! Heaven in a bite. The menu says the caviar is Petrossian Imperial Kaluga Hybrid Caviar. I honestly know nothing about caviar, so I went to their website and I think it’s this one, if you were curious. I was happy my cousin ended up liking it!

It was time for our entrees. I ordered the grilled king salmon. An 8oz filet with honey, black pepper, brown butter, and lemon:

A large white circular plate with a large filet of salmon, accompanied by half of a lemon and a small pile of arugula.

I had the salmon cooked medium, and it flaked apart beautifully. It was tender, nowhere near dry, and not fishy at all. Really well done salmon all around.

My cousin got the petite filet, cooked medium rare. I didn’t get a picture before she dug in, but trust me when I say I don’t think I’ve ever seen a more perfect medium rare in my life. It was truly a sight to behold.

We each picked a side, and we both went with fries. The truffle fries and the sweet potato fries:

Two baskets of fries. The truffle fries are topped with parmesan and truffle, and the sweet potato fries are just plain.

They were each served with a respective sauce, but I can’t remember the specifics and it doesn’t say it on the menu. But they were definitely like, aiolis I’m pretty sure. Rarely are truffle fries served with anything else. Good fries! No complaints.

Onto dessert, my cousin was pretty full so she just wanted something light, and thankfully they had just the dish for her. Strawberries and cream:

A large white circular plate full of strawberries with their tops cut off, served alongside a bowl of whipped cream.

For those of you out there that don’t love sweets or don’t want to end the meal on something heavy, this is a great option! It’s simple but there’s nothing wrong with simplicity when it’s done well.

I, of course, got the crème brûlée. As many of you know, I am on the hunt for the world’s greatest crème brûlée, and love to try it wherever I go. We were informed that their crème brûlée is actually butterscotch flavored, and the butterscotch is housemade.

A small white dish of creme brulee, with a perfectly torched top.

Y’all. Y’all. This was in fact, without a doubt, the greatest crème brûlée I have had in my life. A perfectly torched top, wonderfully rich, creamy custard, and the butterscotch blended in beautifully without being overwhelming. I was stunned. It is a must try if you visit. This picture does not do it any justice.

So, that was our dinner at RH! It was quite wonderful. The friendliness of the staff, the atmosphere, beautiful decor, and stellar food makes this an easy recommendation. I highly suggest dining here if you’re in the San Fran area, or at least checking if there’s a location near your part of the country. I know I’ll definitely be revisiting the Columbus one.

The next morning, we headed over to Arsicault Bakery. Originally we were going to go to the McAllister location because it has a more expansive menu and was slightly closer of a drive, but parking was kind of a nightmare in that area, so we opted for the Arguello location. There was a long line out the door and no seating, but we knew we had to get our hands on what Tik Tok claims to be some of the best croissants money can buy.

My cousin got a ham and cheese croissant, as well as an almond one, and I also got an almond croissant because that was what I had seen recommended on Tik Tok. Also I just generally like almond flavored pastries so I probably would have picked that one anyways.

Long story short, it was the best croissant I’d ever had. It put every other croissant in my life to shame. No croissant I’d ever had before came anywhere close to the masterpiece this croissant was. My eyes rolled back into my head on the first bite. And probably also the second. I still can’t believe it was that unbelievably good. No photo though because we were so hungry that we just dug right in!

After our quick brekky, we perused some different shops. First was Sézane, where my cousin bought two Parisian wool sweaters. Then Paper Source, where I bought plenty of stickers and stationery goodies. Plus a few others until it was time for lunch at Cotogna.

All I knew about Cotogna was that it was Italian, and that it was a bit of a nicer restaurant. Upon arriving, I realized that it’s actually pretty dang fancy, and I was somewhat underdressed. You live and you learn.

The inside is what I can only describe as upscale-rustic, like very open and minimalistic but also a slight warm and cozy vibe from its wooden and copper interior. I know it sounds like contrasting vibes but it works surprisingly well. Though I didn’t get to see the inside for very long because we were seated outdoors. The outdoor seating was actually right off the sidewalk, sort of like a makeshift wooden patio that has half-walls and a canopy to protect you from the rain. Thankfully, it was an absolutely beautiful day, but even if it had been chilly, there were heat lamps above each table, and the softest blankets draped on the back of the chairs.

We were told by our waitress that the menu changes pretty frequently based on the ingredients that are available at the time from local farms. Here’s what was on the menu that day:

The Cotogna menu, a simple white paper menu with black ink. There's five sections of the menu: spuntini, antipasta, pasta, pizza e pane, and secondi.

To start, we each ordered one of their zero-proof cocktails. Here we have the Cotogna Chinotto and the Vergine Diavolo:

Two drinks sitting next to each other on top of a wooden table. One is in a taller glass and a pale yellow color, the other is in a shorter glass and is a bright and pretty pink color. Both have ice in them but only the tall one has a straw.

The Chinotto (left) was comprised of wood oven-fired citrus, juniper berry, and spices. The Diavolo contained summer citrus, ginger, grenadine, and Peychauds bitters. While both were refreshing and tasty, we both decided we liked the Diavolo a little more, if nothing else then at least for the fun color. Pink drinks just automatically taste better.

As for the food, we started off with the Gnocco Fritto. I had no idea what that meant, but the description said it contained prosciutto, gorgonzola, and pickled onion, and I like all that stuff so I figured it would probably be good. And here it is:

A wooden serving board with six pieces of fried dough, a mound of prosciutto, a small bowl of pickled red onions, and a small bowl of creamy gorgonzola.

I hadn’t exactly expected this setup, but basically it’s fried dough that’s hollow inside, and you stuff some meat and cheese inside the hollow part and eat it like that! Definitely interesting, and definitely delicious. The gorgonzola was creamy and packed full of funkalicious flavor, the prosciutto was salty and soft, and the pickled onions were perfectly pickled without being too much. A general rule of thumb for me is that if it’s meat, cheese, and a carb served on a nice board, I’m gonna like it.

We also got a second starter, which was the halibut crudo:

A large white circular plate with thinly sliced pieces of halibut crudo scattered around. Accompanying the fish is bright orange gooseberries, green olive slices, torn tarragon leaves, and a light drizzling of oil.

This dish tasted as incredible as it looks. The halibut was sliced so thin, it was wonderfully tender. The gooseberries added a lovely brightness with their tartness, and the olives contributed a briny element without overpowering any of the other components. This dish was light, yet a full orchestra of different textures and flavors, making each bite a symphony.

Finally, it was time for some pasta.

My cousin went with the mezze manichi, which we were told meant “short sleeves”, a name given for the dish’s pasta shape:

A large white bowl containing green short tube shaped pasta with guanciale and pistachios.

This colorful pasta was topped with guanciale, chantarelle mushrooms, and pistachios. I actually had to Google guanciale because I’d never heard of it before, and I was informed that it’s an Italian salt-cured meat made from the jowls of the pig. Hooray for pork cheeks!

And I tried the tortelli with butternut squash and sage:

A beautiful stoneware bowl containing nine round pieces of pasta. They are pale orange in color and surrounded by a pool of butter, and topped with a sage leaf.

I had wanted to try this one because it was fall and one of my favorite autumnal foods is butternut squash. Even if it didn’t exactly feel like fall in San Fran, I was determined to embrace the October squash goodness. And boy oh boy did that decision pay off, because I can say with extreme confidence that this was the best pasta I’d ever had. Let me say that again. The best pasta of my LIFE. Each soft, pillowy piece of pasta was stuffed with creamy ricotta and covered in toasty brown butter, and the sage lent its signature warmth, making every bite feel like a cozy hug that transported you to an autumnal paradise of cardigans and falling leaves. If I could eat a dish again for the first time, it’d be this one.

My cousin and I also decided to split their famous Raviolo di ricotta, since it was small enough for two people to take on:

A beautiful stoneware plate with a large ravioli on top. It is covered in brown butter and has a runny egg yolk on top.

Do you see all those toasted milk solids from the brown butter?! Liquid gold, people. Gold, I say! Stuffed with their delicious ricotta and made extra rich from the runny egg yolk on top, this certainly was a showstopper of a ravioli. It was very similar to the tortelli, but my tortelli still takes the cake. (Side note: have you noticed how beautiful the stoneware plates and bowls are? The waitress said they’re all handmade!)

Speaking of cake, it was time for dessert:

A small dessert menu, just a simple white sheet of paper with black text. There's three sections: dolci, vini dolci, and caffe & tea.

As much as I would’ve loved to have cheese for dessert, I opted for the Marsala panna cotta:

A small glass cup of panna cotta.

I am a huge fan of panna cotta. I kind of consider it almost like an untorched, more jiggly crème brûlée. I actually didn’t know what Marsala was, but as soon as I took a bite I realized it was alcohol. It wasn’t bad by any means, but it was definitely on the strong side flavor wise. I still enjoyed this dish, but if you really dislike the taste of alcohol, or can’t have it for health reasons, I would steer away from this particular dessert. It was kind of like when a rum cake is perhaps soaked a little too much in rum.

My cousin got a scoop of their vanilla and honeycomb gelato:

A small silver dish with a scoop of ice cream in it. The ice cream is topped with a thin cookie.

Listen, I know it sounds pretty wild to say that I had the best Sauvignon Blanc, best croissant, best pasta, and best gelato while I was in San Fran, but it’s completely true. This gelato was on another level. The vanilla flavor was so decadent, you can literally see the vanilla bean specks in that scoop! Creamy and luxurious and sweet and ugh. Lord have mercy. You need this gelato in your life. If you’re lactose intolerant, take a Lactaid pill and buckle up, because you sure as heck don’t want to miss out on this gem of a gelato.

So, Cotogna was an absolute success. I’m so happy my cousin picked it. And I’m especially happy they had a few lunch reservations left, because they were all booked up for dinner (I can see why). Cotogna might just be my new favorite restaurant. Next time we go to San Fran, my cousin and I want to try their counterpart restaurant next door, Quince. It has three Michelin stars! If you sit outside like we did, you can see into their kitchen.

I left San Francisco very full and extremely satisfied. Y’all have unbelievably good food out there, I’m quite jealous, and I hope to be back soon to try even more.

What dish sounded the best to you? Have you been to any RH’s before? Have you visited San Francisco? Let me know in the comments, and have a great day!

-AMS

09:00

Goldicock by Hien Pham [Oh Joy Sex Toy]

Goldicock by Hien Pham

Too tight, Too firm, too hot, too cold. Hien is on a quest to find the perfect sleeve for the Goldicock! Today he reviews the Tenga Geo, 3D, and Spinner. The process to find the right sex toy for you and your body can be can be so gosh darned disheartening, but ever so worth […]

06:42

Accusations of "campaign of hate" [Richard Stallman's Political Notes]

*[The bully] accuses Harris of "campaign of hate" one day after his racism-filled rally.*

It is a standard right-wing disinformation tactic to accuse opponents of doing the bad things that the right-wing does. That way, when people find out that the right wing is doing these things, they may suppose that "everybody does them".

Corrupter vs 20th century fascists [Richard Stallman's Political Notes]

There are subtle points in which the corrupter differs from what 20th century fascist leaders did to take power.

I'll take the author's word for this, but does it mean the corrupter is not a fascist? How important are those details? Are they big enough to imply that he is not a fascist, or do they only make him a somewhat different kind of fascist?

I'd say it is the latter.

Margaret Reid on joining climate protest [Richard Stallman's Political Notes]

Margaret Reid explains how she felt it was her duty to join in a climate protest, because preserving art is futile when we don't preserve civilization.

Democrats complicit in genocide [Richard Stallman's Political Notes]

Wajahat Ali: *Yes, I think Democrats are complicit in genocide. But Trump would be far worse.*

He directly tackles the view, held by many, that "both sides are the same evil."

To give the victory to someone who is a monster on many issues, in order to punish a party that is a monster on one issue, is an instance of "cutting off your nose to spite your face."

Corrupter hinting at "little secret" [Richard Stallman's Political Notes]

The corrupter hinted tantalizingly that Mike Johnson, the by-hook-or-by-crook Speaker of the House, is somehow going to steal the election.

He could do this by arbitrarily rejecting the elections of some states. So it is not a mere vague suspicion. It looks like he and the corrupter are trying to suggest that he will do that.

Chemicals in mud after Hurricane Helene [Richard Stallman's Political Notes]

*The Saturday following Hurricane Helene, soldiers warned Whitney Anderson about the [chemicals in the mud that could cause burns].

Attackers burn some early ballots [Richard Stallman's Political Notes]

Attackers set fires that burned some early voting ballots.

I have to suspect that this is part of the violence that Team Tr…ance stirs up. The wrecker has repeatedly suggested that mail-in ballots somehow put the election in danger and that the 2020 election was "stolen", and many of his followers are inclined to violence.

02:28

Anhlightenment [QC RSS]

don't EVER think about who you are as a person

00:28

NetBSD: the portable, lightweight, and robust UNIX-like operating system [OSnews]

NetBSD is an open-source, Unix-like operating system known for its portability, lightweight design, and robustness across a wide array of hardware platforms. Initially released in 1993, NetBSD was one of the first open-source operating systems based on the Berkeley Software Distribution (BSD) lineage, alongside FreeBSD and OpenBSD. NetBSD’s development has been led by a collaborative community and is particularly recognized for its “clean” and well-documented codebase, a factor that has made it a popular choice among users interested in systems programming and cross-platform compatibility.

↫ André Machado

I’m not really sure what to make of this article, since it mostly reads like an advertisement for NetBSD, but considering NetBSD is one of the lesser-talked about variants of an operating system family that already sadly plays second fiddle to the Linux behemoth, I don’t think giving it some additional attention is really hurting anybody. The article is still gives a solid overview of the history and strengths of NetBSD, which makes it a good introduction.

I have personally never tried NetBSD, but it’s on my list of systems to try out on my PA-RISC workstation since from what I’ve heard it’s the only BSD which can possibly load up X11 on the Visualize FX10pro graphics card it has (OpenBSD can only boot to a console on this GPU). While I could probably coax some cobbled-together Linux installation into booting X11 on it, where’s the fun in that?

Do any of you lovely readers use NetBSD for anything? FreeBSD and even OpenBSD are quite well represented as general purpose operating systems in the kinds of circles we all frequent, but I rarely hear about people using NetBSD other than explicitly because it supports some outdated, arcane architecture in 2024.

Redox runs on RISC-V, boots to GUI login on Raspberry Pi 4 [OSnews]

Another month lies behind us, so another monthly update from Redox is upon us. The biggest piece of news this time is undoubtedly that Redox now runs on RISC-V – a major achievement.

Andrey Turkin has done extensive work on RISC-V support in the kernel, toolchain and elsewhere. Thanks very much Andrey for the excellent work!

Jeremy Soller has incorporated RISC-V support into the toolchain and build process, has begun some refactoring of the kernel and device drivers to better handle all the supported architectures, and has gotten the Orbital Desktop working when running in QEMU.

↫ Ribbon and Ron Williams

That’s not all, though. Redox on the Raspberry Pi 4 boots to the GUI login screen, but needs more work on especially USB support to become a fully usable target. The application store from the COSMIC desktop environment has been ported, and as part of this effort, Redox also adopted FreeDesktop standards to make package installation easier – and it just makes sense to do so, with more and more of COSMIC making its way to Redox.

Of course, there’s also a slew of smaller improvements to the kernel, various drivers including the ACPI driver, RedoxFS, Relibc, and a lot more. The progress Redox is making is astounding, and while that’s partly because it’s easier to make progress when there’s a lot of low-hanging fruit as there inevitably will be in a relatively new operating system, it’s still quite an achievement. I feel very positive about the future of Redox, and I can’t wait until it reaches a point where more general purpose use becomes viable.

Monday, 04 November

23:42

Urgent: Elon Musk's illegal campaign events [Richard Stallman's Political Notes]

US citizens: call on The FEC to investigate and prosecute Elon Musk's illegal campaign events now.

PAC pitting Arab and Jewish voters against Harris [Richard Stallman's Political Notes]

*Mitch McConnell Funneled Cash to a PAC Pitting Arab and Jewish Voters Against Harris.*

Another article said that the stir up hostility between those Arab and Jewish voters while using them all.

This is one of the problems with political ads funded by anonymous rich people — they can easily pat to say one thing to group A and the opposite to group B, while keeping it secret from the public.

Targeted advertising makes it easier to do this. It also fuels a motor for pervasive tracking and surveillance — "surveillance capitalism". I think we should abolish it.

Battery backup for power grid [Richard Stallman's Political Notes]

The US is building battery backup for the power grid so fast that it makes all talk of needing nuclear power for that purpose absurd. Nuclear power is simply inferior to these batteries, in cost and in time to construct.

US professors fired over activism over atrocities against Palestinians [Richard Stallman's Political Notes]

US professors at various universities have been fired, or are being "investigated", based on activism against Israel's atrocities against Palestinians.

Columbia university Katherine Franke criticized Israeli ex-soldiers in the Columbia campus for harassing Palestinians there. Other professors then accused her of creating a hostile environment for Israeli ex-soldiers.

This shows the absurdity of this system, in which any statement alleging harassment can be taken seriously as harassment. This can be twisted to target anyone who is not a nebbish.

I do not approve of Kanazi's poem, which aims to polarize society and turn the political disagreement over Israel and Palestine into an uncrossable rift between two camps. I don't shun individuals for developing nonfree software, and I certainly won't shun anyone for disagreeing with me about this.

However, freedom of speech about political issues includes the right to make statements such as that poem, and people should not be punished for redistributing it. People deserve the freedom to share copies of any published work.

Israel not "saving western civilisation" [Richard Stallman's Political Notes]

*Israel is not "saving western civilisation". Nor is Hamas leading "the resistance". *Both sides believe they have right on their side and use it as an excuse to perpetuate bloodshed.*

Collapse of carbon sinks [Richard Stallman's Political Notes]

* The sudden collapse [last year] of carbon sinks [of forests and land] was not factored into climate models — and could rapidly accelerate global heating.*

This seems to be caused by changes in the climate big enough to disrupt natural processes on a large scale.

Views of attendees at fascist's rally [Richard Stallman's Political Notes]

Greg Palast reports on the views of attendees at the fascist's rally: they are convinced that they will rebel if he loses.

I think they are nerving themselves to start shooting.

I hope that, if they start actually pointing guns at people, US troops will not hesitate to use guns to vanquish them. In their way of thinking, they are entitled to shoot people who won't support them, and if you aren't ready for a gunfight, that implies they should bully you. They will bully the US army if commanders seem hesitant to order "Fire!"

But if they see that the Army is prepared to return fire if they shoot, they may still hesitate to start actual shooting.

Views on reparations for slavery from Britain [Richard Stallman's Political Notes]

Interesting views on the idea of reparations for slavery from Britain to descendants of slaves.

Although the individuals who participated were responsible for their own actions, the state was responsible for maintaining the system of slavery for denying equal rights to those who were slaves. The state does properly owe these reparations — and that British state still exists.

To get the reparations from those who are wealthy today because ancestors invested in slavery would be very just, but figuring out who should owe how much may be very difficult — and may not be necessary.

In the case of Britain, I have the impression that nearly everyone who was rich from the 1600s to the 1800s got much of that wealth from slavery. Those whose business had nothing directly to do with slavery nonetheless did profit from the greater wealth of the country that was due to slavery.

So I think it would be sufficiently just, and much simpler, to get the money for the reparations by increasing taxes on income and wealth today,

I've reached a similar conclusion for reparations in the US, through a similar system.

Flooding train station [Richard Stallman's Political Notes]

An "amorous couple" have been accused of flooding parts of train station by setting off the sprinkler systems. They must have been very hot lovers to have that effect.

The article does not suggest that they did this intentionally, but if it was not intentional, it makes no sense to punish them.

Musk's claim of living on Mars within years [Richard Stallman's Political Notes]

* Kelly and Zach Weinersmith's book overturns Elon Musk's claim that we could live on the red planet within years while stressing the good reasons to pursue space settlement.*

Opposing the fascist in public [Richard Stallman's Political Notes]

Several important US business leaders privately oppose the fascist but refuse to say so in public.

That means, to be blunt about it, that they are too scared to oppose his threats of retaliation if they do. They are giving up a free society without a fight.

You Can Still Vote! [The Stranger]

Tomorrow marks yet another “most important election of our lifetimes.” And to be fair, it is pretty important. We get to pick a Governor between the Democrat’s heir apparent and the guy who definitely did not solve the Green River killer case. We have the chance to tell Council appointee Tanya Woo “no” for the second time. We could vote away hundreds of millions in education funding if enough people fall for Let’s Go Washington’s phony populist schtick, and this might be the last time you ever vote for President! Want to get in on the action? Turn in your ballot by 8pm Tuesday, November 5! by Hannah Krieg

Tomorrow marks yet another “most important election of our lifetimes.” And to be fair, it is pretty important. We get to pick a Governor between the Democrat’s heir apparent and the guy who definitely did not solve the Green River killer case. We have the chance to tell Council appointee Tanya Woo “no” for the second time. We could vote away hundreds of millions in education funding if enough people fall for Let’s Go Washington’s phony populist schtick, and this might be the last time you ever vote for President! Want to get in on the action? Turn in your ballot by 8pm Tuesday, November 5!

According to King County Elections’ (KCE) ballot return statistics, many of you already turned yours in. As of 9am Monday, 50% of King County’s 1.4 million registered voters cast a ballot. That’s a much higher engagement rate than in typical odd-year elections, where less than half of registered voters usually participate. However, turnout still falls short of the nearly 86% we saw in 2020.

Young people need to pick up the slack. About 21% of registered voters are 65 or older, but with a whopping 71% of those voters turning in a ballot, they make up 30% of the returned ballots. As for voters under 35, they account for 28% of all registered voters, but make up only about 19% of the returned ballots. Young people: You tend to vote better than old people. Sorry, not sorry. Please get to the ballot box!

First step, you need to register. You can check here to see if you already are. 

If you’re not registered, it is unfortunately too late to register to vote by mail. However, you can still register and vote at one of seven voting centers in the county, which are all open today until 6pm and then 8:30am to 8pm on election day. Remember to bring your Washington State driver's license, and a state ID, or memorize the last four digits of your social security number when you go. 

If you’re already registered to vote, awesome. The ballot should be in your mailbox unless you took it out and put it somewhere weird. I can’t help you find it in your own home. Well, maybe if you send me a nice email I would. 

But if you really can’t find it, you can print out a new one, or go vote in person at a King County voting center.

Once you have your ballot in hand, you can check out our endorsements to figure out who you should vote for if you’re even a centimeter left of center. If you’re in a hurry — I know some of you are reading this at 7:30pm — you can read this cheat sheet. 

Then, put the ballot in the envelope, give it a lil lick, seal it, sign it, and then I recommend going to a drop box rather than banking on the USPS post marking it in time. You can find your nearest drop box here. 

Login here to track your ballot and make sure it gets counted. If election counters “challenge” your signature, you can correct it here. 

Last, I’d suggest buying yourself a lil drink. You’re gonna need it. 

 

22:35

“I can’t go for that” [Seth's Blog]

Culture has stability. “The way things are around here.”

When we are pushed too far from our norms, life gets stressful.

Some of the people in the systems that used to keep things stable have discovered that they can make a profit or gain an edge by embracing extremism instead.

You might not have thought you’d be spending seven hours a day reading the internet, or most of your free time posting and responding, but that’s what the social media companies have pushed us to do.

And you might not embrace some of the extreme views that we’re exposed to every single day, but the pressure can feel relentless. It feels like we come out just a bit ahead if we go along with the latest angry meme.

It’s worth checking in with ourselves and the people we care about. What are we signing on to and supporting? How are we choosing to spend our precious time? Is it riskier than we’re comfortable with? And mostly, what sort of new world are we endorsing?

It might make sense to choose stability when we can.

21:21

I Scream [Penny Arcade]

For some reason, both of our youngest wanted to watch Scream on Halloween separately. Even from the jump, it might not scare them, but there is a… cruelty in some of these older horror movies that must have been surprising even if it's not jump-scare scary. Scream in particular is a weird movie; not in a bad way, but it's doing some genre examination while it executes a strong premise. I'm sort of a horror fan, if the last couple sentences didn't give it away. Gabriel is, well, not.

19:49

On the limits of time travel in the face of undefined behavior in C [The Old New Thing]

Some time ago, I noted that undefined behavior can result in time travel. Specifically, that once undefined behavior occurs, the undefined behavior extends to the entire program, even the parts that executed before the undefined behavior occurred.

The citation I made was from the C++ standard, which grants blanket time travel permission. The C standard does impose some limits on how far back in time undefined behavior can extend. Specifically, undefined behavior cannot alter observable behavior that has already occurred. The definition of observable behavior appears in section 5.1.2.4.

The least requirements on a conforming implementation are:

  • Volatile accesses to objects are evaluated strictly according to the rules of the abstract machine.
  • At program termination, all data written into files shall be identical to the result that execution of the program according to the abstract semantics would have produced.
  • The input and output dynamics of interactive devices shall take place as specified in 7.23.3. The intent of these requirements is that unbuffered or line-buffered output appear as soon as possible, to ensure that prompting messages appear prior to a program waiting for input.

We can ignore the “At program termination” clause because it says that the behavior must match the abstract semantics, but to reach program termination, the program has already proceeded past undefined behavior, and undefined behavior specifies no abstract semantics, so anything is possible, and that clause imposes no constraints.

That leaves the other two.

Volatile accesses prior to the undefined behavior remain valid, so you cannot time travel-away a volatile access.

And interactive device activity is also not subject to time travel. So anything you printed to the console or read from the console cannot be recalled. This is already true in a metaphysical sense: The output was already printed to the screen. You can’t go back and un-print it. (Mind you, the undefined behavior is permitted to erase the previous output from the screen.)

But everything else is still in play. You can time-travel away normal (non-volatile) memory accesses and non-interactive file access.

The post On the limits of time travel in the face of undefined behavior in C appeared first on The Old New Thing.

Ravi Dwivedi: Asante Kenya for a Good Time [Planet Debian]

In September of this year, I visited Kenya to attend the State of the Map conference. I spent six nights in Nairobi, two nights in Mombasa, and one night on a train. I was very happy with the visa process being smooth and quick. Furthermore, I stayed at the Nairobi Transit Hotel with other attendees, with Ibtehal from Bangladesh as my roommate. One of the memorable moments was the time I spent at a local coffee shop nearby. We used to go there at midnight, despite the grating in the shops suggesting such adventures were unsafe. Fortunately, nothing bad happened, and we were rewarded with a fun time with the locals.

The coffee shop Ibtehal and me used to visit during the midnight

Grating at a chemist shop in Mombasa, Kenya

The country lies on the equator, which might give the impression of extremely hot temperatures. However, Nairobi was on the cooler side (10–25 degrees Celsius), and I found myself needing a hoodie, which I bought the next day. It also served as a nice souvenir, as it had an outline of the African map printed on it.

I bought a Safaricom SIM card for 100 shillings and recharged it with 1000 shillings for 8 GB internet with 5G speeds and 400 minutes talk time.

A visit to Nairobi’s Historic Cricket Ground

On this trip, I got a unique souvenir that can’t be purchased from the market—a cricket jersey worn in an ODI match by a player. The story goes as follows: I was roaming around the market with my friend Benson from Nairobi to buy a Kenyan cricket jersey for myself, but we couldn’t find any. So, Benson had the idea of visiting the Nairobi Gymkhana Club, which used to be Kenya’s main cricket ground. It has hosted some historic matches, including the 2003 World Cup match in which Kenya beat the mighty Sri Lankans and the record for the fastest ODI century by Shahid Afridi in just 37 balls in 1996.

Although entry to the club was exclusively for members, I was warmly welcomed by the staff. Upon reaching the cricket ground, I met some Indian players who played in Kenyan leagues, as well as Lucas Oluoch and Dominic Wesonga, who have represented Kenya in ODIs. When I expressed interest in getting a jersey, Dominic agreed to send me pictures of his jersey. I liked his jersey and collected it from him. I gave him 2000 shillings, an amount suggested by those Indian players.

Me with players at the Nairobi Gymkhana Club

Cricket pitch at the Nairobi Gymkhana Club

A view of the cricket ground inside the Nairobi Gymkhana Club

Scoreboard at the Nairobi Gymkhana cricket ground

Giraffe Center in Nairobi

Kenya is known for its safaris and has no shortage of national parks. In fact, Nairobi is the only capital in the world with a national park. I decided not to visit a national park, as most of them were expensive and offered multi-day tours, and I didn’t want to spend that much time in the wildlife.

Instead, I went to the Giraffe Center in Nairobi with Pragya and Rabina. The ticket cost 1500 Kenyan shillings (1000 Indian rupees). In Kenya, matatus - shared vans, usually decorated with portraits of famous people and play rap songs - are the most popular means of public transport. Reaching the Giraffe Center from our hotel required taking five matatus, which cost a total of 150 shillings, and a 2 km walk. The journey back was 90 shillings, suggesting that we didn’t find the most efficient route to get there. At the Giraffe Center, we fed giraffes and took photos.

A matatu with a Notorious BIG portrait.

Inside the Giraffe Center

Train ride from Nairobi to Mombasa

I took a train from Nairobi to Mombasa. The train is known as the “SGR Train,” where “SGR” refers to “Standard Gauge Railway.” The journey was around 500 km. M-Pesa was the only way to make payment for pre-booking the train ticket, and I didn’t have an M-Pesa account. Pragya’s friend Mary helped facilitate the payment. I booked a second-class ticket, which cost 1500 shillings (1000 Indian rupees).

The train was scheduled to depart from Nairobi at 08:00 hours in the morning and arrive in Mombasa at 14:00 hours. The security check at the station required scanning our bags and having them sniffed by sniffer dogs. I also fell victim to a scam by a security official who offered to help me get my ticket printed, only to later ask me to get him some coffee, which I politely declined.

Before boarding the train, I was treated to some stunning views at the Nairobi Terminus station. It was a seating train, but I wished it were a sleeper train, as I was sleep-deprived. The train was neat and clean, with good toilets. The train reached Mombasa on time at around 14:00 hours.

SGR train at Nairobi Terminus.

Interior of the SGR train

Arrival in Mombasa

Mombasa Terminus station.

Mombasa was a bit hotter than Nairobi, with temperatures reaching around 30 degrees Celsius. However, that’s not too hot for me, as I am used to higher temperatures in India. I had booked a hostel in the Old Town and was searching for a hitchhike from the Mombasa Terminus station. After trying for more than half an hour, I took a matatu that dropped me 3 km from my hostel for 200 shillings (140 Indian rupees). I tried to hitchhike again but couldn’t find a ride.

I think I know why I couldn’t get a ride in both the cases. In the first case, the Mombasa Terminus was in an isolated place, so most of the vehicles were taxis or matatus while any noncommercial cars were there to pick up friends and family. If the station were in the middle of the city, there would be many more car/truck drivers passing by, thus increasing my possibilities of getting a ride. In the second case, my hostel was at the end of the city, and nobody was going towards that side. In fact, many drivers told me they would love to give me a ride, but they were going in some other direction.

Finally, I took a tuktuk for 70 shillings to reach my hostel, Tulia Backpackers. It was 11 USD (1400 shillings) for one night. The balcony gave a nice view of the Indian Ocean. The rooms had fans, but there was no air conditioning. Each bed also had mosquito nets. The place was walking distance of the famous Fort Jesus. Mombasa has had more Islamic influence compared to Nairobi and also has many Hindu temples.

The balcony at Tulia Backpackers Hostel had a nice view of the ocean.

A room inside the hostel with fans and mosquito nets on the beds

Visiting White Sandy Beaches and Getting a Hitchhike

Visiting Nyali beach marked my first time ever at a white sand beach. It was like 10 km from the hostel. The next day, I visited Diani Beach, which was 30 km from the hostel. Going to Diani Beach required crossing a river, for which there’s a free ferry service every few minutes, followed by taking a matatu to Ukunda and then a tuk-tuk to Diani Beach. This gave me an opportunity to see the beautiful countryside during the ride.

Nyali beach is a white sand beach

This is the ferry service for crossing the river.

During my return from Diani Beach to the hostel, I was successful in hitchhiking. However, it was only a 4 km ride and not sufficient to reach Ukunda, so I tried to get another ride. When a truck stopped for me, I asked for a ride to Ukunda. Later, I learned that they were going in the same direction as me, so I got off within walking distance from my hostel. The ride was around 30 km. I also learned the difference between a truck ride and a matatu or car ride. For instance, matatus and cars are much faster and cooler due to air conditioning, while trucks tend to be warmer because they lack it. Further, the truck was stopped at many checkpoints by the police for inspections as it carried goods, which is not the case with matatus. Anyways, it was a nice experience, and I am grateful for the ride. I had a nice conversation with the truck drivers about Indian movies and my experiences in Kenya.

Diani beach is a popular beach in Kenya. It is a white sand beach.

Selfie with truck drivers who gave me the free ride

Back to Nairobi

I took the SGR train from Mombasa back to Nairobi. This time I took the night train, which departs at 22:00 hours, reaching Nairobi at around 04:00 in the morning. I could not sleep comfortably since the train only had seater seats.

I had booked the Zarita Hotel in Nairobi and had already confirmed if they allowed early morning check-in. Usually, hotels have a fixed checkout time, say 11:00 in the morning, and you are not allowed to stay beyond that regardless of the time you checked in. But this hotel checked me in for 24 hours. Here, I paid in US dollars, and the cost was 12 USD.

Almost Got Stuck in Kenya

Two days before my scheduled flight from Nairobi back to India, I heard the news that the airports in Kenya were closed due to the strikes. Rabina and Pragya had their flight back to Nepal canceled that day, which left them stuck in Nairobi for two additional days. I called Sahil in India and found out during the conversation that the strike was called off in the evening. It was a big relief for me, and I was fortunate to be able to fly back to India without any changes to my plans.

Newspapers at a stand in Kenya covering news on the airport closure

Experience with locals

I had no problems communicating with Kenyans, as everyone I met knew English to an extent that could easily surpass that of big cities in India. Additionally, I learned a few words from Kenya’s most popular local language, Swahili, such as “Asante,” meaning “thank you,” “Jambo” for “hello,” and “Karibu” for “welcome.” Knowing a few words in the local language went a long way.

I am not sure what’s up with haggling in Kenya. It wasn’t easy to bring the price of souvenirs down. I bought a fridge magnet for 200 shillings, which was the quoted price. On the other hand, it was much easier to bargain with taxis/tuktuks/motorbikes.

I stayed at three hotels/hostels in Kenya. None of them had air conditioners. Two of the places were in Nairobi, and they didn’t even have fans in the rooms, while the one in Mombasa had only fans. All of them had good Wi-Fi, except Tulia where the internet overall was a bit shaky.

My experience with the hotel staff was great. For instance, we requested that the Nairobi Transit Hotel cancel the included breakfast in order to reduce the room costs, but later realized that it was not a good idea. The hotel allowed us to revert and even offered one of our missing breakfasts during dinner.

The staff at Tulia Backpackers in Mombasa facilitated the ticket payment for my train from Mombasa to Nairobi. One of the staff members also gave me a lift to the place where I could catch a matatu to Nyali Beach. They even added an extra tea bag to my tea when I requested it to be stronger.

Food

At the Nairobi Transit Hotel, a Spanish omelet with tea was served for breakfast. I noticed that Spanish omelette appeared on the menus of many restaurants, suggesting that it is popular in Kenya. This was my first time having this dish. The milk tea in Kenya, referred to by locals as “white tea,” is lighter than Indian tea (they don’t put a lot of tea leaves).

Spanish Omelette served in breakfast at Nairobi Transit Hotel

I also sampled ugali with eggs. In Mombasa, I visited an Indian restaurant called New Chetna and had a buffet thali there twice.

Ugali with eggs.

Tips for Exchanging Money

In Kenya, I exchanged my money at forex shops a couple of times. I received good exchange rates for bills larger than 50 USD. For instance, 1 USD on xe.com was 129 shillings, and I got 128.3 shillings per USD (a total of 12,830 shillings) for two 50 USD notes at an exchange in Nairobi, compared to 127 shillings, which was the highest rate at the banks. On the other hand, for each 1 USD note, I would have received an exchange rate of 125 shillings. A passport was the only document required for the exchange, and they also provided a receipt.

A good piece of advice for travelers is to keep 50 USD or larger bills for exchanging into the local currency while saving the smaller US dollar bills for accommodation, as many hotels and hostels accept payment in US dollars.

Missed Malindi and Lamu

There were more places on my to-visit list in Kenya. But I simply didn’t have time to cover them, as I don’t like rushing through places, especially in a foreign country where there is a chance of me underestimating the amount of time it takes during transit. I would have liked to visit at least one of Kilifi, Watamu or Malindi beaches. Further, Lamu seemed like a unique place to visit as it has no cars or motorized transport; the only options for transport are boats and donkeys.

Former The Onion Writer Takes On La La Land in Micro Budget [The Stranger]

The 2024 Bainbridge Island Film Festival runs from November 7-10. by Charles Mudede

If catastrophe strikes on Tuesday, and all you can see is four years of gloom and more gloom, then it might be the right time to take a ferry to Bainbridge for two reasons. One, the November-colored waters of Elliott Bay will match and maybe even soothe your mood. (One thing you can always depend on is the love misery has for company.) Two, there is a festival, Bainbridge Film Festival, which features a superb distraction, the comedy Micro Budget.  Directed by Morgan Evans, who has worked for The Onion, the film cannot be praised for originality but for getting the most out of a concept that really should have no gas left in it: The mockumentary.

The plot: An Iowan, Terry (Patrick Noth), decides to relocate to LA to make a movie that can only be, when completed, unspeakably bad. His wife is very pregnant, he doesn't have enough money, and the sun has never shined on his imagination. He hires actors who have many rungs to climb before they come anywhere close to the D List, and the production moves from one absurdity to the next. 

During the filming process, the pregnant wife suffers, the actors suffer, and the members of the production team work without disguising their contempt. All, including the cousin shooting the documentary, are caught in the fantasy of a madman who should have kept his desires in the lowest drawer of his office desk.

We have been there and seen all of that. And yet, Micro Budget, is actually funny and, once in a while, reaches a region that can be called brilliant (particularly in the moments when the director attempts to meet what he imagines to be the woke standards of Hollywood). The film also has a priceless cameo. One you will never expect in a million years.

It's worth watching even if a catastrophe is averted on November 6.

The 2024 Bainbridge Island Film Festival runs from November 7-10.

Corporate Donors Have Abandoned Council Member Tanya Woo [The Stranger]

Progressive newcomer Alexis Mercedes Rinck absolutely bodied Council appointee Tanya Woo in the August primary, scoring a cool 50.2% to Woo’s 38.4%. Rinck has every reason to measure drapes for the new office in City Hall she will probably move into, and it looks like the deep-pocketed outside spenders who got Woo’s buddies elected last year are counting her out too. Proportionally, Woo’s Independent Expenditure (IE) has spent 90% less this year than a similar IE did in her initial council bid. by Hannah Krieg

Progressive newcomer Alexis Mercedes Rinck absolutely bodied Council appointee Tanya Woo in the August primary, scoring a cool 50.2% to Woo’s 38.4%. Rinck has every reason to measure drapes for the new office in City Hall she will probably move into, and it looks like the deep-pocketed outside spenders who got Woo’s buddies elected last year are counting her out too. Proportionally, Woo’s Independent Expenditure (IE) has spent 90% less this year than a similar IE did in her initial council bid. 

Woo’s campaign has raised $453,000 from 7895 donors, averaging approximately $57 per contributor, according to the Seattle Ethics and Elections Commission. Her contributors include the real estate industry, CEOs, lawyers, retirees, and some of the conservative council colleagues who appointed her such as Council Members Bob Kettle and Maritza Rivera.

But typically, big IEs spend an ungodly amount of money in the last few weeks of a race on mailers, TV ads, and other strategies to get their preferred candidate's name and face in front of voters before the election. Last year, IEs backed by business or labor or both spent $1.6 million across the seven City Council elections. The candidate with the most outside spending through IEs won in every race besides Woo's failed bid for District Two. Between her campaign and IEs, she outspent her opponent, incumbent Tammy Morales, two to one. 

But IEs don’t seem as interested in burying progressive competition with their cash this time around. 

Many of the same donors who backed Woo in 2023, funded the victorious conservative slate that appointed her, and the previous three mayors. They collectively contributed more than $130,000 to Woo through the Friends of Seattle. This includes the Commercial Real Estate Development Association, Seattle Hospitality for Progress PAC, R.C. Hedreen Company, Goodman Real Estate, and HomeStreet Bank. 

But they don’t seem to be trying as hard this go round. 

A 2023 IE, Friends of SE Seattle, spent $168,000 on her bid for the District 2 seat where she had to win over a majority of the 67,000 registered voters. That’s an investment of $2.50 a voter. Now, in 2024, for her citywide campaign, she’s trying to capture the majority of 485,000 voters. A $130,000 investment from the current IE shakes out to about a quarter spent per voter. That means IEs, who successfully bought every seat besides Woo’s last cycle, have spent 90% less on Woo than they did in her last election where she lost despite spending twice as much as her opponent.

This marks a shift in behavior from corporate donors when compared to the last time Seattle voted on citywide council seats in 2021. An IE called Change Seattle pooled $414,000 for Council President Sara Nelson’s bid for a citywide seat or about three times as much as they are spending on Woo. 

What does any of this mean? Well, it could mean those conservative donors are stretched thin funding the awful, Republican-backed Let’s Go Washington Initiatives, the Republican candidate for governor, or maybe even President Donald Trump’s third shot at the White House. Or, it could mean these corporate donors are saving up to support their darlings, Nelson, City Attorney Ann Davison, and Mayor Bruce Harrell, when they go up for re-election next year. 

Either way, progressives aren’t really beating conservatives at the fundraising game. Rinck's campaign has raised $460,790 from 8,637 contributors, averaging slightly more than $53 per contributor Her contributors include unions, labor organizers, every progressive politico you can think of, and politicians including King County Executive Dow Constantine, Woo’s old foe Morales, and many state lawmakers representing Seattle.

Rinck also found support in a new IE, Progressive People Power (P3), that spent more than $190,000 this cycle. P3’s donors include SEIU 775, which made up more than half of the pot, some other unions, several failed left-lane candidates, and King County Democrats Chair Carrie Barnes who gave more than $42,000 herself. Didn’t know you had it like that, Barnes!

But as P3 Board Chair Ry Armstrong said at a fundraiser last month, progressives don’t need as much money to win — their ideas are just better. A recent poll by the Northwest Progressive Institute found only 28% of respondents voted or will vote for Woo, while 52% voted or will vote for Rinck.

Worried about Tuesday? Here's something to look forward to via @nwprogressive! pic.twitter.com/LQrEh7GSfV

— Hannah Krieg (@hannahkrieg) November 3, 2024

 

19:00

The Top 40 Events in Seattle This Week: Nov 4–10, 2024 [The Stranger]

Sabrina Carpenter, Freakout Festival, and More by EverOut Staff

There's plenty of first-rate events to check out this week, from Sabrina Carpenter's Short N’ Sweet Tour to Freakout Festival and from Wicked to An Evening with David Sedaris, but first, make sure to VOTE! And for a look at the month ahead, check out our November events guide.

MONDAY READINGS & TALKS

Author Talk and Demo: Bebe Black Carminito, The Curated Board
Truly, is there any occasion where a big spread of snacks isn't welcome? Author Bebe Black Carminito aims to take your entertaining game to the next level with her new book The Curated Board: Inspired Platters for Any Occasion, which shows you how to prepare show-stopping boards and platters with over 50 recipes, including pickled champagne jalapeños, marinated citrus and herb olives, and dill and artichoke dip, as well as drink pairing suggestions. Join her for a board demo, Q&A session, and book signing. JULIANNE BELL
(Book Larder, Fremont)

What This Election Means for LGBTQ Issues [The Stranger]

The right has been spreading outrageous lies, claiming that kids are going to school as one gender and coming home as another after "impromptu surgeries." The writer points out how absurd this idea is: surgeries, especially gender-affirming ones, aren’t done in schools, don’t happen on a whim, and certainly aren’t performed on minors without extensive parental involvement. It’s a scare tactic with no basis in reality. by Vivian McCall

Lately, Donald Trump has been spreading a ridiculous lie that kids are going to school one gender and arriving home another.

I wanted to explain how a person doesn’t have to know anything about transgender people, schools, or medicine to know this isn’t true. A little boy isn’t going to come skipping home from school a little girl after an impromptu genital gender-affirmation surgery because gender-affirmation surgeries are not impromptu, are rarely performed on minors, and are never performed on minors without parental consent. They’re not performed in schools at all because schools don’t have operating rooms. Even if there was enough time in a school day to rush a kid to the hospital, this is not a check-up. Nobody waltzes out of the hospital after a major surgery. Think for one second and it makes no fucking sense.

Then I heard Trump say that the Democrats want gender surgeries for “almost everyone in the world” because they’re evil. Suddenly, it felt kind of futile and stupid to write a sarcastic, reasonable explanation of the facts because the floor for what Trump is willing to say about transgender people is a chasm. 

By his telling, the people cheer him on when he mentions “transgender” at his rallies, and he’ll do anything for the applause. This fervor is also why the hundreds of failed anti-trans bills—or polling that shows Americans by and large don’t really give a shit about trans issues and would rather talk about the economy—won’t dissuade Republicans from launching more anti-trans campaigns and introducing hundreds more bills restricting LGBTQ civil rights. During the World Series, viewers were subjected to anti-trans and anti-abortion ads so graphic that networks issued content warnings explaining that legally they have to air anything a qualified political candidate pays for.

We’re not having a rational conversation about trans issues in this country, we’re watching a panic attack about the threat trans people supposedly pose to the concept of gender and the nuclear family.

My better angels want me to tell conservatives about the trans people who want children with their spouses, or still love the ones they had before coming out. But if someone believes Big Gender is an evil enterprise, it’ll take someone they love coming out for them to recognize the groomer talk as the manipulative fiction it is. It will always be easier to hate some blue-haired apparition lurking in the shadows of your mind than your childhood buddy Jim when she tells you to call her Linda.

For obvious reasons, the possibility of a Trump victory is freaking out people in the queer community, even here in Washington, with our protective laws and Democrat-dominated Legislature. Because what Trump says and does are often different things, they’re unsure of the implications for their health care, their families, their marriages, and their futures. 

What We Can and Should Worry About at the Federal Level

In 2023, Penny Nance, CEO of the Christian nonprofit Concerned Women for America, asked Donald Trump to sign a pledge that if he won in 2024, he’d direct all federal agencies to uphold that a person’s “gender identity” doesn’t overrule their “sex.” Pledge or no pledge, nothing Trump did as president or has said during this campaign indicates he wouldn’t.

While in power, Trump appointed a slate of anti-LGBTQ judges. He banned transgender people from serving in the military and weakened their already tenuous access to gender-affirming care. How much farther he could go is another question. The man’s mind is an enigma. No matter who wins, the courts will remain a chaotic x-factor for us all.

By the time Trump took office in 2017, federal courts had recognized existing civil rights laws banning sex-discrimination protected gay and trans people, reasoning that anti-LGBTQ discrimination was, at its core, a reaction to people deviating from the norms of their sex. But the words “sexual orientation” or “gender identity” are not in the Civil Rights Act of 1964, or Title IX, a 1972 law prohibiting sex discrimination in education, or Section 1557 of the Affordable Care Act (the ACA, also known as Obamacare) outlining groups protected from discrimination.

Those rights exist, but they’re not codified. Their existence depends on a broader legal interpretation of what sex discrimination even means. 

Trump’s administration rejected that interpretation. It rolled back Obama-era non-discrimination protections for LGBTQ people and plotted to erase the word “sex” from federal civil rights laws. In 2019, the House passed the Equality Act, a bill that would add “sexual orientation” and “ “gender identity” to the Civil Rights Act, on a bi-partisan vote, but the Senate didn’t take up the bill after Trump said he wouldn’t sign it. The bill passed the House again with only three Republican supporters, but did not survive a Senate filibuster. 

Then at the end of Trump’s presidency, the conservative US Supreme Court delivered a stunning 6-3 ruling in Bostock v. Clayton County that found Title VII of the Civil Rights Act protected gay and trans people from employment discrimination. As Trump’s handpicked appointee Justice Neil Gorsuch wrote in the majority opinion, “it is impossible to discriminate against a person for being homosexual or transgender without discriminating against that individual based on sex.” Trump, whose White House filed two briefs urging the court to rule the other way, admitted to reporters it was a “very powerful decision, actually.” Not that its “power” changed his thinking. 

Yipee! All solved, right? Gay people have rights forever? Gorsuch is competing in International Mr. Leather next year and drinking with us at the Stonewall Inn? Right? 

Not quite. 

Bostock laid an important legal precedent and textualist argument that’s been cited in hundreds of sex-discrimination cases around the country.  The ruling prompted President Joe Biden to issue an executive order on his first day in office that directed all federal agencies to consider policies banning sex discrimination to apply to gay and trans people. It remains at the core of its interpretations of Title IX, the Violence Against Women Act, the ACA and the federal Fair Housing Act.

But Bostock did not end the fight, and its narrow scope leaves some rights potentially vulnerable should Trump take control. Say he’s elected and makes good on his pledge to Nance. The Supreme Court was clear on workplace protections, but Trump’s lackeys could say their ruling doesn’t apply to housing, healthcare, access to public accommodations, and education.

Mirroring Biden’s executive order to federal agencies, Trump said he’d reverse Title IX protections for trans students on day one of his presidency. He’s also vowed to ban gender-affirming care for minors, which he’s called child mutilation, and cut federal funding for schools that push “gender ideology.” His running mate, Ohio Sen. JD Vance, introduced five anti-trans bills between 2023 and 2024, which included criminalizing healthcare for trans kids. Saving his most deranged takes for the race’s photo finish, Vance appeared on Joe Rogan’s podcast and suggested middle- and upper-class white kids become trans to get into good schools, so they can, I guess, piss their pants in the lecture hall if a state revokes their bathroom access. As CNN pointed out, trans kids are actually a lot less likely to get into good schools because all the bullying, harassment, and dark thoughts tend to bring down the ol’ grade point average.

Harris, Harris, Harris, Harris, Harris. In the 2019 primary, she said she supported gender-affirming surgeries for trans migrants in custody. She’s not special for that–federal law requires the government to provide necessary medical care to inmates, and documents show Trump’s Federal Bureau of Prisons acknowledged that law–but people have made a lot of her apparent lack of support this cycle. When asked about transgender rights, Harris’s canned answer is that she’ll “follow the law.” Without a crystal ball or Ouija board handy, I’d hazard to guess she’d likely follow in Biden’s footsteps and his “follow the law” line is a dodge —perhaps part of her plan to nab all the Republican-leaning voters who can’t stand Trump but may not get trans issues. After all, trans issues have been a fruitful wedge issue precisely because people don’t understand them – and people fear what they don’t understand.

That said, laws are not virtues, and trans people are pissed about her lack of commitment. They’re scared because they’ve been pilloried in this election, and following the law in certain states means they don’t have civil rights. Plenty have fled those laws. Her running mate, Minnesota Gov. Tim Walz has one of the best records on gay and trans rights of any Democratic governor, from his time as a football coach sponsoring a Gay-Straight Alliance in a small town to signing an executive order to make Minnesota a “trans refugee state.” I don’t trust politicians as a rule, but Walz has been an ally much longer than it’s been cool or even acceptable.

Now for the part that made me go uh-oh out loud.

No matter who wins, these anti-discrimination protections are up against federal courts stacked with conservative appointees, and conservative think tanks have the money, the time, and the zealous devotion to launch sophisticated attacks to invalidate LGBTQ rights and restrict the legal definition of sex in perpetuity.

Jaelynn Scott, Executive Director of the Lavender Rights Project, a Seattle-based LGBTQ legal advocacy organization, is convinced the broad interpretation of Title VII will face continual legal challenges until lawmakers amend the Civil Rights Act to include “gender identity” or pass the Equality Act.

Federal judges have already blocked Biden’s Bostock-backed interpretations of Title XI and the ACA’s non-discrimination protections. The same Supreme Court justices who ruled in favor of Bostock also blocked the administration's Title IX rules. The court’s recent decision on Chevron Deference compounds the problem. It not only weakened the power of federal agencies to enact new rules that comply with often vague laws from Congress, but it also made challenging federal regulations much easier and shows we can’t count on the Justices to adhere to binding legal precedent, which sucks because this all may come down to if or when the Supreme Court sets limits on Bostock. 

We know it will soon decide if laws restricting gender-affirming care violate the US Constitution’s Equal Protection Clause. On December 4, the Court will hear US v. Skrmetti, a challenge to Tennessee’s ban on puberty blockers and hormone therapy for minors.

The case is important because it could determine what level of protection trans people have under the Equal Protection Clause. Elana Redfield, Federal Policy Director at the Williams Institute, a LGBTQ public-policy research center at the University of California, Los Angeles, says the issue at the heart of this case is whether it is unlawful for the state to ban these treatments in the way that it did. 

Recent cases show the state might be able to legally prove no sex discrimination took place. The first is Dobbs, the case that struck down abortion. In the Dobbs decision, the court cited an old case called Geduldig v. Aiello, which found a state could legally deny insurance coverage for medical complications during pregnancy, even though it would have almost entirely burdened cis women, to say states could prohibit abortion. The Eleventh Circuit Court of Appeals applied Geduldig to Adams, a case that upheld a state’s right to enact trans bathroom bans. In Skrmetti, The Sixth Court of Appeals again applied the same exact legal reasoning to gender-affirming care. It ruled the Bostock decision applied only to workplace discrimination and lawmakers had the right to regulate medical procedures as long as they did so without discriminatory intent. 

“I know, it's pretty in the weeds, but it is also important,” Redfield said in an email. “In part because it provides a pathway for courts to avoid finding sex discrimination, and in part because they are citing back to cases decided before “intermediate scrutiny” for sex discrimination was even established.”

It’s not all bad news. This April, the Fourth Circuit Court of Appeals affirmed lower court decisions that North Carolina’s and West Virginia's bans on gender-affirming care were unconstitutional. 

Trump’s focus on trans people has obscured his position on gay rights, which enjoy broader support from the American electorate than trans rights.

But would a party more aligned with the religious and extreme right than ever abandon the positions they’ve consolidated power over for decades, just like that? The supposedly “softer” Republican platform that claims the party will leave abortion to the states has not convinced millions of women across the country. Omitting a direct reference to same-sex marriage in that same platform, while still invoking its “sanctity,” shouldn’t convince gays, either. 

A second Trump administration would be filled with pre-vetted loyalists. The aides, staff, bureaucracy, and institutions that inhibited his most destructive impulses during his first turn have been foxed out of the henhouse. If Trump follows the plan outlined in Project 2025, he’ll reconstitute the administrative state as a faithful engine of Trumpism. If decisions from the Washington Post’s and Los Angeles Times’s billionaire owners are any indication, institutions may be folding in advance. Trump is promising to throw his political enemies in jail, for God’s sake. When have gay people ever emerged from a regime like that unscathed?

Um, What About Washington?

Even if everything goes to hell and Trump or the courts change how the government interprets sex-based anti-discrimination protections, Washington State will probably remain a good place to be gay and trans, legally speaking. Though there’s always uncertainty in the brackish waters between federal and state law, we're pretty Trump-proofed.

The Washington Law Against Discrimination (WLAD) broadly guards against anti-gay and anti-trans discrimination in housing, places of public accommodation, employment, credit transactions, healthcare, and other areas. 

Meaning you should be able to sign a new lease, take out a massive home loan, celebrate with fine dining and heavy drinking, stumbling and falling on your way out the door, breaking your arm, calling an ambulance, arriving at the hospital, and having a qualified medical professional examine you without anyone throwing your gay or trans ass into the street.

The WLAD also guarantees access to gender-affirming care and requires insurers to cover it, a protection the Gender Affirming Treatment Act (GATA) strengthened in 2022.

The state also allows those born here to change the gender marker on their birth certificate from M to F, F to M, or from either to X. In 2023, Governor Jay Inslee signed laws that sealed name changes for transgender people and protected trans runaways in the shelter system. He also signed a shield law that protects people who seek gender-affirming care and abortions in Washington from the authorities in states that have banned or criminalized their healthcare.

Even if the Supreme Court struck down Obergefell v. Hodges, gay marriage would remain legal in Washington, save the Supreme Court losing its mind and allowing for a federal prohibition on same-sex unions, another can of worms that would be litigated to hell along the lines of states rights. Gay couples would still be able to adopt, too. Lesbian couples could count on the law to protect access and insurance coverage for fertility treatments.

Adrien Leavitt, a staff attorney with the ACLU of Washington, says in many regards our state constitution is also more protective than the US constitution, that we have a strong State Supreme Court, and that our lawmakers have shown an ongoing commitment to upholding and strengthening protections for LGBTQ people.

Our Democratic lawmakers did let the right take one victory on LGBTQ issues this year, however, when it passed Let’s Go Washington’s legally ambiguous, but dog-whistle-y Parents Bill of Rights ballot initiative I-2081.

Concerned the law may allow parents to access their child’s counseling records, the ACLU of Washington, QLaw and Legal Voice filed suit. A King County Superior Court Judge later blocked that provision. But passing the law might have been a political calculation in Olympia. HadDemocrats let it go to voters, and it passed, the Legislature couldn’t amend it next session.

We still don’t have all the answers. Rebekah Gardea, QLaw’s director of community advocacy and outreach, raised I-2081 as an example in a pattern of attacks on LGBTQ rights across the country able to infiltrate even a progressive state like Washington. Even if advocacy groups can be fairly confident laws banning gender-affirming care would die in committee here in Washington, the right can always introduce an initiative if there’s the money and motivation to do so. In the event of a second Trump presidency, Gardea says her organization is concerned about how our shield law would hold against a federal investigation, or what potential data privacy gaps the state may have. It’s a question the Legislature may have to answer next session.

“There’s a lot of unknowns that we’re still looking into,” she said. “We’re trying to figure out how we strengthen those protections as soon as possible so there’s really no room for interpretation.”

Should the storm come, the best thing Washington could do is adopt the position that it will live up to its progressive values by vigorously defending them against outside actors, including a federal government that imposed restrictions on LGBTQ rights. Bob Ferguson, the Attorney General and Democratic frontrunner for the governor’s race, said in a statement he’d be ready on “day one” to combat a Trump presidency.

That’s all well and good for us, but sanctuary state thinking is a trap. Your civil rights are tenuous if they can disappear at the state line.  

These progressive state laws do not regulate hate and intimidation, and if the federal government goes screwball, there’s no telling how that would change the social dynamics in this country. They’ve already changed so much in a short period of time.

Eight years ago in 2016, lawmakers nationwide had only introduced 55 anti-trans bills nationwide. That same year, North Carolina's passage of a single anti-trans bathroom bill prompted the NCAA to ban college sports championships in the state, PayPal to cancel plans for a new office and Beatle Ringo Starr to cancel a massive concert. The Associated Press determined the state stood to lose $3.76 billion dollars over the bathroom policy, which is why lawmakers repealed it the next year. In the last two years, we’ve seen between 1,000 and 1,200 bills. Most fail, but plenty are passing. Where are those boycotts now? The only transgender-related social contagion in this country is ignorance. When it comes to hate, state borders are astoundingly porous.

I’m very confident Washington won’t pass a gender-affirming care ban in the next five years, or even the next 10 years. But 15? A lot can change. Fifteen years ago, Donald Trump was hosting Season 8 of The Celebrity Apprentice

The world changes and complacency is one way to speed up that change. There’s a snide attitude in blue states about red states, like the only reason regressive laws get passed is because all the people there are stupid and backward enough to let it happen. I hear variations of this contemptuous position in gay bars and on gay couches at parties all the time, and it totally ignores decades of disenfranchisement and manipulation that have tilted the balance of power in red states. 

So the next time you think something to the effect of, “at least I’m safe,” think about the woman going septic in the hospital parking lot, or the trans kid weighing suicide in their bedroom. If you’re not for them, you’re not for anything at all.

17:28

Slog AM: Election Day Is Tomorrow, Hope for Harris in Iowa, Washington GOP's Racist Campaign Texts [The Stranger]

The Stranger's morning news round-up. by Nathalie Graham

Welcome to hell week: Somehow, it's here. The 2024 election is tomorrow. If you haven't mailed yours in yet, do it today. Better yet, drop your ballot in a ballot box. Please do not drop any incendiary devices in ballot boxes. Tell your friends to vote. Tell your enemies to vote. Vote like your life depends on it. Vote like someone else's life depends on it. Then, take a nap or something. 

Scene setting: Wind and weather are turbulent today. Everything is astir. 

⚠️The next storm system will move into western WA Monday into Tuesday, bringing gusty winds, lowland rain, mountain snow, & high surf to the region. Details are highlighted below!

— NWS Seattle (@NWSSeattle) November 3, 2024

To make everything worse: The sun is dead. It isn't coming back until spring. Say goodbye to long days. Go to an antique store and buy a lamp. I went to the Antique Mall of West Seattle this weekend and bought myself one. It's saving me. We all deserve soft, buttery warm light this winter. 

Starting tonight, the sun will set in the 4 pm hour every night until Jan. 25.

Seattle area vampires, rejoice! 🧛

— Seattle Weather Blog (@KSeattleWeather) November 3, 2024

Iowaaaaat? Cross your fingers and hold your breath for this next part. The poll by respected pollster and possible soothsayer Ann Selzer commissioned by the Des Moines Register/Mediacom shows Vice President Kamala Harris leading Donald Trump 47% to 44% in Iowa. The state has voted staunchly red and resolutely for Trump. Back in June, Trump led President Joe Biden (before he decided he should lay down and take a nap instead of running for re-election) by 18 points. Even as recently as September, Trump led Harris in Iowa by 4 points. Apparently, the tables are turning and women are the ones doing the spinning. Particularly, older and independent women voters. Abortion is soooo on the ballot and Iowan women are not taking their futures lightly. If this poll is right, Harris wouldn't just win Iowa, she'd win it in a landslide. 

Trump says "actually, no:" Famous fact-lover Donald Trump says the Iowa poll is wrong and we are all mistaken. According to Trump, the truly accurate poll is the one from Emerson College that shows him up 53% to Harris' 43%. 

Someone who will not get to see if the Iowa poll is accurate: Music legend Quincy Jones died on Sunday. He was 91. 

Don't look a gift poll in the mouth: The knock-on-wood-worthy polling isn't just for national politics. In local news, a Northwest Progressive Institute poll found that in the Seattle City Council Position 8 race, Alexis Mercedes Rink leads incumbent Tanya Woo 52% to 28%. Remember how U2 slipped its album "Songs of Innocence" into everyone's iTunes libraries back in 2014? That's basically how it feels having the council-selected Woo, who knows nothing about anything, in a position of power. Seems as though Seattle is rejecting Woo the same way everyone rejected "Songs of Innocence"—moving her straight to the trash where we hopefully will never have to listen to her again. 

Not worried about the election? Must be nice. But, also maybe you should be. Gov. Jay Inslee clearly is. He signed a letter activating the National Guard in the event of civil unrest after the election.

Washington State Gov. Jay Inslee is activating the state's National Guard, directing personnel to make preparations in case they need to respond to “civil unrest” related to the election. pic.twitter.com/26JGFkv03a

— Mike Baker (@ByMikeBaker) November 2, 2024

Bad news for Peanut: Tragedy struck the squirrelly saga of Peanut, the social media sensation plucked from his owner's care last week by the New York Department of Environmental Conservation (DEC). Apparently, after removing Peanut, the DEC then euthanized him to "test for rabies." The squirrel who often donned tiny cowboy hats will only do so now from heaven. Rest easy, Peanut

Roaming police: City officials mysteriously placed Tacoma's police chief on a brief administrative leave back in September. Now, we know why. Chief Avery Moore was gabbing too much while on vacation. Moore racked up a $1,082 bill on his city-issued cellphone while he was in Sweden. Most of the charges appear to be international usage charges, but I like to imagine Moore couldn't stop gossiping on the phone while touring fjords. 

Work stoppage for NYT tech guild: The "over 600 software engineers, product managers, data analysts, and designers" keeping the New York Times website up and running went on strike at 12:01 this morning, in the latest attempt to win a union contract with the media company. The work stoppage comes at a pivotal time for the NYT; Election Day coverage on the ~newspaper of record~ requires a lot of tech. Maybe this squeeze will give these workers the contract they're asking for. In the meantime, don't cross the digital picket line. No Wordle. No Connections. Just solidarity. 

Have you seen this prayer wheel? Capitol Hill Himalayan restaurant Annapurna needs helping finding the handmade Tibetan prayer wheel that normally sits outside its front entrance. Someone nabbed the prayer wheel last week. Last time a business's prayer wheel went missing, someone found it in Lake Washington. 

WA GOP's sexist, racist, anti-LGBTQ text campaign: In Washington's 14th legislative district, the texts are getting out of hand. The Spanish texts spread lies about Latina Democratic candidates, saying they "support chemical castration of children at school," they want to "eliminate the Spanish language," and they "hate your family, they hate God, and they hate the truth." Washington GOP chair Jim Walsh confirmed the organization footed the bill for these texts. The Democrats are pissed and believe these texts are defamatory and broke campaign finance laws. They'll be taking legal action.  

The Washington State GOP is sending out these texts in an increasingly Latino state senate district (14), per a source who sent these along.

(I speak French, not Spanish, so these translations are not my own).

Demographic data on the district here, which is held by 3… pic.twitter.com/ZLy0TCf3As

— Jake Lahut (@JakeLahut) November 2, 2024

Volcanic eruptions in Indonesia: Mount Lewotobi Laki Laki erupted at around midnight Monday. The hot ash shot as high as 6,500 feet into the air and hit several villages, burning down several houses, including a convent of Catholic nuns. Ten people are dead so far. 

South Africa's Steve Irwin died: Dingo Dinkelman, 44, was a wildlife content creator and a conservationist. Dinkelman died from a venomous snake bite after spending a month in an induced coma. 

Something to take your mind off the election: Make this chili. 

 

16:42

TurtleWare: Dynamic Vars - Return of the Jedi [Planet Lisp]

Table of Contents

  1. The protocol
  2. Control operators
  3. Synchronized hash tables with weakness
  4. First-class dynamic variables
    1. STANDARD-DYNAMIC-VARIABLE
    2. SURROGATE-DYNAMIC-VARIABLE
  5. Thread-local variables
    1. The protocol
    2. The implementation
  6. Thread-local slots
  7. What can we use it for?

In the previous two posts I've presented an implementation of first-class dynamic variables using PROGV and a surrogate implementation for SBCL.

Now we will double down on this idea and make the protocol extensible. Finally we'll implement a specialized version of dynamic variables where even the top level value of the variable is thread-local.

The protocol

Previously we've defined operators as either macros or functions. Different implementations were protected by the feature flag and symbols collided. Now we will introduce the protocol composed of a common superclass and functions that are specialized by particular implementations.

Most notably we will introduce a new operator CALL-WITH-DYNAMIC-VARIABLE that is responsible for establishing a single binding. Thanks to that it will be possible to mix dynamic variables of different types within a single DLET statement.

(defclass dynamic-variable () ())

(defgeneric dynamic-variable-bindings (dvar))
(defgeneric dynamic-variable-value (dvar))
(defgeneric (setf dynamic-variable-value) (value dvar))
(defgeneric dynamic-variable-bound-p (dvar))
(defgeneric dynamic-variable-makunbound (dvar))
(defgeneric call-with-dynamic-variable (cont dvar &optional value))

Moreover we'll define a constructor that is specializable by a key. This design will allow us to refer to the dynamic variable class by using a shorter name. We will also define the standard class to be used and an matching constructor.

(defparameter *default-dynamic-variable-class*
  #-fake-progv-kludge 'standard-dynamic-variable
  #+fake-progv-kludge 'surrogate-dynamic-variable)

(defgeneric make-dynamic-variable-using-key (key &rest initargs)
  (:method (class &rest initargs)
    (apply #'make-instance class initargs))
  (:method ((class (eql t)) &rest initargs)
    (apply #'make-instance *default-dynamic-variable-class* initargs))
  (:method ((class null) &rest initargs)
    (declare (ignore class initargs))
    (error "Making a dynamic variable that is not, huh?")))

(defun make-dynamic-variable (&rest initargs)
  (apply #'make-dynamic-variable-using-key t initargs))

Control operators

Control operators are the same as previously, that is a set of four macros that consume the protocol specified above. Note that DYNAMIC-VARIABLE-PROGV expands to a recursive call where each binding is processed separately.

(defmacro dlet (bindings &body body)
  (flet ((pred (binding)
           (and (listp binding) (= 2 (length binding)))))
    (unless (every #'pred bindings)
      (error "DLET: bindings must be lists of two values.~%~
              Invalid bindings:~%~{ ~s~%~}" (remove-if #'pred bindings))))
  (loop for (var val) in bindings
        collect var into vars
        collect val into vals
        finally (return `(dynamic-variable-progv (list ,@vars) (list ,@vals)
                           ,@body))))

(defmacro dset (&rest pairs)
  `(setf ,@(loop for (var val) on pairs by #'cddr
                 collect `(dref ,var)
                 collect val)))

(defmacro dref (variable)
  `(dynamic-variable-value ,variable))

(defun call-with-dynamic-variable-progv (cont vars vals)
  (flet ((thunk ()
           (if vals
               (call-with-dynamic-variable cont (car vars) (car vals))
               (call-with-dynamic-variable cont (car vars)))))
    (if vars
        (call-with-dynamic-variable-progv #'thunk (cdr vars) (cdr vals))
        (funcall cont))))

(defmacro dynamic-variable-progv (vars vals &body body)
  (let ((cont (gensym)))
    `(flet ((,cont () ,@body))
       (call-with-dynamic-variable-progv (function ,cont) ,vars ,vals))))

Synchronized hash tables with weakness

Previously we've used SBCL-specific options to define a synchronized hash table with weak keys. This won't do anymore, because we will need a similar object to implement the thread-local storage for top level values.

trivial-garbage is a portability layer that allows to define hash tables with a specified weakness, but it does not provide an argument that would abstract away synchronization. We will ensure thread-safety with locks instead.

(defclass tls-table ()
  ((table :initform (trivial-garbage:make-weak-hash-table
                     :test #'eq :weakness :key))
   (lock :initform (bt:make-lock))))

(defun make-tls-table ()
  (make-instance 'tls-table))

(defmacro with-tls-table ((var self) &body body)
  (let ((obj (gensym)))
    `(let* ((,obj ,self)
            (,var (slot-value ,obj 'table)))
       (bt:with-lock-held ((slot-value ,obj 'lock)) ,@body))))

First-class dynamic variables

STANDARD-DYNAMIC-VARIABLE

Previously in the default implementation we've represented dynamic variables with a symbol. The new implementation is similar except that the symbol is read from a STANDARD-OBJECT that represents the variable. This also enables us to specialize the function CALL-WITH-DYNAMIC-VARIABLE:

(defclass standard-dynamic-variable (dynamic-variable)
  ((symbol :initform (gensym) :accessor dynamic-variable-bindings)))

(defmethod dynamic-variable-value ((dvar standard-dynamic-variable))
  (symbol-value (dynamic-variable-bindings dvar)))

(defmethod (setf dynamic-variable-value) (value (dvar standard-dynamic-variable))
  (setf (symbol-value (dynamic-variable-bindings dvar)) value))

(defmethod dynamic-variable-bound-p ((dvar standard-dynamic-variable))
  (boundp (dynamic-variable-bindings dvar)))

(defmethod dynamic-variable-makunbound ((dvar standard-dynamic-variable))
  (makunbound (dynamic-variable-bindings dvar)))

(defmethod call-with-dynamic-variable (cont (dvar standard-dynamic-variable)
                                       &optional (val nil val-p))
  (progv (list (dynamic-variable-bindings dvar)) (if val-p (list val) ())
    (funcall cont)))

SURROGATE-DYNAMIC-VARIABLE

The implementation of the SURROGATE-DYNAMIC-VARIABLE is almost the same as previously. The only difference is that we use the previously defined indirection to safely work with hash tables. Also note, that we are not add the feature condition - both classes is always created.

(defvar +fake-unbound+ 'unbound)
(defvar +cell-unbound+ '(no-binding))

(defclass surrogate-dynamic-variable (dynamic-variable)
  ((tls-table
    :initform (make-tls-table)
    :reader dynamic-variable-tls-table)
   (top-value
    :initform +fake-unbound+
    :accessor dynamic-variable-top-value)))

(defmethod dynamic-variable-bindings ((dvar surrogate-dynamic-variable))
  (let ((process (bt:current-thread)))
    (with-tls-table (tls-table (dynamic-variable-tls-table dvar))
      (gethash process tls-table +cell-unbound+))))

(defmethod (setf dynamic-variable-bindings) (value (dvar surrogate-dynamic-variable))
  (let ((process (bt:current-thread)))
    (with-tls-table (tls-table (dynamic-variable-tls-table dvar))
      (setf (gethash process tls-table) value))))

(defun %dynamic-variable-value (dvar)
  (let ((tls-binds (dynamic-variable-bindings dvar)))
    (if (eq tls-binds +cell-unbound+)
        (dynamic-variable-top-value dvar)
        (car tls-binds))))

(defmethod dynamic-variable-value ((dvar surrogate-dynamic-variable))
  (let ((tls-value (%dynamic-variable-value dvar)))
    (when (eq tls-value +fake-unbound+)
      (error 'unbound-variable :name "(unnamed)"))
    tls-value))

(defmethod (setf dynamic-variable-value) (value (dvar surrogate-dynamic-variable))
  (let ((tls-binds (dynamic-variable-bindings dvar)))
    (if (eq tls-binds +cell-unbound+)
        (setf (dynamic-variable-top-value dvar) value)
        (setf (car tls-binds) value))))

(defmethod dynamic-variable-bound-p ((dvar surrogate-dynamic-variable))
  (not (eq +fake-unbound+ (%dynamic-variable-value dvar))))

(defmethod dynamic-variable-makunbound ((dvar surrogate-dynamic-variable))
  (setf (dynamic-variable-value dvar) +fake-unbound+))


;;; Apparently CCL likes to drop^Helide some writes and that corrupts bindings
;;; table. Let's ensure that the value is volatile.
#+ccl (defvar *ccl-ensure-volatile* nil)
(defmethod call-with-dynamic-variable (cont (dvar surrogate-dynamic-variable)
                                       &optional (val +fake-unbound+))
  (push val (dynamic-variable-bindings dvar))
  (let (#+ccl (*ccl-ensure-volatile* (dynamic-variable-bindings dvar)))
    (unwind-protect (funcall cont)
      (pop (dynamic-variable-bindings dvar)))))

Thread-local variables

We've refactored the previous code to be extensible. Now we can use metaobjects from the previous post without change. We can also test both implementations in the same process interchangeably by customizing the default class parameter.

It is the time now to have some fun and extend dynamic variables into variables with top value not shared between different threads. This will enable ultimate thread safety. With our new protocol the implementation is trivial!

The protocol

First we will define the protocol class. THREAD-LOCAL-VARIABLE is a variant of a DYNAMIC-VARIABLE with thread-local top values.

We specify initialization arguments :INITVAL and :INITFUN that will be used to assign the top value of a binding. The difference is that INITVAL specifies a single value, while INITFUN can produce an unique object on each invocation. INITARG takes a precedence over INTIFUN, and if neither is supplied, then a variable is unbound.

We include the constructor that builds on MAKE-DYNAMIC-VARIABLE-USING-KEY, and macros corresponding to DEFVAR and DEFPARAMETER. Note that they expand to :INITFUN - this assures that the initialization form is re-evaluated for each new thread where the variable is used.

(defclass thread-local-variable (dynamic-variable) ())

(defmethod initialize-instance :after
    ((self thread-local-variable) &key initfun initval)
  (declare (ignore self initfun initval)))

(defparameter *default-thread-local-variable-class*
  #-fake-progv-kludge 'standard-thread-local-variable
  #+fake-progv-kludge 'surrogate-thread-local-variable)

(defun make-thread-local-variable (&rest initargs)
  (apply #'make-dynamic-variable-using-key
         *default-thread-local-variable-class* initargs))

(defmacro create-tls-variable (&optional (form nil fp) &rest initargs)
  `(make-thread-local-variable 
    ,@(when fp `(:initfun (lambda () ,form)))
    ,@initargs))

(defmacro define-tls-variable (name &rest initform-and-initargs)
  `(defvar ,name (create-tls-variable ,@initform-and-initargs)))

(defmacro define-tls-parameter (name &rest initform-and-initargs)
  `(defparameter ,name (create-tls-variable ,@initform-and-initargs)))

Perhaps it is a good time to introduce a new convention for tls variable names. I think that surrounding names with the minus sign is a nice idea, because it signifies, that it is something less than a global value. For example:

DYNAMIC-VARS> (define-tls-variable -context- 
                  (progn
                    (print "Initializing context!")
                    (list :context)))
-CONTEXT-
DYNAMIC-VARS> -context-
#<a EU.TURTLEWARE.DYNAMIC-VARS::STANDARD-THREAD-LOCAL-VARIABLE 0x7f7636c08640>
DYNAMIC-VARS> (dref -context-)

"Initializing context!" 
(:CONTEXT)
DYNAMIC-VARS> (dref -context-)
(:CONTEXT)
DYNAMIC-VARS> (dset -context- :the-new-value)

:THE-NEW-VALUE
DYNAMIC-VARS> (dref -context-)
:THE-NEW-VALUE
DYNAMIC-VARS> (bt:make-thread
               (lambda ()
                 (print "Let's read it!")
                 (print (dref -context-))))
#<process "Anonymous thread" 0x7f7637a26cc0>

"Let's read it!" 
"Initializing context!" 
(:CONTEXT) 
DYNAMIC-VARS> (dref -context-)
:THE-NEW-VALUE

The implementation

You might have noticed the inconspicuous operator DYNAMIC-VARIABLE-BINDINGS that is part of the protocol. It returns an opaque object that represents values of the dynamic variable in the current context:

  • for STANDARD-DYNAMIC-VARIABLE it is a symbol
  • for SURROGATE-DYNAMIC-VARIABLE it is a thread-local list of bindings

In any case all other operators first take this object and then use it to read, write or bind the value. The gist of the tls variables implementation is to always return an object that is local to the thread. To store these objects we will use the tls-table we've defined earlier.

(defclass thread-local-variable-mixin (dynamic-variable)
  ((tls-table
    :initform (make-tls-table)
    :reader dynamic-variable-tls-table)
   (tls-initfun
    :initarg :initfun
    :initform nil
    :accessor thread-local-variable-initfun)
   (tls-initval
    :initarg :initval
    :initform +fake-unbound+
    :accessor thread-local-variable-initval)))

For the class STANDARD-THREAD-LOCAL-VARIABLE we will simply return a different symbol depending on the thread:

(defclass standard-thread-local-variable (thread-local-variable-mixin
                                         thread-local-variable
                                         standard-dynamic-variable)
  ())

(defmethod dynamic-variable-bindings ((tvar standard-thread-local-variable))
  (flet ((make-new-tls-bindings ()
           (let ((symbol (gensym))
                 (initval (thread-local-variable-initval tvar))
                 (initfun (thread-local-variable-initfun tvar)))
             (cond
               ((not (eq +fake-unbound+ initval))
                (setf (symbol-value symbol) initval))
               ((not (null initfun))
                (setf (symbol-value symbol) (funcall initfun))))
             symbol)))
    (let ((key (bt:current-thread)))
      (with-tls-table (tls-table (dynamic-variable-tls-table tvar))
        (or (gethash key tls-table)
            (setf (gethash key tls-table)
                  (make-new-tls-bindings)))))))

And for the class SURROGATE-THREAD-LOCAL-VARIABLE the only difference from the SURROGATE-DYNAMIC-VARIABLE implementation is to cons a new list as the initial value (even when it is unbound) to ensure it is not EQ to +CELL-UNBOUND+.

(defclass surrogate-thread-local-variable (thread-local-variable-mixin
                                          thread-local-variable
                                          surrogate-dynamic-variable)
  ())

(defmethod dynamic-variable-bindings ((tvar surrogate-thread-local-variable))
  (flet ((make-new-tls-bindings ()
           (let ((initval (thread-local-variable-initval tvar))
                 (initfun (thread-local-variable-initfun tvar)))
             (cond
               ((not (eq +fake-unbound+ initval))
                (list initval))
               ((not (null initfun))
                (list (funcall initfun)))
               (t
                (list +fake-unbound+))))))
    (let ((key (bt:current-thread)))
      (with-tls-table (tls-table (dynamic-variable-tls-table tvar))
        (or (gethash key tls-table)
            (setf (gethash key tls-table)
                  (make-new-tls-bindings)))))))

That's all, now we have two implementations of thread-local variables. Ramifications are similar as with "ordinary" dynamic variables - the standard implementation is not advised for SBCL, because it will crash in LDB.

Thread-local slots

First we are going to allow to defined dynamic variable types with an abbreviated names. This will enable us to specify in the slot definition that type, for example (MY-SLOT :DYNAMIC :TLS :INITFORM 34)

;;; Examples how to add shorthand type names for the dynamic slots:

(defmethod make-dynamic-variable-using-key ((key (eql :tls)) &rest initargs)
  (apply #'make-dynamic-variable-using-key
         *default-thread-local-variable-class* initargs))

(defmethod make-dynamic-variable-using-key ((key (eql :normal-tls)) &rest initargs)
  (apply #'make-dynamic-variable-using-key
         'standard-thread-local-variable initargs))

(defmethod make-dynamic-variable-using-key ((key (eql :kludge-tls)) &rest initargs)
  (apply #'make-dynamic-variable-using-key
         'surrogate-thread-local-variable initargs))

;;; For *DEFAULT-DYNAMIC-VARIABLE* specify :DYNAMIC T.

(defmethod make-dynamic-variable-using-key ((key (eql :normal-dyn)) &rest initargs)
  (apply #'make-dynamic-variable-using-key
         'standard-dynamic-variable initargs))

(defmethod make-dynamic-variable-using-key ((key (eql :kludge-dyn)) &rest initargs)
  (apply #'make-dynamic-variable-using-key
         'surrogate-dynamic-variable initargs))

In order to do that, we need to remember he value of the argument :DYNAMIC. We will read it with DYNAMIC-VARIABLE-TYPE and that value will be available in both direct and the effective slot:

;;; Slot definitions
;;; There is a considerable boilerplate involving customizing slots.
;;;
;;; - direct slot definition: local to a single defclass form
;;;
;;; - effective slot definition: combination of all direct slots with the same
;;;   name in the class and its superclasses
;;;
(defclass dynamic-direct-slot (mop:standard-direct-slot-definition)
  ((dynamic :initform nil :initarg :dynamic :reader dynamic-variable-type)))

;;; The metaobject protocol did not specify an elegant way to communicate
;;; between the direct slot definition and the effective slot definition.
;;; Luckily we have dynamic bindings! :-)
(defvar *kludge/mop-deficiency/dynamic-variable-type* nil)

;;; DYNAMIC-EFFECTIVE-SLOT is implemented to return as slot-value values of the
;;; dynamic variable that is stored with the instance.
;;;
;;; It would be nice if we could specify :ALLOCATION :DYNAMIC for the slot, but
;;; then STANDARD-INSTANCE-ACCESS would go belly up. We could make a clever
;;; workaround, but who cares?
(defclass dynamic-effective-slot (mop:standard-effective-slot-definition)
  ((dynamic :initform *kludge/mop-deficiency/dynamic-variable-type*
            :reader dynamic-variable-type)))

Moreover we specialize the function MAKE-DYNAMIC-VARIABLE-USING-KEY to the effective slot class. The initargs in this method are meant for the instance. When the dynamic variable is created, we check whether it is a thread-local variable and initialize its INITVAL and INITFUN to values derived from INITARGS, MOP:SLOT-DEFINITION-INITARGS and MOP:SLOT-DEFINITION-INITFUN:

(defmethod make-dynamic-variable-using-key
    ((key dynamic-effective-slot) &rest initargs)
  (let* ((dvar-type (dynamic-variable-type key))
         (dvar (make-dynamic-variable-using-key dvar-type)))
    (when (typep dvar 'thread-local-variable)
      (loop with slot-initargs = (mop:slot-definition-initargs key)
            for (key val) on initargs by #'cddr
            when (member key slot-initargs) do
              (setf (thread-local-variable-initval dvar) val))
      (setf (thread-local-variable-initfun dvar)
            (mop:slot-definition-initfunction key)))
    dvar))

The rest of the implementation of DYNAMIC-EFFECTIVE-SLOT is unchanged:

(defmethod mop:slot-value-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dref (slot-dvar object slotd)))

(defmethod (setf mop:slot-value-using-class)
    (new-value
     (class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dset (slot-dvar object slotd) new-value))

(defmethod mop:slot-boundp-using-class
  ((class standard-class)
   object
   (slotd dynamic-effective-slot))
  (dynamic-variable-bound-p (slot-dvar object slotd)))

(defmethod mop:slot-makunbound-using-class
  ((class standard-class)
   object
   (slotd dynamic-effective-slot))
  (dynamic-variable-makunbound (slot-dvar object slotd)))

The implementation of CLASS-WITH-DYNAMIC-SLOTS is also very similar. The first difference in that ALLOCATE-INSTANCE calls MAKE-DYNAMIC-VARIABLE-USING-KEY instead of MAKE-DYNAMIC-VARIABLE and supplies the effective slot definition as the key, and the instance initargs as the remaining arguments. Note that at this point initargs are already validated by MAKE-INSTANCE. The second difference is that MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION binds the flag *KLUDGE/MOP-DEFICIENCY/DYNAMIC-VARIABLE-TYPE* to DYNAMIC-VARIABLE-TYPE.

;;; This is a metaclass that allows defining dynamic slots that are bound with
;;; the operator SLOT-DLET, and, depending on the type, may have thread-local
;;; top value.
;;;
;;; The metaclass CLASS-WITH-DYNAMIC-SLOTS specifies alternative effective slot
;;; definitions for slots with an initarg :dynamic.
(defclass class-with-dynamic-slots (standard-class) ())

;;; Class with dynamic slots may be subclasses of the standard class.
(defmethod mop:validate-superclass ((class class-with-dynamic-slots)
                                    (super standard-class))
  t)

;;; When allocating the instance we initialize all slots to a fresh symbol that
;;; represents the dynamic variable.
(defmethod allocate-instance ((class class-with-dynamic-slots) &rest initargs)
  (let ((object (call-next-method)))
    (loop for slotd in (mop:class-slots class)
          when (typep slotd 'dynamic-effective-slot) do
            (setf (mop:standard-instance-access
                   object
                   (mop:slot-definition-location slotd))
                  (apply #'make-dynamic-variable-using-key slotd initargs)))
    object))

;;; To improve potential composability of CLASS-WITH-DYNAMIC-SLOTS with other
;;; metaclasses we treat specially only slots that has :DYNAMIC in initargs,
;;; otherwise we call the next method.
(defmethod mop:direct-slot-definition-class
    ((class class-with-dynamic-slots) &rest initargs)
  (loop for (key) on initargs by #'cddr
        when (eq key :dynamic)
          do (return-from mop:direct-slot-definition-class
               (find-class 'dynamic-direct-slot)))
  (call-next-method))

(defmethod mop:compute-effective-slot-definition
    ((class class-with-dynamic-slots)
     name
     direct-slotds)
  (declare (ignore name))
  (let ((latest-slotd (first direct-slotds)))
    (if (typep latest-slotd 'dynamic-direct-slot)
        (let ((*kludge/mop-deficiency/dynamic-variable-type*
                (dynamic-variable-type latest-slotd)))
          (call-next-method))
        (call-next-method))))

(defmethod mop:effective-slot-definition-class
    ((class class-with-dynamic-slots) &rest initargs)
  (declare (ignore initargs))
  (if *kludge/mop-deficiency/dynamic-variable-type*
      (find-class 'dynamic-effective-slot)
      (call-next-method)))

Finally the implementation of SLOT-DLET does not change:

;;; Accessing and binding symbols behind the slot. We don't use SLOT-VALUE,
;;; because it will return the _value_ of the dynamic variable, and not the
;;; variable itself.
(defun slot-dvar (object slotd)
  (check-type slotd dynamic-effective-slot)
  (mop:standard-instance-access
   object (mop:slot-definition-location slotd)))

(defun slot-dvar* (object slot-name)
  (let* ((class (class-of object))
         (slotd (find slot-name (mop:class-slots class)
                      :key #'mop:slot-definition-name)))
    (slot-dvar object slotd)))

(defmacro slot-dlet (bindings &body body)
  `(dlet ,(loop for ((object slot-name) val) in bindings
                collect `((slot-dvar* ,object ,slot-name) ,val))
     ,@body))

Finally we can define a class with slots that do not share the top value:

DYNAMIC-VARS> (defclass c1 ()
                  ((slot1 :initarg :slot1 :dynamic nil :accessor slot1)
                   (slot2 :initarg :slot2 :dynamic t   :accessor slot2)
                   (slot3 :initarg :slot3 :dynamic :tls :accessor slot3))
                  (:metaclass class-with-dynamic-slots))
#<The EU.TURTLEWARE.DYNAMIC-VARS::CLASS-WITH-DYNAMIC-SLOTS EU.TURTLEWARE.DYNAMIC-VARS::C1>
DYNAMIC-VARS> (with-slots (slot1 slot2 slot3) *object*
                (setf slot1 :x slot2 :y slot3 :z)
                (list slot1 slot2 slot3))
(:X :Y :Z)
DYNAMIC-VARS> (bt:make-thread
               (lambda ()
                 (with-slots (slot1 slot2 slot3) *object*
                   (setf slot1 :i slot2 :j slot3 :k)
                   (print (list slot1 slot2 slot3)))))

#<process "Anonymous thread" 0x7f76424c0240>

(:I :J :K) 
DYNAMIC-VARS> (with-slots (slot1 slot2 slot3) *object*
                (list slot1 slot2 slot3))
(:I :J :Z)

What can we use it for?

Now that we know how to define thread-local variables, we are left with a question what can we use it for. Consider having a line-buffering stream. One possible implementation could be sketched as:

(defclass line-buffering-stream (fancy-stream)
  ((current-line :initform (make-adjustable-string)
                 :accessor current-line)
   (current-ink :initform +black+
                :accessor current-ink)))

(defmethod stream-write-char ((stream line-buffering-stream) char)
  (if (char= char #\newline)
      (terpri stream)
      (vector-push-extend char (current-line stream))))

(defmethod stream-terpri ((stream line-buffering-stream))
  (%put-line-on-screen (current-line stream) (current-ink stream))
  (setf (fill-pointer (current-line stream)) 0))

If this stream is shared between multiple threads, then even if individual operations and %PUT-LINE-ON-SCREEN are thread-safe , we have a problem. For example FORMAT writes are not usually atomic and individual lines are easily corrupted. If we use custom colors, these are also a subject of race conditions. The solution is as easy as making both slots thread-local. In that case the buffered line is private to each thread and it is put on the screen atomically:

(defclass line-buffering-stream (fancy-stream)
  ((current-line
    :initform (make-adjustable-string)
    :accessor current-line
    :dynamic :tls)
   (current-ink
    :initform +black+
    :accessor current-ink
    :dynamic :tls))
  (:metaclass class-with-dynamic-slots))

Technique is not limited to streams. It may benefit thread-safe drawing, request processing, resource management and more. By subclassing DYNAMIC-VARIABLE we could create also variables that are local to different objects than processes.

I hope that you've enjoyed reading this post as much as I had writing it. If you are interested in a full standalone implementation, with tests and system definitions, you may get it here. Cheers!

TurtleWare: Dynamic Vars - The Empire Strikes Back [Planet Lisp]

Table of Contents

  1. Thread Local storage exhausted
  2. The layer of indirection
  3. I can fix her
  4. Let's write some tests!
  5. Summary

Thread Local storage exhausted

In the last post I've described a technique to use dynamic variables by value instead of the name by utilizing the operator PROGV. Apparently it works fine on all Common Lisp implementations I've tried except from SBCL, where the number of thread local variables is by default limited to something below 4000. To add salt to the injury, these variables are not garbage collected.

Try the following code to crash into LDB:

(defun foo ()
  (loop for i from 0 below 4096 do
    (when (zerop (mod i 100))
      (print i))
    (progv (list (gensym)) (list 42)
      (values))))
(foo)

This renders our new technique not very practical given SBCL popularity. We need to either abandon the idea or come up with a workaround.

The layer of indirection

Luckily for us we've already introduced a layer of indirection. Operators to access dynamic variables are called DLET, DSET and DREF. This means, that it is enough to provide a kludge implementation for SBCL with minimal changes to the remaining code.

The old code works the same as previously except that instead of SYMBOL-VALUE we use the accessor DYNAMIC-VARIABLE-VALUE, and the old call to PROGV is now DYNAMIC-VARIABLE-PROGV. Moreover DYNAMIC-EFFECTIVE-SLOT used functions BOUNDP and MAKUNBOUND, so we replace these with DYNAMIC-VARIABLE-BOUND-P and DYNAMIC-VARIABLE-MAKUNBOUND. To abstract away things further we also introduce the constructor MAKE-DYNAMIC-VARIABLE

(defpackage "EU.TURTLEWARE.BLOG/DLET"
  (:local-nicknames ("MOP" #+closer-mop "C2MOP"
                           #+(and (not closer-mop) ecl) "MOP"
                           #+(and (not closer-mop) ccl) "CCL"
                           #+(and (not closer-mop) sbcl) "SB-MOP"))
  (:use "CL"))
(in-package "EU.TURTLEWARE.BLOG/DLET")

(eval-when (:compile-toplevel :execute :load-toplevel)
  (unless (member :bordeaux-threads *features*)
    (error "Please load BORDEAUX-THREADS."))
  (when (member :sbcl *features*)
    (unless (member :fake-progv-kludge *features*)
      (format t "~&;; Using FAKE-PROGV-KLUDGE for SBCL.~%")
      (push :fake-progv-kludge *features*))))

(defmacro dlet (bindings &body body)
  (flet ((pred (binding)
           (and (listp binding) (= 2 (length binding)))))
    (unless (every #'pred bindings)
      (error "DLET: bindings must be lists of two values.~%~
                Invalid bindings:~%~{ ~s~%~}" (remove-if #'pred bindings))))
  (loop for (var val) in bindings
        collect var into vars
        collect val into vals
        finally (return `(dynamic-variable-progv (list ,@vars) (list ,@vals)
                           ,@body))))

(defmacro dset (&rest pairs)
  `(setf ,@(loop for (var val) on pairs by #'cddr
                 collect `(dref ,var)
                 collect val)))

(defmacro dref (variable)
  `(dynamic-variable-value ,variable))

;;; ...

(defmethod mop:slot-boundp-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-bound-p (slot-dvar object slotd)))

(defmethod mop:slot-makunbound-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-makunbound (slot-dvar object slotd)))

With these in place we can change the portable implementation to conform.

#-fake-progv-kludge
(progn
  (defun make-dynamic-variable ()
    (gensym))

  (defun dynamic-variable-value (variable)
    (symbol-value variable))

  (defun (setf dynamic-variable-value) (value variable)
    (setf (symbol-value variable) value))

  (defun dynamic-variable-bound-p (variable)
    (boundp variable))

  (defun dynamic-variable-makunbound (variable)
    (makunbound variable))

  (defmacro dynamic-variable-progv (vars vals &body body)
    `(progv ,vars ,vals ,@body)))

I can fix her

The implementation for SBCL will mediate access to the dynamic variable value with a synchronized hash table with weak keys. The current process is the key of the hash table and the list of bindings is the value of the hash table. For compatibility between implementations the top level value of the symbol will be shared.

The variable +FAKE-UNBOUND+ is the marker that signifies, that the variable has no value. When the list of bindings is EQ to +CELL-UNBOUND+, then it means that we should use the global value. We add new bindings by pushing to it.

#+fake-progv-kludge
(progn
  (defvar +fake-unbound+ 'unbound)
  (defvar +cell-unbound+ '(no-binding))

  (defclass dynamic-variable ()
    ((tls-table
      :initform (make-hash-table :synchronized t :weakness :key)
      :reader dynamic-variable-tls-table)
     (top-value
      :initform +fake-unbound+
      :accessor dynamic-variable-top-value)))

  (defun make-dynamic-variable ()
    (make-instance 'dynamic-variable))

  (defun dynamic-variable-bindings (dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (gethash process tls-table +cell-unbound+)))

  (defun (setf dynamic-variable-bindings) (value dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (setf (gethash process tls-table +cell-unbound+) value))))

We define two readers for the variable value - one that simply reads the value, and the other that signals an error if the variable is unbound. Writer for its value either replaces the current binding, or if the value cell is unbound, then we modify the top-level symbol value. We use the value +FAKE-UNBOUND+ to check whether the variable is bound and to make it unbound.

#+fake-progv-kludge
(progn
  (defun %dynamic-variable-value (dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (dynamic-variable-top-value dvar)
          (car tls-binds))))

  (defun dynamic-variable-value (dvar)
    (let ((tls-value (%dynamic-variable-value dvar)))
      (when (eq tls-value +fake-unbound+)
        (error 'unbound-variable :name "(unnamed)"))
      tls-value))

  (defun (setf dynamic-variable-value) (value dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (setf (dynamic-variable-top-value dvar) value)
          (setf (car tls-binds) value))))

  (defun dynamic-variable-bound-p (dvar)
    (not (eq +fake-unbound+ (%dynamic-variable-value dvar))))

  (defun dynamic-variable-makunbound (dvar)
    (setf (dynamic-variable-value dvar) +fake-unbound+)))

Finally we define the operator to dynamically bind variables that behaves similar to PROGV. Note that we PUSH and POP from the thread-local hash table DYNAMIC-VARIABLE-BINDINGS, so no synchronization is necessary.

#+fake-progv-kludge
(defmacro dynamic-variable-progv (vars vals &body body)
  (let ((svars (gensym))
        (svals (gensym))
        (var (gensym))
        (val (gensym)))
    `(let ((,svars ,vars))
       (loop for ,svals = ,vals then (rest ,svals)
             for ,var in ,svars
             for ,val = (if ,svals (car ,svals) +fake-unbound+)
             do (push ,val (dynamic-variable-bindings ,var)))
       (unwind-protect (progn ,@body)
         (loop for ,var in ,svars
               do (pop (dynamic-variable-bindings ,var)))))))

Let's write some tests!

But of course, we are going to also write a test framework. It's short, I promise. As a bonus point the API is compatibile with fiveam, so it is possible to drop tests as is in the appropriate test suite.

(defvar *all-tests* '())

(defun run-tests ()
  (dolist (test (reverse *all-tests*))
    (format *debug-io* "Test ~a... " test)
    (handler-case (funcall test)
      (serious-condition (c)
        (format *debug-io* "Failed: ~a~%" c))
      (:no-error (&rest args)
        (declare (ignore args))
        (format *debug-io* "Passed.~%")))))

(defmacro test (name &body body)
  `(progn
     (pushnew ',name *all-tests*)
     (defun ,name () ,@body)))

(defmacro is (form)
  `(assert ,form))

(defmacro pass ())

(defmacro signals (condition form)
  `(is (block nil
         (handler-case ,form
           (,condition () (return t)))
         nil)))

(defmacro finishes (form)
  `(is (handler-case ,form
         (serious-condition (c)
           (declare (ignore c))
           nil)
         (:no-error (&rest args)
           (declare (ignore args))
           t))))

Now let's get to tests. First we'll test our metaclass:

(defclass dynamic-let.test-class ()
  ((slot1 :initarg :slot1 :dynamic nil :accessor slot1)
   (slot2 :initarg :slot2 :dynamic t   :accessor slot2)
   (slot3 :initarg :slot3              :accessor slot3))
  (:metaclass class-with-dynamic-slots))

(defparameter *dynamic-let.test-instance-1*
  (make-instance 'dynamic-let.test-class
                 :slot1 :a :slot2 :b :slot3 :c))

(defparameter *dynamic-let.test-instance-2*
  (make-instance 'dynamic-let.test-class
                 :slot1 :x :slot2 :y :slot3 :z))

(test dynamic-let.1
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (with-slots (slot1 slot2 slot3) o1
      (is (eq :a slot1))
      (is (eq :b slot2))
      (is (eq :c slot3)))
    (with-slots (slot1 slot2 slot3) o2
      (is (eq :x slot1))
      (is (eq :y slot2))
      (is (eq :z slot3)))))

(test dynamic-let.2
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (signals error (slot-dlet (((o1 'slot1) 1)) nil))
    (slot-dlet (((o1 'slot2) :k))
      (is (eq :k (slot-value o1 'slot2)))
      (is (eq :y (slot-value o2 'slot2))))))

(test dynamic-let.3
  (let ((o1 *dynamic-let.test-instance-1*)
        (exit nil)
        (fail nil))
    (flet ((make-runner (values)
             (lambda ()
               (slot-dlet (((o1 'slot2) :start))
                 (let ((value (slot2 o1)))
                   (unless (eq value :start)
                     (setf fail value)))
                 (loop until (eq exit t) do
                   (setf (slot2 o1) (elt values (random (length values))))
                   (let ((value (slot2 o1)))
                     (unless (member value values)
                       (setf fail value)
                       (setf exit t))))))))
      (let ((r1 (bt:make-thread (make-runner '(:k1 :k2))))
            (r2 (bt:make-thread (make-runner '(:k3 :k4))))
            (r3 (bt:make-thread (make-runner '(:k5 :k6)))))
        (sleep .1)
        (setf exit t)
        (map nil #'bt:join-thread (list r1 r2 r3))
        (is (eq (slot2 o1) :b))
        (is (null fail))))))

Then let's test the dynamic variable itself:

(test dynamic-let.4
  "Test basic dvar operators."
  (let ((dvar (make-dynamic-variable)))
    (is (eql 42 (dset dvar 42)))
    (is (eql 42 (dref dvar)))
    (ignore-errors
     (dlet ((dvar :x))
       (is (eql :x (dref dvar)))
       (error "foo")))
    (is (eql 42 (dref dvar)))))

(test dynamic-let.5
  "Test bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dset dvar 15)
    (is (dynamic-variable-bound-p dvar))
    (dynamic-variable-makunbound dvar)
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.6
  "Test makunbound operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (finishes (dynamic-variable-makunbound dvar))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.7
  "Test locally bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dlet ((dvar 15))
      (is (dynamic-variable-bound-p dvar)))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.8
  "Test locally unbound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (dlet ((dvar nil))
      (is (dynamic-variable-bound-p dvar))
      (finishes (dynamic-variable-makunbound dvar))
      (is (not (dynamic-variable-bound-p dvar))))
    (is (dynamic-variable-bound-p dvar))))

(test dynamic-let.9
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                              ; at the same time
    (let ((dvars (loop repeat 4096 collect (make-dynamic-variable))))
      ;; ensure tls variable
      (loop for v in dvars do
        (dlet ((v 1))))
      (loop for i from 0 below 4096
            for r = (random 4096)
            for v1 in dvars
            for v2 = (elt dvars r) do
              (when (zerop (mod i 64))
                (pass))
              (dlet ((v1 42)
                     (v2 43))
                (values))))))

(test dynamic-let.0
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                             ; can be gc-ed
    (loop for i from 0 below 4096 do
      (when (zerop (mod i 64))
        (pass))
      (dlet (((make-dynamic-variable) 42))
        (values)))))

All that is left is to test both dynamic variable implementations:

BLOG/DLET> (lisp-implementation-type)
"ECL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

And with the kludge:

BLOG/DLET> (lisp-implementation-type)
"SBCL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

Summary

In this post we've made our implementation to work on SBCL even when there are more than a few thousand dynamic variables. We've also added a simple test suite that checks the basic behavior.

As it often happens, after achieving some goal we get greedy and achieve more. That's the case here as well. In the next (and the last) post in this series I'll explore the idea of adding truly thread-local variables without a shared global value. This will be useful for lazily creating context on threads that are outside of our control. We'll also generalize the implementation so it is possible to subclass and implement ones own flavor of a dynamic variable.

TurtleWare: Dynamic Vars - A New Hope [Planet Lisp]

Table of Contents

  1. Dynamic Bindings
  2. The problem
  3. The solution
  4. Dynamic slots
  5. The context
  6. Summary

Dynamic Bindings

Common Lisp has an important language feature called dynamic binding. It is possible to rebind a dynamic variable somewhere on the call stack and downstream functions will see that new value, and when the stack is unwound, the old value is brought back.

While Common Lisp does not specify multi-threading, it seems to be a consensus among various implementations that dynamic bindings are thread-local, allowing for controlling the computing context in a safe way.

Before we start experiments, let's define a package to isolate our namespace:

(defpackage "EU.TURTLEWARE.BLOG/DLET"
  (:local-nicknames ("MOP" #+closer-mop "C2MOP"
                           #+(and (not closer-mop) ecl) "MOP"
                           #+(and (not closer-mop) ccl) "CCL"
                           #+(and (not closer-mop) sbcl) "SB-MOP"))
  (:use "CL"))
(in-package "EU.TURTLEWARE.BLOG/DLET")

Dynamic binding of variables is transparent to the programmer, because the operator LET is used for both lexical and dynamic bindings. For example:

(defvar *dynamic-variable* 42)

(defun test ()
  (let ((*dynamic-variable* 15)
        (lexical-variable 12))
    (lambda ()
      (print (cons *dynamic-variable* lexical-variable)))))

(funcall (test))
;;; (42 . 12)

(let ((*dynamic-variable* 'xx))
  (funcall (test)))
;;; (xx . 12)

Additionally the language specifies a special operator PROGV that gives the programmer a control over the dynamic binding mechanism, by allowing passing the dynamic variable by value instead of its name. Dynamic variables are represented by symbols:

(progv (list '*dynamic-variable*) (list 'zz)
  (funcall (test)))
;;; (zz . 12)

The problem

Nowadays it is common to encapsulate the state in the instance of a class. Sometimes that state is dynamic. It would be nice if we could use dynamic binding to control it. That said slots are not variables, and if there are many objects of the same class with different states, then using dynamic variables defined with DEFVAR is not feasible.

Consider the following classes which we want to be thread-safe:

(defgeneric call-with-ink (cont window ink))

(defclass window-1 ()
  ((ink :initform 'red :accessor ink)))

(defmethod call-with-ink (cont (win window-1) ink)
  (let ((old-ink (ink win)))
    (setf (ink win) ink)
    (unwind-protect (funcall cont)
      (setf (ink win) old-ink))))

(defclass window-2 ()
  ())

(defvar *ink* 'blue)
(defmethod ink ((window window-2)) *ink*)

(defmethod call-with-ink (cont (win window-2) ink)
  (let ((*ink* ink))
    (funcall cont)))

The first example is clearly not thread safe. If we access the WINDOW-1 instance from multiple threads, then they will overwrite a value of the slot INK.

The second example is not good either, because when we have many instances of WINDOW-2 then they share the binding. Nesting CALL-WITH-INK will overwrite the binding of another window.

The solution

The solution is to use PROGV:

(defclass window-3 ()
  ((ink :initform (gensym))))

(defmethod initialize-instance :after ((win window-3) &key)
  (setf (symbol-value (slot-value win 'ink)) 'red))

(defmethod call-with-ink (cont (win window-3) ink)
  (progv (list (slot-value win 'ink)) (list ink)
    (funcall cont)))

This way each instance has its own dynamic variable that may be rebound with a designated operator CALL-WITH-INK. It is thread-safe and private. We may add some syntactic sugar so it is more similar to let:

(defmacro dlet (bindings &body body)
  (loop for (var val) in bindings
        collect var into vars
        collect val into vals
        finally (return `(progv (list ,@vars) (list ,@vals)
                           ,@body))))

(defmacro dset (&rest pairs)
  `(setf ,@(loop for (var val) on pairs by #'cddr
                 collect `(symbol-value ,var)
                 collect val)))

(defmacro dref (variable)
  `(symbol-value ,variable))

Dynamic slots

While meta-classes are not easily composable, it is worth noting that we can mold it better into the language by specifying that slot itself has a dynamic value. This way CLOS aficionados will have a new tool in their arsenal.

The approach we'll take is that a fresh symbol is stored as the value of each instance-allocated slot, and then accessors for the slot value will use these symbols as a dynamic variable. Here are low-level accessors:

;;; Accessing and binding symbols behind the slot. We don't use SLOT-VALUE,
;;; because it will return the _value_ of the dynamic variable, and not the
;;; variable itself.
(defun slot-dvar (object slotd)
  (mop:standard-instance-access
   object (mop:slot-definition-location slotd)))

(defun slot-dvar* (object slot-name)
  (let* ((class (class-of object))
         (slotd (find slot-name (mop:class-slots class)
                      :key #'mop:slot-definition-name)))
    (slot-dvar object slotd)))

(defmacro slot-dlet (bindings &body body)
  `(dlet ,(loop for ((object slot-name) val) in bindings
                 collect `((slot-dvar* ,object ,slot-name) ,val))
     ,@body))

Now we'll define the meta-class. We need that to specialize functions responsible for processing slot definitions and the instance allocation. Notice, that we make use of a kludge to communicate between COMPUTE-EFFECTIVE-SLOT-DEFINITION and EFFECTIVE-SLOT-DEFINITION-CLASS – this is because the latter has no access to the direct slot definitions.

;;; The metaclass CLASS-WITH-DYNAMIC-SLOTS specifies alternative effective slot
;;; definitions for slots with an initarg :dynamic.
(defclass class-with-dynamic-slots (standard-class) ())

;;; Class with dynamic slots may be subclasses of the standard class.
(defmethod mop:validate-superclass ((class class-with-dynamic-slots)
                                    (super standard-class))
  t)

;;; When allocating the instance we initialize all slots to a fresh symbol that
;;; represents the dynamic variable.
(defmethod allocate-instance ((class class-with-dynamic-slots) &rest initargs)
  (declare (ignore initargs))
  (let ((object (call-next-method)))
    (loop for slotd in (mop:class-slots class)
          when (typep slotd 'dynamic-effective-slot) do
            (setf (mop:standard-instance-access
                   object
                   (mop:slot-definition-location slotd))
                  (gensym (string (mop:slot-definition-name slotd)))))
    object))

;;; To improve potential composability of CLASS-WITH-DYNAMIC-SLOTS with other
;;; metaclasses we treat specially only slots that has :DYNAMIC in initargs,
;;; otherwise we call the next method.
(defmethod mop:direct-slot-definition-class
    ((class class-with-dynamic-slots) &rest initargs)
  (loop for (key val) on initargs by #'cddr
        when (eq key :dynamic)
          do (return-from mop:direct-slot-definition-class
               (find-class 'dynamic-direct-slot)))
  (call-next-method))

;;; The metaobject protocol did not specify an elegant way to communicate
;;; between the direct slot definition and the effective slot definition.
;;; Luckily we have dynamic bindings! :-)
(defvar *kludge/mop-deficiency/dynamic-slot-p* nil)
(defmethod mop:compute-effective-slot-definition
    ((class class-with-dynamic-slots)
     name
     direct-slotds)
  (if (typep (first direct-slotds) 'dynamic-direct-slot)
      (let* ((*kludge/mop-deficiency/dynamic-slot-p* t))
        (call-next-method))
      (call-next-method)))

(defmethod mop:effective-slot-definition-class
    ((class class-with-dynamic-slots) &rest initargs)
  (declare (ignore initargs))
  (if *kludge/mop-deficiency/dynamic-slot-p*
      (find-class 'dynamic-effective-slot)
      (call-next-method)))

Finally we define a direct and an effective slot classes, and specialize slot accessors that are invoked by the instance accessors.

;;; There is a considerable boilerplate involving customizing slots.
;;;
;;; - direct slot definition: local to a single defclass form
;;;
;;; - effective slot definition: combination of all direct slots with the same
;;;   name in the class and its superclasses
;;;
(defclass dynamic-direct-slot (mop:standard-direct-slot-definition)
  ((dynamic :initform nil :initarg :dynamic :reader dynamic-slot-p)))

;;; DYNAMIC-EFFECTIVE-SLOT is implemented to return as slot-value values of the
;;; dynamic variable that is stored with the instance.
;;;
;;; It would be nice if we could specify :ALLOCATION :DYNAMIC for the slot, but
;;; then STANDARD-INSTANCE-ACCESS would go belly up. We could make a clever
;;; workaround, but who cares?
(defclass dynamic-effective-slot (mop:standard-effective-slot-definition)
  ())

(defmethod mop:slot-value-using-class
    ((class class-with-dynamic-slots)
     object
     (slotd dynamic-effective-slot))
  (dref (slot-dvar object slotd)))

(defmethod (setf mop:slot-value-using-class)
    (new-value
     (class class-with-dynamic-slots)
     object
     (slotd dynamic-effective-slot))
  (dset (slot-dvar object slotd) new-value))

(defmethod mop:slot-boundp-using-class
  ((class class-with-dynamic-slots)
   object
   (slotd dynamic-effective-slot))
  (boundp (slot-dvar object slotd)))

(defmethod mop:slot-makunbound-using-class
  ((class class-with-dynamic-slots)
   object
   (slotd dynamic-effective-slot))
  (makunbound (slot-dvar object slotd)))

With this, we can finally define a class with slots that have dynamic values. What's more, we may bind them like dynamic variables.

;;; Let there be light.
(defclass window-4 ()
  ((ink :initform 'red :dynamic t :accessor ink)
   (normal :initform 'normal :accessor normal))
  (:metaclass class-with-dynamic-slots))

(let ((object (make-instance 'window-4)))
  (slot-dlet (((object 'ink) 15))
    (print (ink object)))
  (print (ink object)))

ContextL provides a similar solution with dynamic slots, although it provides much more, like layered classes. This example is much more self-contained.

The context

Lately I'm working on the repaint queue for McCLIM. While doing so I've decided to make stream operations thread-safe, so it is possible to draw on the stream and write to it from arbitrary thread asynchronously. The access to the output record history needs to be clearly locked, so that may be solved by the mutex. Graphics state is another story, consider the following functions running from separate threads:

(defun team-red ()
  (with-drawing-options (stream :ink +dark-red+)
    (loop for i from 0 below 50000 do
      (write-string (format nil "XXX: ~5d~%" i) stream))))

(defun team-blue ()
  (with-drawing-options (stream :ink +dark-blue+)
    (loop for i from 0 below 50000 do
      (write-string (format nil "YYY: ~5d~%" i) stream))))

(defun team-pink ()
  (with-drawing-options (stream :ink +deep-pink+)
    (loop for i from 0 below 25000 do
      (case (random 2)
        (0 (draw-rectangle* stream 200 (* i 100) 250 (+ (* i 100) 50)))
        (1 (draw-circle* stream 225 (+ (* i 100) 25) 25))))))

(defun gonow (stream)
  (window-clear stream)
  (time (let ((a (clim-sys:make-process #'team-red))
              (b (clim-sys:make-process #'team-blue))
              (c (clim-sys:make-process #'team-grue)))
          (bt:join-thread a)
          (bt:join-thread b)
          (bt:join-thread c)
          (format stream "done!~%")))  )

Operations like WRITE-STRING and DRAW-RECTANGLE can be implemented by holding a lock over the shared resource without much disruption. The drawing color on the other hand is set outside of the loop, so if we had locked the graphics state with a lock, then these functions would be serialized despite being called from different processes. The solution to this problem is to make graphics context a dynamic slot that is accessed with WITH-DRAWING-OPTIONS.

Summary

I hope that I've convinced you that dynamic variables are cool (I'm sure that majority of readers here are already convinced), and that dynamic slots are even cooler :-). Watch forward to the upcoming McCLIM release!

If you like technical writeups like this, please consider supporting me on Patreon.

16:35

[$] The OpenWrt One system [LWN.net]

OpenWrt is, despite its relatively low profile, one of our community's most important distributions; it runs untold numbers of network routers and has served as the base on which a lot of network-oriented development (including the bufferbloat-reduction work) has been done. At the beginning of 2024, a few members of the project announced a plan to design and produce a router device specifically designed to run OpenWrt. This device, dubbed the "OpenWrt One", is now becoming available; the kind folks at the Software Freedom Conservancy were kind enough to ship one to LWN, where the desire to play with a new toy is never lacking.

16:00

A Leap of Faith – DORK TOWER 04.11.24 [Dork Tower]

This or any DORK TOWER strip is now available as a signed, high-quality print, from just $25!  CLICK HERE to find out more!

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

15:49

I’ve Arrived at Saint Peter’s Gate [Whatever]

pxl_20241104_135325945~25329771813136373253.

No, not that one (I’m not dead yet!), but the one in Nantes, more formerly called Porte Saint-Pierre, which used to be part of the gates of the city of Nantes. The oldest part of the structure dates back to the third century CE, whilst the youngest part is from the 15th century, which means that all of it is significantly older than the country I live in and most of the European settlement of the continent it is on. And yet people just walk past it on a daily basis like this is no big deal. Europe is weird, man.

Today is an “off” day for me after four days of the Utopiales Festival and then events the next two days in Brest and Paris. I’m spending it mostly laying on the chaise longue in my hotel room and watching YouTube videos, because that’s how introverts do. But I did make sure to take a walk and take a few shots like this one. After all, where I live, the oldest functional building in town may just be the church I own. Ain’t that a kick in the head.

— JS

15:14

Link [Scripting News]

lists.opml.org: The other day I asked a famous blogger who uses RSS if he would be willing to share his list of feeds, so others could subscribe to them. He declined, for good reason, there was private stuff in the list he couldn't share. I certainly understand that. Then I realized, as often is the case, that I could do myself what I had been asking others to do. And in fact I already was sharing my OPML subscription lists, but people who didn't use FeedLand wouldn't know how to find them. So I decided to make it easier. On lists.opml.org I've got a link to the lists of podcasts I'm subscribed to. That list should update every hour for any additions or removals from this list. I don't update the list very often, fwiw. And I make no warranties about the quality of the podcasts, or when the feeds in the list update. And maybe this will give other people an idea that they might want to do this as well. Let me know if you do, I'd love to see what you do.

15:07

Security updates for Monday [LWN.net]

Security updates have been issued by AlmaLinux (firefox, grafana, kernel, and mod_http2), Debian (chromium, openssl, and thunderbird), Fedora (chromium, krb5, mysql8.0, polkit, python-single-version, and webkitgtk), Mageia (bind, buildah, podman, skopeo, kernel, kmod-xtables-addons. kmod-virtualbox, kernel-firmware & kernel-firmware-nonfree radeon-firmware, and kernel-linus), SUSE (apache2, chromedriver, cups-filters, docker-stable, firefox, gama, govulncheck-vulndb, java-11-openjdk, java-17-openjdk, java-23-openjdk, libnss_slurm2, openssl-1_1, openssl-3, python-waitress, python3, python310-waitress, ruby2.5, rubygem-actionmailer-5_1, rubygem-actionpack-5_1, rubygem-bundler, webkit2gtk3, and xorg-x11-server), and Ubuntu (linux-azure-6.8).

Pluralistic: Neal Stephenson's "Polostan" (04 Nov 2024) [Pluralistic: Daily links from Cory Doctorow]


Today's links



The Harpercollins cover for Neal Stephenson's 'Polostan.'

Neal Stephenson's "Polostan" (permalink)

Science fiction isn't a collection of tropes, nor is it a literary style, nor is it a marketing category. It can encompass all of these, but what sf really is, is an outlook.

At the core of sf is an approach to technology (and, sometimes, science): sf treats technology as a kind of crux that the rest of the tale revolves around. The Bechdel test invites us to notice that in most fiction, stories revolve around men – that it's rare for two or more non-male characters to interact with one another, and if they do, that interaction is triggered by a man.

The stfnal version of this would go something like this: "a story gets increasingly stfnal to the extent that interactions among characters either directly relate to a technology, or are triggered by the consequences of such a relation, or fears, plans or aspirations for same."

(Note that this implies that science fiction is a spectrum: things can be more or less science fictional, and that gradient reflects the centrality of a technology to the narrative.)

No one's work demonstrates this better than Neal Stephenson. Stephenson's work covers a lot of settings and storytelling modes. His debut, The Big U, was a contemporary novel lampooning academic life. Then came Zodiac, another contemporary novel, but one where science – in this case, extremely toxic polychlorinated biphenyls – take center stage. Then came his cyberpunk classic, Snow Crash, which was unambiguously (and gloriously) science fiction.

A couple of books later, we got Cryptonomicon, a finance novel that treated money as a technology, and, notably, did so across both a near-future setting and the historic setting of WWII. In addition to being a cracking novel, Cryptonomicon is exciting in that it treats the technological endeavors of the past in exactly the same way as it does the imaginary technological endeavors of the future. Here's Stephenson fusing his contemporary sensibilities with his deep interests in history, and approaching historical fiction as an sf writer, doing the stfnal thing to gadgets and ideas that have been around for more than two generations.

Stephenson's next novel was Quicksilver, the first book of the massive "System of the World" trilogy, in which the extremely historical events of Newton and Leibniz's quest to discover "the calculus" are given a sweeping, world-spanning stfnal treatment. As "system of the world" suggests, Stephenson uses this stfnal trick to situate a scientific advancement in the context of a global, contingent, complex system that it both grows out of an defines. This is the pure water of science fiction, applied entirely to real seventeenth century events, and it's definitive proof that sf isn't a trope, a style or a category – but rather, it is a way of framing and understanding the world.

You can think of Stephenson's career up to this point as a series of experiments in applying the stfnal lens to events that are progressively less historical (and, with The Diamond Age, events that are atemporal inasmuch as the book is set in a futuristic revival of the Victorian Age). Experiments that range over contemporary settings, and then contemporary settings blended with historical settings, then a deep historical sf trilogy.

(It's rather exciting that these books came out right as William Gibson was entering his own "predicting the present" decade, where he exclusively published sf about the recent past, a prelude to a series of sf novels set in a future so far from our present that the characters literally have no record of which events led up to their own circumstances):

https://memex.craphound.com/2014/10/28/the-peripheral-william-gibson-vs-william-gibson/

Having proved how successful an historical sf novel could be, Stephenson then bopped around with a lot of stfnal historical ideas, from the "transmedia" 12th century setting of the Mongoliad to a madcap time-travel book (The Rise and Fall of DODO). Stephenson's work since then have been pretty straightforwardly stfnal, which means that he's a little overdue for a return to historical sf.

That's where Polostan comes in, the just-published inaugural volume of a new interwar series about the birth of atomic science:

https://www.harpercollins.com/products/polostan-neal-stephenson

Critics and even the publisher have called this a "spy novel" or a "historical novel" but it is neither of those. What Polostan is, is a science fiction novel, about spies in an historical setting. This isn't to say that Stephenson tramples on, or ignores spy tropes: this is absolutely a first-rate spy novel. Nor does Stephenson skimp on the lush, gorgeously realized and painstakingly researched detail you'd want from an historical novel (Stephenson has long enjoyed a fruitful collaboration with the brilliant researcher Lisa Gold, whom we can thank for much of the historical detail across his body of work).

But the overarching sensibility of this work is a world full of people who revolve around technology. You'd be hard-pressed to list more than a handful of actions taken by the characters that aren't driven by technology, and most of the dialog either concerns technology, or the actions that characters have taken in relation to technology. It's unmistakably and indelibly a science fiction novel.

It's great.

Polostan raises the curtain on the story of Dawn Rae Bjornberg, AKA Aurora Maximovna Artemyeva, whose upbringing is split between the American West in the early 20th century and the Leningrad of revolutionary Russia (her parents are an American anarchist and a Ukrainian Communist who meet when her father travels to America as a Communist agitator). Aurora's parents' marriage does not survive their sojourn to the USSR, and eventually Aurora and her father end up back in the States, after her father is tasked with radicalizing the veterans of the Bonus Army that occupied DC, demanding the military benefits they'd been promised:

https://en.wikipedia.org/wiki/Bonus_Army

After the efforts of Communist organizers in the Bonus Army were mercilessly crushed by George S Patton, Aurora ends up living in a Communist commune in Chicago, where she falls into a job selling comfortable shoes to the footsore women who visit the Century of Progress, as the 1933 World's Fair was known:

https://en.wikipedia.org/wiki/Century_of_Progress

At the Century of Progress, Aurora sits at the junction where many global currents are mixing: she is there when Mussolini's air armada lands on Lake Michigan to the cheers of thronged fascist sympathizers; and also when Neils Bohr lectures on the newly discovered – and still controversial – neutron. She is also exposed to her first boyfriend, a young physicist from New York, who greatly expands her interest in nuclear physics and also impregnates her.

This latter turn in her life sends Aurora back into the American west, where, after a complex series of misadventures and derring-do, she embarks on a career as a tommy gun-toting bank robber, part of an armed gang of her cowboy shirttail cousins.

All of this culminates in her return sojourn to the Soviet Union, where she first falls under suspicion of being an American spy, and then her recruitment as a Soviet spy.

Also: she plays a lot of polo. Like, on a horse.

This isn't just an unmistakably stfnal novel, it's also an unmistakably Stephensonian novel: embroidered, discursive, and brilliantly expositional:

https://maryrobinettekowal.com/journal/my-favorite-bit/my-favorite-bit-cory-doctorow-talks-about-the-bezzle/

It is funny, it is interesting, it is even daffy in places. It's sometimes absolutely horrifying. It skips around in time like a subatomic particle bouncing around in a theoretical physics model. It creates and resolves all manner of little subplots in most satisfying ways, but also ultimately exists just to tee up the main action, which will come in future volumes. It's a curtain raiser, and like any good opening number, it hooks you for what is to come.


Hey look at this (permalink)



A Wayback Machine banner.

This day in history (permalink)

#20yrsago UK Public Service Publisher: a BBC for everything else? https://web.archive.org/web/20050309032840/https://www.ofcom.org.uk/media_office/latest_news/nr_20041103?a=87101

#20yrsago Pope endorses wanking, screwing https://web.archive.org/web/20060209083158/https://www.telegraph.co.uk/news/main.jhtml?xml=/news/2004/10/31/wvat31.xml&sSheet=/news/2004/10/31/ixnewstop.html

#15yrsago Gopher protocol reborn https://arstechnica.com/tech-policy/2009/11/the-web-may-have-won-but-gopher-tunnels-on/

#15yrsago Tell the FCC to say no to Hollywood’s terrible “Selectable Output Control” kill-switch https://web.archive.org/web/20091108001731/https://publicknowledge.org/action/say-no-to-soc

#15yrsago More on secret copyright treaty: your kids could go to jail for noncommercial music sharing https://web.archive.org/web/20091105223851/https://www.michaelgeist.ca/content/view/4511/125/

#15yrsago Love of Shopping is Not a Gene: exposing junk science and ideology in Darwinian Psychology https://memex.craphound.com/2009/11/04/love-of-shopping-is-not-a-gene-exposing-junk-science-and-ideology-in-darwinian-psychology/

#15yrsago Science fiction as a predictor of the present https://web.archive.org/web/20091107095510/http://tinhousebooks.com/blog/?p=410

#15yrsago Secret copyright treaty leaks. It’s bad. Very bad. https://web.archive.org/web/20091103214101/https://www.michaelgeist.ca/content/view/4510/125/

#10yrsago Cybercrooks sell stolen rewards points at 99.9% discount https://krebsonsecurity.com/2014/11/thieves-cash-out-rewards-points-accounts/

#10yrsago Ferguson’s no-fly zone created to ground news-choppers https://www.npr.org/sections/thetwo-way/2014/11/02/360991500/ap-no-fly-zone-in-ferguson-meant-to-keep-media-out

#10yrsago 21K Kansans’ votes will be suppressed this election https://www.kansas.com/news/politics-government/article3504228.html

#10yrsago Pianist wants bad review taking down under EU “right to be forgotten” rules https://www.washingtonpost.com/news/the-intersect/wp/2014/10/31/pianist-asks-the-washington-post-to-remove-a-concert-review-under-the-e-u-s-right-to-be-forgotten-ruling/

#10yrsago My grandmother, the poisoner https://web.archive.org/web/20141105041851/https://www.vice.com/en_uk/read/my-gandma-the-poisoner-0000474-v21n10

#5yrsago White supremacists record video at the new, bulletproof Emmett Till memorial sign https://edition.cnn.com/2019/11/03/us/emmett-till-memorial-white-supremacist-group-video/index.html

#5yrsago Teen uses external cameras and projection-mapping onto the a-pillar to “solve” blind-spots https://gizmodo.com/14-year-old-genius-solves-blind-spots-1839540078

#5yrsago The public spent $10b for Trump’s wall (so far); smugglers are cutting it with $100 saws and $10 blades https://www.washingtonpost.com/national/smugglers-are-sawing-through-new-sections-of-trumps-border-wall/2019/11/01/25bf8ce0-fa72-11e9-ac8c-8eced29ca6ef_story.html

#1yrago Big Tech's "attention rents" https://pluralistic.net/2023/11/03/subprime-attention-rent-crisis/#euthanize-rentiers


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, holding a mic.



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)

  • Picks and Shovels: a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books, February 2025
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2025



Colophon (permalink)

Today's top sources:

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Friday's progress: 848 words (76255 words total).
  • 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: Spill, part four (a Little Brother story) https://craphound.com/littlebrother/2024/10/28/spill-part-four-a-little-brother-story/


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

Windows Server 2025 released [OSnews]

Microsoft has confirmed the general availability of Windows Server 2025, which, as a long-term servicing channel (LTSC) release, will be supported for almost ten years.

This article describes some of the newest developments in Windows Server 2025, which boasts advanced features that improve security, performance, and flexibility. With faster storage options and the ability to integrate with hybrid cloud environments, managing your infrastructure is now more streamlined. Windows Server 2025 builds on the strong foundation of its predecessor while introducing a range of innovative enhancements to adapt to your needs.

↫ What’s new in Windows Server 2025 article

It should come as no surprise that Windows Server 2025 comes loaded with a ton of new features and improvements. I already covered some of those, such as DTrace by default, NVMe and storage improvements, hotpatching, and more. Other new features we haven’t discussed yet are a massive list of changes and improvements to Active Directory, a feature-on-demand feature for Azure Arc, support for Bluetooth keyboards, mice, and other peripherals, and tons of Hyper-V improvements.

SMB is also seeing so many improvements it’s hard to pick just a few to highlight, and software-defined networking is also touted as a major aspect of Server 2025. With SDN you can separate the network control plane from the data plane, giving administrators more flexibility in managing their network. I can just keep going listing all of the changes, but you get the idea – there’s a lot here.

You can try Windows Server 2025 for free for 180 days, as a VM in Azure, a local virtual machine image, or installed locally through an ISO image.

Moving a game project from C to the Odin language [OSnews]

Some months ago, I got really fed up with C.

Like, I don’t hate C. Hating programming languages is silly. But it was way too much effort to do simple things like lists/hashmaps and other simple data structures and such.

I decided to try this language called Odin, which is one of these “Better C” languages. And I ended up liking it so much that I moved my game Artificial Rage from C to Odin. Since Odin has support for Raylib too (like everything really), it was very easy to move things around.

Here’s how it all went.. Well, what I remember the very least.

↫ Akseli Lahtinen

You programmers might’ve thought you escaped the wrath of Monday on OSNews, but after putting the IT administrators to work in my previous post, it’s now time for you to get to work. If you have a C codebase and want to move it to something else, in this case Odin, Lahtinen’s article will send you on your way. As someone who barely knows how to write HTML, it’s difficult for me to say anything meaningful about the technical details, but I feel like there’s a lot of useful, first-hand info here.

From Proxmox to FreeBSD: story of a migration [OSnews]

It’s the start of the work week, so for the IT administrators among us, I have another great article by friend of the website, Stefano Marinelli. This article covers migrating a Proxmox-based setup to FreeBSD with bhyve.

The load is not particularly high, and the machines have good performance. Suddenly, however, I received a notification: one of the NVMe drives died abruptly, and the server rebooted. ZFS did its job, and everything remained sufficiently secure, but since it’s a leased server and already several years old, I spoke with the client and proposed getting more recent hardware and redoing the setup based on a FreeBSD host.

↫ Stefano Marinelli

If you’re interested in moving one of your own setups, or one of your clients’ setups, from Linux to FreeBSD, this is a great place to start and get some ideas, tips, and tricks. Like I said, it’s Monday, and you need to get to work.

14:28

Link [Scripting News]

Tomorrow if you are an American, and haven't voted yet and are thinking of sitting it out -- get off your butt and get out there and do your civic duty. We need great turnout this year, record-setting turnout, as a show of love for our country and our Constitution. Vote now, because later you might not have any power to change direction. Tomorrow, you do have power. And remember that voting is not you expressing yourself, it's not free speech, it's you and I governing. This is our moment of greatest power. Use it or lose it.

13:42

Rebooting the news [Scripting News]

My opinion: At this point it doesn’t matter what the NYT says. Either way they jumped the shark for the last time in this election.

After the election if we still have freedom of speech, we should reboot news around the simple idea of news written by experts. They must know the basic rules of journalism, imho that's much easier than the know-nothing journalist posing as everyman with a view from nowhere, trying to understand what they're writing about. They don't have any basis to judge, we give them far too much power. That system is rooted in a time when publishing was expensive but that hasn't been true for thirty years. the old system has run its course. This election, either way, is a lesson in how that system, if it ever worked, doesn't work today. The next news system will be sources going direct to interested readers.

Jay Rosen and I did a series of podcasts in the early teens called Rebooting the News. This was the basic premise. I believe more than ever that this is the best path for news going forward.

They did this at Wired for a while. I was invited to be a columnist when my main qualification was that I was an accomplished software developer. I think that's the way to go. Experts sharing their perspectives on current events.

Before Twitter existed, in 2002, I proposed to the NYT that they offer a blog to anyone who is quoted in a NYT article. If they had done this, the NYT would be what Twitter became, and it wouldn't now be owned by Elon Musk, for the benefit of humanity. I wish they had done it. It would have been a real moneymaker. And good for the flow of knowledge.

13:35

Sven Hoexter: Google CloudDNS HTTPS Records with ipv6hint [Planet Debian]

I naively provisioned an HTTPS record at Google CloudDNS like this via terraform:

resource "google_dns_record_set" "testv6" {
    name         = "testv6.some-domain.example."
    managed_zone = "some-domain-example"
    type         = "HTTPS"
    ttl          = 3600
    rrdatas      = ["1 . alpn=\"h2\" ipv4hint=\"198.51.100.1\" ipv6hint=\"2001:DB8::1\""]
}

This results in a permanent diff because the Google CloudDNS API seems to parse the record content, and stores the ipv6hint expanded (removing the :: notation) and in all lowercase as 2001:db8:0:0:0:0:0:1. Thus to fix the permanent diff we've to use it like this:

resource "google_dns_record_set" "testv6" {
    name = "testv6.some-domain.example."
    managed_zone = "some-domain-example"
    type = "HTTPS"
    ttl = 3600
    rrdatas = ["1 . alpn=\"h2\" ipv4hint=\"198.51.100.1\" ipv6hint=\"2001:db8:0:0:0:0:0:1\""]
}

Guess I should be glad that they already support HTTPS records natively, and not bicker too much about the implementation details.

12:56

CodeSOD: A Matter of Understanding [The Daily WTF]

For years, Victoria had a co-worker who "programmed by Google Search"; they didn't understand how anything worked, they simply plugged their problem into Google search and then copy/pasted and edited until they got code that worked. For this developer, I'm sure ChatGPT has been a godsend, but this code predates its wide use. It's pure "Googlesauce".

    StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append("SELECT * FROM TABLE1 WHERE COLUMN1 = 1 WITH UR");

    String sqlStr = stringBuffer.toString();
    ps = getConnection().prepareStatement(sqlStr);

    ps.setInt(1, code);

    rs = ps.executeQuery();

    while (rs.next())
    {
      count++;
    }

The core of this WTF isn't anything special- instead of running a SELECT COUNT they run a SELECT and then loop over the results to get the count. But it's all the little details in here which make it fun.

They start by using a StringBuffer to construct their query- not a horrible plan when the query is long, but this is just a single, simple, one-line query. The query contains a WITH clause, but it's in the wrong spot. Then they prepareStatement it, which does nothing, since this query doesn't contain any parameters (and also, isn't syntactically valid). Once it's prepared, they set the non-existent parameter 1 to a value- this operation will throw an exception because there are no parameters in the query.

Finally, they loop across the results to count.

The real WTF is that this code ended up in the code base, somehow. The developer said, "Yes, this seems good, I'll check in this non-functional blob that I definitely don't understand," and then there were no protections in place to keep that from happening. Now it falls to more competent developers, like Victoria, to clean up after this co-worker.

[Advertisement] Utilize BuildMaster to release your software with confidence, at the pace your business demands. Download today!

12:07

Sophos Versus the Chinese Hackers [Schneier on Security]

Really interesting story of Sophos’s five-year war against Chinese hackers.

11:28

Grrl Power #1301 – This looks like a job for the Riviera Kid! [Grrl Power]

There was a time in the era of competitive Quake 3 when I was young enough to have ridiculous reflexes and a DSL line giving me a sub-fifty ping. (Do you younguns still know what ping is? Everyone has broadband these days, and ping doesn’t really come up unless you insist on playing on a server on another continent for some reason.) Anyway, my favorite weapon in the game was the railgun. Hitscan for life, baby! The best thing about the combination of hitscan, young person reflexes, and minimal ping was that anytime anyone jumped in Quake 3, they had a predictable trajectory until they landed again. Granted, a jump in Q3 only took you off the ground for like 3/4 of a second, but it was enough. PEW! Or more like a PWEWP! sound.

My point with this is, Peggy waited till the RPG was at the top of that arc, rebounding from the bump in the terrain as the guy tried to bring it back on target. Basically it was in the most predictable spot it would ever be and moving the least it would ever be. I did google “will a grenade explode if you shoot it.” I mean, it seems obvious, but I wanted to not rely on every movie ever where someone shoots a grenade. The answer was “maybe?” Basically you have to ignite the explosives in the grenade, and just putting a hole in it or shattering it doesn’t guarantee anything. Maybe there’s a spark, but probably not. But if you hit the stuff inside the grenade that makes the grenade explode, then the grenade will probably explode. Again, it’s not a guarantee. I didn’t find any hard numbers, but I came away with the impression it was like a 40-ish percent chance, and maybe higher if the pin has been pulled and chemical things are starting to happen inside the grenade. I also stumbled into the “can you shoot a grenade out of the air” and the answer was basically, sure, if you’re a good shot. The issue is what happens if you do that. With a bullet, it’s likely to explode, if it’s a live grenade, if you hit it with some buckshot, it’s less likely to explode. Not that it won’t, just there’s less chance the exterior gets shredded and something ignites on the inside. Also, the chance of actually knocking it back exactly into to the lap of the person who threw it is best left to the movies. Like, in the history of warfare since hand grenades have existed, it’s probably happened at least once, but, yeah. Don’t count on it.

RPGs are basically the same as grenades, except they have propellant. That and launching them is what arms them. Though hopefully there’s like a one second delay after you fire so you don’t do something like accidentally shoot the hood of your truck when it hits a bump and you blow your everything. I assume “better” RPGs do that, and old school RPG7 doesn’t have a lot checkboxes that would help them pass and OSHA inspection.


The new vote incentive is up!

Dabbler went somewhere tropical, in a very small bikini. As you might guess, it doesn’t stay on for long, which of course, you can see over at Patreon. Also she has an incident with “lotion,” and there’s a bonus comic page as well.

 

 


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

09:28

At all costs [Seth's Blog]

Principles have a priority.

Isaac Asimov’s three rules of robotics were:

First Law
A robot may not injure a human being or, through inaction, allow a human being to come to harm.

Second Law
A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.

Third Law
A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.

We’d like to think we can honor everything we believe in, every time, but of course, the difficult work of having principles is that we must put some ahead of others.

If one of your principles is, “win at all costs,” then you have no other principles.

08:21

I Scream [Penny Arcade]

New Comic: I Scream

08:07

Secrets, p16 [Ctrl+Alt+Del Comic]

60 hours left! 

The post Secrets, p16 appeared first on Ctrl+Alt+Del Comic.

Emuskulation [George Monbiot]

Elon Musk threatens to do to democracy what he did to Twitter.

By George Monbiot, published in the Guardian, 2nd November 2024  

This is what happens when successive US governments fail to tackle inequality. While millions of people live in poverty, a handful grow unimaginably rich. Wealth begets wealth, and they acquire political power to match. It was inevitable that one of them – now the richest man on Earth – would launch what looks like a bid for world domination.

A vote for Donald Trump next week is a vote for Elon Musk. Just as Trump is using Musk, Musk could be using Trump as a springboard to perhaps even greater power than the US president can wield. Musk’s secret conversations with Vladimir Putin, reported by the Wall Street Journal last week, and his contacts with other extremist world leaders, suggest a pattern of power-seeking that could be even more alarming than the prospect of a second Trump presidency.

Trump, if he wins, will do to the nation what Musk did to Twitter: the US will be emuskulated. What this means is that those with the power to swarm, harass and crush people who do not share their noxious ideology will be unleashed.

Elon Musk claims to be a “free speech absolutist”. But his absolutism seems to extend only to his allies. Since he bought Twitter and renamed it X, the platform has complied with 83% of requests by governments for the censorship or surveillance of accounts. When the Turkish president, Recep Tayyip Erdoğan, demanded the censorship of his opponents before the last general election, the platform obliged. When Indian government officials asked it to remove a hostile BBC documentary, X did as they asked, and later deleted the accounts of many critics of the prime minister, Narendra Modi.

Last month, X blocked links to a dossier about Trump’s running mate, JD Vance, and suspended the account of the journalist who revealed it. Musk has sued organisations that criticise him. Because the most vicious and antisocial people – racists, antisemites, misogynists, homophobes, even outright Nazis – have been reinstated and often boosted, millions of other users have been driven from the platform, their own free speech diminished. Musk’s own posts are reportedly amplified a thousandfold by a boutique algorithm. Free speech absolutism? My left foot.

Now he has bent his immense wealth, power and blatant double standards to a frantic effort to get Trump elected. Some of his tactics – cash rewards and cash prizes – look to me like attempts to buy votes and interfere in an election. His lawyers wereable to prevent him having to attend court this week for a hearing challenging these tactics: another privilege of wealth. He has used his X account to spread rampant misinformation on Trump’s behalf, giving him many millions of dollars’ worth of advertising. He has poured $118m into his pro-Trump super Pac (political action committee).

What would the world’s richest man gain from the emuskulation of US – and perhaps global – politics? He would gain what capital has sought since workers acquired the vote: the truncation of democracy. Democracy is the problem capital keeps trying to solve. Why? Because it ensures that workers have rights and fair wages; that the living world has some (though never enough) protections; that we cannot be ripped off, poisoned and robbed without restraint.

Capitalism has used two powerful tools to try to solve its problem: fascism and neoliberalism. But now, though drawing on both those ideologies, it reverts to an older and cruder mode: oligarchy. Why, the billionaires might wonder, should they rely on intermediaries to wield political power? After all, in every other sphere, the world bows to them, not to their concierges. This, I think, is where Musk and some of his fellow tech authoritarians have been heading.

A Trump victory would allow Musk to escape the regulators with which he is often in conflict. In fact, if he takes up Trump’s offer of running a government efficiency commission, Musk becomes his own regulator, able to erase the rules that make the difference between a good society and barbarism.

But Trump’s election might also permit even greater opportunities. Musk controls key strategic and military assets, such as SpaceX satellite launchers and the Starlink internet system. As Ukraine discovered to its cost last year, he can switch them off at whim. The kind of decision-making powerful states deploy has been privatised. The Kremlin is reported to have asked him to withhold Starlink access from Taiwan, as a favour to the Chinese government. Terrestrial broadband operators claim that Starlink could interfere with and degrade their own systems. (Starlink has denied this). It is not hard to see how his power could grow to the point at which governments feel obliged to do as he demands.

He might not look the part. Villains bent on world domination are meant to be suave, laconic, self-possessed. Musk dresses like an attention-hungry teenager and behaves accordingly. Yet he has been equipped with the means to multiply his power beyond any that a plutocrat has wielded in the democratic era.

For decades now, the centrist pact with capital has worked as follows: we might seek half-heartedly to improve the lives of people at the bottom, but we will do almost nothing to hold down those at the top. As a short-term tactic it worked: Rupert Murdoch and other members of the plutocrats’ trade union struck an uneasy truce with Tony Blair, Bill Clinton and their ilk. But the long-term result is that the ultra-rich became so wealthy that they could present a direct threat to sovereign nations, even to the most powerful nation of all. Some of us have spent decades warning that this was the likely outcome: appeasement makes your opponents more powerful. But our governments claimed they were simply being “pragmatic”: it didn’t matter how rich some people became, as long as the lot of the poor improved.

Decades of studies, some of which were summarised 15 years ago in The Spirit Level by Kate Pickett and Richard Wilkinson, show what nonsense this is. A highly unequal society, whatever its absolute levels of wealth and poverty, is devastating for social outcomes, for wellbeing, cohesion and democracy. But “pragmatism” prevailed, and turned out not to be pragmatic at all. The slippage from democracy to oligarchy should surprise no one.

So now we face a generalised emuskulation: of public life, of trust, of kindness, of mutual aid, of a world in which the poor could aspire to something better, and in which all of us could aspire to a healthy living planet. Governments that have not yet fully succumbed must do what should have been done long ago: make the poor richer, and the very rich poorer.

www.monbiot.com

05:49

Girl Genius for Monday, November 04, 2024 [Girl Genius]

The Girl Genius comic for Monday, November 04, 2024 has been posted.

01:56

No Touchy [QC RSS]

A kinder, gentler Faye(?)

00:49

Kernel prepatch 6.12-rc6 [LWN.net]

The 6.12-rc6 kernel prepatch is out for testing. Linus says: "Another week, another rc. Nothing odd or special seems to be going on - this may be a bit on the bigger side for an rc6, but not hugely so, and nothing stands out."

00:21

Sunday, 03 November

19:42

Junichi Uekawa: Doing more swimming in everyday life for the past few months. [Planet Debian]

Doing more swimming in everyday life for the past few months. Seems like I am keeping that up.

OSNews fundraising goal reached in less than a week [OSnews]

It’s been less than a week, and late Friday night we reached the fundraiser goal of €2500 (it sat at 102% when I closed it) on Ko-Fi! I’m incredibly grateful for each and every donation, big or small, and every new Patreon that joined our ranks. It’s incredible how many of you are willing to support OSNews to keep it going, and it means the absolute world to me. Hopefully we’ll eventually reach a point where monthly Patreon income is high enough so we can turn off ads for everyone, and be fully free from any outside dependencies.

Of course, it’s not just those that choose to support us financially – every reader matters, and I’m very thankful for each and every one of you, donor/Patreon or not. The weekend’s almost over, so back to regular posting business tomorrow. I wish y’all an awesome Sunday evening.

16:49

Meanwhile in France [Whatever]

They’ve been keeping me busy here at the Utopiales Festival, with panels and signings and meeting booksellers and fighting evil demons that have arisen from the hellish underworld below Nantes, France (one of these is a lie, guess which one). It’s been just lovely, I have to say, and people here have been a delight. I just want you all to know I’m still alive and the demons have not gotten me yet. What a relief!

— JS

16:14

Link [Scripting News]

About polls, I learned how they work and how much they are a Ouija board, where the reports are tuned up based on the pollsters assumptions about who are the real voters, and account for the limited people who can be polled. They're trying to estimate what millions of people will do by talking with a few hundred. So they read each others' work, and try not to be too far off the consensus. It's at best an art, at worst they're just press releases designed to get the ad money to flow in certain directions. Don't overlook that the money is flowing to the same businesses that are choosing which polls to report on. Most of what the news orgs report on, it makes it into a sport like the NBA or MLB, but there at least there's objective news to report on, you know -- the score of each game, how many runs were scored, who got injured, fired, traded. In politics, there is no objective news, and if there were, the journalists we have don't report it. There's a lot of inputs that are connected to the outputs, conflicts of interest everywhere. Even so, the top item on Memeorandum is about a poll in Iowa that says Harris is ahead. Iowa was never thought to be in play. Yes, I too am addicted. Endlessly fascinated. Maybe we'll survive next week after all? Hope.

Link [Scripting News]

Heard on Facebook: Next week has been exhausting. Yes.

15:28

Could a Musk buy Bluesky? [Scripting News]

Cory Doctorow: "I will never again devote my energies to building up an audience on a platform whose management can sever my relationship to that audience at will." It's a good practice, and while I completely support it, I am part of several communities that could remove me without recourse. I do it because I value the people in the community, and feel that life is too short to wait for everyone to get it right.

Doctorow was writing about Bluesky, and once again, on Bluesky a discussion starts on what it would take for Bluesky to attract developers, and each time I am told that they have done enough, and I go away thinking that their pitch is a scam, and they're building value in a user base that they will sell. They certainly could do it, and for all we know the founders may have already sold some of their stock in the latest investment round which valued the company at $x billion. (I did a search to find the evaluation but it appears to have not been announced.)

I gave them a roadmap, again, of how to demonstrate that they're open, and finally concluded that the only way to really do it is to "provide a download that you can install on any popular operating system to get an instant blue sky network, running on its own without any help from anyone else. Then you can claim to be really open and until then there will be a lot of confusion." (And I was generous at that. More accurately, people with experience in tech will be certain this is yet another deal where the founders get rich, where the users are the product and have read too much into their promise of being open.)

I'm still on Bluesky but I expect them to be another Twitter, which btw had an open API too, and it's pretty good, but they never offered the option of people running their own twitters. That would have been good protection against a Musk buying them out and turning us into pawns in his plan for world domination. Do we really want to help someone else build one of those?

In early 2017 I observed that Twitter had just been used to route around journalism and elect a president. This value wasn't on their balance sheet as an asset. I felt its stock was vastly underpriced. Exactly as it turned out when Musk bought it. Everyone still thinks he paid too much, at this moment it could possibly gain him control of part of the US government's $6 trillion per year budget early next year, and if they start selling the assets of the government he could be in the best position to buy them at pennies on the dollar, or take a percentage of each saleAt this point it doesn’t matter what the NYT says. Either way they jumped the shark for the last time in this election.. He could probably start borrowing against it the day after the election is called for Trump.

In the title I ask if a Musk could buy Bluesky, it's possible they have a way to prevent that in the design of their corporation, that's why it's a question. But if the price were right maybe the founders would sell out even if they didn't have to.

11:07

Steinar H. Gunderson: Ultimate rules as a service [Planet Debian]

Since WFDF changed their ultimate rules web site to be less-than-ideal (in the name of putting everything into Wordpress…), I made my own, at urules.org. It was a fun journey; I've never fiddled with PWAs before, and I was a bit surprised how low-level it all was. I assumed that since my page is just a bunch of HTML files and ~100 lines of JS, I could just bundle that up—but no, that is something they expect a framework to do for you.

The only primitive you get is seemingly that you can fire up your own background service worker (JS running in its own, locked-down context) and that gets to peek at every HTTP request done and possibly intercept it. So you can use a Web Cache (seemingly a separate concept from web local storage?), insert stuff into that, and then query it to intercept requests. It doesn't feel very elegant, perhaps?

It is a bit neat that I can use this to make my own bundling, though. All the pages and images (painfully converted to SVG to save space and re-flow for mobile screens, mostly by simply drawing over bitmaps by hand in Inkscape) are stuck into a JSON dictionary, compressed using the slowest compressor I could find and then downloaded as a single 159 kB bundle. It makes the site actually sort of weird to navigate; since it pretty quickly downloads the bundle in the background, everything goes offline and the speed of loading new pages just feels… off somehow. As if it's not a Serious Web Page if there's no load time.

Of course, this also means that I couldn't cache PNGs, because have you ever tried to have non-UTF-8 data in a JSON sent through N layers of JavaScript? :-)

Guido Günther: Free Software Activities October 2024 [Planet Debian]

Another short status update of what happened on my side last month. Besides a phosh bugfix release improving text input and selection was a prevalent pattern again resulting in improvements in the compositor, the OSK and some apps.

phosh

  • Install gir (MR). Needed for e.g. Debian to properly package the Rust bindings.
  • Try harder to find an app icon when showing notifications (MR)
  • Add a simple Pomodoro timer plugin (MR)
  • Small screenshot manager fixes (MR)
  • Tweak portals configuration (MR)
  • Consistent focus style on lock screen and settings (MR). Improves the visual appearance as the dotted focus frame doesn't match our otherwise colored focus frames
  • Don't focus buttons in settings (MR). Improves the visual appearance as attention isn't drawn to the button focus.
  • Close Phosh's settings when activating a Settings panel (MR)

phoc

  • Improve cursor and cursor theme handling, hide mouse pointer by default (MR)
  • Don't submit empty preedit (MR)
  • Fix flickering selection bubbles in GTK4's text input fields (MR)
  • Backport two more fixes and release 0.41.1 (MR)

phosh-mobile-settings

  • Allow to select default text completer (MR, MR)
  • Don't crash when we fail to load a pref plugin (MR)

libphosh-rs

  • Update with current gir and allow to use status pages (MR)
  • Expose screenshot manager and build without warnings (MR). (Improved further by a follow up MR from Sam)
  • Fix clippy warnings and add clippy to CI (MR)

phosh-osk-stub

  • presage: Always set predictors (MR). Avoids surprises with unwanted predictors.
  • Install completer information (MR)
  • Handle overlapping touch events (MR). This should improve fast typing.
  • Allow plain ctrl and alt in the shortcuts bar (MR
  • Use Adwaita background color to make the OSK look more integrated (MR)
  • Use StyleManager to support accent colors (MR)
  • Fix emoji section selection in RTL locales (MR)
  • Don't submit empty preedit (MR). Helps to better preserve text selections.

phosh-osk-data

  • Add scripts to build word corpus from Wikipedia data (MR) See here for the data.

xdg-desktop-portal-phosh

  • Release 0.42~rc1 (MR)
  • Fix HighContrast (MR)

Debian

  • Collect some of the QCom workarounds in a package (MR). This is not meant to go into Debian proper but it's nicer than doing all the mods by hand and forgetting which files were modified.
  • q6voiced: Fix service configuration (MR)
  • chatty: Enable clock test again (MR), and then unbreak translations (MR)
  • phosh: Ship gir for libphosh-rs (MR)
  • phoc: Backport input method related fix (MR)
  • Upload initial package of phosh-osk-data: Status in NEW
  • Upload initial package of xdg-desktop-portal-pohsh: Status in NEW
  • Backport phosh-osk-stub abbrev fix (MR
  • phoc: Update to 0.42.1 (MR
  • mobile-tweaks: Enable zram on Librem 5 and PP (MR)

ModemManager

  • Some further work on the Cell Broadcast to address comments MR)

Calls

  • Further improve daemon mode (MR) (mentioned last month already but got even simpler)

GTK

  • Handle Gtk{H,V}Separator when migrating UI files to GTK4 (MR)

feedbackd

  • Modernize README a bit (MR)

Chatty

  • Use special event for SMS (MR)
  • Another QoL fix when using OSK (MR)
  • Fix printing time diffs on 32bit architectures (MR)

libcmatrix

  • Use endpoints for authenticated media (MR). Needed to support v1.11 servers.

phosh-ev

  • Switch to GNOME 47 runtime (MR)

git-buildpackage

  • Don't use deprecated pkg-resources (MR)

Unified push specification

  • Expand on DBus activation a bit (MR)

swipeGuess

  • Small build improvement and mention phosh-osk-stub (Commit)

wlr-clients

  • Fix -o option and add help output (MR)

iotas (Note taking app)

  • Don't take focus with header bar buttons (MR). Makes typing faster (as the OSK won't hide) and thus using the header bar easier

Flare (Signal app)

  • Don't take focus when sending messages, adding emojis or attachments (MR). Makes typing faster (as the OSK won't hide) and thus using those buttons easier

xdg-desktop-portal

  • Use categories that work for both xdg-spec and the portal (MR)

Reviews

This is not code by me but reviews on other peoples code. The list is fairly incomplete, hope to improve on this in the upcoming months:

  • phosh-tour: add first login mode (MR)
  • phosh: Animate swipe closing notifications (MR)
  • iio-sensor-proxy: Report correct value on claim (MR)
  • iio-sensor-proxy: face-{up,down} (MR)
  • phosh-mobile-settings: Squeekboad scaling (MR)
  • libcmatrix: Misc cleanups/fixes (MR)
  • phosh: Notification separator improvements (MR
  • phosh: Accent colors (MR

Help Development

If you want to support my work see donations. This includes a list of hardware we want to improve support for. Thanks a lot to all current and past donors.

10:21

Why be an early bird, if you don’t want worms? | David Mitchell [David Mitchell | The Guardian]

Network Rail’s proposal for easing the ‘Euston rush’ is typical of a world that encourages us to plan our lives away

Good news for regular users of Euston station in London! One day they will die. Then they won’t have to go to Euston station ever again. Most Observer readers have probably been to Euston station at some point in their lives but I do advise any of you who haven’t to stick that fact on the list the next time you count your blessings. It’s horrible. Its architects have managed to design a place compared with which arriving in Birmingham seems nice.

Nevertheless, humanity being such a relentlessly self-defeating species, this nasty building bizarrely suffers from a phenomenon known as the “Euston rush”, when it becomes even more unpleasant, and potentially dangerous, because there are so many people there. So many thousands of people desperately trying to be in Euston station for thousands of different reasons of their own. But also, in a way, the same reason: they go to Euston station in the hope of leaving it as soon as possible. So a glimmer of sanity there.

Continue reading...

10:14

The problem with ‘very’ [Seth's Blog]

It’s a lazy amplifier.

“Very” can modify almost any adjective, but it might not deliver our intended message.

Putting it in front of a positive like “charming” or “kind” or “generous” can make it clear that we mean what we said, but more so.

But, placed in front of a description of otherness, it can push the person we’re describing into a corner. “They have very pointy ears” or “They are very midwestern in their approach to a problem,” communicates that we’re highlighting and objectifying, not celebrating. We often do this when the amplifier isn’t needed or even accurate. It’s a cheap hack to remind people that we’re not like the person we’re talking about.

If you’re saying something nice, it’s helpful to choose a memorable amplifier like “extraordinarily” or “off-the-charts.” Or just enunciate and emphasize your compliment.

If you’re describing someone in a way that labels them, consider why, and leave it out.

If removing an amplifier like ‘very’ makes the message clearer or consistent, why not simply skip it?

Our words tell a story. Even when they’re lazy.

04:56

Jaldhar Vyas: Making America Great Again [Planet Debian]

Making America Great Again

Justice For Peanut

Some interesting takeaways (With the caveat that exit polls are not completely accurate and we won't have the full picture for days.)

  • President Trump seems to have won the popular vote which no Republican has done I believe since Reagan.

  • Apparently women didn't particularly care about abortion (CNN said only 14% considered it their primary issue) There is a noticable divide but it is single versus married not women versus men per se.

  • Hispanics who are here legally voted against Hispanics coming here illegally. Latinx's didn't vote for anything because they don't exist.

  • The infamous MSG rally joke had no effect on the voting habits of Puerto Ricans.

  • Republicans have taken the Senate and if trends continue as they are will retain control of the House of Representatives.

  • President Biden may have actually been a better candidate than Border Czar Harris.

Saturday, 02 November

21:56

Dirk Eddelbuettel: Rcpp 1.0.13-1 on CRAN: Hot Fix [Planet Debian]

rcpp logo

A hot-fix release 1.0.13-1, consisting of two small PRs relative to the last regular CRAN release 1.0.13, just arrived on CRAN. When we prepared 1.0.13, we included a change related to the ‘tightening’ of the C API of R itself. Sadly, we pinned an expected change to ‘comes with next (minor) release 4.4.2’ rather than now ‘next (normal aka major) release 4.5.0’. And now that R 4.4.2 is out (as of two days ago) we accidentally broke building against the header file with that check. Whoops. Bugs happen, and we are truly sorry—but this is now addressed in 1.0.13-1.

The normal (bi-annual) release cycle will resume with 1.0.14 slated for January. As you can see from the NEWS file of the development branch, we have a number of changes coming. You can safely access that release candidate version, either off the default branch at github or via r-universe artifacts.

The list below details all changes, as usual. The only other change concerns the now-mandatory use of Authors@R.

Changes in Rcpp release version 1.0.13-1 (2024-11-01)

  • Changes in Rcpp API:

    • Use read-only VECTOR_PTR and STRING_PTR only with with R 4.5.0 or later (Kevin in #1342 fixing #1341)
  • Changes in Rcpp Deployment:

    • Authors@R is now used in DESCRIPTION as mandated by CRAN

Thanks to my CRANberries, you can also look at a diff to the previous release Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page. Bugs reports are welcome at the GitHub issue tracker as well (where one can also search among open or closed issues).

If you like this or other open-source work I do, you can sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

20:42

Joe Marshall: Don't Try to Program in Lisp [Planet Lisp]

A comment on my previous post said,

The most difficult thing when coming to a different language is to leave the other language behind. The kind of friction experienced here is common when transliterating ideas from one language to another. Go (in this case) is telling you it just doesn't like to work like this.
Try writing simple Go, instead of reaching for Lisp idioms. Then find the ways that work for Go to express the concepts you find.

That's not at all how I approach programming.

A friend of mine once paid me a high compliment. He said, “Even your C code looks like Lisp.”

When I write code, I don't think in terms of the language I'm using, I think in terms of the problem I'm solving. I'm a mostly functional programmer, so I like to think in terms of functions and abstractions. I mostly reason about my code informally, but I draw upon the formal framework of Lambda Calculus. Lambda Calculus is a simple, but powerful (and universal) model of computation.

Programming therefore becomes a matter of expressing the solution to a problem with the syntax and idioms of the language I'm using. Lisp was inspired by Lambda Calculus, so there is little friction in expressing computations in Lisp. Lisp is extensible and customizable, so I can add new syntax and idioms as desired.

Other languages are less accommodating. Some computations are not easily expressable in the syntax of the language, or the semantics of the language are quirky and inconsistent. Essentially, every general purpose fourth generation programming language can be viewed as a poorly-specified, half-assed, incomplete, bug-ridden implementation of half of Common Lisp. The friction comes from working around the limitations of the language.

18:21

Link [Scripting News]

People may question my credentials as a language designer. I've designed a very innovative system that unfortunately the academics don't think is worth studying. It's utterly ridiculous. Who says you can only learn from systems developed at big companies or universities. I cover a lot of ground, it's true -- no one gave me permission to create Frontier, but I didn't feel I needed permission. Or funding for that matter. I think what happened is Apple positioned us as less significant than their system scripting language, and people just accepted that, when Frontier is a far superior system. Anyway, the ideas are there anyway, and you're welcome to learn from them.

16:07

Link [Scripting News]

See also: Rules for standards-makers. Language design and protocol design are the same thing.

Link [Scripting News]

Must-read: “It’s extremely difficult for decent people to accept that there are some people who simply do not share their values about truth and basic human kindness. This is what the sociopath counts on.”

15:21

Link [Scripting News]

Programming language design should follow the half of Postel's Principle that says be "conservative in what you send." There should be one way to do anything, not many. That way I can include your code in mine and vice versa. I can understand what you're doing. Tools can be developed that make it even easier to do things the only way they work. New programming languages if they really are necessary should strive to simplify the programming model, there should be less things for the developer to worry about, the more easily new ideas can be developed, the less attention you have to pay to how you'll do something over what it does. I actually don't support the other half of Postel, in everything but user interface where I do support it. I don't think in general software interfaces should be liberal with what they understand because that defeats the first half. They sort of zero each other out.

Government should work quietly [Scripting News]

I kept waiting for Kamala to say what we're not going back to is Trump. We've paid our dues. He's had enough of our attention.

Government should do its work quietly, making things better for the people and that's all, and until there's a crisis that demands our attention, stays out of the way.

Keep the drama on Netflix and HBO.

My friend who I don't understand [Scripting News]

The most depressing thing last night for me was reading that a longtime friend voted for the worst candidate they've ever voted for because the other one was worse. They wouldn’t say who they actually voted for. This is what we’ll be left with as a country when all this is done.

I gave another $100 to Harris to compensate, and of course voted straight Democratic on Thursday. Unlike my friend I was proud to vote for her. The alternative, after what we lived through between 2017 and 2021, to choose to go through that again, hard to imagine the horror.

And of course that’s assuming he voted for Harris.

13:35

Pluralistic: Bluesky and enshittification (02 Nov 2024) [Pluralistic: Daily links from Cory Doctorow]


Today's links



A painting of Ulysses tied to the mast, beset by flying sirens. The sirens' wings have been replaced with the Bluesky butterfly wing logo. On the deck of Ulysses' trireme is a giant poop emoji.

Bluesky and enshittification (permalink)

I would like to use Bluesky. They've done a bunch of seriously interesting technical work on moderation and ranking that I truly admire, and I've got lots of friends there who really enjoy it.

But I'm not on Bluesky and I don't have any plans to join it anytime soon. I wrote about this in 2023: I will never again devote my energies to building up an audience on a platform whose management can sever my relationship to that audience at will:

https://pluralistic.net/2023/08/06/fool-me-twice-we-dont-get-fooled-again/

When a platform can hold the people you care about or rely upon hostage – when it can credibly threaten you with disconnection and exile – that platform can abuse you in lots of ways without losing your business. In other words, they can enshittify their service:

https://pluralistic.net/2024/08/17/hack-the-planet/#how-about-a-nice-game-of-chess

I appreciate that the CEO of Bluesky, Jay Graber, has evinced her sincere intention never to enshittify Bluesky and I believe she is totally sincere:

https://www.wired.com/story/bluesky-ceo-jay-graber-wont-enshittify-ads/

But here's the thing: all those other platforms, the ones where I unwisely allowed myself to get locked in, where today I find myself trapped by the professional, personal and political costs of leaving them, they were all started by people who swore they'd never sell out. I know those people, the old blogger mafia who started the CMSes, social media services, and publishing platforms where I find myself trapped. I considered them friends (I still consider most of them friends), and I knew them well enough to believe that they really cared about their users.

They did care about their users. They just cared about other stuff, too, and, when push came to shove, they chose the worsening of their services as the lesser of two evils.

Like: when your service is on the brink of being shut down by its investors, who demand that you compromise on privacy, or integrity, or quality, in some relatively small way, are you really going to stand on principle? What about all the users who won't be harmed by the compromise, but will have their communities and online lives shattered if you shut down the company? What about all the workers who trusted you, whose family finances will be critically imperilled if you don't compromise, just a little. What about the "ecosystem" partners who've bet on your service, building plug-ins, add-ons and services that make your product better? What about their employees and their employees' families?

Maybe you tell yourself, "If I do this, I'll live to fight another day. I can only make the service better for its users if the service still exists." Of course you tell yourself that.

I have watched virtually every service I relied on, gave my time and attention to, and trusted, go through this process. It happened with services run by people I knew well and thought highly of.

Enshittification can be thought of as the result of a lack of consequences. Whether you are tempted by greed or pressured by people who have lower ethics than you, the more it costs to compromise, the fewer compromises you'll make.

In other words, to resist enshittification, you have to impose switching costs on yourself.

That's where federation comes in. On Mastodon (and other services based on Activitypub), you can easily leave one server and go to another, and everyone you follow and everyone who follows you will move over to the new server. If the person who runs your server turns out to be imperfect in a way that you can't endure, you can find another server, spend five minutes moving your account over, and you're back up and running on the new server:

https://pluralistic.net/2023/03/04/pick-all-three/#agonism

Any system where users can leave without pain is a system whose owners have high switching costs and whose users have none. An owner who makes a bad call – like removing the block function say, or opting every user into AI training – will lose a lot of users. Not just those users who price these downgrades highly enough that they outweigh the costs of leaving the service. If leaving the service is free, then tormenting your users in this way will visit in swift and devastating pain upon you.

That not only helps you steer clear of rationalizing your way into a bad compromise: it also stops your investors and other people with leverage over you from pressuring you into taking actions that harm your users. These devils only sit on your shoulder, whispering temptations and threats because they think that you can make things worse without spoiling their investment. They're not cruel, they're greedy. They will only insist on enshittification that they believe they can profit from. If they understand that forcing you to enshittify the service will send all your users packing and leave them with nothing, they will very likely not force you to wreck your service.

And of course, if they are so greedy that they force your hand anyway, then your users will be able to escape. Your service will be wrecked and you'll be broke, which sucks for you, but you're just one person and your pain is vastly outweighed by the relief for the millions of people who escape your service when it goes sour.

There's a name for this dynamic, from the world of behavioral economics. It's called a "Ulysses Pact." It's named for the ancient hacker Ulysses, who ignored the normal protocol for sailing through the sirens' sea. While normie sailors resisted the sirens' song by filling their ears with wax, Ulysses instead had himself lashed to the mast, so that he could hear the sirens' song, but could not be tempted into leaping into the sea, to be drowned by the sirens.

Whenever you take a measure during a moment of strength that guards against your own future self's weakness, you enter into a Ulysses Pact – think throwing away the Oreos when you start your diet.

There is no such thing as a person who is immune to rationalization or pressure. I'm certainly not. Anyone who believes that they will never be tempted is a danger to themselves and the people who rely on them. A belief you can never be tempted or coerced is like a belief that you can never be conned – it makes you more of a mark, not less.

Bluesky has many federated features that I find technically admirable. I only know the CEO there slightly, but I have nothing but good opinions of her. At least one of the board members there, Mike Masnick, is one of my oldest friends and comrades in the fights for user rights. We don't agree on everything, but I trust him implicitly and would happily give him the keys to my house if he needed a place to stay or even the password for my computer before I had major surgery.

But even the best boards can make bad calls. It was just a couple years ago that we had to picket to stop the board of ISOC – where I had several dear old friends and comrades – from selling control of every .ORG domain to a shadowy hedge-fund run by mustache-twirling evil billionaires:

https://www.eff.org/deeplinks/2020/12/how-we-saved-org-2020-review

Bluesky lacks the one federated feature that is absolutely necessary for me to trust it: the ability to leave Bluesky and go to another host and continue to talk to the people I've entered into community with there. While there are many independently maintained servers that provide services to Bluesky and its users, there is only one Bluesky server. A federation of multiple servers, each a peer to the other, has been on Bluesky's roadmap for as long as I've been following it, but they haven't (yet) delivered it.

That was worrying when Bluesky was a scrappy, bootstrapped startup with a few million users. Now it has grown to over 13 million users, and it has taken on a large tranche of outside capital:

https://fediversereport.com/on-bluesky-and-enshittification/

Plenty of people have commented that now that a VC is holding Bluesky's purse-strings, enshittification will surely follow (doubly so because the VC is called "Blockchain Capital," which, at this point, might as well be "Grifty Scam Caveat Emptor Capital"). But I don't agree with this at all. It's not outside capital that leads to enshittification, it's leverage that enshittifies a service.

A VC that understands that they can force you to wreck your users' lives is always in danger of doing so. A VC who understands that doing this will make your service into an empty – and thus worthless – server is far less likely to do so (and if they do, at least your users can escape).

My publishing process is a lot of work and adding another service to it represents a huge amount of future labor:

https://pluralistic.net/2021/01/13/two-decades/#hfbd

But I would leap into Bluesky and gladly taken on all that extra work, every day – if I knew that I couldn't get trapped there.

I don't know why Bluesky hasn't added the federation systems that would enable freedom of exit to its service. Perhaps there are excellent technical reasons to prioritize rolling out the other systems they've created so far. Frankly, it doesn't matter. So long as Bluesky can be a trap, I won't let myself be tempted. My rule – I don't join a service that I can't leave without switching costs – is my Ulysses Pact, and it's keeping me safe from danger I've sailed into too many times before.


Hey look at this (permalink)


Hoisted from the comments (permalink)

A crop of the central figure from Norman Rockwell's 'Freedom of Speech,' depicting a man standing up and speaking at a town meeting.

Tallsimon on "Conspiratorialism as a material phenomenon": When you “vote with your wallet” you try to control for some future outcome, but if your wallet isn’t big enough to survive losing a big bet, then you are constrained to go with a certain outcome. That can be an outcome that is certainly worse for you. The rational, measurable cost of the randomness can be so high that taking a loss makes sense.

https://chinwag.pluralistic.net/t/pluralistic-conspiratorialism-as-a-material-phenomenon-29-oct-2024/1356/4



A Wayback Machine banner.

This day in history (permalink)

#20yrsago Diebold voting machines hacked https://web.archive.org/web/20041102084048/http://www.blackboxvoting.org/?q=node/view/78#breaking

#15yrsago Newspaper columnist quits over paywall https://www.nytimes.com/2009/11/02/business/media/02elderly.html

#15yrsago Congressional record exposes military officers to identity theft, covers up https://web.archive.org/web/20100506125320/http://bulk.resource.org/courts.gov/foia/gov.ftc_20081117_from.pdf

#15yrsago Hallowe’en night out as floppy disk and XKCD Cory https://www.flickr.com/photos/24876360@N03/4068253019/in/photostream/

#15yrsago Mechanical computer uses matchboxes and beans to learn Tic-Tac-Toe http://shorttermmemoryloss.com/menace/

#15yrsago Elegy Beach: sequel to Ariel, a sword-and-sorcery post-apocalyptic adventure story about the reinvention of software in the age of magic https://memex.craphound.com/2009/11/02/elegy-beach-sequel-to-ariel-a-sword-and-sorcery-post-apocalyptic-adventure-story-about-the-reinvention-of-software-in-the-age-of-magic/

#10yrsago UK cultural institutions leave their WWI cases empty to protest insane copyright https://web.archive.org/web/20141105051638/http://www.cilip.org.uk/cilip/news/campaign-free-our-history-reform-copyright

#10yrsago FBI secretly seeking legal power to hack any computer, anywhere https://www.theguardian.com/us-news/2014/oct/29/fbi-powers-hacking-computers-surveillance

#10yrsago 42 rich white people account for 1/3 of Super PAC spending https://www.thenation.com/article/archive/whos-buying-midterm-elections-bunch-old-white-guys/

#10yrsago Philadelphia schools have $5/student/year for supplies https://www.salon.com/2014/11/01/we_must_still_hate_our_kids_philadelphia_and_education_reformers_fight_demented_war_on_elementary_schools/

#10yrsago Mechwarrior dad/baby costume https://www.youtube.com/watch?v=QIln1LTtvzc


Upcoming appearances (permalink)

A photo of me onstage, giving a speech, holding a mic.



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)

  • Picks and Shovels: a sequel to "Red Team Blues," about the heroic era of the PC, Tor Books, February 2025
  • Unauthorized Bread: a middle-grades graphic novel adapted from my novella about refugees, toasters and DRM, FirstSecond, 2025



Colophon (permalink)

Today's top sources:

Currently writing:

  • Enshittification: a nonfiction book about platform decay for Farrar, Straus, Giroux. Friday's progress: 848 words (76255 words total).
  • 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: Spill, part four (a Little Brother story) https://craphound.com/littlebrother/2024/10/28/spill-part-four-a-little-brother-story/


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

13:21

Bug or intentional? macOS 15.1 completely removes ability to launch unsigned applications [OSnews]

Many MacOS users are probably used by now to the annoyance that comes with unsigned applications, as they require a few extra steps to launch them. This feature is called Gatekeeper and checks for an Apple Developer ID certificate. Starting with MacOS Sequoia 15, the easy bypassing of this feature with e.g. holding Control when clicking the application icon is now no longer an option, with version 15.1 disabling ways to bypass this completely. Not unsurprisingly, this change has caught especially users of open source software like OpenSCAD by surprise, as evidenced by a range of forum posts and GitHub tickets.

↫ Maya Posch at Hackaday

It seems Apple has disabled the ability for users to bypass application signing entirely, which would be just the next step in the company’s long-standing effort to turn macOS into iOS, with the same, or at least similar, lockdowns and restrictive policies. This would force everyone developing software for macOS to spend €99 per year in order to get their software signed, which may not be a realistic option for a lot of open source software.

Before macOS 15.0, you could ctrl+right-click an unsigned application and force it to run. In macOS 15.0, Apple removed the ability to do this; instead, you had to try and open the application (which would fail), and then open System Settings, go to Privacy & Security, and click the “Open Anyway” button to run the application. Stupidly convoluted, but at least it was possible to run unsigned applications.

In macOS 15.1, however, even this convoluted method no longer seems to be working. When you try and launch an unsigned application in macOS 15.1, you get a dialog that reads The application “Finder” does not have permission to open “(null)”, and no button to open the application anyway appears under Privacy & Security. The wording of the dialog would seem to imply this is a bug, but Apple’s lack of attention to UI detail in recent years means I wouldn’t be surprised if this is intentional.

This means that the only way to run unsigned applications on macOS 15.1 is to completely disable System Integrity Protection and Gatekeeper. To do this, you have to boot into recovery mode, open the terminal, run the command sudo spctl --master-disable, reboot. However, I do not consider this a valid option for 99.9% of macOS users, and having to disable complex stuff like this through recovery mode and several reboots just to launch an application is utterly bizarre.

For those of you still stuck on macOS, I can only hope this is a bug, and not a feature.

09:35

Choose your fuel wisely [Seth's Blog]

If worrying about paying the mortgage gets you motivated to lean hard into the next project, don’t be surprised if that sort of fear arises every time you have hard work to do.

If your goal is to teach the naysayers a lesson, remember that you’ll need to find people who you want to defeat every time you need to do important work.

If you are measuring a false proxy, a metric you say you don’t care about, it’s quite likely you’ll start caring about it.

When we pick our fuel, we pick our companions for the journey ahead.

Choosing to care about what other people care about surrenders your agency. You’ll find that success feels hollow, because it’s their success, not yours. And blaming the false metrics for losing your way is not as useful as simply walking away from them in the first place.

We thrive when we find a goal and a metric that’s resilient and easily replenished. It turns out that making a contribution is something we can do, again and again, and it never gets old.

08:42

Russell Coker: More About the Yoga Gen3 [Planet Debian]

Two months ago I bought a Thinkpad X1 Yoga Gen3 [1]. I’m still very happy with it, the screen is a great improvement over the FullHD screen on my previous Thinkpad. I have yet to discover what’s the best resolution to have on a laptop if price isn’t an issue, but it’s at least 1440p for a 14″ display, that’s 210DPI. The latest Thinkpad X1 Yoga is the 7th gen and has up to 3840*2400 resolution on the internal display for 323DPI. Apple apparently uses the term “Retina Display” to mean something in the range of 250DPI to 300DPI, so my current laptop is below “Retina” while the most expensive new Thinkpads are above it.

I did some tests on external displays and found that this Thinkpad along with a Dell Latitude of the same form factor and about the same age can only handle one 4K display on a Thunderbolt dock and one on HDMI. On Reddit u/Carlioso1234 pointed out this specs page which says it supports a maximum of 3 displays including the built in TFT [2]. The Thunderbolt/USB-C connection has a maximum resolution of 5120*2880 and the HDMI port has a maximum of 4K. The latest Yoga can support four displays total which means 2*5K over Thunderbolt and one 4K over HDMI. It would be nice if someone made a 8000*2880 ultrawide display that looked like 2*5K displays when connected via Thunderbolt. It would also be nice if someone made a 32″ 5K display, currently they all seem to be 27″ and I’ve found that even for 4K resolution 32″ is better than 27″.

With the typical configuration of Linux and the BIOS the Yoga Gen3 will have it’s touch screen stop working after suspend. I have confirmed this for stylus use but as the finger-touch functionality is broken I couldn’t confirm that. On r/thinkpad u/p9k told me how to fix this problem [3]. I had to set the BIOS to Win 10 Sleep aka Hybrid sleep and then put the following in /etc/systemd/system/thinkpad-wakeup-config.service :

# https://www.reddit.com/r/thinkpad/comments/1blpy20/comment/kw7se2l/?context=3

[Unit]
Description=Workarounds for sleep wakeup source for Thinkpad X1 Yoga 3
After=sysinit.target
After=systemd-modules-load.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 'enabled' > /sys/devices/platform/i8042/serio0/power/wakeup"
ExecStart=/bin/sh -c "echo 'enabled' > /sys/devices/platform/i8042/serio1/power/wakeup"
ExecStart=/bin/sh -c "echo 'LID' > /proc/acpi/wakeup"

[Install]
WantedBy=multi-user.target

Now it works fine, for stylus at least. I still get kernel error messages like the following which don’t seem to cause problems:

wacom 0003:056A:5146.0005: wacom_idleprox_timeout: tool appears to be hung in-prox. forcing it out.

When it wasn’t working I got the above but also kernel error messages like:

wacom 0003:056A:5146.0005: wacom_wac_queue_insert: kfifo has filled, starting to drop events

This change affected the way suspend etc operate. Now when I connect the laptop to power it will leave suspend mode. I’ve configured KDE to suspend when the lid is closed and there’s no monitor connected.

Russell Coker: Moving Between Devices [Planet Debian]

I previously wrote about the possibility of transferring work between devices as an alternative to “convergence” (using a phone or tablet as a desktop) [1]. This idea has been implemented in some commercial products already.

MrWhosTheBoss made a good YouTube video reviewing recent Huawei products [2]. At 2:50 in that video he shows how you can link a phone and tablet, control one from the other, drag and drop of running apps and files between phone and tablet, mirror the screen between devices, etc. He describes playing a video on one device and having it appear on the other, I hope that it actually launches a new instance of the player app as the Google Chromecast failed in the market due to remote display being laggy. At 7:30 in that video he starts talking about the features that are available when you have multiple Huawei devices, starting with the ability to move a Bluetooth pairing for earphones to a different device.

At 16:25 he shows what Huawei is doing to get apps going including allowing apk files to be downloaded and creating what they call “Quick Apps” which are instances of a web browser configured to just use one web site and make it look like a discrete app, we need something like this for FOSS phone distributions – does anyone know of a browser that’s good for it?

Another thing that we need is to have an easy way of transferring open web pages between systems. Chrome allows sending pages between systems but it’s proprietary, limited to Chrome only, and also takes an unreasonable amount of time. KDEConnect allows sharing clipboard contents which can be used to send URLs that can then be pasted into a browser, but the process of copy URL, send via KDEConnect, and paste into other device is unreasonably slow. The design of Chrome with a “Send to your devices” menu option from the tab bar is OK. But ideally we need a “Send to device” for all tabs of a window as well, we need it to run from free software and support using your own server not someone else’s server (AKA “the cloud”). Some of the KDEConnect functionality but using a server rather than direct connection over the same Wifi network (or LAN if bridged to Wifi) would be good.

What else do we need?

05:35

Russell Coker: What is a Workstation? [Planet Debian]

I recently had someone describe a Mac Mini as a “workstation”, which I strongly disagree with. The Wikipedia page for Workstation [1] says that it’s a type of computer designed for scientific or technical use, for a single user, and would commonly run a multi-user OS.

The Mac Mini runs a multi-user OS and is designed for a single user. The issue is whether it is for “scientific or technical use”. A Mac Mini is a nice little graphical system which could be used for CAD and other engineering work. But I believe that the low capabilities of the system and lack of expansion options make it less of a workstation.

The latest versions of the Mac Mini (to be officially launched next week) have up to 64G of RAM and up to 8T of storage. That is quite decent compute power for a small device. For comparison the HP ML 110 Gen9 workstation I’m currently using was released in 2021 and has 256G of RAM and has 4 * 3.5″ SAS bays so I could easily put a few 4TB NVMe devices and some hard drives larger than 10TB. The HP Z640 workstation I have was released in 2014 and has 128G of RAM and 4*2.5″ SATA drive bays and 2*3.5″ SATA drive bays. Previously I had a Dell PowerEdge T320 which was released in 2012 and had 96G of RAM and 8*3.5″ SAS bays.

In CPU and GPU power the recent Mac Minis will compare well to my latest workstations. But they compare poorly to workstations from as much as 12 years ago for RAM and storage. Which is more important depends on the task, if you have to do calculations on 80G of data with lots of scans through the entire data set then a system with 64G of RAM will perform very poorly and a system with 96G and a CPU less than half as fast will perform better. A Dell PowerEdge T320 from 2012 fully loaded with 192G of RAM will outperform a modern Mac Mini on many tasks due to this and the T420 supported up to 384G.

Another issue is generic expansion options. I expect a workstation to have a number of PCIe slots free for GPUs and other devices. The T320 I used to use had a PCIe power cable for a power hungry GPU and I think all the T320 and T420 models with high power PSUs supported that.

I think that a usable definition of a “workstation” is a system having a feature set that is typical of servers (ECC RAM, lots of storage for RAID, maybe hot-swap storage devices, maybe redundant PSUs, and lots of expansion options) while also being suitable for running on a desktop or under a desk. The Mac Mini is nice for running on a desk but that’s the only workstation criteria it fits. I think that ECC RAM should be a mandatory criteria and any system without it isn’t a workstation. That excludes most Apple hardware. The Mac Mini is more of a thin-client than a workstation.

My main workstation with ECC RAM could run 3 VMs that each have more RAM than the largest Mac Mini that will be sold next week.

If 32G of non-ECC RAM is considered enough for a “workstation” then you could get an Android phone that counts as a workstation – and it will probably cost less than a Mac Mini.

04:49

Gunnar Wolf: Do you have a minute..? [Planet Debian]

Do you have a minute...?

…to talk about the so-called “Intellectual Property”?

04:00

00:56

Google confirms Android 16 is coming earlier than usual, developer preview begins soon [OSnews]

In a major shift of its release cycle, Google has revealed that Android 16 will be released in Q2 of 2025, confirming my report from late last month. Android 16 is the name of the next major release of the Android operating system, and its release in Q2 marks a significant departure from the norm. Google typically pushes out a new major release of Android in Q3 or Q4, but the company has decided to move next year’s major release up by a few months so more devices will get the update sooner.

↫ Mishaal Rahman at Android Authority

That’s a considerable shake-up of Android’s long-lasting release cadence. The change includes more than just moving up the major Android release, as Google also intends to ship more minor releases of Android throughout the year. The company has already unveiled a rough schedule for Android 16, only weeks after releasing Android 15, with the major Android 16 release coming in the second quarter of 2025, followed by a minor release in the fourth quarter of 2025.

There are two reasons Google is doing this. First, this new release schedule better aligns with when new flagship Android devices are released, so that from next year onwards, they can ship with the latest version of Android of that year preinstalled, instead of last year’s release. This should help bump up the number of users using the latest release. Second, this will allow Google to push out SDK releases more often, allowing for faster bug fixing.

I honestly feel like most users will barely notice this change. Not only is the Android update situation still quite messy compared to its main rival iOS, the smartphone operating system market has also matured quite a bit, and the changes between releases are no longer even remotely as massive as they used to be. Other than Pixel users, I don’t think most people will even realise they’re on a faster release schedule.

Sculpt OS 24.10 released with multi-monitor support [OSnews]

Genode’s rapid development carries on apace. Whilst Genode itself is a so-called OS Framework – the computing version of a rolling chassis that can accept various engines (microkernels) and coachwork of the customer’s choice – they also have an in-house PC desktop system. This flagship product, Sculpt OS, comes out on a bi-annual schedule and Autumn brings us the second for the year, with what has become an almost a customary big advance:

Among the many usability-related topics on our road map, multi-monitor support is certainly the most anticipated feature. It motivated a holistic modernization of Genode’s GUI stack over several months, encompassing drivers, the GUI multiplexer, inter-component interfaces, up to widget toolkits. Sculpt OS 24.10 combines these new foundations with a convenient user interface for controlling monitor modes, making brightness adjustments, and setting up mirrored and panoramic monitor configurations.

↫ Genode website

Sculpt OS 24.10 is available as ready-to-use system image for PC hardware, the PinePhone, and the MNT Reform laptop.

Friday, 01 November

23:21

The Best Things To Do in Seattle This Month: November 2024 [The Stranger]

Sabrina Carpenter, Freakout Festival, and More by EverOut Staff

November is here, which means a deluge of holidays are coming your way, from Election Day to Veterans Day to Thanksgiving. Plus, it's Native American Heritage Month and the first round of festive winter events are coming down the pike. Of course, there's also the usual array of concerts, festivals, food & drink events, and tons more. As we do every month, we've compiled the biggest events you need to know about in every genre, from Sabrina Carpenter to Freakout Festival and from Gobble Up Seattle to Wicked.

COMEDY

Julio Torres: Color Theories
If you're keyed into comedy up-and-comers, you're probably already familiar with Julio Torres, the Salvadoran American SNL writer who also appeared in Search Party, Shrill, Los Espookys, and Fantasmas. Torres' A24 feature Problemista featured Tilda Swinton and a side of surreal quirk, following a Salvadoran toy designer whose work visa runs out as he toils as an assistant for an art-world weirdo. I'm a fan of Torres' thoughts on all things millennial—design aesthetics (wavy mirrors, Canva flyers), internship hell, and crushing student loan debt. This comedy set will continue to tap into the zeitgeist. LINDSAY COSTELLO
The Crocodile, Belltown (Nov 11–12)

Feeds

FeedRSSLast fetchedNext fetched after
@ASmartBear XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
a bag of four grapes XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Ansible XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
Bad Science XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Black Doggerel XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Blog - Official site of Stephen Fry XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Charlie Brooker | The Guardian XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Charlie's Diary XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Chasing the Sunset - Comics Only XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Coding Horror XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
Cory Doctorow's craphound.com XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Cory Doctorow, Author at Boing Boing XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Ctrl+Alt+Del Comic XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Cyberunions XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
David Mitchell | The Guardian XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Deeplinks XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
Diesel Sweeties webcomic by rstevens XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Dilbert XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Dork Tower XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Economics from the Top Down XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Edmund Finney's Quest to Find the Meaning of Life XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
EFF Action Center XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Enspiral Tales - Medium XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Events XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Falkvinge on Liberty XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Flipside XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Flipside XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Free software jobs XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
Full Frontal Nerdity by Aaron Williams XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
General Protection Fault: Comic Updates XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
George Monbiot XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Girl Genius XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Groklaw XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Grrl Power XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Hackney Anarchist Group XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Hackney Solidarity Network XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
http://blog.llvm.org/feeds/posts/default XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
http://calendar.google.com/calendar/feeds/q7s5o02sj8hcam52hutbcofoo4%40group.calendar.google.com/public/basic XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
http://dynamic.boingboing.net/cgi-bin/mt/mt-cp.cgi?__mode=feed&_type=posts&blog_id=1&id=1 XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
http://eng.anarchoblogs.org/feed/atom/ XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
http://feed43.com/3874015735218037.xml XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
http://flatearthnews.net/flatearthnews.net/blogfeed XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
http://fulltextrssfeed.com/ XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
http://london.indymedia.org/articles.rss XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
http://pipes.yahoo.com/pipes/pipe.run?_id=ad0530218c055aa302f7e0e84d5d6515&amp;_render=rss XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
http://planet.gridpp.ac.uk/atom.xml XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
http://shirky.com/weblog/feed/atom/ XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
http://thecommune.co.uk/feed/ XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
http://theness.com/roguesgallery/feed/ XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
http://www.airshipentertainment.com/buck/buckcomic/buck.rss XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
http://www.airshipentertainment.com/growf/growfcomic/growf.rss XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
http://www.airshipentertainment.com/myth/mythcomic/myth.rss XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
http://www.baen.com/baenebooks XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
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 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
http://www.godhatesastronauts.com/feed/ XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
http://www.tinycat.co.uk/feed/ XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
https://anarchism.pageabode.com/blogs/anarcho/feed/ XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
https://broodhollow.krisstraub.comfeed/ XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
https://debian-administration.org/atom.xml XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
https://feeds.feedburner.com/Starslip XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
https://feeds2.feedburner.com/GeekEtiquette?format=xml XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
https://hackbloc.org/rss.xml XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
https://kajafoglio.livejournal.com/data/atom/ XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
https://philfoglio.livejournal.com/data/atom/ XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
https://pixietrixcomix.com/eerie-cutiescomic.rss XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
https://pixietrixcomix.com/menage-a-3/comic.rss XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
https://propertyistheft.wordpress.com/feed/ XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
https://requiem.seraph-inn.com/updates.rss XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
https://studiofoglio.livejournal.com/data/atom/ XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
https://the-programmers-stone.com/ XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
https://thecommandline.net/feed/ XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
https://torrentfreak.com/subscriptions/ XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
https://twitter.com/statuses/user_timeline/22724360.rss XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
https://web.randi.org/?format=feed&type=rss XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
https://www.dcscience.net/feed/medium.co XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
https://www.DropCatch.com/domain/steampunkmagazine.com XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
https://www.DropCatch.com/domain/ubuntuweblogs.org XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
https://www.DropCatch.com/redirect/?domain=DyingAlone.net XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
https://www.freedompress.org.uk:443/news/feed/ XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
https://www.goblinscomic.com/category/comics/feed/ XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
https://www.loomio.com/blog/feed/ XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
https://www.newstatesman.com/feeds/blogs/laurie-penny.rss XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
https://www.patreon.com/graveyardgreg/posts/comic.rss XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
https://www.rightmove.co.uk/rss/property-for-sale/find.html?locationIdentifier=REGION^876&maxPrice=240000&minBedrooms=2&displayPropertyType=houses&oldDisplayPropertyType=houses&primaryDisplayPropertyType=houses&oldPrimaryDisplayPropertyType=houses&numberOfPropertiesPerPage=24 XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Humble Bundle Blog XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
I, Cringely XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Irregular Webcomic! XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Joel on Software XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
Judith Proctor's Journal XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
Krebs on Security XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Lambda the Ultimate - Programming Languages Weblog XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
Looking For Group XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
LWN.net XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Mimi and Eunice XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Neil Gaiman's Journal XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
Nina Paley XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
O Abnormal – Scifi/Fantasy Artist XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Oglaf! -- Comics. Often dirty. XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Oh Joy Sex Toy XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
Order of the Stick XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
Original Fiction Archives - Reactor XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
OSnews XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Paul Graham: Unofficial RSS Feed XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Penny Arcade XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Penny Red XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
PHD Comics XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Phil's blog XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
Planet Debian XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Planet GNU XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Planet Lisp XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Pluralistic: Daily links from Cory Doctorow XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
PS238 by Aaron Williams XML 23:07, Wednesday, 06 November 23:55, Wednesday, 06 November
QC RSS XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
Radar XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
RevK®'s ramblings XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
Richard Stallman's Political Notes XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Scenes From A Multiverse XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
Schneier on Security XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
SCHNEWS.ORG.UK XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
Scripting News XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Seth's Blog XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
Skin Horse XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Spinnerette XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
Tales From the Riverbank XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
The Adventures of Dr. McNinja XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
The Bumpycat sat on the mat XML 23:21, Wednesday, 06 November 00:01, Thursday, 07 November
The Daily WTF XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
The Monochrome Mob XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
The Non-Adventures of Wonderella XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
The Old New Thing XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
The Open Source Grid Engine Blog XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
The Stranger XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
towerhamletsalarm XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
Twokinds XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
UK Indymedia Features XML 23:28, Wednesday, 06 November 00:10, Thursday, 07 November
Uploads from ne11y XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
Uploads from piasladic XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November
Use Sword on Monster XML 23:07, Wednesday, 06 November 23:54, Wednesday, 06 November
Wayward Sons: Legends - Sci-Fi Full Page Webcomic - Updates Daily XML 22:49, Wednesday, 06 November 23:35, Wednesday, 06 November
what if? XML 23:21, Wednesday, 06 November 00:02, Thursday, 07 November
Whatever XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
Whitechapel Anarchist Group XML 23:14, Wednesday, 06 November 00:03, Thursday, 07 November
WIL WHEATON dot NET XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
wish XML 23:07, Wednesday, 06 November 23:52, Wednesday, 06 November
Writing the Bright Fantastic XML 23:07, Wednesday, 06 November 23:51, Wednesday, 06 November
xkcd.com XML 23:07, Wednesday, 06 November 23:50, Wednesday, 06 November