2011年7月14日 星期四

如何得知一個 Console Application 被終止

今天被問了一個問題:如何得知一個 Console Application 被終止。

著實嚇了一跳! 畢竟很常開 Console Application 類型的專案是沒錯啦,不過通常只用來寫些 sample code。

不太會在正式的應用上再寫成 Console Application 了,這種問題感覺就是"那A加你甘丹",還真是連想都沒想過。

因為在放暑假的關係 XD,既然有空檔,那就來研究看看好了,要解決這個問題,初步的構想是從 AppDomain 著手。

2010年10月12日 星期二

利用 Regex.Replace 的 MatchEvaluator 委派進行樣板字串置換

Regular Expression 真的很讚!尤其是在 .NET 中使用 Regex 物件時,你會感覺到非常幸福,不光是支援的中介符號和語法完整 (比較過 Javascript 的 Regular Expression 就知道),連 Regex.Replace 都有特別犀利的地方。

我們在程式寫作的時候的時候,偶爾會遇到需要處理樣板的情況,例如:

Hi! XXX您好,您月的贍養管理費未繳,請盡速繳納...

2010年10月10日 星期日

使用 NPOI 在匯出的 Excel 檔中逐列內嵌圖片

相信很多人都有使用 NPOI 匯出 Excel 工作表的經驗了,這次來分享一下在 Excel 中內嵌圖片的範例。

在分享的案例中,我將使用 ASP.NET MVC / C# 利用 Google 搜尋圖片的功能,將關鍵字搜尋到的圖片,導出至 Excel 工作表中的每一列,見圖如下:

image


匯出的 Excel 內容為搜尋到的每張圖片,不過我沒將圖片完整輸出,而是產生縮圖後才輸出。

懶人的 VBA 程式寫作法

由於某個衝動的承諾,最近再次接觸到 VBA (Visual Basic for Application) 程式碼,對 Excel 工作表進行客製化。雖然需求挺簡單的,程式碼也不多,可是寫 VBA 這件事對我來說,並不是像寫 C#/.NET 一樣容易遇上,再加上 VBA 中很重要的 Office Object Model 還挺複雜的,小弟實在沒辦法塞太多 Office Object Model 的東東在腦子裡,這時候要靠文件嗎?可能一個小小的需求就會查到我天昏地暗,寫不下去…

所以在這邊分享一個小方法,能讓你快速的使用 VBA 完成你的工作,懂得一些 VB 的邏輯與控制結構語法即可,關於 Office Object Model 就借助工具幫忙。

2010年10月1日 星期五

離開 LINQ 的 Expression Tree (一)

話說 .NET Framework 在 3.5 發布以後出現的 LINQ,真令人驚豔!這傢伙威力的強大相信大家早有體會了,而 expression tree (運算式樹) 是在 LINQ 中是非常重要的元素,其重要性看 namespace 就能知道 (System.Linq.Expressions)。

Expression tree 自此之後開始快速欺凌擴展 .NET 程式設計師的視野,應用之廣泛像是 ASP.NET MVC 2 中開始提供在強型別 View 中應用 lambda 運算式 (lambda 也是一種 expression tree) 來作為舊語法無法支援 IntelliSense、編譯時期檢查和 refactoring support 的取代品(強烈建議使用),可參考 ScottGu’s Blog - ASP.NET MVC 2: Strongly Typed Html Helpers 這篇文章,相信有經驗的你很快的可以分辨出孰優孰劣。

我自己則是應用 expression tree 在推論引擎的實作上,先提一下推論引擎。前一段時間為了實作規則庫推論引擎(專家系統的一種分支),花了一段時間研究,這種系統的特性是:一個規則庫(Rule Base 或 Knowledge Base)、工作記憶體(Working Memory)與推論引擎(Inference Engine),架構大致如下:

2010年9月15日 星期三

Javascript 的 prototype 特性與使用方法

一般我們在 javascript 中使用這種方式進行類別定義與活化類別
// 以 function 為建構子
function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

//然後活化類別
var p = new Person("Dino", "Wang");


如你所見這樣的類別並不具有"成員函式",所以當你需要成員函式時你可能會手動繫結上去
// 附加一個匿名函式到 p 實體
p.fullName = function () { 
  return this.firstName + " " + this.lastName; 
}


這樣的問題是,每一個被活化的類別都需要進行一次上述動作(以下稱為成員繫結),如果你這類別會產生多個物件,就會造成匿名函式重複產生的問題(浪費記憶體)

設定 ASP.NET MVC 2 編譯時期檢查 View 的設定 MvcBuildViews 導致編譯失敗

設定了 MvcBuildViews 可以得到編譯時期檢查 View 正確性的好處,於是從善如流趕緊在專案檔找到 MvcBuildViews 選項並設為 true。

  ...
  true
  ...


隨後編譯即出現:

無法載入型別 'System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider' 錯誤

結果追蹤到這篇,才發現是因為專案使用 Entity Framework 的關係,在 web.config 中增加

  ...
  


即可順利編譯囉。