Trakt 刪了我的 API app:把「在看什麼」整條管線遷到 Simkl
7 月 31 日晚上,我發現「在看什麼」那頁停在 7 月 25 日。 沒有錯誤訊息。伺服器沒掛、頁面正常渲染、動畫那半邊還在更新——只有電影和影集那半邊,停住了。 去 Trakt 官網想手動重登,結果更怪:明明登入成功,每次跳轉都被踢回首頁。 而 <Annot...
記錄技術探索、開發心得與生活碎片。每一篇都是當下最真誠的思考。
7 月 31 日晚上,我發現「在看什麼」那頁停在 7 月 25 日。 沒有錯誤訊息。伺服器沒掛、頁面正常渲染、動畫那半邊還在更新——只有電影和影集那半邊,停住了。 去 Trakt 官網想手動重登,結果更怪:明明登入成功,每次跳轉都被踢回首頁。 而 <Annot...
Zed 團隊的上一個作品是 Atom。 Atom 當年是 Chromium 的 fork,而開發它的過程順手生出了 Electron——也就是後來 VS Code 的地基。講難聽一點,VS Code 站的那塊地是這群人自己挖的,而他們現在在旁邊蓋了一棟不用那塊地基的房子。 Zed 的 1.0 是 2026 年 4 月 29 日...
我那台家用伺服器上跑著三十幾個容器:部落格、NAS 面板、監控、幾個自架服務。除此之外我平常也直接用 VS Code Remote-SSH 連進去寫程式,工作區 36 GB、四十萬個檔案。 七月中某個下午,它被燒到失去回應。 查了三天,兇手是編輯器,不是那三十幾個容器裡的任何一個。 症狀:溫度釘在 90°C 撐了四十分鐘 我在追一個更早的斷電問題時,順手加了一支每分鐘記一次 CPU 溫度和 load 的腳本。那支腳本記到了這個: con...
搬完家的第一週,伺服器開始每天半夜自己關機。 不是當機、不是重開,是斷電式的死亡:回來開機一定跑 ext4 recovery,uptime 歸零,前一秒還在跑的東西沒留下任何遺言。而且它挑時間,幾乎都在清晨。 我第一時間想的是「線鬆了」,去壓緊,隔天照死。想到搬家後冷氣和熱水器可能跟它共用迴路,關掉試,照死。量溫度,50~60°C,正常。最後懷疑是搬家把 PSU 震壞了——那是一顆買不到一年的振華白金牌,我不太想相信。 問題是這些都是猜...
起因不是被入侵,是吵。 我的 nginx 接了 netdata,異常會發 Discord。它長這樣,連當下的 Top IP 和 Top Path 都一起貼給你: ![netdata 發到 Discord 的告警卡片,顯示...
自架服務久了會遇到一個尷尬問題:監控自己的那台機器,自己掛了誰告訴你? 我跑 Uptime Kuma 監控自己的所有服務,但它就跑在被監控的那台機器上。停電、斷網、整台當掉,監控跟著一起死,通知一封都發不出來。 要解決這個,監控就得放在別的地方。方法其實不少: | 做法 | 成本 | 適合誰 | |---|---|---| | 一台便宜 VPS 跑自己的 Kuma | 每月幾美金 | 想完全自己掌控、不想欠人情 | | 用現成的第三方監...
朋友看到幻獸帕魯(Palworld)出了 1.0,揪我一起玩。他們兩年前就破過一輪,想趁這次大改版重破一次,而我那陣子剛好有空。 老實說我原本對這遊戲印象不太好,當年那個「抄寶可夢」的爭議擺在那裡。但後來它的官司打贏了,加上 1.0 的更新幅度是真的大,我想或許沒想像中嚴重,就跟著入手了。 朋友一開始是用 Radmin VPN 把大家串起來連的。這方法不能說不行,但它總讓我有點資安上的疙瘩。Radmin 這類虛擬區網走的是 P2P:兩端...
那天我只是想順手幫自己的家用伺服器做個健檢,結果第一個指標就不對勁:load average 10.65。這是一台 16 執行緒的機器,平常閒著沒事,load 卻卡在 10.65,等於三分之二的 CPU 被某個東西持續吃著。 有東西在偷用我的機器。這篇是我把它揪出來、清掉、堵住入口的全程,而且我盡...
那半年,我每天放學回到家,牠一定在門口等我。 門一開,牠就抬頭「喵」一聲——短促的一聲,像在確認今天回來的是不是我。我沒有訓練過牠,也沒有給過牠什麼特別的獎勵,牠就是每天都在那裡。 牠叫牛奶,一隻賓士貓,而牠從來就不是我的貓。 一隻在大雨的夜裡被撿到的貓 我是在課堂上知道牠的存在的。同學轉過頭來跟我說,他撿到一隻小貓——某個下大雨的晚上,在大馬路邊。他把牠帶回家,照顧了幾天,還帶去看了醫生。然後家裡發現了,要他把貓送走。 我幾乎沒有猶豫...
每個部落格都要回答同一個問題:一篇文章,怎麼從資料庫走到讀者的螢幕上?我這台站,前兩年用的是最偷懶的答案:純 CSR。這篇是把那個答案重寫三次的故事:先搬去 SSG、再被自己的 prerender 打臉改走 ISR、最後為了「進文章不要閃一下」跟渲染時序纏鬥了一整晚。 先講清楚幾個名詞,整篇都繞著它們轉: SSR(<Annot note="Se...
背景是整個網站裡最先被看到、也最不該被在意的東西。它只是裝飾——一片會慢慢轉的星空、一顆掛在右邊的土星。可就是這片裝飾,從一個天真的小玩具,一路長成差點把整個首頁搞到白屏的怪物;前前後後花了我三個階段、二十幾個 commit。 這篇想完整記錄 koimsurai.com 那片星空的三段變形記。因為 WebGL 大家...
之前寫「在看什麼」那頁時,我留了一個伏筆:頁面上那些動畫的資料,是我自己逆向了一個動畫瘋 SDK 撈來的。那篇只一句帶過,說這塊夠寫一整篇。這就是那一篇。 起點很小——我想要頁面上能放我真實的動畫觀看史。電影劇集有 Trakt 可以接,但動畫瘋沒有任何現成整合(台灣限定服務,那些追蹤器都不碰),只能自己動手。真正開始做才發現一件更有趣的事:連 npm 上都沒有人做過動畫瘋的 user-data SDK。 一個沒人做的坑:讀「我看了什麼」...
起點其實跟「觀影」沒什麼關係。我想要的,是一頁像 Innei 那樣的碎念微網誌——看完一部什麼,隨手丟個連結、更新一句。但我跟他有個關鍵的岔路:他是手動維護、我懶。他那種「看完再去碎念一下、只放連結」的節奏,我學不來也不想學——我要的是它自己更新上去。 於是「手動碎念」慢慢長成了另一個東西:一頁會自動去問「我最近在看什麼」的頁面。我把它叫做「在看什麼」。 聽起來只是串接。結果整條路上真正把我絆倒的是兩件事:一,動畫的資料源根本得自己造;...
我要把一個純離線的 NLLB 翻譯功能,從 Python 搬進 Rust。模型是 int8 量化的 NLLB-200 600M,透過 ct2rs(ctranslate2-rs)這套 binding 接 CTranslate2。Linux 上一切乾淨俐落。 但一搬到 Windows,我在同一條路上,接連撞了三種牆:它連不起來、它關不掉、它在沒有 GPU 的機器上崩潰。 這篇把三面牆一個個拆開。前兩面是 Windo...
我的伺服器上,「自己的資料庫」散落了一地:部落格、n8n、Uptime Kuma、3x-ui、Jarvis、NAS 各一份 SQLite,另一個專案那邊還有一個 MongoDB。每次要看點資料,不是 ssh 進容器敲 sqlite3,就是臨時開個 web,或在筆電再裝一次 Compass。 真正的痛,其實不是 SQLite 不好,而是它就是一個藏在伺服器裡的檔案,很難即時看、更難順手改。 目標很單純:一個網頁後台,從任何地方都能看、能改...
打完跟 xl-ai + 地端 Gemma 的那場硬仗之後,我心裡留下一個結論:地端模型根本不會 tool-calling。Gemma 3 27B 連穩定吐個 JSON 都做不到,xl-ai 那種「期待模型乖乖講 tool-call 格式」的套件一接就炸,最後是靠後端 adapter 手工翻譯才救回來的。 https://koimsurai.com/blog/33 然後我就靈光一閃:既然每個做地端 AI 的人都會撞這面牆,那做...
最近在做一個純離線的桌面筆記 App,用 BlockNote 當編輯器核心。BlockNote 有一個官方 AI 套件 @blocknote/xl-ai,可以做「改善寫作 / 簡化 / 修正拼寫 / 翻譯 / 續寫」這類選文 AI,還附帶很漂亮的 inline diff(刪除線+highlight...
四月的記憶,像是蒙上了一層失焦的濾鏡。如果真要用一個詞來形容這三十天,大概是「失重」。大腦與身體在各種死線、底層重構與跨部門的荒謬決策之間瘋狂運轉,彷彿被抽乾了周圍的空氣,找不到一個可以安穩落地的支點。 回過頭看,這一個月過得極度漫長,但好像又比三月過得更快,一轉眼就五月了。但我好像在短短三十天內,把別人實習大半年的進度給快轉按完了。雖然單調的辦公室日常依舊,但在這堆滿 Bug 與會議的日子裡,有些東西確實在我心底悄悄發生了質變。...
又是過去一個月了吧。三月份的生活,其實說不上有多新鮮,大部分時間依然是在焦慮與程式碼之間反覆橫跳。不過如果靜下心來回想,單調的日子裡還是有那麼幾道值得記錄的褶皺。 說來好笑,我的作息一直都挺亂的,但不知道為什麼,整個三月竟然奇蹟似地非常規律。每天按部就班地醒來、睡去,身體像是一個終於被校準好的系統。但在這看似平靜的表面下,生活卻時不時給我來點荒謬的突發狀況。 學分的迴力鏢與早晨的二十分鐘 三月初,我的生活先是被一件看似微不足...
最近在公司遇到一個資料同步的需求。起因是前端在處理用戶登入時,一直沒有正確取得到用戶的部門(dept)名稱資料。於是 DBA 提出了一個解法:希望能直接從底層出手,透過資料管道把資料庫裡現有的 member 資料撈出來 sync,順便把這段缺失的 dept 資訊給補上。為了解決這個需求,我們決定在本地端架設一套 PostHog Data Pipeline。 不過,這套系統跑在一個有點神奇的工作環境裡。我們的基礎服務全都是架設在 <Ann...
你有沒有一首歌,能夠在你快要溺水的時候,將你從窒息的深淵中拉出來,瞬間帶到無邊際的大海上大口呼吸? 對我來說,這首歌就是 ヨルシカ (Yorushika) 的 《老人と海》。 這是我聽日文歌十年以來,始終佔據我心中最柔軟也最堅強位置的樂團。每當我在深夜裡盯著螢幕,面對著彷彿永遠解不完的難題、或是當生活與工作中的各種繁雜架構將我逼到...
最近我開始用 Monaco Editor 當作部落格的後台編輯器。這是 VS Code 的核心、一個為寫程式而生的編輯器,卻被我拿來寫部落格,想想有點硬核。但這篇的主角不是 Monaco 本身,而是「在它裡面塞一張圖」這件看似無聊的小事——結果從一個簡單需求,一路牽出 Base64、背景上傳、NAS 掛載、到圖片牆重寫的一整條坑。 Monaco 不吃圖,只吃連結 Monaco 和一般所見即所得的編輯器完全是兩個世界...
今年的生日,我給了自己一份特別的禮物——完全沒有計畫的一天。這或許聽起來很普通,但對於一個平日被行程、專案和待辦事項填滿生活的人來說,這是一種奢侈。2 月 3 日那天,我請了假,關掉鬧鐘,也不設任何提醒,只想讓身體去決定該如何運作。結果,一覺睡到傍晚,醒來時已經將近五、六點了。 窗外的光線雖然逐漸暗下,但內心卻莫名輕快。沒有時間表要趕,也不需要刻意安排什麼儀式感。我拿起手機聯絡從小五熟識的老朋友,很快地就達成共識:燒肉是今晚最好的選擇。...