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中的環境變數設定值一般...先知道這個基本概念,後面我們繼續討論其他的重要機制...
(待續...)

2012年4月21日 星期六

[Azure 其實並不難] 如何申請Windows Azure帳戶,讓你的應用上雲端

2012年4月中旬,微軟舉辦了北中南巡迴的WP7+雲端研討會,很榮幸受邀擔任講師,在這場研討會當中,我們盡可能地涵蓋了WP7與Windwos Azure(微軟的PaaS雲端服務平台)相關的內容,現場的學員夥伴們相當熱情,不少學員在會後詢問目前要如何申請微軟Azure的免費試用帳號。

其實免費試用的申請相當簡單,可以參考底下這個連結:
https://www.windowsazure.com/zh-tw/pricing/free-trial/

如果您已經是MSDN的訂閱戶,則微軟已經贈送你價值$3700的年度免費Windows Azure:
https://www.windowsazure.com/zh-tw/pricing/member-offers/msdn-benefits/

當然,免費申請試用只是第一步,我們接著要來看看如何將網站或服務佈署到雲端。而開始佈署之前我們得先知道雲端運算到底是什麼,以及它的定義為何。

由於坊間有太多『行銷式』的雲端運算推廣術語,導致很多人以為自己用了VM(虛擬化技術)、甚至只是把東西放上網際網路,就是雲端!!! 當然,這是大錯特錯的!

首先,身為技術人員的我們,必須知道NIST(National Institute of Standards and Technology)對於雲端運算有清楚的定義:

相關的原始文件可以參考這裡,因此雲端運算不是自己說了算。

在這個定義當中,有幾點非常重要,很容易區分你所建構的服務或產品是否符合雲端運算。這幾點講白話文,意思就是:
  1. 你提供的雲端服務是否可以讓客戶彈性擴充或縮減規模,讓客戶(例如售票網站、報稅系統),可以經由控制介面設定或自動在尖峰時間增加伺服器、增加硬碟或記憶體容量,不但不需要修改程式碼,這個增加或減少的動作可以迅速(例如幾分鐘)就完成。在離峰時間也可以立即減少規模,以降低費用。
  2. 進行上述動作時,不需要提供服務的廠商人員介入,客戶完全可以依需要自行調整。
  3. 客戶增減服務規模時,可隨時看到自己使用的數量或金額。
光上面這三點,台灣幾乎沒有多少虛擬主機、專屬主機、主機代管...等廠商是符合這個規格的,更不用說再加上NIST要求提供雲端運算服務的廠商具有可大量自由分配的實體或虛擬資源,例如客戶只要需要,可以隨時擴充出幾T的儲存空間,或是增加十數台伺服器(還內建負載平衡機制),這些技術,都不是一般等級的服務廠商可以提供的。

關於這個部分,讀者可以延伸閱讀底下幾篇文章,有更多更清楚的說明:

OK,在真正了解了雲端運算的定義、意義、與典型的使用情境之後,我們接著來看如何透過微軟的Windows Azure平台,來實現我們的雲端運算服務。

(下一篇...)

2012年4月10日 星期二

Microsoft Innovation Day–微軟夥伴創新應用開發講座


在這場研討會裡面,有很多的Windows Phone,很多的Windows Azure。難得北中南都有辦,有興趣的朋友們記得報名喔...

參考網址:
http://www.microsoft.com/taiwan/events/InnovationDay/?WT.mc_id=MS_hp_hero


2012-4-20 update,
經過一周的奔波,台中、高雄、台北的活動依序順利完成,很謝謝這幾天各位夥伴們熱情的參與,希望大家和我依樣都玩得開心。

這幾天的Slide請參考底下連結(這個位置很特別,是Windwos Azure Storage - blob喔):
http://arock.blob.core.windows.net/pubdocs/20120416-20-public.pptx

我相信有到現場的朋友們,肯定知道現場聽和只看Slide的不同... :)

2012年4月4日 星期三

[隨手筆記]C#字串中的Right方法

改用C#好一段時間了,但是以前寫VB的習慣總是如影隨形的跟著。這沒什麼好或不好,以前說過,這年頭沒有雙語能力是不行的。

只是有時候我就是不很明白,為何VB有些簡單的字串方法C#怎麼也不肯加進來。不過,人家有人家的道理,我們則只能在變通當中找個繞路的方式。

我最近在C#程式碼中寫了十幾次字串的Right方法之後,終於下定決心乾脆改寫成Extension methods,說真的,Extension methods 是個好發明。

既然用了Extension methods,想說這麼常用的Method,網路上肯定有人寫的吧,隨手一找,居然有個蒐集Extension methods的網站,真是有趣。網站上把常用的擴充方法都分門別類整理好,我要的Right當然也有囉。

改寫一下,加到公司的類別庫中:
namespace ExtensionMethods
{
    public static class MyExtensions
    {
        /// 
        /// Returns the last few characters of the string with a length
        /// specified by the given parameter. If the string's length is less than the 
        /// given length the complete string is returned. If length is zero or 
        /// less an empty string is returned
        /// 
        /// the string to process/// Number of characters to return/// 
        public static string Right(this string s, int length)
        {
            length = Math.Max(length, 0);

            if (s.Length > length)
            {
                return s.Substring(s.Length - length, length);
            }
            else
            {
                return s;
            }
        }
    }
}

終於,有可愛的string.Right可以用囉...
以後只需要像底下這樣寫:
using ExtensionMethods;
...
string result;
result = ("abc"+"def").Right(5);
就可以啦...

----------------------------------------
筆記:
1.Extension methods 是個好發明
2.http://www.extensionmethod.net是個好網站
3.以後再也不要重複寫Right Method了...