<?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>Fri, 16 Oct 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>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><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>I said no and Apple said yes</title>
  <description>The nice thing about keeping a blog is that I can say at precisely 9:51am, Wednesday 5th February 2025, I discovered that macOS 15.3 had enabled a feature that was phoning home every 15 minutes with personal data. And that I said “no” and turned it off. […]</description>
  <link>https://dbushell.com/2026/09/22/apple-intelligence/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/22/apple-intelligence/</guid>
  <pubDate>Tue, 22 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>The nice thing about keeping a blog is that I can say at precisely 9:51am, <a href="https://dbushell.com/notes/2025-02-05T09:51Z/">Wednesday 5th February 2025</a>, I discovered that macOS 15.3 had enabled a feature that was phoning home every 15 minutes with personal data. And that I said “no” and turned it off.</p><p>At the time Apple were generous enough to provide a setting to disable this feature.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2025/apple-intelligence-1.avif" alt="macOS 15 Apple Intelligence setting." width="472" height="120" decoding="async" fetchpriority="low" loading="lazy" id="--img-7ec08526"/></figure><p>Although they hid the second part deeper, because why should saying “no” be easy?</p><figure class="Image"><img src="https://dbushell.com/images/blog/2025/apple-intelligence-2.avif" alt="macOS 15 Apple Intelligence privacy setting." width="474" height="94" decoding="async" fetchpriority="low" loading="lazy" id="--img-03985aa9"/></figure><p>Last week <a href="https://dbushell.com/notes/2026-09-16T05:01Z/">I succumbed to Apple’s harassment</a> and upgraded macOS 15 to 27. I only skipped one major version, Apple skipped 10!</p><p>And today I discovered that Apple had removed the “no” switch.</p><p>The “AI” industry has many flaws, the word “consent” being seemingly missing from training data and company handbooks is one of them. AI bros do not take “no” for an answer. When Apple advertised their <a href="https://dbushell.com/2026/06/12/apple-deepfakes/">deepfake feature</a> back in June it became obvious Apple does not “think different.”</p><p>Digging through macOS 27 settings I turned off Siri (again). Of course, multiple unkillable Siri processes remain, stealing memory and writing data. For what purpose? Who knows. Note that they removed “Apple Intelligence” from this control.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/macos-siri-settings.avif" alt="macOS 27 Siri setting." width="482" height="136" decoding="async" fetchpriority="low" loading="lazy" id="--img-12086618"/></figure><p>Trawling the web I discovered <a href="https://support.apple.com/en-gb/guide/mac-help/mchlb2e44f94/mac" rel="noopener noreferrer" target="_blank">Apple has hidden settings</a> under “Screen Time” restrictions. This is supposed to be for parental controls. These settings don’t disable Apple “Intelligence” but they do clean up various menus by hiding the slop tools.</p><p>All of this garbage was enabled after upgrading to macOS 27 despite me having “Apple Intelligence &amp; Siri” turned off already. That was a rather explicit “no”, no?</p><p>The icing on this cake is the 22.28 GB brick clogging my disk space.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/macos-apple-intelligence.avif" alt="macOS 27 Apple Intelligence accounting for 22.28 GB." width="488" height="144" decoding="async" fetchpriority="low" loading="lazy" id="--img-43d3253d"/></figure><p>Apple is charging £500/TB on new MacBooks so that is what, £11 they’ve stolen from me?</p><p>But that’s a trivial cost compared to the consent problem. The AI industrial complex does not do consent. You <em>will</em> use it. You cannot look away, it will be stuffed down your throat and if you say “no” they’ll cut out your tongue.</p><p>The AI industry is vile. <a href="https://dbushell.com/ai/">My AI policy</a> tried to list my concerns but it’s hopelessly outdated. I can’t keep up. Here’s just three of many headlines I collected this month:</p><ul><li><a href="https://www.nytimes.com/2026/09/11/technology/x-grok-child-images.html" rel="noopener noreferrer" target="_blank">Despite Pledges From Musk, Child Sexual Abuse Material Persists on X</a></li><li><a href="https://futurism.com/artificial-intelligence/openai-consumer-harm-wrongful-death-lawsuits" rel="noopener noreferrer" target="_blank">OpenAI Is Now Facing Over 50 Consumer Harm and Wrongful Death Lawsuits</a></li><li><a href="https://www.404media.co/doom-loop-openai-and-microsoft-admits-llms-are-destroying-the-web-and-built-on-theft/" rel="noopener noreferrer" target="_blank">OpenAI and Microsoft Admits LLMs Are Destroying the Web and Built on Theft</a></li></ul><p>The list is endless. There is no limit to the human toll to keep this bubble inflated.</p><p>Call me a radical but I’ve chosen not to kowtow to billionaires. Do you want another Epstein list? Because this is how you create another Epstein list. Fund a generation of psychopaths building on a foundation of non-consent and privacy invasion. Fantastic idea!</p><p>AI bros keep telling me <em>“just turn it off”</em> and when I do they remove the choice.</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>“Programming” monitor</title>
  <description>I’ve been rocking an LG monitor that has noticeable burn-in. The old dog takes a while to flicker into life too. I’ve had it around eight years (the Dell before it lasted ten). I think the monitor is too dumb to be spying on me but I’m due an upgrade anyway. […]</description>
  <link>https://dbushell.com/2026/09/18/benq-rd280ug-review/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/18/benq-rd280ug-review/</guid>
  <pubDate>Fri, 18 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I’ve been rocking an LG monitor that has noticeable burn-in. The old dog takes a while to flicker into life too. I’ve had it around eight years (the Dell before it lasted ten). I think the monitor is too dumb to be <a href="https://dbushell.com/notes/2026-09-07T11:49Z/">spying on me</a> but I’m due an upgrade anyway.</p><p>I picked up the <a href="https://www.benq.eu/en-uk/monitor/programming/rd280ug.html" rel="noopener noreferrer" target="_blank">BenQ RD280UG</a> — the <em>UG</em> is the new 120Hz model.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/benq-rd280ug.avif" alt="Promo shot of some random white guy sat infront of the monitor pretending to program." width="1920" height="800" decoding="async" fetchpriority="low" loading="lazy" id="--img-734ba00e"/><figcaption>This dramatic reenactment is not me but my work day is worryingly similar.</figcaption></figure><p>Was it worth the cost? It’s certainly not the cheapest monitor nor is it the most expensive. If it lasts the best part of a decade I’ll not worry. I didn’t compare many others but I’m guessing the BenQ is a little on the pricier side for the specs. Probably a limited edition because nobody programs anymore!</p><p>I have no referral link I just think it’s neat.</p><h2 id="screen">Screen</h2><p>The “programming” marketing is all based on the 3:2 aspect ratio and matt panel. That means a 1920×1280 resolution, so an extra 200 pixels in height (technically 3840×2560 but my brain works in CSS pixels). I feel like I’m coding at an IMAX it’s glorious. It’s physically the exact width of my old monitor so watching 16:9 letterboxed video is no smaller.</p><p>120Hz is nice though not a game changer, I don’t think my lazy eyes care beyond 60Hz. The matt panel is amazing I see no glare or reflections. I feel like it’s giving me less eye strain. I’ll report back in a few months.</p><p>The “Programming dark theme” is a load of bollocks. The monitor has a selection of presets you can cycle through like every other monitor. You can split the screen in half and apply different profiles. I can’t see myself ever bothering to do that (on purpose).</p><h2 id="colour">Colour</h2><p>I’m not a TV pervert so I can’t judge how accurate the colours are but it looks great to me. Looks better than my old LG. On par with my MacBook screen (this is bait).</p><p>I’ve always held the belief that designing <em>websites</em> on a perfect colour-accurate monitor is vanity. Few will ever see what the designer sees. Unlike print design, which has a predictable end product, web designers can’t control the final presentation. Therefore, maybe designing on a cheap, factory calibrated monitor is more closely aligned to end user experience?</p><p>To put it another way, you can tell if a web designer owns a $2000 monitor if their palette has fifty shades of the same grey and gradients that band like an 8-bit game.</p><p>The BenQ is a decent in between, if not towards the higher end.</p><h2 id="ports">Ports</h2><p>The monitor has a reasonable variety of ports and <a href="https://en.wikipedia.org/wiki/KVM_switch" rel="noopener noreferrer" target="_blank">KVM switching</a> is possible. My old Mac Mini with Linux installed was too much hassle to use by switching cables. The only issue now is that my MacBook turns off when I switch with the lid closed. Still, it’s more convenient now to share keyboard &amp; mouse. For KVM one machine must use a single USB-C cable, the other must use HDMI or DisplayPort and a USB-A-to-B cable. Why not simply two USB-C cables? There’s three USB-C ports and daisy-chaining is possible but not KVM.</p><p>My new setup is one USB-C cable from MacBook to monitor without a big dock in the middle. I’m glad to remove the Thunderbolt dock and its massive power brick. I still have an additional tiny 4 port USB-A splitter (900 mA) and an Ethernet to USB-C adapter that all tucks away behind the monitor.</p><p>A tidy desk makes for a tidy mind.</p><h2 id="other-stuff">Other stuff</h2><p>The monitor itself has an internal power brick. That means two less (for a total of zero) paper weights on my desk (unless the Mac Mini remains unused). Power bricks are a nightmare for adjustable standing desks. Good times!</p><p>The stand does its job. I can lower it to a perfect height which I couldn’t do with my old monitor. I had to buy an adjustable arm which needed space to flex behind my desk.</p><p>BenQ wants me to download their “Display Pilot 2” spyware. Not a chance! I heard “BetterDisplay Pro” was good and it does stuff but I don’t really need to do stuff. The monitor works out of the box. I don’t think I’m missing functionality.</p><p>I don’t game on this thing (Mac, lol) but as a “programming” monitor it works nicely despite the gimmick being overhyped.</p><p><strong>TL;DR:</strong> 3:2 aspect ratio is neat. I’ll enjoy the novelty for a while.</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>
<item>
  <title>CodePen: exposed!</title>
  <description>I promise this post is not merely a comment on a Hacker News submission because good lord that would be desperate but that is where I’m starting: “They send all typed into editor input to codepen.dev almost immediately (you would see in 1-2 sec after you typed your secret that it appears in […]</description>
  <link>https://dbushell.com/2026/09/08/codepen/</link>
  <guid isPermaLink="true">https://dbushell.com/2026/09/08/codepen/</guid>
  <pubDate>Tue, 08 Sep 2026 15:00:00 GMT</pubDate>
  <content:encoded><![CDATA[<p>I promise this post is not merely a comment on a <em>Hacker News</em> submission because good lord that would be desperate but that is where I’m starting:</p><blockquote><p>They send all typed into editor input to codepen.dev almost immediately (you would see in 1-2 sec after you typed your secret that it appears in respective Network/Response tab) even before one saved it.</p><p><cite><a href="https://news.ycombinator.com/item?id=49596976" rel="noopener noreferrer" target="_blank">Apparently CodePen 2.0 sends data to their servers as you type</a></cite></p></blockquote><p>This post hit the front page with over 100 upvotes.</p><p>The author seems concerned as if CodePen is doing something untoward. In reality that behaviour should be fully expected. CodePen processes your code to generate a live preview. And to the relief of our browsers that’s done server-side without shipping a JavaScript bomb. CodePen has other features like live collaboration that require it too.</p><p>Technically an “autosave” feature can be done locally using browser storage but CodePen uses the server for that too. This allows users to restore unsaved changes from anywhere. You can test this by logging in cross browser, or deleting cached site data.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/codepen-unsaved.avif" alt="Notification: Loaded your unsaved changes. Reset to saved?" width="720" height="100" decoding="async" fetchpriority="low" loading="lazy" id="--img-17f31f12"/></figure><p>The author concludes:</p><blockquote><p>Thus, if you ever entered some secrets in there by mistake consider them compromized even if you did not publish/save the pen</p></blockquote><p>Yeah, of course. Don’t be so cavalier with sensitive data on your clipboard! This is true for all web-based editing software. Google Docs, etc. They’re effectively keyloggers by design.</p><h2 id="user-expectations">User expectations</h2><p>It does raise an interesting question: what is reasonable to expect users to understand? It’s easy to respond “Well duh!” to our <em>Hacker News</em> friend (and I did). But why did I expect CodePen to behave this way when others didn’t?</p><p>It’s a tricky question for product owners to handle. Burying details in the <em>Terms of Service</em> that nobody will ever read doesn’t help anyone (except lawyers).</p><p><em>Gamers Nexus</em> on YouTube recently <a href="https://www.youtube.com/watch?v=6IFVTcM28KA" rel="noopener noreferrer" target="_blank">exposed LG TV spyware</a> doing really insidious stuff. We all know smart devices phone home but LG’s tactics are another level. Probably illegal. Consumer (and human) rights are certainly a reasonable expectation!</p><p>The grey area between what’s obviously wrong and what’s reasonable to expect is murky.</p><p>I’d highly recommend the <a href="https://blog.codepen.io/radio/" rel="noopener noreferrer" target="_blank">CodePen Radio podcast</a> where the team discuss product design and development. It’s very insightful.</p><h2 id="the-license">The license</h2><p>There is one aspect of CodePen that I think is a much bigger concern for users and far less understood. This one <em>is</em> “hidden” in <a href="https://blog.codepen.io/legal/terms-of-service/" rel="noopener noreferrer" target="_blank">CodePen’s Terms of Service</a>.</p><p>All public code snippets are MIT licensed:</p><blockquote><p>Public Pens you build on CodePen are MIT licensed, meaning other people are free to use it for whatever they like under the terms of the MIT license. Don’t put anything on CodePen where that wouldn’t be OK.</p><p><cite><a href="https://blog.codepen.io/legal/terms-of-service/#your-license-to-us" rel="noopener noreferrer" target="_blank">Your License to Us</a></cite></p></blockquote><p>I’ve seen a lot of stuff shared on CodePen where I wonder if the author intended, or even had permission, to effectively give it away for free.</p><p>Personally I think CodePen using the MIT license this way is a brilliant idea. It allows CodePen to do what it does. Most user-generated content websites have absurdly long terms around content rights. <a href="https://docs.github.com/en/site-policy/github-terms/github-terms-of-service#d-user-generated-content" rel="noopener noreferrer" target="_blank">GitHub’s user-generated content section</a> is just shy of 1500 words.</p><p>Using the MIT license solves this problem succinctly. I’ve pasted the entire license below. You really should have it memorised by now. It’s the Lord’s prayer for developers.</p><blockquote><p>Copyright [YEAR] [COPYRIGHT HOLDER]</p><p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p><p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p><p>THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p><p><cite><a href="https://opensource.org/license/MIT" rel="noopener noreferrer" target="_blank">The MIT License</a> - Open Source Initiative</cite></p></blockquote><p><small>This is not an advertisement for CodePen Pro but you can <a href="https://codepen.io/features/pro#:~:text=Full%20Ownership.%20Private%20Pens%20are%20unlicensed%2C" rel="noopener noreferrer" target="_blank">pay to retain ownership</a>.</small></p><p>From what I’ve witnessed over the years, users (and developers) simply do not understand copyright and licenses. I’m surprised CodePen doesn’t make this a little clearer. But then again, I’ve not heard of any disputes over “stolen” code, so maybe it’s another non-issue?</p><p>With CodePen 2.0 exposing the file system I’d like to see a <code>LICENSE.txt</code> for every pen.</p><figure class="Image"><img src="https://dbushell.com/images/blog/2026/codepen-license.avif" alt="CodePen UI with an MIT license added to the files list." width="776" height="264" decoding="async" fetchpriority="low" loading="lazy" id="--img-edd39101"/><figcaption>This is a mock-up. Apparently poor users like me have a three file limit.</figcaption></figure><p>Would that work? What happens if users try to change or edit the license? Does it need to be locked? I don’t know the best solution but I’d like to see the MIT license visible.</p><p>No spicy drama here I’m afraid! Just a public service announcement and unanswered questions around user expectations. CodePen is not even selling your data for model training, what a bunch of bores! On that note, I guess with LLM code washing it doesn’t matter anymore :(</p>
<hr>
<p>
Thanks for reading! Follow me on <a href="https://dbushell.com/mastodon/">Mastodon</a> and <a href="https://dbushell.com/bluesky/">Bluesky</a>.
Subscribe to my <a href="https://dbushell.com/rss.xml">Blog</a> and <a href="https://dbushell.com/notes/rss.xml">Notes</a> or <a href="https://dbushell.com/merge/rss.xml">Combined</a> feeds.
</p>
]]></content:encoded>
</item>
</channel>
</rss>
