<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nexolid</title><link>https://nexolid.click/</link><description>Notes from a platform engineer: Linux, containers, Postgres, shell and the boring parts of keeping systems running.</description><language>en-US</language><lastBuildDate>Tue, 03 Nov 2026 08:45:00 +0100</lastBuildDate><atom:link href="https://nexolid.click/index.xml" rel="self" type="application/rss+xml"/><item><title>Debugging DNS with dig, step by step</title><link>https://nexolid.click/posts/debugging-dns-with-dig/</link><pubDate>Tue, 03 Nov 2026 08:45:00 +0100</pubDate><guid>https://nexolid.click/posts/debugging-dns-with-dig/</guid><description>&lt;p&gt;&amp;ldquo;It&amp;rsquo;s always DNS&amp;rdquo; is a joke because it&amp;rsquo;s usually true. After a migration last week, a customer-facing hostname resolved correctly for half the team and pointed at the old load balancer for the other half. Ten minutes with &lt;code&gt;dig&lt;/code&gt; explained it. Here&amp;rsquo;s the sequence I go through, roughly in order.&lt;/p&gt;</description></item><item><title>Let git find the regression: git bisect run</title><link>https://nexolid.click/posts/git-bisect-run/</link><pubDate>Wed, 07 Oct 2026 19:15:00 +0200</pubDate><guid>https://nexolid.click/posts/git-bisect-run/</guid><description>&lt;p&gt;Last month an integration test started timing out on main. It hadn&amp;rsquo;t been touched in a year, it passed on the release tag from three weeks earlier, and between the two there were 340 commits from eleven people. Reading the log was hopeless. &lt;code&gt;git bisect run&lt;/code&gt; found the culprit in nine steps while I made coffee.&lt;/p&gt;</description></item><item><title>Postgres backups with restic, and actually restoring them</title><link>https://nexolid.click/posts/postgres-backups-with-restic/</link><pubDate>Mon, 14 Sep 2026 09:30:00 +0200</pubDate><guid>https://nexolid.click/posts/postgres-backups-with-restic/</guid><description>&lt;p&gt;A backup you&amp;rsquo;ve never restored is a hope, not a backup. I learned that the cheap way, thankfully: during a drill, not an outage. Our nightly job had been writing a perfectly valid, perfectly empty dump for three weeks because &lt;code&gt;pg_dump&lt;/code&gt; failed on authentication and the pipe after it didn&amp;rsquo;t care.&lt;/p&gt;</description></item><item><title>The traps in set -euo pipefail</title><link>https://nexolid.click/posts/bash-strict-mode-traps/</link><pubDate>Mon, 24 Aug 2026 21:40:00 +0200</pubDate><guid>https://nexolid.click/posts/bash-strict-mode-traps/</guid><description>&lt;p&gt;Almost every bash script I write starts with the same line:&lt;/p&gt;&#10;&lt;figure class="code"&gt;&#13;&#10; &lt;figcaption&gt;&#13;&#10; &lt;span class="code-title"&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/span&gt;&#13;&#10; &lt;button class="copy" type="button" aria-label="Copy code to clipboard" hidden&gt;&lt;svg class="icon i-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="11" height="11" rx="2.2"/&gt;&lt;path d="M15 9V6.2A2.2 2.2 0 0 0 12.8 4H6.2A2.2 2.2 0 0 0 4 6.2v6.6A2.2 2.2 0 0 0 6.2 15H9"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&#13;&#10; &lt;/figcaption&gt;&#13;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -euo pipefail&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#13;&#10;&lt;/figure&gt;&lt;p&gt;What each flag does:&lt;/p&gt;</description></item><item><title>Small Docker images with multi-stage builds</title><link>https://nexolid.click/posts/small-docker-images-multi-stage/</link><pubDate>Sun, 02 Aug 2026 18:05:00 +0200</pubDate><guid>https://nexolid.click/posts/small-docker-images-multi-stage/</guid><description>&lt;p&gt;Image size sounds like a vanity metric until you have forty services, a registry bill and a deploy that spends most of its time pulling layers. Smaller images also mean fewer packages for the security scanner to complain about and a smaller attack surface if something does go wrong.&lt;/p&gt;</description></item><item><title>systemd timers vs cron: why I finally switched</title><link>https://nexolid.click/posts/systemd-timers-vs-cron/</link><pubDate>Sun, 12 Jul 2026 10:20:00 +0200</pubDate><guid>https://nexolid.click/posts/systemd-timers-vs-cron/</guid><description>&lt;p&gt;For years my rule was simple: if it runs on a schedule, it goes in cron. One line, everyone can read it, done. Then a nightly job started taking longer than its interval, two copies ran at once, and both wrote to the same file. Nobody noticed for a week because cron mailed the errors to a local mailbox that nobody reads.&lt;/p&gt;</description></item></channel></rss>