2008年11月23日 星期日

利用Silverlight Toolkit豐富你的Web應用程式

12月4日,將在台北微軟 7樓舉行一場MSDN研討會,重點將放在Silverlight Toolkit,對Silverlight有興趣(或是對如何在網路上建立圖表、或是數位儀表版...等有興趣)的開發人員請千萬別錯過囉,除了會場中所分享的內容之外,如果時間允許的話,或許我還可以提供一些額外的Resource,總之,到時候見啦。

搶先報名吧:http://www.microsoft.com/taiwan/msdn/events/webexperience/event081204.htm


議程:
Silverlight 2.0 開發技術簡介
Silverlight 控件 與 User Control 的使用與開發
Silverlight Toolkit 介紹與使用技巧
內容:
  眾所期待,Silverlight 2.0 終於在 2008 年底正式與我們見面,在這個版本當中,除了原有的 Web 動畫影音技術外,還大幅增加了資料繫結、遠端資料存取、控件、樣板樣式、多執行緒…等開發人員所需的各種功能,一舉將 Web 應用程式開發帶向另一個嶄新的里程碑。
  隨著 Silverlight 2.0 的上市,微軟同時提供了 Silverlight toolkit 這一套內含原始程式碼的控件集,讓開發人員在架構 Silverlight 應用程式時免費使用,透過這組控件可輕易的產生各種互動式圖表、使用諸如 TreeView, AutoCompleteBox, DockPanel, UpDown, ViewBox…以及未來多達數十種控件與UI外觀樣式。 在這一個場次當中,我們將透過實際的範例,帶領學員進入 Silverlight 應用程式開發的領域、體驗 Silverlight Toolkit 當中豐富的控件,讓您將 Web 應用程式開發帶向另一個全新的未來。

2008年11月17日 星期一

技術的變與不變之間...Silverlight 3.0的驚鴻一撇

今天在公司開會的時候,一位作者好友透過MSN通知我Scott的BLOG上果然開始出現了Silverlight 3的消息,我一聽不得了,第一時間看了Scott的BLOG,大意是說,Silverlight 2在今年推出正式版之後,在一個月內,已經有超過100 million(哇哇,超過一億? 會不會太誇張??? 應該是很多機器overlap的重新計算了吧,像是我,至少裝了30次)機器安裝了Silverlight 2(不過,聽起來微軟好像對這個數字很爽的感覺^_^)。

而且,還有很多Sivlerlight 2使用在產品中的真實案例(嘿嘿,當然,內舉不避親,其中我覺得最重要的,就是K2的blackpoint,如果有人對這個產品有興趣,可以跟我聯絡),足以證明Silverlight 2是一個可以真實應用的開發工具。

接著Scott趁勝追擊的說,將在next year推出下一個版本的Silverlight 3,令人興奮的部分是,在大家開罵了很久之後,終於,終於,可以在Visual Studio和Visual Web Developer Express當中以所視即所得的方式設計Silverlight了,Data Binding的部分也有工具(Wizard)可以設定,而不需要手動去下Code(剛好這件事情就是那天去參加好友的seminar後,在路上和他討論的問題,嘿嘿,沒想到他還真有先見之明),另外加上對3D的支援,以及對H.264 video格式的support...總括一句話,就是功能越來越強就對了(老實說,就是Silverlight的WPF化),然後Scott暗示大家趕快投入開發的行列,因為早晚有一天,Silverlight會把Fl?x幹掉(後面這句話是我自己加的...^_^)

看了這一篇BLOG之後,我挺有感概,技術變化得太快了,對於寫書的作者來說,會不會是一個很大的打擊呢?Silverlight 1.0的書才剛出,Silverlight 2.0就馬上Beta 1,現在Sivlerlight 2的書還沒出,馬上就有Silverlight 3的消息,是怎樣?拼進度嗎?

回頭想想,到底是哪個環節出問題? 是外國人太快,還是我們太慢? 老實說,我相信大家都沒什麼內幕消息,而且現在到處都是BLOG,訊息非常透明,要有秘密也不容易,也就是說,這些Roadmap是大家早已知道的,而且三五不時釋出一些消息早已是常態,所以開發人員應該要習慣這樣的狀況。

ASP.NET不也是這樣? ASP.NET 2.0出沒多久,又多了一個ASP.NET AJAX 1.0(而且回想一下,AJAX 1.0出之前,Altas炒了多久?),又沒多久ASP.NET Futures出現了,然後接著是ASP.NET MVC Preview…、然後是ASP.NET 3.5,出了不到半年,馬上來個ASP.NET 3.5 SP1,然後PDC剛過,ASP.NET 4.0的Roadmap就丟了出來…搞什麼???

無言,改版更新已經是常態,從過去的一年、一個月、變成一季、每個月、加上BLOG推波助瀾,你會覺得幾乎每周都有新的東西,資訊是自由流通了,開發人員其實是很幸福的,隨手就能掌握最新資訊,有點蓋茲當年說『資訊隨手可得』的味道…

技術變更的那麼快,是不是真的會讓開發人員很辛苦呢? 仔細想想,其實不盡然,因為變與不變之間,是有那麼一條線存在的。

如果你追的是技術,我要說確實,你可能真的會追得很辛苦,開發技術是一直在變的,學會特定的技術不見得會幫助你成長,頂多只能幫助你『解決問題』。是的,這些技術都是在解決特定的問題,有問題、有解決方案、有新問題、有新的解決方案,如此而已。

技術會過時,毫無疑問,會的,但是累積的經驗不會,過去的COM過時了,過去的DAO、RDO、ADO過時了,甚至Web Services可能也要過時了,但是當面對新東西、面對ADO.NET、面對LINQ、面對WCF、REST…,我要說,如果過去你學的扎實,你會知道為什麼這些新技術會誕生,每一個技術的誕生都是為了解決過去的問題,彌補不理想的部分、如果過去的底子厚,新技術難不倒你,你會觸類旁通,久而久之,你會從技術的follower變成forerunner,最後成為技術的Leader。

但是如果一開始學習時,只是速成式的囫圇吞棗,如果你只知道怎麼用一們技術,卻不明白為何需要這個技術,例如:很多人知道『物件導向』,卻不知道為何需要『物件導向』或是『物件導向』技術的目標與優點,那問題就很大了,同樣的,你上面把這句話中的『物件導向』四個字,換成LINQ、WCF、WF、Silverlight…,換成哪一個term都行,因為放諸四海皆準)

知其然而不知其所以然,會有蠻大的問題,在學習的過程當中,這些技術沒有『內化』成你的一部分,這會是一個很大的問題,在ASP.NET技術中,很多部分也是這樣,有很多工具我們都會用,但是不盡然知道為什麼,當然我能理解,因為現在專案的特性,需求變動大、結案時間短,架構、規畫這些東西根本不在很多開發人員的考量當中,許多開發人員只是希望能夠盡快用自己熟悉的技術做完專案,然後結案領錢,說實在的,因為規模不夠大,所以也不見得有辦法用足夠的預算談規格,如果是價格標就更有可能是這樣。

所以我們手上有很多速成式的開發工具,很快速的幫助你完成一個系統,它的取向是速成,但是卻拋棄了架構和延展性,ASP.NET中的幾個XXXXview控件就是典型的例子(不過我要強調,它不見得是這些控件不支援,只是很多開發人員選擇走捷徑,把SqlDataSource和xxxxView拉一拉了事,完全不管這樣的結果會如何)。

這讓我想到『尼可拉斯凱吉』演的『氣象人』,其中有一段話,因為主角常被路人拿速食(例如熱狗、漢堡、可樂…)ㄎㄟ,他不明白為什麼,後來靜下心來,他發現自己就像速食,每天在電視台上報氣象,短短五分鐘,沒什麼營養,但是卻能夠馬上吃飽,看起來有模有樣,年薪很高,但是骨子裡卻很空洞。

我發現這個對速食的描述真是太好了:『很快能吃飽,但是卻沒什麼營養』。在我們這個時代,實在有太多東西是這樣的了,我們很快的兜出一個解決方案,迅速滿足客戶的需求,客戶在煞那間似乎覺得飽了,但是老實說這樣的解決方案沒啥營養,不能長久的徹底的解決問題,但是似乎大家也接受了。我們的學習也是這樣,速食導向,在學校裡學了很多的技術,把大家餵的飽飽的,但是是不是很有營養,真的很難說,有多少技術出了學校就在也沒用過了,或許我們要學的是觀念,而不只是技巧…

我自己也檢討了一下,是不是我們寫書時也會掉到這樣的陷阱中,塞了很多東西把讀者餵飽,頁數厚厚的,感覺很超值,但是營養卻不夠,很快的,大家就餓了。

過去這一年,我花在寫書的時間上很少,因為我對技術書有蠻強烈的消耗品的感覺,一張好聽的CD,我可能可以保留很多年,但是隨著資訊技術演變的速度,現在一本書放在架上可能不到一年半就要say goodbye了,讀者買了佔書架,搬家的時候也累,讓我覺得有點罪惡感,當然,我不是說寫書不好、或是大家不應該看書,反而我覺得大家應該多買書、多看書、不然很多全職的作者很辛苦的,而且如果好的書沒有被鼓勵,那有心的作者會越來越少…

而對我來說,我希望能慢慢調整,能夠寫一些可以長久的書,不會隨著技術的演變和改版而凋零的書,當然,新技術我們還是會介紹,但是BLOG不是比書來的迅速多了嗎?

以前我記得老師在指導我們如何蒐集資料時,提到一個觀念,如果大家希望找到最新的第一手資訊,那期刊或許可以滿足你的需求,但是如果你需要觀念,需要完整的引導、需要奠定基礎,那書本永遠是最好的選擇,一本書是作者『經年累月的經驗累積』。

一本書是作者經年累月的經驗累積』,我對這句話很有感覺,我希望自己寫作,能夠在書本當中呈現的是經驗的累積,而非只是技術的介紹,畢竟現在以BLOG介紹新技術是最好的選擇,想到隨手就寫,沒有時間空間的限制。

而出一本書,我真的不想再被版本趕著跑,對讀者來說,我可能要Say Sorry(對出版社我也得說聲Sorry),我很想寫的快,但是我更希望寫得好,畢竟一本可以對讀者長久有幫助的書,總比曇花一現的排行榜冠軍對我來說意義大的多。

面對新的技術,面對快速變動的技術,我真的覺得開發人員不需要擔心,因為經驗依舊是會累積的,開發人員的價值必須彰顯在你的經驗上,對於開發架構、對於規畫、對於專案運作的熟悉,比起對於特定技術的了解,更會是你與別人不同的競爭力和利基。

對於初學者,我想特別說句話:了解怎麼使用一種技術很重要,但是了解背後的原理、架構、和『為什麼』,一樣的重要…千萬別只是學會用一種技術,而不知道為何要用這種技術…

2008年11月15日 星期六

以WCF來開發RESTful風格的服務

  在上周『從Web Service到RESTful WCF的心情』一文中,我提到了對REST的感想,而這一篇,則是介紹.NET 3.5 中對REST的支援,說明如何透過WCF開發RESTful服務,不過,當.NET開發人員要透過WCF來開發RESTful的服務之前,有一些基本的觀念需要釐清。所謂的REST技術,其精神是透過Uri來描述存在於網際網路上的資源,例如:

    http://www.studyhost.com/Eshop/Products/Nokia5130

  上面這串網址可表示一個產品資料表中的產品,產品名稱為Nokia5130,若我們想取得資料,可透過HTTP GET方法,以上述網址來取得。

  若我們想刪除這個資料,則一樣是上面這串網址,但是對IIS伺服器送出的動作則是HTTP DELETE。如果我們想建立一筆新的資料,則可透過HTTP POST方法,至於要修改,則透過HTTP PUT方法。

  也就是說,描述資源是透過Uri,而對資源要進行的動作,則是透過HTTP verb來進行。有了這樣的觀念之後,我們就可以開始嘗試建議建立RESTful的 WCF服務。我們建立出的WCF服務,只需要遵循上述的 REST風格,即可讓所有的開發人員存取。  

  一直說REST風格而不說REST規格,主要的原因是REST並非是一種哪一個機構或是協會設計出來的規格,由於架構簡單,它僅僅是一種設計風格,就是兩個要點,用Uri來描述資源位置,用四種Http Verbs(包含GET, POST, DELETE, PUT)來決定對這個資源要進行的動作,甚至當我們用調用某一個RESTful的服務時,該服務回傳的資料也沒有一定要以XML型別回傳,也可以是單純的文字或是HTML。總而言之,它就是簡單導向。

  而HTTP Verbs到底是什麼呢?這對於絕大部分時間僅僅使用瀏覽器的開發人員來說,可能有點陌生,HTTP Verbs是HTTP協議定義出的規格,HTTP共有八種動作,包含:HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT,過去我們常用且熟悉的應該是HTTP GET和HTTP POST,當你在瀏覽器上輸入一個網址,對於IIS伺服器下的指令其實就是HTTP GET,而當你在瀏覽器上按下某一個Submit按鈕(或是ASP.NET的postback),其實就是對瀏覽器下HTTP POST指令。

實際建立RESTful的WCF服務

  由於.NET 3.5的支援,我們可以透過相當簡單的方式來建立RESTful的WCF服務,若開發人員想透過WCF技術,來開發RESTful的Service,只需要在VS2008 SP1的專案範本中,選擇AJAX-enabled WCF Service即可:

接著,您會看到底下的程式碼:


  如果您將最上面註解的『WebGet()』槓掉,該服務就會是一個RESTful的服務,支援 HTTP GET方式。

  不過要讓這個服務能夠正式運行之前,我們必須針對Web.Config作一些調整,請把區段中的『enableWebScript』取消:


  另外,請開啟RESTfulWCF.svc檔案,在.svc頁面的網頁前置詞當中,加入『Factory="System.ServiceModel.Activation.WebServiceHostFactory"』,如此一來,這個RESTful服務才能夠正常運行:


  有了這些概念之後,我們立刻來嘗試建立一個簡單的例子,請建立一個GetData Method,該Method具有一個參數Name,接著在Method上,加入WebGet修飾字,給定UriTemplate即可,相當的簡單:


  UriTemplate是指這一個RESTful服務的呼叫方式(嚴格說起來是描述該資源的Uri位置),是要以何種Uri來表達,透過這種方式建立出來的WCF服務,就直接支援了REST型態的遠端呼叫方式。
  例如,上例中我們給定的『UriTemplate』是"User/{name}",則這個資源可以透過底下的網址來取得:

http://localhost:56712/RESTfulWCF.svc/user/david

  其中的『david』是UriTemplate中的{name}參數,而這個參數可透過我們定義在GetData()中的name參數取得,目前我們在GetData()中僅是將這個參數加上一些文字然後回傳,表示回應了用戶端對資料的呼叫,而呈現出的結果如下圖。我們可以在瀏覽器上直接以HTTP GET來測試:

  很簡單的,就建立了一個RESTful的服務。

2008年11月9日 星期日

John McCain Concession Speech(麥肯敗選演說)

看了新聞,提到麥肯的敗選演說,實在覺得應該要讓大家看看,我對麥肯的認識不深,但是不管怎麼說,這是一篇成功的演說,風度、格局展現無遺,希望台灣的政治人物(如果還有的話...因為大部分我覺得都是政客,距離政治人物還很遠...)可以學習.. (中文大意)

MCCAIN: Thank you. Thank you, my friends. Thank you for coming here on this beautiful Arizona evening.

My friends, we have — we have come to the end of a long journey. The American people have spoken, and they have spoken clearly.

A little while ago, I had the honor of calling Senator Barack Obama to congratulate him.

(BOOING)

Please.

To congratulate him on being elected the next president of the country that we both love.

In a contest as long and difficult as this campaign has been, his success alone commands my respect for his ability and perseverance. But that he managed to do so by inspiring the hopes of so many millions of Americans who had once wrongly believed that they had little at stake or little influence in the election of an American president is something I deeply admire and commend him for achieving.

This is an historic election, and I recognize the special significance it has for African-Americans and for the special pride that must be theirs tonight.

I've always believed that America offers opportunities to all who have the industry and will to seize it. Senator Obama believes that, too.

But we both recognize that, though we have come a long way from the old injustices that once stained our nation's reputation and denied some Americans the full blessings of American citizenship, the memory of them still had the power to wound.

A century ago, President Theodore Roosevelt's invitation of Booker T. Washington to dine at the White House was taken as an outrage in many quarters.

America today is a world away from the cruel and frightful bigotry of that time. There is no better evidence of this than the election of an African-American to the presidency of the United States.

Let there be no reason now ... Let there be no reason now for any American to fail to cherish their citizenship in this, the greatest nation on Earth.

Senator Obama has achieved a great thing for himself and for his country. I applaud him for it, and offer him my sincere sympathy that his beloved grandmother did not live to see this day. Though our faith assures us she is at rest in the presence of her creator and so very proud of the good man she helped raise.

Senator Obama and I have had and argued our differences, and he has prevailed. No doubt many of those differences remain.

These are difficult times for our country. And I pledge to him tonight to do all in my power to help him lead us through the many challenges we face.

I urge all Americans ... I urge all Americans who supported me to join me in not just congratulating him, but offering our next president our good will and earnest effort to find ways to come together to find the necessary compromises to bridge our differences and help restore our prosperity, defend our security in a dangerous world, and leave our children and grandchildren a stronger, better country than we inherited.

Whatever our differences, we are fellow Americans. And please believe me when I say no association has ever meant more to me than that.

It is natural. It's natural, tonight, to feel some disappointment. But tomorrow, we must move beyond it and work together to get our country moving again.

We fought — we fought as hard as we could. And though we feel short, the failure is mine, not yours.

AUDIENCE: No!

MCCAIN: I am so...

AUDIENCE: (CHANTING)

MCCAIN: I am so deeply grateful to all of you for the great honor of your support and for all you have done for me. I wish the outcome had been different, my friends.

AUDIENCE MEMBER: We do, too (OFF-MIKE)

MCCAIN: The road was a difficult one from the outset, but your support and friendship never wavered. I cannot adequately express how deeply indebted I am to you.

I'm especially grateful to my wife, Cindy, my children, my dear mother ... my dear mother and all my family, and to the many old and dear friends who have stood by my side through the many ups and downs of this long campaign.

I have always been a fortunate man, and never more so for the love and encouragement you have given me.

You know, campaigns are often harder on a candidate's family than on the candidate, and that's been true in this campaign.

All I can offer in compensation is my love and gratitude and the promise of more peaceful years ahead.

I am also — I am also, of course, very thankful to Governor Sarah Palin, one of the best campaigners I've ever seen ... one of the best campaigners I have ever seen, and an impressive new voice in our party for reform and the principles that have always been our greatest strength ... her husband Todd and their five beautiful children ... for their tireless dedication to our cause, and the courage and grace they showed in the rough and tumble of a presidential campaign.

We can all look forward with great interest to her future service to Alaska, the Republican Party and our country.

To all my campaign comrades, from Rick Davis and Steve Schmidt and Mark Salter, to every last volunteer who fought so hard and valiantly, month after month, in what at times seemed to be the most challenged campaign in modern times, thank you so much. A lost election will never mean more to me than the privilege of your faith and friendship.

I don't know — I don't know what more we could have done to try to win this election. I'll leave that to others to determine. Every candidate makes mistakes, and I'm sure I made my share of them. But I won't spend a moment of the future regretting what might have been.

This campaign was and will remain the great honor of my life, and my heart is filled with nothing but gratitude for the experience and to the American people for giving me a fair hearing before deciding that Senator Obama and my old friend Senator Joe Biden should have the honor of leading us for the next four years.

(BOOING)

Please. Please.

I would not — I would not be an American worthy of the name should I regret a fate that has allowed me the extraordinary privilege of serving this country for a half a century.

Today, I was a candidate for the highest office in the country I love so much. And tonight, I remain her servant. That is blessing enough for anyone, and I thank the people of Arizona for it.

AUDIENCE: USA. USA. USA. USA.

MCCAIN: Tonight — tonight, more than any night, I hold in my heart nothing but love for this country and for all its citizens, whether they supported me or Senator Obama — whether they supported me or Senator Obama.

I wish Godspeed to the man who was my former opponent and will be my president. And I call on all Americans, as I have often in this campaign, to not despair of our present difficulties, but to believe, always, in the promise and greatness of America, because nothing is inevitable here.

Americans never quit. We never surrender.

We never hide from history. We make history.

Thank you, and God bless you, and God bless America. Thank you all very much.

REST一下吧~ 從Web Service到RESTful WCF的心情

  前陣子我的技術前輩Ruddy在MSDN研討會中,介紹了WCF在.NET 3.5上的一些功能增強,其中一個相當重要的部分是WCF對REST的支持。

  你會發現,最近這一兩年,REST這個字眼常常看到,儘管他是Dr. Roy Fielding在2000年時候就提出的,但是我想真正開始紅起來,是因為Amazon和Yahoo都開始拋棄Web Service改提供REST形式的服務,且RoR和一些其他陣營的開發工具都大張旗鼓的支援...所以,就紅了...-_-'''

  而.NET似乎總是比其他陣營遲緩(或是嚴謹?)一點,不過仗著後台硬(現金多),對於各種技術的支援也總是後發先至,你會看到REST突然之間在.NET開發技術裡佔了一個不小的位置,WCF支持它、ADO.NET Data Service也支持它...

  由於未來我會花一點時間談談ADO.NET Data Service(因為我要在Silverlight當中叫用它),你會發現這個服務也是建立在REST的概念上,透過相當簡單的URL來存取遠端的資料庫。

  在過去,這不是Web Service的主要工作嗎? 是的,在2002年,我寫的第一本ASP.NET書籍當中,還努力的鼓催Web Service的使用,我還記得那時候提的範例,是一個郵遞區號的Web Service呼叫,我還說,如果郵局提供此Web Service,全台灣(或全世界)使用到台灣郵遞區號的程式或網站,就再也不用自己去下載郵局提供的3+2郵遞區號對照表(如果我沒記錯是Excel格式),還要手動轉成DB,還要常常自己上網更新,因為台灣的路名、郵遞區號等資訊常常變...透過Web Service,我們可以輕易的達成網站間或是應用程式間的資料交換,把資訊串起來,讓SOA的理想更有可能輕易實現。

  但是,過了那麼多年,Web Service雖然成功的在企業中被使用,但是多半還是在同質的多系統之間進行資料交換,例如在.NET寫的HR或ERP系統之間交換資料。很少看到我們真正期待的在異質系統之間進行資料交換。Web Service儘管是RPC(遠端程序呼叫:remote procedure call)一個相當不錯的解決方案,但是鼓催了多年,卻始終很難達成異質系統之間的資料交換。why?

  原因有很多,安全性、效能、使用上的便利性...等,先撇開這個不談,無法在多異質系統之間進行資料交換的這個問題,一部分的原因是Web Service採用的XOAP和XML-RPC作為骨架,相對而言還是太過複雜,為了調用遠端的服務你必須先知道服務的位置,以及Web Method,需要知道要傳入的參數和回傳參數的數量、種類、型別、意義...才能夠真正存取該資源。

例如: http://www.studyhost.com/ZipCodeSrv.asm?GetCode

  上面這個URL我們只知道有一個位於http://www.studyhost.com/的服務ZipCodeSrv,(似乎)可以用來取得郵遞區號,問題是要怎麼傳遞資料?從URL上都看不到...

  而REST正如字面上的意思這幾個字,可以讓開發人員好好休養生息一下,它用簡單到不能再簡單的URL,來表達存放在網路上的資源,並且讓開發人員可以進行存取。

  例如,如果你想要公開Northwind資料庫,讓遠端的開發人員可以透過REST方式存取,提供新增、修改、刪除、查詢等功能,那可能只需要底下的URL:

    (GET) http://Store.studyHost.com/products
  上面這串網址可以傳回所有的商品資料

  而
    (GET) http://Store.studyHost.com/products/A0213
  則可以傳回編號為A0213的產品的相關資料

  此外,開發人員對於資料庫中的記錄所會進行的查找、新增、修改、刪除...等動作,剛好可以對應到HTTP所提供的GET、PUT、POST和DELETE方法,看起來就是很簡單的感覺...

  最近正式推出的ADO.NET Data Service,在查找資訊的時候,也是採用REST-baseed技術,以同樣簡單的方式讓開發人員可以輕易的存取遠端的資源(資料庫)的內容。

  回頭看,整個REST技術的目的:
  1.提供相較於以SOAP為based的Web Service更簡單的遠端程序調用方式。
  2.不在現有的HTTP技術上疊床架屋,就是用相同於HTTP協定的各種方法(GET、PUT、POST和DELETE)處理完所有的資料存取。
  3.在異質系統之間的資料交換將變得更加容易,任何平台都可以叫用。


  基於這種種的原因,WCF也開始支援開發人員撰寫REST風格的遠程呼叫方法,.NET 3.5 SP1中的ADO.NET Data Service根本就基於REST技術架構出的服務,而ASP.NET MVC和Dynamic Data技術所採用的URL Routing機制,也有REST技術的影子...

  URL不再只是指向某一個頁面,而是指向某個資源的存在,並且我們可以透過URL來操作(新增、修改、存取)這個資源,而MVC架構中的URL更可以視為指向某一個服務(Service)或行為(action),整個結論就是,簡單、直接、有效...

  會寫這一篇,是因為Ruddy前輩在上個月講WCF和REST的時候,我還不是很能被說服,我覺得Web Service用的好好的,微軟沒事幹嘛多弄個REST來鬧場? 這不是屬於第三陣營的技術嗎? 我需要花時間下去跟大家介紹???

  結果經過了一段時間,有天早上起來,我覺悟了,我發現我錯了,我想通了,看起來,REST還真的會被微軟支援,在異質系統之間的資料交換,目前確實沒什麼比REST還方便的,連WCF和ADO.NET Data Service都支援了,我還在猶豫什麼... 我的Silverlight 2.0(其實也包含WinForm)已經全面的支援 以 REST 為基礎的ADO.NET Data Service呼叫,而現在拿WCF來開發RESTful的RPC輕鬆到不行,如果身為ASP.NET書籍作者的自己不寫個一兩篇REST豈不是遜掉了嗎?

  所以,這一篇,是心情轉折,下一篇,我要來介紹如何透過WCF開發RESTful的RPC...

2008年11月7日 星期五

Keep Walking - 王建民篇

哇, 我喜歡的Keep Walking廣告增加了王建民篇...看來我需要考慮要不要更新桌面了...^_^

2008年11月5日 星期三

兩岸會談對台灣資訊業的影響

  這篇文章的標題很嚴肅,但是我只是想談談自己的一些心情和看法...

  這幾天有很多人在抗議,也有很多人期待這歷史性的一刻,不論如何,不管你是歡迎還是抗議,改變還是即將發生。或許絕大部分政治人物關心的主題是明天(10/6)馬陳會的時候,陳雲林到底要不要稱呼馬英九為總統,聽說這個很重要,因為這涉及主權,但是我比較關心這幾天簽出來的協議,對我未來的影響...

  幾個磋商的重點,在這兩天都已經確認並簽暑完成了,其中是不是可能導致未來台灣IT產業相關的改變,是我比較關心的部分,至於主權這麼偉大的議題我想有太多人因為各種理由而比我關心的多,所以我這種小人物應該不需要特別擔心...(強調一下,我也覺得很重要,只是天塌下來還有別人擋著,感謝他們,所以我先關注一下其他我比較關心的問題...)

  過去一年我的主要開發人員不在台灣,我和對岸的資訊社群、出版社都有密切的合作,不可否認的,由於台商到了大陸(這表示客戶到了大陸),所以過去幾年,有不少的軟體業被迫需要在對岸設點,進而慢慢把一些工作機會從台灣移到了大陸... (難怪買書的人變少了 ^_^)

  這幾天碰到一家廠商,該廠商的主要開發人員(從SD以降)全部在對岸,在台灣只有SA以上的人力佈署,這種模式在這幾年我常常看到,最主要的考量是成本,而令人訝異的是,最近幾年同樣成本、同樣年紀、或是同樣工作經驗的開發人員相比較,對岸的成本明顯還是比較低、素質卻有明顯的提升,相較之下,台灣的junior開發人員和剛畢業的學生狀況頗令人擔心...

  這個趨勢已經從developer蔓延到SD, 而SA因為要面對客戶,所以只要客戶在台灣,在目前大陸人士來台不是很方便的狀況下,被取代的可能性比較低(但是如果你的主要客戶是在大陸的台商,那情況就不一樣了),但是昨天會談的結果,不出所料的,兩岸正式邁向三通,從台北到上海只需要80分鐘,比台北到高雄搭高鐵還快...

  未來,由於實體距離的縮短,是不是更有可能台灣的專案需求完全由大陸的開發團隊承接,我想不需要我們亂猜測,在未來一年內可以看到結果...

  在某些政治人物擔心對岸農產品會不會來台,對岸工作人員會不會搶了台灣人的工作,努力的想要怎樣禁止或是怎樣有條件開發...我要講的是,人家Thomas Friedman三年前就說了,世界是平的,那道牆早就瀕臨瓦解,與其滿腦袋想要怎麼阻擋,不如想想怎麼進行產業升級,怎麼提高競爭力,全球化的競爭早就展開了,你不可能一面講著與世界接軌,一面想盡辦法設限,這些趨勢不是政府、國界、距離可以阻擋的...internet把全世界串起來的那一刻,這些就注定發生了...

  我知道,從技術上來說,用擋的比促進產業升級還容易,讓我想破腦袋,我還想不太出來台灣兩黨哪一個民意代表有足夠的學養和能力來促進產業升級,台灣的民意代表主要的工作內容多屬於揭弊、抗議、做選民服務關切一些案情...至於要思考長遠的獲利來擬定對未來的策略和計畫,因為超過四年任期,所以這個工作沒有短期效益,大多是政治人物不太熱衷...

  全球景氣不佳,冬天快來臨(還是已經來臨?),與其期待政府或政治人物有所作為,幫你塑造出一個美好的經濟環境(我強調,我不是說這個不重要,只是我覺得短期內我看不到),不如自己努力一點,亂世都有人能賺錢,提升自己的競爭力,會是這個階段我們自己比較能夠控制的事情...

2008年11月2日 星期日

在沒有LAN的狀況下讓host與VPC以網路通訊

不知道從幾年前開始,VPC從消遣打發時間的玩具,升級成我每天工作必備的開發/測試工具,雖著VPC使用的時間越多,其中的應用也越來越多元化。

一般來說,我的工作地點都有無線網路可以使用,我的作法會是讓host(我的主機, 也就是NB),跟VPC各拿一個IP,儘管用的是同一張網卡(VPC設定為一張網卡, 對應到host上的真實網卡),但是由於各自有一個真實IP,因此資料傳輸上沒有任何問題。

這個需求不是用來複製檔案,複製檔案從host拖曳到VPC裡面即可,不用繞來繞去透過網路那麼辛苦,這個需求多半是開發Client-Server之間的應用程式以及測試,因此會需要實際有兩個IP進行互動。

但是,在很多情況下我抓取不到兩個IP:
1. 根本沒有無線網路,連一個IP都沒有
2.有無線網路,但是並不是DHCP,連線也有限制,典型像WiFly,你沒辦法讓VPC有一個獨立的IP, VPC還是可以透過NAT方式上網,但是沒辦法和host以IP對IP的方式溝通。

碰到這種情況,殺手鐧就要來了,前陣子跟Michael學到一招不錯,記下來和大家分享,首先,你可以在host上安裝一張虛擬的網卡,名稱為:Microsoft Loopback Adapter:


接著設定這張網卡為固定IP,例如192.168.20.10:


然後將VPC的虛擬網卡設定,增加成兩張網卡(你可以一張設為NAT,一張設為Microsoft Loopback Adapter):


接著把VPC裡面,對應到Microsoft Loopback Adapter的那張網卡IP設定為同一個網段的固定IP,例如192.168.20.20:

你也可以順手把VPC中的另一張網卡設為DHCP。

接著,回到host,試著ping 192.168.20.20,你會發現host已經可以透過網路方式連線到VPC裡面的IP位置:


這樣的做法,可以讓我們在沒有LAN的環境下,在VPC中架設Server,然後從host當中進行存取,或是相關的測試。