<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>baweaver</title>
  <subtitle>Engineering systems that endure.</subtitle>
  <link href="https://baweaver.com/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://baweaver.com/" rel="alternate" type="text/html"/>
  <updated>2026-08-22T00:00:00+00:00</updated>
  <id>https://baweaver.com/</id>
  <author>
    <name>Brandon Weaver</name>
  </author>
  <entry>
    <title>Rails: The Sharp Parts. The Block Is Not the Transaction</title>
    <link href="https://baweaver.com/writing/2026/08/22/rails-sharp-parts-the-block-is-not-the-transaction/" rel="alternate" type="text/html"/>
    <published>2026-08-22T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/08/22/rails-sharp-parts-the-block-is-not-the-transaction/</id>
    <summary>Transactions are more complicated than an easy-to-use block, and treating them as such will come back to bite you. This article will cover a few of them.</summary>
  </entry>
  <entry>
    <title>Tales of the Autistic Developer - Bringing It Into Focus</title>
    <link href="https://baweaver.com/writing/2026/08/10/tales-of-the-autistic-developer-bringing-it-into-focus/" rel="alternate" type="text/html"/>
    <published>2026-08-10T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/08/10/tales-of-the-autistic-developer-bringing-it-into-focus/</id>
    <summary>How I process problems: hyperphantasia, rotation, the click moment, and using AI as a variance accelerator for a brain that generates more ideas than it can hold.</summary>
  </entry>
  <entry>
    <title>Beyond Senior - Creating Hope</title>
    <link href="https://baweaver.com/writing/2026/08/09/beyond-senior-creating-hope/" rel="alternate" type="text/html"/>
    <published>2026-08-09T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/08/09/beyond-senior-creating-hope/</id>
    <summary>Organizations teach themselves helplessness through reinforcing loops of scarcity, cynicism, and declining trust. This article is about breaking that cycle.</summary>
  </entry>
  <entry>
    <title>My Development Setup in 2026</title>
    <link href="https://baweaver.com/writing/2026/08/04/my-development-setup-in-2026/" rel="alternate" type="text/html"/>
    <published>2026-08-04T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/08/04/my-development-setup-in-2026/</id>
    <summary>A walkthrough of my current development environment: Ghostty, MonoLisa, mise, ZSH without a framework, and why I automated the whole thing into a single script.</summary>
  </entry>
  <entry>
    <title>Tales of the Autistic Developer - Panic</title>
    <link href="https://baweaver.com/writing/2026/08/04/tales-of-the-autistic-developer-panic/" rel="alternate" type="text/html"/>
    <published>2026-08-04T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/08/04/tales-of-the-autistic-developer-panic/</id>
    <summary>For those who don&#39;t know me, I&#39;m autistic. This post is about panic: the kind that locks your body, floods your brain, and makes every solution feel equally impossible.</summary>
  </entry>
  <entry>
    <title>A Rubyist in Go Land: Your First Pokémon API Client</title>
    <link href="https://baweaver.com/writing/2026/07/24/a-rubyist-in-go-land-your-first-pokemon-api-client/" rel="alternate" type="text/html"/>
    <published>2026-07-24T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/07/24/a-rubyist-in-go-land-your-first-pokemon-api-client/</id>
    <summary>I need to level up on Go, and Pokémon data felt like a good excuse. This post builds the same API client in Ruby and Go, comparing how I think about the problem in each.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: Testing Membership with Bloom Filters</title>
    <link href="https://baweaver.com/writing/2026/07/20/beyond-enumerable-testing-membership-with-bloom-filters/" rel="alternate" type="text/html"/>
    <published>2026-07-20T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/07/20/beyond-enumerable-testing-membership-with-bloom-filters/</id>
    <summary>Checking whether you&#39;ve seen something before usually means storing everything you&#39;ve seen. A Bloom filter does it in about ten bits per item and can only be wrong in one direction. This post builds from a single bit to the structure RocksDB and Cassandra use to skip disk reads.</summary>
  </entry>
  <entry>
    <title>Ozymandias on Rails. Cartography of a Ruin</title>
    <link href="https://baweaver.com/writing/2026/07/02/ozymandias-on-rails-cartography-of-a-ruin/" rel="alternate" type="text/html"/>
    <published>2026-07-02T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/07/02/ozymandias-on-rails-cartography-of-a-ruin/</id>
    <summary>You inherited a monolith with no map. This is how you start drawing one.</summary>
  </entry>
  <entry>
    <title>Ozymandias on Rails. The Pedestal Inscription</title>
    <link href="https://baweaver.com/writing/2026/06/28/ozymandias-on-rails-the-pedestal-inscription/" rel="alternate" type="text/html"/>
    <published>2026-06-28T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/28/ozymandias-on-rails-the-pedestal-inscription/</id>
    <summary>Every successful Rails monolith becomes a ruin if it survives long enough. This post is about why, and what a recovery looks like from the inside.</summary>
  </entry>
  <entry>
    <title>Rails: The Sharp Parts. A Polymorphic Type Is Not a Foreign Key</title>
    <link href="https://baweaver.com/writing/2026/06/25/rails-sharp-parts-a-polymorphic-type-is-not-a-foreign-key/" rel="alternate" type="text/html"/>
    <published>2026-06-25T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/25/rails-sharp-parts-a-polymorphic-type-is-not-a-foreign-key/</id>
    <summary>Polymorphic associations store a relationship as a class name in a string with no foreign key. That has unintended consequences which may not be obvious, and this article covers five of them.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: Counting Distinct with HyperLogLog</title>
    <link href="https://baweaver.com/writing/2026/06/15/beyond-enumerable-counting-distinct-with-hyperloglog/" rel="alternate" type="text/html"/>
    <published>2026-06-15T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/15/beyond-enumerable-counting-distinct-with-hyperloglog/</id>
    <summary>Counting distinct values exactly means remembering all of them. HyperLogLog does it in 16 kilobytes. This post builds from coin flips to bitmaps to the algorithm Redis uses behind PFCOUNT.</summary>
  </entry>
  <entry>
    <title>Rails: The Sharp Parts. Queries, Read Models, and Batching</title>
    <link href="https://baweaver.com/writing/2026/06/14/rails-sharp-parts-queries-read-models-and-batching/" rel="alternate" type="text/html"/>
    <published>2026-06-14T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/14/rails-sharp-parts-queries-read-models-and-batching/</id>
    <summary>Queries own the reads the way commands own the writes, and a T::Struct is the only thing that crosses between them. Every read here ran against ActiveRecord 8.1 before it went in.</summary>
  </entry>
  <entry>
    <title>Rails: The Sharp Parts. Callbacks Are Not Invariants</title>
    <link href="https://baweaver.com/writing/2026/06/13/rails-sharp-parts-callbacks-are-not-invariants/" rel="alternate" type="text/html"/>
    <published>2026-06-13T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/13/rails-sharp-parts-callbacks-are-not-invariants/</id>
    <summary>Callbacks promise that something always happens when a record changes. They can&#39;t keep that promise, and Rails documents the ways out. Every failure mode here ran against ActiveRecord 8.1 before it went in, and the replacement is a command with one door.</summary>
  </entry>
  <entry>
    <title>Rails: The Sharp Parts. An Index Is Not a Plan</title>
    <link href="https://baweaver.com/writing/2026/06/12/rails-sharp-parts-an-index-is-not-a-plan/" rel="alternate" type="text/html"/>
    <published>2026-06-12T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/12/rails-sharp-parts-an-index-is-not-a-plan/</id>
    <summary>add_index looks like a one-line fix for slow queries. It isn&#39;t. This article walks through the failure modes, proves each one with EXPLAIN on half a million rows, and shows how to build an index the optimizer will actually use.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: Streaming and External Sort</title>
    <link href="https://baweaver.com/writing/2026/06/09/beyond-enumerable-streaming-and-external-sort/" rel="alternate" type="text/html"/>
    <published>2026-06-09T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/09/beyond-enumerable-streaming-and-external-sort/</id>
    <summary>Enumerable assumes the whole collection fits in memory. This post is about what happens when it doesn&#39;t, built up one step at a time from lazy streams to external merge sort.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: Graphs and Traversal</title>
    <link href="https://baweaver.com/writing/2026/06/08/beyond-enumerable-graphs-and-traversal/" rel="alternate" type="text/html"/>
    <published>2026-06-08T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/08/beyond-enumerable-graphs-and-traversal/</id>
    <summary>Enumerable named the ways we walk a line, but some data is not a line. This article builds graphs up from a plain Hash, covering dependency ordering, tsort, friend lists, and a few pathfinding algorithms.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: Heaps and Priority Queues</title>
    <link href="https://baweaver.com/writing/2026/06/06/beyond-enumerable-heaps-and-priority-queues/" rel="alternate" type="text/html"/>
    <published>2026-06-06T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/06/beyond-enumerable-heaps-and-priority-queues/</id>
    <summary>Enumerable named our traversals, but some collections live past it. This post goes after ordered retrieval: heaps, priority queues, their real uses, and why they belong in Ruby itself.</summary>
  </entry>
  <entry>
    <title>Rails: The Sharp Parts. lock Is Not a Mutex</title>
    <link href="https://baweaver.com/writing/2026/06/05/rails-sharp-parts-lock-is-not-a-mutex/" rel="alternate" type="text/html"/>
    <published>2026-06-05T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/06/05/rails-sharp-parts-lock-is-not-a-mutex/</id>
    <summary>lock looks like a one-line fix for concurrency bugs. It isn&#39;t. This article walks through eight failure modes, proves each one with forking tests, and shows what actually holds an invariant.</summary>
  </entry>
  <entry>
    <title>Beyond Enumerable: For Want of Better Windows</title>
    <link href="https://baweaver.com/writing/2026/05/31/beyond-enumerable-for-want-of-better-windows/" rel="alternate" type="text/html"/>
    <published>2026-05-31T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/05/31/beyond-enumerable-for-want-of-better-windows/</id>
    <summary>Enumerable taught us a better path for iteration, what if we applied those lessons to other forms of iteration? This article covers windows and pointers.</summary>
  </entry>
  <entry>
    <title>AI Didn&#39;t Create These Problems. It Just Stopped Routing Around Them.</title>
    <link href="https://baweaver.com/writing/2026/05/27/ai-didnt-create-these-problems/" rel="alternate" type="text/html"/>
    <published>2026-05-27T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/05/27/ai-didnt-create-these-problems/</id>
    <summary>Every guardrail we need for AI is a good practice we should have already been doing. AI exposes the systemic gaps that experienced developers have been quietly routing around for years.</summary>
  </entry>
</feed>
