41554 blogs · [
{
"id": "01a08785-654b-70f9-960f-df7c34eb8133",
"title": "Startup advisory board: build a portfolio, not a committee",
"url": "https://ianlpaterson.com/blog/startup-advisory-board-portfolio-not-committee/",
"published_at": "2026-08-09T17:52:05+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c35d083eb",
"title": "How I built a private LLM router: one boring lookup table decides what leaves my network",
"url": "https://ianlpaterson.com/blog/building-llm-router/",
"published_at": "2026-07-12T19:46:26+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c36a9933c",
"title": "Best LLM for Coding in 2026: Picks by Use Case",
"url": "https://ianlpaterson.com/blog/best-llm-for-coding-2026/",
"published_at": "2026-07-07T17:20:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c36f4af7a",
"title": "Linux OOM Killer vs SSH: How to Stop Getting Locked Out of Your Own Server",
"url": "https://ianlpaterson.com/blog/oom-lockout-ssh-survival-hardening/",
"published_at": "2026-07-02T16:57:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c37e16ef8",
"title": "I Strapped a $15 Sensor to My GPU. It Read the Load Backwards. Here’s How to Calibrate It.",
"url": "https://ianlpaterson.com/blog/gpu-thermal-side-channel-reads-load-backwards/",
"published_at": "2026-06-28T17:33:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c38e1186f",
"title": "My brand-new SLZB-07 Zigbee coordinator shipped too old: fixing “EZSP protocol version 12 is not supported by host”",
"url": "https://ianlpaterson.com/blog/genuine-hardware-stale-firmware-zigbee/",
"published_at": "2026-06-24T18:05:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c39b6d4de",
"title": "Why docker image prune Won’t Fix a Full Root Disk: The Containerd Snapshotter Trap",
"url": "https://ianlpaterson.com/blog/docker-image-prune-containerd-disk-full/",
"published_at": "2026-06-19T16:41:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c3a2c4069",
"title": "Self-Hosting RustDesk on Tailscale Without Opening a Single Public Port",
"url": "https://ianlpaterson.com/blog/rustdesk-self-host-tailscale/",
"published_at": "2026-06-14T17:12:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c3ae72b41",
"title": "Why Your llama.cpp Benchmarks Are Wrong: GPU Architecture and Real Numbers",
"url": "https://ianlpaterson.com/blog/llama-cpp-build-from-source-cuda-benchmark/",
"published_at": "2026-06-07T00:10:00+00:00"
},
{
"id": "01a08785-654b-70f9-960f-df7c3bca2091",
"title": "I Built a Honeypot to Catch Prompt Injections in Claude Code (Here’s What It Caught)",
"url": "https://ianlpaterson.com/blog/claude-code-prompt-injection-canary/",
"published_at": "2026-06-03T16:48:00+00:00"
}
] posts Claim your blog