Debug log

Notes from actual production fires.

Video pipelines, embedded devices, database recoveries, and the occasional argument with an IDE. Written down so I don't repeat the same mistake twice.

Stuck at 10 Mbps: How a Realtek RTL8822CE Got Trapped in WiFi 4 and What Finally Freed It

A WiFi 5 chip was quietly running at WiFi 4 speeds on a 20 MHz channel, capping a whole mini PC at 10 Mbps. The stock drivers could not fix it. A community-built driver could.

Auth Expired: Why My ESP32 Refused to Rejoin WiFi After Every Power Outage

A tiny Bluetooth proxy that worked fine for weeks kept hanging after every power cut. The fix was physical, the root cause was a reconnect race, and I was wrong twice before I listened to the one clue I kept ignoring.

Use OpenCode From Anywhere via a Telegram Bridge

Bridge your local OpenCode instance to Telegram so you can code from anywhere, no tunnels, no open ports, and nothing on the internet.

Building a Disaster Recovery Setup for a Production App with MySQL Replication

Turning a single-server Node.js app into a resilient setup with master-slave replication, Docker, and a one-command failback script, without touching the existing production stack.

Stop Shipping API Keys in Your iOS App: Build a Serverless AI Proxy Instead

Why compiling OpenAI or Gemini keys inside your mobile app binary is a security trap, and how to build an elegant serverless proxy using Cloudflare Workers for free.

SnapText: How a Simple Window Close Crashed My MacOS App

A deep dive into debugging a mysterious crash in a macOS menu bar app built with Swift 6 and AppKit.

Silent Bot in Group Chat: A Case Study in Chat Platform Integration

When your Telegram bot works flawlessly in DMs but ignores every message in a group, including @mentions, the fix is rarely where you expect it.

My Thoughts on Programmers vs Vibe Coders

Exploring the democratization of coding tools, the rise of vibe coding, and why the debate between engineering depth and business speed is a familiar historical pattern.

The Math Behind Cursor-Centered Zoom

Why my first zoom implementation was wrong, and the formula that finally made cursor-centered zoom work correctly at any zoom level.

Building CCTV RTSP Live: A macOS App for Monitoring IP Cameras

The story of building a macOS app for RTSP camera monitoring from scratch - what started as a personal itch turned into a full-featured indie app.

Building a Recording Engine with FFmpeg on macOS

Why VLCKit's built-in recording failed for RTSP live streams, and how I replaced it with an FFmpeg subprocess that actually works.

Fixing H265 Stream Freeze on Tuya Cameras

How I tracked down a VideoToolbox -12906 error causing RTSP stream freezes and reconnect loops in my macOS CCTV app.

Building Things That Last

A reflection on 17 years of building software - from Friendster layouts to production systems - and what I've learned about writing code that actually holds up.

Tuya DP ID List: How to Find DP IDs for Smart Plug, Bulb, and Camera

Step-by-step guide to finding Tuya DP IDs using the IoT Cloud API Explorer. Includes DP ID reference tables for smart plugs, bulbs, IP cameras, and IR blasters - useful for LocalTuya and Home Assistant integrations.

The Indihome Loyalty Tax: Why Staying Quiet Costs You More Than Switching

A seven-year price history of my Indihome fiber plan, from 10 Mbps to 200 Mbps, and why staying loyal to an ISP silently costs you more than pushing back.