<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Writing — mah3uz</title><link href="https://mah3uz.com/feed-posts.xml" rel="self"/><link href="https://mah3uz.com/"/><id>https://mah3uz.com/feed-posts.xml</id><updated>2026-10-31T09:00:00Z</updated><entry><title>Seventeen years on both sides of the line</title><link href="https://mah3uz.com/blog/seventeen-years-on-both-sides-of-the-line"/><id>https://mah3uz.com/blog/seventeen-years-on-both-sides-of-the-line</id><updated>2026-10-31T09:00:00Z</updated><summary>Most organisations separate the people who build software from the people who run it. I have spent my career doing both. Here is what that taught me about designing systems that survive contact with production.</summary></entry><entry><title>Letting AI agents near production, carefully</title><link href="https://mah3uz.com/blog/letting-ai-agents-near-production"/><id>https://mah3uz.com/blog/letting-ai-agents-near-production</id><updated>2026-10-27T09:00:00Z</updated><summary>AI agents are becoming colleagues with keyboards. After years of managing who can do what on servers, I&#39;ve applied the same principles to them — least privilege, explicit actors, approvals and honest boundaries — across four tools I build.</summary></entry><entry><title>Native Linux apps in Rust with GPUI</title><link href="https://mah3uz.com/blog/native-linux-apps-in-rust-with-gpui"/><id>https://mah3uz.com/blog/native-linux-apps-in-rust-with-gpui</id><updated>2026-10-26T09:00:00Z</updated><summary>Building Sysman&#39;s desktop app on GPUI, the GPU-accelerated framework behind the Zed editor — why I chose it, the charts I had to write myself, and what it takes to ship a native Linux binary that installs cleanly everywhere.</summary></entry><entry><title>The last reading before a crash</title><link href="https://mah3uz.com/blog/the-last-reading-before-a-crash"/><id>https://mah3uz.com/blog/the-last-reading-before-a-crash</id><updated>2026-10-24T09:00:00Z</updated><summary>A monitor is most useful at the exact moment the machine dies — which is when most of them lose their data. Designing Sysman&#39;s collector around one rule, and what it took to keep that rule.</summary></entry><entry><title>Release scripts that refuse to half-ship</title><link href="https://mah3uz.com/blog/release-scripts-that-refuse-to-half-ship"/><id>https://mah3uz.com/blog/release-scripts-that-refuse-to-half-ship</id><updated>2026-10-20T09:00:00Z</updated><summary>The worst release is the one that stops halfway — a tag pushed, a package published, the documentation still describing last week. Every project I ship uses the same pattern to make that impossible: check everything, ask once, then do it all.</summary></entry><entry><title>A lock screen that cannot lock you out</title><link href="https://mah3uz.com/blog/a-lock-screen-that-cannot-lock-you-out"/><id>https://mah3uz.com/blog/a-lock-screen-that-cannot-lock-you-out</id><updated>2026-10-08T09:00:00Z</updated><summary>Theming a login screen means writing to system directories as root; theming a lock screen means one bug can lock someone out of their own machine. How Darwan handles both — a supervised lock, and a root helper that trusts nothing it is given.</summary></entry><entry><title>Why this site runs on a CMS I built</title><link href="https://mah3uz.com/blog/why-this-site-runs-on-a-cms-i-built"/><id>https://mah3uz.com/blog/why-this-site-runs-on-a-cms-i-built</id><updated>2026-09-29T09:00:00Z</updated><summary>Every developer eventually writes a content management system. I did it on purpose, after years of installing, patching and rescuing other people&#39;s. These are the decisions that made Nibble — and the one I got wrong first.</summary></entry><entry><title>SQLite is enough (for most of us)</title><link href="https://mah3uz.com/blog/sqlite-is-enough"/><id>https://mah3uz.com/blog/sqlite-is-enough</id><updated>2026-09-24T09:00:00Z</updated><summary>For most of my career, &quot;which database?&quot; meant &quot;which database server?&quot; Today my default is a file. Here is how to run SQLite in production properly — WAL, backups, honest limits — and when to move on.</summary></entry></feed>
