2013/8/27

在單元測試程式中取得 Connection 字串

這是一個相當古老的問題。不過, 似乎也很久沒遇到過了。當今天再度遇到時, 突然被嚇了一跳。問題是這樣的, 當我們建立單元測試專案時, 如果你看到測試不成功的原因是什麼「System.ArgumentException: 此處不允許應用程式相對虛擬路徑 '~/'」之類莫名其妙的錯誤的話, 大概就是依照以下解法就對了。

2013/7/18

[SQL] 將關聯資料彙整成單一欄位並傳回的小技巧

今天在設計 Master-Detail 顯示畫面時, 面對煩雜的關聯資料, 一時突發奇想, 然後隨口問了公司的 DBA 老大, 想請教他有沒有什麼想法, 結果竟然有解法, 而且異常的簡單! 所以就有了這一篇文章的出現。(順便說一下, 對一個沒有時間去鑽研資料庫的開發人員而言, 公司裡有位 DBA 是件蠻幸福的事情)

2013/7/11

在 VS2013 Preview 中使用 Scaffolding 快速建立 CRUD 網頁

在 VS2013 Preview 中, 我們可以透過它的 Scaffolding (支架) 功能在 MVC 專案中快速建立一整套的 CRUD 網頁, 不用寫一行程式碼。甚至, 它已經內建了 Bootstrap 框架, 這使得我們甚至不需要具備美工能力, 也能設計出比以前漂亮得多的網頁。

在 Visual Studio 建立資料庫專案

我從很久以前就對 Visual Studio 中新加入的資料庫專案範本感到很有興趣; 但是一來我並不熟資料庫, 二來工作上也用不到, 所以從來沒有真正較深入地研究它, 只有嘗試過建立幾個測試專案, 然後被搞得灰頭土臉之後, 被迫放棄。但是最近由於工作上突然有了一點變化, 讓我回頭來思考在原來的方案中加入一個資料庫專案的想法, 所以就重新把它又拿來研究一番。

2013/6/30

ASP.NET 和 VS 2013 新功能彙整

微軟在近日 (2013/6/26) 公開了最新的 Visual Studio 2013 Preview (預覽) 版本; 我在前幾天的發文中也有提到過。不過, 到底這個最新版本有什麼不一樣之處? 微軟又為什麼在短短一年之後, 再度推出 Visual Studio 的新版本? 由於現在的資訊都不充份, 我想, 唯一, 也是最好的答案, 恐怕也只有 Scott Hanselman (現任微軟 Azure & Web Tools 的 Principal Community Architect 兼書籍作者) 能夠回答你了! 有興趣的朋友可以參考由他主講的 What's New in ASP.NET and Visual Studio 2013 這段影片

2013/6/28

使用 VS2013 Preview 開發 ASP.NET 專案並登入 AD

下載 Visual Studio 2013 Preview 之後, 我迫不急待地把它安裝起來, 並且建立了幾個測試用的專案。我把幾個值得注意的細節記錄起來, 同時供大家做個參考。

2013/6/18

在 ASP.NET Web Form 專案中加入 Bootstrap 套件

Bootstrap 是由 Twitter 所開發的一個免費的網頁框架, 它提供了許多從基本到進階的 CSS 和 JavaScript 功能, 讓網頁開發者可以很快速地把網頁架起來, 同時還兼顧了還算不錯的美感。通常, 網頁設計師不會、也不懂得美工設計, 所以我們如果只是很單地把網頁建立起來, 很不幸的, 這個網頁通常不會跟「美觀」這兩個字有交集。但是有了 Bootstrap, 你的網頁很容易就能讓人為之驚艷 (尤其是跟之前的做法對比的話)。

當然, 我不是說 Bootstrap 從此會讓美工人員丟掉工作。我相信美工人員也會感謝 Bootstrap 的存在, 這樣至少可以讓網頁在進行 layout 時省去一些功夫, 能夠早一點下班。

2013/6/15

在 ASP.NET 4.5 專案中套用 OAuth 登入

我們都知道, ASP.NET 從 2.0 開始, 原本已經提供了一個相當完整的會員認證/授權系統。但是隨著時代進步, 社群網站風起雲湧, 幾乎每個人都有一個 FaceBook、Twitter、Live 或者 Google 等帳號。如果你的網站可以允許你的使用者使用這些帳號登入, 讓他們不需要申請另一個新的帳號, 這樣對他們而言, 豈不是更加方便? 其實這種做法等於是 SSO (Single Sign On) 的概念, 而且微軟的 MSN/Live 帳號在很久以前就已經提供了這種功能, 但是由於那時候 MSN/Live 的認證是收錢的 (我記得並不便宜), 所以並沒有普及。

2013/5/26

JavaScript 中的日期比較問題

在我們在處理 JSON 的日期轉換時, 總會遇到轉得過去, 卻轉不回來的問題。這時候, 我們必須另外把日期字串進行重新格式化的動作。這個問題可以在 Stack Overflow 網站上找到現成的解答,  就是使用一個 dateReviver 函數, 當作 JSON.parse 方法的第二個參數。

2013/4/19

JavaScript 的繼承與實作

我差不多是在十幾年前開始接觸 JavaScript 的。和許多那時候的程式設計師一樣, 我並沒有很認真的把 JavaScript 當作「正常」的程式語言來對待。我寫的程式主要是以 ASP.NET 搭配 VB.NET 為主, 後來改為 C#; 可以說從一開始就戴著物件導向的眼鏡。而那個時候我們都被教導說 JavaScript 並非 OOP, 所以我也從來不認為 JavaScript 是一種物件導向語言, 也因此, JavaScript 從一開始就被我當作玩具, 是工作之餘的娛樂

2013/2/7

Windows 8 快速鍵匯整

Windows 8 用了那麼久, 總覺得它跟 Windows 7 差不多; 但是慢慢的可以感覺到一些比較細微的小差異, 包括與過去略有不同的快速鍵。當然, 很多事情依然可以使用滑鼠或者其它方式達成, 但是怎麼說也比不上使用快速鍵來得方便。於是我花了一點時間把這些快速鍵整理了一下, 供我自己和大家參考:

2012/12/25

展望 HTML5 未來新趨勢

關心網路發展趨勢的朋友一定知道, W3C 聯盟 (World Wide Web Consortium) 己在近日 (2012/12/17) 宣布完成了 HTML5 和 Canvas 2D 的規格定義, 接著將展開互通性 (Interoperability) 與效能方面的測試, 來確保 HTML5 能與各大瀏覽器達到最大的相容。W3C 除了在這一天推出 HTML5 規格的侯選推薦版本 ((Candidate Recommendation, CR) 之外, 並將按計畫於 2014 年推出 HTML5 最終規範, 正式讓 HTML5 成為網頁撰寫標準語言。不過, 為避免不同標準對推出的時程造成交互影響, Canvas、Web Sockets 和 Web 儲存等技術將會被獨立出來, 各自訂定計畫, 將不再納入 HTML5.x 發佈計畫裡面。

2012/10/31

個人密碼管理技巧分享

身處於網路時代, 到哪裡都需要使用帳號與密碼。我曾經小小估算了一下, 我曾經註冊過的網站至少有一百多個, 經常使用的也有將近五十個。這麼多的網站, 你要如何記得住密碼? 別說五十個了; 只要五個, 如果你不是每天都需要登入的話, 恐怕就會經常搞混。

2012/9/24

在 jQuery 自訂函式中實作 Optional Parameters

jQuery 的自訂函式事實上就是 jQuery 的外掛 (Plugin), 宣告的方式很簡單, 如下範例所示:

jQuery.f2c = function(fahrenheit) 
{ 
 return (fahrenheit-32) * 5/9; 
}

如此, 我們就建立了一個名字叫做 f2c 的外掛, 而且馬上就可以使用 $.f2c 予以呼叫:

2012/9/2

JavaScript 字串處理效能分析

作為一個前端語言, JavaScript 天生就註定要比其它任何一種語言要處理更多的字串。如何才能更有效地處理字串, 想必也是每個程式設計師最關心的問題。最近, 我看到有人很堅持地在程式中把個別的字串以陣列元素方式宣告, 然後把它們 join 起來, 說這樣才能達到最佳的效能, 其速度遠比使用字串的加號運算來得快! 起初我也半信半疑, 直到我寫了一個程式來仔細分析為止。

如果你沒有耐心的話, 我可以先把我的結論寫出來。如果你對我的分析過程有興趣, 可以再往下閱讀。

我的結論就是, 使用陣列的 join() 並不一定比使用字串的加號運算來得快; 二者的運算速度坦白說差異並沒有很大, 而且跟瀏覽器有絕對的關係。

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 無可望其項背的了。