[{"data":1,"prerenderedAt":1418},["ShallowReactive",2],{"nav-search-articles-zh":3,"page-\u002Farticles\u002Fwitr":505,"related-\u002Farticles\u002Fwitr":1314,"article-prev-next-zh-\u002Farticles\u002Fwitr":1325},[4,14,19,26,32,38,49,55,60,65,72,77,82,88,93,98,103,109,114,119,124,129,134,139,144,149,154,159,164,169,174,179,184,189,194,199,205,211,216,221,226,231,236,241,246,251,256,261,266,272,277,282,288,298,303,308,314,319,324,332,339,346,352,357,362,368,373,378,383,388,393,398,403,408,413,418,423,428,433,438,443,448,453,458,463,468,473,480,485,490,495,500],{"_path":5,"title":6,"description":7,"category":8,"tags":9},"\u002Farticles\u002Fwitr","witr 實測：一條指令查出誰占用 Port，以及它為什麼在跑","我在 Mac 實際開了一個占用 5173 Port 的 Node 服務，再用 witr 追查程序、啟動來源與 Socket，也整理了 TUI、常用指令和公開畫面前要注意的隱私資訊。","AI & Tools",[10,11,12,13],"Open Source","CLI","Network","Productivity",{"_path":15,"title":16,"description":17,"category":8,"tags":18},"\u002Farticles\u002Fsyncthing","Syncthing 實測：Mac 和 Windows 不靠雲端硬碟，自動同步資料夾","我用 Syncthing 連接 Mac 與 Windows，實際測試共享資料夾的雙向檔案同步，也記錄了加密設定錯誤與同步衝突。",[10,12,13],{"_path":20,"title":21,"description":22,"category":8,"tags":23},"\u002Farticles\u002Flosslesscut","LosslessCut 實測：5 分鐘 600 MB 影片，幾乎按下就剪完","LosslessCut 能用 FFmpeg 直接複製影音串流，不必重新編碼。我實測剪一支約 5 分鐘、600 MB 的影片，並整理免費下載方式、I／O 快捷鍵與關鍵影格限制。",[10,13,24,25],"Video Processing","Audio Processing",{"_path":27,"title":28,"description":29,"category":8,"tags":30},"\u002Farticles\u002Flulu","LuLu 實測：Mac App 第一次往外連時，先讓你看一眼再決定","LuLu 是免費開源的 macOS 出站防火牆。它會在沒有規則的程式建立對外連線時顯示程式、目的地與簽章資訊；本文整理安裝後該保留的預設選項，以及警示該怎麼判斷。",[10,31,12],"Security",{"_path":33,"title":34,"description":35,"category":8,"tags":36},"\u002Farticles\u002Fsnapzy","Snapzy 實測：比 Mac 內建截圖更完整的免費原生工具","Snapzy 是免費開源的 macOS 原生截圖工具，支援截圖即時標記、長截圖、OCR、螢幕錄影與內建編輯器。我實測截圖並標記功能，也整理了避免快捷鍵衝突的設定方式。",[10,13,37],"Image Processing",{"_path":39,"title":40,"description":41,"category":8,"tags":42},"\u002Farticles\u002Fimg2threejs-codex-test","img2threejs 實測：丟一張圖片給 Codex，真的能做成 Three.js 3D 模型嗎？","我用 GPT-5.6 SOL、medium 推理測試 img2threejs。F1 賽車這類複雜物件很容易翻車，換成紅白機手把後，按鈕、視角切換與爆炸圖都有做出來。這篇整理實測結果、適用範圍與 Codex 安裝方式。",[43,10,44,45,46,47,48,37],"AI Agents","Web Development","JavaScript","WebGL","Codex","Agent Workflow",{"_path":50,"title":51,"description":52,"category":8,"tags":53},"\u002Farticles\u002Fpake","Pake 實測：一行指令把 Threads 網站打包成約 10MB 的 Mac App","Pake 是以 Rust／Tauri 製作的開源工具，可以把網站打包成 macOS、Windows 或 Linux 桌面 App。我實測將 Threads 網站做成獨立 App，從終端機輸入網址到拖進 Applications 就能使用。",[10,11,13,54],"Rust",{"_path":56,"title":57,"description":58,"category":8,"tags":59},"\u002Farticles\u002Fmole","MOLE 實測：讓 AI Agent 先分析，再幫 Mac 清出 15GB 空間","MOLE 是 macOS 的開源終端機維護工具。我實測用 mo analyze、mo status 和 mo clean --dry-run 檢查硬碟與快取，最後清出 15.29GB；它也很適合交給 AI Agent 先分析、由人確認後再清理。",[43,10,11,13],{"_path":61,"title":62,"description":63,"category":8,"tags":64},"\u002Farticles\u002Ftwinkle-tray","Twinkle Tray：在 Windows 工作列直接調整多螢幕亮度","Twinkle Tray 是一套免費的 Windows 小工具，可以從系統匣直接調整多台外接螢幕的亮度，也支援快捷鍵、排程與 DDC\u002FCI 顯示器控制。",[13,10],{"_path":66,"title":67,"description":68,"category":8,"tags":69},"\u002Farticles\u002Fmarker","Marker 實測：比 MinerU 好上手的 PDF 轉 Markdown 工具？","我在 Apple Silicon Mac 上實測 Marker 的 fast 模式。一般文字型 PDF 轉 Markdown 已經很夠用，但公式與表格仍會失手；也整理了它和 MinerU 的實際分工。",[70,10,11,71,13],"AI Tools","Local AI",{"_path":73,"title":74,"description":75,"category":8,"tags":76},"\u002Farticles\u002Fzed","Zed 實測：最近試到一個很順的 AI 程式編輯器","最近把專案放進 Zed 用了一下。它的操作感很輕快，AI 又能直接接 ChatGPT、Codex 和 MCP；不是要取代 VS Code，但很適合當成另一個選擇。",[70,43,10,13,47,54],{"_path":78,"title":79,"description":80,"category":8,"tags":81},"\u002Farticles\u002Fwhatcable","WhatCable 實測：Mac 的 USB-C 線到底跑多快、能不能帶螢幕，一打開就知道","WhatCable 是 macOS 選單列工具，能直接讀出 USB-C 線材、連接埠與裝置的實際協商狀態。我用它看到 USB4／Thunderbolt 40 Gbps、240W、e-marker，以及 4K 144Hz 螢幕連線的細節。",[13,10,11],{"_path":83,"title":84,"description":85,"category":8,"tags":86},"\u002Farticles\u002Fdbx","DBX：支援 70+ 種資料庫的輕量管理工具，連 Supabase 也能直接看表格、跑 SQL","DBX 是一款約 20 MB 的輕量開源資料庫工具。我這次實際連上 Supabase，也看了它的多資料庫管理、編輯器主題、AI 助理與 MCP 整合。",[87,10,13,43,54],"Database",{"_path":89,"title":90,"description":91,"category":8,"tags":92},"\u002Farticles\u002Fopenlogi","OpenLogi 實測：免費開源的 Logitech Options+ 本機替代工具，macOS 權限與 HID 排錯","OpenLogi 是支援特定 Logitech HID++ 周邊的本機開源工具，可調整按鍵、DPI 與 SmartShift。本文整理 macOS 的 Homebrew 安裝、必要權限與一次 HID transport error 的個案排錯；Windows 則是下載後直接可用。",[10,13,54],{"_path":94,"title":95,"description":96,"category":8,"tags":97},"\u002Farticles\u002Fmos","Mos 實測：讓 macOS 外接滑鼠滾輪變得平順","Mos 是一款免費的 macOS 滑鼠工具，能把外接滑鼠滾輪的跳動補成平滑移動，也能分別設定捲動方向與各個應用程式的捲動參數。",[13,11],{"_path":99,"title":100,"description":101,"category":8,"tags":102},"\u002Farticles\u002Flively-wallpaper","Lively Wallpaper 實測：免費開源的 Windows 動態桌布，音樂同步與全螢幕自動暫停","我實測 Lively Wallpaper：一款免費開源的 Windows 動態桌布工具。可以直接放入影片、GIF、網頁與網址，也能做系統音訊視覺化；更重要的是，玩遊戲或開全螢幕程式時能自動暫停桌布。",[10,13,24,25],{"_path":104,"title":105,"description":106,"category":8,"tags":107},"\u002Farticles\u002Ftrex-ocr","TRex 實測：macOS 選取螢幕文字就複製，QR Code、Raycast 與自動化都能用","我實測 TRex：一款 macOS 選取螢幕區域後直接把文字放進剪貼簿的開源 OCR 工具。它也能讀 QR Code、條碼、支援 Raycast、快捷鍵、CLI、Shortcuts 與 Watch Mode。",[37,10,13,108,11],"Automation",{"_path":110,"title":111,"description":112,"category":8,"tags":113},"\u002Farticles\u002Ftranslucenttb","TranslucentTB 實測：幾 MB 記憶體，讓 Windows 工作列變得更順眼","TranslucentTB 是一款免費開源的 Windows 工作列外觀工具，只用幾 MB 記憶體、幾乎不吃 CPU，就能在透明、模糊、壓克力與一般模式間切換。我把最大化視窗設成一般模式，其餘工作時維持模糊，兼顧閱讀性與桌面質感。",[10,13,11],{"_path":115,"title":116,"description":117,"category":8,"tags":118},"\u002Farticles\u002Fheyclicky","HeyClicky 實測：比語音輸入更進一步的螢幕感知 AI","HeyClicky 是一款住在 macOS 游標旁的 AI 助手。它會結合螢幕畫面與語音指令，協助理解目前工作內容；我實測了它的功能、免費額度與多螢幕問題。",[70,43,13,108],{"_path":120,"title":121,"description":122,"category":8,"tags":123},"\u002Farticles\u002Fmac-stats","Stats 實測：把 Mac 的 CPU、記憶體與網路狀態放進選單列","Stats 是免費開源的 macOS 選單列系統監控工具。我實測它的安裝、預設選單列配置，以及 CPU、記憶體面板；想隨時看 CPU、RAM、網路或 SSD 狀態，這款很實用。",[10,13],{"_path":125,"title":126,"description":127,"category":8,"tags":128},"\u002Farticles\u002Fwinhance","Winhance 實測：一鍵安裝後管理、移除 Windows 內建軟體","實測 Winhance 的 PowerShell 一鍵安裝、繁體中文介面與 Windows 內建 App 批次移除流程。它把常見的 debloat、系統調整和外部軟體安裝集中到同一個圖形介面。",[10,13,11],{"_path":130,"title":131,"description":132,"category":8,"tags":133},"\u002Farticles\u002Ffile-converter","File Converter 實測：Windows 右鍵直接把 PNG／JPG 轉成 WebP","File Converter 是整合進 Windows 檔案總管右鍵選單的開源轉檔工具。我實測把 PNG、JPG 圖片轉成 WebP；不必打開主程式，選檔後右鍵就能完成，也支援影片、音訊與更多圖片格式。",[10,13,37,24],{"_path":135,"title":136,"description":137,"category":8,"tags":138},"\u002Farticles\u002Ffinetune","FineTune：補上 macOS 缺少的單一 App 音量控制","FineTune 是一個免費開源的 macOS 選單列音量工具，可以針對不同 App 調整音量、切換輸出設備，還能把不同 App 指到不同音訊設備。這篇簡單記錄它解決的問題與安裝方式。",[13,10],{"_path":140,"title":141,"description":142,"category":8,"tags":143},"\u002Farticles\u002Flatest","Latest：macOS 上一眼檢查 App 更新的小工具","Latest 是一個免費開源的 macOS App 更新檢查工具，可以集中查看哪些 App 有新版本，支援 Mac App Store 與使用 Sparkle 更新框架的應用程式。功能很單純，但對想定期整理 Mac 軟體版本的人很方便。",[13,10],{"_path":145,"title":146,"description":147,"category":8,"tags":148},"\u002Farticles\u002Fmarktext","MarkText：我目前用過最順手的所見即所得 Markdown 編輯器","MarkText 是一個開源 Markdown 編輯器，最大的特色是所見即所得：不用在原始碼與預覽視窗之間來回切換，而是在同一個畫面直接寫、直接看結果。這篇記錄 macOS 與 Windows 下載方式、Apple Silicon 要選哪個檔案，以及 macOS 遇到「已損毀，無法打開」時怎麼用 xattr 解決。",[13,10],{"_path":150,"title":151,"description":152,"category":8,"tags":153},"\u002Farticles\u002Fquicklook","QuickLook 實測：把 macOS 空白鍵預覽帶到 Windows，速度比 PowerToys Peek 更順","我實測 QuickLook 這款 Windows 檔案快速預覽工具，可以用空白鍵預覽 PDF、Markdown、圖片、影片、3D 模型與多種文件格式。它像 macOS Quick Look，但在 Windows 上支援格式更廣，也比我用 PowerToys Peek 時更順手。",[13,10],{"_path":155,"title":156,"description":157,"category":8,"tags":158},"\u002Farticles\u002Fumi-ocr","Umi-OCR 實測：免費開源離線 OCR 工具，截圖、批次圖片與 PDF 都能本地辨識","我實測 Umi-OCR 這款免費開源的離線 OCR 工具，支援截圖 OCR、批次圖片辨識、PDF 文件 OCR、二維碼掃描與命令列\u002FAPI 呼叫。它不用上傳檔案，Windows 還能依照電腦效能選 Paddle 或 Rapid 引擎版本。",[37,10,13],{"_path":160,"title":161,"description":162,"category":8,"tags":163},"\u002Farticles\u002Fpicsharp","PicSharp 實測：跨平台開源圖片壓縮工具，拖進去就能批次壓縮","我實測 PicSharp 這款跨平台圖片壓縮工具，支援 macOS、Windows 與 Linux，可以直接拖曳圖片或資料夾進去批次壓縮，也能在本地壓縮與 TinyPNG 之間切換，適合整理網站圖片與文章素材。",[37,10,13],{"_path":165,"title":166,"description":167,"category":8,"tags":168},"\u002Farticles\u002Fmeetily","Meetily 實測：本地 AI 會議轉錄、逐字稿與繁體中文摘要工具","Meetily 是一款開源、隱私優先的 AI 會議助理，可以在本機錄音、轉錄並產生摘要。我實測 v0.4.0，整理安裝方式、中文轉錄模型設定、繁體中文摘要與適合使用的情境。",[70,10,71,25,13],{"_path":170,"title":171,"description":172,"category":8,"tags":173},"\u002Farticles\u002Fbuhocleaner","BuhoCleaner 實測：我在 Mac 上用了超過一年的清理與 App 移除工具","我實測 BuhoCleaner 這套 Mac 清理工具，分享用了超過一年的心得、免費版限制、付費版價格、選單列監控、垃圾檔案清理、App 完整移除與日常使用情境。",[13],{"_path":175,"title":176,"description":177,"category":8,"tags":178},"\u002Farticles\u002Ffancontrol","Fan Control 實測：Windows 上超細緻的風扇曲線與硬體溫度控制工具","我實測 Fan Control 這套 Windows 風扇控制工具，從 GitHub Releases 下載 installer、安裝後切換繁體中文、自動校正風扇、建立曲線，到實際調整監控卡片與風扇策略的使用心得。",[13],{"_path":180,"title":181,"description":182,"category":8,"tags":183},"\u002Farticles\u002Fupscayl","Upscayl 實測：免費開源的本機 AI 圖片放大工具","我實測 Upscayl 這套免費開源 AI 圖片放大工具，從 GitHub Releases 與 Homebrew 安裝、第一次選語言、選模型，到用 Digital Art 模型把 He-Man 圖片放大 4 倍的實際效果。",[37,10,71,13],{"_path":185,"title":186,"description":187,"category":8,"tags":188},"\u002Farticles\u002Fappports","AppPorts 實測：把大型 Mac App 搬到外接硬碟，還能像原本一樣啟動","我實測 AppPorts 在 macOS 上把應用程式遷移到外接 SSD 的流程，包含 GitHub Releases 下載、Gatekeeper 隔離解除、語言切換、鎖定遷移與非鎖定遷移，以及實際搬移後的使用感受。",[13,10],{"_path":190,"title":191,"description":192,"category":8,"tags":193},"\u002Farticles\u002Fmac-fan","Macs Fan Control 實測：用了超過一年還留在 Mac 上的免費風扇控制工具","我在 macOS 上長期使用 Macs Fan Control 超過一年，這篇記錄它的下載方式、GitHub README 要先看的重點、溫度感測器設定、風扇曲線邏輯，以及我自己會注意的使用界線。",[13],{"_path":195,"title":196,"description":197,"category":8,"tags":198},"\u002Farticles\u002Fmarkdown-preview","Markdown Preview：macOS 上更輕量的 .md 預覽工具","Markdown Preview 是一個專門用來打開與預覽 .md 檔案的 macOS 小工具，可以設定成 Markdown 預設開啟 App，支援 Quick Look、搜尋、字體大小、外觀切換，以及 Preview \u002F Edit \u002F Split 模式。",[13,44],{"_path":200,"title":201,"description":202,"category":8,"tags":203},"\u002Farticles\u002Fcodebase-memory","Codebase Memory MCP 實測：把整個程式碼庫變成 AI Agent 可查詢的知識圖譜","Codebase Memory MCP 是一個本機運行的程式碼知識圖譜引擎，能讓 Claude Code、Codex、Cursor 等 AI Agent 直接查詢函式、呼叫鏈、架構與影響範圍。本文實測安裝、索引、3D Graph UI 與 CLI 查詢流程。",[70,43,10,11,204,47],"Data Visualization",{"_path":206,"title":207,"description":208,"category":209,"tags":210},"\u002Farticles\u002Fdeskreen","Deskreen 同網域臨時螢幕分享工具實測：用手機或另一台電腦看你的畫面","Deskreen 可以把電腦畫面分享給同一個區域網路內的手機、平板或另一台電腦。這篇紀錄實際使用流程、適合場景，以及內網 IP 和隱私注意事項。","Tools",[10,12,13],{"_path":212,"title":213,"description":214,"category":8,"tags":215},"\u002Farticles\u002Frustdesk","RustDesk 開源遠端桌面實測：用 Windows 串流控制 macOS","RustDesk 是一款開源遠端桌面工具，可以跨平台遠端控制電腦，也支援自建伺服器。這篇記錄我從 GitHub 下載、登入帳號、開啟權限、設定固定密碼，到第一次接受連線的實測流程。",[10,12,13,54],{"_path":217,"title":218,"description":219,"category":8,"tags":220},"\u002Farticles\u002Fhandbrake","HandBrake 實測：老牌開源影片壓縮工具到現在還是很穩","HandBrake 是一款老牌開源影片轉檔與壓縮工具。我這次用 4K 影片簡單實測，原始 106.1 MB 壓到 16.6 MB，畫質保留得比我預期好，這篇記錄我的基本用法與 preset 選擇心得。",[10,24,13],{"_path":222,"title":223,"description":224,"category":8,"tags":225},"\u002Farticles\u002Fsmartsub","SmartSub 妙幕實測：我目前用過最省事的本機影片字幕翻譯工具","SmartSub 妙幕是一款本地優先的桌面字幕工具，可以完成影片轉字幕、字幕翻譯、雙語字幕與字幕燒錄。這篇記錄我實測 DeepSeek 翻譯、faster-whisper、CUDA 加速，以及它和 VideoLingo 的差異。",[70,10,24,71],{"_path":227,"title":228,"description":229,"category":8,"tags":230},"\u002Farticles\u002Fkando","Kando 實測：我近期最喜歡的跨平台開源圓盤快捷選單","Kando 是一款免費開源、支援 macOS\u002FWindows\u002FLinux 的 Pie Menu 工具，可以用 Ctrl + Space 叫出圓盤選單，用滑鼠手勢快速開啟 App、網站、檔案、熱鍵與巨集。這篇分享我的實際使用體驗與設定方式。",[10,13,108],{"_path":232,"title":233,"description":234,"category":8,"tags":235},"\u002Farticles\u002Fhorizon","Horizon 實測：讓 Codex 自動整理每日 AI 新聞","我把 Horizon 接進部落格新聞流程，讓它負責抓資料來源，再交給 Codex 寫成每日 AI 新聞摘要。這篇記錄安裝方式、基本使用流程，以及我實際測完後的想法。",[70,43,10,108,11],{"_path":237,"title":238,"description":239,"category":8,"tags":240},"\u002Farticles\u002Fmaccy","Maccy 實測：輕量、鍵盤優先的 macOS 開源剪貼簿管理工具","自己在 macOS 整理資料或開發時最常遇到的問題是頻繁複製貼上造成的視窗切換。本文實測開源的 Maccy 剪貼簿工具，分享其快捷鍵喚醒、快速搜尋、安全過濾等實際使用體驗。",[10,13],{"_path":242,"title":243,"description":244,"category":8,"tags":245},"\u002Farticles\u002Fstirling-pdf","Stirling PDF 實測：離線跑的開源 PDF 神器，免上傳雲端直接搞定 50+ 種處理需求","我最近實測了開源的 Stirling PDF。這是一款可以完全在本地運行的 PDF 編輯平台，支援合併、壓縮、簽名等多達 50 多種功能，不用擔心敏感文件被上傳到第三方雲端伺服器。",[10,13,31],{"_path":247,"title":248,"description":249,"category":209,"tags":250},"\u002Farticles\u002Faerospace","AeroSpace 實測：讓 macOS 擁有平鋪視窗管理","分享這款 AeroSpace 平鋪視窗管理工具，以及我如何透過鍵盤快捷鍵解決 macOS 視窗混亂的問題。",[10,13],{"_path":252,"title":253,"description":254,"category":8,"tags":255},"\u002Farticles\u002Fpowertoys","Microsoft PowerToys 實測：4 個用過就回不去的 Windows 效率工具","自己在 Windows 工作最常遇到的問題是缺少類似 macOS 的預覽與快速啟動功能。本文實測微軟官方推出的 PowerToys 中實用的四個工具：空白鍵預覽 Peek、快速截圖 OCR 複製、視窗永久置頂與快捷搜尋框，分享我實際的使用體驗。",[10,13],{"_path":257,"title":258,"description":259,"category":8,"tags":260},"\u002Farticles\u002Frecord-replay","Codex Record & Replay 實測：演示一遍，教 AI 學會你的本地工作流","OpenAI Codex 最近新增了 Record & Replay 功能。我實測了在本地環境下，如何透過一次演示，讓 Codex 錄製並自動執行影片壓縮等腳本工作流。",[47,108,13,70],{"_path":262,"title":263,"description":264,"category":8,"tags":265},"\u002Farticles\u002Frecordly","Recordly 實測：開源螢幕錄影與自動 Zoom-in 編輯器（macOS\u002FWindows\u002FLinux）","我最近實測了開源的 Recordly。這是一款結合錄影與後製的工具，能自動根據滑鼠活動生成變焦建議，並提供滑鼠平滑、陰影邊框等美化功能，讓製作軟體 Demo 影片變得很省時。",[10,13,24],{"_path":267,"title":268,"description":269,"category":8,"tags":270},"\u002Farticles\u002Fcodexbar","CodexBar 實測：macOS 選單列一次監控 53 個 AI 編碼服務額度","CodexBar 是一款開源的 macOS 選單列工具，可即時追蹤 Codex、Claude、Cursor、Copilot 等 AI 編碼服務的使用視窗、信用餘額與重設倒數。本文實測安裝流程、權限授權與提供者設定教學。",[70,47,271,11,10,13],"Claude Code",{"_path":273,"title":274,"description":275,"category":8,"tags":276},"\u002Farticles\u002Foptimizerduck","optimizerDuck 實測：開源 Windows 效能與隱私最佳化工具，拒絕背景無用遙測","optimizerDuck 是一款基於 .NET 10 與 WPF 開發的開源 Windows 系統最佳化工具。本文實測其效能調校、隱私遙測封鎖、GPU 電源優化等功能，並提供 Windows SmartScreen 封鎖警告的排解步驟與繁體中文語系設定教學。",[10,13,108],{"_path":278,"title":279,"description":280,"category":8,"tags":281},"\u002Farticles\u002Fhandy","Handy 離線語音輸入法實測：搭配 Breeze ASR 25，專為台灣人設計的中英混用輸入方案","Handy 是一款免費、開源且完全離線運作的桌面語音輸入工具。本文實測在 macOS\u002FWindows\u002FLinux 環境下安裝配置，並搭配專為台灣日常中英混用情境優化的 Breeze ASR 25模型，為您打造極致隱私的語音輸入體驗。",[70,10,71,25,13],{"_path":283,"title":284,"description":285,"category":8,"tags":286},"\u002Farticles\u002F5live","Gemini 3.5 Live Translate 實測：全新雙向即時語音翻譯與 Live API 開發指南","Google 推出全新的 Gemini 3.5 Live Translate 模型，支援超過 70 種語言的雙向低延遲即時語音翻譯。本文將帶你實測 Google AI Studio 的網頁體驗、了解其運作機制，並提供 Live API 開發範例與 WebSocket 連接設定。",[70,25,287],"LLM",{"_path":289,"title":290,"description":291,"category":209,"tags":292},"\u002Farticles\u002Fmap3d","Map3D 實測：一鍵生成 3D 城市地圖與 GLB 匯出指南","想要快速獲取真實城市的 3D 建築與道路模型？Map3D 基於 React-Three-Fiber 與 OpenStreetMap，提供網頁一鍵框選與直接匯出 GLB，讓 3D 地形建模變得太簡單了！",[293,294,295,296,297,46],"React-Three-Fiber","Three.js","OpenStreetMap","GLB","3D Map",{"_path":299,"title":300,"description":301,"category":209,"tags":302},"\u002Farticles\u002Flocalsend","LocalSend 跨平台開源局域網檔案傳輸工具免設定使用指南","免網路、免註冊，在 macOS、Windows、Linux、iOS 與 Android 之間以 HTTPS 局域網高速安全互傳檔案。",[10,12,13],{"_path":304,"title":305,"description":306,"category":8,"tags":307},"\u002Farticles\u002Fllmwiki","LLM Wiki 實測：用大模型打造能自動整理與更新的個人離線知識庫","每次整理筆記都覺得繁瑣？LLM Wiki 是一款基於 Andrej Karpathy 理念開發的個人知識庫工具。它能自動讀取文檔、進行兩階段思維鏈分析、生成互相連結的 Wiki 頁面，並完美兼容 Obsidian 與本地 AI 模型。",[71,70,10,287,13,43],{"_path":309,"title":310,"description":311,"category":209,"tags":312},"\u002Farticles\u002Fvibe","Vibe 實測：最適合小白的跨平台離線 AI 語音轉文字工具，簡潔直覺一鍵搞定！","嫌 Whisper 命令行太難、其他工具設定太複雜？Vibe 是一款極簡、無痛上手的離線語音轉字幕工具。功能雖然精簡，但介面清爽、極易上手，是電腦小白與新手的最佳選擇！",[25,313,71,10],"Whisper",{"_path":315,"title":316,"description":317,"category":8,"tags":318},"\u002Farticles\u002Flottie","Text-To-Lottie 實測：用 AI Agent 本地生成與即時預覽 Lottie 動畫","本文介紹如何透過 Skia CanvasKit (Skottie) 搭配 React 與 shadcn\u002Fui 控制介面，讓本地 AI 代理直接編寫 lottie.json，並透過開發伺服器即時熱重載預覽動畫。",[70,43,10,44],{"_path":320,"title":321,"description":322,"category":8,"tags":323},"\u002Farticles\u002Fhermes-desktop","Nous Hermes Desktop 桌面版原生安裝與設定教學：跨平台 AI 助理與統一記憶體實測","Nous Research 旗下的 Hermes 智慧代理從終端機走向 GUI！本文帶您實測原生三平台桌面版，詳細拆解舊用戶一鍵搬遷步驟、API 供應商配置，以及如何串接 Telegram 與 Line 打造個人 AI 助理。",[70,43,10],{"_path":325,"title":326,"description":327,"category":209,"tags":328},"\u002Farticles\u002Fmineru","MinerU 實測：超強開源 PDF 與多格式文檔解析利器（macOS\u002FWindows\u002FLinux）","面臨複雜版面、掃描件或公式時，傳統 PDF 轉文字工具總是力不從心？開源框架 MinerU 結合佈局分析與視覺語言模型 (VLM)，能一鍵將 PDF、圖片及 Office 檔案轉換為精準的 Markdown、表格與 LaTeX 公式。本文實測線上 Web 版與本地 CLI\u002FAPI 部署流程。",[329,330,331,71,10],"PDF Parser","Markdown","OCR",{"_path":333,"title":334,"description":335,"category":10,"tags":336},"\u002Farticles\u002Fheadroom","Headroom 實測：AI Agent 的上下文壓縮層，節省高達 60–95% Token 成本","專為 AI Agent 設計的開源上下文優化工具 Headroom，整合多種壓縮演算法，支援本地逆向解壓 (CCR)，大幅降低 LLM 運算開銷並提升反應速度。",[10,337,287,338],"AI Agent","Context Optimization",{"_path":340,"title":341,"description":342,"category":343,"tags":344},"\u002Farticles\u002Ftegaki","Tegaki 手寫文字動畫庫安裝與實測：網頁手寫字動態特效輕鬆實現","想要在網頁中加入自然流暢的手寫字動畫嗎？Tegaki 是一個輕量且易用的 JavaScript 庫，能將任何字型轉換成手寫筆劃動畫。","Web Dev",[10,44,345,45],"Frontend",{"_path":347,"title":348,"description":349,"category":8,"tags":350},"\u002Farticles\u002Fccswitch2","CC Switch 延伸應用：手機遠端控制電腦與 Codex 增強模式實測","如何利用 CC Switch v3.16.1+ 獨家功能，在保留 Codex 官方行動端登入態與遠端操控能力的同時，將實際模型請求路由至 DeepSeek 等第三方 API？手把手帶你實現手機控制電腦的 AI Agent 體驗。",[70,271,47,351,287],"CC Switch",{"_path":353,"title":354,"description":355,"category":8,"tags":356},"\u002Farticles\u002Fccswitch","CC Switch 實測：自備 API Key 一鍵切換 AI CLI 模型的本機路由神器","在終端機使用 Claude Code 或 Codex 時，如何自由切換模型、自備 API Key 或使用 DeepSeek？本篇實測 CC Switch 路由工具，手把手教學如何代理 AI CLI 並進行花費與 MCP 管理。",[70,271,47,351,287],{"_path":358,"title":359,"description":360,"category":8,"tags":361},"\u002Farticles\u002Fremoverized","Removerized：離線可用的瀏覽器端 AI 去背與畫質增強工具","Removerized 讓你在瀏覽器中直接完成去背、放大與批次處理，資料不需上傳雲端，兼顧速度與隱私。",[70,37,71],{"_path":363,"title":364,"description":365,"category":8,"tags":366},"\u002Farticles\u002Fopen-design","Open Design 實測：用本地 CLI 快速做出作品集首頁","這次我把作品集首頁的大部分畫面交給 Open Design 處理。從選本地 Coding Agent、挑設計系統、輸入 brief，到生成設計稿與交付給 VS Code，整個流程比我預期順很多。",[367,48,44],"AI Design",{"_path":369,"title":370,"description":371,"category":209,"tags":372},"\u002Farticles\u002Fpot","Pot (派了個萌的翻譯器) 實測：最完美的跨平台劃詞翻譯與 OCR 工具","尋找一款流暢、不打斷工作流的翻譯工具？Pot 支援多譯文並行比對、精準的截圖 OCR 與豐富的翻譯\u002F大模型接口，是 macOS, Windows 與 Linux 用戶的極致效率利器。",[13,70,10],{"_path":374,"title":375,"description":376,"category":209,"tags":377},"\u002Farticles\u002Frtk","RTK 終端機 Token 殺手安裝與實測：省下 70% 以上 Claude Code 費用","RTK (Rust Token Killer) 是一個基於 Rust 的高效能 CLI 代理工具，能自動過濾與壓縮終端機輸出，為 AI 輔助開發節省 60-90% 的 Token 消耗。",[43,271,13,54],{"_path":379,"title":380,"description":381,"category":209,"tags":382},"\u002Farticles\u002Ffreedomain","Digiplat 免費 DNS 二級域名申請與 Cloudflare 解析配置教學","想將個人專案或測試網站部署上線，卻不想花錢購買網域？本文將教你如何使用 Digiplat 免費申請包含 .US.KG、.DPDNS.ORG 等多種後綴的免費二級域名。",[44],{"_path":384,"title":385,"description":386,"category":8,"tags":387},"\u002Farticles\u002Fmodly","Modly 本地端 AI 圖像轉 3D 網格生成工具安裝與實測","想將 2D 圖片快速轉換為高精度的 3D 模型，又不想付費或將隱私上傳雲端？Modly 讓你在本機 GPU 上直接進行 AI 3D 生成。",[70,46,10,71],{"_path":389,"title":390,"description":391,"category":343,"tags":392},"\u002Farticles\u002Fopenvid","OpenVid 瀏覽器免安裝產品 Demo 錄影與 3D 鏡頭後製工具教學","想要為你的產品錄製精美的演示影片？OpenVid 讓你直接在瀏覽器中套用 3D 鏡頭、縮放與精美背景，一鍵導出高質感的 Demo 影片。",[10,44,24],{"_path":394,"title":395,"description":396,"category":8,"tags":397},"\u002Farticles\u002Fomnivoice","OmniVoice Studio 本地端 AI 影音配音工具實測與 macOS 安裝避坑指南","最近測試了開源版 ElevenLabs + HeyGen：OmniVoice Studio。它支援 646 種語言、本地自動影片配音，且連 Mac mini 都跑得動！本文分享實測心得、macOS 隔離區排除教學，以及繁中\u002F簡中輸入產生的語音對比。",[70,25],{"_path":399,"title":400,"description":401,"category":31,"tags":402},"\u002Farticles\u002Fshannon","Shannon AI Pentest Agent 安裝與實測指南（macOS\u002FLinux）","我用 10 個 AI agents 打自己的網站，2 小時後交出完整資安報告。Shannon 比我想像的成熟。",[43,31,108],{"_path":404,"title":405,"description":406,"category":343,"tags":407},"\u002Farticles\u002Fpretext","Pretext 高效多行文字 Canvas 排版庫優化與防 DOM 重繪技術","想精準計算段落高度、做出更自由的文字排版，卻不想一直碰 getBoundingClientRect？Pretext 提供了一條很聰明的路。",[44,345,45],{"_path":409,"title":410,"description":411,"category":209,"tags":412},"\u002Farticles\u002Faltsendme","AltSendme 跨平台 P2P 極速檔案互傳工具免伺服器部署指南","不用雲端、不用註冊，Windows 與 macOS 直接對傳。",[70,12,13],{"_path":414,"title":415,"description":416,"category":343,"tags":417},"\u002Farticles\u002Fdeckgl","Deck.gl 大規模 3D 地理數據視覺化框架與 MapLibre 整合實戰","想要在網頁上渲染數以萬計的數據點，同時保持流暢的 3D 互動？Deck.gl 是處理地理空間資料視覺化的絕佳利器。",[46,44,204,45],{"_path":419,"title":420,"description":421,"category":209,"tags":422},"\u002Farticles\u002Fantigravity-manager","Antigravity Manager 管理工具安裝教學：多帳號與 Token 額度即時監控","如果你只在意兩件事：配額看得清楚、帳號切得快速，Antigravity Manager 其實就很值得裝。",[70,13,11],{"_path":424,"title":425,"description":426,"category":10,"tags":427},"\u002Farticles\u002Fvideolingo","VideoLingo 本地 AI 影片翻譯字幕與中文配音工具部署指南","我實測了 VideoLingo，從原始影片到中文字幕與中配影片都能自動化完成。這篇整理功能、實際效果和我建議的模型設定。",[10,24,25,70],{"_path":429,"title":430,"description":431,"category":209,"tags":432},"\u002Farticles\u002Farnis","Arnis 地理 GIS 數據轉換工具安裝與 Minecraft 3D 真實地圖生成實戰","如果你曾經想過把自己的家鄉、城市甚至整片地形直接生成到 Minecraft 裡，Arnis 真的很誇張。",[10,108],{"_path":434,"title":435,"description":436,"category":10,"tags":437},"\u002Farticles\u002Flog-lottery-tw","log-lottery 開源網頁抽獎系統自定義配置與尾牙活動實用部署","支援自訂名單、獎項、圖片、背景與音樂的開源抽獎工具。我也整理了繁體中文版本，部署後打開瀏覽器就能直接使用。",[10,44,345],{"_path":439,"title":440,"description":441,"category":8,"tags":442},"\u002Farticles\u002Fhermes-hyperframes-self-intro-video","Hermes Agent x HyperFrames 實戰：AI 助理自介影片自動生成指南","叫 Hermes 自己拍一支自我介紹影片。從文案發想、HTML 動畫編寫、到渲染輸出 MP4 全部自動化。HyperFrames 是什麼？為什麼比 Remotion 更適合 AI Agent？",[43,24,108],{"_path":444,"title":445,"description":446,"category":8,"tags":447},"\u002Farticles\u002Fhermes-deepseek-v4","DeepSeek V4 Pro x Hermes Agent 自動寫自我介紹評測與部署指南","我叫 Hermes 自己寫這篇。1M context、0.87 鎂\u002F百萬 token、跨平台部署、自主截圖寫文 git push。這篇文章由 AI 從研究到發布全部自己來。",[43,287,108],{"_path":449,"title":450,"description":451,"category":209,"tags":452},"\u002Farticles\u002Fbarkod","Barkod Studio 個性化條碼與發票載具圖樣生成器安裝與設計指南","全網頁版免安裝，高質感自訂樣式。結帳時拿出鯊魚或大便造型載具，絕對是全場焦點。",[44,345,45],{"_path":454,"title":455,"description":456,"category":209,"tags":457},"\u002Farticles\u002Fstacher","Stacher 萬能影音下載器安裝教學與 yt-dlp GUI 圖形化配置指南","告別繁瑣的指令，yt-dlp 最強圖形化介面，4K 影片、音樂下載一次搞定！",[70,24],{"_path":459,"title":460,"description":461,"category":209,"tags":462},"\u002Farticles\u002Fpetdex","Petdex 點陣圖桌面電子寵物安裝指南：讓開發環境更有趣","一行 npx 指令秒裝，完全免註冊登入，給工程師帶來滿滿的心靈祥和！",[70,11],{"_path":464,"title":465,"description":466,"category":343,"tags":467},"\u002Farticles\u002Fcobe","Cobe 輕量 WebGL 地球儀配置教學與 Vue 專案整合指南","想要在網頁上放一個酷炫的 3D 地球，但又不想載入沉重的 Three.js？COBE 是你的最佳選擇。",[46,44,345,45],{"_path":469,"title":470,"description":471,"category":10,"tags":472},"\u002Farticles\u002Fsupercmd","SuperCmd 開源 Mac 快捷啟動器安裝與自定義指令配置指南","整合 Raycast 擴充、語音輸入與 AI 助手，這款開源工具能成為你的新寵嗎？",[10,13],{"_path":474,"title":475,"description":476,"category":477,"tags":478},"\u002Farticles\u002Fopenstock","OpenStock 開源股票市場回測系統安裝與 AI 策略整合教學","OpenStock 是一個由社群驅動的開源股票平台，昂貴的市場的平替工具。","AI & Finance",[10,479,87],"FinTech",{"_path":481,"title":482,"description":483,"category":8,"tags":484},"\u002Farticles\u002Fworld-monitor","World Monitor 全球即時情報監控系統本地部署與 AI 分析流整合教學","這是一篇關於 World Monitor 的深度介紹。從本地端快速部署到整合 AI 分析，教你如何打造一個包含地緣政治、軍事、金融與基礎設施的即時監控平台。",[70,12,87],{"_path":486,"title":487,"description":488,"category":8,"tags":489},"\u002Farticles\u002Fpi-mono-coding-agent","Pi Coding Agent 輕量級終端機 AI 助手安裝與工作流實戰","如果你覺得市面上的 AI 開發工具太過笨重，或是強迫你改變習慣，那你一定要試試完全由你掌控的 Pi。",[43,11],{"_path":491,"title":492,"description":493,"category":8,"tags":494},"\u002Farticles\u002Fwarp-terminal-ux-revolution","Warp Terminal 新一代 IDE 級智慧終端機安裝與開發效率優化配置","從可視化補全、滑鼠編輯到 Blocks 區塊輸出，Warp 正在把傳統終端機那套難用又反直覺的體驗，整個翻新。",[11,13],{"_path":496,"title":497,"description":498,"category":8,"tags":499},"\u002Farticles\u002Fvoicebox-local-ai-voice-studio","Voicebox 本地端 AI 語音工作室安裝指南與核心配置教學","這是一篇針對開發者設計的 Voicebox 指南。從 macOS\u002FWindows 安裝到 Voice Cloning 實作，並教你如何透過 MCP 讓 AI Agent 開口說話。",[70,25,108],{"_path":501,"title":502,"description":503,"category":8,"tags":504},"\u002Farticles\u002Fnvidia-nim-free-api","NVIDIA NIM 免費 DeepSeek-V4-Pro API 申請與多框架整合指南","不綁信用卡、沒有試用期！教你如何透過 NVIDIA NIM 無痛串接剛上市的最強開源模型 DeepSeek-V4-Pro 與 Flash 版本。",[70,287],{"_path":5,"_dir":506,"_draft":507,"_partial":507,"_locale":508,"title":6,"description":7,"date":509,"updated":509,"category":8,"image":510,"tags":511,"series":512,"readingTime":513,"difficulty":514,"local":515,"platforms":516,"gpu":521,"draft":507,"body":522,"_type":1308,"_id":1309,"_source":1310,"_file":1311,"_stem":1312,"_extension":1313},"articles",false,"","2026-08-07","\u002Fimages\u002Fvideo-posters\u002Fday_assets\u002Fwitr\u002Fwitr-demo.jpg",[10,11,12,13],"github-tech","6 min read","Easy",true,[517,518,519,520],"macOS","Linux","Windows","FreeBSD","None",{"type":523,"children":524,"toc":1298},"root",[525,533,548,588,593,627,636,641,647,673,686,691,697,709,742,747,767,772,778,783,808,821,845,880,888,893,906,912,924,972,985,993,998,1003,1008,1027,1032,1060,1065,1094,1099,1126,1131,1173,1201,1207,1212,1217,1235,1241,1253,1266,1287,1292],{"type":526,"tag":527,"props":528,"children":530},"element","h2",{"id":529},"前言",[531],{"type":532,"value":529},"text",{"type":526,"tag":534,"props":535,"children":536},"p",{},[537,539,546],{"type":532,"value":538},"開發時遇到 Port 被占用，我以前通常就是先跑 ",{"type":526,"tag":540,"props":541,"children":543},"code",{"className":542},[],[544],{"type":532,"value":545},"lsof -i :5173",{"type":532,"value":547},"，找到 PID，再回頭猜這個程序是從哪裡冒出來的。查得到「誰在跑」不難，麻煩的是後面那句：它到底為什麼會在這裡？",{"type":526,"tag":534,"props":549,"children":550},{},[551,553,562,564,570,572,578,580,586],{"type":532,"value":552},"這次看到 ",{"type":526,"tag":554,"props":555,"children":559},"a",{"href":556,"rel":557},"https:\u002F\u002Fgithub.com\u002Fpranshuparmar\u002Fwitr",[558],"nofollow",[560],{"type":532,"value":561},"witr",{"type":532,"value":563},"，名字就是「Why is this running?」的縮寫。我先在自己的 Mac 開一個 Node 服務占住 ",{"type":526,"tag":540,"props":565,"children":567},{"className":566},[],[568],{"type":532,"value":569},"5173",{"type":532,"value":571},"，接著執行 ",{"type":526,"tag":540,"props":573,"children":575},{"className":574},[],[576],{"type":532,"value":577},"witr --port 5173",{"type":532,"value":579},"。它不只抓到 Node，連 ",{"type":526,"tag":540,"props":581,"children":583},{"className":582},[],[584],{"type":532,"value":585},"launchd → ChatGPT → codex → zsh → node",{"type":532,"value":587}," 這條啟動鏈都列了出來。",{"type":526,"tag":589,"props":590,"children":592},"fullscreen-video",{"src":591},"\u002Fday_assets\u002Fwitr\u002Fwitr-demo.mp4",[],{"type":526,"tag":594,"props":595,"children":596},"ul",{},[597,607,617],{"type":526,"tag":598,"props":599,"children":600},"li",{},[601],{"type":526,"tag":554,"props":602,"children":604},{"href":556,"rel":603},[558],[605],{"type":532,"value":606},"witr GitHub 專案",{"type":526,"tag":598,"props":608,"children":609},{},[610],{"type":526,"tag":554,"props":611,"children":614},{"href":612,"rel":613},"https:\u002F\u002Fgithub.com\u002Fpranshuparmar\u002Fwitr\u002Freleases",[558],[615],{"type":532,"value":616},"witr 官方 Releases",{"type":526,"tag":598,"props":618,"children":619},{},[620],{"type":526,"tag":554,"props":621,"children":624},{"href":622,"rel":623},"https:\u002F\u002Fpranshuparmar.github.io\u002Fwitr\u002F",[558],[625],{"type":532,"value":626},"witr 瀏覽器 Playground",{"type":526,"tag":534,"props":628,"children":629},{},[630],{"type":526,"tag":631,"props":632,"children":635},"img",{"alt":633,"src":634},"witr Processes TUI 顯示程序清單與啟動鏈，右下角敏感參數值已模糊","\u002Fday_assets\u002Fwitr\u002Fwitr-processes.png",[],{"type":526,"tag":534,"props":637,"children":638},{},[639],{"type":532,"value":640},"影片只在終端機帳號與私人工作路徑上做了小範圍柔焦，Port、PID、程序名稱、啟動鏈和一般網路資訊都保留。第一張圖右下角原本還有啟動參數的 PIN 與 Key，所以只有那兩個值一定得遮；witr 真的會挖出不少本機資訊，公開截圖前還是要多看一次。",{"type":526,"tag":527,"props":642,"children":644},{"id":643},"它和-lsofps-差在哪裡",[645],{"type":532,"value":646},"它和 lsof、ps 差在哪裡？",{"type":526,"tag":534,"props":648,"children":649},{},[650,656,658,664,665,671],{"type":526,"tag":540,"props":651,"children":653},{"className":652},[],[654],{"type":532,"value":655},"ps",{"type":532,"value":657},"、",{"type":526,"tag":540,"props":659,"children":661},{"className":660},[],[662],{"type":532,"value":663},"top",{"type":532,"value":657},{"type":526,"tag":540,"props":666,"children":668},{"className":667},[],[669],{"type":532,"value":670},"lsof",{"type":532,"value":672}," 和系統監視工具都能告訴我目前有哪些程序、誰占用了 Port。witr 的重點不是把這些工具再做一次，而是把散在不同地方的資訊串成原因。",{"type":526,"tag":534,"props":674,"children":675},{},[676,678,684],{"type":532,"value":677},"查一個 Port 時，它會先找到對應 PID，再往上追父程序、啟動服務、Shell 或容器。最後整理出程序名稱、使用者、完整指令、啟動時間、工作目錄、Git 儲存庫和 Socket。看到 ",{"type":526,"tag":540,"props":679,"children":681},{"className":680},[],[682],{"type":532,"value":683},"Why It Exists",{"type":532,"value":685}," 那一行，就不用自己拿著 PID 到處對答案。",{"type":526,"tag":534,"props":687,"children":688},{},[689],{"type":532,"value":690},"它目前是 Apache-2.0 授權的開源專案，支援 macOS、Linux、Windows 與 FreeBSD。我這次在 Mac 使用的是 v0.3.3，也是官方 Releases 目前列出的最新版。",{"type":526,"tag":527,"props":692,"children":694},{"id":693},"mac-安裝最簡單",[695],{"type":532,"value":696},"Mac 安裝最簡單",{"type":526,"tag":534,"props":698,"children":699},{},[700,702,707],{"type":532,"value":701},"完整版本與其他平台的安裝檔都在 ",{"type":526,"tag":554,"props":703,"children":705},{"href":612,"rel":704},[558],[706],{"type":532,"value":616},{"type":532,"value":708},"。Mac 有 Homebrew 的話，直接一行就能裝：",{"type":526,"tag":710,"props":711,"children":715},"pre",{"className":712,"code":713,"language":714,"meta":508,"style":508},"language-bash shiki shiki-themes one-dark-pro","brew install witr\n","bash",[716],{"type":526,"tag":540,"props":717,"children":718},{"__ignoreMap":508},[719],{"type":526,"tag":720,"props":721,"children":724},"span",{"class":722,"line":723},"line",1,[725,731,737],{"type":526,"tag":720,"props":726,"children":728},{"style":727},"--shiki-default:#61AFEF",[729],{"type":532,"value":730},"brew",{"type":526,"tag":720,"props":732,"children":734},{"style":733},"--shiki-default:#98C379",[735],{"type":532,"value":736}," install",{"type":526,"tag":720,"props":738,"children":739},{"style":733},[740],{"type":532,"value":741}," witr\n",{"type":526,"tag":534,"props":743,"children":744},{},[745],{"type":532,"value":746},"安裝完成先確認版本：",{"type":526,"tag":710,"props":748,"children":750},{"className":712,"code":749,"language":714,"meta":508,"style":508},"witr --version\n",[751],{"type":526,"tag":540,"props":752,"children":753},{"__ignoreMap":508},[754],{"type":526,"tag":720,"props":755,"children":756},{"class":722,"line":723},[757,761],{"type":526,"tag":720,"props":758,"children":759},{"style":727},[760],{"type":532,"value":561},{"type":526,"tag":720,"props":762,"children":764},{"style":763},"--shiki-default:#D19A66",[765],{"type":532,"value":766}," --version\n",{"type":526,"tag":534,"props":768,"children":769},{},[770],{"type":532,"value":771},"Windows 可以用 Winget，Linux 也有 APT、安裝腳本和其他套件管理器。官方 README 列的方法很多，我覺得沒必要全部抄一遍；到 Releases 或 README 選自己原本就在用的安裝方式就好。",{"type":526,"tag":527,"props":773,"children":775},{"id":774},"我先故意占住-5173-port",[776],{"type":532,"value":777},"我先故意占住 5173 Port",{"type":526,"tag":534,"props":779,"children":780},{},[781],{"type":532,"value":782},"為了讓結果比較好懂，我先在本機啟動一個很小的 Node HTTP Server：",{"type":526,"tag":710,"props":784,"children":786},{"className":712,"code":785,"language":714,"meta":508,"style":508},"node -e 'require(\"http\").createServer((req,res)=>{res.end(\"witr demo\\n\")}).listen(5173,\"127.0.0.1\")'\n",[787],{"type":526,"tag":540,"props":788,"children":789},{"__ignoreMap":508},[790],{"type":526,"tag":720,"props":791,"children":792},{"class":722,"line":723},[793,798,803],{"type":526,"tag":720,"props":794,"children":795},{"style":727},[796],{"type":532,"value":797},"node",{"type":526,"tag":720,"props":799,"children":800},{"style":763},[801],{"type":532,"value":802}," -e",{"type":526,"tag":720,"props":804,"children":805},{"style":733},[806],{"type":532,"value":807}," 'require(\"http\").createServer((req,res)=>{res.end(\"witr demo\\n\")}).listen(5173,\"127.0.0.1\")'\n",{"type":526,"tag":534,"props":809,"children":810},{},[811,813,819],{"type":532,"value":812},"這個服務會一直占用 ",{"type":526,"tag":540,"props":814,"children":816},{"className":815},[],[817],{"type":532,"value":818},"127.0.0.1:5173",{"type":532,"value":820},"。接著另外開一個終端機執行：",{"type":526,"tag":710,"props":822,"children":824},{"className":712,"code":823,"language":714,"meta":508,"style":508},"witr --port 5173\n",[825],{"type":526,"tag":540,"props":826,"children":827},{"__ignoreMap":508},[828],{"type":526,"tag":720,"props":829,"children":830},{"class":722,"line":723},[831,835,840],{"type":526,"tag":720,"props":832,"children":833},{"style":727},[834],{"type":532,"value":561},{"type":526,"tag":720,"props":836,"children":837},{"style":763},[838],{"type":532,"value":839}," --port",{"type":526,"tag":720,"props":841,"children":842},{"style":763},[843],{"type":532,"value":844}," 5173\n",{"type":526,"tag":534,"props":846,"children":847},{},[848,850,855,857,862,864,870,872,878],{"type":532,"value":849},"我的結果直接顯示 Target 是 ",{"type":526,"tag":540,"props":851,"children":853},{"className":852},[],[854],{"type":532,"value":797},{"type":532,"value":856},"，Socket 正在監聽 ",{"type":526,"tag":540,"props":858,"children":860},{"className":859},[],[861],{"type":532,"value":818},{"type":532,"value":863},"，來源是 ",{"type":526,"tag":540,"props":865,"children":867},{"className":866},[],[868],{"type":532,"value":869},"zsh",{"type":532,"value":871},"。最有意思的是啟動鏈一路往上追到 ",{"type":526,"tag":540,"props":873,"children":875},{"className":874},[],[876],{"type":532,"value":877},"launchd",{"type":532,"value":879},"，中間經過 ChatGPT、Codex 和 zsh，最後才是實際占用 Port 的 Node 程序。",{"type":526,"tag":534,"props":881,"children":882},{},[883],{"type":526,"tag":631,"props":884,"children":887},{"alt":885,"src":886},"使用 witr --port 5173 找到 Node 程序、啟動鏈與監聽中的 Socket","\u002Fday_assets\u002Fwitr\u002Fwitr-port-trace.png",[],{"type":526,"tag":534,"props":889,"children":890},{},[891],{"type":532,"value":892},"這剛好就是我想看的東西。如果只是想關掉 Port，拿到 PID 就夠了；但碰到背景服務、開發伺服器或容器自己重啟，知道誰把它叫起來，才比較不會殺完一次又再出現。",{"type":526,"tag":534,"props":894,"children":895},{},[896,898,904],{"type":532,"value":897},"測完記得回到原本執行 Node 的終端機按 ",{"type":526,"tag":540,"props":899,"children":901},{"className":900},[],[902],{"type":532,"value":903},"Control + C",{"type":532,"value":905},"。不要為了清 Port 直接亂殺不認識的系統程序。",{"type":526,"tag":527,"props":907,"children":909},{"id":908},"不加參數就是完整-tui",[910],{"type":532,"value":911},"不加參數就是完整 TUI",{"type":526,"tag":534,"props":913,"children":914},{},[915,917,922],{"type":532,"value":916},"直接執行 ",{"type":526,"tag":540,"props":918,"children":920},{"className":919},[],[921],{"type":532,"value":561},{"type":532,"value":923},"，會打開終端機互動介面。上方分成四頁：",{"type":526,"tag":925,"props":926,"children":927},"ol",{},[928,939,950,961],{"type":526,"tag":598,"props":929,"children":930},{},[931,937],{"type":526,"tag":540,"props":932,"children":934},{"className":933},[],[935],{"type":532,"value":936},"Processes",{"type":532,"value":938},"：程序清單、CPU、記憶體和啟動鏈。",{"type":526,"tag":598,"props":940,"children":941},{},[942,948],{"type":526,"tag":540,"props":943,"children":945},{"className":944},[],[946],{"type":532,"value":947},"Ports",{"type":532,"value":949},"：目前監聽中的 Port 與擁有它的程序。",{"type":526,"tag":598,"props":951,"children":952},{},[953,959],{"type":526,"tag":540,"props":954,"children":956},{"className":955},[],[957],{"type":532,"value":958},"Containers",{"type":532,"value":960},"：Docker、Podman、Kubernetes 等容器資訊。",{"type":526,"tag":598,"props":962,"children":963},{},[964,970],{"type":526,"tag":540,"props":965,"children":967},{"className":966},[],[968],{"type":532,"value":969},"Locks",{"type":532,"value":971},"：檔案鎖與開啟中的檔案。",{"type":526,"tag":534,"props":973,"children":974},{},[975,977,983],{"type":532,"value":976},"可以用方向鍵移動、Enter 看詳細資料，也能按 ",{"type":526,"tag":540,"props":978,"children":980},{"className":979},[],[981],{"type":532,"value":982},"\u002F",{"type":532,"value":984}," 搜尋。我這台 Mac 當時一次列出五百多個程序，直接滑其實有點多；如果已經知道 Port 或 PID，我還是比較喜歡從精準指令開始。TUI 適合不知道問題在哪裡，想先掃一遍整台機器的時候。",{"type":526,"tag":534,"props":986,"children":987},{},[988],{"type":526,"tag":631,"props":989,"children":992},{"alt":990,"src":991},"witr 程序詳細頁顯示啟動來源、Socket、資源用量與環境變數","\u002Fday_assets\u002Fwitr\u002Fwitr-process-detail.png",[],{"type":526,"tag":534,"props":994,"children":995},{},[996],{"type":532,"value":997},"Unix 系統還能在介面裡對程序送出 Kill、Terminate、Pause、Resume 或調整優先權。這些動作真的會影響程序，不確定用途就先查，不要把 TUI 當工作管理員一路結束。",{"type":526,"tag":527,"props":999,"children":1001},{"id":1000},"幾個我覺得最實用的查法",[1002],{"type":532,"value":1000},{"type":526,"tag":534,"props":1004,"children":1005},{},[1006],{"type":532,"value":1007},"查程序名稱：",{"type":526,"tag":710,"props":1009,"children":1011},{"className":712,"code":1010,"language":714,"meta":508,"style":508},"witr node\n",[1012],{"type":526,"tag":540,"props":1013,"children":1014},{"__ignoreMap":508},[1015],{"type":526,"tag":720,"props":1016,"children":1017},{"class":722,"line":723},[1018,1022],{"type":526,"tag":720,"props":1019,"children":1020},{"style":727},[1021],{"type":532,"value":561},{"type":526,"tag":720,"props":1023,"children":1024},{"style":733},[1025],{"type":532,"value":1026}," node\n",{"type":526,"tag":534,"props":1028,"children":1029},{},[1030],{"type":532,"value":1031},"只看一行啟動鏈：",{"type":526,"tag":710,"props":1033,"children":1035},{"className":712,"code":1034,"language":714,"meta":508,"style":508},"witr --port 5173 --short\n",[1036],{"type":526,"tag":540,"props":1037,"children":1038},{"__ignoreMap":508},[1039],{"type":526,"tag":720,"props":1040,"children":1041},{"class":722,"line":723},[1042,1046,1050,1055],{"type":526,"tag":720,"props":1043,"children":1044},{"style":727},[1045],{"type":532,"value":561},{"type":526,"tag":720,"props":1047,"children":1048},{"style":763},[1049],{"type":532,"value":839},{"type":526,"tag":720,"props":1051,"children":1052},{"style":763},[1053],{"type":532,"value":1054}," 5173",{"type":526,"tag":720,"props":1056,"children":1057},{"style":763},[1058],{"type":532,"value":1059}," --short\n",{"type":526,"tag":534,"props":1061,"children":1062},{},[1063],{"type":532,"value":1064},"用樹狀方式看父子程序：",{"type":526,"tag":710,"props":1066,"children":1068},{"className":712,"code":1067,"language":714,"meta":508,"style":508},"witr --pid 12345 --tree\n",[1069],{"type":526,"tag":540,"props":1070,"children":1071},{"__ignoreMap":508},[1072],{"type":526,"tag":720,"props":1073,"children":1074},{"class":722,"line":723},[1075,1079,1084,1089],{"type":526,"tag":720,"props":1076,"children":1077},{"style":727},[1078],{"type":532,"value":561},{"type":526,"tag":720,"props":1080,"children":1081},{"style":763},[1082],{"type":532,"value":1083}," --pid",{"type":526,"tag":720,"props":1085,"children":1086},{"style":763},[1087],{"type":532,"value":1088}," 12345",{"type":526,"tag":720,"props":1090,"children":1091},{"style":763},[1092],{"type":532,"value":1093}," --tree\n",{"type":526,"tag":534,"props":1095,"children":1096},{},[1097],{"type":532,"value":1098},"需要交給其他程式處理時，可以輸出 JSON：",{"type":526,"tag":710,"props":1100,"children":1102},{"className":712,"code":1101,"language":714,"meta":508,"style":508},"witr --port 5173 --json\n",[1103],{"type":526,"tag":540,"props":1104,"children":1105},{"__ignoreMap":508},[1106],{"type":526,"tag":720,"props":1107,"children":1108},{"class":722,"line":723},[1109,1113,1117,1121],{"type":526,"tag":720,"props":1110,"children":1111},{"style":727},[1112],{"type":532,"value":561},{"type":526,"tag":720,"props":1114,"children":1115},{"style":763},[1116],{"type":532,"value":839},{"type":526,"tag":720,"props":1118,"children":1119},{"style":763},[1120],{"type":532,"value":1054},{"type":526,"tag":720,"props":1122,"children":1123},{"style":763},[1124],{"type":532,"value":1125}," --json\n",{"type":526,"tag":534,"props":1127,"children":1128},{},[1129],{"type":532,"value":1130},"它也能從檔案與容器往回查：",{"type":526,"tag":710,"props":1132,"children":1134},{"className":712,"code":1133,"language":714,"meta":508,"style":508},"witr --file \u002Fpath\u002Fto\u002Flocked-file\nwitr --container redis\n",[1135],{"type":526,"tag":540,"props":1136,"children":1137},{"__ignoreMap":508},[1138,1155],{"type":526,"tag":720,"props":1139,"children":1140},{"class":722,"line":723},[1141,1145,1150],{"type":526,"tag":720,"props":1142,"children":1143},{"style":727},[1144],{"type":532,"value":561},{"type":526,"tag":720,"props":1146,"children":1147},{"style":763},[1148],{"type":532,"value":1149}," --file",{"type":526,"tag":720,"props":1151,"children":1152},{"style":733},[1153],{"type":532,"value":1154}," \u002Fpath\u002Fto\u002Flocked-file\n",{"type":526,"tag":720,"props":1156,"children":1158},{"class":722,"line":1157},2,[1159,1163,1168],{"type":526,"tag":720,"props":1160,"children":1161},{"style":727},[1162],{"type":532,"value":561},{"type":526,"tag":720,"props":1164,"children":1165},{"style":763},[1166],{"type":532,"value":1167}," --container",{"type":526,"tag":720,"props":1169,"children":1170},{"style":733},[1171],{"type":532,"value":1172}," redis\n",{"type":526,"tag":534,"props":1174,"children":1175},{},[1176,1178,1184,1185,1191,1193,1199],{"type":532,"value":1177},"同一個查詢後面還能加上 ",{"type":526,"tag":540,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":532,"value":1183},"--verbose",{"type":532,"value":657},{"type":526,"tag":540,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":532,"value":1190},"--env",{"type":532,"value":1192}," 或 ",{"type":526,"tag":540,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":532,"value":1198},"--warnings",{"type":532,"value":1200},"。平常我不會一開始就把環境變數全印出來，先看一般輸出，缺什麼再加參數，畫面比較不會被資訊塞滿。",{"type":526,"tag":527,"props":1202,"children":1204},{"id":1203},"截圖或貼-log-前先把敏感資訊遮掉",[1205],{"type":532,"value":1206},"截圖或貼 Log 前，先把敏感資訊遮掉",{"type":526,"tag":534,"props":1208,"children":1209},{},[1210],{"type":532,"value":1211},"這次整理素材時，我原本也覺得只是程序清單，應該沒什麼好藏。真的放大檢查才發現，畫面裡有本機帳號、完整磁碟路徑、Git 分支、區網 IP、遠端連線位址和環境變數。某些程序的完整 Command 甚至可能帶著 Token、PIN 或其他啟動參數。",{"type":526,"tag":534,"props":1213,"children":1214},{},[1215],{"type":532,"value":1216},"這次我沒有把整個使用者欄位或詳細面板蓋掉，因為那樣連工具在做什麼都看不到。真正一定要處理的是第一張圖右下角的 PIN 與 Key；影片則只柔焦終端機帳號、工作目錄與 Git 路徑，其他對理解功能有幫助的內容都保留。",{"type":526,"tag":534,"props":1218,"children":1219},{},[1220,1222,1227,1228,1233],{"type":532,"value":1221},"witr 是拿來調查自己電腦的工具，但它輸出的內容不等於適合直接貼到網路。尤其使用 ",{"type":526,"tag":540,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":532,"value":1190},{"type":532,"value":657},{"type":526,"tag":540,"props":1229,"children":1231},{"className":1230},[],[1232],{"type":532,"value":1183},{"type":532,"value":1234},"，或打開 TUI 詳細頁時，公開前最好把整張圖重新看過一次。",{"type":526,"tag":527,"props":1236,"children":1238},{"id":1237},"我會在什麼時候用它",[1239],{"type":532,"value":1240},"我會在什麼時候用它？",{"type":526,"tag":534,"props":1242,"children":1243},{},[1244,1246,1251],{"type":532,"value":1245},"如果只是偶爾查一次 Port，",{"type":526,"tag":540,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":532,"value":670},{"type":532,"value":1252}," 當然還是很快，我不會為了每個 PID 都硬換工具。witr 比較適合我已經找到程序，卻還想知道它是從 Shell、服務、容器還是其他工具啟動的時候。",{"type":526,"tag":534,"props":1254,"children":1255},{},[1256,1258,1264],{"type":532,"value":1257},"下次再看到 ",{"type":526,"tag":540,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":532,"value":1263},"EADDRINUSE",{"type":532,"value":1265},"，我會先跑：",{"type":526,"tag":710,"props":1267,"children":1268},{"className":712,"code":823,"language":714,"meta":508,"style":508},[1269],{"type":526,"tag":540,"props":1270,"children":1271},{"__ignoreMap":508},[1272],{"type":526,"tag":720,"props":1273,"children":1274},{"class":722,"line":723},[1275,1279,1283],{"type":526,"tag":720,"props":1276,"children":1277},{"style":727},[1278],{"type":532,"value":561},{"type":526,"tag":720,"props":1280,"children":1281},{"style":763},[1282],{"type":532,"value":839},{"type":526,"tag":720,"props":1284,"children":1285},{"style":763},[1286],{"type":532,"value":844},{"type":526,"tag":534,"props":1288,"children":1289},{},[1290],{"type":532,"value":1291},"至少不用停在「Node 占用了 Port」這一步，後面的啟動來源也一起有答案。",{"type":526,"tag":1293,"props":1294,"children":1295},"style",{},[1296],{"type":532,"value":1297},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":508,"searchDepth":1157,"depth":1157,"links":1299},[1300,1301,1302,1303,1304,1305,1306,1307],{"id":529,"depth":1157,"text":529},{"id":643,"depth":1157,"text":646},{"id":693,"depth":1157,"text":696},{"id":774,"depth":1157,"text":777},{"id":908,"depth":1157,"text":911},{"id":1000,"depth":1157,"text":1000},{"id":1203,"depth":1157,"text":1206},{"id":1237,"depth":1157,"text":1240},"markdown","content:articles:witr.md","content","articles\u002Fwitr.md","articles\u002Fwitr","md",[1315,1319,1322],{"_path":15,"title":16,"description":17,"date":1316,"category":8,"tags":1317,"score":1318},"2026-08-06",[10,12,13],3,{"_path":50,"title":51,"description":52,"date":1320,"category":8,"tags":1321,"score":1318},"2026-07-28",[10,11,13,54],{"_path":56,"title":57,"description":58,"date":1323,"category":8,"tags":1324,"score":1318},"2026-07-27",[43,10,11,13],[1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417],{"_path":5,"title":6},{"_path":15,"title":16},{"_path":20,"title":21},{"_path":27,"title":28},{"_path":33,"title":34},{"_path":39,"title":40},{"_path":50,"title":51},{"_path":56,"title":57},{"_path":61,"title":62},{"_path":66,"title":67},{"_path":73,"title":74},{"_path":78,"title":79},{"_path":83,"title":84},{"_path":89,"title":90},{"_path":94,"title":95},{"_path":99,"title":100},{"_path":104,"title":105},{"_path":110,"title":111},{"_path":115,"title":116},{"_path":120,"title":121},{"_path":125,"title":126},{"_path":130,"title":131},{"_path":135,"title":136},{"_path":140,"title":141},{"_path":145,"title":146},{"_path":150,"title":151},{"_path":155,"title":156},{"_path":160,"title":161},{"_path":165,"title":166},{"_path":170,"title":171},{"_path":175,"title":176},{"_path":180,"title":181},{"_path":185,"title":186},{"_path":190,"title":191},{"_path":195,"title":196},{"_path":200,"title":201},{"_path":206,"title":207},{"_path":212,"title":213},{"_path":217,"title":218},{"_path":222,"title":223},{"_path":227,"title":228},{"_path":232,"title":233},{"_path":237,"title":238},{"_path":242,"title":243},{"_path":247,"title":248},{"_path":252,"title":253},{"_path":257,"title":258},{"_path":262,"title":263},{"_path":267,"title":268},{"_path":273,"title":274},{"_path":278,"title":279},{"_path":283,"title":284},{"_path":289,"title":290},{"_path":299,"title":300},{"_path":304,"title":305},{"_path":309,"title":310},{"_path":315,"title":316},{"_path":320,"title":321},{"_path":325,"title":326},{"_path":333,"title":334},{"_path":340,"title":341},{"_path":347,"title":348},{"_path":353,"title":354},{"_path":358,"title":359},{"_path":363,"title":364},{"_path":369,"title":370},{"_path":374,"title":375},{"_path":379,"title":380},{"_path":384,"title":385},{"_path":389,"title":390},{"_path":394,"title":395},{"_path":399,"title":400},{"_path":404,"title":405},{"_path":409,"title":410},{"_path":414,"title":415},{"_path":419,"title":420},{"_path":424,"title":425},{"_path":429,"title":430},{"_path":434,"title":435},{"_path":439,"title":440},{"_path":444,"title":445},{"_path":449,"title":450},{"_path":454,"title":455},{"_path":459,"title":460},{"_path":464,"title":465},{"_path":469,"title":470},{"_path":474,"title":475},{"_path":481,"title":482},{"_path":486,"title":487},{"_path":491,"title":492},{"_path":496,"title":497},{"_path":501,"title":502},1786081734516]