2026/10/23

在 AI 的魔法時代創造需求工具

markdown ### 前言 相信有許多身為工程師的大家在這週過得非常的驚心動魄,對於身為主要開發網站的工程師我本人,這週也是疲於更新補漏洞。 在 AI 時代,就要用善用 AI 魔法來打造需求工具。

2026/03/09

用 GitHub Copilot 程式開發小試身手心得

### 前言 透過 Coding Agent 完全不動手寫 Code 來開發,最初都會卡在起手式,不知道從何下手。 剛好前陣子手邊有一個小專案可以拿來試試,就用它來分享我的漸進開發心得! ### 開發環境 - Windows 10 - VS Code + GitHub Copilot Chat - .NET 10 目標是建立一個 .NET 的 Console App,讀取 Excel 資料,依資料擷取資訊,再輸出成 Excel 結果。 ### 第一階段: 正常開發模式 整個 App 是照著我原本的開發流程來走,還沒完全讓 Coding Agent 介入的開發模式。 因為完整的功能需求及流程是手刻完成,每行程式都是有 review 過的,在專案中會使用到的套件也都很明確。 我把這個手刻的版本當成我要跟 AI 協作過程的成果依據來開始作試驗。 ### 第二階段: Vibe Coding 有了一個完整的成果,也有明確的規則,直接用 Agent 模式,打一大串提示詞,包含技術規格及輸入輸出格式,就讓它自由發揮。 第一版出來的結果大致上有想要的結果,但是因為初次嚐試,沒讓它幫我寫測試,所以當發現有某些欄位沒有預期的值時,會需要這裡修那裡修,反覆下提示詞做修改。 我覺得如果是很小的專案,像是一頁式網頁或小遊戲,是可以讓 Agent 一次做足想要的功能。 ### 第三階段: SDD 開發模式 大家也知道 Vibe Coding 想要讓專案一次到位是有困難的,然後也不免會改A壞B的狀況發生。 所以 SDD(Specification-Driven Development,規格驅動開發)的出現,把開發流程變得可控一點。 說實在,要全放手讓 AI 完全介入到開發這件事,我本身沒有一開始就追,所以呢,讓子彈飛一下也是有好處的,就在這一兩月的時間裡,不管是開發模式或是 AI 模型,都大幅地進步,也造就許多前人先踩過很多雷再帶出新方法。 至於 SDD,我就試著用 GitHub Spec Kit 以及 OpenSpec 做相同的 app 開發,試試哪一種更適合我的習慣及可接受的開發流程。 先試著用 Spec-Kit 開發,把 Vibe Coding 用的提示詞,再經過修正後,讓它建立規格,校正我要的規格後,再做執行開發。效果的確也有達到成果,只是我本身會卡在若要加功能,起手式好像有點無所適從。 接下來再試 OpenSpec 做相同的事,先提案產生規格,執行改變,到確認歸檔。有新功能,再重覆做 propose, apply, 最後 archive。我好像找到了目前適合我與 AI 協作的開發模式。 ### 小結心得 透過不同的方法,即便提示詞大同小異,使用不同的模型也會幫你建出不同的程式碼,初次嚐試 Coding Agent 也實在是驚豔。 AI 掘起的現今,不得不與 AI 同行,要怎麼協作是很大的功課。開發流程的改變,不得不說真的也有影響,隨著各大廠推陳出新的模型,要怎麼運用愈來愈聰明的模型來幫助自己,需要自己動手動腦下去找答案。 我的嚐試方式就是以上的三個階段,先從自己熟悉的開始,然後再用不同的方法,來試著達到相同的成果。未來也許做法又會有所改變,也只能跟著改變,那就靜觀其變吧!

2026/03/01

[Copilot] 近期驚呼有感之 AI 時代一起協作程式開發

markdown 2026 年也才剛過兩個月,近期與 AI 的協作開發有很大的改變。 去年此時,還只是跟 AI 聊聊天,生成一些需要的程式片斷,或者在 IDE 讓 AI 做程式補全。 去年底開始到今年初,各家 AI 推陳出新,快到讓人有種追著跑的感覺。 各式各樣的 AI 工具接連推出,現在程式開發者或多或少都有用過 Claude Code、OpenAI Codex 和 GitHub Copilot 其中之一的 AI 工具吧?! 我個人本身都是用 GitHub Copilot 來協作開發,去年主要都以程式補全為主,而今年開始接觸試著 Vibe Coding 到 SDD 開發,有感 AI 發展的神速。 也許去年沒有緊追 AI 也不算壞事,大家都在找方法,找與 AI 更好的協作方式。 而今年開始,似乎摸索出與 AI 有著更好的協作雛形,不論是不懂程式的小白或是懂程式的工程師。
上個月用 GitHub Copilt 協作做了兩個小工具,有興趣的可以看看,小工具完全開源,坐落在輕工具小鎮:Winnie @ Tiny Tool Town 還有一個我很喜歡玩的小遊戲 Sudoku,瀏覽器打開就可以玩。 以前要是開發這個程式,至少也要耗上好幾個小時甚至幾天研究並開發。誰能想像現在只要給文字描述就能請 AI 在幾分鐘內幫忙完成至少九成以上功能。 玩完一盤的時間,還比開發它的時間還長,你說誇不誇張?
Play Game: Sudoku 先聊到這裡,之後再來分享一些協作開發心得!

2025/07/09

[Windows] 系統更新後,無法正常使用倉頡輸入法

markdown 今日 Windows 11 系統更新 (KB5062553) 發生無法正常使用倉頡輸入法 解法: 1. 移掉更新版本 KB5062553 2. 變更輸入法相容性,開啟 使用舊版的微軟倉頡 因為是在更新系統後才發生的,重開機後立刻遇到無法打字,直覺就是更新造成的問題。 結果我不孤單,上網查了一下,還是有蠻多人跟我遇到同樣症狀,我採用解法 2,改相容性後就正常了
### 設定路徑 設定路徑太複雜,無法一步到位,以下是詳細的設定路徑: 1. 設定 / 時間與語言 / 語言與地區 (或是在工具列右下角的 "倉" 點開選單,選擇 "更多鍵盤設定") 2. 選擇 "繁體中文(台灣)" (點右方 ... 開啟其他選項,選擇 "語言選項") 3. 選擇 "微軟倉頡" (點右方 ... 開啟其他選項,選擇 "鍵盤選項") 4. 移到最下方 "相容性" / 使用舊版的微軟倉頡 點選 "開啟" 即可

2025/04/06

[EF Core] 解決 Decimal 類型出現 No store type was specified for the decimal property 警告訊息

markdown ### 版本 - .NET 8 - EF Core 9 ### 問題 在 EF Core 使用 decimal 類型的屬性時,一直跳出 No store type was specified for the decimal property 的警告訊息 ### 解決方法 在屬性上方加上 [Precision(18, 2)] ```cs [Precision(18, 2)] public decimal Price { get; set; } ``` > 需要 .NET EF Core 6 以上的版本才支援 ### 參考 - MS Learn - PrecisionAttribute Class - Decimal precision and scale in EF Code First

2025/02/21

[ASP.NET Core] 解決如何從 Docker Container 連至本機的 SQL Server

markdown ### 問題 在 Visual Studio 開發 ASP.NET Core 網站以 IIS Express 啟動時可正確連線 SQL Server 的資料庫。 近期改以 Docker 來啟動網站時,出現以下錯誤訊息:
SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)

2025/01/30

[AI] 如何在本地機器使用 DeepSeek-R1 模型

markdown ### 前言 AI 話題這幾年一直話題不斷,而前一陣子 DeepSeek 的聲量突然上升了不少,好像不研究一下不行。 今天就花了些時間,研究如何在本地執行 DeepSeek-R1 模型。 ### 安裝步驟 1. 安裝 Ollama 2. 使用 DeepSeek-R1 模型 3. 執行 Open-WebUI

2025/01/26

[ASP.NET Core] 如何在 ASP.NET Core 專案中的 Dockerfile 設定預設時區

markdown ### 問題 在開發 ASP.NET Core 專案時,Docker Image 預設的時區是 UTC,可以把時區預設定在 Asia/Taipei 嗎? ### 環境 - Windows 11 - Visual Studio 2022 (v17.12.4) - ASP.NET Core (.NET 8) ### 解決方法 在 Dockerfile 的 base 上加一段 `ENV TZ=Asia/Taipei` (有試過加在 final 上,但是在 Visual Studio 開發時並不會正確載入,發佈到 Azure Web App for Containers 確認是有正確載入時區的) 而且 Image 要選 `dotnet/aspnet:8.0` 不要選 `dotnet/aspnet:8.0-jammy-chiseled` (不能因為佔空間才選它,它是不包含 tzdata 套件的) ``` FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER app WORKDIR /app ENV TZ=Asia/Taipei # 加 TZ 這一個變數 EXPOSE 8080 EXPOSE 8081 ... ``` 若是不想要變更 Dockerfile 的設定,在 Visual Studio 開發,可以修改 `launchSettings.json` 檔案 在 Dockerfile 的 environmentVariables 加上 `TZ` 的參數 執行 docker run 的命令會帶入 TZ 的環境變數值

2025/01/24

[Azure] ASP.NET Core 專案部署到 Web App for Containers 問題除錯心得

markdown ### 前言 因為新專案要求要用 Docker,本地開發端的問題通常不大,開專案也都有 Template,往往都是實際要部署上線時會遇到一些狀況。 趁著記憶猶新,整理一下部署心得 ### 開發環境 - Windows 11 - Docker Desktop v4.37.1 - Visual Studio 2022 (v17.11.x -- 原版本忘了,因部署 Bug 問題,後來升級到 v17.12.4) - ASP.NET Core Web App (Model-View-Controller) 專案 - .NET 8.0 ### 選擇部署到 Azure 的服務 將專案部署到 Azure 上,我選擇的服務如下: - Azure Container Registry (ACR) - Azure App Service (Web App for Containers) - Azure SQL Database - Azure Storage

2025/01/23

[ASP.NET Core] 解決 ASP.NET Core 在 Linux Container 出現無法載入 libSkiaSharp 相依性問題

markdown ### 前言 一直以來開發的 ASP.NET Core 專案都是在 Windows 環境執行。最近才開始接觸開發 ASP.NET Core 專案執行於 Docker Container 的開發環境,馬上就遇到處理圖片的問題。 在 Windows 的環境下處理圖片會用到 `System.Drawing.Common`,但在 Linux 環境下是不支援的。所以在 Linux 下的圖片處理改採用 `SkiaSharp` 的套件。 SkiaSharp 這個套件在 Windows 及 Linux 都可以用,在 Windows 的開發環境已有測試套過可以正常運作,沒想到在 Linux 環境下還是噴錯了。 ### 環境 - Docker Container (預設 ASP.NET Core 專案用的 base 我改用 `aspnet:8.0-jammy-chiseled` 可減少 image size) - .NET 8.0 - NuGet 安裝套件: SkiaSharp 版本 3.116.1 ### 問題 而在使用 SkiaSharp 處理圖片的過程中出現以下錯誤訊息: ``` An unhandled exception occurred while processing the request. DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. ``` ### 解決方式 需要再安裝 `SkiaSharp.NativeAssets.Linux.NoDependencies` 套件 特此記錄一下,供未來翻查用

2025/01/10

[Docker] 解決 permission denied 的問題

markdown ### 問題 在 Ubuntu VM 安裝 Docker 後執行 `docker info` 遇到 permission denied 的問題 錯誤訊息: ``` ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied errors pretty printing info ``` ### 解決方法 參考連結: [https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue](https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue) 指令步驟: 1. 建立 docker 群組 (若不存在的話) 2. 加入自己的帳號至 docker 群組 3. 以群組 docker 的身份登入 (無需登出再登入) ``` sudo groupadd docker sudo usermod -aG docker $USER newgrp docker ```

2024/10/24

[ASP.NET MVC] 解決在 WebAPI 讀取不到 Session 值的問題

markdown ### 環境 - ASP.NET MVC 5 - .NET Framework 4.7.2+ ### 問題 原本有個設定值以 Cookie 為存取來源, 但因應安全理由改寫成 Session 來存取, 卻在 WebAPI 存取時發生讀取不到 Session 的內容。 在 ASP.NET Core MVC 反而簡單, 只要 `services.AddSession()` 跟 `app.UseSession()` 即搞定。 目前還是有許多不是 .NET Core 的專案,記錄一下以供未來翻查用。 ### 解決方法 修改 `Global.asax.cs` 檔案 ```cs protected void Application_PostAuthorizeRequest() { // WebApi SessionState bool isWebApiRequest = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith("~/api"); if (isWebApiRequest) HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); } ``` ### 參考資料 - [Accessing Session Using ASP.NET Web API](https://stackoverflow.com/questions/9594229/accessing-session-using-asp-net-web-api)

2024/06/18

[C#][WebAPI] Json.NET / System.Text.Json 序列化物件中忽略 null 值的屬性

markdown 近期遊走在 ASP.NET MVC 5 / Web API 2 以及 ASP.NET Core MVC (.NET) 的專案中 對於由 API 讀取進來的物件在 .NET Framework 與 .NET 下處理的方式不同, 需要記錄一下以便日後翻查

場景需求

使用場景是把接收進來的物件內容轉換做一個清洗,只要從 Web API 接進來的物件屬性值為 null 的都不保留 例如: 有一個 Log 物件如下 ```C# var log = new Log { Timestamp = "2024-06-16T09:22:01.5120098Z", Level = "Information", Message = "This is test message", Exception = null }; ``` 那麼經過清洗過後的字串內容就不會包含 Exception 空值的屬性 ```Json { "Timestamp":"2024-06-16T09:22:01.5120098Z", "Level":"Information", "Message":"This is test message" } ``` 以下即是在 ASP.NET MVC 5 及 ASP.NET Core 不同環境的處理方式

2024/03/31

[.NET] 如何在 ASP.NET Core 的專案整合 Vite 開發

markdown ### 前言 之前大多使用 Laravel 搭配 Vite 來做前端資源整合開發,由於 Laravel 生態系非常完整,也不太需要多做太多設定即可整合完成。 近期在 ASP.NET Core MVC 的專案使用 Vite 開發前端資源檔案,使用上卻不是那麼上手。尤其是在開發時期載入檔案的部分,在 Laravel 用 @vite 卻可輕易完成,便尋尋覓覓找到相近的整合套件。

2024/03/16

[Vite] 前端開發模擬 API 的好物 Mock Service Worker (MSW)

markdown ### 前言 網站開發階段,常常會遇到前端開發時需要模擬呼叫 API 的情境。 用 json-server 來起一個服務是方便測試,但是跟網站是分開的 server,可能會因為忘記把服務開啟而呼叫失敗。 在不用後端介入的情境下,前端用 Vite 整合 Mock Service Worker (MSW) 模擬客製回應是個不錯的選擇。

2024/02/10

[Visual Studio 2022] v17.8 新功能 - 字串搜尋取代時保留原始大小寫格式

markdown ### 前言 在過去要搜尋文字取代時,不同的大小寫可能要分批做幾次取代,以保留原始的英文字母大小寫。 在 VS2022 v17.8 的新功能就可以一次辦到囉!多省做幾次取代步驟的時間。 ### 環境 - Visual Studio 2022 v17.8.6 ### 實作 原始的文字內容如下
用快速鍵 Ctrl+H 做取代動作,點選 AB 的按鈕做 Case 保留
第一組: 只取代 demo
第二組: 取代 demohttp
是不是很方便呀?

2024/02/09

[RESTful API] 如何在 Visual Studio 2022 及 VS Code 使用 .http 檔案文件化測試 API 執行結果

markdown ### 前言 通常在測試 API 的工具中,Postman 或 Insomnia 都是很方便的 API 測試圖形介面工具。 只是各工具有各自的保留文件格式,若能把測試 API 的資料文件化並做版控,又能夠減少散落在各處的翻查不易的問題。 因為 Visual Studio 2022 已支援能夠在 IDE 開啟 .http 文件,並直接可做測試看結果,而且功能齊全,文字檔案又能做版控。 但筆者不是只有 .NET 的專案,還有其他程式語言的專案,也會使用 Visual Studio Code 來撰寫,所以若能讓 .http 文件能跨專案跨工具來執行並管理就更棒了。 在本文中分別介紹在 Visual Studio 2022 及 Visual Studio Code 如何使用 .http 來執行測試 RESTful API。

[WSL] 如何在 Windows 11 安裝 WSL

markdown 趁著換新電腦,安裝主機開發環境,記錄一下安裝 WSL 的步驟 (Windows 11 之後的預設 WSL 版本已為 WSL 2) ### 準備 目標的作業系統為 Windows 11 先確認至 控制台 > 程式和功能 > 開啟或關閉 Windows 功能

勾選 "Windows 子系統 Linux 版" 以及 "虛擬機器平台",確定後並重新開機


2023/09/16

如何在 Windows 安裝及格式化新磁碟機

markdown 久違的硬體升級,終於把六年的老機給換新機,手動加了一條 2TB 的 SSD。記錄安裝及格式化新磁碟機的步驟。 ### 磁碟管理 搜尋 "建立及格式化硬碟及磁碟分割" 1. 在 磁碟管理 介面會看到 "不明 未初始化" 的磁碟,這就是準備要進行配置的磁碟

2023/05/20

[EFCore] 執行 Update-Database Migration 時遇到連線資料庫發生憑證錯誤

markdown ### 開發環境 - Visual Studio 2022 v17.6 - ASP.NET Core MVC (.NET 6) - Entity Framework Core 7.x ### 問題 在執行 Update-Database 的 Migration 指令時出現資料庫憑證錯誤的訊息,使得更新資料庫失敗。 錯誤訊息如下: ``` A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 此憑證鏈結是由不受信任的授權單位發出的。) ``` 在本機端開發第一次遇到連線字串需要憑證的問題,過往是連遠端資料庫才會有憑證要求,特此記錄一下。 ### 解決方法 一種是在連線字串後加上 `Encrypt=False;` 不採用加密連線 另一種方式是主動信任 SQL Server 的憑證 `TrustServerCertificate=True;` 在本機開發階段連線不加密或是主動信任憑證是還好,在生產主機上連線就依正常加密及正確的憑證吧! ### 參考資料 - [使用 Microsoft.Data.SqlClient 連線資料庫發生憑證錯誤](https://blog.poychang.net/the-certificate-chain-was-issued-by-an-authority-that-is-not-trusted/) - [MS Docs - Release notes for Microsoft.Data.SqlClient 4.0](https://docs.microsoft.com/en-us/sql/connect/ado-net/introduction-microsoft-data-sqlclient-namespace?view=sql-server-ver15#breaking-changes-in-40?WT.mc_id=DT-MVP-5002629)