One thing I learned, explained clearly. Short by design — if it needs more than a few paragraphs, it becomes a full blog post.
16 entries and counting.
The difference between static dispatch (impl Trait) and dynamic dispatch (dyn Trait) — not just syntax, but a real tradeoff.
How Postfix queues work, why they pile up, and the exact commands to drain, inspect, and recover them when things go sideways.
The three rules Rust uses to infer lifetimes automatically, so you understand when you need to annotate and when the compiler handles it for you.
How file system event APIs differ between Linux and macOS, and why it matters for cross-platform tooling.
The three ways the frontend talks to the Rust backend in Tauri, when to use each, and the one gotcha that wasted an afternoon.
How Nextcloud handles large file uploads under the hood, and how to implement chunked uploads manually when the desktop client isn't an option.
A common Next.js App Router misconception: 'use client' doesn't make a file client-only — it marks the boundary where the client tree starts.
How XState's final states work, what done() events are, and the pattern for composing machines that signal completion to a parent.
git rerere remembers how you resolved a merge conflict and automatically applies the same resolution next time. Useful for long-lived feature branches.
What Drizzle's migration system actually generates, why that's better than magic ORM migrations, and how to handle the edge cases.
git worktree lets you have multiple working trees from one repo — no stashing, no switching, no friction.
One changed line in a Dockerfile invalidates every layer after it. Ordering your Dockerfile with this in mind cuts rebuild times dramatically.
Passing SPF and DKIM doesn't mean DMARC passes. Alignment is a separate check — and missing it is why your authenticated emails still land in spam.
How to use Docker multi-stage builds to go from a 2GB Rust build image to a 12MB production image.
The difference between PgBouncer's pooling modes, why transaction mode breaks prepared statements, and which to use for Next.js apps.
Without keepalive on Nginx upstream blocks, every proxied request opens a new TCP connection to your backend. One directive fixes this.
Looking for longer-form writing? Read the blog for full articles, series, and in-depth explorations.