網頁

小孩帶金剛 - 爸爸,我好勇敢

護士好辛苦1
圖一:護士好辛苦

護士好辛苦2
圖二:護士好辛苦

未當爸爸之前,總覺的什麼"流感"、"腸病毒"…關我什麼事,但當了爸爸之後,每年(真的是每年)總會因為孩子感冒高燒不退、腸病毒高燒不退等原因,孩子住院,我也休特別假在院照顧。今年算是特別嚴重,二個一起住院。其實我心裡還在想,還好是二個一起住院,不然我和婆婆真不知道怎麼照顧,二頭跑真是會累死了。

每次住院,時間大約都是在 5 ~ 7 天之間,其中最可憐的一段就是裝點滴針頭與換點滴針頭。雖然住院期間,活力大不如前,但小朋友左動動右動動,很容易滴點就塞著不動了,前年 Happy 住院時最可憐,平均每 2 ~ 3 天就換一次點滴針頭。當然,換滴點針頭時的"叫聲"之大,於心不忍又無可奈何。

照顧病人真的很累,尤其是我們沒有其他家人在新竹。

婆婆也是很貼心,怕我在醫院都睡不好,大概二天會來醫院換班,晚上讓我回家睡好一些。點滴的針頭是每四天換一次,療程 5 ~ 7 天來說,正常的話,每次住院都是左右手必須各打一次。這次住院,剛好二次換點滴針頭都是婆婆在照顧的時間。

第一次裝點滴針頭,我去準備住院要用的東西,回到病房時,還沒等婆婆開口,Love 就舉起手說:「痛痛。」還在一副想哭的樣子。Happy 也馬上在床上舉起手說:「爸爸,我跟你說,我好勇敢,我都沒有哭,而且 Nurse 還送我小熊。」

媽媽點點說,她真的沒有哭。我能想像,大寶貝忍耐的樣子

ASP.NET Web API 心得筆記 (6) 例外處理(Exception Handling)

HttpResponseException

如果 Web API 的 controller 擲出一個例外(exception),會發生什麼事?預設下,最常是會把例外轉譯為一個 HTTP 狀態碼 500 (Internal Server Error) 回應。

HttpResponseException 型別是一個特別情況。你能指定此例外的建構式,這個例外能回傳任何 HTTP 狀態碼。例如,下面例子,如果 id 參數不存在,會回傳 404 (Not Found) 狀態碼。


Function GetContact(id As Integer) As Contact
    Dim contact As Contact = _repository.GetContactById(id)
    If contact Is Nothing Then
        Throw New HttpResponseException(System.Net.HttpStatusCode.NotFound)
    End If
    Return contact
End Function

想要對回應取得更多控制,你也能建構回應的訊息 (HttpResponseMessage 型別),然後包含在 HttpResponseException 裡:


Function GetContact(id As Integer) As Contact
    Dim contact As Contact = _repository.GetContactById(id)
    If contact Is Nothing Then
        ' Throw New HttpResponseException(System.Net.HttpStatusCode.NotFound)
        Dim msg As New HttpResponseMessage(System.Net.HttpStatusCode.NotFound)
        msg.Content = New StringContent(
            String.Format("無法找到連絡人ID = {0}", id))
        msg.ReasonPhrase = "未發現連絡人"
        Throw New HttpResponseException(msg)
    End If
    Return contact
End Function

ASP.NET Web API 心得筆記 (5) 分頁和查詢(Paging and Querying)

Open Data Protocal (OData) 指定查詢字串參數讓 Client 能使用它去排序與過濾結果。

Web API 提供以下內建支援 OData 查詢參數:


Web API 提供支援 OData 查詢參數
查詢參數說明範例
$filter選擇與布林運算式相符的項目http://localhost:port/api/contacts?$filter=substringof(Name, 'Ed') eq true
$orderby指定的屬性來排序結果http://localhost:port/api/contacts?$orderby=Name
$skip跳過前 n 筆元素http://localhost:port/api/contacts?$skip=2
$top傳回前 n 筆元素http://localhost:port/api/contacts?$top=10

$top 如果與 $orderby 一起使用,會先排序,然後再取得前 n 筆元素以回傳。

Microsoft MVP Open Day 10 週年 - 明年還要來

這是我當選 Microsoft MVP (微軟最有價值專家) 之後,第一次參加微軟大型活動,這次活動的全稱為「Microsoft MVP Open Day 10 週年 - 微軟最有價值專家在台灣光輝十年」,活動地點在很美的"南方莊園渡假飯店"。

由於第一次參加,前一晚異常興奮,為了第二天能有戰力,還請出安眠藥來幫忙進行休眠模式。不過,還是早早六點就起床了。八點不到,全家人護送我去會場。(我走西濱至會場約 30 km)

會場篇

落水螻蛄
圖一:落水螻蛄

我應該是第一個到會場,因為還有時間,就帶婆婆與小孩到處走走看看環境,在水池場裡發現一隻落水的螻蛄,應該是我這輩子看過最大隻的螻蛄,抓它起來時還有點怕怕的,兩個小鬼看的很高興。


不知名昆蟲
圖二:不知名昆蟲

這是第二隻,不過它身世可憐,被我家的老二一聲"踩",就結束一生。以上就是短短的"南方莊園渡假飯店昆蟲救生記",謝謝。
回主題。

Microsoft MVP Open Day 10 週年立牌
圖三:Microsoft MVP Open Day 10 週年立牌

飯店門口立著大大 Microsoft MVP Open Day 10週年立牌,最高興當然是能前去參加。


MVP 名牌
圖四:MVP 名牌

領到名牌,除了進出會場使用外,最重要的自我介紹時使用,MVP 們平常都忙於工作,出現於網路時又都是使用匿稱,介紹自己 Bruce 或 KKBruce 知道的人還比較多一些 XD!


MVP 棒棒牆
圖五:MVP 棒棒牆

一進會場,滿滿一整面的 MVP 掛在櫻花上,立刻成為大家的焦點。全台灣優秀的 MVP 不只這些。(註:還有一位香港的 MVP 特地飛過來參加)

為什麼動物都被關在動物園

圖片來源:網路
我們常說要會「舉一反三」,但對問題特別多的寶貝們,我時常有被問倒的準備。他們提出的問題包羅萬象,也反應出孩子與成年人的差異。

我喜歡她們這樣,保持好奇心,她們問問題,不了解、不清楚,我就去找答案。

標題「為什麼動物都被關在動物園」,是我孩子在放學途中車上問我的問題,我東想西想,實在想不出個好答案,所以就把腦筋動到「動物園」上,讓「動物園」來回答動物園的問題,以下是臺北市立動物園的回答:

讓你的 Android 智慧手機取得超過 100GB 雲端硬碟空間


智慧手機(Smart Phone)讓我們盡情的把工作帶回家把資料隨身化,不管是收發 Email、聽音樂、聊天、記帳、看電子書、記事、玩遊戲 … 我個人是認為它反正就是一台能撥打電話的小電腦

我的第一支 Smart Phone 是 Android 2.3.4 作業系統、4.3吋 … 雖然買的時候,店家送我一張 2GB mini SD Card,送的店長笑著說:我自己都送的都有點不好意思。後來還是自己買了張 AData 32GB microSDHC (Class10) 來升級。不過說實說,資料放在手機裡還真不放心,尤其是我家眾美女的圖或影片,如果不見了,我會很傷心的。

手機可擴充的,最高就是加 一張 32GB 的 SD 卡,不能擴充的就看智慧手機本身是 2GB, 4GB, 8GB, 16GB,我好像還沒看到有內建 32GB。再來,想備份資料就一定要開電腦,接上傳輸線,開檔案總管 … 等一堆動作。

這時候,雲端硬碟 (或稱:雲端空間、網路硬碟 …) 就是很不錯的選擇。

PC, MAC, Linux <--> Cloud Drive <--> Smart Phone, Pad

小孩帶金剛 - 你有什麼願望?

Happy 畫畫


我的孩子,很單純,很直接。

對大人而言,明明是小孩,但是說的是大人的話,就成了意外之話,好笑的,就成了童言童語的好題材,這種話,你在 8 點檔是聽不到的,或是你很少聽到這種話,你也應該好好檢討一下!

某天,我們全家人起了個大早,全家就一起去散步,走著走著,Happy 突然問我:「爸爸,你有什麼願望?」

離開傳直銷生活後,已經好多年沒聽到這句話。腦袋閃過的都是技術上的目標,想不到一個好答案,先利用反問法反問 Happy 說:「那妳有什麼願望?」Happy 回的好:「我的願望都已經實現了。

哇,看來我們當家長還算合格。

我轉頭看婆婆:「那妳呢,妳有什麼願望?」
婆婆說:「我希望接下來創業能順利,能豐衣足食就很滿足。」

那我呢?

Windows 8 Developer Terminology - Traditional Chinese 專案感謝文

偶爾還是要搜尋一下自己(KKBruce),還好,不是找到有人在罵我。

Windows 8 Developer Terminology - Traditional Chinese (微軟詞彙社區論壇)

這是之前參加的一個專案,此專案是公開的,我也有在 Blog Google+ 上公開請大家一起參加,提供一些意見後,後續只再去看了其他人提供的意見幾次,就忘了它的存在。沒想到,還有他有發一篇文,留個畫面記念一下:

ASP.NET Web API 心得筆記 (4) Web API Routing

如果你已經熟悉 ASP.NET MVC,你會發現 Web API Routing(路由)與 MVC 非常類似。主要差異在 Web API 使用 HTTP Method ( GET, POST, PUT, DELETE ...) 而不是使用 URI 路徑來選擇 Action。你也可以在 Web API 裡使用 MVC 樣式的路由。以下討論專注在 Web API 且可以沒有 ASP.MVC 基礎。

Routing Tables, 路由表

在 ASP.NET Web API,一個 controller 是一個 class(類別) 以處理 HTTP 請求(requests)。在 controller 裡所有的公開方法(public  methods)都稱為 Action方法 或簡稱 Action。當 Web API Framework 接收到一個請求,它路由請求到一個 Action。

Framework 會使用路由表(Routing Table),決定那一個 Action 會被呼叫。如果你在 ASP.NET 裡使用 Web API,路由表會定義在 Global.asax 檔案中。預設使用 Visual Studio 去新增一個 Web API 專案,專案樣版會建立預設路由給你:

routes.MapHttpRoute( _
    name:="DefaultApi", _
    routeTemplate:="api/{controller}/{id}", _
    defaults:=New With {.id = RouteParameter.Optional} _
)

注意,如果你使用 self-host Web API,你必須在 HttpSelfHostConfiguration物件 上直接設定路由表(這未來我們會討論)。
每個實體(entry)在路由表裡都包含一個路由樣板(route template)。Web API 的路由樣板預設是 "api/{controller}/{id}",此樣板裡,"api" 是文字路徑片段,{controller} 和 {id} 是定位變數

當 Web API Framework 接收到一個 HTTP 請求,它會去嘗試比對 URI 對路由表的路由樣板之一, 如果沒有符合的路由,Client 會收到一個 404 錯誤。例如,以下 URI 會符合預設路由:

  • /api/contacts
  • /api/contacts/1
  • /api/products/ApplePie

ASP.NET Web API 心得筆記 (3) CRUD 操作之後端程式

CURD 是 "Create, Read, Update, Delete" (新增、讀取、異動、刪除) 的簡寫,這四個動作是資料庫基本操作。許多的 HTTP Service 也能透過 REST 或 REST-like API 來進行 CRUD 操作。

以下會進行一個非常簡單的連絡人管理。透過以下方法來提供服務。

Web API CRUD 方法說明
Action說明HTTP方法URI關連
取得所有連絡人清單GET/api/contacts
透過 id 取得連絡人資料GET/api/contacts/id
新增一位連絡人POST/api/contacts
更新連絡人資料PUT/api/contacts/id
刪除連絡人資料DELETE/api/contacts/id

由上表中,我們可以很清楚看到,有兩種資源類型( resource types):

URI 資源類型
URI說明
/api/contacts列出所有連絡人
/api/contacts/id一位連絡人

HTTP 方法


HTTP 主要方法 (GET, PUT, POST, DELETE) 能對應到 CURD 操作:
  • GET 接收及顯示。GET 在伺服器應該沒有副作用。
  • PUT 更新。PUT 也能拿來"新增"使用,如果伺服器允許 Client 去指定新的 URI。那範例的連絡人管理將不允許使用 PUT 來新增。
  • POST 新增。伺服器會給 URI 分配新物件,然後返回此 URI 作為回應訊息的一部分。
  • DELETE 刪除

ps. 現在開啟前一篇的 HelloWebAPI 專案。相關步驟不再重覆。

Tool - 製作安裝或部署檔超強工具 Advenced Installer

進入主題前,我們先看幾張圖片:

Visual Studio 2010 安裝和部署專案之一
圖一:Visual Studio 2010 安裝和部署專案之一
Visual Studio 安裝和部署專案之二
圖二:Visual Studio 安裝和部署專案之二
Visual Studio 11 Beta 安裝和部署專案
圖三:Visual Studio 11 Beta 安裝和部署專案
之前寫過幾篇「ASP.NET Web網站部署」都裡介紹的就是圖一與圖二,在圖三之中很明顯,我們看不到 Visual Studio Installer,不見了。還有,你在 Visual Studio 11 裡去點擊 InstallShield 專案,它還是帶你到 InstallShield for Visual Studio 2010 的下載安裝頁面。Visual Studio 11 未來正式版在【安裝與部署】會如何,我們無法得知,不過,Visual Studio 本身預設的安裝專案不見了,還是讓人擔心。

這時,遠方有個聲音傳來說:「不用怕!Advanced Installer 出現了。」

ASP.NET Web API 心得筆記 (2) REST 入門簡介

我接下去還會有幾篇關於 ASP.NET Web API 的文章,但看完黑暗執行緒的「RESTful探索系列」才發現,如果沒有先了解 RESTful,那接下去的內容還真有點硬,像是專業名詞,例如,你在 ASP.NET Web API 文件中可以看到大量的 Resource (資源) 這個單字,URI 我還能理解,跟 Resource 有什麼關係?

以下主要對 REST 做入門簡介,理解整個 REST 能讓我們在 ASP.NET Web API 的路上更順暢。

何謂REST

REST ( REpresentational State Transfer ),State Transfer 為 "狀態傳輸" 或 "状态转移 ",Representational 中文有人翻譯為"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性状态转移",不過,一般文章或技術文件都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來代表,因為 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。
在我的《朗文當代辭典》中是這樣解釋 Representational:「a representational painting or style of art shows things as they actually appear in real life」(具體的繪畫或藝術風格所顯示的東西,實際出現在真實生活中)
REST 一詞的出於《Architectural Styles and
the Design of Network-based Software Architectures》論文,我們先簡單從標題來看,它應該是一種架構樣式 (Architectural Styles) 與軟體架構 (Software Architectures),而且是以網路 (Network-based) 為基礎,重點就是:

  • 架構樣式 (Architectural Styles)
  • 軟體架構 (Software Architectures)
  • 網路 (Network-based) 為基礎

REST 本身是設計風格而不是標準。REST 談論一件非常重要的事,如何正確地使用 Web標準,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索與了解 Web 及其工作方式。如果你設計的應用程式能符合 REST 原則 (REST principles),這些符合 REST 原則的 REST 服務可稱為 "RESTful web service" 也稱 "RESTful Web API"。"-ful" 字尾強調它們的設計完全符合 REST 論文裡的建議內容。

金剛帶小孩 - 參與,才會有感情

我很 enjoy 在家庭生活中,我與婆婆每天都有一些單獨相處時間,我與孩子們也一樣,每天都有一些只有我與孩子單獨相處的時間。雖然只是短短數小時,雖心有不甘,但我學習放下。

為什麼心有不甘?

婆婆因工作關係,上下班時間與一般人不一樣,所以晚上下班後,我是全職保母,剛開始真是有點不習慣。以前,回家帶小花散步後,就是回到電腦前面,但現在,除非有重要的事,不然晚上很少能打開電腦。剛開始時,每次都是一邊照顧她們,一邊心想,等一下等她們睡著後,我要做什麼什麼事。後來發現,這樣的不專心,照顧的效果非常差。

沒有心,和我們寫的程式《有魂無體(參考 topcat 文章)》一樣糟糕。後來想想,能與孩子好好的相處,不是自己一直想做的事嗎!真的給你機會,又心不在焉的一直想回到電腦的身邊。我慢慢學習,下了班,就把公司、電腦、技術…放在公司就好

最近,很少有空能寫寫我與她們的事,原因很簡單,搞定她們,我也累了。當我選擇下班後,把全心都給她們後,我發現,我們與她們的感情每天都在加深加厚。這讓我們想通了一件很簡單的道理,只要是「情」字,親情、感情、愛情、友情…你都必須用心參與才會產生連結(Connection),進而產生越來越深的關係。