[Regex] 值得注意的 Regular Expression 樣式的潛在風險

Regex 本身已經十分複雜, 但不知道大家有沒有想過, 它的解析引擎和處理機制又是如何實作的呢? 一般來講, Regular Expression 的解析引擎可以分為三種, 一種叫做 DFA (Deterministic Finite Automation, 決定性有限自動機制), 另一種叫做 NFA (Nondeterministic Finite Automation, 非決定性有限自動機制), 還有一種叫做 POSIX NFA。.Net 採用了傳統的 NFA 引擎, 使得它既能兼顧速度與功能, 但缺點就是由於傳統 NFA 只接受它找到的第一個相符比對,它也可能讓其它比對無法被找到 (POSIX NFA 雖然可以找到, 但速度緩慢)...

...繼續閱讀 »

[Visual Studio] 清理開發環境遺留的檔案

當我們使用 VS 開發系統時, 開發工具需要保留一些空間以供運作; 就像俗語所說,「吃燒餅沒有不掉芝麻的」。但是如果在某些情況下, 使你懷疑 VS 或 .Net 是否遺留了太多不需要的檔案, 佔據了寶貴的硬碟空間, 那麼你應該如何找到這些暫存的、無用的檔案, 並且把它們清除, 而不會影響到原系統的運作呢...

...繼續閱讀 »

[Winform] 在 Windows Form 中讓背景流動的方法

首先我必須聲明一下, 以下我要介紹的方法雖然並不是百無一用, 而且看起來還算酷炫, 但是我必須承認這可以算是「無用技術」的一項。因為讓背景圖片不斷流動除了無端耗費 CPU 資源之外, 如果設定得不好, 還會讓你的使用者眼花瞭亂, 甚至可能會產生暈車的症狀, 所以小朋友不要亂學, 叔叔有練過才敢這樣做...

...繼續閱讀 »

使用 new FontFamily 時因字型不存在或非 TrueType 而造成 Exception 的問題

當我們要使用某種字型, 必須採用以下的方式進行: new Font(new FontFamily(fontName), 14f, FontStyle.Regular); 上面 fontName 是指輸入的字型, 例如 Arial。但是當你把程式部署到客戶端之後, 會有一個你可能想像不到的問題, 那就是, 如果對方機器上並未安裝此字型, 這時會產生一個 runtime 的 Argument Exception...

...繼續閱讀 »

[Winform] 動態產生下拉式表單的做法、問題與解決

在 Windows Form 中要以動態方式新增/移除選單項目是一件很容易的工作。簡單的講, 我們先在視窗上方加入一個 ToolStripMenuItem (在功能表與工具列中找到 ToolStrip 控制項, 再拉進視窗裡面), 接著, 加入一個 ToolStripMenuItem (假設將該項目命名為 "menuFile"), 然後我們就可以在程式中對它進行操作了...

...繼續閱讀 »

[Winform] 了解並修正 AddString 路徑與原矩形偏移的問題

在 GDI+ 功能中, 如果要在圖片中加上文字, 最簡單的方法就是使用 Graphics.DrawString() 方法。但是 DrawString() 方法固然簡單好用, 它的功能卻十分的不強; 光是想要描出文字的框線, 我們就得採用迂迴的方法才能辦得到, 效果還不見得好。上網查了很久之後, 發現絕大多數同好都建議改用 GraphicsPath.AddString()...

...繼續閱讀 »

[Winform] 復原滑鼠事件造成的非預期慣性滾動問題

這是一個困擾了我一整天的問題。從昨天晚上發現問題開始, 一直到今天下班前才解決, 足足花了十幾個小時在跟這個應該不是問題的問題奮戰著。我並沒有上網尋求答案, 因為我一直以為是自己程式出錯而反覆修改, 但最後卻發現並不是自己的程式有問題, 而可能是 Windows 本身的問題, 亦或是自己對 Windows Application 中滑鼠事件生命週期理解有誤而造成的...

...繼續閱讀 »

[入門] .NET 自訂型別

我可以理解為什麼我老婆開了十年的同樣一部車, 都不知道原來在 N 檔和 D 檔之間切換可以不必去按那個安全鈕; 但是我卻無法理解為什麼有一個已經寫了好幾年 .NET 程式的人, 在這輩子中竟然沒有寫過任何一個自訂型別...

...繼續閱讀 »

萬眾矚目的 HTML 5

如果我們往前回顧歷史, HTML 4 是在 1997 年底制定的, 我們現在普遍在用的 HTML 4.01 發表於 1999 年底。此外, XHTML 1.0 發表於 2000 年初, XHTML 1.1 則發表於 2001 年中。距今差不多十幾年的時間當中, 我們並沒有看到太多革命性的改變...

...繼續閱讀 »

[jQuery] jQuery 私人筆記本

本來是不打算寫任何關於 jQuery 的入門文章了, 因為這種資訊在網路上俯拾皆是, 甚至都泛濫了。然而在實際使用時, 發現 jQuery 的精簡語法在彼此之間也實在太相像了, 如果不自己做個筆記以供隨時速查, 總是記不住。所以, 還是寫個一篇或是幾篇拿來放著, 想查閱的時候也方便...

...繼續閱讀 »

TDD 的可行與不可行

上個禮拜參加了彭靖灝老師的研討會(軟體工程從自己做起-軟體工程之千山我獨行), 今天又拜讀了彭老師的「習慣影響思維」。他在研討會及文章中一再強調測試先行的理念, 又深感軟體工程師對於 TDD (Test-driven Development) 的疑慮或者排斥, 不由得心生「千山我獨行」之感...

...繼續閱讀 »

[Regex] 進階群組建構

當你可以掌握 Regex 的基本原則之後, 如果你真的把它運用在生活中或工作上, 我相信你很快就會發現那些基本技巧的不足之處。舉個例子, 你可能已經寫好一個樣式 (如 "(?\b\d{7,8}\b)" ) 來從 "12341234 1111222" 字串中擷取出電話號碼。然而, 你可能在某天發現來源字串出現了奇怪的字: "12341234 (02)12345678", 此時, 你就非得修改原本的樣式...

...繼續閱讀 »