發表文章

試用AI工具產生一篇Blog

前言 影片太長,試著用AI工具產生Blog文章,加速學習 內容來源: .NET Conf 2025 Welcome to .NET 10 & Visual Studio 2026! 工具 這裡簡述一下使用的AI工具 Google NotebookLm : 將Youte的內容,產生報告。 grok / chatGPT: 將報告請它將此篇內容轉成繁體中文,並以部落格的風格撰寫 歡迎來到 .NET 10 & Visual Studio 2026 1. 效能大躍進,簡直是「撿到錢」的感覺 升級新版 .NET 總有點效能小升級,但 .NET 10 這次玩真的——效能提升大到讓人懷疑人生,重點是,你可能連一行碼都不用改!Scott Hanselman 在台上秀了 TechEmpower Fortunes 基準測試的內部數據:比起 .NET 8,.NET 10 的記憶體用量狂砍 93%,每秒請求量還多出 15%。 這可不是運氣好,這是 Microsoft 十年來在運行時、JIT 編譯器和垃圾回收器上層層疊加的投資成果。Scott 說得一針見血:「升級 .NET 10 不是為了新功能,這是個效能風落財,讓你對託管運行時的期待徹底重定義。」 想想看,你的舊專案跑起來更快、更省資源,誰不愛?這次升級,絕對是零成本的爽快體驗。 2. 一個 .cs 檔案,就能搞定整個 C# 應用?太狂了! 想當年,寫個簡單的 C# 程式還得先建 csproj 專案檔,現在?拜拜傳統!.NET 10 推出「基於檔案的應用」(file-based apps),Damian 在 demo 裡秀了:就一個 .cs 檔,從頭到尾的完整應用,跑起來超簡單——直接 net run hello.cs 就開幹。 這招直接拉低新手門檻,讓 C# 變得像 Python 或 Go 一樣適合腳本和小工具。超讚的是,它不會綁死你:當你的 app 長大變複雜時,一個 net project convert 指令,就能無痛轉成標準專案結構,繼續深耕。 對初學者來說,這是「一鍵入門」的福音;對老鳥呢?終於能輕鬆 hack 小工具,不用搞一堆 boilerplate 了。C# 從此不只企業級,還能街頭巷尾玩! 3. Aspire 脫離 .NET,變身多語言神器 這公告最出人意料:原來叫「.NET Aspire」的東西,直接改...

git 挑選特定commit合併

圖片
  前言 目前的專案,git分支,切分為如下: master : 由release併入,發行到PRD release : 由develop併入,發行到QAS develop : 由個別開發者併入。 問題來了! 這兩天併入到release的變更,只想挑最上方那一筆紅框併入到master,其他的綠框不可以併入。如下圖所示: 解決方式 使用cherry-pick 挑選某一筆的commit併入。 使用方式 切換到master 或master checkout另一分支hoftix(本文使用此方式,可以避免操作錯誤,刪除就好) 。 取得該筆的commit ID 8碼。 在hotfix分支執行命令 git cherry-pick e957cc4e 4 . 完成畫面,只有Finished那筆commit併入 最後確認無誤的話,就可以從hotfix併入master 總結 cherry-pick 是一個很好的工具,可以幫助你精確地應用某些 commit,但在使用時需要小心,它不適合複雜的歷史操作,特別是處理依賴關係和衝突的情況。

使用DevTunnel公開本機URL

圖片
  Foreword 使用微軟提供的Dev Tunnels取代之前使用NGROK的方式,將本機開發的URL公開在外部網路。 此方式為方便與外部服務整合測試,例如:LineAPI Dev Tunnels 有2種使用方式,以下會介紹何使用 1. Visual Studio 2022 .NetCore程式 內建就有Dev Tunnels功能,第一次使用先建立tunnels 選擇建立好的通道,執行網頁即會出現外部URL 2. 非.Net Core程式 (.Net Framework) 安裝 dev tunnels 程式 裝完後 重開機 ,環境變數位罝才會生效 winget install Microsoft.devtunnel 登入 第一次使用,需要登入Github或微軟帳號 devtunnel user login 執行本機程式,http port 50893 ps: 不能使用https 執行devtunnel 將本機程式公開,並允許匿使用者可以瀏覽 devtunnel host -p 50893 --allow-anonymous 執行後,取得公開的URL,大功告成 進入後按Continue Reference Dev Tunnels Visual Studio in 10 Minutes or Less 董大偉使用DevTunnel取代NGROK

Cloudflare root to www

圖片
前言 工作有一需求,需要將root 導向www,例如: kimx.info to www.kimx.info 。此方式個人知道的解決方式,有2種: 1. 在IIS設定Rewrite。 2. 在DNS 服務商設定 (本文針對Cloudflare)。ps: 要看是否有支援。 使用方式 1. 如下圖,設定root 並啟用代理,此為給Cloudflare的Page Rule轉發用。 2.設定Page Rule 將root 轉到www 總結 這樣的設定比去IIS設定方便許多,省下Rewrite及Bining等設定,也比較好管理。 相關參考 https://developers.cloudflare.com/support/page-rules/configuring-url-forwarding-or-redirects-with-page-rules/

發行前取得分支併入目前程式

圖片
前言 目前開發的專案,發行工作大部分是由CI來處理,但在某些狀況下,為求快速,會直接在Visual Studio上,發行到測試主機上。天下武功、唯快不破......,但"快"容易打破碗。 今天同事A,在本機發行時,並未取得遠端開發分支來合併,導致同事B在測試時,發生鬼打牆事件。為避免之後還有此情況,在發行檔案內,加了一個發行前,先取得分支來合併的設定。 使用方式 打開.pubxml 增加如下 <PropertyGroup> .......以上略 <PipelineDependsOn> CustomActionsBeforeBuild; $(PipelineDependsOn); </PipelineDependsOn> </PropertyGroup> <Target Name="CustomActionsBeforeBuild" BeforeTargets="BeforeBuild"> <Message Text="********************************** BeforeBuild-發行前 取得遠端Main,合併到目前分支 ***********************************" Importance="high"/> <Exec Command="git merge origin/main"/> </Target> 測試 發行程式,在"輸出"視窗,可以看到在建置時,觸發了commad的訊息。 總結 只要是人為的操作,難免會有操作錯誤的行為,所以可以透過設定自動化來解決的工作,可以省下日後不少麻煩。 相關參考 https://stackoverflow.com/questions/35688836/how-to-redirect-powershell-errors-in-pubxml-file-to-error-window Github  原始檔下載

.Net Core DateOnly Swagger及Dapper設定

圖片
前言 之前在寫前端時,針對日期在處理前後端序列化時,需要因時區特性作一些處理,例如:在台灣主機,取得後端的Json都會+08:00,前端則需要作顯示或調整的處理(Long Story不多述訴。 .Net Core 6 時代,就沒這煩惱了,直接使用DateOnly,前端得到的Json視為字串格式yyyy-MM-dd,送到後端也可以序列化成DateOnly型別。 使用方式 以下針對目前正在開發的一個專案,所使用到的技術,針對DateOnly的設定調整。 Swagger:加入MapType,告知DateOnly對應Json為string builder.Services.AddSwaggerGen(c => {... c.MapType<DateOnly>(() => new OpenApiSchema { Format = "date", Type = "string" }); }); 此設定為測試API時,對應正確的欄位,如下圖修改前/後 2.Dapper: 加入TypeHandler,處理從資料庫取值及設定參數值 public class DapperSqlDateOnlyTypeHandler : SqlMapper.TypeHandler<DateOnly> { public override void SetValue(IDbDataParameter parameter, DateOnly date) { parameter.DbType = DbType.Date; parameter.Value = date.ToDateTime(new TimeOnly(0, 0)); } public override DateOnly Parse(object value) { var result = DateOnly.FromDateTime((DateTime)value); return result; } } //Program.cs Dapper.SqlMapper.AddTypeHandler(new DapperSqlDateOnlyTypeHa...

使用Netlify發佈Obsidian筆記

圖片
前言 寫好的Obsidian 筆記想要公開在網站分享給別人,目前我使用的有幾種方式: EverNote。 Notion。 Blogger。 以上三種在過程中,都需要一些小調整。若筆記有修改,除了Blogger會更新,通常也不會再去更新已分享出去的筆記。 若不想要那麼麻煩,Obsidian也有付費方式,可以發行。 參考此篇 10個如何將Obsidian公開在網路 ,選定了一個功能較完整的版本,例如支援: Graphic 、左方選單、筆記之間的連結等。 架構 使用Netlify靜態網站,免費、支援自訂網域。 個人使用起來比Github Page好用,易上手。 網站樣板 obsidian-zola ,透過javascript,將Obsidian筆記變成Html網頁顯示。 Github,你的Obsidian儲存庫。 你原本的Obsdian不用作修改,只需加一個netlify.toml即可。 使用方式 在Github建一個新的Repository,將你Obsidian要公開的筆記及.obsidian資料夾複製過來,並新增檔案 Home.md 及 netlify.toml ,如下圖所示 Home.md 不用修改,只是作為入口首頁。 neltify.toml 修改參數: REPO_URL : Github 位置 SITE_URL: netlify的URL [build] command = "rm -rf __obsidian __site && mkdir __obsidian && mv * __obsidian || true && git clone https://github.com/ppeetteerrs/obsidian-zola.git __site && __site/run.sh" publish = "public" [build.environment] LANDING_BUTTON = "進入我的大腦" LANDING_TITLE = "首頁標題" LANDING_DESCRIPTION = "首頁副標題" # 首面的筆記名稱 LANDING_PAGE = "home"...

Obsidian DataviewJs的應用

圖片
Foreword DataviewJs為Dataview的更進一步應用,使用javascript撰寫。 筆記示範,如何使用DataviewJs並結合CustomJs讓取得Tasks的方式可以在多個筆記引用。 Content 安裝PlugIn CustomJs 指定js的資料夾 撰寫 MyTask.js 取得所有 未完成的工作 ,並濾掉不需要的 資料夾 及 header class MyTask { getTasks(dv) { let tasks = dv.pages().where((f) => f.file.path.indexOf("60.Extra") == -1).file.tasks; tasks = tasks.where( (t) => !t.completed && t.section.subpath.indexOf("Routine") == -1 ); tasks.sort((t) => t.due); return tasks; } } 完成後放到資料夾 60.Extra/67.Assets/js DataviewJs顯示Tasks 透過customJs 使用MyTask,並呼叫getTasks取得待處理工作。 針對 各狀態 過濾,顯示 標題及Tasks 。 若要顯示結果,將dataviewjs- marked ,的 -marked 移除。 const isDue =(t)=>{ var result= moment(new Date(t.due)).isBefore(moment(),"day"); return result; } const isToday =(t)=>{ var result= moment(new Date(t.due)).isSame(moment(),"day"); return result; } const isUpcoming =(t)=>{ var result= moment(new Date(t.due)).isAfter(moment(),"day...