發表文章

目前顯示的是 2011的文章

走進廚房,才知道食材的好壞...

前幾天應邀到社群舉辦的講座,介紹雲端運算與行動裝置的整合,席間提到了Silverlight技術,不免又有一些開發人員問到這樣的問題:『聽說...微軟對Silvrlight的支持和更新將會如何如何...,這部分開發人員要如何因應』? 面對這類問題,我最近一年少說不只回答了10次,首先,『聽說』這個前提就很是問題,雖然報紙偶而會有猜對的時候,但捕風捉影總是佔了大多數。 另外就是開發人員要如何因應這種事情。 我始終覺得,沒什麼好因應的,開發技術本來就是這樣,特別是展示層開發技術,我在 這篇 文章中曾經說過,展示層技術的持續精進與改變是必然的趨勢。你回頭看,Wii和Kinect都是最近這幾年才發生的事情,但現在已經開始慢慢出現在我們LOB應用的UI裡面了。而觸控技術早就有了,最近五年才出現在手機上,如果回頭看過去20年,從黑底白字的文字模式,到Mac/Windows的圖形介面,到現在的RIA(Rich Internet Appication)開發技術,少說有沒有換過10種開發方式? 請開發人員接受一個事情,就是presentation(展示層)的UI開發技術,是每隔兩三年就會大改一次的,ASP.NET從2002年誕生到現在,共四個版本,也不過八九年,中間還有AJAX技術進來攪局和jQuery的崛起,還有現在的MVC設計模式,這些技術都是持續在精進與改變的,不多人在2005年之前,會預知後面AJAX應用成長的那麼快(中間也跟網際網路頻寬與行動裝置拖不了干係),而現在也不多人能100%論定是否HTML5將變成未來可能的一種趨勢。 如果你比較Flex/Silverlight/HTML5,然後開始聽到iOS對Flex有些疑惑,Silverlight沒法跑在iOS和android上,HTML5又不夠成熟,那怎麼辦? 要投資哪一個? 哪一種技術可以讓你長治久安? 長治久安? 答案當然是沒有! 沒有一種開發技術是可以讓你在這個變動迅速的時代,軟體生命週期爆低的世代,可以長治久安的。沒有! 但你確實可以選擇一個對自己來說投資成本比較低的方案,例如,著眼在跨平台,不同的device對你來說差不多,只是呈現出一個介面,你不會用到Device上的LBS或Camera,大部分的運算在伺服器端,那ASP.NET/JSP/PHP依舊是比較好的選擇。如果,你要建置的是企業內的

通往地獄的路,是由『善意』鋪成的~

圖片
        如果你家裡有電視,大概不難知道最近柿子的新聞很是熱鬧。其實我最近已經被搞得很煩了,所以前幾天在FB上po了一小段文。今天早上又不巧看了 Jamie的一篇文章 ,其中談到了軟體工程師以及台灣的整體軟體產業和資訊市場,所以許多不吐不快的想法,需要整理表達一下。         正打算提筆(其實是敲鍵盤)剛好又看到一篇商周的報導,讓我覺得今天或許是個不錯的時間,我們可以好好討論這個問題。         我想把順序反過來講,商周今天有篇文章『善意的大政府卻鋪出荒誕之路』,是這期週刊的專題報導的總結與社論,文章很長,如果你有興趣 可以自己買來看 ,但文內有三個標題我直接列出來,跟大家分享一下,來看看我們的政府最近幾年(又一次,兩黨都有份)搞出的投資建設如何: 一、花上百億,架288支大風車,1年發電量只夠台灣用1.5天 二、百億拼裝計畫改造彰化大城鄉,總統支票注定落空 三、4大慘業虧損,全民埋單,每人面臨2萬8千元呆帳風險 細節請大家自己看本期商周,這篇文章主要的意旨在提醒大家,對政府不應該有過度的期待,其實這符合經濟學中對自由經濟市場的理論,也就是政府管的越少越好,才能夠讓市場發揮(創造)最大的價值。關於這個論點我不再贅述,我也沒有那麼大本事關注整個台灣所有產業,我在意的還是台灣的軟體產業和軟體服務業的整個市場。 因此,我要講的是這一路以來,我的觀察和看法。 這麼多年以來,政府對很多產業做了很多補助,從過去的石化、裕隆的汽車、早期的電子業、最近的四大慘業(面板、DRAM、LED、太陽能),不管是出於善意或是各種利益考量,總之是花了非常多的錢下去,這些錢當然出自於你我的納稅。有些時候主政者用到了還算不錯的政(事)務官,有腦袋有良心,所以這些政府支持的產業交出了還可以看的成績;但不幸的是這幾十年來沒發生過幾次,反而是,在絕大多數的情況下,政府單位中對於產業其實一點也不熟的官員,本著上面交代的政策就多少做一點的上班族心態,把產業政策搞得一蹋糊塗,最後拍拍屁股政黨輪替或是退休去,領著公務人員的退休金,然而對於過去自己做的決策導致多少人沒有工作或生計困難,不知在午夜夢迴會不會覺得良心不安而輾轉難眠? 最近補貼柿子(還有以前補貼香蕉、還有以前補貼...反正一堆)的那些事情,以及兩黨賄絡選民的老農年金,讓我對台灣的政治人物的品格之低下以

[周末留點時間給自己]起初的心情...

圖片
『...然而有一件事我要責備你,就是你把起初的愛心離棄了。 所以,應當回想你是從哪裡墜落的,並要悔改,行起初所行的事...』啟示錄 2 : 4~5 最近在寫程式的時候, 突然想到 上面這段聖經經文。 前陣子有些疲倦,這個疲倦可能不只是身體上的,也是心情上的疲倦。幾天前和一個廠商聊天,他提到收到一些終端用戶的來信,對於公司開發的產品的建議,以及對軟體收費的埋怨...如同我過去說的,台灣很多使用者認為大多數的App應該免費,持有的論點很多,但歸納到最終只有一個,就是能不付的錢當然就要省下來(老實說我異地自處、捫心自問,有時候連我自己也會這樣想,連老張都說未來景氣似乎不會太好,所以能省則省),這是在市集中,衝動型消費或具有強烈需求的App比較容易讓用戶甘心掏錢的原因。也因此遊戲賣的比應用程式好、辣妹賣的比遊戲好的原因,而服務型或工具型的App則大多透過廣告或其他方式的獲利。而剛好最近我和在南部的App獨立開發商朋友們有一些討論,大夥兒對於台灣軟體業的生態和走向,依舊有點憂心。 然而抱怨大家都會,所以我們要練習不要太多抱怨,今天也不適合來談什麼大道理或遠大的抱負,至於過去很多跟政府單位與長官們提出的建議,也是從整體市場的角度來看,說真的沒什麼私心。關於政府如何花錢這件事情,我就不再 多說 了,最近還有一些讓人聽起來很不爽的案例,例如 一齣劇花上兩億之類 。(文中說,曾道雄感嘆「其實只要二億一千五百萬元的一半費用,就夠我做一輩子的歌劇,甚至演到死都用不完」。兩億? 我猜我們大概可以寫一輩子App了。 因此我在此宣布,如果我包到兩億元的App政府專案,我立刻先捐出1/4,然後再開放100個周休三日的工作機會,程式設計師們都不用怕無薪假 ) 軟體產業會有這個狀況,歸納其因素,台灣市場小,是主因,最近從數據上來看, 即便是純中文化(沒有支援多國語言)的App,在台灣的銷量依舊遠小於台灣以外(這表示國外買中文App的消費者遠比台灣多? 這豈不奇怪?),所以我們現在的App需要全面國際化,每一隻App都做multi-language是必然的,但即便如此,要讓大家願意掏錢,我們還是得要費下一番功夫,例如美術設計的補強,建立競爭者的進入障礙與門檻...等。 不過這都不是這篇文章的重點,重點是,今天我想講一個故事。嚴格說起來,是有關於我個人有生以來的第一個軟體產品的。

在App中讀取Windows Phone 7手機內的照片資源(Picture Hub存取)

圖片
同樣的,和 存取音樂檔案一樣 ,手機上的照片檔案存取,也採用一樣的方式,我們可以透過 Microsoft.Xna.Framework.Media. MediaLibrary 取得用戶儲存於手機上的照片,關鍵在 Pictures 屬性: //透過MediaLibrary存取手機照片 Microsoft.Xna.Framework.Media.MediaLibrary lib = new Microsoft.Xna.Framework.Media.MediaLibrary(); foreach (var item in lib.Pictures) { //動態建立Image物件 Image img = new Image(); //加入容器 StackPanel1.Children.Add(img); img.Width = 400; img.Height = 400; //設定圖片來源 BitmapImage bi = new BitmapImage(); //關鍵在item.GetImage取得圖片 bi.SetSource(item.GetImage()); img.Source = bi; } 開發人員需要比較留意的部分,是動態建立的Image物件,是透過source屬性來設定圖片,但圖片來源必須是BitmapImage,因此我們又動態建立了BitmapImage物件,並且透過SeetSource來設定該物件的binary圖形資料來源,而這個資料來源,當然是從item取得,使用的是GetImage()方法。 執行的結果如下: 請留意,Microsoft.Xna.Framework.Media.MediaLibrary.Pictures取得的每一個物件,其型別是Microsoft.Xna.Framework.Media.Picture,這個物件除了可以透過GetImage()取得圖片之外,還有幾個重要的屬性,諸如:Name, Width, Height, Date, Album…分別可用來表達圖片的相關資訊。

在App中讀取Windows Phone 7手機內的音樂資源(Music Hub整合)

圖片
前陣子WP7 Marketplace當中有一隻HTC推出的免費App挺有趣,可以在App當中抓取顯示並撥放手機上的多媒體資源,諸如音樂檔案或是影片,先前我們在討論Silverlight開發技術的時候,並沒有看到API裡面有可以抓取到手機音樂的指令,第一次看到的時候著時讓我有些好奇,找了一下MSDN資料發現難怪之前沒看到,原來是出現在XNA這個Namespace底下。 我們可以透過底下的指令找到手機上的所有多媒體檔案: void MainPage_Loaded(object sender, RoutedEventArgs e) { //透過Xna抓取手機上的音樂 Microsoft.Xna.Framework.Media.MediaLibrary lib = new Microsoft.Xna.Framework.Media.MediaLibrary(); //Binding到ListBox上 this.ListBox1.ItemsSource = lib.Songs; } 當然,由於屬於XNA Framework的部分,請在使用前先在專案中Add Reference:  加入 Microsoft.Xna.framework ,接著即可使用前述的指令碼抓取到資料,如果你要像上述程式碼一樣把樂曲 Binding 到 ListBox 物件上,必須先幫 ListBox 設計 Template : 然後將此Template使用在ListBox上: 如此一來就可以在自己開發的App中,呈現出手機上呈現出每一首歌的名稱,以及演唱者與專輯名稱: 由於Silverlight的DataBinding技術,在listBox當中每一首點選的曲子,可透過底下的方式抓取到,甚至可以透過底下的程式碼,撥放選取的Item: private void button1_Click(object sender, RoutedEventArgs e) { if (this.ListBox1.SelectedItem == null) return; //取得選取的樂曲 Microsoft.Xna.Framewo

關於雲端運算

圖片
[引言]這一篇,是幾個月之前應邀寫的一篇討論雲端運算的文章的原稿,因為篇幅的關係,這篇文章在刊出的時候做了相當大程度的刪減,幾個月過去了,重新看到,只貼在blog給有興趣的朋友...另外,這一篇並沒有試圖為雲端運算下定義,因為定義可以從NIST找到 http://www.nist.gov/itl/cloud/  這篇只是說明我們對雲端運算的一些規劃與想法...    從虛無飄渺到豁然開朗         前陣子受邀到某教育訓練中心上課,剛好學員前一堂課的講題是雲端運算,看到學員臉色頗為疲倦,不禁好奇早上的講師是否塞給大夥太多內容而造成學員壓力。因為這個班下午我得要接續著上課,所以不免關切地問了學員一聲:『早上雲端課程上的如何啊?』         沒想到不問還好,這一問之下,學員七嘴八舌地聊了開來,有個年長的學員用八個字做了總結:『虛無飄渺,無邊無際』。由於學員先前都沒有接觸過相關的概念,聽起來雲端運算好像很厲害,無所不能,但從講師的介紹中,又分不太出現在所謂的雲端運算和傳統的虛擬主機、主機代管、或網路服務有何不同,看起來像是過去我們說的SOA(Service-Oriented Architecture)的一種延伸,又像是ASP(Application Services Provider)的一種變形,那到底雲端是什麼? 早上一整個課程上下來,學員似乎還是摸不著頭緒…         其實這個話題,得要從20年前開始說起… 二十年前的夢想         約莫在15年前,Bill Gates出版了一本頗為引人關注的書籍『THE ROAD AHEAD』,清楚地闡述了他早在1990年11月於Comdex中所發表 - 主題為『Information At Your Fingertips』的演講,20年後的今天,你可以看到Bill Gates對未來描述的精準先見。         當時所提及的概念,已經把網際網路和資訊科技將帶給我們的願景清晰地勾畫出來,可能在20年前你很難想像,任何人,在全球的任何地點,都可以從口袋中拿出一個可以隨身攜帶,只有手掌大小的設備,而這個設備可以提供你所需要的任何資訊,不管是當天全球重大的即時新聞(例如最近的股市崩跌)、或是你家裡大門口的監視器即時畫面。不論你在這個地球上的哪一個角落,只要能夠連上網路,不管是工作還是娛樂,

台灣的軟體人才在哪裡?

圖片
        最近,政府舉辦了不少的App設計比賽,大概是看到了芬蘭在沒了Nokia作手機界的霸主之後,居然還可以有一個能撐住半邊天的紅色小鳥,回頭想想台灣雙A品牌在小筆電上碰到的挫折,又環顧了一下過去幫台灣掙錢的代工產業前景茫茫,想說反正比起花在兩兆雙星上的銀兩,辦些個App比賽只是九牛一毛,搞個不好給他異軍突起,成為未來的一條生路...不知道是不是因為這樣,所以最近常常聽到各式各樣的App新聞,甚至也有跟前陣子雲端綁在一起炒的,不管如何,至少這個產業似乎被推廣開了,只要有動作,我都認為是好事...         但是前陣子跑了不少學校,並且和業界一些前輩們聊天,大家都有一個一樣的感慨,台灣的軟體人才真的越來越少了。雖然學校的科系開的琳琅滿目,從遊戲開發到機器人設計都有,各樣五花八門的學科讓人目不暇給,但是同學畢業之後,真的在職場上撐在那裡寫程式的,能有多少?         我不用算也知道,因為部落格會說話,全台灣軟體相關部落格一個月的點擊率加起來,能不能打敗教人化妝的部落格,或是隨便一個所謂的人氣美少女外拍部落格,不用我說大家也知道。前陣子流行金釵文化,一些大學的資工系學生寧願當Model走演藝路線,也不願意坐在辦公室寫程式,雖然我不知道人家在學校的成績怎麼樣,但我想就算人家小姐C++寫得很好,java駕輕就熟,畢業之後當Model或藝人大概還是比較划算,隨便一個主持通告比我們這些所謂講師的鐘點還要高,人家不願意自甘墮落寫程式,我也就不那麼在意了...         但是這凸顯出一個很有趣的落差,台灣很多軟體公司的開發人員其實不在台灣(這大家都知道),而台灣土生土長的程式設計師,薪資結構上也並沒有比其他行業要來得高(這邊先不論畢業生的技術能力如何),程式設計師薪資低,工時長,只有乍看之下很高檔的社會地位(因為以前大家都以為程式設計師是科技新貴,後來才慢慢發現搞錯了,那是指製造業寫韌體的),結果不僅台北市的房子買不起,連台北郊區的也很拚...這時候,能留住所謂的人才才真的見鬼。         這薪資結構其來有自,如果市場上對一個軟體專案,對一個手機App,對一個套裝軟體...的價格始終是低估的,而內需市場又硬是比其他產業小,而外銷能力又還沒成熟到足夠與國外廠商車拚,那這個產業該怎麼扶植起來? 如果政府對某個產業的投資是矇著眼睛撒錢(其實總

[VS2010]在Build時自動update專案版本

圖片
最近比較多開發WP7的Apps, 每一個App都不大,但是版本編號(Build Number)的建立卻很重要,因為我時常在submit同一支卻不同版本的Apps。而公司最近的雲端運算開發平台上的Apps也有這個問題,每一個App其實都是一個小功能,更新的頻率非常高,因此常常需要讓User再回報問題的時候,提供Build Number給我們,才比較容易區分是哪一個版本的App。 開發團隊的新成員問到,如何在每一個build自動update版本編號? 我記得有一個工具,叫做Build Version Increment Add-In Visual Studio, 可以從底下這個位置下載: http://autobuildversion.codeplex.com/releases/view/60932#DownloadId=208247 用起來很簡單方便,安裝後只需要在VS2010的主選單上按下Tools->Build Version Increment->Settings: 即可進入設定畫面:  主要是上述幾個項目,設定完成之後,每一次Build時的版本編號就可以自動依照規則遞增了。你也可以透過 Assembly.GetExecutingAssembly().FullName.Split(',')[1] 抓取到當前App的XAP版本, 提供給Developer參考... 更詳細的使用說明可以參考這裡: http://autobuildversion.codeplex.com/documentation 分享

追悼賈伯斯

圖片
寫在一個多月前,賈伯斯辭職時 ...

千里之行,始於足下...

圖片
今天早上,因為一時興起,到住家附近那個有湖的公園,一早步行上山,沿路蟲鳴鳥叫,難得清晨的乾淨空氣,精神很是清爽。 到了山頂,發現原來這座山也不是挺高,以前從公園湖邊往上看去,總是不知道山裡面是什麼,這次親自走一遭,終於算是體驗了一下這個步道。 沒想到住在這邊這麼多年,居然一直到今天,才有機會登山看看,從山上往下看的視野果然不同,沿途一邊思想最近手上的專案、公司的產品、以及未來在資訊技術上的改變與相關的因應之道,還有接下來準備整理學習的新技術...等,一邊步行、一邊思索;清晨登山,也算是頗有所得。 回頭想想,資訊技術的學習,似乎也是如此,有很多新(或其實不是很新)的技術,總是在我們身邊晃來晃去,有時候聽到朋友說(Ruddy老師最常幹這種事情,到處跟人說,最近有哪些新技術很有趣),但自己礙於時間,總是沒有辦法親自去試看看,從新穎的程式設計方法論、絢麗的展示層技術、或是某個哪個專案控管機制概念...等,我們常常都是聽的多,自己實際動手做卻來得少。 偶然一天,有機會下手,才發現其實並不如自己想像的那麼困難(相信我,很多書籍或課程把一門新技術描述的很難,絕大部分狀況都是作者和講師的問題,技術本身可能一點都不難),自己資質沒那麼差,只是過去並沒有真的把心思放在這裡,以至於似懂非懂。 很多路,得自己走過,才會有感覺。一旦你走進去,不管是一條路,還是一門技術,你才能夠去體驗、感受,進而才能評斷出優劣與利弊,在對前面的路感到迷惘的時候,很可能暫時放下思索,直接走出去,沿途所見常常能夠刺激你找到更寬廣的路。 對未來,或新的技術,想要挑戰看看嗎? 不妨,就從今天,從身邊的小山開始...

[推薦] Donma寫的...如何在WP7的Map Control當中,顯示中文化地圖...

圖片
最近大夥玩WP7 Mango玩的不亦樂乎,開始體驗Windows Phone在生活當中的強大功能與應用,但是在開發層面,目前最大的困擾就是內建的WP7 Map control,實在是好用到不行,包含支援所有的手勢和相關功能,但殘忍的是,居然不支援中文,扼殺了廣大台灣開發人員的創意,而我在研討會介紹的時候,也因為沒有中文顯示,顯得有些美中不足。 但是最近看到一篇Donma寫的文章,透過相當漂亮的作法,解決了這個問題,如果你對WP7或Silverlight應用程式地圖或導航開發有興趣,但苦於Map Control不支援中文,這篇文章可以說是救星了: http://www.dotblogs.com.tw/junegoat/archive/2011/07/11/windows-phone7-bing-map-chinese-popo.aspx 我順手把測試的專案放在底下這個位置:[ 下載 ] 有興趣的朋友們可以參考。 後記: 回想和Donma的認識,應該是七年前了,當時他是大三的學生,而我則開始在資訊教育訓練和著作上有一些耕耘。那時候透過一個朋友的介紹,第一次看到Donma對於程式設計的狂熱興趣與強大的企圖心,我今天回想起來當時的情境,還是覺得這個形容詞算是貼切,一點都不誇大... 幾年後,他畢業了,過了一兩年,突然在很多微軟的研討會場合看到他,沒多久他也是微軟MVP的一員了,而現在他任職的公司則是微軟重要的合作夥伴,在公司中他也擔任重要且關鍵的開發任務... 我得說,這正是一個軟體開發人員精彩的成長歷程,從Donma身上我看到過去我曾寫過的文章『 關於 如何快速增進程式功力 』中所說,開發人員應該培養自己解決問題的能力的最佳例證。才幾年的時間,從學校的學生蛻變成專門解決他人問題的MVP,並且在軟體公司當中獨當一面,在如今景氣與趨勢變化迅速的年代,很多大學畢業生面對就業的困擾與憂心,希望政府提供幫助或是振興就業市場,但是別忘記,與其期待別人施予援手,其實自己才是開創未來前途最重要的關鍵因素。 Keep Walking~

困擾我的線...和藍芽斷線

圖片
線路,一直是很困擾我的問題。 桌上從USB、滑鼠、手機、充電器、螢幕...全都是線...你知道,這很煩的。 有的線不夠長,你還得弄延長線,有的線太長,你還得拿個橡皮筋什麼的把它捆起來,這也很煩。 所以如果可以,我盡量讓設備不要有線。 最近滑鼠左鍵被我按壞了(彈不起來),所以我只好再買一顆,這次我買了藍芽滑鼠,不用接接收器的那種(因為USB很寶貴,況且已經插滿了),買來,接好,可以用。 不過似乎移動沒有有線的滑鼠那麼順,沒關係,其實差異很微小,幾乎感覺不出來。 但發現一個嚴重的問題,就是擱著幾分鐘之後,XX,他不會動了>_< try了幾次,發現是NB上的問題,每次我似乎都得重開藍芽,滑鼠才會醒過來,因此我找了一下,到底是哪邊的問題,最後.... 電腦-->滑鼠右鍵-->管理-->裝置管理員-->Bluetooth無線電-->Generic Bluetooth Adapter-->滑鼠右鍵-->內容-->電源管理:  把那該死的『允許電腦關閉xxx以節省電源』取消掉,搞定。^_^

Windows Phone 7(WP7) - Mango(7.1) 中文 Apps 上架經驗

圖片
最近配合台灣成為全球第一個Mango Release的市場,開始將過去在微軟Marketplace上的一些Apps改成中文版,首先要提醒同學們注意的是,在現在的Mango版本App上架流程中,Assembly Infomation的Neutral Language不得保留空白(7.0時可以),你必須選擇你的Target Marketplace 的Language,因此我要上台灣市場,所以底下選的是:Chinese (Traditional, Taiwan) 請注意先前有學員測試,選擇Chinese (Traditional),怎麼上傳也傳不上去,App Hub始終跟你說Connect fail(詭異的訊息),改成 Chinese (Traditional, Taiwan) 就OK了,這個問題目前只有一位同學回報,如果未來有碰到類似狀況,請update讓我知道... 當你在Neutral Language 選擇了 Chinese (Traditional, Taiwan), 則你的App的 Description就可以先(只)寫中文,如果有勾選上架全球市場,則可考慮後面補上一段英文Description,例如: ------------------------------------------------------------- 這支App的功能是xxxx, 是一隻非常讚的App..... 改版歷程:  v1.0 : xxx  v2.0 : zzz English Description: This is a awesome App, for... Version History: v1.0 : xxx v2.0: zzz ------------------------------------------------------------- 目前我差不多都是照上面這樣填寫Description... 總的來說,Mango機在台灣上市了,台灣的Marketplace也開放了,中文的App也可以上架了...萬事俱備,只剩你的加入了~ ^_^

[範例程式] Windows Phone 7.1 Mango 自訂動態磚範例

圖片
底下的這個範例是TechDays 2011研討會時,我Demo的WP7.1當中,自訂動態磚的操作,可以配合先前的教學影片一同觀賞。 [範例] 下載 [教學影片] 109 Tiles動態磚的使用介紹 這支影片當中介紹的是WP7當中相當重要的動態磚機制,我們介紹了7.0中的Application Tile以及7.1 Mango版本當中的Secondary Tiles。在WP7.1 Mango的版本當中,開發人員可以自由的透過程式碼建立Secondary Tiles,可以新增、修改或刪除,也可以自由地指定Tiles上的圖示、文字標題與數字等資訊。用戶從Start畫面點選Tiles也可以直接連入App,並且帶入參數,是一個相當好用的機制。 [範例執行展示]

Windows 8 Metro Style Apps開發...

Keynote新聞介紹   <---Windows 8 的中文介紹 要如何開發Windows 8 Metro Style 的 Apps呢...想嘗鮮的朋友可以看 這裡 ... (好像好像Silverlight啊~)

忙完Techdays 2011之後...

今年TechDays和過去一樣,會場依舊好多人,走道間依舊是嘶聲吶喊、拼命想刷你卡片的廠商,穿梭在人群中的,當然還是不乏讓人眼睛一亮的展場ShowGirls... 今年兩堂Windows Phone 7的課蠻開心的,可以看到平常在FB社團裡面才看得到的朋友們,這樣的大會也讓平時忙碌的講師們有難得的機會這樣聚在一起,說真的,參加了幾年下來,雖然每年都在備課時搞得天昏地暗,但講完之後的輕鬆和愉悅,以及和學員講師們互動的心情,也是少有其他經驗能比擬的。 和will保哥聊起,彼此好幾年前在台下當聽眾時的心情,Ruddy前輩則一直說...好多好年輕的講師啊, 一大堆講師他都快不認識了...其實從某個角度看,或許這也是一種傳承,講師中有在台上始終屹立不搖的大師,也有今年第一年登場的猛將,就是這樣的組合,才讓整個大會有著不同的激盪。 每次從台上往下看,學員中總是有每年都參加我的場次的朋友(特別是來自台中的幾位),每年這時候的聚集,似乎已經是一種不需言語的默契,有這樣的學員在總是能讓講師在忙亂中立刻像吃了定心丸一般的穩定。當然學員中也有第一次見面的新朋友,甚至遠從澎湖來的學員(很感謝您的熱情參與和配合^_^),一個年度盛會的成功,其實學員的投入才是最重要的關鍵。也很感謝學員很認真地讀完了PDF書稿,給我不少的Feedback。 在TechDays的前幾天,剛好跟網友們在FB中聊到,其實這個訊息爆炸的時代,到處都是學習的資源和管道,我們也錄製了非常多的教學影片,撰寫了不少的文稿或blog中的文章,其實學員即便在地球的另一端,也能夠迅速地掌握最新的技術。 因此,願意放下手邊的工作,參與三天的課程,顯然已經不只是對技術的熱情,更多是對未來的期待以及投入社群和大家一起互動的渴望,所以我很希望在課程的分享當中,更多一些和學員之間的互動,我也很建議學員,可以多認識身邊的其他技術夥伴,畢竟這是一個相當難得的場合,讓全台所有IT/開發人員能夠共聚一堂,不僅僅是垂直的技術學習,橫向的技術分享將是更無價的。 希望在今年的大會中,每一場次的課程都讓您有所收穫,我會在blog和 fb.studyhost.com 陸續把相關的內容持續post上來,希望對大家有幫助,期待下一次再見面。

Techdays Taiwan 2011

感謝大夥兒熱情參與今天的TechDays Taiwan 2011研討會, 說好的相關資源請參考底下連結: [Slides] TechDays Taiwan 2011 WP7 Mango關鍵報告 [Slides] Microsoft WP7應用程式開發-AppHub帳號申請與送件 [電子書] WP7.1 Mango程式設計關鍵報告(CH1,2-試讀版) [Resources] .NET Walker專頁 WP7 Asia Developers Group [Training Videos] • 101 從基礎開始 從最基本的WP7應用程式設計開始,撰寫你的第一支WP7 App,內容包含如何透過Visual Studio 2010建立Windows Phone 7 App專案,建置與佈署到模擬器運行,WP7中基本的動畫設計概念,以及事件驅動程式設計...etc。 • 102 ApplicationBar選單與顯示模式 了解WP7當中的頁面架構,XAML的基本概念,控制項佈置位置,App顯示模式的改變,以及WP7當中相當重要的ApplicationBars介紹暨選單(MenuItem)與按鈕(IconButton)的設計。 • 103 場景切換、面參數傳遞、與Back鈕 如何設計多個畫面,並且在多個頁面當中進行切換呢? 多頁面時該如何傳遞或共用參數? 如何在切換頁面時加上自訂的特效動畫? 以及如何攔截Back鈕顯示提示訊息? • 104 Launcher的使用 這支影片當中介紹的是Launcher與 Choosers的概念,以及如何透過叫用Launcher API在我們自己撰寫的App當中啟動手機內建的應用程式來達成特定的功能,例如傳送簡訊或撥打電話。比較特別的是,在Mango的版本當中,加入了ShareLinkTask,讓你的App可以輕易地送出訊息到FaceBook塗鴉牆或MSN的狀態上喔... • 105 Choosers的使用 在這支影片當中,我們繼續討論了Chooser的使用,介紹系統中的Chooser種類,以及示範如何透過Save Ringtone Task將特定的音效檔案儲存到手機當作鈴聲,和如何透過PhoneNumberChooserTask的使用來取得手機通訊錄中特定人員的電話號碼... • 106

[教學影片] Windows Phone 7 - 程式設計關鍵報告(112 WebServices遠端資料存取與資料繫結)

今天Windows Phone 7程式設計教育訓練短片當中介紹的是,WP7(Silverlight開發技術)當中,傲視群雄的DataBinding機制 與 Web Services的整合...很精彩 112 WebServices遠端資料存取 與 資料繫結(DataBinding) 前面我們介紹過了如何在WP7當中,透過Web Services抓取遠端的資料,而在這個影片當中,我們更進一步的,要來介紹如何把抓取到的資料直接以WP7(Silverlight開發技術)當中,傲視群雄的DataBinding機制,填入控制項當中,呈現出相當優質的畫面效果。這是WP7(Silverlight開發技術)中非常厲害的招式,請密切注意,立即收看 :) 。

[教學影片] Windows Phone 7 - 程式設計關鍵報告(111 WebServices基本呼叫)

我們在今天的Windows Phone 7程式設計教育訓練短片當中介紹的是,如何從WP7存取遠端的資料,以及遠端資料庫中的內容。(今天這個主題超級重要喔~) 111 WebServices基本呼叫 在這支影片當中,我們主要介紹了如何從WP7當中透過Web Services抓取位於Internet遠端的資料,這個技術讓WP7這也不只是一座孤島,能夠動態的透過存取遠端資料來掌握即時的訊息。在商業應用程式上也相當好用,我們可以透過這樣的方式來存取企業內部的資訊或後端資料庫中的內容。 當然,這樣的存取需要撰寫Web Services(或WCF Services)因此我們在這支影片當中,完整的介紹了如何透過ASP.NET開發技術撰寫WP7(Silverlight)需要的Web Services,以及如何透過LinqToSql抓取到後端資料庫中的Record,直接傳遞給WP7來使用。

Windows Phone 7 - Mango 剪貼簿(Clipboard)

在Mango的版本當中,開發人員開始可以自由地控制手機中的文字複製貼上功能,程式碼的撰寫如同過去我們在WindowsForm當中的做法一樣,相當的簡單: //設定剪貼簿中的文字 System.Windows.Clipboard.SetText("簡單貼..."); //取得剪貼簿中的文字 string buf = System.Windows.Clipboard.GetText(); <--目前不開放 就這樣,相當簡單但很好用。 範例下載

Data.Taipei台北市政府公開資料平台

圖片
台北市政府最近跟微軟合作 ,採用了微軟的Windows Azure雲端運算平台,打造了 『Data.Taipei台北市政府公開資料平台』 ,同時為了推廣應用在手機App上,配合工業局舉辦的 App Star高手爭霸戰 ,加碼 獎金30萬 。 不過我看了一下,目前對這個平台的技術架構沒太大疑問,但主要的問題是其中提供的內容稍嫌空泛了些,大家期待的公車即時位置尚未在這個平台上提供,而是需要另外 向臺北市政府交通局申請 ,但是我對目前平台上提供的資訊(諸如台北市公廁位置或是警察局的位置)也沒太大興趣,況且這些資料也並非即時資訊,下載個Excel檔案就可以寫App了,大費周章的連上雲端平台似乎意義不大。 當然,我也知道不太可能要求台北市政府提供路口攝影機的即時影像資訊(雖然對我來說最希望看到的乃是這個,這樣宅男駭客就可以實現在家裡監控每個街口的電影情節),所以截至目前為止,我們只能先看看 即時 公廁位置(還每日更新呢) 過過乾癮... 不過,就資料連結技術來說,台北市政府算是已經相當給力了, 資料連結的介面 提供了豐富的Atom或Json形式,採用 OGDI 以OData的形式提供資料(很趕得上潮流,拍拍手),甚至C#範例都有了(還很先進的用了Linq查詢咧...),一切都很不錯,就是Content差了些...>_< 不過話又說回來,台北是繼紐約、倫敦之後,成功導入該服務的市政單位,也算是很趕時髦了,希望台北市政府繼續努力,讓我能夠有機會在短時間內可以update這篇po文。

[教學影片] Windows Phone 7 - 程式設計關鍵報告(110 Tiles動態磚與PushTileNotification)

圖片
今天Windows Phone 7程式設計教育訓練短片當中介紹的是,許多開發人員有興趣的PushTileNotification機制。(今天這個主題很重要喔~) 110 Tiles動態磚 vs PushTileNotification 這支影片接著繼續介紹WP7當中相當重要的PushTileNotification機制,我們先前介紹了7.0中的Application Tile以及7.1 Mango版本當中的Secondary Tiles。您會發現Tiles動態磚技術是WP7當中相當特殊好用的設計,而Tile最吸引人的其中一個原因,就是App的開發單位,可以透過PushTileNotification技術,主動把訊息推送到動態磚上,即便用戶端的App沒有正在執行,我們也可以藉由PushTileNotification把文字、數字與背景圖示等訊息,即時的推送到用戶端,直接呈現在手機的動態磚上,用戶不僅能收到即時的訊息,也不需要花費任何簡訊費用,是非常務實好用的功能。

[教學影片] Windows Phone 7 - 程式設計關鍵報告(109 Tiles動態磚)

今天繼續推出一隻介紹Windows Phone 7程式設計教育訓練短片。(今天這個主題也很重要喔) 109 Tiles動態磚的使用介紹 這支影片當中介紹的是WP7當中相當重要的動態磚機制,我們介紹了7.0中的Application Tile以及7.1 Mango版本當中的Secondary Tiles。在WP7.1 Mango的版本當中,開發人員可以自由的透過程式碼建立Secondary Tiles,可以新增、修改或刪除,也可以自由地指定Tiles上的圖示、文字標題與數字等資訊。用戶從Start畫面點選Tiles也可以直接連入App,並且帶入參數,是一個相當好用的機制。

[教學影片] Windows Phone 7 - 程式設計關鍵報告(108 Push Notification)

今天繼續推出一隻介紹Windows Phone 7程式設計教育訓練短片。(雖然今天只有一支,但是今天這個主題很重要) 108 Push Notification概念與Toast Notification使用介紹 這支影片當中介紹的是WP7當中相當重要的 Push Notification機制,我們扼要地說明了 Push Notification的概念、有哪些種類、以及如何使用、建立 Push Notification時需要注意哪些事項、以及Mango版本當中Push Notification機制的增強...。我們展示了Toast Notification的建立與發送方法,並且如何透過Mango當中針對Toast Notification新增的參數,喚起App並連結到特定手機頁面。

[教學影片] Windows Phone 7 - 程式設計關鍵報告(106-107)

繼續推出兩隻介紹Windows Phone 7程式設計教育訓練短片。 106 WP7設定(Setting)頁面的設計 這支影片當中介紹的是WP7設定(Setting)頁面的設計,其中使用到了IsolatedStorageSettings技術,來保留使用者的設定狀態, 同時間介紹了 UserIdleDetectionMode 的功能,如何透過UserIdleDetectionMode 設定來防止應用程式在執行過程中被Screen Lock干擾(例如防止閱讀電子書時,突然出現的螢幕Lock),以及設定頁面的設計原則和技巧。 107 WP7 IsolatedStorageFile的使用技巧 這支影片當中介紹的是WP7當中的IsolatedStorageFile機制,同時也介紹如何利用WebClient下載特定的檔案,儲存到IsolatedStorage當中,以供後續的使用。除了IsolatedStorageFile機制的操作與使用方式之外,其中如何將圖檔儲存到IsolatedStorage當中,以及從IsolatedStorage當中把圖檔取回顯示到App中,也是相當重要的一部分。

風雨無阻

日前颱風天那天,聽到朋友中有位講師不辭辛勞,不畏風雨的依舊在預定的時間遠赴台灣的另一端,只為了說好的幫同學們上課,聽到了之後相當感動,所以我哼著熟悉的歌曲,寫了底下這首歌...描述許多講師、作者們共同的心情... 請配上 周華健‧風雨無阻... 給你我的全部 .NET是我今生唯一的賭注 只留下這段代碼 讓我無怨無悔 全心的付出 怕你疲倦 怕你哭 怕你迷惘 怕你糊塗 編程千山萬里路 我可以朝朝暮暮 給你一本我的書 它是我一生不停的腳步 讓我寫滿數十萬字 堆滿整座倉庫 你慢慢閱讀 Silverlight是漫長的旅途 一會快樂 一會痛苦 千瘡百孔編程路 我可以縫縫補補 ⋯⋯ 提著昨日種種千辛萬苦 向明天換一些 夢想和錢途 範例夠不夠多 講解夠不夠好 可以要求 不要不在乎 不願讓你看見我的辛苦 是曾經無悔的風雨無阻 贈品夠不夠多 點心夠不夠好 可以追求 不認輸 配樂 請用 http://www.youtube.com/watch?v=D9b4Pnpbx4Q 或 http://www.youtube.com/watch?v=LwM8AIYC5S8

[教學影片] Windows Phone 7 - 程式設計關鍵報告(104-105)

繼續放兩隻Windows Phone 7程式設計教育訓練短片。 104 Launcher的使用 這支影片當中介紹的是Launcher與 Choosers的概念,以及如何透過叫用Launcher API在我們自己撰寫的App當中啟動手機內建的應用程式來達成特定的功能,例如傳送簡訊或撥打電話。比較特別的是,在Mango的版本當中,加入了ShareLinkTask,讓你的App可以輕易地送出訊息到FaceBook塗鴉牆或MSN的狀態上喔... 105 Choosers的使用 在這支影片當中,我們繼續討論了Chooser的使用,介紹系統中的Chooser種類,以及示範如何透過Save Ringtone Task將特定的音效檔案儲存到手機當作鈴聲,和如何透過PhoneNumberChooserTask的使用來取得手機通訊錄中特定人員的電話號碼...

[教學影片] Windows Phone 7 - 程式設計關鍵報告(101-103)

三隻適合Windows Phone 7程式設計初學者由淺入深的教育訓練短片。 101 從基礎開始 從最基本的WP7應用程式設計開始,撰寫你的第一支WP7 App,內容包含如何透過Visual Studio 2010建立Windows Phone 7 App專案,建置與佈署到模擬器運行,WP7中基本的動畫設計概念,以及事件驅動程式設計...etc。 102 ApplicationBar選單與顯示模式 了解WP7當中的頁面架構,XAML的基本概念,控制項佈置位置,App顯示模式的改變,以及WP7當中相當重要的ApplicationBars介紹暨選單(MenuItem)與按鈕(IconButton)的設計。 103 場景切換、面參數傳遞、與Back鈕 如何設計多個畫面,並且在多個頁面當中進行切換呢? 多頁面時該如何傳遞或共用參數? 如何在切換頁面時加上自訂的特效動畫? 以及如何攔截Back鈕顯示提示訊息?

在努力背後...

圖片
(後記:一個多月後, 10/6這天賈伯斯過世了...這篇文章中第一行的辭職,得改成辭世了。全球幾乎都一同哀悼賈伯斯的離開,並且深表不捨,Apple和Google的首頁也特別掛上或連結了賈伯斯的肖像以表追悼,肯定他一生的成就) 聽到Steven Jobs辭職的消息,讓我有些感觸。 在他經歷了那麼多的事情之後,阻止他繼續向前邁進的,不是外界競爭對手的攻擊、不是潮流趨勢的更替、不是資源或能力上的限制,而是他自己的身體! 坦白說,一個在世代中如此具有影響力與領導特質的人,要能夠甘心停下腳步,其實相當不容易。我相信,在我們心裡,總是有一些夢想,對自己或未來的期待,隨時推動著我們往前邁進。年輕的時候,我參加TechED,坐在台下前幾排,認真地看著台上講師賣力的演出,我曾經想像過,如果有一天換我在台上,那會是怎樣的場景? 如今回想起來,感覺很遙遠,但記憶卻相當鮮明。 在我中學的時代,那時候的資訊雜誌只有第三波,印象中我常常投稿,把磁片寄到雜誌社,參加雜誌上的程式設計比賽,想像著有朝一日,我是期刊專欄作者的心情。如果不是現在在寫這篇文章,我根本早已忘記曾經做過這些事情。現在想起來,我對這段回憶的感覺居然是一陣溫馨。 好多年之後,小時候的夢想慢慢實現,但是我也逐漸發現,人生中最難的事情,不是拼命努力,不是隨波逐流,是如何在天平的兩頭當中拿捏出最適合自己的距離。 回頭看賈伯斯,我不知道,他是否也覺得自己的一生意義非凡,我更加不確定,如果讓我選擇,他這樣的人生對我來說是否有吸引力。 在這世界上許多努力奮鬥的國家當中,台灣人的工作時數和其他地區比起來算是很有得拚,我從退伍開始工作之後,就我印象所及,工作幾乎沒有間斷,35歲之前,一個工作接著一個,即便在新舊工作交替之際,也幾乎是立即銜接,沒有一刻喘息。 在我的身邊,約莫和我同一期的朋友同學們,大多都是這樣拼命,冬天的時候天沒亮就出門,踏進園區的辦公大樓之後,像是跌入陷阱,沒到星月高掛不會看到回家的身影。直到結婚,小孩出生,才開始慢慢把時間留給家人,逐漸找回一些時間給自己。 35歲像是一個分水嶺,35歲之前,最大的休閒,是喝著濃郁的咖啡寫程式,夜深了伴隨著廣播繼續努力;35歲之後,熬夜是留給年輕人的權利,節制是新發現的功課,還需要努力操練和學習。 如果看這篇文章的你,還沒結婚,不到30,或許你還可以多加

持續地改變是必然的趨勢...

大多是不想寫程式,不願意寫規格書,沒精神寫企劃案的時候,我才會寫文章。 不過最近,在FB上看到一篇文章,主要是提到Silverlight技術的目前狀況,以及與未來HTML5之間的一些問題,還有未來開發技術云云。最近半年看到很多這樣的文字或報導,也有不少學員詢問,所以有感而發。 說真的,大夥,別再問這個問題了,原因很簡單,就是展示層技術的改變根本就是必然的趨勢。(相信我,這還不是軟體開發趨勢裡面最讓人感到痛苦、悲憤、無奈、沮喪的一塊...那David言下之意,還有其他讓人更嘔的地方嗎? 當然有,還多著呢,以後有空再說) 前陣子上課,和學員聊到分散式應用程式開發,說到一個結論:『在商業應用程式開發當中,越沒有UI的程式越值錢!』 學員臉上泛起疑惑和不太相信的目光,我隨即解釋,你看過SQL Server吧,看過Skype,看過MSN,難寫的是MSN Server, 還是MSN UI? 有技術難度的是Skype Server, 還是Skype Client, 真正賣錢的是SQL Server的Services,還是SQL Server的Management Studio? 這就是啦,你寫的不是Game,那就讓我告訴你,在商業應用程式的世界裡面,UI是不值錢的,UI可以是賣點,但常常不是成交的關鍵,UI可以是客戶嫌棄你的理由,但UI不是會讓客戶付你多一點錢的原因。 過去這20年, UI層開發技術是一變再變的,從DOS的文字畫面,到Windows的GUI,到後來的Web UI,乃至於現在的WPF/Silverlight/Multi-Touch,這一路上的改變沒在少的,而且趨勢是改變的速度越來愈快,改變的幅度越來越大。 也因此,每當我聽到學員感嘆某些展示層的開發技術改變太快,我就很擔心,大夥把焦點放錯位置了,UI從來不是一套軟體(或專案)成功的關鍵,UI只是你跟客戶表演時候吸引人目光的火花,有時候不同的客戶你還得放不同種類的煙火(平板? 行動? PC? Web? Windows? RIA?),才會得到你想要的效果。 過去這十多年的展示層開發技術,有哪一些可以沿用或重用的? 其實少之又少,先不管是否component可以reuse, 連source code要拿來reuse都很困難。所以,最理想的展示層技術是什麼? 是不要寫。或是我講一講就出來(例如

跑了很多年的PC, 也有停下休息的時候...

圖片
最近,一本伴隨著許多技術人員從小看到大的資訊期刊決定併刊了,未來技術相關的主要內容將會調整為在線上以電子方式呈現。雖然這個改變不是很令人意外,但多少也讓我覺得有些感慨。 知道這個消息,是在我上個月旅遊的途中。本來打算回來寫篇文紀念一番,但是礙於許多原因,最後沒有提筆,現在寫在這裡,多少也是因為木已成舟,所以留個紀錄而已。 在旅途當中,我不只收到這個消息,另一件事情也讓我頗為感慨的,是一位出版界奮鬥已久、過去的合作夥伴,也在最近準備轉換戰場,我想多多少少,也都跟目前資訊出版市場的狀況有關。 這幾年的出版當然跟過去不可同日而語,就像這幾天看FaceBook中朋友們的留言,提到:『跑電腦現在需要換個場地跑,大家也知道現在 ​電腦不夯了,可能要跑平板之類的...』資訊技術是應用科學,內容隨著時間更迭並不新鮮稀奇,最近幾年的媒體和出版生態丕變,連報社都能一夕之間改弦易轍,或有換老闆經營者,更何況我們這個更加小眾市場的媒體呢? 過去一本資訊圖書的出版,可以帶領許多讀者踏入這個充滿願景的工作領域;或是幫助技術人員建構養成觀念;或是激發開發人員的創意。隨著這幾年網路的盛行、大陸同胞們在資訊技術上的崛起、資訊產品的生命週期縮短、全球化市場競爭的衝擊、技術從業人員的獲利能力也跟著降低。 一層層連鎖反應的影響,出版市場雖是衝擊的末端,但改變卻也來的快速而堅定。 當然,伴隨著資訊環境與電子產品的進步,開發技術的傳遞方式理所當然地也應該走向現今各樣的主流趨勢,以最短的時間將重點透過各樣的手持行動裝置與平台推送給大家,結合社群傳播的力量,以另一種面貌出現在讀者的面前。這個,似乎才是出版從業人員在感嘆之餘得要繼續深思而努力的方向...

WP7同步時Zune發生錯誤 - c00d11e4 (800c000e)

用了WP7很長一段時間,隨著手機連續幾次的更新,整個WP7的表現越來越貼近甚至超越我的期待,也因此使用的時間越來越高。 WP7的手機在拍照或錄影之後,都可以隨時自動update到SkyDrive,這是一個相當方便的設計,對於慣於使用網路的用戶來說,相當的便利。 不過,總是有一些時候,我們希望把照片資料同步到PC上,這時候PC的Zune軟體就發揮了功能。但不知道從何時開始,我的 WP7接上Zune的時候,一直有一些問題無法同步,收到底下的錯誤訊息... c00d11e4 (800c000e) 一直不以為意,反正可以從網路上(SkyDrive)再抓下來,但今天心血來潮試著解決這個問題,後來上網搜尋,發現原因似乎是安裝了Ulead的軟體之後,會把底下機碼: HKEY_CLASSES_ROOT\.jpg 的default直改為 PV85.Image 導致無法Sync同步,重新改回jpegfile之後,我的Zune和WP7終於又可以順利地同步照片囉。 jpegfile

在Windows Phone 7當中撰寫導航程式WP7 SDK 7.1 (Mango)

圖片
這次微軟算是卯上了全力。 最近在測試Mango新的SDK,說真的,有了中文輸入的手機,整個使用起來果真是脫胎換骨,感覺完全不同。再加上7.1增加的API, 讓整台手機如虎添翼。 例如,在API當中增加了BingMapsDirectionsTask,讓開發人員可以不費吹灰之力寫出導航的功能,底下這段影片展示了實際操作的過程,你會發現,導航功能很清楚的引導了使用者每一個轉折點的動向,除了對台灣人來說目前地圖是英文的有點遺憾之外,整個導航功能實在是相當完整了: 而這樣的導航程式要如何寫呢? 就底下這樣: //建立BingMapsDirectionsTask Microsoft.Phone.Tasks.BingMapsDirectionsTask dt = new Microsoft.Phone.Tasks.BingMapsDirectionsTask(); //設定起點(使用當前手機所在位置CurrentCO當作起始座標) dt.Start = new Microsoft.Phone.Tasks.LabeledMapLocation( "Start", CurrentCO); //取得使用者在ListBox中選擇的終點座標 aRock.Google.Location.GeoResult po = this.listBox1.SelectedItem as aRock.Google.Location.GeoResult; //設定終點 dt.End = new Microsoft.Phone.Tasks.LabeledMapLocation("Target", new GeoCoordinate(double.Parse(po.lat), double.Parse(po.lng))); //顯示導航畫面... dt.Show(); 開發人員只需要使用 BingMapsDirectionsTask , 傳入開始和結束的兩個座標點, 調用show()方法,一切搞定,任何人都可以寫出導航功能的手機電子地圖程式了。 而且,這只是WP7.1(Mango)當中的一個小功能,還有其他近千個新的API, 看了這些之後,是不是一掃過去您對Windows Phoen銷量的擔憂? 再加上中文輸入功能,接下來恐怕手機要奇貨可居了。

Windows Phone 7.1 SDK beta 2

圖片
本來最近實在很忙,沒啥時間測試新東西,況且 Windows Phone 7.1 SDK beta 根本才出來沒多久,beta2會有那些新功能? 不過今天剛好整理機器,想說順手安裝一下,不測還好,測了之後發現不寫一篇Blog紀念一下不行... 首先...Beta2的SDK中,模擬器整個變快了,比起beta時候的速度要快了不少,如果你在MS Developer Day 2011 中,曾經聽過我介紹 WP 7.1 SDK 的模擬器,當時的模擬器坦白說稍微慢了一點, 可能beta2當中做了一些優化,主觀上感覺快很多... 不過...更重要的來了...beta2模擬器中居然開始支援中文手寫輸入, 這讓您有機會一窺Mango中的中文手寫輸入風采...影片在底下...喜歡就按個讚吧~ WP7.1 SDK Beta2 下載位置 分享

如何安裝與使用Code Snippet

在昨天的研討會中,Live Demo的部分,為了節省Key程式碼的時間,我把常用的WP7.1 API部分的功能整理成了Code Snippet(程式碼片段),這是Visual Studio中非常貼心的設計,讓開發人員的創作速度大增,且相對提高了Coding的正確性。 研討會中Demo的WP7.1的CodeSnippet整理如下:[ 下載 ] 使用方法教學影片:

微軟 Microsoft Developer Day 2011 ...

很感謝大家今天熱情參與微軟 Microsoft Developer Day 2011 ... 今天提到的Mango SDK可從 此處 下載。 今天的投影片可從 此處 下載。 相關的範例展示影片可參考 此頁面 。

Visual Studio 中,VB開發人員熟悉的Shift-F2與Ctrl-Shift-F2

圖片
如果你和我一樣,過去是寫了很多年的VB開發人員(雖然現在多半寫C#, 但我還是很熱愛VB),你應該很熟悉兩個hot key, Shift-F2(跳入特定的Method), 以及Ctrl-Shift-F2(返回原位置),這兩個Hot key對於程式開發的效率有著莫大的幫助。 到了C#開發環境,這兩個Hot-Key不見了,找了一陣子,終於發現這兩個HotKey分別是 Edit.GoToDefinition: 與View.NavigateBackward, 透過VS2010的Option->Environment->Keyboard就可以設定了。

Silverlight 4 ListBox Gesture 手勢捲動功能

圖片
由於最近我們公司,配合下半年度平板電腦的火熱上市,整個將透過Silverlight開發的產品或功能都一律加上Gesture的支援。這讓Silverlight所開發出來的App,跑在目前坊間的Win7平板上所呈現出的效果比起iPad或Android上的App一點都不遜色且有過之而無不及。 然而Silverlight 4不像WP7那麼好命,每一個ListBox或具有卷軸的控制項(例如ScrollViewer)都內建支援Gesture的功能,因此即便跑在平板電腦上,ListBox都需要用卷軸拖曳的方式來捲動,但明明Silverlight就支援Gesture,不能用手勢捲動ListItem似乎有些遜色。 因此我在網路上找到了這組好用的Behavoir... http://lighttouch.codeplex.com/ 下載之後,在你的專案中引用底下幾個.dll即可。 Wintellect.Touch.dll System.Windows.Interactivity.dll System.Windows.Input.Manipulations.dll 如果你想要將ListBox加上Gesture功能,只需要把ListBoxTouchScrollBehavior拖曳到ListBox上: 接著,幫ListBox設計一個ItemPanel,例如(關鍵在GestureListener),完成後大致如下: 最後,幫ListBox的設計一個包含GestureListener Behavior的ItemTemplate即可: 你可以從底下這邊看到預覽的效果: blog.studyhost.com/BlogData/20110611/SilverlightApplication9TestPage.html   你會發現,如果你有支援Multi-Touch的顯示器或是Win7平板電腦,整個手勢拖曳的動作非常順暢,即便你沒有多點觸控設備,這個.dll也支援用滑鼠模擬Gesture,算是挺不錯的設計。 完整的範例程式碼可參考 這裡 。 分享

Windows Phone 7 - Mango (sdk 7.1 beta) First Look - secondary Tile 自訂動態方塊磚

新的Mango,有許多好用的新功能,當然,承襲著Windows Phone 7獨樹一格的UI設計,動態磚早已深受好評,而Mango SDK中動態磚的控制功能當然就是開發人員期待已久的。 過去動態磚之所以這麼命名,就是因為他能動,但過去要能動,似乎要耍點特權,我們第三方應用程式,不僅動態磚非得配合Notification,而且還沒有那種很炫的動態效果,似乎有點差強人意。 在這個版本, 終於,我們可以寫出會動的方塊磚了,而且,還可以一次產生多個,我們甚至可以讓每一個動態磚,在被點選的時候帶入不同的參數到我們所撰寫的程式中: 怎麼做的呢? 主要的API在Microsoft.Phone.Shell命名空間,開發人員可以透過底下的程式碼來建立自己的方塊磚: //方塊磚資料 StandardTileData NewTileData = new StandardTileData { BackgroundImage = new Uri("/Images/People.png", UriKind.Relative), Title = "方塊磚", Count = int.Parse(textBox2.Text), BackTitle = "參數是" + this.textBox1.Text, BackContent = "方塊磚的背面", BackBackgroundImage = new Uri("/Images/PeopleSay.png", UriKind.Relative) }; // 建立方塊磚 ShellTile.Create(new Uri("/MainPage.xaml?TileID="+this.textBox1.Text, UriKind.Relative), NewTileData); 方塊磚依照Create()方

還真的有Bug...

故事是這樣的... 我們公司寫的Silverlight應用程式在正式上線後,客戶用得很開心,對於這個技術和開發人員的努力頗有好評,正當我們被客戶讚的輕飄飄,準備明天跟客戶端的老大demo的時候,前線傳來一個令人錯愕的消息... 用我們寫應用程式的電腦會當...在客戶端3台不同的電腦測試,就像機器得了機瘟一樣,早上還OK,突然間下午全當了,只要進入某一個畫面之後, IE就當給你看,Chrome也死給你看,FireFox就懶得測了。 Demo在即,碰到這種事情,非出面不可了...詭異的是,在家裡連到客戶端的網站,一切OK,我們公司沒有一台機器有問題,都算是很順,只好去客戶那邊看看。到了客戶端,正如客戶所說,沒有一台電腦能夠正常執行,而且客戶強調,早上還OK,就到下午,全不能動了...>_< 這...也太誇張了吧。 測試結果正如客戶所說,很清楚明顯的Run Silverlight的瀏覽器就是卡在那邊不動。 那...到底在run什麼呢? 看不太出來,因為我們知道程式碼只是call一個WCF Services,並且把一堆字串傳到用戶端。當然,我們懷疑過字串的大小,但經過測試,其實才幾十k,比圖片小多了。況且早上都還OK,怎麼下午就不能動了,碰到網路傳輸瓶頸也不會這樣才對。 更詭異的是,如果有資料傳輸的瓶頸,那為何在我們公司OK呢? CPU / RAM / GPU / intranet performance 都測過之後,突然間想到,似乎客戶端所有的PC都是XP,而我們公司所有的PC都是Win7... 果然,在客戶端換了Win7之後,一切正常,回公司換了XP之後,IE當掉。同樣的一段code,怎麼會這樣呢?到底是什麼code有這麼大的魔力...答案如下: if(arg.Result.IndexOf("Info")==0) return; arg.Result是一個string, 如果有經驗的Silverlight developer應該猜的到,這是WCF Services的回傳值,很單純,內容就是字串。 那為何會讓XP當掉呢?又為何Win7沒事呢...答案是...我也不知道...不過好在我不是第一個碰到這個問題的人...請參考底下... http://connect.microsoft.com/Visua

LinqToSql 範例

前幾天在上課的時候,提到了微軟的ORM技術,當然談到了LinqToSql和ADO.NET EF。 過去習慣在.NET 2.0開發應用程式的學員們,自然對Linq語法不是很熟悉,但坦白說,一開始我也很不習慣,但改用Linq一段時間之後,開發速度確實提高了很多,很自然的,現在幾乎不管寫哪一種Code(SL, ASP.NET, class...etc)我依舊都會用到Linq... 連去學校上課也都捨棄ADO.NET直接教Linq,原因是,大一大二的學生,在具備了基本的OO概念之後,要存取資料庫,以Linq搭配ORM,可以省去了學習SQL語法的動作。 前幾天學員問到了Linq的語法實在不是很熟,例如Join怎麼下呢? 如何取得Max或avg呢?,有沒有可以參考的網頁,當然有,就在這裡了... http://msdn.microsoft.com/en-us/vcsharp/aa336746  (C#) http://msdn.microsoft.com/en-us/vbasic/bb688085  (VB) 分享

Windows Phone 7 - Mango (sdk 7.1 beta) First Look

你大概已經知道微軟準備釋出Mango了,前天微軟開了記者會,昨天連台灣的新聞播報了不短的時間(不過不少新聞是做成芒果挑戰蘋果之類的詭異比較...)。 微軟說芒果這個新版的Windows Phone 7作業系統有超過500項新的功能,上千個API可以讓開發人員使用,那到底有那些東西呢? 我們在發表會後立刻下載了新版(7.1 beta)的 SDK+模擬器(對,正式的芒果恐怕要秋天才能吃到)進行了 firs look test... 初步的嘗試,測試了模擬器的重要更新,錄成了底下的影片,沒有聲音,大家慢慢安靜欣賞... http://MediaServer1.studyhost.com/Video/WP7/Mango7.1/MangoFirstLook.wmv 我寫了三個測試App, 主要是,你會看到底下功能: 1.原生的中文輸入(手寫尚未出現) 2.模擬器支援accelerometer,可以模擬手機的傾斜度狀況 3.模擬器支援GPS,可以模擬手機的移動(這個有趣) 4.支援多工可以在手機上切換多個App(多工的部分模擬器還沒有100%支援,UI有點小醜) 模擬器的新功能讓開發人員可以更方便的測試你的App, 整個方便不少, 晚一些再介紹一些重要的API... 7.1 beta版的SDK在這裡... http://www.microsoft.com/downloads/en/details.aspx?FamilyID=77586864-ab15-40e1-bc38-713a95a56a05&displaylang=en enjoy it... 分享

在IIS上設定WCF Services VS 不讓小問題搞死你

前陣子,委外的廠商開發了一個.svc的WCF Services,佈署到我們的新機器上之後,怎麼也跑不起來,直接瀏覽時會出現錯誤訊息,廠商先前都沒有用過WCF Services技術開發過.svc服務,在開發環境VS2010當中確實都可以運行沒有問題,因此這個Issue又觸礁無法解決... 我們接洽的這位同事很可愛的在網路上找了這篇: http://technet.microsoft.com/en-us/library/dd632554.aspx 然後也設定了MIME,結果服務終於在瀏覽器上不會出錯,但卻根本沒法呼叫,只會出現blank text page, 因此我重新看了一下IIS的環境,最後執行底下指令: "%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" /i 就這樣,搞定! 原因當然是Windows Communication Foundation並沒有在IIS當中正確的建立 Metabase, 使得服務無法透過IIS給叫起來。 過去我們的合作廠商和同事(都是developer background),都在Hosting(或是Windows Azure)上架設網站,那些環境都是別人已經準備好的,所以當然不會有問題。然而卻從來沒有自己從頭到尾架設一個Windows Server,因此在最基本的問題上觸礁,且花了不少時間,直到客戶直接問我,為什麼環境架設那麼久,一直架設不好,回頭找員工討論,才知道卡在這個問題上。 員工知道這一定是一個可以解決的問題(不然其他Server怎麼可以run?),因此想自己解決,也不問身邊其他同事(怕被笑?),但又因為身上還有其他工作,所以這個問題就懸了快一周,一周的時間就這樣過去不打緊,對客戶來說他反映出來的是服務品質和效率,當我知道了之後覺得很遺憾,因為短短一行指令就可以解決的問題,卻讓客戶等了好幾天... 檢討這個狀況,發現基礎常識的不足,和資訊的不透通是最主要的原因,IT產業常常碰到很多的問題,每一個開發人員和IT技術人員每天都在處裡各式各樣的問題,一個問題處理完畢之後,能夠有log是最理想的狀況,但往往這些經驗是很難留在公司裏面(問題解決了很爽,寫L

Silverlight ComboBox的Hotkey功能

最近在做專案時,客戶問到操作界面的問題,希望ComboBox能夠有hotkey,這種需求是很難拒絕的,特別是很久以前的WinForm早就有這種功能了。 但不幸的是,Silverlight...沒有。沒有的原因是Silverlight的ComboBox比較強(嗯...好怪的邏輯唷),不過,是真的,因為Silverlight的ListBox和ComboBox裡面的item並不像是以前WinForm or WebForm只能是ListBoxItem, 現在Silverlight中的ComboBox的Item,可以是任何物件,例如簡單一點的String, 複雜一點的Calendar, 甚至可以讓每一個Item是多個物件的集合。 不過,這是ComboBox比較複雜且加上DataBinding的用法,那...假設ComboBox中的Items,根本就是很單純的ComboBoxItem或是String呢? 難道還是不能用HotKey嗎? 然而這時候,可能就需要寫段小程式了,去Hook ComboBox的KeyUp事件,在按下特定的字母時,將ComboBox的SelectIndex做動態的調整,要寫Code,不麻煩,但要能reuse就需要花點腦筋了。 不過令人興奮的是,Silverlight的Behavior技術,可以把這個功能封裝成可重複使用的原件,那,就設計成Behavoir好了... 不過正準備動手時,轉念一想,這麼常用的功能不可能沒有吧,Search了一下,果不其然,國外已經有寫好的套件囉,而且還含有Source Code呢...網址如下... http://gallery.expression.microsoft.com/RapidAccessKey Enjoy it... 分享

C# 101 - Cancel Event的設計

最近上課時,學員問到C#當中Event的設計,主要是希望能夠設計出類似WinForm視窗關閉時,那個帶有Cancel屬性的e參數,為此,該學員傷腦筋了很久。 為了避免學員內心受創,因此我緩緩地先述說了一段事件設計的歷史故事,成功轉移焦點後,再委婉告訴他其實不用設計,因為.NET從2.0開始就有了,直接繼承 CancelEventArgs 類別 即可。 程式碼如下: public class MyEventArgs : System.ComponentModel.CancelEventArgs { //你可以加上其他你需要的屬性 public string AnotherProperty { get; set; } } 而使用該參數時,只需要撰寫類似底下這樣的事件程式碼: public delegate void MyActionEventHandler(object sender, MyEventArgs e); public event MyActionEventHandler MyAction; 這樣設計出來的事件,在使用參數時就會具有e.Cancel屬性,而在我們觸發該事件的程式碼中,就可以透過底下這樣的Code, 來依照Cancel的值判斷是否要繼續後面的程式碼(這就是我們在WinForm的Closing事件中將屬性e.Cancel設為true之後,就不會關閉視窗的原因)... if (MyAction != null) { MyEventArgs arg = new MyEventArgs(); MyAction.Invoke(this, arg); if (arg.Cancel) { return; } ...其他程式碼... } 其實整個很簡單,但令人訝異的是,許多.NET Developer由於並不常寫Class,導致對.NET內建的許多類別異常的不熟悉。 已經很久沒有機會和學員討論到基礎的東西了,頗令我感慨的是,學員對MVC有興趣,對MVVM有好奇,但由於網路資訊的普及,已經不多Developer,還願意花時間把Programing 101的書籍翻開來好好閱讀了...網路上資訊確實很多,但由於都較為片段,不容易有系統的學習,容易使得開發人員的觀念2266。 可是,我很想

技術並非唯一的解決方案

投入資訊業到現在,已經數不清多少個年頭了,在這十幾二十年的歲月中,有幸在不同的時間擔任不同的角色,因此格外能夠體會技術人員的心情。 最近有機會到一些場合進行教育訓練,講授的是微軟新的雲端運算技術以及Silverlight開發技術,其中涉及n-tier概念以及物件導向程式設計,學員來自四面八方,很特別的背景,唯一的共同點就是都並非科班出身(詭異了,那資工資管畢業的人哪去了?),而技術歷史更是迥異,有ASP開發人員、有ASP.NET開發人員、Java開發人員、VB開發人員....etc... 原諒我這麼說,談到ORM、Class Design、Pattern等概念時,java背景的開發人員頻頻微笑點頭,顯然頗有認同之意,而大部分只寫過ASP.NET的WebForm開發人員似懂非懂,能夠抓到一個大概,但不太明白中間的道理和背後的原因,為何程式碼的需要延展性,如何提高重用性,為何要把這個機制設計成類別...似乎有些問號在腦袋裡... 其中有位ASP開發人員則在第一天中午就離開,跟我說,老師您講得很好,但是這些新技術我應該用不到,下回需要時再來請教您... 其實,這些路我都走過,我完全可以理解。(請相信我,這完全沒有對錯,上面這樣寫,跟開發人員的背景無關,其中也完全沒有任何的價值判斷) 我們這一票從Apple II/DOS時代開始寫程式的老人(不然,我要寫壯年嗎? XD) 我深深知道當年從ASP轉換到ASP.NET乃至於把程式改寫成n-tier架構的痛苦,但這麼多年下來,我也大約領略到了背後的甘甜,不過不同的是,我不再辯解,也不強調採用新架構開發系統的優點,每個人(每家公司)都有自己的路,即便不學新東西,也能找到自己的一條生路。 學習成本對每一個人來說是不同的,隨著年紀越長,我越來越少強調競爭力,畢竟電腦科技是應用科技,能產出結果、派上用場最重要,至於開發成本就見仁見智了。 在前一陣子受朋友之託,到一家非常大的企業,幫朋友看一個資訊系統。 主要是這樣,因為這個單位的資訊人員非常忙,這位朋友在部門中委託資訊單位建置了一個簡單的小系統,就是資料輸入和查詢,頂多加上一點分析,但系統建置完成之後,一開始可以用,不過久了之後想要做些調整,資訊單位卻遲遲無法配合,朋友明白這也並非IT人員的錯,因為工作量實在太大,救火都來不及了還改系統??? 我最近看到

感謝大家今天熱情參與...

感謝大家今天熱情參與由資策會所舉辦的『雲端嬉遊研討會』 http://www.iiiedu.org.tw/taipei/freetalking/cloud_201103.htm 在今天的場次中和大家分享了Windows Phone 7如何與微軟Windows Azure雲端運算技術整合,以及相關的三螢一雲應用程式建置經驗。 相關的投影片可在底下位置下載。 http://docs.com/B2Y9

在WP7/Silverlight當中接收JSON資料...

事情是這樣的,可能很多開發人員已經清楚,在Silverlight技術當中是不直接支援以ADO.NET方式來存取遠端DB的,關於這個部分,我在許多課堂中都有說明,隨著技術的改變與更新,現在有更好的方式在SL當中抓取資料,我們主要使用的是LINQ技術,在伺服器端可以配合LinqToSql和ADO.NET Entity Framework,所以我們會建議開發人員,在撰寫SL要呼叫的Web/WCF Services時,就直接透過LinqToSql or ADO.NET EF抓取資料,並且把抓到的資料直接以物件的方式回傳,這樣有一個超級棒的好處,就是在Silverlight去reference這個Web/WCF Services時,VS2010會自動在Silvelright端幫你generate這個物件的Type,然後你可以輕鬆的在SL當中使用這個物件,如同這個物件從伺服器端被傳到用戶端一樣。 例如: [WebMethod] public AddrssBook[] getAllData() { AddrBookDataContext db = new AddrBookDataContext(); var ret = from c in db.AddrssBooks select c; return ret.ToArray(); } 這邊的AddressBook類別是資料表名稱,是LinqToSql自動幫我們產生的類別定義。 當SL去呼叫這個Web Services時,在Silvelright端就會自動產生該類別(從Win/Web Form時代就是這樣),一切都相當容易。 但在這個多元化的時候,很可能有時候沒那麼單純,總是有很多奇怪的場合,你的客戶會要求你達成跨平台這個遠大的目標。這時候,你要考慮Services是不是有可能要讓其他開發技術(PHP? Java? @#$%^&*@#$%?)來呼叫...因此,把資料轉成大家看得懂並且容易解析的方式會比較理想,例如JSON...

SQL Azure Migration Wizard

圖片
最近,應客戶的要求要上雲端,雖然有部分客戶對於雲端的意義和價值還搞不太清楚,但為了提升企業的競爭力和知名度,上雲端這件事情是肯定一定要的。(雖然兩者之間似乎沒太大關係) Anyway, 總之呢,下半年會有更多的雲端概念出現。 但上雲端可不是隨便就上的,話說,先前我曾經說過,現階段對我來說,SQL Azure的CP值比較高,所以我在SQL Azure可以用了之後沒多久,就把很多在Web上的服務所用到的DB移上了SQL Azure。但是,這過程可是一波多折,截至目前為止,依舊沒有好的tool可以很方便的編修在雲端的資料庫(似乎,微軟覺得上了雲端的東西謹慎點好,沒事別改來改去)。對於眾多喜歡用tool不喜歡下SQL指令的Developer來說,實在是辛苦了點... 不過,在CodePlex上一直都有一套勉強可用的Tool, SQL Azure Migration Wizard  這套工具可以幫助你將某個SQL Database進行分析後,移轉(Migrate)到雲端的SQL Azure上。 最近剛好要操作,順便截錄畫面如下... 

突破舊有思維制約的創意

圖片
看這段影片,讓我回憶起了一些歷史,40年前,電腦是一棟建築物才能容納的高檔研究設備,有一家懷抱夢想的公司,把它帶入了家家戶戶的客廳... 30年前,那時候作業系統和套裝軟體是綁(配合)著電腦硬體銷售的,硬體的規格和OS密切整合,所以軟體發揮了很好的效能,但卻限制的設計的創新,也無法降低銷售成本,20多年前的某一天,有另一家帶著願景的公司決定只做軟體,把軟體從硬體切割出來,分開來銷售,這個動作,造就了某個在車庫裡創立的軟體公司這幾十年的基業,也成就了過去台灣十多年PC硬體產業的繁榮... 2000年代初有家公司在市場占有率大幅滑落,面臨存亡關鍵之際,因緣際會轉型成為mp3撥放器的終端消費產品的製造廠商,在2007年又跨足智慧型手機的領域,這一跨足,把原先在該領域佔有率最高的軟體與手機廠商殺的片甲不留... 這一切,都在過去這幾十年發生,起起落落、風風雨雨,回顧這一切,只能說,能夠突破舊有思維制約的創意,才是讓企業能立於不敗的關鍵...改變,往往從某一件事,或某一個人開始... 不過歷史也告訴我們,持續的領先和成功,是需要不斷的創意和挑戰自己才能夠實現,如果一放鬆,隨時都有競爭對手等著超越過去。 BTW,什麼時候微軟也拍一個讓大夥感動的影片,最近怎麼都是Apple的產品介紹影片比較感動人心咧??? 分享