<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/assets/css/rss.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>dbushell.com (notes)</title>
    <description>David Bushell’s Notes only feed</description>
    <link>https://dbushell.com/notes/</link>
    <lastBuildDate>Tue, 04 Aug 2026 05:12:00 GMT</lastBuildDate>
    <atom:link href="https://dbushell.com/rss.xml" rel="self" type="application/rss+xml"/>
    <author>David Bushell</author>
    <language>en-GB</language>
<item>
  <description>I watched a recent Jeff Geerling video (YouTube) and couldn’t believe what I was seeing. The current price of a Raspberry Pi is an absolute rip off. I checked The Pi Hut and Pimoroni both are priced the same for the UK market. Raspberry Pi 5 for £292.80? Who in their right mind would buy that? I see they introduced a 1GB model for £43.20. A 1GB Pi 5 has extremely limited use, a Pi 4 or even Pi 3 with more RAM would be a better choice. 1GB is a marketing scam. They can claim “from £43.20” and maybe trick a few unobservant suckers. I bought my 8GB Pi 5 for £65.75 in 2023 and even that was way too expensive. I’ve noted similar price hikes for computer parts. The PC and self-hosted hobby is dead right now. Guess who ruined it?</description>
  <link>https://dbushell.com/notes/2026-08-04T05:12Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-08-04T05:12Z/</guid>
  <pubDate>Tue, 04 Aug 2026 05:12:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I watched a recent <a href="https://www.youtube.com/watch?v=53AkaYvw63U" rel="noopener noreferrer" target="_blank">Jeff Geerling video (YouTube)</a> and couldn’t believe what I was seeing. The current price of a <a href="https://www.raspberrypi.com/" rel="noopener noreferrer" target="_blank">Raspberry Pi</a> is an absolute rip off.</p><p>I checked <a href="https://thepihut.com/products/raspberry-pi-5?variant=53972414431617" rel="noopener noreferrer" target="_blank">The Pi Hut</a> and <a href="https://shop.pimoroni.com/products/raspberry-pi-5?variant=54937425674619" rel="noopener noreferrer" target="_blank">Pimoroni</a> both are priced the same for the UK market.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/raspberrypi.avif" alt="Raspberry Pi 5 16GB priced £292.80 (incl. VAT)" width="428" height="298" decoding="async" fetchpriority="low" loading="lazy" id="--img-38e866c4"/></figure><p>Raspberry Pi 5 for £292.80? Who in their right mind would buy that?</p><p>I see they introduced a 1GB model for £43.20. A 1GB Pi 5 has extremely limited use, a Pi 4 or even Pi 3 with more RAM would be a better choice. 1GB is a marketing scam. They can claim “from £43.20” and maybe trick a few unobservant suckers.</p><p>I bought my 8GB Pi 5 for £65.75 in 2023 and even that was way too expensive.</p><p>I’ve noted <a href="https://dbushell.com/notes/2026-06-21T10:53Z/">similar price hikes</a> for computer parts. The PC and self-hosted hobby is dead right now. Guess who ruined it?</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>I really don’t understand the purpose of Homebrew anymore. Today I tried to rebuild my Tauri app and I get a weird error. I run tauri info to find: Weird, I thought I had installed Rust via Homebrew. I run which rustup to find: I run rustup and everything updates. I check ~/.cargo/bin and see all the Rust tools are symlinked to /opt/homebrew/bin/rustup-init — the rustup-init file does not exist. I delete everything and reinstall: Only to be notified: What does this mean? I’m using Homebrew because a package manager is supposed to be convenient. I’m not here for cryptic beer metaphors. What’s the point if it can’t install usable packages? This happens so often. Homebrew package break, I’m left trawling GitHub issues trying to make heads or tails. So I give up and go to the original source piping install scripts straight to bash. I get that Homebrew is an open source volunteer project. I don’t want to sound complainy. I just don’t understand what it’s supposed to do anymore.</description>
  <link>https://dbushell.com/notes/2026-08-02T11:09Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-08-02T11:09Z/</guid>
  <pubDate>Sun, 02 Aug 2026 11:09:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I really don’t understand the purpose of <a href="https://brew.sh/" rel="noopener noreferrer" target="_blank">Homebrew</a> anymore.</p><p>Today I tried to rebuild <a href="https://dbushell.com/2025/07/18/croissant-is-coming-for-you/">my Tauri app</a> and I get a weird error.</p><p>I run <code>tauri info</code> to find:</p><pre data-lang="text" tabindex="0" translate="no" id="pre-a69395ae"><code><span class="line"><span>[✘]</span><span class="space"> </span><span>Environment</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>✘</span><span class="space"> </span><span>rustc:</span><span class="space"> </span><span>not</span><span class="space"> </span><span>installed!</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>Maybe</span><span class="space"> </span><span>you</span><span class="space"> </span><span>don't</span><span class="space"> </span><span>have</span><span class="space"> </span><span>rust</span><span class="space"> </span><span>installed!</span><span class="space"> </span><span>Visit</span><span class="space"> </span><span>https://rustup.rs/</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>✘</span><span class="space"> </span><span>Cargo:</span><span class="space"> </span><span>not</span><span class="space"> </span><span>installed!</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>Maybe</span><span class="space"> </span><span>you</span><span class="space"> </span><span>don't</span><span class="space"> </span><span>have</span><span class="space"> </span><span>rust</span><span class="space"> </span><span>installed!</span><span class="space"> </span><span>Visit</span><span class="space"> </span><span>https://rustup.rs/</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>✔</span><span class="space"> </span><span>rustup:</span><span class="space"> </span><span>1.29.0</span><span class="space"> </span><span>(2026-03-05)</span></span>
<span class="line"><span class="space"> </span><span class="space"> </span><span class="space"> </span><span class="space"> </span><span>✔</span><span class="space"> </span><span>Rust</span><span class="space"> </span><span>toolchain:</span><span class="space"> </span><span>stable-aarch64-apple-darwin</span><span class="space"> </span><span>(default)</span></span></code></pre><p>Weird, I thought I had installed Rust via Homebrew.</p><p>I run <code>which rustup</code> to find:</p><pre data-lang="text" tabindex="0" translate="no" id="pre-0a907281"><code><span class="line"><span>/opt/homebrew/bin/rustup</span></span></code></pre><p>I run <code>rustup</code> and everything updates.</p><p>I check <code>~/.cargo/bin</code> and see all the Rust tools are symlinked to <code>/opt/homebrew/bin/rustup-init</code> — the <code>rustup-init</code> file does not exist.</p><p>I delete everything and reinstall:</p><pre data-lang="sh" tabindex="0" translate="no" id="pre-cc3b702d"><code><span class="line"><span class="syntax-c01639ae">brew</span><span class="space"> </span><span class="syntax-e661ac3e">install</span><span class="space"> </span><span class="syntax-e661ac3e">rustup</span></span></code></pre><p>Only to be notified:</p><pre data-lang="text" tabindex="0" translate="no" id="pre-8b797a2a"><code><span class="line"><span>This</span><span class="space"> </span><span>formula</span><span class="space"> </span><span>no</span><span class="space"> </span><span>longer</span><span class="space"> </span><span>provides</span><span class="space"> </span><span>`rustup-init`.</span></span>
<span class="line"><span></span></span>
<span class="line"><span>rustup</span><span class="space"> </span><span>is</span><span class="space"> </span><span>keg-only,</span><span class="space"> </span><span>which</span><span class="space"> </span><span>means</span><span class="space"> </span><span>it</span><span class="space"> </span><span>was</span><span class="space"> </span><span>not</span><span class="space"> </span><span>symlinked</span><span class="space"> </span><span>into</span><span class="space"> </span><span>/opt/homebrew,</span></span>
<span class="line"><span>because</span><span class="space"> </span><span>it</span><span class="space"> </span><span>conflicts</span><span class="space"> </span><span>with</span><span class="space"> </span><span>rust.</span></span></code></pre><p>What does this mean? I’m using Homebrew because a package manager is supposed to be convenient. I’m not here for cryptic beer metaphors. What’s the point if it can’t install usable packages? This happens so often. Homebrew package break, I’m left trawling GitHub issues trying to make heads or tails.</p><p>So I give up and go to the <a href="https://rust-lang.org/tools/install/" rel="noopener noreferrer" target="_blank">original source</a> piping install scripts straight to bash.</p><p>I get that Homebrew is an open source volunteer project. I don’t want to sound complainy. I just don’t understand what it’s supposed to do anymore.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Cold opens are the worst new trend in podcasting. Random talking with no context. I’m supposed to guess who is speaking and what they’re rambling on about? I look forward to the vague deja vu I get when it’s repeated in 40 minutes 🙄 This ain’t TikTok. Nobody is getting hooked on a poorly chosen mid-sentence quote that isn’t half as profound and the editor imagined. I’m getting real tired of hitting fast-forward an unknown number of times to find the actual start. Much easier to hit unsubscribe.</description>
  <link>https://dbushell.com/notes/2026-08-02T09:12Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-08-02T09:12Z/</guid>
  <pubDate>Sun, 02 Aug 2026 09:12:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Cold opens are the worst new trend in podcasting.</p><p>Random talking with no context. I’m supposed to guess who is speaking and what they’re rambling on about? I look forward to the vague deja vu I get when it’s repeated in 40 minutes 🙄</p><p>This ain’t TikTok. Nobody is getting hooked on a poorly chosen mid-sentence quote that isn’t half as profound and the editor imagined.</p><p>I’m getting real tired of hitting fast-forward an unknown number of times to find the actual start. Much easier to hit unsubscribe.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>I am listening to The Licanius Trilogy by James Islington. The Wheel of Time influence is obvious. The audiobooks are read by Michael Kramer who is the voice of the high fantasy genre. I’m not convinced half way into the first book but I’ll see it through.</description>
  <link>https://dbushell.com/notes/2026-08-02T05:41Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-08-02T05:41Z/</guid>
  <pubDate>Sun, 02 Aug 2026 05:41:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I am listening to <a href="https://en.wikipedia.org/wiki/The_Shadow_of_What_Was_Lost" rel="noopener noreferrer" target="_blank">The Licanius Trilogy</a> by <em>James Islington</em>. The <a href="https://en.wikipedia.org/wiki/The_Wheel_of_Time" rel="noopener noreferrer" target="_blank">Wheel of Time</a> influence is obvious. The audiobooks are read by <em>Michael Kramer</em> who is <em>the</em> voice of the high fantasy genre. I’m not convinced half way into the first book but I’ll see it through.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>After a long absence I’m back coding with Sublime Text. I can’t remember when or why I switched to VS Code. I moved to VSCodium for a short period last year and then gave Zed a spin. These modern apps and their “developer experience” suck. Sublime Text with five minutes of configuration in a breath of fresh air.</description>
  <link>https://dbushell.com/notes/2026-07-27T15:44Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-27T15:44Z/</guid>
  <pubDate>Mon, 27 Jul 2026 15:44:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>After a long absence I’m back coding with <a href="https://www.sublimetext.com/" rel="noopener noreferrer" target="_blank">Sublime Text</a>.</p><p>I can’t remember when or why I switched to VS Code. I moved to VSCodium for a short period last year and then gave Zed a spin.</p><p>These <a href="https://dbushell.com/2026/07/02/the-modern-app/">modern apps</a> and their <smart-arse>“developer experience”</smart-arse> suck.</p><p>Sublime Text with five minutes of configuration in a breath of fresh air.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Lightning CSS is not fit for purpose. (╯°□°)╯︵ ┻━┻ It’s practically impossible to control what CSS is actually output. The documentation and config are infuriating on missing details. It’s not a problem until it’s a problem. As soon as you try to fix issues like animation shorthand a side effect is triggered elsewhere. Lightning CSS is like one of those mini-games where you have to activate a row of switches but when you toggle one switch others are inverted. That game sucks. I’m back to using ESBuild to bundle and minify CSS. If minification doesn’t matter, and it rarely does with HTTP compression, I’m using ten lines of janky Node.js to bundle CSS imports myself. ESBuild is annoying too. I had to write a custom plugin shim to flag font and image URLs and “external” otherwise it cried about path resolution. I just want to bundle imports! Why is there no option to do the most basic thing? I’m convinced none of these tool developers ever build real websites. Modern dev tools all have main character syndrome. Sorry, you’re not that important. By all means have your cryptic JSON dot file and CLIs for the converted. But please just export the no-nonsense primitive parts as a code library.</description>
  <link>https://dbushell.com/notes/2026-07-26T08:20Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-26T08:20Z/</guid>
  <pubDate>Sun, 26 Jul 2026 08:20:00 GMT</pubDate>
  <content:encoded><![CDATA[<p><a href="https://lightningcss.dev/" rel="noopener noreferrer" target="_blank">Lightning CSS</a> is not fit for purpose.</p><p role="img" aria-label="ASCII art of an incensed person flipping a table.">(╯°□°)╯︵ ┻━┻</p><p>It’s practically impossible to control what CSS is actually output. The documentation and config are infuriating on missing details.</p><p>It’s not a problem until it’s a problem. As soon as you try to fix <a href="https://github.com/parcel-bundler/lightningcss/issues/1283" rel="noopener noreferrer" target="_blank">issues like animation shorthand</a> a side effect is triggered elsewhere.</p><p>Lightning CSS is like one of those mini-games where you have to activate a row of switches but when you toggle one switch others are inverted. That game sucks.</p><p>I’m back to using <a href="https://esbuild.github.io/" rel="noopener noreferrer" target="_blank">ESBuild</a> to bundle and minify CSS. If minification doesn’t matter, and it rarely does with HTTP compression, I’m using ten lines of janky Node.js to bundle CSS imports myself.</p><p>ESBuild is annoying too. I had to write a custom plugin shim to flag font and image URLs and “external” otherwise it cried about path resolution. I just want to bundle imports! Why is there no option to do the most basic thing?</p><p>I’m convinced none of these tool developers ever build real websites. Modern dev tools all have main character syndrome. Sorry, you’re not that important. By all means have your cryptic JSON dot file and CLIs for the converted. But please just export the no-nonsense primitive parts as a code library.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Apple has quietly discontinued Safari Technical Preview for macOS 15 (Sequoia). Version 245 was the last release. macOS 26 (Tahoe, aka Trainwreck) was required from version 256 onwards. For now it remains possible to install Safari 26 and apparently Safari 27 Beta on Sequoia. You just have to navigate Apple’s terrible system settings UI and dodge the deceptive patterns that trick you into a Tahoe install. Stay vigilant!</description>
  <link>https://dbushell.com/notes/2026-07-23T09:29Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-23T09:29Z/</guid>
  <pubDate>Thu, 23 Jul 2026 09:29:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Apple has quietly discontinued Safari Technical Preview for macOS 15 (Sequoia). <a href="https://developer.apple.com/documentation/safari-technology-preview-release-notes/stp-release-245" rel="noopener noreferrer" target="_blank">Version 245</a> was the last release. macOS 26 (Tahoe, aka Trainwreck) was required from version 256 onwards. For now it remains possible to install Safari 26 and apparently <a href="https://developer.apple.com/documentation/safari-release-notes/safari-27-release-notes" rel="noopener noreferrer" target="_blank">Safari 27 Beta</a> on Sequoia. You just have to navigate Apple’s terrible system settings UI and dodge the deceptive patterns that trick you into a Tahoe install. Stay vigilant!</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Codeberg is “Protecting our FLOSS commons from LLMs”. TL;DR: keep your slop on GitHub. Nice to see a project push back against the dead internet.</description>
  <link>https://dbushell.com/notes/2026-07-23T05:06Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-23T05:06Z/</guid>
  <pubDate>Thu, 23 Jul 2026 05:06:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Codeberg is <a href="https://blog.codeberg.org/protecting-our-floss-commons-from-llms.html" rel="noopener noreferrer" target="_blank">“Protecting our FLOSS commons from LLMs”</a>.</p><p>TL;DR: keep your slop on GitHub.</p><p>Nice to see a project push back against the dead internet.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>I found Lumis via the Master’s blog (new name, huh?) Lumis looks to be the new hotness in syntax highlighting. Does that mean Shiki is now old and busted? I use Shiki for better syntax highlighting but I have to jump through a few hoops. Is Lumis better? Shiki churns through all 932 code snippets on my blog in around ~1800ms. Lumis can do it in ~1400ms. On one hand that’s quite a significant saving, on the other hand it’s 2026 and I’m not running CI pipelines to rebuild the same code every commit. I hash-and-cache highlighted snippets so speed is a non-issue. And two seconds was never a problem anyway. Lumis’ gimmick is that it uses Tree-sitter to properly parse code rather than regular expression pattern matching. In theory this should produce more accurate results. Take a look at the before and after below. Lumis chokes on JavaScript template literal string interpolation. Shiki can highlight whitespace. I bodged it myself in Lumis so ignore that random bar after @layer, that’s my mess. For these examples I used the Dracula theme which is objectively the correct theme under all circumstances. I slightly modified colour values in both Shiki and Lumis to boost contrast. I did not change where colours were applied. Lumis does a better job picking up unique tokens like the CSS hex colour hash. However, I don’t think it’s always necessary to change their colour. I think hex colours should be a single highlight. The JSX example below illustrates the opposite problem. Why are the curly braces the same colour as the variables? The tokens were parsed but no colour was applied. Perhaps this is just a bad application of the Dracula theme. I’ll also concede that I’m used to seeing how Shiki does it. Theme differences can be fixed if I cared to spend the time. That highlight mistake in the JavaScript code is more off-putting. Side note: Lumis triggered GitHub’s vibe detector. There are slop commits and multiple SLOP.md files. All I’ll say is that quality of code is the least of my concerns. All in all, not enough reasons for me to change. Maybe I’ll check again later.</description>
  <link>https://dbushell.com/notes/2026-07-17T11:00Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-17T11:00Z/</guid>
  <pubDate>Fri, 17 Jul 2026 11:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I found <a href="https://lumis.sh/" rel="noopener noreferrer" target="_blank">Lumis</a> via the <a href="https://master.dev/blog/lumis-syntax-highlighter-powered-by-tree-sitter/" rel="noopener noreferrer" target="_blank">Master’s blog</a> (<a href="https://master.dev/blog/today-frontend-masters-becomes-master-dev/" rel="noopener noreferrer" target="_blank">new name</a>, huh?) Lumis looks to be the new hotness in <strong>syntax highlighting</strong>. Does that mean <a href="https://shiki.style/" rel="noopener noreferrer" target="_blank">Shiki</a> is now old and busted? I use Shiki for <a href="https://dbushell.com/2024/03/14/better-syntax-highlighting/">better syntax highlighting</a> but I have to jump through a few hoops. Is Lumis better?</p><p>Shiki churns through all 932 code snippets on my blog in around ~1800ms. Lumis can do it in ~1400ms. On one hand that’s quite a significant saving, on the other hand it’s 2026 and I’m not running CI pipelines to rebuild the same code every commit. I hash-and-cache highlighted snippets so speed is a non-issue. And two seconds was never a problem anyway.</p><p>Lumis’ gimmick is that it uses <a href="https://tree-sitter.github.io/tree-sitter/" rel="noopener noreferrer" target="_blank">Tree-sitter</a> to properly parse code rather than <glossary-term id="--term-regular-expression"><a href="https://xkcd.com/208/" rel="noopener noreferrer" target="_blank">regular expression</a></glossary-term> pattern matching. In theory this should produce more accurate results.</p><p>Take a look at the before and after below. Lumis chokes on JavaScript template literal string interpolation.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/lumis-shiki-1.png" alt="Side-by-side comparison in syntax highlighting for JavasScript." width="800" height="134" decoding="async" fetchpriority="low" loading="lazy" id="--img-1f494311"/><figcaption>Shiki on the left, Lumis on the right.</figcaption></figure><p>Shiki can highlight whitespace. I bodged it myself in Lumis so ignore that random bar after <code>@layer</code>, that’s my mess. For these examples I used the <em>Dracula theme</em> which is objectively the correct theme under all circumstances. I slightly modified colour values in both Shiki and Lumis to boost contrast. I did not change where colours were applied.</p><p>Lumis does a better job picking up unique tokens like the CSS hex colour hash. However, I don’t think it’s always necessary to change their colour. I think hex colours should be a single highlight.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/lumis-shiki-2.png" alt="Side-by-side comparison in syntax highlighting for CSS." width="740" height="339" decoding="async" fetchpriority="low" loading="lazy" id="--img-4b6feab8"/><figcaption>Shiki on the left, Lumis on the right.</figcaption></figure><p>The JSX example below illustrates the opposite problem.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/lumis-shiki-3.png" alt="Side-by-side comparison in syntax highlighting for JSX." width="1240" height="313" decoding="async" fetchpriority="low" loading="lazy" id="--img-646cb5cb"/><figcaption>Shiki on the left, Lumis on the right.</figcaption></figure><p>Why are the curly braces the same colour as the variables? The tokens were parsed but no colour was applied. Perhaps this is just a bad application of the Dracula theme. I’ll also concede that I’m used to seeing how Shiki does it.</p><p>Theme differences can be fixed if I cared to spend the time. That highlight mistake in the JavaScript code is more off-putting.</p><p>Side note: Lumis triggered <a href="https://dbushell.com/notes/2026-02-18T12:52Z/">GitHub’s vibe detector</a>. There are <a href="https://github.com/leandrocp/lumis/commit/4c696f7e718edf473f2e91543418b38b23ec7475" rel="noopener noreferrer" target="_blank">slop commits</a> and multiple <code>SLOP.md</code> files. All I’ll say is that quality of code is <em>the least</em> of <a href="https://dbushell.com/ai/">my concerns</a>.</p><p>All in all, not enough reasons for me to change. Maybe I’ll check again later.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>“What’s !important” is a semi-regular series on CSS-Tricks by Daniel Schwarz that covers everything hot in CSS and front-end. It’s a great round up, not just because I’m in this week’s edition! It’s nice to see CSS-Tricks ramping up quality content again. Following the Digital Ocean sale it was looking rather dicey. I feared it would be another .net magazine disaster. Remember when that just got eradicated? They promised to migrate content but now links just redirect to a generic landing page.</description>
  <link>https://dbushell.com/notes/2026-07-16T07:02Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-16T07:02Z/</guid>
  <pubDate>Thu, 16 Jul 2026 07:02:00 GMT</pubDate>
  <content:encoded><![CDATA[<p><a href="https://css-tricks.com/whats-important-15/" rel="noopener noreferrer" target="_blank">“What’s !important”</a> is a semi-regular series on <em>CSS-Tricks</em> by Daniel Schwarz that covers everything hot in CSS and front-end. It’s a great round up, not just because I’m in this week’s edition!</p><p>It’s nice to see <em>CSS-Tricks</em> ramping up quality content again. Following the <a href="https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/" rel="noopener noreferrer" target="_blank">Digital Ocean sale</a> it was looking rather dicey. I feared it would be another <a href="https://web.archive.org/web/20130915030309/http://www.netmagazine.com/" rel="noopener noreferrer" target="_blank">.net magazine</a> disaster. Remember when that just got eradicated? They promised to <a href="https://www.creativebloq.com/net/creative-bloq-welcomes-readers-net-magazine-9134344" rel="noopener noreferrer" target="_blank">migrate content</a> but now links just redirect to a generic landing page.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>I code websites for WordPress (PHP), static HTML, or my own scuffed build scripts. I have a particular project for which I decided to try one of those fancy static site generators. I asked the socials “11ty or Astro?” Both are popular but Astro had the edge. I am persevering with Astro despite spending almost an hour trying to get my code editor to recognise HTML (it’s a modern app). I was a little perturbed by Astro’s “Use minimal (empty) template” option writing a damned CLAUDE.md — come on! That’s absolute rage bait. Now that I’m settled, Astro does look well designed and documented. The website I’m building is small enough should I ever need to jump ship. If Astro makes me snap I’ll take 11ty for a spin. If that fails I’ll go back to writing HTML as god intended.</description>
  <link>https://dbushell.com/notes/2026-07-08T10:57Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-08T10:57Z/</guid>
  <pubDate>Wed, 08 Jul 2026 10:57:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I code websites for WordPress (PHP), static HTML, or my own <a href="https://dbushell.com/2025/05/11/the-static-site-churns/">scuffed build scripts</a>. I have a particular project for which I decided to try one of those fancy static site generators. I asked the socials “<a href="https://www.11ty.dev/" rel="noopener noreferrer" target="_blank">11ty</a> or <a href="https://astro.build/" rel="noopener noreferrer" target="_blank">Astro</a>?” Both are popular but Astro had the edge.</p><p>I am persevering with Astro despite spending almost an hour trying to get my code editor to recognise HTML (<a href="https://dbushell.com/2026/07/02/the-modern-app/">it’s a modern app</a>).</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/zed-error.avif" alt="Zed editor error confusing HTML elements with JSX. The error says: `JSX element implicitly has type &#39;any&#39; because no interface &#39;JSX.IntrinsicElements&#39; exists. (ts 7026)`" width="465" height="135" decoding="async" fetchpriority="low" loading="lazy" id="--img-8d95ce23"/></figure><p>I was a little perturbed by Astro’s <em>“Use minimal (empty) template”</em> option writing a damned <code>CLAUDE.md</code> — come on! That’s absolute rage bait.</p><p>Now that I’m settled, Astro does look well designed and documented. The website I’m building is small enough should I ever need to jump ship. If Astro makes me snap I’ll take 11ty for a spin. If that fails I’ll go back to writing HTML as god intended.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Browser Hacks were a necessary evil in the Internet Explorer days. I thought they were a relic of the past but recently Safari has tempted a resurgence. Eric Meyer’s post on split-cell table headers uses @supports to detect Safari. I gave a drive-by suggestion to Sophie Koonin who adapted this for: “Time-based background colour transitions with Temporal and CSS color-mix” — that’s a really cool theme! I wish my website was themeable… I would only use such a technique on sites I actively maintain. You never know what future browser versions might do to break it!</description>
  <link>https://dbushell.com/notes/2026-07-06T07:30Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-06T07:30Z/</guid>
  <pubDate>Mon, 06 Jul 2026 07:30:00 GMT</pubDate>
  <content:encoded><![CDATA[<p><a href="http://browserhacks.com/" rel="noopener noreferrer" target="_blank">Browser Hacks</a> were a necessary evil in the Internet Explorer days. I thought they were a relic of the past but recently Safari has tempted a resurgence.</p><p>Eric Meyer’s post on <a href="https://meyerweb.com/eric/thoughts/2026/05/28/accessible-i-think-split-cell-table-headers/#:~:text=this%20is%20gross%20and%20I%20hate%20it%20but%20it%20works%20to%20fix%20%0A%C2%A0%20%20Safari%E2%80%99s%20layout%20of%20the%20table%E2%80%99s%20top%20headers" rel="noopener noreferrer" target="_blank">split-cell table headers</a> uses <code>@supports</code> to detect Safari. I gave a drive-by suggestion to Sophie Koonin who adapted this for: <a href="https://localghost.dev/blog/time-based-background-colour-transitions-with-temporal-and-css-color-mix/" rel="noopener noreferrer" target="_blank">“Time-based background colour transitions with Temporal and CSS color-mix”</a> — that’s a really cool theme! I wish my website was themeable…</p><p>I would only use such a technique on sites I actively maintain. You never know what future browser versions might do to break it!</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>“Generative AI killed that career. Towards the end, I was asked to replace my thoughtful activity with ill-gotten slop. My prior activity was supported by my unique relationship with the tools and practices learned and refined over a long career of identifying patterns and differences. That experience, though shareable, was never fungible. And the sea, Dent - Chris Dent”</description>
  <link>https://dbushell.com/notes/2026-07-06T07:21Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-06T07:21Z/</guid>
  <pubDate>Mon, 06 Jul 2026 07:21:00 GMT</pubDate>
  <content:encoded><![CDATA[<blockquote><p>Generative AI killed that career. Towards the end, I was asked to replace my thoughtful activity with ill-gotten slop. My prior activity was supported by my unique relationship with the tools and practices learned and refined over a long career of identifying patterns and differences. That experience, though shareable, was never fungible.</p><p><cite><a href="https://anticdent.org/and-the-sea-dent.html" rel="noopener noreferrer" target="_blank">And the sea, Dent</a> - Chris Dent</cite></p></blockquote>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Edit: sorry RSS readers! I future-posted this with the wrong date. Now you’re seeing it again because I use the timestamp in the URL and the URL as the GUID… Just skip to my next note. Reading Salma’s post “Goodbye, forever, probably.” hits hard. Especially the part about AI killing developer education. I wish Salma all the best in her future. I don’t like to swear so choose your own word: #$@! the AI boosters in this industry. Those selfish despicable #$@!s are destroying the web from the inside. Personally I’m focused on my own challenge and opportunity. I’ve got no other skills to be successful offline. If I’m eventually driven away though, expect an explosive uncensored blog post! I’m half inclined to start naming and shaming these #$@! more directly. I need a cup of tea to cool down.</description>
  <link>https://dbushell.com/notes/2026-07-03T10:18Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-03T10:18Z/</guid>
  <pubDate>Fri, 03 Jul 2026 10:18:00 GMT</pubDate>
  <content:encoded><![CDATA[<p><strong>Edit:</strong> sorry RSS readers! I future-posted this with the wrong date. Now you’re seeing it again because I use the timestamp in the URL and the URL as the GUID…</p><p><a href="https://dbushell.com/notes/2026-07-06T10:00Z/">Just skip to my next note.</a></p><hr/><p>Reading Salma’s post <a href="https://whitep4nth3r.com/blog/goodbye-forever-probably/" rel="noopener noreferrer" target="_blank">“Goodbye, forever, probably.”</a> hits hard. Especially the part about <a href="https://whitep4nth3r.com/blog/goodbye-forever-probably/#ai-is-killing-developer-education" rel="noopener noreferrer" target="_blank">AI killing developer education</a>. I wish Salma all the best in her future.</p><p>I don’t like to swear so choose your own word: <b class="cursive" role="img" aria-label="censored word">#$@!</b> the <glossary-term id="--term-ai"><a href="https://dbushell.com/ai/">AI</a></glossary-term> boosters in this industry. Those selfish despicable <b class="cursive" role="img" aria-label="censored word">#$@!s</b> are destroying the web from the inside.</p><p>Personally I’m focused on my own <a href="https://dbushell.com/2026/06/01/challenge-and-opportunity/">challenge and opportunity</a>. I’ve got no other skills to be successful offline. If I’m eventually driven away though, expect an explosive uncensored blog post! I’m half inclined to start naming and shaming these <b class="cursive" role="img" aria-label="censored word">#$@!</b> more directly.</p><p>I need a cup of tea to cool down.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>It is done! Slay the Spire 2 ascension 10 on all characters. The Regent was last to complete with an insanely strong deck. I collected an innate upgraded Arsenal followed by Crash Landing — also innate from Royal Stamp — along with the Throwing Axe relic — meant a guaranteed 14–15 strength in the first two cards! Not to mention a Regalite relic for the same amount of block. Follow that with a corrupted Supermassive for 100+ damage. Then a couple of Cosmic Indifference to rinse and repeat. Absolutely melted act 3! Time for random runs. Ascension 10 wins: The Silent The Defect The Necrobinder The Ironclad The Regent</description>
  <link>https://dbushell.com/notes/2026-07-02T18:25Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-07-02T18:25Z/</guid>
  <pubDate>Thu, 02 Jul 2026 18:25:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>It is done! <strong>Slay the Spire 2</strong> ascension 10 on all characters. <em>The Regent</em> was last to complete with an <em>insanely</em> strong deck.</p><p>I collected an innate upgraded <a href="https://sts2.untapped.gg/en/cards/arsenal" rel="noopener noreferrer" target="_blank">Arsenal</a> followed by <a href="https://sts2.untapped.gg/en/cards/crash-landing" rel="noopener noreferrer" target="_blank">Crash Landing</a> — also innate from <a href="https://sts2.untapped.gg/en/relics/royal-stamp" rel="noopener noreferrer" target="_blank">Royal Stamp</a> — along with the <a href="https://sts2.untapped.gg/en/relics/throwing-axe" rel="noopener noreferrer" target="_blank">Throwing Axe</a> relic — meant a guaranteed 14–15 strength in the first two cards! Not to mention a <a href="https://sts2.untapped.gg/en/relics/regalite" rel="noopener noreferrer" target="_blank">Regalite</a> relic for the same amount of block. Follow that with a corrupted <a href="https://sts2.untapped.gg/en/cards/supermassive" rel="noopener noreferrer" target="_blank">Supermassive</a> for 100+ damage. Then a couple of <a href="https://sts2.untapped.gg/en/cards/cosmic-indifference" rel="noopener noreferrer" target="_blank">Cosmic Indifference</a> to rinse and repeat.</p><p>Absolutely melted act 3! Time for random runs.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/stp2-a10regent.avif" alt="Slay the Spire 2 run stats for The Regent ascension 10 showing relics and cards." width="1920" height="1080" decoding="async" fetchpriority="low" loading="lazy" id="--img-cbf139ae"/></figure><p><strong>Ascension 10 wins:</strong></p><ul><li><a href="https://dbushell.com/notes/2026-05-31T17:29Z/">The Silent</a></li><li><a href="https://dbushell.com/notes/2026-06-02T17:34Z/">The Defect</a></li><li><a href="https://dbushell.com/notes/2026-06-20T14:00Z/">The Necrobinder</a></li><li><a href="https://dbushell.com/notes/2026-06-23T15:44Z/">The Ironclad</a></li><li><a href="https://dbushell.com/notes/2026-07-02T18:25Z/">The Regent</a></li></ul>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>“While the attempts to collectively gaslight the entire world into believing this technology is anything more than an elaborate pyramid scheme branded in warm orange and transitional serifs continue unabated, there is a world of opportunities away from the noise and clamour. By Humans, For Humans - Scott Riley”Scott speaks the truth in this piece.</description>
  <link>https://dbushell.com/notes/2026-06-29T06:17Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-06-29T06:17Z/</guid>
  <pubDate>Mon, 29 Jun 2026 06:17:00 GMT</pubDate>
  <content:encoded><![CDATA[<blockquote><p>While the attempts to collectively gaslight the entire world into believing this technology is anything more than an elaborate pyramid scheme branded in warm orange and transitional serifs continue unabated, there is a world of opportunities away from the noise and clamour.</p><p><cite><a href="https://mindfuldesign.xyz/by-humans/" rel="noopener noreferrer" target="_blank">By Humans, For Humans</a> - Scott Riley</cite></p></blockquote><p>Scott speaks the truth in this piece.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>The atproto reference PDS added account management which is very nice for self-hosters. Previously you’d have to use an app like Bluesky to change your password (or the goat CLI if you’re an admin). I’m not aware of any 3rd-party PDS implementations. I’m half tempted to write my own but such a side quest would eat away far too many hours.</description>
  <link>https://dbushell.com/notes/2026-06-25T11:10Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-06-25T11:10Z/</guid>
  <pubDate>Thu, 25 Jun 2026 11:10:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>The <glossary-term id="--term-atproto"><a href="https://atproto.com/" rel="noopener noreferrer" target="_blank">atproto</a></glossary-term> reference PDS added <a href="https://atproto.com/blog/pds-account-management" rel="noopener noreferrer" target="_blank">account management</a> which is very nice for <a href="https://dbushell.com/2026/03/02/mooving-to-a-self-hosted-bluesky-pds/">self-hosters</a>. Previously you’d have to use an app like Bluesky to change your password (or the <a href="https://github.com/bluesky-social/pds#goat-cli" rel="noopener noreferrer" target="_blank">goat CLI</a> if you’re an admin). I’m not aware of any 3rd-party PDS implementations. I’m half tempted to write my own but such a side quest would eat away far too many hours.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>Mastodon 4.6 has improved accessibility by allowing users to provide alt text for their profile avatar and banner. Credit to Chee Aun for the tip! The alt text only seems to work on profile mastheads and not all avatars yet.</description>
  <link>https://dbushell.com/notes/2026-06-24T10:10Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-06-24T10:10Z/</guid>
  <pubDate>Wed, 24 Jun 2026 10:10:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Mastodon 4.6 has improved accessibility by allowing users to provide alt text for their profile avatar and banner. Credit to <a href="https://mastodon.social/@cheeaun/116804190038204955" rel="noopener noreferrer" target="_blank">Chee Aun</a> for the tip! The alt text only seems to work on profile mastheads and not all avatars yet.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>A quote popped up on Mastodon shared by Nathan Knowler (who rightly shuddered in reaction (because this is terrible advice)): “The W3C ARIA Authoring Practices Guide is an incredibly detailed resource. It describes every common pattern (tabs, dialogs, menus, accordions) with expected keyboard behavior, ARIA roles, and states. And with modern LLM agents, turning a spec into working code is surprisingly fast. Point the agent at the APG pattern, describe your component’s markup, and get a solid first draft you can refine and test. Evil Martians”It’s from a blog post in May I won’t be linking to (I found it searching the quote). The final word “test” is doing some serious heavy lifting. As Manuel Matuzović notes the APG is full of anti-patterns. It is decidedly not a practical how-to guide. The purpose of the APG stated by WAI is to demonstrate the ARIA specification regardless of support. Browsers and assistive technology can use the patterns to test their support. What patterns are supported? Who knows! Not your LLM. The first rule of ARIA gets misquoted often as “don’t use ARIA” but that’s honestly salient advice. The more I learn the less I use.</description>
  <link>https://dbushell.com/notes/2026-06-24T05:31Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-06-24T05:31Z/</guid>
  <pubDate>Wed, 24 Jun 2026 05:31:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>A quote popped up on Mastodon <a href="https://sunny.garden/@knowler/116803341597273078" rel="noopener noreferrer" target="_blank">shared by Nathan Knowler</a> (who rightly shuddered in reaction (because this is terrible advice)):</p><blockquote><p>The W3C ARIA Authoring Practices Guide is an incredibly detailed resource. It describes every common pattern (tabs, dialogs, menus, accordions) with expected keyboard behavior, ARIA roles, and states.</p><p>And with modern LLM agents, turning a spec into working code is surprisingly fast. Point the agent at the APG pattern, describe your component’s markup, and get a solid first draft you can refine and test.</p><p><cite>Evil Martians</cite></p></blockquote><p>It’s from a blog post in May I won’t be linking to (I found it searching the quote). The final word “test” is doing some serious heavy lifting.</p><p><a href="https://front-end.social/@matuzo/116803378972520014" rel="noopener noreferrer" target="_blank">As Manuel Matuzović notes</a> the APG is full of anti-patterns. It is decidedly <strong>not</strong> a practical how-to guide. The purpose of the APG stated by WAI is to demonstrate the ARIA specification regardless of support. Browsers and assistive technology can use the patterns to <a href="https://www.w3.org/WAI/ARIA/apg/practices/read-me-first/#browserandassistivetechnologysupport" rel="noopener noreferrer" target="_blank">test their support</a>. What patterns are supported? Who knows! Not your LLM.</p><p><a href="https://www.w3.org/TR/using-aria/#rule1" rel="noopener noreferrer" target="_blank">The first rule of ARIA</a> gets misquoted often as <em>“don’t use ARIA”</em> but that’s honestly salient advice. The more I learn the less I use.</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
<item>
  <description>My win rate in Slay the Spire 2 is atrocious with The Ironclad despite enjoying the character. Persistence paid off today! A heavy block build carried me to an easy ascension 10 victory. I picked up the Sturdy Clamp relic to persist 10 block per turn. Then I got Unmovable from the first Act 2 elite and Barricade from the Act 2 boss. It was a long grind as I struggled to deal damage. Only The Regent to go for ascension 10 on all characters. Ascension 10 wins: The Silent The Defect The Necrobinder The Ironclad The Regent</description>
  <link>https://dbushell.com/notes/2026-06-23T15:44Z/</link>
  <guid isPermaLink="true">https://dbushell.com/notes/2026-06-23T15:44Z/</guid>
  <pubDate>Tue, 23 Jun 2026 15:44:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>My win rate in <strong>Slay the Spire 2</strong> is atrocious with <em>The Ironclad</em> despite enjoying the character. Persistence paid off today!</p><p>A heavy block build carried me to an easy ascension 10 victory. I picked up the <a href="https://slaythespire2.gg/relics/sturdy-clamp" rel="noopener noreferrer" target="_blank">Sturdy Clamp</a> relic to persist 10 block per turn. Then I got <a href="https://slaythespire.wiki.gg/wiki/Slay_the_Spire_2:Unmovable" rel="noopener noreferrer" target="_blank">Unmovable</a> from the first Act 2 elite and <a href="https://slaythespire.wiki.gg/wiki/Slay_the_Spire_2:Barricade" rel="noopener noreferrer" target="_blank">Barricade</a> from the Act 2 boss. It was a long grind as I struggled to deal damage.</p><p>Only <em>The Regent</em> to go for ascension 10 on all characters.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/stp2-a10ironclad.avif" alt="Slay the Spire 2 run stats for The Ironclad ascension 10 showing relics and cards." width="1920" height="1080" decoding="async" fetchpriority="low" loading="lazy" id="--img-3b76b913"/></figure><p><strong>Ascension 10 wins:</strong></p><ul><li><a href="https://dbushell.com/notes/2026-05-31T17:29Z/">The Silent</a></li><li><a href="https://dbushell.com/notes/2026-06-02T17:34Z/">The Defect</a></li><li><a href="https://dbushell.com/notes/2026-06-20T14:00Z/">The Necrobinder</a></li><li><a href="https://dbushell.com/notes/2026-06-23T15:44Z/">The Ironclad</a></li><li><a href="https://dbushell.com/notes/2026-07-02T18:25Z/">The Regent</a></li></ul>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
</channel>
</rss>
