Shellsharks Blogroll - BlogFlock 2026-03-26T04:02:39.391Z BlogFlock Robb Knight, Werd I/O, destructured, Molly White, fLaMEd, Trail of Bits Blog, Aaron Parecki, Evan Boehs, gynvael.coldwind//vx.log (pl), James' Coffee Blog, Westenberg, joelchrono, Kev Quirk, cool-as-heck, Posts feed, Sophie Koonin, Adepts of 0xCC, <span>Songs</span> on the Security of Networks, cmdr-nova@internet:~$, Johnny.Decimal, Hey, it's Jason!, Terence Eden’s Blog Try our new dimensional analysis Claude plugin - Trail of Bits Blog https://blog.trailofbits.com/2026/03/25/try-our-new-dimensional-analysis-claude-plugin/ 2026-03-25T11:00:00.000Z <p>We’re releasing a new <a href="https://github.com/trailofbits/skills/tree/main/plugins/dimensional-analysis">Claude plugin</a> for developing and auditing code that implements dimensional analysis, a technique we explored in our most recent <a href="https://blog.trailofbits.com/2026/03/24/spotting-issues-in-defi-with-dimensional-analysis/">blog post</a>. Most LLM-based security skills ask the model to find bugs. Our new dimensional-analysis plugin for Claude Code takes a different approach: it uses the LLM to annotate your codebase with dimensional types, then flags mismatches mechanically. In testing against real audit findings, it achieved 93% recall versus 50% for baseline prompts.</p> <p>You can download and use our new <code>dimensional-analysis</code> plugin by running these commands:</p> <p><strong><code>claude plugin marketplace add trailofbits/skills</code></strong> <strong><code>claude plugin install dimensional-analysis@trailofbits</code></strong> <strong><code>claude /dimensional-analysis</code></strong></p> <h2 id="how-our-plugin-differs-from-most-skills">How our plugin differs from most skills</h2> <p>This plugin release is quite different from the wave of security analysis skills released over the past few weeks. The skills we’ve seen tend to take a relatively simple approach, where the LLM is primed with a set of vulnerability classes, exploration instructions, and example findings, and is then told to try to identify bugs within the scope of the skill.</p> <p>Unfortunately, these approaches tend to produce low-quality results, with precision, recall, and determinism that is often much poorer than simply asking an LLM to “find the bugs in this project.”</p> <p>What makes <code>dimensional-analysis</code> different is that instead of relying on LLM judgement to search for, identify, and rank vulnerabilities, it uses the LLM as a vocabulary-building/categorization machine that directly annotates the codebase. If the annotations are correct and a dimensional bug is present, that bug shows up as a mismatch between annotations instead of having to rely on an LLM’s judgement to determine how viable a finding is. In effect, this changes the calculus of how the LLM’s reasoning capability is being used, and produces much better results than baseline prompts that overly rely on LLM reasoning capabilities.</p> <h2 id="benchmarking">Benchmarking</h2> <p>We tested <code>dimensional-analysis</code> against a set of dimensional mismatch issues found during several unpublished audits and compared it to a baseline prompt using 10 samples per codebase. For this evaluation, the <code>dimensional-analysis</code> plugin had a recall rate of 93% with a standard deviation of 12%, versus the baseline prompt, which had a recall rate of 50% with a standard deviation of 20%. This means that <code>dimensional-analysis</code> performed both better and more consistently than the baseline prompt.</p> <h2 id="how-it-works">How it works</h2> <p>If you haven’t already, read our first <a href="https://blog.trailofbits.com/2026/03/24/spotting-issues-in-defi-with-dimensional-analysis/">blog post</a> on the dimensional analysis technique. The plugin works over four main phases: dimension discovery, dimension annotation, dimension propagation, and dimension validation.</p> <p>In the first phase, a subagent performs dimension discovery, with the goal of identifying a vocabulary of fundamental base units that every numerical term in the system is composed of. During this process, it also identifies a set of common derived units for quick reference by later agents.</p> <p> <figure> <img src="https://blog.trailofbits.com/2026/03/25/try-our-new-dimensional-analysis-claude-plugin/try-our-new-dimensional-analysis-claude-plugin-image-1_hu_7d3093e4aab4ef47.webp" alt="Figure 1: A sample of a dimensional vocabulary for a protocol using Uniswap v4 hooks" width="1200" height="733" loading="lazy" decoding="async" /> <figcaption>Figure 1: A sample of a dimensional vocabulary for a protocol using Uniswap v4 hooks</figcaption> </figure> </p> <p>The dimensional vocabulary is persisted to <code>DIMENSIONAL_UNITS.md</code>, where it can be read by other agents or used during development if you choose to make the annotations a permanent part of your software development lifecycle.</p> <p>In the second phase, a group of subagents is launched to directly annotate the codebase using the dimensional vocabulary. Each subagent is provided with the <code>DIMENSIONAL_UNITS.md</code> file, a batch of files to annotate, and instructions to annotate state variables, function arguments, variable declarations, and any portions of complex arithmetic. These initial annotations are called “anchor” annotations.</p> <figure class="highlight"> <pre tabindex="0" class="chroma"><code class="language-solidity" data-lang="solidity"><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">currentPrice</span> <span class="o">&lt;</span> <span class="n">peakPrice</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// D18{1} = (D18{price} - D18{price}) * D18{1} / (D18{price} - D18{price}) </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="n">imbalance</span> <span class="o">=</span> </span></span><span class="line"><span class="cl"> <span class="p">((</span><span class="n">peakPrice</span> <span class="o">-</span> <span class="n">currentPrice</span><span class="p">)</span> <span class="o">*</span> <span class="n">imbalanceSlopeData</span><span class="p">.</span><span class="n">imbalanceSlopeBelowPeak</span><span class="p">)</span> <span class="o">/</span> </span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="n">peakPrice</span> <span class="o">-</span> <span class="n">eclpParams</span><span class="p">.</span><span class="n">alpha</span><span class="p">.</span><span class="n">toUint256</span><span class="p">());</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// D18{1} = (D18{price} - D18{price}) * D18{1} / (D18{price} - D18{price}) </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="n">imbalance</span> <span class="o">=</span> </span></span><span class="line"><span class="cl"> <span class="p">((</span><span class="n">currentPrice</span> <span class="o">-</span> <span class="n">peakPrice</span><span class="p">)</span> <span class="o">*</span> <span class="n">imbalanceSlopeData</span><span class="p">.</span><span class="n">imbalanceSlopeAbovePeak</span><span class="p">)</span> <span class="o">/</span> </span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="n">eclpParams</span><span class="p">.</span><span class="n">beta</span><span class="p">.</span><span class="n">toUint256</span><span class="p">()</span> <span class="o">-</span> <span class="n">peakPrice</span><span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre> <figcaption><span>Figure 2: A sample of annotated arithmetic from Balancer v3</span></figcaption> </figure> <p>In the third phase, dimensions are “propagated” across each file to callers and callees. This phase adds extra annotations to low-priority files that didn’t receive annotations on the first pass, and performs the first set of checks to make sure that dimensions agree within the same code context and across files.</p> <p>It’s important to note that a dimensional mismatch at this stage doesn&rsquo;t necessarily mean a vulnerability is present; sometimes it’s not possible to infer the precise dimension of a called function argument without reading the implementation of the function itself, and the system will over-generalize or make a poor guess. This third phase attempts to “repair” these over-generalized annotations and, if repair is not possible, flags them for triage in the final step.</p> <p>In the fourth and final phase, the plugin attempts to discover mismatches and perform triage. Dimensional mismatching is checked for during assignment, during arithmetic, across function boundaries, across return paths, and across external calls. Dimensional mismatches are compared against a severity classification based on the nature of the mismatch, and a final report is returned to the user.</p> <h2 id="whats-next">What’s next?</h2> <p>If you’re a developer working on an arithmetic-heavy project like a smart contract or blockchain node, we highly recommend running this plugin, then committing <code>DIMENSIONAL_UNITS.md</code> along with all of the annotations created by the plugin. Besides finding bugs, these annotations can greatly improve how long it takes to build a thorough understanding of a complex codebase and help improve both human and LLM understanding of the semantic meaning of your project’s arithmetic expressions.</p> <p>While new tools are exciting, at this time we don’t believe that this tool can find <em>every</em> source of dimensional error. LLMs are probabilistic, which means there is always going to be some level of error. We’re interested in improving this plugin wherever possible, so if you run it and it misses a dimensional error, please open an issue on our <a href="https://github.com/trailofbits/skills/tree/main">GitHub</a>.</p> Read "Goodhart's Law vs "prediction markets"" - Molly White's activity feed 69c2ed297bbd252405c69165 2026-03-24T19:59:37.000Z <article class="entry h-entry hentry"><header><div class="description">Read: </div></header><div class="content e-content"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of" href="https://pluralistic.net/2026/03/24/degenerated-gambling/" rel="bookmark">“<span class="p-name">Goodhart's Law vs "prediction markets"</span>”</a>. </div><div class="byline"><span class="p-author h-card">Cory Doctorow</span> in <span class="p-publication">his blog</span>. <span class="read-date"> Published <time class="dt-published published" datetime="2026-03-24">March 24, 2026</time>.</span></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-03-24T19:59:37+00:00" title="March 24, 2026 at 7:59 PM UTC">March 24, 2026 at 7:59 PM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/prediction_markets" title="See all feed posts tagged "prediction markets"" rel="category tag">prediction markets</a>. </div></div></footer></article> Note published on March 24, 2026 at 7:47 PM UTC - Molly White's activity feed 69c2ea391d030f7313bd0dea 2026-03-24T19:47:05.000Z <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>i love combing through FEC data because how else would i have learned of Big Nut</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/5520d26a4dd467c13aab_Screenshot-2026-03-24-at-3.43.57---PM.png" data-fslightbox=3cf82ca5119c44de55ee><img src="https://storage.mollywhite.net/micro/5520d26a4dd467c13aab_Screenshot-2026-03-24-at-3.43.57---PM.png" alt="PAC contributions to Barry Moore for US Senate, all in the amount of $5000, from United States Peanut Political Action Committee (US Peanut PAC), National Peanut Buying Points Association Peanut Buying Point PAC, American Peanut Shellers Association Political Action Committee, Alabama Peanut Producers Association, Peanutpac Of Alabama, United States Peanut Political Action Committee (US Peanut PAC), National Pecan Federation Inc. Political Action Committee (Pecan PAC)" /></a></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202603241544"><time class="dt-published" datetime="2026-03-24T19:47:05+00:00" title="March 24, 2026 at 7:47 PM UTC">March 24, 2026 at 7:47 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/116285874402357683" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mhtdpcmurp2t" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/us_politics" title="See all micro posts tagged "US politics"" rel="category tag">US politics</a>. </div></div></footer></div></article> PSP gaming and a new ereader - W12 - Joel's Log Files https://joelchrono.xyz/blog/w12 2026-03-24T15:40:00.000Z <p>These weeknotes are full of gaming related topics yet again, but also some reading, let us celebrate such an accomplishment, yay!</p> <ul> <li> <p>💻 Now that it’s over, it’s weird to think about all the work I did while my workmate was out. It sure was stressful and there were many times where I still felt like I should ask him what to do. These weeks proved to me that even though I’m still not the best, I can handle myself better than I thought—or stall things until he returns and knows what to do better lol.</p> </li> <li> <p>💪 Gotta say I have not gone to the gym for a while, work has been a pain and I got phone calls off-hours, I just want to get home and be lazy for the rest of the day, and always ready just in case. Thankfully, I finally returned this Monday night and it was a good time.</p> </li> <li> <p>📚 My XTEINK X4—a tiny e-ink reader—finally arrived, at the same time as <a href="https://polymaths.social/@jp/statuses/01KMET4N88G4YMMZSRZ3KZRGXH">Jeremy’s</a>, both of us already installed the Crosspoint firmware too. I had some fun setting up wallpapers and</p> </li> <li> <p>🍜 Went to a Japanese restaurant with some friends over the weekend! We ate some ramen and had a wonderful time chatting and catching up with each other. We also played a couple of rounds of <a href="https://garticphone.com">Garctic Phone</a>, guaranteed fun for everyone.</p> </li> <li> <p>📦 Another couple of Nintendo Switch game arrived. I got <em>Gris</em> earlier on, and <em>Crow Country</em> arrived later, the first because of the great experience <a href="https://benjaminhollon.com">Amin</a>—and he keeps nagging me to play it—and the latter due to the marvelous experience I had with <a href="https://joelchrono.xyz/blog/resident-evil-2/">Resident Evil 2</a>, I may play the original RE first though.</p> </li> <li> <p>💾 Transferred a few games to my PSP, the <em>What Did I Do To Deserve This, My Lord?! 2</em>, <em>Danganronpa</em>, <em>BlackRock Shooter</em>, and <em>Mega Man Powered Up!</em>. I wish there was a <em>Resident Evil</em> game for PSP, it would have been so cool…</p> </li> <li> <p>🎧 Acquired <a href="https://berlinistmusic.bandcamp.com/album/gris-unreleased-sketches/">Gris: Unreleased sketches</a>, a new album by Berlinist with early drafts of tracks from the game of the same name! It’s just 11 minutes long, but it’s wonderful.</p> </li> </ul> <h2 id="reading">Reading</h2> <h3 id="started">Started</h3> <ul> <li> <p>🕰️ <strong>Chrono Trigger</strong> by Michael P. Williams - I transferred a few books to my Xteink X4 reader and this was one of them. I already flew through 25% of it! A great book about Chrono Trigger, the author’s personal experience with it, and apparently there’s some interviews and more neat stuff coming up!</p> </li> <li> <p>🛰️ <strong>Strange Dogs</strong> by James S.A. Corey - A novella taking place before the events of <a href="https://joelchrono.xyz/blog/persepolis-rising/">Persepolis Rising</a> from <em>The Expanse</em>. It seems super promising so far.</p> </li> </ul> <h3 id="ongoing">Ongoing</h3> <ul> <li>🥷 <strong>Kagurabachi</strong> by Takeru Hokazono - Up to chapter 82. This is great shonen stuff, and it has been rock-solid from the beginning. I’ve already flew past a couple of excellent arcs and I am enamoured by the story, the characters and the pure <em>aura</em> of each panel as the fight scenes and the power system develop further. The progression has been really good and I have no complaints. I ready more than 70 chapters in a week, after all.</li> </ul> <h3 id="completed">Completed</h3> <ul> <li>🌳 <strong>Non-Stop</strong> by Brian W. Aldiss - What a book! What a start to Aldiss’ career as a published writer. Among the first stories of its kind, with a lot of ideas, concepts and neat, if dated characters. I reall y</li> </ul> <h2 id="watching">Watching</h2> <ul> <li>🪨 <strong>David</strong> - We went to the movies and chose this one on a whim, it’s an animated rendition of the biblical tale of King David’s rise to the throne. I was rather surprised by the quality of it. It’s a musical, but it wasn’t very catchy, at least to me. It still pales in comparison to the masterpiece that is <em>The Prince of Egypt</em> though.</li> </ul> <h2 id="gaming">Gaming</h2> <h3 id="ongoing-1">Ongoing</h3> <ul> <li> <p>🥐 <strong>CrossCode</strong> - Last week I stared the first out of three dungeons in Chapter 8, I have now beath two of them and unlocked my way into the third one! The game keeps being simply awesome, the puzzles continue to get my brain muscles to work.</p> </li> <li> <p>🍄 <strong>Super Mario 3D World</strong> - We have managed to complete all the levels and beat Bowser once more. We finally got to the last last stage and did a couple more levels! The end of this game is near, but we are still collecting all the stickers!</p> </li> <li> <p>⚔️ <strong>Gladiator Begins</strong> - I only mentioned this in passing on a <a href="https://joelchrono.xyz/blog/gaming-recap-2024/">Gaming Recap from 2024</a>, I can’t believe I never brought it up in other notes at all… In any case, it’s a great PSP arena fighter with kinda complex controls and depth. I’ve enjoyed it quite a bit, lots of customization and challenging fights.</p> </li> <li> <p>🃏 <strong>Balatro</strong> - Literally <a href="https://joelchrono.xyz/blog/2025-w12/">one year later</a>, this roguelike was opened on a whim by my friends on my Switch and we ended up playing for two hours. I wasn’t fully present during this time, but I played a few rounds here and there, it is still awesome.</p> </li> </ul> <h3 id="started-1">Started</h3> <ul> <li> <p>💀 <strong>What Did I Do To Deserve This, My Lord!? 2</strong> - A strange tower-defense/dungeon maker where I have to design a cave system that autopopulates with minions in charge of defending the bad guy. Depending of the shapes I dig, certain species grow, and then bigger and bigger ones that are stronger and more durable. Every once in a while “heroes” will show up to defeat me. The weird thing here is that I have no way to dictate where the minions go, I have to work within their movement patterns and plan accordingly, it’s rather interesting but I can’t figure it out yet and can’t get past World 2.</p> </li> <li> <p>🧪 <strong>Metroid Fusion</strong> - I started it on a whim again, this time on my Miyoo Mini Flip. I reached the first boss of the game! Kind of want to fly through it just because it’s fun.</p> </li> <li> <p>🚗 <strong>Ridge Racer Type 4</strong> - Started it on my Miyoo Mini Flip too, I think I’ll stick with the PSP one though.</p> </li> </ul> <h2 id="around-the-web">Around the Web</h2> <h3 id="blog-posts">Blog posts</h3> <ul> <li><a href="https://gabz.blog/posts/unfinished-must-want-to-play-games">Unfinished must-want-to-play games</a> - Love listicles like this one.</li> <li><a href="https://nathandyer.me/2026/03/21/sandwich.html">The Sandwich</a> - A very personal slice of life.</li> <li><a href="https://analogdreams.zip/your-computer-hates-you.html">Your computer hates you</a> - A rant on technology today, I disagree with many things, but found it worth reading.</li> <li><a href="https://flamedfury.com/posts/damn-i-can-still-read/">Damn, I Can Still Read</a> - Reading is great, and it’s fun to realize you actually like it.</li> <li><a href="https://thetangent.space/2026/pocket-update/">Just checking in</a> - Sam has mostly stuck to weekly summaries that are generated from his social media feed, but I’ve been missing a proper post like this one.</li> </ul> <h3 id="youtube">YouTube</h3> <ul> <li><a href="https://youtu.be/Gu7xtenFnNQ">Why smaller pixel art is actually harder</a> - The title is pretty clear here.</li> <li><a href="https://youtu.be/h-lyHuh87P0">The Failed MASTERPIECE That Gave Us Resident Evil 4</a> - Never heard of this game, looks kinda fun.</li> <li><a href="https://youtu.be/pOwwt0dsqlg">Why Classic Games Feel Better</a> - Nothing like a good old video essay about something I agree with.</li> <li><a href="https://youtu.be/VwlNaNW0BGc">The Return of Polished AAA Games</a> - I mostly play old games that released ages ago, but it’s nice when something new comes out that just runs well.</li> </ul> <p> <a href="mailto:me@joelchrono.xyz?subject=PSP gaming and a new ereader - W12">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/116284944577463684">Reply on Fediverse</a> </p> Book Review: If We Cannot Go at the Speed of Light by Kim Choyeop ★★☆☆☆ - Terence Eden’s Blog https://shkspr.mobi/blog/?p=69157 2026-03-24T12:34:27.000Z <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/cover804957-medium.webp" alt="Book cover." width="255" height="408" class="alignleft size-full wp-image-69158"/> <p>Short stories offer you the chance to dip briefly into a world and then skip out so there&#39;s not much time for development; just straight in to the plot and off we go. But this is all exposition and very little action. Rather than let the plots develop naturally, there are just vast passages of infodumping. I&#39;m sad to say this is a rather dreary and insipid collection of stories.</p> <p>Some of the stories start out with an interesting premise but then just fizzle out. There&#39;s a reasonably good idea in &#34;The Materiality of Emotions&#34; which describes people buying little trinkets which induce emotions in them. Again, emotions as drugs is well-worn stuff, but this builds up momentum nicely before suddenly ending.</p> <p>The highlight is &#34;Spectrum&#34; which has some delightful world-building but, like the others, it&#39;s rather derivative of older stories. A woman&#39;s space ship crashes on a strange planet and she tries to befriend the local hominids. You&#39;ve almost certainly read it before.</p> <p>Overall I found it underwhelming.</p> <p>Many thanks to NetGalley for the review copy.</p> Spotting issues in DeFi with dimensional analysis - Trail of Bits Blog https://blog.trailofbits.com/2026/03/24/spotting-issues-in-defi-with-dimensional-analysis/ 2026-03-24T11:00:00.000Z <p>Using dimensional analysis, you can categorically rule out a whole category of logic and arithmetic bugs that plague DeFi formulas. No code changes required, just better reasoning!</p> <p>One of the first lessons in physics is learning to think in terms of <a href="https://en.wikipedia.org/wiki/Dimensional_analysis">dimensions</a>. Physicists can often spot a flawed formula in seconds just by checking whether the dimensions make sense. I once had a teacher who even kept a stamp that said “non-homogeneous formula” for that purpose (and it was used <em>a lot</em> on students’ work). Developers can use the same approach to spot incorrect arithmetic in smart contracts.</p> <p>In this post, we’ll start with the basics of dimensional analysis in physics and then apply the same reasoning to real DeFi formulas. We’ll also show you how this can be implemented in practice, using Reserve Protocol as an example. Along the way, we’ll see why developers need to think explicitly about dimensional safety when writing smart contracts, and why the DeFi ecosystem would benefit from tooling that can automatically catch these classes of bugs. Speaking of which, while putting together this post, we actually built a Claude plugin for this purpose, but we’ll get into the details in a follow-up post.</p> <h2 id="quantities-and-dimensions">Quantities and dimensions</h2> <p>We will start with two formulas:</p> $$\textit{Speed} = \textit{distance} + \textit{time}$$$$\textit{Speed} = \frac{\textit{distance}}{\textit{time}}$$<p>Which of the two formulas is the correct way to calculate the speed of an object? Clearly, it’s the second one, but not just because you’ve memorized the correct formula. The deeper reason lies in <em>dimensions</em>.</p> <p>Physics recognizes <strong>seven fundamental quantities</strong>: length (meters), mass (grams), time (seconds), electric current (amps), thermodynamic temperature (kelvin), amount of substance (moles), and luminous intensity (candela).</p> <p>Every other physical concept, like speed, force, or energy, is a <em>derived quantity</em>, defined in terms of the fundamental ones.</p> <p>For example, this is how speed is defined:</p> $$\textit{Speed} = \textit{distance} / \textit{time}$$<p>And this is how it’s represented in dimensional terms:</p> $$\textit{Speed}\text{(meters/second)} = \frac{\textit{length}\text{ (meters)}}{\textit{time}\text{ (seconds)}}$$<p>The golden rule is simple: <strong>both sides of an equation must have the same dimension.</strong></p> <p>And, just as important, <strong>you can’t add or subtract quantities with different dimensions.</strong></p> <p>So if we reason through the incorrect speed formula in terms of dimensions, we’ll get this:</p> $$\textit{Speed}\text{ (meters/second)} = \frac{\textit{length}\text{ (meters)}}{\textit{time}\text{ (seconds)}} = \textit{length}\text{ (meters)} + \textit{time}\text{ (seconds)}$$<p>This is clearly nonsense. If dimensions could scream, they would. So we can easily say that this formula can’t be used to calculate anything, speed or otherwise.</p> <p>Note that even when dimensions check out, you must still use consistent units!</p> <h2 id="dimensional-thinking-in-defi">Dimensional thinking in DeFi</h2> <p>Now let’s shift the lens. Physics deals with meters, seconds, and kilograms, but DeFi has its own “dimensions”: tokens, prices, liquidity, and so on.</p> <p>Here’s where mistakes start to creep in. Imagine you’re coding <a href="https://docs.uniswap.org/contracts/v2/concepts/protocol-overview/how-uniswap-works">an AMM</a> and you write this:</p> $$K = x + y$$<p>Does that look right? It shouldn’t.</p> <p>Here, x might represent the number of “token A” and y the number of “token B.” Adding them together is just as meaningless as adding distance and time. They’re different dimensions.</p> <p>At this point, you might object: <em>“Wait, this is exactly how Curve Stable Pools work!”</em></p> <p>And you’d be right. But the key is in the name: <strong>stable</strong>. In a stable pool, tokens are designed to maintain near-equal value. Under that assumption, token A and token B are treated as if they were the same “dimension.” This trick makes the formula workable in this special case. But outside of stable pools, blindly adding tokens together is as absurd as writing \(\textit{speed} = \textit{distance} + \textit{time}\). Understanding homogeneous formulas helps you not only find issues but also understand why a formula is structured the way it is.</p> <p>In physics, <strong>speed</strong> is a derived quantity built from the fundamental quantities of <strong>length</strong> and <strong>time</strong>. DeFi has its own derived quantities: <strong>liquidity</strong>, for example, is built from <strong>token balances</strong>.</p> <p>For example, in a Uniswap v3 pool with reserves x and y, liquidity is calculated as follows:</p> $$\textit{Liquidity} = \sqrt{x \cdot y}$$<p>Dimensionally, this calculation looks like this:</p> $$\textit{Liquidity} = \sqrt{[A] \cdot [B]}$$<p>Here, [A] is a dimension that represents the number of token A, and [B] is a dimension that represents the number of token B.</p> <p>On its own, “token A × token B” doesn’t have a direct interpretation, just like “meters × seconds” doesn’t. But within the invariant equation \(k = x \cdot y\), the \(x \cdot y\) part defines a <strong>conserved relationship</strong> that governs swaps.</p> <p>k and the liquidity are not base dimensions; they are derived ones, combining the balances of multiple tokens into a single pool-wide property.</p> <h2 id="why-some-price-formulas-dont-work">Why some price formulas don’t work</h2> <h3 id="example-1">Example 1</h3> <p>Suppose someone writes this incorrect formula in his protocol:</p> $$\textit{Price} = \frac{\text{number of token A}}{\textit{liquidity}}$$<p>We can easily spot the issue with dimensional analysis.</p> <p>This is an example of a correct and straightforward way to define a price:</p> $$\text{Price of B in terms of A} = \frac{\text{amount of A}}{\text{amount of B}} = \frac{[A]}{[B]}$$<p>If the formula \(\textit{Price} = \frac{\text{number of token A}}{\textit{liquidity}}\) were correct, the right side of the equation would have the same dimensions as the correct price definition above.</p> <p>But dimensionally, the right side of the formula is as follows:</p> $$\frac{[A]}{\sqrt{[A] \cdot [B]}} = \frac{\sqrt{[A]} \cdot \sqrt{[A]}}{\sqrt{[A] \cdot [B]}} = \sqrt{\frac{[A]}{[B]}}$$<p>That’s not a price; it’s the <em>square root</em> of a price. The formula produces something, but it’s not a price.</p> <p>Consequently, we have different dimensions on the right and left sides of the formula. This means the formula \(\textit{Price} = \frac{\text{number of token A}}{\textit{liquidity}}\) is incorrect. This is discernible without further knowledge of the DEX.</p> <h3 id="example-2">Example 2</h3> <p>Let’s take another example that is harder to spot without dimensional analysis. Which of these formulas is incorrect?</p> <ol> <li> $$K = (\text{number of token A})^2 \cdot \text{Price of B in terms of A}$$</li> <li> $$K = \frac{(\text{number of token A})^2}{\text{Price of B in terms of A}}$$</li> </ol> <p>Here is a tip: K is often defined as \(\text{number of token A} \cdot \text{number of token B}\) .</p> <p>Dimensionally, this means \(K = [A] \cdot [B]\).</p> <p>Now that we have the dimensions of the left side of the equation, let’s check if one of the two formulas has the same dimensions on the right side.</p> <ol> <li> $$K = [A]^2 \cdot \frac{[A]}{[B]} = \frac{[A]^3}{[B]}$$</li> <li> $$K = \frac{[A]^2}{\frac{[A]}{[B]}} = [A] \cdot [B]$$</li> </ol> <p>So we can see that the first formula can’t be valid, and the second one is dimensionally valid!</p> <h3 id="example-3">Example 3</h3> <p>For an example in a DeFi context, let’s consider a real vulnerability that we identified during the <a href="https://github.com/trailofbits/publications/blob/master/reviews/2025-05-caplabs-coveredagentprotocol-securityreview.pdf">CAP Labs audit</a> (TOB-CAP-17).</p> <figure class="highlight"> <pre tabindex="0" class="chroma"><code class="language-solidity" data-lang="solidity"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nf">price</span><span class="p">(</span><span class="kt">address</span> <span class="n">_asset</span><span class="p">)</span> <span class="k">external</span> <span class="k">view</span> <span class="k">returns</span> <span class="p">(</span><span class="kt">uint256</span> <span class="n">latestAnswer</span><span class="p">,</span> <span class="kt">uint256</span> <span class="n">lastUpdated</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kt">address</span> <span class="n">capToken</span> <span class="o">=</span> <span class="n">IERC4626</span><span class="p">(</span><span class="n">_asset</span><span class="p">).</span><span class="n">asset</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="n">latestAnswer</span><span class="p">,</span> <span class="n">lastUpdated</span><span class="p">)</span> <span class="o">=</span> <span class="n">IOracle</span><span class="p">(</span><span class="nb">msg</span><span class="p">.</span><span class="nb">sender</span><span class="p">).</span><span class="n">getPrice</span><span class="p">(</span><span class="n">capToken</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="kt">uint256</span> <span class="n">capTokenDecimals</span> <span class="o">=</span> <span class="n">IERC20Metadata</span><span class="p">(</span><span class="n">capToken</span><span class="p">).</span><span class="n">decimals</span><span class="p">();</span> </span></span><span class="line"><span class="cl"> <span class="kt">uint256</span> <span class="n">pricePerFullShare</span> <span class="o">=</span> <span class="n">IERC4626</span><span class="p">(</span><span class="n">_asset</span><span class="p">).</span><span class="n">convertToAssets</span><span class="p">(</span><span class="n">capTokenDecimals</span><span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="n">latestAnswer</span> <span class="o">=</span> <span class="n">latestAnswer</span> <span class="o">*</span> <span class="n">pricePerFullShare</span> <span class="o">/</span> <span class="n">capTokenDecimals</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre> <figcaption><span>Figure 1: Price calculation function in CAP</span></figcaption> </figure> <p>ERC-4626 explicitly expects a <a href="https://eips.ethereum.org/EIPS/eip-4626#converttoassets">number of assets as the only input</a> of the <code>convertToAssets</code> function. But the CAP Labs implementation sends decimals! That’s exactly the kind of issue that can be identified with a quick dimensional analysis, even without knowing what the codebase does.</p> <h2 id="real-life-best-practices">Real-life best practices</h2> <p>Some programming languages make dimensional safety a first-class feature. For instance, F# has a “units of measure” system: you can declare a value as <code>float&lt;m/s&gt;</code> or <code>float&lt;USD/token&gt;</code>, and the compiler will reject equations where the units don’t align. It’s enforced at compile time. Solidity lacks this feature, so developers must emulate it through comments and naming conventions.</p> <p>For example, <a href="https://github.com/reserve-protocol/reserve-index-dtf/blob/436cfde284a7e1be4e70c833e037ff1af7316992/contracts/Folio.sol#L573">Reserve Protocol’s</a> unit comments are a textbook best practice. They codify dimensional reasoning in its codebase. All state variables and parameters are annotated with unit comments that define how values relate. This practice enforces that assignments in code must preserve matching dimensions, often with nearby comments showing unit equivalences. In Reserve Protocol contracts, each variable carries a comment like the one shown in figure 2. In this example, the comment indicates that the price is represented as a 27-decimal fixed-point unit of account per token. Because both the dimension (<code>UoA/tok</code>) and the numeric scale (<code>D27</code>) are documented, developers and auditors instantly know what a number represents and how to handle it. This eliminates ambiguity, prevents values with different scales from being mixed, and acts as a guardian against subtle formula bugs.</p> <figure class="highlight"> <pre tabindex="0" class="chroma"><code class="language-solidity" data-lang="solidity"><span class="line"><span class="cl"> <span class="c1">/// Start a new rebalance, ending the currently running auction </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @dev If caller omits old tokens they will be kept in the basket for mint/redeem but skipped in the rebalance </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @dev Note that weights will be _slightly_ stale after the fee supply inflation on a 24h boundary </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param tokens Tokens to rebalance, MUST be unique </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param weights D27{tok/BU} Basket weight ranges for the basket unit definition; cannot be empty [0, 1e54] </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param prices D27{UoA/tok} Prices for each token in terms of the unit of account; cannot be empty (0, 1e45] </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param limits D18{BU/share} Target number of baskets should have at end of rebalance (0, 1e27] </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param auctionLauncherWindow {s} The amount of time the AUCTION_LAUNCHER has to open auctions, can be extended </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="c1">/// @param ttl {s} The amount of time the rebalance is valid for </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kd">function</span> <span class="nf">startRebalance</span><span class="p">(</span></span></span></code></pre> <figcaption><span>Figure 2: Example of a comment explaining the dimension of a price in Reserve Protocol smart contracts</span></figcaption> </figure> <p>This approach is not limited to large or mature protocols. Any smart contract codebase can benefit from explicitly documenting dimensions and units.</p> <p>Developers should treat dimensional annotations as part of the protocol’s safety model rather than as optional documentation. Clearly labeling whether a variable represents tokens, prices, liquidity shares, or fixed-point scaled values makes code easier to review, safer to modify, and significantly simpler to audit.</p> <p>When designing a dimensional annotation system, a few general principles can help:</p> <ul> <li><strong>Make dimensions explicit and consistent.</strong> Decide early how dimensions will be represented (for example, <code>tok</code>, <code>UoA</code>, <code>shares</code>, etc.) and apply the convention uniformly across the codebase.</li> <li><strong>Always document scale together with dimension.</strong> In DeFi, mismatched decimals are often as dangerous as mismatched dimensions. Including fixed-point precision (such as <code>D18</code> or <code>D27</code>) alongside dimensional annotations removes ambiguity.</li> <li><strong>Annotate inputs, outputs, and state variables.</strong> Dimension safety breaks down if only storage variables are documented, but function parameters and return values are not.</li> <li><strong>Prefer clarity over brevity.</strong> Slightly longer variable names or comments are far cheaper than subtle arithmetic bugs.</li> <li><strong>Document conversions explicitly.</strong> Whenever values change dimension or scale (for example, shares to assets or tokens to unit of account), adding a short comment explaining the transformation greatly improves auditability.</li> </ul> <p>These conventions require discipline, but they improve dimensional safety in a language that does not natively support it.</p> <h2 id="toward-dimensional-safety-in-solidity">Toward dimensional safety in Solidity</h2> <p>We&rsquo;ve taken a first step toward automating this kind of analysis with a Claude plugin for dimensional checking, which we&rsquo;ll introduce in a follow-up post. Beyond that, the ecosystem would benefit from deeper static analysis tooling that blends the semantic capabilities of LLMs. For example, a Slither-based linting or static analysis tool for Solidity could completely infer, propagate, and check “units” and “dimensions” across a codebase, flagging mismatches in the same way that Solidity warns about most incompatible types.</p> <p>In the meantime, document your protocol’s dimensions and decimals: note in comments what each variable represents, and be explicit about the scale and units of every stored or computed value. These small habits will make your formulas more readable, auditable, and robust.</p> <p>And try out our new Claude plugin for dimensional analysis when it’s available. Look out for more info in our next post.</p> 22.00.0190 Decimal Diary: Happy 1st birthday to the SBS - Johnny.Decimal https://johnnydecimal.com/22.00.0190/ 2026-03-24T09:01:22.000Z <h1 id="happy-1st-birthday-to-the-sbs">Happy 1st birthday to the SBS</h1> <blockquote> <p>Today&#39;s blog is a guest post by Lucy.</p> </blockquote> <p>I&#39;ve been thinking a lot about &#39;this time last year&#39;. It was a period of upheaval for us, but also of huge productivity.</p> <p>We were madly selling everything we owned on <a href="https://www.gumtree.com">Gumtree</a> and getting ready to move out of our home of 5 years. And we&#39;d set a hard deadline that the <a href="https://johnnydecimal.com/10-19-concepts/15-patterns-templates/15.04-small-business-system/">Small Business System</a> (SBS) had to be released by the end of March.</p> <p>A year ago, I was buried in a looong document. For reasons, this was also a very sad time. And while it sounds cliched (and I&#39;m no workaholic), I was grateful to have work to bury myself in. Johnny was nearby figuring out the code to make a website with a login.<sup><a href="#user-content-fn-las" id="user-content-fnref-las" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup> I&#39;m pretty sure I saw steam coming out of his laptop from time to time.</p> <p>Break to stand at the whiteboard and discuss something. Write more words. Break to pack a moving box. Write more code. Break to run outside and help the buyer of our pot plants load them into a trailer. Back to the whiteboard. And so it continued.</p> <p>In a nutshell, here&#39;s how we made it.</p> <h2 id="the-process">The process</h2> <p>We followed our own advice and stuck to the process in the <a href="https://jdcm.al/22.00.0148/">Workbook</a>/<a href="https://johnnydecimal.com/10-19-concepts/14-build-your-system/14.03-workshop/">Workshop</a>.</p> <h3 id="scope">Scope</h3> <p>Our scope statement was basically &quot;try to think of everything a small business has to do&quot;. We drew on our combined 40+ years of experience and also tested our ideas on a list of about 20 different business types. We defined a small business as fewer than 10 people, roughly.</p> <h3 id="discovery">Discovery</h3> <p>I opened the first of many blank mind maps and started reading different business and tax websites from the Australian Government. I pulled out keywords on anything to do with starting a small business.</p> <p>Then I reviewed:</p> <ul> <li>Everything in my archived filesystems from when I was a freelancer (Johnny did the same).</li> <li>Everything in the Johnny.Decimal business filesystem and JDex.</li> <li>Some filesystems and feedback from real small businesses in the US and New Zealand.<sup><a href="#user-content-fn-filesystems" id="user-content-fnref-filesystems" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></li> </ul> <p>I wrote down as many things as possible. I sat and thought. I walked and thought. I went down many research rabbit holes. I printed out a 20-page business plan template, stuck it to a wall, and stared at it many times a day. This went on for a few weeks.</p> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A photograph of our old lounge room wall. There are 20 sheets of printed business plan template stuck to it." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190A-Business_plan_on_wall--800x1067.jpg" width="800" height="1067"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190A. An inspirational government business plan template on our wall.</figcaption> </picture> <h3 id="creating-areas-and-categories">Creating areas and categories</h3> <p>Then it was time to start grouping the &#39;discoveries&#39; into areas and categories. And having Big Discussions with Johnny at the whiteboard. During this time, we also got up at 5am every day for Big Discussion Walks around our neighbourhood with mugs of coffee.</p> <p>The mind map began to take shape and grow.</p> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A mind map. It's very busy and 'zoomed out' so no details are discernable." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190B-Mind_map--800x1398.png" width="800" height="1398"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190B. The SBS areas and categories in progress.</figcaption> </picture> <h3 id="building-the-system">Building the system</h3> <p>This was a very collaborative process and Johnny spent a lot of time riding the whiteboard:</p> <ul> <li>I took notes, photos, and audio recordings of our conversations.</li> <li>We named the IDs and wrote the descriptions.</li> <li>We numbered the IDs only after much consideration.</li> <li>Then I wrote the supporting words for each ID.</li> </ul> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A photo of a whiteboard. It's messy, with scribbles and boxes and arrows." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190C-Whiteboard_finance--800x600.jpg" width="800" height="600"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190C. Figuring out the finance category.</figcaption> </picture> <p>ID by ID, we began at the beginning and kept going until we reached the end. There were several rounds of review and feedback on mind maps and my master document.</p> <p>When the content was &#39;approved&#39;, I pasted it into hundreds of text files to become the website. More rounds of review of the website followed. By the end, we were both quite batty and delirious.</p> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A photo of my desk on a Friday evening. The late-day sun lights the scene. On the desk is a gin martini." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190D-Friday_evening--800x600.jpg" width="800" height="600"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190D. Putting Johnny&#39;s feedback and other edits into the master document with a Friday-evening martini.</figcaption> </picture> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A photo of some papers lined up on a desk." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190E-Proofing--800x1067.jpg" width="800" height="600"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190E. Proofreading the master document at the kitchen table before turning it into the website.</figcaption> </picture> <h2 id="final-stats">Final stats</h2> <p>A quick review of our archived files shows:</p> <ul> <li>Our new system had 5 areas, 21 categories, and 344 IDs.<sup><a href="#user-content-fn-system" id="user-content-fnref-system" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup></li> <li>There were 13 research and planning mind maps.</li> <li>The master document had 342 pages and 46,309 words (written in Markdown).</li> <li>Johnny had written 13,000 lines of code.</li> <li>The project lasted 6 months, from September 2024 to March 2025.</li> </ul> <p>We also did a sticker mailout to the first 100 people around the world who bought the system before it was released. Thank you for trusting us!</p> <picture class="JDImage6 astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (min-width: 600px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: light) and (max-width: 599px)" class="astro-3zw7efbj"> <source media="(prefers-color-scheme: dark) and (max-width: 599px)" class="astro-3zw7efbj"> <img alt="A photo of our sticker on the back of a laptop. It's in the shape of an airplane's tail fin. The aircraft's registration is JD-CML." class=" astro-3zw7efbj" loading="lazy" src="https://johnnydecimal.com/img/v6/22.00.0190F-Sticker--800x600.jpg" width="800" height="600"> <figcaption class="astro-3zw7efbj">Figure 22.00.0190F. The pre-release sticker (Johnny loves planes) – we&#39;re still repping ours.</figcaption> </picture> <p>Everything related to this project was made with sweat, tears, and love by two humans.</p> <h2 id="what-now">What now</h2> <p>We&#39;re really happy that we made this system. We&#39;d talked about making <em>something</em> for small business for ages, we just weren&#39;t sure where to begin. We spend all day in ours and we hope it&#39;s helped other businesses feel more organised.</p> <p>We have ideas for improvements and welcome <a href="mailto:hello@johnnydecimal.com">feedback</a>. In the meantime, there&#39;s a new <a href="https://www.youtube.com/playlist?list=PLtBN5zRaar6qyr3N_5R839uHpkoBAK3m6">YouTube playlist</a> for videos on how Johnny uses the SBS.</p> <p>And, finally, a special shoutout to <a href="https://en.wikipedia.org/wiki/Platinum_Collection_(Genesis_album)">Genesis</a> and the inventor of the <a href="https://en.wikipedia.org/wiki/Martini_(cocktail)">martini</a>, without whom this project would not have been possible.</p> <section data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2> <ol> <li id="user-content-fn-las"> <p>Versus a one-off download and PDF from Shopify as per the Life Admin System v1.0. <a href="#user-content-fnref-las" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p> </li> <li id="user-content-fn-filesystems"> <p>Thank you Dan from <a href="https://www.paparonis.com">Paparonis</a>, Des from <a href="https://datum-cnc.com">Datum Machines</a>, and Jeff from <a href="https://lovettsundries.com">Lovett Sundries</a>. And any other Decimals who were in touch on the forum, Discord, or email. 😊 <a href="#user-content-fnref-filesystems" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩</a></p> </li> <li id="user-content-fn-system"> <p>Not including all the standard zeros throughout. <a href="#user-content-fnref-system" data-footnote-backref="" aria-label="Back to reference 3" class="data-footnote-backref">↩</a></p> </li> </ol> </section> Tread carefully, because you tread on my fucks. - Westenberg 69c2216ccb8111000161ee7c 2026-03-24T05:33:06.000Z <div class="kg-card kg-cta-card kg-cta-bg-grey kg-cta-minimal " data-layout="minimal"> <div class="kg-cta-content"> <div class="kg-cta-content-inner"> <div class="kg-cta-text"> <img src="https://images.unsplash.com/photo-1472566316349-bce77aa2a778?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDIwNnx8YmxhY2slMjBhbmQlMjB3aGl0ZXxlbnwwfHx8fDE3NzQzMzAzMzd8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Tread carefully, because you tread on my fucks."><p><span style="white-space: pre-wrap;">This newsletter is free to read, and it&#x2019;ll stay that way. But if you want more - extra posts each month, access to the community, and a direct line to ask me things - paid subscriptions are $2.50/month. A lot of people have told me it&#x2019;s worth it. </span></p> </div> <a href="https://www.joanwestenberg.com/#/portal/signup/69328a08ef56a90001ae60df/monthly" class="kg-cta-button " style="background-color: #000000; color: #ffffff;"> Upgrade </a> </div> </div> </div><p>On any given day, I have roughly 5 or so fucks to give. </p><p>Before anyone takes that as a confession of total selfishness, I want to be precise about what I mean.</p><p>I wake up each morning with a finite quantity of moral and emotional attention. That quantity isn&#x2019;t replenishable on demand by any external urgency, by any movement, by any poster on any social media platform. By the time I&#x2019;ve spent however many fucks on my own anxieties, my own work, my own relationships, my own family, my own half-articulated and variously grasping fears about the future - there is precious little left over for the existential dread and the exhortations for me to &#x201C;not look away&#x201D; that keep arriving in my feed with all their attached moral instruction.</p><p>When I scroll past your doom posting, your thread about how everything is bad and the world is full of horrors, your viral images, your statistics, I&#x2019;m not making a statement about how important the things you give a fuck about actually are in the real world.</p><p>But I&#x2019;m already living on the edge of a nervous system that&#x2019;s already fully deployed, and no amount of public shaming or insistence has ever - or will ever - expand my capacity by a single unit.</p><p>Various online activists will insist that this makes me complicit // part of the problem. A bystander, by which I mean a Bad Person&#x2122;&#xFE0F; in the modern sense of someone who has access to information and does not perform the &#x201C;correct&#x201D; response. That accusation assumes that moral concern, panic, fear, depression, hopelessness, outrage, disgust etc are a matter of will, and that people who aren&#x2019;t experiencing any // all of those emotions simply need more social pressure.</p><p>This is not a reasonable position.</p><p>Herbert Simon described this in 1971; and it was already a structural problem long before the internet turned it into the moral emergency of our time. &#x201C;A wealth of information,&#x201D; Simon wrote, &quot;creates a poverty of attention.&quot; And he was right - attention is a finite resource, becoming increasingly scarce. Any system that actively increases the supply of information while failing to increase the supply of attention is doing nothing more than performing an act of brutal. Social media floods every channel with call after call for moral attention. Each cause is real, each crisis is urgent, and each demand comes with the implicit claim that id deserves priority over anything and everything else occupying your heart // mind // time.</p><p>Well I have news for you.</p><p>When everything is urgent, urgency ceases to function as a signal of any worth.</p><p>Adam Smith worked through this in 1759, in &#x201C;The Theory of Moral Sentiments.&#x201D; In a passage that still makes good folks uncomfortable (and of course, you and I are good folks) he describes a man in Europe who, upon hearing that a hundred thousand people have died in an earthquake in China, expresses his sympathy and then sleeps just fine.</p><p>The point: sympathy is a psychological mechanism with operational limits. It works best at close range, and it diminishes with distance, whether that distance is geographical, relational or a function of how much shit one has on one&#x2019;s plate at any given time.</p><p>Robin Dunbar&#x2019;s research on social cognition puts a sort of a rough number on it: we are neurologically equipped to maintain meaningful relationships with max 150 people. The internet&#x2019;s scale and convenience does not dissolve or expand this limit. Viral, trending, excessively hashtagged suffering produces a numbness that can only be called compassion fatigue. You&#x2019;re not connected to everyone, but you&#x2019;re exposed to them, and you&#x2019;re exposed to their pain, and you&#x2019;re exposed to their pain about each others&#x2019; pain, and your nervous system is handling that the best it can - by rationing.</p><p>All of which is to say: my limited, five give-able fucks are not a moral failing. They are a strict and damn-near non-negotiable biological budget. I can do my best to expand that budget. I will do my best. But I will always find a limit. And however much you posture or pose or insist otherwise, so will you.</p><p>David Foster Wallace described attention as the primary moral capacity; the thing that lets you choose what to notice and how to interpret it instead of running on the default settings installed by circumstance and habit. Genuine attention is exhausting to sustain and has to be chosen, actively, against the pull of everything designed to capture it without your consent. He died in 2008, before the decade that would build platforms specifically engineered to interrupt and redirect attention hundreds of times daily, making chosen and sustained attention harder to achieve exactly as more people were demanding it be directed at more things at once. I think about his framing a lot when I&apos;m deciding where my five fucks go. I try to spend them on things where my attention actually does something. I don&#x2019;t always succeed.</p><p>Tocqueville called it individualism in the democratic sense: the tendency of people in free societies to withdraw into their small circles, absorbed in private concerns, disengaged from the larger civic life that democracy depends on. He thought civic institutions were the corrective, that the way to pull people out of private absorption was to give them something to join and do together. What he identified as a structural vulnerability, the contemporary internet has industrialized. The feeds maximize private absorption in content that generates engagement, and then the people running causes that need public support are left competing for attention in an environment built entirely around incentives that have nothing to do with their goals, and wondering why no one shows up.</p><p>My five fucks are mine. Biology gave them to me and circumstance has depleted them, and I spend them according to priorities I&apos;ve developed over a life nobody else has lived. The snarking sniper on Threads cataloguing my failure as a moral agent hasn&#x2019;t audited what all else my fucks paid for today. They have no idea what&#x2019;s sitting in the background of my nervous system at 11pm when I finally have time to scroll the feed, and they don&#x2019;t know what weight I&#x2019;m carrying. Their contempt, and their demands, however confident, have never once manufactured capacity to give a damn in someone who had already reached their limit.</p><p>I get the urgency.</p><p>I get your cause.</p><p>I get why you care.</p><p>But my limits are real, and they are fundamentally not a moral position. They&#x2019;re a fact of my human limitations. I can accept that. You must, too.</p> I built a CLI for Ghost - Werd I/O 69c11c7d8a9de30001523e9d 2026-03-23T10:57:01.000Z <p>[<a href="https://john.onolan.org/i-built-a-cli-for-ghost/?ref=werd.io">John O&apos;Nolan</a>]</p><p>One of the most fascinating things about the AI transformation is how quickly it&#x2019;s pushed against the siloed model of web applications (not to mention mobile apps!) we&#x2019;ve been used to for decades now. Claude Cowork and systems like OpenClaw use the inherent connectedness of our desktop computers to get stuff done. Command lines, the UNIX philosophy, and the openness of the filesystem itself are all plusses again.</p><p>Ghost&#x2019;s founder John O&#x2019;Nolan built a CLI for his platform &#x2014; a UI that he probably knows better than anyone else on the planet &#x2014; and found that it sped him up in ways he wasn&#x2019;t expecting:</p><blockquote>&#x201C;[&#x2026;] Within about ~1hr of using Ghost via Claude/CLI, it was hard to imagine going back to caveman-clicking around a browser to get something done. [&#x2026;] I know Ghost&#x2019;s UI extremely well, and know exactly where to go and what to click to do the thing I want &#x2013; and even for me, using Claude is significantly faster/easier than clicking myself.&#x201D;</blockquote><p>A fun thing about this is that an update that&#x2019;s aimed at making AI use faster and easier is also potentially very useful for humans that don&#x2019;t want anything to do with AI. A command-line interface can be used to script updates, connect with other systems, and integrate in ways that just aren&#x2019;t as easy if you&#x2019;re limited to a web UI.</p><p>For AI users, CLI tools are turning out to be more token-efficient than AI-native integrations like MCP. (And even MCP is encouraging every service to build an API at an accelerated rate.) For someone who has advocated for open systems with easy off-ramps for your data for decades, it&#x2019;s slightly surreal. Suddenly what might have seemed like a niche thing to want to do is the mainstream, hottest thing in tech. It&#x2019;s Web 2.0 mashups all over again &#x2014; but on steroids.</p><p>Everything AI can do, a human can do too. There&#x2019;s no reason in the world why a non-AI system couldn&#x2019;t use MCP. There&#x2019;s <em>certainly</em> no reason why they couldn&#x2019;t use a command-line interface, one of the most venerable user experiences in computing. Whatever you might think about LLMs themselves, this is quite a lovely thing.</p><p>[<a href="https://john.onolan.org/i-built-a-cli-for-ghost/?ref=werd.io">Link</a>]</p> Earth being ‘pushed beyond its limits’ as energy imbalance reaches record high - Werd I/O 69c1174e8a9de30001523e97 2026-03-23T10:34:54.000Z <p>[<a href="https://www.theguardian.com/environment/2026/mar/23/earth-being-pushed-beyond-its-limits-as-energy-imbalance-reaches-record-high?ref=werd.io">Jonathan Watts in The Guardian</a>]</p><p>My mental model is that a lot of what&#x2019;s happening in the world right now is driven by this:</p><blockquote>&#x201C;The United Nations body confirmed 2015 to 2025 were the hottest 11 years ever measured, but a still bleaker message was that the rising temperature experienced by humans on the surface was only 1% of the faster-accumulating heat in the wider Earth system.<br><br>More than 90% of that excess is absorbed by the oceans, which experienced the <a href="https://www.theguardian.com/environment/2026/mar/04/global-sea-levels-underestimated-poor-modelling-research?ref=werd.io">highest heat content in history last year</a>. The rate of ocean warming has more than doubled over the past two decades, compared with the average over the previous 45 years.&#x201D;</blockquote><p>We&#x2019;ve been experiencing the tip of the iceberg and making policy based on that, while the oceans have been absorbing the vast majority of the heat difference. That heat will continue to radiate back to us, committing us to more warming even if we drastically change now.</p><p>The result is inevitably fewer resources. Fewer livable areas on Earth, plus agricultural upheaval, lead to increased migration, more competition for less land, less food, and, as an obvious outcome, more conflict. For those that seek to maintain control over resources, authoritarian governments are an easier path: a rigidly-controlled population is easier to keep in line. When we could be co-operating and building more equitable societies to deal with the crisis in collaboration with each other, many of the very wealthiest are encouraging the opposite in order to shore up their own positions.</p><p>You can see it in right-wing governments moving away from renewable energy back to fossil fuels; in erosion of democratic norms; in backlashes to equity and inclusion policies that could lead to more equity and collaboration; in the surprising embrace by politicians of end times rhetoric from religious extremists. And you can see it in some of the very wealthiest buying land in places like New Zealand where they can maintain their own control and safety.</p><p>We can still say no. There are people on the ground who are fighting for something better. Activists &#x2014; often from vulnerable communities that have the most to lose &#x2014; are showing the way. I hope that we can demand the more equitable societies that will bring more of us through the crisis and allow us to get through it together by sharing resources and working on science-based solutions. But there&#x2019;s a window of opportunity, and it won&#x2019;t stay open forever.</p><p>[<a href="https://www.theguardian.com/environment/2026/mar/23/earth-being-pushed-beyond-its-limits-as-energy-imbalance-reaches-record-high?ref=werd.io">Link</a>]</p> "Collaboration" is bullshit. - Westenberg 69bfbc34cb8111000161bb77 2026-03-22T23:31:25.000Z <div class="kg-card kg-cta-card kg-cta-bg-grey kg-cta-minimal " data-layout="minimal"> <div class="kg-cta-content"> <div class="kg-cta-content-inner"> <div class="kg-cta-text"> <img src="https://www.joanwestenberg.com/content/images/2026/03/W-Insight-1-HT-Jan11-e1666985964510-2688358860.jpg" alt="&quot;Collaboration&quot; is bullshit."><p><span style="white-space: pre-wrap;">This newsletter is free to read, and it&#x2019;ll stay that way. But if you want more - extra posts each month, access to the community, and a direct line to ask me things - paid subscriptions are $2.50/month. A lot of people have told me it&#x2019;s worth it. </span></p> </div> <a href="https://www.joanwestenberg.com/#/portal/signup/69328a08ef56a90001ae60df/monthly" class="kg-cta-button " style="background-color: #000000; color: #ffffff;"> Upgrade </a> </div> </div> </div> <p>In 1944, the Wehrmacht launched into Hitler&#x2019;s last ditch effort to save the Third Reich. The Battle of the Bulge was a doomed campaign and a doomed gamble from a doomed regime, but its brutality was a true second test of the US Army on the Western Front. During the battle, Army historian S.L.A Marshall began interviewing infantry companies who&#x2019;d been baptised in combat. Published 3 years later in his 1947 book, Men Against Fire, Marshall&#x2019;s research showed that just 15-20% of riflemen in active combat positions ever fired their weapons - most kept their heads down. They moved when they were ordered and they held their positions, and they mimicked the outward appearance of a soldier in battle - but shoot, they did not. By any standard organisational metric, the men were present and accounted for, but 4 out of 5 never pulled the trigger.&#xA0;</p><p>You can debate the extent of Marshall&#x2019;s numbers, and you can debate his methodology, but his ratio shows up, again and again. IBM stumbled onto it in the &#x2018;60s when they discovered that 80% of computer usage came from 20% of the system&#x2019;s features. The pattern recurs because it describes something real about how effort is distributed inside groups, where a fraction of the people do most of the work, and the rest provide what you might ~charitably call &#x201C;structural support.&#x201D;</p><p>Anyone who has worked in any large organisation knows exactly what I&#x2019;m talking about.&#xA0;</p><p>The modern tech industry looked at the problem of human coordination and participation and decided the solution was &#x201C;collaboration.&#x201D; If only 20% of us are operating with a &#x201C;killer instinct&#x201D; we need to be better at managing the shared instincts of the other 80%. And so collaboration became our shared obsession. We pursue &#x201C;teamwork&#x201D; as a holy grail.&#xA0;</p><p>The teamwork revolution, if you can call it that, gave us Notion for our documents, ClickUp for our tasks, Slack for our conversations, Jira for our tickets, Monday for our boards, Teams for the calls that should been emails, emails for the things that we couldn&#x2019;t squeeze in anywhere else, and now agents attempting to re-invent the whole stack. The average knowledge worker maintains accounts across system after system, switching between applications hundreds of times per day. And they produce, in aggregate, a staggering amount of coordinated and collaborative activity that never actually becomes anything resembling ~output.&#xA0;</p><p>When you strip away the product marketing and the dev relations and the blog posts and the funding rounds and the fuckery-upon-fuckery of it all, we&#x2019;re left with a simulation of collective engagement - but very little else. Transparency got confused with progress, visibility got confused with accountability, and being included in the thread became the same thing, socially and organizationally, as owning the outcome.</p><p>Once that confusion set in at the cultural level it became nearly impossible to dislodge. The feeling of collaboration is pleasant in a way that personal accountability can never be. Owning something means you, specifically and visibly you, can fail at it, specifically and visibly, in ways that attach to your name.</p><p>Collaborating means the failure belongs to the process. </p><p>So everyone chose collaboration, and we called it culture.</p><p>Marshall&apos;s riflemen were ordinary people responding to the diffusion of responsibility that happens inside any group. Maximilien Ringelmann measured the same phenomenon with ropes in 1913, long before there were Slack workspaces to offer an emoji-react to it. Individual effort drops predictably as group size increases. The presence of others dissolves the sense of personal responsibility in a way that feels, to everyone experiencing it, entirely reasonable. You&apos;re part of a team, you&apos;re contributing, you&apos;re also (measurably) pulling less hard than you would if the rope were yours alone. Every single person on the rope is doing this simultaneously, which is why the total force never adds up the way the headcount says it should.</p><p>Frederick Brooks identified the same dynamic in software development in 1975, watching IBM&apos;s System/360 project illustrate his emerging thesis that adding people to a late project makes it later. Communication overhead grows faster than headcount, coordination costs compound, and every new person contributes their capacity along with their relationships to everyone else. Those relationships require maintenance and produce misalignment and generate the need for more meetings to address the misalignment those meetings created.</p><p>Brooks might as well have described your company&apos;s Q3 roadmap planning cycle and your startup&apos;s sprint retrospective, all of which have gotten longer every year and produced, relative to their investment, less.</p><p>The collaboration industry has spent a fortune obscuring a dirty truth: most complex, high-quality work is done by individuals or very small groups operating with clear authority and sharp accountability, then rationalized into the language of teamwork afterward. Dostoevsky wrote _The Brothers Karamazov_ alone. The Apollo Guidance Computer came from a team at MIT small enough to have real ownership, hierarchical enough that Margaret Hamilton&apos;s name could go on the error-detection routines she personally designed.</p><p>Communication matters, and shared context matters. But there&#x2019;s a huge difference between communication and collaboration as infrastructure to support individual, high-agency ownership, and communication and collaboration as the primary activity of an organisation. Which, if we&#x2019;re honest, is what most collaboration-first cultures have actually built. They&#x2019;ve constructed extraordinarily sophisticated machinery for the social management of work, without actually doing the work they&#x2019;re socialising about.&#xA0;</p><p>If and when it exists, ownership looks like an individual who deeply gives a shit, making a call without waiting for group-consensus. That individual will be right sometimes, and they&#x2019;ll be wrong other times, and they&#x2019;ll own it. They won&#x2019;t sit around waiting to find out who has the authority to move a card from one column to another and post about it in the #celebrations&#xA0; channel.&#xA0;</p><p>But being that person sucks when &#x201C;collaboration&#x201D; is the reigning value, because every unilateral decision gets read as a cultural violation and a signal that you aren&#x2019;t a team player. Collaboration-as-ideology has made ownership and responsibility feel antisocial, which is a hell of a thing, given that ownership is the only mechanism that gets anything across the finish line.&#xA0;</p><p>You can see this excess everywhere. Standups where people announce their busy work and as long as everyone&#x2019;s &#x201C;on the same page&#x201D; nobody changes course. Documents that are written to perform thinking so somebody else can perform thinking, with no decision in sight. Retros, and kickoffs, and WIP meetings that spawn their own retros, kickoffs and WIP meetings like cells dividing and re-dividing, with zero connection to the work that it&#x2019;s nominally organising around.&#xA0;</p><p>Every project now seems to carry more coordination overhead than execution time, and when it fails the postmortem just recommends more collaboration...</p><p>At some point (and I think that point was fucking yesterday) we have to ask ourselves - what are we actually producing and who is actually responsible for producing it?&#xA0;</p><p>Because at some level, the answer for &#x201C;who is responsible for X&#x201D; has to be one single person, no matter how much the collaborative apparatus layered over modern work has been engineered to make that person invisible and dissolve accountability.&#xA0;</p><p>We need to find some path back to trusting that individuals will do their jobs, without every responsibility being visible to an entire organisation, without follow-ups being scheduled by a cadre of overpaid managers with their overfed metrics.&#xA0;</p><p>Maybe - just maybe - we could make our lives a little easier. Maybe we could let human beings keep their own lists of tasks, and we could let them sink or swim by how they manage those tasks, and we could assign blame to them and to them alone when they fuck up. Maybe we could do it without needing to have team-level views of every Kanban, calendar and task list. And maybe - if we let go of the warm, expensive fiction of collective endeavour - we could make it a little easier to see who among us are pulling the trigger and who are just keeping their heads down.&#xA0;</p> Note published on March 22, 2026 at 10:29 PM UTC - Molly White's activity feed 69c06d491d030f7313bd0d64 2026-03-22T22:29:29.000Z <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>the great pierogiing</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/d364ccdf3c6d9b2bf7f2_pierogi.jpg" data-fslightbox=bc6050352cd291576308><img src="https://storage.mollywhite.net/micro/d364ccdf3c6d9b2bf7f2_pierogi.jpg" alt="three half-sheet pans filled with 100+ pierogi" /></a></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202603221828"><time class="dt-published" datetime="2026-03-22T22:29:29+00:00" title="March 22, 2026 at 10:29 PM UTC">March 22, 2026 at 10:29 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/116275188356601562" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mholq2k7322k" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/cooking" title="See all micro posts tagged "cooking"" rel="category tag">cooking</a>. </div></div></footer></div></article> Histomat of F/OSS: We should reclaim LLMs, not reject them - Werd I/O 69c00e518a9de30001523e90 2026-03-22T15:44:17.000Z <p>[<a href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/?ref=werd.io">Hong Minhee</a>]</p><p>This is very close to how I feel:</p><blockquote>&#x201C;I want my code to be used for LLM training. What I don&apos;t want is for that training to produce proprietary models that become the exclusive property of AI corporations. The problem isn&apos;t the technology or even the training process itself. The problem is the enclosure of the commons, the privatization of collective knowledge, the one-way flow of value from the many to the few.<br><br>[&#x2026;] The question is: who owns the models? Who benefits from the commons that trained them? If millions of F/OSS developers contributed their code to the public domain, should the resulting models be proprietary?&#x201D;</blockquote><p>The problem with LLMs, in my mind, isn&#x2019;t that they exist to begin with. They&#x2019;re genuinely useful. It&#x2019;s an issue of power dynamics and consent. Training material shouldn&#x2019;t be taken from creators without their knowledge or participation; the resulting models should not be owned by a small number of wealthy corporations instead of a collectively by the people who put their work and creativity into them.</p><p>Rather than pretending that LLMs will go away and we&#x2019;ll revert to a pre-AI state of being, what would it look like for these things to be built and run equitably and sustainably?</p><p>I&#x2019;m inspired by <a href="https://ethz.ch/en/news-and-events/eth-news/news/2025/09/press-release-apertus-a-fully-open-transparent-multilingual-language-model.html?ref=werd.io">ETH&#x2019;s Apertus model</a> &#x2014; a fully open, multilingual LLM that is built with shared openness and representation in mind. More will likely follow (and I&#x2019;m beginning to hear similar stories in specific fields like journalism). Can that be part of our future? Possibly, and the first step is not necessarily rejecting AI but rejecting how it&#x2019;s run today. Software, as we&#x2019;ve learned, is best built for the people, and open has historically won eventually. Open, consensual models will almost certainly win too.</p><p>[<a href="https://writings.hongminhee.org/2026/01/histomat-foss-llm/?ref=werd.io">Link</a>]</p> Ageless Linux - Werd I/O 69bfed928a9de30001523e8a 2026-03-22T13:24:34.000Z <p>[<a href="https://agelesslinux.org/index.html?ref=werd.io">Ageless Linux</a>]</p><p>Ageless Linux is an act of open source activism designed to take the issue of age verification to the courts. I love it.</p><p>As lots of people have noted, while age verification laws are ostensibly being proposed to protect children, they create an authentication layer that deanonymizes the internet. The effect is a surveillance layer that will both chill speech and disproportionately harm vulnerable communities by requiring people who may already be targeted by conservative governments to fully reveal their identities.</p><p><a href="https://www.techdirt.com/2026/03/20/rep-finke-was-right-age-gating-isnt-about-kids-its-about-control/?ref=werd.io">As Rindala Alajaji and Molly Buckley wrote in Techdirt recently</a>:</p><blockquote>&#x201C;The coalition of organizations that filed amicus briefs in support of Texas&#x2019;s age verification law tells us everything we need to know about the true intentions behind legislating access to information online: censorship, surveillance, and control. After all, if the race to age-gate the internet was purely about child safety, we would expect its strongest supporters to be child-development experts or privacy advocates. Instead, the loudest advocates are organizations dedicated to policing sexuality, attacking LGBTQ+ folks and reproductive rights, and censoring anything that doesn&#x2019;t fit within their worldview.&#x201D;</blockquote><p>Enter <a href="https://agelesslinux.org/index.html?ref=werd.io">Ageless Linux</a>, which makes its position clear as it describes <a href="https://agelesslinux.org/hardware.html?ref=werd.io">its hardware product</a>:</p><blockquote>&#x201C;A physical computing device designed to satisfy every element of the California Digital Age Assurance Act&apos;s regulatory scope while deliberately refusing to comply with its requirements. The device costs less than lunch and will be handed to children.&#x201C;</blockquote><p>The site maintains <a href="https://agelesslinux.org/map.html?ref=werd.io">a list of age verification laws they are violating</a>, as well as states that have proposed laws that they <em>would</em> violate. It&#x2019;s sobering: these aren&#x2019;t just the usual suspects (although that would be bad enough in itself, of course). <em>California</em> has a pending law that <em>will</em> take effect in 2027. New York and Illinois have laws under discussion.</p><p>The named contact at the bottom of the site, John McCardle, <a href="https://kn4obl.net/ageless-linux.html?ref=werd.io">has an explanatory blog post</a>, where he concludes:</p><blockquote>&#x201C;Since the California AG can charge me $7,500 per child that uses my OS, I may need to lawyer up. If you&apos;d like to give me some money, I&apos;d appreciate <a href="https://www.patreon.com/JohnMcCardleSoldersAndHacks?ref=werd.io">support on Patreon</a>.&#x201D;</blockquote><p><a href="https://mikegodwin.substack.com/p/from-the-archive-the-day-the-first?ref=werd.io">Mike Godwin has published a riveting post about the unraveling of the Communications Decency Act in the nineties</a>. I hope these laws, which are cut from the same ideological cloth, suffer the same fate. Perhaps efforts like Ageless Linux can be part of the road to get there.</p><p>[<a href="https://agelesslinux.org/index.html?ref=werd.io">Link</a>]</p> Bored of eating your own dogfood? Try smelling your own farts! - Terence Eden’s Blog https://shkspr.mobi/blog/?p=63957 2026-03-22T12:34:07.000Z <p>I called a large company the other day. Did I know the information I wanted could be found on their website?<sup id="fnref:no"><a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fn:no" class="footnote-ref" title="It couldn&#39;t!" role="doc-noteref">0</a></sup> And was I aware that I could manage my account online?<sup id="fnref:cancel"><a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fn:cancel" class="footnote-ref" title="Not if I wanted to cancel." role="doc-noteref">1</a></sup> And would I like to receive a link to chat with their AI assistant via WhatsApp?<sup id="fnref:sick"><a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fn:sick" class="footnote-ref" title="I&#39;d rather stick my head in a bucket of lukewarm sick!" role="doc-noteref">2</a></sup></p> <p>Naturally, call volumes were higher than expected. I can only assume that whoever was in charge of predicting call volumes had recent suffered a traumatic brain injury and was unable to count beyond five without pulling their other hand out of their fundament.</p> <p>The cheerful woman warbled through her pre-recorded script and was suddenly replaced with a hideous electronic monstrosity. I recorded the call<sup id="fnref:rec"><a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fn:rec" class="footnote-ref" title="For training and monitoring purposes, of course!" role="doc-noteref">3</a></sup> so that you can experience this monument to synthetic glory!</p> <p></p><figure class="audio"> <figcaption>🔊</figcaption> <audio controls="" src="https://shkspr.mobi/blog/wp-content/uploads/2025/12/3minutes.opus"> <p>💾 <a href="https://shkspr.mobi/blog/wp-content/uploads/2025/12/3minutes.opus">Download this audio file</a>.</p> </audio> </figure><p></p> <p>This is from a company whose website gushes about how innovative it is. AI is transforming its business at scale! Dedicated to technological excellence and delivering ISO accredited quality in all its divisions! And yet, somewhere, someone decided that customer experience was good enough.</p> <p>&#34;<a href="https://en.wikipedia.org/wiki/Eating_your_own_dog_food">Dogfooding</a>&#34; is a sacred practice in the tech industry. Use your own products. That&#39;s it. That&#39;s all you have to do. For example, if you work for Slack - you can&#39;t use Teams for your messaging solution. You have to show people that you have faith in your own products.</p> <p>But it goes deeper than that. When I used to work for mobile phone networks, they asked us to spend time in call centres. It isn&#39;t enough to receive a quarterly report on customer KPIs. You have to hear the rage in customers&#39; voices as they struggle with your billing system. Perhaps that will convince you to have empathy with the people paying to use your product.</p> <p>There&#39;s an <a href="https://www.youtube.com/watch?v=X23T-HVr0fw">oft told story about Jeff Bezos</a> pausing a meeting to call his own customer service number - and waiting over 10 minutes for an answer. When was the last time the CEO of the above company called their own customer support line?</p> <p>It&#39;s all very well to experience your own product when it is working, but when was the last time <em>anyone</em> in the above organisation went through a &#34;difficult&#34; customer journey.</p> <p>By contrast, I recently cancelled a subscription to a small start-up&#39;s service. Someone from their senior leadership team asked if they could call to chat about why I cancelled. I said sure and had an enjoyable half-hour whinge / chat about their failings. At almost every complaint, they replied either &#34;Oh, yeah, I also find that annoying&#34; or &#34;Huh, I&#39;ve not experienced that, but I can see why it would suck.&#34;</p> <p>At no point did they ever say &#34;Our metrics don&#39;t show a problem&#34; or &#34;Do people <em>really</em> care about that?&#34;</p> <p>Maybe I was being flattered. Maybe it&#39;s a waste of senior leadership time to start every meeting with a ritual phone call to the call centre. Maybe I&#39;m the only one who gets annoyed when people can&#39;t be bothered to put the bare minimum effort into their job.</p> <p>But, maybe, breathing in the noxious output of barely digested slurry is the only way to get people to improve their diet.</p> <div id="footnotes" role="doc-endnotes"> <hr/> <ol start="0"> <li id="fn:no"> <p>It couldn&#39;t! <a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fnref:no" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> <li id="fn:cancel"> <p>Not if I wanted to cancel. <a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fnref:cancel" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> <li id="fn:sick"> <p>I&#39;d rather stick my head in a bucket of lukewarm sick! <a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fnref:sick" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> <li id="fn:rec"> <p>For training and monitoring purposes, of course! <a href="https://shkspr.mobi/blog/2026/03/bored-of-eating-your-own-dogfood-try-smelling-your-own-farts/#fnref:rec" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> </ol> </div> 22.00.0188 A Productive Conversation with Mike Vardy - Johnny.Decimal https://johnnydecimal.com/22.00.0188/ 2026-03-22T02:04:52.000Z <h1 id="a-productive-conversation-with-mike-vardy">A Productive Conversation with Mike Vardy</h1> <p>Last week it was my pleasure to have A Productive Conversation with <a href="https://mikevardy.com">Mike Vardy</a>. We talked about the origin story of Johnny.Decimal, and why there&#39;s room for plenty more systems in the productivity world; about the links between my system, task management, and Mike&#39;s concept of TimeCrafting; and about content vs. context, and how we&#39;re often better off starting with the latter, even though our instincts start us with the former.</p> <p>Listen using the link below, or in <a href="https://pod.link/913414044/episode/YWY4YzI0OGUtYmUzZi00MGIyLWEwOGYtMjQwNzAwZjg3OWI1">any podcast player</a>.</p> <p><a href="https://share.transistor.fm/s/99794f34">share.transistor.fm/s/99794f34</a></p> <hr> <p><em>100% human. 0% AI. Always.</em></p> AI is changing the style and substance of human writing, study finds - Werd I/O 69bf0efb8a9de30001523e84 2026-03-21T21:34:51.000Z <p>[<a href="https://www.nbcnews.com/tech/tech-news/ai-changing-style-substance-human-writing-study-finds-rcna263789?ref=werd.io">Jared Perlo at NBC News</a>]</p><p>Repeat after me: an LLM cannot replace a human&#x2019;s skill, judgment, or taste.</p><p>Another exhibit for the jury:</p><blockquote>&#x201C;The research team found that users who heavily relied on large language models (LLMs) produced responses that diverged significantly in meaning from the answers of participants who only partially relied on LLMs or avoided their use altogether, suggesting heavy AI use alters the substance of humans&#x2019; arguments in addition to changing writing style.&#x201D;</blockquote><p>It might seem easy or fast, or a neat way to push out more content with less effort. But the software really does change the substance of your writing in what I would call objectively bad ways: it makes it less personal and less emotional, and it actively changes its underlying meaning in the process. It&#x2019;s less human. Sure, ask it to give you feedback, if you want, but don&#x2019;t actually let it polish your writing itself.</p><p>For the record, my posts aren&#x2019;t written or conceived with an LLM, although I know an increasing number of people who use one to write a first draft and then edit. I&#x2019;m not a fan. The whole point of the web &#x2014; its beauty &#x2014; is that it&#x2019;s unrelentingly human and diverse. There are lots of ways in which AI is eating away at that core (fewer search engine referrals, more automated content, more spam), but this is the most insidious: through people who <em>believe they are writing the piece themselves</em> but are actually handing over their creativity to the model.</p><p>[<a href="https://www.nbcnews.com/tech/tech-news/ai-changing-style-substance-human-writing-study-finds-rcna263789?ref=werd.io">Link</a>]</p> Democratic Backsliding Reaches Western Democracies, with U.S. Decline “Unprecedented” - Werd I/O 69bf07018a9de30001523e7e 2026-03-21T21:00:49.000Z <p>[<a href="https://www.v-dem.net/news/press-release-democratic-backsliding-reaches-western-democracies-with-us-decline-unprecedented/?ref=werd.io">Varieties of Democracy</a>]</p><p>File under &#x201C;oh, fun&#x201D;, from <a href="https://www.v-dem.net/about/v-dem-project/?ref=werd.io">the V-Dem Project at the University of Gothenburg</a>:</p><blockquote>&#x201C;The U.S. democracy is currently in a much faster deterioration process than any other democracy in modern times. Within only one year, the USA&#x2019;s score on the V-Dem Liberal Democracy index has declined by 24 percent, while its world rank dropped from 20th to 51st place out of 179 nations.&#x201D;</blockquote><p>The report compares the USA&#x2019;s rate of decline to Hungary, Serbia, India, Russia, and T&#xFC;rkiye, and shows that what took Orb&#xE1;n four years and Modi a decade, the current administration accomplished in one. Only six countries have registered larger one-year drops on the LDI since 2000, and five of those were military coups.</p><p>As the report points out, the midterms will be a litmus test. Will it be a free and fair election &#x2014; or something else? Time will tell. Election-specific indicators in the report are only reassessed in election years, so the 2025 LDI score is actually <em>held up</em> by the quality of the 2024 elections. If the 2026 elections are compromised, our score will plummet.</p><p>And it&#x2019;s not just us.</p><blockquote>&#x201C;Nearly a quarter of the world&#x2019;s nations are going through democratic backsliding, or autocratization, in 2025, and six out of the ten new autocratizing countries identified in the 2026 Democracy Report are in Europe and North America. Among them are large and influential countries like Italy, the United Kingdom, and the USA, according to the report authored by a team led by Professor Staffan I Lindberg at the V-Dem Institute, University of Gothenburg.&#x201D;</blockquote><p>The UK doesn&#x2019;t get away scot-free. It&#x2019;s listed as a new autocratizer this year, driven primarily by declines in freedom of expression and media freedom. But as sobering as that fact is, the fall is nowhere near as fast or precipitous as the United States.</p><p>It&#x2019;s worth saying that this is the University of Gothenburg, an international university collaborating with other institutions, and not some random organization or mouthpiece. It should be taken seriously, and it&apos;s particularly the people who believe American ideals are infallible that need to wake up.</p><p>[<a href="https://www.v-dem.net/news/press-release-democratic-backsliding-reaches-western-democracies-with-us-decline-unprecedented/?ref=werd.io">Link</a>]</p> Old PC Games on Cereal Boxes - Joel's Log Files https://joelchrono.xyz/blog/games-on-cereal-boxes 2026-03-21T18:10:00.000Z <p>I mentioned a bit of this a few years back in a post where I shared some <a href="https://joelchrono.xyz/blog/early-computing-memories/">early computing memories</a>. At the time, I only recalled what the games were about, but I didn’t remember the names or specific game mechanics.</p> <p>However, through vague descriptions and looking in some abandonware sites, I found the games and decided to share them here. There were a couple of educational titles, a couple of racing games and a zoo management game that is actually still being sold on Steam!</p> <p>All of these games were bundled in Cereal boxes somewhere in the 2000s in Mexico! They were everywhere and absolutely worked on me, I just wanted my parents to get me some every time, there’s a chance some of those games aren’t listed here, but the ones that left an impression are mentioned, at least.</p> <p>I talked about this post idea to <a href="https://dosgame.club/@jefklak">Wouter</a>, and he immediately reminded me about his own post of a similar vein where he reminisced on <a href="https://brainbaking.com/post/2024/07/edutainment-games-of-my-childhood/">edutainment games from his childhood</a>, so there you go, check it out too once you are done, or before, since they are older games than mine. 😉</p> <p>Without further to do, here’s my list!</p> <h2 id="superbike-racing">Superbike Racing</h2> <p>This is one of the earliest games I have memory of ever playing on a computer. I booted it up on a kinda bulky Toshiba laptop that my father had. It was developed (or maybe just published?) by IncaGold and I remember playing it around 2007.</p> <p>This game had pretty neat graphics for my young eyes, and it was of the realistic style, rather than arcadey. This made the physics and the speed way too slow for me, and really deterred me from playing it that much as a kid.</p> <p>I had not really played Mario Kart at the time, but I guess I just didn’t vibe with a simulator kind of game at that age, and this was closer to those, even if rather low budget. I never quite managed to turn properly and never won a race in it that I recall.</p> <p>I somehow didn’t remember the name of this game at all, but once I did, I immediately recalled how I used to just say “SuperBike” in Spanish as a kid (“SuperBique”) and that made me chuckle.</p> <figure class="img"> <picture> <source srcset="/assets/img/blogs/2026-03-21-superbike-racing.webp" type="image/webp"/> <source srcset="/assets/img/blogs/2026-03-21-superbike-racing.png" type="image/png"/> <img class="mx-auto" src="https://joelchrono.xyz/assets/img/blogs/2026-03-21-superbike-racing.png" alt="A race is about to begin!"/> </picture> <figcaption class="caption">A race is about to begin!</figcaption></figure> <p><a href="https://youtu.be/kTMIyprjgpA">Check out this gameplay video</a>—where I got the screenshot from—it really brought some memories back!</p> <h2 id="pet-racer">Pet Racer</h2> <p>I thinks I played this much later than <em>Superbike Racing</em>, and I <em>think</em> I was already familiar with <em>Mario Kart Wii</em>—which I played at an older friend’s house. Either way, this is a blatant rip-off of Nintendo’s franchise, but I didn’t really care much about that. This game was pretty fun to play around 2008.</p> <p>Unfortunately, I don’t really have any significant memories about it. I just know it was a racing game and that all the characters were pretty ugly, to be honest, my favorite was the shark. I wish I could say some more things about it, but it’s probably the shallowest of the games mentioned here. There is a lot of gameplay footage out there though, so I guess I could check it out, but the next few games proved to be much more interesting.</p> <figure class="img"> <picture> <source srcset="/assets/img/blogs/2026-03-20-pet-racer-screenshot.webp" type="image/webp"/> <source srcset="/assets/img/blogs/2026-03-20-pet-racer-screenshot.png" type="image/png"/> <img class="mx-auto" src="https://joelchrono.xyz/assets/img/blogs/2026-03-20-pet-racer-screenshot.png" alt="This is definitely not Mario Kart"/> </picture> <figcaption class="caption">This is definitely not Mario Kart</figcaption></figure> <p><a href="https://youtu.be/v_7qiIAvJ-k">You can easily find gameplay of this one on YouTube</a>, but just play <a href="https://supertuxkart.net/Main_Page.html">Super Tux Kart</a>, honestly, although the music ain’t too bad.</p> <h2 id="zoo-empire">Zoo Empire</h2> <p>Now, this was more my jam, and I didn’t even remember it very well. Nowadays I rarely touch management games, but I really was addicted to this one as a kid. Just the thought of having my own mini-world inside my computer were animals roamed around was so fun. The game had lots of fun animations and interactions, and causing mayhem by putting animals in the same space was fun.</p> <p>This game was developed by <em>Enlight Software</em> and was first published in 2004. I think I played it around 2009 myself, but I can’t be sure.</p> <p>You managed a zoo and took care of animals, building their habitats, as well as the passageways and commodities for visitors. What blows my mind is that the game was fully 3D! with full camera controls and stuff. The graphics are old by now, but still have a lot of charm.</p> <p>Another thing I really liked was the amount of terraforming you can. I can modifying terrain and making mountains or lakes and using those instead of fences.</p> <p>I’m kind of interested on giving this one a revisit, the game is <a href="https://store.steampowered.com/app/286750/Zoo_Empire/">still available on Steam</a> and on sale right now. It will probably suck by today standards, but I will give it a go for nostalgia’s sake.</p> <p>Reviews say that the game will eventually crash, but it will be fun to just mess around for a bit.</p> <figure class="img"> <picture> <source srcset="/assets/img/blogs/2026-03-20-zoo-empire-screenshot.webp" type="image/webp"/> <source srcset="/assets/img/blogs/2026-03-20-zoo-empire-screenshot.png" type="image/png"/> <img class="mx-auto" src="https://joelchrono.xyz/assets/img/blogs/2026-03-20-zoo-empire-screenshot.png" alt="The zoo is thriving! Screenshot from the Steam page"/> </picture> <figcaption class="caption">The zoo is thriving! Screenshot from the Steam page</figcaption></figure> <p><a href="https://youtu.be/WcOuZs5vnGw">Check some gameplay here!</a>—The music actually holds up so well and unlocked my nostalgia even more than the gameplay itself.</p> <h2 id="my-amazing-human-body">My Amazing Human Body</h2> <p>This is an educational game about—you guessed it—the human body. Titled in Spanish as <em>Mi Increíble Cuerpo Humano</em>, and developed by DK Multimedia in 1997, although I played the version I did around 2007 or so. It was full of minigames and things to click around. There’s also a character that narrates the game and asks questsions named Seymour Skinless—he is just Skelly in Spanish though—and yes, he’s a talking skeleton.</p> <p>There were puzzle games about dragging and dropping body parts in the right place, tons of fun facts about each part of the body, and each organ will also come with specific games to learn what they do. For example, the brain information page has a memory game or tells you to attempt to write with your non-dominant hand, while the eye section comes with optical illusion experiments, explaining how the eyes are fooled by it. Everything in this game has plenty of drawings, models and diagrams.</p> <p>This is a game that really rewards exploration, and each description of how an organ works will often highlight other specific terms and link to another terms, it is very easy to get into rabbit holes just reading and looking at visuals. There really is a whole glossary not only about the organs, but the systems and processes and how the body develops over time as we grow. I skimmed through a playthrough of the game online and was truly astonished by how much information it has, all the text on it is fully dubbed as well.</p> <figure class="img"> <picture> <source srcset="/assets/img/blogs/2026-03-21-my-amazing-human-body.webp" type="image/webp"/> <source srcset="/assets/img/blogs/2026-03-21-my-amazing-human-body.png" type="image/png"/> <img class="mx-auto" src="https://joelchrono.xyz/assets/img/blogs/2026-03-21-my-amazing-human-body.png" alt="Main interface of the game, Skelly in the middle"/> </picture> <figcaption class="caption">Main interface of the game, Skelly in the middle</figcaption></figure> <p><a href="https://www.youtube.com/watch?v=ZSDh3LJYz8c">Check some gameplay of it on YouTube</a>—I must admit I prefer the Spanish dub, even though it’s not Latin Spanish, I just got used to the voice.</p> <h2 id="my-first-amazing-history-explorer">My First Amazing History Explorer</h2> <p>This was just <em>La Máquina del Tiempo del Pequeño Aventurero</em> in Spanish and was also developed by <em>DK Multimedia</em>, however, where a lot of the artwork on the Human Body consisted of prerrendered 3D models and 3D animation. Most of what is found in this game is mostly 2D graphics. It makes sense given the presence of paintings, maps and similar art compared to organs and bones.</p> <p>Anyway, this was an extremely fun game, and had more of a story too, since I traveled through time to find the whereabouts of a missing professor. Like Skelly, there’s another character who calls himself the <em>Time Fugitive</em>—altough he calls himself Cronos in Spanish!—and he’s the one behind the professors disappearance, simply to get more people interested in History—a bit of a stretch but okay.</p> <p>In any case, this game is as deep and fun to poke around with, letting you explore through the professor’s house—which acts as a hub or main menu of sorts—as well as access the Time Machine itself, which let’s you visit eight different time periods, showing a giant map with graphics, animations and things to click and get into rabbit holes just like the previous game, so much interactivity everywhere. There’s puzzles and questions and minigames, you can collect stamps for each time period and fill a book with them. I really enjoyed revisiting gameplay online.</p> <figure class="img"> <picture> <source srcset="/assets/img/blogs/2026-03-21-my-first-amazing-history-explorer.webp" type="image/webp"/> <source srcset="/assets/img/blogs/2026-03-21-my-first-amazing-history-explorer.png" type="image/png"/> <img class="mx-auto" src="https://joelchrono.xyz/assets/img/blogs/2026-03-21-my-first-amazing-history-explorer.png" alt="Each time period was a colorful map full of animations and stuff to click"/> </picture> <figcaption class="caption">Each time period was a colorful map full of animations and stuff to click</figcaption></figure> <p><a href="https://youtu.be/pvOnMPvklyA">There are whole playthroughs on YouTube!</a> they evoke <em>so much nostalgia</em>. The English dub is really good, the Spanish voice is kinda annoying, but I didn’t mind much as a kid.</p> <h2 id="finishing-thoughts">Finishing thoughts</h2> <p>All these games—except maybe for <em>Pet Racer</em>—were such a nostalgia hit for me. Remembering the days were I would get these free games on cereal boxes from Kellog’s or Nestle. I am amazed at how much I already know computers back then, as I set up these games myself without help from my parents and such.</p> <p>I am not sure of where in the world the CD-ROMs are in my dad’s office space. There’s a chance there would be more games there that I didn’t remember at all. I have a vague memory of a flight simulator, but I think the disc got scratched and I never played much of it.</p> <p>In any case, I wonder how many of you have played these games or even got them for free too! Let me know by contacting me or leaving a comment!</p> <p>This is day 37 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Old PC Games on Cereal Boxes">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/116268530222855763">Reply on Fediverse</a> </p> Notable links: March 20, 2026 - Werd I/O 69bdaa328a9de30001523a7a 2026-03-20T20:19:45.000Z <img src="https://images.unsplash.com/photo-1627398242454-45a1465c2479?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDMxfHxjb2RlfGVufDB8fHx8MTc3NDAzNzkzNXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Notable links: March 20, 2026"><p><em>Most Fridays, I share a handful of pieces that caught my eye at the intersection of technology, media, and society.</em></p><p><em>Did I miss something important? </em><a href="mailto:ben@werd.io" rel="noreferrer"><em>Send me an email</em></a><em> to let me know.</em></p><hr><h3 id="agentic-engineering-patterns"><a href="https://simonwillison.net/guides/agentic-engineering-patterns/?ref=werd.io" rel="noreferrer">Agentic Engineering Patterns</a></h3><p><a href="https://simonwillison.net/?ref=werd.io">Simon Willison</a>&#x2019;s work-in-progress deep dive into agentic engineering is predictably good.</p><p>From <a href="https://simonwillison.net/guides/agentic-engineering-patterns/what-is-agentic-engineering/?ref=werd.io">the introduction</a>, distinguishing <em>agentic engineering</em> from <em>vibe coding</em>:</p><blockquote>&#x201C;Some people extend that definition to cover any time an LLM is used to produce code at all, but I think that&apos;s a mistake. Vibe coding is more useful in its original definition - we need a term to describe unreviewed, prototype-quality LLM-generated code that distinguishes it from code that the author has brought up to a production ready standard.&#x201D;</blockquote><p>I&#x2019;ve been using the term <em>AI-assisted engineering</em>, but standardizing around <em>agentic</em> seems more precise for the kind of activity we&#x2019;re talking about.</p><p>And from <a href="https://simonwillison.net/guides/agentic-engineering-patterns/anti-patterns/?ref=werd.io">the anti-patterns page</a>:</p><blockquote>&#x201C;Don&apos;t file pull requests with code you haven&apos;t reviewed yourself.<br><br>If you open a PR with hundreds (or thousands) of lines of code that an agent produced for you, and you haven&apos;t done the work to ensure that code is functional yourself, you are delegating the actual work to other people.<br><br>They could have prompted an agent themselves. What value are you even providing?&#x201D;</blockquote><p>The temptation is to write and push code that you haven&#x2019;t reviewed personally, but technology leaders need to enforce a human-review process. You are responsible for all code you push, and you are responsible for not wasting your colleagues&#x2019; time.</p><p>From <a href="https://simonwillison.net/guides/agentic-engineering-patterns/code-is-cheap/?ref=werd.io">writing code is cheap now</a>:</p><blockquote>&#x201C;Delivering new code has dropped in price to almost free... but delivering good code remains significantly more expensive than that.&#x201D;</blockquote><p>Simon is building a really great guide to not just the process but the underlying mindsets behind good agentic engineering. <a href="https://simonwillison.net/guides/agentic-engineering-patterns/?ref=werd.io">It&#x2019;s worth reading and following.</a></p><hr><h3 id="when-using-ai-leads-to-%E2%80%9Cbrain-fry%E2%80%9D"><a href="https://hbr.org/2026/03/when-using-ai-leads-to-brain-fry?ref=werd.io" rel="noreferrer">When Using AI Leads to &#x201C;Brain Fry&#x201D;</a></h3><p>Interesting research about the interaction between AI use and burnout, studying 1488 (an incidentally unfortunate number) US-based workers. Burnout is real:</p><blockquote>&#x201C;Participants described a &#x201C;buzzing&#x201D; feeling or a mental fog with difficulty focusing, slower decision-making, and headaches. This AI-associated mental strain carries significant costs in the form of increased employee errors, decision fatigue, and intention to quit.<br><br>There&#x2019;s some nuance here, however. We also found when AI is used to replace routine or repetitive tasks, burnout scores&#x2014;but not mental fatigue scores&#x2014;are lower. This highlights the subtle-but-important distinction between the types of stress that AI can alleviate, and those that it may worsen.&#x201D;</blockquote><p>So the <em>kind</em> of AI use matters. The researchers found that AI use cases that required increased oversight (coding is one, using AI with sensitive internal data is another) increased the risk of burnout. This was particularly true because the people who used these tools were more likely to take on more work, pushing their total cognitive load beyond their limits. But using it for more straightforward repetitive tasks reduced the risk of burnout.</p><p>The high-risk activities cluster around certain teams:</p><blockquote>&#x201C;After marketing, people operations, operations, engineering, finance, and IT were the functions with the highest prevalence of AI brain fry.&#x201D;</blockquote><p>Legal teams, who presumably use AI on evidence sets and on contract analysis using tools like <a href="https://www.harvey.ai/?ref=werd.io">Harvey</a> but not their actual legal analysis, were the least likely to suffer from this problem.</p><p>This should inform how managers think about AI use and how to set humane norms internally.</p><hr><h3 id="four-things-about-yahoo-news-that-may-surprise-you"><a href="https://www.niemanlab.org/2026/03/four-things-about-yahoo-news-that-may-surprise-you/?ref=werd.io" rel="noreferrer">Four things about Yahoo News that may surprise you</a></h3><p>I still think Yahoo is undervalued: clearly not a tech darling, it&#x2019;s quietly been chugging along, running one of the most popular news sites in the world alongside a raft of other services. None of it is pushing the envelope, particularly, but it does seem to be executing very well, and the team behind it is on an explicit mission to revitalize the brand.</p><p>This is the right approach, in my opinion &#x2014; and clearly it&#x2019;s working:</p><blockquote>&#x201C;Lanzone says Yahoo, owned by private equity firm Apollo Global Management since 2021, has billions in revenue. &#x201C;It is very profitable,&#x201D; he told Decoder&#x2019;s Nilay Patel.<br><br>&#x201C;Having direct deals with publishers to have their content aggregated with us has actually been part of the history of the company going back two-plus decades,&#x201D; Lanzone says at one point. &#x201C;We send them traffic and, in many cases, share revenue.&#x201D;&#x201D;</blockquote><p>It&#x2019;s more recently made that strategy cleaner: it&#x2019;s not trying to do its own reporting, but instead is surfacing other peoples&#x2019; and providing reach.</p><p>The underlying ethos seems to be to point to great content on the web rather than being the originator of it. In a world where other platforms, Google included, are trying to be the all-encompassing destination, it&#x2019;s a web-first way to look at the world. That revitalization is right on time.</p><hr><h3 id="buzzfeed-nearing-bankruptcy-after-disastrous-turn-toward-ai"><a href="https://futurism.com/artificial-intelligence/buzzfeed-disastrous-earnings-ai?ref=werd.io" rel="noreferrer">BuzzFeed Nearing Bankruptcy After Disastrous Turn Toward AI</a></h3><p>This looks like a cut and dry story about a media company turning from producing content using writers to using AI and suffering the consequences:</p><blockquote>&#x201C;Peretti said BuzzFeed would be using the software to enhance the company&#x2019;s infamous quizzes by generating personalized responses.<br><br>[&#x2026;] Now, three years after its AI pivot, the writing is on the wall. The company reported a net loss of $57.3 million in 2025 in an earnings report released on Thursday. In an official statement, the company glumly hinted at the possibility of going under sooner rather than later, writing that &#x201C;there is substantial doubt about the Company&#x2019;s ability to continue as a going concern.&#x201D;&#x201D;</blockquote><p>The content was underwhelming, and this shift coincided with Buzzfeed shutting down its award-winning news division.</p><p>There&#x2019;s a lot AI can do, but it can&#x2019;t replace the judgment and taste of human beings. It can&#x2019;t be a great writer or a great creative. It can take on drudge-work and be a good copilot, like a grammar checker or other supportive tools can be good copilots, but it&#x2019;s not a replacement for a skilled workforce. (I would also argue that there&#x2019;s no such thing as unskilled labor: almost every job you can think of benefits from human nuance and judgment.)</p><p>But there are a lot of people who see dollar signs and hope that replacing people with predictive engines will help them scale and increase their margins. All that means is that there will be a lot more Buzzfeeds.</p><hr><h3 id="businesses-rush-to-rehire-staff-after-regretted-ai-driven-cuts"><a href="https://www.hcamag.com/us/specialization/hr-technology/businesses-rush-to-rehire-staff-after-regretted-ai-driven-cuts/568292?ref=werd.io" rel="noreferrer">Businesses rush to rehire staff after regretted AI-driven cuts</a></h3><p>Not a surprise. Careerminds polled 600 HR professionals from organizations that had made layoffs in the last year.</p><blockquote>&#x201C;It found that 32.7% of organisations that conducted AI-led layoffs had already rehired between 25% to 50% of the roles they initially let go.<br><br>Another 35.6% said they had already rehired more than half of the roles that they cut.&#x201D;</blockquote><p>Say it with me: <em>AI can&#x2019;t replace the skill, judgment, creativity, and taste of real people.</em> Replace the word &#x201C;AI&#x201D; with &#x201C;spreadsheet&#x201D; and the nonsense behind AI-led layoffs becomes even clearer. AI is a potentially very powerful tool, but it&#x2019;s just a tool, and it works better when more highly-skilled people are using it.</p><p>Which organizations are beginning to find out:</p><blockquote>&#x201C;According to the findings, more than half of HR leaders said AI required more human insight than anticipated.&#x201D;</blockquote><p>It&#x2019;s worth saying that around 21% of respondents <em>did</em> report that their layoffs went okay. It&#x2019;s possible that they&#x2019;re lying. They could also have been employing people to do very manual, repetitive data work without any degree of insight, which seems like a poor use of a workforce. But generally speaking, the study found hundreds of orgs that saw the potential to save costs and were so blinded by dollar signs that they didn&#x2019;t go beyond the marketing claims about what AI could actually do:</p><blockquote>&#x201C;What ties all these findings together is that the organisations that struggled the most were making significant, irreversible decisions without the full picture of AI capabilities and what a reduction would do to their workforce.&#x201D;</blockquote><p>These organizations treated people poorly. The real tragedy is that they seem not to have understood the skills and value of their own employees. There&#x2019;s a deeper problem there than just AI.</p><hr><h3 id="trump-is-using-immigration-policy-to-suppress-speech-lawsuit-claims"><a href="https://www.npr.org/2026/03/09/nx-s1-5741213/trump-censorship-visas-deportation-lawsuit?ref=werd.io" rel="noreferrer">Trump is using immigration policy to suppress speech, lawsuit claims</a></h3><p>This lawsuit, filed by <a href="https://knightcolumbia.org/content/technology-researchers-challenge-trump-policy-threatening-deportation-for-work-on-social-media-platforms-and-online-harms?ref=werd.io">The Knight First Amendment Institute at Columbia University and Protect Democracy on behalf of the Coalition for Independent Technology Research (CITR)</a>, is important:</p><blockquote>&#x201C;The suit accuses the administration of violating the First Amendment with an official policy to deny visas to or deport noncitizens who work on or study social media platforms, fact-checking or other activities the government deems &quot;censorship&quot; of Americans&apos; speech. It argues that amounts to unconstitutional viewpoint discrimination.&#x201D;</blockquote><p>The work conducted by researchers into social media is vital: it helps us build safer communities that allow democratic discourse to take place. Unfortunately, the Trump administration has decided that this safety work is a radical act &#x2014; and in particular that research into Trump ally Elon Musk&#x2019;s X is verboten. I would assume that Ellison&#x2019;s American TikTok will receive the same preferential treatment.</p><p>My friend Dr J. Nathan Matias, who runs the amazing <a href="https://citizensandtech.org/?ref=werd.io">Citizens and Technology Lab</a>, is a named declarant. <a href="https://knightcolumbia.org/documents/hpsetihu54?ref=werd.io">His experiences are laid out in the suit</a>:</p><blockquote>&#x201C;[&#x2026;] the Censorship Policy has deprived Dr. Matias of significant contributions from his noncitizen collaborators in the United States. Because of the fear that they will be denied reentry to the United States under the Policy, some of Dr. Matias&#x2019;s U.S.-based noncitizen collaborators have decided not to travel abroad, including to attend meetings with new community partners who have important experiences related to online safety and freedom of expression. As a result, Dr. Matias has been unable to pursue collaborations with those partners, who would have added significant value to his research. Because of the same fear, one of Dr. Matias&#x2019;s noncitizen collaborators felt compelled to make extensive contingency plans in connection with international travel, requiring more flexibility in their work and less visibility on their projects, which has significantly delayed progress on those projects. Additionally, because of the fear that they will be targeted for detention or deportation under the Policy based on their work, at least one of Dr. Matias&#x2019;s noncitizen collaborators has decided not to speak to journalists or answer questions from policymakers on topics related to their work. As a result of these chilling effects, Dr. Matias has lost important opportunities to develop new research, obtain expert feedback on research, and bring visibility to his work and the work of his lab.&#x201D;</blockquote><p>This is unacceptable. We should all hope that the lawsuit is successful.</p><hr><h3 id="the-last-quiet-thing"><a href="https://www.terrygodier.com/the-last-quiet-thing?ref=werd.io" rel="noreferrer">The Last Quiet Thing</a></h3><p>This is a useful reframe of our relationship to technology, presented in an arresting way:</p><blockquote>&#x201C;What if the exhaustion everybody feels isn&apos;t a moral failure but the completely rational response to being made responsible for an ecosystem of objects that never stop asking?&#x201D;</blockquote><p>I&#x2019;m less enamored with the author&#x2019;s reframe of the work to be done to maintain these devices as shifting from an IT department. <em>That&#x2019;s</em> not the point, and it distracts from a stronger argument about finished products vs continuously-updated devices that want to have a codependent relationship with us. Whether it&#x2019;s with an end user or an IT department, it&#x2019;s still dysfunctional.</p><p>It reminds me of Amber Case&#x2019;s <a href="https://www.calmtech.institute/?ref=werd.io">Calm Tech Institute</a>, which aims to promote these kinds of values. The quote it features on its homepage &#x2014; &#x201C;What matters is not technology itself, but its relationship to us.&#x201D; from Xerox PARC technician <a href="https://en.wikipedia.org/wiki/Mark_Weiser?ref=werd.io">Mark Weiser</a> &#x2014; is completely on-point. I hope we have more of these sorts of conversations.</p>