ongoing by Tim Bray

ongoing fragmented essay by Tim Bray

CoSocialism Update 29 Oct 2026, 12:00 pm

This week we had our CoSocial AGM and it came off just fine. I regularly tell the world that Mastodon is the only good choice for social media going forward, and I think it’s worth a few extra words on why the CoSocial model is interesting, and what it teaches.

What’s CoSocial?

The long story is here, but in brief: CoSocial is a registered Canadian nonprofit co-operative that operates the CoSocial.ca Mastodon instance. It’s limited to Canadian residents and citizens, and membership costs C$50/year. It only has a bit over 200 members but is growing. The service has good availability and performance. Judging by the people who turned up for the AGM, our members seem generally pretty happy.

Why it matters

I think CoSocial represents a plausible model of the future of social media: Decentralized, self-funding, affordable, reliable, self-governed, transparent, and free of advertisers, scammers and trolls.

What we’ve learned

Some of these are obvious, but others only emerge from a couple years of hands-on experience.

  1. Fediverse hosting as a service seems like a potentially good business. We use FediHost, who are competent, affordable, and not US-based.

  2. Being a registered legal entity is good. It forces you to have by-laws, elected leadership, regular meetings, and to construct and submit annual financials. Each of which is work, but none are heavy lifts and their existence has a positive influence on culture and resilience.

  3. The membership fee is astonishingly effective at preventing problems. We’ve now had several hundred member-years and have received exactly one actionable complaint against a member; all that was required was an informal dial-it-back warning from the moderation team. The practice of trolling relies on free access; even a little friction defeats it.

  4. Here’s an intuition without any supporting evidence but I’m pretty sure it’s right: People who pay to use a service use the service more. Our local feed is a pretty rich and entertaining experience (but you have to be a member to see it).

  5. It’s not obvious how much to charge. Our $50/year is covering our costs, but we’re still relying on quite a bit of volunteer effort. If our membership grows another order of magnitude, economies of scale kick in and we’ll definitely have to charge less.

  6. Simple governance is the best. We have working groups and projects, but anything that matters goes to a Board of Directors vote, and we elect directors every year.

That AGM

It was nice to put faces to names. I was a little worried because a few directors were stepping down, but at the meeting, several others put their hands up and offered to serve.

Also cool: We have, by membership vote, an Elbows Up policy, and have successfully migrated most of our infrastructure off US providers. The exception is bookkeeping; QuickBooks and Stripe, sigh.

The only remotely-controversial subject was whether we should change our financial year-end. We decided to do it last year but might be changing our mind. If your organization’s arguments are at this level, you’ve got a happy organization.

If you’re a citizen or resident of Canada…

…consider becoming a CoSocialist.

[Disclosure: Although I’m a co-founder, I’m not and have never been a Board member or officer of the co-op. I am an active member of the Trust-and-Safety and Finance Working Groups.]

That AI Temptation 19 Oct 2026, 12:00 pm

I continue low-intensity work on Quamina; among other things, it benefits my mental health. At the moment there’s this little voice at the back of my brain that keeps saying “This would be a great job for Claude.” So far I’m ignoring it, but the internal conversation is worth sharing.

Disclosure

I’m not a GenAI expert, have never relied on it for any substantial piece of work. However, I’ve seen plenty of PRs with LLM fingerprints, and I follow a whole lot of indie devs who are in it up to their elbows. It seems to me that a pretty clear picture emerges of what it can and can’t do, where the wins and losses are. This essay reflects that picture but maybe I’m just wrong, in which case I’ll confess my errors.

Negative externalities

For me (and I’m not alone), the biggest issue isn’t what GenAI can and can’t do, it’s the ethical and economic discomforts. This technology is being peddled by terrible people who are rich and whose goal is to get richer. It’s bought and deployed by terrible people who want to slash their payrolls by throwing thought workers onto the street. It facilitates the oncoming climate catastrophe and devalues human creative effort.

Notice that I said “ethical and economic”? That second issue is all about the bubble and how nobody knows what GenAI technology will really cost, post-explosive-decompression. It wouldn’t surprise me if we ended up in a future where most software devs are using beefy “desktop” computers running open-weight models; or else they’re using AWS/GCloud/Azure (but still open-weight). Or something completely different. Or we’ve learned that the cost of AI, as measured in mental fitness and organizational health, is simply too high.

The stage has been set; let’s talk about bits on the wire.

Quamina and JSON and …

At the moment Quamina does its super-fast-matching magic on JSON blobs. But it should be perfectly possible to work with any other data format that has nested fields and boolean/numeric/string values at the leaves. Oh, and arrays of the above. There’s no shortage of candidates: Thrift, Protobufs, Apache Avro, and CBOR come to mind immediately.

Quamina has the built-in notion of a “Flattener”, that turns input data into a sorted list of “Field” structures. For example, here’s a JSON blob:

{
  "X: {
    "Z": 22,
    "Y": 21,
  },    
  "A": 33
}

The output of the flattener, what the matcher works on, would be something like this:

{"A": 33}, {"X\nY": 21}, {"X\nZ": 22}

In Quamina, flattening eats more time than matching. It used to eat dramatically more time, but the JSON flattener has been heavily optimized by me and other contributors.

Maybe the most important optimization is maintaining a list of which fields are actually up for matching and skipping over the ones that aren’t. Obviously this means that the parser can’t be the typical thing that turns your JSON blob into a fully-serialized tree of structures and arrays in a one-shot call. In fact, you need a parser that’s a tokenizer and lets the calling code decide how to deal with each little piece of it, one at a time.

Protobufs

Someone out there asked Claude to build a Flattener for Protobufs. It seemed to partly work but was kind of buggy and I found the code hard to read. Hmm. Of course the usual GenAI “That was six months ago, it’s much better now” narrative applies.

CBOR

For those who don’t know, CBOR is JSON but binary, which is claimed to make it more compact and faster to process. It’s also got a richer type repertoire, but whenever I’ve run across it in the field, it’s basically being used as JSON-only-faster.

So, I’ve started working on a CBOR Flattener for Quamina.

The simplest thing that could possibly work

The default CBOR processor for Go, from Faye Amacker, looks very polished. But it’s not a tokenizer, it’s a “deserialize your whole blob in one call” thing. So the simplest thing would be to make that one call on each incoming blob, then run around the deserialized tree and compute the flattening. Ignore all that stuff about bypassing for efficiency. Because it might be plenty fast enough and that optimization would have been premature. After all, if you read Faye’s page linked above, they seem to be something of an optimization fanatic.

And you know what, I bet if I gave Claude the problem of turning CBOR into Fields, I’d get OK code back; tell it find a way to fuzz-test the process and it’d be surprising if it didn’t work.

Right at this moment in history, I could make a case for that being a good engineering decision. Code, in the LLM-pre-bubble-pop era, is cheap. Time is still expensive. This task has clear, clean success criteria, easy to point an agent at. The Simplest Thing That Could Possibly Work is a powerful design principle, one that I’ve forced down the throat of more than just one or two over-aspirational engineering team leads.

But I’m not gonna do that. I mean, there’s the nauseating state of current AI culture and finance. But also, I’m doing this for fun. Writing high-performance tokenizers is fun! [Really? -Ed.][Serious fun. -T.] I’ve started poking around inside Faye’s library, raised an issue, and I’m confident that there is plenty of code and tests in there that I can steal.

Testing

Quamina has 14K lines of test code and 47M of of test data. A high proportion of the tests amount to “Run the code against this JSON and require these results.” Obviously, now I want to run 100% of those tests with equivalent CBOR input. It seems to me that Claude could do a great job of automating plenty of this work, which I predict will be grinding, tedious, and not fun at all. On top of which I tend to be lax and forgiving about test-code quality.

My internal engineering-leader mind has no doubt, it’d tell the devs to automate the hell out of replicating the test suite and not be picky about how. But I bet that it’d burn a whole lot of tokens, which means routing money to bad people with bad goals. So once again, I’m not going to do it with LLMs.

Post-bubble, it might be somewhere between forgivable and praiseworthy. But not as I write this.

I Wasted an Hour on X 13 Oct 2026, 12:00 pm

Recently John Gruber, whom I’ve followed for decades, published X Once Again Marks the Spot. It’s short and I’m not going to try to summarize it so go read it if you haven’t already. But here are two key quotes: “I see more interesting posts on X than I do on Threads, Bluesky, and Mastodon combined. I wish that weren’t so but it is.” and “The culture on X today is remarkably friendly and inclusive. It is a cheerful place.” Reaction on Bluesky and the Fediverse has been pretty fierce.

I think the following things can all be true.

It’s less toxic than it used to be

Well yeah, Elon isn’t in everyone’s feed, clearly a major quality-of-life improvement.

It’s still his shop, and he’s a slimy fascist

Go read X is bad, though by Lex Freidman. I mean, Musk delivers sieg-heil Nazi salutes in public and boasted about how he, the world’s richest man, cut off food rations to the world’s poorest children. Lex has a longer list of reasons but those two are all I need.

Then there’s the unforgiveable doctrine of tuning the algorithm to bury posts that have links in them.

The CEOs are there

This was Gruber’s starting point. But, uh… CEOs are boring. They have to be ruthlessly on-message and never stray a millimeter from their core mission, which is promoting their company to the investment class. If I want to learn about Apple I’ll go read actual humans like Gruber or Friedman and ignore the vacuous arm-waving from the executives.

It’s not just CEOs, I saw Macron and Burnham and Zelenskyy and Modi. In fact, today’s reality on X is that the people posting are mostly public figures, already established as writers or politicians or executives or whatever. Most of them are there with a business or party or product to promote and that’s what they do.

There are very few who are just interesting voices you haven’t heard before; and that’s part of what I go online looking for.

It’s not “cheerful” for everyone

I dunno, I just spent an hour there and I find myself totally gloomed out. Putinist propaganda. Zionist settler hasbara. Rod Dreher ranting incomprehensibly, and I quote: “…young Jews became Bolsheviks in part to "murder" their fathers - that is, to destroy Judaism.” LLM cheerleading, that get-on-board-or-you’re-history flavor we all remember from the heydey of crypto. Joni Mitchell gleeful at her US-Citizenship ceremony. Slanted political propaganda, against the incumbents in the current BC election, until I switched to Explore and it switched to pro-incumbent puffery.

This is fun?

Anyhow, here’s a list

People, I mean, who are there but should really know better and of whom I now think less: Joni. Nicholas Kristoff. Josh Marshall. Jeet Heer. Nate Silver. Aaron Rupar. Corey Quinn. Stephen King. The Tsleil-Waututh Nation. Miguel de Icaza. Fortunately none of them care what I think of them. I could go on but I’m already blue enough. And I’m not going to even start listing the many featured voices belonging to people whom I already thought of as unsalvageable scumfucks.

The future

Twitter is part of the SpaceX LLMs+rockets conglomerate. If you believe, as I do, that the bubble is going to pop soon and loudly, it’s going to be desperate times when SpaceX’s valuation collapses and it can’t borrow billions to keep the doors open. Twitter has never made really significant profits (and I saw exactly zero ads in the hour I spent poking around).

So what happens then? Feels to me like the choices are extinction or enshittification. We’ll see.

Where I stand

I’m still a happy Fediversian, here’s why. Yeah, there aren’t as many people and it’s kinda geeky and leftist and queer; also unattractive to billionaires and CEOs. I can see why that’s less appealing for some folk out there and, well, OK. But I’m having fun on Fedi. And it’ll be a loooong time before I waste another hour on X.

2026 Aussie Visit 12 Oct 2026, 12:00 pm

What happened was, Lauren’s NZ family includes a nephew who’s currently living in Brisbane and got married last month, so a dozen or so Kiwis and three of us Canadians got on airplanes and converged on easternmost Australia. We went on to tourist a bit and visit friends in the Melbourne area. Came away with impressions and pictures.

Australia’s different. I don’t claim any particular deep understanding, but at least we were mostly among locals and often off the tourist trail. Also I find some of the pictures pleasing.

Damn, that’s a long plane flight.

Ice crystals on airplane window

Eleven or so hours into the journey, dawn over the Pacific; ice crystals on the windows plus something put the Pixel into Macro mode and thus the reflections. Vaguely self-portrait-ish.

The wedding

It was great; she’s a Grade 4 teacher and he’s a cop. They’re both exceptionally attractive and have large supportive families. It was well-organized and good fun.

Mothers of the bride and groom

The mothers of the bride and groom both looked very sharp.

A young girl silhouetted making a heart with her arms

Niece of the groom sends a silhouetted heart.

Brisbane

The city didn’t do much for me, but maybe that’s because we were mostly out in the burbs: Our Airbnb, the Kiwi-branch Airbnb, the bride & groom’s place, and the wedding venue. All in decent but (except for our joint in Brighton) not terribly memorable neighborhoods.

Also there was “Chermy”, the Westfield Chermside Mall. OMG. It’s the size of a small European nation and getting prepped for the wedding required enough time there to drive my nervous system nearly to meltdown, I’m not good at malls.

I’m left with the impression that Brisbane is designed and optimized for automobiles but, once again, maybe we just came at it wrong.

Tidal flats off of Brighton, Queensland, Australia.

Low tide off Flinders Parade in Brighton, Queensland.

Kookaburra on a branch

Kookaburra of course.

After the wedding there was a gathering at Felons Brewing, an absolutely massive gastropub on the banks of Brisbane’s river, which I totally recommend. The place is too big but somehow they make it work and the food is really good.

Warragul

Our dear friend Sally, after a long career in Melbourne, sold her house in a decent Melbourne neighborhood and bought something of a palace in Warragul, a couple of hours by train to the east. It’s in Gippsland, a green and pleasant part of Australia.

Warragul is small, busy in the center, and very quiet outside it.

Sun setting behind a Eucalypt Eucalypts on a green hill under a cloudy sky Magnolia with a large green tree behind Extremely blue flowers on a small bush

Warragul.

My favorite thing about the town was Bandolier Brewing, which has a friendly and relaxed small-town vibe and terrific pizzas. The beer is OK but not memorable.

The countryside around it is remarkably nice.

Gippsland countryside

Looking down on Gippsland pastureland
from the Cape Horn Lookout.

Melbourne

Lauren got her Ph.D. here and has lots of context on the place, plus still a few friends. It’s a cool city; the fact that it’s got twice Vancouver’s population shows. A whole lot of style statements were really working, plus the streets and alleys operate on a welcoming human scale.

Dining in a Melbourne alley Melbourne evening scene

It’s a foodie city, which as a side-effect highlights a big difference between there and here: Pay is better in Australia. Here are the minimum-wage rules (for Americans, those Aussie bucks are worth about 70¢ just now). Those rates are a lot higher than where I live. “But,” our taxi driver told us, “nobody’ll work for the minimum, you have to offer more than that.”

This is in your face when you eat out; first, because everything on the menu is expensive. Second, nobody asks for a tip. I kind of like this set of trade-offs and wish North America would get a clue. If you follow that minimum-wage link above you’ll observe it’s from “Australian Unions” and they claim a lot of credit for the pay structure. To the extent that’s true, good on ’em.

Anyhow, back to Melbourne. The center of the town is Flinders Street Station, which I’ve pictured on this blog before and will again; the place makes me happy.

A train station in yellow and red A young woman looks at her phone seated on a stone staircase

At Flinders Street station.

On our last day we visited the Vic Market, where a huge and remarkably random selection of merchants sell, more or less, everything imaginable. A cheery place; my daughter and I had a food-truck lunch (me: Ethiopian, her: Mexican) that was at least competitive in quality with the fancier-restaurant fare.

Vintage-watch vendor at Melbourne’s Victoria Market Spiritually-flavored objects for sale at the Vic Market

Trailing observations

Here’s a place near Sally’s in Warragul.

A brick house in Warragul, Australia

It nicely illustrates a few of my take-aways. Item: Vast lawn. Item: Nice brickwork. Item: Capacious roof overhang for shelter from rain and sun. Item: Since they don’t have alleys, every house has a front-facing garage (behind the bush in this pic). Item: Solar; in reasonably new/modern areas, somewhere around a third of residences have these. It’s subsidized enough to make it a financial no-brainer. Item: Impeccably clean road and curb. Item: Single story, no basement or upstairs.

I actually like a lot of the Aussie residential architecture. Pity about those front-facing garages.

Finally, speaking as a full-time hat wearer, for my money Akubra makes the world’s coolest. Expensive, but rugged and stylish. Check ’em out.

Color Study: Fujifilm vs Pixel 10 Oct 2026, 12:00 pm

Our neighorhood has many deciduous trees, which means, in Canadian October, lots of bright colors overhead and also on the ground. The camera (from its corner in my office) and phone (from my pocket) both quiver with eagerness to be pointed at those colors. Sinced I’ve grumbled a bit recently about the Pixel’s color rendition, I thought I should try some side-by-sides. So here are three pairs of pictures from the mobile and the “real” camera.

The gear

The mobile is a Pixel 10, shooting with the default Google camera app. Since it shoots at a wider angle than either of the camera lenses I used, those shots have been cropped down quite a bit, but I don’t think that affects the fairness of the comparison.

The camera is a Fujifilm X-T5, four years old now but not too far off the state of the art. For camera nerds only: The sensor is APS-C not full-frame, which is why the body and (especially) lenses are smaller and lighter.

Two lenses are used; amusingly, they are the pair I bought with my first Fujifilm camera in 2013, the 35mm F1.4 and the 18-55m F2.8.

For each pair, the pictures were shot at the about the same time.

I used Lightroom, but only to crop and rotate the Pixel shots. Which you could argue is a flaw in this comparo because normally I touch up photos quite a bit before I share them. But I think these straight-out-of-the-camera versions have something to teach.

Fallen autumn leaves, shot with Pixel 10 Fallen autumn leaves, shot with Fujifilm

Pixel above, Fujifilm + 35mm F1.4 below.

I could have made a flip-to-compare widget but that’s too much JavaScript for the weekend. Get the enlarged versions open in adjacent tabs and flip back and forth
if you want that kind of thing.

Look, I like the Pixel, it’s not a “great camera for a mobile”, it’s just a great camera. I use it all the time with confidence that it’ll give me an excellent chance at a keeper. But it doesn’t come off well here.

I can guess why: First, this was a cloudy afternoon with a row of big houses between the leaves and the part of the sky the sun was in. Apparently the Fuji sensor does better with this particular flavor of low light.

Second, that lens; I think a whole lot of people in Fuji-land would agree that that 35mm F1.4 is one of the greatest lenses ever made by anybody ever. Things just look better through it. Go looking online and you’ll find lots of moist but inarticulate voices and they’re all saying something along the lines of “I dunno what it is but I like it.”

In this case, the Fujifilm picture looks strikingly more three-dimensional than the Pixel’s. Lens design is one of the last domains of analog engineering design. For which I’m thankful.

The Pixel version is light on context and the less-dark leaves look blown out. It would benefit from Lightroom adjustments but I don’t think it’d catch up.

Fallen autumn leaves, well lit, Pixel 10 Fallen autumn leaves, well lit, Fujifilm

Pixel above, Fujifilm + 18-55mm F2.8 below.

When I got these two up side-by-side on the screen I wondered “Is the Fuji exaggerating the saturation and contrast and brightness?” Maybe so. But if the Pixel version is accurate, I don’t think I would have been impressed enough to take the picture. The cameras’ opinions on the relationship between the red and yellow differ sharply. I think the Fuji is right but I can’t remember where exactly I shot that, so I haven’t checked.

If you zoom way in, the Pixel actually got slightly better focus. Which is irrelevant to the way the picture looks on screen. You might be able to notice on a really big print?

Anyhow, I’m not sure what’s going on here. There was plenty of light; the Pixel was at 1/180sec, the Fuji 1/60. Now I’m going to be suspicious of my camera, is it lying to me in a pleasing way?

Autumn leaves against blue sky, Pixel Autumn leaves against blue sky, Fujifilm

Pixel above, Fujifilm + 18-55mm F2.8 below.

Obviously, all the light anyone could want, loads of contrast, and it’s hard to pick a winner. The Pixel does a little bit better at capturing branch textures; those branches are mostly just silhouettes per the Fuji. If you look really close and care a lot, the Fuji’s take on the color of the sky is better. I’ve griped about this before, I think there’s something in the Google computational photography that detects sky and slams the pretty-sky-blue lever over on the color mixer.

Take-aways

I’m pretty sure I would have been willing to share either version of each of these pictures, especially post-Lightroom. Since the Fuji is shooting RAW, those files would have had “deeper data” and thus more scope for pulling light out of darkness or texture out of highlights.

The differences in image quality are there, and they’re significant. But the “real” camera’s biggest advantage is that it’s shaped to fit in your hand and has physical knobs and dials to adjust things, and is awake more or less instantly when you turn it on. It’s not trying to be anything but a camera. Also, you can attach a huge variety of funky lenses, including extreme telephotos. The bottom line: Cameras are immensely more fun to shoot with. But you’re going to have the mobile with you more often.

I’m pretty sure my conclusions would have been the same had the camera been a Canon/Nikon/Sony or whatever. But the Fuji cameras have better ergonomics than those.

The phone-cams will go on getting better. But until they can do the hand thing and the lenses thing, I can’t see going without a real camera.

The Purpose Isn’t What It Does 24 Sep 2026, 12:00 pm

“The purpose of a system is what it does.” Such a neat little turn of phrase; it makes you sound wise and cynical and like a person who sees through things. But it’s mostly wrong and almost always counterproductive.

A bit of background; the phrase (and let’s just say “POSIWID”) was coined in 1979 by a British management consultant. It’s thrown around heavily; a search on my Mastodon server turns up plenty of examples. Most of which, instructively, are lightweight arm-waving. Try it on yours.

Rhetoric

It means “the art of persuasion” and more specifically, the category of language used in an effort to convince, to make a point, to help another human understand your point of view. POSIWID, if it’s to have any currency at all, should be useful as a rhetorical tool.

Which matters. Because we are currently embedded in a torment nexus around values and humanism and antifascism and tolerance and late-stage capitalism and AI and AI and AI and AI. We need good rhetorical tools. And we need to be clear about what the purposes of systems are.

My claim is that POSIWID doesn’t help us understand the why and who of the malignant forces we’ve found ourselves horrified by and, I hope, are fighting back against. In other words, it’s rhetorically lousy. Let’s work by example:

The purpose IS

The purpose of GenAI IS to increase the wealth of a tiny handful of already-wealthy people.

The purpose of Grok/X IS to promote Musk-flavored fascism.

The purpose of the Fediverse IS to serve as a conversational platform that can’t be bought or shut down.

The purpose of a handgun IS to kill humans.

The purpose ISN’T

The purpose of the Internet ISN’T to serve revenge porn.

The purpose of a hammer ISN’T to enable domestic violence.

The purpose of the automobile ISN’T to accelerate the climate catastrophe.

The purpose of GenAI ISN’T to usher in a newer better world.

Late capitalism again

If we believe that money talks, we need an add-on. Because almost anything with a lot of human and/or financial investment also has the purpose of enriching someone. For example: The purpose of a handgun IS to enrich its manufacturer. So in discussions of purpose, let’s not leave that out.

Also, note that unlike many of the other things in the lists above, the purpose of the Fediverse ISN’T to make money for anyone. It’s fairly unique in that respect.

And, as the handgun example illustrates, it’s usually “purposes” not “purpose”, plural not singular. Another reason why chanting “#POSIWID” is generally misguided.

Anyhow…

When we engage in struggle for or (more often, these days) against something, we need to understand its purposes. And a vacuous mantra like POSIWID doesn’t help.

Regulate and Standardize AI? Nope. 18 Sep 2026, 12:00 pm

Nate Silver’s latest is A supermajority wants to slow AI down, noting the general convulsion of fear provoked by the AI Guys’ it’ll-kill-us-all palpitations. From which:

And then there’s a weird faction of AI denialists — people ostensibly on the left — who are convinced that AI is all a scam and therefore there isn’t much need for regulation.

In parallel, the IETF (Internet Engineering Task Force, the people who standardize protocols so the Internet can work) is seeing a steady flow of proposals along the lines of “something Agent something Validation something Enablement something”.

Money

I’m a leftist (but not that weird) and I think regulation and standardization of LLM-land are a waste of effort at this point in history. Because money. You don't have to believe all GenAI is crap to think that the financial premises are, well, crap.

First, the only sector today where there are large numbers of people willing to pay substantial sums for access to AI services is software. Software people are roughly 1% of the global workforce, which isn't enough to move the financial needle.

For the other 99%, are they (or their employers) willing to pay enough for AI goods and services to turn a profit on the global multi-trillion-dollar investment surge? I could be wrong but I don't think so.

That leaves the possibility that employers can discard tens of millions of knowledge workers, thus boosting profits enough to validate the global investment premise. I don't think it's weird to find that scenario dubious.

Finally, I don't see how we can have a rational discussion of regulation or standardization under the huge global investment overhang. The miasma of greed and fear obscures hard facts of actual utility and ROI. Which you can’t regulate or standardize without. My advice is: Let’s wait for that bubble to pop.

Money’s the biggest issue, but there are other bad problems with regulation and standardization

Moving target

For standardization in particular: The technology (and business landscape) are changing really fast and all the time. I’ve personally had multiple conversations where I say “X is a dumb thing about LLMs.” The response is usually “X is so six-weeks-ago. Everything is perfect now.” Please, please, don’t make anyone sit on a committee trying to specify anything about technology that’s so obviously immature.

The law

And for regulation: There’s the money issue, and then there’s that moving target issue. But I think current law remains a useful tool as-is.

If you launch an LLM-backed agent and it causes me serious business or personal damage, I think I can hire a lawyer and sue your ass. Because lots of people are, notably including most of the world’s largest publishers.

If it causes large numbers of people personal or financial harm, you’ve probably violated existing law and might find yourself facing a criminal conviction. We already have a solid precedent that saying “the AI did it” is not a valid defense. Yeah, obviously, a legal assault on huge, rich, and fashionable entities like OpenAI and Anthropic is an uphill struggle. But if Nate Silver is right and the anti-AI rage is bipartisan, the BigAI castles may be built on sand.

My answer

As a senior and fairly visible software person, I repeatedly get questions like "should we be scared?" and "will I lose my job?" My answer is always the same: Wait for the bubble to pop, then we'll find out.

Canceling Emily 8 Sep 2026, 12:00 pm

Meet Emily van Lidth de Jeude, an artist who lives on an island and has the most adorable chicken coop you’ll ever see. Those URLs start with emilyartist.ca now; until recently it was emilyvanartist.noblogs.org. But that site, there for many years, is down now, and not coming back up. Why? Well, her email address used to end with @autistici.org (it’s broken too now), and therein lies the story.

It’s because the Trump administration declared that the “Autistici/Inventati” collective hosting Emily’s website and email was a terrorist organization, and blasted them off the Internet with legal nuclear weapons. Here is the A/I collective’s statement. A more compact journalist narrative is Als de Amerikaanse regering je tot terrorist heeft bestempeld: deze Italiaanse internetprovider kwam vorige week op de sanctielijst which is in Dutch but it machine-translates nicely. Emily’s own take, on her blog, is Canaries of Hope.

It’s been professionally and personally devastating, vanishing Emily’s online history and nuking her email network.

Emily van Lidth de Jeude painting

Canadian eco-social practice artist Emily van Lidth de Jeude in her studio, 2023, working on a series about wildfires. Beside her on the floor stands a portrait of her Ukrainian grandmother.

I suppose most people reading this saw the Autistici/Inventati news story and shook their head at yet more MAGA malfeasance. Me too. But then I found out about Emily’s story, initially on her Fediverse feed, and that made it concrete. The wastrels in Washington can reach across the ocean and silence a Canadian creator on an Italian website. With no prior legal process, nor any way to resist, and without fear of consequences.

They can probably do the same to you if you displease them sufficiently. They’ve done it once now and from their point of view it went flawlessly, so why not again and again and again? The only reasonable prediction is that they will.

It might be the case that if A/I had been in the US, they could have mounted a defense based on Section 230, but I’m no lawyer.

I’m also no DNS expert; but I know some good ones. So I asked if there were any countermeasures available to non-US entities. The answer: “Nope.” I asked “What about a national domain like .ca?” Still nope, any national registry could be targeted by US legal warheads.

So, I could be taken down by this time tomorrow, just like Emily was. And like her, I’d have no comeback. You too, maybe. I remember, back during the Cold War, we described our part of the planet as “The Free World”. Every year it gets harder to believe that label.

This is a politics and policy problem. So in the big picture, the only way to prevent this kind of abuse is for the Americans to stop electing ignorant corrupt lawless narcissists. Starting this fall of 2026.

In the meantime, follow Emily online, she’s fun. And have a look at her art, some of it might look good where you live.

Clankers and Data Races 1 Sep 2026, 12:00 pm

I just landed a PR that fixed a nasty data race in Quamina. Which shouldn’t have been technically challenging, but I took side-trips into Erlang, unit test footguns, whether or not I should go on accepting LLM-generated PRs, and programming while aging.

Let’s address that last issue first.

“No” on clanker PRs

In late 2026 we know that:

  1. Claude and its competitors can write perfectly decent code, particularly where the task at hand can be narrowly focused.

  2. They’re also good-to-excellent at detecting vulnerabilities.

  3. The underlying GenAI technology has serious negative externalities in (at least) the domains of environmental impact and intellectual property.

  4. Using this technology might enrich and empower people about whom I feel contempt and fear.

  5. The vast majority of people whom I care about and respect are experiencing real unhappiness about the GenAI big picture.

I’ve never personally put clankers seriously to work and for now I’ll continue not to. I have been accepting Claude-authored PRs but, to the extent I can detect them, I’m stopping. This will have a real cost; some of those PRs yielded big performance boosts. Also, they were built much faster than I could have managed.

But the picture is mixed. Specifically, I have to admit that I don’t really understand the 500 or so lines of clanker code and test that compute epsilon closures for nondeterministic finite automata. Sufficiently so that I’ve written an issue to think it over, understand it, and with any luck, simplify it.

Interestingly, we got to the current epsilon-closure code in a sequence of reasonable-looking PRs that I reviewed, asking for changes in most. But in the big picture my reviewing was ineffective, because it ended with a large lump of code that I don’t understand or, at the end of the day, trust. I wonder how typical that outcome is?

There’s an exception to my new policy: Vulnerability reports. I think it’d be irresponsible to ignore them and penalize Quamina’s users because I don’t like the source. Somebody did a Claude scan which found 14 problems at various levels of criticality. I’ve created issues and hope to retire them all soon.

Pruner race

The ugliest problem the clanker found was a data race in a piece of Quamina called pruner (that most people don’t use). So I bashed out a quick unit test that ran several thousand read operations in one goroutine and the same number of updates in another. Sure enough, on its first run it instantly exploded in a flurry of data-race complaints.

The problem wasn’t complex and my first cut at a fix worked fine, the unit test running flawlessly. But, also very slowly. I (reasonably, I thought) went looking for contention problems around the mutexes I’d just added. The profiler seemed to be saying that the slowdown was in Quamina’s core matching methods, but that made no sense at all, so I dug deeper and deeper into the Go sync primitives. And found nothing useful.

Concurrency bugs are extra irritating. Also, I’m semi-retired and doing this for fun, so I put it down and ignored it for a few weeks.

Functional love

There was a bright spot in this sad story. I mistakenly thought I’d found my problem in a statistics-gathering type with several mutexed fields. So, cackling gleefully, I turned them into Erlang-flavored accumulators updated with Go channel messages, a programming idiom that’s always given me a warm glow.

It didn’t make any performance difference but the code was smaller and prettier.

[Update: It’s subtly buggy in a way that doesn’t impair its usefulness; created an issue, will fix.]

Unit tests are good except when they’re not

When I got over my grumpiness and went back to the problem, I started by looking at the unit test. Oops. Turns out the read-only thread was (unsurprisingly) running twenty times as fast as the update thread and since they were doing the same number of operations, it finished up instantly and the updater-thread kept thundering away. For reasons that need not concern us, in this specific benchmark scenario a stream of heavy add and delete operations without any stats-gathering read operations leads to massive, horribly complex NFAs. Then the matching runs slow — exactly what the profiler had been trying to tell me, only I thought I was smart enough to know better.

So I forced the reader thread to keep running until the other finished and hey-presto, the race was still fixed and everything ran at typical Quamina speeds, which is to say very fast.

(I didn’t get rid of the Erlangified stats package though, I just liked it too much.)

I’m normally tolerant of a certain amount of sloppy informal YOLO power-coding while constructing unit tests — more are better! — and I think I still am. But this was a painful experience that I’d like to avoid in future. So, is there a lesson here? Maybe there are two: First, believe what the profiler is telling you! Second, if you’re having trouble understanding unit test output, dig around a bit and make sure it’s doing what you think it is.

Grey-haired programmer

Even when I’m mad at my software, I’m grateful that I still enjoy working on it. I think it supports my main post-employment objective, which is to keep my brain working. And who knows, the software might help somebody somewhere.

And best of all, when nobody’s paying you to work on something, you can take a few weeks off whenever you’re not in the mood.

Text Watermarking 24 Aug 2026, 12:00 pm

There’s been a lot of discussion recently about the GenAI giants “watermarking” their output, which to say inserting data so you can tell that it’s been generated by ChatGPT or Gemini or Claude or whatever. The technology for watermarking images is as old as dirt, works as advertised, and doesn’t affect image quality. What’s new and controversial is a claim that they can watermark text output cheaply, simply, and without harming the quality of the text.

I was curious how they did this so I dug in a bit. I’m mostly convinced that it works and is pretty clever. However, all the explanations are full of Computer-Science jargon that you need to be a professional developer to understand. So here’s an attempt to explain to non-insiders and then, indirectly, opinions on whether it’s good and what it means and doesn’t mean.

How it works

[To professionals: The following is vastly oversimplified but not, I think, misleading.]

LLM software generates output a word at a time. The way it works is, it takes the last few words it’s generated and feeds them to the Large-Language-Model process, and what comes out is a list of plausible next words, and a number which represents just how plausible they are. So if the last few words were “my favorite tropical fruit is” the LLM might come back with “mango”:30, “lychee”:20, “papaya”:10.

You might think that LLMs always choose the most-plausible next word, but that turns out to give lousy results. So they randomly select from the list in a way that respects those numbers. First, note that the numbers add up to 60. So in this case, you’d want it to select “mango” 30 out of 60 attempts, i.e. half the time, “lychee” 20/60 or a third, and “papaya” 10/60 or a sixth.

In that sentence, the word “randomly” is doing a lot of work. Let’s look a little closer at one way you might do this. Your computer program could make a list with 60 entries, fill the first 30 with “mango”, then 20 with “lychee” and 10 with “papaya”. Then you’d ask your computer to give you a random number between 1 and 60. Suppose you got 33, so you pick the 33rd list entry and return “lychee”.

And in that sentence, the phrase “ask your computer” is hard-working. It turns out that computer programmers need random numbers like this all the time (let’s ignore why). They get the numbers from a built-in function called a “PRNG” (let’s ignore what that stands for). The way a PRNG works is you fire one up by giving it a “seed”, which can simply be another number that you get by bashing randomly at the top row on your keyboard or by asking a co-worker to pick a number or whatever.

Once seeded, the PRNG is happy to go on giving you an endless series of random numbers. But (this is important) they depend on the seed. By which I mean that if you fire up a second PRNG with the same seed, it’ll produce exactly the same endless series.

Now we’re almost there. If you think about it, the LLM’s next word depends on, and only on:

  1. The previous few words and the model’s “context”, i.e. the prompts and anything it’s been asked to load up,

  2. The internal workings of the LLM, and

  3. The random number used to select from the list of candidate words. Which in turn depends on the seed that the LLM fired up its PRNG with.

So, suppose you want to test whether some text was generated by an LLM. Well, IF you have access to the LLM, and IF you know which PRNG they used, and IF you know the PRNG’s seed, then you can look at the LLM output and see if the words are the ones that the LLM would have generated. This works even if the output text was edited a bit; if a high proportion of the words are those that the LLM would pick given the preceding ones and the PRNG output, that’s a signal that yes, it was probably LLM-generated.

Secrecy

This only works if you know the details of how the candidate next-words are generated, which PRNG, and what seed was used. It would be technically possible for an LLM provider to share this information, then anyone could check the watermark. In fact, all they have to keep secret is the PRNG seed. So at the end of the day, this “text watermark” means something like “Remember the seed”.

I don’t watch the GenAI sector that closely so I don’t know if any of the providers actually do disclose this stuff. My impression is that generally speaking they’ll provide an API to do this checking for you. Or not, if they decide you’re not entitled to do that, or haven’t paid enough, or whatever.

Resources

Here (on X, unfortunately) is an explanation that is slightly less oversimplified than mine above; still, I think, inaccessible to non-professionals, but perhaps useful to some.

Scalable watermarking for identifying large language model outputs is the upstream science, from Nature in October 2024. Strong stuff.

AI Text Watermarking Is Free And Good, by Zvi Mowshowitz, also offers a how-it-works, but then includes commentary around the “… And Good” part of that title. I don’t agree with some of it but the arguments are useful to know and quite clearly written. I’m going to steal a phrase from Mowshowitz’s piece to serve as the title of my next section…

Anthropic Derangement Syndrome

Quite a few people, some very smart, have reacted to this watermarking idea with fear and loathing. Mowshowitz scoffs at them. He (correctly) observes that the hostility is in large part due to people assuming that anything the AI vendors say is probably a lie and that anything they do is probably greedy and dangerous bubble fodder. But he (incorrectly) opines that this take is unreasonable.

So sue me: I too think those businesses lie a lot, that their product vision is damaging to civil society, and that they are inflating what is starting to smell like a truly apocalyptic financial bubble.

Having said that

I do think the watermarking can work as described and won’t slow things down and won’t degrade the quality of the output.

Sometime in the last year I gave up on making predictions about the impact of GenAI on the world. So don’t ask me what the effect of ubiquitous watermarking will be.

Five Views of the Wilcox Prairie 17 Aug 2026, 12:00 pm

Fools have said that the Prairies are boring. This cannot be true, because in the absence of hills and trees there’s more distance in each direction you might look. Also, Prairie landscapes include the skies above them which, whether blue, star-spangled, or cloudy, aren’t boring. Herewith photoevidence from the vicinity of Wilcox, Saskatchewan, with which I claim no other connection.

The nearby highway is distinguished by an adjacent railway line that carries really big trains; you really don’t want to be waiting on a crossing while one of them spends tens of minutes reversing back and forth lackadaisically, to what purpose I can’t imagine.

Prairie with clouds above and a train-crossing sign Prairie train-tracks with clouds above

See what I said about the sky not being boring?

This corner of Saskatchewan has less absence of human construction than Prairie-typical. Below, four distinct structures rise from the fields, marked by the clusters of trees which surround every locus of human activity here, there to offer shelter from the endless Prairie wind.

Green Prairie grass with a telephone pole and buildings in the distance

I was out for a drive with my mother, now 96. She asked “How many people wonder what it looks like where the makings of the bread on their table come from?” Below, what it looks like after the harvest. The ground’s less pretty than before the wheat was cut but the dirt/cloud antiphony lured my camera out of the bag.

Recently-harvested Prairie landscape

Prairie photography is right up there with Rock-Concert photography in that there’s all the light and visual drama you could want, just get in a good place and point the camera in a good direction.

Prairie field with cloud drama above

Remove distractions, highlight the clouds, and you can’t go wrong.

Happiness Bookmarks 13 Aug 2026, 12:00 pm

It’s been a rough few years, for the earth, for the societies that populate it, and for my family. Like they say, “sandwich generation”. There’ve been weeks when I’ve struggled for a smile. I suspect more than a few folk reading this are also feeling stretched thin these days. Happiness has not entirely departed our lives, and waiting for a happier future is a really bad idea. So we should notice and bookmark those moments and hours when smiles come to our faces.

If you share your life online, write the good times down and share them already. I used to do this a lot; here are three out-takes ranging between 2003 and 2011. Maybe one or two of them will cheer you up?

I should do that more. Starting now.

Pleasant Day

We live near a street called Main (which it’s not) and a neighborhood called Mount Pleasant (there’s no mountain but it’s mostly pretty nice). Three weeks back, under the rubric “Pleasant Day”, they blocked cars off nine blocks of Main, and the street was repopulated with retail stands (mostly from the street’s merchants), eat/drink patios, and live music.

It was sunny and everyone was happy, me too for a couple of hours. I also enjoyed taking pictures and editing them.

Woman pats a hairy white dog at a grooming vendor stand

There was a dog-grooming stand with a big white dreadlocked beast that enjoyed everyone’s attention.

Lucky’s Books and Comics features the Odyssey

Lucky’s Books and Comics is an excellent bookstore. Their selection echoed the summer-2026 zeitgeist.

Racks and racks of Indian-flavored clothing Indian-flavored clothing vendor makes a sale

There were a couple of stands selling India-flavored garments , they seemed to be doing good business.

Selling trinkets at the street fair

Chinese-flavored trinkets too.
Check out the dog.

Woman shopping at a flower truck

Who couldn’t smile at a flower truck?

Little Sun Studios live printing has a banner saying “BE GAY DO ART

BE GAY DO ART they said.

Gaily-costumed fellas at the honey shop

Or just chill at the honey shop.

Woman singing karaoke at the Eddie Lam piano lessons stand

She was pretty terrible but everyone enjoyed it.

There’s nothing I can think of that would improve the message on that T-shirt.

A man wears a T-shirt reading “International Drummers for Jesus Celebration 2004

I didn’t shoot the deputy

Yesterday I was out on an errand with a pretty severe eldercare hangover — man, that can get you down — when I heard I Shot the Sheriff playing. I first thought it was a radio or something, but no, it was Reggae Night with Mostly Marley and they were freaking excellent, razor sharp.

I felt a smile welling up from inside, the first in days. Now I’ve bookmarked it.

Dununba, Sangban, Kenkini (and Stands) 8 Aug 2026, 12:00 pm

Those first three words in the title name the members of the Dunun family, cylindrical West-African drums that you usually put on a stand to play. Think of those sizes as Papa bear, Mama bear, and Baby bear; the names are a bit onomatopoeic. I bought a set and, separately, stands to put them on. They’re pretty enough that I want to post their pictures, which gives me an excuse to share West-African drumming vibes. And recommend products.

Motivation

I’ve been studying West-African (and a bit of Afro-Cuban) drumming for decades. This kind of music relies on dununs, djembés, and bells. Djembés are goatskin and played with bare hands, dununs cowhide and with sticks. In class, we play the dununs in traditional style, one drum per person, one hand playing the drum sideways on a stand, the other tapping (with a stick) a bell strapped to its top.

horizontal dunun

Dunun on a stand (but no bell attached).
Courtesy of Drumskulls (see below).

I’m reasonably proficient on the djembé but nobody would call me a star; I can keep to the beat at a reasonably fast pace and even improvise a bit. On the single sideways dunun, I can get along.

For the last couple of years, I’ve been in an invite-only weekly drum jam; a dozen or fewer of us gather in an old church and create rhythms together for a couple of hours. For me, this has become a major mental-health crutch.

One of our regulars, guy named Mark, brings along three dununs mounted side-by-side vertically so you can play rhythms across all three.

Les Ballets Africains homepage

That setup is called “ballet style” because it was was popularized by Les Ballets Africains (that site is worth a visit, as is this documentary).

Anyhow, Mark plays djembé sometimes and welcomes others playing his dunums when he’s not, assuming they ask first.

I’d lacked the nerve to ask  — Mark is a pretty elite drummer — but one time a few months ago I felt daring and gave it a try.

Which awoke an unsuspected internal demon. I found playing along with the rhythm effortless, then improvising on top of it; my hands went to surprising places, it seemed of their own accord. Eventually I got excited and was leaping around a bit while playing. After, two of our crew called me out and said that’d been excellent. I love consuming music but very rarely as in never before get compliments about performing it.

I took my turn standing in on Mark’s drums for the next few weeks and had similar fun every time. So I decided to get some. Obviously this involved a lot of research and asking around; I generally prefer to buy used instruments, but couldn’t turn anything up. Mark told me, and others concurred, that a really good source would be Drumskull, where Mark had got his, now 15 years old and still sounding sweet.

Drumskull drums logo

Acquisition

There was a small problem, namely that I’m currently boycotting products from the United States of MAGA. But when I emailed and talked with the Drumskullers, it turned out they were old-school hippies from Santa Cruz, which, I decided, earned them an exception.

Then there was a big problem, namely shipping. Somehow Purolator broke the three drums into two shipments with different addresses, both wrong. Multiple phone calls and emails and support-bot interactions occurred and I got seriously bent out of shape. Purolator, you had one job.

Finally I got them, here they are.

Three dununs on ballet-style stands on uncut grass Three dununs on ballet-style stands by a kitchen island

I think they’re handsome. Also, they sound wonderful, although Drumskull tells me it’ll take a while for them to break in properly. I also got cases for each from Drumskull and those are superb, I’d feel confident checking them in on an airplane or tossing them into the back of a truck. They also came with three pairs of drumsticks.

I strongly recommend Drumskull. Thanks, guys.

The downside is they’re really freaking heavy, in particular that big Papa-bear drum. By the time I get them out of the house into the car, then out of the car into the church, I’m panting. I’m thinking that on some evenings I could get leave Papa bear behind and get along with the two higher-voiced dununs.

Stands

The observant reader will have noticed that in the pictures, the dununs are sitting on nice wooden stands. These are from Shaw Percussion, located in rural Ontario. They’re good people;I recommend them.

The great thing is that they’re adjustable to fit your drums, look nice, and very stable. The bad thing is that, because of being adjustable, they’re heavy and have pointy bits. We have a friend/contractor who’s a gifted carpenter, I may ask him to build a custom set which should be lighter and simpler.

Give it a try!

Most cities have an African (and less often Afro-Cuban) drumming community and/or teachers. Most teachers provide drums so the barrier to entry is low. It’s energetic, fun, and will probably change the way you think about rhythm. Also, strikingly gender-balanced both on the teaching and learning side.

If we ever meet at a drumming event feel free to ask for a turn on my dununs.

Upside Down 3 Aug 2026, 12:00 pm

The world is, I mean. Bottom-up. Maybe that’s just me not understanding? It doesn’t surprise me that there are people who are stupid and/or evil. The surprise is, the others not voting them out of office, passing legislation outlawing what they’ve been doing, and sending the ones who don’t stop to prison.

But anyhow, I got some amusing photographs at a local garden that are, um, reflective, wanted to blog them, picked the obvious title, then the paragraph above came out. Don’t forgive me. Weird times, bad craziness, etc.

Pond surface featuring lily pads and the reflection of a tree Pond surface with lily pads and a network of branches between the pond and sky Trees and a complex plant assortment are reflected in a murky water surface

In an upside-down world, reasonable people won’t be. Eventually. I hope.

Calm water helps me calm down. Try pointing your camera at it sometime.

Six Summer Days of Music 26 Jul 2026, 12:00 pm

I spent last week at a summer music camp put on by WCAMS, the West Coast Amateur Musicians Society, pronounced “Wickams”. My goal in writing this is to influence a few readers in the direction of attending this sort of thing if there’s one near you. You might be a candidate if you partake of some subset of: Loving music, getting old, being female, worrying about mental fitness, and having time available to invest as you please rather than as you must.

Cover of the WCAMS 2026 camp booklet

The facts

250 attendees, a couple of dozen faculty (all professional musicians), a lovely waterfront venue at a swanky boarding school campus in an isolated small town. The picture above is the cover of the camp booklet.

View from the Malahat highway to Mill Bay

On the way to the camp.

well-manicured lawns stretch down to the Pacific

This space, while the camp is running,
usually contains at least one person
or group emitting music.

Let me should expand on that list above.

  1. If you love music, there are multiple concerts per day, some quickies by whoever wants to between sessions, some highly polished offerings from the faculty. They all offer pure sound; unamplified and in music-friendly spaces. The volume and balance and tone are achieved by the performers’ technique and love, nothing is digitized or amplified.

    Then there are the concerts you’ll be practicing for and playing in.

  2. The most common hair color was gray. I mean, there were kids and teens and thirtysomethings, but I’d say more than half the people were at least semi-retired. Not sure why, but it may have to do with retirees having spare time and no childcare duties, and music having been more widely taught back when us Olds were kids, and the price, $1300 Canadian (about a thousand US) per person, bed and board and music all-in. The venue was a private boarding school, thus “bed and board” was of a school-dorm standard, clean and complete but very basic.

    There were attendees who were unsteady on their feet and needed a golf-cart to get around and help on the stairs, but they could still play the hell out of their fiddle or trombone or whatever.

  3. The place was a matriarchy. My small string ensemble had three men and ten women, my cello seminar eight and two. Don’t have a glib explanation except that music teachers were plentiful, and women are over-represented in the teaching professions. So, it’s a space where (I’m guessing of course) women are less likely to feel crowded out or bossed around.

  4. As for mental fitness while aging, the research is in and it’s not subtle. Music, both listening and performing, is good for your mind/brain generally, and specifically reduces the risk of dementia.

A woman is towing a large horn behind her in a small cart

For privacy reasons, we were all asked not to share photos from the camp in public, but I think this one is safe.

The music

I found the choice of tunes contrarian; did not hear a single Mozart chestnut. I think this works because everyone at the place is musically literate and many are erudite; they’ve heard enough Mozart classics. Let me sort the choices. One basket: Works written in the attendees’ lifetimes, including a lot of female composers and Canadian stuff. Another: Oddments from the back pages of the usual titans, for example Beethoven’s Septet (his first big hit, he came to hate it), and the graceful but weird second movement of Stravinsky’s Concerto in D. Another: Popular-music classics arranged for acoustic instruments. I heard (and will have more to say about) Bohemian Rhapsody for woodwind quintet, Cohen’s Hallelujah for seven violas, and the Cowboy Junkies’ Cold Tea Blues for four female voices and ukulele.

The big final choir-and-orchestra blowout, with 110 people on stage, was Brahms’ Schicksalslied, which I bet almost none of the people reading this have ever heard of (I hadn’t).

And also Bach. Because of course.

How it works

You join as many ensembles as you care to. Most people will find themselves in one chamber group or another, an orchestra or choir, and some sideline track like for instance, Early Music, Celtic, or Vocal Jazz. The organizers try to get the music mailed out a few weeks before the camp, but some lags and some only arrives when you hit the first session on Monday. You get five hours of rehearsal and then you perform it on Friday night or Saturday.

Obviously this calls for quite a bit of practice; there’s plenty of space for that. As you walk from wherever to wherever around the joint, you always hear the call of some instrument or voice, often running repeatedly through a tricky bit. Noobs join as many groups as they can fit in the schedule. Veterans have learned to dial it back a bit; I took their advice, signed up for only five tracks and performed only twice.

All this is a pretty fucking intense experience, let me tell you. And here’s what I’ll take away: The radiant and heartfelt smile on the face of nearly every musician when they finish their performance. And basically every piece gets thunderous applause, with hollering. Usually but not always deserved.

My adventure

I am not particularly gifted at music. I’m old and have pursued the cello on and off since I was a kid, with much more off than on and multiple no-cello decades. What happened was, my wife Lauren is a gifted singer with a powerful soprano who enjoys participating in choral music. Her choir buddies have been encouraging her to come to WCAMS for years. I wanted to support her and it sounded like fun, so I ended a 25-year gap and started cello lessons again last October. It’s been painful clawing my way back toward my previous level of skill, which was never that great. But WCAMS makes it clear that beginners are welcome, will be encouraged and supported. So we signed up.

Anyhow, my cello skills were solidly in the bottom quartile of the couple of dozen cellists in attendance. Which was humbling but not a problem actually, because of that encouragement and support I just mentioned.

But during that 25-year cello gap I took up the study of West-African and Afro-Cuban drumming, with weekly lessons, and then for the last year or so, regular participation in a multi-hour by-invitation-only weekly drum jam. Judging one’s own talents is tough, but I seem to get musically further with less work on the drumming side. I even get the occasional spontaneous compliment that isn’t just politeness; something that has rarely-to-never happened in my cello career. So I see drums as my primary musical hobby.

But WCAMS doesn’t have an African-music group; thus my cello lessons. Then when we got the initial program I spotted the Celtic track, and I know that music comes with drums.

A basic bodhrán

So, without asking anyone whether it was a good idea, the week before the camp I rented a bodhrán. It came with a “how to play” DVD that I watched all of, then I went and typed “bodhrán practice music” into YouTube and of course there’s plenty. After a few hours I was confident that I could keep up if they didn’t go too fast (they didn’t). It’s pretty easy to play even though the actual strike-the-drum motion is eccentric, unlike any other percussion instrument of my acquaintance.

I should mention that “bodhrán” is pronounced with the “dh” silent, “bo” as in “bother” and “rán” as in “roan”.

At the opening-night gathering, I tracked down Amy, the Celtic-track leader, and asked if it would be OK if I showed up with the drum. She was welcoming (everyone at WCAMS seems permanently welcoming). When we struck up the first tune at the beginning of our Monday gathering, she looked a little nervous but when I joined in she nodded emphatically; it turned out the last time a fresh face equipped with a bodhrán had turned up, they couldn’t actually find or stay with the beat.

Anyhow, I joined Amy’s Beginner and Advanced classes, learned a whole lot about Celtic music (starting from zero helps), and had more fun than ought to be legal. Got unsolicited compliments. Our performance was at the wind-up party after the big final Brahmstravaganza, and the crowd yelled and whistled, dancing broke out. I was full of joy — I think the whole band was. I’ll never forget it.

Musical take-aways

Here are the ones that I can still hear when I think back on them.

The woodwind quintet (who came to camp together as a group) played Bohemian Rhapsody on that little waterfront auditorium in the picture above. The arrangement was respectful and skilful and it highlighted what a wonderful, complex, piece of music that is. 100% by Freddy Mercury, who we all think of as Queen’s muscle, but this is a masterpiece by one of the last century’s top composers, any genre.

Arvo Pärt’s Spiegel in Spiegel by faculty cellist Marina Hasselberg and percussion pro Greg Samek, the latter on vibraphone. Exquisite, the notes suspended in space like rays of light.

Krunk, an Armenian folk song full of tragedy, on solo flute. Impossible to keep your eyes dry.

A Ukrainian song, lyrics by Shevchenko (there are lots, not sure which) delivered by Eric Hominick, a great singer and pianist who is about to retire from the West to East coast, and will be much missed.

Pride of Petravore is a hornpipe, the song that the awesome Amy Stephen used to launch the Celtic-music track. She projected the music on the whiteboard but wouldn’t make a print-out, insisting that we learn it so that when we opened our set we’d be focused on the music not the notes. It’s the song that Amy used to teach me I could get along on bodhrán.

I’ll be honest, I’ve always liked Irish-traditional music, have even been lucky enough to hear it in its natural habitat, a rundown pub in a remote corner of Ireland. But I’d never actually thought about it much. Now I have, and it’s deeper and stranger than I’d imagined. I’m pretty sure I’ll be investing time in it.

I really hope I get a chance to learn from Amy again, one way or another.

D.I.D. Choi is a young Canadian composer who, in his twenties, is off in LA, working on music for films and games and so on. His Remembrance, written in 2019, played by a wind ensemble, created a cloud of music magic in the air over the stage. I found my eyes closed, better to take it in. I’m going to suggest if you notice a concert anywhere near you with something by Choi, run don’t walk to the ticket booth.

I already mentioned the Cowboy Junkies’ Cold Tea Blues and it’s the one that hit me the hardest. The four singers had lovely light voices, the ukulele swung gracefully, and they did a bit of gentle choreography. The harmonies were fabulous. Anyone who’s heard this (and you can guess from the title) knows it’s not a happy song, but they shuffled that under the covers, casting a spell of light-hearted romance. Then when they planted the cruel razor sharp-hook at the end of the line of lyrics they’d been dangling so invitingly, there were audible gasps and cries of sorrow from the crowd. Never experienced anything like it.

Big band!

I’m old, but this is the music my parents listened to. I’d always thought of it as boring fuddy-duddy stuff. That was, until I got in a theater with good acoustics and a live 20-piece brass band. This stuff is loud and aggressive at a level that approaches Rock&roll, the arrangements are better, and the tunes are strong.

The way it works is, the different horn sections hand the melody and chorus back and forth, never the same twice, then somebody stands up and plays a solo, a pre-assigned number of bars. There was this one solo by a young trombonist that pretty well melted my mind. I wonder if this stuff retains any commercial viability, as in, is there somewhere I can go out and see it?

Anyhow…

Earlier today I bought the rental bodhrán, it’s a basic model and was pretty cheap. I think it’s full of happiness.

Sports and Truth 10 Jul 2026, 12:00 pm

This summer has been very sporting; in the course of a couple of weeks I attended a World Cup match and a minor-league baseball game. Took pictures and thought about enjoying this stuff.

“Haha, sportsball…

I know that a whole lot of people, including not a few among my online audience, see neither joy nor virtue in fandom. That’s an attitude they’re entitled to have assuming they realize the absence of joy is a them thing.

After joy there’s virtue. Yes, organized professional sport raises serious ethical issues. That’s putting it politely. Many-to-most branches of commercial sport are rife with exploitation, oppression, and corruption. I’m not going to push back, and in fact I sometimes feel guilty about enjoying the spectacle as much as I do.

More to come on that.

On hating FIFA

I’m not going to re-tell the tales of galaxy-scale corruption, the ostentatious displays of wealth and privilege, and the cozying-up to dictators, both real and wannabe. Attending the 2026 World Cup gave me more reasons to hate; in particular the ticket-buying experience.

I have always loved fútbol generally and the World Cup in particular, as witness the plentiful digital ink I’ve spilled on the subject here on the blog. So when we learned that there were going to be games in Vancouver, I determined that I’d attend one. It was obvious they’d be popular so I decided to pounce on the first opportunity. Which is how I ended up buying (no, really) an NFT.

FIFA’s first round of sales wasn’t tickets, but NFTs, some of which came in packages that included a right to buy tickets for a game, participants unknown. Here — the first and I fervently hope the last time I link to an NFT — is part of the package. Can’t show you the right-to-buy NFT because I had to “burn it” to turn it into tickets.

Neither the NFT nor the tickets were cheap; my son and I attending that game cost well over a thousand (Canadian) bucks. (At this point, other attendees are scoffing at me for having paid so little.) For what it’s worth, the seats were good.

And let’s further enhance our basket of reasons to hate FIFA by noting that the ticket prices exclude everyone who’s not a member of a very privileged demographic.

The match

It was Egypt vs New Zealand, played at Vancouver’s “BC Place” stadium on June 21st.

Preparation for Egypt vs New Zealand at the 2026 World Cup

The march-in ceremonies.

New Zealand kicks off vs Egypt at the 2026 World Cup

New Zealand kicks off.

Confession: My son and I had a blast, can’t think of it without smiling. Most of downtown Vancouver had become a swirl of happiness, people dressed up in all sorts of fanciful outfits, singing, chanting, drinking, dancing, photographing. I particularly liked the pharaoh’s-headdress the Egypt fans were wearing.

The game was great fun — watch the highlights. NZ played better than their international rating would suggest and we got to watch Mo Salah carve his way into the defense and put away a lethal strike.

There were way more fans from Egypt than from NZ, but the Kiwis had better-organized cheering; they’ve figured out how to set the syllables of “Aotearoa” to the Seven Nation Army riff, and does it ever sound great.

And, while FIFA are assholes, those assholes really know how to run a tournament. They had sold out BC Place to the last seat, but never for a moment did I feel scarily crowded. I even managed to grab a decent beer and sandwich at half-time without feeling crushed or catching Covid; it helped that I masked up.

I’ve watched a lot of the tournament on TV and enjoyed it. The games, to be frank, have become less and less interesting as the idiosyncratic minor players (in particular the non-European ones) get eliminated by the better-funded Euros with their crushingly-precise and often-boring game. It would’ve been nice if the final four included an outsider.

And if you can set that FIFA issue aside, at some level it’s a beautiful thing; nations competing against each other in a framework built on raw aggression, physical virtuosity, disciplined teamwork, and kicking a ball around.

World Cup without FIFA?

It could be done and it’d be politically popular. The nations of the world get together, dissolve FIFA on the evidence of its many sins, and run the tourney on some sort of co-op basis. They could slash most of the ticket prices and there’d still be buckets of money to go around to the national associations and some selected charities, based on the sponsorships and TV rights. Some of it would go to peacekeeping and Doctors Without Borders.

I can dream.

The game

(One says “football match” and “baseball game”. Sounds wrong the other way around. Yay English.)

It was my son’s birthday so nine of us went off to watch the Vancouver Canadians host the Eugene Emeralds in what’s called the “High-A” minor league. Oh my goodness, you can actually watch video of the whole game. I don’t recommend it. The tickets for nine, decent seats, cost $276 all in.

Vancouver Canadians vs Eugene Emeralds, July 1, 2026

It was an OK game. Vancouver leapt to an early lead, then the pitching collapsed and the Emeralds got 12 runs; the home team brought it back to within three by game’s end.

But, what a happy place! Kids everywhere, dressed in hot-dog condiments and pop stains. Snuggling couples. Beer vendors. Hollering hosers.

Since, in baseball, nothing is happening most of the time, the emphasis is on chit-chat and eating and drinking and people-watching. I noticed that when I wasn’t talking I was usually smiling.

This happened: My son’s partner, let’s call them “X”, is of East-Asian extraction — a Richmond kid, for the Vancouver-savvy. Born here, perfectly Canadian, but sports-oblivious and had never been to a ball game. When the seventh-inning stretch came along, I tapped X’s shoulder and said “time to get up and sing”. The crowd charged lustily into Take me out to the ball game, and X’s face got this absolutely hilarious I’m-on-an-alien-planet look. Later, X told me “That’s the whitest thing I’ve ever seen.”

After the game, fireworks. They were pretty minor-league.

So MLB is OK?

I have a bit of back story. While working at Sun and then for AWS, I helped MLB evaluate and use various bits of Internet technology. Of all the world’s sports organizations, MLB is apparently the leader in using the Net to promote and deliver their product. Plus the people I worked with were nice and highly competent. It was one of the highlights of my career.

You will have noticed an absence of the sort of ranting that FIFA provoked above. Does this mean that the MLB organization is honorable and nice? Not at all. They are a gaggle of billionaires with an explicit grant of monopoly privileges in the USA.

The Vancouver Canadians are the only surviving minor-league team in Canada; MLB has shut down many minor-league teams because while they make people happy they don’t make much money. Baseball is a big business and, just like any other big business these days, often acts in ways that most people would consider unethical.

There’s what looks like a really good book about all this, Homestand: Small Town Baseball and the Fight for the Soul of America by Will Bardenwerper. I haven’t read it yet, but you can get the gist in this conversation between Bardenwerper and Chris Arnade.

The problem is…

…not baseball, nor fútbol, it’s late-stage capitalism, which reliably makes anything it gets its hands on worse. If we don’t like the way those guys behave, and in particular if we think some of it should be illegal (it should!) that’s a political problem that has to be addressed with politics. Feels like it would be a pretty popular party platform plank.

I’m not one who’ll preach “no ethical consumption under capitalism” at you, but I don’t have a good come-back when someone challenges me on sending money to the FIFA or MLB scum. Is there anyone reading this who is entirely comfortable with all the places and practices that bring them enjoyment?

The truth is on the field

The worlds of business and politics never contain a sentence that’s unscripted or incautious. The substrate of trust that a society needs to function is today weakened and still weakening. There’s a pervasive belief that what’s on our screen is at least in part self-interested untruth or, put another way, marketing. I often think of this as “The LinkedIn pathology”.

Not out on the field. When Mo Salah’s got the ball at his feet and charges at the NZ back line, nobody in the world knows what’s going to happen in the next few seconds. When the Canadians’ pitcher walks in the fifth run of the inning, nobody can tell which way his search for the strike zone will turn.

It’s unpackaged, unvarnished, and unedited. It’s physical truth, being created in real time.

Put another way: Live unscripted improvised drama. It’s not like anything else in most people’s lives; the only thing I can think of that comes close is an instrumental break in a jam, whether that’s in your basement on a stage before thousands.

It thrills and entertains me. I make no apologies for that. I’d sure like to improve the societal basis that poisons it, and increasingly more and more aspects of our lives, so I don’t have to feel bad about being a fan.

In the meantime, 🎵Take me out to the ball game…🎵

Mastodon, The Only Good Choice 5 Jul 2026, 12:00 pm

Dear World: Now is a good time to get off social media that’s going downhill. Where by “downhill” I mean any combination of less useful, less safe, or less fun. It’s time for something better, and by “something better” I mean Mastodon. Which, I’m here to say, offers a better social-media experience than the alternatives. Furthermore, the alternatives are fatally flawed.

By “Mastodon” I mean the many servers, mostly (but not all) running the Mastodon software, that communicate using the ActivityPub protocol. Now I’ll try to convince you to start using one of them.

[I posted an earlier version of this essay called Time To Migrate last year, but enough things have changed that it’s worthwhile revising and reposting.]

join-mastodon.org

Start at joinmastodon.org

The simplest argument

Have you noticed that social-media products, in the long term, seem inevitably to enshittify? I have. But there’s a major exception, a tool that’s been serving billions of us for decades, and works about as well as it ever did. I’m talking about email.

Why does email stay reasonably healthy? Because nobody owns it. Anyone on any server can communicate with anyone else on any other. Nobody can buy it and make it a vehicle for their politics. Nobody can crank up the ads or make things worse to improve their profit margin.

Mastodon’s like email that way. Plus it does all the Post and Repost and Quote and Follow and Reply and Like and Block stuff that you’re used to, and there are thousands of servers. Anyone can run one and nobody can own the whole thing. It doesn’t have ads and it won’t. It’s dead easy to use and it’s fun and you should give it a try.

The rest of this essay goes into detail about why Mastodon is generally great and why the alternatives have little future. But if the pitch sounds good so far, stop reading, go get an account, and climb on board.

Why now?

Along with that “can’t be owned” and “no ads” stuff, the software is getting really good, particularly in the last couple of releases. It’s got cool features you won’t find elsewhere, and there’s very little cool stuff from elsewhere that’s not here.

There was a time when newly-arrived people had confusing or unfriendly experiences, or missed features that were important to them. It looks to me like those days are over.

Migration

Mastodon is many thousands of servers, and you can join the biggest, mastodon.social, or shop around for another. But here’s the magic thing: If you end up disliking the server you’re on, or find a better one, you can migrate and take your followers with you! You can’t ever get locked in.

Choosing a Mastodon server

The server-selection menu has lots of options.

Migration is probably Mastodon’s most important feature. It’s why no billionaire can buy it and no corporation can enshittify it. As far as I know, Mastodon is the first widely-adopted social software ever to offer it.

Interaction

You hear it over and over: “I had <a big number> of followers on Twitter and now I have <a less-big number> on Mastodon, but I get so much more conversation and interaction when I post here.”

One of the people you’ll hear that from is me. My follower count is a bit less than half the 45K I had on Twitter-that-was, but I get immensely more intelligent, friendly interaction than I ever got there. (And sometimes I get told firmly that I’m completely wrong, but hey.) It’s the best social-media experience I’ve ever had.

Dunno about you, but conversation and interaction seem like a big deal to me. One reason things are lively is…

Sex

Here’s an axiom: An ad-supported service can’t have sex-positive or explicit content. Advertisers simply won’t tolerate having their message appear beside NSFW images or Gay-Leatherman tales or exuberant trans-positivity. Mastodon has all that stuff.

Of course, you gotta be reasonable, posting anything actually illegal will get your ass perma-blocked and your account suspended. So will posting anything that’s NSFW etc without a “Content Warning”. That’s a built-in feature of Mastodon which puts a little warning (“#NSFW” and “#Lewd” are popular) above your post, which is tastefully blurred-out until whoever’s looking at it clicks on “Show content”. I use these all the time when I post about #baseball or #fútbol because a lot of the geeks and greens who follow me are pointedly uninterested in sports.

(Oh, typing that in reminds me that you can subscribe to hashtags on Mastodon: Let’s see, I currently subscribe to, among others, #Vancouver, #Murderbot, and #Fujifilm.)

The Ivory For Mastodon app for Apple platforms

The “Ivory for Mastodon” app for Apple platforms,
one of the many fine alternative clients.

Moderation and defederation

Did I just mention, two paragraphs up, getting blocked? Mastodon isn’t free of griefers, but the tools to fight them are good and getting better.

The good news is that each server moderates its own members. There’s variation of the standards from server to server, but less than you’d think. Since there are thousands of servers, there are thousands of moderators, which is a lot.

If you act in a way that others find offensive, you’ll probably get blocked by the offended people and also reported; the report can come from any server and it’ll go to the moderators on yours. On a well-run server, those mods will have a look and if you’ve actually been bad, your post might get yanked and you might get warned, or in an extreme case, booted off.

(I’ve been reported for saying unkind things about Bibi Netanyahu and for posting too many photos of my cats (no, really) but that kind of thing is cheerfully ignored by good moderation teams.)

Then there’s Mastodon’s nuclear weapon: Defederation. Suppose you’re prone to nasty bigotry in public and you get reported a lot and your server’s moderators don’t rein you in. Eventually, word will get around, and if things aren’t cleaned up, most servers will defederate yours, so that nobody on their server can see posts from anyone on yours. Your site is no longer part of the “Fediverse”; this is a powerful incentive for server owners to take moderation seriously.

The effect is that the haters and scammers and Nazis who show up mostly get shuffled off-stage PDQ. Not always, unfortunately; a couple of years ago a wave of incoming Black people had bad experiences with racist abuse. Ouch. Is there anywhere in the world that a loud-voiced Black woman won’t provoke a chud eruption? [sigh]

But the good news is that recent Mastodon releases have been shutting prone-to-abuse channels down, so things are better than then and should continue to improve.

Links are good

Corporate social-media services like to downrank posts with links. Which makes me want to scream, because my favorite thing to post is a link+reaction to something cool, and so are my favorite posts to read.

On Mastodon, when your post has a link, the software automatically fetches a preview of whatever you linked to and uses it to decorate the post. I mean, it’s the damn Internet, it only got interesting to non-geeks when we figured out how to turn millions of servers into a great big honking searchable hypertext.

Search

Speaking of which, Mastodon search is pretty good these days. It’s become, just like this blog, part of my outboard memory, and I’m always typing things like “telephoto from:me has:media” into the search box. Fast enough, too.

Great clients

Another good thing about Mastodon is that there is plenty of good client software to choose from, mostly open-source. The best ones are miles ahead of Xitter and Threads and Bluesky and, really, anything.

A post from Brian Krebs in the Tusky app

Anniversary post in the Android “Tusky” app.

There are official Web and mobile clients from the Mastodon team and they’re fine, especially for admin and moderation work. But iOS people should check out Ivory, Androiders should look at Tusky, and everyone should try Phanpy. I live in Phanpy on both my Mac and my Pixel — it’s a Web thing but installable as a PWA.

Commercial products, especially social-media services, have never been at peace with third-party clients. Twitter used to be, but then it stabbed those developers in the back. It’s easy to understand why; every product manager has it drilled into them that they must control the user experience. This ignores the ancient wisdom (I first heard it from Bill Joy) “Wherever you work, most of the smart people are somewhere else.”

Mastodon doesn’t have that kind of product manager, but it does have a fully-capable API, developed in the open and with no hidden or restricted features. Which means you’re going to get better clients.

Algorithms

The algorithms that commercial social-media services use to sort your feed have one goal only: Maximize engagement and thus revenue. They have no concern for quality or morality, and have been widely condemned by people who think about this stuff. So much so that there’s a feeling that Algorithms Are Bad.

Mastodon has an algorithm: Show the posts from the accounts you follow, latest first. It works pretty well. It also has “Trending” feeds of the most popular posts, hashtags, and links. I hit those once a day or so to get a feeling for what’s going on in the world.

Trending screen in PhanPy

The “Trending” display in Phanpy.

I do think there’s room for improvement here; Bluesky has shown off the idea of pluggable feed-ranking algorithms, with many to choose from, and I like it. No reason in principle we couldn’t have the same thing on Mastodon.

Money

Every other social network has started with a big pot of money, whether from venture-capital investors (Twitter, Instagram, Bluesky) or from a Big Tech corporate parent (Google+, Threads). The people who provided that money want it back, plus a whole lot more. Thus, the manic drive for “engagement” and growth at all costs. They need to build huge data centers and employ an elite operations team plus an even more elite marketing group.

Mastodon, eh… a gaggle of nonprofits and co-ops and unincorporated affinity groups, financed by Patreon or low annual dues or Some Random Geek who likes running a server.

Since nobody owns it, nobody can extract a profit from it. Which means that from the big-money point of view, it’s entirely non-investable. The goal isn’t for anybody to make money, it’s to be instructive and intense and fun. It’s run on the cheap. You know what they call systems that are cheap and diversified? Resilient. Sustainable. Long-lived.

Last year I wrote: “Think of the Fediverse not as just one organism, but a population of mammals, scurrying around the ankles of the bigger and richer alternatives. And when those alternatives enshittify and fall, the Fediversians will still be there.” After “scurrying” I should have added “and evolving”.

But Bluesky!

I like the Bluesky people and their software and some of their ideas. But I don’t see it as a good long-term option, for two reasons. First, it’s not decentralized, in that it couldn’t survive if Bluesky Social PBC fell on bad times. Yes, I know about BlackSky (am a fan) and Eurosky (dunno enough yet) and they don’t change my opinion.

Second, I think it’s inevitable that Bluesky-the-company will indeed go sour. They have raised a total of $123M in venture-capital investments. The biggest chunk, $100M from Bain and friends, was signed in April 2025 but not disclosed until a year later. Why not, I wonder? Actually, I don’t wonder at all: Because they knew perfectly well that long-term survivors like me would be horrified.

You, see the people who coughed up all those millions didn’t do it out of pure love or idealism, they want Bluesky to become a money machine that emits a fountain of gold so they get a payback in the billions. Which, OK; that’s what Venture Capital is for. Except for, I see no evidence that Bluesky has anything resembling a business model. See the problem?

I see two possible outcomes: The company craters when the money runs out, or it builds a lucrative income stream, probably based on advertising. Which means we can expect to see the pathologies that make X and Facebook and friends so loathsome.

Mastodon’s the only option

The only social-media option, I mean, that’s decentralized, not owned or controlled by anyone, and working well today as you read this. It’s intense and interactive and fun. Why settle for less?

(Disclosure: I have no formal connections with the Mastodon organization, aside from being a low-level supporter on Patreon.)

Automata, Built For Comfort or Speed 14 Jun 2026, 12:00 pm

It’s been a while. February was the last entry in this Quamina Diary; I never stopped working on it but there hasn’t been much blogworthy. This piece offers a progress update for those who’ve been entertained by Quamina, and also a pleasing (well, to me anyhow) dip into finite-automata theory and practice. With numbers and graphs and a bluesman!

Since it’s been so long, here’s what Quamina, a Go-language library, does: You can add “Patterns” to a Quamina instance, they match the values of fields in JSON objects, and then you show Quamina a JSON “Event” and it’ll tell you which Patterns matched it. It’s pleasingly fast and in many cases the speed is not strongly affected by the number of Patterns you’re trying to match.

The last release, V2.0.2 back in March, marked the arrival of a reasonably-full regular-expression dialect into Quamina’s pattern language, so you can say, for example, that the Filename field has to match map-[0-9]+.(png|pdf|jpe?g). Regular expressions were a lot of work and a lot of fun.

Finite-automaton wrangling

Quamina works by compiling the Patterns into finite automata, then matching the Event fields by traversing them. To handle multiple Patterns, Quamina merges the automata together, a technique that’s been well-studied in Computer Science for decades. From a set-theoretic point of view it’s a union; an OR through Boolean lenses. There’s really no limit in theory for how many patterns you can merge, and Quamina has no problem at all with thousands.

There are two flavors of finite automata: Deterministic (DFAs) and Nondeterministic (NFAs). If you have a university degree in CS they probably made you study this at some point. Weirdly, many people find the subject boring.

I’m not going to explain the differences, if you want to know it’s easy to look up, and anyhow the story I want to tell doesn’t need it. Here’s what the story needs:

  1. To implement wildcards and regular expressions, you need NFAs.

  2. Matching data with DFAs is generally a whole lot faster than with NFAs.

  3. There’s a well-known algorithm for transforming any NFA into a DFA that matches exactly the same data. It’s really a lovely algorithm, you want to tickle it under its adorable little chin.

  4. In some cases, the algorithm can be brutally expensive, along the lines of O(2N).

The benchmark from Hell

I found a data file in the Wordle source code with 13K or so 5-letter words. I inserted a * at a random location in each. To illustrate, here are the first five results: aah*ed, aalii*, *aargh, aar*ti, and abaca*.

The benchmark is, you load these into a Quamina instance and measure how fast it is to load them, how much memory the merged NFA consumes, and how many Patterns per second you can match. Then you repeat the exercise, converting each NFA into a DFA.

Willie Dixon

I loaded 10K Patterns in NFA form, but the NFA-to-DFA conversion got so brutal my patience only allowed me to load and measure 300 in DFA form. (Which kind of gives away this article’s punchline but stick with me, the details are fun).

Willie Dixon

He was a famous bluesman and I need help from him to explain my APIs.

Quamina’s latest PR adds APIs to turn the NFA-to-DFA conversion on and off; it’s off by default. There are two MatcherBuildMode values, BuiltForComfort and BuiltForSpeed. Which are out-takes from Willie’s 1959 song Built For Comfort, and the lyrics go like this:

Some people built like this, some people built like that,
The way I’m built, don’t you call me fat
Cause I’m built for comfort, I ain’t built for speed
…

Willie was a big guy, way over six feet and not exactly slender. I know this because I interviewed him once, but that’s another story. Lots of others have covered this tune, most of whom are, um, well-rounded.

Speaking of which… here is Quamina’s memory consumption in NFA mode.

Memory cost of many merged NFAs

The memory cost is pretty well linear in the number of patterns. For 10K patterns Quamina uses something over 25M which feels kind of reasonable to me.

Here’s the story for DFAs.

Memory cost of many merged DFAs

I haven’t run regressions or anything and I don’t think that’s actually O(2N), but the second derivative is solidly positive, which in simple English means “doesn’t scale”.

Now let’s look at the Pattern-addition time for NFAs and then DFAs.

Time cost of merging many NFAs Time cost of merging many DFAs

Once again, the NFA cost increases more or less linearly (albeit interestingly jagged), while for DFAs, look at that second derivative. This was what eventually made my patience give out and limit the DFA run to 300 Patterns.

Now let’s look at the payoff, the number of Event matches/second in NFA- and DFA-land.

Matching speed of many merged NFAs Matching speed of many merged DFAs

The NFA performance degrades at something like O(N-1), but DFAs just don’t care. After a few lurches it rolls along at between 500 and 600K/second. Not bad, and based on experience with huge DFAs that were built from exact string matches, my belief is that the matching speed would eventually drift down, but slowly, not remotely a linear function of the number of Patterns.

Not just pictures but numbers too

It was maybe a little unfair to compare 10K NFAs against only 300 DFAs, so let’s focus in. (This is on a 2023 M2 MacBook Pro.)

300 Patterns
MemoryAdd-Pattern timeMatches/sec
NFAs860K0.1 ms222K
DFAs45M7.7 sec404K
10K Patterns
NFAs27M2.3 ms21K

That’s pretty shocking stuff. 10K NFAs occupy less memory than the DFAs equivalent to 300 NFAs. And the Add-Pattern time, which is totally dominated by the NFA-to-DFA logic, is getting into intractable territory. So why would anyone mess with the DFA conversion? Because it matches data twice as fast!

Practical advice for Quamina users

First, if you’re a normal human being and only matching a handful of patterns against a few Events/second, ignore all this and just take the defaults, Quamina latency will vanish in the static. If you’re matching lots of numeric and string values against many Events/second, don’t lose any sleep, keep on packing in the Patterns and Quamina probably won’t slow down enough for you to even notice.

In theory you’d eventually get into memory trouble but in my considerable experience with Quamina and its AWS-built predecessor Event Ruler, you have to be venturing into extreme-craziness territory for that to happen. (It did happen. An Amazon group added literally a million Patterns. It still ran way faster than anything else they could find.)

If you need to match wildcards or regexps, adding Patterns stops being free. The slowdown is roughly linear in the number of Patterns and isn’t actually terrible, see the data above. But if you’re using a relatively small number of regexp Patterns, go right ahead and turn on DFA conversion with “BuiltForSpeed” mode.

What next?

There’s one minor Quamina feature that’s disabled in BuiltForSpeed mode, so I’ll need to fix that and do a release.

I bet there are still low-hanging fruits that could speed up the Hell benchmark, but anyone looking for those should bear in mind that they’re fighting settled Computer Science, you’re never going to make NFA-to-DFA conversion reliably linear.

But to be honest, Quamina is starting to feel fairly feature-complete. I’d like to see a few adapters so you could use Quamina with Protobufs and Thrift and CBOR and other formats that aren’t JSON.

But in fact Quamina doesn’t have that many users; I’ve only heard from a handful. Who knows, maybe the problems you learn to solve when you’re working at AWS, and most of the groups think millions of events per seconds is an ordinary workload, aren’t widely applicable in the broader world of Open Source?

Which is to say, me working on Quamina isn’t helping that many people. At one level, I don’t care, because it’s been fun and instructive. I’d probably enjoy turning this “Quamina Diary” series into a monograph or small book if there were an interested publisher.

And thanks to everyone who’s been reading along.

Page processed in 0.199 seconds.

Powered by SimplePie 1.3, Build 20180209064251. Run the SimplePie Compatibility Test. SimplePie is © 2004–2026, Ryan Parman and Geoffrey Sneddon, and licensed under the BSD License.