<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Today I Learned · Maimul</title>
  <link>https://maimul.github.io/blog/</link>
  <atom:link href="https://maimul.github.io/blog/feed.xml" rel="self" type="application/rss+xml"/>
  <description>One thing I learned, written up like a newspaper feature.</description>
  <language>en</language>
  <lastBuildDate>Mon, 26 Oct 2026 09:00:00 +0800</lastBuildDate>
  <item>
    <title>The Deploy That Went Green and Shipped Nothing</title>
    <link>https://maimul.github.io/blog/005-deploy-green-shipped-nothing/</link>
    <guid isPermaLink="true">https://maimul.github.io/blog/005-deploy-green-shipped-nothing/</guid>
    <pubDate>Mon, 26 Oct 2026 09:00:00 +0800</pubDate>
    <description>My home server&#x27;s deploy failed at step one, and every step after it reported success. Here&#x27;s how a failure goes missing in a deploy chain, and a copy-paste script that refuses to call nothing a success.</description>
    <category>deploys</category>
    <category>git</category>
    <category>bash</category>
    <category>zsh</category>
    <category>docker</category>
    <category>kubernetes</category>
    <category>k3s</category>
    <category>rclone</category>
    <category>home-lab</category>
  </item>
  <item>
    <title>The Guard That Couldn’t Read, So It Waved the Commit Through</title>
    <link>https://maimul.github.io/blog/004-green-gate-red-commit/</link>
    <guid isPermaLink="true">https://maimul.github.io/blog/004-green-gate-red-commit/</guid>
    <pubDate>Sat, 24 Oct 2026 09:00:00 +0800</pubDate>
    <description>My AI coding agent was only allowed to commit code once the code passed my checks. One night the checks failed, the agent committed anyway, and the guard I&#x27;d built to stop exactly that did nothing. Here&#x27;s why, in plain words, and the rule that fixes it.</description>
    <category>claude-code</category>
    <category>git-hooks</category>
    <category>ai-coding-agents</category>
    <category>ci</category>
    <category>bash</category>
    <category>fail-closed</category>
    <category>incident-review</category>
    <category>devops</category>
  </item>
  <item>
    <title>Every Test Passed. Production Returned 500.</title>
    <link>https://maimul.github.io/blog/003-every-test-passed-production-500/</link>
    <guid isPermaLink="true">https://maimul.github.io/blog/003-every-test-passed-production-500/</guid>
    <pubDate>Wed, 21 Oct 2026 09:00:00 +0800</pubDate>
    <description>My test suite was green, my smoke test was green, and a photo upload in a FastAPI app I work on had never worked. Here&#x27;s the Python behaviour that hid it, the test that now catches it, and why fixing the bug still didn&#x27;t fix the feature.</description>
    <category>python</category>
    <category>imports</category>
    <category>fastapi</category>
    <category>testing</category>
    <category>ci</category>
    <category>kubernetes</category>
    <category>sqlalchemy</category>
  </item>
  <item>
    <title>The Case of the Printer Nobody Could Reach</title>
    <link>https://maimul.github.io/blog/002-bonjour-avahi-nas-printer/</link>
    <guid isPermaLink="true">https://maimul.github.io/blog/002-bonjour-avahi-nas-printer/</guid>
    <pubDate>Mon, 19 Oct 2026 09:00:00 +0800</pubDate>
    <description>My iPhone could see my home printer, but it hadn&#x27;t printed a page in 127 days. Here&#x27;s how I tracked down why, what finally fixed it, and how to check your own setup when AirPrint goes quiet.</description>
    <category>bonjour</category>
    <category>mdns</category>
    <category>avahi</category>
    <category>airprint</category>
    <category>cups</category>
    <category>synology</category>
    <category>docker</category>
    <category>home-network</category>
  </item>
  <item>
    <title>AirPrint for a Printer That Never Had It</title>
    <link>https://maimul.github.io/blog/001-airprint-for-any-printer/</link>
    <guid isPermaLink="true">https://maimul.github.io/blog/001-airprint-for-any-printer/</guid>
    <pubDate>Mon, 19 Oct 2026 09:00:00 +0800</pubDate>
    <description>My Epson L3250 doesn&#x27;t support AirPrint, so my iPhone can&#x27;t see it. One small container on my Synology NAS fixes that. Here&#x27;s how it works, and how to set it up for your own printer.</description>
    <category>airprint</category>
    <category>cups</category>
    <category>avahi</category>
    <category>bonjour</category>
    <category>docker</category>
    <category>synology</category>
    <category>home-network</category>
  </item>
</channel>
</rss>
