Engineering Practices
Lessons on design, testing and data handling that apply to any language.
Google News RSS 連結要解碼,不是轉址
stock-analyzer 從 2026-06 起再也沒抓到任何新聞內文。failed=0,看起來像「這些來源本來就該跳過」,五個月沒人發現。計數器全部落在「跳過」那一格,要當成失敗看。
配額有限的批次:便宜必要的工作要排在昂貴輪詢前面
stock-analyzer 的 fetch-financials 每小時排程都印「完成 84/294 檔,請於下個整點重跑」,看起來正常。有配額的批次工作,便宜且必要的資料要排在昂貴且多半空手的輪詢前面;混在同一個逐項迴圈裡,昂貴的那一半會把清單尾端餓死。
instaloader 的 get_posts() 看不到 Reels 分頁
一支同步工具包著 instaloader,把公開 IG 帳號的貼文增量抓到本機。某支 Reel 在瀏覽器上看得到,同步工具卻怎麼跑都抓不到,而且每次都回報「成功、0 個新檔」——是正確地成功,不是報錯。「成功但結果是空的」比報錯難查,因為它不會叫。
同一語意寫成兩份實作、只有一份有測試,會靜默分岔
台股選股工具的月營收資料永遠落後一期。8 月營收 9/10 公布,9/12 查 DB 還是只有 7 月——而且不只一檔,全 watchlist 298 檔都沒進來,monthly_revenue 最後寫入停在 9/1。同一個語意在程式裡出現第二份實作,就一定會分岔。
加了保護但保護不存在的三種形狀
一套會自動回覆 Threads 公開留言的產線,上線前補四道防護。四道都寫完、測試全綠、覆蓋率看起來很好,實際去打真的 API 才發現其中一道從來沒有生效過,另一道的測試把常數改成 999 照樣綠。「靜默失敗」的判準是:壞掉的樣子跟正常的樣子長得一模一樣。
subprocess 讀 JSON 不能假設 stdout 只有 JSON
一個常駐 bot 要驗收「這張圖裡有沒有人臉」,但影像套件(insightface / onnxruntime)只裝在另一個專案的 venv 裡。「工具壞了」跟「我讀錯了」在 log 上長得一模一樣,而排除順序應該是後者優先。