2012年12月22日 星期六

台灣迷失的雲端運算產業


或許是在政府急著救一落千丈的民調支持度壓力之下,最近突然出現了很多雲端產業相關的新聞...

北市雲端園區 年產值估千億元 (http://tw.news.yahoo.com/%E5%8C%97%E5%B8%82%E9%9B%B2%E7%AB%AF%E5%9C%92%E5%8D%80-%E5%B9%B4%E7%94%A2%E5%80%BC%E4%BC%B0%E5%8D%83%E5%84%84%E5%85%83-213000708.html)
首片政府雲 中華電奪標 (http://pro.udnjob.com/mag2/it/storypage.jsp?f_ART_ID=80116)

還有立委開始爭取雲端園區位置...
http://www.abao.org.tw/web/index.php/pv-cloud

說真的,在賴士葆提出不像樣的證所稅之前,我還蠻支持他的,另外我以前念中學的時候就在木柵,我很喜歡文山區,但...在文山區催生一個雲端科技園區是個...什麼樣詭譎的想法啊?

誰能跟這些立委說明一下,雲端產業不需要科技園區(下面有一篇,我就不多說了)(參考https://www.facebook.com/notes/ben-jai/%E6%94%BF%E5%BA%9C%E4%B8%8D%E6%87%89%E8%A9%B2%E8%A8%AD%E7%BD%AE%E9%9B%B2%E7%AB%AF%E7%94%A2%E6%A5%AD%E5%9C%92%E5%8D%80/10151185269654113)

另外上述的兩則新聞中,先不提台北市也想做雲端園區,郝市長說:『市府設置Taipei-Free免費無線上網、積極鋪設光纖網路等,北市還聚集金融服務業、資通訊等知識密集產業,還有許多企業設立營運總部及研發中心,最重要的是"硬體人才"充沛,可提供雲端產業所需人才。 』這整個搞錯了,你只看到雲端運算的硬體需求,沒發現其實雲端的核心在軟體應用嗎???

我已經在各種場合或課程中說了不下數十次,台灣要發展IaaS我當然沒資格攔阻(雖然我打從心底覺得機會不高,你要幹掉現在市場上哪一家IaaS/PaaS廠商? IBM? Amazon? MS? Google? 政府的目標是要設定成要讓大家來用搭建在台灣的IaaS/PaaS嗎??? 不管怎麼看都是個不切實際的夢)

而台灣那麼多的中小企業軟體公司,卻沒有任何輔導這些軟體公司成為"全球化SaaS廠商"的計畫? 雲端是全球化的競爭,沒有關稅機制可以擋,不需要WTO/FTA,SaaS產品早就在全球開始競爭了,雲端不是自己在台灣喊喊開心就可以的。台灣的軟體公司不缺乏創意或能力,但缺乏將產品或Solutions國際化的能力...這部分才是政府要施力的地方,雲端產業絕對不是蓋機房、框地搞園區、這樣是不會成的...

從這幾則新聞看起來,台灣政府(不知道被哪一個廠商洗腦)成似乎想要發展自己的IaaS/PaaS,好,這也很好,但能不能先看一下目前國外做的產品已經在哪一個水平,不然政府把幾百億金額丟中華電信和台達電,就算我不在乎這是我的納稅錢,就算我不在乎怎麼把錢這樣亂分配,到頭來,台灣廠商交了白卷,是誰要負責呢??? 是誰要承擔呢?

上述這些新聞中的財源,如果我沒記錯,都是來自一個五年四百億的預算...

簡單的說,就是台灣政府想要引導靠政府吃飯的軟體廠商來撐住用台灣納稅人花錢幫中華電信和台達電做出來的雲端IaaS與PaaS,好,如果中華電信和台達電做出來的雲好過Microsoft, 好過AWS, 好過GAE, 強過CISCO, 強過IBM...那我幹嘛不用呢???

反過來講,如果台灣自己搞得IaaS/PaaS很爛,那靠台灣軟體廠商來撐也撐不住的...老大哥...沒有人跟你說過雲端Solutions要做就要全球化嗎? 你必須要做到全球前三名,才有機會在市場上存活,要做PaaS就要有本事把Azure, AWS, GAE幹掉啊...

不然我從哪個角度來看,這些案子都只是在分錢而已...

反而台灣為數相當多的軟體開發中小企業、小型軟體或專案開發廠商、App開發商,SaaS(Software as a Services)軟體研發商,由於根本沒有參加分錢會議的機會,所以政府彷彿以為這些廠商都不存在一樣,別忘了除了IaaS/PaaS之外,台灣其實有不少的創意團隊、軟體研發人才,是可以好好發展SaaS產品的,你看這個 http://cacoo.com 雲端繪圖產品,就是出自一間15個員工的小軟體公司,透過multi-language的設計與雲端技術加持,全球都可以使用這個由日本這家小公司所開發雲端SaaS服務!!!

台灣想要發展雲端產業,不管是PaaS/IaaS或SaaS,在那個領域就得要做到全球前三名,這確實有一定的難度,台灣廠商(不過就是中華電信、台達電、鴻海、華碩之類的廠商)想要去拚在IaaS/PaaS領域的這一塊紅海,我沒意見,只是政府就真的要傻傻的補助和支持這麼多錢嗎? 那一片藍海的SaaS產業,怎麼不見政府投入資源鼓勵廠商呢? 不僅如此,從上面的新聞中看起來,現在吃政府發包出來的專案飯的SI或軟體公司,將來還得被迫使用中華電信、台達電拿台灣納稅人補助的錢建構出(我個人預期)不太有競爭力和優勢的半調子PaaS產品,這無疑是本末倒置!

政府不需要把錢到處撒,補助SaaS軟體廠商也不是分錢,而是透過類似資策會或其他的機構,輔導這些SaaS軟體廠商所開發出的軟體產品國際化,因為誰都知道台灣的內需太小,不足以支撐雲端SaaS/PaaS/IaaS任何一個產業,台灣的雲端(包含App)要能外銷,要能國際化,要能賺外國人的錢,台灣軟體與雲端產業才有生存的空間。

而台灣軟體人才充沛、功力也不差,根本不需要政府補助在這類硬體或技術上,SaaS產業需要政府幫忙的是國際軟體行銷、國外貿易、稅法、金流、國際法律與國外代理...等這些在傳統台灣軟體業不熟悉的領域。所以不需要分錢(補助)給SaaS,不需要搞雲端園區,不需要自己弄PaaS/IaaS給我們用(現在國外的公有雲大家已經用的開心,台灣自己搞的PaaS再等他發展三年能不能有一樣的水平我都覺得很難說)。

我以前老闆說過一個故事:他有天很忙碌,行程很趕,要立刻去一個會議地點,本來的司機請假,因此他只好急急忙忙衝下樓叫了計程車,上車就說:『快,開快點!!!』過了一兩個路口,他才想起來這不是他平常的公司車司機,而他也根本沒跟計程車司機說要去哪裡,所以疑惑的開口問:你知道我要去哪嗎? 計程車司機說:『我不知道,也不是很在乎,我只負責計程收費,不過我的確照你吩咐的開得很快了,是吧~』

我可以理解政府現在民調低落,有很大的壓力,但你要去一個地點,只是車開得快還不行,你一開始就得要走正確的路線,否則不僅僅將來可能繞路,漫無目的的耗油狂奔,短期是讓計程車司機賺到錢沒錯(想降低失業率? 還是砸錢刺激帶動產業?),但是這樣做對我們國家整體的目標與方向一點意義都沒有。

而且,沒有方向的開快車在路上亂跑,早晚是會出車禍的。



分享

2012年12月20日 星期四

[研討會] 微軟Windows Phone 8 MSDN研討會

很開心在謠傳中的2012末日前,有機會和大家分享WP8的開發技巧,今天整場的Slides可以餐考底下連結 :
Slides

=====================================================================
WP8相關影片如下:

《WP8小講堂 - 新版 Flip, Cycle, Iconic 動態磚 》
WP8新版的動態磚除了開始支援三種不同的尺寸之外,還支援三種不同的格式,分別是Flip, Cycle, 和 Iconic ,在這支影片當中,我們將為您介紹 WP8當中新版動態磚的使用方式,讓您完整掌握WP8新型態的動態磚功能與應用...


《WP8小講堂 - FAR 》
FAR(Fast App Resume)是WP8當中的一個小功能,可以讓你的App更快的啟動,過去我們的App在離開前景時會被推入Dormant模式,當使用者按下back時,則會將被推入Domant的App從記憶體中撈回來,由於App被保留在記憶體中,因此比重新啟動要來得快,而現在這個機制延伸到從主選單撼動態磚啟動的App,只需要透過設定...


《WP8小講堂 - Lock Screen背景圖片 》
Lock Screen的應用在WP8開始全面開放給開發人員,現在我們可以透過設定,將App設為支援Lock Screen背景圖片的顯示,透過特定的API,我們可以讓用戶將我們的App設定為Lock Screen背景圖的提供者,在這支影片當中,我們將Step By Step為您介紹如何讓你的App支援這個功能...


《WP8小講堂 - Lock Screen訊息 》
Lock Screen的應用在WP8開始全面開放給開發人員,現在我們可以透過設定,將App設為支援Lock Screen訊息的顯示,再透過特定的API,即可動態的在螢幕鎖定時,呈現出我們App要顯示的訊息,在這支影片當中,我們將為您介紹這個功能...
 
 
《WP8小講堂 Uri Associations 》
Uri Association是WP8的新功能,現在我們可以透過這個功能,將自己設計的App與特定的Uri類型進行連結,如此一來,App和App之間就可以透過URI進行溝通,也可傳遞參數,例如從AppA開啟AppB,將特定的參數傳遞給AppB來進行處理...

 

 
 
《WP8小講堂 File Associations 》
File Association是WP8的新功能,現在我們可以透過這個功能,將自己設計的App與特定的檔案類型(副檔名)進行連結,如此一來,App和App之間就可以透過檔案彼此溝通,也可傳遞檔案,例如從AppA開啟AppB,來處理特定格式的檔案...
 

 
 
《WP8小講堂 - WP8透過語音辨識啟動自己撰寫的App 》
這個範例我們展示如何讓我們自己撰寫的App,也支援語音辨識的功能。如此一來,使用者就可以透過WP8的語音辨識功能,來開啟我們所撰寫的App,甚至直接連結到特定的頁面,或執行特定功能。


 =====================================================================
另外,關於Mobile Services的影片可以參考這裡

2012年11月26日 星期一

[教學影片][研討會] Windows Azure Mobile Services 三部曲

底下這三部影片是今天在恆逸上課的內容,主要是Azure Mobile Services。透過Azure Mobile Services我們現在可以很輕易地建立伺服器端的資料存取、Facebook身分整合驗證、以及push notification推播訊息,相當方便好用。

Windows Azure示範教學:Azure Mobile Services-基本操作與應用
這段影片由最基礎開始,介紹如何使用Azure Mobile Services,來建構行動裝置可使用的雲端服務。透過Mobile Services開發人員可以毋須撰寫後端(雲端)服務程式碼,即可讓前端行動裝置(iOS, WP8, Win8 App...etc)直接存取後端資料庫,達成各種行動裝置的應用功能。

 
 
Windows Azure示範教學:Azure Mobile Services 身分驗證與FaceBook整合
這段影片接續著我們上一個Azure Mobile Services 的介紹,繼續將我們建立出來的雲端服務加上用戶身分驗證的功能,我們讓雲端服務可以自動整合FaceBook身分驗證,讓開發人員毋須撰寫複雜的程式碼,即可讓WP8 Apps, Windows Store Apps可以輕鬆地建立出FaceBook身分驗證的機制,並且整合雲端服務,讓雲端服務的存取更加安全。
 


Windows Azure示範教學:Azure Mobile Services-push notification大簡化
這段影片由接續著先前談過的Azure Mobile Services,介紹如何使用push notification整合機制,來大幅簡化行動裝置WP8行動裝置的推送訊息整合機制。透過Mobile Services的功能開發人員毋須撰寫複雜的後端(雲端)服務程式碼,即可將訊息推送給前端行動裝置,直接達成push notification功能。

2012年11月15日 星期四

[教學影片] Windows Azure示範教學影片

整理了一些先前錄製的Azure相關教學影片,提供給大家參考。

Windows Azure示範教學:建立基本WebRole
這段影片從最基本開始,介紹如何建立一個Windows Azure WebRole,並且撰寫一個簡單的ASP.NET WebForm應用程式佈署到雲端。同時,也介紹RoleSetting的概念...
 
 
Windows Azure示範教學:Windows Azure Strage - Blob的使用
在這段影片當中我們介紹Azure Storage Blob的基本概念,以及如何透過.NET C#程式碼來建立Contannner與存取Blob


 
 
Windows Azure示範教學:Windows Azure Strage - Table的使用
在這段影片當中我們介紹Azure Storage Table的基本概念,以及如何透過.NET C#程式碼來建立Contannner與存取Table
 
 
Windows Azure示範教學:WP7直接存取blob
一般來說,我們都是透過後端(伺服器端)的程式碼來存取blob,但偶而也會有需要從行動裝置(手機)上直接存取blob的例子,這個範例就是介紹如何透過WAT中的類別程式庫,從WP7直接存取blob
 
 
Windows Azure示範教學:建立基本WorkerRole WP7 Push Notification訊息發送
這段影片以一個WP7 Push Notification為例,介紹如何建立並使用Windows Azure WorkerRole來進行一個Scheduled Job

2012年11月12日 星期一

[實作上手營] 行動裝置開發及使用Windows Azure開發後端服務實作

 
明天主要講的是Azure與Apps(Win8 Apps, WP8 Apps)開發之間的關係,會介紹的是如何從手機和平板App上存取Azure的資源,以及微軟最新的mobile services
 
點選這邊報名。(如果不能點,就是活動過期了,或是額滿了)


2012年11月1日 星期四

就寫兩行程式,讓你的WP8陪你說話...

Windows Phone 8除了很聽話之外,當然也會說話,還能說中文囉。
        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            SpeechSynthesizer synth = new SpeechSynthesizer();
            await synth.SpeakTextAsync("提醒您,15分鐘後開會!");
        }
透過SpeechSynthesizer API就可以讓我們的WP8說中文囉,很簡單吧...

透過WP8語音辨識功能啟動自己撰寫的App

前面提到過,Windows Phone 8 具有相當優秀的語音辨識能力,我們不僅可以輕易的讓我們自己撰寫的App,透過語音來啟動,甚至也可以在App當中利用語音辨識功能來實作出一些效果。

接著我們就要來看,如何讓我們自己撰寫的App,也支援語音辨識功能。首先來看最基本的,我們要讓使用者可以透過語音來開啟我們的App。

實作的方式很簡單,首先,請先設定好你的App的WMAppManifest.xml,主要的是App名稱以及Capabilities中的Speech_Recognition:
 
設定好了之後,請在你的App中加入一個 XML 檔案(SupportedVoiceCommands.xml),格式如下:

  

     我的語音程式 
     試試看說:開啟 我的語音程式 

    
      跳到測試頁
      跳到測試頁
      我的語音程式 顯示測試頁
      
    
  

上面這段XML主要在描述我們這支App要支援那些語音辨識功能。
接著,再到App.xaml.cs當中,加入底下這段程式碼:
        async private static void InitializeVoiceCommands()
        {
            var filename = "SupportedVoiceCommands.xml";

            try
            {
                var location = Package.Current.InstalledLocation.Path;
                var fileUriString = String.Format("file://{0}/{1}", location, filename);
                await VoiceCommandService.InstallCommandSetsFromFileAsync
                    (new Uri(fileUriString));
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
上面這段程式碼,是讓我們所撰寫的語音指令XML檔案,透過VoiceCommandService進行註冊。 當然,在App.xaml.cs的public App()當中,我們要補上一句:
        public App()
        {
           ...略...

            InitializeVoiceCommands();
        }
如此一來,就大功告成囉...來試試看吧...

上班很無聊? 要不要試試看對著你的WP8說話...(WP8 語音功能Demo)

嘿, 裝好了WP8的SDK了嗎?

要不要試試看對著你的WP8說話...

Windows Phone 8 開始除了聽得懂中文之外,你也可以透過語音相關API讓你的App也聽懂語音喔...

除了我在影片說的打開App功能之外,當然可以撥電話或是查資料,而且重要的是...這些功能在模擬器中也支援啦...快來玩玩看吧...

2012年10月30日 星期二

使用Windows Azure WebSite幫客戶迅速搭建網站

        最近把公司和客戶的部分網站移到Azure Web Site,坦白說,雖然目前Azure WebSite還是Preview(並非正式版),但整個來說它實在是一個挺方便(而且很有競爭力)的產品,很容易一不小心就幹掉台灣很多ISP/Hosting和主機代管廠商...

        目前在測試階段的Azure WebSites除了提供10個免費的網站(免費的唯一的小遺憾是網址被鎖死在*.azurewebsites.net之內),還每天提供免費的165MB的下載流量(上傳免費),對於一些小網站(或給客戶的prototype)來說,其實是綽綽有餘...
 
 
前面提到,只要你申請試用,Azure就提供10個免費的網站空間讓你玩,免費有哪些好康?請參考Azure詳細的費用說明 http://www.windowsazure.com/zh-tw/pricing/details/
 
 
        當然,如果你要搭建公司自己的網站,或幫客戶把網站上線,自然不能用 azurewebsites.net 這個網址(除非客戶不介意),這時候你會需要把原本位於AzureWebSites.Net的網站,轉成自己申請的DomainName,過程很簡單,只需要從Azure的後臺把原本的Free模式改為Shared上的等級即可:
 
(這個動作會影響價格,一旦設定之後就不是免費了,細節請參考這份文件)
 
        儲存上述設定之後,你可以點選Configure,會注意到最底下有一個Manage Domains按鈕,這時候,請大力點下去:

接著可以在出現的底下畫面設定你的站台要對應的DomainName:

 
當然,你要設定的DomainName必須先指向該IP位置,不管你用A Reocords進行指向或是用C Name進行指向...

        如果你用A Reocord,就把你申請的網址(ex. www.xxx.com)指到上圖中給你的IP位置,如果你用C Name,就把你申請的網址(ex. www.xxx.com)指到預設的xxxx.AzureWebSites.Net即可,很簡單好用(如果你不是自己管理DNS或DomainName,上述動作得透過你申請或代管domain name的廠商來進行)

DNS指向大概需要半個工作天,然後你就可以看到你的網站正式上線了,好快。對了,透過Azure web site開一個站台之後,怎麼把自己寫的ASP.NET網站佈署上去啊? 可以參考這段影片

btw, Azure Web Site開一個網站也好快,大概30-90秒就可以上線,好讚!

2012年10月25日 星期四

[研討會] Windows Azure Workshop

2012/10/25
在資策會舉辦的 Windows Azure Workshop

教材: Windows Azure Training Kit - October 2012
http://www.microsoft.com/en-us/download/details.aspx?id=8396

投影片:下載

部分上課影片:
video 01

==========================================
其他Windows Azure相關教學影片
==========================================
Windows Azure示範教學:建立基本WebRole
這段影片從最基本開始,介紹如何建立一個Windows Azure WebRole,並且撰寫一個簡單的ASP.NET WebForm應用程式佈署到雲端。同時,也介紹RoleSetting的概念...
 
 
Windows Azure示範教學:Windows Azure Strage - Blob的使用
在這段影片當中我們介紹Azure Storage Blob的基本概念,以及如何透過.NET C#程式碼來建立Contannner與存取Blob


 
 
Windows Azure示範教學:Windows Azure Strage - Table的使用
在這段影片當中我們介紹Azure Storage Table的基本概念,以及如何透過.NET C#程式碼來建立Contannner與存取Table
 
 
Windows Azure示範教學:WP7直接存取blob
一般來說,我們都是透過後端(伺服器端)的程式碼來存取blob,但偶而也會有需要從行動裝置(手機)上直接存取blob的例子,這個範例就是介紹如何透過WAT中的類別程式庫,從WP7直接存取blob
 
 
Windows Azure示範教學:建立基本WorkerRole WP7 Push Notification訊息發送
這段影片以一個WP7 Push Notification為例,介紹如何建立並使用Windows Azure WorkerRole來進行一個Scheduled Job

2012年9月21日 星期五

[研討會]TechDays 2012 相關內容

三天的活動在各式各樣的驚奇中落幕了, 我負責的兩個場次投影片如下, 請參考。

WCL308-打造跨Windows 8與Windows Phone應用[slide]

WPH202-Windows Phone 開發應用實戰[slide]

video:如何透過WP7存取Mobile Services(BETA)


其他影片和範例的部分, 稍帶我的NB完成修復, 就會陸續地放上來... :)

Tech Day 2012 點滴在心頭...

每年TechDay總是會發生令人驚奇的事件...今年也不例外。

從前年開始說,那年的TechDay當天,我興沖沖地到講師報到處報到,結果發現,已經有人用我的名字報到過了,領了我的講師服和餐券。好巧不巧,那一年我的主題是講security...Ruddy還說我是為了幫自己的場子暖場, 花錢買通派人來充當駭客, 突顯安全的重要性(報告Ruddy老師, 我真的沒有...>_<)

去年,開開心心的去 TechDay會場,結果在高速公路上車被追撞 >_<

今年, 終於在講演前一天晚上11點15分, 經過三十八次的修改和整理之後, 把我所負責的兩個場次final的slides和範例做最後的確認, 我心想, 最後一次備份在當天早上四點, 待會得要再重新備份一下, 先重開一下機吧(我大概一兩個禮拜沒重開機了), 當下, 關機, 重開....伸手去拿茶杯...水杯剛到口邊...我傻眼了!!!!

重開之後抓不到硬碟...硬碟不見了!!!

我知道SSD HD不見所代表的意義,幾乎是沒有救回的可能,但我不相信(我不是不相信SSD會死掉,我是不相信怎麼會這麼巧在現在、研討會的前一個晚上死掉???),所以我試著重開幾次,無效,當下,我用發抖的雙手(真的在發抖)以手機(好在手機還可以上網)留下了訊息給還在線上的Eric與Herman, 那時候moli已經睡了.,..Jeffray則顯示為在線上....

後來聽說Eric收到的是:
Herman收到的是









當時, 我又重開了一次機器...真的沒法重開, 這次死定了>_<

我手抖得更嚴重了...開始有點恍惚...想著人生的價值和意義, 以及生命的終極方向這類平常腦袋不會出現的議題....接著, 再傳訊息給Jeffray, 因此聽說後來Jeffray收到的訊息是...
 
可顯見當時我的精神狀態似乎已經有些不穩定, 這時候, 我只好跪在沙發旁向上帝禱告, 冷靜下來, 這時候FB上的Eric與Herman有了回應...Herman還在公司conf call, 我立刻情商借了一台Lenovo T400, 當下飆TAXI(我已經不敢開車了, 我怕會出人命)到松仁路...沒想到他們同事們(Ching, Carol)都還在公司奮戰, 我研討會前一晚SSD HD死掉的事情也傳遍了大街小巷...
 
借到了NB, Jeffray也甦醒了過來, 有了回應, 當下非常夠朋友的讓我從遠端連過去以VM方式安裝環境, 特別是還一路陪我安裝到了晚上快三點(WAT套件非常難裝),後來在我幾經勸說之下,Jeffray不捨的先去睡了),我就陪著Jeffray的遠端VM以及向Herman借來的NB在深夜中奮戰...我知道, 今晚不可能睡了...
 
在天快亮的時候, 我的機器已經裝完, 問題其實不在slides和範例, 因為到昨天四點前, 我都有備份, 所以缺的只是幾個小時最後的修改進度(你知道, 大部分講師不到最後一刻, 總是還會修修改改, 求個完美) 但麻煩的是環境, 因為我有兩堂課, 分別要用VS2010和VS2012,某些套件是有衝突的, 上patch, 上hotfix 都需要時間, 且這次我不敢用SSD HD了, 而且這次沒有重來的機會, 所以得要小心再小心, 另一邊也安裝Jeffray提供的VM做為後備方案...一直到早上八點左右, 我在窗外開始忙碌的上班人群聲中, 知道這一天終於開始了...
 
九點前後, 我搭車到了TICC, 我是10點的場子, 拖著緊張興奮的心情和疲倦的身體, 我上了講台, 跟學員問安...看著台下學員們的眼神, 我心想, 這一場, 還真是不容易啊~
 
---------------------------------------------------------------------------------------------------
以上紀錄, 特別謝謝在前一晚陪我裝機器到凌晨的Jeffray, 以及四處奔波幫我情商借NB的Herman和Eric, 還有當天聽到我的悲慘經驗前來問候和打氣的眾家兄弟姊妹們, 有你們的支持, 讓今年的插曲最終還是有個美好的結局...也謝謝陪了我一夜沒睡的老婆。
 
或許, TechDay帶給我的, 不只是一場研討會的準備和技術的成長與學習, 更重要的是這群在資訊技術領域, 一起奮戰的好朋友們, 技術很有趣, 但你們才是人生當中最值得珍藏的回憶和點滴, 或許, 這才是上帝要我在這個過程中學習到的經驗和功課, 再一次, 謝謝大家的幫忙和鼓勵。
 

2012年8月19日 星期日

如何刪除TFS(Team Foundation Service)雲端服務中不要的專案???

前幾天說了,最近在試著讓外包人員用免費的TFS雲端服務,來管理原始程式碼。

最近玩著玩著,不亦樂乎,就開了很多的專案(有朋友問說有沒有個數限制? 我還沒測到,目前沒碰到)。然而真的要讓外包人員簽入來使用時,發現這個帳號底下有太多測試用的專案(有點醜),想要一清而後快...但是...怎麼刪除呢??? 在Portal上沒有刪除的功能啦 >_<...

不急,想到那天聽到某場研討會的講師說,SQL Server其實有很多功能,但不少功能因為UI沒有看到,所以User就完全忘了有這個功能,但其實並不代表真的沒有!!!

想想也真有道理,很多UI沒有的功能,其實只是沒法從操作介面上執行,並非真的完全沒有!我們身為熟齡開發人員,總是能夠(也很懷念在文字模式)下下指令來幹些UI做不到的事情...

當下回憶一下命令列指令,試試看雲端服務是否也接受。一試之下果然可以,動作如下:
1.首先,如果你沒有VS2012,至少下載一下Express版本(因為很抱歉,刪除專案這種上流的動作VS2010不支援)。
2.接著,立刻開啟VS2012,並且用你的MS Account(就是那經典的Live ID, 也就是MSN帳號, 以後請稱他為MS Account)登入Team Explorer(如果不登入,也不是不能刪,但你可能待會會看到沒有權限的錯誤訊息)。
3.登入後,VS2012先放一邊,從Windows功能表開啟Developer Command Prompt,鍵入tfsdeleteproject...格式如下:

C:\Program Files (x86)\Microsoft Visual Studio 11.0>tfsdeleteproject /collection:https://你的帳號.tfspreview.com/DefaultCollection 專案名稱

例如:

C:\Program Files (x86)\Microsoft Visual Studio 11.0>tfsdeleteproject /collection:https://MyTestAccount.tfspreview.com/DefaultCollection TestProject1

接著會出現底下畫面:


如果一切正常,就可以成功地刪除掉不要的專案囉~

btw,我的團隊是用VS2010為主,先前提到過VS2010用這個TFS雲端服務也順暢的很,就是沒有刪除功能,所以我是在另外一台Win8的VS2012中,進行這個刪除的動作。

2012年8月17日 星期五

使用免費的雲端TFS(Team Foundation Service)程式碼管理服務

最近幾年開發方法論大行其道,ALM也常常在各種社群活動或研討會中被提起,也因此,Team Foundation Service的出現大概也不太讓人訝異了。

簡單的說,Team Foundation Service採用雲端運算的技術提供了目前免費的應用程式生命週期管理相關服務,如果你以前用過Team Foundation Server或Source Safe,那現在的Team Foundation Service提供您相同的服務,又讓您不需要自己搭建伺服器,就能夠享有程式碼版本控管、自動建置(Continuous Build)、Unit test管理...等多項團隊開發所需要的程式碼管理功能。

當然,你可以用熟悉的Visual Studio作為開發用戶端,隨時連結到雲端的TFS服務,進行程式碼的簽出與簽入、開發與測試、工作項目管理與分派等動作。

目前VS2012和VS2010都可以作為TFS的用戶端,只是VS2010要連結上雲端的TFS服務,必須是安裝有的KB2581206的VS2010 SP1,請留意這個KB目前只能夠過connect來下載。

安裝完成之後,前往Team Foundation Service以Live ID登入後建立一個帳號,就可以享有TFS的雲端服務了:



請留意這個帳號也就是將來您的網址:

而且一個LiveID只能建立一個帳號,所以還是取一個比較正式一點的名稱會好一點。

在建立好帳號之後,就可以在該帳號底下建立新的開發專案:


目前TFS當然支援Scrum等時髦的開發方法,可以自動產出管理團隊所需要的各種報表,即便你沒有立即在專案團隊中導入這類的開發方法,單單拿TFS來做Source Code的管理也挺好用的:

專案建立完成之後,就可以從VS2010/VS2012的Team Explorer連結到這個位於雲端的TFS,操作的動作可以參考這裡

https://tfspreview.com/網站當中有詳細的step by step使用教學,即便過去沒有用過Team Foundation Server,直接使用這個新的TFS服務也不會覺得太彆扭。

目前這個服務還挺適合與遠端合作的小型開發團隊,對於台灣為數不少的小型App或專案開發團隊來說,不啻為一個方便好用的免費服務。

未來若有機會再多跟大家介紹一些TFS服務的功能。


2012年7月10日 星期二

那個...舊版的Windows Azure Portal在哪裡???


前陣子,Windows Azure推出了很多新功能,這部分先前已經在FaceBook上和大家分享過了,而Windows Azure推出新功能的同時,微軟也順手修改了Windows Azure後端管理的Portal,把原本用Silverlight做的Portal改成了用HTML/HTML5開發...


當然,我對HTML5是毫無排斥的,儘管截至目前為止,我還不認為現階段的HTML5能"立即"取代Silvelright在LOB上的應用(況且其實新版的Windows Azure Portal原來也不全是HTML5寫的,而是HTML,這不是我說的,找兇手請按這裡),但人家這麼熱心把Portal改成HTML寫的(當然是想要跨平台),我們當然也要跟著試用看看,但用了一陣子,我還是發現,我個人目前比較喜歡過去Silverlight的版本的Windows Azure Portal,原因很多,諸如:


1.有不少功能我依舊沒能在新版Portal找到(可能是我比較眼拙,沒看到)
2.就同時管理站台和後端資料庫來說,我還是覺得Silverlight版本目前穩定些
3.新的一些功能我還沒用上...
4.新版Portal似乎比較快,但比了一下沒快多少
5.有些舊版的設計和操作動線,我覺得比較好,新版的可能礙於HTML原因,沒法做到
6...

因為上述原因,所以我開始想找回舊版的Windows Azure Portal,但居然...找不到>_<

一旦你切到新版Portal之後,以後從後台管理網址登入它就自動幫我轉到新Portal了,舊的就不見了,輸入舊版Portal的網址也沒用 (自動轉到新的)>_<

但我不死心,這不太可能,所以找了一下,猜猜看在底下哪個畫面中:



答案是,頭頂上正中間那個Preview...我壓根沒想到Preview這個字和前一個版本Portal有何干係...
(藏那麼隱密,是不想讓我發現是吧????)


裡面有個Previous Portal,就能把我帶回原本熟悉的Silverlight操作介面囉。

後記:
這邊,我得要說,對於資訊從業人員來說,是沒有拒絕新技術的空間的,有新的可能性、新的技術、新的玩具,本持著好奇心我們當然也一定要給它試試看,但說正格的,資訊科技是應用科學,因此最終還是得面對應用層面的現實問題,我可以明白也理解微軟為了讓更多的User可以在iPad/iPhone上面操作Window Azure Portal,因此努力的生出這個HTML版本的Windows Azure Portal,但當我們從企業應用的角度來看,目前Silverlight在開發時程(較短)、以及使用者體驗(較佳)、總體成開發本(較低)等等多個面向依舊是勝過HTML/HTML5不少的,但我也知道,微軟沒能把Silverlight推到Android/iOS平台上,限制了Silverlight未來的發展空間。(這是現實,毋須感慨,只能說遺憾)

因此我們(我和開發團隊),並不會拒絕以HTML(ASP.NET)或HTML5來開發產品的新功能,但手上現有的專案或產品,只要考量到開發成本、資源、與時程,目前我們更不可能放棄Silverlight這個方便好用且優秀的開發技術。畢竟對我們來說,以同樣的企業應用程式(LOB)需求來比較,目前Silverlight的開發成本是較低於HTML/HTML5,而效果則優於HTML5不少(不過這部分可能有些個人主觀因素在...),因此在面對企業內部使用來說(可以控制的用戶端環境),我們依舊建議Silverlight是目前較好的選擇,而HTML/HTML5則可以考慮在對外的網站/行動裝置與平板(無法控制的用戶端環境)所需要的功能。

不衝突,也不需要猶豫...而伺服器端呢? 當然是...Windows Azure囉... :)

(你說目前是這樣,那以後呢? 那未來呢? ...)
(都說2012世界末日了,你沒看最近這幾天台北一天比一天熱...活像是世界末日要來的樣子...以後? 以後再說吧...)

2012年7月6日 星期五

專業的價值...


每次,我去修車的時候...
師傅說:先生你這車開那麼久了,這樣壞很正常拉,你要不要換台新的? 你不知道零件會老化嗎???
我:是是是...那,這零件換掉要多少錢???
師傅:喔...便宜啦,大概就XX萬就可以了...

每次,我去客戶那邊...
我說:大哥,這軟體我們用那麼多年了,總是會需要調整維護一下的...
客戶:是你們一開始沒有設計好吧?
我說:不是啦,技術總是會更新的,而且現在有一些新的需求...恩,大概,就收你XX萬就好了...
客戶:什麼? 你們當初沒設計好的東西,還想要加收錢???
-------------------------------------------------------------------------
 
我相信上面這樣的情況你一定和我一樣常碰到,我不知道有多少次,被修車廠唬的一愣一愣的,但我總是心甘情願地掏錢出來(好吧,我有點心不甘情不願,但我沒得選擇)。
 
有一次,我的動力方向盤打起來卡卡的,好像快不能正常轉向了,所以我立刻把車開到保養廠,師傅熱情的出來迎接我,問我車哪裡有問題,我描述狀況,接著師傅就把車開走了。剛好這時候我接到一通電話,我在講電話的同時,師傅把車弄好了(不到五分鐘),跟我說,這個動力方向盤的油沒了,要補充,打折後收我一千多塊,我趕緊謝謝他。
 
離廠前,師傅把剩下的動力方向盤油給我(很有良心),說:這是剩下的。我還沒反應過來,他就說:老闆,慢走,開車小心,注意安全。(好貼心的師傅)
 
我看了一下,那罐動力方向盤油只加了1/5,剩下4/5我要怎麼辦?放後車廂? 等他漏了再加? 我不知道!!! 他為何不乾脆免費幫我加一下呢? 像這樣類似的例子我碰過非常非常多(因為我的車老了,很多問題)
 
也有很多次,我明顯發現修車廠的人在唬爛我,但我換過很多家、原廠、副廠、出去玩的時候在風景區的修車廠(這更狠,擺明了就是要坑你,他清楚知道只會跟你做一次生意),幾乎都一樣,我常常有被唬弄的感覺。我想要跟著車看他怎麼修,修車廠的師傅總是說:『老闆,您可以到休息室等一下,不會那麼快喔!!!』
 
對照先前我在軟體社群看到有位朋友寫的一篇文章,提到了軟體工程師的無奈和心酸,我其實很想說,軟體工程師大部分真的都太古意了!!!!
 
從商人的角度來看,每一次免費的服務,其實都將會是一個誘餌(你要正面一點想,就是建立關係,你要負面一點想,就是在服務裡面埋下一些未來客戶會被迫花錢的種子),所有廠商提供的免費服務,將來都是要賺回來了,不然,公司怎麼經營下去??? 你沒發現,印表機很便宜,但墨水匣往往很貴;很多電子產品,總是很巧的在保固後發生問題;軟體試用免費、社群網站免費、手機APP免費...這世界怎麼有那麼多軟體免費???
 
沒錯,免費的往往日後最貴。
 
但對照台灣軟體產業的狀況,由於一些我們過去常談的問題(規模小、客戶少...等等),導致軟體專業人士的專業並不容易被重視,的確,比起水電師傅或是修車師傅,大部分的商業軟體工程師,薪水是比較低的,而且從上到下從頭到尾,軟體工程師的薪資與價值,比起亞太地區其他鄰近國家,在台灣都是徹徹底底地被低估,但很有趣的是,即便是這樣,很多專案公司還是不賺錢,還是很難經營,這表示,其中肯定某個環節有問題(但我們今天不談這部分)。
 
我想談的是,身為工程師的你,該怎麼辦? 我們是否該努力去讓客戶理解,軟體跟汽車的差別??? 為何軟體價格應該比較高? (但在台灣實際上常常比較低) 為何程式設計師應該比較貴(雖然事實上並非如此)
 
其實身為工程師的你也別怨嘆,因為真實的狀況是,客戶往往不用你的軟體一樣可以過日子(因為取代性高),但一天沒車就覺得很麻煩(而且租車很貴),所有東西依舊在經濟原則之下,如果你的產品具有無可替代的地位,你可以滿足客戶迫切的需求,你在市場上就更有價值。但我們的軟體和專案往往不行,客戶又少,所以落得軟體廠商彼此互相砍價搶專案的境地...
 
我們能否讓客戶尊重開發人員的價值,並且提高軟體的價格? 這麼多年下來,我得說,在台灣這件事情目前似乎還不太容易發生。與其要往這個方向努力,不如換個角度想這件事情...
 
前面說過,所有產品和服務,最終依舊會遵循著經濟理論,你提供的服務愈無可取代,你愈能滿足客戶真正的需求,你就愈有具有決定自身價格(不一定是價值)的能力。因此我想給年輕人一些建議,目前在台灣的軟體服務業,越小的公司(或團隊),被迫提供免費服務的可能性就越高,如果你沒有辦法拒絕提供免費(或便宜)的服務(據我所知,大多數台灣的軟體公司為了生存,都沒辦法拒絕),那你就更要開始換一個角度去處理這件事情。
 
我建議你把每一個免費的服務,看成一個契機(正面一點思考),或是一個誘餌(如果你想要負面一點想的話也行),你必須在免費服務當中,埋下一些後面可以把服務的成本賺回來的可能性。(可能是和客戶建立關係、可能是更多的經營讓客戶更信任你、也可能是...)
 
或許你會覺得,這怎麼會是軟體工程師要去做的事情? 沒錯,它不是,但由於在台灣我們大部分都不在軟體公司,而在軟體服務業,而且你必須接受,一個案子成交與否,技術往往並非其中最重要的關鍵。但工程師們在個性上確實會花比較多的時間經營技術專業(所以我不需要提醒你這部分),但較少時間經營客戶或人脈,或....其他領域的專業(所以我要特別強調這部分)。
 
知名作家王文華曾寫道: 幸福是人權,有些人是與生俱來的,有些人卻需要流血爭取!
我得告訴你,在台灣,軟體開發人員的專業價值(或價格)和尊重也是這樣,你往往必須很用力,才能爭取回你應得的價值。

Don't be afraid, Let's FIGHT!!!


2012年6月28日 星期四

Metro Style App當中的Toast Notification訊息傳遞

Toast Notification是從WP7開始就有的新玩意兒,比起WP7,Metro Style App要送出Toast Notification比過去要來的簡單多了,而且有更多的樣板可以使用,在這段影片當中,我們介紹如何透過方便好用的NotificationsExtensions來送出Toast notification...


2012年6月26日 星期二

Metro Style App當中的資料儲存機制 - ApplicationData

ApplicationData是WinRT當中新的資料儲存機制,類似過去我們在Silverlight與WP7當中的IsolatedStorage,但由於同時又支援了Roaming, Temporary, 因此功能更為強大,在這段影片當中,我們就來看看WinRT當中的ApplicationData機制該如何使用...

2012年6月25日 星期一

Metro Style App與.NET 4.5中的非同步程式設計概念

非同步,是最近這幾年很重要的程式設計與開發概念。

過去,我們在寫程式的時候,總是從上到下一行一行執行,但隨著CPU運算能力越來越強大,且展示層的User Experience要求越來越高,用戶不容許今天我們的程式碼在跑長時間動作(例如開啟一個很大的檔案、或是讀取遠端資料庫或網路上的資料)時,畫面停止回應。

因此,最近這幾年程式設計都轉變成透過非同步的方式來設計,例如底下這樣的Silverlight程式碼:

在DownloadStringAsync的非同步Method呼叫下,返回值並不會立刻取得,而是在相對應的Completed事件當中取得,但這樣導致做一件工作需要拆成兩三段來寫,如果在非同步的呼叫之後,又要再次呼叫非同步方法,就會變成底下這樣:

這導致維護與程式碼閱讀的困難,更讓例外(Exception)處理變得很礙手礙腳。因此,在.NET 4.5和Windows的Metro Style App當中,開始有了新的非同步程式設計方式...

相關的說明與介紹,請參考底下影片:


2012年6月22日 星期五

從Silverlight到Metro的心路歷程

趁有空,用文字整理一下沒能完整在研討會上分享的心情。

從Windows 8的Metro Style Apps開始有消息時,我們就在官方的Slides上,看到了針對Metro Style Apps的開發,寫明了是可以採用多種技術,包含HTML+JavaScript, 包含XAML+C++, 包含了XAML+C#(VB)...

那時候可能很多人覺得疑惑,咦? XAML+C#,那不就是Silverlight(或WPF)嗎? 那為何不乾脆寫Silverlight呢?

我們知道,早在.NET 3.0開始(2006年),WPF就是用XAML來描繪UI,而Silverlight的出現比WPF晚上了幾個月(2007年),沒想到在實務(實際使用)上,Silverlight後來比WPF更加的廣泛,同時也成為微軟在RIA上對抗Flash/Flex的利器。

(請回憶一下,在這個時間點, iPhone 才剛剛出現, iPad 還不知道在哪裡咧...)

後來沒多久,Windows Phone被迫出現了(2010年),我們都知道,Phone/Pad成功的關鍵,與App的多寡有著非常大的關係,因此從現在回頭看,在2010那個時間點,當時要讓App快速出現,最好的方式就是選擇一個可以快速上手,並且已經有著一定數量開發人員的開發技術,這個技術又要支援多媒體效果,又要有現成的開發工具,還能夠很快速地讓Runtime可以Porting到當時Windows Phone所採用的Windows CE上面,在當時時間如此急迫的狀況下,幾乎沒有任何其他的選擇和可能性,因此Silverlight雀屏中選,成為WP7.0和WP7.5的主要開發技術。

好,知道歷史背景之後,我們回頭談XAML+C#, 前面說到, 因為當時Silverlight幾乎可以代表XAML + C#(VB)這一掛的開發技術,所以在我們看到Win8 Metro Style App所採用的主要開發技術是XAML+C#(VB)之後,很自然的覺得,Metro的開發技術可以用XAML+C#,那到底是不是說,Silverlight可以用在Metro Style Apps開發上呢?

現在回頭看,答案揭曉了,答案可以說是也可以說不是。但原因原來如此地簡單,因為:
     Silverlight = XAML+C#(VB)

     XAML+C#(VB) 卻不等於(而是大於、是包含) Silverlight

請注意,在今天這個時間點回頭來看,我們很容易理解,XAML+C#(VB)這樣的技術組合,至少有下面這幾種方式:

1.WPF            =    XAML     + C#(VB)  +     Full .NET  Class Library
2.Silverlight     =    XAML     + C#(VB)  +     .NET  Class Library Subset
3.Metro           =    XAML     + C#(VB)  +     WinRT

別忘了,XAML是描述UI的技術,C#(VB)是Programming Language,但光這兩個還不夠,第三個組合(Runtime的Class Library Framework)也是一個重點,XAML只管UI(包含Binding、Animation...etc)而Programming Language就只是寫程式用的語法,早在.NET 3.0從WPF開始我們就在概念上把這兩種東西分開了,這樣的概念就好比是HTML搭配javaScript、或Asp.net的Code Behind概念一般,目的是讓邏輯程式碼與描繪UI的程式碼分離,好處顯而易見,就是降低相依性,讓開發團隊中的UX設計師與程式設計師可以分工,又不會彼此干擾。(這是近代展示層應用程式設計的一大重點)

所以,有了這樣的概念之後,其實我們如果從更宏觀的角度來看Metro/WPF/Silverlight,這幾種開發技術的Programming Model幾乎大同小異,XAML與Programming Language根本上都差不多,唯一的差別是Runtime的Class Library。

所以我在研討會上再次說了『流淚撒種的,必歡呼收割』,過去我們在XAML(Silverlight/WPF)上花的心思,事實上一點都沒有白費。

過去我們(公司、我個人、和我的學生、夥伴們)花了不少時間在XAML(Silverlight)上,今天不管在Silvelight(應用在Internet/Intranet、Windows Phone),在WPF(應用在Desktop),在Metro(應用在Windows 8、Windows Phone),都可以得心應手,你過去熟悉的開發技術(XAML/C#(VB))其實並沒有改變,你用這套開發技術在微軟的世界中,可以橫跨 Web / Desktop / Phone / Pad 這幾種不同的平台(當然,我指的是在微軟的設備上),也因為如此,很多人擔心的Silverlight是否還會活著的問題,其實或許並不存在。

我們剛才說了,Silverlight是XAML+Programming Language(C#/VB)+Run Time Class Libraries的集合, 如果你可以更宏觀的看,如今的Metro Style App開發技術,與Silverlight不僅僅是系出同門,更可以說是攣生兄弟。

那這樣是否代表著兩者完全相同? 當然也不是,即便是攣生兄弟,在不同的環境下長大,也需要面對不同的生活環境, Metro / Silverlight / WPF 之間的差異大致上就是這樣,因為這三種同父同母、系出同門的開發技術,在應用上Metro是要面對平板、智慧型手機,Silverlight是要面對Web環境、WPF是要面對Desktop,自然會衍生出不同的個性。(也因此,我會在後面陸續慢慢分享一些Silverlight與Metro Style App開發之間的差異與相同之處,你會慢慢發現,其實你累積下來的經驗比你想像的還有用)

在分工比較細的公司或專案團隊,我們大概不會要求開發人員Metro/Silverlight/WPF三種都會,但很抱歉,你在台灣,你是全能Developer,而我們過去也都受過這種全能開發人員的養成教育,所以我得說如果你是.NET Developer,那Metro/Silverlight/WPF三種通吃針對你來說應該也是很自然的狀況才對。

更嚴格地說起來,Metro/Silverlight/WPF三種開發技術從某個角度來說,根本就是一種(而不該當成三種來看)。

這也是我在研討會上,特別提醒開發人員,不要只看到改變,要多看看你留下來的經驗,你才會發現,其實過去的經驗很有價值。同時,在這個多變的時代,你擁有或掌握的學習能力與經驗,價值遠勝於你擁有或掌握的技術。技術是會變的,但你的學習能力與經驗,則是可以累積並且重用的。

至此,我可以說,Silverlight有沒有死去,開始不是一個問題,(如果你堅持要討論,我會說我覺得還早),不僅如此,熟悉XAML( WPF/Silverlight )的開發人員,比起傳統的開發人員來說,有著更廣泛的發展空間,對於未來的專業領域生涯規劃,也將有著相當大的可能性。

我在討論這件事情的時候有沒有立場? 我要說:『或許有』! 公不公道? 『我想可能有些人覺得不一定!』 但至於這個判斷正不正確? 就由讀者來決定囉 :)

端午佳節將至,建議各位放鬆心情,吃飽粽子之後,我們再回來繼續衝刺。
~祝大家 佳節愉快~

2012年6月20日 星期三

[研討會] Microsoft Developer day 2012 - 從C# Developer的角度看MetroApp的開發

颱風天,很謝謝大家特別來參加今天Microsoft Developer Day 2012的議程,我的場次投影片位於:http://arock.blob.core.windows.net/msdevday2012/DevDayCS2Metro-public.7z


範例和影片會陸續放上來,也請同步關於底下FB社團中的訊息:
Win8 Metro App Asia Developers

在這個展示當中,示範了如何建立一個簡單的Metro Style App, 如何透過Metro上的UserInformation類別抓取用戶資訊,顯示照片與名稱, 以及如何在頁面中進行切換...等基本的Metro功能,讓C#開發人員輕鬆的進入Windows 8 Metro Style App 設計的世界...


分享,是現在行動裝置上非常有趣的設計。過去在App與App之間要分享資料似乎有些麻煩,然而現在在Windows 8 Metro Style App當中,我們可以輕鬆的利用OS本身提供的Share Contract,讓兩個App之間迅速便利的分享資料,更重要的是,這樣的功能很好設計...


過去在Silveright或WP7當中,想要寫程式抓取專案中的影片或檔案,還需要費點功夫, 且XAML與C#程式碼當中的寫法又有點不同,現在Metro Style App, 可以讓我們直接用ms-appx:///就可以存取專案中的檔案囉...



FilePicker有分為Open或Save, 和過去的FileDialog很像,但不同的是,在Metro當中,可以直接透過App與App之間的合作,直接讓我們寫程式透過FilePicker存取用戶的Skyd­rive, 也就是說, 他整合了本地端與雲端的檔案存取系統, 在現在無所不雲的時代, 有其跨時代的意義與價值...


可以用來替代WP7中的Panorama或Pivot, 適合觸控也是和滑鼠操作, 是Metro中非常典型的應用。(影片中有一段錄音口誤,將Metro Style App誤說成WP7, 請容我有空再改吧...)
  

2012年6月8日 星期五

如何啟動MSDN Ultimate訂閱免費的Windows Azure雲端服務

隨著Windows Azure開始正式在台灣開放,我們現在可以用台灣了Live ID申請囉,跟著我來做申請步驟吧。

如果你的Windows Live ID帳號有訂閱MSDN(例如BizSpark, MVP, 公司買的, 路上撿到的...etc),那你用這個帳號登入之後,請進入MSDN訂閱網站,會看到底下畫面:

請點選其中的『啟用Windows Azure』,接著出現底下畫面:


立刻按下鈕,進入下一步。

可能是因為我在申請該Live ID的時候,已經輸入過電話了(如果要進行電話驗證,請輸入你的手機,選擇簡訊驗證,會收到簡訊代碼,填入後即可),所以跳過了第二步驟的電話驗證,直接進入第三步驟的信用卡驗證:


按下『下一步』,就完成了,會被直接導入到Azure站台:

您可以選擇『帳戶』:

會看到你的Azure訂閱帳戶,MSDN免費贈送的帳號有相當多的時數(1500hr/m),足夠你建立一個具有Load Balance的中小型網站了。如果你怕不小心超過時數信用卡會被扣款,請不要開啟消費限制。

要開始上雲端了嗎,你只需要點選『管理』:

就可以進入後端管理站台了(新版Portal也開放囉):


Enjoy it...

2012年5月25日 星期五

Microsoft Innovation Day–微軟夥伴創新應用開發講座-台北場錄影

4月份我們在北中南主辦的『Microsoft Innovation Day–微軟夥伴創新應用開發講座』巡迴研討會的實況錄影,我這部分主要談的是行動裝置(WP7)與雲端運算(Windows Azure)的整合技術,有興趣的朋友可以check底下兩個連結。

Agenda,
1. 從眾說紛『雲』的行動裝置趨勢談起…
2. 雲與端如何整合?
3. Windows Azure & SQL Azure的功能與介紹
4. 如何應用Windows Azure Toolkit for Windows Phone輕鬆建構您的行動裝置雲端運算需求
5. 實務應用範例展示、介紹與說明

(上)
http://www.microsoft.com/zh-tw/showcase/details.aspx?uuid=1888c112-c2f2-459d-adaf-ee436356f672
(下)
http://www.microsoft.com/zh-tw/showcase/details.aspx?uuid=ba9ef525-004f-4b5d-a957-46fbd15204a0

2012年5月11日 星期五

使用remote debug在小筆電或平板上偵錯metro style app

以前我壓根沒想過在Visual Studio 寫Code時會需要Remote Debug,而且有時候還覺得remote debug是沒啥道理的產物。這樣過了好多年,直到我碰到了Metro Style App...

昨天下午到7AB聽了Raymond和Eric對Metro Style的精彩解說,想說總是在VM裡面寫Metro App真的有點乃幽,每次package到小平板去run也挺搞討厭的,索性把Remote Debug裝起來吧...

首先,得上網找一下『Remote Tools for Visual Studio 11 Beta』,下載安裝畫面如下(裝到沒安裝VS11的小平板上):

接著,到Search裡面找到Remote Debug Configuration設定一下:

點選,出現設定畫面:


下一步,允取那些聯入的連線呢? 來吧,都來吧,我無所畏懼:

完成後,別忘開啟monitor,

  小平板準備好囉:

接著回到VM或PC, 開啟VS11專案的屬性頁,可以設定遠端偵錯的相關資訊:

YA, Run這個專案的時候在VS11中選取Remote Machine : 


這樣就可以把Metro Style App從開發環境的VPC直接Run到遠端的小平板上進行偵錯囉:



如此一來,要在真實機器中測試Metro App就更加地方便了。

updated : VS2012 RC的工具下載位置:

2012年4月28日 星期六

讓解析度低於1024x768的小平板(或觸控小筆電)可以運行Windows 8 Metro Apps

Windows 8, 一幅蓄勢待發的姿態。

在最近一兩個月,微軟全省跑透透,辦了多場介紹Windows 8的研討會,也陸續的在網路上大方的提供了Windows 8先前的Developer Preview以及最近的Consumer Preview版本讓大家免費下載。

過去段時間顯然大家已經多多少少安裝在PC/NB的環境上,最典型的大概都是安裝在Virtual Box的虛擬機環境。運作起來的效能當然不會太差(因為Win8需要吃的resource比Win7似乎還要少),不過,由於一整個設計都是親近平板的觸控與手勢操作,所以裝在虛擬機裡面真的有點給他隔靴搔癢好不愉快...

早在Developer Preview一拿到手的時候,我就試著安裝在先前運行Windows 7的ViewPad 10上面試試看,我得說,安裝的真的很順:


在當看到新的Metro Style環境很開心的時候...杯具發生了...ViewPad 10的1024x600解析度,只能運行傳統的桌面模式,Metro App完全不給Run.... (至於其他像是音效卡驅動程式不能用,插耳機可以聽到聲音但平板的喇叭卻沒聲音之類的怪問題,我就更沒興趣管它了...)

隔了好一陣子,就去忙了,直到最近忙完了,才開始回頭重新研究調查一下,發現這幾個月下來,已經有勉強可以用的解決方案了,讓大部分的1024x600的小筆電和平板,可以上win8環境。

解決的方案很簡單,請在安裝好之後,以觸控方式(我是用平板啦)把右邊的charms bar嚕(ㄌㄨ:手指從螢幕的右方邊界處往左滑動)出來,然後點選Search:

出現底下畫面的時候,輸入regedit:


然後點選我們熟悉的regedit程式,執行後,直接搜尋『display1_downscalingsupported』:

找到之後,將原本的值從0改成1:

設定完成之後,重開機。

開機重新進入之後就可以在螢幕解析度設定畫面中,找到1024x768(這是win8支援的最低解析度):


如此一來,就可以把1024x600的小筆電或平板,模擬成1024x768,如此一來就可以運行 Metro Style Apps囉...


試試看你的小筆電,如果可以衝到1366x768以上,或許還可以有Metro Style中的Snap功能喔...

後紀:由於我不確定是否每一台小筆電都可以這樣,所以如果你要砍掉小筆電上的Win7來試試看Win8,建議你先備份一下,會保險一些。但整體來說,Win8的運行效能比Win7要來的順暢很多,如果有觸控螢幕或平板,更值得一試。

2012年4月25日 星期三

其實你才是台灣之光...



看了朋友轉貼的一篇文章,覺得很值得討論討論。

我不太迷球星,幾乎不曾瘋過哪一個藝人,我喜歡張國榮的歌和李宗盛的音樂純粹是因為好聽,我不會傻到相信他們的人生和感情值得效法(一個自殺一個總是外遇),當然也不會相信他們代言的廣告或產品...

我相信自己的判斷力,我對我自己對事物的觀察比較有信心(不需要一個我不認識的人來推薦),我個人覺得藝人只不過是個藝人...這是個中性的價值判斷,沒有太多的褒貶,球星、賈伯斯、Bill Gates都一樣...

資本主義經濟的社會,讓這少數人(藝人、球星、富豪)賺了很多錢,但這是這個不完美的世界賦予他們的『價格』...而不是我所遵循的『價值』...

藝人只不過是個藝人...想清楚,就不會對他們期待太高了...
 
這麼多年來,我總是對人們如此瘋迷這些演藝人員感到不可思議,也覺得這些藝人賺了太多錢了(包含球星、各種娛樂表演事業、以及不事生產靠錢賺錢或炒作某些商品來賺錢的一大票人),他們賺得其實超過他們應得的,漸漸地讓他們被貼上越來越高的價格,連自己都以為自己真的很重要...但隨著價格(票房)愈高,卻愈發迷失了自己存在的價值。
 
連帶的,讓這世界(上的人們)慢慢的把『價格』以為是『價值』。
 
回想這幾年,我們封了多少個台灣之光? (從這邊可以看得出來台灣人對自己有多沒自信)
 
姑且不管把一個國家的價值,建立在少數幾個人身上到底是不是對的(有智慧的)決定,我更希望這個社會上的人回頭認真思考,其實,幾個政治人物(現在幾乎都是政客)、幾個藝人、幾個球星...絕對不可能是台灣之光
 
讓台灣可以在連續幾任政府拼命搞出接近智障等級的政策下,還能夠在這塊小地方撐著不倒的,是你我這一批市井小民,我真的很想大聲地說,我們,才是台灣之光
 
我們每天很認真努力的工作,做得不比鄰近各國來的差,但領的薪水卻是同樣工作內容下最低的,都這樣了,我們都還沒有離開台灣,我覺得我們這群人才是最愛台灣。誰來跟我比? 我們付出的努力不比王建民少、不比馬英九差、我也沒用任何名義汙過政府的錢,還按時繳稅(搞不好我繳的還比王建民多,我不知道他到底要不要繳台灣的稅),試問,誰比我愛台灣? 誰比我更有資格當台灣之光???
 
我真的不想再聽到媒體亂封台灣之光了,趁我還願意留在這裡打拼,台灣的媒體、政客、和這塊土地上的人們啊,請認真好好想想...其實,每天早上搭公車、騎機車、坐捷運上班,認份工作的這群人,我們,才是正港的台灣之光。

我們這群人的價值遠勝過藝人和政客。

2012年4月23日 星期一

[Azure 其實並不難]Windows Azure WebRole 開發,與ConfigurationSettings的使用

在接續著前一篇我們討論雲端運算的概念以及定義之後,我們接著來看微軟提供了那些雲端運算相關的服務?

我們知道NIST對雲端的定義很清楚,除了前面介紹過的五個要素(Essential Characteristics)之外,也定義了雲端運算的三個典型服務型態(Service Models)分別是:
  1. IaaS:Cloud Infrastructure as a Service
  2. PaaS:Cloud Platform as a Service
  3. SaaS:Cloud Software as a Service
這三種服務型態分別以基礎建設(Infrastructure)、平台(Platform)、應用軟體(Software)為產品來提供服務。例如,微軟提供Windows Azure這樣的一個開發平台(Platform),讓軟體公司(例如我們-光岩資訊)在這個平台上建構出應用程式(Software Application),微軟提供的Windows Azure就是一種PaaS。

反過來說,我們稱微軟的Windows Azure是一個PaaS,是因為微軟的Windows Azure符合前面介紹過的雲端運算五要素(Essential Characteristics),同時以服務(as a Service)的面貌進行銷售,讓客戶(軟體公司)得以在該環境中進行開發,因此Windows Azure是一種PaaS(Cloud Platform as a Service)。

而SaaS呢? 則是符合雲端運算定義的應用軟體服務。例如我們公司(光岩資訊)所開發的EasyCloud產品,搭建在Windows Azure上,透過網際網路,全天候服務我們的客戶。讓客戶只需透過申請即可以租用的方式來使用軟體的各樣功能,並且這套產品也符合雲端運算的五個要素,因此我們(光岩資訊)就是一家提供雲端運算應用軟體的SaaS廠商。(類似的SaaS非常多,像是Google App, Office 365, SalesForce...etc)

在台灣,大概絕大部分的軟體公司,將會逐漸把自己轉型成為SaaS,而微軟提供的服務是PaaS,那IaaS呢? 則是符合雲端運算五要素的基礎建設,講白了就是雲端運算資料中心、雲端運算計算中心、或是雲端機房...等。IssS所提供的服務比較傾向是網路或硬體環境,你也可以這麼說,基本上PaaS是IaaS的客戶,而SaaS會是PaaS的客戶(就如同我們公司的產品建構在微軟的Windows Azure上)。IaaS的難度頗高,需要有雄厚的資金和高檔的網路設備才能實現。

好,我們有了這些概念之後,大概也差不多明白傳統的軟體公司,最可能往SaaS轉型,在雲端世界上建構出各式各樣的應用軟體。要建立符合前述雲端五要素(Five Essential Characteristics)的軟體,最簡單的方式就是透過PaaS(但請注意,反過來說,透過PaaS所建構出的應用軟體並不一定符合SaaS,要看有沒有符合前述雲端五要素),這也是我們接下來要介紹Windows Azure的原因(當然,PaaS的產品還有很多,例如GAE, Amazon的EC2...etc,我們在這邊只討論Windows Azure)。



微軟的Windows Azure提供了相當多的功能,用來讓客戶建立Web Server或AP Server的服務,分別是:
  1. Windows Azure Computer Web Role :在雲端運行的網站(或Web/WCF Services)
  2. Windows Azure Computer Worker Role :在雲端運行的應用(或Routine Jobs)
簡單的說,Web Role可以視為我們在n-tier世界中的Web Server,而Worker Role則很自然地可以理解為AP Server。從這邊你可能也已經發現,一般的虛擬主機、主機代管...等服務絕對不可跟Windows Azure相提並論,兩者之間天差地遠,Windows Azure從最基本具有動態Load Balance機制的多主機網站(單單這個簡單的功能,台灣一般中小型主機代管業者都不容易實現),到超大型的商業應用(全國性的投票、購票、報稅、圖書館...等服務),都可以輕易實現。

一般的網站我們只需要透過Web Role即可實現。
所以,我們先來看怎麼利用ASP.NET建立一個最簡單的WebRole,以及如何將ASP.NET所撰寫的網站佈署到雲端。

操作影片請參考這裡

程式碼的部分則是一個非常非常簡單的ASP.NET Web Site,沒有任何正式的功能,只是為了展示把Web Site佈署到雲端,但重要的是,其中的Role Configuration Settings,是雲端運算與傳統網站最主要的環境差異。我們一般在寫ASP.NET時,環境變數和資料庫連線抓取的是web.config中的內容,但上了雲端之後(前面說過),你是隨時可以從一台主機擴展成十幾二十台的,這時候,不可能去手動維護web.config,那如何一次性地修改環境變數呢? 又或者,我們希望網站(或應用)在傳統的虛擬主機環境上採用基本的環境設定,而上了雲端之後,則用另一種環境設定(這種情況很常見,由於雲端的特性和虛擬主機大不相同所導致),因此知道在程式碼當中如何抓取兩種不同運行情境下的設定就噹當重要了,我們看程式碼:
public static string GetConfigValue(string key)
{
    var value = string.Empty;
    if (RoleEnvironment.IsAvailable)
    {   //抓取Cloud Role ConfigurationSettings
        value = RoleEnvironment.GetConfigurationSettingValue(key);
    }
    else
    {   //抓取Web.Config AppSettings
        value = ConfigurationManager.AppSettings[key];
    }
    //錯誤處理
    if (string.IsNullOrWhiteSpace(value))
    {
        throw new ArgumentException(string.Format("The '{0}' setting is not available.", key), "key");
    }
    //回傳值
    return value;
}

上面小小一段程式碼,闡明了在雲端與傳統網站的最大差別,就WebRole而言,我們在ASP.NET當中可以透過RoleEnvironment抓取到Cloud RoleEnvironment環境變數的設定值,就如同我們透過ConfigurationManager抓取 ASP.NET web.config中的環境變數設定值一般...先知道這個基本概念,後面我們繼續討論其他的重要機制...
(待續...)