Shellsharks Blogroll - BlogFlock 2025-12-27T01:30:28.352Z BlogFlock Werd I/O, cool-as-heck, Evan Boehs, destructured, Adepts of 0xCC, <span>Songs</span> on the Security of Networks, Aaron Parecki, cmdr-nova@internet:~$, Sophie Koonin, Westenberg, fLaMEd, Hey, it's Jason!, Johnny.Decimal, gynvael.coldwind//vx.log (pl), Terence Eden’s Blog, James' Coffee Blog, Molly White, Robb Knight, joelchrono, Trail of Bits Blog, Posts feed, Kev Quirk The Rime of the Ancient Maintainer - Westenberg 694efa5e96a90b00013b5779 2025-12-26T21:33:31.000Z <img src="https://images.unsplash.com/photo-1761207850745-d41a776ef897?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDU2fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NjY3ODQwMjh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="The Rime of the Ancient Maintainer"><p>Every culture produces heroes that reflect its deepest anxieties. The Greeks, terrified of both mortality and immortality, gave us Achilles. The Victorians, haunted by social mobility, gave us the self-made industrialist. And Silicon Valley, drunk on exponential curves and both terrified and entranced by endless funding rounds, has given us the Hero Developer: a figure who ships features at midnight, who &#x201C;moves fast and breaks things,&#x201D; who transforms whiteboard scribbles into billion-dollar unicorns through sheer caffeinated will.</p><p>We celebrate this person constantly. They&apos;re on the front page of TechCrunch et al. They keynote conferences. Their GitHub contributions get screenshotted and shared like saintly relics. </p><p>Meanwhile, an unsung developer is updating dependencies, patching security vulnerabilities, and refactoring code that the Hero Developer wrote three years ago before moving on to their next &quot;zero to one&quot; opportunity. </p><p>They will never be profiled in Wired. </p><p>But they&apos;re doing something far more important than innovation.</p><p> They&apos;re preventing collapse.</p><h1 id="the-reality-of-all-systems"><strong>The Reality of All Systems</strong></h1><p>The second law of thermodynamics states that entropy in a closed system tends to increase over time. Your codebase is not exempt from this law. Neither is your body, your marriage, your democracy, or your kitchen. Everything falls apart. Everything degrades. The universe trends toward disorder with the patient inevitability of continental drift, and the only thing standing between any functional system and chaos is the inglorious, repetitive, thankless work of maintenance.</p><p>This should be obvious.</p><p>And yet.</p><p>We&apos;ve constructed an entire economic and cultural apparatus dedicated to pretending it isn&apos;t true. We have &quot;growth hackers&quot; but no &quot;stability hackers.&quot; We have &quot;disruptors&quot; but no &quot;preservers.&quot; The entire vocabulary of modern business is oriented toward the new, the unprecedented, the revolutionary. What we lack is language for the equally difficult work of keeping existing things from falling apart.</p><p>Debt accrues interest. Ignored long enough, it compounds into bankruptcy. A startup can ship fast and break things for a time, but eventually someone has to pay the bill. Usually it&apos;s the maintainers, the ones who arrive after the Hero Developers have departed for greener pastures, the ones left to untangle spaghetti code and wonder why anyone thought it was a good idea to store user passwords in plaintext.</p><h2 id="the-lindy-effect"><strong>The Lindy Effect</strong></h2><p>Nassim Taleb popularized the Lindy Effect: the observation that for non-perishable things, every additional period of survival implies a longer remaining life expectancy. A book that has been in print for a hundred years will probably be in print for another hundred. A technology that has worked for decades is, by virtue of having survived, more robust than the shiny new thing that hasn&apos;t been stress-tested by time.</p><p>The forty-year-old COBOL system running bank transactions has survived countless technological upheavals, it has survived the internet, and it has survived DOGE. It works. The sexy new microservices architecture might work, or it might introduce seventeen novel failure modes that nobody anticipated because nobody had encountered them before.</p><p>But maintainers of legacy systems are treated as janitors rather than guardians.</p><p>We act as if working on old code is a punishment, a career dead-end, when in fact it may be the most consequential work in the entire organization. When the flashy new system fails, everyone notices. When the old system keeps running, nobody does. Invisibility is the maintainer&apos;s reward for competence.</p><h2 id="re-personal-parallels"><strong>Re: Personal Parallels</strong></h2><p>The same dynamics that create technical debt in software create what we might call &quot;life debt&quot; in those of us who are counted among the mortals. You can sprint on your health for a while, you can neglect your relationships, defer that doctor&apos;s appointment, skip the gym, eat garbage, and run on cortisol and ambition. And for a while, nothing bad happens. The system keeps running. You might even convince yourself that you&apos;ve hacked human biology, that the rules don&apos;t apply to you.</p><p>They apply to you.</p><p>The body accumulates damage. Relationships atrophy without tending, and mental health degrades under sustained neglect. And just like technical debt, life debt accrues interest. The workout you skipped at forty becomes the cardiac event at fifty, the difficult conversation you avoided at twenty-five becomes the divorce you didn&apos;t see coming at thirty. Entropy always wins; the only variable is how long you can hold it off and what tools you use to do so.</p><p>The Hero Developer mythology maps onto our lives. We celebrate the startup founder grinding hundred-hour weeks, the hustler who sacrifices everything for the mission, the &quot;winner&quot; who achieves escape velocity from ordinary human limitations. We don&apos;t run magazine profiles on the person who exercises consistently, maintains their friendships, sleeps eight hours, and builds nothing more remarkable than a sustainable existence.&#xA0;</p><p>But sustainability is remarkable.&#xA0;</p><p>It&apos;s actually quite difficult.&#xA0;</p><p>Ask anyone who&apos;s tried.</p><h2 id="a-modest-hope-for-maintenance-culture"><strong>A Modest Hope for Maintenance Culture</strong></h2><p>Imagine a culture that celebrated the twenty-year veteran who has kept the same system running through three major platform transitions over the new hire who wants to rewrite it in Rust. Imagine performance reviews that weighted &quot;prevented disasters&quot; as heavily as &quot;shipped features.&quot; Imagine founders who bragged about their boring, reliable infrastructure the way they currently brag about their growth metrics.</p><p>Camus wrote that we must imagine Sisyphus happy, eternally rolling his boulder up the hill only to watch it roll back down. But Sisyphus is a figure of futility, punished for trying to cheat death. The maintainer is something different. The maintainer rolls the boulder up the hill knowing that the village at the bottom depends on it remaining at some distance. The maintainer builds retaining walls. The maintainer is not punished but purposeful. The boulder remains in play.</p><p>There&apos;s nobility in maintenance that our innovation-obsessed culture has trained us to overlook. The senior engineer debugging a ten-year-old system at 3 AM isn&apos;t a failure who couldn&apos;t get a job at a cooler company. They&apos;re the reason the sexier company&apos;s payment processing actually works. The friend who remembers to check in during hard times isn&apos;t less interesting than the friend who makes a party a party. They&apos;re the reason there&apos;s anyone left to celebrate with.</p><p>The universe tends toward disorder. Entropy wins eventually. But the maintainer holds the line for another day, another year, another generation. And it matters.</p> Book Review: The Satsuma Complex by Bob Mortimer ★★★★☆ - Terence Eden’s Blog https://shkspr.mobi/blog/?p=66048 2025-12-26T12:34:01.000Z <img src="https://shkspr.mobi/blog/wp-content/uploads/2025/12/the-satsuma-complex-9781398521216_lg.jpg" alt="Book cover featuring a squirrel inside a satsuma." width="200" class="alignleft size-full wp-image-66049"/> <p>This is delightful whimsy wrapped up in a sensible chuckle. The sort of gigglesome nonsense that washes over you and worms its way into your ears. There&#39;s a hint of caper, a <i lang="fr">soupçon</i> of cosy crime, and a sprinkling of a love story.</p> <p>And then there&#39;s a massive tonal shift where it all becomes rather menacing and a bit bleak.</p> <p>Bob Mortimer&#39;s prose, pacing, and peculiarities are smashing. This is an enjoyable and entertaining way to spend a few hours. Beats chatting to squirrels, anyway.</p> <p>Thanks to my brother for the recommendation.</p> Friday links: December 26, 2025 - Werd I/O 694e11bddaa8db0001ea24b3 2025-12-26T11:00:03.000Z <img src="https://images.unsplash.com/photo-1703440677061-1c0a855edd3a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNocmlzdG1hcyUyMGNyYWNrZXJ8ZW58MHx8fHwxNzY2NzI1MTUxfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Friday links: December 26, 2025"><p><em>Every Friday, I share a handful of pieces that caught my eye at the intersection of technology, media, and society.</em></p><p><em>This is a sort of holiday edition: looking forward and looking back. Whatever you celebrate, whoever you&apos;re with, I hope you&apos;ve had a lovely week, and I hope the next year brings good things.</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="alternative-christmas-message"><a href="https://www.youtube.com/watch?v=PqTPV6Fr7xg&amp;ref=werd.io" rel="noreferrer">Alternative Christmas message</a></h3><p>Every year in Britain, the ruling monarch broadcasts a Christmas message. For the last few years, that&apos;s been King Charles III, <a href="https://www.theguardian.com/uk-news/2025/dec/25/king-charles-reconciliation-unity-christmas-message?ref=werd.io" rel="noreferrer">who used his to advocate for diversity</a>; for most of my life it was Queen Elizabeth II. </p><p>But Britain is not exactly deferential to the Crown &#x2013; irreverence is one of its defining characteristics, and one that I treasure dearly &#x2013; so for the last 32 yeras, Channel 4 has maintained a tradition of counter-broadcasting an alternative message. <a href="https://en.wikipedia.org/wiki/Alternative_Christmas_message?ref=werd.io" rel="noreferrer">Previous editions</a> have included <a href="https://www.youtube.com/watch?v=WqkpxMrxWkI&amp;ref=werd.io" rel="noreferrer">Edward Snowden</a>, <a href="https://www.youtube.com/watch?v=IvY-Abd2FfM&amp;ref=werd.io" rel="noreferrer">a deepfake of the Queen</a>, and <a href="https://www.youtube.com/watch?v=hbJCNmuPsfc&amp;ref=werd.io" rel="noreferrer">the father of Alan Kurdi</a>, the three year old Syrian refugee who tragically drowned during a boat crossing from Turkey to Greece.</p><p><a href="https://www.youtube.com/watch?v=PqTPV6Fr7xg&amp;ref=werd.io" rel="noreferrer">This year&apos;s is Jimmy Kimmel.</a> The jokes didn&apos;t hold up for me (although I appreciate the inclusion of Jammy Dodgers in the set dressing), but the message does: this has been a good year for fascism, and freedom of expression is under threat.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/PqTPV6Fr7xg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Jimmy Kimmel&apos;s Alternative Christmas Message (Channel 4 UK)"></iframe></figure><hr><h3 id="lies-we-tell-ourselves"><a href="https://kiesow.net/lies-we-tell-ourselves/?ref=werd.io" rel="noreferrer">Lies we tell ourselves</a></h3><p>What struck me about <a href="https://kiesow.net/?ref=werd.io">Damon Kiesow&#x2019;s</a> summary of the myths journalism tells itself is how similar it is to the myths open source software projects tell <em>themselves</em>.</p><blockquote>&#x201C;Yes, our own claims are rhetorical (not technological) determinism. But the logic is the same: we know what is best for our communities, and &#x201C;best&#x201D; reliably aligns with our existing professional practices, interests, and profit motives. By doing so, we try to reframe long-term economic and cultural changes as questions of individual behavior. &quot;Things would be better if only readers would act correctly.&#x201D;&#x201D;</blockquote><p><em>Things would be better if only readers would act correctly.</em> Substitute <em>users</em> for <em>readers</em> and that would sound like so many open social web projects.</p><blockquote>&#x201C;What we really need is to teach high school students to be more discerning consumers of information.&#x201D;</blockquote><p><em>&#x201D;We just need to educate users.&#x201D;</em></p><p>No, we don&#x2019;t. We need to educate <em>ourselves</em> about the people we hope to help: what do their lives look like, what are their needs, and what is actually important to them? If we&#x2019;re in the business of being of service, we need to adjust ourselves to <em>them</em>, not the other way around.</p><p>But of course, that means getting to know them, and worse than that, putting our own assumptions to the test. When we have lofty ideals, learning that they don&#x2019;t match what&#x2019;s actually needed doesn&#x2019;t feel good. It hurts our egos. But if we care about service, that&#x2019;s what we need to do.</p><hr><h3 id="airbus-to-migrate-critical-apps-to-a-sovereign-euro-cloud"><a href="https://www.theregister.com/2025/12/19/airbus_sovereign_cloud/?ref=werd.io" rel="noreferrer">Airbus to migrate critical apps to a sovereign Euro cloud</a></h3><p>Airbus wants to move its data outside US jurisdiction:</p><blockquote>&#x201C;I need a sovereign cloud because part of the information is extremely sensitive from a national and European perspective,&#x201D; Catherine Jestin, Airbus&apos;s executive vice president of digital, told The Register. &#x201C;We want to ensure this information remains under European control.&#x201D;</blockquote><p>The contract is worth upwards of &#x20AC;50 million, but the company doesn&#x2019;t necessarily think it&#x2019;ll actually find a provider. US cloud providers are susceptible to the US CLOUD Act that allows authorities to obtain data held on their infrastructure even if it&#x2019;s physically located in the EU. EU-only providers, meanwhile, haven&#x2019;t necessarily hit the scale or sophistication that a customer like Airbus demands.</p><p>That creates a really interesting opportunity: Airbus is doubtless not the only large European company with similar needs. There&#x2019;s <a href="https://eurostack.eu/?ref=werd.io">a proposal</a> to bankroll the creation of this kind of infrastructure in the EU, with an estimated price of &#x20AC;300 billion. It probably won&#x2019;t be ready in time for Airbus, but they&#x2019;ve at least proven that the need is real rather than ideological. Who&#x2019;s going to pick up the baton?</p><hr><h3 id="2026-open-social-web-predictions"><a href="https://www.timothychambers.net/2025/12/23/my-open-social-web-predictions.html?ref=werd.io" rel="noreferrer">2026 open social web predictions</a></h3><p><a href="https://www.deweysquare.com/team/tim-chambers/?ref=werd.io">Dewey Digital</a> founder <a href="https://www.timothychambers.net/?ref=werd.io">Tim Chambers</a> has spent a lot of time studying and digging into the open social web, including by creating <a href="https://www.businessinsider.com/twitter-migration-shows-no-signs-of-slowing-following-musks-takeover?ref=werd.io">the Twitter Migration Report</a>. So his predictions are well-informed and worth paying attention to.</p><p>He&#x2019;s split them up into safe, plausible, and risky bets. Each category checks out and makes sense. We&#x2019;ll be able to follow along: Tim creates a scorecard at the end of the year (<a href="https://www.timothychambers.net/2025/12/20/my-open-social-web-prediction.html?ref=werd.io">he just published the one for his 2025 predictions</a>). But I think a lot of these are pretty bankable.</p><p>For example, I strongly agree with this:</p><blockquote>&#x201C;<a href="https://fedify.dev/?ref=werd.io">Fedify</a> will power the federation layer for at least one mid-sized social platform (500K+ users) that adds ActivityPub support in 2026. The &#x201C;build vs. buy&#x201D; calculation for federation shifts decisively toward &#x201C;just use Fedify.&#x201D;&#x201D;</blockquote><p>And while this one is in the &#x201C;risky&#x201D; category, I still have high hopes that it will happen. (I previously would have put it in the <em>safe</em> category, but now agree with the placement; things change.)</p><blockquote>&#x201C;A well-known digital-native media publication (10M+ monthly visitors) will federate via ActivityPub in 2026 and publicly share positive results. Whether through Ghost, WordPress, or custom implementation, this outlet will report that federated followers drove meaningful engagement &#x2014; making the business case for federation legible to other publishers for the first time. By year end, at least two additional publications will announce federation plans, citing this pioneer as proof of concept.&#x201D;</blockquote><p>I appreciate the scrutiny and detail: if nothing else, this is a pretty great map of where to look for emerging development on the open social web. I&#x2019;m excited to see where the movement goes over the next year.</p> My 2026 Open Social Web Predictions - Werd I/O 694c240ddaa8db0001ea249a 2025-12-24T17:34:05.000Z <p>[<a href="https://www.timothychambers.net/2025/12/23/my-open-social-web-predictions.html?ref=werd.io">Tim Chambers</a>]</p><p><a href="https://www.deweysquare.com/team/tim-chambers/?ref=werd.io">Dewey Digital</a> founder <a href="https://www.timothychambers.net/?ref=werd.io">Tim Chambers</a> has spent a lot of time studying and digging into the open social web, including by creating <a href="https://www.businessinsider.com/twitter-migration-shows-no-signs-of-slowing-following-musks-takeover?ref=werd.io">the Twitter Migration Report</a>. So his predictions are well-informed and worth paying attention to.</p><p>He&#x2019;s split them up into safe, plausible, and risky bets. Each category checks out and makes sense. We&#x2019;ll be able to follow along: Tim creates a scorecard at the end of the year (<a href="https://www.timothychambers.net/2025/12/20/my-open-social-web-prediction.html?ref=werd.io">he just published the one for his 2025 predictions</a>). But I think a lot of these are pretty bankable.</p><p>For example, I strongly agree with this:</p><blockquote>&#x201C;<a href="https://fedify.dev/?ref=werd.io">Fedify</a> will power the federation layer for at least one mid-sized social platform (500K+ users) that adds ActivityPub support in 2026. The &#x201C;build vs. buy&#x201D; calculation for federation shifts decisively toward &#x201C;just use Fedify.&#x201D;&#x201D;</blockquote><p>And while this one is in the &#x201C;risky&#x201D; category, I still have high hopes that it will happen. (I previously would have put it in the <em>safe</em> category, but now agree with the placement; things change.)</p><blockquote>&#x201C;A well-known digital-native media publication (10M+ monthly visitors) will federate via ActivityPub in 2026 and publicly share positive results. Whether through Ghost, WordPress, or custom implementation, this outlet will report that federated followers drove meaningful engagement &#x2014; making the business case for federation legible to other publishers for the first time. By year end, at least two additional publications will announce federation plans, citing this pioneer as proof of concept.&#x201D;</blockquote><p>I appreciate the scrutiny and detail: if nothing else, this is a pretty great map of where to look for emerging development on the open social web. I&#x2019;m excited to see where the movement goes over the next year.</p><p>[<a href="https://www.timothychambers.net/2025/12/23/my-open-social-web-predictions.html?ref=werd.io">Link</a>]</p> Fixing "Date/time not in ISO 8601 format" in Google Search Console - Terence Eden’s Blog https://shkspr.mobi/blog/?p=62176 2025-12-24T12:34:43.000Z <p>I like using microdata within my HTML to provide semantic metadata. One of my pages had this scrap of code on it:</p> <pre><code class="language-html">&lt;time itemprop=&#34;datePublished&#34; itemscope datetime=&#34;2025-06-09T11:27:06+01:00&#34;&gt;9 June 2025 11:27&lt;/time&gt; </code></pre> <p>The Google Search Console was throwing this error:</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/Datetime-not-in-ISO-8601-format-in-field-datePublished.webp" alt="Date/time not in ISO 8601 format in field &#39;datePublished&#39; Items with this issue are invalid. Invalid items are not eligible for Google Search&#39;s rich results" width="690" height="180" class="aligncenter size-full wp-image-62177"/> <p>I was fairly sure that was a valid ISO 8601 string. It certainly matched <a href="https://developers.google.com/search/docs/appearance/structured-data/discussion-forum#microdata">the description in the Google documentation</a>. Nevertheless, I fiddled with a few different formats, but all failed.</p> <p>On <a href="https://support.google.com/webmasters/thread/359976663/iso8601-string-not-validating?msgid=360727451">the advice</a> of <a href="https://www.nearby.org.uk/">Barry Hunter</a>, I tried changing the <code>datetime</code> attribute to <code>content</code>. That also didn&#39;t work.</p> <p>Then I looked closely at the code.</p> <p>The issue is the <code>itemscope</code>. Removing that allowed the code to pass validation. But why?</p> <p>Here&#39;s what <a href="https://schema.org/docs/gs.html#microdata_itemscope_itemtype">the Schema.org documentation</a> says:</p> <blockquote><p>By adding itemscope, you are specifying that the HTML contained in the block is about a particular item.</p></blockquote> <p>The <a href="https://html.spec.whatwg.org/multipage/microdata.html#attr-itemscope">HTML specification</a> gives this example:</p> <pre><code class="language-html">&lt;div itemscope&gt; &lt;img itemprop=&#34;image&#34; src=&#34;google-logo.png&#34; alt=&#34;Google&#34;&gt; &lt;/div&gt; </code></pre> <p>Here, the <code>image</code> property is the <em>value</em> of the element. In this case <code>google-logo.png</code>. So what&#39;s the problem with the <code>time</code> example?</p> <p>Well, <code>&lt;image&gt;</code> is a <em>void</em> element. It doesn&#39;t have any HTML content - so the metadata is taken from the <code>src</code> attribute.</p> <p>But <code>&lt;time&gt;</code> is <em>not</em> a void element. It <em>does</em> contain HTML. So something like this would be valid:</p> <pre><code class="language-html">&lt;time itemprop=&#34;datePublished&#34; itemscope &gt;2025-06-09T11:27:06+01:00&lt;/time&gt; </code></pre> <p>The text contained by the element is a valid ISO8601 string.</p> <p>My choice was either to present the ISO8601 string to anyone viewing the page, or simply to remove the <code>itemscope</code>. So I chose the latter.</p> Note published on December 23, 2025 at 11:23 PM UTC - Molly White's activity feed 694b246de5bd0603bc0d6fb2 2025-12-23T23:23:25.000Z <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>one of the best things about linzer cookies is that they come with built-in treats for the chef</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/cb264b87317f4ff5684d_linzer.jpg" data-fslightbox=988785a62619f3182999><img src="https://storage.mollywhite.net/micro/cb264b87317f4ff5684d_linzer.jpg" alt="A tiny ~1" cookie shaped like a stocking, which has been cut out of the linzer cookies visible on cooling racks in the background" /></a></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a href="https://www.mollywhite.net/micro/entry/202512231822"><time class="dt-published" datetime="2025-12-23T23:23:25+00:00" title="December 23, 2025 at 11:23 PM UTC">December 23, 2025 at 11:23 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication twitter" href="https://twitter.com/molly0xFFF/status/2003607458430787971" title="Twitter" rel="syndication">Twitter, </a><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/115771455528340696" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3maoveowkkn2r" 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/baking" title="See all micro posts tagged "baking"" rel="category tag">baking</a>. </div></div></footer></div></article> Drinking Less, Enjoying More: Beer in 2025 - The Weblog of fLaMEd https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/ 2025-12-23T12:17:18.000Z <p>What’s going on, Internet? This was a quieter year for beer. I checked in less, tried fewer new things, and enjoyed what I drank more. I leaned hard into IPAs, especially West Coast IPAs, spent more time with Bright IPAs, and reaffirmed my appreciation for the humble APA. 2025 wasn’t about chasing novelty. Beer isn’t getting cheaper, and it made more sense to stick with what I know I enjoy.</p> <h2 id="year-in-numbers"><a class="heading-anchor" href="https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/#year-in-numbers">Year in Numbers</a></h2> <p>I still use <a href="https://untappd.com/" rel="noopener">Untapped</a> to keep track of my beers. Here are my 2025 stats:</p> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-m); margin-block: var(--space-l);"> <div class="flow text-center" style="--flow-space: var(--space-xs); padding: var(--space-m); background: var(--color-bg-accent); border-radius: var(--border-radius-medium)"> <p class="text-step-3 font-bold" style="color: var(--color-primary)">81</p> <p class="text-step-min-1">Total Check-ins</p> <p class="text-step-min-2" style="color: var(--color-accent)">↓ 37 from 2024</p> </div> <div class="flow text-center" style="--flow-space: var(--space-xs); padding: var(--space-m); background: var(--color-bg-accent); border-radius: var(--border-radius-medium)"> <p class="text-step-3 font-bold" style="color: var(--color-primary)">76</p> <p class="text-step-min-1">Unique Beers</p> <p class="text-step-min-2" style="color: var(--color-accent)">↓ 34 from 2024</p> </div> <div class="flow text-center" style="--flow-space: var(--space-xs); padding: var(--space-m); background: var(--color-bg-accent); border-radius: var(--border-radius-medium)"> <p class="text-step-3 font-bold" style="color: var(--color-primary)">34</p> <p class="text-step-min-1">Breweries</p> <p class="text-step-min-2" style="color: var(--color-accent)">↓ 4 from 2024</p> </div> <div class="flow text-center" style="--flow-space: var(--space-xs); padding: var(--space-m); background: var(--color-bg-accent); border-radius: var(--border-radius-medium)"> <p class="text-step-3 font-bold" style="color: var(--color-primary)">3.69</p> <p class="text-step-min-1">Average Rating</p> <p class="text-step-min-2" style="color: var(--color-accent)">↑ 0.11 from 2024</p> </div> </div> <p>The continued drop in volume alongside a higher average rating summed up the year well. Fewer beers, better choices, and more consistent enjoyment.</p> <p><strong>Friday</strong> remained my most popular day for check-ins, with beers logged from <strong>four countries</strong> across the year, led overwhelmingly by <strong>New Zealand</strong> with only a small handful from overseas.</p> <p><strong>American IPA</strong> was my most checked-in style, with <strong>Garage Project</strong> as my top brewery.</p> <div class="grid" style="--gutter: var(--space-m); --grid-min-item-size: 18rem; margin-block: var(--space-l)"> <div> <h2 id="top-5-beers"><a class="heading-anchor" href="https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/#top-5-beers">Top 5 Beers</a></h2> <table> <thead> <tr> <th>Beer</th> <th>Style</th> <th>Avg Rating</th> </tr> </thead> <tbody> <tr> <td>Thunderbird Bright IPA</td> <td>Bright IPA</td> <td>5.00</td> </tr> <tr> <td>Yakima Monster</td> <td>West Coast IPA</td> <td>4.80</td> </tr> <tr> <td>Fresh Outta Riwaka 2025</td> <td>NZ IPA</td> <td>4.50</td> </tr> <tr> <td>Gila Monster</td> <td>West Coast IPA</td> <td>4.50</td> </tr> <tr> <td>Overbite Fresh Hop</td> <td>Fresh Hop IPA</td> <td>4.50</td> </tr> </tbody> </table> </div> <div> <h2 id="top-5-breweries-by-avg-rating"><a class="heading-anchor" href="https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/#top-5-breweries-by-avg-rating">Top 5 Breweries (by Avg Rating)</a></h2> <table> <thead> <tr> <th>Brewery</th> <th>Avg Rating</th> </tr> </thead> <tbody> <tr> <td>Liberty Brewing</td> <td>4.80</td> </tr> <tr> <td>Baylands Brewery</td> <td>4.17</td> </tr> <tr> <td>Waitoa</td> <td>4.00</td> </tr> <tr> <td>Boneface</td> <td>4.00</td> </tr> <tr> <td>Heyday Beer Co.</td> <td>4.00</td> </tr> </tbody> </table> </div> <div> <h2 id="top-5-breweries-by-unique-beers"><a class="heading-anchor" href="https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/#top-5-breweries-by-unique-beers">Top 5 Breweries (by Unique Beers)</a></h2> <table> <thead> <tr> <th>Brewery</th> <th>Unique Beers</th> </tr> </thead> <tbody> <tr> <td>Garage Project</td> <td>11</td> </tr> <tr> <td>McLeod’s Brewery</td> <td>6</td> </tr> <tr> <td>Parrotdog</td> <td>6</td> </tr> <tr> <td>Baylands Brewery</td> <td>4</td> </tr> <tr> <td>Behemoth Brewing Company</td> <td>4</td> </tr> </tbody> </table> </div> </div> <p>Garage Project remained the most explored brewery in 2025. I still picked up a run of their seasonal releases early in the year, but stepping away from the Fresh Hop Subscription allowed other breweries to feature more prominently. I wouldn’t be surprised to see a different brewery take the top spot in 2026 as I spend more time exploring Auckland breweries.</p> <p>Cheers to drinking less and enjoying more! 🍺</p> <p>Hey, thanks for reading this post in your feed reader! Want to chat? <a href="mailto:hello@flamedfury.com?subject=RE: Drinking Less, Enjoying More: Beer in 2025">Reply by email</a> or add me on <a href="xmpp:flamed@omg.lol">XMPP</a>, or send a <a href="https://flamedfury.com/posts/drinking-less-enjoying-more-beer-in-2025/#webmention">webmention</a>. Check out the <a href="https://flamedfury.com/posts/">posts archive</a> on the website.</p> 2025 in review: an interesting year - Werd I/O 694a3b45daa8db0001ea20e5 2025-12-23T11:00:45.000Z <img src="https://werd.io/content/images/2025/12/Anti-ICE_protest_at_Broadview_10_11_2025_20251011_3552_-54849857960-.jpg" alt="2025 in review: an interesting year"><p>&#x201C;It&#x2019;s an interesting year,&#x201D; is a line I&#x2019;ve used many times over the last twelve months, at conferences and in conversations. It&#x2019;s a useful euphemism, sometimes delivered with a wry smile: we all know what I mean.</p><p>But it&#x2019;s also a cop-out.</p><p>It lets me hide. If I say it&#x2019;s been &#x201C;interesting,&#x201D; I don&#x2019;t have to say that it&#x2019;s been frightening, or exhausting, or quietly disillusioning. I don&#x2019;t have to admit how often I&#x2019;ve felt off-balance, or how much energy it takes just to keep moving forward as if this were all normal.</p><p>We all know this hasn&#x2019;t just been <em>interesting</em>. It&#x2019;s been a year of normalized chaos, of permanent emergency masquerading as background noise. Calling it interesting is a way of smoothing the edges. It lets us keep functioning inside systems that have been descending into nightmare territory faster than we might have imagined.</p><p>It&#x2019;s also a cop-out because it&#x2019;s non-confrontational. It&#x2019;s open to interpretation. If you don&#x2019;t share the same nightmares, if your limbic system isn&#x2019;t in the same state of permanent activation that mine is, it gives us both an out. We don&apos;t have to talk about it. But that gap, where it emerges, is important: the people who haven&#x2019;t laid awake at 3am with their heart racing have lived a different year. When I say &#x201C;interesting&#x201D; and we share a knowing nod, we&#x2019;re agreeing to skim over the discomfort and ignore the detail.</p><p>The detail is important. What&apos;s happening is important.</p><p>Many bloggers publish personal end-of-year reviews. This is mine. But it can&#x2019;t be a normal one.</p><p>It&#x2019;s been an interesting year.</p><h3 id="january-20">January 20</h3><p>Some of us have spent our entire lives hearing stories of concentration camps, of pogroms, of war, and of political persecution. For some, those stories were close enough that they never felt historical. I will always remember the sound my Oma made, echoing through the walls, as the nightmares took her back to those events each night. My Dad spent the first years of his life in a camp. Many other people carry those memories at least as close.</p><p>So when an administration came to power that intentionally used the ideas, rhetoric, and increasingly, action of twentieth century European fascism, it set off emotional emergency alarms we&#x2019;d spent a lifetime being prepared for. When it became clear that some people thought the threats were exaggerated, the alarms intensified. This is how fascism creeps into everyday life: through tolerance, through normalization, through people dismissing those who see it coming.</p><p>Although this post is published in my personal space, I work in a newsroom that investigates abuses of power in the public interest. My job there is to lead technology: the security, infrastructure, and publishing systems that allow the journalists to do their best work, safely. I read every story. I pay attention to the discussions on Slack and in story status meetings. I can&#x2019;t look away.</p><p>So much is happening all the time. This resurgence of American fascism brings new threats &#x2014; to individuals, to communities, to the newsroom where I work, to countless other companies, agencies, and organizations &#x2014; and the temptation is to react to all of them at once. Everyone comes to work carrying fears inherited from their own histories. If we react to every version of those fears, we&#x2019;ll be paralyzed.</p><p>This is the backdrop to everything else that has happened this year. Every other event, big and small, has happened while <a href="https://www.propublica.org/article/kenya-trump-usaid-world-food-program-starvation-children-deaths?ref=werd.io">USAID was being dismantled, resulting in hundreds of thousands of deaths</a>, or <a href="https://www.youtube.com/watch?v=sKSzBwTatm8&amp;ref=werd.io">500,000 Venezuelans were stripped of their immigration status</a>, their <a href="https://www.propublica.org/article/chicago-venezuela-immigration-ice-fbi-raids-no-criminal-charges?ref=werd.io">children zip-tied to each other in midnight raids</a>. We all need a threat model: a shared set of well-defined, concrete threats that are most likely and most severe. By building a shared understanding of what might actually happen, we give ourselves the ability to build a coherent strategy to counter it, and then to execute on it.</p><p>My role includes responsibility for newsroom security, which means building threat models: systematic assessments of which dangers are most likely and most severe. By identifying concrete threats rather than reacting to every fear, we can build coherent strategies to counter them, and then execute on them.</p><p>But this isn&#x2019;t just a newsroom problem. This new fascist movement touches every aspect of American life, and an effective counter-movement will need to address each of them. The same principles apply: what are the real threats? How might we reduce the risk of them happening? How can we make plans for mitigating the impact if they do?</p><p>My work has touched several fronts of the tension between movement and counter-movement. Each of them &#x2014; AI companies, journalism, and the open social web &#x2014; reveals a different failure mode, and a different opportunity to push back.</p><h3 id="feel-the-agi">Feel the AGI</h3><p>Fascism creeps in through normalization. AI does something similar: it arrives framed as inevitability, progress, and efficiency, discouraging scrutiny until resistance feels na&#xEF;ve.</p><p>This is the year that generative AI truly became part of the mainstream discourse. ChatGPT, Claude, and Gemini are everywhere, and a long tail of other models and services have spread into every field, from software engineering to contract law and municipal architecture.</p><p>Ubiquity doesn&#x2019;t just normalize a technology. It also normalizes the way it was built, and in particular, the values and assumptions of the team that built it: the features, design, ethical considerations, and guardrails they thought were important and unimportant. These models were trained by ingesting the work of millions of people without permission; in many cases, the work of independent artists and writers has been strip-mined to build a product worth billions of dollars. Creative work was pirated. But the vendors have largely been given a pass, because their enormously valuable companies matter more than the rights of the people whose work became training data.</p><p>Generalized models like ChatGPT and Claude work better the more data you pour into them. They also depend on vast data centers filled with expensive GPUs and custom hardware. That means, in their current state, that only a handful of companies can effectively run them. As we share more intimate detail with them &#x2014; our personal lives, the inner workings of our companies and organizations, anything else you can think of &#x2014; we&#x2019;re delivering our most private and sensitive information to those companies. And because their use is framed as inevitable, opting out increasingly feels impractical, unprofessional, or even irresponsible.</p><p>Once systems are treated as unavoidable, they become available to power without consent. When Elon Musk&#x2019;s DOGE, empowered by the Trump administration, set out to remake government institutions, it gathered information from each of them and connected them to generative AI models. In doing so, it dropped technical and administrative separations between datasets that have protected the privacy of Americans for generations, for example <a href="https://www.npr.org/2025/08/26/nx-s1-5517977/social-security-doge-privacy?ref=werd.io">by copying the Social Security numbers and other personally identifiable information of 300 million people</a>. Flock has created <a href="https://www.404media.co/flock-exposed-its-ai-powered-cameras-to-the-internet-we-tracked-ourselves/?ref=werd.io">a nationwide AI-powered surveillance network</a> used <a href="https://immpolicytracking.org/policies/reported-ice-accessing-flock-automated-license-plate-reader-cameras-via-local-law-enforcement/?ref=werd.io">by ICE</a> and law enforcement. Palantir has built ImmigrationOS, <a href="https://www.americanimmigrationcouncil.org/blog/ice-immigrationos-palantir-ai-track-immigrants/?ref=werd.io">an AI-based system to speed up extrajudicial deportations</a>.</p><p>None of this means the technology lacks value or that individuals using these tools are complicit. The problem is structural: when useful tools require dependence on centralized corporate infrastructure, that infrastructure becomes available for authoritarian exploitation regardless of users&#x2019; intentions. If something is made possible, we should assume that authoritarians will make use of it.</p><p>The alternative exists, but it requires rejecting the framing of inevitability. Small, local language models can be trained on specific, consented datasets for specific purposes: a newsroom analyzing its own archives, a research institution working with its own corpus. They run on local infrastructure, which means the data never leaves the organization that owns it. No centralized company intermediary; no pathway for government surveillance; no pirated training data.</p><p>This approach requires treating AI as a tool rather than infrastructure: something you deploy when you need it, with data you control, rather than a utility you depend on that controls your data. It&#x2019;s harder than just using ChatGPT or Claude. It might cost more upfront (although likely not in the longer term). It won&#x2019;t get you the same breadth of capability, even if it excels at the specific tasks it&#x2019;s designed for. But, most importantly, it keeps consent and accountability in the system.</p><p>This year, centralized AI became part of the backdrop. They have enormous momentum: capital, talent, network effects, and now government partnerships. They&#x2019;ve normalized dependence. But dependence on a technology that centralizes the capture of our most private data is not inevitable; a choice has been made to make it look that way. Recognizing that is the first step toward choosing differently.</p><h3 id="truth-to-power-truth-from-power">Truth to power, truth from power</h3><p>This year, it became clearer than ever before that while some journalists and newsrooms seek to speak truth to power, others seek to speak truth <em>on behalf of</em> power.</p><p>Most glaringly, Bari Weiss, founder of The Free Press, has become the editor-in-chief of CBS News <a href="https://en.wikipedia.org/wiki/Merger_of_Skydance_Media_and_Paramount_Global?ref=werd.io">after the network&#x2019;s acquisition</a> by David Ellison&#x2019;s Skydance Media. Ellison is the brother of Oracle&#x2019;s Larry Ellison, who <a href="https://www.wired.com/story/larry-ellison-is-a-shadow-president-in-donald-trumps-america/?ref=werd.io">has been described as a &#x201C;shadow President&#x201D;</a> in the Trump administration. Recently, <a href="https://www.nytimes.com/2025/12/21/business/60-minutes-trump-bari-weiss.html?ref=werd.io">she chose to spike a <em>60 Minutes</em> segment about CECOT</a>, the brutal prison in El Salvador that <a href="https://www.propublica.org/article/venezuelans-cecot-el-salvador-trump-families-video?ref=werd.io">has been the recipient of extrajudicial Trump deportees</a>. The correspondent who reported the piece <a href="https://www.latimes.com/entertainment-arts/business/story/2025-12-21/cbs-correspondent-accuses-bari-weiss-of-political-move-in-pulling-60-minutes-piece?ref=werd.io">accused her of being politically motivated</a>.</p><p>At the same time, Warner Bros is up for sale, and the President has been vocal that CNN, which it wholly owns, should be <a href="https://www.latimes.com/entertainment-arts/business/story/2025-12-21/cbs-correspondent-accuses-bari-weiss-of-political-move-in-pulling-60-minutes-piece?ref=werd.io">either sold with it or broken off and sold separately</a>. Skydance has made a bid for it, too, which includes <a href="https://variety.com/2025/tv/news/paramount-skydance-larry-ellison-irrevocable-personal-guarantee-warner-bros-discovery-1236614728/?ref=werd.io">an irrevocable personal guarantee from Larry Ellison</a>. If successful, the Ellisons would control both CBS and CNN.</p><p>Meanwhile, Twitter, which is both where many people receive their news and the place online where journalists historically hung out, was acquired by Elon Musk and rapidly reshaped into a Trump-aligned network. Another place where people learn about the events of the day is late night talk shows; <a href="https://freespeechproject.georgetown.edu/tracker-entries/stephen-colberts-late-night-show-canceled-sparking-accusations-of-political-censorship-jimmy-kimmel-incident-adds-fuel-to-the-fire/?ref=werd.io">Colbert was canceled by CBS</a> (its last show <a href="https://www.nytimes.com/2025/07/17/business/stephen-colbert-late-show-ending.html?ref=werd.io">will air next May</a>), while ABC temporarily pulled Jimmy Kimmel&#x2019;s show until a public outcry forced their hand.</p><p>Trump killed the Corporation for Public Broadcasting, which immediately undermined funding for NPR and PBS stations across the country. <a href="https://www.freepress.net/blog/defunding-public-media-hitting-local-stations-hardest?ref=werd.io">Hundreds of local stations are at risk of closure.</a> In some cases, these stations are vital public infrastructure: the only way residents learn about safety announcements. Beyond that, in locations with no local news coverage, we know that <a href="https://www.gmu.edu/news/2024-11/are-us-news-deserts-hothouses-corruption?ref=werd.io">local government and police corruption skyrockets</a>.</p><p>The news industry was already vulnerable: financially weakened by the web, editorially compromised by long-standing failures to challenge power. There have always been newspapers that reliably took the government line on foreign wars, for example: speaking truth <em>from</em> power isn&#x2019;t a new idea. Over the last year alone, reporters Without Borders described <a href="https://rsf.org/en/one-year-gaza-how-israel-orchestrated-media-blackout-region-war?ref=werd.io">a media blackout on the war in Gaza</a>; The New York Times <a href="https://glaad.org/the-new-york-times-fails-to-include-trans-voices-in-majority-of-articles-about-trans-issues/?ref=werd.io">failed to include trans voices in a majority of stories about trans issues</a>. These were self-inflicted failures.</p><p>But this is different: Trump-aligned oligarchs are in the process of systematically acquiring editorial control over the ways we learn about the world, with the administration openly signaling which outlets should be sold and to whom. Stories, entire shows, and public media networks are already being pulled. If they&#x2019;re successful, a significant chunk of how America learns about the world will be under the control &#x2014; directly and indirectly &#x2014; of the administration.</p><p>The capture isn&#x2019;t total yet, and it&#x2019;s not uncontested. It&#x2019;s bleak out there, but there <em>are</em> points of light, if you know where to look. News startups &#x2014; small newsrooms that are often run by women, people of color, and LGBTQ+ people, which are more likely to be worker-run co-operatives &#x2014; continue to speak truth to power. In the spirit of <a href="https://www.christenseninstitute.org/theory/disruptive-innovation/?ref=werd.io">disruption theory</a>, they are likely to be overlooked by the larger networks until they&#x2019;re too big to ignore. <a href="https://propublica.org/?ref=werd.io">ProPublica</a>, too, is making good on its mission to spur real-world change using investigative journalism as an instigating force.</p><h3 id="look-for-the-helpers">Look for the helpers</h3><p>As I write this, my three year old is sleeping in the next room. I worry about what kind of world he&#x2019;ll grow up into: was the relative peace and freedom of the post Cold War decades an aberration, or will we bounce back into a democratic openness where everyone has the opportunity to lead a good life? The idea that we might be descending into a permanent authoritarianism terrifies me. That we were led here in part by the kinds of connective technology I used to love is deeply unsettling. When I wake up at 3am with my heart pounding, it&#x2019;s not for me; it&#x2019;s for him.</p><p>We need to find our way back. But how?</p><p>Fred Rogers, who memorably <a href="https://en.wikipedia.org/wiki/Fred_Rogers&apos;s_1969_United_States_Senate_testimony?ref=werd.io">stood in front of the US Senate in 1969</a> to defend public media funding, <a href="https://www.pbs.org/newshour/nation/fred-rogers-post-goes-viral?ref=werd.io">had some famous advice</a> about what to do when things seem bad:</p><blockquote>&#x201C;When I was a boy and I would see scary things in the news, my mother would say to me, &apos;Look for the helpers. You will always find people who are helping.&apos; To this day, especially in times of &apos;disaster,&apos; I remember my mother&apos;s words, and I am always comforted by realizing that there are still so many helpers &#x2014; so many caring people in this world.&#x201D;</blockquote><p>Sure, there are people who haven&#x2019;t felt the fear, who even now don&#x2019;t see the depth of the troubles we find ourselves in. But there are also helpers; people who care.</p><p>I mentioned news startups. They help eradicate news deserts, represent underheard voices, and offer a meaningful alternative to larger media outlets that might be more susceptible to oligarchic capture. In part because they have less to lose, they do a far better job of getting to know their communities and being real with them. Their small size makes them more nimble and more accountable to the communities they serve. Organizations like <a href="https://www.tinynewsco.org/?ref=werd.io">Tiny News Collective</a> do a good job of supporting them.</p><p>News is undergoing a kind of forced transformation, which I think is largely positive. <a href="https://newsproduct.org/?ref=werd.io">News Product Alliance</a> is instigating product thinking in newsrooms that might never otherwise have considered who their readers actually are. It&#x2019;s also bringing together builders in news in meaningful ways, including helping newsrooms to think about how technology choices are importing someone else&#x2019;s values into their ecosystems.</p><p>And there&#x2019;s the open social web movement. At its worst, it&#x2019;s a collection of nerds scratching their own itches. The movement doesn&#x2019;t always understand its place in the current context, and why this work really matters. But at its best, the people involved deeply understand that the change they have the potential to bring about goes far beyond the internet. Projects like Mastodon and Bluesky &#x2014; and a long tail that includes Bonfire, Nostr, Pixelfed, and more &#x2014; provide viable alternatives to corporate-owned networks. In the same way that nobody can own the web, nobody can own the Fediverse: that means there&#x2019;s no single point of failure, and no corporate strategy that can capitulate to an authoritarian.</p><p>These platforms have friction, for sure, and there&#x2019;s work to be done to make them more usable, but in my opinion friction isn&#x2019;t all bad. It&#x2019;s what makes these networks so hard to own, and what prevents them from being the subject of the kinds of influence campaigns that led to the current authoritarianism in the first place. At <a href="https://fediforum.org/?ref=werd.io">FediForum</a>, the open social web conference, I delivered a keynote that <a href="https://werd.io/why-the-open-social-web-matters-now/">tried to galvanize the community into solving real problems</a> and stepping up to tackle the dark place we find ourselves in societally. I hope that these platforms can be used to amplify the kinds of organizing and mutual aid that offline activists are already engaging in every day.</p><p>Each of these efforts has an <em>implicit</em> threat model, but could use an explicit one: a shared encapsulation of the threats that allow organizations, projects, and movements to work together to provide real solutions.</p><p>These ideas &#x2014; alternatives for journalism, AI, the social web &#x2014; might seem disconnected, but they are all part of a pushback on the kinds of centralized wealth and power that led us here. With a little bit more organizing effort, I believe they can be coordinated and effective. With a little luck, we might even win.</p><p>I&#x2019;m scared for my kid and I&#x2019;m scared for all of us.</p><p>It&#x2019;s been an interesting year.</p><p>Now what?</p> Book Review: Code, Chips and Control - The Security Posture of Digital Isolation by Sal Kimmich - Terence Eden’s Blog https://shkspr.mobi/blog/?p=64250 2025-12-22T12:34:29.000Z <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/01/codechipscontrol.webp" alt="Book cover featuring circuitry." width="200" class="alignleft size-full wp-image-64252"/> <p>My friend <a href="https://www.salkimmich.com/">Sal</a> has written a book! I was lucky enough to get early access to it.</p> <p><a href="https://leanpub.com/codechipsandcontrol">Code, Chips and Control</a> is an <em>in depth</em> look at cyber security. And I do mean <strong>in depth</strong> - this literally starts at the silicon wafer level! It isn&#39;t just about the trivial logic bugs which so often get exploited; this goes into the geopolitics of supply chains, the physics of satellite hackings, and the history of the way legal systems have developed with respect to computer security.</p> <p>It is a <em>little</em> unforgiving - there are a lot of obscure acronyms to keep in your head and it dives straight in to the problems with semiconductors. This isn&#39;t a book for casual script-kiddies.</p> <p>That said, Sal has an evocative turn of phrase when describing complex interactions:</p> <blockquote><p>To think about this, let’s bring out three chess boards onto a table in our minds. There is a single, invisible player - the adversary - on on side of that board. On the other side of the table there is a lot more commotion.</p> <p>Governments huddle over one board. Security researchers cluster around another with disclosures, deadlines. Vendors and corporations share a third. The boards share the same table, the same global digital surface, their moves have always have lateral effects.</p> <p>A public disclosure sacrificed on the researcher’s board becomes a backdoor that that advances a government’s checkmate. A patch delayed on the vendor’s board opens a flank for an adversary’s quiet advance. Disclosure is not a single match between attacker and defender. It is three simultaneous games being played out of sync.</p></blockquote> <p>She&#39;s (rightly) scathing about some of the corporate responses that we see to the security challenges of today:</p> <blockquote><p>In the modern enterprise, paperwork can be more lethal than malware. The result is a paradox: organizations are better at proving they responded to vulnerabilities than actually responding to them.</p></blockquote> <p>There are a few phrases I might get stencilled onto a t-shirt:</p> <blockquote><p>Email is not a protocol. It is a confession that the systems cannot speak [to each other].</p></blockquote> <p>It&#39;s rather hard to summarise but this is comprehensive survey of <em>multiple</em> aspects of computer security. You get a lot of breadth and a suitable amount of depth - if you can keep up with the pace.</p> <p><a href="https://leanpub.com/codechipsandcontrol">Code, Chips and Control</a> is available now on LeanPub.</p> Why My Newsletter Costs $2.50 - Westenberg 69485cd096a90b00013b544c 2025-12-21T21:32:04.000Z <img src="https://images.unsplash.com/photo-1666625241661-4d31a5a2bbbb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE0fHxwdW5rfGVufDB8fHx8MTc2NjM1MjY5MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Why My Newsletter Costs $2.50"><p>In the 1980s, Minor Threat frontman Ian MacKaye discovered he was opening for The Damned at a show where tickets cost $13.50. His response was to voluntarily cut his band&apos;s pay in half. When MacKaye later formed Fugazi, he instituted a rule that became legendary in punk circles: a strict $5 cover charge for every show. The logic: Five dollars was affordable to almost anyone who wanted to come, and it meant the person working the door never had to make change.</p><p>MacKaye even kept envelopes stuffed with $5 bills on stage. If someone started a fight or ruined the show for others, he&apos;d stop the music, hand them their money back, and escort them out. Once refunded, they were no longer customers.&#xA0;</p><p>Contract terminated.&#xA0;</p><p>Problem solved.</p><p>The conventional wisdom in the creator economy oscillates between two poles. On one end, you have the &quot;content should be free&quot; crowd, who believe that removing all friction maximizes reach and that you can monetize attention through sponsorships, affiliate deals, or converting a small percentage to premium offerings.&#xA0;</p><p>On the other end, you have the premium newsletter people charging $10-20 per month, positioning their work as exclusive insight worth serious money.&#xA0;</p><p>Both approaches have their logic, and both work for certain people in certain contexts.&#xA0;</p><p>But neither of them work for me.</p><p>The problem with free is that free attracts everyone. And when you attract everyone, you get everyone. You get the engaged readers who genuinely care about your work; but you also get the drive-by visitors who subscribed during a moment of mild interest and now mark your emails as spam because they forgot who you are. You get the people who forward your work to friends. You also get the people who reply with unhinged manifestos at 3am because something you wrote reminded them of their ex-wife. As Guy Picciotto of Fugazi once observed: &quot;When it&apos;s five bucks, you get every jackass on the street who has five bucks and nothing to do that night.&quot; When it&apos;s zero bucks, you get every jackass with an email address and nothing to do that night.</p><p>The assumption embedded in the free model is that more subscribers equals more success. But subscriber count is a vanity metric that obscures what actually matters: the quality of attention you&apos;re receiving and the nature of your relationship with your audience. A list of 50,000 people who don&apos;t open your emails is worth less than 500 people who read every word and occasionally reply with something thoughtful. The second group will buy your book. They&apos;ll recommend you to friends. They&apos;ll stick around for years. The first group is just a number you can cite at shitty number-citing parties.</p><p>But premium pricing has its own distortions. When you charge $15 a month, you&apos;re implicitly promising that your content is worth $180 a year. That&apos;s a real sum of money. It&apos;s a Netflix subscription or a Spotify subscription (although not both these days.) You&apos;re now competing with professionally produced entertainment and professionally reported journalism. The psychological pressure to justify that price changes how you write. You start optimizing for perceived value rather than actual value. You pad things out. You add unnecessary sections so it feels substantial. You become a content farm of one, grinding out material to satisfy the expectation that Premium Content should be voluminous.</p><p>The $2.50 price point is cheap enough that the decision to subscribe is almost trivial. Most people spend more than that on diner coffee without thinking about it. Starbucks coffee is at least 2x that.</p><p>But it&apos;s not nothing.&#xA0;</p><p>The act of entering payment information and committing to a recurring charge, however small, creates a psychological shift in how people relate to your work. They&apos;ve made a decision. They&apos;ve invested something. They&apos;re participants in an ongoing exchange.</p><p>This tiny barrier filters for exactly the right people: folks who find enough value in what I write to click a few buttons and spend less than the cost of a mediocre pastry each month.</p><p>No filter is perfect, and some jackasses still get through. But MacKaye&apos;s envelope system works at $2.50 too. If someone&apos;s being horrible in my comments, if they&apos;re sending unhinged emails, if they make me dread opening my inbox, I can refund them and revoke their access without a second thought. Two dollars and fifty cents. That&apos;s the cost of removing a problem from my life. I&apos;m not losing a $180 subscriber I feel obligated to placate. I&apos;m not agonizing over whether their behavior is bad enough to justify the revenue hit.&#xA0;</p><p>The calculation is trivially easy: is your subscription worth more annoyance to me than a single cheap coffee? No? Here&apos;s your money back, contract terminated, goodbye forever.</p><p>MacKaye could hand someone a $5 bill and point them toward the exit without the band&apos;s finances collapsing. I can click a refund button and never think about that person again.</p><p>The economics work out too. You don&apos;t need massive scale to make a small subscription model sustainable. A thousand people paying $2.50 is $2,500 a month. That&apos;s not quit-your-job money for most folks, but it&apos;s still real money. It covers the hosting costs and the time investment and leaves something left over. And because the price is so low, people don&apos;t churn out the way they do with expensive subscriptions.&#xA0;</p><p>MacKaye and Fugazi were strategic about making their $5 shows work. They rarely stayed in hotels. They routed tours to save gas. They ate cheaply. MacKaye handled booking and management himself to avoid paying intermediaries. The low price was a constraint that forced a particular way of operating. I think about newsletters the same way. The $2.50 price means I can&apos;t rely on premium positioning to carry mediocre work. I have to actually write things people want to read. And because I&apos;m not promising $180 worth of exclusive insights, I can be more experimental, more personal, more willing to publish something short and strange that I find interesting even if it doesn&apos;t fit the Premium Content mold.</p><p>Is $2.50 the magic number for everyone? Probably not. The specific amount matters less than the principle behind it. You want a price low enough that price isn&apos;t the primary consideration, but high enough that subscribing represents a conscious choice rather than an accident. You want to filter for interest without filtering for wealth. You want to create a relationship where both parties are getting something without either party feeling exploited.</p><p>Would I make more money charging $10 a month? Almost certainly. Would my subscriber count be lower? Probably, though maybe not by as much as you&apos;d think. Would I enjoy the whole endeavor more or less? There&apos;s where the calculation gets interesting, because the financial optimization and the psychological optimization point in different directions, and I&apos;ve decided to optimize for the thing that actually matters to me, which is wanting to keep doing this for a long time without growing to resent it.</p><p>Fugazi toured for fifteen years on $5 shows. They never signed to a major label, never compromised their pricing, and by the end had sold millions of records while maintaining complete creative control. </p><p>The model worked because they cared more about the experience than the revenue, and structured their whole operation around that priority. </p><p>The instinct to leave money on the table in exchange for a better relationship with your audience is neither naive nor unsophisticated. </p><p>The right price is the one that lets you actually enjoy what you&apos;re doing.</p> Note published on December 21, 2025 at 1:25 AM UTC - Molly White's activity feed 69474c94e5bd0603bc0d6f6e 2025-12-21T01:25:40.000Z <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>planning baking for holiday cookie tins, asking questions like: if i make lemon curd x days in advance, i need to make y extra cups of it to still end up with ½ cup for cookies on the 24th. thank goodness i took multivariable calculus</p><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-block"><div class="timestamp">Posted: <a href="https://www.mollywhite.net/micro/entry/202512202021"><time class="dt-published" datetime="2025-12-21T01:25:40+00:00" title="December 21, 2025 at 1:25 AM UTC">December 21, 2025 at 1:25 AM UTC</time>. </a></div></div><div class="social-links"> </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/baking" title="See all micro posts tagged "baking"" rel="category tag">baking</a>. </div></div></footer></div></article> The indie web in 2030 - James' Coffee Blog https://jamesg.blog/2025/12/20/the-indie-web-in-2030/ 2025-12-20T18:22:23.000Z <p>In 2030, my greatest hope for the indie web is that it is a place where people feel free to create, to experiment, and to always be able to ask – and act on the answers to – the question “what do I want this place to be?”</p><p>To enable this, the indie web must be open both technically and have a culture that supports discussion, exploration, and discourse, where we – everyone – looks at the web we have now and asks what we like, what we don’t like, and what we want, and move in the directions that let us build better futures.</p><p>We should avoid being prescriptive (you must have a website, a website must have [feature], must be made in [this] way, or your identity must use [this] protocol, and so on), and instead be as open minded as we can be. Rather, I invite us to embrace all that is in the spirit of the indie web, whatever that means to each of us.</p><p>How many exciting parts of the indie web are yet to be created that are built upon ideas that have not yet been imagined? This very question imbues a sense of promise about what the indie web could be, and the answers will be evermore fruitful if people feel confident that they are able to shape the web in the way they want.</p><p>A further question to entertain is the extent to which one is a member of the indie web if they prefer to read rather than create. If I read blogs or follow accounts on the fediverse but do not myself create, am I on the indie web?</p><p>⁂⁂⁂</p><p>Being invited to answer the question “where do you want the indie web to be in 2030?” and being able to answer the question on my website feels like the epitome of indie web – we’re discussing and making the culture with its own medium, the web; a place where many voices can be part of the discussion. I love reading others’ perspectives of the indie web. Contrary to the vision imposed by corporate platforms that there are but few shapes for the web, and we need to wait for those platforms to define those shapes, on the indie web we’re all making our web together.</p><p>One of the most freeing parts of having a website – which I consider to be one way of the many ways to participate in the indie web – is being able to create my own place on the web; one that’s truly mine. I can create my own design. I can choose my own typography. I can choose how things link together. I can have a sidebar navigation. I can create a list of links to other websites I love – other homes on the web – in the way that I want. And, importantly, so can you, too, do all of this and more on your own personal website. You can turn your image of a home on the web that’s right for you into a reality, and use that space as a place to connect (if connecting with others is indeed what you want; you may just want to make a web page for fun and that’s okay too!).</p><p>⁂⁂⁂</p><p>When I think about how to get more people on the indie web, I ask myself “why would someone want to join?” What is the merit in there being more people with personal websites? I think this question needs due consideration. I can say confidently that I love having a personal website, but does that mean other people will? Having a website can be a lot of work, and there aren’t the social benefits; to really “own” your presence on the web, there is often a monetary cost, too – a domain name, hosting, etc.</p><p>Whether someone sees the benefit of having a website or not, the infrastructure, tooling, and culture should be in place such that you are both able to set one up, and feel like you can get something out of it. You should be able to _try_ having a website and see what it’s like – to be able to create and find and share and explore spaces that interest you. And I think this only works if we build a culture of open-mindedness of what the indie web can be.</p><p>Already with social media platforms, people have made their own spaces – communities are built with and congregate on many social platforms. But think of what people could do if people had more control over those spaces. What could be created, both technologically and culturally? I’m sure the answer to that question would surpass my imagination. The web makes it possible to dream big – the idea of giant public squares on centralised social platforms narrowed the field of vision, but we can broaden our horizons once again by asking “what could be?”</p><p>⁂⁂⁂</p><p>More tools don’t necessarily make a richer indie web – rather, people do. Of all the moments in the indie web I have had over the last year, the best parts have been meeting and talking with people, through both blogs, events, and communities. </p><p>Of course, we will need more tools, both creative ones and also ones that address concerns that are as yet not as well explored technologically but are essential for people to feel safe. For instance: how do we make a private indie web where communities can group together without having everything public? What are the privacy implications of the indie web, and where does technology fit in? How have our perceptions of the indie web changed with the advent of scraping by generative text tools?</p><p>If the indie web grants us freedom to make our sites in the way we want, we are able to challenge some of the properties that have emerged from social media. Do we really want scale? Do we really want like buttons and reactions? What does a post that is designed to be ephemeral look like? How do we assure trust? How do we ensure we don’t rely too heavily on privacy by obscurity? How do we want to curate our own content? What new forms of collaborative creation could exist?</p><p>Decentralisation, alone, will not make the web a better place. We need to ask fundamental questions about what we want from the web, and use the power of the web – to create, collaborate, connect, share, discuss, and debate – to make something we really want.</p><p>⁂⁂⁂</p><p>In writing this, part of me feels like I am giving a non-answer – that my dream for the future of the indie web is for us to keep asking questions and to avoid homogeneity in defining what the indie web should be. I seem to have more questions than answers. The essence of this sentiment, however, is that asking questions keeps the community open and alive, and that essence is exactly what is needed for the idea of having a personal website to reach more people.</p><p>More concretely: I want an open, welcoming web. I want a web where people can share their ideas. I want a social web that supports private discussion. I want a web where people can build new things. I want a web where people can be themselves. And I want a web where it is clear these things are all possible – where the reason for setting up a website is not to “have a website” but because having a website is a means to the end of connecting, as it is for me and so many others.</p><p>I hope that, one day, the indie web will be a constellation of communities – maybe there will be an “art web” of writers on art (who are likely already out there!), a “student web” of students who blog about their experiences. Communities may overlap to varying extents, just as publics do on social media – indeed, connecting with others should be the essence of an indie web. If there can be a “BookTok”, there can be an indie web equivalent. (I’d argue, even, there already is: surely there are many book blogs out there already!)</p><p>I love having a blog. I love reading others’ blogs. I think having a personal website is cool. I think it is empowering. My website gives me a voice. I love my website being a place for my words, and I enjoy using it as a playground to experiment with web design. I enjoy finding ways to bring in little bits of joy to my website, to the extent that my home page has, for at least the last year, welcomed readers with “I hope this website can bring a little bit of joy into your day.”</p><p>I hope others, in trying out having a website, realise the potential of the indie web to give them a voice on the web, then ask: “now that I have my own space on the web, what do I want to do with it?” The world wide web is your oyster.</p><p><em>This post is my contribution to the December 2025 IndieWeb Carnival hosted by V.H. Belvadi on the topic "</em><a href="https://vhbelvadi.com/indieweb-carnival-future" rel="noreferrer"><em>where do you see the IndieWeb in 2030?</em></a><em>"</em></p> Airbus to migrate critical apps to a sovereign Euro cloud - Werd I/O 6946b29fdaa8db0001ea20d2 2025-12-20T14:28:47.000Z <p>[<a href="https://www.theregister.com/2025/12/19/airbus_sovereign_cloud/?ref=werd.io">Paul Kunert at The Register</a>]</p><p>Airbus wants to move its data outside US jurisdiction:</p><blockquote>&#x201C;I need a sovereign cloud because part of the information is extremely sensitive from a national and European perspective,&#x201D; Catherine Jestin, Airbus&apos;s executive vice president of digital, told The Register. &#x201C;We want to ensure this information remains under European control.&#x201D;</blockquote><p>The contract is worth upwards of &#x20AC;50 million, but the company doesn&#x2019;t necessarily think it&#x2019;ll actually find a provider. US cloud providers are susceptible to the US CLOUD Act that allows authorities to obtain data held on their infrastructure even if it&#x2019;s physically located in the EU. EU-only providers, meanwhile, haven&#x2019;t necessarily hit the scale or sophistication that a customer like Airbus demands.</p><p>That creates a really interesting opportunity: Airbus is doubtless not the only large European company with similar needs. There&#x2019;s <a href="https://eurostack.eu/?ref=werd.io">a proposal</a> to bankroll the creation of this kind of infrastructure in the EU, with an estimated price of &#x20AC;300 billion. It probably won&#x2019;t be ready in time for Airbus, but they&#x2019;ve at least proven that the need is real rather than ideological. Who&#x2019;s going to pick up the baton?</p><p>[<a href="https://www.theregister.com/2025/12/19/airbus_sovereign_cloud/?ref=werd.io">Link</a>]</p> The Knight Foundation scrubs DEI section from its 'About' page - Werd I/O 6946adbcdaa8db0001ea20c4 2025-12-20T14:07:56.000Z <p>[<a href="https://objectivejournalism.org/2025/12/the-knight-foundation-scrubs-dei-section-from-its-about-page/?ref=werd.io">Nicole Froio at The Objective</a>]</p><p>My reporting colleagues at <a href="https://propublica.org/?ref=werd.io">ProPublica</a> recently noted that <a href="https://www.propublica.org/article/deleting-dei-language-nonprofits-irs-forms?ref=werd.io">over a thousand non-profits have scrubbed diversity, equity, and inclusion language from their mission statements in the wake of new threats from the Trump administration</a>.</p><blockquote>&#x201C;The changes reflect a broader retreat underway in the nonprofit world. After President Donald Trump <a href="https://www.whitehouse.gov/presidential-actions/2025/01/ending-radical-and-wasteful-government-dei-programs-and-preferencing/?ref=werd.io">ordered his administration</a> to root out &#x201C;illegal&#x201D; diversity, equity and inclusion efforts earlier this year, opening the door to investigations and funding cuts for offenders, more than 1,000 charities rewrote their mission statements in forms they filed this year with the Internal Revenue Service, removing or minimizing language tied to race, inequity and historically disadvantaged communities, ProPublica found.&#x201D;</blockquote><p>Now, <a href="https://objectivejournalism.org/2025/12/the-knight-foundation-scrubs-dei-section-from-its-about-page/?ref=werd.io">The Objective has found that one of these is the Knight Foundation</a>, one of the biggest funders of journalism in the US:</p><blockquote>&#x201C;One executive director, Casey, who is using a pseudonym in this story to protect future funding relationships of their organization, said they were &#x201C;ghosted&#x201D; by the Knight Foundation this summer &#x2014; even after building a relationship for two years. Casey&#x2019;s nonprofit newsroom covers news for marginalized communities.<br><br>&#x201C;We had two meetings and exchanged emails regularly back and forth,&#x201D; Casey told The Objective. &#x201C;Then it was between May and July that we were ghosted.&#x201D;&#x201D;</blockquote><p>On the other hand, as the article notes, <a href="https://url-media.com/url-media-secures-5-million-knight-foundation-grant/?ref=werd.io">URL Media received a $5M grant</a>. URL Media works on building sustainable, inclusive community media for Black and Brown audiences. It&#x2019;s complicated, in other words, and I suspect that none of these organizations has crisply figured out what the real risk is and where any lines can be drawn.</p><p>What shouldn&#x2019;t be in doubt: journalism can&#x2019;t truly be of service unless it is inclusive. The industry doesn&#x2019;t have a long history of navigating this well; gains over the last few years were a long time coming, and it&#x2019;s disappointing to see backpedaling &#x2014; but maybe not surprising. <a href="https://www.niemanlab.org/2025/12/the-year-we-stop-pretending-the-industry-has-changed/?ref=werd.io">As Delano Massey wrote for NiemanLab</a>:</p><blockquote>&#x201C;It didn&#x2019;t tell the truth <a href="https://americanarchive.org/exhibits/black-power/black-journal?ref=werd.io">about Black Power</a>; it called community programs militant and ignored <a href="https://vault.fbi.gov/cointel-pro?ref=werd.io">COINTELPRO</a> until the leaks made denial impossible. It didn&#x2019;t tell the truth during the <a href="https://www.thenation.com/article/archive/reagan-legacy-states-rights/?ref=werd.io">Reagan years</a>. &#x201C;Law and order&#x201D; and &#x201C;states&#x2019; rights&#x201D; were ideological, not racial strategies. It didn&#x2019;t tell the truth in the 1990s, <a href="https://www.nbcnews.com/news/us-news/analysis-how-media-created-superpredator-myth-harmed-generation-black-youth-n1248101?ref=werd.io">when &#x201C;superpredator&#x201D; mythology</a>, mugshots, and crime panic dominated the airwaves &#x2014; helping justify policies that devastated Black communities while ignoring white drug use and the rise of mass incarceration.<br><br>And when 2020 forced newsrooms to confront institutional racism, the honesty lasted only as <a href="https://www.mediapost.com/publications/article/409131/dei-shy-publishers-are-retreating-from-their-one-.html?ref=werd.io">long as the pressure did</a>.&#x201D;</blockquote><p>So maybe part of the solution is to turn the pressure back up. I can think of a few words for people who are removing their commitments to diversity in the face of a resurgence in American fascism: cowards and collaborators among them.</p><p>[<a href="https://objectivejournalism.org/2025/12/the-knight-foundation-scrubs-dei-section-from-its-about-page/?ref=werd.io">Link</a>]</p> Why do people leave comments on OpenBenches? - Terence Eden’s Blog https://shkspr.mobi/blog/?p=64154 2025-12-20T12:34:14.000Z <p>I&#39;m still a believer in the promise of Web 2.0. The idea that giving people a curated space to chat produces tiny sparks of magic.</p> <p>My wife Liz and I have been running the <a href="https://openbenches.org">OpenBenches project</a> for about 8 years - it&#39;s a crowd-sourced repository of memorial benches. People take a geotagged photo of a bench&#39;s plaque, upload it to our site, and we share it with the world. Might sound a bit niche, but we have around thirty-nine <em>thousand</em> benches catalogued from all over the world.</p> <p>From the start, we had a comment form under each bench. Of course, we pre-moderate any comments. That <a href="https://www.openbenches.org/blog/online-safety-act/">helps with our Online Safety Act obligations</a> and prevents spam from being published. We don&#39;t collect any personal data, to reduce our GDPR exposure. Our comments are self-hosted using the excellent <a href="https://commentics.com/">Commentics</a> - which means we don&#39;t send people&#39;s data off to a 3rd party.</p> <p>We <em>thought</em> that this would be used to tell us that an inscription was wrong, or if a bench had moved, or something like that.</p> <p>We were completely wrong!</p> <p>People use OpenBenches comments for all sorts of things. Of course, there are a few which provide details about the bench itself:</p> <p><a href="https://openbenches.org/bench/33640"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/removed.webp" alt="This bench was removed after the river flooded and majorly eroded the bank earlier this year (spring 2025), and now two new benches are in approximately the same place but a little further back from the river." width="1248" height="402" class="aligncenter size-full wp-image-64159"/></a></p> <p>Other provide a little context about the person: <a href="https://openbenches.org/bench/38738"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/info.webp" alt=" She competed under her birth name, Zsuzsa Nádor: https://en.wikipedia.org/wiki/Zsuzsa_Nádor There&#39;s a Wikipedia article about Roman, too: https://en.wikipedia.org/wiki/Roman_Halter" width="1248" height="402" class="aligncenter size-full wp-image-64161"/></a></p> <p>But those sorts of comments are hardly the majority. The comments break down (roughly) into these categories:</p> <h2 id="i-want-to-know-more-about-this-person"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-want-to-know-more-about-this-person">I want to know more about this person</a></h2> <p><a href="https://openbenches.org/bench/3225"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/grandson.webp" alt="I am the grandson of Janet Constance Hardie, who had a sister Ethel Hardie. Ethel Hardie married Harry Macinnes and then died in 1961. Ethel and Harry had a daughter named Ethel Elvery Macinnes. Is the Ethel Hardie, who is remembered on this bench related to the above Hardies of my family ? Best Regards, Neil Rowlandson" width="1248" height="582" class="aligncenter size-full wp-image-64163"/></a></p> <h2 id="i-sat-on-this-bench-searched-for-the-inscription-and-found-this-site-i-want-to-share-my-feelings"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-sat-on-this-bench-searched-for-the-inscription-and-found-this-site-i-want-to-share-my-feelings">I sat on this bench, searched for the inscription and found this site. I want to share my feelings</a></h2> <p><a href="https://openbenches.org/bench/13312"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/devon.webp" alt="Sounds like she was an inspirational woman. Clearly gone to soon. Sat on her bench today whilst visiting from Devon." width="1248" height="282" class="aligncenter size-full wp-image-64164"/></a></p> <h2 id="thank-you-for-putting-a-bench-here"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thank-you-for-putting-a-bench-here">Thank you for putting a bench here</a></h2> <p><a href="https://openbenches.org/bench/38259"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/peace.webp" alt="A peaceful spot on the banks of the river Orwell. Thanks for those that funded it." width="1248" height="222" class="aligncenter size-full wp-image-64165"/></a></p> <h2 id="this-has-moved-me"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#this-has-moved-me">This has moved me</a></h2> <p><a href="https://openbenches.org/bench/37741"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/amy.webp" alt="I&#39;m sat on the bench now i didn&#39;t know the lady but so sad to pass at such a young age by what i have found on the internet she was liked loved and respected my thoughts with all the family even though it&#39;s been almost 4 years since her I&#39;m sure she will never be forgotten. Someone has placed a bunch of yellow flowers on the bench that is what first made me stop and look RIP Amy" width="1248" height="642" class="aligncenter size-full wp-image-64166"/></a></p> <h2 id="my-heart-has-broken"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#my-heart-has-broken">My heart has broken</a></h2> <p><a href="https://openbenches.org/bench/39228"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/miss.webp" alt="I love you. I miss you. I so long to see you." width="1248" height="224" class="aligncenter size-full wp-image-64167"/></a></p> <h2 id="i-cant-visit-this-bench-but-im-glad-someone-has-shared-a-photo"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-cant-visit-this-bench-but-im-glad-someone-has-shared-a-photo">I can&#39;t visit this bench, but I&#39;m glad someone has shared a photo</a></h2> <p><a href="https://openbenches.org/bench/13023"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/mary.webp" alt="Mary was my best friend, from primary school until she died. I have not visited her bench but hope those who sit there in that beautiful place will also have experienced wonderful friendships as I did." width="1248" height="402" class="aligncenter size-full wp-image-64170"/></a></p> <h2 id="thank-you-for-adding-a-photo"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thank-you-for-adding-a-photo">Thank you for adding a photo</a></h2> <p><a href="https://openbenches.org/bench/26373"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/thanks.webp" alt="This is my father’s memorial bench on half penny pier thank you to the person who took the photos x" width="1248" height="282" class="aligncenter size-full wp-image-64169"/></a></p> <h2 id="i-dont-know-the-person-this-bench-commemorates-but-i-want-to-let-them-know-theyre-still-loved-and-remembered"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#i-dont-know-the-person-this-bench-commemorates-but-i-want-to-let-them-know-theyre-still-loved-and-remembered">I don&#39;t know the person this bench commemorates, but I want to let them know they&#39;re still loved and remembered</a></h2> <p><a href="https://openbenches.org/bench/35294"><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/mum.webp" alt="My mum and her girlfriends sat on the bench today and told your father stories about how they were visiting this place many decades ago. They hope your father was listening. All the best to you" width="1248" height="402" class="aligncenter size-full wp-image-64171"/></a></p> <h2 id="thats-nice"><a href="https://shkspr.mobi/blog/2025/12/why-do-people-leave-comments-on-openbenches/#thats-nice">That&#39;s nice</a></h2> <p>Hundreds of people sharing connections. Wanting to express their feelings. Understanding the terrible pain of loss and the hope that, someday, someone will think fondly of us.</p> <p>You can <a href="https://openbenches.org/comments">view all the comments on OpenBenches.org</a>.</p> Designing for inactive users - James' Coffee Blog https://jamesg.blog/2025/12/20/designing-for-inactive-users/ 2025-12-20T11:50:05.000Z <p><a href="https://artemis.jamesg.blog">Artemis</a>, the calm web reader I maintain, is relatively computationally intensive in that every hour, Artemis checks web feeds to which users are subscribed to see if there are new posts to save and show in a user’s feed.</p><p>I have made several optimisations to make this process as efficient as possible, following best practices for retrieving feeds (i.e. using <code>If-Modified-Since</code> and <code>Etag</code>). Also, because Artemis only updates users’ feeds once per day, a feed only needs to be retrieved in a given hour if there is a user for whom it is midnight in that hour. This, too, reduces the amount of work that Artemis needs to do to keep users’ feeds up to date.</p><p>With that said, as with any service, it is expected that not all people who sign up will use the service regularly; a user may sign up to try the service, then not show up again after deciding it is not for them. I don’t know how many people for whom this is the case with Artemis. I intentionally log as little as I can.</p><p>Earlier this year, I decided that Artemis should only download feeds for people who use the service, rather than for all people who are registered irrespective of whether they check their accounts. By retrieving only feeds for people who use Artemis, the amount of time spent retrieving feeds would decrease, and data that didn’t need to be collected (because the user who subscribed to the feed wasn’t using Artemis) would not be collected. Also, I would save on storage costs; lower costs make the service more sustainable, especially as it is free.</p><p>As part of this decision, I had to reconcile two competing goals: making the feed retrieval service as efficient as possible and retrieving only data for active users, while also tracking as little about users as possible.</p><p>With the goal of collecting as little data as possible in mind, I asked: what do I <em>need</em> to know? I decided that Artemis should stop polling feeds if a user has not checked their feed in approximately 60 days (keep reading to know why approximately is significant). This means that I <em>needed</em> to know, at minimum, the last month in which the user had logged in. With this information, I could write logic that says “if a user hasn’t checked their feed in over 60 days, don’t poll any feeds for which the user is the sole subscriber, and don’t update the user’s feed.”</p><p>Internally, I call the value <code>last_feed_viewed_at</code>, which takes the form <code>YYYY-MM</code>. When I rolled out this feature, I set the value to the YYYY-MM of when I released the feature. When the user opens their feed, this value is updated.</p><p>Technically, and importantly, YYYY-MM doesn’t let me track how many days has passed since a user updated their feed – it lets me know how many months have passed. Thus, if a user last opened their feed on 2025-07 and it is not 2025-09-02, I can only assume that the user’s last day of opening their feed was 2025-07-31. The logic as implemented – if I am reading my code correctly – means that it must be 2025-10 or after in order to know, for sure, that a user who last opened their feed in 2025-07 has been inactive for 60 days or more.</p><p>This is why “approximately” is something of a feature: I don’t know what <em>day</em> a user opened their feed last on. I don’t need to in order to fulfil my goal of not retrieving feeds for users who haven’t been active for a while. Not only that, I don’t <em>want</em> to know the last day a user logged in to Artemis, for that would mean I would have the necessary telemetry to easily calculate “daily active users” and such. </p><p>With my implementation, all I know is the last month in which a user opened their feed. That’s all I need to know. And in theory I could update my system such that it resets every month past 90 days to a specific date such that I couldn’t calculate decay in users over time (i.e. how many people left in February 2025 vs. March 2025).</p><p>If a user has been inactive given these rules, a message will pop up in their feed which says:</p><blockquote><strong>Welcome Back!</strong><br/><br/>Since you have not logged in for over two months, we stopped retrieving posts from sites to which you are subscribed.<br/><br/>Now that you are back, we will resume retrieving posts.<br/><br/>Your reader will be back-filled with posts after midnight today in your time zone.<br/><br/>This message will disappear when your feed has been updated.</blockquote><p>Here is what the message looks like in the context of the Artemis user interface:</p><img alt="The Artemis dashboard showing the message earlier quoted in this blog post." class="kg-image" loading="lazy" sizes="(min-width: 720px) 720px" src="https://editor.jamesg.blog/content/images/2025/12/Screenshot-2025-12-20-at-11.24.34.png" srcset="https://editor.jamesg.blog/content/images/size/w600/2025/12/Screenshot-2025-12-20-at-11.24.34.png 600w, https://editor.jamesg.blog/content/images/size/w1000/2025/12/Screenshot-2025-12-20-at-11.24.34.png 1000w, https://editor.jamesg.blog/content/images/2025/12/Screenshot-2025-12-20-at-11.24.34.png 1166w"/><p>The message sets expectations: your feed has not updated because you have been inactive, but we’ll automatically start updating your feed again as of midnight in your time zone when your feed would next update according to how Artemis works. The user will know that their feed is up to date when the message disappears, as indicated by the direction “This message will disappear when your feed has been updated.”</p><p>I thought I’d write this up to share some of my design considerations as I balanced both the necessity to track a piece of information about a user that could easily contribute to a “metric” for growth, and implementing a feature that would allow me to offer a better service, in terms of reducing storage costs (which contributes to the sustainability of the service) and the time spent retrieving feeds (which contributes to the reliability of the service).</p><p><em><strong>Addendum</strong>: As writing so often does, this post has illuminated a limitation in my implementation: if a website only shows N latest posts, only the N latest posts at the time of retrieving the feed will be back-filled to a user's account. This means that if a website has posted more than N posts since the last time the user signed in to Artemis, some posts will be missing from the user's account. With that said, at least the user will see the most recent N posts from each website in their feed. Indeed the core function of a web reader is to show the most recent posts anyway.</em></p> Comfort Food for the Thinking Class: The Great Intellectual Stagnation - Westenberg 6945d4278f7c6c00011db2dd 2025-12-20T02:19:36.000Z <img src="https://images.unsplash.com/photo-1618365908648-e71bd5716cba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDIyfHxib29rc3xlbnwwfHx8fDE3NjYxOTY2NDN8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Comfort Food for the Thinking Class: The Great Intellectual Stagnation"><p>Wander into any bookstore (I dare you.)&#xA0;</p><p>The non-fiction table will be all but dominated by the usual suspects: Malcolm Gladwell&apos;s latest exploration of how some counterintuitive thing is actually the opposite of what you&apos;d expect, a David Brooks meditation on character and virtue, something by Michael Lewis about how one weird guy in an office somewhere figured out a thing that nobody else noticed. And you might find yourself thinking: these are the same books. Spiritually, structurally, thematically identical to the books these same men were writing in 2008. In 2003. In some cases, in 1997.</p><p>The Gladwell formula, if you haven&apos;t encountered it, goes something like this: take a subject that seems simple, complicate it with research that seems to undermine common sense, then resolve the tension with a tidy insight that flatters the reader&apos;s intelligence while confirming something they sort of already believed. The ten thousand hours rule. The tipping point. The power of snap judgments, except actually you should think more carefully, except actually your gut is right. It&apos;s intellectual comfort food, and there&apos;s nothing inherently wrong with comfort food, but we&apos;ve been eating the same meal for two decades now and the chef keeps insisting he&apos;s serving something new.</p><p>This isn&apos;t about Malcolm Gladwell specifically, though he&apos;ll appear as a recurring character.&#xA0;</p><p>It&#x2019;s a broader problem. </p><p>Our collective intellectual culture seems to have calcified around a cohort of thinkers who achieved prominence roughly ten+ years ago and have been coasting ever since.&#xA0;</p><p>These are the arena rock bands of ideas: acts who had one or two genuine hits, who now tour the same material endlessly, who perform to audiences of business travelers and conference attendees who want to hear the classics one more time. And we seem to have no punk rock waiting in the wings to tear them down. No new movement of rough, vital, angry thinkers ready to call bullshit on the whole enterprise. Our intellectual underground, such as it is, consists of Substack, a platform funded by some of the most establishment venture capital imaginable, and podcasts that run for three hours and manage to say less than a single well-constructed paragraph.</p><p>I&apos;m not claiming these people have never had good ideas, or that their early work wasn&apos;t valuable. Gladwell&apos;s &quot;Outliers&quot; was genuinely interesting when it came out. Michael Lewis&apos;s &quot;The Big Short&quot; was excellent journalism. David Brooks wrote some thoughtful columns in his day. </p><p>The problem is that success in the modern &#x201C;ideas industry,&#x201D; such as it is, creates a set of incentives that almost guarantee calcification. Once you&apos;ve written your airport bestseller, once you&apos;ve established your brand, once you&apos;ve secured your sinecure at the New York Times or the speaking circuit or whatever institutional perch you&apos;ve landed on, the pressure is almost entirely toward repetition. Your audience expects the thing they know you for. Your publisher wants more of what sold last time. The conference organizers who pay $50,000 for a keynote want the hits, not the deep cuts.</p><p>What you absolutely do not want to do, if you&apos;re in this position, is challenge the people who pay those speaking fees. The specific genius of the Gladwell-Brooks-Lewis school of thought is that it manages to seem iconoclastic while posing no threat whatsoever to established power. Take a David Brooks column about character and humility and ask yourself: who is threatened by this?&#xA0;</p><p>The answer: no one.&#xA0;</p><p>The column flatters its readers (and its sponsors) by implying they&apos;re the sort of sophisticated people who care about character and humility, while asking nothing of them and certainly not questioning any of the structural arrangements that determine their lives.&#xA0;</p><p>And now of course we have the David Brooks &#x201C;situation&#x201D; - the columnist has appeared in a dump of jovial, elbow-rubbing photos with Jeffrey Epstein and his prat pack, just weeks after publishing a full-throated dismissal of the Epstein files without ever disclosing his own position in the pedophilic financier&#x2019;s orbit.&#xA0;</p><p>I want to be careful here because appearing in someone&apos;s photos doesn&apos;t make you guilty of anything, and the guilt-by-association game can get out of hand quickly. But it&apos;s worth noting: David Brooks, the man who writes about moral philosophy and community and the importance of character, moves in circles that included Epstein. Presumably Brooks wasn&apos;t doing anything nefarious, but that&apos;s where prominent people in certain worlds end up. The Aspen Ideas Festival. The TED conference green room. The Davos cocktail parties. These are the spaces where the thinking class mingles with the ruling class, and the relationship is fundamentally symbiotic.</p><p>This is what bothers me about the whole enterprise, more than the staleness of the ideas or the repetitiveness of the arguments. It&apos;s the social function these folks serve. They exist to translate the prerogatives of power into the language of thoughtfulness. When a tech billionaire wants to feel like their fortune is part of some larger intellectual project, they hire a David Brooks type to write about it. When a corporation wants to seem like it&apos;s grappling with deep questions, they bring in a Malcolm Gladwell to tell them that actually their instincts were right all along. When the establishment wants to feel like it&apos;s engaging with ideas, it invites these thinkers to its conferences and dinners and puts them on its stages. And the thinkers, in turn, produce work that never genuinely threatens the hand that feeds them.</p><p>And so we have a class of professional idea-havers, who&apos;ve been entirely had by their own ideas, who exist in almost perfect symbiosis with the institutions they&apos;re theoretically critiquing. They provide intellectual cover; they receive status, endless column-inches, money, and access. It&apos;s a nice arrangement for everyone involved except possibly the reading public, who keep getting fed the same warmed-over insights in ever more ornate Greatest Hits Special Edition Bundles.&#xA0;</p><p>From roughly the mid-twentieth century through the early 2000s, the American intellectual ecosystem (and so the broader western intellectual ecosystem) was shaped heavily by a few key institutions: the prestige press (the New York Times, the Atlantic, the New Yorker), the major publishing houses, and the university system. These institutions had their own problems and biases, but they at least maintained a function of selection for a certain level of rigor. Getting a book published by a major house was difficult. Getting a column in the Times was difficult. These barriers created bottlenecks that, whatever their flaws, at least ensured that the people who passed through them had demonstrated some ability to construct an argument.</p><p>The internet was supposed to democratize all this, and in some ways it did. But the way it happened created its own pathologies. The first wave of internet intellectualism, roughly 2005-2015, produced some genuinely interesting work. Blogs allowed for a more conversational, exploratory mode of thinking that broke with the constraints of formal publishing. You could follow an idea wherever it led, revise your thinking in public, engage with critics in real time. Some of the best intellectual work of that period happened on blogs, often by people who would never have been published by traditional venues.</p><p>But the blog ecosystem didn&apos;t evolve into something more robust. It collapsed, got eaten by social media, and was eventually replaced by a combination of podcasts, newsletters, and the social platforms themselves. And each of these replacement formats has significant limitations as a vehicle for serious thinking.</p><p>Take podcasts, the most prominent of which is unarguably Joe Rogan&apos;s marathon interview show. Rogan is an interesting case: some of his interviews with scientists and thinkers have been genuinely valuable. But the format itself works against depth. A three-hour conversation sounds like it would allow for careful exploration of ideas, but in practice it often does the opposite. The length encourages rambling, the conversational mode encourages agreement and rapport over challenge and critique, and the audio format makes it difficult to engage with complex arguments that might benefit from being written down and studied. You can&apos;t fact-check something as easily when it&apos;s buried in hour two of a podcast. You can&apos;t easily quote and critique a verbal statement the way you can with written text.</p><p>And of course, Rogan&apos;s audience is enormous, which creates pressure toward accessibility and entertainment. There&apos;s nothing wrong with accessibility in principle, but accessibility that maximizes podcast audience numbers tends to favor the provocative over the precise, and the emotionally resonant over the rigorously correct. The result is pseudo-intellectual culture that has all the signifiers of serious thinking (long conversations, complicated topics, citations of research, Jordan Peterson) without the actual rigor.</p><p>I find myself wondering if this is just the inevitable consequence of scale. Serious thinking is inherently a minority pursuit. Most people, understandably, and God above I wish I were among them, don&apos;t want to spend their leisure time wrestling with difficult arguments about difficult subjects. They want to be entertained, or at most to have their existing beliefs confirmed in ways that make them feel smart. The mass market for ideas has always favored simplification and flattery over genuine challenge. Maybe what we&apos;re seeing now is simply what happens when the technological infrastructure allows that mass market to scale without limit.</p><p>But I don&apos;t think that&apos;s the whole story. There have been moments in American history when genuine intellectual ferment reached a broader public. The 1960s, whatever else you think of them, produced real debates about real ideas that engaged significant portions of the population. The early internet era managed to sustain communities of genuine inquiry that, while not mass phenomena, were accessible to anyone interested. Something specific seems to have gone wrong in the last decade that goes beyond the eternal tension between populism and rigor.</p><p>Part of it, I think, is the economics of attention. The old business model for intellectuals involved some combination of university salaries, book advances, and journalism wages. None of these were lucrative, but they at least provided a stable base from which to develop ideas over time. The new economy of ideas is much more directly dependent on attention, which means much more directly incentivized toward whatever captures attention. A provocative tweet performs better than a nuanced argument. A confident hot take generates more engagement than a careful analysis that acknowledges uncertainty. The old system rewarded people who could produce a good book every few years; the new system rewards people who can produce a constant stream of content that keeps audiences engaged.</p><p>This helps explain the Rogan phenomenon, but it also explains Substack. Substack is supposed to be the intellectual underground, the alternative to mainstream media, and the place where independent thinkers can build audiences without depending on traditional gatekeepers. And in some ways it works. There are excellent writers on Substack producing work that probably wouldn&apos;t find a home in legacy publications. The model of direct subscription support at least theoretically aligns incentives better than advertising.</p><p>But I am uncomfortable with Substack as the default standard-bearer for independent thought.</p><p>The platform is funded by Andreessen Horowitz, one of the most powerful and connected venture capital firms in Silicon Valley. A16z&apos;s partners are as establishment as establishment gets: they sit on the boards of major tech companies, they socialize with senators and moguls and Donald Trump and his clan, they&apos;re regularly cited as visionary thinkers in the same airports bookstores where you find the Gladwell and Brooks titles. The idea that a platform funded by these people represents some kind of intellectual insurgency is, at minimum, in tension with the actual power dynamics at play.</p><p>I&apos;m not suggesting there&apos;s some conspiracy here, that a16z is using Substack to promote certain viewpoints or suppress others. I don&apos;t think that&apos;s how it works, or at least it&#x2019;s not how it works yet. The influence is more structural and subtle. Substack&apos;s investors want the platform to succeed, and success in the current media environment means attracting the kind of writers who can build large audiences. Large audiences, in the current environment, tend to come from a certain kind of content: culture war commentary, contrarianism that flatters particular demographics, lifestyle content for the professional class, and yes, the occasional genuinely original thinker who happens to be accessible enough to go viral.</p><p>The result is that Substack&apos;s version of independent thought looks suspiciously like the establishment thought it&apos;s supposed to be replacing, just with different political valences. Where the old establishment was center-left liberal, the Substack counter-establishment leans toward heterodox centrism that&apos;s critical of progressive excesses while being very careful not to threaten the tech industry or the investor class. Bari Weiss, one of Substack&apos;s highest-profile writers, is a perfect example. She positions herself as a brave truth-teller taking on the illiberal left, but her actual analysis rarely if ever questions the structural arrangements that benefit people in her social position. She&apos;s David Brooks in different packaging: iconoclasm that poses no threat to power, courage that risks nothing.</p><p>The point isn&apos;t that everyone on Substack is a sellout or that the platform is irredeemably compromised. The point is that the thing that was supposed to be our scrappy underground alternative to the dinosaurs, turns out to be funded by the same class of people who fund everything else and tends to reproduce similar dynamics. We don&apos;t have a genuine intellectual counterculture. We have a pseudo-counterculture that performs the aesthetics of independence while remaining thoroughly embedded in establishment networks.</p><p>Why doesn&apos;t something come along to tear all this down? That&apos;s what I keep asking myself. Historically, intellectual establishments get overthrown by new movements that point out the emperor has no clothes. The Enlightenment displaced scholasticism. Romanticism rebelled against Enlightenment rationalism. Modernism rejected Victorian conventions. There&apos;s usually some group of young thinkers somewhere who see through the pretensions of their elders and build something new. Where are those people now?</p><p>One possibility: they exist but I&apos;m just not seeing them. Maybe there&apos;s a vital intellectual underground happening on Discord servers or in zines or in scenes I know nothing about.&#xA0;</p><p>Another possibility: the current media environment makes it genuinely harder for new intellectual movements to emerge and gain traction. The attention economy advantages established brands. The economics of content creation push toward rapid production rather than patient development. The social media platforms that could (theoretically) serve as distribution channels for new ideas are optimized for outrage and engagement rather than careful thought. And the venture capital model that funds new media platforms has its own biases about what kind of content is worth supporting.</p><p>For a new intellectual movement to emerge now, you&apos;d need a group of thinkers developing original ideas, which takes time and needs some degree economic support. You&apos;d need venues for them to publish and reach an audience. You&apos;d need the audience to have enough patience and attention span to engage with complex new arguments. And you&apos;d need the new movement to somehow compete with the enormous content production of established brands while having none of their resources or reach.</p><p>The old model, imperfect as it was, provided some infrastructure for this. Universities, even with all their problems, gave young thinkers time to develop their ideas before having to monetize them. Small magazines provided venues for experimental work. The economics of publishing meant that one successful book could fund years of subsequent thinking. The new model provides almost none of this. If you want to be a public intellectual now, you need to be constantly producing content from day one. There&apos;s no development league, no minor system where you can hone your ideas out of the spotlight. You&apos;re either generating engagement or you&apos;re invisible.</p><p>This might be part of why the pseudo-counterculture looks so much like the establishment it claims to oppose. The people who succeed in the new media environment are the people who figure out how to work its mechanics, which selects for skills that are only loosely correlated with genuine intellectual originality. You need to be good at social media, good at building a personal brand, good at identifying topics that will generate engagement. These are real skills, but they&apos;re not the same skills that lead to developing genuinely new ideas. And so we end up with a &quot;counterculture&quot; that looks like the culture it&apos;s supposedly countering because the same selection pressures apply to both.</p><p>I keep thinking about punk rock as a comparison. Arena rock in the 1970s had become bloated, complacent, and disconnected from audiences. The bands were playing stadiums, their albums were overproduced epics, the flute was reaching its pop-cultural peak, and the music had lost whatever urgency it once had. Then punk came along, stripped everything back to basics, and revitalized the whole form. Three chords and the truth, as someone put it.</p><p>But punk didn&apos;t emerge from nothing. It developed in specific scenes (New York, London, DC, Brisbane) with specific economics (cheap venues, independent labels, zines) that allowed a new sound to develop outside the mainstream industry. The majors didn&apos;t sign punk bands at first because punk didn&apos;t fit their model. This independence was crucial to punk&apos;s development as a distinct movement with its own aesthetic and values.</p><p>What&apos;s the equivalent now for intellectual culture? Where is the scene where new ideas can develop outside the attention economy? Where are the cheap venues, the independent labels, the zines? The internet was supposed to provide all this, and for a while it sort of did, but the consolidation of platforms and the winner-take-all dynamics of attention have recreated something like the arena rock era without creating the conditions for punk to emerge.</p><p>Possibility number three: the intellectual work of our age is happening in academic corners that don&apos;t show up on Twitter or Substack. Perhaps it&apos;s happening in non-English languages and traditions that I can&apos;t access. Perhaps it&apos;s happening in applied fields (biology, AI, economics) rather than in public intellectual discourse per se. IE: there are brilliant people doing genuinely original work, just not in the media spaces I&apos;ve been describing.</p><p>But that&apos;s a dispiriting thought in its own way, because it suggests a permanent disconnection between serious thinking and public discourse. The arena rock dinosaurs would keep touring the same tired material for audiences of conference attendees and airport book buyers, while the work of having thoughts and poking them happens in specialized venues that never reach the broader public. We&apos;d have a public sphere filled with Gladwells and Brookses and Rogans, trafficking in ideas that were stale a decade ago, while the people doing genuinely interesting work remain invisible.</p><p>Is this worse than what came before? I honestly don&apos;t know. The old public intellectual culture had its own pathologies. It was too narrow, too focused on a particular set of prestige institutions. Maybe the current situation, with all its problems, at least offers more points of entry and more diversity of voices. A lot of people who never would have been published by the Atlantic or the New Yorker now have audiences on Substack and YouTube. That&apos;s worth something, even if the overall quality of discourse hasn&apos;t improved.</p><p>Still: the economics of attention favor constant production over depth. The platform dynamics favor engagement over accuracy. The venture capital model favors scale over sustainability. None of this can continue indefinitely. Something will change, either because the economic models collapse or because someone figures out how to build something better or because audiences simply get tired of consuming the same intellectual comfort food year after year. I love Burger King. I can&#x2019;t keep eating Burger King. Christ, will someone give me something other than Burger King.&#xA0;</p><p>The thing that keeps bothering me, and I&apos;ll end on this, is the flattery. What all these figures have in common, despite any differing politics and subjects, is that they never really challenge their audiences. They might seem to challenge them, might present ideas as counterintuitive or uncomfortable, but the actual experience of reading them is always reassuring. You finish a Gladwell book feeling clever. You finish a Brooks column feeling virtuous. You finish a Peterson lecture feeling understood. You finish a Rogan podcast feeling entertained and maybe a little smarter. What you never feel is genuinely confronted with something that makes you question your assumptions or change your behavior.</p><p>Grounded intellectual work, when it happens, if it ever happens again, is uncomfortable. It tells you things you don&apos;t want to hear, makes arguments that threaten positions you hold, points out problems you&apos;d rather not see. The public intellectuals of the past, at their best, did this. They afflicted the comfortable and comforted the afflicted, as the old journalism saying goes. Our current crop // slop does the opposite. They comfort the comfortable and flatter the unflattering, and they&apos;ve been doing it for so long that we&apos;ve forgotten to expect anything else.</p><p>I don&apos;t have a solution to offer. If I did, I&apos;d probably be on some speaking circuit myself, collecting fees for explaining my three-step program to revitalize intellectual culture.&#xA0;</p><p>(I know me, and I know the cost of my rent.)&#xA0;</p><p>The best I can do is name what I see and hope that naming it contributes to the conditions that might eventually produce something better.&#xA0;</p> Lies we tell ourselves - Werd I/O 69459c83daa8db0001ea20bb 2025-12-19T18:42:11.000Z <p>[<a href="https://kiesow.net/lies-we-tell-ourselves/?ref=werd.io">Damon Kiesow</a>]</p><p>What struck me about <a href="https://kiesow.net/?ref=werd.io">Damon Kiesow&#x2019;s</a> summary of the myths journalism tells itself is how similar it is to the myths open source software projects tell <em>themselves</em>.</p><blockquote>&#x201C;Yes, our own claims are rhetorical (not technological) determinism. But the logic is the same: we know what is best for our communities, and &#x201C;best&#x201D; reliably aligns with our existing professional practices, interests, and profit motives. By doing so, we try to reframe long-term economic and cultural changes as questions of individual behavior. &quot;Things would be better if only readers would act correctly.&#x201D;&#x201D;</blockquote><p><em>Things would be better if only readers would act correctly.</em> Substitute <em>users</em> for <em>readers</em> and that would sound like so many open social web projects.</p><blockquote>&#x201C;What we really need is to teach high school students to be more discerning consumers of information.&#x201D;</blockquote><p><em>&#x201D;We just need to educate users.&#x201D;</em></p><p>No, we don&#x2019;t. We need to educate <em>ourselves</em> about the people we hope to help: what do their lives look like, what are their needs, and what is actually important to them? If we&#x2019;re in the business of being of service, we need to adjust ourselves to <em>them</em>, not the other way around.</p><p>But of course, that means getting to know them, and worse than that, putting our own assumptions to the test. When we have lofty ideals, learning that they don&#x2019;t match what&#x2019;s actually needed doesn&#x2019;t feel good. It hurts our egos. But if we care about service, that&#x2019;s what we need to do.</p><p>[<a href="https://kiesow.net/lies-we-tell-ourselves/?ref=werd.io">Link</a>]</p> A small fix - James' Coffee Blog https://jamesg.blog/2025/12/19/a-small-fix/ 2025-12-19T14:11:36.000Z <p>I have a page on my site, <a href="https://editor.jamesg.blog/post">/post</a>, which lists all of my blog posts. For at least the last year, the HTML document title used on the page has been <code>Posts in the Post Category</code>. This is because the page uses the same template as my other category pages. <code>Posts in the Coffee Category</code> make sense; <code>Posts in the Post Category</code> – which encompasses all of my posts – makes less sense.</p><p>I hadn’t changed the title in large part because I wasn’t sure how to do it easily, but today I figured out a way to create an exception such that /post could have its own title. The solution I came up with, adding an <code>if</code> statement to the category template, only took a minute or so. The solution is obvious in retrospect, but isn’t that always the case? Sometimes it takes a year to figure out how to make a change.</p><p>Now the /post page has the title <code>My Blog Posts</code>. That’s better! Oh! <a href="https://jamesg.blog/2024/03/04/incremental-website-improvements-joy">the joy of incremental website improvements</a>.</p> Can chatbots craft correct code? - Trail of Bits Blog https://blog.trailofbits.com/2025/12/19/can-chatbots-craft-correct-code/ 2025-12-19T12:00:00.000Z <p>I recently attended the <a href="https://www.ai.engineer/code">AI Engineer Code Summit</a> in New York, an invite-only gathering of AI leaders and engineers. One theme emerged repeatedly in conversations with attendees building with AI: the belief that we’re approaching a future where developers will <em>never</em> need to look at code again. When I pressed these proponents, several made a similar argument:</p> <blockquote> <p>Forty years ago, when high-level programming languages like C became increasingly popular, some of the old guard resisted because C gave you less control than assembly. The same thing is happening now with LLMs.</p> </blockquote> <p>On its face, this analogy seems reasonable. Both represent increasing abstraction. Both initially met resistance. Both eventually transformed how we write software. But this analogy really thrashes my cache because it misses a fundamental distinction that matters more than abstraction level: <em><strong>determinism</strong></em>.</p> <p>The difference between compilers and LLMs isn’t just about control or abstraction. It’s about semantic guarantees. And as I’ll argue, that difference has profound implications for the security and correctness of software.</p> <h2 id="the-compilers-contract-determinism-and-semantic-preservation">The compiler’s contract: Determinism and semantic preservation</h2> <p>Compilers have one job: preserve the programmer’s semantic intent while changing syntax. When you write code in C, the compiler transforms it into assembly, but the meaning of your code remains intact. The compiler might choose which registers to use, whether to inline a function, or how to optimize a loop, but it doesn’t change what your program <em>does</em>. If the semantics change unintentionally, that’s not a feature. That’s a compiler bug.</p> <p>This property, semantic preservation, is the foundation of modern programming. When you write <code>result = x + y</code> in Python, the language guarantees that addition happens. The interpreter might optimize how it performs that addition, but it won’t change what operation occurs. If it did, we’d call that a bug in Python.</p> <p>The historical progression from assembly to C to Python to Rust maintained this property throughout. Yes, we’ve increased abstraction. Yes, we’ve given up fine-grained control. But we’ve never abandoned determinism. The act of programming remains compositional: you build complex systems from simpler, well-defined pieces, and the composition itself is deterministic and unambiguous.</p> <p>There are some rare conditions where the abstraction of high-level languages prevents the preservation of the programmer’s semantic intent. For example, cryptographic code needs to run in a constant amount of time over all possible inputs; otherwise, an attacker can use the timing differences as an oracle to do things like brute-force passwords. Properties like “constant time execution” aren’t something most programming languages allow the programmer to specify. <a href="https://blog.trailofbits.com/2025/12/02/introducing-constant-time-support-for-llvm-to-protect-cryptographic-code/">Until very recently</a>, there was no good way to force a compiler to emit constant-time code; developers had to resort to using dangerous inline assembly. But with <a href="https://blog.trailofbits.com/2025/12/02/introducing-constant-time-support-for-llvm-to-protect-cryptographic-code/">Trail of Bits’ new extensions to LLVM</a>, we can now have compilers preserve this semantic property as well.</p> <p>As I wrote back in 2017 in “<a href="https://www.sultanik.com/blog/AutomationOfAutomation">Automation of Automation</a>,” there are fundamental limits on what we can automate. But those limits don’t eliminate determinism in the tools we’ve built; they simply mean we can’t automatically prove every program correct. Compilers don’t try to prove your program correct; they just faithfully translate it.</p> <h2 id="why-llms-are-fundamentally-different">Why LLMs are fundamentally different</h2> <p>LLMs are nondeterministic by design. This isn’t a bug; it’s a feature. But it has consequences we need to understand.</p> <h3 id="nondeterminism-in-practice">Nondeterminism in practice</h3> <p>Run the same prompt through an LLM twice, and you’ll likely get different code. Even with temperature set to zero, model updates change behavior. The same request to “add error handling to this function” could mean catching exceptions, adding validation checks, returning error codes, or introducing logging, and the LLM might choose differently each time.</p> <p>This is fine for creative writing or brainstorming. It&rsquo;s less fine when you need the semantic meaning of your code to be preserved.</p> <h3 id="the-ambiguous-input-problem">The ambiguous input problem</h3> <p>Natural language is inherently ambiguous. When you tell an LLM to “fix the authentication bug,” you’re assuming it understands:</p> <ul> <li>Which authentication system you’re using</li> <li>What “bug” means in this context</li> <li>What “fixed” looks like</li> <li>Which security properties must be preserved</li> <li>What your threat model is</li> </ul> <p>The LLM will confidently generate code based on what it <em>thinks</em> you mean. Whether that matches what you <em>actually</em> mean is probabilistic.</p> <h3 id="the-unambiguous-input-problem-which-isnt">The unambiguous input problem (which isn’t)</h3> <p>“Okay,” you might say, “but what if I give the LLM unambiguous input? What if I say ‘translate this C code to Python’ and provide the exact C code?”</p> <p>Here&rsquo;s the thing: even that isn’t as unambiguous as it seems. Consider this C code:</p> <figure class="highlight"> <pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="c1">// C code </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="nf">increment</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre> </figure> <p>I asked Claude Opus 4.5 (extended thinking), Gemini 3 Pro, and ChatGPT 5.2 to translate this code to Python, and they all produced the same result:</p> <figure class="highlight"> <pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="c1"># Python code</span> </span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">increment</span><span class="p">(</span><span class="n">n</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span></span></span></code></pre> </figure> <p>It is subtle, but the semantics have changed. In Python, signed integer arithmetic has arbitrary precision. In C, overflowing a signed integer is undefined behavior: it might wrap, might crash, <a href="https://thephd.dev/c-undefined-behavior-and-the-sledgehammer-guideline">might do literally anything</a>. In Python, it’s well defined: you get a larger integer. None of the leading foundation models caught this difference. Why not? It depends on whether they were trained on examples highlighting this distinction, whether they “remember” the difference at inference time, and whether they consider it important enough to flag.</p> <p>There exist an infinite number of Python programs that would behave identically to the C code for all valid inputs. An LLM is not guaranteed to produce any of them.</p> <p>In fact, it’s impossible for an LLM to exactly translate the code without knowing how the original C developer <em>expected</em> or <em>intended</em> the C compiler to handle this edge case. Did the developer know that the inputs would never cause the addition to overflow? Or perhaps they inspected the assembly output and concluded that their specific compiler wraps to zero on overflow, and that behavior is required elsewhere in the code?</p> <h2 id="a-case-study-when-claude-fixed-a-bug-that-wasnt-there">A case study: When Claude “fixed” a bug that wasn’t there</h2> <p>Let me share a recent experience that crystallizes this problem perfectly.</p> <p>A developer suspected that a new open-source tool had stolen and open-sourced their code without a license. They decided to use <a href="https://github.com/trailofbits/vendetect">Vendetect</a>, an automated source code plagiarism detection tool I developed at Trail of Bits. Vendetect is designed for exactly this use case: you point it at two Git repos, and it finds portions of one repo that were copied from the other, including the specific offending commits.</p> <p>When the developer ran Vendetect, it failed with a stack trace.</p> <p>The developer, reasonably enough, turned to Claude for help. Claude analyzed the code, examined the stack trace, and quickly identified what it <em>thought</em> was the culprit: a complex recursive Python function at the heart of Vendetect’s Git repo analysis. Claude helpfully submitted both a GitHub issue and an extensive pull request “fixing” the bug.</p> <p>I was assigned to review the PR.</p> <p>First, I looked at the GitHub issue. It had been months since I’d written that recursive function, and Claude’s explanation seemed plausible! It really did look like a bug. When I checked out the code from the PR, the crash was indeed gone. No more stack trace. Problem solved, right?</p> <p>Wrong.</p> <p>Vendetect’s output was now empty. When I ran the unit tests, they were failing. Something was broken.</p> <p>Now, I know recursion in Python is risky. Python’s stack frames are large enough that you can easily overflow the stack with deep recursion. However, I also knew that the inputs to this particular recursive function were constrained such that it would never recurse more than a few times. Claude either missed this constraint or wasn’t convinced by it. So Claude painfully rewrote the function to be iterative.</p> <p>And broke the logic in the process.</p> <p>I reverted to the original code on the <code>main</code> branch and reproduced the crash. After minutes of debugging, I discovered the actual problem: it wasn’t a bug in Vendetect at all.</p> <p>The developer’s input repository contained two files with the same name but different casing: one started with an uppercase letter, the other with lowercase. Both the developer and I were running macOS, which uses a case-insensitive filesystem by default. When Git tries to operate on a repo with a filename collision on a case-insensitive filesystem, it throws an error. Vendetect faithfully reported this Git error, but followed it with a stack trace to show where in the code the Git error occurred.</p> <p>I did end up modifying Vendetect to handle this edge case and print a more intelligible error message that wasn’t buried by the stack trace. But the bug that Claude had so confidently diagnosed and “fixed” wasn’t a bug at all. Claude had “fixed” working code and broken actual functionality in the process.</p> <p>This experience crystallized the problem: <strong>LLMs approach code the way a human would on their first day looking at a codebase: with no context about why things are the way they are.</strong></p> <p>The recursive function looked risky to Claude because recursion in Python <em>can</em> be risky. Without the context that this particular recursion was bounded by the nature of Git repository structures, Claude made what seemed like a reasonable change. It even “worked” in the sense that the crash disappeared. Only thorough testing revealed that it broke the core functionality.</p> <p>And here’s the kicker: Claude was <em>confident</em>. The GitHub issue was detailed. The PR was extensive. There was no hedging, no uncertainty. Just like a junior developer who doesn’t know what they don’t know.</p> <h2 id="the-scale-problem-when-context-matters-most">The scale problem: When context matters most</h2> <p>LLMs work reasonably well on greenfield projects with clear specifications. A simple web app, a standard CRUD interface, boilerplate code. These are templates the LLM has seen thousands of times. The problem is, these aren’t the situations where developers need the most help.</p> <p>Consider software architecture like building architecture. A prefabricated shed works well for storage: the requirements are simple, the constraints are standard, and the design can be templated. This is your greenfield web app with a clear spec. LLMs can generate something functional.</p> <p>But imagine iteratively cobbling together a skyscraper with modular pieces and no cohesive plan from the start. You literally end up with Kowloon Walled City: functional, but unmaintainable.</p> <p> <figure> <img src="https://blog.trailofbits.com/2025/12/19/can-chatbots-craft-correct-code/chatbots-craft-correct-code-image-1_hu_9b7cb33d29b14aa2.webp" alt="Figure 1: Gemini’s idea of what an iteratively constructed skyscraper would look like." width="1024" height="559" loading="lazy" decoding="async" /> <figcaption>Figure 1: Gemini’s idea of what an iteratively constructed skyscraper would look like.</figcaption> </figure> </p> <p>And what about renovating a 100-year-old building? You need to know:</p> <ul> <li>Which walls are load-bearing</li> <li>Where utilities are routed</li> <li>What building codes applied when it was built</li> <li>How previous renovations affected the structure</li> <li>What materials were used and how they’ve aged</li> </ul> <p>The architectural plans—the original, deterministic specifications—are essential. You can’t just send in a contractor who looks at the building for the first time and starts swinging a sledgehammer based on what seems right.</p> <p>Legacy codebases are exactly like this. They have:</p> <ul> <li>Poorly documented internal APIs</li> <li>Brittle dependencies no one fully understands</li> <li>Historical context that doesn’t fit in any context window</li> <li>Constraints that aren’t obvious from reading the code</li> <li>Business logic that emerged from <a href="https://ftrain.medium.com/fun-photoshop-file-format-facts-aa1af8a62702">years of incremental requirements changes and accreted functionality</a></li> </ul> <p>When you have a complex system with ambiguous internal APIs, where it’s unclear which service talks to what or for what reason, and the documentation is years out of date and too large to fit in an LLM’s context window, this is exactly when LLMs are most likely to confidently do the wrong thing.</p> <p>The Vendetect story is a microcosm of this problem. The context that mattered—that the recursion was bounded by Git’s structure, that the real issue was a filesystem quirk—wasn’t obvious from looking at the code. Claude filled in the gaps with seemingly reasonable assumptions. Those assumptions were wrong.</p> <h2 id="the-path-forward-formal-verification-and-new-frameworks">The path forward: Formal verification and new frameworks</h2> <p>I’m not arguing against LLM coding assistants. In my extensive use of LLM coding tools, both for code generation and bug finding, I’ve found them genuinely useful. They excel at generating boilerplate code, suggesting approaches, serving as a rubber duck for debugging, and summarizing code. The productivity gains are real.</p> <p>But we need to be clear-eyed about their fundamental limitations.</p> <h3 id="where-llms-work-well-today">Where LLMs work well today</h3> <p>LLMs are most effective when you have:</p> <ul> <li>Clean, well-documented codebases with idiomatic code</li> <li>Greenfield projects</li> <li>Excellent test coverage that catches errors immediately</li> <li>Tasks where errors are quickly obvious (it crashes, the output is wrong), allowing the LLM to iteratively climb toward the goal</li> <li>Pair-programming style review by experienced developers who understand the context</li> <li>Clear, unambiguous specifications written by experienced developers</li> </ul> <p>The last two are absolutely necessary for success, but are often not sufficient. In these environments, LLMs can accelerate development. The generated code might not be perfect, but errors are caught quickly and the cost of iteration is low.</p> <h3 id="what-we-need-to-build">What we need to build</h3> <p>If the ultimate goal is to raise the level of abstraction for developers <em>above</em> reviewing code, we will need these frameworks and practices:</p> <p><strong>Formal verification frameworks for LLM output.</strong> We will need tools that can prove semantic preservation—that the LLM’s changes maintain the intended behavior of the code. This is hard, but it’s not impossible. We already have formal methods for certain domains; we need to extend them to cover LLM-generated code.</p> <p><strong>Better ways to encode context and constraints.</strong> LLMs need more than just the code; they need to understand the invariants, the assumptions, the historical context. We need better ways to capture and communicate this.</p> <p><strong>Testing frameworks that go beyond “does it crash?”</strong> We need to test semantic correctness, not just syntactic validity. Does the code do what it’s supposed to do? Are the security properties maintained? Are the performance characteristics acceptable? Unit tests are not enough.</p> <p><strong>Metrics for measuring semantic correctness.</strong> “It compiles” isn’t enough. Even “it passes tests” isn’t enough. We need ways to quantify whether the semantics have been preserved.</p> <p><strong>Composable building blocks that are secure by design.</strong> Instead of allowing the LLM to write arbitrary code, we will need the LLM to instead build with modular, composable building blocks that have been verified as secure. A bit like how industrial supplies have been commoditized into Lego-like parts. Need a NEMA 23 square body stepper motor with a D profile shaft? No need to design and build it yourself—you can buy a commercial-off-the-shelf motor from any of a dozen different manufacturers and they will all bolt into your project just as well. Likewise, LLMs shouldn’t be implementing their own authentication flows. They should be orchestrating pre-made authentication modules.</p> <h3 id="the-trust-model">The trust model</h3> <p>Until we have these frameworks, we need a clear mental model for LLM output: <strong>Treat it like code from a junior developer who’s seeing the codebase for the first time.</strong></p> <p>That means:</p> <ul> <li>Always review thoroughly</li> <li>Never merge without testing</li> <li>Understand that “looks right” doesn&rsquo;t mean “is right”</li> <li>Remember that LLMs are confident even when wrong</li> <li>Verify that the solution solves the actual problem, not a plausible-sounding problem</li> </ul> <p>As a probabilistic system, there’s always a chance an LLM will introduce a bug or misinterpret its prompt. (These are really the same thing.) How small does that probability need to be? Ideally, it would be smaller than a human’s error rate. We’re not there yet, not even close.</p> <h2 id="conclusion-embracing-verification-in-the-age-of-ai">Conclusion: Embracing verification in the age of AI</h2> <p>The fundamental computational limitations on automation haven’t changed since I wrote about them in 2017. What has changed is that we now have tools that make it easier to generate incorrect code confidently and at scale.</p> <p>When we moved from assembly to C, we didn’t abandon determinism; we built compilers that guaranteed semantic preservation. As we move toward LLM-assisted development, we need similar guarantees. But the solution isn’t to reject LLMs! They offer real productivity gains for certain tasks. We just need to remember that their output is only as trustworthy as code from someone seeing the codebase for the first time. Just as we wouldn’t merge a PR from a new developer without review and testing, we can’t treat LLM output as automatically correct.</p> <p>If you’re interested in formal verification, automated testing, or building more trustworthy AI systems, <a href="https://www.trailofbits.com/contact/">get in touch</a>. At Trail of Bits, we’re working on exactly these problems, and we’d love to hear about your experiences with LLM coding tools, both the successes and the failures. Because right now, we’re all learning together what works and what doesn’t. And the more we share those lessons, the better equipped we&rsquo;ll be to build the verification frameworks we need.</p>