【茶包射手日記】打不開的PDF檔與檔案格式鑑定
接獲報案,某套表程式忽然故障導致產出的PDF檔案無法開啟。檢視查檔案內容如下,二進位內容當然看不懂,但由表頭判斷一定不是 PDF。檔案一開始的「俵」跟「遄」字元經 Google 在網際網路上發現不少兄弟姐妹,大致可知這是 Office 相關格式,但試著將副檔名改成 .doc、.docx、.rtf 都無法開啟。爬文找到一個神奇的小工具-Marco Pontello's TrID,它搜羅整理了 7886...
View Article核武級ODP.NET版本暴力破解工具
最近又遇到 ODP.NET 版本問題。(警告:本文涉及邪門歪道雞鳴狗盜之技,正義魔人與衛道人士請自行迴避)古老 ASP.NET 網站參照 ODP.NET 9207 版,移到 x64 平台必須改用新版 ODP.NET,而 ODP.NET 存在版號從 9.2 10.1 降回 2.102 的鬼問題,新版號比舊版號數字小在某些情況下會讓「bindingRedirect...
View Article用 TypeScript await 讓操作確認流程回歸直覺
上回提到 TypeScript 2.1 讓 ES5 平台也能支援 async、await,形同 JavaScript 非同步程式的一場革命,衝著這點大家都該認真考慮改用 TypeScript。但 async、await 當真如此神奇?想想,上回漏講一個 await...
View ArticleVisual Studio 擴充套件自動停用問題
最近發生 SCSS無法自動編譯的狀況,查看 Extension and Updates,問題出在 Web Compiler被停用。手動重新啟用後一切功能如常,原以為是一時系統秀逗,但接連發生好幾次才感覺不對勁。觀察發現,即時手動啟用,重開 Visual Studio 再開,Web Compiler 又是停用狀態。進一步檢查,則發現另一套件 Bundler & Minifier...
View Articleonbeforeunload 事件不再支援自訂訊息
要防止使用者網頁輸入資料時誤按超連結或回上頁鍵,來不及儲存(送出)就離開,有個古老技巧是攔截 onbeforeunload 事件,使用 return "…" 傳回提醒文字,讓使用者有機會反悔,選擇停留在原頁面。(參考:如何避免使用者在特定網頁表單在未經送出時意外離開)這招用了多年,今天在寫某個設定網頁時卻發現 Chrome 沒有顯示我在 onbeforeunload...
View ArticleODP.NET 發行者原則檔經驗一則
之前處理過一個鳥問題,使用 ODP.NET 12.1 連線 Oracle Server 10.2.0.4 時無法參與分散式交易,傳回「Unable to enlist in a distributed transaction /無法列於分散式交易中」錯誤。依網路討論 Server 升級到 10.2.0.5 以上可解決,當時決定將資料庫移至另一台 Oracle Server 11.2...
View ArticleCSHTML 匿名型別資料繫結技巧一則
情境如下, 在 ASP.NET MVC 用一小段程式顯示部門下拉清單,資料來自資料庫,因欄位較多且命名不直覺,我將由資料庫取得的集合轉成匿名型別 Select(o => new { DeptId = o.DI, DeptName = o.DN },再以 Razor 語法 @foreach (var dept in ViewBag.Depts) { <option...
View ArticleIE 內嵌 IFrame 之 IE 相容模式組合問題
先前研究 IE 內嵌 IFrame 相容模式規則時,得到一個結論:透過IFrame內嵌網頁會沿用父網頁的文件模式,透過X-UA-Compatible亦無法改變前幾天同事回報一個黑天鵝案例:IE8 相容模式網頁內嵌 IFrame,裡面再內嵌一個 IFrame,依先前理解,兩個 IFrame 都應沿用 IE8 相容模式。實測卻發現,只要內層 IFrame 沒宣告...
View ArticleHi, XBOX ONE!
去年因為一些事,對人生無常頗有感慨,頓時發現自己的人生嚴肅到有些乏味,老在計較每一分每一秒時間的投資報酬率。小木頭恰巧是鮮明的對比,小小年紀就有七八十歲老先生的豁達(如此「早熟」令人堪憂呀),功課考試什麼的最討厭了,腦海老繞著看到的好玩電腦遊戲打轉。兩個不良示範掛在天平兩端也不是辦法,弄條管道擴大交集,鼓勵二者向中央靠攏,而身為阿宅想到的是-買台遊戲機。吸引嚴肅老頭有點玩心,當成貪玩小鬼努力唸書的誘...
View Article筆記-Scott Hanselman 的 2017 .NET 開發者須知
Scott Hanselman 前兩天有篇文章-What .NET Developers ought to know to start in 2017,我的工作(甚至生活)跟 .NET 息息相關,重量級人物的觀點自然不容錯過,整理筆記如下:前言Scott 之前整理過類似的 .NET 須知,結果被大家拿來當作面試時折磨新人的刑具…...
View Article使用 FileChangeMonitor 實現檔案資料快取自動更新
有個開發老鳥專屬的「成功經驗」陷阱:遇到難題,想出一套簡單有效解法,或許有些小缺點,但造成的麻煩在可忍受範圍,於是 日後再遇到同樣狀況,一律照方煎藥,數十年如一日。但技術會革新、元件會改進,善用一些新特性,小缺點其實可以化為無形。可怕的地方在於:如果每次都能順利解決問題,就不會圖謀改進,直到有天發現洋人船堅砲利,才知自己已成滿清…...
View Article【茶包射手日記】Windows 沒有足夠資訊可以確認這個憑證
某台持續爬網頁抓資料的排程忽然出現 The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel 訊息,推測為 SSL 憑證失效引起。連至該主機使用瀏覽器檢視,果真憑證顯示異常:錯誤訊息如下:Windows does not have enough...
View ArticleAutofac筆記6-Resolve時依參數傳回不同型別
好久沒寫 Autofac 筆記,記錄一則最近遇到的小需求。系統中針對介面(例如:IBlah)實作了多個型別,Resolve<IBlah>() 時希望透過參數指定傳回不同型別。依據官方文件,實現這類需求的最簡單做法是使用 Named Service(具名服務)或 Keyed Service(鍵值對應服務), Register<T>() 後不使用...
View Article在 Chrome/Edge 網頁用 IE 開啟超連結
這是 IE Only 網站親衛隊才有的困擾。許多內部系統年代久遠,寫於全天下瀏覽器只有一種(IE)的時代(2004 年 IE 市佔高達 95% [參考]),寫成 IE Only 也是很合理的事。但你我都知道,時代不同了,滿天都是飛機啊,滿街都是電腦啊,HTML5 世代 IE 早已不是最好的瀏覽器選擇。望著公司那堆 IE Only...
View Article生態池日記-豆娘羽化觀察
【警告】照片裡挺可愛的豆娘,小時候住水裡叫做水蠆(發音同「菜」),長得不太稱頭(其實是醜到讓人不蘇湖),文章內有水蠆的「近距離寫真」,請大家視身心狀態自行評估,看完以上照片就關掉網頁,只留下美好印象也是不錯選擇。【背景知識】蜻蜓與豆娘都屬於蜻蛉目,主要差異在於停止時翅膀平放展開或收合。二者的稚蟲都叫做水蠆,生活在池塘或溪流,以昆蟲、小魚或蝌蚪為食。延伸閱讀防雷緩衝區起點...
View Article徹底移除已簽入TFS的項目
保留完整版本變更歷程是版控系統的核心精神之一,檔案項目一旦簽入,就算使用者要求刪除,項目從清單上消失,仍可透過歷史記錄還原每一個曾簽入的版本。實務上,偶爾會發生不慎誤將不該簽入內容丟上版控的狀況(例如:誤簽入個資或機密敏感內容),此時版控對保留完整軌跡的堅持變成缺點,不管刪除或 Rollback 都無法防止他人透過歷史記錄還原內容。非常狀況只能用非常手段,在 TFS 上遇此種狀況,tf.exe...
View Article小試 IIS 的簡易 DoS 防護-動態 IP 限制
這幾天,DDoS 攻擊事件在台灣鬧得沸沸揚揚。DoS 攻擊可約略分為頻寬消耗型(找一大群鄉民擠在餐廳門口)及資源消耗型(召喚服務生過來點菜連點兩鐘頭,或一口氣點兩百盤紅燒獅子頭),從網站管理者的角度,對頻寬消耗型攻擊完全無能為力,只能靠 ISP 或網管單位防禦;但對於資源消耗型攻擊,倒是有些因應對策。(例如:把十分鐘還沒點完菜的客人攆出去或把點兩百盤獅子頭的客人打成豬頭)我知道有一些 ASP.NET...
View Article使用非同步處理提升資料庫更新速度
來自同事的資料庫程式效能調校案例一則。情境為一支同步來源及目的資料表的排程,先一次取回來源及目的資料表,逐一檢查資料是否已存在目的資料表,若不存在即執行Insert,若存在則執行 Update 更新欄位。因 Insert/Update 之前需進行特定轉換,故難以改寫為 Stored Procedure。排程有執行過慢問題,處理四萬筆資料耗時近 27 分鐘。程式示意如下:foreach (var...
View Article用 100 行 C# 打造 IP 所屬國家快速查詢功能
講到由 IP 地址查詢所屬國家,解決方案有兩種:第一種是直接呼叫線上查詢 API(付費或免費),再不然就要下載 IP 區段資料庫自寫查詢程式。考量應用場合不一定有 Internet 連線能力,加上擔心線上 API 無法滿足 IIS Log 等超大量 IP 解析的效能要求,選擇取回資料檔自幹。(其實是因為這題目大小難易適中,十分適合練功,一時手癢難耐,就…)爬文找到一些 IP...
View Article【茶包射手筆記】在 View 使用 SELECT * 的風險
分享同事踩到的 SELECT * 地雷一枚。大家應該在程式設計準則都看過這條-「避免使用 SELECT * FROM Table,應以 SELECT Col1, Col2… 明確列舉欄位…」。如此建議必有其考量:第一個理由顯而易見,正向表列必要欄位,可避免在網路傳送用不到的資料浪費頻寬,並能減少客戶端、伺服器端處理多餘資料的資源損耗。再者,查詢欄位多寡也可能影響效能,SELECT *...
View Article