寫程式、寫字,
把想法 整理清楚。
Engineer & writer.
Thinking in public.
Terry Cheng — 台北的後端工程師。白天寫 Go 與 Postgres,晚上把想通的東西寫下來,希望半年後的自己還看得懂。
Terry Cheng — backend engineer in Taipei. Go & Postgres by day; I write at night so future-me still recognises the thought.
新創後端Backend at a startup 寫 Go + Postgres,正在重構一支吃掉整個週末的 query。 Go + Postgres; rewriting one query that ate a whole weekend.
讀Reading DDIA, ch.7
去年我花兩週解掉的 deadlock,我完全忘了。翻回當時的筆記,看到的自己像個陌生人。這篇是我給未來自己的備忘。
The two-week deadlock I survived last year? I forgot it. Not half-forgotten — gone. Notes met a stranger. This is my memo to future-me.
大部分 Go 並發的 bug 都是「用錯姿勢」,不是工具本身有問題。這篇整理我看過的三種最常見模式。
Most Go concurrency bugs aren't tool bugs — they're shape mismatches. Three patterns I keep reaching for, and when each is the wrong answer.
邊讀邊寫的筆記,不是完整文章。主要記我原本以為懂、讀完才發現不懂的那些。
Notes in progress, not a finished essay. Mostly tracking the "I thought I knew this" moments.
每兩年重寫一次 config。這次砍掉 40% 的 plugin,反而比較順手。
I rewrite my config every two years. This round I dropped 40% of the plugins and it's faster, not slower.
SELECT FOR UPDATE 的鎖範圍不是你想的那樣。一篇關於 row-level lock、advisory lock、與我踩過的三個坑。
SELECT FOR UPDATE doesn't lock what you think. Row-level locks, advisory locks, and three footguns.
把寫作當肌肉練。從 commit message 到 postmortem 到文章,中間的卡點在哪。
Writing as a practice. From commit messages to postmortems to essays — and where the uncomfortable jumps are.
最近才想清楚:client timeout、server timeout、context timeout 三者該怎麼配合。
Client, server, and context timeouts — how they actually compose. One diagram, one page.
explain analyze 從 300 行讀到 0 行,中間換了三次假設。這是慢 query 修復的完整過程。
Reading explain analyze, going from 300 lines to zero, revising the hypothesis three times. A full slow-query autopsy.
不是 ORM 不好,是 default 選擇太便宜,常常遮掉了資料庫真正在做的事。
ORMs aren't bad — they're just too cheap a default, and the cheap default often hides what the DB is doing.
一個下午的遷移紀錄,包含一個我忘記備份 DNS 的尷尬時刻。
An afternoon's move, including the awkward moment I forgot to back up DNS.