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勢必會相當忙亂,只是提醒大家,工作之餘,不妨多一些時間想想自己的夢想和對未來的期待,祝大家...週末愉快。