// Engineering Notes

LEOSHIANG 的技術筆記

實作紀錄、疑難排解與架構筆記——寫給未來的自己,也寫給正在踩同一個雷的你。

25 篇文章

手機優先的資料庫管理工具 Quero

半夜資料庫出事,人多半不在電腦前。手機開得動瀏覽器,但打得開的工具沒幾個——桌面版的資料庫管理軟體幾乎都假設你坐在自己的電腦前,用的是自己機器上存好的那組帳密。要嘛裝一套用得很委屈的手機 App,要嘛請同事幫忙開 VPN,要嘛乾脆等回到電腦前再處理。 還有一件事更麻煩:那組帳密存在誰的筆電上。工程師一多,正式環境的資料…

Quero .NET Vue PostgreSQL SQL Server MySQL MariaDB Oracle Sybase ASE 自架 資料庫管理 閱讀全文

h3.c 安裝與測試

上次在這台 Mac 上跑 Z-Image,用的是 mlx-swift,整個過程沒碰到 Python,當時就覺得夠乾淨了。後來看到 antirez 的 iris.c,發現還可以更極端:整個推論引擎就是一份 C 程式,Flux 2 和 Z-Image 的權重直接讀,沒有框架。 h3.c 是同一套路數搬到影片上,跑的是 Mi…

h3.c MiniMax-H3 antirez Apple Silicon Metal C 影片生成 閱讀全文

Mac 安裝大易輸入法:用 OpenVanilla 完成下載、安裝與設定

macOS 內建注音、倉頡和速成等中文輸入法,但沒有大易。要在 Mac 上繼續使用熟悉的大易鍵位,可以安裝開源的 OpenVanilla;新版套件已經內建大易,不必另外下載字根表。 這篇從「怎麼打開下載網站」開始,一路做到在選單列切換大易。就算平常很少碰電腦,只要照著畫面逐步操作即可。文中提到的「點一下」是按一次觸控式…

macOS 大易輸入法 OpenVanilla 中文輸入法 閱讀全文

如何讓 MacBook Pro 不要休眠:系統設定與 caffeinate 用法

有時候 MacBook Pro 不能在工作跑到一半睡著,例如下載大檔案、備份、轉檔、編譯專案,或把電腦暫時當成測試伺服器。macOS 可以從系統設定調整,也能用內建的 caffeinate 指令暫時保持喚醒。 先釐清一件事:關閉顯示器和讓 Mac 進入睡眠是兩回事。比較實用的做法通常是讓螢幕照常關閉,但 Mac 在接上…

macOS MacBook Pro 睡眠 caffeinate pmset 閱讀全文

在 Mac 上跑 Z-Image:MLX 原生生圖,順便記幾個踩到的雷

最近在 Mac 上跑通義的文字生圖模型 Z-Image,用的是 Z-Image.swift——一個用原生 Swift 包起來的版本,底層跑 mlx-swift,直接吃 Apple GPU,不用另外裝 Python、PyTorch 或一堆 CUDA 相關套件。 會想試這條路線,理由跟之前在本機跑 LLM 差不多:東西留在…

Z-Image MLX mlx-swift Swift 本機生圖 Apple Silicon 閱讀全文

磁碟空間分析 DiskAnalyzer

硬碟滿了,「關於本機」告訴你用了幾百 GB,但不會告訴你這幾百 GB 躺在哪裡。要嘛買套付費工具,要嘛打開終端機下 du,等它慢慢爬完整棵目錄樹。 DiskAnalyzer 是一套原生 SwiftUI 打造的 macOS 磁碟空間分析工具,掃描完直接用 Sunburst 和 Treemap 畫出來,哪個資料夾佔最多空間…

DiskAnalyzer Swift SwiftUI macOS APFS 閱讀全文

靜態網站產生器 Velo

同一個人維護好幾個靜態部落格,難的通常不是寫文章,是發佈。每個站各自一套建置流程,改一次版面就得重新搞懂一次:輸出目錄在哪、圖片要不要先壓、上次到底是怎麼傳上去的。現成的靜態網站產生器也不好用,要嘛設定檔要學一堆,要嘛想換個版面得先搞懂它那套樣板規則。 Velo 是一套 macOS App,只做一件事:選一個 Mark…

Velo Swift SwiftUI Cloudflare Pages 靜態網站 BLAKE3 閱讀全文

AI 寫程式,誰來把關?SPEX-SDD 方法全紀錄

AI 寫程式,誰來把關?SPEX-SDD 方法全紀錄 SPEX-SDD 是一個安裝在 ~/.claude/skills/ 底下的 Claude skill,用途是幫軟體系統產生一套「可實作、可驗證、也能被機器把關」的技術文件:統一編號的規格骨幹(backbone)、七份正式文件、工程品質關卡(Harness)、AI 可…

閱讀全文

SPEX-SDD 使用指南:各種情境的操作手冊

SPEX-SDD 使用指南:各種情境的操作手冊 適用版本:spex-sdd 最後更新:2026 年 8 月 這份指南怎麼讀 你的狀況 直接跳到 第一次接觸這個方法 〈核心設計〉 手上有既有專案想導入 〈情境 1〉 要開新專案 〈情境 2〉 想知道某個 FAIL 代碼是什麼意思 〈validator 錯誤代碼表〉 只想抄…

閱讀全文

Dashboard 規劃設計指南

Dashboard 規劃設計指南 Dashboard 不是把所有圖表放在同一頁,也不是把報表做得更漂亮。好的 dashboard 應該幫助特定角色在特定情境下快速判斷狀態、定位問題,並採取下一步行動。 先定義 Dashboard 的任務 規劃 dashboard 前,先回答三個問題: 使用者打開這個畫面時,最想知道什麼…

閱讀全文

軟體測試基本觀念與有效測試實作

軟體測試基本觀念與有效測試實作 「測試到底有沒有用」這個問題,答案不在於有沒有寫測試,而在於寫的測試是不是有效。覆蓋率 95% 但全部測在 happy path 上、案例跑 5 分鐘卻抓不到上線的 bug、寫了一堆但下次需求一改就得整批重寫——這些情況,測試都寫了,但沒有用。 軟體測試到底在做什麼 軟體測試常見有 3 …

閱讀全文

終端機系統管理主控台 Sentro

管理一台正式環境的伺服器,日常大概是這樣:SSH 進去,top 看一下 CPU,systemctl status 挑幾個服務確認,df -h 看磁碟,ss -tunap 看連線,docker ps 看容器,再開幾個分頁 tail -f 服務的紀錄檔。哪個服務掉了、哪顆磁碟快滿了,答案分散在七八個指令裡,沒有人會把這些指…

Sentro Rust ratatui TUI Linux macOS systemd launchd 閱讀全文

用 C# 接本機的 Ollama,做一個聽得懂人話的預約系統

講到接 LLM,大家第一個想到的通常是 OpenAI 或 Gemini 的 API,第二個想到的是「所以要用 Python 吧」。 這兩件事其實都不一定。模型可以跑在自己的電腦上,語言也可以是 C#。 在本機跑有幾個很實際的好處:使用者打的句子不會送到別人家的伺服器(做企業內部系統時這點常常是關鍵)、沒有用量帳單、也不…

C# .NET Ollama Llama 3 LLM 提示工程 閱讀全文

只有一個實作,還要不要寫介面?

「只有一個實作,幹嘛寫介面?」這句話我聽過很多次,自己也講過。 平心而論它不是沒道理。YAGNI 講的就是這件事:不要為了想像中的需求先做設計。如果你寫的是一個一次性的小腳本,跑完就丟,那多開一個檔案放介面確實只是增加負擔。 但工作上碰到的多半不是那種東西。維護個幾年的系統,我後來的答案是:還是會寫。而且理由跟「以後可…

軟體設計 介面 相依性注入 單元測試 Java 閱讀全文

獎金規則老是在變,我用 DSL 把它們搬出程式碼

做企業系統最累的不是功能難寫,是規則一直改。 獎金公式、風險評分、簽核條件,這些東西幾乎每季都會動一次。如果它們是寫死在程式裡的 if/else,那每次業務調一個係數,你就得改程式、寫測試、重新編譯、跑一次發版流程。改的內容可能只有一個數字,流程卻要走兩個禮拜。久了 IT 就變成業務推不動事情的原因。 業務規則本來就會…

DSL C# T-SQL 軟體架構 JSON YAML 閱讀全文

Embedding 模型比較

Embedding 是把文字(字、詞、句子)轉成一串數字(向量),語意相近的內容,在向量空間裡的距離也會比較近。這份筆記整理幾個常見的 embedding 模型,從早期的靜態詞向量,到後來能理解上下文的 Transformer 系列。 架構與訓練方式 模型 架構 訓練方式 上下文理解 Word2Vec 淺層神經網路(C…

Embedding NLP Word2Vec Transformer BERT GPT 閱讀全文

RAG 怎麼切 Chunk:大小、重疊、兩種切法

把一整篇文件直接丟給 embedding 模型通常行不通:模型能吃的長度有限(早期小模型甚至只有 512 tokens),就算硬塞得下,效果也差——問題如果只跟文件裡一小段有關,卻要模型把整篇的意思壓成一個向量,關鍵細節很容易被稀釋掉。 做法是先把長文字切成一小段一小段,每一段叫一個 chunk,各自轉成向量存起來。使…

RAG Embedding Chunking 向量搜尋 KBQA 閱讀全文

白箱測試

[TOC] 白箱測試 白箱測試看得到程式碼內部結構,設計案例的依據不是輸入輸出,是「程式碼有沒有被跑到」。跑到的程度分成好幾個層級,由鬆到嚴依序是語句、分支、條件、路徑,中間還有判斷/條件涵蓋率和 MC/DC 這兩個進階變體。層級越嚴,案例數通常也跟著變多,這篇按照嚴格程度一層一層往上疊。 覆蓋率的迷思 先看一個容易被…

白箱測試 覆蓋率 分支覆蓋率 條件覆蓋率 路徑覆蓋率 MC/DC 閱讀全文

軟體測試的設計方法

「案例要怎麼設計」是寫測試時最常卡住的地方:全部的輸入組合測不完,隨便挑幾個又怕漏掉真正會出包的情況。等價類劃分、邊界值、決策表這幾個技巧,在〈軟體測試基本觀念〉已經整理過,這篇接著講另外兩組常用的設計方法:白箱測試的覆蓋率技巧,還有黑箱測試的狀態轉換測試法。 白箱測試:用覆蓋率設計案例 先看一個容易被覆蓋率數字誤導的…

白箱測試 黑箱測試 覆蓋率 狀態轉換測試 單元測試 閱讀全文

黑箱測試

[TOC] 黑箱測試 黑箱測試不看程式碼內部,只看「輸入什麼、輸出什麼」來設計案例。常用的技巧有好幾種,適用的情境不太一樣:等價類劃分和邊界值處理單一欄位的合法範圍,決策表和決策樹處理多個欄位互相影響的規則,狀態轉換測試處理跟操作順序有關的行為,正交法處理參數一多、組合爆炸的情況。 等價類劃分與邊界值 把「行為相同的輸…

黑箱測試 決策表 決策樹 正交法 狀態轉換測試 閱讀全文

Git 實戰系列:AI 審查 PR

Sprint 收尾那幾天,PR 排隊排到五、六個,每個都要在開會前看完。PR #123 改了六個檔案、380 行,20 分鐘後要開會,只能快速掃過去。那段限制檢查的邏輯看起來沒問題,留了 LGTM。上線兩週後才發現,外部 API 回呼還沒結束前,判斷式就先放行了——那個 race condition 藏在第三個檔案,掃…

Git PR AI 協作 Claude Code Code Review 閱讀全文

Git 實戰系列:PR 審查環境

排到一個 PR 要 review,改動是一段限制檢查的邏輯。網頁上的 diff 看起來沒問題,三行判斷式,邏輯很直覺。但這段判斷牽涉到一個外部 API 的非同步呼叫,光看文字很難確定判斷式擺的位置對不對——會不會在回呼還沒結束前就先放行了。 想在本機跑起來測,才發現 Node 版本跟手上的不一樣、.env 沒有、資料庫…

Git PR GitHub CLI Code Review SourceTree 閱讀全文

Git 實戰系列:Worktree

退款功能還在 feature/order-refund 上開發到一半,畫面開著 dev server,資料庫接的是測試用的假資料,還有一堆檔案沒 commit。這時候 PM 敲你:main 上結帳頁的稅額算錯了,要你馬上看一下。 以前遇到這種事,標準流程是 git stash,切到 main,看完、修完,再切回來,gi…

Git Worktree 版本控制 AI 協作 閱讀全文

Git 實戰系列:Rebase

我們團隊有個習慣:功能分支開發到一半,每天早上第一件事是把 main merge 回自己的分支,避免落後太多、之後衝突太痛苦。立意是好的。 但這個習慣用了幾個月之後,佈版前看歷史紀錄變成一場災難。git log --graph 拉出來的圖,混了一堆「Merge branch ‘main’ into feature/xx…

Git Rebase SourceTree 版本控制 AI 協作 閱讀全文

SQL Server 2012 Standard 資料庫手動容錯備援

主機資訊 請先準備三台主機,來源和鏡像主機需使用 Windows 2012,監控主機使用 Windows 10/11 即可。 名稱 作業系統 資料庫 IP 主機名稱 來源主機 Windows 2012 Standard R2 SQL Server 2012 Standard 192.168.xxx.xxx SQLA 鏡…

閱讀全文