Coding4Fun–自動產生副檔名轉 ContentType 對照表
昨天的文章提到 .NET 4.5 內建 MimeMapping.GetMimeMapping(),可省去自己用 switch … case 逐一列舉副檔名對應ContentType 的工夫。不過,這項福利僅限於 .NET 4.5+,如果程式使用的是 .NET 3.5 或 .NET 4.0,只能乖乖自己處理。理論上,新開發的程式用 .NET 4.5.2+ 名正言順(參考: 蛤,微軟停止.NET...
View ArticleCODE-使用 Stack + yield 取代遞迴
分享最近學到的遞迴邏輯的替代寫法。舉個實例比較容易說明,假設公司組織樹狀結構以部門資料物件形式呈現:publicclass Dept {publicstring Name;public List<Dept> Children = new List<Dept>(); }組織架構範例如下:{"Name": "總經理","Children": [ {"Name":...
View Article【茶包射手日記】Windows 10 每天十點多固定醒來
家裡 Windows 10 的使用率不高,平時長期處於睡眠狀態,但偶爾會發現無故醒來,我知道有部分 Windows 排程具有喚醒電腦能力,正常情況醒來做完事閒置一陣子會再回去睡覺,發現醒著多半是閒置休眠機制失靈,倒也沒特別調查。今天心血來潮挖了一下,發現一個祕密—原來我的 Windows 10 固定每天早上十點多都會起床夢遊,有趣的是,起床時間還不固定,甚至有最遲 10:57...
View Article【茶包射手日記】預訂五十年後執行的排程
近來異常充實,專案火燒屁股,大小茶包報案照常受理,生活好不精彩。遇到一枚奇妙茶包,追了好一會兒,謎底卻令人莞爾,為枯躁生活平添一絲趣味,特記上一筆。同事報案,表單系統在歸檔時有個錯誤重試機制,出錯時自動休眠 30 分鐘再試,另外,系統亦接受程式指定於特定時間(稱為喚醒時間)重試。監看報表出現多筆詭異喚醒時間,排定在 2058、2075、2052、2081、2068、2057、2055... 等...
View ArticleCODE-從 JSON 提取文字內容
從檔案萃取文字部分建立索引是全文檢索的必要程序,先前介紹過為 PDF、Office 檔案產生文字索引的做法,實際開發則遇到為 JSON 建立文字索引的需求。借用上回遞迴文章的組織資料當實例,假設 JSON 格式如下:{"Name": "總經理","Children": [ {"Name": "行政部","Children": [ { "Name": "人資組" }, { "Name": "總務組"...
View ArticleCODE-C# 程式讀取 Exchange 共用行事曆
工作遇到新需求:辦公室自動化服務希望讀取使用者行事曆,整合顯示於個人資訊頁。EWS Managed API封裝了複雜又囉嗦的 Exchange Web Service SOAP 細節,改以 .NET 程式庫形式提供電子郵件、連絡人、行事曆、公用資料夾的存取管道,是 C# 開發 Exchange 相關程式的首選。(意外發現 EWS Managed API 從 2014 起轉為 Github...
View ArticleRSA 非對稱金鑰加解密與數位簽章筆記
用 .NET 加解密已是老生常談,.NET 內建 MD5、SHA1、RSA、AES、DES... 等雜湊及加密演算法,寫來易如反掌,網路上的文章也很多。但沒有自己整理過一次,每回要用都要爬文找半天。有些基本功不能省就是不能省,所以,我的 RSA 私房筆記來了。程式範例 1 包含:產生隨機 RSA...
View Article2017 台北馬
告別 2017 的最後一場馬拉松 - 2017 台北馬。大家都知道我挑選馬拉松比賽的原則是「鍾情小而美,不愛大拜拜」,會跑台北馬自己也意外。一來是上回參加已是 3 年前,去年改了賽道加繞中正紀念堂、總統府、南門、西門,聽說變得頗不一樣,很有城市味;二來則是台北馬要抽籤,隨手登記抽中正取,原以為 7000 個名額沒啥好搶,卻驚聞不少人想跑卻抽不中,莫名覺得到嘴肥肉不能放,腦波一弱就......
View Article除蟲筆記 – Thread 執行時機與 Closure
同事的 .NET 程式抓到一隻有趣的 Bug。以範例程式重現如下:staticvoid DoProcess(int idx){while (StartFlag) { Thread.Sleep(1000); Console.WriteLine( $"{DateTime.Now:mm:ss} Thread {idx} is running."); }} staticvoid Main(string[]...
View Article全文檢索筆記–Windows Search SQL經驗談
因應專案需要,先前研究過 Lucene.Net。Lucene.Net 功能強大效能佳,又提供極高客製彈性,但缺點是得自己處理從 PDF、Word/Excel/PowerPoint 檔提取文字、管理索引排程,瑣碎工作不少。最後,我選擇到超市買牛奶而不自己養牛,決定借用 Windows Search 功能實作網站內容全文檢索,建個目錄把檔案放進去(txt、html、pdf、docx、xlsx、pptx...
View ArticleASP.NET 眼中的 ".\Blah.sqlite" 在哪裡?
同事報案,在ASP.NET 存取 SQLite 資料庫,路徑誤用 ".\Blah.sqlite" (一般多使用 Server.MapPath("~\App_Data\Blah.sqlite"),參考:App_Data的隱身特性 ),程式可以運作,以為 Blah.sqlite 檔案會出現在 bin 目錄但沒有,使用 Everything 搜尋也找不到蹤跡。這裡有個迷思,依直覺 ASP.NET...
View Article【茶包射手日記】TypeScript 出現大量 is not assignable to 錯誤
同事報案,在沒動 TypeScript 的情況下,專案爆出大量 TypeScript 錯誤導無法編譯。 錯誤訊息滿是各式各樣的 A is not assignable to parameter of type B。目擊證人指出,問題出現在 VS2017 安裝更新後,VS 更新成為最大嫌疑犯。深入調查後案情逆轉,發現 TypeScript 2.3 版本被移除,專案屬性設定 TypeScript 原指定...
View ArticleVS2017 還原 NuGet 失敗:The given key was not present in the dictionary.
由 Github 抓回開源專案研究,用 Visual Studio 2017 編譯出現錯誤,貌似還原 NuGet Package 出錯導致,錯誤訊息為 "The given key was not present in the dictionary":Restoring NuGet packages... To prevent NuGet from restoring packages during...
View Article【茶包射手日記】Win10 IIS 無法啟用 32 位元模式(HTTP 503)
在工作機 IIS 測試 ASP.NET 網站,得到「An attempt was made to load a program with an incorrect format /試圖載入格式錯誤的程式」,這是經典問題,一看訊息就知是 32/64 位元版本不對,好發於在 x64 Windows 使用 32 位元 Oracle Client 的情境。基本上只需在 IIS AppPool 進階設定啟用...
View Article閱讀筆記:人工智慧簡史
讀到保哥推薦的好文章: 從人工智慧、機器學習到深度學習,你不容錯過的人工智慧簡史 - INSIDE 硬塞的網路趨勢觀察這一年來,人工智慧、機器學習、深度學習等名詞無所不在,一直開啟慈禧太后模式視若無睹充耳不聞也不是辦法,身為連院子都沒踏進的門外漢,讀完這篇文章算是有了概念摸到電鈴,未來聽人豪洨提及這些名詞不再一臉茫然。簡單摘要如下:「人工智慧」( Artificial Intelligence,...
View Article2017 歲末雜記
2017 最後一天,聊點風花雪月生活瑣事當作句點。馬口魚去年底拿塑膠收納箱搞起生態池,種水草養螺不過癮,元旦跑去溪邊撈了小魚回家養。由於裝備業餘技巧拙劣,能抓到的盡是 1 到 1.5 公分不等的幼幼魚,回家爬文依其特徵判斷為馬口魚(之前曾在 FB 亮相)。不知不覺己整整養了一年,留下一尾「藍波」,身長約十公分。生態池僅能俯拍加上魚兒動作敏捷,只拍到模糊照片充數!...
View Article【茶包射手日記】用 USB 安裝 Win10 找不到媒體驅動程式
2018 開春第一砲包。元旦在家當工具人,幫小閃光的 Toshiba 小筆電重灌 OS。Windows 10 1709 的 ISO 檔超過 4.8 GB 燒不進 DVD... (登楞) 被逼著第一次體驗用 USB 行動碟裝機。製作開機 USB 有個超好用的工具...
View Article閱讀筆記:Intel CPU 漏洞問題
整理一下這兩天的超大條資訊新聞 – Intel 這十年來製造的 CPU 都存在一個漏洞,可能讓攻擊者偷走存在記憶體裡的機密資料,不管你是用 Windows、Mac 還是 Linux 都會中獎,當今之計是靠更新作業系統補救,但要付出電腦變慢 5% – 30% 的代價。Google Project Zero 團隊發現當今 CPU 採用的「推測執行」(speculative...
View Article野人獻曝 - 極簡風格 .NET Stopwatch 計時法
在 .NET 要測量執行時間,Stopwatch 是最簡單直覺的做法,像這樣:Stopwatch sw = new...
View ArticleRequest.Url.Host 偽造實驗
我有個 IIS 網站同時繫結多個 IP,想做到依據連上的伺服器 IP 授與不同權限,例如: 有些功能開放外網 IP 連入使用,某些功能限定內網及 localhost IP 才能用。設立兩個站台繫結不同 IP 及 Port 但共用同一份 ASP.NET 程式碼是一種解法,但我貪圖共用 Process 及靜態物件的便利性,因此要研究正確識別 Request 伺服器來源 IP...
View Article