發表文章

使用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&q

git 修改最後一次的commit

圖片
  前言 你是否會常commit了變更後,發現少寫了什麼或某段程式寫錯了,然後就會修改後,再commit一次,假設你又跟我一樣常犯傻,剛的情況又來一次的話, history就會長得如下3個commit,多了v2,v3 。 解決方法 針對commit了,又後悔想修改的話,針對幾個情境的解決方式。 1. 修改/新增併入最近的commit 如前言所述,最近的commit為“訂單新增API v3”,如圖,我想再將修改內容,併入v3的commit。 使用方式 將修改的先加入暫存區 (同Visual Studio 加入到stage) git add --all 簽入加上參數 –amend –no-edit git commit --amend --no-edit -–amend: 將暫存區的加入最近一次的commit -–no-eidt: 不需要commit message commit沒有增加,但內容已由v3變成 v3-1 2.修改最近commit的訊息 有時簽入時,才發現訊息寫錯了,想修改該如何做? 本例示範將“訂單新增API v3” 改成“訂單新增API v3 OK ” 使用方式 簽入加上參數 --amend -m 參數 git commit --amend -m “訂單新增API v3 OK” 一樣是3個commit,但最後一個訊息已加上“OK” 注意事項 上述的兩種方式,其實都是撒掉前一次的commit,再換一個新的commit,仔細看的話,ID是不一樣的。在本地的commit可以任意使用,但針對 已push出去的commit ,儘量 不要這樣用 ,以免造成別人在處理衝突的困擾。 總結 以上兩個指令,可以大量減少一些不必要的commit,讓整個歷史記錄更清楚明瞭。 白話文:可以簽了又簽、簽了又簽,還是一個commit。 相關參考 git 修改歷史訊息

Obsidian 上傳圖片到Github

圖片
前言 在Obsidian將複製的圖片貼到筆記裡時,照預設的方式,會放到相對應或你指定的本機目錄內。目前有些筆記需要分享出去或公開的Blog,在轉出去的過程,針對那些在本機的圖片,需要再處理一次,轉成網路的位置,處理一次就令我頭痛了。所以之後的筆記只要是插入圖片,都是來自網路資源。 插入來自網路圖片,代表著勢必要先上傳到網路某個空間,且支援公開的靜態資源,然後取得URL,再放到筆記內…..這個作法,太土炮,作個幾次,就想翻筆電了XD。 本文會介紹如何在寫筆記的過程,將複製的圖片貼到筆記時,先上傳圖片到Github上,並取得圖片在Github上公開的URL,貼到筆記內。 如何使用 前置設定 先到Gitthub建立一個respository,本文: ObsidianAssets。 到 Github個人設定 ,建立Token ,只會顯示1次,要保存好。 下載Upgit ,upgit_win_amd64.exe(windows),放到你指定的位置,例如:D:.exe 在剛的位置,新增新增config.toml,並將github的資訊填入 # 預設上傳者 default_uploader = "github" # 圖片位置設定 rename = "{year}/{month}/upgit_{year}{month}{day}_{unix_ts}{ext}" [output_formats] "bbcode" = "[img]{url}[/img]" "html" = '<img src="{url}" />' "markdown-simple" = "![]({url})" # Github 上傳者 [uploaders.github] # 保存文件的分支,例如 master 或 main branch = "master" pat = "你的Token" # 您的respository repo = "ObsidianAssets" # 您的 Gtihub 用户名 username = "kimx" 設定好後