<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Dan Croak</title>
  <subtitle>Weekly notes on what changed in my thinking.</subtitle>
  <id>https://dancroak.com/changelog</id>
  <updated>2026-10-09T12:00:00Z</updated>
  <author>
    <name>Dan Croak</name>
  </author>
  <link rel="self" href="https://dancroak.com/feed.xml"></link>
  <link rel="alternate" href="https://dancroak.com/changelog"></link>
  <entry>
    <title>Define the database view once, in Go</title>
    <id>https://dancroak.com/changelog#2026-10-09</id>
    <updated>2026-10-09T12:00:00Z</updated>
    <link rel="alternate" href="https://dancroak.com/changelog#2026-10-09"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://dancroak.com/go/generated-views&#34;&gt;go / generated views&lt;/a&gt; moves the SQL of a database&#xA;view into Go. A list of field definitions generates the view, and the&#xA;same list drives the filter UI, so only one copy of the SQL exists.&#xA;&lt;a href=&#34;https://dancroak.com/web/css&#34;&gt;web / css&lt;/a&gt; describes a stylesheet in five layers with a lint&#xA;for class names. Before, a style change on one page sometimes broke&#xA;another page.&lt;/p&gt;&#xA;&lt;p&gt;The job queue, pool, and test articles now say how a pool recovers&#xA;after it loses a database connection, and what to do after editing a&#xA;migration that already ran.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dancroak.com/cmd/sockeye&#34;&gt;cmd / sockeye&lt;/a&gt; changed the most. It is my own git forge,&#xA;so when a 277 KB diff didn&#39;t display, I raised its patch limit to 2 MiB.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>A health check must fail when the service is broken</title>
    <id>https://dancroak.com/changelog#2026-10-02</id>
    <updated>2026-10-02T12:00:00Z</updated>
    <link rel="alternate" href="https://dancroak.com/changelog#2026-10-02"></link>
    <content type="html">&lt;p&gt;In &lt;a href=&#34;https://dancroak.com/web/health-checks&#34;&gt;web / health checks&lt;/a&gt;, the health endpoint now&#xA;reads data that the service uses. That endpoint blocks traffic to a new&#xA;version until it passes, and it runs every minute after that.&lt;/p&gt;&#xA;&lt;p&gt;One rule changed in &lt;a href=&#34;https://dancroak.com/unix/systemd&#34;&gt;unix / systemd&lt;/a&gt;. Each service runs&#xA;as its own system user, so app state and credentials stay out of my&#xA;home directory. A missing &lt;code&gt;useradd&lt;/code&gt; step doesn&#39;t matter anymore,&#xA;because &lt;code&gt;StateDirectory=&lt;/code&gt; makes systemd create the directory.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dancroak.com/apps/sports&#34;&gt;apps / sports&lt;/a&gt; also has a description of the sports&#xA;content agent.&lt;/p&gt;&#xA;</content>
  </entry>
</feed>
