發表文章

目前顯示的是 2013的文章

在Windows Phone (WP8) 中使用SignalR

圖片
ASP.NET SignalR【幾乎】讓我想丟掉Push Notification,你就知道它把訊息傳遞這件事情弄得有多簡單方便了。在這一篇我說明一下如何在WP8中使用ASP.NET SignalR,同時也稍微解釋一下 這兩天 寫的Code。 請回憶一下我們昨天的情境: 我們在伺服器端透過ASP.NET以SignalR寫了一組服務,主要是用來做聊天室(基本上是範例啦)的功能,包含了接收用戶端傳來的訊息(姓名、聊天文字),以及把訊息主動推送給用戶端(姓名、聊天文字),這樣的功能。 而用戶端就很單純的呼叫或傾聽這個服務。呼叫Send方法可以把用戶端使用者想要說的訊息傳給伺服器端,而伺服器端收到,則執行broadcastMessage這個動態方法,把訊息推送給所有傾聽的用戶端。 透過ASP.NET SignalR要寫這個服務端的機制,很簡單。 首先,建立一個Empty WebForm專案(當然你用MVC也行,之所以用WebForm,原因在 這裡 ),接著透過NuGet引用ASP.NET SignalR: 然後在專案中Add New Item,請找到Hub Class(VS2012 Update 4或VS2013): 建立出來的Class如下: public class MyHub1 : Hub { public void Hello() { Clients.All.hello(); } } 該類別繼承自Hub,這個Hub就是SignalR服務的Bass Class,你可以在其中建立自己的Method,如上圖中的Hello。 我們修改此類別,建立一個聊天室中,接收用戶端傳來訊息的Method,名稱為Send, 其程式碼如下: public class MyHub1 : Hub //SignalR主要部分 { public void Send(string name, string message) //接收傳送來的訊息 { //傳送訊息到用戶端 Clients.All.broadcastMes

在WPF中使用SignalR

圖片
 假日,在等著接送家人的時間空檔,順便寫了一個最近工作上會用到的範例,不知是Windows Client端的技術用的人越來越少還是如何? WPF的使用情境似乎沒啥網友討論,所以範例寫完之後順便放上GitHub,如果有需要的朋友們可以參考。   大概的需求如下圖,基本上非常簡單,用WPF與WP8作為用戶端( WP8的範例 我晚一點寫),存取以asp.net SignalR所寫的服務,底下先寫WPF的部份:      會寫這個,主要的原因是,我們公司有不少先前已經搭建好的ASP.NET WebSite(Web Services),這些個WebSite是以WebForm的方式開發的,而用戶端不僅僅只有browser,還有不少WPF/Windows應用程式。所以雖然打算用SignalR做訊息傳遞,但又不是現在大家比較常見的ASP.NET MVC Site(不過說真的, 其實MVC或WebForm根本沒差)。再加上Client端(consumer)又不是Web,而是WPF(和WP8),所以稍微寫個簡單例子整理一下,好讓公司的開發人員可以接手去做後續的部分。   先把寫好的範例放在 這裡 ,有需要的朋友可以參考。   背後的需求很常見,過去我們有很多以WPF或是XAML(不管是Silverlight/WP8/Windows 8 App...etc)開發的Application,在沒有導入SignalR之前,如果需要知道伺服器端的狀態或訊息,要嘛就是走web services polling、要麼就是走socket,不然就是用push notification(但只有Windows Phone/Windows 8 App才能享用)。因此,傳統的Windows/WPF應用程式(不知道現在還有多少人在寫?),要透過http方式來接收伺服器端主動推送過來的訊息不是非常容易。(搞polling的效能當然是差到不行,又得自己做些手腳提高效能,挺費力)   但SingalR讓開發人員現在 不用大腦就 可以很輕鬆地解決這個問題。   所以我們打算在Windows/WPF/Silverlight應用程式當中快速地加入一些由伺服器端推送訊息到用戶端的功能,因此有了SignalR+WPF的這種需求,也因此有了這個範例。  

China TechED 2013 北京、上海,順利完成

圖片
早上,順利完成了 China TechED 在北京與上海的場次,本來昨天測試的HDMI投影整片花花的狀況幸好沒再發生。由於China場次只有60min,原先在台北講了近兩個多小時的架構設計,只能挑著重點講,很拚。 不過至少沒有發生嚴重超時的問題,感謝上海與北京的朋友們熱情捧場,在早上第一個場次的時段,依舊給予相當熱情的支持。 課堂中的案例檔案可由此處下載: http://arock.blob.core.windows.net/blogdata201312/Examples.zip 相關的範例與影片可以參考底下連結: http://studyhost.blogspot.com/search/label/Enterprise%20Library 後續我會陸續把每一個範例以及China場次的內容更完整的整理後,再在這邊跟大家分享。

專業主義的秘密 - 練習

圖片
先前和朋友聊到,最近同時間看一套日劇 Dinner 和 著名的 The Clean Coder  一書,被其中的專業主義感動到不行。 The Clean Coder  剛看完第六章,章名是我從來沒有跟大家分享過,卻是我奉行已久的關鍵字 - 練習。 我絲毫不想透漏Dinner的劇情,以及Robert C. Martin在The Clean Coder ㄧ書中提到關於練習的描述。這些東西(看Dinner這部片以及The Clean Coder這本書)將是屬於你這個月最頂級的享受,我不忍心剝奪它。但我忍不住要說,Dinner男主角在每天下班後忙到深夜的事情、和Robert C. Martin用了一整章說的故事,說到底,都只有簡簡單單卻始終被大家忽略的一個字,練習。 這年頭,很少程式設計師會進行"練習"了,而且是重複的練習。但你絕對沒有意識到,這件是有多麼的重要...老實說,如果不是因為要上課,我自己大概也沒有機會有這麼深的體會。但是,在這邊我要跟大家分享的,就是這近十年來,我擔任教育訓練人員、作者、或是顧問時,一直奉行不渝的 -- 練習。 練習什麽呢? Robert在書裏面有說,像是kata, wasa之類的(這你要看書才知道,說過了,我不想剝奪你的樂趣)。但我想跟大家說我自己的經驗,那就是『研討會前的練習』。 如果你熟悉我,你就會知道我講話的速度應該不算慢,在研討會上,我盡可能在兼顧清楚的情況下,以最快的速度跟大家分享,同時間,每一場次的研討會,我都要求自己,要盡可能地與學員互動。 我們也都知道,大夥兒希望看到Live Demo,也因此,我的每一場研討會,幾乎都會有Live Demo的部分,拿今年TechDay Taiwan 2013的例子來說,架構設計的場次中,我簡單Demo了應用程式的分層開發、Unity Application Block的例子、Logging Application Block的例子。在WP8的場次中,我介紹了動態磚、Lock Screen、NFC、App Communication,其中都不乏Live Coding。 一場研討會的時間是70分鐘,其實講師們都清楚的知道,只要Live Demo當中,有一個環節不正確或出現意外狀況,幾乎就有可能讓整個Session毀掉,你不可能讓台下的學員看你在

如果人人都能寫程式???

圖片
今天早上看到這一篇文章: http://share.inside.com.tw/posts/2775 還有以前的一兩篇文章 http://mrjamie.cc/2013/10/17/programming-generation/ 讓我忍不住想講一些自己的觀察(感受),當然,從很久以前我就知道我其實是屬於少數人那一掛的,也就是說,當網友們極力反對或贊成某些事情時,我常常不知好歹的站在另一邊。最近我也常常FB一些其他人不太同意的論調...不過慶幸我生在一個還算和諧的時代,我不會因為這樣就被燒死...( 因此請大家也別太認真,我的論點絕對有可能是錯的,甚至很多時候,我也曾故意寫過一些些不是那麼精準和正確的內容... ) 早上看到的那篇文章,讓我直覺地想到,未來幾年我們很可能會開始活在一個人人都能寫Code的時代。說人人有點誇張,但比例勢必會大幅提升,原因很簡單,你有沒有發現,現在大家都在教別人寫程式??? 而且只要你願意,幾乎可以不用任何成本的學會寫一套程式(大概只需要花點錢買NB、和上網) 最近這十年,Coding這件事情有幾個重大的改變: 開發人員年齡層與進入門檻持續下降(年輕駭客、或是年輕億萬富翁比比皆是) 軟體開發資源突然間變多(拜internet普及、全球化資訊自由流通之賜) 通用軟體價值(實際售價)開始變低(這有個歷程,從30年前硬體收費軟體免費,變成20年前軟體很貴硬體便宜賣,到最近10年又有點變成軟體免費或隨著硬體銷售的趨勢) 軟體以服務的面貌收費 特別是第四點,很多人覺得似乎沒什麽,ASP或是SaaS都講了很久了,但這十年的改變異常之大,讓人措手不及。 以前獨立開發人員,可以在車庫裡面寫出一個mail收發軟體,然後放上BBS網路銷售,或是讓網友donate這個軟體。但這幾年這樣的模式還是有,但越來越限於特定族群、特定領域的應用程式。才不過五年前,大家搶著寫App賺錢,現在卻又說App不用IAP就賺不了錢!!! 終端消費者(End-User)開始視軟體為免費是理所當然的事情。 過去三十年來所建立的軟體有價的概念,隨著internet on line services普及而開始崩解,現在的終端消費者,越來越覺得軟體應該不能收錢,如果要跟我收錢,那最好你能提供像Google一樣的服務再說,否則程式設計師想收錢? 門

MS Enterprise Library 6.0 (四) - Policy Injection Application Block

如果說 Unity Application Block 可以算得上是一份美味的佳餚,那 Policy Injection Application Block 絕對稱得上是開發人員最華麗的盛宴了。 要介紹Policy Injection Application Block之前,得提醒讀者,建議您先熟悉先前介紹過的 Exception Handling Application Block 以及 Logging Application Block ,因為我們待會要利用 Policy Injection Application Block 來作一個應用大集合。 首先,請你回憶一下Exception Handling Application Block,以及想像一下Exception Handling Application Block會怎麼用在你的系統中,以及怎麼幫助你以一個單一的例外處理模塊來管理你開發的系統的Exception... 不要偷懶,想像一下... ... ... ... ... ... 好,接著我們回到現實面,你會發現,我們前面說過,可以透過Exception Handling Application Block來管理例外,提供一個統一的方式來處理各種不同可能的例外...這樣很好,我們的系統透過這樣的設計,已經大幅的將耦合性降低,並且提高了重用性,這樣還有什麽讓人不滿意的地方呢? 有的,當程式碼愈趨鬆耦合時,我們開始看try...catch不太順眼。此話怎說??? 請看下面這塊典型的try...catcah: public void MethodA() { try { int a = 10, b = 0; a = a / b; } catch (Exception ex) { //以Config檔案中的 "Policy" ExceptionPolicy設定來處理 var rethrow = ExceptionPolicy.HandleException(ex, "Policy"); //如果設定檔說要重丟例外,就重丟 if (rethrow) throw;

MS Enterprise Library 6.0 (三) - Exception Handling Application Block

圖片
有時候心情好,忍不住就多寫幾篇Blog。(當然,心情比較差的時候,可能十天半個月沒辦法安安靜靜的把一些東西整理出來) 前面錄了兩段 Enterprise Library 的介紹影片,分別談了 Unity Application Block 和 Logging Application Block ,這一篇緊接著談Exception Handling Application Block。 由於時空的限制,我現在所在的位置沒法錄製影片,所以只好乖乖用寫的了。 如果可以讓我選擇,我喜歡錄影片遠超過寫文字,原因很簡單,因為我話多,blog有時候忍不住就多寫了幾百字,但這年頭大家都不看字的,害我覺得寫了很無聊。寫了沒人看不打緊,花的時間很多,年紀大了越來越懶,用講的比較快,還可以當作上課的彩排甚至教材,所以我喜歡錄影遠超過寫文章。 岔題了。 Exception Handling Application Block,顧名思義就是系統中處裡例外的模塊,大家都知道,我們會在程式碼中加上try...catch來處理例外,程式碼常常會像是這樣: try { int a = 10, b = 0; a = a / b; Console.WriteLine("done!"); Console.ReadKey(); } catch (Exception ex) { //如果發生例外...就... } 這樣的程式碼沒啥太大的問題(除了因為是範例所以一定會發生例外之外...)。 但如果像上面這樣的程式碼一多,我們就會發現,每一個try...catch裡面都是另一段不受管理的複雜的錯誤處裡邏輯,可能是寫log、可能是發mail、可能是retry...,不僅如此,一旦例外處理區塊寫死之後,例外處理區塊常常本身就是一個大累贅。 還有,發生例外的可能性和類型很多元,上面這段程式碼非常簡單,只可能得到一個 "除以零" 錯誤

MS Enterprise Library 6.0 (二) - Logging Application Block

圖片
Logging Application Block,其實是相當簡單的機制,基本上就是把紀錄Log這件事情,設計成一個獨立的模塊,讓開發人員可以方便重用。   而 Enterprise Library 當中,方便好用的地方在於,已經內建了多種Listener供開發人員使用,讓你將Log寫入各種不同的位置,諸如Event Log, File, DB, eMail...etc,如果有需要,您也可以自行繼承建立新的Listener,衍生出新的紀錄輸出位置。   要如何利用 Enterprise Library 中的Logging Application Block,輕易的在程式碼中透過單一的方式寫入Log,並且支援可隨時透過設定(不需要調整或修改程式碼)即可動態調整Log寫入位置,或增減各種不同的Log存放位置呢? 底下這段影片可提供您參考。 如果你的網速可以,建議以720p解析度觀賞: ( BTW, 如果你覺得我前面簡介Enterprise Library講得太囉嗦了,可以從 3:38 開始看Logging Application Block)    

MS Enterprise Library 6.0(一) - Unity Application Block

圖片
開發人員在自己很辛苦的寫Code的同時,如果有時間,不妨多參考一些經典的套件或組件,從其中不僅可以學習到如何更快速有效的開發出中大型系統,同時間也可以參考前人的智慧,吸取他人的經驗,用來開發自己(公司)的套件或函式庫。 每每上課時,聽到開發人員撰寫代碼的重用率,幾乎都低到不行,即便專案的形似類似,卻常常重寫系統,不免有些感慨。如何能夠讓開發人員以更少的時間,完成更有價值的工作成果,實在是開發人員應該要關注的技巧。 底下這段影片,是答應學員要錄製的,內容來自我在今年(2013)Microsoft Techdays Taiwan研討會上介紹 Enterprise Library 的一個小片段,以一個具體的HR系統,薪資計算作為實例,來討論Unity Application Block的具體應用,當然,這個的背後就是IoC(Inversion of Control)與DI(Dependency Injection)的實現。 研討會中,總是用飆車的速度把原本要講超過半小時的東西,在5-10分鐘講完,對學員來說難免有些囫圇吞棗,導致吸收不良,有機會我盡可能把研討會中的內容,再整理成影片分享。 這段影片錄的不是很理想,甚至有些解釋不是很到位,但請原諒我時間真的不夠,沒能抽出時間再剪接修改(我的影片從來都是一次錄完,中間失敗了就整個重錄),只好先以這個版本拋磚引玉一下,希望大家別介意。跟以前一樣,如果你覺得影片的內容對你有些幫助,就多一點分享給其他人,如果有需要改進的地方,請直接mail給我囉。  如果你的網速可以,建議以720p解析度觀賞: ( BTW, 如果你覺得我前面講得太囉嗦了,可以從 5:24 開始看實例 )

techdays 2013 - 圓滿達成

很高興今年 Techdays我的兩個場次 在幾乎沒有任何意外的狀況下,總算順利完成了。 今年的主題有兩個部分,分別是: 開發主管的架構設計第一課 - 善用 Enterprise Library 6.0 及 Patterns & Practices 這一堂課我自己很喜歡,準備了非常多的內容,導致大超時(意料之內),因為實在覺得砍掉太多的投影片很捨不得,其實比起我先前準備的內容,大概還是砍掉了近五十張slides,我會找時間把完整的版本,以及錄好的展示影片陸續的提供給大家。 Windows Phone 8 開發深入解析及實用技巧介紹 這一堂課則是WP8新功能的介紹,從重要的動態磚、螢幕鎖定、中文語音辨識、App to App Communication、到近場通訊(NFC) 。我盡可能在有限的時間內把WP8重要的功能展示給大家,並且介紹程式設計的方式。 這兩場的投影片、操作影片、範例,我會陸續提供給大家。 update 2013/9/28 : 今年的slide會統一由techdays主辦單位提供,請開發夥伴們再稍等一下囉。 update 2013/10/03: Techdays Taiwan 2013 material 相關下載位置 http://technet.microsoft.com/zh-tw/hh524389(v=msdn.10).aspx

假日撰寫吾Code,不亦說乎 ; 寫Code不問時程,不亦樂乎 ; Code而不求天下知, 不亦君子乎~

圖片
假日撰寫吾Code,不亦說乎 ; 寫Code不問時程,不亦樂乎 ; Code而不求天下知, 不亦君子乎~ 寫程式真的是一種 樂趣 。 不知道你是否還記得年輕時候的熱情? 如果不問目的,不趕時程,假日在海邊或咖啡廳,面對著往來的人群,亦或是看著山嵐聽著鳥語聞花香,然後寫著只是為了好玩~全然無用(沒有商業目的)~不趕時程~沒有壓力地寫著程式,真的是一種外人無法理解的享受。 我常常在想,一個Truly Developer,會不會到死前最後一刻,即便無法下床,行將朽木,但腦袋裡還有那麼瞬間想著的是,某一段自己不為人知的程式碼,或是超越時代的架構設計? 我記得十多歲時候的自己,那時寫程式真的沒有任何目的,只是想去實現一種心裡想到的可能性。當時,腦袋中有數不完的創意和想法(從現在的我來看,當年的想法絕大多數都沒太大的商業價值),等著我嘗試和實現,每天都忙著在電腦前驗證腦袋裡的想法是否可以通過編譯,幻化出螢幕上絢麗的各種彩蝶... 或許隨著年紀、工作、職位的改變,導致程式設計和架構規劃,慢慢變成必須要每天與時間賽跑、與完全沒有系統美感的客戶折衷妥協、與專顧利潤不管品質的老闆拉扯... (但這幾年我自己的角色轉變,也慢慢知道客戶和老闆的苦衷...) 但偶爾,我是說偶爾,你該為自己規劃一個專案,沒有時程壓力、沒有獲利考量、沒有資源或技術限制,安排幾個假日去實現自己的夢想...或許,你會慢慢回憶起當年的熱情... 找到可以持續的動力... ---------------------------------- 系列文索引: https://studyhost.blogspot.com/2019/02/index-of.html 如果需要即時取得更多相關訊息,可按 這裡 加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

元件存放區已損毀 Error Code: 0×80073712

圖片
資訊科學以及開發人員的養成訓練和經驗告訴我們,發生問題一定是有背後的原因的。網路上常常有人歸納於人品、或七月沒拜拜、或放在Server上的零食過了保存期限( 或是加了塑化劑 ),我要說,這都是不科學且沒有根據的。 話說自從我買了新的NB之後,一直沒有認真寫程式,可能是因為上帝覺得我這樣混也不是辦法,所以強迫我非得寫個App不可,我在蘑菇了幾天之後,終於重新把開發環境和WP8 SDK裝起來,過程出奇的一切順利(誰說人品有問題來著???)... WP8模擬器需要Hyper-V,這不是問題,我可是i7的ultrabook呢... 正當我這樣想的時候,shit,Hyper-V開不起來,以前沒看過的錯誤訊息... 元件存放區已損毀     什麼鬼啊,本著實事求是的精神,我決定要認真找原因,我不相信跟今天大樓普渡我理都不理有什麼關係。 經過3 0 分鐘後, 找出解法了 ,首先,用管理者身分開啟Command Line,接著輸入: DISM.exe /Online /Cleanup-image /Scanhealth DISM.exe /Online /Cleanup-image /Restorehealth 執行結果如下:  搞定。 後記:這個問題其實估計跟預裝的Windows 8我把它升級成Windows 8 Pro有關。如果重新安裝Windows 8 Pro,應該不會有這個問題,本著實事求是的精神,這個測試,我留給其他人做了。 後後記:話說我Search的時候看到 這篇 ,這苦主發生的問題跟我一模一樣,連機器都是同一款,我在想,說真的,最近這十年因為internet的出現,世界變小了,學習變快了。如果是二十年前,在地球兩端的兩個人,可能得各自為了碰到的問題傷腦筋,但現在,我只是Search,就可以找到別人留下的足跡...一方面感謝,一方面感慨...

你為了什麼寫Code呢???

圖片
在網路上看到一個小朋友提到最近看到一篇文章,講到的程式設計師的薪資。這位寫PHP的同學,發現自己可能領到的薪資相較於用其他技術的開發人員低,比較起來是倒數的,有些忿忿不平。 原始文章在這裡: http://www.inside.com.tw/2013/08/23/average-income-per-programming-language 姑且不管上面這篇寫的到底對不對、這樣的統計數據有沒有道理,其實...我想說的完全是另一件事情。我想談談為何軟體業不賺錢,以及程式設計師的薪資問題。或者這麼說吧,你真心想在這個行業繼續奮鬥,卻又真的覺得自己薪水不夠想要高一些...OK,那你可以繼續看下去。 在台灣,在今天這個時代,若你只『專注於』寫程式,是不太可能賺到大錢的。可以溫飽、可以糊口、也可以集畢身積蓄買台重機...這都OK,但若你想買台北市的房子、或買買BMW、Benz玩玩,那可能就輪不到你了。年輕的時候,你也許會覺得無所謂,但到了一定的年紀之後(30,35歲),你會慢慢發現這似乎怎麼有點不太對... 也就是說,我們在研討會上跟大家說,寫程式要有愛,學技術要有愛,不然撐不久,這不是說著玩的,是認真的...老師在台上講、沒睡著的,就應當聽。 這一路以來,我們沒有轉行,不是因為覺得這行業可以幫我們賺到大錢、或是因為手上掌握了哪種關鍵的應用技術、還是在台上很風光、可以享受學員崇拜的眼神,或是在案子裡面可以呼風喚雨...從來都不是(因為都沒有)。 這一路以來,我們沒有轉行,是因為我們習慣了看世界的時候,用的是與世人不同的另一種角度;我們習慣了看到問題,就思考著如何可以第一時間找出答案;我們習慣了出現新的技術時,以朝聖的心情蒐集、整理、比較、分析、再消化吸收;我們習慣了會心這小小的社群裡面的人,才能理解的幽默。當然,碰到一些IT或3C阿宅希望我們幫忙解決一些電腦問題時,偶而也享受著這些不明就裡的外人,剎那間完全搞錯對象也搞錯方向的崇拜。(有統計指出,幾乎每一個Developer,都幫女生修過電腦...) 但為了賺大錢? 很抱歉,一直都不是,也從來沒機會。 我也曾經也有著不明白的時候,要知道,一個商業Developer的養成其實相當不容易。除了,必需學習的技術少說也數十種,大多數Developers在養成過程中,看過的專業書籍數以百計,而技術

你的財寶在哪裡,你的心也在那裡...

圖片
部落格中好久沒有寫寫心情了... 主日,早上主領敬拜的弟兄提到,最近搬家,過去視為珍藏的許多論文、書籍、和知識,在搬家過程中全都捨棄了,過去前幾年覺得重要的,如今看起來卻似乎都沒那麼有價值... 碰巧前一陣子我也剛搬完家,30歲的時候搬家,跟40歲的時候搬家,最大的不同是,很多東西我開始覺得我搬不動,也不想搬了:或許不是實際的重量多重,而是我覺得這些東西放在我生活裡、或是我生命裡,它無形的重量太重,佔有的空間又太大,讓我很容易忘了其他更重要的事情... 所以這次搬家,我丟掉的比上次搬家時所丟的又多更多了...連我自己寫的書,都只留下了一本,更不用說其他的了...搬完之後,老婆跟我說:我們家徒四壁耶..我說:是啊,你不是一直想要有更大的空間嗎? 現在有沒有很清爽??? :) 那時候,我心裡在想,我們手上掌握的技術、整理的知識、考完的認證、拿到的獎盃和獎狀...種種引以為豪的成績,真的那麼重要嗎? 我現在拼命努力的,會不會幾年以後,搬家時,又毫不猶豫地被我捨棄了呢? 我想到聖經上的一段話:「不要為自己積攢財寶在地上;地上有蟲子咬,能銹壞,也有賊挖窟窿來偷。只要積攢財寶在天上;天上沒有蟲子咬,不能銹壞,也沒有賊挖窟窿來偷。因為你的財寶在哪裡,你的心也在那裡。」 或許你不是基督徒,但上面這段話,我最喜歡的是:『你的財寶在哪裡,你的心也在那裡』...對你來說,你的財寶是什麼呢???  我有一個好朋友,結婚之後,工作還是佔據他人生當中不少的時間,他和他的另一半,都是非常忙碌的中階主管,但自從生了孩子之後,我明顯的地看到了他們的改變... 年輕時,我們常常談著將來要怎樣創業,或是合夥開家公司,或是用技術改變這個世界:自從小孩出生之後,他最在意的是孩子的健康、關注的是怎麼教育對孩子最好、掛念的是小孩將來的成長規劃...創業的事情我當然也不再提了,他只希望在這一波景氣低谷中,能夠確保工作的穩定。 我沒有小孩,但我想我能理解這樣的心情。 前陣子和剛結婚的年輕工程師聊天,他剛進到一個嚮往已久的工作環境,身邊的同事就是以前崇拜的技術明星,過去在大型研討會的舞台上才能夠瞻仰的風采,現在每天出現在自己的身邊,興奮的程度恐怕跟中了尾牙頭獎差不多... 我聽了快一個月他述說自己公司顧問講師們的輝煌事蹟、風光的專案經歷、帶有能力與強大說服力的講演風采...

在Web Form專案中使用Rzaor上Azure WebSites的問題

圖片
先不談問何需要在WebForm當中使用Razor WebPages,這一篇主要還是討論到的問題和解決的方法。 首先要在WebForm中使用Razor不是太大的問題,建立一個HTML Page把副檔名直接改cshtml即可: 接著我們就可以撰寫Razor語法了(我找一天完整一點介紹Razor以及他的意義,但還沒寫之前,gelis的 這一篇 不錯,如果你喜歡讀英文,可以看 這篇 )。 OK,撰寫一段簡單的程式碼如下,結果一執行,馬上發生錯誤: 我們很乖的依照指示,到web.config中改成: <configuration> <appSettings> <add key="webPages:Version" value="2.0"/> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> </configuration> OK,可以work囉。 但悲劇發生在上Azure WebSites時: 本來以為是Azure websites看不懂cshtml,還我改了一陣子MIME設定,後來想想不對,如果看不懂就應該不能run MVC 的razor才對,所以又轉往另一個方向嘗試,折騰了半天,原來Azure websites尚未支援2.0。 立馬到Azure WebSites設定畫面調整看看: 設定完成之後,搞定囉。 cshtml的razor頁面可以混在WebForm中上Azure囉... 先寫到這邊(其實還有一個在cshtml page中存取資料的問題...改天繼續) ================================== 沒事幹嘛在ASP.NET WebForm中混入Razor呢? 其實我也有點掙扎。 這一陣子有個案子是以MVC來設計,開發的同仁跟我說,選用MVC其中一個原因是他討厭WebForm中的WebControl,總是沒有辦法隨心所欲的調整UI,不管套入CSS或

ASP.NET Reporting - 如何讓SSRS中TextBox的Go To URL Action中跳新視窗

圖片
SSRS對於ASP.NET開發人員來說實在是一個很好的工具,畢竟,對很多MIS/IT所服事的大老闆來說,資訊系統 唯一 的價值,其實就是那一份份的報表。 如果你有用SSRS,一定會發現文字方塊是可以設定成超連結的,關鍵在於TextBox的Action屬性,只需要設定成Go To URL,然後在Select URL那邊放入網址即可: 但你找了半天,居然沒有可以設定點選該URL的Target設定位置,那...如果要開新視窗怎麼辦呢??? 好問題!!! 其實,這個Go To URL有一個更有趣的設定,可以解決這些問題,你可以直接在Select URL中,輸入底下內容: 沒想到,居然可以輸入JavaScript,如此一來,在報表中點選該連結,就可以開新視窗囉。 ============================================================= 既然可以開新視窗,那可不可以更進一步的??? 答案也是可以的,SSRS真是個好物。

ASP.NET WebForm Forms驗證整合Google oAuth驗證

圖片
ASP.NET從4.x開始,支援不少重要的機制,也不知道是因為用的人變少了,還是因為大家都沒空,所以ASP.NET WebForms相關的中文post比起其他技術相形之下少的可憐。 最近開發團隊中有夥伴需要透過ASP.NET WebForm來整合Google/Faccbook/MS的身分驗證,當然,我們都知道現在大家都支援 oAuth 或 OpenID 了,最理想的狀況是讓我們家的網站跟MS自己的網站一樣,User只需要登入一次,就可以跨網站跑來跑去不需要重新登入,同時,我們的網站也不需要負責維護用戶的帳號密碼,而是透過Google/Faccbook/MS幫我們做身分驗證。 (有空我會畫張圖,上面這張是出自oauth.net) 簡單的說,就是我們的網站的用戶只需要有Google/Faccbook/Microsoft Account等帳號,即可登入我們的網站,而我們的網站也不需要傷腦筋身分驗證的事情,畢竟,驗證是一個可能導致風險的機制,也是駭客進入你的網站的第一道防線,如果隨意設計可能後患無窮,與其自己辛苦,不如透過oAuth機制幫你驗證用戶身分。 前面說過,在ASP.NET要實現這樣的功能,從4.0之後的版本,大幅簡化了工作流程,甚至,你現在只需要透過DotNetOpenAuth.AspNet套件即可完成。 我們以底下這個ASP.NET WebForm 4.0與Google帳號整合的驗證機制來示範,我們建立一個新的WebForm網站: 我刻意用ASP.NET Empty Web Application,因為這個範本比較乾淨,甚至連app_start都沒有,這樣比較容易說明。 接著,請進入到我們的ASP.NET專案,在VS2012中開啟Package Manager Console(主選單--> Tools --> Library Package Manager --> Package Manager Console),並依序輸入: Install-Package Microsoft.AspNet.Membership.OpenAuth   和 Install-Package DotNetOpenAuth.AspNet 輸入後,VS2012會執行一些動作... 你會發現Visual Stu

升級舊版 Visual Studi 2010 的 SQL Express .mdf 檔案到 Visual Studio 2012

圖片
上課的時候,我們常會讓學員用SQL Express來開發或測試ASP.NET應用程式,但是換了新的開發環境之後,你可能會發現,Visual Studio 2012開啟舊版的.mdf檔案會發生底下錯誤:   這時候,若你要升級舊版.mdf,可以在Server Explorer中,點選該mdf:     按滑鼠右鍵選擇【Modify Connection...】,接著選【Advanced】:   接著再出現的Advanced Properties視窗中按下OK,然後Advanced Properties視窗關閉後,再按下OK,接著會出現底下畫面:     一旦按下Yes,該.mdf資料庫就會轉換成新版的囉,接著我們就可以在VS2012中正常存取了。(注意:但Visual Studio 2010就不能讀取囉)   如果你不想轉換而是想共用,也可以參考底下說明: http://msdn.microsoft.com/en-us/library/hh873188.aspx    

反對政府以任何理由封鎖任何網站!!!

圖片
最近一直看到這個訊息,智慧局好熱心主動的想打擊盜版,然後好的不學學些惡霸國家封鎖自己人民的網路,看著看著,我心裡就更納悶,這到底是怎麼回事??? 這是什麼邏輯? 為了保持理性,我努力的從智慧局的角度想這件事情,但依舊想不通,想要防止盜版,所以就封鎖(擋掉)國外的網站,讓台灣島上的人看不到某些架設在國外的網站的內容,可是,這樣能保護什麼呢? 充其量不過就是保護台灣廠商(或外國廠商)在台灣這塊小島上的獲利,讓這些廠商能夠賺得到台灣人的錢,但這樣的保護真的有價值嗎? 誰都知道台灣是個小島,上面沒多少人,不管是賣電影賣唱片賣什麼玩意兒,台灣都只是全球市場(或全球華文市場)中的一小塊,政府你放著全世界那麼大一塊95%的市場在盜版不努力去想辦法(不管是無力防堵或不想防堵),反倒把腦筋動到台灣這塊小市場來? 然後美其名是保護智慧財產權? 這是哪個少根筋的人想出來的主意呢??? 這是一個全球化的時代,台灣所有的產品(不管實體產品或文化產品)都要靠外銷,都要想辦法賺到外國人的錢,才能夠在這個時代中存活。只靠政府保護(還要犧牲掉台灣人連上國外網站的權利)才有辦法存活的廠商,非得賺台灣這一個小島上的人民的錢,才能夠生存下來的公司,真的在全球上有競爭力嗎? 真的有必要附上這個(犧牲台灣網路自由)的代價,動用這樣的手段,去做這樣的智慧財產保護嗎? 政府要幫上這些智慧財產所有權人的忙,應該是花更多的力氣去幫這些廠商做全球行銷,讓全世界台灣以外的那99%的人,喜歡且更方便的購買台灣的產品。沒辦法做到這些,只能反過來限制自家人民的權益,政府單位做到這種程度,真的還有存在的價值嗎? 因為國外廠商建立的平台,讓我們寫的App可以在全球市場賣,對於讓我們的App能夠跨上全球舞台,在國際上行銷,台灣政府有幫上哪一點忙? 報告,實在是少的可憐!!! (偶而可能還扯扯後腿,造成廠商收款上的困難) 我當然也不喜歡自己的產品被盜版,我們也不喜歡某些地區的人總是連0.99美元也不花就破解和盜版App,但如果哪一天政府跟我說,要保護我寫的App在台灣的銷售權益,所以好心的幫我封鎖國外某些特定的App盜版下載網站,讓台灣人都上不去...呵呵(冷笑),我只會說你省省吧,我一點都不會感激政府,因為全球其他 99% 的市場如果都可以下載破解版,賺台灣這一點零頭你以為真有什麼意義嗎? (而且很可能因為

[研討會]微軟實戰課程日 Demo影片與Slide

圖片
今天是有史以來第一次公開舉辦的MVP Open Day 微軟實戰課程日,整個議程非常的精彩,除了早上的座談之外,下午有十多堂的分堂課程,由不同領域的MVP,為參與盛會的朋友們介紹自己熟悉的技術。 http://www.microsoft.com/taiwan/newsletter/library/edm2013/msrealworldexperiencedayweb/msrealworldexperiencedayweb.html 這種盛會不僅僅是破天荒第一次,在台灣也是除了付費參加的TechDay之外,少數能夠聚集這麼多各領域不同講師的場合。 很高興有機會在今天和大家一起分享 雲端 與 行動裝置 的應用,相關的影片與Slides,可從底下位置下載。 [ Slide ] slides中多出來的內容是由於研討會上肯定沒有時間講完,因此把相關的要點整理出來提供學員們參考。 由於時間的關係,實在沒有辦法好好的完整介紹整個Azure Mobile Service,對我來說是一個遺憾。不過底下的影片中所展示的,透過Mobile Service來快速的為企業設計出一套工作分派系統,橫跨Web、Win8App、WP8App(如果你想要,也可以用iOS或Android),並且可以讓開發人員大幅減少撰寫服務的負擔,是未來值得一看的雲端應用服務。 影片:透過Azure Mobile Service設計工作分派系統   課堂中的DEMO使用到的背景技術,可以參考 這邊 。

[研討會] MentroTrust集英信誠 資料庫與.NET開發技術論壇

圖片
很開心受邀在集英信成年度舉辦的研討會中,和大家分享雲端與行動裝置整合的議題,今天和大夥聊的很開心,期待有機會再和大家分享最新的技術心得。 Windows Azure相關的resource可以在底下網址找到: Free Trial Link:  http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=WWE001_1032548834 MSDN Subscription Offer:  https://www.windowsazure.com/en-us/pricing/member-offers/msdn-benefits/?WT.mc_id=WWE001_1032548834 BizSpark Offer:  https://www.windowsazure.com/en-us/pricing/member-offers/bizspark-benefits/?WT.mc_id=WWE001_1032548834 MPN Offer:  https://www.windowsazure.com/en-us/offers/ms-azr-0002p/?WT.mc_id=WWE001_1032548834   課堂中的DEMO使用到的背景技術,可以參考 這邊 。

[研討會] GAWB 2013 Hands on lab slides & video

圖片
今天下午微軟在UUU舉辦了與全球同步GAWB Bootcamp,底下是我負責擔任講員的Slides以及Hands On Lab操作影片~ Slide 底下影片均可放大用HD方式瀏覽,請自行切換為HD模式放大觀賞。 Exercise 1:使用Azure Mobile Services - Data   Exercise 1.1:Azure Mobile Services – Dynamic Schema Exercise 2:使用Azure Mobile Services - Push Exercise 3:使用Azure Mobile Services - Scheduler Exercise 4:使用Azure Mobile Services - Auth  

1/28 資策會上手營

1/28 資策會上手營 如何將Web移到Cloud (WebRole, Webiste, VM) 相關投影片與教育訓練影片如下: 投影片: 下載 快速的建立Azure Web Site,將網站移轉上雲端,參考 這裡 。

[課程] Windows Phone 8開發上手營

圖片
還沒寫過WP8的App嗎? 或是想跨入XAML, Windows Phone的開發卻不知道該如何上手? 又有免費的課程可以報名囉...  [ 報名位置 ]