<?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-07-02T00:00:00+00:00</updated>
  <id>https://baweaver.com/</id>
  <author>
    <name>Brandon Weaver</name>
  </author>
  <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>
  <entry>
    <title>Grab the Chainsaw</title>
    <link href="https://baweaver.com/writing/2026/05/27/grab-the-chainsaw/" rel="alternate" type="text/html"/>
    <published>2026-05-27T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2026/05/27/grab-the-chainsaw/</id>
    <summary>A tornado flattened my town in 2011. What I learned that night still shapes how I show up to work today.</summary>
  </entry>
  <entry>
    <title>Noah Gibbs: Mentor, Friend, Ally</title>
    <link href="https://baweaver.com/writing/2024/12/27/noah-gibbs-mentor-friend-ally-4171/" rel="alternate" type="text/html"/>
    <published>2024-12-27T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/12/27/noah-gibbs-mentor-friend-ally-4171/</id>
    <summary>Content Warning: Death of a Ruby community member  I woke up this morning to receive the news, among...</summary>
  </entry>
  <entry>
    <title>Let&#39;s Read - Eloquent Ruby - Ch 21 – Method Missing</title>
    <link href="https://baweaver.com/writing/2024/10/04/lets-read-eloquent-ruby-ch-21-1h3g/" rel="alternate" type="text/html"/>
    <published>2024-10-04T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/10/04/lets-read-eloquent-ruby-ch-21-1h3g/</id>
    <summary>Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...</summary>
  </entry>
  <entry>
    <title>Let&#39;s Read - Eloquent Ruby - Ch 22 – Method Missing Delegation</title>
    <link href="https://baweaver.com/writing/2024/10/04/lets-read-eloquent-ruby-ch-22-4poe/" rel="alternate" type="text/html"/>
    <published>2024-10-04T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/10/04/lets-read-eloquent-ruby-ch-22-4poe/</id>
    <summary>Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...</summary>
  </entry>
  <entry>
    <title>Let&#39;s Read - Eloquent Ruby - Ch 20 – Block Hooks</title>
    <link href="https://baweaver.com/writing/2024/10/03/lets-read-eloquent-ruby-ch-20-21aj/" rel="alternate" type="text/html"/>
    <published>2024-10-03T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/10/03/lets-read-eloquent-ruby-ch-20-21aj/</id>
    <summary>Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...</summary>
  </entry>
  <entry>
    <title>Let&#39;s Read - Eloquent Ruby - Ch 19 – Block Actions</title>
    <link href="https://baweaver.com/writing/2024/09/27/lets-read-eloquent-ruby-ch-19-fjf/" rel="alternate" type="text/html"/>
    <published>2024-09-27T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/09/27/lets-read-eloquent-ruby-ch-19-fjf/</id>
    <summary>Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...</summary>
  </entry>
  <entry>
    <title>Let&#39;s Read - Eloquent Ruby - Ch 18 – Block Wrapping</title>
    <link href="https://baweaver.com/writing/2024/09/26/lets-read-eloquent-ruby-ch-18-3op5/" rel="alternate" type="text/html"/>
    <published>2024-09-26T00:00:00+00:00</published>
    <id>https://baweaver.com/writing/2024/09/26/lets-read-eloquent-ruby-ch-18-3op5/</id>
    <summary>Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...</summary>
  </entry>
</feed>
