2012/8/20

JavaScript 中的 Delegation

在物件導向理論中, 關於 Delegation (委託) 的概念, 有人說是由麻省理工學院 Media Lab 的首席研究員 Henry Lieberman 於 1986 年在 OOPLSA '86 Conference 中發表的一篇文章 ("Using prototypical objects to implement shared behavior in object-oriented systems") 裡面提出來之後, 才逐漸發揚光大。其實在這篇文章中, Lieberman 不只談到了委託, 他也談到了繼承。他同時提出了這兩種方法, 主要還是為了解決同一種問題 (亦即處理 "Shared Behavior" 的問題)。

2012/6/8

從 LinkedIn 密碼外洩事件看網站的保密策略

根據 Macworld 在 2012/6/6 所發表的一篇文章, 一位駭客聲稱已駭進 LinkedIn 的資料庫並盜走帳號資料, 然後把六百五十萬 (實際數字為 6,458,020) 個密碼公布在一個俄羅斯的論壇中作為證據 (僅公布密碼資料, 並無關連的帳戶名稱及其它資料) 並請求其他網友協助破解。這些密碼事實上並不是明文, 而是已經過 SHA-1 方式加密的。SHA 是 Secure Hash Algorithm 的縮寫, 中文翻譯為安全雜湊演算法; SHA-1 是在 1995 年發表, 另有 SHA-224、SHA-256、SHA-384 和 SHA-512 等演算法 (後四者常被併稱為 SHA-2)。

在這篇文章中, 也提及另一起關於 LinkedIn 的 iOS App 的個人隱私外洩事件。不過我認為那是單純的程式邏輯問題, 跟我在這裡想談的網站安全策略無關, 所以就此略過。

2012/6/5

引領潮流的 Windows 8

最近在閱讀 Charles Petzold 的 "Programming Windows 6th Edition", 看到作者回顧自己在撰寫 "Programming Windows" 第一版時, 他使用了一部裝了 80286 的 IBM PC/AT, CPU 時脈為 8MHz, 記憶體是 512KB, 另外配上一部 30MB 的硬碟。對現代的年輕人而言, 這種配備應該是不可思議的, 因為現在連一般手持裝置所使用的微處理器的規格, 恐怕都遠遠超越那個時代的 PC。

2012/5/14

使用 Timeline 自製噗浪式河道

Timeline 是一個 JavaScript 程式庫, 它並不是 jQuery 套件, 所以無需另外載入 jQuery 主程式(不過我檢查它的程式碼, 發現它實際上有調用 jQuery 1.7.1)。要如何解釋 Timeline 的功用, 這實在有點難; 但如果你是噗浪的愛用者, 那麼你馬上就可以心領神會。因為它使用起來幾乎跟噗浪一模一樣(只差不能留言跟按讚而已)!

基本上, 這個套件可以做出一個可以由左而右捲動的捲軸(以噗浪的術語稱為「河道」, 我以下也將稱之為河道), 並在其中顯示從你所給定的資料來源。當你選取一個資料時, 河道上方就會顯示較詳細的資料。不過它的時間軸方向跟噗浪相反。

2012/4/13

[VS11] VS11 對 Find/Replace 功能的增強

為因應使用者的意見反映, VS11 開發團隊在最近的 Beta 版本中, 針對 Find/Replace 功能做了一點小小的功能增強。如果你已經更新到最新的版本, 那麼你已經可以開始使用這些新功能。

或許你已經發現, 在 VS11 中, 要搜尋一段文字, 你不必在輸入搜尋字樣後按下 Enter; 當你一邊打字, VS11 就已經在同步進行搜尋。而且, 你可以使用滑鼠滾動程式區域, 而不是像 VS2010 一般在歷史搜尋字串之間巡迴。而所有搜尋到的字串, 會同時在 IDE 畫面中標示底色。光憑這一點便利性, 已經是過去所有版本的 VS 無可望其項背的了。

2012/4/10

[ASP.NET] 自訂 Server Control 的 CSS3 屬性

ASP.NET 到底有沒有支援 CSS3? 嚴格地說, 既然我們可以在 ASP.NET 專案及網頁中毫無障礙地自訂 Style, 那麼它當然有支援 CSS3。雖然在 Visual Studio 的 IDE 裡面, 或許它不能識別 CSS3 的 tag, 也不提供 intellisense, 但是那並不是 ASP.NET 的問題。

其實, 就像 ASP.NET Control 既有的 Font, ForeColor, Height, Width... 一樣, 這些屬性也都可以使用 CSS Style 來設定, 但是在 ASP.NET 中仍然把它們特別拉出來實作為屬性。在本文中, 我要做的就是同樣的事情。

2012/3/30

認清測試的本質與目的

作為一個由技術支援工程師和 QA 轉任 Developer 的資訊從業者, 我從很早就認識到一件殘酷的事實, 那就是測試是個苦差事 - 至少比多數軟體主管和部份軟體開發者所以為的還要辛苦。我不想倚老賣老, 但是我發現很多沒有真正從事過測試工作的開發者, 好像並沒有真正思考過測試工作的難度。在他們心中, 如果談到測試, 雖然會理所當然的認為一定要做測試, 但是真正分配來做測試的人, 遠比所需要的少。

測試到底是怎麼一回事? 又應該如何做才算適當?

2012/3/29

[CSS3] 使用 CSS3 製作 HTML 小時鐘

在 CSS3 中, 增加了一個 transform 功能, 使得我們可以對網頁元件進行放大、縮小、平移、旋轉、扭曲等等效果。我在本文中要介紹的是其中的 rotate 效果, 而且運用它來製作一個完全使用 HTML 標籤加上 CSS3, 不使用任何圖片的小時鐘。

在我開始介紹這個時鐘小工具之前, 你不妨往本網頁的右邊看一下, 在側邊欄的 jlClock 就是我的作品 (僅適用於 IE10、Chrome、FireFox、Opera 與 Safari 等瀏覽器; IE9 及以下版本不適用)。

2012/3/6

使用 XML 當作單元測試中的測試資料來源

MSDN 對單元測試的介紹中, 對單元測試的做了基本的介紹。站在我這個 former QA 的角度來看, 一般人如果只是照著上面的簡單介紹去做單元測試, 然後就以為單元測試只不過是這樣而已的話, 未免把單元測試看得太單純。事實上「使用資料驅動的單元測試」才是真正實用的。怎麼說呢? 因為, 如果我們不是餵給測試單元很多預先知道結果的測試資料去進行測試的話, 所謂的「自動化測試」只是空談罷了。為什麼團隊裡面必須有 QA 存在? 就是因為我們需要 QA 站在開發者的對立面, 試圖去找出開發者沒注意或甚至沒想到的弱點; 有攻有防, 才能確保產品的品質。

2012/3/3

(CSS3) text-shadow 詳解

text-shadow 是 CSS3 中一個蠻有趣的屬性。加上這個屬性之後, 文字馬上變得多彩多姿起來。簡單的講, 就如同它的字義, text-shadow 意思就是給文字加上陰影。以前我們必須使用繪圖軟體才能為文字套上這些特殊效果, 而且還要把它轉變成圖形。現在, 只要方便地賦予它 "text-shadow" 這個 CSS 屬性, 馬上就可以看到效果。

很可惜的, 並不是所有瀏覽器都支援 CSS3, 所以這個功能並不一定適用於每個使用者或每種瀏覽器(例如 IE6)。如果你的瀏覽器不支援 CSS3 的話, 你可能看不出以下每個範例所展現的各種效果。不過你可以先預覽一下以下這個截圖 -

2012/2/29

(WPF) 在 WPF 視窗中找到所有控制項

在 WPF 視窗裡, 控制項模型和 Windows Form 或 Web Form 之間都有或大或小的差異。就以巡覽控制項這件事來說吧, 你可能會和我一樣, 對於容器(包括視窗本身)都沒有提供 Controls 或 Items 屬性可用而深感不方便。它甚至也不提供像 XML 和 LINQ to XML 之下的各種巡覽功能, 像是 Descendants 屬性。

我最近打算在我的 WPF 程式中把某個 StackPanel 裡面的所有 TextBox 一次 Disable 或 Enable。在我最熟悉的 ASP.NET 中, 這是很簡單的一件事。如果是客戶端程式的話, 我甚至可以使用 jQuery 來輕鬆的辦到。很可惜, 在 WPF 程式中., 似乎並沒有提供現成的類似功能。

2012/2/9

(WPF) 在 WPF 視窗中開啟對話視窗 STEP BY STEP

在 WPF 程式中, 要開啟一個對話視窗的方法和在 Windows Form 裡面不太一樣。最顯著的差異, 在於 WPF 的 Button 控制項中並沒有 DialogResult 屬性可用。不過他們的基本原理還是差不多的。

以下我將示範如何在 WPF 加入對話視窗的祥細步驟。

2011/12/7

我看 Windows 8

在 C|NET 的 "Will Windows 8 be irrelevant to regular PC users?" 一文中,作者 Lance Whitney 對於 Windows 8 的未來展望打了一個蠻大的問號;同時,在該文中夾帶的 Windows watch 投票活動中,差不多只有兩成左右的讀者表達了他們一定會更新到 Windows 8 的意願,有高達三成六的讀者表示他們不會進行更新,另外有三成四的讀者表示觀望。

2011/11/26

.NET Framework 新風貌

就目前所知, 下一版的 .NET Frameworks (根據目前消息,版號應該是 4.5) 應該沒有什麼驚天動地的變革, 預計上市日期也還沒有確定。不過隨著今年 (2011) 在 BUILD 大會上公布的 VS2011 Developer Preview Version (簡稱 "vNext") 讓大家可以廣泛試用, 我們逐漸了解這個新版本的大致狀況。

2011/11/23

[HTML5] 文章裡的文章-使用 article 標簽

如果你在網頁設計上面已經著墨很久的話,或許你會發現 HTML 實在是一種非常不嚴格的語言 (它確實是一種語言;它的名稱也是這樣來的)。我這裡要很簡單的介紹一個在 HTML5 標準中新加入的元素 article,以及非常類似的 section,並且會探討它們的差異。而你將會見識到 HTML 在語法與使用上的寬鬆。

基本上,article 之所以存在,自有它的目的;並不只是個不具實用性的精神指標而已。但是如果你不從它的原始目的來使用它,那麼它就和過去常見的、到處站立在街頭的領導人雕像一樣,實在很難想像它們到底有什麼實質的作用。

2011/11/10

在 ASP.NET 專案中安裝 ELMAH 擴充套件 STEP BY STEP

在這個全世界有數百萬起跳的人口都在從事軟體開發工作的今天,程式設計絕對不是一個適合單打獨鬥的行業。雖然我個人也是個偏好親手下去寫所有程式的開發人員,但是若想應付改來改去的需求、節省時間、準時交件的話,有時候不借助他人之力是不行的。很幸運的,確實有很多已經寫好、包好、測試好 (而且好用 - 這是重點) 的套件就在網路上,為什麼還需要凡事都自已動手?

問題是,通常這些套件的安裝非常繁複、要面對的情況也很多樣。有時候光是安裝這些套件就會難倒一堆人,甚至讓人興起不如自已寫還比較快的想法。

但是現在有了 NuGet,所有事情都簡化了。套件的搜尋、瀏覽、下載、安裝和設定都可以讓 NuGet 幫你做好,在大部份情況下你甚至什麼都不需要做。

2011/10/31

從 C#/VB 開發者的角度解析 C++ 中的指標

最近在維護一個 C++ 專案,在迫不得已的情況下重新溫習了已經二十幾年沒踫的指標 (Pointer)。而且,很不幸的,跟二十幾年前一樣被搞得暈頭轉向 (在 C# 跟 VB 中根本不會有這種問題),所以只好花點時間把 C++ 指標相關重點摘錄起來供自已及有興趣的朋友們參考。
首先,我把 C++ 跟 C#/VB 在這方面的根本差異處先條列在前面。沒有學過 C++ 跟沒有學過 C#/VB 的人同樣可以把下列重點當作本文的前題說明。

2011/8/12

使用 Decorator 樣式實現輸入裝置的 IoC 概念

對傳統程式設計師而言, XNA 可以算是一個面臨多種適用狀況的開發環境。為什麼呢? 因為你所開發的程式, 只要經過小小的修改, 就可以移轉到 PC、XBOX 與 WP7 裝置上面。而它的輸入裝置也很多樣, 包括鍵盤、滑鼠、XBOX 搖桿、觸控輸入, 甚至其它

2011/6/9

.Net Interoperation 入門

就字面上來看, Interoperation 是一個英文複合字; 如果你在電腦上打入這個字, 一些 editor 的 spell checker 會告訴你拼字錯誤, 並建議你更改成 Inter-operation 甚至其它拼法。其實 Interoperation 是工程界普遍使用的字眼, 專指在不同系統中搭起的簡易或臨時的元件, 藉由製訂某些共通的協定, 以便這些系統可以共同作業。由於這個溝通界面可能並非非常嚴謹, 所以當其運作時, 必須特別有人從旁監督、隨時調整和修改。

在.Net 中, Interoperation (簡稱 Interop) 專指從.Net 應用程式中存取 unmanaged 程式元件的行為。我們知道, 當我們撰寫 .Net 應用程式或元件時, 這些元件都是 managed (受 .Net 執行環境所管理的)。但是如果是使用VB6/C/C++ 所撰寫的非 .Net 程式的 COM 元件, 對 .Net 而言, 都算是 unmanaged。如果我們企圖在 .Net 程式中存取那些 unmanaged 程式或資源, 就必須透過 Interoperation 技巧與COM 介接。

此外, 許多 Windows API 並沒有 .Net 的對應函式。換句話說, 如果我們要撰寫 Windows 應用程式, 而且我們必須使用到 Windows API 的話, 我們沒辦法從 .Net Framework 執行環境中找到對應的方法, 而必須透過 Interoperation 去呼叫 Windows API。

2011/4/29

[ASP.NET] 擷取 Master Page 觸發的事件

很多事情都是必須遇到了才會重視。使用 Master Page 是每個 ASP.NET 程式設計師都必須了解、甚至精通的; 我也一直覺得我對這部份的技術非常精通, 直到我在最近設計的網站遇到某個比較少用到的功能, 才發現有很多事情並沒有原先想像的那麼直覺。什麼事情呢? 就是我原本放置在 Master Page 部份的控制項, 如果我必須在 Content Page 處理它的事件, 應該怎麼做?

一開始, 我覺得這不應該是個問題, 但是真正下手之後, 才發現解法並沒有那麼直覺。經過明查暗訪, 終於找到了解決的方法, 如果你剛好也遇到這個問題, 不妨參考一下我的解法。

其實解法講穿了就沒什麼學問了! 因為它根本就和我在「[入門文章] ASP.NET 事件與委派詳論」一文所描述的做法幾乎是一模一樣的, 但是在這個問題中另外有個關鍵點, 請稍為留意。

首先, 建立一個名為 mp.master 的 Master Page 檔案, 並在裡面放置一個按鈕物件 (Button1), 設定它的 Click 事件處理函式 (Button1_Click). 然後再建立一個 Web Form (例如稱為 Default2.aspx), 並指定它的 Master Page 檔案為 mp.master。

在 mp.master.cs 中加入以下程式碼: