2009年12月29日 星期二

Multi-touch? Gesture? how about this???

會不會每天接觸電腦,透過開發工具撰寫程式的我們,反而讓電腦世界制約(抑制扼殺)了我們的想像力? 或許,這一切真的有不同的可能性?

2009年12月26日 星期六

Silverlight 4 中的RichTextArea 支援

Silverlight 4 beta當中出現了一堆社群中期待很久的好功能,針對這個部分,我忘記是SL的產品經理還是開發Team的誰,對於被訪問到SL4的新功能時,還『謙虛』的說:這沒什麼,我們只是把社群提供的Wishlist中的Top 10(還是多少我忘了),實作出來而已。

這一實作,就增加了WebCam, HTML Browser的支援, Printing, RichTextArea...等功能。一個個都直接命中開發人員期待(還是抱怨 ^_^)已久的需求。

先前介紹過了WebCam與列印,今天要介紹的是RichTextArea,這也是社群強烈要求的功能之一,看來這次是沒有落空了。

RichTextArea和過去我們熟悉的RichTextBox一樣,可以控制文字的B, U, I, 當然也可以改變文字大小、字型、顏色...承襲SL的一貫風格, RichTextArea當然也支援插入圖形和HyperLink,甚至任何的物件(例如Rectangle...),這讓SL可以輕易寫出Windows Form或Web Form沒法做出的編輯器。

控制的方法很簡單,程式碼如下:
private void button_B_Click(object sender, RoutedEventArgs e)
{
richTextArea1.Selection.SetPropertyValue(TextElement.FontWeightProperty, FontWeights.ExtraBold); //設定粗體
richTextArea1.Focus();
}

private void button_U_Click(object sender, RoutedEventArgs e)
{
richTextArea1.Selection.SetPropertyValue(TextElement.TextDecorationsProperty, TextDecorations.Underline); //設定底線
richTextArea1.Focus();
}

private void button_I_Click(object sender, RoutedEventArgs e)
{
richTextArea1.Selection.SetPropertyValue(TextElement.FontStyleProperty, FontStyles.Italic); //設定斜體
richTextArea1.Focus();
}

private void ComboBox_FontSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
richTextArea1.Selection.SetPropertyValue(TextElement.FontSizeProperty, ((ComboBoxItem)ComboBox_FontSize.SelectedItem).Content.ToString()); //設定文字大小
richTextArea1.Focus();
}

private void ComboBox_Color_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
richTextArea1.Selection.SetPropertyValue(TextElement.ForegroundProperty, ((Rectangle)ComboBox_Color.SelectedItem).Fill); //設定顏色
richTextArea1.Focus();
}

private void button_OK_Click(object sender, RoutedEventArgs e)
{
XamlDORichTextSerializer serializerXaml = new XamlDORichTextSerializer();
this.textBlock1.Text = serializerXaml.SerializeObject(richTextArea1).ToString(System.Xml.Linq.SaveOptions.OmitDuplicateNamespaces); //取得Xaml Code
}
[完整程式碼瀏覽]
您可以點選底下的HyperLink來測試這個程式的結果:
[範例] (還是一樣,要測試這個範例前,請先安裝SL4 Development Run-Time)

2009年12月18日 星期五

Silverlight Multi-Touch研討會

感謝許多朋友們參加了昨天12/17的MSDN研討會, 在這個場次中我大致上介紹了Silverlight開發Multi-Touch Application的概念與一些技巧,研討會中的投影片和要提供給各位的Component我會在整理完成後放到blog上,預計周末前可完成。

很感謝大家天氣那麼冷還到場參加,會中看到了很多先前的老朋友以及之前沒見過面的朋友們,很謝謝各位的支持。

BTW, 先前在Blog上沒有提醒大家是因為報名已經滿了,我也收到許多中南部的朋友們的建議,我會跟微軟反映,盡可能爭取到能夠到中南部舉辦的機會。謝謝大家的支持。

2009年12月4日 星期五

雲端運算說明影片

最近在幾個演講的場合談到雲端運算,因此也隨手上網找了一些影片或介紹,發現底下這個影片很簡潔扼要的清楚的說明了雲端運算,因此分享給大家:

他從一般End-User的角度來介紹何謂雲端運算,以及對於使用者(或企業用戶來說有哪些好處)說明的清楚易懂,算是不錯的影片。

英文版

2009年12月1日 星期二

Silverlight 4 中的WebCam支援

在剛推出的Silverlight 4 beta版中,終於支援了大家期待已久的WebCam功能,底下是測試頁面:
[測試]
但請注意,測試前需先安裝SL4 Developer runtimes: Windows然後才能執行,Webcam是建立網路服務應用程時相當需要的功能。

整個程式的設計方式並不複雜,主要的程式碼片段如下:
        private void Button1_Click(object sender, RoutedEventArgs e)
{
//判斷目前啟動狀態
if (!CaptureDeviceConfiguration.AllowedDeviceAccess)
{
//透過RequestDeviceAccess要求使用者允許使用WebCam(這時畫面上會跳出Yes/No詢問視窗)
if (!CaptureDeviceConfiguration.RequestDeviceAccess())
{
MessageBox.Show("can't access device.");
return;
}
}

//建立CaptureSource
CaptureSource CaptureSource = new CaptureSource();
//建立VideoBrush
VideoBrush vb = new VideoBrush();
Grid1.Background = vb;
//將VideoBrush的Source設為CaptureSource
vb.SetSource(CaptureSource);
//start web cam
CaptureSource.Start();
Button1.Visibility = System.Windows.Visibility.Collapsed;
}

你會發現我們可以透過CaptureSource這個物件來抓取WebCam資料(其實除了WebCam還可以抓取聲音),然後把CaptureSource設為VideoBrush,並將CaptureSource設為Grid的Bbackground即可。

2009年11月30日 星期一

SL3當中的Out Of Browser功能

前陣子有讀者問到SL3的Out Of Browser功能,我才發現我在Blog上似乎跳過了,因為這個功能雖然是SL3的重要新功能,但是因為相對而言是相當簡單的,所以可能被我略過了。

Out of Browser是SL3當中的重要功能之一,它讓SL應用程式在瀏覽器外執行。不過實際上使用此功能卻相當簡單,只需要在Silverlight專案上按下滑鼠右鍵,選擇Properties,在顯示出的屬性視窗上就可以設定了:

相關的細節可以點選[Out-of-Browser Settings]按鈕進行設定。

絕大部分的參數細項,均可透過設定指定完成。設定好了之後,這個SL應用程式就支援Out of Browser。這時候,使用者可以隨自己的需要,將該SL應用程式安裝到用戶端,安裝時只需要在網頁上按下滑鼠右鍵,就會出現底下這樣的選單:

點選『安裝到此電腦』,使用者即可直接將應用程式安裝到用戶端,甚至會為您建立桌面捷徑或是開始功能表捷徑(依照使用者自行選擇而定)。

除了以設定的方式為SL應用程是添加Out of Browser功能之外,我們也可以透過底下這樣的程式碼,將SL應用程式安裝到用戶端:

'用戶點選安裝鈕
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
'安裝在用戶端
If Application.Current.InstallState = InstallState.NotInstalled Then
'安裝
Application.Current.Install()
End If
End Sub

從上面的程式碼您可以發現,我們可以透過『Application.Current.Install()』將SL應用程式安裝在用戶端,也可以透過『Application.Current.InstallState』來得知目前該應用程式的安裝狀況。

除了取得應用程式是否已經安裝到用戶端等資訊之外,幾個與Out of Browser有關的資訊取得方式我們分別列舉如下。

首先,我們可以透過底下的程式碼,來判斷目前用戶端網路是否可以使用:

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

這個功能的目的,是在協助SL開發人員,可以更輕易的建構出離線運算的應用程式,我們不僅可以透過上面這個指令得知目前的網路連線狀況,還可透過底下的方式,讓網路連線狀況改變時,可以觸發我們所安排的程序:

若我們需要得知目前應用程式是否為Out of Browser執行,則可透過底下的指令:
Application.Current.IsRunningOutOfBrowser()

前面介紹的這幾個函式,可以幫助我們得知目前應用程式執行的狀況、判斷網路的連線,讓我們得以決定目前應用程是要以何種方式執行。

透過這些機制,我們也以SL撰寫離線應用,例如當應用程式是連線狀態時,可直接透過.NET RIA Services存取遠端的資料庫,而當應用程式是離線狀態時,則暫時將資料透過IsolatedStorage機制存放在用戶端(瀏覽器端),或是透過SaveFileDialog將資料先存起來,待偵測到連線後再將資料回寫到遠端的資料庫中。

2009年11月27日 星期五

在windows 7中安裝Loopback Adapter

先前曾經介紹過透過Loopback Adapter讓VPC和host透過網路相連的方式[參考這裡],透過Loopback網卡,可以很輕易的讓你的主機與VPC以區域網路的方式相連,這對我來說相當重要,因為我常常把VPC當作Server(不管是IIS, SQL Server, 或是其他Server),而把自己的NB當作工作環境(Client)。

先前都相安無事, 不過換成W7之後,突然找不到安裝Loopback Adapter的地方(-_-'''), Google了一下,把心得和大家分享。

原始來源網址:
http://www.windowsreference.com/windows-7/how-to-install-a-loopback-adapter-in-windows-7/

首先,請利用管理員身分執行cmd.exe:


接著在命令列模式執行hdwwiz.exe,會出現底下畫面:


請按下一步,接著以手動方式安裝硬體:


接著選擇網路介面卡:


確定之後下一步:


這樣就OK囉。

2009年11月25日 星期三

office 2010 the movie : 很有趣的影片

office 2010 the movie : 很有趣的影片,還高畫質咧...
不過外國人的幽默有時候還真不好懂...

2009年11月24日 星期二

幾個我喜歡的爵士(Jazz)樂台

除了上回我介紹過的音樂電台之外,我最近又發現了幾個還不錯的網路電台,網路電台有兩種類型,一個是純網路電台,沒有在真實世界FM/AM發聲,只有在internet上傳遞,另一種是傳統的AM/FM,具有真實的廣播網路,然後透過網際網路發聲。

不管是哪一種,你會發現現在媒體是全世界傳播,無國界已經是一個趨勢,這十年毫無疑問的網際網路改變了我們的生活和世界。

最近發現的電台網址是:http://www.live365.com/cgi-bin/directory.cgi?genre=jazz
嚴格說起來它是一個電台的集合,我覺得有趣的是,蒐集一些電台變成清單,也可以變成一種生意,看來網際網路上可玩的business Model真的很多。

不過不管如何,對我來說,免費的東西總是好東西,況且台灣能聽到好爵士樂的地方真的不多。所以這幾個電台現在變成我的最愛,而且台北3.5G上網不是問題,電台還能隨身攜帶,挺好的。

[試試看]

你猜,我最常在什麼時候聽這個電台? 我肯定你猜不到,是洗碗的時候,音樂讓洗碗都變成一種享受...

2009年11月22日 星期日

Silverlight 4 中的列印功能

過去的Silverlight 1,2,3,經歷了22個月,改版速度快的讓人吒舌了,但是我相信沒有比PDC的時候SL4 beta突然推出更讓人訝異的事情了,真的,我們不是前陣子才在SL3 Launch嗎? SL4 beta已經出了? 真是驗證了我以前烏鴉嘴講的揣測,看來Silverlight的改版硬是要直接追上.NET Framework的進度,一起邁向 4.0。

不過我們更關心的,是SL4增加了哪些功能? 第一個想跟你分享的,是Silverlight的列印機制,SL4提供了一個簡單到不行的概念,但其實還真的蠻實用的東西。

請參考底下這個測試頁面:[列印功能測試]
但請注意,測試前需先安裝SL4 Developer runtimes: Windows 然後才能執行

你會發現這個小程式很輕易的SL把畫面列印出來了,這個功能怎麼完成?
看看程式碼,簡單到不行:


Imports System.Windows.Printing

Partial Public Class MainPage
Inherits UserControl

Public Sub New()
InitializeComponent()
End Sub

'列印物件
Private WithEvents pd As PrintDocument

'PrintDocument的PrintPage事件負責處理要列印的東西
Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As PrintPageEventArgs) Handles pd.PrintPage
e.PageVisual = Me '將表單本身(me)列印出
e.HasMorePages = False '後續沒有其他頁面要列印
End Sub

'Button1被按下
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
pd = New PrintDocument()
pd.DocumentName = "文件名稱" '顯示文件名稱
'列印
pd.Print()
End Sub
End Class

這個列印程式的概念幾乎和WinForm差不多,只是當然相較之下也陽春一些,但是對大多數Web應用程式來說已經夠用了,甚至很多原本ASP.NET沒法做到的列印控制,我們現在開始可以用SL建立解決方案,如果我真的要做出一些比較優質的列印效果,需要做的也只不過是利用SL在場景上繪製張圖,然後丟給PageVisual,你會發現PageVisual可以接受任何UIelement物件(包含Image),然後就那麼自然的印出來了,簡單到不行。但卻方便好用...

看來不多久就會出現SL的報表或列印解決方案套裝軟體了。

2009年11月19日 星期四

Silverlight 4 beta 登場 : 此時無聲勝有聲, 一切盡在不言中...

http://www.silverlight.net/getstarted/silverlight-4-beta [懶得看英文?]
http://www.techweb.com.cn/news/2009-11-19/474275.shtml

你認為該有的,過去卻沒有的,現在都有了, 列印, 滑鼠右鍵, WebCam, 拖曳檔案, 驗證與安全性, RichtextBox, 剪貼簿, 輸入法支援...

每回PDC總要要丟出一些令人訝異的東西...Anyway, 不多說了, 此時無聲勝有聲, 一切盡在不言中...

以下節錄自Tim's Blog
Visual Studio 2010 Beta 2 or Visual Web Developer Express 2010 Beta 2 (pick one)
Silverlight Tools for Visual Studio 2010
Expression Blend for .NET 4 Preview – for authoring Silverlight 4 and WPF 4 applications
WCF RIA Services (formerly .NET RIA Services) (NOTE: This is actually included in the SL Tools for Silverlight 4)
Silverlight 4 SDK CHM (offline documentation) – optionally online here as well
• Updated Silverlight Toolkit for Silverlight 4
• Developer runtimes: Windows and Mac platforms
Silverlight 4 SDK only – not needed if you install the tools above
Silverlight Media Framework – a new, Open Source media player framework for you to use.

Windows Azure 雲端應用程式開發

微軟煞有介事的弄了一個『Windows Azure 雲端應用程式開發』網站,提供SDK和相關資源的下載。雲端應用程式,簡單的說,就是把我們寫的應用程式放在遠端伺服器上(雲端),透過internet串聯,開發人員不需要去管(不需要在意)雲端的實體狀況,雲端設備供應商負責營運、維護、擴充、並確保效能上的最優,而開發人員只需要focus on開發的部分。(甚至有些雲端服務供應上會負責軟體的使用付費或收款)

如此一來,開發人員就可以專心開發,關於程式儲存位置、資料庫實體位置、使用者資訊(組織或帳號)這些都不需要操心,且開發出的應用程式可以在任何有網際網路連線的地方即可執行(當然也可以考慮開發出離線應用)。

而微軟和Google都提供了所謂雲端應用程式開發的SDK和相關資源,也就是說,你只要透過這些開發技術並且符合整個設計框架,就可以開發出所謂的雲端應用程式,放在網際網路上讓眾人執行。

當然,由於程式位於雲端,所以我們不(需要)知道具體的位置,微軟的雲端服務承諾我們24小時不打烊的服務以及最穩定和高效能的平台,只要你的程式放上去,隨即可以在網際網路上執行,但是由於在雲端,因此整個開發並不像我們把程式寫在實體機器或是部屬到IIS這樣的概念,所以沒有實體的SQL Server,沒有實體的資料庫,取而代之的是SQL Data Services,這是一套微軟提供的資料庫服務,我們可以申請帳號,然後免費(目前)存取,你的應用程式資料存放,就透過這組服務來進行,這表示你的資料也在雲端,你也不需要知道他的具體存放位置,微軟(運端服務供應商)負責保障資料的安全性。

同樣的,與組織、人員登入有關的機制,微軟提供了Live Services,負責管理使用者資料及應用程式資源,所謂的使用者資料其實就是過去的Windows Live技術,除此之外,還有一套Microsoft .NET Services,類似過去的.NET Framework,提供開發人員所需要的類別庫(現在是以服務的形式出現)。

有了這些,開發雲端應用就變得相對簡單了。還有不足之處?別擔心,除了微軟之外,還有太多的廠商正準備涉足這一塊,提供各式各樣的雲端服務,讓開發人員使用(當然,以後這些服務都要錢),慢慢的軟體變成租賃性質,甚至我們寫程式時用到的組件、服務,都變成租賃性質,回頭想想,這一切都是建立在全世界的連線基礎internet上,幾年後,軟體開發會不會變成另一個更有趣的世界?(屆時一定很多電影形容當internet斷線之後,造成世界末日的場景)

不論如何,在眾多大廠對雲端技術的推廣與支持下(商周報導,Google、微軟、亞馬遜、IBM、戴爾、昇陽、惠普等各科技大廠,都大舉跨入雲端運算領域。儘管雲端戰場已經打得火熱,還是有人認為,雲端運算不過是IT大廠想出來的另一個行銷花招。對此,廣達電腦董事長林百里的回答是:「No!這不是slogan(口號)也不是謊言,這是一個must(必然),是未來的氧氣。」),呵呵,好一個未來的氧氣,不管如何,大公司砸大錢投資是事實,如果你對這部分有興趣,現在微軟已經開放申請,開發人員可以到底下這個網址:
http://msdn.microsoft.com/zh-tw/azure/default.aspx
相關的SDK、開發的方式、教學資訊、影片...都已經在網站上了。

2009年11月16日 星期一

Office Live與雲端技術

隨著所謂的雲端技術的逐漸熱門(說到熱門,每隔一段時間就有一些熱門或風雲技術,但會不會撐下去則不一定,有的熱門技術沒多久就再也沒也人提起了,不過不知道你有沒有發現,最近一期的Run!PC和商業週刊,都在討論所謂的雲端技術...而Google、微軟等大廠都在用各種不同的方式支援,所以和Live有關的,我們也不免俗的要討論一下),Office也支援了雲端的儲存和共享機制,從現在開始,你可以下載Office Live Update 1.4套件,同時在這邊申請一個Office Live Workspace 帳號,完成之後,就可以享受 線上儲存、遠端多人合作等功能。

Office Live Workspace 有點類似MOSS,可以讓多人共享、共同編輯同一個檔案,或是作為團隊(公司、同學、家庭)的文件存放位置,同時你可以針對不同的工作區或文件設定分享,讓有權限的人才可以存取。微軟贈送5G的儲存空間,所以我可以把研討會的投影片直接放在網路上,只要有任何一台裝有office的NB就可以直接工作。

不僅如此,還可以跟Outlook整合,把通訊錄和行事曆拋轉到網路上。

而Office Live Update則讓你可以直接從Word、Excel、PowerPoint直接存取雲端中(Office Live Workspace )的檔案:

你會發現儲存檔案時,除了Local之外可以直接存到遠端:

另外,Office也快推出Web版,有興趣的朋友可以參考[Video],Office的Web版配合Office Live Workspace,這顯然會帶來一股不小的改變,看來微軟對雲端真是磨刀霍霍,對於開發人員來說,是否開始需要思考自己的應用程式是否也能搭上雲端的這股浪潮呢。

VS2010中的Silverlight Toolkit

自從Silverlight Toolkit開始被我歸類為必備品之後,VS2010beta2推出後,我最擔心的就是Silverlight Toolkit是否能夠在VS2010環境中運行,特別是DataForm。

如果有看過我在TechDays或是Silverlight Training介紹DataForm的讀者或網友,肯定也和我一樣,很關心DataForm是否在SL on VS2010的環境中也可使用。

所幸經過測試當然是OK的,使用SL Soolkit Oct 19 2009的版本,在V2010中也可以正常運行:

另一個很有趣的部分是VS2010的開發環境,你會發現圖中Button的上下左右四條線條,是可以點選的,和Blend當中一樣,這可以用來設定Aligment的,依照傳統WinForm設計的概念,就是Dock:

總的來說,至少在VS2010當中已經有所視即所得的開發環境,不需要每次非得切換到Blend進行開發了。

BTW, VS2010切換到Blend的時候會出現一些警告訊息,Blend 3目前是看不懂VS2010的專案檔的,不過你可以選擇忽略這個訊息,Blend 3依舊可以邊修VS2010產生的XAML檔案。

2009年11月15日 星期日

缺席的ASP.NET 3.5

上周有一些時間,到書店晃了一下,坦白說,我已經很久沒有逛(嚴格說起來也不是逛,來去匆匆實在沒有逛的感覺)書店了,老實講,每回去書店我還是會站在電腦書籍那一兩櫃之間徘徊,不管是不是電腦書的專賣店,我都會去看看『市場狀況』,不過最近這一年也少了,主要的原因一方面是電腦書籍的寫作和出版目前不是我的主業,另外一方面是最近也沒出什麼新書,甚至沒有很確定的寫作計畫,所以暫別一下市場也沒啥不好。

這回去,我看到架上有非常多的ASP.NET 3.5新書,新書是指,今年出版的書籍,看了之後不免也有些慚愧,從ASP.NET 2.0之後,我沒有再撰寫ASP.NET的書籍,一方面是Silverlight佔去了我相當多的時間,另一方面是(對,跟大家碰到的問題一樣),技術的改版太快,而書的整體銷量也確實沒有以前好,聽說(我沒有數據,所以真的是聽說),現在在架上所有的軟體開發類資訊書籍一個月銷量的總和,可能還不及過去一本暢銷書一個月的銷量,對這一點我是蠻相信的。但是反觀作者的寫作成本卻很高,拿我的好友奚祭司的經驗來說,扎扎實實的認真寫一本書大概要超過半年,縱使寫作速度快一些的,恐怕3-6個月還是跑不掉,但是現在一本書的銷量可能不及2000本,但是幾乎不到一年就得改版或更新,換算一下,全職作者每個月的工資恐怕差不多一個初階工程師一個月的薪水。

這也是你會發現很多作者其實是Part time在寫書的,大概大夥算算也發現不合,所以還是得找一個『正職』才行。同時你也會發現,市場上多了很多新手作者,或是大陸作者寫的書,原因是對出版社來說,新手作者(或大陸作者)的成本比較低,在沒有把握書一定會賣的狀況下(即便過去的暢銷書作者,也沒人有把握書一定賣的),能省任何一點的成本,都是能繼續活下去的關鍵,氣比別人長,在現在這種書市一片蕭條的狀況下,也是成為最後贏家的重要條件。

從作者和出版社的角度看,是市場變小了,大家都不買書了,或是開發人員(寫程式的人)變少了,至少在台灣正體中文書籍的市場很明顯是這樣,而出版又是一個需要規模的市場,沒有規模是無法獲利的,如果每一本書都只賣個一兩千本,那出版社距離收攤也不遠了。

但是從讀者的角度來說,則是可選擇的書籍少了,且品質或內容變差了,學習的成效變差了,能夠在職場上應用的就更少了,然而在網路上可尋得的資源卻變多了,這也是目前出版市場碰到的一很大的問題。如果閱讀只是為了取得片段的資訊,對於載體來說,其實網路比紙本書籍要好得多,又可以搜尋,又可以複製貼上,方便的很。

如果閱讀書籍沒有讓人有享受的感覺,恐怕會被blog取代是無可避免的,書籍的走向和過去可能完全不同了。也因此,ASP.NET 3.5的書籍,我是真的一本也沒出,一方面沒時間,一方面我也想想清楚台灣出版市場未來的走向。而現在,有結論了嗎?

面對明年的ASP.NET 4.0,我提過有機會我會在BLOG上把相關的東西整理出來,也有網友讀者建議不如直接寫本ASP.NET 4.0的Bible類書籍,也有網友問MVC的書籍是否打算出,這些建議我都放在心裡了。 不管出書與否,在Blog上各位都會看到我們最新的動態,一些最新的內容也都會先出現在 Blog或雜誌上,書籍,可能無法求量,但是和我上課時的心情一樣,就當作一種和讀者網友間交朋友的緣分了。

2009年11月10日 星期二

Silverlight Multi-Touch程式範例與說明

在這個月(2009/11)的Run!PC當中,我介紹了如何利用Silverlight開發Multi-Touch應用程式,包含如何同時拖曳多Element、利用Multi-Touch技術針對Element進行放大縮小,或是利用Multi-Touch配合Ink達成繪圖或手寫輸入的功能,有興趣的讀者可以參考。

2009年11月2日 星期一

VS2010 Beta 2

先前由於時間的關係,所以實際談VS2010的機會不多,終於,VS2010 Beta2現在開放下載了,同時,這次的下載附帶了一個『Go Live許可』,意思是你可以在特定的授權狀況下,開始以beta2的軟體開發你的產品,某種程度上也意味著微軟對於Beta2品質的信心以及希望能夠在剩餘的時間內廣泛的收取用戶的建議。

依照我們過去的經驗,Beta2某種程度上已經相當接近RTM版本的主要功能,同時,在安裝中您也會發現MVC 2和SL3已經是預設安裝的一部分了。很多新東西可以玩,ASP.NET 4.0的新功能在TechDays 2009場次中我也曾大致介紹,但是由於時間的關係,沒法完整的和大家分享,接下來我會盡可能就ASP.NET 4.0的部分和大家有更多的分享與說明...

VS2010 Beta 2下載位置:
http://www.microsoft.com/downloads/details.aspx?FamilyID=dc333ac8-596d-41e3-ba6c-84264e761b81&displaylang=en#filelist

2009年11月1日 星期日

不患寡而患不均

剛看完班艾佛列克和羅素克羅所演的絕對陰謀(State of Play)讓我覺得有些感慨,片子還算挺好看,只是我感慨的部分是關於報紙這個載體,當然,這跟劇情無關,只是片中羅素克羅說了一句:『你覺得現在都沒人看報紙了嗎?即便如此,我堅信讀者還是希望知道真相。』

這句話讓我想到這幾年由於網際網路等電子媒體(包含最近很熱門的電子書)興起之後,報社關的關倒的倒、換人經營的也不少,而剩下來(或興起的)報社,報導的真實性和正確性,則同時隨著報社價值觀的改變(銷量導向),和過去我們年輕時完全不同。

這幾年我的感覺是,訊息變多了,內容卻變得空泛了,報紙張數變很多,但是有深度的專訪和內容越來越少;電視節目很多,但是能讓你靜下心來看的越來越少;新聞台變成24小時放送,但是八卦流言和未經證實的小道消息卻變成新聞的主流;台灣書出得越來越多,但是值得放在書櫃上留下來的卻越來越少;可以吃的食物和新花樣很多,但是讓人健康的越來越少,反倒是有問題的食品層出不窮。

這幾年很多事情都變了。過去的價值觀,被持守的正直、公平、誠信、憐憫...在這個時代似乎都只是變成參考,好像成功和口袋賺得飽飽的才是王道。即便被抓到貪汙賄選定罪,但是選舉還是可以有票。

小小的台北市同時存在著一坪上百萬的豪宅和流浪街頭的老漢,有一天我搭高鐵很晚回到台北,才知道原來台北車站底下有那麼多流浪漢。在貧富差距越來越大的社會中,大多數的市民是永遠不會快樂的,幾千年前孟子早說了:『有國有家者,不患寡而患不均,不患貧而患不安』。

公平是穩定社會的碁石,我相信這個世界上大多數的人都想當好人,只是我們須要先建立出一個能夠鼓勵好人的社會。很多傳統的東西,還是值得留下來的...

2009年10月25日 星期日

Silverlight的Ink機制

Silverlight一直以來就有所謂的Ink手寫功能,過去我很少提到這部分,最近有一位讀者問到操作的方式,因此一併在BLOG上介紹。

InkPresenter控制項是筆墨的關鍵,你可以透過InkPresenter的Strokes集合屬性,把一個或多個Stroke物件加入Strokes集合中,而Stroke物件的StylusPoints屬性所表達的就是一群連續的點,用來在畫面上呈現出各種線條。

而透過滑鼠的MouseMove事件,我們可以很輕易的取得滑鼠經過的每一個點,例如:


private void InkCanvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
//將每一點加入NewStroke
NewStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(InkPresenter1));
}
如此一來,我們就可以輕易的建立出可以手寫繪製的畫板了。

[測試範例] [完整範例程式碼下載]
當然,Ink機制也可以跟Multi-Touch配合,關於這部分在下一期的Run!PC當中會配合Multi-Touch一併介紹與說明,有興趣的讀者可以參考Run!PC 11月號。

2009年10月17日 星期六

找出專案的潛在問題

最近因為一些公司的專案忙得昏天暗地,剛好前陣子是TechDays,整個重心都放在TechDays上,又同時得顧及手上的一些專案工作,實在是有蠟燭兩頭燒的感受,很多事情即便列出優先順序,卻發現實在是時間不足,我常常有一早起來,坐在電腦面前,突然間一天就過去了的經驗,一整天都處於緊繃和忙碌中,偏偏email又一直來,突發事件不斷...似乎沒法喘口氣釐清一下事情的整個狀況。

回顧十多年的軟體開發生涯中,偶而會陷入這樣的情境中,這時候除了救火之外,找出問題的核心變得相當重要,我想起過去一個前輩告訴我的,他分享了他的經驗,因為每一個主管手上的專案和工作都相當多,實在沒有辦法深入到每一個項目中。可是,如果不深入到項目中,怎麼能發現問題在什麼地方呢? 怎麼發現專案哪邊可能有潛在的問題? 並且提早處理呢?

我之所以會突然想到這位前輩的經驗分享,是因為我最近就碰到了這些問題,手上同時有很多專案,坦白說我沒法深入每一個專案,但是畢竟我是負責這些專案的管理者,我得要能夠預先發現問題,確保專案能夠順利進行。

這時候,『問對問題』變得很重要,過去的經驗讓我發現,確實有很多主管問的問題都一針見地,立刻可以掀出專案潛在的問題,讓可能發生的意外無所遁形,我過去以為這些PM大概天賦異稟或是有常人沒有的洞察力,但是我後來發現,其實似乎也有一個方式可以遵循。

其實道理很簡單,當年,那位前輩各訴我,當你發現某些地方越被找理由蓋起來,那些地方就越要掀開來看,包含主管自己對自己的要求也是一樣,人都有惰性,你發現自己越不想碰的問題,越表示那些地方將有著大問題,甚至,有些其實是自己潛意識根本不想去碰的部分。做主管的得要能察覺這些現象。

自己寫了多年的程式碼,也帶了多年的專案,越來越覺得真的是這樣,當某些模塊,在專案討論的時候,總是被成員找理由(理由多半是很合理且冠冕堂皇的)跳過或是忽略,當時程總是被粗估簡化,當驗收條件總是被模糊化,系統流程好像不是很solid,那很抱歉,這些地方多半都有著嚴重問題,特別是我們(開發人員)很喜歡把規格模糊化,或是你在進行專案會議時,發現針對某些部分專案成員的回答似乎總是有些不很確定,那幾乎可以斬釘截鐵的肯定告訴你,這表示這些地方將來真的會有大問題。

大多數主管其實心裡也知道,只是因為自己也很忙,所以下意識的跳過了,想說算了,下次開會的時候再盯一下,這時候千萬要提醒自己,別忘了這一塊肯定是有問題的。

過去的經驗告訴我真的是這樣,自己潛意識越是不想打開的那段程式碼,裡面暗藏著越多的bugs,在一天的工作計畫中,自己越不想去碰的那塊,越是會出問題,反過來說,如果你專挑自己越不想碰的事情先做,越能夠讓一天的工作順利進行,想想還真的是這樣。

道理很簡單,大家都懂,只是要下定決心去做,似乎還真不容易。

2009年10月12日 星期一

ASP.NET 4.0中的URL Routing

在今年TechDays 2009的ASP.NET 4.0場次中,我介紹了一些ASP.NET 4.0的新功能,其中有許多功能都是在 3.5 SP1中展露頭角,可能在MVC中,也可能在Dynamic Data中,這些3.5 SP1中的功能在釋出後深受開發人員的好評,很多開發人員反映是否可以加入在Web Form中,因此MS也就從善如流的照辦了,其中一個功能就是 URL Routing機制。

過去URL Routing機制僅被MVC和Dynamic Data支援,如今ASP.NET 4.0當中直接納入了Routing類別,也就是說,WebForm也直接支援了Url Routing機制。

URL Routing機制可以讓我們很輕易的建立出REST風格(請參考REST一下吧)的網址,也可以讓我們輕易建構出類似Dynamic Data風格的網址,像是:
http://myWebSite/Product/Edit/XBOX
我們可以用上面的網址來表達要編輯一筆產品資料,產品名稱為XBOX。這樣的網址呈現方式不只更加的直覺清楚,同時也有著相當大的延展性,例如,我們可以用底下的網址表明要編輯名稱為Student資料表中的David同學的資料:
http://myWebSite/Edit/Student/David
當然,也可以用底下這個網址來表達要編輯名稱為Employ資料表中的Eric員工的資料:
http://myWebSite/Edit/Employ/Eric
而這兩個網頁理論上行為上完全一致,其實可以用同一個.aspx頁面來執行。

也就是說,傳統的WebForm .aspx頁面,在編輯不同的資料表時,幾乎註定要寫不同的頁面(來維護多個資料表),如果有三五個資料表要維護,這不是問題,反正透過Wizard很快就可以建立出這些.aspx頁面,但是,如果是一千兩千個資料表,那你就要好好思考了...

為何傳統的WebForm不能用『一個』.aspx頁面來處理這一兩千個資料表呢? 其實每個資料表的編輯行為(Behaivor)不是都一樣嗎?

是的,但是這背後的原因很多,主要是因為SqlDataSource、FormView、GridView的行為和DataBinding機制,造成了ASP.NET注定讓UI層和DB的相依性過高(在.aspx頁面中有SQL指令或是DataForm/DataGrid的template中有資料表欄位名稱),導致很難(不是絕對不行)設計出一個.aspx頁面來同時處理數個資料表的編輯動作。反過來說,如果想要這樣做,肯定就無法輕易的用FormView或是GridView來完成,而需要在.aspx頁面上動態地產生資料表欄位所對應的UI欄位,不過很慶幸,這我們已經在ASP.NET 3.5 Sp1中透過Dynamic Data技術實現了。現在我們透過DynamicData技術,已經可以動態的針對資料表來產生前端UI所需要的Control,也就是說,我們可以輕易設計出以一個.aspx頁面就處理多個資料表的功能了...(這背後涉及的技術很多,以後有機會我們慢慢談...)

既然在技術上已經可以實現,那URL也要稍加配合吧?所以,ASP.NET Dynamic Data Web Site/MVC開始支援URL Routing機制,過去我們的網址都是:
http://WebSite/Folder/PageA.aspx?Para1=abc&Para2=123
這樣的網址看起來真的很遜,當使用者看到上面這樣的網址時,會發現整個網址的設計其實是反映出應用程式開發的『資料夾』架構,這有幾個缺點:

1.安全性降低:因為使用者很容易知道我們把哪一個功能(頁面)放在哪一個目錄下。
2.網址無法表現出功能性:上面的網址只會呈現出資料夾,而非使用者在意的功能,這些資料夾規畫對於使用者來說沒有意義。

如果我們可以把它改成:
http://WebSite/FeatureName/ActionName/Parameter
這樣的網址,則網址就較有意義了,同時也符合我們架構大型(或超大型)ASP.NET應用程式的需求,因為我們可以事先規劃功能,然後將不同的功能切割為不同的網址表示法,這樣不管網站是由幾個人同時開發,都不會搞出亂七八糟的Folder和網站架構。而對於開發人員來說,也不需要管另一個開發人員到底把功能架在哪一個Folder的哪個.aspx頁面,在網頁和網頁需要溝通或是彼此呼叫的時候,只需要依照最初的SD規劃,redirect到某一個url(例如需要編輯產品AK47的資料時可以redirect到http://WebSite/Edit/Table/Products/AK47),而這個網址自然會被URL Routing機制導成真正的.aspx頁面,這對於開發大型網站也頗有助益。


OK,了解其意義之後,接著看ASP.NET 4.0怎麼架構Url Routing機制,其實很簡單,只需要在Global.asax中撰寫程式碼設定即可:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Routing.RouteTable.Routes.Add("test1", _
New Routing.Route("Search/{ProductName}", _
New Routing.PageRouteHandler("~/WebForm1.aspx")))
End Sub
我們透過Routing這個新加入的類別,將『http://WebSite/Search/{產品名稱}』這樣的網址對應到WebForm1.aspx,如此一來,當使用者在網址列上輸入(或程式設計師透過redirect將網址導入『http://WebSite/Search/AK47』時,就會執行導http://WebSite/WebForm1.aspx

而開發人員可以在WebForm1.aspx中透過RouteData.Values("ProductName")抓取到參數值『AK47』,這樣就可以輕易實現URL Routing功能了。

2009年10月7日 星期三

[推薦] 網路電台

很久以前,在我小時候的那個年代,我很喜歡一個電台『中廣音樂網』,每天24小時不停放送的音樂,大部分都是我很喜歡的類型,輕音樂、爵士、或是抒情搖滾,但是前幾年可能因為電台的經營策略或是改組,這個電台轉型了,轉型之後我就再也不是忠實聽眾了,因為整個電台的類型和我喜歡的差異頗大。

最近這幾天,因為某些原因,我在醫院住了幾天,陪著家人,在偶然的機會下,發現了兩個網路電台(沒有FM/AM頻道的,就只能在網路上聽),由於我時常會有需要在辦公室外工作的機會,因此身上總是會帶著一台小型的Router,可以透過LAN或是USB 3.5G網卡上網,並且建立一個Wireless的工作環境,因此收聽網路電台對我來說是比收聽實體電台還來的方便。

聽了幾天,覺得很喜歡,因此推薦給大家,
http://www.goodnews.org.tw/classic.php
http://www.goodnews.org.tw/ccm.php

這兩個網路電台是佳音廣播電台建立的,其實佳音廣播電台是一個台北的區域小電台,沒有很好的資源,或是很強的經濟後盾,但是隨著藉著現在科技的進步,可以讓電台不需要用很高的成本,就可以透過網際網路對全世界廣播,把好聽的音樂傳遞出去。

就跟以前的中廣音樂網一樣,這兩個電台的屬性當是我相當喜歡的類型,讓人可以安靜下來,特別是我在醫院,所以相當受用。

如果你偶而心情不好,如果你需要安靜思考,如果你希望能夠整理情緒、重新有一個平靜安穩的心情,那不妨聽聽這兩個頻道,在如此忙碌競爭的環境中,或許會讓你有不一樣的感受。

2009年10月1日 星期四

[轉貼]多點觸控程式設計競賽 (及 如何用滑鼠模擬多點觸控)

隨著微軟最新作業系統 Windows 7 終於進入上市最後倒數階段,微軟與.DotBlog舉辦「Windows 7 多點觸控程式設計大賽」,個人參賽者組得獎作品可奪得多點觸控筆記型電腦。

活動網址「Windows 7 多點觸控程式設計大賽」http://w7contest.dotblogs.com.tw/competition.aspx
開發者可以從 http://msdn.microsoft.com/zh-tw/windows/default.aspx 取得相關的技術文件。

不過比較讓我感興趣的是,其中有介紹如何透過模擬方式在Vista上透過滑鼠模擬多點觸控,挺有趣的,相信有不少人需要,提供大家參考。

Silverlight 3 中的multi-Touch程式開發

TechDays 2009忙完了,終於有一點點時間可以回頭寫SL3中的多點觸控,隨著Windows 7的Launch在即,我開始屢屢被問到Silverlight 3中的多點觸控程式開發的部分。

在TechDays 2009中也稍微提過,其實SL3中的多點觸控一點也不複雜,架構上相當簡單,底下這是SL3中多點觸控的訊息架構:

從這邊您也不難發現,觸控螢幕(或面板或NB)、Windows 7、IE8當然都是必要設備,缺一不可。

對於SL3應用程式來說,只是很簡單的從IE8接受多點觸控事件,或者是模擬成滑鼠事件。至於很多人關心的可以接收到幾點,端看設備而定,如果設備傳入的是兩點(我手上的觸控螢幕和NB都只支援兩點),傳入SL3的就是兩點;若設備支援多點,SL3就接收到多點,如此而已,沒啥特別的。

要在SL3當中接收到多點觸控的信息,再簡單也不過,最簡單的方式如下,動作只有兩動:
1.Hook Multi-Touch事件
2.在事件中取得點,進行處理或運算。
程式碼如下:

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//Hook事件
Touch.FrameReported += new TouchFrameEventHandler(Touch_FrameReported);
}

void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
//取得點數
int n = e.GetTouchPoints(this.LayoutRoot).Count;
this.textBlock1.Text = "points : " + n;
//將每一點座標顯示出來
foreach (System.Windows.Input.TouchPoint p in e.GetTouchPoints(this.LayoutRoot))
{
this.textBlock1.Text += " \n(" + p.Position.X.ToString("0.00") + "," + p.Position.Y.ToString("0.00") + ") - " + p.Action.ToString();
}
}
}

執行結果:

[範例]

BTW, 這一次範例變成C#了,因為好多人問我要C#的code或是書,因應目前VB/C#還是差不多55波的趨勢,我也不知道到底要寫C#還是VB來的好,總之就隨興寫了,大家就勉為其難和我一起培養 '雙語' 的能力。畢竟這雙語也是一種趨勢嘛...

2009年9月25日 星期五

Tech.Days 2009 研討會順利結束

感謝大夥的熱情參與,今年Tech.Days 2009 研討會順利結束了,在這次的研討會中,SL3的部分是focus在企業的應用,透過.NET RIA Services, Business Application Template以及SL3當中的一些技巧,很快速的建立典型的企業應用程式;同時也提到了OOB與離線應用,和前陣子我Demo的SL3 Multi-Touch技術;而ASP.NET 4.0這個主題,則是概略性的介紹了未來ASP.NET 的四個大方向,包含Dynamic Data, WebForm的改變,AJAX 4.0的Client Template與Binding, 還有MVC的概念。

短短的70分鐘,實在沒法把整個主題全數介紹,僅能挑出幾個比較重要和較有意義的部分和大家分享,因此細節的部分我會在接下來一兩個月全數放到BLOG上,陸續介紹ASP.NET 4.0的一些新功能和SL3的應用技巧。

總之,很謝謝大家的參與和支持,很高興在會場有機會碰到大家。

2009年9月20日 星期日

傳說中的Silverlight 3多點觸控(Multi-Touch)應用

SL3推出已久,傳說中,SL3支援Windows 7的Multi-Touch功能,為何是『傳說中』呢? 因為一直以來苦無Touch Screen設備可以讓我測試,害我在present Silverlight Application時,總是有那麼點小小的遺憾,這個心頭的遺憾始終揮之不去...(不是我不去買,是市面上還買不到通過W7認證的螢幕,不過大家別擔心,馬上你就會看到支援W7的Touch設備將如雨後春筍般的出現啦)

可能是微軟聽到了我在連續四場研討會的小小抱怨(...ㄟ...是懇求),終於肯弄台Touch Screen借我來玩玩,難得微軟這麼大發善心,此時不借更待何時,儘管當天要從遙遠的客戶處繞到微軟總部,但還是專程去了一趟...

周五,Touch Screen終於到手,回家第一件事情就是把塵封已久的Windows 7打開(是的,其實我W7早就灌好了很久,但是沒有Touch Screen始終讓我意興闌珊),把螢幕給接上去...怪怪,怎麼沒反應咧??? 東弄西弄,開始有畫面了(似乎觸控也work),只是怎麼解析度怪怪的,依照Anne跟我說的,只需要把螢幕接頭接上,插上USB就搞定啦???

研究了半天,原來根本不是Touch Screen的錯,Touch Screen還真的是接上去就可以用,原來是我剛灌好的Dell NB的W7顯卡驅動程式還沒安裝,導致無法輸出正確的訊號到Touch Screen,立刻到nVIDIA網站,下載,安裝,搞定。

嘿嘿嘿,接下來花了約莫1.5個小時,第一個Silverlight Multi-Touch應用程式完成!!! 底下是我寫好的第一個SL3 Multi-Touch應用程式範例,嘿,這應該是現階段少數可以用Multi-Touch控制的網站喔(有Windows 7+IE8+Touch Screen的朋友可以連上去測試一下Multi-Touch在Browser上執行的狀況):
http://blog.studyhost.com/BlogData/20090921/MultiTouchTestTestPage.html
PS.檔案很大是因為我用了一個MediaPlayer的控件,跟Multi-Touch無關...

但我想目前能測試的網友肯定不多,因為大家都還沒有Touch Screen,所以我拿攝影機錄製了一段Video,有興趣的朋友可以看看這段測試,你會看到我用SL做了一個簡單的網站,並且讓圖片、影片、圖表、資料等物件都可以透過Multi-Touch放大縮小,控制起來算是相當順暢(順暢度主要跟程式寫法有關,到是跟Hardware關係不大),詳細的Touch Screen實測報告容後再寫,如果我在TechDays的SL場次時間來得及,我會現場Demo一下(不保證一定來得及)。

總的來說,我拿到的這台Touch Screen蠻順的,真的是挺順,比起我過去用過的和聽說的都好很多,如果要我買我可能會買這種(而非那種All-In-One的PC或NB),只是大大一台螢幕攜帶比較不方便。(強烈降低我搬到TechDays Demo的意願)

而SL3要怎麼撰寫支援Multi-Touch的應用程式呢? 其實這部分一點也不困難,程式碼的部分我會在後天的TechDays和大家報告,同時在下一期的Run!PC雜誌和我後續的BLOG上會陸續和大家分享。^_^

嘿嘿,SL3...果然準備好了!

2009年9月6日 星期日

讀者留言回覆:如何在Blend 3當中設定Effect

讀者留言:
董老師您好,
雖然了解到在Blend 3裡新增了陰影的功能, 但怎麼試都試不出來...我簡單地畫了一個矩形, 選取Effect裡的DropShadowEffect, 但怎麼試都沒有反應, 因此想請問一下, 一個簡單地矩形+陰影(如同一般繪圖軟體的陰影效果), 該怎麼實做呢?

回覆如下:
只要安裝有SL3 SDK, Blend 3, Blend 3 SDK等元件的開發環境,都應該可以順利的使用Effect才是,相關的Xaml碼相當簡單:


<Rectangle Fill="#FF00D3FF" Stroke="Black" Height="106" Margin="53,40,289,0" VerticalAlignment="Top">
<Rectangle.Effect>
<DropShadowEffect BlurRadius="36" ShadowDepth="13"/>
</Rectangle.Effect>
</Rectangle>


操作步驟影片:[影片] [範例下載]

Silverlight 3中規則運算式(Regular Expressions)的支援

在SL3當中,有一個新支援的重要類別,也就是位於System.Text.RegularExpressions命名空間底下的Regex,在RegularExpressions命名空間底下包含了幾個與規則運算式有關的重要類別,而最方便使用的莫過於Regex,使用的方式很簡單:

System.Text.RegularExpressions.Regex.IsMatch(要驗證的文字, 規則式)

其中IsMatch是一個靜態方法,因此我們直接呼叫即可,完整的程式碼可參考底下範例:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
Me.TextBox1.Text = "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
End Sub

Private Sub Button2_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
Me.TextBox1.Text = "0\d{2,4}-\d{6,8}"
End Sub

Private Sub Button3_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
MessageBox.Show(Text.RegularExpressions.Regex.IsMatch(Me.TextBox2.Text, Me.TextBox1.Text))
End Sub

此場景的XAML指令碼如下:

<Grid x:Name="LayoutRoot">
<TextBox x:Name="TextBox1" Height="29" Margin="140,32,270,0" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap"/>
<TextBlock Height="30" HorizontalAlignment="Left" Margin="29,32,0,0" VerticalAlignment="Top" Width="111" Text="規則運算式:" TextWrapping="Wrap" FontSize="16"/>
<TextBox x:Name="TextBox2" Height="29" Margin="140,80,270,0" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap"/>
<TextBlock Height="30" HorizontalAlignment="Left" Margin="29,80,0,0" VerticalAlignment="Top" Width="111" FontSize="16" Text="規則運算式:" TextWrapping="Wrap"/>
<Button x:Name="Button3" Height="30" HorizontalAlignment="Right" Margin="0,80,180,0" VerticalAlignment="Top" Width="65" Content="驗證" FontSize="16" Click="Button3_Click"/>
<Button x:Name="Button1" Height="30" HorizontalAlignment="Right" Margin="0,32,133,0" VerticalAlignment="Top" Width="112" FontSize="16" Content="範本 - email" Click="Button1_Click"/>
<Button x:Name="Button2" Height="30" HorizontalAlignment="Right" Margin="0,31,18,0" VerticalAlignment="Top" Width="112" FontSize="16" Content="範本 - Mobile" Click="Button2_Click"/>
</Grid>

執行結果如下:

http://blog.studyhost.com/BlogData/20090906/RegexExampleTestPage.html
透過這個內建的方法,我們在SL3當中也可以輕易的針對使用者的輸入進行驗證,相當方便好用。

2009年9月1日 星期二

課程:Silverlight 3.0 RIA應用程式設計與網站開發實務

課程:Silverlight 3.0 RIA應用程式設計與網站開發實務(18 hr)
地點:新竹清華大學
時數:18 hr

在新竹地區第一次舉辦的Silverlight 3.0課程,報名時間快截止囉, 位於新竹的朋友若有興趣可參考底下網址: http://edu.tcfst.org.tw/query_coursedetail.asp?courseidori=98C078

2009年8月30日 星期日

Silverlight 3 當中的EasingFunction

EasingFunction是SL3當中針對動畫機制加上的特效處理,如同Effect一樣,SL3當中內建了基本的一些功能,當然開發人員也可以繼承基底類別開發自己的EasingFunction,我們先來看如何使用。

Dim sb As New Storyboard
Dim da As New DoubleAnimation
da.From = 0
da.To = 350
da.Duration = New TimeSpan(0, 0, 3)
Storyboard.SetTarget(da, ellipse2)
Storyboard.SetTargetProperty(da, New PropertyPath(Canvas.TopProperty))
sb.Children.Add(da)
sb.Begin()

上面這段程式碼用來動態建立一段動畫,並且讓動畫發生在一個圓球物件(ellipse2)上,這段動畫很簡單,在三秒內,讓圓球從上往下墜落,沒什麼特別的。

但是一旦加上EasingFunction:

'設定EasingFunction
da.EasingFunction = New BounceEase With {.Bounces = 10, .Bounciness = 2, .EasingMode = EasingMode.EaseOut}

動畫就將大大不同,球體(ellipse2)墜落動作變成具有彈跳性:


從這邊我們可以知道,透過設定DoubleAnimation的EasingFunction 屬性,我們可以指定特定的效果給動畫,而BounceEase就是效果之一,其位於System.Windows.Media.Animation命名空間之下。您可以在該命名空間下找到其他更多的效果,如前所述,您也可以繼承EasingFunctionBase類別建立自己的EasingFunction特效。

2009年8月10日 星期一

Silverlight 3中的bitmap API

SL3中的Bitmap API,是影像處理的基礎,它讓我們得以直接在記憶體中建立一個點陣圖畫布,使用的方法很簡單,直接透過Imaging底下的WriteableBitmap即可:

Dim wBitmap As New System.Windows.Media.Imaging.WriteableBitmap(…)

建構函式有三種呼叫方式,可隨您的需要使用:

WriteableBitmap(影像來源BitmapSource)
WriteableBitmap(寬Int32,高Int32)
WriteableBitmap(任何物件UIElement, Transform物件)

例如,底下的程式碼將會建立一張空白的畫布在記憶體中:

Dim wBitmap As New System.Windows.Media.Imaging.WriteableBitmap(640,480)

而WriteableBitmap物件的Pixels屬性則可以讓我們設定點陣圖的影像:

wBitmap.Pixels(y * wBitmap.PixelHeight + x) = pixel

而上面的Pixel則可以透過底下這樣的方式計算出來:

Dim brg As Byte() = New Byte(3) {}
'Blue, B
brg(0) = CByte(color.B)
'Green, G
brg(1) = CByte(color.G)
'Red, R
brg(2) = CByte(color.R)
'透明度
brg(3) = color.A
Dim pixel As Integer = BitConverter.ToInt32(brg, 0)

透過這樣的方式,您可以很輕易的建立出類似底下這樣的影像雜點效果:

2009年7月30日 星期四

Silverlight 3 研討會 台中&高雄場次

錯過上周MSDN Silverlight 3研討會的朋友們, 在八月底將有兩場位於台中和高雄的Silverlight 3研討會, 相關資料如下:

2009/08/21 台中金典酒店 - 金典二廳 01:30PM - 03:00PM Silverlight 3 新功能開發實務 [詳情]
2009/08/28 高雄漢來飯店 9F 金鳳廳 01:30PM - 03:00PM Silverlight 3 新功能開發實務 [詳情]

2009年7月28日 星期二

Silverlight 3 中的Element to Element Binding

在SL3當中,針對Binding的功能增加了Element to Element Binding機制,雖然並不困難也不複雜,也不像是Out of Browser或是.NET RIA Services/DataForm那種大功能,但是其實妥善的運用這個小技巧也能讓我們在開發應用程式的時候方便不少。

例如,如果我們希望能夠讓 Slider在拖曳的時候,可以直接把值填入TextBox,過去SL2是一定要寫程式的,現在則可以利用底下這樣的Xaml指令碼,就可以很容易的完成:


這類的Binding機制還可以運用在data binding或是圖表等場合,實用性相當高,底下是上面Slider的例子。
[範例]

2009年7月25日 星期六

2009年7月23日 星期四

研討會:Silverlight 3 技術講座 順利完成

Silverlight 3 技術講座順利完成

多謝大家參加 7/23 的 Silverlight 3研討會,希望今天介紹的內容對大家有幫助,投影片的部分可以在微軟的網站下載,同時今有學員問到相關的問題和需要協助的學員,請記得直接發一封Mail給我。

另外,如果您位於台中或高雄,今天沒有機會參加,在八月中旬我們還會再安排台中和高雄的場次。詳細時間請參考微軟網站或筆者BLOG。

2009年7月21日 星期二

Silverlight 3 研討會

時間 : 2009/07/23 09:30 AM
地點 : 微軟 7AB

是什麼樣的技術, 需要在短短不到22個月的時間當中,迅速的推出了三個版本? 是什麼因素使得微軟在面對全球景氣訊號尚未明朗時,依舊毫不猶豫的投入大量的人力與物力,一反常態的讓Silverlight 3這個看似不會帶來任何額外收入的開發技術推陳出新地展現在全球開發人員以及設計師的面前? 究竟微軟對於Silverlight乃至於RIA的計畫和目標為何? 開發人員在面對眾多的RIA技術時,又該如何因應與選擇呢? 在這一場研討會當中, 我們將聊聊這些議題…

詳細資訊:
http://msdn.microsoft.com/zh-tw/dd996595.aspx

2009年7月20日 星期一

Silverlight 3 中的Pixel Shader Effect

Silverlight 3內建了Bitmap API,並支援了像素特效技術(Pixel Shader effects),這讓Silverlight中的每一個物件(UI Element),都可以輕易的具有模糊、陰影等效果。當然,設計師也可以自行建立各種特效,例如水紋、風動、版畫…等,在Silverlight當中重複使用。

開發人員可以透過物件的Effect屬性,讓物件有這種特殊效果:
Dim myEffect As New ShaderEffectLibrary.RippleEffect
myEffect.Amplitude = 0.1
Me.Image1.Effect = myEffect

例如底下這個範例就相當有趣,其實這只是一張很單純的圖片,但是當使用者以滑鼠點選圖片時,你將會看到水紋的特殊效果:

[範例]

2009年7月19日 星期日

找回生活 之 青境花墅(新竹)

這家店是我最近去過最理想的餐廳之一, 本人對理想的定義如下:
1.餐好吃
2.人不多
3.能上網
4.距離近
5.服務態度好
6.價格吸引人

這家餐廳上述全符合

其實我也一直搞不懂, 為什麼越靠近台北越沒有理想的餐廳, 你可以上網搜尋青境花墅, 會找到更多照片和簡介, 因此我就不多說了, 一入園之後的大草地, 是台北根本不可能看到的奢侈(台北會弄成座位因為坪效之故), 顯然老闆不是以賺錢為主要目的, 餐廳內可以帶寵物, 可以攝影(有攝影棚可以讓小朋友當Model), 非常適合舉家一日或半日遊的地點...

圖一:餐廳內部




圖二:好吃的餐點



圖三:其實吃不太完

2009年7月17日 星期五

SL 3中的Local Connections

其實說來也挺詭異的, SL3 的Runtime並沒有大多少, 但是卻提供了許多新功能, 不知道MS他們怎麼塞進去的, 例如System.Windows.Messaging這一組功能就是其中之一, 他讓運行在同一個用戶端, 同一個domain下的SL App可以彼此之間交換資料, 稱為local connection.

寫法很簡單, 一樣撰寫一個傳送者和一個接受者, 例如:
傳送者:
Dim messageSender As New LocalMessageSender("receiver", LocalMessageSender.Global)
接收者:
Dim messageReceiver As New LocalMessageReceiver("receiver", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain)

分別在兩個不同的Browser中...就可以彼此傳訊了...相關的功能都會有事件可以使用...
[傳送者] [接收者]

2009年7月15日 星期三

SL 3 貼心的設計: 全螢幕以及視窗大小調整時的自動縮放

其實我覺得, SL 3最令人覺得貼心的設計, 並非是Child Window, 也不是新增的一堆功能和先前提過的滑鼠滾輪, 最讓我覺得貼心的是, 由於調整了Silverlight Host Control以及預設的Silverlight project template, 使得開發人員現在在設計full window的Silverlight Application時, 預設狀況下SL程式中的控件就會隨著視窗大小而自動縮放, 比起2.0來說真是貼心不少, 過去2.0這部分還需要而外寫code(不只是SL中的程式碼, 還包括網頁上的JavaScript)才能達成此功能, 現在隨手做的任何一個SL App中的控件大小, 都可以隨著瀏覽器視窗大小以及全螢幕的切換自動調整, 已經越來越像是一個完整的應用程式開發環境了...

開發RIA應用程式嗎? 報告: Silverlight 3 準備好了...^^
[範例]

2009年7月14日 星期二

生命中的不完美...

你有三分零二秒嗎? 建議您靜下心來看這段影片...



人生就是這樣, 拱手一生, 記憶最深的卻是, 這一些點點滴滴的不完美, 凝聚成我們心中的完美。

終於 "滑鼠滾輪" 的部分SL3也直接的支援了...

過去SL 2.0中還算是秘技之一的滑鼠滾輪功能, 在SL3.0正式被支援了...


沒啥特別的技巧, 就是一個delta屬性罷了...

[範例]

2009年7月13日 星期一

看來 Silverlight 3 Toolkit也要裝...

害我找了半天, 後來看release document, 才發現偉大的DataForm控件被移到 toolkit中了, 看來SL 3 Toolkit也要裝 [Silverlight 3 Toolkit]

我最愛的SL3新功能之 DataForm Demo

詳情如下:
Breaking Changes since Silverlight 3 Beta
3.1 DockPanel, WrapPanel, Expander, HeaderedContentControl, Viewbox, DataForm moved to the Silverlight Toolkit
The following controls and types have been removed from the Silverlight SDK:
• DockPanel
• WrapPanel
• Expander
• HeaderedContentControl
• Viewbox
• DataForm
• ExpandDirection
• ExpanderAutomationPeer
• LengthConverter
• StretchDirection

They are now in the Silverlight Toolkit, which is available from http://www.codeplex.com/Silverlight.

2009年7月10日 星期五

Silverlight 3 RTW - 真是歷史性的一刻啊

多謝Wizard的提醒,這真是歷史性的一刻啊...



Microsoft® Silverlight™ 3 Tools for Visual Studio 2008 SP1
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=9442b0f2-7465-417a-88f3-5e7b5409e9dd

不過, 果然不出我所料...



把先前安裝的開發人員Run Time移除之後, 就可以了...


對於很多人來說 或許3.0是一個好的起點, 過去擔心不穩定、功能不足、或安全性的疑慮逐漸淡去, 接著我們也將會看到開發工具更全面的配合...嘿嘿, Developer們, 是否開始準備大展身手了呢?

補充一下, 別忘了要安裝新版的Blend 3, 否則將無法以所視及所得的方式來編輯Xaml檔案:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=92e1db7a-5d36-449b-8c6b-d25f078f3609

是的, SL 3 Tools for VS2008 Sp1中, 取消了在VS2008中preview Xaml檔案的功能...>_< (修正一下, 是預設隱藏了預覽功能, 感謝Jeff的提醒) , 我也發現了似乎還是被支援, 但是又看到網路上有底下這一段: Design Preview Disabled in Silverlight 3 Tools
Due to performance and rendering issues, the preview window has been disabled in the Silverlight 3 Tools for Visual Studio 2008. The functionality of the XAML editor remains intact, including IntelliSense, error messages, and the ability to drag controls from the Toolbox into the editor. WYSIWYG XAML design can be done by using Expression Blend or Visual Studio 2010.
真是令人confuse...顯然網路資料不可盡信...不過總的來說, 似乎在SL3 Tools for VS2008 Sp1中關於Xaml preview的部分明顯不比beta1的時候來的方便(特別是有些控件似乎不支援了, 例如DataForm), 微軟似乎暗示著SL3的開發還是需要Blend 3或VS2010.

對了, 先前有人問到RTW/RTM, 底下是簡單的說明... RTM = Release to Manufacturing, or the process of making CDs, putting them in a box, and then getting them out to customers. RTW = Release to Web, which is making something available for download. source : http://blogs.msdn.com/canthe/archive/2005/06/24/432468.aspx

2009年6月20日 星期六

我最喜歡的Silverlight 3 新功能(一)之 SaveFileDialog

My favorite Silverlight 3 new features ... Part 1...SaveFileDialog
-----------------------------------------------------------------

Silverlight 3.0推出在即,有幾個我個人很喜歡的新功能, 當然要陸續介紹一下,第一個我最感興趣的是SL 3中的檔案儲存能力,這邊指的檔案儲存當然是儲存到Client端,透過這個功能我們的SL應用程式儘管運行在瀏覽器上,但再也不是對用戶端的檔案存取毫無能力了,要使用這個功能,關鍵在於SaveFileDialog物件...

線上展示: (若需要測試此頁面, 請先安裝 Silverlight 3 Beta - Windows Developer Runtime)


主要程式碼如下:


下載範例程式。

2009年6月6日 星期六

ASP.NET MVC 1.0初探 - 教學影片

可以預期的,在接續即將推出的ASP.NET 4.0中,MVC會併入並且成為ASP.NET新功能中一個相當重要的部分。在接下來的幾篇文章當中,我們會帶領讀者鳥瞰整個ASP.NET MVC 1.0,從開發人員需求實務上的觀點,引領您進入ASP.NET MVC的世界…

在ASP.NET 3.5 SP1中, 並沒有來得及支援MVC,儘管ASP.NET MVC 1.0在經過了5個preview版本的洗禮之後,終於推出了正式版,但是無奈時間點又恰好卡在ASP.NET 3.5 SP1與4.0這2個大版本之間,使得ASP.NET MVC 1.0似乎有些雷聲大雨點小之憾。 然而不可諱言的,從目前我們看到的ASP.NET 4.0架構當中,並沒有看到任何其他特別新鮮的玩意兒,絕大部分是ASP.NET 3.5 SP1與ASP.NET MVC的延伸,可以預期的是,接續即將推出的ASP.NET 4.0中,MVC會併入並且成為ASP.NET新功能中一個最主要的部分。 在筆者這一系列討論ASP.NET 3.5 SP1與4.0新功能的文章當中,我們會用幾個篇幅很快的帶領讀者鳥瞰ASP.NET MVC這個新的Framework,並且展示如何透過ASP.NET MVC來提升你的Web應用程式,如何開發出結構與條理分明的Web應用程式...

完整的文字稿說明刊載於本期 Run!PC

ASP.NET MVC 1.0 初探 - 教學影片
http://www.runpc.com.tw/content/main_content.aspx?mgo=184&fid=e00n

2009年6月3日 星期三

Run!PC 雜誌 - ASP.NET MVC 1.0初探

對於ASP.NET下一個版本或是ASP.NET MVC Framework有興趣的朋友,可以參考筆者在本月(2009年6月份)於Run!PC發表的ASP.NET MVC 1.0初探, 其中有筆者對於ASP.NET MVC的看法以及一些介紹,同時也附有Step By Step的教學影片,有興趣得讀者請勿錯過。

2009年5月21日 星期四

VS2010中的Silverlight 2.0/3.0開發

安裝好了VS2010的beta1版本, Silverlight 的部分只有 2.0的template, 至於若您想要開發SL 3.0你必須安裝而外的Silverlight 3.0 SKD (請注意不要安裝Silverlight Tools for VS2008 SP1, 不work)和for Developer 的 Silverlight 3.0 Run-time之後才可以正常使用。

安裝好了之後就可以選擇用SL 2.0或是SL 3.0的範本來開發, 等待很久, 終於VS支援了所視即所得的Silverlight場景Layout方式, 同時也支援絕大部分的屬性(包含漸層顏色的調整),不過目前看起來似乎還不支援動畫以及SL 3.0中透視法3D的部分, 依照過往, 開發人員可以安裝Blend 3 Preview版本, 來處理這個部分。

另外, 整個VS2010整體的感覺在效能上比起VS2008並不差, 目前看起來穩定性也挺好, 有興趣的朋友們可以從MSDN Subscription 下載來玩玩。

相關的影片展示請參考底下位置:[20090521-VS2010與SL 3.0.wmv]

2009年5月15日 星期五

ASP.NET MVC 1.0研討會

感謝大家共襄盛舉,今天在微軟7F舉辦的研討會(利用 ASP.NET MVC 提升您的 Web 應用程式)順利完成了,本來以為MVC這個冷冷的主題應該沒多少人會參加,沒想到到場的夥伴們還爆多的,謝謝大家的支持囉。

相關的介紹文章會在下一期的Run!PC中刊載,同時間也會在網路上以及這個BLOG上提供今天現場Demo的建立ASP.NET MVC應用程式的Video,今天的投影片可以在底下這個位置下載。

2009年5月5日 星期二

Refactor! for Visual Basic 2008

前陣子由於工作上開發一些專案, 自己動手下去認真的寫了一些Code, 先前沒有特別留意, 總覺得VS2008在撰寫VB的時候有點彆扭, 又說不上來哪邊不對...後來碰巧回頭用了以前安裝的VS2005環境才恍然大悟發現少了一個過去我在VS2005寫程式的重要工具 Refactor! for Visual Basic...

趕緊到網路上找了一下, 果然有也有2008的版本 Refactor! for Visual Basic 2008, 底下是下載位置:
http://msdn.microsoft.com/en-us/vbasic/bb693327.aspx

VB developer不可或缺的重要工具。
(BTW, 我不確定是否支援中文版VS2008, 使用時請自行留意)

2009年4月28日 星期二

推薦:孫叔的Yahoo奇摩專訪

我要推薦一個很好的訪問, 我強烈建議網友 "完整的" 看看這段專訪, 我有幸和孫叔相處過幾年做過同事, 孫叔是我最敬佩的同事, 沒有架子, 親和力超級強, 我以前常和孫叔一起走在路上看著孫叔跟走過來不認識的路人打招呼, 和我們年輕小夥子在一起的時候一點點架子都沒有, 孫叔是我打從心底欽佩的人。

影片訪談一開始, 說到孫叔會用電腦, 這也是我欽佩的事情之一, 我教過孫叔電腦, 孫叔的好奇心, 學習能力, 耐心, 是我們這一輩的年輕人望塵莫及的, 孫叔是我人生當中非常非常難得的榜樣。更不用說孫叔的表演專業以及從事公益的愛心, 這也是我一直只能用欽佩兩字形容這位長輩的原因...

我認識孫叔很多年, 對他來說我只是一個小朋友, 但是說真的, 我有幸和孫叔同事的時候, 聽孫叔講話從來沒有覺得乏味或無聊過, 他的人生歷練和對生命的認識, 是我一直都很想學習的...

底下是他在Yahoo奇摩的專訪, 我整個看過了, 推薦給大家...很有生命力!!!
http://tw.leaders.news.yahoo.com/leader/5/93/ (上)
http://tw.leaders.news.yahoo.com/leader/5/94/ (下)

2009年4月25日 星期六

令人徬徨的Silverlight?

昨晚熬夜連續看完兩檔院線片之後, 上網轉換一下心情, 路過自己的BLOG, 驚覺似乎雜草又長高的幾吋, 不上來耕耘一下有點對不起冤親債主(ㄜ...不是, 是親朋好友), 不過, 昨晚熬了一整夜看完兩部片之後發現天已經亮了, 畢竟自己已經老了, 經不起年輕時候這樣糟蹋身體的方式, 補眠後才上網把這篇BLOG寫完。

跟大家報告一下最近的狀況, 話說...最近碰巧有幸拜訪一些微軟的Partner, ISV, 很自然的大家就談到了Silvlerlight這個技術, 我發現大家對Silverlight都花了不少心思, 不論是正在評估或是正在設法導入到自己的產品和專案當中, 當然我也知道這背後的秘辛與原因, 廠商們或多或少是在微軟的淫威之下, 被迫不得不奮發向上...ㄟ...不過我也要幫MS說說話, 不經一番寒澈苦, 哪得梅花撲鼻香...這些努力當然是會有代價的...

例如我最近已經聽到不少客戶對採用Silverlight技術所開發的產品大加讚賞, 一個是國內reporting/BI廠商(聯銓), 另一個, 內舉不避親, 是.NET Solutions上的BPM大廠(K2), 聯銓我很久以前和該公司合作過(也不算合作, 當時我是客戶端), 最近比較沒有接觸了, 關於聯銓使用到Silverlight相關的技術成果都是輾轉從客戶端聽到的, 但是客戶端給的評價都很高, 顯然我以前認識的該公司的開發人員有在Silverlight上下了一些功夫。 K2我當然就很熟了, 如果你對.NET上的BPM產品有興趣, 不難發現從去年開始, K2是第一個將Silverlight用在商業用途上的微軟Partner, 並第一時間推出相關產品(BlackPoint)的廠商, Scott的BLOG上還有介紹。

即便是這樣, 還是有不少學員或讀者會正式或非正式的問我, 到底Silverlight怎麼樣? 會不會取代ASP.NET? 對於Web Solutions的開發將帶來什麼影響?關於這種申論題, 一般而言我比較在書上回答, 而且畢竟我不是搞算命或搞政治的, 我很難掐指一算就告訴你未來的方向...而且,ASP.NET的書我還是會出(最近還有一些Plan, 我想寫寫跟ASP.NET架構設計有關的書), 這也表示我不會立刻放棄ASP.NET, 但是Silverlight又要在Web Solutions中擔當哪種腳色呢?

其實, 這部分我在書裡和研討會上大致上都有跟大家報告過, 但是最近看了Silverlight 3.0的一些新玩意兒,和推估了一下SL 4.0的狀況, 看來這個態勢有逐漸明顯的趨勢, 我發現:
1.確實很多廠商開始考慮使用Silverlight, 現在的障礙多半在開發工具, 但是這會在VS2010和Blend 3會逐步解決
2.如果要建置分散式架構, 用戶端安全性目前是個需要額外花功夫的部分, 並不像ASP.NET這麼單純, 這部分過去focus在ASP.NET的開發人員可能不太熟悉, 但Silverlight 3.0有提供一些解決方案
3.許多過去ASP.NET Solutions上需要花大成本才能完成的UI效果, 用Silverlight變得輕而易舉, 開發人員可以從局部導入做起, 暫時上兩者並存, 在需要的時候將Silverlight崁入ASP.NET即可
4.Silverlight相關的資源成長幅度超快, 你現在已經可以從網路上看到不少控制項, 有的還是免費並有Source Code的
5.我身邊很多朋友密切的問我一些Silverlight的問題, 這些問題都很扎實, 顯然, 不少人開始用Silverlight了
6.很多人已經知道Silvelright不需要去和Flash比較, 至於Flex, 確實跟Silverlight有得拼, 但是我相信在微軟的銀彈攻勢下, 勝利終究會站在有錢的一方的
7.市場占有率現在確實是Flex和Flash比較高, 但who care, 成長趨勢目前對Silverlight有利, 大家just wait and see ^_^

不過從產品開發的角度看, Silverlight就好比Mobile一樣, 對我來說都是presentation的一種, 也因此一直都沒有在ASP.NET或Silverlight中二選一的問題, WinForm/Mobile/Web Form/Silverlight, 這些都是展示層的解決方案, 好在我的專案或產品多半不靠展示層賺錢, 所以對我們來說這只是多了一種選擇, 由於過去的架構設計正確, 因此用Silverlight或是不用, 對於程式碼的調整幅度不大(這部分請參考筆者Silverlight2.0拙著, 有相關說明)

只是由於 Silverlight 3.0中Out of browser和一些新功能的出現, 不免讓我又懷疑MS是不是又想藉此機會在開發市場上一統江湖, 依照Silverlight 3.0的新功能, 如果市場接受, 會有產生底下的狀況, 我先列出來, 請讀者想想:
1.未來你用Silverlight開發出來的程式, 可以同時執行在Browser中或是Browser外(類似WinForm的桌面應用程式), 當然手機也是一個目標, 而請注意, 開發方式是完全一樣的.
2.用戶端可能不需要下載(因為微軟會內建)或下載不大的RunTime, 就可以執行Silverlight應用程式
3.可以跨平台(Linux/MAX/Mobile/Windows)
4.沒有WPF那麼龐大的負擔, 卻擁有類似WPF可實現優質UI效果的開發工具, 呈現出的效果比ASP.NET或WinForm都要好, 且效能也不差開發成本又低
5.不需要再寫JavaScript Code(所以坦白說我沒花多少時間研究最近很紅的一些JavaScript Libraries了), Web Solutions只需要focus在前端SL的C#/VB Code, 至於後端都是WCF Service, 也是VB和C#等.NET開發人員熟悉的語言
6.LINQ/ORM...等技術和一堆微軟正在開發的Service和.NET 3.5/4.0上的新技術可以立即應用, 同時也支援Cloud Computing
7.Web 開發人員不需要學習HTML/JavaScript和CSS, 甚至可能連SQL語法都可以丟一邊去, Focus在前端UI設計和WCF調用即可
8.開發方式與架構更貼近標準的分散式或SOA應用程式, 從各種角度來看, 都會是大型應用程式的一個好選擇

最近半年, 我已經很少鼓勵別人使用Silverlight了, 絕大部分的時間變成回覆別人與Silverlight有關的技術問題, 從這邊我也看到一些趨勢。 當然, 你說Silverlight完全沒問題嗎?當然不是, 畢竟它是一個新且快速改版的技術, 只是先前容或有所缺失, 現在也慢慢看到缺失逐步消除, 從這邊我們大概可以看到微軟的企圖心, 在這邊我不太想下結論或是定論, 我不知道未來技術會怎麼走, 每個技術人都有資格或權利下自己的判斷, 我看到的也應該只是一部分, 就只是提供大家參考了...

2009年4月13日 星期一

關於Silverlight中的RichTextBox以及文字處理

有朋友問到Silverlight當中如何設定TextBlock文字的顏色,例如..
ABCDEFGHIJKL
我才恍然發現一件事情,我一直沒有談論到這個部份...-_-'''

補充一下資料如下, 在SL當中,TextBlock是透過XAML標記...來區分不同的文字區塊, 也就是說, 如果您要針對TextBlock的內容設定不同的文字顏色, 可以透過對TextBlock的inlines集合增加一個Run物件即可...例如..... , 而透過程式碼設定的方式如下 :
Dim wordsWithFormat As New Documents.Run
wordsWithFormat.Text = Words
wordsWithFormat.Foreground = New SolidColorBrush(color)
textblock.Inlines.Add(wordsWithFormat)

如此即可設定特定區域文字的顏色,範例程式請參考底下, 按這邊下載。

至於RichTextBox,在SL 2.0沒有直接提供,但在codeplex上有一個project, 包含 source code, 您可以參考底下這個URL : http://www.codeplex.com/richtextedit
(不過有一些小遺憾是, 這個project停留在beta2)

2009年4月8日 星期三

4/7 南台科大 Silverlight 2與現代互動式網頁程式設計 研討會後的感想

4/7到台南 南台科技大學分享 Silverlight 2與現代互動式網頁程式設計 這個主題, 讓我重溫了很久沒有享受到的校園氣氛, 在這個場次當中, 我介紹了Silverlight這個技術對於網頁與web應用程式的意義, 以及相關的應用, 投影片可以從這裡下載。

我回想起我剛畢業那時候, 算算到現在似乎也已經十多年了, 時間過得真快, 同樣是寫程式, 身為學生的心情和現在面對工作, 可說是截然不同, 從台上看下去, 有些學生對於未來躍躍欲試, 有些學生對於將來的挑戰似乎有些擔憂, 當天我也分享了這一兩年來我看到的兩岸就業狀況以及將來學生會面對到的挑戰, 我不太確定是否所有的同學們都和我一樣感受到種種競爭的迫切性, 面對台灣目前的狀況, 全球經濟的不景氣, 以及兩岸甚至全球人才彼此之間的競爭壓力, 這些對於還有一年才畢業的學生來說似乎有點早了...

但是, 誰知道呢, 或許實際上我們並沒有那麼多的時間可以準備了, 回想到『世界是平的』作者費里曼在書上提到的種種, 在資訊產業中的我們剛好身歷其境躬逢其盛, 書上描述的每一個現象都在我們身邊發生...

最近看到電視上有一個廣告, 蠻touch人的, 廣告中的主角只說了一句話, 我相信這是他的座右銘, 我也佩服他對於面對人生的勇敢與毅力, 看到他的努力, 我想當我們碰到困難的時候, 我們沒有一個人有資格放棄...的確, 機會是給有準備的人的...



2009年4月1日 星期三

線上研討會 4/1 Microsoft Virtual Techdays...完成

謝謝大家參加 4/1 Microsoft Virtual Techdays線上研討會, 呼, 我承認, 要一小時講完時在是太難了...Demo的部分我會在整理後放到 BLOG上, 謝謝大家的熱情參與^_^

2009年3月28日 星期六

線上研討會 4/1 Microsoft Virtual Techdays

  錯過3/12 於台灣微軟 7AB 舉辦的Silverlight研討會的朋友們, 可以在 台北時間 (更正) 4/1 中午 12:30 參加 線上版的研討會 Microsoft Virtual Techdays, 在Virtual Techdays一小時的時間當中, 我會提供3/12當天的精華濃縮版。

  在這個場次中, 主要內容會聚焦在如何透過Silverlight建立N-tier架構的Web應用程式, 介紹整個開發觀念以及其中所需要的技術, 同時會展示如何從無到有建立一個N-tier架構的Silverlight應用程式, 以及Silverlight如何和ASP.NET進行整合。

  從整個場次的展式和內容當中, 你也會看到Silverlight對於Web應用程式所帶來的改變與價值, 當然, 如果時間夠的話, 我會順便稍稍展示一下Silverlight 3.0 beta 的幾個重要新功能, 諸如3D功能, 遠端資料繫結, 離線執行的Out of browser等機制, 歡迎對Silverlight開發或Web應用程式有興趣的朋友們一同參與...

網址:http://www.msfttechdays.com/public/home.aspx (請先從此網址進入註冊帳號)
場次:WEB203 Techniques For Developing Great Silverlight 2.0 Applications

帳號註冊完畢之後,建議您可以演說語言(Chinese)做為關鍵字搜尋, 然後參加每一個中文場次(因為不多, 中文場次只有三場, 切勿錯過)。

畫面如下:

另外, 建議請先安裝 Microsoft Live Meeting 2007 ...

2009年3月12日 星期四

3/12 MSDN研討會範例與投影片

3/12在微軟7AB的Silverlight研討會順利完成囉,在這個場次中我們介紹了以Silverlight開發RIA Web應用程式的觀念與方式、以及N-tier架構下需要注意的一些設計規範和準則,也介紹了相當多的範例。會後很多學員對今天的分散式應用程式開發架構有興趣,這個範例以及今天的投影片已經在下方的連結上了,不過要提醒大家,如果您沒有參加當天的研討會,可能僅看投影片或是範例有點霧煞煞不容易明白,如果你對範例有疑惑,請在blog上留言或是參考筆者Silverlight 2.0書籍。

要特別對今天來到會場的每一位學員說聲謝謝,很高興在會場能夠看到大家。^_^
[n-tier架構下的Silverlight應用程式基本範例] [投影片]

2009年3月8日 星期日

Silverlight 2.0 新書 目錄


  底下是Silverlight 2.0一書的目錄,其中不僅包含了整個目錄架構,也包括了每一章的概要說明,以及部分章節的相關範例video展示(video的部分我會陸續放上去,礙於錄影軟體的效能以及頻寬考量,某些動畫效果在video上可能看不清楚,請讀者包涵。
  此外,video僅錄製範例功能的一小部份, 完整的功能請參考本書內容),讀者可以從底下的Iframe視窗直接瀏覽,如果你無法瀏覽或覺得視窗太小,請點選底下連結:
http://book.studyhost.com/Silverlight2Examples/Silverlight%202.0%20book%20contents.htm

2009年3月5日 星期四

Silverlight 2.0 範例權威講座 一書完稿

  折騰了很久,終於,Silverlight 2.0的書籍已經完稿送印,讀者應該可以在下周看到這本書,在這本書當中,除了Silveright的技術、開發架構的討論之外,還收錄了一些中型的範例,諸如以Silverlight開發的RIA版本EIP、討論區、即時通訊、簽核系統、PIM個人行事曆管理、線上訂票系統、數位儀錶板、類似Excel的圖表功能、大檔案上傳機制、梭哈遊戲、媒體撥放器、影片字幕機、ASP.NET與Silverlight的整合技術...等等琳瑯滿目的內容,這些範例有部分過去我用ASP.NET開發過,如果讀者稍做比較,就會明顯發現以Silverlight開發出的這些範例和過去ASP.NET的範例有著相當大的不同。

  接下來幾天,我會把書中的一些範例和章節、以及目錄都貼上來,這本書對我來說是蠻特別的,除了歷經很多波折之外,自己也拖了很久的時間,底下是這本書的序,這篇序大概是我有史以來寫過最長的序了,隨手寫來,一發不可收拾,索性就全文照刊,算是和大家的一點分享了。

2009的感言 - 代序

  坦白說,這本書的出版是稍稍有點艱辛的…除了筆者自己拖稿延誤之外,其他大大小小波折還真不少…

  故事可以從2007年開始說起,07年,微軟推出Silverlight 1.0,在台北這個偉大的小地方,就出了四本原創的繁體中文書,幾乎可以說是有史以來第一遭,台北的出版速度快於全球,能量也可說是居冠亞洲,其中幾位作者的Silverlight書籍也都陸續在內地上市出版(包含筆者自己的),很快的,一年過去了,時至2008,Silverlight 1.0已經大幅度改變成2.0,並於2008/10月正式誕生,但是隨時全球景氣的趨緩(或是我應該說衰退?),出版Silverlight 2.0書籍的出版社和作者不僅速度變慢,同時能量也變少…

  難道,新聞報導的全球蕭條以然來臨?
  在商言商,出版社和作者很難在出版與撰寫一本書的時候完全不考慮銷量,或許我們在BLOG上可以純粹為了紓發一己之悠情,不計代價的隨手寫寫貼貼,但是從文字稿檔案到出版成一本書,其中出版社所耗費的精神(或是費用)其實不能說完全不用考慮,這導致很有可能一些相當好的主題卻沒有辦法跟大家見面,例如有一位讀者一直鼓勵 (後來變成建議、最近開始變成要求…) 我用VB寫一本design pattren的範例書籍,我要老實地說,其實我很想,但是我不敢…就算我敢寫,出版社可能也不敢收…

  然而好的技術,是否應該繼續推廣?好的觀念,是否應該介紹給更多的人知道,是否應該鼓勵大家進而使用在自己的專案當中,避免再用傳統辛苦的方式去Hard Coding出你要的成果,或是因為一時的便宜行事導致後續專案的維護困難?這些問題的答應我相信相當清楚而一致…

  也因此,2008年一整年我除了日常的工作之外,也配合微軟在台灣北中南分別舉辦了好幾場的Silverlight 2.0技術發表會和研討會,在台北也有一些Hands-on Lab的課程,隨著Silverlight 2.0正式上市,我相信這部分將會愈趨火熱,我們將會有更多的研討會場次和課程將會與大家見面…

  Silverlight 2.0是一個好技術,我想參與過筆者研討會或課程的學員們應該不會反對,對於.NET的開發人員來說,我們期待一個可以超越Flash同時取代傳統UI呈現方式的技術已經很久,而這個技術又必須有前瞻性,與未來的.NET開發架構相結合,必須和現有的技術相容,與ASP.NET相輔相成,同時又有足夠的第三方Resource和社群支援,讓開發的過程得以沒有後顧之憂…

  無論怎麼看,Silverlight2.0都符合這個特質。

  或許,你會困擾於Silverlight 1.0和2.0兩者之間的差異與相容性,甚至擔心Silverlight 3.0是否又會有一番大改?這部分,在筆者的課程中我也常常和學員討論,我要說的是,從我的角度來看,Silverlight 1.0和2.0幾乎可以說是獨立的兩種產品,哪怕它都稱作Silverlight,但是其實目標客戶的對象和能夠呈現出的功能是有所不同的。儘管2.0上市了,我不認為1.0的東西要拋棄或是改版更新,1.0就是1.0,原本的功能和目標用戶都沒有變,2.0則提供了更多的可能性,當然在Run-Time的部分也稍微增大了一些(從1.4M到4.6M),這些當然是為了讓.NET開發人員在Web Solutions的UI層能夠提供給客戶更優質的操作界面和可能性…

  然而Silverlight 3.0呢? 您別操心了,除了功能增強之外,程式碼的撰寫方式依舊是你所熟悉的.NET Code,更何況, RunTime的部分是整個向後相容的,你不需要擔心2.0開發出的應用程式將來無法執行,即使是以Silverlight 2.0為基礎開發的類別庫或控件,到了3.0依舊可以正確運行無誤。

  然而微軟的版本更迭在這幾年確實是快到一個不行,也因此,這次其實我很想做了一個嘗試,本來這本書的書名並不打算跟著微軟的Silverlight 2.0或3.0版,我想用的是『Silverlight 2009範例集權威講座』這個書名,表示這本書同時適用於2.0和3.0版,我想試著不要用產品的版次編號,而用我自己對該技術研究的年分作為書籍的版本區隔,這也意味著,在2009年初所出版的這本Silverlight專書中,所蒐錄的是我對Silverlight這個技術截至2009年上半年的研究心得,所以當然,這個心得是涵括Silverlight各種版本的,未來技術若持續更新,我也會陸續發表相關的心得。後來,礙於擔心使用者混淆以及總總其他原因和各方面的考量,最後我們還是掛上了Silverlight 2.0這個書名,但是當然依舊是相容於未來推出的3.0,同時我也相信本書在內容上是有足夠的前瞻性的。

  這是一個現實上的妥協,我跟各位一樣,是身陷專案中的實務開發人員,我知道礙於現實,你不見得會立刻跟著微軟改版,但是微軟的改版速度卻太快,一本Silverlight 2.0的書才剛出來,還沒開始賣,搞不好就要出3.0了(天知道這個狀況會不會在4.0時繼續出現?),然而我說過,一本書,應該是經驗的累積,在技術更迭如此迅速之下,如果都要依照這樣的速度來出書,那哪來經驗的累積?

  很有可能(如果讀者、市場、和出版社允許),在軟體改版依舊如此頻繁的狀況下,未來我盡可能不特別針對微軟的新技術寫新書,而是跟著我自己對各種新技術所研究的時間和心得出版,也就是說,Silverlight 2.0, 3.0, 4.0…由於工作與授課之故,我會持續的研究和學習,但是我不會在每次改版時都立刻跟著出版Silverlight 1.0, 2.0, 3.0, 4.0的書,因為這樣真的沒啥意義,但是我會盡可能分別在每一年,出版當年我針對Silverlight這個技術主題的學習心得和成果,算是跟大家的分享,前提當然是市場、讀者、和出版社如果都還接受的話。

  請讀者特別注意,在這種形式之下,一本書的內容是不可能包山包海的(寫出很厚的書並不是我的目的),但是我很有把握地跟讀者說,書中的內容絕對會對你的『實務開發』有幫助,我不想寫一本只是介紹(或翻譯)MSDN文件上的內容的書,所以,我會假設讀者可以自己找到相關的MSDN資料,自己可以把基礎的東西補足,而書裡,我盡可能的只分享使用或開發心得,透過這些經驗,讓讀者避開一些不需要的額外嘗試與挫折。

  另外,由於資訊科技的快速更迭,讀者總還是會有需要和我們一起討論問題的時候,從現在開始,請你到我們的專屬網站(網址在書上有公布),在這邊,我會開放一個可以和大家一起討論的空間。你可以把你在觀念上需要釐清的問題POST出來,在工作之餘,我會盡可能回答,但是請不要叫我幫你看程式或改程式,我很害怕讀者這樣^^。

  回到Silverlight,總而言之,如果你厭倦於用ASP.NET+AJAX只是為了在WebForm上呈現出類似Windows應用程式的UI(或是處理一些沒道理的介面邏輯)、如果你需要給客戶(或用戶)耳目一新的感覺、如果你希望為未來帶來一些不一樣的可能性,我相信,在這個階段進入Silverlight 的行列,是個挺好的選擇。為什麼我那麼有把握和有信心這麼說? 因為我所屬的公司和我自己開發的產品,都已經用上Silverlight這個新的技術。

  我常講,亂世也有人能賺錢,景氣差或許是個危機,但有能力的人可以把它變成轉機,端看你怎麼面對和處理。是,或許有很多企業在景氣不好的時候選擇保守以對,但是相對的,體質好、有競爭力的企業(和人),則把這一刻視為甩開競爭對手迅速崛起的好機會。

  永遠不要放棄你的目標與夢想,記得Randy Pausch在『最後一堂課中』所說的嗎? 我很喜歡那一段,他大致上是這麼說的:『當你朝目標前進的時候…有時是不是會發現有座橫躺在你目標前面的牆? 知道那座牆為什麼會擋在那邊嗎? 那座牆是用來幫助你擋住那些其它並不是真正想要達到目標的人們!』

  如果你的目標夠清楚、動力夠充足、信心夠堅定,你真的想要達成目標,那恭喜你,那座牆就不是用來擋住你的(因為它擋不住你的),注意,那座牆是用來擋住『除了你以外的那些其他人的』,為的是要讓成功的果實只留給真正努力和奮鬥過的人…

  或許2009年的你,遭逢著可能是有生以來全球最大的不景氣,但是,你真的想達到你的目標嗎? 你對你過去所信仰的一切依舊夠堅定嗎? J

  如果是,請繼續翻開這本書,歡迎您和我們一同來到 Silverlight嶄新的世界…
  
  Keep Walking, May The Force Be With You~

2009年2月13日 星期五

真是太閒了...

今天一時無聊上網看電影介紹,想說找個電影來看,習慣上,我會先看看網友討論的部分,發現一段對話如下(發話者認為網站上的影評有錯...),看了一下發言時間,也不像是刻意弄出來的:

http://bbs.atmovies.com.tw/bbs/bbs.cfm?action=view&c=102&s=59622 (原址)
我只能說,這世界上無聊(或幽默?)的人實在是不少...呵呵, 顯然很多人是太閒了~^^

BTW, 最近真是沒啥電影好看...唉...

Silverlight 的 Linux 版本釋出

昨天看到一個訊息,Silverlight的Linux版本釋出,盡點道義推一下,不過老實說,Linux我不常用,所以沒特別的感覺,如果要讓我稍為興奮一點的,我寧可看到的是手機版的Silverlight推出,不過看來還需要等一段時間,期待囉...

辛勤工作的獲利

我最近發現了一件我早該發現的事情,那就是,原來賺錢是一門專業,而不是一件自然而然就會發生的事情,這個論點和過去一些管理大師(A到A+那位)的看法大相逕庭,不過似乎挺符合台灣這邊的前幾年的現狀。

很久以前的有一陣子, 我脫離了園區工程師這個頭銜(我進入的很晚, 又脫離的很早, 所以既沒有攬到一個新貴的稱呼, 也沒分到什麼有價值的股票, 所幸前陣子的金融海嘯也沒掃到我), 當時我離開園區後(好幾年前了), 我整天研究技術處理專案,偶而寫寫書稿, 待在StarBucks, 伯朗等咖啡店, 同時也接一些課程和顧問工作, 那時候我才知道, 原來---原來---台北那麼多的人是不用上班工作的。

而且更令人詐舌的,是這些看起來沒啥工作的人(請注意,我肯定這些人不是學生、也不是業務員之類...),出手都比我大方得多....而且是很多很多,那時候我在內湖、天母看到一些穿著短褲拖鞋進入Starbucks的人,比起我看到西裝筆挺的人還要謹慎點,因為我後來發現...原來財主常常隱藏在令人不注意的外表下...(^_^)

說遠了, 回頭, 很多讀者以為寫技術書籍很賺錢, 或是從事資訊行業能夠如何如何,或是剛畢業的小朋友覺得到了科技業可以怎麼發展...但是根據我這十多個年頭的觀察,如果你的目標是想要賺錢,你的專業絕對不能只是(只有)資訊技術,你的專業應該要是『如何賺錢』...相信我,這是一門高深的學問,而資訊業中的許多人對這一門學科恐怕都是不及格的。

在我身邊從事軟體開發工作的,至今還沒有哪一個工程師(後來變成老闆的除外)讓我覺得他日子過得很優哉的(至今, 一個都沒有),無一不是加班熬夜酗咖啡,稍稍有一點點成就的,這種狀況就更加的明顯。

幾乎每一個我認識的講師、作者、專家、或是技術人員,都只能勉強算是中產階級,幾乎每個人都要為小孩子的學費和房貸傷腦筋,我沒有認識任何一個可以買豪宅的人(我猜這是我也買不起的原因),在這些人當中,當然也沒多少是對時尚、名牌、或是精品有研究的,自然也不太可能有炒股的空間,即使我想要個內線交易也從來不曾有人給我真正的明牌, 就算我真的知道了個明牌,最慘的是,我猜大多數人也沒那個本錢去炒...從某種角度來看,幾乎也可以說是典型的市井小民了...

對照台灣少部分可以不用工作,一直念書,還可以住在豪宅的幸運兒,和從來不需要考慮收入是不是不夠(可能只需要擔心太多沒地方放)的人來說,我們這些從園區出來的工程師哪是新貴,那些人才是真正的新貴,這幾年我才知道,原來,很多人可以動動嘴巴就進帳一兩億的,我拼完我這輩子大概也沒個零頭...

其實我也有不少帳戶,只是平時活動的那些帳戶的剩餘金額扣掉安全庫存量之後,大多都不會超過我每個月需要繳的支出,大概也因為這樣,所以我每個月匯款或是轉帳的唯一機會,是月初領到錢之後付給銀行、保險公司、或是繳帳單,有時候和朋友們聊起,大家都消遣自己說我們是典型的過路財神,是個幫銀行賺錢的...

不過,我覺得我們這一票,才是最愛台灣的人,我真的覺得我們這一票人比台灣當今檯面上的任何政治人物(不管紅橙黃綠藍)對台灣更有貢獻,我當然也沒有綠卡(也根本沒機會有綠卡),自然也沒有外國籍,我始終待在這裡,我在這裡出生,在這裡工作和生活,能偶而出國玩也算是奢侈的消遣了,大部分的時候我只能配合振興台灣經濟方案在國內多一點點消費。

我身邊很多很多這樣的工程師、技術人,但是這些人都有一個特色,我在這些人眼中都看到對專業的堅持和熱情,有時候是那種有點傻勁或是雖千萬人吾往矣的魄力(偶而一不小心也會變成方向錯誤的蠻幹),這些人都稱不上是有錢,但是都很努力的生活,和工作。

很多人和我一樣,一開始入這一行只是因為興趣,工作真的很累,但是每次下班之後走在台北街頭,初春的微風拂面挺舒服,我覺得我對得起我自己、對的起我的家人、對得起國家社會。我覺得我的工作對這個世界有一點點幫助,對客戶有一點點幫助,辛苦所得也讓我可以負擔的起照顧好我的家庭。

對我來說,有些時候這樣就已經很足夠了。多的,就當作上天的賞賜了...

有一回,我在捷運上,看到一個我很久沒看到的場景,擁擠的捷運上博愛座已經滿了,一個孕婦帶著小孩走了進來,同時間又一個行動不變的老人走入,趁著捷運還沒啟動的那一兩秒,很多乘客都『爭先恐後』的把一般的座位讓了出來(因為需求量大),有時候覺得,行善也是會傳染的..

我想講的是,有機會或有能力,請多幫助一些身邊需要幫助的人,其實台灣很多人都需要幫忙,只是不好意思開口,很多人其實也熱於幫忙,只是有時候沒那個氣氛,連行善也會不好意思...

2009年2月7日 星期六

從Silverlight開發架構看到的一些感慨

最近在撰寫Silverlight的文稿(書稿和雜誌稿)、範例、和一些課程教材的時候,看到Web開發技術的發展回頭對比台灣的開發環境實在有一些感慨。

先講第一個,話說從頭,有一陣子我介紹了ASP.NET上的MVC,MVC這個架構是個好的Pattern,可以幫助開發人員達成建構出有架構、便於更新維護、便於抽換的應用程式,問題是這是(只是)一個規範、一個樣式,所謂的規範就表示,你應該遵循藉以得到一些好處,但是有趣的是,規範這個東西在台灣不見得一定會被遵循,老實說我本來以為在全世界都是這樣,但是根據我的觀察,在台灣這個狀況比較明顯,反觀我在台灣以外的一些合作夥伴和團隊,對於 "規範" 這個事情的嚴謹度和遵守(你也可以說是死板),超過了我的想像和期待。

我舉幾個簡單的例子:
1.估時程:我常常看到,為了爭取到某一個案子,在時程評估的時候,就已經放棄架構了,我們給了客戶一個若要遵循架構就根本不可能達成的預計完成時間。
2.當進度落後:當進度落後的時候更慘,本來SA,SD花時間想好的架構,可以因為進度理由一夕之間失效,更有趣的是,這個架構可能是先前花了兩三個月決定的,但是Developer+PM可以在一天內推翻。
3.當客戶要求不合理:一樣的狀況, 有時候客戶會有一些超越常態或是超越技術可能性的要求,為了成案,往往PM答應的莫名其妙,而怪的是,最後還是可以做得出來,天知道這後面隱藏了哪些可怕的東西。

剛講到MVC和所謂的規範,可能很多人對我說的 "規範" 的定義不清楚,舉個ASP.NET開發人員應該要知道的例子,有幾個我所謂的規範簡單的具體例子就是:
1.ASP.NET頁面(.aspx和.aspx.cs 或.aspx.vb)當中,不得有ConnectionString or SQL指令。(你應該寫在一個表(不管是資料表或是對照表)當中,以便於後續維護。(但是,誰敢說自己的.vb或.cs中沒有SQL指令碼?我看是一堆吧...)
2.ASP.NET程式碼當中不該有商業邏輯,只能有處理UI的Code, 也就是說,你應該要有一個Business object。
3.超過100行的Method或Sub, Function 應該再切割。

類似像上面這樣的說習慣也好, 說規範也行,是不應該被打破的,但是,有多少因為時程關係而破壞規範的例子? 多的慘不忍睹。

在連續幾次課程中我被問到MVC之後,我的回答開始變成:如果你(或你的開發人員),無法嚴守上面這幾個規範,那就不應該去想ASP.NET MVC,因為這(MVC)不符合你的需求。

MVC是一個保持(證)系統架構清晰、具有延展性、可抽換性的開發架構,以降低維護成本提高重用性,但是如果你的Code是上面這樣的寫法,那完全不可能接受MVC的規範。

好,回來談Silverlight, 上課時,我很清楚的跟學員介紹了Silverlight RIA抓取後端資料庫的方式,大致上如下:
1.撰寫一個Business Object(包含Data Access Class)來抓取資料庫中的資訊,例如請假資料...(這邊應當是 AP層)
2.利用WCF或WebService撰寫一個Service,來調用剛才寫的Business Object,這是Service層。
3.在Silverlight應用程式當中,調用遠端的Web Service來存取並顯示資料。(這邊是展示層)

曾經有幾個學員問到說,怎麼會這麼麻煩呢?

我為什麼不能像以前寫Windows應用程式和Web應用程式時一樣,用一個SqlDataSource或是"直接"撈DB中的資料呢?

當我聽到這個問題之後大為震驚,這表示
1.原來以前大家都是在處理展示層的UI上,直接抓取後端資料?
2.原來過去大家很少撰寫Business Object或是Service,都是透過ADO.NET直搗狂龍式的取得DB中的內容?
(不過, 我欣賞學員願意問的求知慾, 只有這樣才能持續成長, 比起在心裡覺得怪怪的但總是沒問出問題的學員, 他們會進步得較快)

如果是這樣,那怎麼同樣的學員會問MVC的問題呢? 這沒道理啊, MVC的概念根本不是這樣啊? 原來,學員提到準備要導入MVC開發架構,但是他心裡其實對MVC還沒個底,並不知道改成MVC之後,比起他現在的開發方式額外要撰寫很多、很多很多的Class...

真的是 "變得" 比較麻煩嗎?還是其實是過去為了一時的便利, "省去了" 太多太多 本來其實應該要做的工作呢?

我的一個前輩告訴我,先前他對Design Pattren概念雖然很清楚,但是總是覺得彆扭,和台灣的架構師們討論起來也覺得沒那麼自然,似乎很難應用。

後來有一次,他參與國外的一個開發團隊,發現在這個團隊當中,有著來自世界各國的優秀成員,在當中討論系統architecture的時候,在會議中,每個人討論起開發架構,其中Design pattrene觀念似乎是理所當然的,像喝水一樣,很多的爭辯只會到某人提出應該要用某種Pattern來解決為止,不會有任何其他的疑問,架構和規範像聖經一樣牢不可破。

我並沒有說(我也沒資格說)怎樣一定比較好,坦白說我以前寫的一些範例也並不敢說全然依照上面的規範,只是回頭想想覺得有點感慨,當我們在討論RIA或是Silverlight的時候,好像一直講的都是你的程式可以怎樣炫、可以怎樣讓人感覺不同、有怎樣的使用者體驗...但是卻忽略了開發架構是一切的根本,為何我要建議學員考慮把一些ASP.NET的應用程式改以 Silverlight來開發,原因不是炫、是這樣的開發架構才較為合理。

Silverlight有清楚的展示層、服務層、AP層、DB層的觀念, 除了展示層之外的東西,都應該是與UI無關的,和過去ASP.NET開發人員習慣(但不應該)把所有東西綁成一坨混在一起是不一樣的。

我還是這麼說,應該把技術應用在適當的場合,技術本身有延續性,很多新技術的出現,都是因為要解決過去的一些問題,UI只是其中之一,除了UI之外,開發架構是一個開發Team的核心競爭力,否則我們的開發團隊很可能只能持續的從勞力苦工中獲取很低很低很低的毛利,很類似台灣的代工製造業現在面對的問題,開發團隊中沒有一些累積出可重用的元件其實是一件很可怕的事情...

從團隊到個人也是,過去的經驗的累積(包含知識、專案、成品、元件),會是開發人員與其他開發人員不同之處,我知道每一個開發人員現在其實都很累,面對專案、面對一些其他有的沒的,但是如果可以,還是建議大家,多花一點時間在架構上,對於開發人員來說,這應該是只有好處的。

2009年1月11日 星期日

利用Silverlight實現網頁檔案上傳進度

  技術的變化總是讓人目不暇給,有時候回頭想也挺令人感慨。

  我記得我一年多前,為了透過AJAX技術實現檔案上傳的進度機制,老實說吃了不少苦頭,當Silverlight 1.0出現的時候, 我針對這個功能也嘗試做了一個範例,但是礙於JavaScript在用戶端龐雜的程式碼,因此這個範例始終沒有跟大家見面(所以在Sivlerlight 1.0的書籍中當然您也沒有看到),時至2009年,最近終於有了一點時間,花了一兩天做了一個Silverlight 2.0的檔案上傳類別, 透過 Silverlight 2.0實作這個功能確實是比起用AJAX輕鬆了不少,例如透過Silverlight 2.0的功能我可以輕鬆的調用Web Service, 我可以相當容易的針對用戶端的檔案作存取, 不需要礙於Browser對於用戶端檔案沒有權限而費盡心思的處理安全性議題,檔案的上傳過程中難免也會有timeout或是其他的Exception, 透過Sivlerlight 2.0撰寫的用戶端程式碼, 要處理這些Exception容易很多, 也因此, 在Silverlight 2.0推出之時(嚴格說起來是1.1那時候), 我就在想, 或許對於大多數的ASP.NET開發人員來說, 檔案上傳進度才是我要透過Silverlight迫切實現的一些關鍵技術, 其他諸如很炫的UI? 2D或是3D動畫效果, 很抱歉, 老實說其實我對這些沒多大興趣...這些屬於加分用的功能, 可以讓我的產品賣相好一點, 但不太可能憑這些功能幹掉對手, 且這部分交給Designer來完成就好...(請原諒我的開發人員本位主義和要不得的程序員心態...^_^)

  so, 或許你有興趣試試看底下這個prototype, 我會在快要寫完的Silverlight 2.0-3.0書籍中介紹(如果時間來的及, 或許我會先在下一期的RunPC介紹相關的程式碼開發方式), 另外由於Hosting的限制, 請不要上傳超過1.5M大小的檔案, 不然很容易把我用很便宜的價格租來的Web Server拖垮, 傳一兩個檔案玩玩就好, 這不是完整版, 所以也可能有一些bugs, 如果有任何問題, 請讓我知道。另外, 請不要上傳有任何安全性疑慮或爭議的檔案, 我無法保證你上傳上來的檔案的安全, 請留意。

[Upload File Progress with Silverlight 2.0]
補充說明一下,建議您上傳.gif, .jpg, .png圖檔或.rar壓縮檔,否則有一些檔案就算你上傳成功,由於Hosting的關係,你可能也會下載失敗...檔案無法驗證上傳結果...