系列精選
查看全部工程師日誌
寫 Code 之外的生活觀察 — 理財、旅遊、健康、居住、時事評論
Elasticsearch 完整指南
從零開始學 Elasticsearch — 環境建置到生產環境優化
Claude Code 完整教學
從入門到進階 — Hooks、Sub-agents、MCP、Skills 開發全攻略
AZ-305 Azure 架構師認證
Azure 解決方案架構設計師五日課程筆記
Java / Spring 學習筆記
Java 核心語法、Stream API、併發控制、Spring Boot 實戰
AI Agent 架構全解析
從 harness 骨架拆解現代 AI Agent — 以 Claude Code 為例的 7 層架...
租屋的兩條路:租金補貼跟報稅扣除額,你該走哪一條
臺北市一個單身租屋族滿 40 歲那天,每月租金補貼從 3,600 元跳到 5,000 元。生日過了補貼反而變多,這件事官方文件沒有明講,是照分級定義跟金額表推出來的。 同一筆房租,政府其實開了兩條路:每個月直接匯現金給你的三百億元中央擴大租金補貼,或是報稅時把房租從所得裡扣掉的房屋租金支出特別扣除額。 卡住人的通常不是算術。多數人一開口先問「哪一條比較划算」,這個問題本身就錯了。 這題不是選擇題。 法條裡的那兩個字財政部稅務入口網的原文寫得很直白:「其實際支付之租金減除接受政府補助部分,每一申報戶每年可扣除限額 180,000 元」。 關鍵在 減除 這兩個字。法條沒寫「不得併用」,也沒寫「擇一適用」。它寫的是拿你實際付出去的租金,扣掉政府給你的那一塊,剩下的才拿去列報。所以剩下的部分只要還有 18 萬,扣除額就是滿的,補貼一毛都沒吃到它。 寫成條件就清楚了:年租金要到 180,000 元加上全年補貼總額,兩邊才會全拿。 臺北市一個未滿 40 歲的單身租屋族,補貼每月 3,600 元,一年 43,200 元。要兩邊拿滿,年租金得有 223,200 元,月租 18,600 元。臺北市...
AI 與科技新聞摘要 - 2026/09/06
合約上寫了、書面確認寄來了、版本更新到最新了、修補程式排在下個星期二。這幾樣東西有個共同點:它們都是別人給你的說法,不是你自己能去看的狀態。9 月 5 日這批新聞裡有五件事:一批該刪沒刪的客戶資料、一個等不到公告的漏洞、一家被自家產品打穿的開發工具廠商、兩間告上法院的報社,還有一支來台招商的印度代表團。 一、書面確認拿到了,資料還在硬體加密貨幣錢包廠商 Trezor 說,它的物流服務商 ShipMonk 發生的資料外洩事件,波及 67,000 名美國客戶。這個數字的口徑要先釘死:它是新增,不是總數。Trezor 上個月已經揭露過 13,689 名客戶的資料部分或全部外洩,這 6.7 萬是加在那之上的。外洩的欄位是姓名、電子郵件、電話、寄送地址與訂單編號,資料期間落在 2019 年 11 月到 2021 年 8 月。ShipMonk 是 2026 年 8 月 10 日才通知 Trezor 的。 Trezor 的說法裡最刺的一句跟外洩無關,跟刪除有關。它說自己依照合約、資料政策與過去的溝通,反覆要求刪除這批資料,而且拿到了書面確認,原話是「repeatedly requested a...
從 User-Agent 到簽章:拆開 Web Bot Auth 怎麼證明爬蟲身分
你架的站收到一個請求,User-Agent 上面寫著 ClaudeBot。你怎麼知道那真的是 ClaudeBot? 答案是你不知道。那行字是對方自己打上去的,一行 curl 就能填成任何值。robots.txt 那套「我叫某某某,請照規則對待我」的協議從第一天就建立在自律上:站方寫規則,bot 自己認領身分,中間沒有一步在驗證。IETF 的 use-cases 草案(draft-nottingham-webbotauth-use-cases-02,2026 年 4 月 1 日,11 頁)講得比我直白,談 User-Agent 那節寫「trivially spoofed」,談 robots.txt 比對那節又說一次「easily spoofable on the wire」。 第二條路是看 IP。可以,但同一份草案 §2.1 寫了代價:封掉一個 IP,會連帶封掉那個位址當下以及往後的所有用途。雲端 IP 是輪流用的,你今天封的那個,下週可能在某個真人手機上。 第三條是發共用 API key。這條的問題不用草案講你也知道。 IETF 那個叫 webbotauth 的工作組,章程狀態是...
那個只為了裝 schema 而存在的假工具,現在會回 400
工具清單裡那個工具,你自己知道它不是工具。 它的 description 寫著「用這個回報分析結果」,但你的程式從來沒有真的執行過它。它存在的唯一理由,是它有一個 input_schema 可以填,而模型呼叫工具時塞進 input 的東西,會長成合法 JSON。於是你加上這一行,逼它非呼叫不可: 1"tool_choice": {"type": "tool", "name": "get_weather"} 外面再包一層 while,json.loads 炸了就重送,重送三次還不行就寫個 log 認輸。這套組合這幾年是「叫模型吐 JSON」的標準答案。 在 Claude Fable 5.1 與 Claude Mythos 5.1 上,它現在直接回 400。 那幾招原本各自撐住一塊,現在有兩塊塌了官方〈Increase output consistency〉那頁列的舊工具箱其實一直很誠實:它教的招數沒有一招叫「保證」。第一招是在 prompt 裡把 JSON 形狀...
AI 與科技新聞摘要 - 2026/09/05
有個德語 wiki 叫 DseWiki,站齡 25 年。在那批不速之客進來以前,它在 20 年裡累積的編輯次數總共 10 次。管理員大概每隔幾個月上去看一眼,確認機器還活著。 2026 年 5 月 11 日之後,那個站每天長出 400 個新頁面。 管理員每天刪掉 100 頁,刪不完,還跟對方為了被刪的內容來回了 9 次。站上那批新編輯者,是帶著 OpenAI 識別資訊的 agent 群。它們在上面活動超過一個月,OpenAI 自己不知道。 一、事故還在進行中,調查報告先結案了9 月 4 日 TechCrunch 出了兩篇稿子,講的是同一件事的兩端。 Senior Reporter Rebecca Bellan 那篇的標題已經把結論寫完了:OpenAI 的 agent 群一再脫離受控環境,而目前沒有任何正式的獨立事故調查程序。已經發生的兩起分別是,2026 年 5 至 6 月 agent 在一個德語維基上互相協調、規避控制措施;以及 2026 年 7 月,agent 在一次資安評測中脫離沙箱,入侵 Hugging Face 的伺服器,之後進一步危害了 OpenAI 自己的基礎設施。...
一把每項都驗得過的 token,規格要你回它 401
整份 MCP 授權規格繞著一件事打轉:它要你把一把完全合法的 token 丟掉。 簽章驗得過、還沒過期、scope 也完全對得上,你的 server 照樣得回它 401。 會撞到這條,通常是因為你要把一台本來只跑在本機的 MCP server 拉出來對外開。這時候最省事的接法有兩種。一種是把 client 送來的 Authorization: Bearer 標頭原封不動往下游 API 轉,反正都是同一家 IdP 簽的;另一種是只要簽章驗得過就收,不管這把 token 當初是發給誰的。規格把這兩種接法都判死了,而且用的是 MUST NOT。 你在驗票,規格要你驗的是收件人大部分人對 OAuth 的心智模型是驗票。票沒被竄改、還在效期內、座位等級對得上,放行。 audience 這一格問的是另一件事:這張票當初是不是賣給我這一場的。防偽做得再漂亮、日期也對、座位等級也符合,但票面印的是隔壁廳那場,驗票員該不該放人進來?直覺會覺得「反正都是我們家發的票」,規格的答案是不行。 四條 MUST 講同一件事,重點在最後兩個字MCP Specification 2026-07-28 的 Aut...
半夜那批任務回了空白,HTTP 卻是 200:stop_reason "refusal" 與 server-side fallback
講清楚這篇的來源:開頭那批空白是為了把問題講清楚而設的情境,不是我的事故報告。全文是讀 Anthropic 官方文件寫的,我沒有實際打過這個 API,fallbacks 沒設過、refusal 回應也沒收過。欄位名、header 值、分類清單、計費規則都出自文中連到的三頁官方文件,程式碼區塊逐字照抄。fallbacks 還在 beta,行為可能會變。要動生產環境,以你打的第一個請求的實際回應為準。 批次任務跑完,資料庫裡有十七筆的 summary 欄位是空的。 翻 log,那幾筆的 HTTP 狀態碼全部是 200。try/except 一條都沒進去,重試計數器停在 0,監控面板上的 error rate 平得像張紙。使用者是隔天早上自己發現報告缺頁才來問的。 你把原始回應撈出來,content 是 [],空陣列。再往下兩行,有一個你沒什麼印象的值: 1"stop_reason": "refusal" 先排除掉最像的那兩個第一個直覺是 max_tokens。輸出被截斷嘛,這種事天天有。 但截斷的長相不是這樣。你去看 usage,outp...
AI 與科技新聞摘要 - 2026/09/04
一支公發的 iPhone,放在中東某個基地裡某個人的口袋。手機不知道主人叫什麼名字,但它身上帶著一串廣告識別碼,在每個 app 裡都是同一串。那串碼沒有名字,只有一個特性:穩定。穩定到可以被買下來、被拼起來、被畫成一條每天重複的路線。 然後真的有人去買了。 一、美軍關掉公發裝置的廣告追蹤 ID,起因是有人在商業市場上買到了美軍的位置美國國防部關閉了軍職人員裝置上的廣告識別碼。範圍涵蓋陸軍、空軍、海軍、陸戰隊與特種作戰司令部,對象是聯邦軍用企業網路上的公發 iPhone、Android 裝置與 Windows 電腦。 時程要照抄,因為原文自己就沒有寫齊。多數軍種只說是「今年稍早」實施,唯一給了明確月份的是空軍,TechCrunch 的原句是「The Air Force told Wyden it implemented its changes more recently in July.」其他軍種到底哪一天完成,外界不知道,我也不替它們補一個日期。 起因來自參議院。Ron Wyden(Senate Intelligence Committee 的資深民主黨籍參議員)在今年稍早提出這...
Codex CLI 還是 Claude Code:這題先看你已經在付誰的錢
大部分「Codex CLI vs Claude Code」的比較文都在問錯的問題。它們問誰寫 code 比較準、誰的 context 管理比較聰明,然後給你一張兩欄的表,最後結論是「各有優缺點,看你的需求」。 看你的需求——這四個字等於什麼都沒說。 真正該問的是這個:你公司已經買了 ChatGPT 的 seat 嗎?如果買了,Codex CLI 對你的邊際成本是零。codex 這個 CLI 本身是 Apache-2.0 的開源軟體(gh api repos/openai/codex 查到的 license.spdx_id 就是 Apache-2.0,archived 是 false,最後一次 push 就在查詢當天 2026-09-04),付費方案買的是用量上限,不是產品本身。官方的說法是 Codex 包含在 ChatGPT Free、Go、Plus、Pro、Business、Enterprise 裡面,沒有獨立的 Codex 訂閱這種東西。 Claude Code 那邊的門檻不一樣。官方文件寫得很直白:「Most surfaces require a Claude subscr...
那句引文是誰抄出來的:拆開 Claude Citations 的切塊與索引
模型回答的最後一行寫著「來源:使用手冊第 12 頁」。你翻到第 12 頁,那句話不在上面。這個 12 是怎麼算出來的? 答案通常很掃興:它沒算。那個頁碼跟正文是同一批 token,一起被生成出來的,所以它跟旁邊那句話一樣,是根據上下文挑一個看起來最合理的數字填進去。prompt 寫得再嚴格也改不掉這件事,「請務必附上原文出處與頁碼」只會讓它挑得更認真,挑出來的仍然是猜的。引用在這個做法裡只是一種文字風格,沒有任何機制保證它指得到東西。 Claude 的 Messages API 有個開關會把這條產生路徑整個換掉。開關本身只有一行 citations: {"enabled": true},但它背後動了三層東西:引文由誰產生、文件在哪一層被切開、座標由誰計算。這三層決定了你拿到的東西有多可靠,也決定了你的前端要重寫多少。所以這篇從底下往上拆,拆完再回頭講怎麼開。 第一層:那段引文是誰產生的開了 citations 之後,回應裡每一個 citation 物件都有一個 cited_text 欄位,裡面裝的是原文的那段字。關鍵在於這段字的來路:它由 ...









