【茶包射手日記】T470p 藍牙失效疑雲
小黑 T470p忽然連不上藍牙滑鼠,控制台顯示藍牙已關閉,而啟用停用藍牙的開闗也不見了。裝置管理員裡的藍牙項目消失,「通用序列匯流排控制器」則冒出一個「未知的 USB 裝置」,研判電腦忽然不認得藍牙裝置搞的鬼。嘗試更新「未知的 USB 裝置」驅動程式,系統顯示已是最新版本,重新開機亦不見改善。到官網重新下載藍牙驅動程式安裝無效,但我注意到一件事 - Intel 8265 Wireless...
View ArticleHangfire 筆記1 – 使用 SQLite
Hangfire是一套支援在 ASP.NET MVC 站台跑背景作業或排程的好用程式庫,可以將作業丟到背景執行、延遲執行或排定時間定期啟動,並且網頁管理介面、支援失敗重試等功能。如使用資料庫作為任務儲存區,即使網站重啟工作也不會遺失,功能十分強大。Hangfire 開源且可免費用於商業用途,付費版 Hangfire Pro則多了批次作業中斷接續執行、批次作業流程設計、Redis...
View ArticleHangfire 筆記2 - 執行定期排程
想用 ASP.NET Hangfire 跑定期排程,有一個前題是「需確保網站永遠處於執行狀態」,先推薦幾篇相關文章:[ASP.NET]使用 Hangfire 來處理非同步的工作 - 亂馬客 - 點部落[IIS]為什麼應用程式集區設定了 AlwaysRunning 沒有效果呢- - 亂馬客 - 點部落Making ASP.NET application always running —...
View Article徹底移除 IIS Response Header 版本資訊
從 IIS Reponse Header 移除 Server、X-AspNet-Version、X-Powered-By 等版本資訊,可降低因曝露資訊被鎖定攻擊的機率,被視為提高資安防護的手段(效果高低見仁見智,但有些資安掃瞄將此列為弱點,不做也得做)。這已算是老話題,網路上有不少討論與參考文章:mrkt 的程式學習筆記- ASP.NET MVC - 移除特定的 Response Headers...
View Article2018 渣打馬
跑過三屆渣打馬,每次都有精彩回憶。2014 年第一次跑渣打馬,初嚐起跑與終點不同的玩法,勉強擠進 SUB5。2016 年遇上 44 年難得一見的霸王級寒流,頂著 4 度低溫,整場跑了五次廁所,排隊尿尿排到我都崩潰了,所幸保住 430。2017 年絕對是最難忘的一場,是我跑馬生涯的里程碑。不知吃錯什麼藥,拎杯居然跑進許多跑者心中的強者門檻 - SUB4,還一舉突破傳說中的「陳冠希障礙」,以...
View Article使用 Razor 產生客製化 Email 內容
多年下來,寫程式發 Email 通知的需求做過 N 回,其中寄給客戶的通知為求美觀常需採用 HTML 格式,而客戶姓名、通知內容等要隨客戶動態改變,嚴格來說也是一種套表。過去我慣用一套自己發明的「特別註記+Replace」做法,例如:var tmpl = "<span>[$Name$]</span>...
View ArticleTIPS–7-Zip 壓縮時略過特定目錄或檔案
這是我常遇到的困擾 - 壓縮打包 .NET 專案時,packages、bin、obj 等目錄下的 DLL 檔常讓檔案大小暴增數十倍,而這些檔案可透過 NuGet Restore 或重新編譯產生,基本上不需要保留。如果能在壓縮時略過這些資料夾,預期可省下可觀的體積。平時我都用免費且開源的 7-Zip壓縮解壓縮(題外話,如果你己經「免費試用」試用期只有 40 天的 WinRAR 了十幾年,可考慮改用...
View Article【茶包射手日記】老 Bug 新感受之 ODP.NET 版本問題
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception.同事一度懷疑跟 ODP.NET 版本有關,但依經驗,如為版本問題錯誤訊息會確指出所需元件全名、版號等資訊。為調查問題,我直接在 IIS主機現場撰寫...
View Article實戰小技巧 - .NET Exception Message、InnerException 與 ToString()
前篇文章提到 try catch 時若只保留 Exception.Message,可能遺失 InnerException 及 StackTrace 錯失破案重要線索。文章迴響顯示這是個值得介紹的實戰技巧,故再補充一篇。在某些應用情境我們會選擇使用 try … catch 達成特定目的,例如:(註:Exception...
View ArticleIIS HTTP 強制轉 HTTPS 簡易做法
再遇到老題目:在 IIS 上如何將 HTTP 請求強制導向 HTTPS?之前試過顯示說明網頁,倒數後透過 JavaScript location.href 轉向 HTTPS 的做法 - 設計賓至如歸的HTTPS強制導向網頁。但這有個缺點,如果不需要顯示導向提示,則先 HTTP 200 送回正常網頁再由瀏覽器另外發出請求連上 HTTPS 多耗費一次往返,不如直接回傳 HTTP 301/302...
View Article【茶包射手日記】VS2017 錯誤清單出現 TypeScript 版本相關錯誤卻可編譯
之前處理過 VS2017 更新導致 TypeScript 出現大量 is not assignable to 錯誤問題,若暫時不打算改寫 TypeScript 升級 2.4+,確保專案 TypeScript 版本設定維持在舊版即可。但實際使用發現有個困擾:雖然編輯及使用都正常,但 VS2017 的錯誤清單視窗(Error List)冒出大量 is not assignable to...
View Article捉鬼記 - Google 搜尋結果被穿插廣告
近來在筆電用 Chrome Google 查東西怪怪的,搜尋結果出現後一兩秒,最上方會冒出幾則 AdSense 廣告,廣告項目的樣式偽裝成一般查詢結果,還會隨機插穿於正常結果之間,閱讀結果時得自行剔除還常不小心點到,讓人肚爛到極點。一度懷疑是 Google 網站改版想藉此增加廣告營收,但經過分析很快排除此一可能,理由如下:搜尋結果先出現,廣告是被疊加上去的。有時還會先看到標準 AdSense...
View Article元件開箱:Managed ODP.NET for Linux
.NET Core 版本已推進到 2.0,但對我而言,相關元件、程式庫的支援度才是能否用於工作的關鍵。最近有則好消息 – Oracle 在這個月推出 ODP.NET Core 12.2 Beta,感覺在工作專案使用 .NET Core 的日子又更近了~ 工作環境常會存取 Oracle 資料庫,.NET Core 再好用,連不上資料庫也是白搭。ODP.NET Core 補上這塊拼圖,背後的另一層意義是...
View ArticleTIPS - 限定 Visual Studio 使用的 C# 語言版本
同事通報:無法編譯簽入的 C# 專案,部分程式碼存在語法錯誤,細查發現是 Visual Studio 2015 Update 3 不認得以下寫法:publicstring Id { get => RawId.ToString(); set => RawId.Parse(value)}原以為這是 C# 6 語法,VS2015 理應支援,進一步確認是 C# 7...
View Article【茶包射手日記】IE11 localStorage 為 null
測試一陣子的專案接到回報,某網頁在某台電腦用 IE11 檢視有錯,用 Chrome 或其他電腦的 IE 則無問題。起初懷疑是 IE 相容模式問題,幸好使用者在同一辦公室,得以親自借用電腦開 F12 查案,追出關鍵點在於問題 IE 的 localStorage 不知何故為 null,而網頁裡的 JavaScript 程式假設網頁會在 IE9+ 或 Chrome 執行,未考慮瀏覽器不支援...
View ArticleVS2015 Update 3 TypeScript 語法標示失效
Visual Studio TypeScript 版本相容問題又來了~ Orz同事 Visual Studio 2015 Update 3 的 TypeScript 版本仍在 1.8,配合專案要升級到 2.3 (相容 2.4 版需修改程式), 沒留神裝成 TypeScript for Visual Studio 2015最新版( 2.7.2,應點開 Detail 才能下載歷史版本),...
View Article當心 Request.Url.ToString() 傳回無效 URL
抓到一個誤用 Request.Url.ToString() 造成的 Bug。由使用者回報錯誤,追出某段程式擷取 Request.Url.ToString() 加工產生的連結有誤。 原本 URL 參數包含另一頁網址,依規定做了 UrlEncode,如: b=http%3A//blog.darkthread.net%3Fm%3D1%26a%3D456 。ASP.NET 程式抓取...
View ArticleSQL 最大伺服器記憶體設定值研究
SQL Server 預設會用光主機所有記憶體(預設上限為 2PB = 2048TB),除非整個資料庫容量小於總記憶體,否則把記憶體當成 Cache 能提升效能、減少磁碟 I/O 耗損,絕對利多於弊。如果同主機有多個資料庫執行個體,或是要與其他應用程式、服務分享記憶體,就必須透過...
View ArticleCODE - C# 推算檔案相對路徑
最近在資料夾比對工具遇到一個需求:要以某個資料夾為基準推算檔案的相對路徑。例如,若基準資料夾為 C:\Folder,則 C:\Folder\SubFolder\Test.txt 的相對路徑為 SubFolder\Test.txt。類似需求以前加減寫過,說穿了全是字串比對的功夫,靠將路徑前方相同部分移除取得相對路徑。如果相對路徑需支援 ..\..\Test.txt...
View Article