Notes
Short, low-friction entries: fixes, gotchas and link roundups from day-to-day work. Quick reads that save someone an afternoon.
14 posts in this category
-
Why Is My TTS Model Repeating "Percent"? The URL-Encoding Trap in Speech Pipelines
Why our newly deployed local TTS engine synthesized endless 'percent' repetitions instead of spoken Chinese, and how character normalization and n8n sandbox limits collided.
-
My Backup Was Crawling Because I Was Using Someone Else's API Quota
A 1 TB restic seed stalled at zero bytes. The log named a Google project I did not own: rclone's shared OAuth client, quota pooled with every rclone user alive.
-
Stop Writing Agent Prompts for Deterministic Work
One of my scheduled jobs failed 29 times in a row because I put a model in a loop that only needed a string comparison. Here is the rule I use now.
-
NocoDB SSO Is a Licensed Feature — and the Env Vars Won't Tell You
NocoDB's OIDC environment variables are real and validated at startup, so self-hosted SSO looks supported. On an unlicensed build, the first login attempt crashes the whole instance.
-
Upgrading CodeIgniter 4.6 to 4.7: The Breaking Changes the Guide Misses
The official CodeIgniter 4.7 upgrade guide lists eight breaking changes. The two that actually fataled my app weren't in it — and both are the same class of problem.
-
Apple iCloud SMTP Times Out on Port 465: The 587 STARTTLS-Only Trap
Why configuring an automated mail client for iCloud SMTP on port 465 results in silent connection timeouts (WSAETIMEDOUT), and why Apple's outbound mail architecture requires explicit STARTTLS on port 587.
-
smartctl Exit Code 32: The Code That Skips the Disks You Care About
A disk-health collector that treats any non-zero smartctl exit as failure quietly skips exactly the drives with marginal attributes. Exit 32 is not an error — it is a history lesson.
-
Why Your Windows Desktop MCP Calls Silently Fail: Taming the 10-Second Idle Gate
Why actions in windows-mcp return CONTROL_PREEMPTED or fail silently, and the exact flag needed to disable the desktop control gate.
-
The NocoDB Attachment That Wouldn't Update (and a Regex That Missed)
Two small gotchas from backfilling 300 rows: NocoDB ignores a path change when the attachment keeps its id, and a lookahead regex silently skipped URLs without a file extension.
-
Read a Container's Own API Docs Instead of the Vendor's
When the API documentation is behind a login or doesn't exist, the image is still the source of truth: four Docker commands that extract the API spec, the config contract, and the port it listens on.
-
Why Your Synology API Login Returns 401 With the Correct Password
Two causes, one error: the Office Suite API reports a failed TLS handshake and a 2FA-protected account identically. How to tell them apart in three commands instead of an afternoon.
-
Why Multi-Agent Coding Fails: The Telephone Game and Architectural Drift
Why swarms of autonomous coding agents step on each other, play the telephone game, and make implicit conflicting decisions that break repositories.
-
Adding a Domain to Someone Else's Mail Server
Receiving mail took four DNS records and worked first try. Sending from it, and forwarding it, hit two walls that no DNS record can fix.
-
Hello, World — About This Blog
What this blog is for: technical writing, self-hosting experience, and a record of what I build and learn.