Series: Ansible Like a Pro Part 1: Why Ansible Won Config Management — Config management landscape, why Ansible won, the architecture of ansible-navigator and execution environments Part 2: Building a Real Execution Environment — Pinned and private collections, Python dependency conflicts, the additional_build_steps escape hatch, a local registry for sharing Part 3 ← You are here — Inventories, your first real playbook, the navigator TUI versus stdout, artifacts and replay, and the first-week mistakes Part 4: Roles, Reuse, and Keeping It Honest — Planned Two parts of plumbing. That’s what you’ve sat through so far. Part 1 was the why, Part 2 was the container the why runs in. Neither of them configured a single server. ...
Ansible Like a Pro — Part 2: Building a Real Execution Environment
Series: Ansible Like a Pro Part 1: Why Ansible Won Config Management — Config management landscape, why Ansible won, the architecture of ansible-navigator and execution environments Part 2 ← You are here — Building a real execution environment: pinned and private collections, Python dependency conflicts, the additional_build_steps escape hatch, and a local registry for sharing Part 3: Writing Your First Playbook with Navigator — Inventories, your first real playbook, the navigator TUI versus stdout, artifacts and replay, and the first-week mistakes In Part 1 we built an execution environment. Twenty lines of YAML, one ansible-builder build, and we were running playbooks inside a container. That was the toy. ...
Ansible Like a Pro — Part 1: Why Ansible Won Config Management (and What Came Before)
Series: Ansible Like a Pro Part 1 ← You are here — Config management landscape, why Ansible won, architecture of ansible-navigator and execution environments Part 2: Building a Real Execution Environment — Pinned and private collections, Python dependency conflicts, the additional_build_steps escape hatch, a local registry for sharing Part 3: Writing Your First Playbook with Navigator — Inventories, your first real playbook, the navigator TUI versus stdout, artifacts and replay, and the first-week mistakes I’ve been doing config management for over a decade now. Puppet in 2012. Chef in 2014. Salt around 2016. Ansible since 2017. I’ve got the scars. ...
Git for Real People: From Your First Commit to Surviving Merge Conflicts
I’ve been using Git for about four years now and I still occasionally do things that make me go “what the hell was I thinking?” This is not that kind of guide. You know the ones — they exist by the thousands and most of them are written by people who assume you’ve never used a terminal before or — more annoyingly — people who assume you already know everything and just need a cheatsheet. This is somewhere in the middle. ...
Mining Exam Papers With Vision LLMs: Building a PDF Question Extractor
Building a scalable question bank extractor using vision language models. Qwen2-7B on serverless GPUs, PyMuPDF text extraction, structured JSON output, and parallel batch processing of 1000+ question papers. The hard parts, the broken parts, and what I’d do differently.
Your Own Private LLM Farm: Bare-Metal K8s With GPU Autoscaling
I wanted my own LLM inference setup on bare metal — GPU-backed K8s, autoscaling that actually works with vLLM metrics, and auth so random internet people can’t drain my GPU credits. Here’s how it went.
VXLAN, OVS, and DPDK in KVM/libvirt: Building a Multi-Host VM Overlay Network
Deep dive into building a multi-host overlay network: VXLAN + OVS tunnels between hosts, libvirt network definitions, QEMU command-line DPDK setup with vhost-user, NUMA-aware vCPU pinning, and practical validation techniques. Designed for home lab experimentation.
Why Your 10G Network Still Drops Packets: DCBX, RoCE, and the Lossless Ethernet Trade-Off
I’ve spent years designing lossless Ethernet fabrics for latency-sensitive workloads. Here’s why DCBX and RoCE are the unsung backbone of everything from high-frequency trading to training billion-parameter models across GPU clusters.
Pi.dev: The Coding Agent You Actually Control
Pi is a coding agent that doesn’t tell you how to work. Terminal-native, extensible via TypeScript, with 15+ providers and four operating modes. Here’s how it works, what makes it different from Cursor and Claude Code, and how to build your first extension.
How Architects Design Stuff That Actually Scales
A deep look at how architects like Gregor Hohpe (Google Cloud, AWS veteran) design frameworks that scale and handle failure. The 8-step framework, the cylinder problem, and why step 8 is the hardest.