2010年12月13日 星期一

Windows Phone 7開發技術研討會 投影片

感謝大家參與 12/8,9,10 在北中南所舉辦的『Windows Phone 7開發技術研討會』,我在這個場次當中簡單扼要地介紹了WP7應用程式開發的一些技巧,以及從申請App Hub帳號到將應用程式上傳至Marketplace的整個流程,希望對大家有所幫助。

這個場次相關的投影片位置如下,請參考:
http://docs.com/9OAD

2010年12月1日 星期三

Windows Phone 7中文通訊錄

我知道很多Windows Phone 7的使用者目前遭遇的困難,因為我自己也是使用者之一,不過有趣的地方就是,當碰到問題的時候,可以自己動手寫程式來解決,有時候也算是一種樂趣。

目前英文版的WP7,最大的障礙就是內建的應用程式(諸如瀏覽器、地圖、電話簿)沒有中文輸入功能,這也是我們先前開發了Chinese SMS, Chinese Mail, Search in Chinese等應用程式的原因。

但,更令人討厭的是,WP7有一個很強的People Hub功能,可以同步你在雲端(例如hotmail, GMail, facebook)的通訊錄,讓你直接使用,但壞就壞在上千個通訊錄同步下來,沒法輸入中文過濾找人可真是搞死人了。

儘管WP7強大的UI可以讓你用嚕的嚕到你要找的聯絡人,然後再撥號,但要在一千多個名單中,找到特定某個人這也太痛苦了吧。所以,我們只好自己動手做,我們開發一個程式,在微軟正式將WP7升級成中文版之前,希望能夠有一個簡單的UI可以讓用戶來編輯通訊錄,然後同步到手機上,並且在手機上可以搜尋聯絡人並撥號。手機本來就不適合編輯資料,所以我們希望通訊錄可以在網路上編輯,然後再同步到手機上,可以在網路上編輯通訊錄的Web應用程式很多,survey了一下,最後選擇同步Google(也就是GMail)通訊錄...

理由是...似乎我身邊的人最常用的就是Google Mail和Google聯絡人,雖然我們都有MSN帳號,但尚且不多人把通訊錄建立在MSN的Windows Live當中(可能也很多人不知道,Outlook可以透過Hotmail Connector直接連結雲端的Windows Live Account)。而Google通訊錄可以很輕易的匯入Outlook或其他的通訊錄,且Google Contacts API相當簡單好用,所以Google聯絡人就暫時先變成我們的標的。

我們利用過去開發好的注音輸入法控制項,很輕易地達成了通訊錄的搜尋和過濾功能,而同步Google通訊錄的部分,只需要透過Google API即可。

擁有WP7手機的朋友可以透過Zune下載,有興趣的朋友可以參考。 使用的方式很簡單,請先建立一個Gmail帳號,然後進入http://www.google.com/contacts編輯通訊錄,如果你手邊有現成的通訊錄檔案(例如Outlook匯出的.csv),可以透過Google Contacts匯入,把通訊錄編輯好之後,進入手機Chinese Contacts程式(當然,請先從marketplace下載安裝, 台灣與大陸地區用戶請選擇試用), 在主選單找到Import Google Contacts...,進入匯入畫面,輸入你的Google帳號密碼,手機程式即可下載通訊錄進行匯入動作,然後,你就可以在Chinese Contacts程式中看到您的通訊錄了...

至於開發人員關心的,如何用程式抓取Google聯絡人,透過Google API真是簡單到不行,Google果然是一家可敬的公司。[source code]

補充說明:因為有用戶在問,所以整理一下...

這個軟體可以做的事情:
 1.下載您的Google(GMail)通訊錄到手機上的Chinese Contacts通訊錄中(不是WP7系統通訊錄)
 2.在Chinese Contacts程式中用注音輸入法(沒有倉頡、拼音、手寫)搜尋通訊錄資料
 3.下載特定位置的.csv檔案(OUTLOOK格式,須為UTF-8)到Chinese Contacts通訊錄中(不是WP7系統通訊錄)

這個軟體不能做的事情:
 1.讀取你SIM卡中的通訊錄(請自行想法子上傳到Google通訊錄)
 2.直接讓WP7手機同步你的OUTLOOK(你可以將OUTLOOK通訊錄匯出成.csv然後在Google通訊錄中匯入)

另外,找不到應用程式的WP7用戶,建議你用手機上Marketplace直接搜尋StudyHost.com即可,Zune一般來說會慢一些有時間差。

這邊可以看到說明:
http://www.appsfuze.com/applications/windowsphone.tools/chinese-contacts,3193

2010年11月25日 星期四

Windows Phone 7的Find My Phone功能

最近玩Windows Phone 7玩得不亦樂乎...由於Windows Phone在預設的狀況下,手機的通訊錄、行事曆...等資料都是同步Windows Live帳戶(和FaceBook),使用起來方便不少(當然前提是你的資料已經在雲端...)

如此狀況下,手機內也不免全是個人的機密資料,如果不見了恐怕超過災難兩字可以形容,也因此,現在的智慧型手機幾乎都有一個間諜級的功能,就是Find My Phone。

不只是iPhone 4, 現在Windows Phone 7手機也有此功能,只需要在Settings->Find My Phone項目下,把Save my location ...打開即可。

接著,用你登入在手機上的預設Windows Live Acount登入 http://windowsphone.live.com/, 將會看到底下畫面(如果尚未設定,請先進入網頁上的Devices->Setting進行設定):


你會發現,除了可以透過GPS知道手機的所在位置,也可以強制讓手機鈴響一分鐘,或是Lock手機或乾脆把手機上的所有資料給刪了。

這樣可以確保手機遺失時的安全性。不過,當然這也表示,只要有你Windows Live ID帳號密碼的人,可以隨時知道你的手機(也就是你)的所在位置,甚至有人想到反過來應用,可以把自己的手機偷偷留在你的車上或包包裡面,就可以隨時知道你的所在位置...(這也不失為一個好應用)

總之,擁有了GPS以及3G/Wifi功能的手機,將會整合internet有更多元的應用已經是常態,手機上各式各樣的應用程式也越來越別出心裁...帶給開發人員一個無比想像的空間。

2010年11月12日 星期五

Windows Phone 7 中文應用程式開發經驗分享

從上一篇『WP7應用程式撰寫與App Hub - Marketplace 送件、審核經驗分享』到現在,已經過了十多天,在這段時間當中,我們持續的送出了大概是全球唯一的幾個中文應用程式到Marketplace,先前App hub僅開放先期開發人員上傳自己的應用程式,而且從這個月初開始,App Hub已經開放給所有註冊過的開發人員上傳自行撰寫的應用程式了,您上傳了自己撰寫的應用程式了沒?

最近這幾天,我也聽到了身邊一些朋友買到了Windows Phone手機(真是遠渡重洋的漂洋過海來台灣),很多人正開始一連串的WP7體驗之旅,我相信過不了多久,就會聽到許多的評價。

趁有空的時間,我順便整理了一下截至目前為止我們已經Submit的WP7 Application,共有七款,都已經在微軟Marketplace上架,分別是:
1.Chinese SMS:這是中文的簡訊發送程式(內建拚音輸入法),由於當前的WP7版本並沒有內建中文輸入法(但可以正確顯示中文),因此我們建立了一個內建中文輸入法的簡訊發送程式,讓使用者可以輕易地傳送中文簡訊。 這個程式算是過渡階段彌補當前WP7英文版的不足,也驗證了自行設計輸入法在WP7當中是可行的。

2.Chinese Holy Bible:中文聖經查詢系統,支援注音輸入法,可透過關鍵字查詢經文,可自由的切換章節,以及設定書籤, 內含整本中文和合本聖經。在這個程式當中,大量地使用了IsolatedStorage與相關的儲存機制,也初步嘗試了電子書的可能性,我覺得WP7的電子書軟體應該不難開發。同時間資料查找的技術全透過Linq來進行,在我所測試的手機上有相當不錯的效能。

3.Search In Chinese:支援注音輸入法的瀏覽器搜尋程式。由於目前WP7並沒有內建中文輸入,所以內建的瀏覽器並不支援透過輸入中文字來進行Google或bing搜尋,因此我們建立了這個小程式,讓使用者可以注音輸入中文關鍵字,並送入google, Yahoo, Bing等搜尋引擎進行搜尋動作。 這個程式中用上了WebBrowser控制項,可以很輕鬆的在WP7中進行瀏覽器控制。

4.Taiwan Map:這是我們的愛台灣代表作,可透過注音輸入法輸入關鍵字,例如『台北, 忠孝東路』這樣的關鍵字來查找地址,由於目前的Bing Map只支援英文,所以我們在這個程式當中,特別透過Google API查找了Google的中文台灣地圖,讓WP7上也可以顯示中文地圖(不過可惜Google Map目前是靜態的,動態的Bing Map則暫無中文)。

5.TW SMS:功能同 1. 但採用的是台灣所習慣的注音輸入法。

6.PC Remote Controller:這款軟體是純英文軟體,與中文無關,但可以把你的WP7手機當作遙控器,控制你的PC音量,簡報時相當好用。

7.Chinese Mail:這款軟體類似1和5,讓使用者可以透過中文輸入發送電子郵件,此款軟體同時支援注音語拼音輸入法。


好了,如果你已經採購了WP7手機,那別忘記用WP7上Marketplace下載這幾款軟體來試用看看,上述的所有軟體都是以免費或免費試用的方式即可下載,所以不需要額外付任何費用。如果有任何意見請mail到services@arock.com.tw 給我們。或是在討論區進行討論。

當然,中文輸入法的部分由於是模擬的,並非系統內建,畢竟這是一個過渡性的替代方案,所以你很容易可以發現還有許多可以調整的不足之處,在微軟正式推出系統的輸入法之前,我們會持續update這些應用程式,盡可能讓輸入法可以貼近使用者真正的需求。

其實,不管從哪一個角度來看,開發WP7應用程式都比iPhone簡單很多,最近在網路上的評價約莫也是如此,當然,現在iPhone和Android的用戶和軟體數量遠勝過WP7,不過就這幾周WP7的表現來說,已經算是足以讓iPhone和Android開始擔心了。

說了這麼多,我們會在12月初針對Windows Phone 7的開發經驗有一些分享,這應該是亞太地區針對Windows Phone 7應用程式開發的第一手經驗分享,如果你有興趣,不妨立即報名。
http://msdn.microsoft.com/zh-tw/gg429833.aspx
期待在會場看到各位。

2010年10月23日 星期六

WP7應用程式撰寫與App Hub - Marketplace 送件、審核經驗分享

我想大夥應該都不意外,很久沒更新Blog, 但卻看到我在FaceBook或Plurk上還健在,就表示最近真的很忙,忙什麼呢? 不難猜得出來,就是Windows Phone 7應用程式的開發。

可能很多人都已經知道,從10/11號微軟CEO Steve Ballmer親自上陣的Windows Phone 7發表會之後,數款由HTC, Dell, Samsung所生產的Windows Phone手機就要正式上市了,最快可能下個月,你就可以在通路上(或透過管道)買到手機。

當然這個階段的手機是多國語言的英文版,但對於中文的顯示絲毫不受影響,前陣子有幸試用了HTC 7 Mozart 一段時間,整體來說,看過的朋友(我自己就更不用說了)都相當滿意。WM6.5就不提了,與iPhone比較起來,操控感與流暢性毫不遜色。

但由於是英文機,整個操作介面目前當然都是英文的,但安裝了我們自己撰寫的中文應用程式之後,感覺也沒那麼生硬了。(這一篇po文暫且不談開發過程、流程與應用程式背後的意義,有興趣可參考下個月2010/11月號的Run!PC特別報導)

最近會一直很忙,是因為一直到今天,總算勉強算是走過整段軟體開發與送件(到Marketplace)的流程。類似App Store,在WP7上開發應用程式並且讓使用者可以下載使用的過程和過去WP6.5不太相同。

首先,你必須上App Hub用你既有的Windows Live ID(MSN帳號)建立一個App Hub帳號(如果不是學生,那你需要付費USD$99),且建立帳號後需要審核,強烈建議你如果申請個人帳號,請在一開始申請時填的名字就填和你的護照上一樣, 避免後續查驗時發生問題, 流程可參考這裡(中文版),然後你會收到一封來自GeoTrust的要求認證信件,你必須回這封信件且附上該附的資料,例如護照影本之類,通過審核你的帳號才能開通,一旦開通之後才能將你開發的應用程式送上 Marketplace或是在你登錄的實機上測試。

(對,如果你沒有通過身分認證,那你寫的程式就只能在模擬器上跑...,所以不管你要把寫好的程式送上微軟Marketplace或在實機上測試,你的App Hub帳號是很重要的)

接著,就是把你的程式寫完然後在實機上測過,這一部分的經驗是這樣...
1.整體來說,實機的操控流暢度和靈敏度好過模擬器,
2.在實機上的解析度比較好,文字呈現效果比較清晰,所以其實你的程式即便用預設大小的字型,你或許會覺得在模擬器上看怪怪的,但在實機上顯示起來還算不錯。
3.由於CPU不同,模擬器上的程式運行效能普遍好過實機,請注意這跟前述 1. 不衝突,在實機上的測試感覺是,動畫、畫面資料的捲動...等動作都比模擬器流暢,但請注意,如果你的程式耗用大量的CPU資源進行運算(例如我在某個程式中嘗試做了手寫辨識的運算),在模擬器上跑可能很順,但請注意在實機上運行可能會比較慢一些。
4.如果有需要撥放音效,或是多媒體的處理,建議使用XNA,效能比起Silverlight,會好不少。
5.如果你要大量的存取Isolated Storage,請注意也是在模擬器上的效能好過實機,因此建議你必須在實機上測試過。

另外,你覺得程式寫的不錯了,準備送上Marketpace讓使用者下載,請在Submit前(其實最好是開發前)先看過這份文件,這是微軟審核你的應用程式的標準,你送審的程式,會在3-5天左右的時間內回覆,並且提供你一個test results的report(PDF),其中如果有測試失敗的項目,則會告訴你對照上述那份文件的哪一條Validation Guideline有什麼問題,並且建議你該如何做。

如果審核通過,你會收到來自Windows Phone Marketplace 的信件,恭喜你應用程式已經通過審核,且同時間,你也會在App Hub上看到你的帳戶底下該應用程式已經通過查驗...

大約半個工作天,你的程式就會在Marketplace上架,等到在Marketplace上架之後,你的應用程式就可以從WP7手機上下載使用了。

透過Zune軟體也可以同步看到你的應用程式:


你可以在App Hub上Submit最多五個免費的軟體到Marketplace,沒有限制個數的付費軟體,在送件填寫應用程式資料時,會要求你填寫(決定)手機使用者在Marketplace上下載你應用程式時,需要付費的金額,這個金額會扣稅之後進入你的當時填寫的銀行帳戶。

當然,上述的所有應用程式送件(Submit)動作,目前我個人都建議使用英文,包含你在送件時對應用程式的介紹描述,這樣審查時會比較容易通過。後續,我會再詳細分享整個送件的流程和內容,還有撰寫程式的注意事項。

其實整個流程算不複雜,而在這個階段,對於有興趣撰寫WP7應用程式的開發人員,先學習Silverlight以及申請一個App Hub帳號是必須先準備好的作業。

2010年10月11日 星期一

WP7準備亮相...

台北時間晚上九點30左右, WP7準備正式出現在世人面前...
台灣主要的生產廠商是HTC,有興趣的朋友可以在網路上看到相關的新聞...
http://mag.udn.com/mag/digital/storypage.jsp?f_ART_ID=276515

當然,沒在台灣盛大發表,很大一個原因是因為目前登場的機種是英文版,雖然支援Multi-Language可正確無誤的顯示中文,但目前缺少了官方的中文輸入法(狀況就如同iPad, 和早期的iPhone相同)。

不過不要緊,事實上熟悉Silverlight開發技術的開發人員大多已經磨刀霍霍準備開始跨入WP7的開發領域(這也是我最近忙的沒法更新Blog的原因),很多讀者和學員問到,我在Techdays demo的WP7應用程式不是明明就有中文輸入法嗎? 怎麼說這個階段沒有呢?

答案是,中文輸入法是自己做的!
在這個階段,如果你的WP7應用程式需要中文輸入功能,你可能得考慮隨著應用程式綁一個輸入法,目前我們也正在開發相關的輸入法套件,以因應這個過渡階段的需要,相關資訊可以參考底下網址:
http://www.arock.com.tw/ProductsInfo/WP7.aspx

WP7中文輸入法Demo:

2010年9月29日 星期三

感謝大家熱情參與 Tech Days 2010

感謝大家今天熱情參與今年我所負責的這兩場TechDays場次,在會場看到許多熟悉的老朋友,倍感親切,底下是今天分享的投影片內容,希望對各位有所幫助。

WPH303 Windows Phone 7 應用程式開發 - 使用 Silverlight [投影片]
WUX308 Silverlight 安全實務 [投影片]

2010年9月27日 星期一

TechDays 2010 研討會 的兩個場次

今年TechDays 2010我所負責的兩場研討會,依舊是我所熱愛的Silverlight主題,更重要的是今年還有WP7的加入,相關的資料在底下,期待在會場看到大家。

Windows Phone 7 應用程式開發 - 使用 Silverlight
Silverlight 技術是目前唯一跨足微軟 Mobile, Business App, Web Site, Desktop/Web/Embedded 的應用程式開發技術,開發人員將可以最小的投資,得到最大的開發效益。在這個場次當中,我們將介紹 Silverlight 開發技術在 Windows Phone 上的應用, 說明如何透過利用Visual Studio 2010 迅速開發 Windows Phone 應用程式。
課程代碼:WPH303
講  師:董大偉
適合對象:開發人員課程等級:300 - 進階應用
開課時間:2010年09月29日 13:30-14:40
上課地點:101AB

Silverlight 安全實務
隨著 Silverlight 頻繁的導入企業,逐漸成為商業應用程式和網站的開發趨勢之一後,開發人員開始需要更關切 Silverlight 應用程式的安全性議題。在這個場次當中,我們將會由淺入深,討論 Silverlight 應用程式開發時的安全機制,以及需要注意的問題,以確保應用程式運行時的安全性。
課程代碼:WUX308
講  師:董大偉
適合對象:開發人員,互動設計師課程等級:300 - 進階應用
開課時間:2010年09月29日 08:40-09:50
上課地點:貴賓廳

2010年9月11日 星期六

你還有多少時間給自己

最近身邊很多朋友在工作上做了(或準備做)一些調整,但卻全不是因為想賺更多錢,或是工作上發生瓶頸,幾乎都只是為了一個原因,想找回人生中的一點時間,留給自己。

在演講時,對於準備(或剛)畢業、退伍,初出社會的年輕人,我一向只將重點放在積極、樂觀、打拼這幾個字上,正在起步的人生,需要的是尋找一個方向,然後放膽往前衝,跑得快,是這個階段最重要的目標,所以年輕人,你要卯足全力。

隨著年紀慢慢走向中年,生活當中開始發生了一些改變,我開始意識到,很多人跑得很快,卻不知道自己到底要跑去哪裡,或是這條跑道是不是我該衝刺的方向?

也或許,你變了,變得有家人依賴,變得有員工或部屬要照顧,變得不再能只顧慮到自己一個人的心情,甚或是有時候你沒有變卻發現自己的跑道變了,跑著跑著發現似乎這條路跟當時熟悉的不同…讓你猶豫是否該繼續這樣跑下去…

翻閱這一期的商周,提到了『最後14堂星期二的課』作者,當時寫作時的心境,我依稀還有印象,當年這本書對自己所帶來的影響,在心裡所立下的志願和對人生的期待,但隨著年紀漸長,生活開始被工作佔滿,卻讓我很容易忘了起初的信念,對工作和生涯的規劃與期許,還有對自己這一生所許的願望。

一時興起,我翻了三年前那個已經關閉了的舊blog上的文章(感謝現今的資訊科技,讓我們可以留下一點人生的痕跡…),當年的blog叫做The Way I Am,後來的blog(就是你現在看的這個)叫做KeepWalking,坦白說,在文字遊戲上有些有趣的意義…

當年,最後一篇blog,我寫到…
----------------------------
曾經有一段時間,數著園區的路燈和蝴蝶,想著未來要怎麼實現夢想,過一個自己喜歡的生活,數年過去,確實很多願望都已經實現(感謝上帝),只是不太敢去想,為了這一切所花費的時間和努力,是否真的是我夢寐以求的願景?人生的天平,會不會太過了頭,過於偏向哪一個方向而迷失自己?

每一年總有一段時間,有些事情會莫名其妙的迸出來提醒自己,該回頭想想每一步,想想自己的初衷是否還在那裡,感謝上帝,謝謝祢在我徬徨的時後引導我,在我任意妄為的時候提醒我,在我無助的時候幫助我,雖然我不是那麼合祢心意…

當然,就像我喜歡那個字--KeepWalking,所以理所當然,未來的路還是要繼續的努力走下去,我相信成功的人除了幸運和努力,更多的時候是,不管遭遇任何困難,都毫不考慮選擇放棄…

就算有時候碰到不如意,so what,人生那麼短,這一切都會過去...
就算有時候如魚得水,過的很得意,也別忘記提醒自己,同樣的,這一切都會過去...

忘了是誰曾經跟我說,...
有意義的人生,不是獲得了多少東西,而是為別人留下了多少東西...
放眼望去,快樂的人,從不因為自己擁有了很多東西,而是能夠給予...

----------------------------
沒想到三年前的自己,腦袋還比現在清晰…

坦白說,這幾年寫blog讓我很滿足也很開心,但想想我有些遺憾,隨著blog看的人越來越多,我能寫的東西就越來越少,也因為年紀,也早已沒有當年會因為有感而發就立即下筆的衝動與犀利。頂個老師的名字其實很無趣,我更愛學員們直接叫我David。

記得當年我還在園區,還在想人生該走的方向,也比較有時間停下來想想自己,當時我很喜歡張文亮老師的一篇短詩:

上帝給我一個任務,叫我牽一隻蝸牛去散步。
我不能走得太快,蝸牛已經盡力爬,
每次總是往前挪那麼一點點。
我催牠,我唬牠,我責備牠,
蝸牛用抱歉的眼光看著我,彷彿說:「人家已經盡了全力!」
我拉牠,我扯牠,我甚至想踢牠,
蝸牛受了傷,牠流著汗,喘著氣,往前爬。
真奇怪,為什麼上帝叫我牽一隻蝸牛去散步?
「上帝啊!為什麼?」天上一片安靜。
「唉!也許上帝抓蝸牛去了!」
好吧!鬆手吧!反正上帝不管了,我還管甚麼?
任蝸牛往前爬,我在後面生悶氣。
咦?我聞到花香,原來這邊有個花園。
我感到微風吹來,原來夜裡的風這麼溫柔。
慢著!我聽到鳥叫,我聽到蟲鳴,我看到滿天的星斗多亮麗。
咦?以前怎麼沒有這些體會?
我忽然想起來,莫非是我弄錯了!
原來是上帝叫蝸牛牽我去散步。

----------------------------

人生的境遇,有時候起起伏伏有時候斷斷續續,有時候走在高峰可以讓你忘了呼吸,坦白說,路還是要也一定會繼續走下去,但請別忘記,關鍵的時刻,多留一些時間給自己。

2010年8月20日 星期五

Silverlight toolkit中的Theme控制項

先前我們曾經提到過,Silverlight的所有控制項,都可以透過Style的方式來替換呈現的外觀樣式,當然這些樣式你必須自行設計,不過在Silverlight Toolkit當中,已經內建了數種樣式可以讓開發人員直接使用,同時Silverlight Toolkit當中也提供了相對應的Theme控制項,讓您可以很方便的動態切換外觀樣式如果你安裝了Silvelright toolkit,可以在場景中最下層墊一個Theme控制項:
<!--在Grid控制項外墊一個Theme-->
<toolkit:Theme Name="theme1" >
<!--Grid中的控制項可以自由佈置-->
<Grid >
<Button Margin="19,79,0,0" Content="ShinyBlue" Name="Button1" Click="Button1_Click" />
<sdk:Calendar Name="calendar1" />
<sdk:DatePicker Name="datePicker1" />
<ProgressBar Name="progressBar1" />
<Button Content="RainierOrange" Name="button2" Click="button2_Click" />
</Grid>
</toolkit:Theme>

接著,請在Button上撰寫底下的指令碼:

private void Button1_Click(object sender, RoutedEventArgs e)
{
//切換成ShinyBlue
theme1.ThemeUri =
new Uri("/System.Windows.Controls.Theming.ShinyBlue;component/Theme.xaml", UriKind.RelativeOrAbsolute);
}
private void button2_Click(object sender, RoutedEventArgs e)
{
//切換成RainierOrange
theme1.ThemeUri =
new Uri("System.Windows.Controls.Theming.RainierOrange;component/Theme.xaml", UriKind.RelativeOrAbsolute);
}
請特別留意,上面的程式碼會讓theme1控制項的透過抓取resource的方式來取得style定義,而上面程式碼中所撰寫的『System.Windows.Controls.Theming.RainierOrange』指的是組件(.dll)位置,而『Theme.xaml』則是Resource名稱,由於Silverlight Toolkit當中已經幫我們設計好了數種不同的樣式,您可以在安裝了Toolkit之後,透過Add Reference將樣式加入:

當然,加入這些樣式會讓你的XAP檔案跟著膨脹,請選擇你需要的外觀樣式即可。

如此一來就可以動態切換樣式了,相當的簡單:

2010年8月16日 星期一

Silverlight Data Binding中的Static Resources Binding

最近我在上課中曾經提到,Silvelright的Data Binding機制是如何地與過去ASP.NET和WinForm不同,這一部分一直是我非常熱愛Silverlight技術的原因,從最簡單的Data Binding機制,到Validation然後是data annotation,接著是Element to Element Binding,各式各樣精彩豐富的資料處理機制和效果,全部都藉著Data Binding技術來實現,連MVVM裡面都有Data Binding的影子...

而Silvelright技術的Data Binding又和ASP.NET/WebForm如此的不同,叫人又愛又恨,愛的是它功能之強大,幾乎可以說是貫串整個Silverlight開發架構,而讓人討厭的則是他和過去ASP.NET與WinForm時代的data Binding有那麼些許的不同。

然而,不管怎麼說,學習Silverlight時Data Binding絕對是你無法忽視的一大塊重要領域。這也是我Silvelright 4.0新書中花了將近萬把字很認真很努力的把Data Binding說個仔細的原因。雖然如此,我最喜歡的還是在課堂上和學員們分享Silverlight的Data Binding技術,上一期課程的學員應該可以很明顯的感受到,我們在Data Binding和N-tier架構概念的介紹所花的時間與精力。

原因都只有一個,因為Silverlight的data Binding非常、非常重要!

同時間由於VS2010開始支援Silvelright的所視即所得設計,你會發現我們可以在VS2010中點選某個UI物件,物件的幾乎每一個屬性都可以設定Binding,而除了Element To Element Binding之外,讀者一定常常看到在微軟官網介紹的Silvelright應用程式中,常常利用Data Binding技術Bind到一個或多個Static Resources。

這種場合相當特別,一般來說,我們在ASP.NET/WinForm是沒有這種概念的,Data Binding 繫結到的資料來源都是後面(後端,例如DB)傳過來的,但Silverlight的Data Binding由於是Bind到一個Object,所以可以寫程式new一個Object,然後Bind起來。

可是,往往我們這樣做會很麻煩,Binding動作會被切分成兩段,一段是在XAML碼上面寫Markup Binding指令,另外一段是寫程式new一個object或一個Collection,接著藉由設定UI Element的DataContext屬性或ItemsSource屬性來進行Binding。

有沒有可能,我們可以透過UI XAML描述就可以new出一個物件,並且進行Binding呢? 當然可以,例如,我設計了一個類別如下(請留意這個類別實作了INotifyPropertyChanged),它表達一筆資料:
namespace BasicDataBinding
{
//一筆資料的類別結構
public class AddressBookItem : System.ComponentModel.INotifyPropertyChanged
{
private string _Cname;
/// 姓名
public string Cname
{
get { return _Cname; }
set { _Cname = value; (...略...) }
}
private string _Tel;
///
/// 電話
///

public string Tel
{
get { return _Tel; }
set { _Tel = value; (...略...)}
}
private string _Address;
///
/// 地址
///

public string Address
{
get { return _Address; }
set { _Address = value; (...略...) }
}
//實作事件
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
//觸發事件用函式
public void NotifyPropertyChanged(string propertyName)
{
(...略...)
}
}
}

然後我設計該類別的集合(請注意繼承自ObservableCollection):
namespace BasicDataBinding
{
//繼承ObservableCollection泛型類別
//表達一堆AddressBookItem的資料集合
public class AddressBooks : System.Collections.ObjectModel.ObservableCollection
{
(...略...)
}
}
請留意namespace都在BasicDataBinding。

好了,有了這些個類別之後,我們可以透過撰寫底下程式碼來建立DataForm與data之間的DataBinding,例如:
//宣告資料存放物件集合
AddressBooks data=new AddressBooks();
//將資料與DataForm繫結
this.dataForm1.ItemsSource = data;
但這樣要寫程式碼,如果是初階程式設計師,或是Designer,或是痛恨寫Code的開發人員,會覺得這樣太痛苦。不能透過VS2010或Blend在XAML上拖拖拉拉設定一下就完成Data Binding嗎? 可以。

請先在XAML上註冊一下這個namespace:
<UserControl x:Class="BasicDataBinding.MainPage"
xmlns:LocalData="clr-namespace:BasicDataBinding">

然後在Resources區段宣告它:

<UserControl.Resources>
<LocalData:AddressBooks x:Key="MyAddressBooks">
</LocalData:AddressBooks>
</UserControl.Resources>

這樣的宣告,就等同於你new一個AddressBooks,並命名為MyAddressBooks,例如

AddressBooks MyAddressBooks=new MyAddressBooks();

但不一樣的是,在XAML中的宣告:
1.它是resource,便於管理或重用。
2.它可以被VS2010看得懂,並且在設計階段就透過Wizard來進行Binding。

所以,這樣我們在XAML中等同於new了一個ddressBooks集合物件,名稱為MyAddressBooks,如此一來,我們可以直接針對DataForm的ItemsSource屬性進行Apply Binding:

在Wizard中只需要透過設定的方式即可:

這樣的概念和技巧在Silverlight當中常常被用到。一開始的時候我發現很讓人難懂,特別是有ASP.NET或WinForm經驗的學員不容易明白Silverlight的Binding是怎麼回事,因為你會發現DataForm的XAML碼中,資料繫結指令是:
<toolkit:DataForm Margin="12,180,354,12" Name="dataForm1" ItemsSource="{Binding Source={StaticResource MyAddressBooks}}" />

就這麼一行,它告訴你繫結到StaticResource MyAddressBooks,但StaticResource MyAddressBooks又是從哪來的呢? 即便你找到前面宣告的

<UserControl.Resources>
<LocalData:AddressBooks x:Key="MyAddressBooks">
</LocalData:AddressBooks>
</UserControl.Resources>
又很難理解LocalData這個namespace又是從何而來的,裡面的AddressBooks又在哪?...???

但是老外撰寫這一類的Silverlight範例特多,有時候又沒解釋清楚,常常讓開發人員只看範例會搞不清楚到底是怎麼回事,但,其實理解後發現也不是很困難,這卻是一個相當簡單卻很好用的概念。Silverlight把過去我們在TechED提到過的『宣告式語法』概念發揮的淋漓盡致,不只是宣告一個UI,甚至可以宣告一個物件(Object),而記憶體中的物件和Silvelright的UI Control又可以Binding,這又是Silvelright與WPF的獨特之處。

用慣了之後,讓人真的很enjoy~

2010年7月28日 星期三

關於Silverlight的Style機制與ResourceDictionary

前幾天在FaceBook專頁明城提到了關於Silverlight中的Style機制,才恍然想起在先前的Blog和書上幾乎都完全沒有提到ResourceDictionary這個在SL3之後被加進來的物件,因此趁著SL4的書籍在做最後階段的整理,順便在Blog上提一下這個物件。
ResourceDictionary讓我們可以在宣告Resource時,以Dictionary的方式來建置,例如:











這樣有一個好處,ResourceDictionary是繼承自Dictionary類別的物件,當Resource非常多的時候,或是Resource是動態載入的時候,開發人員可能無法記得或熟知每一個Resource的名稱,我們可以透過底下這樣的程式碼在ResourceDictionary中確認某一個資源設定是否存在:

//判斷TextBoxStyle1是否存在
if (this.RD1.Contains("TextBoxStyle1"))
{ … }

因此,當資源被放置在ResourceDictionary中之後,我們也可以透過程式碼來動態的設置樣式,例如:

private void button1_Click(object sender, RoutedEventArgs e)
{
//判斷TextBoxStyle1是否存在
if (this.RD1.Contains("TextBoxStyle1"))
{
//套用Resource
this.TextBox1.Style = RD1["TextBoxStyle1"] as Style;
this.TextBox2.Style = RD1["TextBoxStyle1"] as Style;
this.TextBox3.Style = RD1["TextBoxStyle1"] as Style;
}
else
{
MessageBox.Show("找不到此資源");
}
}
private void button2_Click(object sender, RoutedEventArgs e)
{
//判斷TextBoxStyle2是否存在
if (this.RD1.Contains("TextBoxStyle2"))
{
//套用Resource
this.TextBox1.Style = RD1["TextBoxStyle2"] as Style;
this.TextBox2.Style = RD1["TextBoxStyle2"] as Style;
this.TextBox3.Style = RD1["TextBoxStyle2"] as Style;
}
else
{
MessageBox.Show("找不到此資源");
}
}

如此一來,我們不僅可以利用樣式動態決定控制項的外觀,也可以透過程式碼一次設置多個控制項,讓場景中的控制項可以有一致性的外觀。

當然,還有其他更多的內容,可以參考我們即將出版的SL4書籍。
此範例請參考[CodeStorage]。

有興趣的朋友也可以參考明城寫的這篇文章:
http://kenny.microdream.tw/index.php/archives/836.html

2010年7月24日 星期六

以擴充方法替Canvas, Grid...等容器建立淡入淡出效果

從.NET的語言導入的擴充方法之後,我一直覺得它是一個挺方便的技術。
而開發環境的配合,也讓擴充方法的便利性更加的高。

舉個例子來說,我們寫了一段以程式碼動態為按鈕建立滑鼠移過時的淡入淡出效果,透過擴充方法,我們可以在主程式當中這樣使用:

圖中的ButtonPanel是繼承自Panel的Canvas物件,當然,Canvas物件是沒有registerFadeEffect方法的,但由於我們替Panel建立了擴充方法:

public static class MyEffects //改為靜態類別, 以適用擴充方法
{
//註冊事件處理函式(擴充方法版)
public static void registerFadeEffect(this Panel container)
{
//設定先為0.1
container.Opacity = 0.1;
//如果滑鼠進入
container.MouseEnter += container_MouseEnter;
//如果滑鼠離開
container.MouseLeave += container_MouseLeave;
}

使得VS2010可以直接在ButtonPanel後面帶出該擴充方法,呼叫起來相當便利。

請注意建立擴充方法的關鍵在其所屬的類別為靜態類別,且方法中第一個參數前加上this, 就表示該方法要提供給該參數所屬型別的所有物件使用。

程式碼下載請參考[CodeStorage]。

2010年7月20日 星期二

CodeStorage最新下載排行

CodeStorage最新下載排行(2010/7/1~2010/7/20)


想看看大夥對什麼比較有興趣? 請點選[這裡]。

2010年7月19日 星期一

ASP.NET AJAX中的HTML編輯器

HTML Editor是在最近這幾個版本的ASP.NET AJAX Control tooklit當中被加入的,不管是APS.NET 3.5或4.0都可以使用。實際上使用的時候和坊間一般的ASP.NET HTML編輯器如出一轍,相當簡單:

可以透過content屬性設定或取得HTML值:

protected void Button1_Click(object sender, EventArgs e)
{
//取得HTML碼
this.Literal1.Text= this.Editor1.Content;
}

但請留意,不要將HTML值填入TextBox控制項中,會不work,也有安全性的顧慮。另外使用前請記得先引用AJAX Control Toolkit套件,並從工具箱中將Editor拖曳到頁面中,請務必設定其width與height屬性。

範例下載請至codeStorage:[下載]

2010年7月16日 星期五

透過ASP.NET AJAX 4 Client Libraries實現 Modal Popup Window

現在很多網站都導入了AJAX技術,透過AJAX技術在網頁上實現類似Windows的強制回應視窗(Modal Popup Window)效果,像FaceBook、Google都有廣泛的使用這些功能。

底下連結的這個範例介紹如何透過ASP.NET AJAX Client Libraries,不需要引用特定.dll,只需要參考MS CDN即可輕鬆在網頁上建立這樣的凸顯式強制回應視窗功能。

程式碼約莫如下:

< script type="text/javascript" >
Sys.debug = true;
Sys.require([Sys.components.watermark, Sys.components.modalPopup], function () {
$("#Button1").modalPopup({
PopupControlID: "window", //視窗物件名稱
OkControlID: "buttonOK", //設定OK鈕物件
CancelControlID: "buttonCancel", //設定OK鈕物件
OnOkScript: okayWasClicked, //按下Cancel鈕要做的事情
OnCancelScript: cancelWasClicked, //按下Cancel鈕要做的事情
BackgroundCssClass: "modalBackground" //背景顏色
});
$("#UserName").watermark("<請輸入姓名>", "watermark");
$("#Pwd").watermark("<請輸入密碼>", "watermark");
});
//按下OK鈕要做的事情
function okayWasClicked() {
Sys.get("#Label1").innerText = "返回確定";
}
//按下Cancel鈕要做的事情
function cancelWasClicked() {
Sys.get("#Label1").innerText = "返回取消";
}

完成程式碼請[下載]

2010年7月14日 星期三

ASP.NET的顏色選擇器範例

這個範例是以ASP.NET AJAX 4 Client Libraries中所提供的ColorPicker機制建立的顏色選擇器,開發環境中不需要安裝任何套件,只需要引用微軟CDN當中的Javascript Libraries即可,相當方便好用。[下載]



2010年7月13日 星期二

三個ASP.NET小範例

我在Code Storage上放了幾個ASP.NET的範例,分別是:
●以Cookies記憶登入帳號:[下載]
這個範例展示如何類似Google或是一般入口網站以Cookies紀錄登入者帳號,在一定時間內不需要重登入的機制,以仿Forms驗證的方式來進行。

●AJAX Client Templates與遠端資料存取:[下載]
這個範例透過了AJAX Client Templates和Web Services遠端資料存取的技術,讓頁面上的UI可以經由Services直接Bind(繫結)到遠端的資料。其中也使用到了ADO.NET Entity Framework與LINQ等技術。這個機制讓ASP.NET的Data Binding有機會在前端完成,不經過後端的C#/VB指令碼也可進行。

●浮水印文字方塊(Waterwark textBox):[下載]
這個範例使用了ASP.NET AJAX 4的Client Libraries,以pure JavaScript方式(不需要引用ASP.NET AJAX Controls Toolkit的.dll)在頁面上建立出具有浮水印的文字方塊(Waterwark textBox),並且利用了微軟CDN(Content delivery network)讓網站的效能更好,管理上也更加簡潔。如果只想要在網站尚設計出簡單的AJAX效果,但不希望引用一整個ASP.NET AJAX程式庫時相當好用。

2010年7月6日 星期二

Noticeboard - Silverlight訊息看板套件

在撰寫Silverlight應用程式的時候,有幾種訊息顯示方式,典型的方式是透過ChildWindow或是MessageBox,但各有一些特點或缺點(例如ChildWindow要自己設計樣版,且兩者在顯示時主場景均無法操作),有鑑於這個問題,Silverlight在OOB Mode當中,加上了Notification功能,但在非OOB Mode中卻缺少了有類似效果的機制。

因此我們設計了一個類似的功能,使用的方式相當簡單:

StudyHost.Silverlight.Noticeboard _Noticeboard;
_Noticeboard = new StudyHost.Silverlight.Noticeboard(this.LayoutRoot);
_Noticeboard.show("這是測試按鈕顯示的文字...",3000);


即可輕鬆的達成底下這樣的效果:


如需下載此套件,可參考:[Noticeboard套件]

2010年6月30日 星期三

在Silverlight中透過WCF存取Session資料

有一些程式碼,是屬於『簡單,但是很重要』的部分。像現在我們的這個範例就是。
在上課時不只一個學員(嚴格說起來有很多很多學員),都很關心Silverlight和ASP.NET的整合,不論是資料的交換,或是ASP.NET頁面上的互動和整合,由於Silverlight以透過ActiveX插件的形式崁入網頁中,使得學員以為要進行資料交換很困難或是完全不行。

這真可是誤會大了,對於Silverlight來說,與遠端(伺服器端)溝通的方是最典型的就是透過WCF Services(當然,傳統的Web Services也行),所以只要透過在Silverlight場景中呼叫WCF Services,就可以輕易的存取Session資料。

例如,你可以建立一個底下這樣的WCF Services:

namespace AccessSessionViaWcfServices.Web
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1
{
[OperationContract]
public string GetSession(string SessionName)
{
// Add your operation implementation here
return System.Web.HttpContext.Current.Session[SessionName].ToString() ;
}

[OperationContract]
public bool SetSession(string SessionName,string SessionValue)
{
// Add your operation implementation here
System.Web.HttpContext.Current.Session[SessionName] = SessionValue;
return true;
}
}


關鍵在於這個Wcf services請務必選擇Silverlight-enabled WCF Services:

同時透過 System.Web.HttpContext 即可存取與傳統 HttpContext有關的資訊。

建立好Services之後,即可在Silverlight當中以非同步方式呼叫:

private void button1_Click(object sender, RoutedEventArgs e)
{
ServiceReference1.Service1Client srv = new ServiceReference1.Service1Client();
srv.GetSessionCompleted += (s, para) =>
{
this.textBox2.Text = para.Result;
};
srv.GetSessionAsync(this.textBox1.Text);
}

即可輕易的取得Session的值,進而與ASP.NET交換資料,還可以利用這樣的機制處理帳號登入的問題,讓Silverlight也可以輕易的撰寫出具有與ASP.NET相容的登入與權限機制。

完整的範例程式碼請參考[CodeStorage]

2010年6月19日 星期六

關於 如何快速增進程式功力...

最近有網友在Blog上問到關於學習程式設計的問題(如何快速增進程式功力...),我也很開心nowshow幫我做了一些回覆。(其它潛水多年的朋友們,該是甦醒的時候了...)

其實我一直很想找個機會和大家聊聊『學習』這個主題,因為自己走了很多的冤枉路,所以總覺得有好多東西想分享。只是有時後工作忙,忘了,有時候寫著寫著發現詞不達意,放棄了。前陣子常這樣,說來你可能不相信,其實在這個Blog裡的已發表文章數量差不多只是所有所有文章數量的2/3,其他的我都沒寫完,擱著...久了就乾脆放棄不發表了。最近想打破這個限制,所以想到什麼寫什麼,也請讀到的朋友們原諒文章中用詞的隨性,畢竟這年頭『卸卸』之類的火星文充斥,我們這些老頭們寫的文章應該算工整了。

回頭談學習,如何快速增進程式功力...?
說來慚愧,但不怕各位見笑,打從我學習程式設計以來,到目前為止,只『付費』上過一次電腦課程,而且還是國小約莫3,4年級,此後,我從沒上過任何一堂課。程式設計幾乎都是自學。

請千萬別誤會,我不是說上課不重要,特別是自己身為講師,如果我讓大夥覺得上課不重要,豈不是滑天下之大稽? 首先,我雖然沒付費上過電腦課,但自從開始以程式設計謀生(我的第一個收費的專案,是在高中時代寫的台北市某校的招生系統,當時還是用Clipper配合讀卡機呢)之後,只要有業界的教育訓練我都盡可能參加,每次的TechED我也都想辦法到場(公司出錢。對,我也曾和大家一樣坐在下面乖乖當聽眾),觀念和眼界的建立是相當重要的。我身邊也有一些朋友們,是透過資策會或是其他知名的教育訓練中心的套裝課程,開始進入程式設計的領域。也有不少是科班出身,然後投身資訊領域。這些養成對他們都有相當大的幫助。

但我要說的是,不管怎樣的養成,這絕對只是一個起頭,不管你曾經經過怎樣的訓練,你都只能拿到一張入場券,進入業界之後,才是真正挑戰和學習的開始。我相信幾乎每一個軟體開發從業人員都同意,如果你討厭常常學習新東西,目前的軟體業肯定不適合你。

我回頭想了一下最近15年,我比較我『學習』一門技術的時間,和『使用』一門技術的時間,大家要不要猜猜看是『學習』的時間多還是『使用』的時間多? 我發現,隨著近幾年技術演進的速度越來越快,我花在學習的時間越來越長(不過這也因為身為講師或前導廠商的我們在學習這門技術的當下,相對而言手邊的資源會比大夥來的少一些,技術愈成熟,學習資源其實就會愈多)。

在當前的資訊環境下,時常『學習新技術』來『解決問題』,絕對是優秀開發人員的特質。反過來講也成立,我幾乎在每一個優秀的開發人員身上,都看到『學習力』這個特質。有能力自己找到Resource(不管是透過書籍、影片、課程、研討會...),持續學習和成長,絕對是一個重要的關鍵。請注意關鍵在學習新技術來解決問題,而不是漫無目的學新東西,或是道聽塗說看市場趨勢或風向就亂學。(解決問題這個目標是一切的根本,這待會說。)

但學習這件事情很有趣,你一定聽過『突飛猛進』這個字,武俠小說裡也有過某個蠢蛋被打通任督二脈之後,就突然習得絕世武功之類的情境。我覺得並非不可能,而關鍵就在你是否奠定了一個很扎實的基礎。怎麼說呢? 對我來說就是這樣,我第一個學的程式語言是 Basic,當年是Apple II時代,那種燒在ROM裡面的Basic語言,坦白說那時候我照著書上抄了N百個程式也搞不清楚它在幹嘛。錯了也不知道該怎麼改,當時我是國小四年級左右,連英文單字都還有點問題。但興趣卻慢慢培養了起來。(我一直覺得,好的養成書籍或授課講師,把學員帶(教)到有興趣,讓學員願意自己去找答案,比把知識硬灌給學員來的重要多了)

一直到國中,我有機會自修學習C, Assembly(當時施威銘先生的書對我有相當大的幫助),我要很認真的說,C和Assembly對我的工作完全沒幫助,但卻對我日後的學習奠定下了一個難以磨滅的影響和超級穩固的基礎。在這邊我要說的是,你越熟悉了解某種技術基礎的運作概念,越能夠全盤掌握,觸類旁通。最近這幾年大家都在談Design Pattern,UML,或是TDD...等,每隔一段時間就會有新名詞。但我要說的是,如果你對基本物件導向程式設計沒有足夠的自信(沒有足夠的認識),我建議你真的要考慮從基本開始,穩扎穩打才是王道。

如果你不知道繼承的意義(為何要有繼承的機制?) 如果你搞不清楚類別和介面的使用時機,如果你對於抽象類別、泛型、多重繼承這些概念還有些陌生,或是你不曾從頭到尾寫過一個類別,用類別表達某一個實體(諸如訂單、一個功能、或是設計過一個資料存取機制...),那千萬別去碰那些其它聽起來更高深的東西。因為,你的基礎愈扎實,學習才能愈有效。否則那些新東西只會擾亂你的大腦。時常檢視一下自己的基礎,發現不足之處就趕快補齊,在台灣,身為開發人員,我們要學習的東西很多,沒有哪一個人敢說自己什麼都會的,總是有不足之處,古人『聞過則喜』, 資訊人員則是『聞不懂則喜』。趕快補齊,學到了(用過的)才是你的,相信我,越基礎的東西越重要。

有了好的基礎,加上持續且足夠的『學習力』,你即便不出類拔萃但大概也會是工作場合中所謂的『人才』了,接著,一個相當重要的關鍵能力,就是學習培養自己『解決問題的能力』。

說真的,這麼多年下來我的感受是,一個開發人員(或是IT人員)與其說學習寫好程式,不如說學習培養自己解決問題的能力。資訊科學是應用科學,尤其我們都在業界工作,不是在學術單位,『能用』才是王道,『能解決問題』才是所有事情的關鍵。千萬別忘記,你學習的幾乎所有東西,都是為了解決相對應的特定問題。例如匿名網友說到的,程式設計裡面的遞迴、物件導向...等技術,都是為了解決問題、或對問題提供更好的解決方案。

我自己的經驗,所謂『程式開發』就是等同於『問題解決』,一個一個的問題,一個一個慢慢面對、處理,面對客戶需求時要怎麼達成? 為了效能該怎麼規畫? 如何讓專案團隊更快速的開發和合作? Build完之後多少個Error, 該怎麼解決? 測完之後多少個Bug、該如何修改? 無法實作時該怎麼walkaround? 碰到技術障礙或瓶頸該怎麼面對? ... 每一個IT人員或開發人員每天的工作幾乎都是 『問題→思考→解決方案→行動』,然後一直是這樣的循環。

整個關鍵都在『培養自己解決問題的能力』,不管是Debug、或是Creat Solutions,都是一樣的。不管你的角色是PM、SA、SD、Developer、Presale...幾乎放諸四海皆準。

但很有趣的是,我曾經看過一些開發人員(許多是我的合作夥伴、學員、或同事)超級討厭問題、不想自己找解決方案,或對問題完全沒有思考能力...這幾個現象, 曾經讓我很不解,如果開發人員超級討厭問題,不曾享受過那種解決問題後的喜悅和成就感,表示他絕對選錯行,現今的軟體產業會榨乾他,他很可能會活在水深火熱之中。換工作的次數會很頻繁,直到他放棄這個行業為止。

不想『自己』找解決方案, 表示該員有些投機或懶惰, 就算他很聰明,在這個行業大概也只能待個幾年,我偶而會看到一些開發人員對於新問題常常直接放棄(請注意,不是真的束手無策,是『直接放棄』)然後立即找外援,他的工作模式是『找範本->改程式->碰到問題->找人幫忙』,而不是『規劃->寫程式->碰到問題->找解決方法』,在Google誕生之前,這類開發人員的壽命很短,常常夭折,多半靠身邊的同事或高手幫他解決問題,擅長人際關係遠超過程式設計。但Google誕生之後,有許多此類開發人員無形中多了一個虛擬的幫手,上焉者善於利用工具,也在業界找到了安身立命的空間。但我要說的是,如果是初學者真的無可厚非,大夥都是從零開始,朋友們技術人員互相幫忙也是常有,但如果在業界待了一兩年,卻還是始終只靠別人幫忙解決問題,那恐怕不是長久之計。

對問題沒有思考能力(表現出來的現象就是毫無頭緒,連要怎麼try都不知道),是超級慘的一種狀況,我相信幾乎每一個人都曾經有過這樣的經驗(連身為講師的我們也不例外),但如果你根基扎實,學習力強,很快的就能脫離這個狀況。會發生這樣的狀況,很可能是因為基礎知識不足...這時候,重新學習把基礎補齊是唯一的解決方案,也有可能是過去不常靠自己解決問題,那恭喜你,終於碰到成長的機會了。盡量自己試試看,不要放棄,你自己解決的問題越多,培養出的能力就越大。

我還看過一些更有趣的現象,有一些開發人員,碰到了某個狀況,或是某個bugs怎麼也不過,屢try屢錯, 屢錯又try, try了又錯,但神奇的是,他從不改變方法,不仔細看錯誤訊息(常常是因為看不懂, 也不google一下 ; 或是google了關鍵字還打錯),也不努力去思考出錯的原因,就是用同樣的方法猛try,...會try出答案才有鬼咧。

石滋宜博士(前中國生產力中心負責人),曾說:「什麼是笨? 就是老是用同樣的方法做事,卻期待會有不同結果的人。」

碰到問題找答案,我覺得是軟體開發這個工作當中最有趣(最有成就感)的部分,卻也是某些人認為最討厭(最痛苦)的部份,我只能說,近幾年來放眼望去每一個知名技術Blog的作者,或是我所認識的MVP,沒有一個不是解決問題的高手。很多問題看似無解,都能被大夥找到walkaround或是釜底抽薪的解決方案。在業界裡面,其實你很難定義何謂程式設計高手,但卻常常能看到,某人一出馬問題就能被解決,此之謂『專家』是也。

最後,我以前老闆說過一句話,我印象深刻也奉行不渝,他說:『你的時間在哪裡,你的成就就在裡哪。』對我而言,幾乎是金科玉律,也是我親身體驗的經歷。很多事情沒有捷徑,你的時間在哪裡,你的成就就在裡哪。

2010年6月17日 星期四

關於RunAs...與Windows驗證的ASP.NET應用程式

從過去幾年教育訓練、專案和產品導入的經驗看起來,台灣的開發人員一般在開發網站的過程當中,實際上使用Windows驗證的場合相當高,但卻讓我很訝異的發現,實際上使用的開發人員卻不多?

很多企業在明明有AD的狀況下,還自己搞了一套SSO(Single Sign On)系統,當然,有些客戶是因為要整合非Windows環境的系統,那也就無可厚非,但卻還是看到不少客戶由於應用系統的建構是長年累月堆積出來的,一開始的Web應用程式並沒有用Windows驗證,導致後面想要做SSO也很困難。

總的來說,驗證這件事情被很多ASP.NET開發人員丟在一邊很久了,導致很多客戶即便有AD,卻總是用自己的資料庫存放帳號密碼,再讓ASP.NET應用程式走Forms驗證。

這也導致很多ASP.NET開發人員壓根沒用過RunAS這個指令。

最近這幾年因為我任職的公司產品的特性,我們開發的ASP.NET網站甚或是Silverlight網站,都採用了Windows驗證,並且搭配Kerberos進行整合驗證動作。也因此,開發人員常常需要透過不同的帳號模擬用戶進行登入,來測試各種不同情境下的使用者功能。

這時候,Windows當中的RunAs指令就相當重要了,你可以在Cmd Line利用底下的指令模擬特定使用者執行某個應用程式,最常用的情境式模擬特定使用者執行瀏覽器:

runas.exe /user:StudyHost.Com\david "C:\Program Files\Internet Explorer\iexplore.exe"

runas.exe /user:david@StudyHost.Com "C:\Program Files\Internet Explorer\iexplore.exe"
上面這樣的指令可以模擬特定的使用者登入瀏覽器,方便開發人員進行測試工作。

如果你懶的每次都要輸入密碼,也可以下底下這樣的指令:

runas.exe /savecred /user:david@StudyHost.Com "C:\Program Files\Internet Explorer\iexplore.exe"
這樣就不用每次重新輸入密碼了。

此外,如果你撰寫的Windows驗證的 ASP.NET應用程式,需要讓使用者登出(或重新用別的帳號登入),可以透過底下的JavaScript:

document.execCommand("ClearAuthenticationCache");

就會有類似MOSS登出使用者的效果了。

2010年6月11日 星期五

Web 版Office Released...

Web 版Office Released... 我試著用了一兩天...個人覺得...速度上還是慢了一些。


2010年6月8日 星期二

在ASP.NET中使用 大檔案拖曳上傳 功能

在ASP.NET中使用 大檔案拖曳上傳 功能的教學影片已上架, 請參考FaceBook專頁。

[連結]

2010年6月5日 星期六

File Uploader 大檔案拖曳上傳控制項

想要在您的 Silverlight 和 ASP.NET 頁面上加入『大檔案拖曳上傳』的功能,並在上傳時顯示即時的上傳進度嗎?

在上個月的Visual Studio 2010上市發表會當中,我概略的展示了Silverlight 4的一些新功能,其中我個人最喜歡的範例就是大檔案的拖曳上傳(就是把file從檔案總管中拖曳到瀏覽器中並直接上傳,同時顯示該檔案的真實上傳進度)。

這個功能早在ASP.NET 2.0時代,我們就嘗試透過AJAX來開發過(當然當時只能做大檔案上傳,還沒有拖曳功能),在坊間許多文管系統當中(最典型的就是MOSS),這個功能也都是相當重要的需求之一。但礙於當時技術的限制,過去多半的解決方案都是在用戶端安裝特殊的ActiveX元件來處理。一來這衍生出安全性問題,二來也不是每一個用戶端都能夠順利或無條件的安裝ActiveX元件,再加上許多ASP.NET開發人員對於ActiveX元件的開發可能相當陌生,造成開發人員很大的困擾。

在Silverlight 4出現之後,我就一直很想把這個功能作一些整合,因此才有在VS2010上市發表會中的那個範例。但畢竟整個上傳動作涉及前後端的交互運作,前端是Silverlight 4,後端是ASP.NET應用程式,要開發人員從頭到尾重新建立這樣的功能實屬不易。

也因此,趁記憶猶新,我把拖曳大檔案上傳的功能整理成可在Silverlight 4或ASP.NET應用程式當中可重複使用的控制項,提供給需要的開發人員直接使用。

  • 相關的套件FileUploader檔案(Binaries & Examples)下載位置可參考[這裡]。 (範例包含Silverlight與ASP.NET)
  • 在ASP.NET 2.0~4.0應用程式中的直接使用方式之說明文件可參考[這裡]。 (是的,在ASP.NET當中也可以直接使用,開發人員不一定需要會Silverlight)
  • 在Silvelright 4應用程式當中的使用方式之說明文件可參考[這裡]。

底下是簡單的測試畫面展示,希望對各位有幫助。

2010年6月4日 星期五

ASP.NET 4.0當中的 URL Routing機制

在剛推出的ASP.NET 4.0當中,Web Forms所新支援的URL Routing機制也是最令大家矚目的新功能之一,過去在MVC, Dynamic Data WebSite中才使用的URL Routing機制,現在在傳統的Web Forms當中也可以使用了,這對我們開發大型的Web應用程式相當有幫助。

相關的介紹和說明可以參考本期Run!PC雜誌,您也可以點選[這裡],參考剛才公布在FaceBook上的ASP.NET URL Routing機制的使用展示影片。

2010年6月1日 星期二

Visual Studio 2010 CHT is released on MSDN


MSDN當中已經可以下載Visual Studio 2010中文版了, 有需要的朋友們可以下載(請選「開發人員工具」->「Visual Studio 2010」-> 語言分類請選「Chinese – Traditional」)中文試用版將會再晚一些釋出。

2010年5月29日 星期六

faceBook應用程式(Silverlight)開發範例

整理兩個先前在FaceBook專頁上分享的利用Silverlight(VS2010)開發FaceBok應用程式的簡單範例已經上架,需要的朋友可以下載:
1.登入,取得朋友清單 [下載]
2.發送訊息 [下載]

BTW, 不要忘了,你得先申請自己的FaceBook應用程式才能測試這個範例(因為需要AppKey), 程式是透過Vs2010開發的,請記得update一下您的開發環境唷。

還是一樣,最新動態我會先放在faceBook專頁上,然後盡可能整理到Bolg上來。

2010年5月27日 星期四

ASP.NET 4 AJAX, Dynamic Data, MVC相關概念介紹文章分享

先前提到過,Run!PC的網站陸續刊出一些ASP.NET 4.0介紹文章的節錄摘要,可以在網站上先睹為快,完整版可以參考紙本雜誌。

底下幾篇分別是與ASP.NET 4 四大功能中有關的其中幾個部分:

ASP.NET 4 中的Dynamic Data技術概念介紹與說明(節錄)
http://www.runpc.com.tw/content/content.aspx?id=105872

ASP.NET 4 中的MVC2概念介紹與新功能說明(節錄)
http://www.runpc.com.tw/content/content.aspx?id=105871

ASP.NET 4 中的AJAX技術增強與AJAX Client Library的新功能(節錄)
http://www.runpc.com.tw/content/content.aspx?id=105870

上面幾篇是概念上簡單的介紹,具體的參考程式碼片段、範例、教學影片與完整的文字稿可參考接下來幾期的Run!PC或筆者BLOG, 當然,還有陸續將會出版的ASP.NET 4 新書。

2010年5月19日 星期三

Silverlight Tools for VS2010正式版釋出 & 範例與文章分享

由於最近建立了FaceBook的專頁,因此一些比較即時性的訊息就在FaceBook上公告了,在Blog上就沒有跟著貼上來,這這邊做個整理,幾個公告事項如下:
  1. Silverlight Tools for VS2010已經釋出正式版:先前在上市發表會上demo時所用的RC版本,前幾天已經釋出正式版,可參考這裡
  2. 先前VS2010上市發表會當中,大家很有興趣的那個拖曳檔案到瀏覽器中,並且透過顯示進度的方式上傳到伺服器端的範例已經上架,請參考這裡
  3. Run!PC的網站有一些SL4與ASP.NET的介紹文章摘要,雖然完整版還是要看紙本雜誌,但可以在網站上先睹為快。SL4介紹可參考這裡,ASP.NET 4 WebForm介紹可參考這裡

如果你也有在用FaceBook,可以點選這裡加入專頁,以便即時取得訊息。

2010年5月13日 星期四

Visual Studio 2010上市發表會-高雄

高雄是巡迴場次的最後一場,每回到高雄來都希望能夠待久一些,只是多半也都是來去匆匆。
還是一樣,謝謝高雄場次所有朋友們的熱情參與,因為時間的關係,master-details的Step By Step dem範例可參考這裡

下載或瀏覽研討會中所提到的範例和影片下載,請至[這裡]。

由於網站需要註冊帳號並經過驗證才能正確下載,若您先前沒有帳號,請依照流程註冊帳號,若無法註冊帳號或有任何相關問題,可隨時mail與我們聯繫。

目前已經放在網站上的範例和影片有:
  • WCF RIA Services-1:展示WCF RIA Services配合VS2010,可快速的建構Business Application,抓取後端資料庫以及Data Binding的能力,同時介紹Data Annotations在Silverlight的應用。
  • WCF RIA Services-2:介紹RIA Services的資料過濾與篩選功能,透過自行修改後端Services可輕易的完成資料篩選功能。
  • WCF RIA Services Master-Details:介紹RIA Services如何透過VS2010的配合,快速完成連動式的Master-Details應用程式開發。
  • WebCam & Audio:WebCam和Audio範例截取以及列印範例。
  • DropTarget:檔案拖曳與顯示範例。
  • OOB的WebBrowser控制項:在Silverlight 4的OOB(Out-Of-Browser)模式中,透過WebBrowser顯示網頁。
  • ComAutomation:在Silverlight 4的OOB App當中,利用ComAutomation技術開啟Word、建立新文件,並在文件中動態填入文字。

2010年5月11日 星期二

Visual Studio 2010上市發表會-台中

謝謝台中場次大夥的熱情參與,因為時間的關係,所以送的書不多,還請見諒。

和台北場次相同,研討會中所提到的範例和影片下載,將會從今天開始陸續放到網站上,下載或瀏覽請至[這裡]。

由於網站需要註冊帳號並經過驗證才能正確下載,若您先前沒有帳號,請依照流程註冊帳號,若無法註冊帳號或有任何相關問題,可隨時mail與我們聯繫。

2010年5月10日 星期一

ASP.NET 4.0當中的Client ID Mode功能

有一個長久以來一直存在的問題,隨著這幾年瀏覽器用戶端程式碼(例如JavaScript/jQuery…等)的盛行,被更強烈的突顯了出來,那就是ASP.NET控制項的ClientID。

過去ASP.NET的ClientID一直是一個常常困擾開發人員的問題,主要的原因是APS.NET在Render出HTML網頁到用戶端時,ClientID常常是動態且無法確定的,特別是ASP.NET頁面加上了master-page、UpdatePanel、或是那些會隨著資料錄數量而可能動態產生出不同資料列的GridView、ListView、Repeater控制項之後, ClientID則更加的不可測了。

面對這個問題,ASP.NET 4提出了新的ClientIDMode屬性,可透過底下四種不同的設置值來決定ClientID的Render方式,分別是:AutoID、Static、Predictable、與Inhert。開發人員可以在程式碼中透過屬性來設定ClientID產生的方式。

具體的說明請參考本期Run!PC或點選這邊瀏覽教學影片或下載範例。

2010年5月6日 星期四

visual Studio 2010上市發表會

感謝大家今天在台北場次的熱情參與,下午由我所主講的Silverlight 4場次中,所提到的範例和影片下載,將會從今天開始陸續放到網站上,下載或瀏覽請至[這裡]。

由於網站需要註冊帳號並經過驗證才能正確下載,若您先前沒有帳號,請依照流程註冊帳號,若無法註冊帳號或有任何相關問題,可隨時mail與我們聯繫。

2010年5月4日 星期二

Silverlight 4 Toolkit中的滑鼠右鍵選單(ContextMenu)支援

有了滑鼠右鍵支援之後,第一個令人聯想到的,就是右鍵選單的設計了。配合著滑鼠右鍵的支援,在Silverlight 4 Toolkit當中,收錄了右鍵選單的控制項,當您安裝了Silverlight 4 Toolkit之後,可以從工具箱中找到這個ContextMenu控件:
您可以把ContextMenu附著在任何的UIElement上,呈現出的結果如上圖。除了ContextMenu之外,SL 4 Toolkit還附贈了一個ContextMenuService機制,這讓我們在設計XAML時可以這樣撰寫:
<TextBox Height="26" HorizontalAlignment="Left" Margin="44,28,0,0" Name="textBox1" VerticalAlignment="Top" Width="286" Text="請在我身上按滑鼠右鍵" FontSize="16" >
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu FontSize="12" HorizontalAlignment="Left" Name="contextMenu1" VerticalAlignment="Top">
<toolkit:MenuItem
Header="選單一"
Click="MenuItem_Click"/>
<toolkit:Separator/>
<toolkit:MenuItem
Header="可以設為disabled"
IsEnabled="False"/>
<toolkit:Separator/>
<toolkit:MenuItem
Header="小圖示"
Click="MenuItem_Click">
<toolkit:MenuItem.Icon>
<Image Source="Images/User.png"/>
</toolkit:MenuItem.Icon>
</toolkit:MenuItem>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</TextBox>
透過ContextMenuService可以幫助我們不需要額外撰寫任何的程式碼,例如我們只需要在TextBox中加上ContextMenuService並在其中加入了ContextMenu,如此一來當使用者在TextBox上按下滑鼠右鍵時,就會自動出現右鍵選單了。
[參考範例下載]

2010年5月3日 星期一

我的咖啡館 之 精緻輕食套餐

一天假日,起得大早,難得天氣好,所以親自下廚給自己和家人準備一個好一些的早餐。

全名是:三層超大火腿蛋番茄生菜洋蔥起司三明治,名稱沒什麼特色,但是一口氣把原料都講清楚了。

如果你有看過我的咖啡館,那不用懷疑,這份輕食套餐肯定會是本店的招牌,便宜好吃又超大份量,專供developer一個人吃剛剛好。餐後附贈的咖啡雖然不是極品,但也是店長本人精挑細選的平價咖啡了。夠醇夠厚,而且後勁十足,包準你參加老闆每週一的精神演講絕對不會睡著。

配上店裡面優閒的soft Jzaa,我肯定你會有一個豐盛的早晨,加上輕快的好心情。

由於店長夫人覺得店長常年茹葷,蔬菜攝取量嚴重不足,而與本人一樣身為艱苦的Developer,或多或少肯定也都會有這樣的症狀,因此店長夫人總會叮嚀再三,要多加一些生菜...要多加一些生菜...所以狂加生菜就是本店招牌輕食的特色:


根據店長本人的親自測試,半個三明治約莫3-5口可以KO,對於忙著趕專案的開發人員來說,絕對是高效率的能量補給品,為了平衡加了很多的生菜,店長在加美乃滋和cream cheese時絕對不手軟:


前面說過,餐後的咖啡即便不是極品(免費贈送的不然你要怎樣???),但也足以讓你撐一個上午的好精神了:


濃郁程度剛剛好:


我的咖啡館 之 精緻輕食套餐,凡是出示貴賓卡(就是店長著作的任何一本資訊書籍,要完整的,不能只剩封面或是殘缺內頁)的尊貴客人,每人每天限量一套只要 $39 元。

價格實惠,本店週一到週五,每天限量10套。週六日無限量供應。

2010年4月30日 星期五

ASP.NET 4當中針對SEO(Search engine optimization)的支援

在ASP.NET 4當中,針對 Web Forms本身也有些許的增強,首先我們看到的是SEO(Search Engine Optimization)的支援。

對於很多企業來說,自家的網頁在搜尋引擎上能否被快速的找到並且呈現出正確的資訊,是相當重要的課題。在新版的ASP.NET 4當中,增加了Page.MetaKeywords以及Page.MetaDescription這兩個屬性,這讓開發人員可以輕易的在網頁中加入可供搜尋引擎檢索的訊息:

protected void Page_Load(object sender, EventArgs e)
{
Page.MetaKeywords = "ASP.NET 4";
Page.MetaDescription = "這是一個呈現ASP.NET 4最新技術的專業網站...";
}

當然,開發人員也可以透過.aspx的頁面修飾字來處理:
< % @ Page Language="C#"  MetaKeywords="ASP.NET 4"
|MetaDescription="這是一個呈現ASP.NET 4最新技術的專業網站..."
AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ASP.NET_Blank.WebForm1" % >
這些訊息對於搜尋引擎來說有相當大的幫助。可以讓搜尋引擎精確的提供針對您的網頁的說明與介紹。

2010年4月24日 星期六

VS2010對Silverlight DataBinding的intellisense與Wizard支援

和很多人一樣,我們剛開始接觸 Silverlight 的時候,恨透了Silverlight DataBinding技術的詭異, 覺得,怎麼它不像ASP.NET一樣, 可以一股腦兒的把後面的資料庫的內容Bind到前端UI裡面去呢? 如果這樣支援,開發起來不是很過癮嗎?

後來才發現,當時我們的期待其實本身是有很多的問題的,特別是開發人員容易被制約在過去ASP.NET的思維裡,所以想當然的覺得做不到的事情就是Silverlight的DataBinding機制不夠好...

但卻忽略了Silverlight的DataBinding技術跟ASP.NET根本完全迥異,甚至可以說八竿子打不著...更不用說過去ASP.NET從UI層Bind到後端資料庫的概念到底是不是正確... 反而漠視了Silverlight DataBind技術的強大,配合起DataTemplate, Converter恐怕是其他開發技術中的Binding概念所望塵莫及的。

不過, 不過今天的重點不是這個(我會找天有空時認真的寫一篇歌頌(呃...不是...是介紹)Silverlight DataBinding技術的文章, 先回題), 今天想要分享的是, VS2010當中開始支援Silverlight DataBinding的intellisense了,這對於Silverlight開發人員來說,是一個相當不錯的功能增強。

就拿Silverlight當中著名的Element to Element Binding技術來說,現在我可以很大方的這麼寫:

你會發現,VS2010開發環境中已經完整的支援了Silverlight DataBinding的intellisense,當然,如果你要透過屬性視窗,透過Wizard來設定,當然也可以:



勾勾選選,不用寫任何程式碼,你會發現TextBox中的文字就會隨著SliderBar的拖曳而改變, 如何? 不錯吧, 這就是ElementToElement Binding技術:

回題,Silverlight的Binding技術很讚,這個我們都知道,以後有空再介紹,這邊要說的是,經過了那麼多次版本更新,終於在這一次VS2010開始支援了Sivlerlight Binding的設定,不管是intellisense或是Wizard支援...

嘿嘿,沒有藉口不用Silverlight了吧!!!


[參考範例或影片]

2010年4月23日 星期五

Office 2010 CHT is here...



看起來,該來的都來了,Office 2010在MSDN Subscriber已經可以下載...包含中文版。

2010年4月20日 星期二

VS2010中的新功能 - Generate From Usage

這是一個很有趣的新功能,我只能說開發工具真是越來越貼心了。

過去,我們在設計程式的時候,都是先寫好Method/property才去呼叫他,或事先寫好骨架,然後再逐步寫程式。

但是你一定有一個經驗,就是程式寫著寫著,想到其實應該要針對某各類別再加上一個功能(Property或是Method),例如在寫主程式使用到Customers這個類別時,發現應該要有一個Find()方法,先前設計Customers類別時沒想到,且Find()方法的參數應該要有string KeyWord,回傳值應該是CustomerName的陣列集合...在過去,你得回頭把Customers類別找出來先添加這個Method,然後程式再繼續寫下。

而現在,在VS2010當中,你可以先在主程式中先寫(呼叫)Find()這個方法,即便實際上Find()這個方法並不存在,例如底下的Cust.find(...):

接著,在出現的錯誤(當然會錯誤囉,因為Customers類別沒有Find()方法)提示訊息上選擇...產生find方法...(如上圖)

嘿嘿,神奇的事情發生囉...

VS2010自動依照你的參數,回傳型別等等資訊,幫你在Customers類別中產生了find() Method的框架!!!!
這一招C#/VB均可使用...

坦白說,如果就TDD概念或是比較嚴謹的開發法來說,這樣做似乎都太隨性了一些...。但,這要怎麼說呢? 因為我猜這個功能將會是台灣的開發人員喜愛VS2010的幾個要因之一,因為用久了之後,發現...真是太方便了。

[參考範例或影片]

2010年4月18日 星期日

VB2010的新語法(二) - Implicit Line Continuation

過去C#一直可以把程式碼分段來寫,直到分號 ; 視為整段程式碼的終點,而VB則是一行就是一行,除非加上 _ 符號,否則一行程式碼無法拆成多行來寫(不過倒是可以把兩行以冒號 : 隔開)。

不過這樣在一行程式碼很長時會很不方便,因此在新版的VB2010當中,有一些特殊狀況下,你可以把VB程式碼拆成兩行,Compiler還是會視為一行。

例如,逗點(,)之後或左右括號 ( ) 之前:

Public Function Add(ByVal Number1 As Integer,
ByVal Number2 As Integer
) As Integer

Return Number1 + Number2
End Function

或是,大括號{ } 的前後 ,例如:

Dim info As Integer() = {
1, 3, 5, 7, 9
}

或是 = (其實還包含 &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=, +, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor, Is, IsNot...等運算子) 或 & 符號之後,例如:

Dim msg As String =
"Hello, " &
"Silverlight "

還有LINQ查詢語法的關鍵字之後, 例如:

Dim a() As String = {"123", "456", "789", "ABC", "DE1"}

Dim ret = From c In a
Where c.Contains("1")
Select c

這樣,果然方便多了。

VB2010的新語法(一) - Auto-Implemented Properties

VB2010當中,新增了Auto-Implemented Properties這個功能,很顯然是因為n百年前C#就可以這麼寫:
public string UserName { get; set; }

而VB終於在這個版本支援了對等的功能

Public Property UserName As String

過去在VS2008當中,如我你用上面這樣的方式宣告,則VS2008會幫你把程式碼擴展成:

Public Property UserName() As String
Get

End Get
Set(ByVal value As String)

End Set
End Property
而現在在VS2010當中,則依舊保留

Public Property UserName As String
不會幫你自動擴展程式碼,因為兩者現在完全相同,也就是說,在VB2010當中直接以語法開始支援了Properties的Auto-Implemented,不需要再寫成Get/Set兩個部分了。

不過有個地方需要留意,當你使用了這個功能時,Compiler會自動幫你產生一個加上底線(_)的變數作為實際的資料存放位置,因此,若你定義了:

Public Property UserName As String

則不可以再手動定義一個

Dim _UserName As String

這樣是不合法的。

Live 365 surprised me again...

前陣子跟大家提過Live 365這個廣播網站,坦白說對於開發人員或是作者來說(也就是對我來說),廣播好過任何一種其他的媒體,在寫程式或寫稿件的時候,可以讓我頭腦清晰甚至覺得很幸福。

先前我大多是聽piano或是Jazz,偶而聽聽古典音樂,今天心血來潮,在搜尋打入關鍵字Chinese, Oh My...原來還有中文電台? 不時還會聽到我年輕時代聽的流行樂(如今這個世代的年輕人已經將其視為老歌了)...呵, 我只能說, Live 365, you're surprised me again...

回頭想想,在internet上,一些簡單方便的應用,總是讓我覺得有價值,願意付點金額不高的小錢,不僅算是給廠商的支持自己也可以真的享受這些更好的服務,說真的,我觀察了一下,自己每天活在internet上,享用的免費服務大約80%以上,也就是說只有20%是要付費的,而且坦白說付的費用真的可以說是象徵性的費用。

這10年,internet真的改變了我們的生活習慣和方式。

BTW, 我知道i-phonoe和Nokia都有支援Live365,也就是你只要有3G,那音樂真的是無處不在...讚!

2010年4月16日 星期五

Silverlight 4 RTM is here !!!

Silverlight 4 RTM 正式推出, 已經安裝了VS2010的開發人員可以從底下連結下載安裝開發套件:
[Microsoft Silverlight 4 Tools RC2 for Visual Studio 2010]

如果你沒有VS2010, 可以考慮從[這邊]安裝免費的Express版本, 或是從[這邊]下載試用版。

Blend 4 RC可以從[這邊]下載

Silverlight 4 Toolkit 同步更新, 可從[這邊]下載

呵呵,來得好,等你很久了。



安裝完之後您會發現範本多了WCF RIA Services:


Blend 安裝的時候問會你Key, 別擔心,線上可以免費申請:


Silverlight Toolkit安裝之後,你會發現工具箱中多了很多的新控件:


如今...萬事俱備,只欠東風...^_^

2010年4月15日 星期四

真是每天有新的驚喜啊 - VS2010中出現令人期待已久的功能...呼叫階層

當你在VS2010的開發環境中,在某一個Method()上,按滑鼠右鍵出現的突顯式選單中,新增了一個『檢視呼叫階層』,點選後會出現『呼叫階層』視窗:


英文版畫面:


呵呵,不需要解釋,知道這是什麼吧,它是我期待了很久的功能,我一直希望看到哪一些Method呼叫了我寫的某個Method, 或是我寫的Method中呼叫了哪些Method...現在...都在這裡囉。

雖然簡單,但很好用!

2010年4月14日 星期三

ASP.NET AJAX Libary 正式版 released.



如同先前提到過的ASP.NET AJAX已經隨著VS2010正式版推出了,如果先前你有使用到AJAX Client-side controls的同志們,可以開始更新。

http://ajaxcontroltoolkit.codeplex.com/releases/view/43475

2010年4月13日 星期二

MSDN Subscribers: Visual Studio 2010 is Here!!



MSDN開放下載Visual Studio 2010囉, 如果您是MSDN訂閱戶, 現在已經可以開始下載了。

這一次全新改版的Visual Studio 2010針對Web應用程式的開發有相當多的貼心的設計,在上市發表會中相信您都將會看到,所以,再提醒一下如果還沒報名參加的...快快報名唷[Visual Studio 2010 上市發表會]

另外,最近在撰寫VS2010的介紹文稿時,有一幕讓我挺感動的畫面,和大家分享...









有沒有發現? VS2010支援jQuery的intellisense,而且還是...中文版的。

關於Silverlight 4的部分預估也將會在本周稍晚釋出,近請期待。

updated:
順待提一下安裝的細節,你可能會發現下載項目和過去不太一下,有一個需要注意的地方是,Visual Studio Team System 改名為 Visual Studio 2010 Ultimate 企業旗艦版,此版本即原本 Visual Studio Team Suite,已整合所有 VSTS 之功能。再來才是Premium和Professional,詳細的比較表請參考這邊

2010年4月12日 星期一

即將推出的ASP.NET Ajax Library...

有很久一段時間我的BLOG上沒有出現AJAX相關訊息了,主要當然是因為絕大部分的重心都放到了Silverlight身上(可預期的未來應該也會是如此)。

但由於工作上的需要,最近還是回頭看了一下即將推出的ASP.NET Ajax Library...,順便google了一下網路上的訊息,看這個態勢我猜想應該不少ASP.NET開發人員忽略掉了這個其實已經beta很久即將隨著VS2010推出的JavaScript Library,當然,也可能是因為您已經在使用jQuery了。

不過仔細看看ASP.NET Ajax Library當中還是有不少精彩的功能,同時現在微軟針對AJAX JavaScript Library也提供了CDN(content delivery network)服務,讓您可以直接在頁面上引用位於微軟的javaScript檔案,而不再需要把檔案放在自己的專案中。

後面如果時間允許,我也會陸續介紹ASP.NET Ajax Library中的一些功能,以及和jQuery的整合方式。首先來看ASP.NET Ajax Library中Client Controls的使用(底下的範例是浮水印的TextBox):
<head>
<title>Untitled Page</title>
<style type="text/css">
.wm {
color:Gray
}
</style>
<!--從CDN引用js-->
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.js" type="text/javascript"></script>
<script src="http://ajax.microsoft.com/ajax/beta/0911/Start.debug.js" type="text/javascript"></script>
<script src="http://ajax.microsoft.com/ajax/beta/0911/extended/ExtendedControls.debug.js" type="text/javascript"></script>
<script type="text/javascript">
//建立watermark
Sys.require(Sys.components.watermark, function() {
$("#TextBoxName").watermark("<請輸入您的姓名>", "wm");
});
</script>
</head>
<body>
<input type="text" id="TextBoxName" size="50" /> //實際的TextBox
</body>
請注意上面這段指令碼是HTML Code, 沒有一丁點的ASP.NET Server Code, 單純只是透過ASP.NET Ajax Library與JavaScript來呈現出浮水印的TextBox(其中還用到了一點點jQuery語法,最後呈現出的結果是:


回頭看前面的HTML與JavaScript Code,這中間有相當多的新技術,包含AJAX Script Loader, ASP.NET Ajax Library中的Client Controls如果您暫時不打算進入Silverlight豐富的世界卻又希望能夠在HTML頁面上呈現出較優質的效果,那即將配合VS2010推出的ASP.NET Ajax Library是一個不錯的選擇。

由於ASP.NET Ajax Library現在已經是開放原始碼的跨瀏覽器平台JavaScript函式庫專案,因此可以想見的,你在ASP, PHP或是其它的Pure Web Application開發技術當中也一樣可以使用,在微軟ASP.NET Ajax Library的官網上有更多詳細的介紹內容:
http://www.asp.net/ajaxlibrary/learn.ashx
後面我也會盡可能提供一些具體的應用介紹。

2010年4月9日 星期五

Silverlight 4 當中的滑鼠右鍵支援

過去在SL3時代,滑鼠右鍵是完全不被支援的,不管是在Browser或是OOB模式中,當您按下滑鼠右鍵,只會出現一個Silverlight預設的選單,如今在Silverlight 4當中,右鍵選單開始被支援了,我們可以透過『MouseRightButtonDown』和『MouseRightButtonUp』這兩個事件,來處理滑鼠右鍵的動作。

有了這兩個事件,控制滑鼠右件顯然不是太大的問題,但請特別留意在MouseRightButtonDown事件當中,你必須加上底下的程式碼:
private void button1_MouseRightButtonDown(object sender, MouseButtonEventArgs e) {
//必須設定這個屬性,否則預設的Silverlight右鍵選單會出現
e.Handled = true;
}
否則原本(預設)的Silverlight右鍵選單還是會出現。

當您在MouseRightButtonDown事件當中這樣設定之後,接著就可以在MouseRightButtonUp事件當中實際處理你要進行的工作,例如在範例中我們是透過自己建立的EasyContentMenu來處理右鍵動作:

//EasyContentMenu是我們自己建立的ChildWindow物件
EasyContentMenu cm = new EasyContentMenu();
private void textBox1_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
//跳出突顯示選單
cm.Closed += new EventHandler(cm_Closed);
cm.Show();
}
//當EasyContentMenu物件關閉
void cm_Closed(object sender, EventArgs e)
{
//把值填入textBox
this.textBox1.Text = cm.ReturnText;
}
當使用者在TextBox1上面按下滑鼠右鍵時,會出現底下這樣的突顯式選單,當使用者選取了選單中的任何一個item,值會填入TextBox中:

當然,在ChildWindow程式碼當中也需要稍做配合:

//建立一個ReturnText屬性,存放使用者選擇的值
private string returnText;
public string ReturnText
{
get { return returnText; }
set { returnText = value; }
}
//當使用者選擇了ListBox中的某個item
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//把選擇的值填入ReturnText屬性
ReturnText = (listBox1.SelectedItem as ListBoxItem).Content.ToString();
this.Close();
}
如此一來,我們就可以快速地完成一個滑鼠右鍵選單了。當然,其他相關的滑鼠右鍵運用,也都可以在Silverlight 4當中輕易達成,在即將推出的Silverlight 4 toolkit當中,甚至有一個content menu可以直接使用,連右鍵選單都不需要自己做,都幫您準備好了。
[參考範例]

2010年4月2日 星期五

我的咖啡館

我的咖啡館位於首都郊區一條不起眼的巷弄中的一個角落。

店面略顯古樸的外表讓你覺得似乎有些不搭,但落地窗透出的柔和燈光,和隱約的咖啡香卻讓路過的人對咖啡館有著另一種想一探究竟的期待。

和Starbucks與伯朗咖啡不一樣,這個咖啡館即便是用餐時刻,喧鬧的情況也是少見,店裡每一位人客,都認真專心的盯著自己的NB或是書籍、期刊,彷彿正在和腦袋裡虛幻的敵軍奮戰,偶而輕啐一口咖啡(這是本店唯一的飲料),念念有詞的敲著鍵盤。而中年發福留著大鬍子的老闆(那可能是我),總是專注地看著電腦螢幕皺眉發呆,又像是思索著難以理解的數學題一般。

絕大部分的客人都帶著NB(如果你忘了帶,可以跟櫃抬抵押證件借用小NB一台),這裡有極高速的專線直接連到北美、中國以及幾個重要的資訊重鎮,當然,每一桌都有獨立的電源線以及各種網路連接設備,這是為了讓SOHO或是習慣在辦公室外工作的人員可以透過最方便的方式存取到自己需要的資料。對於需要開會的客人,有一間獨立包廂和投影設備,空間不大,但舉行小型會議則是綽綽有餘,已經連上區域網路的印表機、掃描器等設備也都是店內所有客人可以隨時使用的。

包廂以外,店內24小時播放著的是古典音樂或輕音樂、特別的時段會有音樂劇、或是Jazz樂,很多客人每天總是待到很晚,我們也準備了重烘培黑咖啡之類的飲品,確保熬夜加班趕專案進度的客人能夠撐到最後一刻,得以順利的結案。

店裡面佔滿一座牆的巨型書櫃,則是跟台灣各大電腦資訊書籍出版社合作的,有台灣最近三年(持續更新)的所有重要資訊書籍、雜誌、期刊,差不多也有十分之一是外文書籍,每一本都可以免費在店內借閱瀏覽,很多客人很喜歡這樣,因為電腦書汰舊換新太快,大多數剛畢業的年輕人也買不起,到店裡面看電腦書,反而變成一種替代方案。

店裡面唯一比較熱鬧的時候,是每週三晚上的developer time,我們會邀請最近熱門議題的講師或廠商,來店內分享心得,和社群夥伴們一起互動,剛開始舉辦的時候知道的人不多,現在幾乎已經是開發人員朝聖的所在。

別以為我們是以硬體設備取勝,如果你對咖啡有所研究,會知道我們採用的是巴西上等的咖啡豆(當然,也有台灣土產咖啡),每一杯咖啡的香醇口感,以及撲鼻的香氣,會變成你一天當中,最難以割捨的一餐。為了響應環保,幾乎每一個客人在我們店裡都有自己的杯子,客人走進來,吧檯的工作夥伴立即找出你的杯子,幫你烹調出最喜歡的口感。

店裡面是24HR營業,很多SOHO族是晚上才來,一直待到天快亮才離開,我們服務的客人不多,由於消費不也不算低,大多數客人是職場上工作了數年之後的單身一族和宅男,所以大約一兩個月,我們也會辦一次特殊的聚會,你可以想成是業界聯誼吧,讓這些在資訊界奮戰的工程師們,有機會多認識一些其他領域的菁英和不同領域的夥伴。

心動了嗎? 別問我咖啡館在哪裏,因為它還沒開。

但,人總是要有一點烏托邦式的理想,讓自己對未來更有期待。

BTW, 本來這一篇是 4/1要登,不過今天登上blog也不嫌晚,週末了,隨著VS2010的到來,Q2勢必會相當忙亂,只是提醒大家,工作之餘,不妨多一些時間想想自己的夢想和對未來的期待,祝大家...週末愉快。

2010年3月30日 星期二

Silverlight 4當中的剪貼簿支援

在Silverlight 4當中,剪貼簿開始被直接支援,但是由於畢竟應用程式是執行在瀏覽器當中,所以安全性還是會被額外的考量,所以當您撰寫的Silverlight應用程式欲存取剪貼簿時,會出現底下這樣的畫面:

待使用者按下『是(Y)』後,我們的程式才能夠存取剪貼簿。

不過,程式碼卻相當簡單,存取剪貼簿的程式碼如下:
private void Button_Paste_Click(object sender, RoutedEventArgs e)
{
//將文字貼上RichTextBox2
RichTextBox2.Selection.Text = System.Windows.Clipboard.GetText();
}
private void Button_Copy_Click(object sender, RoutedEventArgs e)
{
//從RichTextBox1中將選取的文字填入剪貼簿
System.Windows.Clipboard.SetText(RichTextBox1.Selection.Text);
}

透過靜態類別Clipboard,我們就可以輕易的在系統剪貼簿中存取文字類型的資料。

2010年3月25日 星期四

[研討會] 面對VS2010 我們準備好了...

嘿嘿,是的,面對VS2010 我們準備好了...

VS2010上市在即, 三螢一雲的開發平台:Microsoft Visual Studio 2010 上市發表會 開始報名囉...

詳細的訊息可參考底下網頁:[Visual Studio 2010 上市發表會]

時間還有一個多月,但是由於這次的內容以及 .NET 4 的新版涉及相當多不同的領於,有更強的.NET 4, 嶄新的VS2010, 還有令人引頸期盼的Silverlight 4, 全方位的ASP.NET 4, 以及引領未來風潮的 Windows Azure...在這一場發表會中,您將會一次看到這些嶄新功能的全新體驗。

My Advice? 趕快報名吧...有台北,台中,高雄三個場次唷...

2010年3月24日 星期三

Silverlight 4中的檔案拖曳 Part II - MediaPlayer

有人看了這篇,以為圖片中的拖曳wmv檔案是唬人的,因為圖片有但範例卻沒有,如果你這樣認為,那可誤會大了。

Silverlight 4當中的拖曳功能,當然可以把任何檔案拖曳到Silverlight 4的應用程式中,不管是文字檔案、圖形、或是wmv媒體檔,都是可以的,眼見為憑,請看:[測試範例]

貼心小提醒:測試上面這個範例時,別忘了要先安裝Silverlight 4 RC run-time, 因為RC版和Beta2版的Run-Time是不同的。

呵呵,很讚,不是嗎? ^_^

2010年3月21日 星期日

天使飛飛 Flying Togother

週日的晚上10點,在TVBS節目上看到關於 天使飛飛 紀錄片的片段,看到身心障礙家庭所遭遇到的問題以及努力,回想起前陣子因為家人的關係,自己住在醫院的那段時間,多少可以體會到病人家屬所面對的辛苦。很多真的不是三言兩語能說清楚的。

看了這段影片之後,不由得萬千感慨。

天使飛飛 相關訊息可以參考 http://flyflyangel.blogspot.com/2009/09/blog-post_4180.html

天使心家族 相關訊息可以參考 http://www.ah-h.org/

天使飛飛紀錄片01 http://www.youtube.com/watch?v=fGrWC3n9JA4


天使飛飛紀錄片02 http://www.youtube.com/watch?v=SvmhPczc_gA


天使飛飛紀錄片03 http://www.youtube.com/watch?v=v-3u-2rxXNE

天使飛飛紀錄片04 http://www.youtube.com/watch?v=-x4vp_inQrs


天使飛飛紀錄片05 http://www.youtube.com/watch?v=nlr8j7Wjyw0


天使飛飛紀錄片06 http://www.youtube.com/watch?v=W_w0odJ3seo



天使飛飛紀錄片07 http://www.youtube.com/watch?v=zHKgPWUcDWs


天使飛飛紀錄片08 http://www.youtube.com/watch?v=f8BOsidVydc


天使飛飛紀錄片09 http://www.youtube.com/watch?v=m91UCWziz94


天使飛飛紀錄片10 http://www.youtube.com/watch?v=XWjBfJon3CA


Silverlight 4中的檔案拖曳支援

在Silverlight 4當中,針對拖曳的行為也有相當令人激賞的增強,這同時也讓Silverlight中OOB應用程式所能達成的效果又向傳統的WindowsForm應用程式逼近了一大步。

過去我們已經可以透過程式碼在Silverlight應用程式的畫面中讓物件(element)們被拖曳,現在在Silverlight 4當中,我們甚至可以把實體檔案拖曳到瀏覽器上正在執行的Silverlight應用程式中。

Silverlight 4當中,針對所有的UIElement物件,增加了一個AllowDrop屬性,您可以直接將其設定為True:
< name="textBox1" fontsize="16" acceptsreturn="True" allowdrop="True" />
如此一來,該物件將被允許接收拖曳的檔案,也就是說,您可以從桌面、檔案總管等位置,把一個或多個檔案拖曳到剛才你指定AllowDrop為True的Silverlight物件上:

這樣還不夠,這只是將控制項設定為可以接受檔案而已,當檔案被拖曳到物件上之後,我們還需要去開啟它,並且透過程式碼來做一些額外的處理,例如開檔、顯示…等動作。

我們可以在控制項的Drop事件中來處理檔案的開啟與讀取動作:
private void textBox1_Drag(object sender, DragEventArgs e)
{
if (e.Data == null) return;
//從e.Data取得資料物件
IDataObject DataObject = e.Data as IDataObject;
//取得檔案(集合,可能有多個檔案)
System.IO.FileInfo[] files = (System.IO.FileInfo[])DataObject.GetData(DataFormats.FileDrop);

//列舉每一個檔案
foreach (System.IO.FileInfo item in files)
{
//如果檔名為*.txt
if (item.Extension.Equals(".txt"))
{
//則開檔
using (System.IO.Stream stream = item.OpenRead())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, System.Text.UnicodeEncoding.Unicode ))
{
//讀取並填入TextBox中
this.textBox1.Text = reader.ReadToEnd();
}
}
return; //僅處理第一個
}
else
{
MessageBox.Show("請拖曳文字檔!");
}
}
}

在上面的程式碼中,你會看到我們我們透過Drag事件的參數『e.Data』可以取得檔案物件,由於物件可能是個檔案集合(使用者一次拖曳了多個檔案),因此我們將其轉為System.IO.FileInfo[]型別,接著透過foreach取得物件內容即可,上面的範例可以在TextBox中顯示使用者拖曳到畫面上的文字檔(不過需要注意其編碼,上面的範例支援Unicode格式的文檔。
[範例測試]

2010年3月17日 星期三

Silverlight對Windows Phone的支援

Ok, 稍微分享一下心得,截至目前為止,我們知道整個Windows Phone的應用程式開發標準的工具就是Silverlight(來的好,等很久了,嘿嘿,這讓我們的市場又大了一塊),落實在Windows Phone上的Silverlight開發技術主要是based-on Silverlight 3的架構,目前Windows Phone上支援的feature包含:
Silverlight基本輸出入功能, XAML UI的呈現, Media(支援列表請參考下圖), Deep Zoom, Controls, Layout, Data binding, Isolated storage, Networking (HttpWebRequest, WebClient), XAP packaging, XML serialization, Windows Communication Foundation (WCF), LinQ, Web-Browser Control(SL4) <----上面這些,常常看我Blog或是書籍的讀者肯定知道是些什麼, 所以不贅述...

而底下這些則是Windows Phone版本中的Silverlight獨有的一些支援或功能:
Gesture-aware controls
Manipulation events
TextBox control額外支援了Software input panel (SIP)
Application Bar
Locatioin(透過GPS, Wi-Fi, 或cellular)等機制取得位置
Push Notification service

當然,還有一些像是電話本身的功能,例如撥號,照片的存放...等,Silverlight for Windows Phone中一樣有相對應的Class Library支援。

Media支援列表:(竟然...支援GIF!)


當然,由於現在是CTP,所以不是沒有改變的可能。

總括來說,對於既有的Silverlight開發人員來說,絕對是個利多的消息,整個開發方式幾乎和典型的Silverlight一樣,對開發人員來說不會造成而外的困擾。不管是近端資料存取或遠端資料存取方式都和SL3中的幾乎一致,喔,當然,Microsoft SQL Server Compact目前是不支援的。

2010年3月16日 星期二

終於,微軟釋出Windows Phone Developer Tools(CTP) Silverlight開發套件

從2008年就喊得震天價響的Silverlight Mobile開發套件,終於終於終於在MIX 2010公布了,Silverlight的官網也跟著更新了,關於Silverlight for mobile部分,再也不是虛無飄渺空空蕩蕩的一堆廣告文字,現在你可以扎扎實實地download到相關的開發套件了。

和我們猜測的差不多,你可以用VS2010與Blend來開發WP7應用程式,整個開發方式都是透過managed code,支援Multi-touch, Camera, microphone, DRM, IIS Smooth Streaming, ... etc. 果然如同先前Charlie Kindel提到的,整個開發方式讓原有的Silverlight開發人員感到非常的喜悅。

隨著進行中的MIX2010,我們將會看到更多的訊息釋出,同時,微軟也搭建了一個marketplace網站,將會如同iPhone一樣,讓開發人員可以上傳自己開發的應用程式,並且在市集上銷售,我當場就註冊了一個帳號(但居然要付錢!!!有點敗興)

總得來說,消息面是令人愉快的,那實際開發之後的感想呢? 很抱歉,我還沒動手,晚一些再和大家分享。

相關套件的下載位置先釋出:
Windows Phone Developer Tools CTP

順帶一提,Silverlight 4 tools for VS2010RC也釋出了..
Microsoft Silverlight 4 Tools for Visual Studio 2010 RC


補充報告:
安裝完了測試之後,整個開發方式和Silverlight幾乎一樣,從下圖中可以看得出來:

呵呵,恭喜了,各位Silverlight pioneer,你沒選錯投資的開發工具。

下載安裝畫面: