Blog
The other sites in this collection are reference notes, written to be looked things up in. This one is the opposite. Each post takes something built or run for real, then explains the decisions, the trade-offs, and what the measurements said.
The subjects track what was actually being worked on: home lab infrastructure, then Django and real-world API integration, then LLM systems, then hardware and the physical-engineering side. Most posts carry charts built from real runs rather than illustrative numbers.
Posts, Newest First
| Date | Post | Covers |
|---|---|---|
| 2026-08-11 | Which Diagram Answers Which Question | Diagrams fail by mixing zoom levels, not by picking the wrong notation. Choose by axis, draw C4 levels 1 and 2 and stop, keep sequence/ER/C4-container, and apply the ceremony test |
| 2026-08-11 | Compliance Is a Sales Function | Certificates prove controls exist to a procurement team; they do not make you secure. Plus the Australian privacy obligations that bind you whether or not you certify, including why the small-business exemption does not apply to health data |
| 2026-08-11 | Machine Safety for Software Engineers | AS 4024 is not law but is how you demonstrate “reasonably practicable”. The 1501/1502-vs-1503 trap, how Performance Levels are derived from the hazard, and the safety-distance calculation you will actually do |
| 2026-08-05 | Pulumi vs Terraform | Same model and mostly the same providers. The two real differences are the Automation API and testability; Output[T] is the tax you pay for a real language |
| 2026-07-28 | asyncio After 3.11 | TaskGroup, asyncio.timeout() and uncancel() changed which patterns are correct, plus the fire-and-forget task that gets garbage collected mid-execution |
| 2026-07-24 | A Webcam and a Microphone Through a Proxmox LXC | Video and audio are separate passthroughs, auto-exposure is a frame-rate control, CAP_PROP_BUFFERSIZE halves throughput for nothing, and CLAP silently accepts audio at the wrong sample rate |
| 2026-07-12 | What Actually Fits on a 12 GB GPU | Three budgets rather than one. Params times two bytes, why load_in_4bit does not shrink the download, and the 22.7 GB fp32 text encoder inside a “1.3B” video model |
| 2026-07-09 | The Memory Leak That Isn’t a Leak | CPU offload parks weights in system RAM and glibc never hands them back, so RSS ratchets until the container dies. malloc_trim(0) is to RAM what empty_cache() is to VRAM |
| 2026-07-06 | Two Years of a Knowledge Repo | A data-driven retrospective across 18 repos: notebooks per quarter, commits by repo, and how the topics shifted from foundations to LLMs to real APIs to hardware |
| 2026-07-06 | Running a Federated Docs Site | How a dozen independent nbdev and Quarto repos publish to separate Pages sites yet read as one website |
| 2026-07-06 | Brushless Motors, ESCs, and ESC Firmware | How motors, speed controllers and their firmware fit together on a drone, why DShot beats PWM, and where thrust comes from |
| 2026-07-03 | Stepper, Servo, or Brushless | The non-drone case, where the choice turns on what happens when the load wins: a stepper loses position silently, a servo notices. Size to stall, not to rated |
| 2026-06-20 | Sense, Analyze, Decide | Measuring circuits with an IotaWatt, forecasting load and peaks, then deciding whether a home battery pays for itself. Self-consumption is the whole game |
| 2026-06-13 | Cellular IoT in Australia | 2G and 3G are both switched off, Band 28 is non-negotiable, and the regional variant letter on the part number decides whether the board works at all |
| 2026-05-20 | LLM Pipeline Patterns | Six composable patterns from prompt chaining to autonomous agents, the latency cost of autonomy, and where RAG sits among them |
| 2026-03-20 | Modern Python Stack in 2026 | The Rust-powered replacements: uv, Ruff, Marimo and Polars, each measured against what it displaced |
| 2026-03-15 | Building a Production RAG System | Every stage end to end: chunking as the cheapest lever, dense against sparse against hybrid, re-ranking, and where latency and money go |
| 2026-02-20 | Terraform + Ansible for a Home Lab | The seam between provisioning and configuration, and how splitting there keeps a lab reproducible |
| 2025-12-26 | LLM Workflows with n8n | The event-driven half of building with models, and why reliability is the hard part rather than the model |
| 2025-10-20 | From Boto3 to Bedrock | The AWS services actually reached for, with the specific gotcha for each, an adoption timeline and rough monthly cost share |
| 2025-09-15 | OneBRC: Processing a Billion Rows | From a naive loop to Polars and DuckDB, with runtime, peak memory, and where the 100x actually comes from |
| 2025-05-20 | Integrating Real Healthcare APIs | Cliniko, Nookal and Snapforms side by side: auth, pagination, rate limits as a budget, and a checklist for not leaking a record |
| 2025-04-20 | Django Deep Cuts | Killing the N+1, django-q against Celery, Constance for config without a deploy, Channels, and TimescaleDB |
| 2024-12-16 | Proxmox: Everything I’ve Learned Running a Home Lab | Two years of Proxmox VE: VM against LXC against Docker, storage backends, GPU passthrough, cloud-init and backups |
By Subject
The same posts grouped by what they are about, for when you know the topic but not the date.
Infrastructure and the home lab Proxmox · Terraform + Ansible · Pulumi vs Terraform · Boto3 to Bedrock · Federated docs site
Running models on small hardware What fits on a 12 GB GPU · The memory leak that isn’t a leak · Webcam and mic through an LXC
LLM systems Pipeline patterns · Production RAG · Workflows with n8n
Building software Django deep cuts · Healthcare APIs · Modern Python stack · asyncio after 3.11 · One billion rows · Which diagram
Hardware, energy and industry IotaWatt to battery ROI · Brushless motors and ESCs · Motor selection · Cellular IoT in Australia · Machine safety and AS 4024
Running a product Compliance is a sales function
Retrospective Two years of a knowledge repo
Not Covered Yet
- No comments or subscription. Posts are published and left; there is no feed beyond what Quarto generates and no way to respond.
- Nothing on the machine learning work itself. The modelling in ML Methods and DL Methods has never been written up in long form, despite being the largest body of notes in the collection.
- No post-dated corrections. Where a post has been overtaken by later work, the post does not say so.
- Three posts share a single date (2026-07-06), so among those the ordering falls back to post number rather than to when they were actually written.