-
Swapping an 8 GB NVIDIA card for a 32 GB AMD GPU: what broke
I replaced an RTX 4060 Ti with a 32 GB Radeon AI PRO R9700 for local AI. Ten things broke, mostly silently; here they are with fixes, and the before-and-after throughput.
-
A shared memory for me and my AI agents: from 9 to 12 out of 15
I moved my lab's record of tasks, mistakes and runbooks into a context database shared by me, AI assistant sessions and my local agent. Two secrets slipped past redaction on day one; one fact per file plus a reranker lifted retrieval to 12 of 15.
-
Hybrid search with bge-m3 and Elasticsearch: six lessons
What I learned building BM25 + kNN hybrid search with reciprocal rank fusion and bge-m3 on one shared GPU: an analyser mismatch (38 to 2,631 hits), RRF pitfalls, embedding timeouts and a highlighting limit.
-
A passive GPU in a tower: VRAM hit 106 °C while the core throttled
My new 32 GB passive GPU had no plateau under LLM load and its memory reached 106 °C. Measurements, the limits that were silently ignored, and the fan, power cap and clock limit that fixed it.
-
Read, write, critical: permission tiers for a local AI agent
Every tool call my local AI agent makes is rated read, write or critical. Writes need my approval, critical actions need a one-time code bound to that exact operation, and unattended runs only propose.
-
Self-hosting email with Stalwart: deliverability and data-store traps
In October 2026 Gmail started rejecting mail from my own domain, and my DKIM key in DNS had lost every letter n. Seven traps from running Stalwart at home, and the mechanism behind each.
-
From 96,216 messy files to a 70,000-work library catalogue
How I turned 96,216 ebook and scan files into a works/editions/files catalogue on Elasticsearch and FSCrawler: curation rules that worked, markers that backfired, and crawler settings that cost me the most time.
-
ComfyUI on demand: systemd socket activation for a GPU container
Idle ComfyUI held up to 2.8 GB of VRAM my LLMs needed. A systemd socket now starts it on the first request and stops it after 10 idle minutes, and a guard makes room for image jobs.
-
Vision-model OCR that keeps the layout: what to trust it with
A vision model called a bold italic paragraph 'not bold, not italic'. My OCR now lets the model read, Tesseract place small text, and pixel measurement judge typography: 99% precision on italic words.
-
My dynamic DNS job got my home IP banned by the registrar
Polling GoDaddy's API every 5 minutes to keep an apex A record current got my home IP banned. How to diagnose an API ban, switch to change detection with zero calls on a stable day, and avoid two related DNS traps.
-
Live numbers on a static site with cron-generated JSON
My homepage's pod count read 141, 159 and 154 within one hour, so every number on my static site now comes from a JSON file regenerated every 30 minutes. The design, and four mistakes it taught me.
-
Running 414 Kiwix ZIMs as an offline reference shelf
What I learned serving 414 Kiwix ZIM files (973 GB) beside my own library: undated aliases need -z, lazily opened ZIMs break when moved, 240 lack full-text indexes, and encyclopedias should be federated, not embedded.