The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 ASP.NET Core 9 加入 Swagger UI 介面

微軟從 ASP.NET Core 9 開始正式支援 OpenAPI 規格,並推出 Microsoft.AspNetCore.OpenApi NuGet 套件,在建立 ASP.NET Core Web API 專案時,預設就會加入可以產生 OpenAI 規格的端點。不過,對許多開發人員來說,常用的 Swagger UI 介面卻不見了。今天這篇文章我就來說說怎樣把 Swagger UI 加回專案中。

... 繼續閱讀 ...

如何使用 Google 的 OAuth 2.0 與 Gmail 的 REST API 發信

前陣子在企業授課 OAuth 2.0 的時候,我原本想現場示範走 Google 的 OAuth 2.0 流程,並且在取得 Access Token 之後怎樣透過原始的 REST API 發信。原本以為這是個很簡單的任務,誰知道膝蓋中了一箭,拿 Token 都很簡單,唯讀「發信」的困難度超出了我的想像,原因無他,就是 Google 的參考文件實在是寫太爛了。這篇文章我打算跟大家說個官方文件沒寫的資訊,教大家怎樣順利透過 Gmail API 發出郵件。

... 繼續閱讀 ...

《先整理一下?個人層面的軟體設計考量》讀後心得分享

最近看了一本書 Tidy First?: A Personal Exercise in Empirical Software Design,作者是令人景仰的 Kent Beck 大神,他是一位擁有 Wikipedia 頁面的人物,也是美國著名的軟體工程師和作家,在軟體工程領域有著深遠的影響力。這本書整理了 32 個「整理程式碼」的心法,他並不是一本強調 Clean Code 或 Refactoring 的技巧,而是一些更細微的、個人層面的軟體設計考量,這些技巧都是作者在多年軟體開發經驗中的心得,也是他在日常開發中的一些習慣,我真的越看越亢奮,因為很多內容其實也跟我二十多年的開發經驗相吻合,有種為什麼不早點看到這本書的感覺,我特別整理了這本書的讀後心得,希望大家可以從中獲益。這本書在台灣已有翻譯書,名為 先整理一下?|個人層面的軟體設計考量,大家有興趣也可以買來看看。

... 繼續閱讀 ...

ASP.NET Core MVC 的 Razor 語法對於 @ 符號的編碼陷阱

前幾天我們公司有個網站準備上一個新版,工程師發出 PR (Pull request) 之後請我進行程式碼審核(Code Review),結果我發現他本次的修正項目不太合理,他改了一個前端套件的資料夾名稱。我當下覺得不妙,一個已經測試數月,也準備上線的網站,怎麼還會在最後一刻修改資料夾名稱呢?我反問工程師為什麼要改這些地方時,卻得到一個我不是很滿意的回答,因此退件請他重改。這不是一個什麼嚴重的技術問題,改改資料夾名稱就正常了,但是卻又激起我追根究底的柯南精神,真相只有一個,我要找出來!🕵️‍♂️

... 繼續閱讀 ...

理解 Symbolic Link、Hard Link 與 Directory Junction 的差異之處

我經常利用不同的連結(Link)來管理檔案和目錄,以確保系統的設定隨時可以透過雲端硬碟同步與備份,相當便利。在 Windows 系統中有三種不同的連結方式,分別是 符號連結(Symbolic Link)、硬連結(Hard Link)和目錄聯接(Directory Junction)。這三種連結方式各有其特性用途,所以我打算針對這三種連結方式進行比較,幫助大家更好地理解它們之間的差異。

... 繼續閱讀 ...

如何讓 Python 程式正確的處理 UTF-8 字元編碼

最近在嘗試微軟最近推出的 MarkItDown 工具,它使用 Python 開發,可用於將各種文件檔案轉換為 Markdown 格式,支援的文件格式也非常多,這在 AI 盛行的時代是非常有用的。因為文件換為 Markdown 格式之後,可以讓大語言模型進行分析。不過我在 PowerShell 底下使用的時候,沒有意外的又出意外了,因為它無法正確的處理 UTF-8 字元的輸入輸出,所以只要遇到中文就掛掉,真的很煩,這種問題都不知道處理幾次了。這篇文章我打算來介紹如何讓 Python 程式正確的處理 UTF-8 字元。

... 繼續閱讀 ...

GitHub Copilot 錦囊妙計:定義 Git 提交訊息產生的自訂指令

在 VS Code 的「原始碼控制」窗格中,不僅僅可以用來做 Git 版控,你還能利用 GitHub Copilot 來產生即將 Commit 的程式碼變更的提交訊息,透過 AI 幫你自動撰寫 Git 的 Log 內容。事實上,在新版的 GitHub Copilot 中,你可以透過定義「自訂指令」(Custom instructions) 來「提示」GitHub Copilot 要如何產生 Log 訊息內容,你可以自己定義擁有團隊共識或大家希望的 Commit Log 風格,例如可以套用 Conventional Commits 風格等等。這篇文章我就來說說怎麼做!👍

... 繼續閱讀 ...

如何變更 SQL Server 的系統資料庫定序以避免暫存資料庫的定序衝突

我們上周公司啟動了一個新專案,我們工程師拿到客戶的資料庫之後,發現客戶提供的預存程序無法順利執行,發生了資料庫定序 (collation) 的衝突問題。我們負責的工程師由於是第一次遇到這個狀況,所以鬼打牆了一段時間,因為我上周都在備課,所以我跟他講:「你直接移除重裝 SQL Server 並明確指定定序會比較快,我現在沒時間跟你講太多技術細節。」今天這篇文章我打算來說說這個問題背後的技術細節。

... 繼續閱讀 ...

如何在 Windows 作業系統打造 Rust 開發環境

我最近的課程因為都開始改用 Discord 來當成學員之間的互動介面,為了實現自動審核加入課程的學員,我們用 Rust 撰寫了一支程式來處理這個審核作業,並將程式跑在容器中,部署到 Azure App Service 上面執行。效能好就不用說了,主要是啟動速度快,記憶體使用量也很低,但唯一的缺點就是「可讀性」真的很差,主要是一個相對陌生的程式語言,但我今天在改功能的時候,用 GitHub Copilot 輔助我瞭解程式語法與結構,也用它來幫我完成一些任務,想不到非常順利。今天這篇文章,我打算來介紹如何在 Windows 作業系統上打造 Rust 開發環境,並透過 Visual Studio Code 來開發 Rust 程式。

... 繼續閱讀 ...