Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://www.tbray.org/ongoing/ongoing.atom

  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <feed xmlns='http://www.w3.org/2005/Atom'
  3.      xmlns:thr='http://purl.org/syndication/thread/1.0'
  4.      xml:lang='en-us'>
  5. <title>ongoing by Tim Bray</title>
  6. <link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  7. <id>https://www.tbray.org/ongoing/</id>
  8. <link href='https://www.tbray.org/ongoing/' />
  9. <link rel='self' href='https://www.tbray.org/ongoing/ongoing.atom' />
  10. <link rel='replies'       thr:count='101'       href='https://www.tbray.org/ongoing/comments.atom' />
  11. <logo>rsslogo.jpg</logo>
  12. <icon>/favicon.ico</icon>
  13. <updated>2026-05-06T18:11:05-07:00</updated>
  14. <author><name>Tim Bray</name></author>
  15. <subtitle>ongoing fragmented essay by Tim Bray</subtitle>
  16. <rights>All content written by Tim Bray and photos by Tim Bray Copyright Tim Bray, some rights reserved, see /ongoing/misc/Copyright</rights>
  17. <generator uri='/misc/Colophon'>Generated from XML source code using Perl, Expat, Emacs, Mysql, Ruby, and ImageMagick. Industrial-strength technology, baby.</generator>
  18.  
  19. <entry>
  20. <title>Life During Class Wartime</title>
  21. <link href='https://www.tbray.org/ongoing/When/202x/2026/05/03/Life-During-Class-Wartime' />
  22. <link rel='replies'        thr:count='6'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/05/03/Life-During-Class-Wartime#comments' />
  23. <id>https://www.tbray.org/ongoing/When/202x/2026/05/03/Life-During-Class-Wartime</id>
  24. <published>2026-05-03T12:00:00-07:00</published>
  25. <updated>2026-05-06T10:28:35-07:00</updated>
  26. <category scheme='https://www.tbray.org/ongoing/What/' term='The World/Politics' />
  27. <category scheme='https://www.tbray.org/ongoing/What/' term='The World' />
  28. <category scheme='https://www.tbray.org/ongoing/What/' term='Politics' />
  29. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>War is bad. Don’t start one. But we’re already in a class war and we’re losing.     Where by “we” I mean most people; the winning side comprises,     roughly, the richest 0.1% of the population, who are morphing into a hereditary aristocracy. [I mean that, see below.]     So, what to do in a war one didn’t choose?</div></summary>
  30. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  31.    <p>War is bad. Don’t start one. But we’re already in a class war and we’re losing.
  32.    Where by “we” I mean most people; the winning side comprises,
  33.    roughly, the richest 0.1% of the population, who are morphing into a hereditary aristocracy. [I mean that, see below.]
  34.    So, what to do in a war one didn’t choose?</p>
  35.    <img src="https://www.tbray.org/ongoing/When/202x/2026/05/03/Oxfam-distribution-of-wealth.png" alt="Share of global wealth 2010-2015" class="inline" />
  36.    <h2 id='p-1'>How bad is it?</h2>
  37.    <p>It’s really bad, and getting worse fast. I recommend cruising through Wikipedia’s excellent
  38.    article on
  39.    <a href="https://en.wikipedia.org/wiki/Distribution_of_wealth">Distribution of wealth</a>; maybe jump straight to the
  40.    <a href="https://en.wikipedia.org/wiki/Distribution_of_wealth#Wealth_inequality">Wealth inequality</a> section.
  41.    I’ve pulled one helpful graph,
  42.    sourced from Oxfam, into the margin. The article has loads of other statements of the form “The richest X compared to the
  43.    poorest Y have Z times️ as much.” The values of X, Y, and Z are uniformly saddening.</p>
  44.    <p>As a resident of a wealthy West-Coast New-World city, the effects of pathological inequality are in my face every day:
  45.    Bentleys gleaming on the road, ragged people huddled in the rain cadging cash outside the drugstores,
  46.    <a href="https://homelesshub.ca/community_profile/vancouver/">thousands homeless</a>.</p>
  47.    <h2 id='p-5'>Why is that bad?</h2>
  48.    <p>It’s not only sinful by any sane definition of sin, but stupid, inefficient, and damaging. I turn once again to
  49.    Wikipedia: <a href="https://en.wikipedia.org/wiki/Effects_of_economic_inequality">Effects of economic equality</a>.
  50.    I’ll add one pointer to an effect that is less obvious: It
  51.    <a href="https://talkingpointsmemo.com/cafe/inquality-affordability-tax-wealthy">exacerbates the unaffordability crisis</a>.</p>
  52.    <p>One effect of the increasing imbalance between the ultra-wealthy and
  53.    everyone else is the emergence of, effectively, a hereditary aristocracy. “Wait!” you exclaim, “How about high income-tax rates for
  54.    the wealthy, and inheritance taxes?” You might well ask. It turns out those are no longer operative. I’ll get into
  55.    details about that, but first…</p>
  56.    <h2 id='p-3'>A parable: Grant Gustavson</h2>
  57.    <p>I am, as previously related (see
  58.    <a href="/ongoing/When/202x/2025/05/04/Southsiders">Southsiders</a> and
  59.    <a href="/ongoing/When/202x/2025/11/23/Soccer-vs-Football">Fútbol Joy</a>) a fan of the Vancouver Whitecaps Football Club (VWFC)
  60.    who play in
  61.    <a href="https://www.mlssoccer.com">Major League Soccer</a>.  It’s affordable, light-hearted, high-drama, high-quality
  62.    entertainment and has lifted my spirits notably in the recent dark years.</p>
  63.    <img src="https://www.tbray.org/ongoing/When/202x/2026/05/03/PXL_20260426_023555451.png" alt="Fans with a “Save the Caps” message" />
  64.    <img src="https://www.tbray.org/ongoing/When/202x/2026/05/03/PXL_20260426_023603197.png" alt="Fans with a “Save the Caps” message" />
  65.    <div class='caption'><p>Vancouver Whitecaps fans bring the love</p></div>    
  66.    <p>However, it appears that Vancouver’s about to lose the Whitecaps, at the whim of a Vegas-based purchaser, of whom
  67.    <a href="https://www.nytimes.com/athletic/7244005/2026/04/30/las-vegas-vancouver-whitecaps-mls-buyer-gustavson/">The Athletic
  68.    writes</a>:</p>
  69.    <blockquote><p>The potential buyer is Grant Gustavson, the son of Kentucky billionaire Tamara Gustavson and grandson of B. Wayne
  70.    Hughes, founder of Public Storage, according to multiple sources with knowledge of the discussions. Forbes estimates Tamara
  71.    Gustavson’s net worth at $8.5 billion.</p>
  72.    <p>Gustavson, 30, lives in Las Vegas. A graduate of the University of Southern California, he has been involved with the
  73.    athletic department at his alma mater and helped to develop the Name, Image and Likeness (NIL) program there. He continues to
  74.    work with the USC basketball program and is also involved in the management of his family’s farm, “the country’s premier
  75.    thoroughbred farm with decades of storied champions throughout the stables.”</p>
  76.    </blockquote>
  77.    <p>So this fucking youngster, who has life experience working at the gym at USC (where his Mom’s
  78.    <a href="https://boardoftrustees.usc.edu/trustees/">on the Board of Trustees</a>) and helping out at the family farm, can reach out
  79.    his mighty hand and snatch away a popular pleasure from another nation. <i>Droit du seigneur</i> in action.</p>
  80.    <h2 id='p-6'>Staying rich</h2>
  81.    <p>I highly, highly recommend
  82.    <a href="https://www.nytimes.com/2026/04/17/opinion/ezra-klein-podcast-ray-madoff.html">Our Tax System Should Make You
  83.    Furious</a> from the <cite>NYT</cite>. By “our” they mean America’s. First, it addresses the canard that the tax system is
  84.    actually progressive; people who like things the way they are like to say “Forty percent of people pay no federal income taxes,
  85.    and then the top 1 percent pay 40 percent of the income taxes.” (Tl;dr: Somewhere between highly misleading and a big fat lie.)</p>
  86.    <p>Second, it explains the mechanisms by which
  87.    generational wealth is accumulated and preserved, effectively in perpetuity. People like Bezos and Musk pay basically no
  88.    income tax, and the way they do it isn’t complicated or hard to understand.</p>
  89.    <p>There is actually a family of financial products called
  90.    <a href="https://en.wikipedia.org/wiki/Dynasty_trust">Dynasty Trusts</a>. The first ad that popped
  91.    up in response to my Web search had the marketing copy “Dynasty trusts: preserving family assets for future generations”.
  92.    Or, put another way, “Dynasty trusts: Starving beggars in your neighborhood.”</p>
  93.    <h2 id='p-2'>Revenue from the rich</h2>
  94.    <p>So what can we do about it? Tax expert Ray Madoff, the interviewee in the “Should Make You Furious” piece, has smart things to
  95.    say. Then there’s
  96.    <a href="https://www.lemonde.fr/en/opinion/article/2025/06/14/thomas-piketty-opponents-of-the-tax-on-the-ultra-wealthy-lack-historical-perspective_6742333_23.html">Thomas
  97.    Piketty: “Opponents of the tax on the ultra-wealthy lack historical perspective”</a>.</p>
  98.    <p>The common thread is taxation of wealth not income, because the arcane abstractions of accounting make income too easy to
  99.    hide.  The argument is that a wealth tax of say 2%/year, starting at a threshold of a few tens of millions, won’t
  100.    impair the lifestyles of the seriously wealthy, but still yield systemically important public-sector revenue</p>
  101.    <p>Also worth reading, from the International Monetary Fund:
  102.    <a href="https://www.imf.org/en/blogs/articles/2018/02/13/game-changers-and-whistle-blowers-taxing-wealth">Game-Changers and
  103.    Whistle-Blowers: Taxing Wealth</a>.
  104.    Among other things, it reports that the proportion of wealth that is hidden in one offshore tax shelter or another is pretty small,
  105.    ranging from 8% in the developed countries up to 30% in poor nations. Apparently it’s harder to hide wealth than income.</p>
  106.    <h2 id='p-7'>Good karma</h2>
  107.    <p>If wealth taxation won’t touch wealthy lifestyles and will help build a safer, calmer, happier society, it feels
  108.    sort of irrational to oppose it.  And some of the wealthy don’t. My favorite example of this is Avi Bryant. Check out
  109.    <a href="https://macleans.ca/politics/tax-the-rich/">I’m a Millionaire. Tax Me More, Please</a> and
  110.    <a href="https://thenarwhal.ca/canada-wealth-tax/">Meet a millionaire who wants Canada to tax the rich</a>. [Disclosure: I made
  111.    a nice little chunk of money when my tiny investment in Avi’s startup turned into pre-IPO Twitter shares.] I’m also interested in
  112.    <a href="https://patrioticmillionaires.ca">Patriotic Millionaires</a>, which Avi founded.</p>
  113.    <p>Also worth checking out: Jeff Atwood’s
  114.    <a href="https://blog.codinghorror.com/stay-gold-america/">Stay Gold, America</a> and
  115.    <a href="https://blog.codinghorror.com/launching-the-rural-guaranteed-minimum-income-initiative/">Launching The Rural Guaranteed
  116.    Minimum Income Initiative</a>. So, not all of the 0.1% are The Enemy.</p>
  117.    <h2 id='p-8'>It’s not complicated</h2>
  118.    <p>Around the world, governments are running up huge debts and cutting back social programs because the taxation revenue doesn’t
  119.    come near the amount it requires to provide a livable society. So the choice is stark: Cut and slash deeper (read: starving beggars)
  120.    or find more money. There’s lots of money out there basically just playing financial
  121.    games; it needs to be put to work doing something useful.</p>
  122.    <p>This package of ideas should be easy to sell to voters. Of course, resistance will be ferocious and
  123.    extremely well-funded. But the currently-winning side in our class war is actually a soft target. Target for what weapon, you ask?
  124.    Democracy. No need for tumbrils and guillotines. Yet.</p>
  125. </div></content></entry>
  126.  
  127. <entry>
  128. <title>Corey’s Captives</title>
  129. <link href='https://www.tbray.org/ongoing/When/202x/2026/04/26/Coreys-Captives' />
  130. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/04/26/Coreys-Captives#comments' />
  131. <id>https://www.tbray.org/ongoing/When/202x/2026/04/26/Coreys-Captives</id>
  132. <published>2026-04-26T12:00:00-07:00</published>
  133. <updated>2026-04-27T12:05:14-07:00</updated>
  134. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Books' />
  135. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
  136. <category scheme='https://www.tbray.org/ongoing/What/' term='Books' />
  137. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>That’s     <a href='https://en.wikipedia.org/wiki/James_S._A._Corey'>James S.A. Corey</a>, which is to say Daniel Abraham and Ty Franck,     and their new series     <a href='https://en.wikipedia.org/wiki/The_Captive%27s_War'>The Captive’s War</a>, an in-progress work comprising 2¼     or so novels. The Coreys are of course best-known for their deservedly wildly popular <cite>The Expanse</cite> series and the     subsequent success of the streaming-video version.  The new series is… different. If you’re wondering whether or not you should     wade in, the following is for you</div></summary>
  138. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  139.    <p>That’s
  140.    <a href="https://en.wikipedia.org/wiki/James_S._A._Corey">James S.A. Corey</a>, which is to say Daniel Abraham and Ty Franck,
  141.    and their new series
  142.    <a href="https://en.wikipedia.org/wiki/The_Captive%27s_War">The Captive’s War</a>, an in-progress work comprising 2¼
  143.    or so novels. The Coreys are of course best-known for their deservedly wildly popular <cite>The Expanse</cite> series and the
  144.    subsequent success of the streaming-video version.  The new series is… different. If you’re wondering whether or not you should
  145.    wade in, the following is for you.</p>
  146.    <h2 id='p-1'>Minor and meta spoilers</h2>
  147.    <p>Don’t worry, you can go on reading this even if you plan to read the books. Here’s a spoiler that has appeared in every public
  148.    mention of the book, which I’ll give away with a quote from page 102: “I think some important scientific questions have finally
  149.    been answered. Alien life exists, and they are assholes.” Which is to say, it doesn’t go well for the humans.</p>
  150.    <p>Now for the meta-spoilers. The novels are <cite>The Mercy of Gods</cite> and <cite>The Faith of Beasts</cite>, then there’s a
  151.    novella, <cite>Livesuit</cite>. I found <cite>The Mercy of Gods</cite> a bit of a grind, and if that’s all I’d read I would have
  152.    been pretty negative about this project. There is a major, <em>major</em> reveal partway into <cite>The Faith of Beasts</cite>
  153.    that changed my whole outlook on the series; it makes the storytelling velocity really pick up.  It’s a little annoying that
  154.    <cite>Livesuit</cite> was published between the two full novels because it only really makes sense if you’ve finished both of
  155.    them. So do like I did, and read the novella last.</p>
  156.    <p>I have to ask why the Coreys couldn’t have pulled the curtain aside a little earlier on. And while I’m griping, let me add
  157.    that the sped-up storytelling runs into a big honking cliffhanger ending at high velocity. Harumph.</p>
  158.    <h2 id='p-2'>My take-away</h2>
  159.    <p>It could go off the rails but if they can maintain their <cite>Expanse</cite> form, I suspect this series is going to be
  160.    pretty great. The characters are fun to know and the narrative revolves around the great mother of all trolley-problem ethical
  161.    challenges, which was not nearly resolved at cliffhanger-ending time.</p>
  162.    <p>Those of us who are fussy about the plausibility of future technologies (hey, Charlie Stross) should avert their eyes from
  163.    the Coreys’ fairly low-effort attempts to explain how the aliens and humans in this story accomplish the things they do. Doesn’t
  164.    bother me much, though.</p>
  165.    <p>Having said all that, this series is not cheerful stuff; I do <em>not</em> recommend it to those who, like many in these
  166.    troubled times, are having trouble seeing the bright side of, well, anything.</p>
  167.    <h2 id='p-3'>Will I read the next volume?</h2>
  168.    <p>Yep, no hesitation. And they’ve already started working on a streaming version. Unfortunately it’s going to be on Amazon
  169.    Prime, which I haven’t missed since unsubscribing a couple years ago.  Getting this thing on the screen is
  170.    going to be an extended, difficult, task. There are multiple species of aliens that the show is going to have to absolutely nail, with
  171.    emotional credibility, for the story to work. Don’t hold your breath.</p>
  172. </div></content></entry>
  173.  
  174. <entry>
  175. <title>Spring Evening</title>
  176. <link href='https://www.tbray.org/ongoing/When/202x/2026/04/13/Modern-Cameras' />
  177. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/04/13/Modern-Cameras#comments' />
  178. <id>https://www.tbray.org/ongoing/When/202x/2026/04/13/Modern-Cameras</id>
  179. <published>2026-04-13T12:00:00-07:00</published>
  180. <updated>2026-04-15T22:23:17-07:00</updated>
  181. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Photos' />
  182. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
  183. <category scheme='https://www.tbray.org/ongoing/What/' term='Photos' />
  184. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>On impulse, Lauren and I went out for a short walk<span class="dashes"> —</span> around just a few     blocks<span class="dashes"> —</span> as the grey Spring afternoon shaded to dusk. On a second impulse, I grabbed the camera     on the way out the door</div></summary>
  185. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  186.    <p>On impulse, Lauren and I went out for a short walk<span class='dashes'> —</span> around just a few
  187.    blocks<span class='dashes'> —</span> as the grey Spring afternoon shaded to dusk. On a second impulse, I grabbed the camera
  188.    on the way out the door.</p>
  189.    <p>In our local community garden, here’s (I think) a
  190.    <a href="https://en.wikipedia.org/wiki/Chard">chard</a>.</p>
  191.    <img src="https://www.tbray.org/ongoing/When/202x/2026/04/13/TXT56259.png" alt="Looking down on a vegetable plant with glossy green leaves and orange-yellow stalks" />
  192.    <p>That was in Vancouver’s Mount Pleasant park, small but nice and apparently never not used. Also this old blackened
  193.    fruit tree, we’re a bit past the fruit-blossom peak for this year. Nice to see I’m not the only old citizen trying to brighten
  194.    things up.</p>
  195.    <img src="https://www.tbray.org/ongoing/When/202x/2026/04/13/TXT56264.png" alt="Fruit-tree blossoms on a blackened branch" />
  196.    <p>Now we’re walking up a locally-main street called Main Street or “The Main” if you’re trying to sound
  197.    hip. Someone put work into that window! I’ve bought my daughter a couple of cool birthday presents from the store behind it. My
  198.    thanks to the building across the street for providing a dark background reflection.</p>
  199.    <img src="https://www.tbray.org/ongoing/When/202x/2026/04/13/TXT56265.png" alt="Used-fashion store window " />
  200.    <p>Back to the next block over from ours. A while ago a bunch of people were building little fairy/elf/hobbit villages at the
  201.    bottoms of the big old trees.  This isn’t that. What is it?</p>
  202.    <img src="https://www.tbray.org/ongoing/When/202x/2026/04/13/TXT56270.png" alt="Dolls and related tree artifacts at the base of a tree in dim light" />
  203.    <p>The colors of the natural surfaces are real.</p>
  204.    <h2 id='p-1'>Cameras</h2>
  205.    <p>When I shot these, it
  206.    was getting dark but I didn’t think much, mostly just pointed and shot. (Fiddled with the aperture dial a bit.) Then I came
  207.    home and pulled them into Lightroom and didn’t need to do really anything about colors. A bit of contrast and highlights here
  208.    and there. Oh, and fairly brutal cropping, especially on that fruit-tree-flowers pic. Because like I said, I didn’t think very
  209.    much when I was shooting and I didn’t have to because on a Twenties camera you don’t.</p>
  210.    <p>I could take that heavily-cropped fruit-tree
  211.    picture and print it big enough to occupy any domestic wall in your place and yeah, there’d be grain but it wouldn’t
  212.    bother your eyes.</p>
  213.    <p>Anyhow, modern cameras are pretty great. The lowest ISO in today’s set is 2500 and the highest is 6400; the apertures range
  214.    from 2.8 to 5.6.
  215.    Bet you can’t tell the differences. My camera is a reasonably modern Fujifilm but not remotely
  216.    bleeding-edge in camera tech. (Note: 35mm F1.4, now all the Fuji fanfolk are smiling and nodding.)</p>
  217.    <p>Anyhow, there are very <em>very</em> few photographers for whom the camera they carry is the limiting factor in the
  218.    goodness of their pictures. Certainly not me.</p>
  219.    <p>Consider getting a camera. Used is fine, anything built in the last five years, maybe more, will effortlessly take brilliant
  220.    pictures in almost any conditions. Sure, your phone can take great shots too, but the feeling of walking along with something
  221.    that fits your hand and you only have to press one physical button once, that feeling, it helps you see the good pictures when they happen.</p>
  222.    <p>Then go out after and take a walk in the Spring dusk.</p>
  223. </div></content></entry>
  224.  
  225. <entry>
  226. <title>Password Manager Angst</title>
  227. <link href='https://www.tbray.org/ongoing/When/202x/2026/04/09/Password-Manager-Angst' />
  228. <link rel='replies'        thr:count='13'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/04/09/Password-Manager-Angst#comments' />
  229. <id>https://www.tbray.org/ongoing/When/202x/2026/04/09/Password-Manager-Angst</id>
  230. <published>2026-04-09T12:00:00-07:00</published>
  231. <updated>2026-04-10T10:42:16-07:00</updated>
  232. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Identity' />
  233. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  234. <category scheme='https://www.tbray.org/ongoing/What/' term='Identity' />
  235. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Security' />
  236. <category scheme='https://www.tbray.org/ongoing/What/' term='Security' />
  237. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Our family has used     <a href='https://1password.com'>1Password</a> for many years. Most recently 1Password 7, now at least three years out of     date. We didn’t want to upgrade to the latest version, went looking for alternatives, and have been exploring     <a href='https://bitwarden.com'>Bitwarden</a>.  The best choice isn’t obvious; here’s the story thus far</div></summary>
  238. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  239.    <p>Our family has used
  240.    <a href="https://1password.com">1Password</a> for many years. Most recently 1Password 7, now at least three years out of
  241.    date. We didn’t want to upgrade to the latest version, went looking for alternatives, and have been exploring
  242.    <a href="https://bitwarden.com">Bitwarden</a>.  The best choice isn’t obvious; here’s the story thus far.</p>
  243.    <p>Important note: I suspect that most-to-all of the people reading this already are using a password manager. If you’re not,
  244.    please, <i><b>PLEASE</b></i> start now.  Your browser probably has an OK one built-in, which is much better than
  245.    nothing.
  246.    <a href="https://www.cyber.gc.ca/en/guidance/password-managers-security-itsap30025">Here</a> is a good write-up on the basics.</p>
  247.    <h2 id='p-6'>Our needs</h2>
  248.    <p>They’re not fancy. The house contains Macs and Androids and Windows and an iPad.
  249.    We have hundreds of accounts (some require an authenticator) and a basketfull of secure notes: Government-ID numbers, recovery
  250.    codes, and so on.</p>
  251.    <h2 id='p-5'>1Password7 and 8</h2>
  252.    <p>1Password had this nice feature where you could sync between devices without involving any 1Password servers, in a variety
  253.    of ways. We used one of those and liked it.
  254.    1Password8 insists on storing your data (encrypted, more on that later). That always bothered me because, obviously, that
  255.    repository is a top-priority juicy target for all the bad guys, who range from employees of the Chinese government to geeky
  256.    narcos.</p>
  257.    <p>So we’ve been ignoring 1Password’s increasingly plaintive reminders that we were using years-out-of-date software
  258.    and chugging along with version 7. But, early this year, they broke our sync mode on the Android app and were pretty blunt that the only
  259.    way to get it back was to go to 1P8.</p>
  260.    <h2 id='p-7'>Alternatives</h2>
  261.    <p>There are plenty of password managers (Let’s just say “PMs”) out there, but as a regular scanner of the landscape,
  262.    it seems to me that 1Password
  263.    (hereinafter “1P”) and Bitwarden (“Bw”) stand out as leaders.  The rest of this piece will focus on those two.
  264.    If you think I’m wrong, say so below but also please say why.</p>
  265.    <p>Note that Bw comes in two flavors: That offered as a subscription service by the company of the same name, or as an open-source
  266.    software suite you can build and run yourself.</p>
  267.    <p>This is not to say that the PMs that are starting to appear built-in to browsers and OSes are worthless or unimportant,
  268.    just that some of us need a little more.</p>
  269.    <h2 id='p-8'>The threat models</h2>
  270.    <p>Two are obvious. The first is incompetence, like for example
  271.    <a href="https://en.wikipedia.org/wiki/LastPass#Security_incidents">LastPass</a>, who apparently left the doors more or less
  272.    wide open to those bad guys I mentioned a few paragraphs ago. Complete horror-show.</p>
  273.    <p>The second is legal compulsion, where a government applies pressure to a PM provider to cough up our
  274.    secrets. Anybody who thinks governments won’t try is fooling themselves, because they’ve repeatedly said they want to, and are
  275.    eager to pass ill-considered legislation such as the
  276.    <a href="https://en.wikipedia.org/wiki/CLOUD_Act">CLOUD Act</a>.  So we care about that aspect a lot.</p>
  277.    <h2 id='p-9'>1P vs Bw: Security</h2>
  278.    <p>I think they both have acceptably-good security postures; check out
  279.    <a href="https://bitwarden.com/help/bitwarden-security-white-paper/">Bitwarden Security Whitepaper</a> and
  280.    <a href="https://support.1password.com/1password-security/">About the 1Password security model</a>.</p>
  281.    <p>Both of them offer to host your data outside of the US, specifically in Canada or the EU.</p>
  282.    <p>But it doesn’t matter <em>that</em> much if a bad guy or bad government gets their hands on your password store; what
  283.    matters is whether or not they can decrypt it. I’m not an infosec professional but I know some and listen to them, and both
  284.    those security postures give me a good feeling. It’s not an accident that they’re pretty similar.</p>
  285.    <p>The actual threat isn’t so much that an adversary cracks the crypto; that’s very unlikely. It’s that they find a way to force
  286.    a PM vendor to build a back door into their software to get access to keys and passwords.  For that reason, it would warm
  287.    my heart if either or both of Bw and 1P were to post a
  288.    <a href="https://en.wikipedia.org/wiki/Warrant_canary">Warrant Canary</a>.</p>
  289.    <p>But I’m going to give Bw a very slight edge. First, because of the fact that you can build and run it yourself, if you’re
  290.    willing to take responsibility for operating a server with strong security requirements. (I’m not.)</p>
  291.    <p>The source being open potentially offers a second, and more important I think, advantage: If they were able to get a
  292.    <a href="https://en.wikipedia.org/wiki/Reproducible_builds">Reproducible build</a> working, you’d have assurance that the code
  293.    you can download is the one their service is running. Which reduces the attack surface. (Mind you,
  294.    <a href="https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf">not to zero</a>.) Reproducible
  295.    builds are hard, but if they did that, it would make a difference to me.</p>
  296.    <p>On the other hand, Bw’s software development process
  297.    <a href="https://contributing.bitwarden.com/contributing/ai/">embraces GenAI</a> generally and Claude specifically.
  298.    At this stage in the growth of those technologies, this sends a chill up my spine. To be fair, 1P’s website
  299.    shouts that it’s just the thing for agentic security, whatever that means. And we don’t know anything about 1P’s internal
  300.    software-dev process.</p>
  301.    <h2 id='p-10'>1P vs Bw: Fit and finish</h2>
  302.    <p>1P wins this one.  The problem is, do they always pop up when needed and never when they’re not? Can they fill every login
  303.    field that needs filling? Does the popup show you just what you need and nothing extraneous? I’ve used both and 1P is just
  304.    better.</p>
  305.    <h2 id='p-11'>Business issues</h2>
  306.    <p>This one is also pretty well a saw-off. Both of them have taken substantial chunks of VC money and thus are going to
  307.    come under relentless pressure to enshittify. I worry a little less about this because from what I read,
  308.    there’s not much lock-in.</p>
  309.    <p>Personal experience too: I recently did an export of everything out of 1P and into Bw and it all Just Worked, albeit putting all
  310.    my stuff into a folder named "No Folder" that I can’t figure out how to rename.</p>
  311.    <p>Both Bw and 1P are subscription-only, at prices that seem fair to me.</p>
  312.    <h2 id='p-12'>Death and recovery and pen and paper</h2>
  313.    <p>As I was reading up on this stuff, the issue of recovering access to your PM after it had been lost came up a couple of times.
  314.    Here’s a scenario where that could be really important: I die. And then my wife needs to get access to bank accounts and
  315.    business emails and so on.</p>
  316.    <p>Somebody (I’ve lost the link) was horrified that one of the PMs suggested writing the password down on a piece of paper as a
  317.    last-resort measure, but I’m here to tell you that they’re wrong. My wife has an envelope containing a piece of paper on which
  318.    appear the passwords for my PM and Mac, my mobile-phone PIN, and a very small number of other secret things she might really
  319.    need if I’m suddenly gone. I have no idea where she put it, but she’s really smart so I don’t worry.</p>
  320.    <p>You should probably do something like this too.</p>
  321.    <h2 id='p-13'>What will we do?</h2>
  322.    <p>We’ve paid for a year’s worth of both Bw and 1P. At the moment, we’re leaning to 1P because it’s a little more polished.
  323.    Which matters because my PM is something I use many times every day. Also they’re somewhat Canadian.</p>
  324.    <p>If you think we’ve missed something, please do let us know.</p>
  325. </div></content></entry>
  326.  
  327. <entry>
  328. <title>Long Links</title>
  329. <link href='https://www.tbray.org/ongoing/When/202x/2026/03/24/Long-Links' />
  330. <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/03/24/Long-Links#comments' />
  331. <id>https://www.tbray.org/ongoing/When/202x/2026/03/24/Long-Links</id>
  332. <published>2026-03-24T12:00:00-07:00</published>
  333. <updated>2026-03-26T16:36:32-07:00</updated>
  334. <category scheme='https://www.tbray.org/ongoing/What/' term='The World' />
  335. <category scheme='https://www.tbray.org/ongoing/What/' term='The World' />
  336. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>This will be the 30<sup>th</sup> Long-Links outing. I’m 100% sure that there does not live a human     being who has looked at all those Links, but my logfiles say that quite a few of you, Dear Readers, at least take the time to     open one occasionally. All aboard!</div></summary>
  337. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  338.    <p>This will be the 30<sup>th</sup> Long-Links outing. I’m 100% sure that there does not live a human
  339.    being who has looked at all those Links, but my logfiles say that quite a few of you, Dear Readers, at least take the time to
  340.    open one occasionally. All aboard!</p>
  341.    <p>Sadly, more than half the Long Links, this time out, are about AI. I almost decided to bury the piece but, whatever you or I
  342.    think, the subject matters. And the ones I posted are a tiny fraction of those I read (or tried to) and I think are
  343.    useful and not immoral.</p>
  344.    <p>But, let’s put all the non-AI stuff at the front so you can stop reading partway through if you’ve just had enough of
  345.    that stuff.</p>
  346.    <h2 id='p-1'>Not about GenAI</h2>
  347.    <p>Paul Ford has, after a lengthy gap, started writing again at
  348.    <a href="https://ftrain.com">ftrain.com</a>. Excellent!
  349.    Go there any day and there’ll almost certainly be something good at the top of the
  350.    page. He’s a technologist and, yeah, writes about AI sometimes, but
  351.    <a href="https://ftrain.com/warp-and-woof">Warp and Woof</a> is about dogs and their people. Charming.</p>
  352.    <p>I think most people who aren’t ultra-wealthy now agree that inequality is currently a central problem of our society. But it
  353.    would be nice to put some numbers behind that assertion.
  354.    <a href="https://paulkrugman.substack.com/p/talking-with-gabriel-zucman">Here</a> is a conversation between Paul Krugman,
  355.    Nobel-prizewinning economist, and Gabriel Zucman, a French specialist in the subject and frequent Piketty collaborator.
  356.    Now, there are quite a few paragraphs up front of talk about general macroeconomic issues and comparisons between the US and Europe,
  357.    which I enjoyed reading. And then inequality; here’s Zucman: “And so everybody now understands what was long understood for
  358.    centuries, very much including in the West, which is that extreme wealth is never virtual, it is always extreme power.”</p>
  359.    <p>CO<sub>2</sub> densities in Parts Per Million are a good measure of how full your inhalations are of others’ exhalations. And
  360.    thus of how likely you are to catch something by breathing. Especially, Covid, which everyone with a half a brain knows is not
  361.    nearly over. Anyhow, A. Grieve-Smith offers
  362.    <a href="https://grieve-smith.com/ftn/2026/03/nine-observations-from-carbon-dioxide-monitoring/">Nine observations from carbon
  363.    dioxide monitoring</a>: “I’ve been checking carbon dioxide levels for over three years now, and I’ve started to see patterns.”
  364.    This piece could save your life, and that’s not a metaphor.</p>
  365.    <p>Patrick McKenzie, who writes <cite>Bits About Money</cite>, has an icy-cool style and this Link could be a Little Less Long,
  366.    but I learn interesting things every time I read one of his pieces.
  367.    <a href="https://www.bitsaboutmoney.com/archive/fraud-investigation/">Fraud Investigation is Believing Your Lying
  368.    Eyes</a> launches from the Minnesota child-care fraud story, but is mostly, as the title suggests, relates the conventional wisdom
  369.    (which I didn’t know) about how to go sniffing around for in-progress fraud.
  370.    From which “As a fraud investigator, you are allowed and encouraged to read Facebook at work.”</p>
  371.    <p>Hari Kunzru has written good books and is a former London native. <cite>Harpers</cite> gave him an assignment:
  372.    Walk around and write about the city, thus
  373.    <a href="https://harpers.org/archive/2026/02/another-london-situationists-hari-kunzru/">Another London: Excavating the
  374.    disenchanted city</a>. It’s a tour through time as much as space<span class='dashes'> —</span> London, obviously, is
  375.    history-drenched<span class='dashes'> —</span> and not just politics and power either, but arts and ideas. The writing is
  376.    beautiful. It’ll take a chunk out of your day but the trade-off is good.</p>
  377.    <p>Here’s something beautiful:
  378.    <a href="https://thehtml.review/05/">The HTML Review</a>. Now I want to publish there, but I’d have to up my
  379.    writing game.</p>
  380.    <h2 id='p-5'>Lankum</h2>
  381.    <p>They’re an Irish band I just discovered, courtesy of Qobuz. The music grows out of traditional Irish acoustic folk. They play
  382.    old and new songs and throw in a heavy dose of snarl and drone. Some of the chords are like rotated model augmented 11ths or some
  383.    such, scratchy around the edges but helped with an itch I hadn’t known I had. Terrific musicians. Here’s
  384.    <a href="https://www.youtube.com/watch?v=lUReQ9GhT8s">Hunting the Wren</a>. I might get over-excited and fly to Ireland to see them.</p>
  385.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/24/Lankum.png" alt="Lankum in concert" />
  386.    <h2 id='p-2'>Tech, but not GenAI</h2>
  387.    <p>Sebastian Pipping is, among other things, an Open-Source software developer, with whom
  388.    <a href="/ongoing/When/202x/2021/03/24/XMLWF-dash-k">I’ve collaborated</a>. His recent
  389.    <a href="https://blog.hartwork.org/posts/learn-from-me/">Learn from me!</a> begins “Not too long ago, someone literally asked me
  390.    what they "could learn from me", and that question has stuck with me since.” So he offers a few candidate lessons. What a nice
  391.    idea! What could people learn from <em>you</em>?</p>
  392.    <p>Filippo Valsorda, another OSS dev, is particularly interesting because he and a few partners have apparently figured out
  393.    <a href="https://geomys.org">how to make a living from their work</a>.
  394.    He recently published
  395.    <a href="https://words.filippo.io/dependabot/">Turn Dependabot Off</a> and I’m not going to offer a word of explanation because
  396.    if you understand the title I guarantee you’ll be interested in the piece. (I’m terrified of Dependabot.)</p>
  397.    <p>It seems like every day I hear from another person who’s trying to get their personal lives off Big Tech. Me too. So…
  398.    In <cite>The Verge</cite>,
  399.    <a href="https://www.theverge.com/tech/879114/best-big-tech-app-alternatives-installer">How to un-Big Tech your online life</a>.
  400.    And from Paris Marx,
  401.    <a href="https://disconnect.blog/getting-off-us-tech-a-guide/">Getting off US tech: a guide</a>. We are in the early stages of
  402.    de-Googling our family life, so this stuff is super useful. I expect to see more of it.</p>
  403.    <h2 id='p-4'>Amazon polemics, maybe a little AI</h2>
  404.    <p>I don’t loathe Amazon any more nor less than the rest of the Big Techs, but boy are there are a lot of people
  405.    publishing diatribes against the company. Not sure I understand why. But, worth reading.</p>
  406.    <p>In
  407.    <a href="https://markatwood.substack.com/p/how-amazon-dies-a-possible-maybe?">How Amazon Dies: A Possible, Maybe Likely
  408.    Future</a> Mark Atwood predicts that the infestation of amazon.com with highly-profitable advertising is a perhaps-fatal
  409.    blunder. What’s maybe more interesting is that he points out several potential Amazon alternatives that don’t suffer from
  410.    that same infestation; they hadn’t occurred to me.</p>
  411.    <p>And from a year ago, Cory Doctorow’s
  412.    <a href="https://pluralistic.net/2025/03/13/electronic-whipping/#youre-next">The future of Amazon coders is the present of
  413.    Amazon warehouse workers</a> introduces the “shitty technology adoption curve”. I missed this piece at the time but boy, is it
  414.    easy to believe.</p>
  415.    <p>Finally, reading
  416.    <a href="https://www.bigtechnology.com/p/writing-crystalized-thinking-at-amazon?">Writing Crystalized Thinking At Amazon. Is AI
  417.    Muddying It?</a> angered me. While I have no remaining respect or affection for any of the Big Techs, I enjoyed my time at AWS
  418.    and part of it was the writing culture. I think the Way Of The Six-pager is the best business-process innovation I witnessed in
  419.    my working life. If Amazon really is slopifying it, I predict disastrous outcomes. </p>
  420.    <h2 id='p-3'>OK, here’s the AI stuff</h2>
  421.    <p>My own position, just to be clear: There are going to be LLM applications in a few domains here and there, and one of them is
  422.    software development, but they won’t be nearly big enough to damage earth’s climate any further, nor to prevent the bubble from
  423.    popping. That said…</p>
  424.    <p>Let’s do the worst first:
  425.    <a href="https://www.heavybit.com/library/article/write-only-code">Write-Only Code</a> lays out a genuinely frightening future.
  426.    Quote: “I was maniacally insistent that any proposed change to our SDLC (software development life cycle) be evaluated first
  427.    through the lens of developer velocity.”
  428.    I think I’d rather not go there.</p>    
  429.    <p>Most of us who watch the space, and have no idea where it’s going or what the future holds, are I think particularly
  430.    interested in Anthropic’s Claude. If you’re one, you’ll probably enjoy
  431.    <a href="https://www.newyorker.com/magazine/2026/02/16/what-is-claude-anthropic-doesnt-know-either">What Is Claude? Anthropic
  432.    Doesn’t Know,  Either</a>.</p>
  433.    <p>It’s probably not that GenAI is intrinsically immoral. As Karl Bode writes,
  434.    <a href="https://karlbode.com/the-problem-with-ai-is-shitty-human-beings/">The Problem With AI Is Shitty Human Beings</a>. I
  435.    covered some of the same territory last year in
  436.    <a href="/ongoing/When/202x/2025/07/06/AI-Manifesto">The Real GenAI Issue</a>, but Bode is excellent:
  437.    “…the grand vision of modern automation's benefits can never materialize if its stewards are <i>foundationally fucking terrible
  438.    human beings disinterested in the contours of empathy.</i> If we're not talking prominently about that, we aren't really talking at
  439.    all.” (Emphasis his.)</p>
  440.    <p>One of the things that shitty people do is lie. Like for example charismatic leaders of AI “startups” valued in the tens of
  441.    billions. But then so do the less-visible, which provoked Kyle Kingsbury A.K.A. Aphyr to write
  442.    <a href="https://aphyr.com/posts/405-trudging-through-nonsense">Trudging Through Nonsense</a>. It’s sad and angry but I think
  443.    usefully so.</p>
  444.    <p>Armin Ronacher is not bursting with rage, but he is skeptical about all the right things in
  445.    <a href="https://lucumr.pocoo.org/2026/3/20/some-things-just-take-time/">Some Things Just Take Time</a>. Quote:
  446.    “There’s a feeling that all the things that create friction in your life should be automated away. That human involvement should
  447.    be replaced by AI-based decision-making. Because it is the friction of the process that is the problem. When in fact many times
  448.    the friction, or that things just take time, is precisely the point.”</p>
  449.    <p>For another cool-voiced critique, here’s Rishi Baldawa:
  450.    <a href="https://rishi.baldawa.com/posts/ai-mandates-manufacture-noise/">AI Mandates Manufacture Noise</a>. While I’m not
  451.    entirely a burn-it-all-with-fire GenAI foe, the “boss mandate” always struck me as dumb, and Rishi spells it out clearly
  452.    and simply. It’s really good, so here are a couple of quotes: “But those not in the weeds had no way to know any of this
  453.    because… well they aren’t in the weeds. So they feel compelled to solve their information gap with a policy hammer.” and
  454.    “As said before, none of this is revolutionary and that’s sort of the point. AI is a ’mirror and multiplier‘. It intensifies
  455.    whatever was already happening.”</p>
  456.    <h2 id='p-6'>That’s all</h2>
  457.    <p>Let’s really hope the bubble bursts soonest. Because when the money goes away, so will a lot of the shitty people.</p>
  458. </div></content></entry>
  459.  
  460. <entry>
  461. <title>Nash Burns Saves the Day</title>
  462. <link href='https://www.tbray.org/ongoing/When/202x/2026/03/20/Nash-Burns' />
  463. <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/03/20/Nash-Burns#comments' />
  464. <id>https://www.tbray.org/ongoing/When/202x/2026/03/20/Nash-Burns</id>
  465. <published>2026-03-20T12:00:00-07:00</published>
  466. <updated>2026-03-20T13:53:25-07:00</updated>
  467. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Web' />
  468. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  469. <category scheme='https://www.tbray.org/ongoing/What/' term='Web' />
  470. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>What happened was, soon after New Year’s, friends and colleagues in the UK and Germany started letting us know that their     emails to us were bouncing.       Our “textuality.com” family domain is a Google Workspace (or whatever they call it this year) for email and docs and so on.     Its Web presence, including DNS, has for many years been handled by a local outfit I’ll call “CWH” for some absurdly low monthly     price, and has been trouble-free</div></summary>
  471. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  472.    <p>What happened was, soon after New Year’s, friends and colleagues in the UK and Germany started letting us know that their
  473.    emails to us were bouncing.  
  474.    Our “textuality.com” family domain is a Google Workspace (or whatever they call it this year) for email and docs and so on.
  475.    Its Web presence, including DNS, has for many years been handled by a local outfit I’ll call “CWH” for some absurdly low monthly
  476.    price, and has been trouble-free.</p>
  477.    <p>So, what could be wrong? We investigated and discovered that Google was offering a new-and-improved MX-record option,
  478.    although they emphasized that the old setup should still work. Anyhow, we installed the New Thing and it didn’t help.</p>
  479.    <p>So, we filed a ticket with CWH tech support and somebody got back to us pretty quick, saying they’d changed a firewall
  480.    setting that was blocking connections to Germany. I detect the scent of GDPR, but whatever. <br/>
  481.    Euro-email: Bounce, bounce.</p>
  482.    <p>CWH: Probably an MX-record issue, and we should wait for DNS propagation. Several days passed and
  483.    bounce, bounce, bounce.  <br/>Us: “Not DNS propagation.” <br/>CWH: “Still could be.”</p>
  484.    <p>So we VPN’ed to Germany and discovered we couldn’t ping
  485.    Textuality’s IP address. Smells like a firewall to me. We told CWH that.</p>
  486.    <p>CWH: We have made some changes to firewall settings.
  487.    <br/>EMail: bounce, bounce, bounce.
  488.    <br/>VPN+Ping: Request timeout, request timeout, request timeout.</p>
  489.    <p>CWH: Try traceroute?
  490.    <br/>VPN+Traceroute: 14 hops, no joy.</p>
  491.    <p>CWH: Your VPN settings must be wrong. Here are instructions to use Windows PC VPN correctly.<br/>
  492.    Us: Thanks but no.</p>
  493.    <p>CWH: Your MX records are configured incorrectly. <br/>Us: No, they are correct per Google guidance. We sent an email beginning
  494.    “Please believe us.”</p>
  495.    <p>CWH: It must be DNSSEC. Check to see if your registrar implements DNSSEC. <br/>Us: We are using your DNS servers.</p>
  496.    <p>CWH: Perhaps your registrar is broadcasting an old record? <br/>Us: Our registrar doesn’t do DNSSEC.</p>
  497.    <p>At this point we consulted a friend who’s an expert on DNS and Email and even DNSSEC. He verified that not only could
  498.    you not ping
  499.    Textuality from Germany, you also couldn’t ping CWH or its name servers. Firewall firewall firewall!</p>
  500.    <p>CWH: “I did test the site access using a 3rd party application, and it seems to be accessible on all parts.” <br/>Us: Look at the
  501.    output, it shows we can’t be reached from anywhere in Germany.</p>
  502.    <p>Also, for all the remaining messages in the email trail, we prefixed our input with bold face extra-large text reading:
  503.    <b>Systems located in Germany cannot ping Textuality.com’s IP address, nor can they ping the IP addresses of textuality.com’s
  504.    designated name servers. This is the problem.</b></p>
  505.    <p>CWH: Let’s try migrating you to a different server; try pinging these hostnames. <br/>VPN+Ping: Nope.</p>
  506.    <p>CWH: Are you sure it’s not your VPN settings? <br/>Us: Are you sure it’s not your GDPR settings?<br/>
  507.    CWH: Raising your issue to Tier 3.</p>
  508.    <p>20 hours pass, then we get email from:</p>
  509.    <h2 id='p-1'>Nash Burns!</h2>
  510.    <p>…who said “This has been fixed.” It was.
  511.    Nash’s email signature was “Nash(Rajaneesh) B”. What a great name, though. Thanks, Nash.</p>
  512.    <h2 id='p-2'>Am we mad?</h2>
  513.    <p>Not really. Consumer-facing tech support is hard. None of their suggestions were unreasonable.
  514.    Doing GDPR correctly is hard.
  515.    They’ve been just fine for years and were having a bad week.
  516.    Could we expect better from any of CWH’s local competitors? Probably not.</p>
  517.    <p>It wasn’t funny at the time, but looking back, it kind
  518.    of is.</p>
  519. </div></content></entry>
  520.  
  521. <entry>
  522. <title>Pure Sound Please</title>
  523. <link href='https://www.tbray.org/ongoing/When/202x/2026/03/16/Pure-Sound-Please' />
  524. <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/03/16/Pure-Sound-Please#comments' />
  525. <id>https://www.tbray.org/ongoing/When/202x/2026/03/16/Pure-Sound-Please</id>
  526. <published>2026-03-16T12:00:00-07:00</published>
  527. <updated>2026-03-18T14:34:31-07:00</updated>
  528. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Music' />
  529. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
  530. <category scheme='https://www.tbray.org/ongoing/What/' term='Music' />
  531. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>This last weekend we attended a concert entitled <cite>Lenten Reflection</cite> at Vancouver’s Catholic     <a href='https://en.wikipedia.org/wiki/Holy_Rosary_Cathedral_(Vancouver)'>Holy Rosary Cathedral</a> featuring the     <a href='https://bellevoci.ca'>Belle Voci</a> vocal group and the     <a href='https://chilliwacksymphony.com/cantare-super-orchestram/'>Cantare Super Orchestram</a> early-music band. The music was     fine and it was the most beautiful sound I’ve heard in a long time. Twenty-two months, to be precise (see below).     And so I get to report on good music and yell at production people</div></summary>
  532. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  533.    <p>This last weekend we attended a concert entitled <cite>Lenten Reflection</cite> at Vancouver’s Catholic
  534.    <a href="https://en.wikipedia.org/wiki/Holy_Rosary_Cathedral_(Vancouver)">Holy Rosary Cathedral</a> featuring the
  535.    <a href="https://bellevoci.ca">Belle Voci</a> vocal group and the
  536.    <a href="https://chilliwacksymphony.com/cantare-super-orchestram/">Cantare Super Orchestram</a> early-music band. The music was
  537.    fine and it was the most beautiful sound I’ve heard in a long time. Twenty-two months, to be precise (see below).
  538.    And so I get to report on good music and yell at production people.</p>
  539.    <p>A cathedral is a nice place for a concert!</p>
  540.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/16/PXL_20260314_215727574.png" alt="Interior of Vancouver’s Holy Rosary Cathedral" />
  541.    <p>The concert opened with just the singers, their voices drifting down from a high place behind us, a balcony or choir loft.
  542.    There was no incremental accompaniment and no amplification; the music flowed from vocal cords to
  543.    eardrums<span class='dashes'> —</span> not directly, of course, there was lots of reflection and reverberation introduced by the
  544.    Cathedral space. The singers were polished and expressive and the sound, drifting through the vast space, beyond exquisite.</p>
  545.    <p>They sang a lovely piece by Byrd (1539-1623). Then the instrumentalists played a number by von Biber (1644-1704) while the
  546.    singers snuck downstairs. Joined, they performed Bach’s BWV
  547.    <a href="https://en.wikipedia.org/wiki/Komm,_Jesu,_komm,_BWV_229">229</a> and
  548.    <a href="https://en.wikipedia.org/wiki/Nach_dir,_Herr,_verlanget_mich,_BWV_150">150</a>, then pieces by Pergolesi (1710-1736)
  549.    and Steffani (1654-1728).</p>
  550.    <p>The Bach pieces, as usual, had more music in the music, but the others were also fun.  It was a small ensemble: In
  551.    the choir, five sopranos, five altos, a countertenor, four each tenors and basses. The band had five baroque
  552.    violins, a baroque viola, a baroque cello, a
  553.    <a href="https://en.wikipedia.org/wiki/Violone">violone</a> (think, string bass with frets), a baroque bassoon, and a player
  554.    doubling on harpsichord and organ. Thus, an ensemble quite likely not too much bigger or smaller than the ones playing this
  555.    music in the 1700s, when it was new.</p>
  556.    <h2 id='p-2'>That sound</h2>
  557.    <p>Once again, the sound was something special and yeah, the musicians were excellent, but for me, the key thing was the lack of
  558.    amplification: vocal cord to eardrum via cathedral. It’s always seemed obvious to me that you can’t run music through a bunch of
  559.    electronics and speaker mechanics without changing it; if only spatially, with the sounds coming from speaker diaphragms located
  560.    somewhere away from the human musician.
  561.    To my ears, there is a fragile magic in pure unamplified sound. I lack the words to describe the difference but it’s not
  562.    subtle. </p>
  563.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/16/PXL_20260314_212418188.png" alt="“Lenten Reflections” concert singers and players" />
  564.    <p>Does this mean that everything was perfect? No; the choir was a little bit male-heavy; some of the soprano and especially
  565.    alto lines were part-hidden behind the massed male voices. Also, the bassoon was right at the front of the stage;
  566.    While the playing was fine, it felt as though it were musically, not just physically “in front of” the band and
  567.    singers.</p>
  568.    <p>Both of these could have been fixed, by telling the men to take it down a notch or having one or two fewer of them. And by
  569.    moving the bassoon back to the usual woodwinds spot behind the strings. Still, these were very minor imperfections.</p>
  570.    <p>Oh, and the performance and sound of the bass line on that violone was absolutely awesome; clearly audible as a thing on its
  571.    own while it wove all the other musical threads together.</p>
  572.    <p>I’ve discovered that few classical musicians share my passion for unamplification. I hear things like “I want a
  573.    <em>full</em> sound or “The soloists need to cut through the orchestra.” Which, well, OK, but somehow people managed to
  574.    accomplish those things for centuries, before amplifiers and speakers were invented.</p>
  575.    <h2 id='p-1'>22 months?</h2>
  576.    <p>That’s since May of 2024 when I took in the
  577.    <a href="/ongoing/When/202x/2024/05/26/TTB">Tedeschi-Trucks Band</a>, whose music couldn’t be more different from anything
  578.    called “Lenten Reflections”: electric not acoustic, profane not sacred. But crystal clear and perfectly balanced
  579.    sound; so much better than most electric bands achieve.</p>
  580.    <p>My sincere thanks to the musicians and their leaders for a lovely experience. And my message to everyone co-ordinating and
  581.    leading live music performances: Of course the first priority has to be the quality of the music, but think about the sound and
  582.    try to be better. Better than than most performances manage, these days.</p>
  583.    <p>We know it’s possible.</p>
  584. </div></content></entry>
  585.  
  586. <entry>
  587. <title>Because Algospeak</title>
  588. <link href='https://www.tbray.org/ongoing/When/202x/2026/03/05/Because-Algospeak' />
  589. <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/03/05/Because-Algospeak#comments' />
  590. <id>https://www.tbray.org/ongoing/When/202x/2026/03/05/Because-Algospeak</id>
  591. <published>2026-03-05T12:00:00-08:00</published>
  592. <updated>2026-03-07T10:29:41-08:00</updated>
  593. <category scheme='https://www.tbray.org/ongoing/What/' term='Language' />
  594. <category scheme='https://www.tbray.org/ongoing/What/' term='Language' />
  595. <category scheme='https://www.tbray.org/ongoing/What/' term='Life Online' />
  596. <category scheme='https://www.tbray.org/ongoing/What/' term='Life Online' />
  597. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Recently I read     <a href='https://en.wikipedia.org/wiki/Because_Internet'>Because Internet</a> by     <a href='https://gretchenmcculloch.com'>Gretchen McCulloch</a> and     <a href='https://en.wikipedia.org/wiki/Algospeak_(book)'>Algospeak</a> by     <a href='https://en.wikipedia.org/wiki/Adam_Aleksic'>Adam Aleksic</a>. The language we speak (and text) to each other is at the     core of who and what we are, and the Internet is the strongest among the forces that channel and fertilize its growth.     So there’s scope for plenty of books on the subject. Both books educated and entertained, one made me angry</div></summary>
  598. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  599.    <p>Recently I read
  600.    <a href="https://en.wikipedia.org/wiki/Because_Internet">Because Internet</a> by
  601.    <a href="https://gretchenmcculloch.com">Gretchen McCulloch</a> and
  602.    <a href="https://en.wikipedia.org/wiki/Algospeak_(book)">Algospeak</a> by
  603.    <a href="https://en.wikipedia.org/wiki/Adam_Aleksic">Adam Aleksic</a>. The language we speak (and text) to each other is at the
  604.    core of who and what we are, and the Internet is the strongest among the forces that channel and fertilize its growth.
  605.    So there’s scope for plenty of books on the subject. Both books educated and entertained, one made me angry.</p>
  606.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/05/covers.png" alt="The covers of “Because Internet” and “Algospeak”" />
  607.    <h2 id='p-1'>Because Internet (2019)</h2>
  608.    <p>Its approach is historical and its voice fairly uninflected. It smiles and
  609.    argues, but it doesn’t ROFL nor does it YELL AT YOU.  The history is longer, perhaps, than most people reading this have
  610.    been online (or even alive). Ms McCulloch goes back to the days of BBSes (“bulletin-board systems”) and ListServs and IRC. Some of
  611.    the jargon and formulations of those days live on; you’d be surprised.</p>
  612.    <p>Here’s her table of contents.</p>
  613.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/05/BI-toc.png" alt="Table of Contents from “Because Internet”" />
  614.    <p>The analysis is grounded in the formalisms of the author’s profession, academic linguistics. Nothing wrong with that.</p>
  615.    <p>Let’s look at a couple of her ideas, beginning with Chapter 1’s “Informal Writing”. A few of us, back in the late
  616.    Eighties, noticed that computers in general and the then-nascent Internet in particular were driving a writing
  617.    renaissance.</p>
  618.    <p>Before computers, a knowledge worker who had laboriously constructed essays in college quite likely wrote
  619.    almost nothing for the rest of their working life. People talked face-to-face or on the phone, and dictated to
  620.    secretaries. Written communication was seen as necessarily formal and disjoint from the way we spoke, or that we wrote in
  621.    personal correspondence. Then, suddenly, everyone was sitting at a keyboard only seconds away from everyone else’s screen.
  622.    McCulloch goes deep on this:</p>
  623.    <blockquote><p>In the future, the era of writing between the invention of the printing press and the internet may come to be
  624.    seen as an anomaly—an era when there arose a significant gap between how easy it was to be a writer versus a reader. An era when
  625.    we collectively stopped paying attention to the informal, unedited side of writing and let typography become static and
  626.    disembodied.</p>
  627.    <p>The internet didn’t create informal writing, but it did make it more common, changing some of our previously spoken
  628.    interactions into  near-real-time text exchanges.</p></blockquote>
  629.    <p>From which all of this follows. It feels like a central insight. I suppose you could argue that centrality of informal text
  630.    is fading in the face of short-form video.  Maybe,
  631.    it’s too soon to tell.</p>
  632.    <p>Then consider chapter 5, about emojis. Linguists obviously need to think about them because now they’re an
  633.    integral part of written language.  McCulloch’s insight is that they correspond almost exactly to gestures, the way we use
  634.    our hands to add force to our speech. Obviously, for example, “👍”. Or when you’re talking about something completely
  635.    loopy and you twirl your index finger by your ear? You meant “🤪”.</p>
  636.    <p>I offer the emoji story for flavor, an example of a linguist’s approach to what we’re doing to our language with our
  637.    networks.</p> <p>McCulloch has lots more of this stuff.
  638.    I enjoyed <cite>Because Internet</cite> a lot, partly because I’m old and my memories stretch back to those BBS and
  639.    IRC days and I had a front-row seat for the decades of linguistic seething and heaving. And also because I’m a
  640.    <a href="https://www.rfc-editor.org/rfc/rfc9839.html">Unicode geek</a>.</p>
  641.    <h2 id='p-2'>Algospeak (2025)</h2>
  642.    <p>The subtitle is “How Social Media Is Transforming the Future of Language”. OK, but…
  643.    Social media is a fertile field for language evolution. Thing is,  corporate social media discourse
  644.    lives in the dire grip of the proprietors’ algorithms.  And that’s where Adam Aleksic focuses. He treats all of them
  645.    as a single opaque object, “The Algorithm”, which I think is fair because they all are designed with one goal: To
  646.    maximize the effectiveness of human conversation at generating advertising revenue.</p>
  647.    <p>First, the Table of Contents.</p>
  648.    <img src="https://www.tbray.org/ongoing/When/202x/2026/03/05/AS-toc.png" alt="Table of Contents from “Algospeak" />
  649.    <p>Aleksic knows whereof he speaks: As “Etymology Nerd”, his aggregate following across TikTok, Instagram, and YouTube is
  650.    over three million.  He’s all about cool bits and pieces of
  651.    linguistics, often Internet-specific usages.
  652.    If I had the patience for podcasts I suppose his would be near the top of my list.</p>
  653.    <p>He really enjoys his work and has fun talking about some of Social Media’s more colorful linguistic extrusions; check
  654.    that Table of Contents. I’m kind of old and I learned a lot about the words and emojis younger folk emit, and I think most folks,
  655.    even those just out of their teens, would too.  I’m on a Discord for a    
  656.    <a href="/ongoing/What/Sports/Soccer/">Major League Soccer</a> team’s fans, and while it’s totally all-ages, I can say I am regularly
  657.    less mystified than I was before I read <cite>Algospeak</cite>.
  658.    For example, now I know what it means when someone tosses “💀” into a chat. Do you?</p>
  659.    <p>Aleksic isn’t averse to a little history himself. Looking back over the successive online-jargon volcanoes, he argues
  660.    convincingly that two stand out as extra productive. First of all, the short-lived (but hot stuff at the time)
  661.    <a href="https://en.wikipedia.org/wiki/Vine_(service)">Vine</a> video platform.  Second, the incel cesspool; sad but
  662.    (apparently) true.</p>
  663.    <h2 id='p-3'>The Algorithm</h2>
  664.    <p>Remember, it’s all about what advertisers want. And wow, do they ever want a lot of things. I’ll just touch on a few of
  665.    Aleksic’s points.</p>
  666.    <p>First of all, they don’t want to find themselves next to downers. So if you want to talk about death or suicide or rape or
  667.    racism or rage,
  668.    you need to fool The Algorithm. Thus “unalive” and many other dodges. Of course, The Algorithm learns about them so you
  669.    have to keep dodging. Neither side of this struggle can stay ahead for long.</p>
  670.    <p>Here’s another thing I didn’t know: Apparently written Chinese is particularly rich in techniques for euphemizing, making it
  671.    easier for users of that language to evade, for a time, The Algorithm.</p>
  672.    <h2 id='p-4'>Partitioning people</h2>
  673.    <p>Another big thing The Algorithm likes is grouping people into smaller and smaller baskets based on interests, generations,
  674.    and many other criteria. This is because advertisers can aim very specific campaigns at just exactly the right cohort of people who
  675.    are likely to buy what they’re selling. Here’s a quote; See how the language fills in behind advertisers’ pressure?</p>
  676.    <blockquote><p>It doesn’t matter how much I label myself. If I’m a demisexual goblincore Gen
  677.    Z Swiftie, I guarantee there are still others like me. The only thing these labels really change about me is that they make me
  678.    easier to classify and market to. Ironically, true individuality may come out of a <em>lack</em> of labels and stories, because
  679.    there’s greater freedom of expression with a blank slate. If everybody’s the “main character,” then nobody is.</p></blockquote>
  680.    <p><cite>Algospeak</cite>, unlike <cite>Because Internet</cite>, doesn’t limit itself to written language. One of its most
  681.    compelling studies concerns the vocal techniques of podcasters and YouTubers. The finding is simple: It’s hard to build and hold an
  682.    audience for your show unless you sound like MrBeast. No, really.</p>
  683.    <p>Anyhow, they’re both good books. <cite>Because Internet</cite> educated and entertained me. <cite>Algospeak</cite> is way
  684.    more intense, intentionally more like the subject it addresses. Also it made me angry. I am a lover of human language and of its
  685.    patterns of growth and mutation and simplification and complexification. Linguistics is one of the disciplines I regret not
  686.    having chosen.</p>
  687.    <p>Aleksic makes it clear that there’s an amusing narrative about how the people living and speaking in the shade of the Algorithm
  688.    can never defeat it, but they can still manage to get their messages across. But they shouldn’t have to struggle!</p>
  689.    <p>In fact, a few million of us have found a place to talk to each other that isn’t in The
  690.    Algorithm’s shadow: Decentralized social media. Specifically the Fediverse (what people mean when they say “Mastodon”) and maybe
  691.    the ATmosphere (same for “Bluesky”).</p>
  692.    <p>I want to see how language grows in a place where new forms arrive when they’re needed, to say new things that need to be
  693.    said. Not to either serve or resist The Algorithm.</p>
  694. </div></content></entry>
  695.  
  696. <entry>
  697. <title>Kansas and AI</title>
  698. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/27/Kansas-and-GenAI' />
  699. <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/27/Kansas-and-GenAI#comments' />
  700. <id>https://www.tbray.org/ongoing/When/202x/2026/02/27/Kansas-and-GenAI</id>
  701. <published>2026-02-27T12:00:00-08:00</published>
  702. <updated>2026-02-27T16:06:19-08:00</updated>
  703. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/AI' />
  704. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  705. <category scheme='https://www.tbray.org/ongoing/What/' term='AI' />
  706. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Block announced that it’s cutting 40% of its workforce. It didn’t say it was replacing those people with GenAI. Not out loud.     Jack Dorsey did say “I believe the majority of companies will reach the same conclusion and make similar structural     changes.”     Wall Street loved it, bidding up the share price by 24%. Which reminded me of Kansas in 2010</div></summary>
  707. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  708.    <p>Block announced that it’s cutting 40% of its workforce. It didn’t say it was replacing those people with GenAI. Not out loud.
  709.    Jack Dorsey did say “I believe the majority of companies will reach the same conclusion and make similar structural
  710.    changes.”
  711.    Wall Street loved it, bidding up the share price by 24%. Which reminded me of Kansas in 2010.</p>
  712.    <h2 id='p-1'>The Kansas Experiment</h2>
  713.    <p>As long as I can remember, a certain class of right-wing evangelists has preached that cutting taxes would stimulate business
  714.    growth and everyone would come out ahead. There are a couple of problems with this theory. First, mainstream economists
  715.    almost universally think it’s just wrong. Second, most of the people pushing it are rich and would
  716.    benefit from the cuts.</p>
  717.    <p>Anyhow, in 2010 US Senator Sam Brownback won the race for governor of Kansas on what was then called the “Tea Party” program:
  718.    Prosperity through tax cuts. Tea-party Republicans also won a large majority in the state legislature. Unsurprisingly they
  719.    immediately
  720.    <a href="https://en.wikipedia.org/wiki/Kansas_experiment">did what they said they were going to do</a>: Slashed a wide variety
  721.    of taxes, some to zero.</p>
  722.    <p>The predicted prosperity failed to happen. The state government’s revenue plunged and it had to dig deep into rainy-day
  723.    reserves just to keep the doors open.  There were brutal cuts to policing, road repair, and schools. Also a nasty
  724.    feedback loop: As the state’s fiscal position worsened, its credit rating fell and interest rates rose, leading to yet more
  725.    brutal austerity measures.</p>
  726.    <p>Another result was that affluent Kansans made out like bandits; the cost of running the state was substantially
  727.    transferred to the less financially fortunate.</p>
  728.    <p>In 2017, the legislature threw in their cards and repealed the tax cuts, overriding Brownback’s veto.</p>
  729.    <p>While this was a terrible experience for most Kansans, it is historically useful, because whenever you encounter a
  730.    tax-cut nut (probably self-interestedly wealthy) you can say “But, Kansas!” Having said that, there are still plenty of
  731.    those nuts, and they’ll tell you that the Kansas experiment failed because of one fine-tuning effort or another. That’s a position
  732.    that’s hard to defend, though.</p>
  733.    <h2 id='p-3'>Sidebar: Trans oppression too</h2>
  734.    <blockquote><p>Before I move onto the AI angle, I gotta pause to acknowledge this week’s news story about the Kansas
  735.    government’s vicious, brutal, and ignorant
  736.    <a href="https://www.theguardian.com/us-news/2026/feb/26/kansas-trans-drivers-license-law-assault-on-rights">assault on trans
  737.    people</a>. To be clear, I think the shitty people who hate trans folk are aren’t necessarily the same shitty people as the shitty
  738.    people who don’t want to contribute to the public good. But, something about Kansas seems to attract both
  739.    flavors.</p></blockquote>
  740.    <h2 id='p-2'>The GenAI experiment</h2>
  741.    <p>The core value proposition of contemporary AI technology is exactly what Dorsey seems to think: Fire half your
  742.    employees and profits will soar! If that’s true, the trillion dollars or so invested so far will seem like small potatoes. Since
  743.    we don’t know if
  744.    this will actually work, anyone who actually does it is conducting an experiment. Just like Sam Brownback did.
  745.    Unsurprisingly, the investor class loves this experiment and is putting their money on it working.</p>
  746.    <p>To be fair, voices have been raised to argue that the tech sector is a special case: That following on
  747.    feverish over-hiring during the Covid lockdown, they need to slash headcount anyhow, and are using AI as an excuse.
  748.    For example
  749.    <a href="https://daringfireball.net/linked/2026/02/27/block-layoffs">John Gruber</a>.</p>
  750.    <p>I personally
  751.    am unconvinced, but even if they’re right, it’s irrelevant. The shareholding class won’t be able to see past that 24% payoff. So
  752.    as of today, they’ll be yelling at every CEO on the planet to start pulling the mass-firing trigger. Or else.</p>
  753.    <p>I think I know how the experiment will turn out. Just like in Kansas, it’s not going to be fun.</p>
  754. </div></content></entry>
  755.  
  756. <entry>
  757. <title>Crocuses of 2026</title>
  758. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/24/Crocuses-of-2026' />
  759. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/24/Crocuses-of-2026#comments' />
  760. <id>https://www.tbray.org/ongoing/When/202x/2026/02/24/Crocuses-of-2026</id>
  761. <published>2026-02-24T12:00:00-08:00</published>
  762. <updated>2026-02-26T13:46:17-08:00</updated>
  763. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Photos' />
  764. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
  765. <category scheme='https://www.tbray.org/ongoing/What/' term='Photos' />
  766. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I’ve run early-spring pictures of these little purple guys almost every year since this blog’s birth     in early 2003.  Except for last year. Because     <a href='/ongoing/When/202x/2025/02/28/Moved'>we moved</a> and the new place didn’t have any. Only now it does, and they’re     (just barely) up. <i>[Update: Up and open, too.]</i></div></summary>
  767. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  768.    <p>I’ve run early-spring pictures of these little purple guys almost every year since this blog’s birth
  769.    in early 2003.  Except for last year. Because
  770.    <a href="/ongoing/When/202x/2025/02/28/Moved">we moved</a> and the new place didn’t have any. Only now it does, and they’re
  771.    (just barely) up. <i>[Update: Up and open, too.]</i></p>
  772.    <img src="https://www.tbray.org/ongoing/When/202x/2026/02/24/TXT56234.png" alt="Crocuses of February 2026" />
  773.    <p>Long-time followers may note that they’re pale and fragile compared to the exuberant blossoms of previous
  774.    years. Not sure why, but our new place faces north and there’s this enormous
  775.    <a href="https://en.wikipedia.org/wiki/Fraxinus_americana">White Ash</a> tree right in front of it, so they’re not getting as
  776.    much sun as at the south-facing former joint.</p>
  777.    <img src="https://www.tbray.org/ongoing/When/202x/2026/02/24/TXT56235.png" alt="Crocuses of February 2026" />
  778.    <p>And also this is their first spring. We bought the bulbs and hired a professional with the right tools to jam them
  779.    into the earth last autumn, between the big tree’s roots. So they really haven’t had a chance to get their own root systems going.</p>
  780.    <p>And finally, it really is the first day that’s bright and warm enough to get out the camera. Maybe they’ll
  781.    be better in another few days. And quite likely next Spring.</p>
  782.    <img src="https://www.tbray.org/ongoing/When/202x/2026/02/24/TXT56244.png" alt="Crocuses of February 2026" />
  783.    <p>This would be the place to introduce whatever metaphor this year’s blossoms, fighting their way through the leaf cover in
  784.    chilly air toward the sun, fit into, but I’m not gonna.</p>
  785.    <p>I, like many, am
  786.    <a href="/ongoing/When/202x/2023/10/25/Wild-World">not dealing very well</a> with what I see when I look at the world in either
  787.    the big or the ultra-local landscapes.
  788.    The world in tough shape and its worst people are making it worse.
  789.    People I love are in ugly corners and not finding help.</p>
  790.    <p>But you know, the flowers, in their low-key way, look great and so does the tree, still in wintersleep. Today the
  791.    sun was shining on them. It’ll be warmer and nicer soon.</p>
  792.    <p>Metaphors can go to hell. It’s just late-winter light on pale violet petals. Enjoy the moments you have with it.</p>
  793.    <img src="https://www.tbray.org/ongoing/When/202x/2026/02/24/TXT56249.png" alt="Spring crocus, now open for business" />
  794.    <div class='caption'><p>Update: Now open for business.</p></div>
  795. </div></content></entry>
  796.  
  797. <entry>
  798. <title>Open Source and GenAI?</title>
  799. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/16/GenAI-and-OSS-opinion' />
  800. <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/16/GenAI-and-OSS-opinion#comments' />
  801. <id>https://www.tbray.org/ongoing/When/202x/2026/02/16/GenAI-and-OSS-opinion</id>
  802. <published>2026-02-16T12:00:00-08:00</published>
  803. <updated>2026-02-18T13:41:14-08:00</updated>
  804. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/AI' />
  805. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  806. <category scheme='https://www.tbray.org/ongoing/What/' term='AI' />
  807. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I’ve been puttering away on my     <a href='/ongoing/What/Technology/Quamina%20Diary/'>Quamina</a> project since 2023. In the last few weeks GenAI     has intervened.       <a href='/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1'>Quamina + Claude, Case 1</a> describes a series of     Claude-generated human-curated PRs, most of which I’ve now approved and merged.     <a href='/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2'>Quamina + Claude, Case 2</a> considers     <a href='https://github.com/baldawarishi/quamina-rs'>quamina-rs</a>, a largely-Claude-driven port from Go to Rust.     Both of these stories seem to have happy endings and negligible downsides. So empirically, I <em>can</em> apply LLM     technology usefully to software development. But should I?</div></summary>
  808. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  809.    <p>I’ve been puttering away on my
  810.    <a href="/ongoing/What/Technology/Quamina%20Diary/">Quamina</a> project since 2023. In the last few weeks GenAI
  811.    has intervened.  
  812.    <a href="/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1">Quamina + Claude, Case 1</a> describes a series of
  813.    Claude-generated human-curated PRs, most of which I’ve now approved and merged.
  814.    <a href="/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2">Quamina + Claude, Case 2</a> considers
  815.    <a href="https://github.com/baldawarishi/quamina-rs">quamina-rs</a>, a largely-Claude-driven port from Go to Rust.
  816.    Both of these stories seem to have happy endings and negligible downsides. So empirically, I <em>can</em> apply LLM
  817.    technology usefully to software development. But should I?</p>
  818.    <h2 id='p-3'>Conclusions 1: Burn it with fire?</h2>
  819.    <p>Let me be clear: In the big GenAI picture, I’m a contra. Why? I’ll pass the mike to Baldur Bjarnason, my
  820.    favorite among GenAI’s blood enemies.:
  821.    <a href="https://www.baldurbjarnason.com/notes/2026/note-on-debating-llm-fans/">“AI” is a dick move</a>.
  822.    His tl;dr is something like “GenAI is environmentally devastating and has the goal of throwing millions of
  823.    knowledge workers onto the street and is being sold by the worst people and is used for horrible applications and will increase
  824.    society’s already-intolerable level of inequality!” To which I reply “Yes, yes, yes, yes, and yes.”</p>
  825.    <p>At the end of the day, the business goal of GenAI is to boost monopolist profits by eliminating decent jobs, and
  826.    damn the consequences. This is a horrifying prospect (although I’m somewhat comforted by my belief that it basically won’t
  827.    work and most of the investment capital is heading straight down the toilet).</p>
  828.    <p>But. All that granted, there’s a plausible case, specifically in software development, for exempting LLMs from this
  829.    loathing.</p>
  830.    <p>First of all, size.
  831.    <a href="https://www.jetbrains.com/lp/devecosystem-data-playground/#global_population">JetBrains thinks</a> that
  832.    the world has 21 million or so software developers, i.e. less than 1% of the earth’s working population.
  833.    Vanishingly small in the context of the lunatic tsumani of LLM overinvestment.
  834.    Training and operating the models required for a market this small is
  835.    rounding error measured on the Great GenAI Overbuild scale. There aren’t enough geeks to create a detectable bump in the global
  836.    carbon load.</p>
  837.    <p>Another odious aspect of LLMs is
  838.    <a href="https://en.wikipedia.org/wiki/Reinforcement_learning_from_human_feedback">RLHF</a>, “Reinforcement Learning From Human
  839.    Feedback”, which relies on underpaying Third-Worlders to
  840.    polish the models’ outputs.
  841.    My guess is that much less is required for code-oriented LLMs.
  842.    The combination of the compiler and your unit tests provide good starter guardrails. Then skilled
  843.    professional intervention is required to deal with the remaining misfires, as with those Quamina PRs.</p>
  844.    <p>Finally, it seems making billionaires into multibillionaires is intrinsic to GenAI dreams. But software-development tools won’t
  845.    do that. Once again, the market is just too small. But even if it weren’t, consider this from Steve Yegge:</p>
  846.    <blockquote><p>For
  847.    <a href="https://steve-yegge.medium.com/the-ai-vampire-eda6e4f07163">this blog post</a>, “Claude Code” means “Claude Code and
  848.    all its identical-looking competitors”, i.e. Codex,
  849.    Gemini CLI, Amp, Amazon Q-developer ClI, blah blah, because that’s what they are. Clones.</p></blockquote>
  850.    <p>(GenAI, overbuilding wherever you look.) None of these products have moats and the chance that any of them become
  851.    extractive monopolies is about zilch. Nobody’s ever built a major cash-cow on developer tooling</p>
  852.    <p>One reason is (*gasp*) Open Source. Does anybody doubt that in the near future, there will
  853.    be entirely open-source versions of what Yegge means by “Claude”?</p>
  854.    <p>So, if you want to condemn the use of GenAI in software development, I think you need arguments other than the fact that
  855.    it’s also being promoted for societally-toxic business purposes.</p>
  856.    <p>I have a few. But stand by, let me push that on the stack and turn to
  857.    technology for a bit.</p>
  858.    <h2 id='p-4'>Conclusions 2: Engineering sanity?</h2>
  859.    <p>Question: Can LLMs even participate in quality software engineering?
  860.    Baldur doesn’t think so: “The gigantic, impossible to review, pull requests. Commits that are
  861.    all over the place. Tests that don’t test anything. Dependencies that import literal malware. Undergraduate-level security
  862.    issues. Incredibly verbose documentation completely disconnected from reality.”</p>
  863.    <p>I’m not saying that these pathologies can’t or don’t happen. But in my personal experience with Quamina, they
  864.    didn’t. (Mind you, it’s a hobby project.)</p>
  865.    <p>And when they do happen, I would assume that mature open-source projects will use a network of
  866.    trust, as big operations like Linux already do.  PRs that don’t have the imprimatur of someone known to be clueful will be ignored.
  867.    When I saw the first of those incoming Quamina PRs, I took the time for a serious look because I knew Rob and had seen evidence that he
  868.    was technically competent. If I see an incoming PR that’s nontrivial and from some rando and doesn’t pass a 120-second sanity
  869.    check, it’s unlikely to get any more attention.</p>
  870.    <p>In fact, some essentials don’t change. If you’re not requiring that PRs be clean and
  871.    test coverage be good and code reviews not be skipped and dependencies be curated, you’re going to get a lousy result whether
  872.    the upstream code is coming from a human or an LLM.</p>
  873.    <p>But it’d be naive to think that a big change in the
  874.    shape of that upstream isn’t going to affect the profession.</p>
  875.    <h2 id='p-9'>Bottlenecks</h2>
  876.    <p>Speaking from personal experience, reviewing the PRs from Claude&amp;Rob was neither faster nor slower, easier nor harder,
  877.    than what I’m used to pre-GenAI.  The number of my disagreements with the diffs, and the amount of arguing it took to resolve
  878.    them, was also about as usual.
  879.    Which creates a big problem. Because if we can generate code a whole lot faster but review doesn’t
  880.    speed up, all we’ve done is moved the bottleneck in the system.</p>
  881.    <p>Speaking of which, Armin Ronacher offers
  882.    <a href="https://lucumr.pocoo.org/2026/2/13/the-final-bottleneck/">The Final Bottleneck</a>, from which: “When one part of the
  883.    pipeline becomes dramatically faster, you need to throttle input.” Think about that.</p>
  884.    <h2 id='p-10'>Burnout</h2>
  885.    <p>Meanwhile, evidence is piling up that LLM-based software development is driving
  886.    developers to overwork and burnout. Here’s
  887.    <a href="https://hbr.org/2026/02/ai-doesnt-reduce-work-it-intensifies-it">a cool-eyed take</a> from <cite>Harvard Business
  888.    Review</cite>. Then there’s Steve Yegge’s frantic, overly-long
  889.    <a href="https://steve-yegge.medium.com/the-ai-vampire-eda6e4f07163">The AI Vampire</a>. But my favorite, and I think a
  890.    must-read, is Siddhant Khare’s
  891.    <a href="https://siddhantkhare.com/writing/ai-fatigue-is-real">AI fatigue is real and nobody talks about it</a>.
  892.    From which: “AI reduces the cost of production but increases the cost of coordination, review, and decision-making. And those
  893.    costs fall entirely on the human.”</p>
  894.    <p>The argument we’re hearing is that GenAI makes development more efficient. And more efficient is better.
  895.    <a href="https://www.tbray.org/ongoing/When/202x/2020/07/05/Too-Efficient">Until it’s not</a>.</p>
  896.    <p>I’m not sure the profession I joined last century would attract me today. And on Mastodon,
  897.    <a href="https://cosocial.ca/@gordwait/116082229876399512">@GordWait said</a> “At our office, we are
  898.    noticing a huge drop in Comp Sci co-op applications. The next generation is convinced there’s no future in programming thanks to
  899.    AI hype.”</p>
  900.    <h2 id='p-11'>Can and should</h2>
  901.    <p>Here’s another conundrum. Suppose we <em>can</em> build a whole lot more stuff, faster. <em>Should</em> we?  I don’t know about you,
  902.    but I am regularly enraged at tools that work just fine popping up “wonderful new features” modals in front of what I’m
  903.    trying to get accomplished. Also at damaging UI churn, driven by product managers trying to get promoted. It’s
  904.    just not obvious
  905.    that speeding up software development is, in the big picture, a good thing.</p>
  906.    <p>And I can’t help noting that every attempt to measure the productivity boost due to GenAI has shown zero (or worse)
  907.    improvement. Of course, Claude’s cheering section will point out that those studies date to 2024 which is the stone age. Maybe
  908.    they’re right.</p>
  909.    <h2 id='p-8'>Vampires</h2>
  910.    <p>(In which I once again go all
  911.    <a href="/ongoing/When/202x/2023/01/16/Class-Reductionism">class-reductionist</a>.) The real problem here is late-stage
  912.    capitalism, and I think is best addressed in Yegge’s <cite>AI Vampires</cite> piece, from which I quote:
  913.    “…dollar-signs appear in their <i>[employers’]</i> eyeballs, like cartoon bosses. I know that look. There’s no reasoning with
  914.    the dollar-eyeball stare.” Yeah.</p>
  915.    <p>Thus the ancient question: <i>cui bono?</i> Assuming GenAI genuinely boosts productivity, who gets the
  916.    benefits? Because the ownership class sure doesn’t think they should go to their newly-more-efficient employees.</p>
  917.    <h2 id='p-7'>But, what do I know?</h2>
  918.    <p>I know that you gotta have test coverage or your software is an unmaintainable tangle of festering tech debt. I know you gotta
  919.    have code review or your quality is on inexorable downhill drift. I <em>don’t</em> know how to build LLMs into a sane,
  920.    sustainable software engineering culture. Nor what to do
  921.    about capitalism’s AI Vampires.</p>
  922.    <p>And I absolutely do <em>not</em> believe the wild-eyed claims of 10× productivity gains, assuming we demand (as we should) that
  923.    they’re sustainable at scale.</p>
  924.    <p>So, would I advise executives to tell software engineering shops to discard their
  925.    culture in favor of vibe coding in the expectation of monstrous productivity wins? Nope.
  926.    <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">Vibe engineering</a>, maybe.
  927.  
  928.    <a href="https://locusmag.com/feature/commentary-cory-doctorow-reverse-centaurs/">Centaurs, not reverse centaurs</a>? Indeed.</p>
  929.    <p>But would I say “Stay away, don’t even look”? Nope. I’d probably suggest pointing the LLM at well-delimited non-strategic
  930.    issues and
  931.    optimizations, and emphasize no shortcuts on reviewing or CI/CD standards.</p>
  932.    <p>Also note that the GenAI apostles are at one in saying that this year’s tools are <em>so</em> much better than last year’s,
  933.    and next year’s are guaranteed to be qualitatively still better! So why would you rush in and risk getting locked into
  934.    soon-to-be-outmoded tooling?</p>
  935.    <p>Rob Sayre wrote “I would never bother to type out these patches by hand. But I read them all.” I probably wouldn’t have
  936.    either and I read them too. And now Quamina is roughly twice as fast. Which is to say, I got good results on a hobby
  937.    project. That’s not nothing.</p>
  938.    <p>But, also not conclusive.
  939.    Once the AI bubble pops and we’ve recovered from the systemic damage, I think there’ll <em>probably</em> be a place for
  940.    open-source LLM automation in developer toolkits.</p>
  941.    <p>But maybe not. Wouldn’t surprise me much, either way.</p>
  942. </div></content></entry>
  943.  
  944. <entry>
  945. <title>Quamina + Claude, Case 2</title>
  946. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2' />
  947. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2#comments' />
  948. <id>https://www.tbray.org/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2</id>
  949. <published>2026-02-14T12:00:00-08:00</published>
  950. <updated>2026-02-14T12:00:00-08:00</updated>
  951. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/AI' />
  952. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  953. <category scheme='https://www.tbray.org/ongoing/What/' term='AI' />
  954. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Quamina Diary' />
  955. <category scheme='https://www.tbray.org/ongoing/What/' term='Quamina Diary' />
  956. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'><a href='/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1'>Last time out</a> I described a bunch of incremental-improvement     <a href='/ongoing/What/Technology/Quamina%20Diary/'>Quamina</a> PRs     from a colleague working with Claude Opus.  Today I want to talk about Rishi Baldawa’s     <a href='https://github.com/baldawarishi/quamina-rs'>quamina-rs</a>, a Claude-based port of Quamina from Go to Rust.     The next post is about where I stand on GenAI and code</div></summary>
  957. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  958.    <p><a href="/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1">Last time out</a> I described a bunch of incremental-improvement
  959.    <a href="/ongoing/What/Technology/Quamina%20Diary/">Quamina</a> PRs
  960.    from a colleague working with Claude Opus.  Today I want to talk about Rishi Baldawa’s
  961.    <a href="https://github.com/baldawarishi/quamina-rs">quamina-rs</a>, a Claude-based port of Quamina from Go to Rust.
  962.    The next post is about where I stand on GenAI and code.</p>
  963.    <p>Anybody who cares about this kind of thing will appreciate Rishi’s write-ups, starting with
  964.    <a href="https://rishi.baldawa.com/posts/the-agents-kept-going/">The Agents Kept Going</a> (also see
  965.    <a href="https://rishi.baldawa.com/posts/scaffolding-for-agent-velocity/">Scaffolding for Agent Velocity</a>).
  966.    He doesn’t just say what he did, he draws lessons; good ones, I think.</p>
  967.    <h2 id='p-1'>Background</h2>
  968.    <p>Rishi and I worked together at AWS, can’t remember the details, but after I left he took over what we called Ruler, now known
  969.    as <a href="https://github.com/aws/event-ruler">aws/event-ruler</a>, Quamina’s ancestor. At the time I left it had been adopted
  970.    by quite a number of AWS and Amazon services and various instances were processing, in aggregate, a remarkable number of
  971.    millions of events per second. So he knows the territory.</p>
  972.    <p>As for quamina-rs, go read his blogs. I’ve got little to add, but here are a couple of juicy quotes: “…at some point while I was
  973.    mindlessly kicking off these sessions, the agents started picking up open issues from the Go version and implementing them on
  974.    their own.“ Also, “And I think that’s the thing worth saying plainly. It’s human to care. Agents don’t care. Automation doesn’t
  975.    care. They need to be told what to care about, and even then they’ll misbehave the moment you look away…”</p>
  976.    <p>Both these stories ended with useful results.
  977.    So empirically, you can get useful results by applying GenAI to the process of code construction.</p>
  978.    <p>Yay. I guess. But there are a lot of smart people who think this whole LLM-fueled coding direction is irremediably toxic.
  979.  
  980.    <a href="/ongoing/When/202x/2026/02/16/GenAI-and-OSS-opinion">I’m not sure they’re wrong</a>.</p>
  981. </div></content></entry>
  982.  
  983. <entry>
  984. <title>Quamina + Claude, Case 1</title>
  985. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1' />
  986. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1#comments' />
  987. <id>https://www.tbray.org/ongoing/When/202x/2026/02/06/Q-Plus-C-Ch1</id>
  988. <published>2026-02-06T12:00:00-08:00</published>
  989. <updated>2026-02-06T12:00:00-08:00</updated>
  990. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/AI' />
  991. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  992. <category scheme='https://www.tbray.org/ongoing/What/' term='AI' />
  993. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Quamina Diary' />
  994. <category scheme='https://www.tbray.org/ongoing/What/' term='Quamina Diary' />
  995. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>With 47 years of coding under my belt, and still a fascination for the new shiny, obviously I’m interested what role (if any)     GenAI is going to play in the future of software.  But not interested enough to actually acquire the necessary skills and     try it out myself. Someday, someday. Didn’t matter; two other people went ahead without asking and applied Claude to my current     code playground, <a href='/ongoing/What/Technology/Quamina%20Diary/'>Quamina</a>. Here’s the first story. I’m going to go     ahead and share it even though it will make people mad at me</div></summary>
  996. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  997.    <p>With 47 years of coding under my belt, and still a fascination for the new shiny, obviously I’m interested what role (if any)
  998.    GenAI is going to play in the future of software.  But not interested enough to actually acquire the necessary skills and
  999.    try it out myself. Someday, someday. Didn’t matter; two other people went ahead without asking and applied Claude to my current
  1000.    code playground, <a href="/ongoing/What/Technology/Quamina%20Diary/">Quamina</a>. Here’s the first story. I’m going to go
  1001.    ahead and share it even though it will make people mad at me.</p>
  1002.    <h2 id='p-1'>Why share?</h2>
  1003.    <p>Because our profession’s debate on this topic is simultaneously ridiculous and toxic.  No meaningful dialogue seems possible
  1004.    between the
  1005.    <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">Gas Town</a>-and-<a href="https://en.wikipedia.org/wiki/Moltbook">Moltbook</a>
  1006.    faction and the
  1007.    <a href="https://www.baldurbjarnason.com/notes/2026/note-on-debating-llm-fans/">“AI” is a dick move</a> camp.
  1008.    So, I’m not going to join in today. This is pure anecdata: What happened when Rob applied Claude to Quamina. I’m going to
  1009.    avoid rhetoric (in the linguistic sense, language designed to convince) and especially polemic (language designed to
  1010.    attack). I promise to have conclusions before too long, just not today.</p>
  1011.    <h2 id='p-2'>What happened was…</h2>
  1012.    <p>There’s this guy
  1013.    <a href="https://github.com/sayrer">Rob Sayre</a>, I’ve known him for many years, even been in the same room once or twice,
  1014.    in the context of IETF work.  I’ve never previously collaborated on code with him. Starting in
  1015.    mid-January, he’s sent
  1016.    <a href="https://github.com/timbray/quamina/issues?q=is%3Apr%20author%3Asayrer">a steady flow of PRs</a>, most of which I
  1017.    eventually accept and merge.</p>
  1018.    <p>The net result is that Quamina is now roughly twice as fast on several benchmarks designed to measure typical tasks.</p>
  1019.    <h2 id='p-3'>Technical details</h2>
  1020.    <p>The details of what Quamina is and does are in the
  1021.    <a href="https://github.com/timbray/quamina?tab=readme-ov-file#quamina">README</a>. For this discussion, let’s ignore everything
  1022.    except to say that it’s a Go library and consider its two most important APIs. <code>AddPattern()</code> adds a Pattern (literal or
  1023.    regexp) to an instance, and
  1024.    <code>MatchesForEvent</code> considers a JSON blob and reports back which Patterns it matched.  It’s really fast and the
  1025.    relationship is pleasingly weak between the number of Patterns that have been added and the matching speed.</p>
  1026.    <p>Quamina is based around finite automata (both deterministic and nondeterministic) and the rest of this technical-details
  1027.    section will throw around NFA and DFA jargon, sorry about that.</p>
  1028.    <p>For code like this that is neither I/O-bound nor UI-centric, performance is really all about choosing the right
  1029.    algorithms. Once you’ve done that, it’s mostly about memory management. Obviously in Quamina, the <code>AddPattern</code> call
  1030.    needs to allocate memory to hold the finite automata. But I’d like it if the <code>MatchesForEvent</code> didn’t.</p>
  1031.    <p>Go’s only built-in data structures are “map” i.e. hash table, and “slice” i.e. appendable array. (For refugees from Java, with
  1032.    its dozens of flavors of lists and hashes, this is initially shocking, but most Go fans come to the conclusion that Go is right
  1033.    and Java is wrong.)
  1034.    In really well-optimized
  1035.    code, you’d like to see all the time spent either in your own logic or in appending to slices and updating maps.</p>
  1036.    <p>In less-well-optimized code, the profiler will show you spending horrifying amounts of time in runtime routines whose names
  1037.    include “malloc”, and in the garbage collector.
  1038.    Now, both maps and slices grow automatically as needed, which is nice, except when you’re trying to minimize allocation.
  1039.    It turns out that slices have a <b>capacity</b>, and as long as the number of things you append is less than the capacity, you won’t
  1040.    allocate, which is good. Thus, there are two standard tricks in the inventory of 100% of people who’ve optimized Go code:</p>
  1041.    <ol>
  1042.      <li><p>When you make a new slice, give it enough capacity to hold everything you’re going to be adding to it.  Yes, this can
  1043.      be hard because you’re probably using it to store input data of unpredictable size, thus…</p></li>
  1044.      <li><p>After you’ve made a new slice, keep it around, clear it after each input record, and its capacity will naturally grow
  1045.      until it gets to be big enough that it fits all the rest of the records, then you’ll never allocate again.</p></li>
  1046.    </ol>
  1047.    <h2 id='p-4'>Those PRs</h2>
  1048.    <p>Background: Quamina is equipped with what I think is a pretty good unit-test suite, and multiple benchmarks.</p>
  1049.    <p>I started getting Rob’s PRs and initially, 100% of them were finding ways along both of those well-trodden map-and-slice
  1050.    paths, in places where I hadn’t noticed the opportunity. They were decent PRs, well-commented, sensible code, no loss of test
  1051.    coverage.  After I asked to see benchmark runs to prove the gains weren’t just theoretical, they started including benchmark runs. I’ve
  1052.    found a few things to push back on but Rob and I had no problem sorting those out.</p>
  1053.    <p>At the end of the day I had no qualms about merging them, but I did find myself wondering how they were built. So I
  1054.    asked.</p>
  1055.    <h2 id='p-6'>Workflow</h2>
  1056.    <p>Rob had told me right away on the first one that these were substantially Claude-generated. I asked him for his workflow and part
  1057.    of what he said was “I might say
  1058.    ‘let's do some profiles of memory and CPU on this benchmark, on main and on this branch.’ It will come up with good and bad
  1059.    ideas, then I pick them.”</p>
  1060.    <p>Also: “What might be counter-intuitive is that I can context switch really quickly with it. So, you leave a comment, and I
  1061.    just tell Claude to fix that, because you are correct. Sometimes I go in and hand edit, but usually it gets close or perfect
  1062.    (what they call a "one-shot"). But I just have the conversation open, so I just pick up where we left off.”</p>
  1063.    <p>Here’s a sample of Claude talking to Rob. You may have to enlarge it.</p>
  1064.    <img src="https://www.tbray.org/ongoing/When/202x/2026/02/06/claude-says.png" alt="Dialogue with Claude" />
  1065.    <h2 id='p-7'>Not just the same-old</h2>
  1066.    <p>Then I got a surprise, because Claude and Rob spotted two pretty big improvements that aren’t on the standard list.
  1067.    First: To traverse an NFA, for each state you have to compute its “epsilon closure”, the set of other states you can get to
  1068.    transitively following epsilon transitions. I had already built a cache so that as you computed them, they got remembered.
  1069.    C&amp;R pointed out “Epsilon closures are a property of the automaton structure, not the input data. Once a pattern is added and the
  1070.    NFA is built, the epsilon closure for any given state is fixed and never changes.” So you might as well compute it and save it
  1071.    when you build the NFA.</p>
  1072.    <p>This is even better than it sounds, because (for good reasons following from Quamina’s concurrency model) my closure
  1073.    caches were per-thread, while the new epsilon closures were global, stored just once for all the threads. Not bad, and not trivial.</p>
  1074.    <p>Second, when you’re computing those closures, you have to memo-ize the key functions to avoid getting caught in NFA loops.
  1075.    I’d done this with a set, which in Go you implement as <code>map[whatever]bool</code>. R&amp;C figured out that if you gave each
  1076.    state a “closure generation” integer field and maintained a global closure-generation value, you could dodge the necessity for the
  1077.    set at the cost of one integer per state.  The benchmarks proved it worked.</p>
  1078.    <p>As I wrote this piece,
  1079.    <a href="https://github.com/timbray/quamina/pull/491">another PR arrived</a> with a stimulating title: “kaizen: allocation-free
  1080.    on the matching path”.</p>
  1081.    <h2 id='p-5'>Kaizen?</h2>
  1082.    <p>It’s
  1083.    <a href="https://en.wikipedia.org/wiki/Kaizen">the idea that</a> you make things substantially better by successively introducing
  1084.    small improvements. We try to
  1085.    use the term to tag Quamina PRs that change no semantics but just make performance better or more reliable or whatever.</p>
  1086.    <h2 id='p-8'>But GenAI is bad!?!</h2>
  1087.    <p>Yes, so they say.  Go re-read that
  1088.    <a href="https://www.baldurbjarnason.com/notes/2026/note-on-debating-llm-fans/">dick-move</a> polemic.</p>
  1089.    <p>But, I’m going to leave this little case study conclusion-free for a bit because there are two follow-up pieces.
  1090.    Next,
  1091.    <a href="/ongoing/When/202x/2026/02/14/Q-Plus-C-Ch2">the story of quamina-rs</a>, a Claude-drive port of Quamina to Rust.
  1092.    Finally, <a href="/ongoing/When/202x/2026/02/16/GenAI-and-OSS-opinion">Open Source and GenAI?</a>.</p>
  1093.    <!--
  1094.    <p>You say “But GenAI is environmentally devastating and has the goal of throwing millions of knowledge workers onto the street
  1095.    and is being sold by the worst people and used for horrible applications  and will increase society’s already-intolerable level
  1096.    of inequality!” And I
  1097.    reply “Yes, yes, yes, yes, and yes.” But I’m talking about the software sector here.
  1098.    <a href="https://www.jetbrains.com/lp/devecosystem-data-playground/#global_population">JetBrains thinks</a> that the world has
  1099.    21 million or so software developers. The notion that this is a market that could justify the lunatic wave of investment thrown
  1100.    at GenAI is laughable. Training and operating the models required to support things like Claude will be rounding error in the
  1101.    scale of the Great GenAI Overbuild. The world can afford it.</p>
  1102.    <h2 id='p-9'>A prediction</h2>
  1103.    <p>Let me quote Yegge:</p>
  1104.    <blockquote><p>For this blog post, “Claude Code” means “Claude Code and all its identical-looking competitors”, i.e. Codex,
  1105.    Gemini CLI, Amp, Amazon Q-developer ClI, blah blah, because that’s what they are. Clones.</p></blockquote>
  1106.    <p>GenAI, overbuilding wherever you look. But anyhow, none of these products have moats and the chance that any of them become
  1107.    dominant enough to serve as the basis for an extractive monopoly rounds to zero. Nobody’s ever built a huge cash-cow company
  1108.    bsaed on selling tools to developers. One reason is (*gasp*) Open Source. Does anybody doubt that in the near future, there will
  1109.    be entirely open-source versions of what Yegge means by “Claude”?</p>
  1110.    -->
  1111. </div></content></entry>
  1112.  
  1113. <entry>
  1114. <title>Long Links</title>
  1115. <link href='https://www.tbray.org/ongoing/When/202x/2026/02/03/Long-Links' />
  1116. <link rel='replies'        thr:count='0'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/02/03/Long-Links#comments' />
  1117. <id>https://www.tbray.org/ongoing/When/202x/2026/02/03/Long-Links</id>
  1118. <published>2026-02-03T12:00:00-08:00</published>
  1119. <updated>2026-02-04T14:41:25-08:00</updated>
  1120. <category scheme='https://www.tbray.org/ongoing/What/' term='The World' />
  1121. <category scheme='https://www.tbray.org/ongoing/What/' term='The World' />
  1122. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Welcome to the first <cite>Long Links</cite> of this so-far-pretty-lousy 2026. I can’t imagine that anyone will have time to     take in all of these, but there’s a good chance one or two might brighten your day</div></summary>
  1123. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1124.    <p>Welcome to the first <cite>Long Links</cite> of this so-far-pretty-lousy 2026. I can’t imagine that anyone will have time to
  1125.    take in all of these, but there’s a good chance one or two might brighten your day.</p>
  1126.    <h2 id='p-17'>Unclassified</h2>
  1127.    <p>Thomas Piketty is always right. For example,
  1128.    <a href="https://thomaspiketty.wordpress.com/2026/02/03/europe-a-social-democratic-power/">Europe, a social-democratic
  1129.    power</a>.</p>
  1130.    <p>Lying is wrong. Conservatives
  1131.    <a href="https://thetyee.ca/Opinion/2026/02/02/Today-Conservatives-Misinformation-Norm/">do it all the time</a>. To be fair,
  1132.    that piece is about the capital-C flavor, as in the Canadian Tories. But still.</p>
  1133.  
  1134.    <p>Clothing is open-source: “If you slice the different parts off with a seamripper, lay them all down, trace them on new
  1135.    fabric, cut them out, and stitch them back together, you can effectively clone and fork
  1136.    garments.” From
  1137.    <a href="https://wiki.xxiivv.com/site/devine_lu_linvega.html">Devine Lu Linvega</a>.</p>
  1138.    <p>The Universe is weird. The Webb telescope keeps showing astronomers things that shouldn’t be there.  For example,
  1139.    <a href="https://www.nature.com/articles/s41586-025-09973-1">An X-ray-emitting protocluster at z ≈ 5.7 reveals rapid structure
  1140.    growth</a>; ignore the title and read the Abstract and Main sections. With pretty pictures!</p>
  1141.    <h2 id='p-2'>Music</h2>
  1142.    <p>One time in Vegas, I was giving a speech, something about cloud computing, and was surprised to find the venue an ornate
  1143.    velvet-lined theater. I found out from the staff, and then relayed to the audience, that the last human before me to stand on this stage
  1144.    in front of an audience had been Willie Nelson. I was tempted to fall to my knees and kiss the boards.
  1145.    <a href="https://www.newyorker.com/magazine/2025/12/29/willie-nelson-profile">How Willie Nelson Sees America</a>, from <cite>The
  1146.    New Yorker</cite>, is subtitled “On the road with the musician, his band, and his family” but it ends up being the kernel of a
  1147.    good biography of an interesting person.  Bonus link; on YouTube,
  1148.    <a href="https://www.youtube.com/watch?v=3WIR3Riq4wM">Willie Nelson - Teatro, featuring Daniel Lanois &amp; Emmylou Harris,
  1149.    Directed by Wim Wenders</a>. Strong stuff.</p>
  1150.    <p>Speaking of recorded music, check out
  1151.    <a href="https://www.dazeddigital.com/music/article/69407/1/why-listening-parties-are-everywhere-right-now-rosalia-album-launch-artist">Why
  1152.    listening parties are everywhere right now</a>. Huh? They are? As a deranged audiophile, sounds like my kind of thing. I’d go.</p>
  1153.    <h2 id='p-4'>Somewhere to put worker bees</h2>
  1154.    <p>When I was working at AWS in downtown Vancouver back starting in 2015, a lot of our junior engineers lived in these
  1155.    teeny-tiny little one-room-tbh apartments. It worked out pretty well for them, they were affordable and an easy walk from the
  1156.    office and these people hadn’t built up enough of a life to need much more room.
  1157.    For a while this trend of
  1158.    so-called-“studio” flats was the new hotness in Vancouver and I guess around quite a bit of the developed world.
  1159.    Us older types with families  would look at the
  1160.    condo market and tell each other “this is stupid”.</p>
  1161.    <p>We were right. The
  1162.    bottom is falling out and they’re sitting empty in their thousands. And not just the teeniest either, the whole
  1163.    condo business is in the toilet. It didn’t help that for a few years all the prices went up every year (until they didn’t) and
  1164.    you could make serious money flipping unbuilt condos, so lots of people did (until they didn’t).</p>
  1165.    <p>Anyhow, here’s a nice write-up on the subject:
  1166.    <a href="https://www.bbc.com/news/articles/cqxq32zzq8eo">‘Somewhere to put worker bees’: Why Canada's micro-condos are losing
  1167.    their appeal</a>. (From the BBC, huh?)</p>
  1168.    <h2 id='p-5'>AI AI AI</h2>
  1169.    <p>Sorry, I can’t not relay pro- and anti-GenAI posts, because that conversation is affecting all our lives just now.  I am
  1170.    actually getting ready to decloak my own conclusions, but for the moment I’m just sharing essays on the subject that strike me as
  1171.    well-written and enjoyable for their own sake. Thus
  1172.    <a href="https://www.baldurbjarnason.com/notes/2026/note-on-debating-llm-fans/">‘AI' is a dick move, redux</a> from Baldur
  1173.    Bjarnason. Boy, is he mad.</p>
  1174.    <p>Sam Ruby has been doing some
  1175.    <a href="https://intertwingly.net/blog/2026/01/28/Twilight-Zone.html">extremely weird shit</a>, running Rails in the browser, as
  1176.    in without even a network connection or a Ruby runtime. Yes, AI was involved in the construction.</p>
  1177.    <h2 id='p-6'>Software</h2>
  1178.    <p>There’s this programming language called Ivy that is in the APL lineage; that acronym will leave young’uns blank but a few greying
  1179.    eyebrows will have been raised. Anyhow,
  1180.    <a href="https://commandcenter.blogspot.com/2026/01/implementing-transcendental-functions.html?m=1">Implementing the
  1181.    transcendental functions in Ivy</a> is delightfully geeky, diving deep with no awkwardness. By no less than Rob Pike.</p>
  1182.    <p>Check out Mike Swanson’s
  1183.    <a href="https://blog.mikeswanson.com/backseat-software/">Backseat Software</a>. That’s “backseat” as in “backseat driver”,
  1184.    which today’s commercial software has now, annoyingly, become. This piece doesn’t make any points that I haven’t heard (or made
  1185.    myself) elsewhere, but it pulls a lot of the important ones together in a well-written and compelling package. Recommended.</p>
  1186.    <p>Old Googler Harry Glaser
  1187.    <a href="https://www.linkedin.com/posts/harryglaser_i-worked-on-ads-at-google-15-years-ago-when-activity-7423057144402427905-nm3p/">reacts
  1188.    with horror</a> to the introduction of advertising by OpenAI, and makes gloomy predictions about how it will evolve. His predictions
  1189.    are obviously correct.</p>
  1190.    <p>The title says it:
  1191.    <a href="https://petapixel.com/2026/01/17/discovering-a-digital-photo-editing-workflow-beyond-adobe/">Discovering a Digital
  1192.    Photo Editing Workflow Beyond Adobe</a>. It’d be a tough transition for me, but the relationship with Adobe gets harder and
  1193.    harder to justify.</p>
  1194.    <h2 id='p-7'>Indigenous reconciliation</h2>
  1195.    <p>Khelsilem is one of the loudest and clearest voices coming out of the Squamish nation, one of the larger and better-organized
  1196.    Indigenous communities around here.</p>
  1197.    <p>There has been a steady drumbeat of Indigenous litigation going on for decades as a
  1198.    consequence of the fact that the British colonialists who seized the territory in what we now call British Columbia didn’t
  1199.    bother to sign treaties with the people who were already there, they just assumed ownership. The Indigenous people have been
  1200.    winning a lot of court cases, which makes people nervous.</p>
  1201.    <p>Anyhow, Khelsilem’s
  1202.    <a href="https://khelsilem.substack.com/p/the-source-of-the-reconciliation">The Real Source of Canada's Reconciliation Panic</a>
  1203.    covers the ground. I’m pretty sure British Columbians should read this, and suspect that anyone in a jurisdiction undergoing similar
  1204.    processes should too.</p>
  1205.    <h2 id='p-8'>Resonant computing, Black and Blue sky</h2>
  1206.    <p>There’s this thing called the    
  1207.    <a href="https://resonantcomputing.org">Resonant Computing Manifesto</a>, whose authors and signatories include names you’d
  1208.    probably recognize. Not mine; the first of its Five Principles begins with “In the era of AI…” Also, it is entirely oblivious to
  1209.    the force driving the enshittification of social-media platforms: Monopoly ownership and the pathologies of late-stage
  1210.    capitalism.</p>
  1211.    <p>Having said that, the vision it paints is attractive.  And having said <em>that</em>, it’s now featured on the flags waved by
  1212.    the proponents of ATProto, which is to say Bluesky. See Mike Masnick’s
  1213.    <a href="https://www.techdirt.com/2026/01/27/atproto-the-enshittification-killswitch-that-enables-resonant-computing/">ATproto:
  1214.    The Enshittification Killswitch That Enables Resonant Computing</a> (Mike is on Bluesky Corp’s Board). That piece is OK but, in
  1215.    the comments, Masnick quickly gets snotty about the Fediverse and Mastodon, in a way that I find really off-putting.  And once
  1216.    again, says nothing about the underlying economic realities that poison today’s platforms.</p>
  1217.    <p>I want to like Bluesky, but I’m just too paranoid and cynical about money. It is entirely unclear who is funding the people
  1218.    and infrastructure behind Bluesky, which matters, because if Bluesky Corp goes belly-up, so does the allegedly-decentralized service.</p>
  1219.    <p>On the other hand,
  1220.    <a href="https://blackskyweb.xyz">Blacksky</a> is interesting. They are trying to prove that ATProto really can be made
  1221.    decentralized in fact not just in theory.
  1222.    <a href="https://blackskyweb.xyz/overview/">Their ideas and their people</a> are stimulating, and their
  1223.    <a href="https://opencollective.com/blacksky">finances are transparent</a>.  I’ll be
  1224.    <a href="https://docs.blacksky.community/migrating-to-blacksky-pds-complete-guide">moving my ATProto presence to Blacksky</a>
  1225.    when I get some cycles and the process has become a little more automated.</p>
  1226.    <h2 id='p-14'>Good crypto</h2>
  1227.    <p>The cryptography community is working hard on the problem of what happens should quantum computers ever become real products as
  1228.    opposed to over-invested fever dreams. Because if they ever work, they can probably crack the algorithms that we’ve been using
  1229.    to provide basic Web privacy.</p>
  1230.    <p>The problem is technically
  1231.    hard<span class='dashes'> —</span> there are good solutions though<span class='dashes'> —</span> and also politically fraught,
  1232.    because maybe the designers or standards orgs are corrupt or incompetent. It’s reasonable to worry about this stuff and people
  1233.    do. They probably don’t need to: Sophie Schmieg dives deep in
  1234.    <a href="https://keymaterial.net/2025/11/27/ml-kem-mythbusting/">ML-KEM Mythbusting</a>.</p>
  1235.    <h2 id='p-16'>Books</h2>
  1236.    <p>Here’s one of the most heartwarming things I’ve read in months:
  1237.    <a href="https://blog.openlibrary.org/2026/01/30/a-community-curated-nancy-drew-collection/">A Community-Curated Nancy Drew
  1238.    Collection</a>. Reminder: The Internet can still be great.</p>
  1239.    <p>John Lanchester’s
  1240.    <a href="https://www.lrb.co.uk/the-paper/v46/n17/john-lanchester/for-every-winner-a-loser">For Every Winner a Loser</a>,
  1241.    ostensibly a review of two books about famous financiers, is in fact an extended howl of
  1242.    (extremely instructive) rage against the
  1243.    financialization of everything and the unrelenting increase in inequality. What we need to do is to take the ill-gotten gains
  1244.    away from these people and put it to a use<span class='dashes'> —</span> any use<span class='dashes'> —</span> that improves
  1245.    human lives.</p>
  1246.    <p>I talk a lot about late-stage capitalism. But Sven Beckert published a
  1247.    <a href="https://www.nytimes.com/2025/11/26/books/review/capitalism-sven-beckert.html?searchResultPosition=1">1,300-page monster entitled <cite>Capitalism</cite></a>;
  1248.    the link is to a <cite>NYT</cite> review and makes me want to read it..</p>
  1249.    <p>Charlie Stross, the sci-fi author, likes webtoons and
  1250.    <a href="https://www.antipope.org/charlie/blog-static/2025/12/webtoons-revisited.html">recommends a bunch</a>.  Be careful, do
  1251.    not follow those links if you’re already short of time. Semi- or fully-retired? Go ahead!</p>
  1252.    <p>I have history with dictionaries. For several years of my life in the late Eighties, I was the research project manager for
  1253.    the
  1254.    <a href="https://cs.uwaterloo.ca/~fwtompa/newoed-project.html">New Oxford English Dictionary</a> project at the University of
  1255.    Waterloo. Dictionaries are a fascinating topic and, for much of the history of the publishing industry, were big money-makers;
  1256.    they dominate any short list of the biggest-selling books in history. Then came the Internet.</p>
  1257.    <p>Anyhow, Louis Menand’s
  1258.    <a href="https://www.newyorker.com/magazine/2025/12/29/unabridged-the-thrill-of-and-threat-to-the-modern-dictionary-stefan-fatsis-book-review">Is
  1259.    the Dictionary Done For?</a> starts with a review of a book by Stefan Fatsis entitled <cite>Unabridged: The Thrill of (and
  1260.    Threat to) the Modern Dictionary</cite> which I haven’t read and probably won’t, but oh boy, Menand’s piece is big and rich and
  1261.    polished and just a fantastic read. If, that is, you care about words and languages. I understand there are those who don’t, which is
  1262.    weird. I’ll close with a quote from Menand:</p>
  1263.    <blockquote><p>“The dictionary projects permanence,” Fatsis concludes, “but the language is Jell-O, slippery and mutable and
  1264.    forever collapsing on itself.” He’s right, of course. Language is our fishbowl. We created it and now we’re forever trapped
  1265.    inside it.</p></blockquote>
  1266.    
  1267.    
  1268.  
  1269.    
  1270.    
  1271.    
  1272. </div></content></entry>
  1273.  
  1274. <entry>
  1275. <title>Quamina v2.0.0</title>
  1276. <link href='https://www.tbray.org/ongoing/When/202x/2026/01/20/Quamina-2.0' />
  1277. <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/01/20/Quamina-2.0#comments' />
  1278. <id>https://www.tbray.org/ongoing/When/202x/2026/01/20/Quamina-2.0</id>
  1279. <published>2026-01-20T12:00:00-08:00</published>
  1280. <updated>2026-01-21T15:27:06-08:00</updated>
  1281. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Quamina Diary' />
  1282. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  1283. <category scheme='https://www.tbray.org/ongoing/What/' term='Quamina Diary' />
  1284. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>There’ve been a few bugfixes and optimizations since 1.5, but the headline is:     <a href='https://github.com/timbray/quamina?tab=readme-ov-file#quamina'>Quamina</a>     now knows regular expressions.  This is roughly the fourth anniversary of     the first check-in and the third of v1.0.0. (But I’ve been distracted by family health issues and     other tech enthusiasms.)     Open-source software, it’s a damn fine     hobby</div></summary>
  1285. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1286.    <p>There’ve been a few bugfixes and optimizations since 1.5, but the headline is:
  1287.    <a href="https://github.com/timbray/quamina?tab=readme-ov-file#quamina">Quamina</a>
  1288.    now knows regular expressions.  This is roughly the fourth anniversary of
  1289.    the first check-in and the third of v1.0.0. (But I’ve been distracted by family health issues and
  1290.    other tech enthusiasms.)
  1291.    Open-source software, it’s a damn fine
  1292.    hobby.</p>
  1293.    <p>Did I mention optimizations? There are <i>(sob)</i> also regressions; introducing REs had
  1294.    measurable negative impacts on other parts of the system.
  1295.    But it’s a good trade-off. When you ship software that’s designed for pattern-matching, it should
  1296.    really do REs. The RE story, about a year long, can be read starting
  1297.    <a href="/ongoing/When/202x/2024/12/12/Quamina-Regular-Expression-Series">here</a>.</p>
  1298.    <h2 id='p-4'>Quamina facts</h2>
  1299.    <ol>
  1300.      <li><p>About 18K lines of code (excluding generated code), 12K of which are unit tests. The RE feature makes the tests run
  1301.      slower, which is annoying.</p></li>
  1302.      <li><p>Adding Quamina to your app will bulk your executable size up by about 100K, largely due
  1303.      to Unicode tables.</p></li>
  1304.      <li><p>There are a few shreds of AI-assisted code, none of much importance.</p></li>
  1305.      <li><p>A Quamina instance can match incoming data records on my 2023 M2 Mac at millions per
  1306.      second without much dependence on how many patterns are being matched at once. This assumes
  1307.      not too many horrible regular expressions. That’s per-thread of course, and Quamina does
  1308.      multithreading nicely.</p></li>
  1309.    </ol>
  1310.    <h2 id='p-1'>Next?</h2>
  1311.    <p>The
  1312.    <a href="https://github.com/timbray/quamina/issues">open issues</a> are modest in number but
  1313.    some of them will be hard.</p>
  1314.    <p>I think I’m going to ignore that list for a while (PRs welcome, of course) and work on
  1315.    optimization. The introduction
  1316.    of epsilon transitions was required for regular expressions, but they really bog the matching
  1317.    process down. At Quamina’s core is the
  1318.    <a href="/ongoing/When/202x/2024/07/28/Union-of-Finite-Automata">finite-automaton merge</a> logic,
  1319.    which contains fairly elegant code but generally throws up its hands when confronted with
  1320.    epsilons and does the simplest thing that could possibly work. Sometimes at an annoyingly slow pace.</p>
  1321.    <p>Having said that, to optimize you need a good benchmark that pressures the
  1322.    software-under-test.
  1323.    Which is tricky, because Quamina is so fast that it’s hard to
  1324.    to feed it enough data to stress it without the feed-the-data code dominating
  1325.    the runtime and memory use. If anybody has a bright idea for how to pull together a good
  1326.    benchmark I’d love to hear it. I’m looking at
  1327.    <a href="https://go.dev/blog/testing-b-loop">b.Loop()</a> in Go 1.24, any reason not to go there?</p>
  1328.    <h2 id='p-3'>Book?</h2>
  1329.    <p>It occurs to me that as I’ve wrestled with the hard parts of Quamina, I’ve done the obvious
  1330.    thing and trawled the Web for narratives and advice. And, more or less, been disappointed. Yes,
  1331.    there are many lectures and blogs and so on about this or that aspect of finite automata, but
  1332.    they tend to be mathemagical and theoretical and say little about how, practically speaking,
  1333.    you’d write code to do what they’re talking about.</p>
  1334.    <p>The Quamina-diary <span class='o'>ongoing</span> posts now contain several tens of thousands
  1335.    of words.  Also I’ve previously written
  1336.    <a href="/ongoing/When/200x/2006/04/18/XML-Grammar">quite a bit</a> about Lark, the world’s
  1337.    first XML parser, which I wrote and was automaton-based. So I think there’s a case for a slim
  1338.    volume entitled something like <cite>Finite-state Automata in the Code Trenches</cite>. It’d be
  1339.    a big money-maker, I betcha. I mean, when Apple TV brings it to the screen.</p>
  1340.    <h2 id='p-2'>Why?</h2>
  1341.    <p>Let’s be honest. While
  1342.    <a href="https://github.com/timbray/quamina">the repo</a> has quite a few stars, I truly have no idea who’s
  1343.    using Quamina in production.  So I can’t honestly claim that this work is making the
  1344.    world better along any measurable dimension.</p>
  1345.    <p>I don’t much care because I just can’t help it. I love executable abstractions for their own sake.</p>
  1346. </div></content></entry>
  1347.  
  1348. <entry>
  1349. <title>Losing 1½ Million Lines of Go</title>
  1350. <link href='https://www.tbray.org/ongoing/When/202x/2026/01/14/Unicode-Properties' />
  1351. <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/01/14/Unicode-Properties#comments' />
  1352. <id>https://www.tbray.org/ongoing/When/202x/2026/01/14/Unicode-Properties</id>
  1353. <published>2026-01-14T12:00:00-08:00</published>
  1354. <updated>2026-01-14T15:52:47-08:00</updated>
  1355. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Quamina Diary' />
  1356. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  1357. <category scheme='https://www.tbray.org/ongoing/What/' term='Quamina Diary' />
  1358. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Confession: My title is clickbait-y, this is really about building on the Unicode Character Database to support     character-property regexp features in     <a href='https://github.com/timbray/quamina'>Quamina</a>.     Just halfway there, I’d already got to 775K lines of generated code so I abandoned that particular approach. Thus, this     is about (among other things) <em>avoiding</em> those 1½M lines.  And really only of interest to people whose     pedantry includes some combination of Unicode, Go programming, and automaton wrangling. Oh, and GenAI, which (*gasp*) I     think I should maybe have used</div></summary>
  1359. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1360.    <p>Confession: My title is clickbait-y, this is really about building on the Unicode Character Database to support
  1361.    character-property regexp features in
  1362.    <a href="https://github.com/timbray/quamina">Quamina</a>.
  1363.    Just halfway there, I’d already got to 775K lines of generated code so I abandoned that particular approach. Thus, this
  1364.    is about (among other things) <em>avoiding</em> those 1½M lines.  And really only of interest to people whose
  1365.    pedantry includes some combination of Unicode, Go programming, and automaton wrangling. Oh, and GenAI, which (*gasp*) I
  1366.    think I should maybe have used.</p>
  1367.    <h2 id='p-1'>Character property matching</h2>
  1368.    <p>I’m talking about regexp incantations like <code>[\p{L}\p{Zs}\p{Nd}]</code>, which matches anything that Unicode classifies
  1369.    as a letter, a space, or a decimal number. (Of course, in Quamina “<code>\</code>” is “<code>~</code>”
  1370.    <a href="/ongoing/When/202x/2024/12/12/Quamina-Regular-Expression-Series#p-7">for excellent reasons</a>, so that reads
  1371.    <code>[~p{L}~p{Zs}~p{Nd}]</code>.)</p>
  1372.    <p>(I’m writing about this now because I just launched
  1373.    <a href="https://github.com/timbray/quamina/pull/465">a PR</a> to enable this feature. Just one more to go before I can
  1374.    release a new version of Quamina with full regexp support, yay.)</p>
  1375.    <h2 id='p-3'>Finding the properties</h2>
  1376.    <p>To build an automaton that matches something like that, you have to find out what the character properties are.
  1377.    This information comes from the
  1378.    <a href="https://www.unicode.org/ucd/">Unicode Character Database</a>, helpfully provided online by the Unicode consortium.
  1379.    Of course, most programming languages have libraries that will help you out, and
  1380.    <a href="https://pkg.go.dev/unicode#pkg-variables">that includes Go</a>, but I didn’t use it.</p>
  1381.    <p>Unfortunately, Go’s library doesn’t get updated every time Unicode does. As of now, January 2026,
  1382.    it’s still stuck at Unicode 15.0.0, which
  1383.    <a href="https://www.unicode.org/history/publicationdates.html">dates to September 2023</a>; the latest version is 17.0.0, last
  1384.    September.  Which means there are plenty of Unicode characters Go doesn’t know about, and I didn’t want Quamina to settle
  1385.    for that.</p>
  1386.    <p>So, I fetched and parsed the famous master file from
  1387.    <a href="https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt">www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt</a>.
  1388.    Not exactly rocket science, it’s a flat file with <code>;</code>-delimited fields, of which I only cared about the first
  1389.    and third. There are some funky bits, such as the pair of nonstandard lines indicating that the Han characters occur
  1390.    between U+4E00 and U+9FFF inclusive; but still not really taxing.</p>
  1391.    <p>The output is, for each Unicode category, and also for each category’s complement (<code>~P{L}</code> matches everything
  1392.    that’s <em>not</em> a letter; note the capital <code>P</code>), a list of pairs of code points, each pair indicating a subset
  1393.    of the code space where that category applies. For example, here’s the first line of character pairs with category <code>C</code>.</p>
  1394.    <pre><code>    {0x0020, 0x007e}, {0x00a0, 0x00ac}, {0x00ae, 0x0377},</code></pre>
  1395.    <p>How many pairs of characters, you might wonder? There are 37 categories
  1396.    and it’s all over the place but adds up to a lot. The top three categories
  1397.    are L with 1,945 pairs, Ll at 664, and M at 563. At the other end are Zl and Zp, both with just 1.
  1398.    The total number of pairs is 14,811, and the generated Go code is a mere 5,122 lines.</p>
  1399.    <h2 id='p-5'>Character-property automata</h2>
  1400.    <p>Turning these creations into finite automata was straightforward: I already had the code to handle regexps like
  1401.    <code>[a-zA-Z0-9]</code>, logically speaking the same problem.  But, um, it wasn’t fast. My favorite unit test, an exercise in
  1402.    <a href="/ongoing/When/202x/2024/12/12/QRS-Parsing-Regular-Expressions#p-1">sample-driven development</a> with 992 regexps,
  1403.    suddenly started taking multiple seconds, and my whole unit-test suite expanded from around ten seconds to over twelve; since I
  1404.    tend to run the unit tests every time I take a sip of coffee or scratch my head or whatever, this was painful. And it occurred to
  1405.    me that it would be painful in practice to people who want for some good reason or another to load up a bunch of
  1406.    Unicode-property patterns into a Quamina instance.</p>
  1407.    <p>So, I said to myself, I’ll just precompute all the automata and serialize them into code. And now we
  1408.    get to the title of this essay; my data structure is a bit messy and ad-hoc and just for the categories, before I got to the
  1409.    complement versions, I was generating 775K lines of code.</p>
  1410.    <p>Which worked! But, it was 12M in size and while Go’s runtime is fast, there was a painful pause while it absorbed those data
  1411.    structures on startup.  Also, opening the generated file regularly caused my IDE
  1412.    (<a href="https://www.jetbrains.com/go/">Goland</a>) to crash. And I was only halfway there. The whole approach was painful to
  1413.    work with so I went looking for Plan B.</p>
  1414.    <p>The code that generates the automaton from the code point pairs is pretty well the simplest thing that could possibly work
  1415.    and it was easy to understand but burned memory like crazy.  So I worked for a bit on making it faster and
  1416.    cheaper, but so far have found no low-hanging fruit.</p>
  1417.    <p>I haven’t given up on that yet. But in the meantime, I remembered
  1418.    Computer Science’s general solution for all performance problems, by which I mean caching. So now, any Quamina instance will
  1419.    compute the automaton for a Unicode property the first time it’s used, then remember it. So now Quamina’s speed at adding
  1420.    Unicode-property regexps to an instance has increased from 135/second to 4,330, a factor of thirty and Good Enough For
  1421.    Rock-n-Roll.</p>
  1422.    <p>It’s worth pointing out that while <em>building</em> these automata is a heavyweight process, Quamina can use them to match
  1423.    input messages at its typical rates, hundreds of thousands to millions per second. Sure, these automata are “wide”, with lots of
  1424.    branches, but they’re also shallow, since they run on UTF-8 encoded characters whose maximum length is four and average length
  1425.    is much less. Most times you only have to take one or two of those many branches to match or fail.</p>
  1426.    <h2 id='p-2'>Should I have used Claude?</h2>
  1427.    <p>This particular segment of the Quamina project included some <em>extremely</em> routine programming tasks, for example
  1428.    fetching and parsing
  1429.    UnicodeData.txt, computing the sets of pairs, generating Go code to serialize the automata, reorganizing source files that had
  1430.    become bloated and misshapen, and writing unit tests to confirm the results were correct.</p>
  1431.    <p>Based on my own
  1432.    <a href="/ongoing/When/202x/2025/07/01/First-AI-Code">very limited experience</a> with GenAI code, and in particular after
  1433.    reading Marc Brooker’s
  1434.    <a href="https://brooker.co.za/blog/2025/12/16/natural-language.html">On the success of ‘natural language programming’</a> and
  1435.    Salvatore (“antirez”) Sanfilippo’s
  1436.    <a href="https://antirez.com/news/158">Don't fall into the anti-AI hype</a>, I guess I’ve joined the camp that thinks
  1437.    this stuff is going to have a place in most developers’ toolboxes.</p>
  1438.    <p>I think Claude could have done all that boring stuff, including acceptable unit tests, way faster than I did.
  1439.    And furthermore got it right the first time, which I didn’t.</p>
  1440.    <p>So why didn’t I use Claude? Because I don’t have the tooling set up and I was impatient and didn’t want to invest the time in
  1441.    getting all that stuff going and improving my prompting skills. Which reminds me of all the times I’ve been trying to evangelize other
  1442.    developers on a better way to do things and was greeted by something along the lines of “Fine, but I’m too busy right now, I’ll
  1443.    just going on doing things the way I already know how to.”</p>
  1444.    <p>Does this mean I’m joining the “GenAI is the future and our investments will pay off!” mob?  Not in the slightest. I still
  1445.    think it’s overpriced, overhyped, and mostly ill-suited to the business applications that “thought leaders” claim for it.
  1446.    That word “mostly” excludes the domain of code; as I said
  1447.    <a href="/ongoing/When/202x/2025/09/26/GenAI-Predictions#p-5">here</a>, “It’s pretty obvious that LLMs are better at predicting code
  1448.    sequences than human language.”</p>
  1449.    <p>And, as it turns out, the domain of Developer Tools has never been a Big Business by the standards of GenAI’s promoters. Nor
  1450.    will it ever be; there just aren’t enough of us.  Also, I suspect it’ll be reasonably easy in the near future for open-source
  1451.    models and agents to duplicate the capabilities of Claude and its ilk.</p>
  1452.    <p>Speaking personally, I can’t wait for the bubble to pop.</p>
  1453.    <h2 id='p-4'>Quamina.next?</h2>
  1454.    <p>After I ship the numeric-quantifier feature, e.g. <code>a{2-5}</code>, Quamina’s regexp support will be complete and if no
  1455.    horrid bugs pop up I’ll pretty quickly release Quamina 2.0. Regexps in pattern-matching software are a qualitative difference-maker.  
  1456.    After that I dunno, there are lots more interesting features to add.</p>
  1457.    <p>Unfortunately, a couple years into my Quamina work, I got distracted by life and by other projects, and ignored it. One
  1458.    result is that so did the other people who’d made major contributions and provided PR reviews. I miss them and it’s less fun
  1459.    now.  We’ll see.</p>
  1460. </div></content></entry>
  1461.  
  1462. <entry>
  1463. <title>Regexp Lessons</title>
  1464. <link href='https://www.tbray.org/ongoing/When/202x/2026/01/01/Quamina-2026' />
  1465. <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='/ongoing/When/202x/2026/01/01/Quamina-2026#comments' />
  1466. <id>https://www.tbray.org/ongoing/When/202x/2026/01/01/Quamina-2026</id>
  1467. <published>2026-01-01T12:00:00-08:00</published>
  1468. <updated>2026-01-06T10:19:29-08:00</updated>
  1469. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/Quamina Diary' />
  1470. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  1471. <category scheme='https://www.tbray.org/ongoing/What/' term='Quamina Diary' />
  1472. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I’m just landing a     <a href='https://github.com/timbray/quamina/pull/461'>chonky PR</a> in     <a href='https://github.com/timbray/quamina'>Quamina</a> whose effect is to enable the <code>+</code> and <code>*</code> regexp     features. As in my     <a href='/ongoing/When/202x/2025/07/21/Automaton-merge-war'>last chapter</a>, this is a disorderly war story not an essay, and     probably not of general interest. But     as I said then, the people who care about coercing finite automata into doing useful things at scale are My People (there are     <em>dozens</em> of us)</div></summary>
  1473. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1474.    <p>I’m just landing a
  1475.    <a href="https://github.com/timbray/quamina/pull/461">chonky PR</a> in
  1476.    <a href="https://github.com/timbray/quamina">Quamina</a> whose effect is to enable the <code>+</code> and <code>*</code> regexp
  1477.    features. As in my
  1478.    <a href="/ongoing/When/202x/2025/07/21/Automaton-merge-war">last chapter</a>, this is a disorderly war story not an essay, and
  1479.    probably not of general interest. But
  1480.    as I said then, the people who care about coercing finite automata into doing useful things at scale are My People (there are
  1481.    <em>dozens</em> of us).</p>
  1482.    <h2 id='p-5'>2014-2026</h2>
  1483.    <p>As I write this, I’m sitting in the same couch in my Mom’s living room in Saskatchewan where, on my first Christmas after
  1484.    joining AWS, I got the first-ever iteration of this software to work. That embryo’s mature form is available to the world as
  1485.    <a href="https://github.com/aws/event-ruler">aws/event-ruler</a>. (Thanks, AWS!) Quamina is its direct descendent, which means
  1486.    this story is entering its twelfth year.</p>
  1487.    <p>Mom is now 95 and good company despite her failing memory. I’ve also arrived at a qualitatively later stage of life than in
  1488.    2014, but would like to report back from this poorly-lit and often painful landscape: Executable abstractions are still fun,
  1489.    even when you’re old.</p>
  1490.    <p>Anyhow, the reason I’m writing all this stuff isn’t to expound on the nature of finite automata or regular expressions, it’s
  1491.    to pass on lessons from implementing them.</p>
  1492.    <h2 id='p-8'>Lesson: Seek out samples</h2>
  1493.    <p>In a previous episode I used the phrase
  1494.    <a href="/ongoing/When/202x/2024/12/12/QRS-Parsing-Regular-Expressions#p-1">Sample-driven development</a> to describe my luck in
  1495.    digging up 992 regexp test cases, which reduced task task from intimidating to approachable.
  1496.    I’ve never previously had the luxury of wading into a big software task armed with loads of test cases written by other
  1497.    people, and I can’t recommend it enough. Obviously you’re not always going to dig this sort of stuff up, but give it a sincere
  1498.    effort.</p>
  1499.    <h2 id='p-9'>Lesson: Break up deliverables</h2>
  1500.    <p>I decomposed regular expressions into ten unique features, created an enumerated type to identify them, and implemented them
  1501.    by ones and twos.
  1502.    Several of the feature releases used
  1503.    techniques that turned out to be inefficient or just wrong when it came to subsequent features. But they worked,
  1504.    they were useful, and my errors nearly all taught me useful lessons.</p>
  1505.    <p>Having said that, here’s some cool output that combines this lesson and the one above, from the unit test that runs
  1506.    those test cases. Each case has a regexp then one
  1507.    or more samples each of strings that should and shouldn’t match. I instrumented the test to report the usage of regexp features
  1508.    in the match and non-match cases.</p>
  1509.    <pre>Feature match test counts:
  1510. 32 '*' zero-or-more matcher
  1511. 27 () parenthetized group
  1512. 48 []-enclosed character-class matcher
  1513. 7 '.' single-character matcher
  1514. 29 |-separated logical alternatives
  1515. 16 '?' optional matcher
  1516. 29 '+' one-or-more matcher
  1517. Feature non-match test counts:
  1518. 45 '+' one-or-more matcher
  1519. 24 '*' zero-or-more matcher
  1520. 31 () parenthetized group
  1521. 49 []-enclosed character-class matcher
  1522. 6 '.' single-character matcher
  1523. 32 |-separated logical alternatives
  1524. 21 '?' optional matcher</pre>
  1525.    <p> Of course, since most of the tests combine multiple features, the numbers for all the features
  1526.    get bigger each time I implement a new one. Very confidence-building.</p>
  1527.    <h2 id='p-2'>Lesson: Thompson’s construction</h2>
  1528.    <p>This is the classic nineteen-sixties regular-expression implementation by Ken Thompson, described in Wikipedia
  1529.    <a href="https://en.wikipedia.org/wiki/Thompson%27s_construction">here</a> and (for me at least) more usefully, in a
  1530.    storytelling style by Russ Cox,
  1531.    <a href="https://swtch.com/%7Ersc/regexp/regexp1.html">here</a>.</p>
  1532.    <p>On several occasions I rushed ahead and implemented a feature without checking those sources, because how hard could it be?
  1533.    In nearly every case, I had problems with that first cut and then after I went and consulted the oracle, I could see where I’d
  1534.    gone wrong and how to fix it.</p>
  1535.    <p>So big thanks, Ken and Russ.</p>
  1536.    <h2 id='p-3'>Lesson: List crushing</h2>
  1537.    <p>In some particularly nasty regular expressions that
  1538.    combine <code>[]</code> and <code>?</code> and <code>+</code> and <code>*</code>, you can
  1539.    get multiple states connected in complicated ways with epsilon links.</p>
  1540.    <p>In Thompson’s Construction, traversing an NFA transitions not just from one state to another but from a current set of states
  1541.    to a next set, repeat until you match or fail. You also compute epsilon closures as you go along; I’m skipping over details
  1542.    here. The problem was that traversing these pathologically complex regexps with a sufficiently long string was leading to an
  1543.    exponential explosion in the current-states and next-states sizes<span class='dashes'> —</span> not a figure of speech, I mean
  1544.    <code>O(2<sup>N</sup>)</code>. And despite the usage of the word “set” above, these weren’t, they contained endless
  1545.    duplicates.</p>
  1546.    <p>The <em>best</em> solution would be to study the traversal algorithm and improve it so it didn’t emit fountains of dupes. That
  1547.    would be hard. The next-best would to turn these things into actual de-duped sets, but that would require a hash table right in
  1548.    the middle of the traversal hot spot, and be expensive.</p>
  1549.    <p>So what I did was to detect whenever the next-steps list got to be longer than N, sorted it, and crushed out all the dupes.
  1550.    As I write, N is now 500 based on running benchmarks and finding a value that makes number go down.</p>
  1551.    <p>The reason this is good engineering is that the condition where you have to crush the list almost never happens, so in the
  1552.    vast majority of cases the the only cost is an <code>if len(nextSteps)&gt;N</code> comparison. Some may find this approach
  1553.    impure, and they have a point. I would at some point like to go back and find a better upstream approach. But for now it’s still
  1554.    really fast in practice, so I sleep soundly.</p>
  1555.    <h2 id='p-4'>Lesson: Hell’s benchmark</h2>
  1556.    <p>I’ve
  1557.    <a href="/ongoing/When/202x/2025/07/21/Automaton-merge-war#p-1">written before</a> about my struggles with the benchmark where I
  1558.    merge 12,959 wildcard patterns together. Back before I was doing epsilon processing correctly, I had a kludgey implementation
  1559.    that could match patterns in the merged FA at typical Quamina speeds, hundreds of thousands per second. With correct epsilon
  1560.    general-purpose epsilon handling, I have so far not been smart enough to find a way to preserve that performance. With the full
  1561.    13K patterns, Quamina matches at less than 2K/second, and with a mere thousand, at 16K/second. I spent literally days
  1562.    trying to get better results, but decided that it was more valuable to Quamina to handle a large subset of regular expressions
  1563.    correctly than to run idiotically large merges at full speed.</p>
  1564.    <p>I’m pretty sure that given enough time and consideration, I’ll be able to make it better. Or maybe someone else who’s smarter
  1565.    than me can manage it.</p>
  1566.    <h2 id='p-11'>Question: What next?</h2>
  1567.    <p>The still-unimplemented regexp features are:</p>
  1568.    <pre>{lo,hi} : occurrence-count matcher
  1569. ~p{} : Unicode property matcher
  1570. ~P{} : Unicode property-complement matcher
  1571. [^] : complementary character-class matcher</pre>
  1572.    <p>Now I’m wondering what to do next. <code>[^]</code> is pretty easy I think and is useful, also I get to invert a
  1573.    state-transition table. The
  1574.    <code>{lo,hi}</code> idiom shouldn’t be hard but I’ve been using regexps for longer than most of you have been alive and have
  1575.    never felt the need for it, thus I don’t feel much urgency. The Unicode properties I think have a good fun factor just because
  1576.    processing the Unicode character database tables is cool. And, I’ve used them.</p>
  1577.    <p><i>[Update: the <code>[^]</code> thing took a grand total of a couple of hours to build and test. Hmm, what next?]</i></p>
  1578.    <h2 id='p-10'>Lesson: Coding while aging</h2>
  1579.    <p>I tell people I keep working on code for the sake of preserving my mental fitness. But mostly I do it for fun. Same for
  1580.    writing about it. So, thanks for reading.</p>
  1581. </div></content></entry>
  1582.  
  1583. <entry>
  1584. <title>Humanist Plumbing</title>
  1585. <link href='https://www.tbray.org/ongoing/When/202x/2025/12/18/Humanist-Plumbing' />
  1586. <link rel='replies'        thr:count='5'        type='application/xhtml+xml'        href='/ongoing/When/202x/2025/12/18/Humanist-Plumbing#comments' />
  1587. <id>https://www.tbray.org/ongoing/When/202x/2025/12/18/Humanist-Plumbing</id>
  1588. <published>2025-12-18T12:00:00-08:00</published>
  1589. <updated>2025-12-20T10:40:20-08:00</updated>
  1590. <category scheme='https://www.tbray.org/ongoing/What/' term='Business' />
  1591. <category scheme='https://www.tbray.org/ongoing/What/' term='Business' />
  1592. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>What happened was, a faucet started dripping. And then I managed to route around the malignant machineries of late-stage     capitalism. These days, that’s almost always a story worth telling</div></summary>
  1593. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1594.    <p>What happened was, a faucet started dripping. And then I managed to route around the malignant machineries of late-stage
  1595.    capitalism. These days, that’s almost always a story worth telling.</p>
  1596.    <p>Normally, faced with a drip,
  1597.    we’d pull out the old cartridge, take it to the hardware store, and buy another to swap in.
  1598.    But the fixture in our
  1599.    <a href="/ongoing/When/202x/2025/02/28/Moved">recently-acquired</a> place was kind of exotic and abstract and neither of us
  1600.    could figure it out. We were gloomy because we’ve had terrible luck over the years with the local plumbing storefronts.
  1601.    So…</p>
  1602.    <h2 id='p-1'>The neighbors</h2>
  1603.    <p>Our neighborhood has an online chat; both sides of the streets in a square around a single city block. This is our first
  1604.    experience with such a thing. I gather that these don’t always work out well, but this one has been mostly pretty great.</p>
  1605.    <p>So at 9AM I posted “Hey folks, looking for a plumber recommendation” and by ten there were three.</p>
  1606.    <p><i>[Late-stage capital: “You’re supposed to ask the AI in your browser.  It’ll
  1607.    provide a handy link to a vendor based on geography and reviews but mostly advertising spend.
  1608.    Why would you want to talk to other people?”]</i></p>
  1609.    <h2 id='p-2'>Thomas</h2>
  1610.    <p>I picked a neighbor’s suggestion, first name
  1611.    Thomas, and called the number. “Thomas here” on the second ring. I explained and he said “What’s the brand name? If
  1612.    it’s one of those Chinese no-names I probably have to replace the whole thing.” I said “No idea, but I’ll take a picture and send it to
  1613.    you.”</p>
  1614.    <p>Turns out the brand was
  1615.    <a href="https://riobel.design/en/">Riobel</a>, never heard of them. I texted Thomas a picture and he got right back to me: “That’s
  1616.    high-end, it’s got a lifetime warranty. I’ll come by a little after 5 and take it out. Their dealer is in PoCo (an outer suburb)
  1617.    and I live out there, so I can swap it.”</p>
  1618.    <p><i>[Late-stage capital: “You’re supposed to engage with the chatbot on the site we sent you to, which will integrate with your
  1619.    calendar and arrange for a diagnostic visit a week from Wednesday. You could call them but you’d be in voice-menu hell and
  1620.    eventually end up at the same chatbot.”]</i></p>
  1621.    <p>When Thomas showed up, with a sidekick, he was affable and obviously competent.
  1622.    Within five minutes I was glad I’d called for help; that faucet’s construction was highly non-obvious. Thomas knew what he was
  1623.    doing and it still took him the best part of a half-hour to get it all disassembled and the cartridge extracted.</p>
  1624.    <h2 id='p-6'>Nothing’s perfect</h2>
  1625.    <p>The next morning, a text from Thomas: “Bad news. That part is back-ordered till May at Riobel’s dealer. We can maybe get it
  1626.    online but you’d have to pay.” He attached a screenie of a Web search for the part number; there were several online
  1627.    vendors.</p>
  1628.    <p>It’s irritating that the “lifetime warranty” doesn’t seem to be helping me, but to be fair, the part was initially installed
  1629.    in 2011.</p>
  1630.    <p><i>[Late-stage capital: “Lifetime warranty? Huh? Oh, of course you mean our VIP-class
  1631.    subscription offering, that’s monthly with a
  1632.    discount for annual up-front payment.”</i> (And the part would still be back-ordered.)]</p>
  1633.    <h2 id='p-3'>Kolani</h2>
  1634.    <p>High-end plumbing parts are expensive. But one of Thomas’ recommendations,
  1635.    <a href="https://kolani.ca">Kolani Kitchen and bath</a>, was asking less.</p>
  1636.    <p>They had a phone number on their
  1637.    Web site so I called it and the voice menu only had three options: Location, opening hours, and Operator.
  1638.    The operator was an intelligent human and picked up right away.
  1639.    “Hi, I’m looking at ordering a cartridge and wanted to see if you had it in stock.” “Gimme the part number?” I
  1640.    did and she went away for a couple of minutes and came back “Yeah, it’s in stock.” So I ordered it and I have a tracking
  1641.    number.</p>
  1642.    <p><i>[Late-stage capital: “There aren’t supposed to be independent dealers; the manufacturer has taken PE money and eliminated
  1643.    the middlemen to better capture all the value-add.
  1644.    Or maybe there’ll be a wholesaler, but just one, because another PE rolled up all the distributors to maximize pricing power.
  1645.    Either way, you won’t be able to get a human on the line.”]</i></p>
  1646.    <h2 id='p-7'>Payment</h2>
  1647.    <p>Next morning, I got an email that my order had been canceled. So I called that intelligent operator and she said “I was going
  1648.    to email you. Our system won’t take payment if the billing and delivery addresses are different. Sorry. If you’re in a hurry you
  1649.    could do an e-transfer?” (In Canada, all the banks are in a payments federation that makes this dead easy.) So I
  1650.    did and the part has shipped.</p>
  1651.    <p><i>[Late-stage capital: “What? If you’d used our Integrated online payment offering, it would all just work. What if it
  1652.    doesn’t, you ask? Yeah, sucks to be you in that situation, of course there’d be nobody you could talk to about that.”]</i></p>
  1653.    <p>Thomas came by again to put the old cartridge back in for now and said “This thing, don’t worry about a drip, it’s not fast
  1654.    and it probably won’t get worse. Text me when the new part gets in.”</p>
  1655.    <h2 id='p-5'>Late-stage capitalism</h2>
  1656.    <p>It won’t be missed when it’s gone.</p>
  1657. </div></content></entry>
  1658.  
  1659. <entry>
  1660. <title>After the Bubble</title>
  1661. <link href='https://www.tbray.org/ongoing/When/202x/2025/12/07/Thin-Spots-In-the-AI-Bubble' />
  1662. <link rel='replies'        thr:count='7'        type='application/xhtml+xml'        href='/ongoing/When/202x/2025/12/07/Thin-Spots-In-the-AI-Bubble#comments' />
  1663. <id>https://www.tbray.org/ongoing/When/202x/2025/12/07/Thin-Spots-In-the-AI-Bubble</id>
  1664. <published>2025-12-07T12:00:00-08:00</published>
  1665. <updated>2025-12-09T15:29:05-08:00</updated>
  1666. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology/AI' />
  1667. <category scheme='https://www.tbray.org/ongoing/What/' term='Technology' />
  1668. <category scheme='https://www.tbray.org/ongoing/What/' term='AI' />
  1669. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>The GenAI bubble is going to pop.  Everyone knows that. To me, the urgent and interesting questions are how widespread the     damage will be and what the hangover will feel like.     On that basis, I was going to post a link on Mastodon to Paul Krugman’s      <a href='https://paulkrugman.substack.com/p/talking-with-paul-kedrosky'>Talking With Paul Kedrosky</a>. It’s great, but while I     was reading it I thought “This is going to be Greek to people who haven’t been watching the bubble details.”     So consider this a     preface to the Krugman-Kedrosky piece. If you already know about the GPU-fragility and SPV-voodoo issues, just skip this and go     read that</div></summary>
  1670. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1671.    <p>The GenAI bubble is going to pop.  Everyone knows that. To me, the urgent and interesting questions are how widespread the
  1672.    damage will be and what the hangover will feel like.
  1673.    On that basis, I was going to post a link on Mastodon to Paul Krugman’s
  1674.    <a href="https://paulkrugman.substack.com/p/talking-with-paul-kedrosky">Talking With Paul Kedrosky</a>. It’s great, but while I
  1675.    was reading it I thought “This is going to be Greek to people who haven’t been watching the bubble details.”
  1676.    So consider this a
  1677.    preface to the Krugman-Kedrosky piece. If you already know about the GPU-fragility and SPV-voodoo issues, just skip this and go
  1678.    read that.</p>
  1679.    <h2 id='p-2'>Depreciation</h2>
  1680.    <p>When companies buy expensive stuff, for accounting purposes they pretend they haven’t spent the money; instead they
  1681.    “depreciate” it over a few years.  That is to say, if you spent a million bucks on a piece of gear and decided to depreciate it
  1682.    over four years, your annual financials would show four annual charges of $250K.
  1683.    Management gets to pick your depreciation period, which provides a major opening
  1684.    for creative accounting when the boss wants to make things look better or worse than they are.</p>
  1685.    <p>Even when you’re perfectly honest it can be hard to choose a fair figure. I can remember one of the big
  1686.    cloud vendors announcing they were going to change their fleet depreciation from three to four years and that having an impact on
  1687.    their share price.</p>
  1688.    <p>Depreciation is orderly whether or not it matches reality: anyone who runs a data center can tell you about racks with 20
  1689.    systems in them that have been running fine since 2012. Still, orderly is good.</p>
  1690.    <p>In the world of LLMs, depreciation is different. When you’re doing huge model-building tasks, you’re running
  1691.    those expensive GPUs flat out and red hot for days on end. Apparently they don’t like that, and flame out way more often than
  1692.    conventional computer equipment. Nobody who is doing this is willing to come clean with hard numbers but there are data points, for
  1693.    example from
  1694.    <a href="https://www.tomshardware.com/tech-industry/artificial-intelligence/faulty-nvidia-h100-gpus-and-hbm3-memory-caused-half-of-the-failures-during-llama-3-training-one-failure-every-three-hours-for-metas-16384-gpu-training-cluster">Meta</a>
  1695.    and (very unofficially)
  1696.    <a href="https://www.tomshardware.com/pc-components/gpus/datacenter-gpu-service-life-can-be-surprisingly-short-only-one-to-three-years-is-expected-according-to-unnamed-google-architect">Google</a>.</p>
  1697.    <p>So GPUs are apparently fragile. And they are expensive to run because they require huge
  1698.    amounts of electricity.  More, in fact, than we currently have, which is why electrical bills are spiking here and there around
  1699.    the world.</p>
  1700.    <p>Why does this matter? Because when the 19th-century railway bubble burst, we were left with railways. When the
  1701.    early-electrification bubble burst, we were left with the grid. And when the
  1702.    <a href="https://en.wikipedia.org/wiki/Dot-com_bubble">dot-com bubble</a> burst, we were left with a lot of valuable
  1703.    infrastructure whose cost was sunk, in particular dark fibre. The AI bubble? Not so much; What with GPU burnout and power charges,
  1704.    the infrastructure is going to be expensive to keep running, not something that new classes of application can pick up and use on
  1705.    the cheap.</p>
  1706.    <p>Which suggests that the post-bubble hangover will have few bright spots.</p>
  1707.    <h2 id='p-1'>SPVs</h2>
  1708.    <p>This is a set of purely financial issues but I think they’re at the center of the story.</p>
  1709.    <p>It’s like this. The Big-Tech giants are insanely profitable but they don’t have enough money lying around to build the
  1710.    hundreds of billions of dollars worth of data centers the AI prophets say we’re going to need. Which shouldn’t be a problem;
  1711.    investors would line up to lend them as much as they want, because they’re pretty sure
  1712.    they’re going to get it back, plus interest.</p>
  1713.    <p>But apparently they don’t want to borrow the money and have the debts on their balance sheet.  So they’re
  1714.    setting up “Special Purpose Vehicles”, synthetic companies that are going to build and own the data centers; the Big Techs
  1715.    promise to pay to use them, whether or not genAI pans out and whether or not the data centers become operational. Somehow,
  1716.    this doesn’t count as “debt”.</p>
  1717.    <p>The financial voodoo runs deep here. I recommend Matt Levine’s
  1718.    <a href="https://newsletterhunt.com/emails/205961">Coffee pod financing</a> and the <cite>Financial Times’</cite>
  1719.    <a href="https://www.ft.com/content/d0344253-b0a2-4c6d-8b97-520243678afd">A closer look at the record-smashing ‘Hyperion’
  1720.    corporate bond sale</a>. Levine’s explanation has less jargon and is hilarious; the
  1721.    <cite>FT</cite> is more technical but still likely to provoke horrified eye-rolls.</p>
  1722.    <p>If you think there’s a distinct odor of 2008 around all this, you’d be right.</p>
  1723.    <p>If the genAI fanpholks are right, all the debt-only-don’t-call-it-that will be covered by profits and everyone can sleep
  1724.    sound.  Only it won’t. Thus, either the debts will apply a meat-axe to Big Tech profits, or (like 2008) somehow they won’t be
  1725.    paid back. If whoever’s going to bite the dust is “too big to fail”,
  1726.    the money has to come from… somewhere? Taxpayers? Pension funds? Insurance companies?</p>
  1727.    <h2 id='p-3'>Paul K and Paul K</h2>
  1728.    <p>I think I’ve set
  1729.    <a href="https://paulkrugman.substack.com/p/talking-with-paul-kedrosky">that piece</a> up enough now. It points out a few other
  1730.    issues that I think people should care about.  I have one criticism: They argue that genAI won’t produce sufficient revenue from
  1731.    consumers to pay back the current investment frenzy. I mean, they’re right, it won’t, but that’s not what the investors are
  1732.    buying. They’re buying the promise, not of <em>more revenue</em>, but of <em>higher profits</em> that happen when tens of
  1733.    millions of knowledge workers are replaced by (presumably-cheaper) genAI.</p>
  1734.    <p>I wonder who, after the loss of those tens of millions of high-paid jobs, are going to be the
  1735.    consumers who’ll buy the goods that’ll drive the profits that’ll pay back the investors. But that problem is kind of
  1736.    intrinsic to Late-stage Capitalism.</p>
  1737.    <p>Anyhow, there will be a crash and a hangover.  I think the people telling us that genAI is the future and we
  1738.    must pay it fealty richly deserve their impending financial wipe-out.
  1739.    But still, I hope the hangover is less terrible than I think it will be.</p>
  1740. </div></content></entry>
  1741.  
  1742. <entry>
  1743. <title>Tracy Numbers</title>
  1744. <link href='https://www.tbray.org/ongoing/When/202x/2025/12/02/Bell-Combinatorics' />
  1745. <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='/ongoing/When/202x/2025/12/02/Bell-Combinatorics#comments' />
  1746. <id>https://www.tbray.org/ongoing/When/202x/2025/12/02/Bell-Combinatorics</id>
  1747. <published>2025-12-02T12:00:00-08:00</published>
  1748. <updated>2025-12-02T12:00:00-08:00</updated>
  1749. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts/Music' />
  1750. <category scheme='https://www.tbray.org/ongoing/What/' term='Arts' />
  1751. <category scheme='https://www.tbray.org/ongoing/What/' term='Music' />
  1752. <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Here’s a story about African rhythms and cancer and combinatorics. It starts a few years ago when I was taking     a class in Afro-Cuban rhythms from     <a href='https://drumming.ca'>Russell Shumsky</a>, with whom I’ve studied West-African drumming for many years. Among the     basics of Afro-Cuban are the     <a href='https://en.wikipedia.org/wiki/Bell_pattern'>Bell Patterns</a>, which come straight out of Africa.     The most basic is the “Standard Pattern”, commonly accompanying 12/8music. “12/8” means there are four clusters of     three notes and you can count it “one-two-three two-two-three three-two-three four-two-three”. It     feels like it’s in four, particularly when played fast</div></summary>
  1753. <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
  1754.    <p>Here’s a story about African rhythms and cancer and combinatorics. It starts a few years ago when I was taking
  1755.    a class in Afro-Cuban rhythms from
  1756.    <a href="https://drumming.ca">Russell Shumsky</a>, with whom I’ve studied West-African drumming for many years. Among the
  1757.    basics of Afro-Cuban are the
  1758.    <a href="https://en.wikipedia.org/wiki/Bell_pattern">Bell Patterns</a>, which come straight out of Africa.
  1759.    The most basic is the “Standard Pattern”, commonly accompanying 12/8music. “12/8” means there are four clusters of
  1760.    three notes and you can count it “one-two-three two-two-three three-two-three four-two-three”. It
  1761.    feels like it’s in four, particularly when played fast.</p>
  1762.    <p>Here’s the standard bell pattern in music notation. Instead of one 12/8 bar, I’ve broken it into four 3/8 chunks. Let’s call
  1763.    those “mini-measures”; I’ll use that or just “minis” in the rest of this piece.</p>
  1764.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/standard.png" alt="standard 12/8 bell pattern" />
  1765.    <div class='caption'><p><audio controls="controls" src="https://www.tbray.org/ongoing/When/202x/2025/12/02/standard.m4a"></audio></p></div>
  1766.    <p>Bell patterns are never played in isolation, but circularly on fast repeat, so the first note immediately follows
  1767.    the last.</p>
  1768.    <p>In the sound sample, I’m playing a background beat on a conga, emphasizing the beginning of the 12/8 measures.
  1769.    The actual bell pattern is on the high “child” bell of a
  1770.    <a href="https://en.wikipedia.org/wiki/Ewe_drumming#Gankogui">Gankoqui</a>, an African dual-cowbell set.</p>
  1771.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/PXL_20251201_192632520.png" alt="Black cat considers a Gankoqui" />
  1772.    <div class='caption'><p><a href="/ongoing/When/202x/2021/02/22/Meet-Thorn">“þ” the cat</a> was trying bell patterns but
  1773.    unfortunately<br/>cats can’t count as high as 12. Collar by
  1774.    <a href="https://www.birdsbesafe.com">BirdsBeSafe.com</a>.</p></div>
  1775.    <p>That’s my Gankoqui.
  1776.    I bought it off someone on Etsy who imports them from Ghana.
  1777.    It came with that little thin stick that sounds nice, but sometimes I use a regular drumstick when things get loud.</p>
  1778.    <h2 id='p-1'>The problem</h2>
  1779.    <p>Russell’s a good teacher and the standard pattern isn’t that tricky, but I just couldn’t get a grip on it.
  1780.    It’s a little harder than it looks what with cycling it really fast, and  then
  1781.    you’re playing it against complicated music with other instrumental voices.
  1782.    I probably would have got there, but the lessons ran out of gas in the depths of Covid.</p>
  1783.    <h2 id='p-2'>Introducing Tracy</h2>
  1784.    <p>She was Russell’s long-time partner, a good person and good drummer too.  When you were struggling
  1785.    with a complex rhythm it was helpful to watch Tracy’s hands, because she was <em>always</em> on the beat.</p>
  1786.    <p>Tracy lived with stage four metastatic cancer for many years and braved endless awful rounds of therapy while remaining generally
  1787.    cheerful. She could be morbidly funny; I bought her congas (you can hear one behind the beat in the samples) when she had a
  1788.    storage-space problem.  She told me she was carefully planning her finances so she’d run out of money just before the cancer got
  1789.    her.</p>
  1790.    <p>I always enjoyed any time I spent with her. Then, a dozen years into her cancer
  1791.    journey, this last summer it got into her brain and it was pretty clear her end times were upon her.</p>
  1792.    <h2 id='p-3'>The hospice</h2>
  1793.    <p>Tracy’s last months were spent at
  1794.    <a href="https://stjohnhospice.ca">St. John Hospice</a> in Vancouver’s far west.  I can’t say enough
  1795.    good things about it. If you’re near Vancouver and your death becomes imminent, try to be there if you can’t be at home.
  1796.    It’s comfortable and the staff are expert and infinitely kind. The rules that apply at hospices
  1797.    are different from those at hospitals; for example, Tracy’s cat joined her in residency and had the run of the place.</p>
  1798.    <p>I (and other fans of Russell and Tracy) visited the hospice a few times. My last visit was just days before her death
  1799.    and, while she was fatigued and spaced-out, it was still Tracy.
  1800.    I wasn’t close enough to call her a friend, but I miss her.</p>
  1801.    <p>We got to talking about Afro-Cuban music and I laughed at myself, saying how I never could get that damn bell pattern
  1802.    down. Said Russell: “Oh, you mean the standard 12/8 pattern? Tracy, let’s show him” and on the second try, they were doing it
  1803.    together, just voices, <i>ta ta ta-ta, ta ta ta</i>. </p>
  1804.    <p>Driving home from the hospice, I told myself that if Tracy could manage the bell pattern in her condition, I could bloody
  1805.    well learn it.  So I studied the details and used a metronome app and after a while
  1806.    I thought I had it down pretty well.</p>
  1807.    <h2 id='p-4'>Sounds cool</h2>
  1808.    <p>I go to a weekly by-invitation African drum jam where I’m on the weaker end of the skill
  1809.    spectrum. The first time a 12/8 came along after I thought I’d learned the pattern,  I had to summon up courage
  1810.    and then I fluffed the first few bars. But after a while I
  1811.    was grooving along and smiling and thinking the bell sounded pretty cool against the thunder of all the djembés and dununs.</p>
  1812.    <p>And, even played amateurishly, it does sound cool. Let’s have another look at the music.</p>
  1813.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/standard.png" alt="standard 12/8 bell pattern" />
  1814.    <div class='caption'><p><audio controls="controls" src="https://www.tbray.org/ongoing/When/202x/2025/12/02/standard.m4a"></audio></p></div>
  1815.    <p>West-African drumming often tries to achieve rhythmic tension, where a given note could fit in multiple ways and your
  1816.    ear is not 100% sure what’s going on. The standard pattern does this, twice.</p>
  1817.    <p>Remember, I said that 12/8 sounds like it’s
  1818.    “in four”, especially if you hit the first beat of each of the four mini-measures. But two of
  1819.    the four minis here go around the first note, weakening the 4/4 feel.
  1820.    Especially on that third mini; you can feel the beat slide by the missing “one”.</p>
  1821.    <p>Also, the last three notes are evenly spaced two beats
  1822.    apart, so six of them would fill the 12-beat pattern, suggesting that this might be in triple time, not 12/8.</p>
  1823.    <p>The effect, to my ears, is of the bell, higher-pitched than the drums, shifting against the rhythm, or even dancing
  1824.    across it.  At the drum jam, at almost any given moment it won’t be just drums, one or more people will have
  1825.    clave sticks or rattles or tambourines or cowbells weaving through the beat.</p>
  1826.    <h2 id='p-5'>Mixing it up</h2>
  1827.    <p>After I felt confident playing the standard pattern, it still sounded cool, but I wanted to branch out, not just
  1828.    go around and around the same seven notes. So the first thing I did was start mixing in a few of these.</p>
  1829.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/variation-1.png" alt="bell pattern variation" />
  1830.    <div class='caption'><p><audio controls="controls" src="https://www.tbray.org/ongoing/When/202x/2025/12/02/5333.m4a"></audio></p></div>
  1831.    <p>This repeats the second bar through the end of the phrase. In the sound sample I mix it up with the standard pattern.
  1832.    It’s got less rhythmic tension but on the other hand
  1833.    flows along smoothly with the drum thunder.  Also you don’t have to think at all, so you can enjoy listening to what the other
  1834.    people are playing.</p>
  1835.    <p>Then I got a little more ambitious and reshuffled:</p>
  1836.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/variation-2.png" alt="bell pattern variation" />
  1837.    <div class='caption'><p><audio controls="controls" src="https://www.tbray.org/ongoing/When/202x/2025/12/02/5253.m4a"></audio></p></div>
  1838.    <p>The mini-measures are the same as in the standard pattern, just in a different order.  Anyhow, this kind of thing is fun.</p>
  1839.    <h2 id='p-6'>Combinatorics</h2>
  1840.    <p>Then one evening I was lying in bed, thoughts wandering, and wondered “How many bell patterns are there?”
  1841.    A little mental math showed that of course there are eight possible arrangements of tones
  1842.    in a 3-note mini-measure. Here they are:</p>
  1843.    <img src="https://www.tbray.org/ongoing/When/202x/2025/12/02/8-measures.png" alt="Possible arrangements of notes in 3/8 time" />
  1844.    <div class='caption'><p>I’ll use the boxed numbers to identify the minis.</p></div>
  1845.    <p>Why are the minis numbered in that order? Every computer programmer looking at this already knows, but for the rest of you: If the
  1846.    notes are ones and the rests are zeroes, they are the eight binary numbers between zero and seven inclusive.
  1847.    So each number’s binary bits show where the drumstrokes are.
  1848.    By the way, numbers four through
  1849.    seven have a note on the one beat, zero through three don’t.</p>
  1850.    <p>Is it weird to have a zero i.e. silent mini? I don’t think so, sometimes spaces between the notes really matter.</p>
  1851.    <h2 id='p-7'>Patterns</h2>
  1852.    <p>Anyhow, the original question was about the number of different bell patterns. Each has four
  1853.    mini-measures with 8 possible values. So the answer is 8 ⨉ 8 ⨉ 8 ⨉ 8, which is 4,096.</p>
  1854.    <p>And each of them can be identified by four little numbers, ranging from T0000 (I can hear the bandleader yelling “gimme zeroes
  1855.    for the sax break”) to T7777, a flurry of eighth notes that you might use in the big encore-number finish designed to leave the
  1856.    audience yelling as you walk off stage. The standard bell pattern is T5325; in binary “101 011 010 101” and the 1’s are drumstrokes.
  1857.    The first variation above is T5333 and the second is T5253.</p>
  1858.    <p>The “T” in front of each bell pattern number is for Tracy.</p>
  1859.    <p>If you go look at the
  1860.    <a href="https://en.wikipedia.org/wiki/Bell_pattern">Wikipedia Bell-pattern article</a>, they emphasize that there are lots of
  1861.    different patterns. Now they all have numbers! The article
  1862.    <a href="https://en.wikipedia.org/wiki/Bell_pattern#128_bell_patterns">makes special mention of</a> T5124, T5221, and T5244.</p>
  1863.    <h2 id='p-8'>But why, Tim?!</h2>
  1864.    <p>I’m a computer programmer with a Math degree, and an amateur musician.
  1865.    Anyone who thinks that these are disjoint disciplines is wrong.
  1866.    And, I think the notation is (on a very small scale) kind of pleasing.</p>
  1867.    <p>But the work has actually helped me.
  1868.    Now that I’ve considered each mini-measure and its personality. I find all of them sneaking into
  1869.    my Gankoqui excursions, which have gotten noticeably weirder, for example T5635.
  1870.    Nobody’s threatened to kick me out of the jam, so far.</p>
  1871.    <p>Also, this has given me a real appreciation of whoever it was that, probably thousands of years ago and certainly in Africa,
  1872.    picked the “standard” pattern as, well, standard. Because it’s great.</p>
  1873.    <h2 id='p-9'>What’s missing?</h2>
  1874.    <p>You may have noticed that Gankoquis have two bells and I’ve been ignoring that fact. Normally you’d play these patterns
  1875.    on the smaller “child” bell, but sometimes bringing the big parent bell in for a couple of strokes works
  1876.    well.
  1877.    <a href="https://www.youtube.com/watch?v=X2K0i8e6Ftc">Here’s an example</a> (h/t Russell).</p>
  1878.    <p>Also, this discussion has been limited to 3/8 minis in 12/8 measures. There’s another whole universe of 4/4 rhythms that
  1879.    also have bell patterns (but everything exists in the shadow of the
  1880.    <a href="https://en.wikipedia.org/wiki/Clave_(rhythm)">clave rhythm</a>).
  1881.    In that world a pattern has four measures, each of which can have sixteen possible values, so there are 65,536 different ones.</p>
  1882.    <p>And I could repeat the numbers construction above for 4/4. But I’m not going to, because the rewards feel smaller. In my
  1883.    experience, 4/4 rhythms lope smoothly along and everyone knows where the one is even when there’s no note on it, so there’s less
  1884.    ambiguity to work with.
  1885.    Anyhow, any neophyte (like for example me) can play a pretty smooth bell line against 4/4; just start with
  1886.    <a href="https://en.wikipedia.org/wiki/Clave_(rhythm)">clave</a> and add
  1887.    variations (or don’t) and you’ll be fine.</p>
  1888.    <h2 id='p-10'>Useful?</h2>
  1889.    <p>These numbers are just elementary mathemusical fun. If anyone else wanted to use them that’d be a pleasant surprise.
  1890.    If “anyone else” is you, go ahead, but they have a name and you have to use it. These are called Tracy Numbers.</p>
  1891.    <h2 id='p-11'>Colophon</h2>
  1892.    <p>Music fragments by
  1893.    <a href="https://www.mu.se/musescore-studio">MuseScore Studio</a>. Sound samples facilitated by GarageBand, a Shure MV51, and PSB
  1894.    Alphas.</p>
  1895. </div></content></entry>
  1896.  
  1897. </feed>
  1898.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//www.tbray.org/ongoing/ongoing.atom

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda