Archives
- 15 Oct Why Cache Capacity Is Decided by Bytes You Never Counted: Five Rust Layout Changes That Cut 1.1.1.1's DNS Cache 56 Percent
- 08 Oct EmbeddingGemma 2 and Qwen3-Embedding vs bge-m3: Why I Kept bge-m3
- 06 Oct Why I Kept My Own LLM Gateway over LiteLLM and 9Router
- 04 Oct Retry Storms: How Client Retries Turn a Short Dip into a Long Outage
- 25 Sep The GIL Bottleneck Hiding in Self-Hosted LLM Serving
- 13 Sep Open-weight LLMs are winning on cost, not benchmarks
- 04 Sep The Transactional Outbox Pattern: Reliable Events Without Distributed Transactions
- 27 Aug A Weekend Ride to Vũng Tàu, and Eight Walls I Came Home With
- 24 Aug Bloom Filters: How Databases Skip Disk Reads They Don't Need
- 16 Aug Keyless Container Image Signing with Sigstore Cosign
- 14 Aug How LLM Reasoning Actually Works, and When It Is Not Worth Paying For
- 10 Aug How Databases Actually Store Data: B-Trees vs LSM-Trees
- 06 Aug Reliable Structured Output from LLMs: Schemas, Tool Calling, and Repair Loops
- 04 Aug Graceful Shutdown in Go: Draining, Context, and Signals
- 28 Jul Running Next.js on Cloudflare: What Breaks on the Edge Runtime and Why
- 21 Dec Considerations for Using HashiCorp Vault
- 18 Jun Autoscaling GitHub Self-Hosted Action Runners on Kubernetes with Ansible
- 10 Jun KVSync - Syncing GORM Models with a Key-Value Store
- 06 May Why I Chose Golang for Our Backend Development
- 16 Mar Tây Bắc's Timeless Landscapes: Highlights Of A Two-Week Journey
- 29 Jan Hello, World!