<?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 (blog)</title>
    <description>David Bushell’s Blog only feed</description>
    <link>https://dbushell.com/blog/</link>
    <lastBuildDate>Sun, 01 Nov 2026 15:00: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>
  <title>Tangled, hire a front-end accessibility expert</title>
  <description>Not me, this is just friendly advice from a struggling user. Alongside Codeberg I’d consider Tangled to be a real GitHub replacement. We desperately need to leave GitHub behind. It’s difficult to recommend any tech these days. I used to spread the gospel of Proton and that backfired. […]</description>
  <link>https://dbushell.com/2026/11/01/tangled-accessibility/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/11/01/tangled-accessibility/</guid>
  <pubDate>Sun, 01 Nov 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Not me, this is just friendly advice from a struggling user.</p><p>Alongside <a href="https://codeberg.org/" rel="noopener noreferrer" target="_blank">Codeberg</a> I’d consider <a href="https://tangled.org/" rel="noopener noreferrer" target="_blank">Tangled</a> to be a real GitHub replacement. <a href="https://dbushell.com/2026/04/29/github-is-sinking/">We desperately need to leave GitHub behind.</a> It’s difficult to recommend any tech these days. I used to spread the gospel of Proton and <a href="https://dbushell.com/notes/2026-10-30T07:29Z/">that backfired</a>. From what I’ve seen, Tangled seem to be saying and doing the right things so far. I have trepidations about their <a href="https://tangled.org/blog/seed/" rel="noopener noreferrer" target="_blank">venture capital funding</a> (see <a href="https://dbushell.com/notes/2026-10-10T10:30Z/">Deno’s demise</a>) but pessimism is no fun.</p><p>Tangled’s recent blog post on <a href="https://tangled.org/blog/forge/" rel="noopener noreferrer" target="_blank">federated code forges</a> piqued my interest. <a href="https://dbushell.com/2025/08/15/self-hosted-forgejo-actions-runner/">I self-host Forgejo</a> and a big downside is that no one else can participate easily. <a href="https://forgejo.codeberg.page/faq/#what-about-forge-federation" rel="noopener noreferrer" target="_blank">Forgejo federation</a> is under development. Maybe the two can co-exist? But that’s not what I’m here to discuss.</p><h2 id="tangleds-new-look">Tangled’s new look</h2><p>In the same post Tangled revealed their new UI design.</p><blockquote><p>We’ve redone the UI on top of our new architecture (described further below), in Svelte. Things should now be quicker, visually consistent and prettier! The keen eyed of you might’ve also spotted that we’ve swapped out Inter for Timeless Sans.</p><p><cite><a href="https://tangled.org/blog/forge/#a-fresh-look" rel="noopener noreferrer" target="_blank">The federated code forge</a> - Anirudh (Tangled CEO)</cite></p></blockquote><p>I quiped on Bluesky: <a href="https://bsky.app/profile/did:plc:rgrzo7xept2yb2auooex4rlg/post/3mz5zpy3yus2j" rel="noopener noreferrer" target="_blank">“keen eyed? eagle-eyed maybe!”</a> — the new font size is exceedingly tiny. It’s coded as <code>12px</code> with <code>16px</code> line height. Tangled is practically unusable for me at this size. It was small before but I could zoom in. The way the new front-end is designed and built doesn’t leave much room for personal remedy. This is not just a subjective opinion there are real accessibility failures here.</p><p><em>(Edit: to be clear, below is one example of many issues.)</em></p><h2 id="font-failure">Font failure</h2><p>Below is a screenshot from Tangled’s new user interface design.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/tangled-12.png" alt="Tangled news feed panel titled &#39;Announcements&#39;. It has three items that each include a date, headline, and short description." width="368" height="265" decoding="async" fetchpriority="low" loading="lazy" id="--img-d0c45fcb"/></figure><p>Visit <a href="https://tangled.org/timeline" rel="noopener noreferrer" target="_blank"><code>tangled.org</code></a> and experience the new UI yourself.</p><p>12 pixels is too small for any meaningful text (which is typically all text). Maybe you feel the size is totally fine? That’s fine for you. But it’s not fine for a <em>significant</em> number of people. You won’t find any accessibility expert happy with that size. (Low-DPI displays may even struggle to render the font legibly.)</p><p><a href="https://www.w3.org/WAI/WCAG22/Understanding/" rel="noopener noreferrer" target="_blank">WCAG 2.2 accessibility guidelines</a> don’t recommend a minimum font size. <a href="https://www.w3.org/TR/WCAG22/#resize-text" rel="noopener noreferrer" target="_blank">1.4.4 Resize Text</a> does require that text can be resized up to 200% “without loss of content or functionality”.</p><p>Tangled uses pixel units in CSS for font size<sup>†</sup>. That means the UI won’t adapt to the browser default setting. <a href="https://support.mozilla.org/en-US/kb/font-size-and-zoom-increase-size-of-web-pages#w_set-a-minimum-text-size" rel="noopener noreferrer" target="_blank">I can <em>force</em> a minimum</a> <code>16px</code> font size and look what happens.</p><div class="Box"><p><strong><sup>†</sup> Correction:</strong> I was wrong about pixel units everywhere (I misread the computed values), it’s <code>font-size: 16px</code> on the <code>&lt;html&gt;</code> element that blocks the relative units from scaling properly with browser settings <a href="https://adrianroselli.com/2024/03/the-ultimate-ideal-bestest-base-font-size-that-everyone-is-keeping-a-secret-especially-chet.html" rel="noopener noreferrer" target="_blank">(an easier fix)</a>.</p></div><figure class="Image"><img src="https://dbushell.com/images/blog/2026/tangled-16.png" alt="Tangled&#39;s news panel with 16px font size, described below." width="368" height="265" decoding="async" fetchpriority="low" loading="lazy" id="--img-44f295b7"/></figure><p>Text lines get too close for comfort. Characters are starting to get clipped. See the “g” descender in “Tangled” for example.</p><p>And if I force a 200% resize at <code>24px</code> this happens.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/tangled-24.png" alt="Tangled&#39;s news panel with 24px font size. Text is truncated and characters are heavily clipped." width="368" height="265" decoding="async" fetchpriority="low" loading="lazy" id="--img-9666af72"/></figure><p>Oh dear! Text that is <a href="https://www.w3.org/WAI/WCAG22/Techniques/failures/F69" rel="noopener noreferrer" target="_blank">“clipped, truncated or obscured”</a> is a failure.</p><p>Remember that the WCAG guidelines are a floor. Nothing can be perfectly accessible, but a <code>12px</code> font size and basic front-end failures are a concern. A proper audit would reveal other issues (e.g. with how media/container queries adapt to font size).</p><h2 id="expect-better">Expect better</h2><p>I’m not posting this to seek employment myself or to provide answers. I want to remind readers that accessibility concerns affect everyone. Serious projects should seek professional expertise. It’s disappointing to see yet another tech start-up fail the basics.</p><p>I’ll provide two suggestions for free though:</p><ol><li>Use relative units for font sizes</li><li>Use unit-less numbers for line height</li></ol><p><em>(Edit: see correction above, the fix is even easier.)</em></p><p>Frankly, what Tangled’s redesign suggests to me is that nobody involved with the process gave accessibility enough thought <del>(if any)</del> <em>(edit: that part was unfair, there was some effort but far from adequate testing)</em>. That may sound harsh but it’s usually the reality from my experience. Whatever the case, Tangled must do better in this area.</p><p>If I may answer a few predictable but hypothetical comments.</p><blockquote><p>This is just v1. Things will improve.</p></blockquote><p>I’m sure they will and maybe even pushed by my criticism. The struggle is that accessibility concerns must be integral to design from day one, not an afterthought to patch.</p><blockquote><p>It’s open source, where’s your merge request?</p></blockquote><p>Sorry, once a project crosses the line into venture capital “open source” takes on a different meaning. If people want to contribute that’s their prerogative. Personally, I’m not in the habit of giving away professional expertise for free to a for-profit business. Such expectations are especially a problem for accessibility specialists (of which I am not).</p><blockquote><p>Aha! What about this accessibility failure on your website?!</p></blockquote><p>That’s a bit embarrassing, but thanks for the heads-up!</p><p>It’s far easier to hire an accessibility expert before you ship but it’s never too late to retroactively make improvements. I’ve been making accessibility improvements on my own website for decades.</p><p>I like Tangled and I want to see it do well. Maybe someone will share a <a href="https://en.wikipedia.org/wiki/Milkshake_Duck" rel="noopener noreferrer" target="_blank">milkshake duck</a> or they donate to <a href="https://brennan.day/normalized-fascism-in-open-source-12-million-given-to-dhh/" rel="noopener noreferrer" target="_blank">fascist Linux</a> and I’ll eat my words. I really hope not! I hope Tangled improves so that those lingering in GitHub’s slop graveyard have fewer excuses to hang around.</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>
  <title>Danse Macabre</title>
  <description>My recent detour into Japanese detective fiction and the captivating mysteries of locked-room whodunits reminded me of popular BBC series Jonathan Creek. The show ran for three seasons between 1997–99. It returned with season 4 and 5 in 2003 and 2014 respectively. […]</description>
  <link>https://dbushell.com/2026/10/28/danse-macabre/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/28/danse-macabre/</guid>
  <pubDate>Wed, 28 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>My recent detour into <a href="https://dbushell.com/2026/09/28/shin-honkaku/">Japanese detective fiction</a> and the captivating mysteries of locked-room <em>whodunits</em> reminded me of popular BBC series <a href="https://www.imdb.com/title/tt0118363/" rel="noopener noreferrer" target="_blank">Jonathan Creek</a>. The show ran for three seasons between 1997–99. It returned with season 4 and 5 in 2003 and 2014 respectively. A few feature-length specials were scattered between seasons with a final one in 2016.</p><p>Fond memories led me to the only reasonable action: binge the entire lot in a fortnight.</p><p>The original 90’s episodes remain the best. They’re decidedly camper than I remember. Later seasons took a sombre tone and lost some of the charm. The theme tune is based on the violin riff in Camille Saint-Saëns’ <a href="https://www.youtube.com/watch?v=71fZhMXlGT4" rel="noopener noreferrer" target="_blank">Danse Macabre (YouTube)</a> — a certified banger from 1874. Hence the title of this post, and as it happens, my favourite Jonathan Creek episode.</p><p>Before that, there’s a moment in season one that I think explains <em>everything</em>.</p><h2 id="the-matchbox">The matchbox</h2><p>A matchbox magic trick is used to illustrate what makes for a good or bad illusion. I’m sure these were found in children’s magic sets in the ’90s. Kids today aren’t allowed to play with magic. Probably for the best.</p><figure-compare class="Figure">  <figure>    <img src="/images/blog/2026/danse-macabre-matchbox-1.avif" alt="Matchbox with a drawer full of matches pushed open on the left (held at a point of view angle)." width="1012" height="720"/>    <img src="/images/blog/2026/danse-macabre-matchbox-2.avif" alt="Matchbox with an empty drawer pushed open on the right." width="1012" height="720"/>  </figure></figure-compare><p>The trick — if my fancy image comparison web component (<a href="https://cloudfour.com/thinks/building-an-accessible-image-comparison-web-component/" rel="noopener noreferrer" target="_blank">original source</a>) doesn’t make it obvious — is that a full drawer of matches is pulled out the left-hand side, and then an empty drawer out the right. Ta-da! Where did the matches go?</p><details><summary>Expand for massive spoilers!</summary><p>The matches are still in the box, obviously. You really needed a spoiler?</p></details><p>But how do we know? If we give this far more thought than it’s worth, <em>deductive reasoning</em> tells us that it’s impossible for the matches to have left the box. Only the youngest of children are baffled by this trick. As Creek says:</p><blockquote><p>It can’t be baffling, there’s not enough scope for the imagination. There’s only one possible explanation: the matches stay in the box and the duplicate drawer comes out.</p><p><cite>Jonathan Creek (season 1 episode 3, 1997)</cite></p></blockquote><p>What if we add “scope for the imagination”? Suppose we perform this trick with more <em>razzle-dazzle</em>. Maybe we place the matchbox under a handkerchief and say a few magic words; make a few magic noises. Would the big reveal be more impressive?</p><p>No, probably not.</p><p><em>Inductive reasoning</em> now suggests the matches were <em>removed</em> from the box, because that’s the sort of thing magicians do. Audiences expect sleight of hand. This assumption, even if wrong, makes for an arguably less impressive trick.</p><p>With a gimmicked matchbox the problem space is too small and the variables are too narrow. Either solution is obvious; no imagination is necessary.</p><p>Does that mean <em>complexity</em> is what makes for a good puzzle or illusion?</p><p>Actually, no. I’d still argue the opposite. Complexity does expand room for imagination but that alone is not fun. Complexity compounds and quickly overwhelms the imagination.</p><p>Suppose you can make the matches vanish without an obvious gimmick? That would not only subvert expectations, it’d also present an impossibly simple problem space. Simplicity forces the imagination. Captures it even! Solving the “impossible” by discovering a hidden variable is far more rewarding than tediously unraveling a complex series of events. If the solution is never revealed then one is left forever baffled.</p><p>A matchbox is too small, but a classic locked-room mystery is the quintessential example of my hypothesis that simplicity is everything.</p><h2 id="spooky-skeleton">Spooky skeleton</h2><p>Season 2 episode 1 of Jonathan Creek — aka <a href="https://www.imdb.com/title/tt0616864/" rel="noopener noreferrer" target="_blank">Danse Macabre</a> — is the most satisfying, in my professional TV watching opinion. It’s a locked-room that defies logic. I’ll outline and discuss the events of the episode but spoilers are hidden. If available to you (hint: it’s probably on YouTube), watch the first half and see if you can solve it before reading on.</p><figure class="Figure Figure--max"><div class="Image"><img src="https://dbushell.com/images/blog/2026/danse-macabre-skeleton.avif" alt="Three frames from the Danse Macabre episode decribed below." width="3036" height="720" decoding="async" fetchpriority="low" loading="lazy" id="--img-049047fe"/></div></figure><p>The lead up to <em>Danse Macabre’s</em> locked-room mystery is as follows:</p><ol><li>Someone in a skeleton costume commits a murder</li><li>During the escape the skeleton knocks a women unconscious</li><li>A man witnesses this and guns are drawn in a standoff</li><li>The skeleton attempts to flee carrying the unconscious body</li><li>The skeleton is forced at gunpoint into the open garage</li><li>The skeleton places the body on the garage floor</li><li>The skeleton closes the garage door remaining inside</li><li>The witness stands guard waiting for the police</li><li>The police arrive and open the garage</li><li>Only the women is found inside</li></ol><p>We’ve just witnessed two people enter a “locked-room” and only one person leave. That’s impossible! Where on earth did the murderer go?</p><p>The problem space is narrowed by an investigation confirming that the floor is solid concrete, the walls impenetrable brick, and the roof equally impassible. The only entrance was watched the entire time and when opened there was nowhere inside for a person to hide.</p><p>The spooky skeleton alone makes this the best episode. It genuinely scared younger me when it first aired. That aside, the simplicity is genius. Reasoning leaves us stumped. The murderer surely could not have escaped? Could they?</p><p>Logic hits a dead end based on what we just saw. Our imagination is forced into a higher gear. Eventually, if we are to progress, we must think creatively.</p><p>Below are three hints that get progressively more spoilery (be warned!)</p><details><summary>Mild spoiler: hint one</summary><p>It seems impossible for anyone to have escaped the garage. We know that for a fact but accepting the truth doesn’t make sense. We stubbornly look for a solution that cannot exist. That line of thinking leads nowhere.</p></details><details><summary>Spicy spoiler: hint two</summary><p>If what we witnessed seems impossible, there are hidden variables at play we are missing. What is the one unequivocal fact we’ve identified? Nobody escaped the garage. For that to be true we must question a conflicting assumption.</p></details><details><summary>Massive spoiler: hint three</summary><p>For the fact to hold true, how many people must have entered the garage?</p></details><p>Did you figure it out? I won’t spoil the entire episode. You’ll have to watch it! That’s far more entertaining than reading my attempt to transcribe.</p><p>Jonathan Creek has several locked-room episodes but <em>Danse Macabre</em> is easily the most clever. Simplicity is key to its brilliance. The problem space is narrowed until it breaks our interpretation of events.</p><p>This theory of simplicity extends to puzzle games.</p><h2 id="key-is-push">Key is push</h2><p>When a game can hide a solution in a small and seemingly understood problem space, it’s highly satisfying to solve. If a game merely keeps adding new variables and extending the level size to increase complexity it becomes a tedious and less skilful affair.</p><p>The puzzle genre is littered with trash but an occasional gem shines through:</p><ul><li><a href="https://store.steampowered.com/app/499170/Order_of_the_Sinking_Star/" rel="noopener noreferrer" target="_blank">Order of the Sinking Star</a></li><li><a href="https://store.steampowered.com/app/353540/Stephens_Sausage_Roll/" rel="noopener noreferrer" target="_blank">Stephen’s Sausage Roll</a></li><li><a href="https://store.steampowered.com/app/257510/The_Talos_Principle/" rel="noopener noreferrer" target="_blank">The Talos Principle</a></li><li><a href="https://store.steampowered.com/app/1260520/Patricks_Parabox/" rel="noopener noreferrer" target="_blank">Patrick’s Parabox</a></li><li><a href="https://store.steampowered.com/app/736260/Baba_Is_You/" rel="noopener noreferrer" target="_blank">Baba is You</a></li><li><a href="https://store.steampowered.com/app/1137350/Filament/" rel="noopener noreferrer" target="_blank">Filament</a></li><li><a href="https://store.steampowered.com/app/400/Portal/" rel="noopener noreferrer" target="_blank">Portal</a></li></ul><p>These games all explore mechanics that mostly keep individual puzzles small but ramp up the challenge in other ways. The most memorable puzzles are the smallest ones. The purest distillation of the game design that still leaves the player baffled.</p><p><a href="https://store.steampowered.com/app/736260/Baba_Is_You/" rel="noopener noreferrer" target="_blank">Baba is You</a> is especially good at this. Two levels have stuck in my memory. If you manage to solve the level <a href="https://www.youtube.com/watch?v=uYH3qXWMD1U" rel="noopener noreferrer" target="_blank">“Floaty Platforms”</a> you’re hit with a bonus: <a href="https://www.youtube.com/watch?v=d-ZFc92B_dQ" rel="noopener noreferrer" target="_blank">“Floatiest Platforms”</a> (warning: YouTube solutions linked).</p><figure-compare class="Figure">  <figure>    <img src="/images/blog/2026/danse-macabre-floaty-platforms.avif" alt="Baba is you &#39;Floaty Platforms&#39; level." width="900" height="638"/>    <img src="/images/blog/2026/danse-macabre-floatiest-platforms.avif" alt="Baba is you &#39;Floatiest Platforms&#39; level." width="900" height="638"/>  </figure></figure-compare><p>You must play this game to appreciate how it works but at least you can see the two levels start almost identical. There are two differences:</p><ol><li>A single rule has been narrowed; <em>“Key and Door is Push”</em> is now <em>“Key is Push”</em>.</li><li>The layout of the level has been boxed-in tighter.</li></ol><p>The second difference was optional. It doesn’t affect the solution, rather it’s a sly visual metaphor for the narrowing of the rule. (Baba enjoyers may note the layout change does present a bit of a red herring, but that’s not worth getting into.)</p><p>What was already a tricky puzzle just got trickier. As a player our brain is primed with the previous solution. We naturally explore the same avenues only to get stuck. Like the <em>Danse Macabre</em> locked-room, our preconceived notions foil us here. Unlike <em>Danse Macabre</em>, we can’t just question what we know, we have to clear it from our mind entirely. The solution to <em>Floatiest Platforms</em> is entirely different than <em>Floaty Platforms</em>.</p><p>Most level-based puzzle games, notably found atop mobile app stores, start small but quickly escalate in size. The core mechanics don’t allow ingenuity, so complexity is the only difficulty adjustment. At some point these games become a chore. Harder levels have too many permutations to track leaving only guesswork and luck as a guide.</p><p><a href="https://store.steampowered.com/app/1137350/Filament/" rel="noopener noreferrer" target="_blank">Filament</a> is a bit of a hidden gem in this genre. Each area has a set of simple rules you’re shown before being presented with scenarios to test your understanding. The game has a real knack for punishing assumptions. Several times I got stuck because I imposed rules that didn’t exist. For a game to achieve this fairly without cheap tricks is an impressive feat.</p><h2 id="exceptions">Exceptions</h2><p>There are of course exceptions to the rule of simplicity.</p><p>Complexity doesn’t always mean quantity over quality. Two notable puzzle games that come to mind are <a href="https://store.steampowered.com/app/653530/Return_of_the_Obra_Dinn/" rel="noopener noreferrer" target="_blank">Return of The Obra Dinn</a> and <a href="https://store.steampowered.com/app/1569580/Blue_Prince/" rel="noopener noreferrer" target="_blank">Blue Prince</a>. Pen and paper and many hours are necessary to reach a conclusion to those mysteries. These games work because progress is clearly defined. Although the player is required to recall a lot of information, they’re not memorising meaninglessly complex level design that serves no other purpose than being difficult to remember.</p><p>Plenty of stories in books and film offer a sprawling, mind-bending mystery. Time travel movies lend themselves to this category. <a href="https://www.imdb.com/title/tt0482571/" rel="noopener noreferrer" target="_blank">The Prestige</a>, <a href="https://www.imdb.com/title/tt2397535/" rel="noopener noreferrer" target="_blank">Predestination</a>, and <a href="https://www.imdb.com/title/tt0390384/" rel="noopener noreferrer" target="_blank">Primer</a> can all be seen as complex who-or-how-dunit mysteries. In these cases we can sit back and enjoy being confused, knowing that we’re not meant to understand until the end (or ever).</p><p>For me though, nothing beats the elegance of a simple puzzle or illusion. Make the matches vanish without any hint of misdirection and I’ll be astounded.</p><hr/><p>This being the spookiest month and all, I have a book recommendation for you: <a href="https://www.goodreads.com/book/show/58922411-death-among-the-undead" rel="noopener noreferrer" target="_blank">Death Among the Undead (2017)</a> by Masahiro Imamura. It’s of the <a href="https://dbushell.com/2026/09/28/shin-honkaku/">shin honkaku</a> genre which I am still obsessed with. Think murder/detective mystery, with zombies.</p><p><small>If you’d like to learn about how these ideas apply to B2B marketing, follow me on LinkedIn. If you solved <em>Danse Macabre</em> immediately and think I’m dumb leave a smarmy comment.</small></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>
  <title>How not to migrate from Cloudflare DNS</title>
  <description>So you’ve been shamefully using US Big Tech giant Clownflare for DNS? It’s time to find an inopportune time to migrate away to a “European alternative” . You absolute must not follow these steps on a busy weekend when you must leave for hours on short notice. […]</description>
  <link>https://dbushell.com/2026/10/20/how-not-to-migrate-from-cloudflare-dns/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/20/how-not-to-migrate-from-cloudflare-dns/</guid>
  <pubDate>Tue, 20 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>So you’ve been shamefully using <em>US Big Tech</em> giant Clownflare for DNS? It’s time to find an inopportune time to migrate away to a <smart-arse>“European alternative”</smart-arse>. You absolute must not follow these steps on a busy weekend when you must leave for hours on short notice.</p><h2 id="just-remove-it">Just remove it</h2><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-remove-domain.avif" alt="Remove from Cloudflare context menu item." width="277" height="60" decoding="async" fetchpriority="low" loading="lazy" id="--img-84db2b50"/></figure><p><strong>Step 1:</strong> Just remove your domain name from Cloudflare.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-remote-confirm.avif" alt="Footer of the confirmation modal with a field labelled &#39;Type in dbushell.com to confirm&#39; followed by a &#39;Cancel&#39; and &#39;Confirm&#39; button." width="680" height="210" decoding="async" fetchpriority="low" loading="lazy" id="--img-f8330392"/></figure><p><strong>Step 2:</strong> When the “are you sure?” modal pops up you’re forced to type the domain name. How patronising! Show them who’s boss by copy and pasting the domain name from the field label. Don’t fire a single neuron to consider which domain you’re deleting.</p><p>Congratulations, you’re off Clownflare!</p><h2 id="backup-nothing">Backup nothing</h2><p>It’s probably too late to backup nothing so make sure you’ve already done this step.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-dns-menubar.avif" alt="DNS record page menubar with buttons for &#39;Import&#39;, &#39;Export&#39;, and &#39;Add record&#39;." width="334" height="58" decoding="async" fetchpriority="low" loading="lazy" id="--img-939d5e0f"/></figure><p><strong>Step -1:</strong> Don’t visit the DNS records page for your domain name. Navigating around Cloudflare is too hard after their latest UI shuffle. It remains a mystery whether that “Export” button allows you to backup records in the industry standard BIND zone file format. Unlikely.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-bunny-add-domain.avif" alt="Bunny.net&#39;s &#39;Add DNS zone&#39; form with &#39;dbushell.com&#39; typed into the domain name field." width="422" height="200" decoding="async" fetchpriority="low" loading="lazy" id="--img-5a8010fc"/></figure><p><strong>Step 0:</strong> It’s imperative that you don’t even consider first adding the DNS records to your new service provider. Why would you do that?</p><h2 id="wait-for-alerts">Wait for alerts</h2><p>You’ve already saved precious minutes by ignoring <glossary-term id="--term-best-practice"><a href="https://en.wikipedia.org/wiki/Best_practice#Critique" rel="noopener noreferrer" target="_blank">best practices</a></glossary-term>. Now you’re ready to exploit the system further. DNS providers <em>hate</em> this one trick!</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-proton-issue.avif" alt="Proton: DNS issues detected. We detected the following issues for your custom domain dbushell.com: [ERROR] Your DKIM record is invalid. If not fixed, we will stop signing your emails with DKIM soon." width="582" height="310" decoding="async" fetchpriority="low" loading="lazy" id="--img-b7053de1"/></figure><p><strong>Step 3:</strong> Some hours or days later you’ll be informed about a missing DNS record. Go ahead and fix that at your leisure. If you can’t remember a record and don’t get a warning, it probably wasn’t all that important anyway.</p><h2 id="bonus-step">Bonus step</h2><p>The final step can take “up to 48 hours” so there’s no rush.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/cf-porkbun-nameservers.avif" alt="Porkbun DNS and nameserver management UI." width="250" height="200" decoding="async" fetchpriority="low" loading="lazy" id="--img-b384e968"/></figure><p><strong>Step ?:</strong> Sign in to your favourite meat-themed domain registrar<sup>†</sup> and edit the authoritative nameservers for your domain name. Clicking one of two pixels will open a dialog with a single textarea. Try comma-separated values and if that fails use a new line.</p><h2 id="document-nothing">Document nothing</h2><p>You’ve already migrated from Clownflare, what’s the point of taking notes now? It was easy! Go make a smug skeet on Bluesky, you’ve earned it — <em>oh shit your atproto handle is failing DNS verification…</em></p><hr/><p><small><sup>†</sup> Why does every registrar have UI like it was designed 20 years ago? Can anyone suggest a good European registrar that has 2FA and reasonable prices? Thanks!</small></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>
  <title>Cloudflare killed Deno and look I’m on TV!</title>
  <description>““Didn’t you already say goodbye to Deno? Get new material!””I know, I know, but not even a week after declaring my friendship over with Deno they actually killed Deno! The runtime is going away, and sorry call me pessimistic, but I highly doubt a community fork of any value will survive for long. […]</description>
  <link>https://dbushell.com/2026/10/16/cloudflare-killed-deno/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/16/cloudflare-killed-deno/</guid>
  <pubDate>Fri, 16 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<blockquote><p>“Didn’t you already say goodbye to Deno? Get new material!”</p></blockquote><p>I know, I know, but not even a week after declaring my <a href="https://dbushell.com/2026/10/03/deno-to-node/">friendship over with Deno</a> they actually <a href="https://dbushell.com/notes/2026-10-10T10:30Z/">killed Deno!</a> The runtime is going away, and sorry call me pessimistic, but I highly doubt a community fork of any value will survive for long.</p><blockquote><p>We will support the Deno runtime for another year with monthly releases containing bug fixes and security updates. After that year we will end our development of the Deno runtime.</p><p><cite><a href="https://deno.com/blog/cloudflare" rel="noopener noreferrer" target="_blank">Deno is joining Cloudflare</a> - Ryan Dahl</cite></p></blockquote><p>There’s even a <em>Fireship</em> video on YouTube! Guess who gets a namecheck? I’m not going to risk embedding Google cookies so here’s a link: <a href="https://www.youtube.com/watch?v=l3L_lETiSzc" rel="noopener noreferrer" target="_blank">“The runtime wars are over… and Node won” (YouTube)</a>. I also found my way into the lead story of <a href="https://javascriptweekly.com/issues/806" rel="noopener noreferrer" target="_blank">JavaScript Weekly</a>.</p><p>It’s sad but telling that negative opinions and news around Deno has received the most attention. I have nothing new to say (until my Cloudflare exposé) but I do want to look back on my journey with Deno.</p><h2 id="hatorade">Hatorade</h2><p>People who’ve only read my recent posts on Deno assume I was just a hater. Far from the case! I was all-in on Deno and wanted it to succeed. While it’s true that my disdain for what the tech industry has become leaked into my criticism, I’d say it was fair and accurate.</p><p>The Deno runtime was truly ahead of it’s time. It felt like using Node from the future (now Node today). The runtime was forgotten in favour of whatever tech start-ups do. My doubts grew by mid-2024 but I regained brief optimism with the Deno 2.0 relaunch.</p><p>I didn’t realise I’d written this many posts:</p><ul><li><a href="https://dbushell.com/2021/03/12/built-with-deno/">Built with Deno (Mar 2021)</a></li><li><a href="https://dbushell.com/2021/07/22/netlify-deno-builds/">Deno Builds on Netlify (Jul 2021)</a></li><li><a href="https://dbushell.com/2024/02/16/jsr-first-impression/">JSR: First Impressions (Feb 2024)</a></li><li><a href="https://dbushell.com/2024/03/04/jsr-second-look/">JSR: Second Look (Mar 2024)</a></li><li><a href="https://dbushell.com/2024/08/05/the-deno-package-paradox/">The Deno Package Paradox (Aug 2024)</a></li><li><a href="https://dbushell.com/2024/08/09/jsr-and-deno-final-review/">JSR and Deno: Final Review (Aug 2024)</a></li><li><a href="https://dbushell.com/2024/10/10/deno-2/">Hey! Deno 2 looks fun! (Oct 2024)</a></li><li><a href="https://dbushell.com/2025/04/28/denos-decline/">Deno’s Decline (6 Regions and Falling) (Apr 2025)</a></li><li><a href="https://dbushell.com/2025/06/23/jsr-and-deno-one-year-later-malware/">JSR &amp; Deno One Year Later - Malware?! (Jun 2025)</a></li><li><a href="https://dbushell.com/2025/06/20/deno-kv-to-sqlite/">Ditching Deno KV (Jun 2025)</a></li><li><a href="https://dbushell.com/2026/03/20/denos-decline-and-layoffs/">404 Deno CEO not found (Mar 2026)</a></li><li><a href="https://dbushell.com/2026/03/20/denos-decline-and-layoffs/">Friendship ended with Deno, now Node is my best friend (Oct 2026)</a></li></ul><p>You may have noticed my interest in <del>Bun</del> in my earlier writing. That was before I learned it was not a serious project. We don’t use vibe-coded <a href="https://dbushell.com/notes/2025-09-10T12:08Z/">fash-tech</a>  in my house.</p><h2 id="deno-projects">Deno projects</h2><p>Deno was my platform for fun side projects (and <a href="https://dbushell.com/2025/12/12/advent-of-code-2025/">Advent of Code</a>). I experimented with many silly ideas. A few turned into something practical that I still use today.</p><ul><li><a href="https://dbushell.com/2022/10/14/deno-usb-hid-stream-deck/">Deno Stream Deck (Oct 2022)</a><br/>  <small>The one where I used Deno’s foreign function interface to manage a USB peripheral.</small></li><li><a href="https://dbushell.com/2023/06/26/sveltekit-oauth-deno-deploy/">SvelteKit and Deno with OAuth and Deploy (Jun 2023)</a><br/>  <small>The one where I built and maintained a Deno Deploy SvelteKit adapter.</small></li><li><a href="https://dbushell.com/2023/10/27/deno-tail-lines-2/">Get in Line, Deno! (Oct 2023)</a><br/>  <small>The one where I used Deno’s streaming APIs to efficiently seek lines.</small></li><li><a href="https://dbushell.com/2024/07/25/git-granary/">Git Granary (Jul 2024)</a><br/>  <small>The one where I built a git large file storage server that I still use today.</small></li><li><a href="https://dbushell.com/2024/10/22/http-tunnel-proxy/">HTTP Tunnel and Proxy in JavaScript (Oct 2024)</a><br/>  <small>The one where I piped two streams together to create a simple HTTP proxy.</small></li><li><a href="https://dbushell.com/2025/09/05/typescript-email-smtp-server/">I Let The Emails In (Sept 2025)</a><br/>  <small>The one where I wrote a bare bones SMTP server with Deno.</small></li></ul><p>The SMTP adventure was a disaster, but technically it worked! My private git LFS server has been rock solid. I actually found a use case for the HTTP proxy (blog post to come).</p><p>For reasons (sigh), I’m losing interest in publishing open source code and writing tutorials. My self-hosted journey has stalled because I can’t afford anything anymore. Tech sucks now. But I’m finding enjoyment in fighting for an open web (for humans). I’m having fun too blogging more <a href="https://dbushell.com/2026/09/28/shin-honkaku/">non-technical topics</a> and getting back into design.</p><p>I am no longer a JavaScript bro and that’s probably a good thing!</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>
  <title>D-Bus Hell</title>
  <description>The time has come to address the elephant in the comments. Whenever my blog hits a place with a comments section the most predictable comment I see — besides some variation of “this idiot is utterly delusional!”† — is this one: “lol I read the domain as “D-Bus Hell” Random commenter”I’d prefer if […]</description>
  <link>https://dbushell.com/2026/10/11/d-bus-hell/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/11/d-bus-hell/</guid>
  <pubDate>Sun, 11 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>The time has come to address the elephant in the comments.</p><p>Whenever my blog hits a place with a comments section the most predictable comment I see — besides some variation of <em>“this idiot is utterly delusional!”</em><sup>†</sup> — is this one:</p><blockquote><p>lol I read the domain as “D-Bus Hell”</p><p><cite>Random commenter</cite></p></blockquote><p>I’d prefer if they focused on my actual blog content but I can’t get annoyed at people for seeing the wrong words. There’s a reason <code>experts-exchange.com</code> has a hyphen, and who can forget <a href="https://www.bbc.co.uk/bbcthree/article/cbd0fd47-3f92-494e-8154-da08a565498e" rel="noopener noreferrer" target="_blank">Susan’s party?</a> I’d probably read “D-Bus Hell” myself, if I forgot my own name.</p><p><small><sup>†</sup> <a href="https://drewdevault.com/blog/Why-is-HN-like-that/" rel="noopener noreferrer" target="_blank">Why is Hacker News like that?</a></small></p><p>But for the sake of the record I would like to point you to your nearest WHOIS tool:</p><pre data-lang="sh" tabindex="0" translate="no" id="pre-c019761d"><code><span class="line"><span class="syntax-c01639ae">$</span><span class="space"> </span><span class="syntax-e661ac3e">whois</span><span class="space"> </span><span class="syntax-e661ac3e">dbushell.com</span></span>
<span class="line"></span>
<span class="line"><span class="syntax-c01639ae">Domain</span><span class="space"> </span><span class="syntax-e661ac3e">Name:</span><span class="space"> </span><span class="syntax-e661ac3e">DBUSHELL.COM</span></span>
<span class="line"><span class="syntax-c01639ae">Creation</span><span class="space"> </span><span class="syntax-e661ac3e">Date:</span><span class="space"> </span><span class="syntax-e661ac3e">2004-05-14T22:51:48Z</span></span></code></pre><p>Don’t ask me what I was doing at ten minutes to midnight registering a domain name. Is there a more appropriate time? The significant point is the date: May 2004.</p><p>That was 22 years ago.</p><p>Now if I may direct your attention to the <a href="https://en.wikipedia.org/wiki/D-Bus" rel="noopener noreferrer" target="_blank">D-Bus project Wikipedia page</a>:</p><blockquote><p>Release November 2006; 19 years ago</p><p><cite><a href="https://en.wikipedia.org/wiki/D-Bus#:~:text=November%C2%A02006%3B%2019%C2%A0years%20ago" rel="noopener noreferrer" target="_blank">D-Bus</a> - Wikipedia</cite></p></blockquote><p>I rest my case.</p><p>The D-Bus project doesn’t even have it’s own domain name, for crying out loud!</p><p>So next time you see a post about D-Bus, maybe drop a comment saying: “reminds me of that dummy with a blog and a giant logo spelling out his full name!” Or something to that effect. (I’m joking, don’t do that.)</p><h2 id="whats-in-a-name">What’s in a name</h2><p>To date I’ve resisted the siren call of <a href="https://en.wikipedia.org/wiki/Nominative_determinism" rel="noopener noreferrer" target="_blank">nominative determinism</a> so I can’t answer to whether D-Bus is actually hell or not. I considered writing a D-Bus review as a joke, but then I decided to watch paint dry. I’ve never heard Linux nerds express any strong opinions on the topic (for which they’re prone to do; see Systemd, Wayland, etc.)</p><p>I did go down the Wikipedia rabbit hole of cognitive psychology and linguistics. There’s an interesting read on <a href="https://en.wikipedia.org/wiki/Rebracketing" rel="noopener noreferrer" target="_blank">Rebracketing</a> where a word like <em>“Hamburger”</em> becomes <em>“ham + burger”</em> which was altered from the origin: <em>“Hamburg + er”</em>. This is a form of <a href="https://en.wikipedia.org/wiki/Folk_etymology" rel="noopener noreferrer" target="_blank">Folk etymology</a> where words can change due to unfamiliarity.</p><h3 id="etymology">Etymology</h3><p>My surname could simply come from “bushel”. An imperial unit of volume still favoured by fantasy novels, before the Trollocs attack and shit gets real. “Bushel” dates back to Middle English with origins in the Old French word “boissel”.</p><p>At the risk of being part French, I’m inclined to believe an alternate theory that my name derives from <a href="https://en.wikipedia.org/wiki/Bossall" rel="noopener noreferrer" target="_blank">“Bossall”</a> a hamlet in North Yorkshire. But that would make me part Yorkshireman. I’m not sure which is worse.</p><p>It’s not a very common surname. If this <a href="https://en.geneanet.org/surnames/BUSHELL" rel="noopener noreferrer" target="_blank">Geneanet heat map</a> has any credibility, the name favours the south of England. That might support the French theory? Liverpool has the highest number of Bushells though.</p><p><a href="https://en.wikipedia.org/wiki/Bushells" rel="noopener noreferrer" target="_blank">Bushells</a> is also an Australian brand of tea founded by tea dealer Alfred Bushell in 1883. Alfred was born in Worcestershire, England (pronounced: <em>Wrcstrshr</em>).</p><p>Interestingly, Wikipedia notes:</p><blockquote><p>After the Norman conquest of England; the Domesday Book noted in 1086 that in seven of the twelve hundreds covering Worcestershire, the Crown had no authority.</p><p><cite><a href="https://en.wikipedia.org/wiki/Worcestershire" rel="noopener noreferrer" target="_blank">Worcestershire</a> - Wikipedia</cite></p></blockquote><p>The <a href="https://en.wikipedia.org/wiki/Domesday_Book" rel="noopener noreferrer" target="_blank">Domesday Book</a> always references Bossall (the Yorkshire hamlet) as <a href="https://en.wikipedia.org/wiki/Bossall#:~:text=The%20community%20is%20mentioned%20in%20the%20Domesday%20Book%20as%20Boscele%20and%20as%20Bosciale" rel="noopener noreferrer" target="_blank">Boscele or Bosciale</a>;  names that are Anglo Saxon in origin.</p><p>When I say “Bushell” over the phone my pronunciation is often mistaken for saying “Buchel”. Some sources say they’re from the same Anglo Saxon origin. These distribution maps for <a href="https://forebears.io/surnames/bushell" rel="noopener noreferrer" target="_blank">Bushell</a> and <a href="https://forebears.io/surnames/buchel" rel="noopener noreferrer" target="_blank">Buchel</a> cast doubt on that idea (if Forebears data is accurate). “Büchel” also has different origins if you stick an umlaut on it.</p><p>I suspect I’m dealing with multiple different names of Anglo Saxon and Norman origin. There are many spelling variations of “Bushell” and similar names in historic records (though few have survived). Most people were illiterate until recent decades so spelling variations are not surprising. It seems probable to me that whenever families adopted a spelling, a variation from the wrong lineage could’ve been written due to phonetic differences. Even if I traced my ancestry back hundreds of years, I’d likely reach a moment when a scribe wrote “Bushell” in some form and my ancestor just shrugged because he couldn’t read.</p><p>The etymology of <a href="https://en.wikipedia.org/wiki/David_%28name%29" rel="noopener noreferrer" target="_blank">“David”</a> is well known despite being much older. Its roots are Hebrew meaning “beloved” and has found its way across Judaism, Christianity, and Islam.</p><p>D-Bus is “Desktop Bus” if you were too lazy to click the link.</p><h2 id="whats-in-a-domain-name">What’s in a domain name</h2><p>Domain names are a strange system. They’re temporary URIs that are leased and inevitably lost. I’ve spent half my life publishing content on <code>dbushell.com</code>. I started using it seriously once I had a design portfolio. If you’re curious you can see past versions at:</p><p><a href="https://legacy.dbushell.com/" rel="noopener noreferrer" target="_blank">legacy.dbushell.com</a></p><p>In hindsight if I knew I was going to build a career around my website I’d have chosen something more memorable. Imagine all the common words that were still untouched in 2004? <code>dave.co.uk</code> wasn’t taken until 2005! I don’t actually go by “Dave” myself but like the “D-Bus” thing it’s not my choice to make.</p><p>For a brief moment I did consider moving to another domain. I would have had to maintain redirects forever. It’s not a sensible “SEO” manoeuvre either, if that matters anymore…</p><p>Now that I’m running my business from <a href="https://valleyfold.co.uk/" rel="noopener noreferrer" target="_blank">valleyfold.co.uk</a> I’m happy I stuck with <code>dbushell.com</code> for my personal space.</p><p>Anyway, next time you spot the “D-Bus” comment please direct them there!</p><p>Better yet, take up this blog challenge: write about the etymology behind your name and domain name.</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>
  <title>A sustainable web career, for when all this blows over</title>
  <description>For better or worse the web industry is going through a bit of a phase. The reasons are largely irrational. People still need the web, nothing has changed there. Regardless, the financials of this business are a struggle. Longterm career prospects are looking dicey. […]</description>
  <link>https://dbushell.com/2026/10/07/sustainable-web-career/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/07/sustainable-web-career/</guid>
  <pubDate>Wed, 07 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>For better or worse the web industry is going through a bit of a phase. The reasons are largely irrational. People still need the web, nothing has changed there. Regardless, the financials of this business are a struggle. Longterm career prospects are looking dicey.</p><p>Because I <a href="https://dbushell.com/ai/">openly reject</a> the driving force intent on destroying my profession, and ruffle a few feathers doing so, I often get asked privately for advice from like-minded peers. I can only offer an uninspired but sensible reply: don’t quit a paying job without a fallback. <a href="https://en.wikipedia.org/wiki/Shaun_of_the_Dead" rel="noopener noreferrer" target="_blank">Go to the Winchester,</a> have a nice cold pint, and wait for all of this to blow over.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/shaun-of-the-dead.avif" alt="Characters from Shaun of the Dead (2004) enjoying drinks in the Winchester pub. Simon Pegg&#39;s character is holding a pint in a cheers pose and is winking at the camera." width="960" height="402" decoding="async" fetchpriority="low" loading="lazy" id="--img-6c9d868f"/></figure><p>I’m confident the situation will improve. Before it does, what can we focus on to <em>accelerate</em> past the intellectual slump, and better position ourselves once things calm down?</p><h2 id="whats-in">What’s in</h2><p>For a sustainable web career, where better to look than critical skills in desperately short supply? My focus is on front-end development, but these areas of knowledge are relevant to anyone in the business of making websites.</p><h3 id="accessibility">Accessibility</h3><p>Accessibility has always been a foundation of web development but it’s never been more critical for everyone to champion it. Understand why accessibility is for everyone. Learn how to talk about accessibility in respect to real needs and practical implementation.</p><p>Accessibility has unfortunately become a virtue signal for certain tech groups. (I’m told <em>LinkedIn</em> is rife with misinformation.) Accessibility is not a feature that can be tacked on to a website like garnish. Accessibility issues can’t be fixed with an automated process at the end. Web professionals must be able to counter this mindset by respecting accessibility in all decisions from day one.</p><p>Learn and adopt <a href="https://www.w3.org/WAI/standards-guidelines/wcag/" rel="noopener noreferrer" target="_blank">the guidelines</a> as your baseline. Speak to and test with real people. Defer to specialists who are eager for you to understand the realities.</p><h3 id="css-in-stylesheets">CSS (in stylesheets)</h3><p>CSS is the most vibrant and evolving of the front-end standards. To architecture a good stylesheet takes deep understanding of the language features. Newer features like <glossary-term id="--term-cascade-layer"><a href="https://css-tricks.com/css-cascade-layers/" rel="noopener noreferrer" target="_blank">cascade layers</a></glossary-term> and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:where" rel="noopener noreferrer" target="_blank">selectors that reduce specificity</a> make this much easier.</p><p>CSS has always been equipped to handle well organised styles, but developers who refuse to learn and respect the language have sought to push complexity elsewhere, using simplified abstractions or “CSS-in-JS” solutions. These are inherently limiting, lead to poor performance, and don’t actually solve the problems they claim.</p><p><a href="https://dbushell.com/2026/06/19/css-methodology/">CSS should be hard</a> and learning it will give you the ability to express creativity beyond cookie cutter web design. CSS skills will be highly desirable as more websites wish to stand out against the convergence of a generated aesthetic.</p><h3 id="communication-skills">Communication skills</h3><p>Communication is a “soft skill” in short supply (for obvious reasons). It’s a great skill if you wish to stand out as an expert, or simply be heard amongst the noise. Learn brevity and focus on important points. Don’t be afraid to ask questions.</p><p>Address concerns tactfully and early before they escalate. Don’t point fingers, but “cover your ass” — everyone on a project should be working towards the same goal, but some may be misguided in their approach. Remain positive and don’t meet negativity head-on.</p><p>If you can communicate well you’ll be highly respected in your role.</p><h3 id="rejecting-fascism">Rejecting fascism</h3><p>You probably weren’t expecting this one, but here we are.</p><p>The luxury of not “getting political” has abated. Far-right political ideology is on the rise and dormant hatred is waking up in tech. The epicentre of fash-tech is Musk’s “X” with people like <a href="https://brennan.day/normalized-fascism-in-open-source-12-million-given-to-dhh/#dhh" rel="noopener noreferrer" target="_blank">David Heinemeier Hansson spewing racism</a> and <a href="https://jardo.dev/what-about-rails" rel="noopener noreferrer" target="_blank">abusing authority in communities</a> to push an agenda, and <a href="https://xxcancel.com/rauchg/status/1972669025525158031?lang=en" rel="noopener noreferrer" target="_blank">Guillermo Rauch taking a selfie with a war criminal</a>. Large tech giants like <a href="https://tante.cc/2026/09/11/power-grab/" rel="noopener noreferrer" target="_blank">Digital Ocean are funding this power grab</a>. Be wary of those denying this threat.</p><p>If you want to avoid being pushed away from this industry, recognise and reject fascism before it comes for you. Don’t stay silent.</p><h2 id="whats-out">What’s out</h2><p>I’ve covered topics that’ll see us well for the future, but what should we forget?</p><h3 id="react">React</h3><p><a href="https://jsx.lol/" rel="noopener noreferrer" target="_blank">Facebook’s experiment</a> turned cargo cult is a legacy framework that still lingers, but there’s no reason to learn it today. React has entrenched itself as a <em>lingua franca</em> of code extruders. React code is generated faster than any human can possibly read it. Suffice it to say that despite stale job vacancies still demanding experience, React is not worth investing time. The days of high-paying React development are numbered.</p><h3 id="github">GitHub</h3><p><a href="https://dbushell.com/2026/04/29/github-is-sinking/">GitHub is now a liability.</a> For private repositories use self-hosted git forges. I’d recommend <a href="https://forgejo.org/" rel="noopener noreferrer" target="_blank">Forgejo</a>. One of the many <a href="https://tailscale.com/compare" rel="noopener noreferrer" target="_blank">Tailscale-like services</a> is an easy way to gate remote access. Don’t make stuff public for the dead internet to attack! For CI/CD go local too, or use independent services not tied to tech giants. Take the time to learn basic <code>git</code> commands. A little technical and infrastructure knowledge goes a long way.</p><h3 id="influencers">Influencers</h3><p>These people are handsome, charismatic, highly personable. I’m talking about: developer relations, youtubers, start-up founders, etc. When the tech industry met us halfway, influencers were entertaining and a good chinwag at after parties. Now the game has changed and we should not allow false narratives to dominate and dictate a closed-web future. Normal people still use the web. Incredibly few can afford to pay for the novelties that influencers peddle. Their attention economy is no longer our concern.</p><hr/><p>So that’s my focus for a sustainable web career, when all this blows over.</p><p>Remember that above all else: the web is a human creation for human needs. Those needs are not going anywhere. Drop the dead weight accumulated in times of prosperity. Go back to basics and position yourself well for when professional demand returns.</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>
  <title>Friendship ended with Deno, now Node is my best friend</title>
  <description>It’s finally time I go crawling back to Node! I’ve been using Node heavily this month on a SvelteKit client project. When did Node get so good‽ Deno has been my go-to runtime for so long I forgot how to Node. Now I’m back, I find all the ECMAScript† sugar is supported and the old annoying APIs have […]</description>
  <link>https://dbushell.com/2026/10/03/deno-to-node/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/10/03/deno-to-node/</guid>
  <pubDate>Sat, 03 Oct 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>It’s finally time I go crawling back to <a href="https://nodejs.org/" rel="noopener noreferrer" target="_blank">Node!</a></p><p>I’ve been using Node heavily this month on a <a href="https://svelte.dev/" rel="noopener noreferrer" target="_blank">SvelteKit</a> client project. When did Node get so good‽ Deno has been my go-to runtime for so long I forgot how to Node. Now I’m back, I find all the ECMAScript<sup>†</sup> sugar is supported and the old annoying APIs have been replaced or modernised. Most importantly, I never have to see <code>require()</code>.</p><p><small><sup>†</sup> Doesn’t seem like that <a href="https://javascript.tm/" rel="noopener noreferrer" target="_blank">Oracle trademark dispute</a> will see a positive end :(</small></p><h2 id="package-management">Package management</h2><p>The <a href="https://nodejs.org/en/download" rel="noopener noreferrer" target="_blank">official Node docs</a> recommend piping an internet script straight to bash (we never learn) to install <a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer" target="_blank">NVM</a> to manage Node &amp; NPM. My (ancient) experience with NVM and NPM hasn’t been stellar. I heard <a href="https://github.com/schniz/fnm" rel="noopener noreferrer" target="_blank">Fast Node Manager (FNM)</a> was better to switch Node versions. Obviously I roll bleeding-edge but I have client projects that demand stability.</p><p>I opted for <a href="https://pnpm.io/" rel="noopener noreferrer" target="_blank">PNPM</a> too to avoid getting <em>immediately</em> pwned. (The “M” in NPM stands for “malware.”) Some scripts I use have hard-coded binary names<sup>‡</sup>, so I added two aliases:</p><pre data-lang="sh" tabindex="0" translate="no" id="pre-b2794b1d"><code><span class="line"><span class="syntax-1656d967">alias</span><span class="space"> </span><span class="syntax-765b360f">npm</span><span class="syntax-1656d967">=</span><span class="syntax-26f6a8db">pnpm</span></span>
<span class="line"><span class="syntax-1656d967">alias</span><span class="space"> </span><span class="syntax-765b360f">npx</span><span class="syntax-1656d967">=</span><span class="syntax-26f6a8db">pnpx</span></span></code></pre><p>Maybe that’s a crime but so far it’s worked flawlessly.</p><p><small><sup>‡</sup> Edit: I might be confusing the time I symlinked various binaries. The aliases do help when copying steps from install guides that assume NPM is installed.</small></p><p>PNPM also blocks post-install scripts. Does NPM still yolo those?</p><p>I added additional settings to <code>pnpm-workspace.yaml</code> to delay malware updates.</p><pre data-lang="yaml" tabindex="0" translate="no" id="pre-4b50abb9"><code><span class="line"><span class="syntax-3eeadcf9">minimumReleaseAge</span><span class="syntax-1656d967">:</span><span class="space"> </span><span class="syntax-765b360f">1440</span></span>
<span class="line"><span class="syntax-3eeadcf9">trustPolicy</span><span class="syntax-1656d967">:</span><span class="space"> </span><span class="syntax-e661ac3e">no-downgrade</span></span></code></pre><p>At first I tried setting the minimum release age to “one month” because it takes Microsoft at least that long to remove reported malware. This caused dependency issues where PNPM struggled to match suitable versions. I settled for “one day”; long enough to allow some other sucker to beta test the next Shai‑Hulud.</p><h2 id="typescript">TypeScript</h2><p>Node can now run TypeScript without throwing a tantrum like a baby if the stars don’t align. That said, one does not simply publish TypeScript packages to NPM.</p><pre data-lang="text" tabindex="0" translate="no" id="pre-4ab27397"><code><span class="line"><span>error:</span><span class="space"> </span><span>[ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING]:</span></span>
<span class="line"><span>Stripping</span><span class="space"> </span><span>types</span><span class="space"> </span><span>is</span><span class="space"> </span><span>currently</span><span class="space"> </span><span>unsupported</span><span class="space"> </span><span>for</span><span class="space"> </span><span>files</span><span class="space"> </span><span>under</span><span class="space"> </span><span>node_modules</span></span></code></pre><p>Why? Just strip the types bro, I know you can! Let me sign a deal with the devil!</p><blockquote><p>To discourage package authors from publishing packages written in TypeScript, Node.js refuses to handle TypeScript files inside folders under a <code>node_modules</code> path.</p><p><cite><a href="https://nodejs.org/docs/latest-v26.x/api/typescript.html#type-stripping-in-dependencies" rel="noopener noreferrer" target="_blank">Node.js v26.10.0 documentation</a></cite></p></blockquote><p>This restriction is philosophical rather than technical. I get it though. TypeScript is a Microsoft product. Opening that floodgate would pollute the entire ecosystem. Nobody wants more Microsoft. I’d love to see light “native types” in ECMAScript. There are <a href="https://tc39.es/proposal-type-annotations/" rel="noopener noreferrer" target="_blank">type annotation proposals</a>. I suspect I’ll be retired before those bear fruit.</p><p>No TypeScript packages mean I need to find the latest churnware slop to bundle my stuff. <a href="https://tsdown.dev/" rel="noopener noreferrer" target="_blank">Tsdown</a> did the trick, with only two additional dotfiles. Not thrilled about that (every dotfile represents a mistake). I suppose I break even after deleting <code>deno.json</code> etc.</p><p>Speaking of Microsoft lock-in, because they <a href="https://dbushell.com/2026/04/29/github-is-sinking/">wrecked GitHub</a> I’m self-hosting my own <a href="https://git.dbushell.com/" rel="noopener noreferrer" target="_blank">Forgejo instance</a>. <a href="https://docs.npmjs.com/generating-provenance-statements#provenance-limitations" rel="noopener noreferrer" target="_blank">NPM limitations</a> mean my packages have lost “provenance”. I had to configure the <a href="https://pnpm.io/settings/dependency-resolution#trustpolicyexclude" rel="noopener noreferrer" target="_blank">PNPM trust policy</a> to allow my own stuff. Fun times!</p><h2 id="migrating-my-website">Migrating my website</h2><p>My final test for Node was converting my <a href="https://dbushell.com/2025/05/11/the-static-site-churns/">static site generator</a> from Deno. Not many Node versions ago this would have required a major refactor. Today with <code>Node v26.10.0</code> I found surprisingly little work to do.</p><p>The only required changes were to replace Deno’s file system API with <code>node:fs</code> — which is vastly improved from what I remember (literally ~10 years ago). Aside from that, I had to replace <code>Deno.serve</code> with <a href="https://hono.dev/docs/getting-started/nodejs" rel="noopener noreferrer" target="_blank">Hono’s node adapter</a> (a wrapper around <code>node:http</code>).</p><p>After this minimum-viable migration I was shocked to see <strong>15% faster builds</strong>. My codebase still favours idiomatic Deno. I bet I’m leaving performance on the table by not using other built-in Node APIs. That’s something to explore later. The only further change I made was to replace Deno’s <code>@std/path</code> with <code>node:path</code> which is a straight import swap.</p><p>So if I were to TL;DR in the middle: Node got a glow-up, wow!</p><p>You’ve probably known this for a while. I kept using Deno out of habit and familiarity. And I haven’t exactly been enthused to write server-side JavaScript recently.</p><h2 id="denos-decline">Deno’s decline</h2><p>I’m burying this part because it’s flogging a dead horse. Ultimately, Deno failed when they allowed the Silicon Valley Circus to define “success”. Deno went from an innovative modern JavaScript runtime to a boring start-up with <a href="https://dbushell.com/2025/04/28/denos-decline/">uncompelling products</a>. Half the employees were laid off and what’s left are tweeting AI fantasies and vibe-coding Temu Cloudflare.</p><p>There is no reason to use the Deno runtime today. <em>Deno Land Inc.</em> stopped innovating that years ago. Node has slowly but surely caught up, even surpassing Deno in places.</p><p>What finally pushed me away was:</p><ul><li>Broken ZSH integration for weeks</li><li>JSR’s aggressive “429 (Too Many Requests)”</li><li>Bug(s) that made Deno choke on concurrent HTTP requests</li></ul><p>Basically stuff that made it borderline unusable on top of my other criticism. JSR support were very quick to delete my account on request. I don’t like leaving dead profiles around the internet. None of my packages are visible but old versions remain installable.</p><p>It was fun early on but now it’s time to say goodbye.</p><pre data-lang="sh" tabindex="0" translate="no" id="pre-2d735ea5"><code><span class="line"><span class="syntax-c01639ae">brew</span><span class="space"> </span><span class="syntax-e661ac3e">uninstall</span><span class="space"> </span><span class="syntax-e661ac3e">deno</span></span></code></pre><div class="Box"><p class="cursive">Update for 10 Oct 2026</p><p><a href="https://dbushell.com/notes/2026-10-10T10:30Z/">My thoughts on the Cloudflare acquisition.</a></p><p class="cursive">Update for 16 Oct 2026</p><p><a href="https://dbushell.com/2026/10/16/cloudflare-killed-deno/">A look back at my Deno journey.</a></p></div>
<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>
  <title>Shin honkaku</title>
  <description>Shin honkaku is a sub-genre of Japanese detection fiction — and my new obsession! I’ve even designed my own book cover, scroll down to see… An intro to the genre “Shin honkaku” translates to “new orthodox” and pays homage to classic western authors of the early 20th century such as Poe, Queen, Van […]</description>
  <link>https://dbushell.com/2026/09/28/shin-honkaku/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/28/shin-honkaku/</guid>
  <pubDate>Mon, 28 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p><strong>Shin honkaku</strong> is a sub-genre of <a href="https://en.wikipedia.org/wiki/Japanese_detective_fiction" rel="noopener noreferrer" target="_blank">Japanese detection fiction</a> — and my new obsession!</p><p>I’ve even designed my own book cover, scroll down to see…</p><h2 id="an-intro-to-the-genre">An intro to the genre</h2><p>“Shin honkaku” translates to “new orthodox” and pays homage to classic western authors of the early 20th century such as Poe, Queen, Van Dine, Carr, Christie, and Conan Doyle. All of whom are often referenced by the fictional detectives within shin honkaku books.</p><p>The genre began in the 1980’s. As the name implies, it’s a return to the roots of mystery fiction. There is a deliberate emphasis on “fair play” allowing the reader every chance to solve the mystery. Prior to shin honkaku, Japanese detective fiction had a seedy reputation.</p><p>Sōji Shimada writes in the foreword to <em>The Moai Island Puzzle</em>:</p><blockquote><p>In the 1920s, when Edogawa Rampo imported the Edgar Allan Poe-Arthur Conan Doyle style of mystery novel which started in the West, and new Japanese writers gathered to solidify the form of this new genre, the scientific revolution which had given birth to the detective novel had not yet arrived in Japan. In the absence of scientific inspiration, Rampo turned to the grotesque haunted house attractions of the Edo period (1603-1868).</p><p>Eventually, Rampo’s followers started going too far, even introducing the pornographic tendencies of Edo period entertainment fiction into their novels.</p><p><cite>Foreword to The Moai Island Puzzle (Alice Arisugawa, 2016) - Sōji Shimada</cite></p></blockquote><p>This effectively killed mainstream interest in mystery fiction, as Shimada continues:</p><blockquote><p>As a consequence, Japanese mystery authors were looked at with contempt by authors of pure literature at the time, purely because of the vulgarity which offended their morals. Hence the belief that mystery fiction was just lowbrow entertainment found its way into Japan’s literary world, as well as with the readers.</p></blockquote><p>It is Sōji Shimada himself who is often credited with the revival. Shimada’s debut novel <em>The Tokyo Zodiac Murders</em> (1981) is considered one of the best. It’s certainly my favourite! Somewhat ironically, it was shortlisted for the Edogawa Rampo Prize.</p><p>Shimada though credits Yukito Ayatsuji’s <em>The Decagon House Murders</em> (1987). In another foreword he refers to <em>Decagon House</em> as <q>the first work in the shin honkaku </q>. He later goes on to advocate for a new <q>twenty-first century honkaku</q> classification and suggests that strict adherence to rules has bound the genre to a limited vision.</p><blockquote><p>Masahiro Imamura, author of Death Among the Undead, correctly noted that The Decagon House Murders, the starting point of shin honkaku, was at its core a closed circle murder mystery, but with unique narrative techniques used to present the tale. He knew that, just like Ayatsuji before him, he needed to add an extra original factor to the core format. Imamura’s choice: zombies.</p><p><cite>Foreword to Death Among the Undead (Masahiro Imamura, 2017) - Sōji Shimada</cite></p></blockquote><p>On the surface, honkaku is homage to western authors, but the genre’s evolution has been very much a reflection of Japanese societal values of its time.</p><h2 id="the-tokyo-zodiac-murders">The Tokyo Zodiac Murders</h2><p>This book was where I discovered the shin honkaku genre. If you follow my notes blog you’ll have read my short summary:</p><blockquote><p>The story itself is terrifyingly gruesome. The mystery behind who committed the murders is a seemingly impossible series of events with a deceptively original explanation. After re-reading the details more than once I “solved” the mystery. At least, I got the gist of how things happened and arrived at the correct name(s). The exact explanation is far more elegant than I pieced together myself.</p><p><cite><a href="https://dbushell.com/notes/2026-08-31T10:53Z/">Note for Mon 31 Aug 2026</a> - David Bushell</cite></p></blockquote><p>Since reading <a href="https://www.goodreads.com/author/show/5534755.S_ji_Shimada" rel="noopener noreferrer" target="_blank">Sōji Shimada’s</a> two translated books, I’ve read <a href="https://www.goodreads.com/author/show/3201493.Yukito_Ayatsuji" rel="noopener noreferrer" target="_blank">Yukito Ayatsuji</a>, <a href="https://www.goodreads.com/author/show/7114858.Alice_Arisugawa" rel="noopener noreferrer" target="_blank">Alice Arisugawa</a>, <a href="https://www.goodreads.com/author/show/117366.Keigo_Higashino" rel="noopener noreferrer" target="_blank">Keigo Higashino</a>, and <a href="https://www.goodreads.com/author/list/277036.Seishi_Yokomizo" rel="noopener noreferrer" target="_blank">Seishi Yokomizo</a> (older honkaku, but worthwhile.)</p><p>The stories are short relative to my usual epic sci-fi/fantasy tomes. I suspect my perspective on typical novel length has been warped. If you’re a fan of puzzle games, this genre will be your cup of tea. The books often include dramatis personae and illustrations for reference. And red herrings, of course. So many red herrings!</p><h2 id="book-design">Book design</h2><p>Back when I studied design I created a <a href="https://dbushell.com/showcase/space-opera/">series of space opera</a> paperback covers. This project was a significant part of my graphic design bachelor’s degree.</p><figure class="Figure"><div class="Image"><img src="https://dbushell.com/images/blog/2026/space-opera.avif" alt="Five space opera books with high contrast colours and typographic design arranged on a table." width="1280" height="672" decoding="async" fetchpriority="low" loading="lazy" id="--img-60bed69f"/></div></figure><p>The brief was also a “competition” (<em>cough</em> — <em>exploitative spec work</em> — <em>cough</em>) that could have seen my designs become a limited print run. An insider said I was shortlisted to win, but my printing techniques were not financially viable. Although in hindsight maybe they were being kind… either way, <a href="https://dbushell.com/2009/06/09/waterstones-space-opera/">the winning designs</a> were very nice indeed.</p><p>Inspired by my new obsession for shin honkaku, I dusted off the ol’ image editor and whipped up a design mock-up for <em>The Tokyo Zodiac Murders</em>.</p><figure class="Figure"><div class="Image"><img src="https://dbushell.com/images/blog/2026/the-tokyo-zodiac-murders.avif" alt="My book design for The Tokyo Zodiac Murders featuring a vivid red background, brush script title font, mysterious zodiac symbols, and the authors name in both English and Japanese." width="1800" height="1400" decoding="async" fetchpriority="low" loading="lazy" id="--img-8cc86f3f"/></div></figure><p>For a quick weekend project, I’m very pleased!</p><p>I would love to tighten up this design and create a full series of shin honkaku books. I forget the rules and limitations of book design, maybe I’ve committed a fatal folly? Doesn’t matter! It’s a concept. Early in my career I went from graphic designer, to web designer, to front-end web specialist. It’s nice to go back to where it all began. Still got it!</p><p>I would welcome book suggestions in you’re familiar with shin honkaku. I fear I may exhaust the available English translations.</p><h3 id="copyright-attributions">Copyright attributions</h3><p>I used the following resources in my design:</p><ul><li><a href="https://www.youworkforthem.com/font/T7553/cry-wolf/" rel="noopener noreferrer" target="_blank">Cry Wolf font by Hanoded (licensed)</a></li><li><a href="https://fonts.google.com/specimen/Hina+Mincho" rel="noopener noreferrer" target="_blank">Hina Mincho font by Satsuyako (Google Fonts)</a></li><li><a href="https://thenounproject.com/browse/collection-icon/zodiac-sign-52632/" rel="noopener noreferrer" target="_blank">Zodiac sign icons by Chaiconator from Noun Project (CC BY 3.0)</a></li><li><a href="https://thenounproject.com/icon/shoe-print-3974692/" rel="noopener noreferrer" target="_blank">Shoe print by rasendria from Noun Project (CC BY 3.0)</a></li><li><a href="https://mockups-design.com/perfect-bound-paperback-book-mockup/" rel="noopener noreferrer" target="_blank">Perfect-bound paperback book mockup (free)</a></li></ul><p><em>The Tokyo Zodiac Murders</em> was written by Sōji Shimada in 1981. I read the English translation by Ross Mackenzie &amp; Shika Mackenzie published by <a href="https://pushkinpress.com/imprint/pushkin-vertigo/" rel="noopener noreferrer" target="_blank">Pushkin Vertigo</a> who have a great collection of designs for other crime authors.</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>
  <title>Leaving them behind</title>
  <description>Quick note before we begin: this is the first of two posts I’m publishing today. You’re welcome to skip ahead to: Shin honkaku — it’s far more fun! I’ve waited long enough! I’ve entertained one “wait six months” too many! The TL;DR for my updated AI policy has changed: The absolute vileness of the […]</description>
  <link>https://dbushell.com/2026/09/28/leaving-them-behind/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/28/leaving-them-behind/</guid>
  <pubDate>Mon, 28 Sep 2026 14:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>Quick note before we begin: this is the first of two posts I’m publishing today. You’re welcome to skip ahead to: <a href="https://dbushell.com/2026/09/28/shin-honkaku/">Shin honkaku</a> — it’s far more fun!</p><hr/><p>I’ve waited long enough! I’ve entertained one “wait six months” too many!</p><p>The TL;DR for my <a href="https://dbushell.com/ai/">updated AI policy</a> has changed:</p><pre data-lang="diff" tabindex="0" translate="no" id="pre-a205f5fc"><code><span class="line"><span class="syntax-70ed3ec3">-</span><span class="space"> </span><span class="syntax-70ed3ec3">I</span><span class="space"> </span><span class="syntax-70ed3ec3">do</span><span class="space"> </span><span class="syntax-70ed3ec3">not</span><span class="space"> </span><span class="syntax-70ed3ec3">currently</span><span class="space"> </span><span class="syntax-70ed3ec3">use</span><span class="space"> </span><span class="syntax-70ed3ec3">AI</span><span class="space"> </span><span class="syntax-70ed3ec3">for</span><span class="space"> </span><span class="syntax-70ed3ec3">professional</span><span class="space"> </span><span class="syntax-70ed3ec3">work.</span></span>
<span class="line"><span class="syntax-c01639ae">+</span><span class="space"> </span><span class="syntax-c01639ae">I</span><span class="space"> </span><span class="syntax-c01639ae">do</span><span class="space"> </span><span class="syntax-c01639ae">not</span><span class="space"> </span><span class="syntax-c01639ae">and</span><span class="space"> </span><span class="syntax-c01639ae">will</span><span class="space"> </span><span class="syntax-c01639ae">not</span><span class="space"> </span><span class="syntax-c01639ae">use</span><span class="space"> </span><span class="syntax-c01639ae">AI.</span></span></code></pre><p>The absolute vileness of the AI industrial complex knows no bounds.</p><p>Beyond morality — because let’s be honest few care — it’s very simple:</p><p><strong>There is no worthwhile career in AI-<em>anything</em>.</strong></p><p>Simple as that. The AI industry is designed to dehumanise and commoditise labour. Everyone who has dedicated their life to token servitude has become a dull fungible meat proxy.</p><p>The software and web development industries are leading this brain drain. I’ve observed devs go from the giddy thrills of gambling with their employer’s tokens, to the depressing realisation that they’ve been fooled by a small group of grifters and influencers.</p><p>So many developers are giving up. Many have literally left the industry unable to find meaningful employment. Many more have figuratively quiet-quit. They clock in to babysit chatbots with no incentive to care about the output beyond quantity.</p><p>I’m done pretending there is any hope for the AI industry to redeem itself.</p><p>I’m moving on to more interesting things. Barring a monumental power shift, collapse of the industrial complex, and rise in free range grass-fed “local AI” (lol) I won’t be looking back. Wake me up if anything changes!</p><p>What does that mean, practically?</p><h2 id="in-practice">In practice</h2><p>First and foremost I will continue to <a href="https://valleyfold.co.uk/" rel="noopener noreferrer" target="_blank">build websites for <strong>real people</strong></a>. I set up shop as a limited company after a decade of freelancing to bolster my commitment.</p><p>I will observe the AI industrial complex cautiously from afar, but I won’t allow the bullshit I see to rage-bait me. There will be times I’m obliged to call out <a href="https://dbushell.com/2026/05/20/google-just-spat-in-my-face/">egregious insults to my profession</a>. Otherwise, I’ll strive to ignore the echo chamber to protect my mental health.</p><p>I am distancing myself from peers I once respected who are all-in on chatbots<sup>†</sup>. It is not my task to help them. I have no interest in anyone wilfully funding billionaires’ fantasies. There are new people to meet who respect humanity.</p><p>I feel happier about my future now. There is no longer any lingering doubt. The perpetual tech circus may be a threat to my patience and sanity but it won’t take my career.</p><hr/><p>So to immediately move on to more interesting things: my latest obsession is shin honkaku detective fiction! I’d highly recommend <a href="https://dbushell.com/notes/2026-08-31T10:53Z/">The Tokyo Zodiac Murders</a> by <em>Sōji Shimada</em>, and <a href="https://dbushell.com/notes/2026-09-19T06:00Z/">The Moai Island Puzzle</a> by <em>Alice Arisugawa</em> — both satisfying reads.</p><p><a href="https://dbushell.com/2026/09/28/shin-honkaku/"><strong>Read part two of today’s double feature: Shin honkaku!</strong></a></p><p><small><sup>†</sup> <strong>Edit:</strong> originally I wrote “lost to chatbot psychosis” here. A poor turn of phrase given the context. It wasn’t meant literally, and I should not be using it derogatorily. I very much empathise with victims of AI. Chalk it up to frustration with the industry and trying to edit multiple thoughts down to keep this brief.</small></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>
  <title>Removing the fancy button</title>
  <description>My blog is standard.site ready but I’m pausing full integration for now. I desperately wanted the fancy button but after its novelty wore off I’ve accepted the truth. The Bluesky button is bad UX. This has been widely complained about from day one. The problem is obvious for Bluesky users. […]</description>
  <link>https://dbushell.com/2026/09/25/pausing-standard-site/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/25/pausing-standard-site/</guid>
  <pubDate>Fri, 25 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>My blog is <a href="https://standard.site/" rel="noopener noreferrer" target="_blank">standard.site</a> ready but I’m pausing full integration for now. I desperately wanted the <a href="https://dbushell.com/2026/06/05/are-you-standard-site/">fancy button</a> but after its novelty wore off I’ve accepted the truth. The Bluesky button is bad UX. This has been widely complained about from day one.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/bluesky-view-publication.avif" alt="Example of a Bluesky embed with the &#39;View publication&#39; button." width="606" height="480" decoding="async" fetchpriority="low" loading="lazy" id="--img-e6e30467"/></figure><p>The problem is obvious for Bluesky users. Clicking the fancy “View publication” button opens the homepage and not the actual article. This subverts the UI design pattern for ‘card’ components which is long established, evident by unhappy feedback.</p><p>I keep clicking the button myself despite knowing better.</p><p>I’ve seen Bluesky posts from Bluesky people suggesting this will change.</p><blockquote><p>It was a design assumption for v1 that turned out to be … less than correct. We’re hard at work on v2.</p><p><cite><a href="https://bsky.app/profile/jimray.bsky.team/post/3mw22gzathc26" rel="noopener noreferrer" target="_blank">@jimray.bsky.team</a></cite></p></blockquote><p>It sure is taking a while! Ideally they’d benefit by pushing a quick fix for this alone. Maybe that’s not feasible for a project like Bluesky. It’s frustrating because it gives standard.site a bad smell that’ll be hard to shake off.</p><p>The easiest way to temporarily remove the button is to remove the <code>&lt;link&gt;</code> element.</p><pre data-lang="html" tabindex="0" translate="no" id="pre-79d6af6d"><code><span class="line"><span class="syntax-7b4433fd">&#x3C;!--</span><span class="space"> </span><span class="syntax-7b4433fd">&#x3C;link</span><span class="space"> </span><span class="syntax-7b4433fd">rel="site.standard.document"</span><span class="space"> </span><span class="syntax-7b4433fd">href="..."></span><span class="space"> </span><span class="syntax-7b4433fd">--></span></span></code></pre><p>This is the <code>document</code> one for individual pages.</p><p>If I share my homepage I still get a button which uses the <code>publication</code> variation.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/bluesky-standard-document.avif" alt="Bluesky standard website embed for dbushell.com." width="686" height="138" decoding="async" fetchpriority="low" loading="lazy" id="--img-603c470c"/></figure><p>Unfortunately removing the metadata means my website is now not fully standard.site compliant. Although I am still publishing atproto records.</p><p>It’s possible Bluesky’s metadata extractor can be identified server-side and I could dynamically strip the element by user agent. I’m hosted on Bunny CDN so my only option would be to use a JavaScript worker. Bunny’s “edge scripting” add tens of milliseconds of latency to every page request which I’m not willing to entertain.</p><p>Let’s hope Bluesky fixes this soon because I reckon there’s something to <glossary-term id="--term-atproto"><a href="https://atproto.com/" rel="noopener noreferrer" target="_blank">atproto</a></glossary-term> and <a href="https://standard.site/" rel="noopener noreferrer" target="_blank">standard.site</a>. It may be yet another standard (<a href="https://xkcd.com/927/" rel="noopener noreferrer" target="_blank">obligatory link</a>) but spicy JSON has a certain quality that holds my interest.</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>
  <title>RSS Club #009: Domains</title>
  <description>This is an RSS-only post, thank you for subscribing :) I keep buying domains! When will I ever learn? Domain prices are increasing (again) because why wouldn’t they? Sub-domains are free! Host your side project on a sub-domain! Then if you get bored, who cares? […]</description>
  <link>https://dbushell.com/2026/09/12/RSS009/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/12/RSS009/</guid>
  <pubDate>Sat, 12 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>This is an RSS-only post, thank you for subscribing :)</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/bart-chalkboard.avif" alt="Bart Simpson writing lines on a chalkboard: &#39;I will not buy a new domain&#39;." width="800" height="480" decoding="async" fetchpriority="low" loading="lazy" id="--img-9df60be6"/></figure><p>I keep buying domains! When will I ever learn?</p><p><a href="https://porkbun.com/blog/upcoming-price-increases/" rel="noopener noreferrer" target="_blank">Domain prices are increasing</a> (again) because why wouldn’t they?</p><p><strong>Sub-domains are free!</strong> Host your side project on a sub-domain! Then if you get bored, who cares? I used to know this but somewhere along the way I lost the knowledge. My old projects like <a href="https://shiro.dbushell.com/" rel="noopener noreferrer" target="_blank">Shiro</a> and <a href="https://themes.dbushell.com/tales/features/" rel="noopener noreferrer" target="_blank">Tales</a> and <a href="https://printstylesheet.dbushell.com/" rel="noopener noreferrer" target="_blank">print.css</a> live long happy lives undisturbed by man.</p><p>I’ve been busy moving newer side projects to sub-domains or archiving them on my <a href="https://git.dbushell.com/" rel="noopener noreferrer" target="_blank">self-hosted Git forge</a>. These are the ones I remember:</p><p><a href="https://attic.social/" rel="noopener noreferrer" target="_blank"><code>attic.social</code></a> expires in six months. <a href="https://dbushell.com/notes/2026-09-11T05:45Z/">Attic</a> is archived.</p><p><a href="https://croissantrss.com/" rel="noopener noreferrer" target="_blank"><code>croissantrss.com</code></a> expires in a year. <a href="https://dbushell.com/notes/2026-09-11T09:27Z/">Croissant</a> is now on a sub-domain.</p><p><a href="https://pikaday.com/" rel="noopener noreferrer" target="_blank"><code>pikaday.com</code></a> might needs to be renewed indefinitely to avoid squatters (it has juice). Is the strategy to stop redirecting and leave it blank for a year? <a href="https://dbushell.com/2025/11/10/pikaday/">Pikaday</a> is now on a sub-domain.</p><p><a href="https://jsx.lol/" rel="noopener noreferrer" target="_blank"><code>jsx.lol</code></a> is impossible to move without severing RSS subscriptions. I thought a legacy framework like React would have died out by now; how wrong I was!</p><p><a href="https://xslt.rip/" rel="noopener noreferrer" target="_blank"><code>xslt.rip</code></a> is a piece of art waiting on Google to reap before it can expire.</p><p><a href="https://mullenweg.wtf/" rel="noopener noreferrer" target="_blank"><code>mullenweg.wtf</code></a> has a <a href="https://dbushell.com/2024/10/14/matts-malware/">story behind it</a> but I think interest has waned. <a href="https://dbushell.com/notes/2026-09-10T07:51Z/">Recent events</a> transpired to nothing. The courtroom drama is glacial.</p><p><code>cottoncoder.com</code> turned into my <a href="https://dbushell.com/2024/07/10/microblog/">second notes blog</a> but the domain still lives. <a href="https://dbushell.com/2024/01/24/cotton-coder/">Cotton Coder</a> was to be my brand for web education. Glad I didn’t invest there — yikes that side of the industry evaporated quickly!</p><p><code>bankrupt.dev</code> is expiring in 19 days, used once for a joke.</p><p>I’ve lost track of how many domains I’ve bought for a year and never used. “Buying” is the wrong terminology. “Renting” or “leasing” should be legally enforced.</p><p>I have a dozen dead domains I <del>bought</del> rented for possible company names before I settled on <a href="https://dbushell.com/2026/08/11/valley-fold-logo-brand-design/">Valley Fold</a> (<a href="https://valleyfold.co.uk/" rel="noopener noreferrer" target="_blank"><code>valleyfold.co.uk</code></a>). For brand names it’s difficult not to buy all the variations. I don’t own the <code>.com</code> but I did snap up the <code>.co.uk</code> — primary, <code>.uk</code> — criminal they sell that separately, <code>.app</code> and <code>.dev</code> for future use like website staging.</p><p>Want to guess how many TLDs and variations of <code>dbushell</code> I own (or owned) over the years? I let most go. It’s silly and expensive squatting them. FYI both myself and my ownership of <code>dbushell.com</code> pre-date the <a href="https://en.wikipedia.org/wiki/D-Bus" rel="noopener noreferrer" target="_blank">D-Bus project</a>. Maybe it’s hell maybe it’s not, that’s not my beef! In hindsight though I wouldn’t have chosen <code>dbushell.com</code> if I knew it would become my freelance business.</p><p>It took a year of indecisiveness before <strong>Valley Fold Ltd</strong> was born. I was kicking around other names and domains but I’m happy where I settled.</p><p>I paid a three-figure transfer fee for <code>quite.studio</code> on a whim (ouch). I quite liked the sound of it… no one else agreed. Originally I wanted <code>quiet.studio</code> (note the different spelling) but more than one “Quiet” agency exists with the same idea.</p><p>Another business name candidate was “Focus Visible” inspired by <a href="https://clearleft.com/" rel="noopener noreferrer" target="_blank">Clearleft</a>. A reference to <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:focus-visible" rel="noopener noreferrer" target="_blank">CSS</a> if you’re not familiar. I did like the nod towards accessibility too. The problem with this name is: do I use <code>focusvisible</code> or <code>focus-visible</code> with a hyphen? The hyphen fits the CSS property but hyphenated domains are lame. I bought both. <em>All</em> the big TLDs in fact. I was surprised they were available (not anymore lol).</p><p>“Focus Visible” also sounds like a team name from <a href="https://en.wikipedia.org/wiki/The_Apprentice_%28British_TV_series%29" rel="noopener noreferrer" target="_blank">The Apprentice</a>. Which is cringe.</p><p>Needless to say I have more domains waiting to expire than I’m actively using. I set up a second registrar account with notifications disabled so that I don’t have to see them! My new goal is to reach 2027 without renting a new domain. We are not in a golden age of web development and frugality is necessary to survive!</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>
</channel>
</rss>
