<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US"><title type="text">ericsk.net</title><link rel="alternate" type="text/html" href="http://blog.ericsk.org" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ericsk" /><subtitle type="text">All about Eric</subtitle><updated>2013-03-03T06:52:16+00:00</updated><generator uri="http://wordpress.org/">WordPress</generator><feedburner:info uri="ericsk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><id>http://blog.ericsk.org/feed/atom</id><geo:lat>25.02</geo:lat><geo:long>121.38</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry><title type="html">告別微軟二年生</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/h5L8s0dXwuM/1841" /><category term="關於工作" /><author><name>ericsk</name></author><updated>2013-03-02T22:52:16-08:00</updated><id>http://blog.ericsk.org/?p=1841</id><summary type="html">這是我踏入職場的第二次滿兩年，感受卻是大不相同。一年前寫過「微軟一年間」，周年留下記錄已經變成習慣了。在即將滿兩年 (2011 年 3 月 1 日我正式成為 Microsoft 的一員) 的日子，剛好最近又要對自己的 Role Model 作一番檢視，公司的檢視方式就不在這裡多作說明，網誌上就用自己的方式來作檢視吧！ 隨著 Microsoft 在這一年來不斷釋出新的產品，我的工作內容也就變得「多元」起來，不僅僅是被 promoted 之後有更大的責任，很多作法或是決定都必須要跟著「重新發想」，過去我也像「一般的讀書人」一樣，做事、做決定都瞻前顧後、害怕犯錯，而且又容易沉浸於過去的成功經驗，以致一直難以打一次漂亮的仗、或是作出一件令人振奮的成績，但更巨大的壓力讓我必須採取更積極的作法 &amp;#8212; 勇於嘗試、面對失敗，我們雖然在寫作文時都會寫出「失敗為成功之母」，往往一腳踩進讀書人的仕途無間道之後，就沒有那麼勇敢了。寫到這裡，便很感謝我的老闆願意讓我不斷嘗試、我的同事們 (包括實習學生) 都願意支持我偶而提出的新作法，我知道我們都相信大家都是為了大家好而努力的。 那我的自我修煉呢？其實我一直提醒自己：「希望我不要有一天需要特別提醒別人『我是有技術能力』的人。」所以我還是會努力的找機會抓時間鍛鍊自己的技術能力，這一年來，除了原本工作上就會研究的 Windows 8、Windows Phone、Windows Azure、IE/HTML5 之外，同時也持續複習精進 Web 開發技術 (還有熟悉 Windows Azure) 而作了「Visual Studio 2012 女孩」、「IE10 Hackathon」、「Windows App 開發嘉年華」還有「MSDN 開發訓練營」等網站，還有 Windows Phone 上面的「我愛微笑單車 WP7/WP8 版」、以及一些還在 github 上努力與尚未公開的程式們。除了練功、真真正正熟悉這些平台以外，也是要持續地學習技術，才會在技術面前表現謙卑，因為這一切都不是那麼簡單的。 我希望多年之後我不是說出：「我以前也是寫程式的，這很簡單吧&amp;#8230;」 而是「這個我前幾天才實際動手做過一次，真的有很多眉角要注意呢！」 工作愈久，愈是覺得自己需要進步的地方還是很多，也希望目前持續會與我在 face2face、internet 上互動的朋友持續給我指教，因為你們都有我沒有學習到的專業能力！雖然不知道這個系列文會寫幾篇，但只要是領薪水的一天，我還是會持續往「稱職的員工」努力，不斷使用日劇男主角的特殊能力：樂觀、堅持、不放棄來面對工作上的每一天！ 加油，艾瑞克！</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1841">&lt;p&gt;這是我踏入職場的第二次滿兩年，感受卻是大不相同。&lt;span id="more-1841"&gt;&lt;/span&gt;一年前寫過「&lt;a href="http://blog.ericsk.org/archives/1459" title="微軟一年間" target="_blank"&gt;微軟一年間&lt;/a&gt;」，周年留下記錄已經變成習慣了。在即將滿兩年 (2011 年 3 月 1 日我正式成為 Microsoft 的一員) 的日子，剛好最近又要對自己的 Role Model 作一番檢視，公司的檢視方式就不在這裡多作說明，網誌上就用自己的方式來作檢視吧！&lt;/p&gt;
&lt;p&gt;隨著 Microsoft 在這一年來不斷釋出新的產品，我的工作內容也就變得「多元」起來，不僅僅是被 promoted 之後有更大的責任，很多作法或是決定都必須要跟著「重新發想」，過去我也像「一般的讀書人」一樣，做事、做決定都瞻前顧後、害怕犯錯，而且又容易沉浸於過去的成功經驗，以致一直難以打一次漂亮的仗、或是作出一件令人振奮的成績，但更巨大的壓力讓我必須採取更積極的作法 &amp;#8212; 勇於嘗試、面對失敗，我們雖然在寫作文時都會寫出「失敗為成功之母」，往往一腳踩進讀書人的仕途無間道之後，就沒有那麼勇敢了。寫到這裡，便很感謝我的老闆願意讓我不斷嘗試、我的同事們 (包括實習學生) 都願意支持我偶而提出的新作法，我知道我們都相信大家都是為了大家好而努力的。&lt;/p&gt;
&lt;p&gt;那我的自我修煉呢？其實我一直提醒自己：「希望我不要有一天需要特別提醒別人『我是有技術能力』的人。」所以我還是會努力的找機會抓時間鍛鍊自己的技術能力，這一年來，除了原本工作上就會研究的 Windows 8、Windows Phone、Windows Azure、IE/HTML5 之外，同時也持續複習精進 Web 開發技術 (還有熟悉 &lt;a href="http://www.windowsazure.com/zh-tw/" target="_blank"&gt;Windows Azure&lt;/a&gt;) 而作了「&lt;a href="http://aka.ms/vs2012girl" title="VS2012 女孩" target="_blank"&gt;Visual Studio 2012 女孩&lt;/a&gt;」、「IE10 Hackathon」、「Windows App 開發嘉年華」還有「&lt;a href="http://devcampstw.azurewebsites.net/" title="MSDN 開發訓練營" target="_blank"&gt;MSDN 開發訓練營&lt;/a&gt;」等網站，還有 Windows Phone 上面的「&lt;a href="http://www.windowsphone.com/s?appid=5daef5c9-8ec6-4af7-8828-ae63982e093c" target="_blank"&gt;我愛微笑單車 WP7/WP8 版&lt;/a&gt;」、以及一些還在 &lt;a href="http://github.com/ericsk" target="_blank"&gt;github &lt;/a&gt;上努力與尚未公開的程式們。除了練功、真真正正熟悉這些平台以外，也是要持續地學習技術，才會在技術面前表現謙卑，因為這一切都不是那麼簡單的。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;我希望多年之後我不是說出：「我以前也是寫程式的，這很簡單吧&amp;#8230;」 而是「這個我前幾天才實際動手做過一次，真的有很多眉角要注意呢！」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;工作愈久，愈是覺得自己需要進步的地方還是很多，也希望目前持續會與我在 face2face、internet 上互動的朋友持續給我指教，因為你們都有我沒有學習到的專業能力！雖然不知道這個系列文會寫幾篇，但只要是領薪水的一天，我還是會持續往「稱職的員工」努力，不斷使用日劇男主角的特殊能力：樂觀、堅持、不放棄來面對工作上的每一天！&lt;/p&gt;
&lt;p&gt;加油，艾瑞克！&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=h5L8s0dXwuM:9-78H5C0erI:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=h5L8s0dXwuM:9-78H5C0erI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=h5L8s0dXwuM:9-78H5C0erI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/h5L8s0dXwuM" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1841</feedburner:origLink></entry><entry><title type="html">不犯錯的人生</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/nw8fvzEgtAA/1731" /><category term="不是創作" /><category term="隨意亂寫" /><author><name>ericsk</name></author><updated>2012-09-03T18:28:47-07:00</updated><id>http://blog.ericsk.org/?p=1731</id><summary type="html">我覺得我們從小到大受的教育就是要我們過著「不犯錯的人生」。 「人非聖賢，熟能無過」，大概每個人從小學時寫的作文就經常引用這句話，然後曉以「知錯能改，善莫大焉」的大義。但真正能做到的人應該真的很少，基本上現在的社會結構就是層層上報，報喜不報憂，好像只要跟上級講了不好的消息、不利的發展就是自己的錯或是辦事不力，所以為了保障自己的地位就用盡一切方法爭功諉過，大家拼了命地維持皇城內的和諧，好像一切不好的消息只要蓋住就自動消失一樣。 我自己碰過一個例子，在團隊合作的過程中有個環節出包了，有個夥伴很快就跳出來指責批評誰誰誰沒想清楚、誰誰誰做了一個錯誤的決定、誰誰誰沒有做好確認，結果整個團隊開始花力氣跟時間在爭論到底是誰對誰錯，每個人都不想承認自己有錯所以僵持不下。結局就是&amp;#8230;.問題沒有解決，夥伴們感情也破裂，就只是因為大家都要維持著「不犯錯的人生」。 有一次我也在工作上出了個包，跟我合作的同事覺得很衰被我牽連到，當然是對我氣急敗壞地指責，而且希望我發個信出來說都是我的錯，當下我並沒有爭論究竟是不是我的錯，我對同事說：「沒問題，要有人擔錯誤的責任你都可以把我放上，但我現在希望我們先把問題解決，請大家協助我修正我犯的錯，把事情做好好嗎？」我不知道我犯了錯對我造成了什麼影響，但我很肯定事情在大家的合作之下順利完成了，出的包也盡可能地止血了。 在公司裡，我總會跟我有接觸的實習生說，別人怎麼帶你我不知道，但是我的風格是很能包容、允許而且歡迎實習生犯錯的，因為人都有羞恥心，犯了錯之後一定都會有點在意，這反而能讓他下次在做同樣事情時更謹慎，同時避開前一次造成犯錯的因素，怎麼說都是好事，更何況，沒有什麼錯是不能原諒的，不願意原諒別人犯錯的人，難道這輩子都沒犯過錯嗎？ 如果你會害怕因為承認錯誤、失敗而失去些什麼，那應該是因為你本來就沒有什麼價值去擁有那些東西，才會因為一時的過錯而被「處理」掉吧..</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1731">&lt;p&gt;我覺得我們從小到大受的教育就是要我們過著「不犯錯的人生」。&lt;br /&gt;
&lt;span id="more-1731"&gt;&lt;/span&gt;&lt;br /&gt;
「人非聖賢，熟能無過」，大概每個人從小學時寫的作文就經常引用這句話，然後曉以「知錯能改，善莫大焉」的大義。但真正能做到的人應該真的很少，基本上現在的社會結構就是層層上報，報喜不報憂，好像只要跟上級講了不好的消息、不利的發展就是自己的錯或是辦事不力，所以為了保障自己的地位就用盡一切方法爭功諉過，大家拼了命地維持皇城內的和諧，好像一切不好的消息只要蓋住就自動消失一樣。&lt;/p&gt;
&lt;p&gt;我自己碰過一個例子，在團隊合作的過程中有個環節出包了，有個夥伴很快就跳出來指責批評誰誰誰沒想清楚、誰誰誰做了一個錯誤的決定、誰誰誰沒有做好確認，結果整個團隊開始花力氣跟時間在爭論到底是誰對誰錯，每個人都不想承認自己有錯所以僵持不下。結局就是&amp;#8230;.問題沒有解決，夥伴們感情也破裂，就只是因為大家都要維持著「不犯錯的人生」。&lt;/p&gt;
&lt;p&gt;有一次我也在工作上出了個包，跟我合作的同事覺得很衰被我牽連到，當然是對我氣急敗壞地指責，而且希望我發個信出來說都是我的錯，當下我並沒有爭論究竟是不是我的錯，我對同事說：「沒問題，要有人擔錯誤的責任你都可以把我放上，但我現在希望我們先把問題解決，請大家協助我修正我犯的錯，把事情做好好嗎？」我不知道我犯了錯對我造成了什麼影響，但我很肯定事情在大家的合作之下順利完成了，出的包也盡可能地止血了。&lt;/p&gt;
&lt;p&gt;在公司裡，我總會跟我有接觸的實習生說，別人怎麼帶你我不知道，但是我的風格是很能包容、允許而且歡迎實習生犯錯的，因為人都有羞恥心，犯了錯之後一定都會有點在意，這反而能讓他下次在做同樣事情時更謹慎，同時避開前一次造成犯錯的因素，怎麼說都是好事，更何況，沒有什麼錯是不能原諒的，不願意原諒別人犯錯的人，難道這輩子都沒犯過錯嗎？&lt;/p&gt;
&lt;p&gt;如果你會害怕因為承認錯誤、失敗而失去些什麼，那應該是因為你本來就沒有什麼價值去擁有那些東西，才會因為一時的過錯而被「處理」掉吧..&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=nw8fvzEgtAA:1lxkirCUSgc:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=nw8fvzEgtAA:1lxkirCUSgc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=nw8fvzEgtAA:1lxkirCUSgc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/nw8fvzEgtAA" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1731</feedburner:origLink></entry><entry><title type="html">士大夫的困境</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/umVnAwVZACI/1651" /><category term="我有話說" /><author><name>ericsk</name></author><updated>2012-07-18T08:07:50-07:00</updated><id>http://blog.ericsk.org/?p=1651</id><summary type="html">你以為我又想講「文人相輕」這個老梗嗎？其實我想說的更多&amp;#8230;. 「士大夫」過去是指在社會上有地位、有威望的知識份子，但其實我這裡想說的只是唸過書的人。你一定覺得很奇怪，唸書不是好事嗎？從小到大多少師長告訴我們：「只要好好唸書，就會有前途，會有好日子過。」所以有辦法的，都去唸書，沒有辦法的，想辦法讓下一代去唸書，所以整個台灣社會都是士大夫 (當然我也算是唸過書、是我所謂的「士大夫」)，那這樣不是應該很好嗎？大家都很有前途，都有好日子過&amp;#8230; 但現在的社會氣氛看起來好像不是這樣&amp;#8230;.對吧？ 其實士大夫都有困境，但不知道是沒有發現，還是基於士大夫的自尊而不願意承認而已？士大夫的困境就是非常容易被控制，怎麼說呢？各位士大夫可以仔細想想從小到大，我們唸書學得最透徹的是什麼事？就是「競爭」與「優越感」 (一字以蔽之就是「鬥」)，我們學的是追求個人的成功，所以在社會上，只要權威者給士大夫好的待遇或階級，這個士大夫就會自動去擺平其它的士大夫 (或者是為了爭取而自動產生競爭意識) ，所以有了「因為我頂著 OO 學歷的光環，讀聖賢書，所學何事？」的優越感，打從心底不想與人合作追求團體的成功，怎樣都要做到「我最棒、我最屌、我最厲害」才肯罷休。但事實就是，你有 OO 學歷只能證明你唸書考試超強，其它什麼都沒證明。更何況很多時候，你真的有把在學校學到的知識發揮在你的工作上嗎？ 但是士大夫有優越感，做了與別人不一樣期待的事好像就是認輸，所以苦撐在自己可能不那麼有熱情、不那麼喜歡的領域中，開始懷疑以前追求的那個美好未來到底在哪裡？ 我就以自己為例，我絕對不是優秀的讀書人，我高中化學考過個位數的分數、大學被當過幾科、碩士班也沒做出很了不起研究，但作為一個士大夫，我在每個階段也都接受了困境的挑戰。大學四年想換個環境唸碩士班，被所有週遭的朋友質疑為什麼不推甄本系；碩士班要畢業時，被所有的人質疑為什麼要去 CHT 服國防役；國防役結束時，所有人都訝異為什麼我要離開 CHT；甚至我到 Microsoft 做技術傳教士，也要被許多朋友質疑為什麼不做個堂堂正正道道地地的工程師？別人的故事我不知道，但這個社會就是那麼愛幫士大夫做生涯規劃：「你一個交大資科學士、台大資工碩士為什麼不 XXX ? 為什麼要 OOO?」 亂七八糟講了一堆，其實我想說的是，高學歷、高階級都不是讓你優越的條件，只有讓你的長處被發揮了才是。</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1651">&lt;p&gt;你以為我又想講「文人相輕」這個老梗嗎？其實我想說的更多&amp;#8230;.&lt;br /&gt;
&lt;span id="more-1651"&gt;&lt;/span&gt;&lt;br /&gt;
「士大夫」過去是指在社會上有地位、有威望的知識份子，但其實我這裡想說的只是唸過書的人。你一定覺得很奇怪，唸書不是好事嗎？從小到大多少師長告訴我們：「只要好好唸書，就會有前途，會有好日子過。」所以有辦法的，都去唸書，沒有辦法的，想辦法讓下一代去唸書，所以整個台灣社會都是士大夫 (當然我也算是唸過書、是我所謂的「士大夫」)，那這樣不是應該很好嗎？大家都很有前途，都有好日子過&amp;#8230;&lt;/p&gt;
&lt;p&gt;但現在的社會氣氛看起來好像不是這樣&amp;#8230;.對吧？&lt;/p&gt;
&lt;p&gt;其實士大夫都有困境，但不知道是沒有發現，還是基於士大夫的自尊而不願意承認而已？士大夫的困境就是&lt;b&gt;非常容易被控制&lt;/b&gt;，怎麼說呢？各位士大夫可以仔細想想從小到大，我們唸書學得最透徹的是什麼事？就是「競爭」與「優越感」 (一字以蔽之就是「鬥」)，我們學的是追求個人的成功，所以在社會上，只要權威者給士大夫好的待遇或階級，這個士大夫就會自動去擺平其它的士大夫 (或者是為了爭取而自動產生競爭意識) ，所以有了「因為我頂著 OO 學歷的光環，讀聖賢書，所學何事？」的優越感，打從心底不想與人合作追求團體的成功，怎樣都要做到「我最棒、我最屌、我最厲害」才肯罷休。但事實就是，你有 OO 學歷只能證明你唸書考試超強，其它什麼都沒證明。更何況很多時候，你真的有把在學校學到的知識發揮在你的工作上嗎？&lt;/p&gt;
&lt;p&gt;但是士大夫有優越感，做了與別人不一樣期待的事好像就是認輸，所以苦撐在自己可能不那麼有熱情、不那麼喜歡的領域中，開始懷疑以前追求的那個美好未來到底在哪裡？&lt;/p&gt;
&lt;p&gt;我就以自己為例，我絕對不是優秀的讀書人，我高中化學考過個位數的分數、大學被當過幾科、碩士班也沒做出很了不起研究，但作為一個士大夫，我在每個階段也都接受了困境的挑戰。大學四年想換個環境唸碩士班，被所有週遭的朋友質疑為什麼不推甄本系；碩士班要畢業時，被所有的人質疑為什麼要去 CHT 服國防役；國防役結束時，所有人都訝異為什麼我要離開 CHT；甚至我到 Microsoft 做技術傳教士，也要被許多朋友質疑為什麼不做個&lt;del&gt;堂堂正正&lt;/del&gt;道道地地的工程師？別人的故事我不知道，但這個社會就是那麼愛幫士大夫做生涯規劃：「你一個交大資科學士、台大資工碩士為什麼不 XXX ? 為什麼要 OOO?」&lt;/p&gt;
&lt;p&gt;亂七八糟講了一堆，其實我想說的是，高學歷、高階級都不是讓你優越的條件，只有讓你的長處被發揮了才是。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=umVnAwVZACI:S1pRlnNEImQ:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=umVnAwVZACI:S1pRlnNEImQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=umVnAwVZACI:S1pRlnNEImQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/umVnAwVZACI" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1651</feedburner:origLink></entry><entry><title type="html">Python on Windows Azure 簡報公開</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/Vt5Ff1AIe9c/1621" /><category term="程式設計" /><category term="網際網路" /><category term="資訊科學" /><category term="電腦軟體" /><author><name>ericsk</name></author><updated>2012-06-13T12:05:24-07:00</updated><id>http://blog.ericsk.org/?p=1621</id><summary type="html">上週受到 PyCon Taiwan 2012 的邀請講了一場 Python on Windows Azure，這是我的投影片： Building Python Applications on Windows Azure View more presentations from Lin-Chieh Shangkuan. 如果你在註冊 Windows Azure 時在某個步驟 (填寫信用卡資料) 一直卡住不動的話，請先到 Microsoft Account 帳號總覽將您的姓名全改成英文即可。</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1621">&lt;p&gt;上週受到 PyCon Taiwan 2012 的邀請講了一場 Python on Windows Azure，這是我的投影片：&lt;br /&gt;
&lt;span id="more-1621"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="width:425px" id="__ss_13313665"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ericsk/building-python-applications-on-windows-azure" title="Building Python Applications on Windows Azure"&gt;Building Python Applications on Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse13313665" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pythononwindowsazure-120613135947-phpapp01&amp;#038;stripped_title=building-python-applications-on-windows-azure&amp;#038;userName=ericsk" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;param name="wmode" value="transparent"/&gt;&lt;embed name="__sse13313665" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pythononwindowsazure-120613135947-phpapp01&amp;#038;stripped_title=building-python-applications-on-windows-azure&amp;#038;userName=ericsk" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ericsk"&gt;Lin-Chieh Shangkuan&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果你在註冊 &lt;a href="http://www.windowsazure.com/" title="Windows Azure" target="_blank"&gt;Windows Azure&lt;/a&gt; 時在某個步驟 (填寫信用卡資料) 一直卡住不動的話，請先到 &lt;a href="http://account.live.com/" target="_blank"&gt;Microsoft Account 帳號總覽&lt;/a&gt;將您的姓名全改成英文即可。&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=Vt5Ff1AIe9c:1AnJ7pcFA0k:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=Vt5Ff1AIe9c:1AnJ7pcFA0k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=Vt5Ff1AIe9c:1AnJ7pcFA0k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/Vt5Ff1AIe9c" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1621</feedburner:origLink></entry><entry><title type="html">那些年，我們一起用的 Google App Engine</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/SMjIg4TNfUQ/1466" /><category term="網際網路" /><category term="資訊科學" /><author><name>ericsk</name></author><updated>2012-04-15T20:26:06-07:00</updated><id>http://blog.ericsk.org/?p=1466</id><summary type="html">第一次覺得自己參與 OSDC.tw 這麼深 LOL 事情是這樣的，在今年的 OSDC.tw 研討會中，有一場 keynote 及一個 lightning talk 提及他們曾經來研討會聽到 Google App Engine 這個平台後的一些故事： 先是 zonble 的 以及 Toomore 的: 當然我知道他們都是開玩笑（希望不是我自我感覺良好），我也不會因為這樣就生氣還是不高興啦～只是覺得兩位都太抬舉我了，大家會想用 App Engine 應該是因為 Google 大神的服務，而不是小弟我的嘴砲（COSCUP 2008 Lightning talk + OSDC.tw 2009 + COSCUP 2009 以及數不清的 Taipei GTUG 活動）才對吧 XD 不過能被提到就是一種肯定（又在自我感覺良好了？），謝謝大家還認為我是個咖 Orz 不過我還是想說，當時我是真的誠心推薦 Google App Engine 這個平台的，並沒有收到任何營養金或是什麼好處（我同意得到現在的工作有關聯），而那時應該也蠻多人因為 App Engine 做了很多事情, 得到了很多開心才對。現在很多人要出走，應該都是因為收費機制的問題（呼籲 Google 的傳教士來回應大家的問題），那時的我從來就不知道該平台的 [...]</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1466">&lt;p&gt;第一次覺得自己參與 OSDC.tw 這麼深 LOL&lt;br /&gt;
&lt;span id="more-1466"&gt;&lt;/span&gt;&lt;br /&gt;
事情是這樣的，在今年的 &lt;a href="http://osdc.tw/" target="_blank"&gt;OSDC.tw&lt;/a&gt; 研討會中，有一場 keynote 及一個 lightning talk 提及他們曾經來研討會聽到 &lt;a href="http://appengine.google.com/" target="_blank"&gt;Google App Engine&lt;/a&gt; 這個平台後的一些故事：&lt;br /&gt;
先是 &lt;a href="http://cocoa.zonble.net/" target="_blank"&gt;zonble&lt;/a&gt; 的&lt;/p&gt;
&lt;div style="text-align:center"&gt;&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/mEZ_d0iON9c" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;以及 &lt;a href="http://blog.toomore.net/" target="_blank"&gt;Toomore&lt;/a&gt; 的:&lt;/p&gt;
&lt;div style="text-align:center"&gt;&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/FFHgRtpb_Y0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;當然我知道他們都是開玩笑（希望不是我自我感覺良好），我也不會因為這樣就生氣還是不高興啦～只是覺得兩位都太抬舉我了，大家會想用 App Engine 應該是因為 Google 大神的服務，而不是小弟我的嘴砲（&lt;a href="http://www.youtube.com/watch?v=sVT0x1fLg7I" target="_blank"&gt;COSCUP 2008 Lightning talk&lt;/a&gt; + &lt;a href="http://blog.ericsk.org/archives/1328" target="_blank"&gt;OSDC.tw 2009&lt;/a&gt; + &lt;a href="http://blog.ericsk.org/archives/1350" target="_blank"&gt;COSCUP 2009&lt;/a&gt; 以及數不清的 Taipei GTUG 活動）才對吧 XD 不過能被提到就是一種肯定（又在自我感覺良好了？），謝謝大家還認為我是個咖 Orz&lt;/p&gt;
&lt;p&gt;不過我還是想說，當時我是真的誠心推薦 Google App Engine 這個平台的，並沒有收到任何營養金或是什麼好處（我同意得到現在的工作有關聯），而那時應該也蠻多人因為 App Engine 做了很多事情, 得到了很多開心才對。現在很多人要出走，應該都是因為收費機制的問題（呼籲 Google 的傳教士來回應大家的問題），那時的我從來就不知道該平台的 road map 或是收費的競爭策略，現在的收費機制完全是我始料未及的，說我推坑的話也太沉重了 &lt;img src='http://blog.ericsk.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;至於到微軟工作，雖然我在 social media 上開了一點玩笑，但真正的原因&lt;a href="http://blog.ericsk.org/archives/1428" target="_blank"&gt;之前已經交待&lt;/a&gt;過，就不特別再說什麼了。雖然成為了「廠商代表」，但是在各種資訊科技的技術上還是很希望跟大家交流切磋的 &lt;img src='http://blog.ericsk.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=SMjIg4TNfUQ:E5qLJ5i0IKU:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=SMjIg4TNfUQ:E5qLJ5i0IKU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=SMjIg4TNfUQ:E5qLJ5i0IKU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/SMjIg4TNfUQ" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1466</feedburner:origLink></entry><entry><title type="html">告別我的二十代</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/5w5n43iaQxI/1462" /><category term="生活逸趣" /><category term="關於自己" /><author><name>ericsk</name></author><updated>2012-03-12T09:36:04-07:00</updated><id>http://blog.ericsk.org/?p=1462</id><summary type="html">這一天總是會來的，有道是「三十而立」，但我每天仍然感覺到如臨深淵、如履薄冰。好多事還來不及在「二十幾歲」去完成，就要跟它告別了，在問卷調查中的年齡就要改填另外一個區間了，想到我就雙腳一軟&amp;#8230;.. 我已經記不得我九歲的時光了，但是我印象中的十九歲過得不是很好，所以迷信了男生「逢九必衰」的都市傳説，於是乎那一年一心只期盼廿歲趕快到來，好像所有的不幸與不快樂都會在廿歲得到解放。不過由於廿歲時感覺運勢有好轉，所以去年迎接廿九歲時，本來打算謹慎地過每一天，但隨著工作愈來愈忙，我也忘了要在意自己廿九歲的事，只不過這次好像不會特別覺得廿九有什麼很糟的遭遇（也許是幫助我的人太多了），轉眼就來到了卅歲，對！就在沒有意識到狀況下這天就來了。 回顧二十代的這十年間，我從一個迷糊的大學生默默地就成為一個打工仔，中間歷經了很多事，每一件我都歷歷在目，不管是大二夏天的資訊營、大三對 Computer Graphics 的著迷、大四沉迷實況野球（迷到現在）及考研究所﹑碩一的好人助教、碩二的菸酒生及大兵日記、國一的 Java 深度歷險、國二的跟老板拍桌、國三的到處跑社群以及結黨（Taipei GTUG）不營私、國四的「上官老師」以及微軟一年級的洋蔥傳教士&amp;#8230;.（就算被説很老梗但我還是要説）這些都好像是昨天才發生過的事，那些好像都還是早上才見過的人吶&amp;#8230; 在「那一夜我們説相聲」中有一個段子説，記性好的，活得特別痛苦，但想起這些事還是會會心地一笑，那就繼續痛苦吧！ 三十代的人生，希望可以一改過去２９年的一事無成，做一些讓自己覺得不枉此生的事，也希望與認識五年、十年、廿年的朋友們再一起往前邁進！再見了，我的二十代人生</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1462">&lt;p&gt;這一天總是會來的，有道是「三十而立」，但我每天仍然感覺到如臨深淵、如履薄冰。好多事還來不及在「二十幾歲」去完成，就要跟它告別了，在問卷調查中的年齡就要改填另外一個區間了，想到我就雙腳一軟&amp;#8230;..&lt;/p&gt;
&lt;p&gt;我已經記不得我九歲的時光了，但是我印象中的十九歲過得不是很好，所以迷信了男生「逢九必衰」的都市傳説，於是乎那一年一心只期盼廿歲趕快到來，好像所有的不幸與不快樂都會在廿歲得到解放。不過由於廿歲時感覺運勢有好轉，所以去年迎接廿九歲時，本來打算謹慎地過每一天，但隨著工作愈來愈忙，我也忘了要在意自己廿九歲的事，只不過這次好像不會特別覺得廿九有什麼很糟的遭遇（也許是幫助我的人太多了），轉眼就來到了卅歲，對！就在沒有意識到狀況下這天就來了。&lt;/p&gt;
&lt;p&gt;回顧二十代的這十年間，我從一個迷糊的大學生默默地就成為一個打工仔，中間歷經了很多事，每一件我都歷歷在目，不管是大二夏天的資訊營、大三對 Computer Graphics 的著迷、大四沉迷實況野球（迷到現在）及考研究所﹑碩一的好人助教、碩二的菸酒生及大兵日記、國一的 Java 深度歷險、國二的跟老板拍桌、國三的到處跑社群以及結黨（Taipei GTUG）不營私、國四的「上官老師」以及微軟一年級的洋蔥傳教士&amp;#8230;.（就算被説很老梗但我還是要説）這些都好像是昨天才發生過的事，那些好像都還是早上才見過的人吶&amp;#8230;&lt;/p&gt;
&lt;p&gt;在「那一夜我們説相聲」中有一個段子説，記性好的，活得特別痛苦，但想起這些事還是會會心地一笑，那就繼續痛苦吧！&lt;/p&gt;
&lt;p&gt;三十代的人生，希望可以一改過去２９年的一事無成，做一些讓自己覺得不枉此生的事，也希望與認識五年、十年、廿年的朋友們再一起往前邁進！再見了，我的二十代人生&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=5w5n43iaQxI:v1tWeZany1k:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=5w5n43iaQxI:v1tWeZany1k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=5w5n43iaQxI:v1tWeZany1k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/5w5n43iaQxI" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1462</feedburner:origLink></entry><entry><title type="html">微軟一年間</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/yEfimzjbABA/1459" /><category term="生活逸趣" /><category term="關於工作" /><author><name>ericsk</name></author><updated>2012-02-29T09:19:17-08:00</updated><id>http://blog.ericsk.org/?p=1459</id><summary type="html">不知不覺就到微軟上班一年了，我終於不是菜鳥了嗎？ 從開始求學以來，我總是過著「怎樣也想不到我會如此這般」的人生，所以「怎樣也想不到我會到微軟上班」似乎好像也不是那麼不可預期的事，若從過去的經驗來看，「意想不到」的過程或結果都還不錯，所以希望這一段人生也是個不錯的旅程。 不得不說，在這個時間點加入微軟，雖然有點誇張，但我仍然覺得自己是何其榮幸在恭逢一個微軟轉型的時刻，不論從內部、外部甚至是產品來看這間公司都跟過去的印象、想像有很大的不同，一個人在職業生涯中是多難得有這樣的機會能親身見證到一個公司巨大轉變的過程？加入微軟後，除了站在軟體巨人的肩膀上觀看這整個軟體、科技產業令身為軟體人的我何等興奮之外，參與公司的化學反應就是我收穫最多的部份。 常有人會問我：「在這個時間點，推廣某某微軟技術平台不是很辛苦嗎？如果你負責的是某某大家喜愛的平台，會不會更輕鬆愉快？」 而我總是很老梗地用38度金門高樑的廣告回應： 「如果，我們一輩子都只敢挑有把握的事做，那你要怎麼知道，你的能耐會在哪？」 今天公司給我薪水 hire 我來做事，不就是希望藉由我的能力，或是發揮潛力做出貢獻嗎？困難愈多，挫折愈深，你不覺得事情做起來很過癮嗎？雖然不見得靠你一個人就能改變什麼，我要努力的部份還非常多，但比起不用努力就有好的結果要來得有成就感多了，因為那樣的話，你不知道究竟是你有努力有價值，還是只是那個品牌的價值？ 過去這一年來，也有不少朋友問我：「你大學、碩士都是唸資科資工，現在不做很純的工程師（咦），會不會很『可惜』？」 這個問題我覺得也很有趣，我一直都認為，大學及碩士班的過程對於自己專業度的提升，並不是用來限制你以後只能做什麼的，人生那麼長，就算只算職業生涯也很長，不必被這四年或六年給限制了你的各種可能性，難道你畢業後出社會工作一點都沒成長嗎？當然我始終還是沒有放棄成為一個偉大工程師的夢想（我不是醬爆），你們怎麼知道我現在的經歷不是我成為偉大工程師的一部份呢？而且我相信我自己，就算再當幾年傳教士，我應該還是可以比很多所謂的「Senior Engineer」有競爭力吧（自我感覺無敵） 這一年間要感謝的微軟人、非微軟人太多了，是因為長官、同事、各位朋友們的支持我才有舞臺的，今年還是要持續努力，不管在什麼樣的技術、平台上，我們要與各位一同努力的部份還很多，大家一起加油吧！</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1459">&lt;p&gt;不知不覺就到微軟上班一年了，我終於不是菜鳥了嗎？&lt;br /&gt;
&lt;span id="more-1459"&gt;&lt;/span&gt;&lt;br /&gt;
從開始求學以來，我總是過著「怎樣也想不到我會如此這般」的人生，所以「怎樣也想不到我會到微軟上班」似乎好像也不是那麼不可預期的事，若從過去的經驗來看，「意想不到」的過程或結果都還不錯，所以希望這一段人生也是個不錯的旅程。&lt;/p&gt;
&lt;p&gt;不得不說，在這個時間點加入微軟，雖然有點誇張，但我仍然覺得自己是何其榮幸在恭逢一個微軟轉型的時刻，不論從內部、外部甚至是產品來看這間公司都跟過去的印象、想像有很大的不同，一個人在職業生涯中是多難得有這樣的機會能親身見證到一個公司巨大轉變的過程？加入微軟後，除了站在軟體巨人的肩膀上觀看這整個軟體、科技產業令身為軟體人的我何等興奮之外，參與公司的化學反應就是我收穫最多的部份。&lt;/p&gt;
&lt;p&gt;常有人會問我：「在這個時間點，推廣某某微軟技術平台不是很辛苦嗎？如果你負責的是某某大家喜愛的平台，會不會更輕鬆愉快？」&lt;/p&gt;
&lt;p&gt;而我總是很老梗地用38度金門高樑的廣告回應：&lt;/p&gt;
&lt;p&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/i2z2zLbswJk" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;「如果，我們一輩子都只敢挑有把握的事做，那你要怎麼知道，你的能耐會在哪？」&lt;/p&gt;
&lt;p&gt;今天公司給我薪水 hire 我來做事，不就是希望藉由我的能力，或是發揮潛力做出貢獻嗎？困難愈多，挫折愈深，你不覺得事情做起來很過癮嗎？雖然不見得靠你一個人就能改變什麼，我要努力的部份還非常多，但比起不用努力就有好的結果要來得有成就感多了，因為那樣的話，你不知道究竟是你有努力有價值，還是只是那個品牌的價值？&lt;/p&gt;
&lt;p&gt;過去這一年來，也有不少朋友問我：「你大學、碩士都是唸資科資工，現在不做很純的工程師（咦），會不會很『可惜』？」&lt;/p&gt;
&lt;p&gt;這個問題我覺得也很有趣，我一直都認為，大學及碩士班的過程對於自己專業度的提升，並不是用來限制你以後只能做什麼的，人生那麼長，就算只算職業生涯也很長，不必被這四年或六年給限制了你的各種可能性，難道你畢業後出社會工作一點都沒成長嗎？當然我始終還是沒有放棄成為一個偉大工程師的夢想（我不是醬爆），你們怎麼知道我現在的經歷不是我成為偉大工程師的一部份呢？而且我相信我自己，就算再當幾年傳教士，我應該還是可以比很多所謂的「Senior Engineer」有競爭力吧（自我感覺無敵）&lt;/p&gt;
&lt;p&gt;這一年間要感謝的微軟人、非微軟人太多了，是因為長官、同事、各位朋友們的支持我才有舞臺的，今年還是要持續努力，不管在什麼樣的技術、平台上，我們要與各位一同努力的部份還很多，大家一起加油吧！&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=yEfimzjbABA:X5EYQ_a4PUY:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=yEfimzjbABA:X5EYQ_a4PUY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=yEfimzjbABA:X5EYQ_a4PUY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/yEfimzjbABA" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1459</feedburner:origLink></entry><entry><title type="html">2011 年的回顧</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/3w1z9UsWQAs/1453" /><category term="生活逸趣" /><category term="關於自己" /><author><name>ericsk</name></author><updated>2011-12-30T01:28:24-08:00</updated><id>http://blog.ericsk.org/?p=1453</id><summary type="html">2011 年換了新的工作，要做的事、要學的事都變多了，疏於照顧 blog 真是不應該，不過還是可以稍微列一下今年的大事： 1月: 國防役開始的那天（2006/10 關西當兵, 2007/01 種花報到）覺得 2011/1 好久，但也就到了 2月: 在種花的年假已經有14天，正煩惱著怎麼在1、2月且有過年的狀況下放完這14天的年假 3月: 正式加入 Microsoft，我只記得跟著吃我前代目的 farewell 吃到快中風了（他人緣太好！）。很高興弄了 IE9 Hackathon 4月: 飛到 Las Vegas 參加 MIX&amp;#8217;11 接受 Microsoft 文化洗禮，當然也見識到 DPE 貴婦團的實力 5月: 飛到 Atlanta 參加 TechEd NorthAmerica 2011，無聊的城市，長途長途的飛行，開始習慣飛行的感覺 6月: 跟著大家一起弄開發者大會，對 Microsoft 而言，除了員工是資產之外，開發者也是重要的資產之一（所以花了很多成本在 MSDN） 7月: 大中華區開年，在成都以熊貓之姿一戰成名，感謝 Herb 的梗以及 Cathy 給的舞臺。月底又飛到丹佛參加 Microsoft Global Exchange，徹底瞭解這間公司文化，並且也瞭解了 DPE 的文化 8月: [...]</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1453">&lt;p&gt;2011 年換了新的工作，要做的事、要學的事都變多了，疏於照顧 blog 真是不應該，不過還是可以稍微列一下今年的大事：&lt;br /&gt;
&lt;span id="more-1453"&gt;&lt;/span&gt;&lt;br /&gt;
1月: 國防役開始的那天（2006/10 關西當兵, 2007/01 種花報到）覺得 2011/1 好久，但也就到了&lt;/p&gt;
&lt;p&gt;2月: 在種花的年假已經有14天，正煩惱著怎麼在1、2月且有過年的狀況下放完這14天的年假&lt;/p&gt;
&lt;p&gt;3月: 正式加入 Microsoft，我只記得跟著吃我前代目的 farewell 吃到快中風了（他人緣太好！）。很高興弄了 IE9 Hackathon&lt;/p&gt;
&lt;p&gt;4月: 飛到 Las Vegas 參加 MIX&amp;#8217;11 接受 Microsoft 文化洗禮，當然也見識到 DPE 貴婦團的實力&lt;/p&gt;
&lt;p&gt;5月: 飛到 Atlanta 參加 TechEd NorthAmerica 2011，無聊的城市，長途長途的飛行，開始習慣飛行的感覺&lt;/p&gt;
&lt;p&gt;6月: 跟著大家一起弄開發者大會，對 Microsoft 而言，除了員工是資產之外，開發者也是重要的資產之一（所以花了很多成本在 MSDN）&lt;/p&gt;
&lt;p&gt;7月: 大中華區開年，在成都以熊貓之姿一戰成名，感謝 Herb 的梗以及 Cathy 給的舞臺。月底又飛到丹佛參加 Microsoft Global Exchange，徹底瞭解這間公司文化，並且也瞭解了 DPE 的文化 &lt;img src='http://blog.ericsk.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;8月: 為了 Mango SDK, marketplace 即將 launch 而做了很多有形無形的資源準備&lt;/p&gt;
&lt;p&gt;9月: 跟辦事最讓人放心的大鈞硬拼完了 TechDays Taiwan 2011，永遠不會忘記我們英勇的 Keynote 戰士們。這個月最重要的還有 Win8 初次亮相&lt;/p&gt;
&lt;p&gt;10月: HTC 的芒果機首發，技術支援，開發商交流是免不了的一個月。&lt;/p&gt;
&lt;p&gt;11月: MSDN 的芒果開發課程流水席，真的很開心每場都爆滿，開發人員還是對芒果很有信心的，後勢看漲啊！！&lt;/p&gt;
&lt;p&gt;12月: 為了上半年檢討，以及下半年的計劃努力著，2012是個令人興奮的一年，開發人員跟著我一起持續燃燒熱血吧！&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=3w1z9UsWQAs:T9bK62kbpnw:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=3w1z9UsWQAs:T9bK62kbpnw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=3w1z9UsWQAs:T9bK62kbpnw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/3w1z9UsWQAs" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1453</feedburner:origLink></entry><entry><title type="html">我的高三國文老師</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/B5uSwtlwIk8/1449" /><category term="回想當年" /><category term="隨意亂寫" /><author><name>ericsk</name></author><updated>2011-11-14T23:59:06-08:00</updated><id>http://blog.ericsk.org/?p=1449</id><summary type="html">在我高中三年的歲月裡，每一年都是風格完全不同的國文老師，而我最懷念的，是我高三時的國文老師－－蕭平奕老師。 按照我模糊的記憶，我們班級在那一屆台南一中三類組之中，成績並不是前段的班級（當然是扣掉了資優班），升上高三之後，幾乎所有科任老師都與高二時相同，但是國文及英文這兩科卻換了新的老師來帶我們班，其實除了我高一因為當英文小老師以外，三年來我對英文老師的印象一直很薄弱，但是高三時的這位新的國文老師，卻能讓我永遠牢牢地記在心中。 老實說，有時候我們還蠻羨慕有些高一的班級有年輕（看起來像剛畢業）的女國文老師、女英文老師，你知道的，17, 18歲的男生腦袋就是這些有的沒的（難怪書唸不好），這位新來的國文老師，雖然並不是學生們心目中的瑪丹娜（畢竟離大學畢業應該有相當長的時間了），但我覺得老師卻有一股仙女的氣質，因為她身材高挑，走路很端莊，時常面帶微笑，我常常覺得她根本就是用飄地進到我們班的教室。 然而，雖然老師有仙女的氣質，但她並不是來讓我們輕鬆好過的，在南一中，三類組的班級因為有上生物課，所以課表上就沒有「中國文化基本教材」（一類、二類組都有），但老師來的第一天就說，她除了基本的國文課會完整地上完之外，她還會加入中國文化基本教材的內容，而且她每個禮拜都會小考！這對很多三類組的學生來說簡直是苦不堪言，畢竟自然組的學生總覺得應該是花更多時間在數學、物理、化學等科目上面（小孩子不要學），哪有聽說國文課這麼精實的？ 就這樣，如精神時光屋般的國文課，進行了三個月後，歷經了一次模擬考及一次段考，我們班的國文成績大幅提升，我印象很深刻，就在第一次段考結束，國文老師來發考卷時，她居然像個小女孩般雀躍地說著：「你們知道嗎？你們是全三年級全班國文平均最高分的喲！平均八十幾（我真的忘了），比資優班還厲害！」這樣的成績，大家當然都很興奮，但我看著喜上眉梢的國文老師，我覺得她比我們還興奮，好像很有成就感似的把整班的頑石都點靈了，這種感覺讓我很振憾，從小喜歡跟老師唱反調的我（參考文章：我的高中導師），居然有愛上這位老師的感覺了！ 當然不是只有我一個人愛上（雖然那時沒禁師生戀），我們是全班都愛上了國文老師，平常大家上課都死氣沉沉的，但是國文課時大家就很愛舉手問老師問題，老師在發問時，大家也都很踴躍搶答，這樣歡樂的氣氛，我才發現，雖然老師不是瑪丹娜，但她是瑪莉亞（噢～聖母瑪莉亞）啊！！！我們對國文老師的崇敬、愛慕之情，連其它科任老師都感到吃味了，老是虧我們為什麼只愛唸國文。其實仔細回想，老師那時每次來上課，她都會帶著她幫我們整理好的重點、關聯，而且會教我們怎麼記憶、活用她所提供的「武功秘笈」，我想真正讓大家國文程度提升一個檔次的，除了歡樂的氣氛，就是老師如此這般地用心吧！ 我不好意思說我是老師的愛徒（應該也不是），但我還是要很不要臉地回憶地說，老師其實還蠻愛點我起來回答問題的，或許是我總能給老師一個滿意的答案（當然聖母如她，就算答錯也不會怎麼樣），又或者是我有時上課放空時都會被她抓包，這時她就會問我是在思念誰家的女孩兒，直要我拿照片給她看看（謎：老師那時就懂了沒圖沒真相的梗嗎？），我就會回答：「不聞機杼聲，惟聞女嘆息，問女何所思，問女何所憶」來閃避一切。 有時候這種互動的感覺就好像我在學校的媽一樣，高三下學期，我想要透過推薦甄試來進入大學唸書，在過了筆試的關卡之後，我到處跪求老師們幫我寫推薦信，唯獨我的國文老師，在我還沒去找她時，她就已經幫我寫好一份（雖然她寫成交大資工，但我一定要說我第一志願是交大資科）了，我非常感動老師對我這麼好，而且還笑著對我說要加油喔！那時的我應該是整個人都呆愣住了，而且也太ㄍ一ㄣ了，應該要立刻給老師一個大擁抱才對！現在想想，就算是當場跪下作 (worship) 的動作都不誇張。 高中畢業後，我就遠離南部北上唸書，這一離開南部到現在轉眼就過了十一年半了，我居然都沒有再回學校看過老師（因為都寒暑假才返鄉），而現在老師應該也早就退休了（吧），也不知道要如何讓老師知道我的這般心意，只能在這裡把思念的心情記錄下來， 我一直努力沒讓國文程度低落，雖然高中畢業後只有兩次預官考試（一次是大四考、一次是碩二考的）有國文測驗，兩次我都是87.5分（很巧，都剛好錯5題），應該是還算合格吧！雖然年紀大了，忘的東西也變多了，我還記得老師點我起來問了一些問題，而我回答了「三金遊水」、「垂死病中驚坐起，暗風吹雨入寒窗」、「春夜宴桃李園序」、「&amp;#8230;.」而且我還記得《六國論》蘇家三父子都有寫喔 最後，我只想說：「謝謝妳，國文老師」 P.S. 老師如果還記得我，她記得我的模樣應該是這樣（右一）的吧：</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1449">&lt;p&gt;在我高中三年的歲月裡，每一年都是風格完全不同的國文老師，而我最懷念的，是我高三時的國文老師－－蕭平奕老師。&lt;br /&gt;
&lt;span id="more-1449"&gt;&lt;/span&gt;&lt;br /&gt;
按照我模糊的記憶，我們班級在那一屆台南一中三類組之中，成績並不是前段的班級（當然是扣掉了資優班），升上高三之後，幾乎所有科任老師都與高二時相同，但是國文及英文這兩科卻換了新的老師來帶我們班，其實除了我高一因為當英文小老師以外，三年來我對英文老師的印象一直很薄弱，但是高三時的這位新的國文老師，卻能讓我永遠牢牢地記在心中。&lt;/p&gt;
&lt;p&gt;老實說，有時候我們還蠻羨慕有些高一的班級有年輕（看起來像剛畢業）的女國文老師、女英文老師，你知道的，17, 18歲的男生腦袋就是這些有的沒的（難怪書唸不好），這位新來的國文老師，雖然並不是學生們心目中的瑪丹娜（畢竟離大學畢業應該有相當長的時間了），但我覺得老師卻有一股仙女的氣質，因為她身材高挑，走路很端莊，時常面帶微笑，我常常覺得她根本就是用飄地進到我們班的教室。&lt;/p&gt;
&lt;p&gt;然而，雖然老師有仙女的氣質，但她並不是來讓我們輕鬆好過的，在南一中，三類組的班級因為有上生物課，所以課表上就沒有「中國文化基本教材」（一類、二類組都有），但老師來的第一天就說，她除了基本的國文課會完整地上完之外，她還會加入中國文化基本教材的內容，而且她每個禮拜都會小考！這對很多三類組的學生來說簡直是苦不堪言，畢竟自然組的學生總覺得應該是花更多時間在數學、物理、化學等科目上面（小孩子不要學），哪有聽說國文課這麼精實的？&lt;/p&gt;
&lt;p&gt;就這樣，如精神時光屋般的國文課，進行了三個月後，歷經了一次模擬考及一次段考，我們班的國文成績大幅提升，我印象很深刻，就在第一次段考結束，國文老師來發考卷時，她居然像個小女孩般雀躍地說著：「你們知道嗎？你們是全三年級全班國文平均最高分的喲！平均八十幾（我真的忘了），比資優班還厲害！」這樣的成績，大家當然都很興奮，但我看著喜上眉梢的國文老師，我覺得她比我們還興奮，好像很有成就感似的把整班的頑石都點靈了，這種感覺讓我很振憾，從小喜歡跟老師唱反調的我（參考文章：&lt;a href="http://blog.ericsk.org/archives/47" target="_blank"&gt;我的高中導師&lt;/a&gt;），居然有愛上這位老師的感覺了！&lt;/p&gt;
&lt;p&gt;當然不是只有我一個人愛上（雖然那時沒禁師生戀），我們是全班都愛上了國文老師，平常大家上課都死氣沉沉的，但是國文課時大家就很愛舉手問老師問題，老師在發問時，大家也都很踴躍搶答，這樣歡樂的氣氛，我才發現，雖然老師不是瑪丹娜，但她是瑪莉亞（噢～聖母瑪莉亞）啊！！！我們對國文老師的崇敬、愛慕之情，連其它科任老師都感到吃味了，老是虧我們為什麼只愛唸國文。其實仔細回想，老師那時每次來上課，她都會帶著她幫我們整理好的重點、關聯，而且會教我們怎麼記憶、活用她所提供的「武功秘笈」，我想真正讓大家國文程度提升一個檔次的，除了歡樂的氣氛，就是老師如此這般地用心吧！&lt;/p&gt;
&lt;p&gt;我不好意思說我是老師的愛徒（應該也不是），但我還是要很不要臉地回憶地說，老師其實還蠻愛點我起來回答問題的，或許是我總能給老師一個滿意的答案（當然聖母如她，就算答錯也不會怎麼樣），又或者是我有時上課放空時都會被她抓包，這時她就會問我是在思念誰家的女孩兒，直要我拿照片給她看看（謎：老師那時就懂了沒圖沒真相的梗嗎？），我就會回答：「不聞機杼聲，惟聞女嘆息，問女何所思，問女何所憶」來閃避一切。&lt;/p&gt;
&lt;p&gt;有時候這種互動的感覺就好像我在學校的媽一樣，高三下學期，我想要透過推薦甄試來進入大學唸書，在過了筆試的關卡之後，我到處跪求老師們幫我寫推薦信，唯獨我的國文老師，在我還沒去找她時，她就已經幫我寫好一份（雖然她寫成交大資工，但我一定要說我第一志願是交大資科）了，我非常感動老師對我這麼好，而且還笑著對我說要加油喔！那時的我應該是整個人都呆愣住了，而且也太ㄍ一ㄣ了，應該要立刻給老師一個大擁抱才對！現在想想，就算是當場跪下作 (worship) 的動作都不誇張。&lt;/p&gt;
&lt;p&gt;高中畢業後，我就遠離南部北上唸書，這一離開南部到現在轉眼就過了十一年半了，我居然都沒有再回學校看過老師（因為都寒暑假才返鄉），而現在老師應該也早就退休了（吧），也不知道要如何讓老師知道我的這般心意，只能在這裡把思念的心情記錄下來，&lt;/p&gt;
&lt;p&gt;我一直努力沒讓國文程度低落，雖然高中畢業後只有兩次預官考試（一次是大四考、一次是碩二考的）有國文測驗，兩次我都是87.5分（很巧，都剛好錯5題），應該是還算合格吧！雖然年紀大了，忘的東西也變多了，我還記得老師點我起來問了一些問題，而我回答了「三金遊水」、「垂死病中驚坐起，暗風吹雨入寒窗」、「春夜宴桃李園序」、「&amp;#8230;.」而且我還記得《六國論》蘇家三父子都有寫喔 &lt;img src='http://blog.ericsk.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;最後，我只想說：「謝謝妳，國文老師」&lt;/p&gt;
&lt;p&gt;P.S. 老師如果還記得我，她記得我的模樣應該是這樣（右一）的吧：&lt;br /&gt;
&lt;a href="http://blog.ericsk.org/wp-content/uploads/2011/11/297588_10150357908721627_660406626_8643091_73221613_n1.jpg"&gt;&lt;img src="http://blog.ericsk.org/wp-content/uploads/2011/11/297588_10150357908721627_660406626_8643091_73221613_n1.jpg" alt="" title="297588_10150357908721627_660406626_8643091_73221613_n[1]" width="480" height="360" class="alignnone size-full wp-image-1450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=B5uSwtlwIk8:LDNdDuu2Afc:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=B5uSwtlwIk8:LDNdDuu2Afc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=B5uSwtlwIk8:LDNdDuu2Afc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/B5uSwtlwIk8" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1449</feedburner:origLink></entry><entry><title type="html">Modernizr 源碼剖析（上）</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ericsk/~3/qSVXoFs3h-g/1444" /><category term="程式設計" /><category term="資訊科學" /><category term="html5" /><category term="modernizr" /><author><name>ericsk</name></author><updated>2011-06-26T20:16:10-07:00</updated><id>http://blog.ericsk.org/?p=1444</id><summary type="html">讀 Modernizr 的原始碼除了瞭解它做了什麼事之外，更可以學習到不少 JavaScript 與 DOM scripting 的技巧。 Modernizr 是一個 JavaScript 函式庫，它主要會做兩件事： 偵測瀏覽器對於（廣義的） HTML5 各種規格支援的程度，並且在 &amp;#60;html&amp;#62; 標籤中加入適當的 class 來表現偵測後的結果。舉例來說，若是瀏覽器不支援在 CSS 中使用 border-radius 的語法，那 &amp;#60;html&amp;#62; 標籤中就會有一個 no-borderradius 的 class；而若是支援 CSS 漸層的語法，則會有一個 cssgradients class。 這樣的好處是，網頁開發者可以使用 CSS 來因應各種支援的狀況，像是這段範例程式碼： .box { &amp;#160;&amp;#160; border-bottom: 1px solid #666; &amp;#160;&amp;#160; border-right: 1px solid #777; } .boxshadow div.box { &amp;#160;&amp;#160; border: none; &amp;#160;&amp;#160; [...]</summary><content type="html" xml:base="http://blog.ericsk.org/archives/1444">&lt;p&gt;讀 Modernizr 的原始碼除了瞭解它做了什麼事之外，更可以學習到不少 JavaScript 與 DOM scripting 的技巧。&lt;/p&gt;
&lt;p&gt;&lt;span id="more-1444"&gt;&lt;/span&gt;&lt;img src="http://blog.ericsk.org/wp-content/uploads/2011/06/Modernizr-2-Logo-300x44.png" alt="" title="Modernizr 2 Logo" width="300" height="44" class="alignnone size-medium wp-image-1445" /&gt;&lt;br /&gt;
&lt;a href="http://www.modernizr.com/" title="Modernizr" target="_blank"&gt;Modernizr&lt;/a&gt; 是一個 JavaScript 函式庫，它主要會做兩件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;偵測瀏覽器對於（廣義的） HTML5 各種規格支援的程度，並且在 &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; 標籤中加入適當的 class 來表現偵測後的結果。舉例來說，若是瀏覽器不支援在 CSS 中使用 &lt;code&gt;border-radius&lt;/code&gt; 的語法，那 &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; 標籤中就會有一個 &lt;code&gt;no-borderradius&lt;/code&gt; 的 class；而若是支援 CSS 漸層的語法，則會有一個 &lt;code&gt;cssgradients&lt;/code&gt; class。&lt;br /&gt;
這樣的好處是，網頁開發者可以使用 CSS 來因應各種支援的狀況，像是這段範例程式碼：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;.box {
&amp;nbsp;&amp;nbsp; border-bottom: 1px solid #666;
&amp;nbsp;&amp;nbsp; border-right: 1px solid #777;
}
.boxshadow div.box {
&amp;nbsp;&amp;nbsp; border: none;
&amp;nbsp;&amp;nbsp; -webkit-box-shadow: #666 1px 1px 1px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-moz-box-shadow: #666 1px 1px 1px;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; box-shadow: #666 1px 1px 1px;
}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;若瀏覽器尚未支援 CSS 中的 &lt;code&gt;box-shadow&lt;/code&gt; 語法，則 Modernizr 會在 &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; 中加入 &lt;code&gt;no-boxshadow&lt;/code&gt; 的 class，則整個頁面並不會套用到下方的 CSS rule；反之則下方的 CSS rule 就會生效（因為 &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; 標籤中加入了 &lt;code&gt;boxshadow&lt;/code&gt; 的 class。&lt;/li&gt;
&lt;li&gt;提供函式或屬性來測試或表示某個 HTML5 的規格是否已經在該瀏覽器下被支援。比方說我要使用 JavaScript 動態插入一個聲音檔案，想要使用 HTML5 的 &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; 標籤來做，則可以利用 Modernizr 的屬性來測試支援的程度：&lt;br /&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;/* 測試瀏覽器是否已經支援 &amp;lt;audio&amp;gt; 標籤 */
if (Modernizr.audio) {
&amp;nbsp;&amp;nbsp;var audio = new Audio();
&amp;nbsp;&amp;nbsp;audio.src = Modernizr.audio.ogg ? &amp;#039;music.ogg&amp;#039; : 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Modernizr.audio.mp3 ? &amp;#039;music.mp3&amp;#039; : &amp;#039;music.wav&amp;#039;;
&amp;nbsp;&amp;nbsp;audio.play();
} else {
&amp;nbsp;&amp;nbsp;/* 使 用 polyfill 來做 fallback, 參考：https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills */
}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;由此可知使用 Modernizr 可以省下很多自行偵測瀏覽器能力的程式碼（相信專業的吧）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;雖然 Modernizr 已經幫網頁開發者做了很多事情，不過認真看一下它到底做了哪些事情也是很重要的學習，除了瞭解如何搞定瀏覽器的 feature detect 之外，也可以學習一些 JavaScript 的寫作技巧，以下就以幾個分類來剖析 Modernizr。&lt;/p&gt;
&lt;h4&gt;定義 API 介面&lt;/h4&gt;
&lt;p&gt;Modernizr 函式庫提供一個 &lt;code&gt;Modernizr&lt;/code&gt; 物件來進行操作（如同上述的範例），而在 Modernizr 的原始碼裡，它是這樣做的：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;window.Modernizr = (function( window, document, undefined ) {
&amp;nbsp;&amp;nbsp;var ...,
&amp;nbsp;&amp;nbsp;Modernizr = {},

&amp;nbsp;&amp;nbsp;...

&amp;nbsp;&amp;nbsp;return Modernizr;
})(this, this.document);&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;用一個 anonymous function 產生一個命名空間（namespace）是很常見的技巧，這個 function 最後傳回在裡面宣告的 &lt;code&gt;Modernizr&lt;/code&gt; 物件（因為有使用 &lt;code&gt;var&lt;/code&gt; 宣告，所以是 local variable），然後將它 assign 到 &lt;code&gt;window.Modernizr&lt;/code&gt; 下，這樣在其它的 JavaScript 程式碼中就可以直接使用 &lt;code&gt;window.Modernizr&lt;/code&gt; 或是 &lt;code&gt;Modernizr&lt;/code&gt; （定義在 &lt;code&gt;window&lt;/code&gt; 下的變數可以省略 &lt;code&gt;window&lt;/code&gt;）來存取它。&lt;/p&gt;
&lt;p&gt;另外，將 &lt;code&gt;window&lt;/code&gt;, &lt;code&gt;document&lt;/code&gt; 以及 &lt;code&gt;undefined&lt;/code&gt; 當作引數（arguments）傳進去的作法也出現在很多函式庫之中，除了可以減少 scope 檢查的時間，也可以避免這些保留字事前被亂改掉了。而這個立即被執行的 function，呼叫時傳入的參數（parameters）是 &lt;code&gt;this&lt;/code&gt; 以及 &lt;code&gt;this.document&lt;/code&gt;，&lt;code&gt;this&lt;/code&gt; 就是這段程式碼被執行時的 context，在瀏覽器預設的狀況下，若是沒有被 function 包住的話，則 &lt;code&gt;this&lt;/code&gt; 就相當於 &lt;code&gt;window&lt;/code&gt;。至於為什麼不直接帶入 &lt;code&gt;window&lt;/code&gt; 以及 &lt;code&gt;window.document&lt;/code&gt;，只是為了保持彈性，也許這個函式庫會被應用於其它非瀏覽器的執行環境，那時候 global object 就不一定是 &lt;code&gt;window&lt;/code&gt; 了。&lt;/p&gt;
&lt;h3&gt;如何偵測 CSS 樣式支援&lt;/h3&gt;
&lt;p&gt;在 Modernizr 中，一開始會建立一個 &lt;code&gt;&amp;lt;modernizr&amp;gt;&lt;/code&gt; 的 DOM 物件，然後就利用這個物件下的 &lt;code&gt;style&lt;/code&gt; 屬性來測試各種 CSS 2.1/3 樣式的支援程度，初始化的程式碼如下：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mod = &amp;#039;modernizr&amp;#039;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modElem = document.createElement(mod),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mStyle = modElem.style,&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;對瀏覽器而言，只要使用 DOM API 來產生一個 DOM 物件，不管瀏覽器是否認得這個標籤，都可以對它使用 CSS 來設定樣式（所以要讓傳統瀏覽器認識 HTML5 的新標籤，這就是一個解決方法），所以就可以拿它的 &lt;code&gt;style&lt;/code&gt; 屬性來試試瀏覽器的能耐。而在做完所有的偵測之後，也要加上一段清空的程式碼避免耗費多餘的記憶體（或是 memory leak）：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;setCss(&amp;#039;&amp;#039;); // 將 mStyle.cssText 整個清空
modElem = inputElem = null;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;舉例來說，若要偵測瀏覽器是否支援在 CSS 中使用 hsl/hsla 來表示色彩，那它的檢查流程會是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先塞一個使用 hsl/hsla 的色彩表示法到 &lt;code&gt;mStyle.cssText&lt;/code&gt; 下，例如：&lt;code&gt;mStyle.cssText = &amp;#039;background-color:hsla(120,40%,100%,.5)&amp;#039;;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;再檢查 &lt;code&gt;mStyle.backgroundColor&lt;/code&gt; 的值，是否含有 hsla 的字串，若瀏覽器不支援的話，在上述直接覆寫 cssText 的動作就會沒有作用，所以 &lt;code&gt;backgroundColor&lt;/code&gt; 的值也不會有 hsla 的字串囉。（不過，事實上有些瀏覽器會將 hsla 的表示法轉成 rgba，所以同時也要檢查是否有 rgba 的字串）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這一段的原始碼是這樣寫的：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;tests[&amp;#039;hsla&amp;#039;] = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp; except IE9 who retains it as hsla

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setCss(&amp;#039;background-color:hsla(120,40%,100%,.5)&amp;#039;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return contains(mStyle.backgroundColor, &amp;#039;rgba&amp;#039;) || contains(mStyle.backgroundColor, &amp;#039;hsla&amp;#039;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;而如果是有瀏覽器前置詞的 CSS 樣式屬性（如：-webkit-box-shadow），則很簡單會去測試 &lt;code&gt;mStyle&lt;/code&gt; 下是否有 &lt;code&gt;boxShadow&lt;/code&gt;、&lt;code&gt;WebkitBoxShadow&lt;/code&gt;、&lt;code&gt;MozBoxShadow&lt;/code&gt;、&lt;code&gt;OBoxShadow&lt;/code&gt;、&lt;code&gt;msBoxShadow&lt;/code&gt; 或是 &lt;code&gt;KhtmlBoxShadow&lt;/code&gt; 屬性，值得注意的是，在 &lt;code&gt;style&lt;/code&gt; 屬性下的 DOM 前置詞，只有 IE 的前置詞全是小寫字串。&lt;/p&gt;
&lt;p&gt;這段程式碼拆成了幾個 functions 來做，它的流程大致是這樣的：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;testPropsAll(&amp;#039;boxShadow&amp;#039;);

// 切到 testPropsAll 的函式定義
// domPrefixes = &amp;#039;Webkit Moz O ms Khtml&amp;#039;.split(&amp;#039; &amp;#039;)
function testPropsAll( prop, prefixed ) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ucProp&amp;nbsp;&amp;nbsp;= prop.charAt(0).toUpperCase() + prop.substr(1),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;props&amp;nbsp;&amp;nbsp; = (prop + &amp;#039; &amp;#039; + domPrefixes.join(ucProp + &amp;#039; &amp;#039;) + ucProp).split(&amp;#039; &amp;#039;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return testProps(props, prefixed);
}

// 再到 testProps 的函式定義
function testProps( props, prefixed ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for ( var i in props ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( mStyle[ props[i] ] !== undefined ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return prefixed == &amp;#039;pfx&amp;#039; ? props[i] : true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;
}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;要檢查一個 CSS 樣式屬性時，直接呼叫 &lt;code&gt;testPropsAll&lt;/code&gt; 函式來取得瀏覽器是否支援（最後會得到 true 或 false），而 &lt;code&gt;testPropsAll&lt;/code&gt; 函式中會將前置詞拼湊之後，以陣列的形式傳遞至 &lt;code&gt;testProps&lt;/code&gt; 函式來檢查，所以在 &lt;code&gt;testProps&lt;/code&gt; 函式中就直接以一個 for-each-loop 看看這些屬性（如：&lt;code&gt;WebkitBoxShadow&lt;/code&gt;）是否在 &lt;code&gt;mStyle&lt;/code&gt; 中有被定義（以 &lt;code&gt;!== undefined&lt;/code&gt; 做檢查，以免遇到 falsy value 的問題）。&lt;/p&gt;
&lt;p&gt;而 &lt;code&gt;prefixed&lt;/code&gt; 引數則是為了 &lt;code&gt;Modernizr.prefiexed&lt;/code&gt; 這個 API 所準備的，這部份稍候再做介紹。&lt;/p&gt;
&lt;h3&gt;偵測 HTML5 標籤能力&lt;/h3&gt;
&lt;p&gt;HTML5 新增了不少標籤的定義，但是要如何「確切」地知道瀏覽器是不是支援某個標籤呢？以 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; 為例，如果直接使用 &lt;code&gt;document.createElement(&amp;#039;canvas&amp;#039;);&lt;/code&gt; 來測試，瀏覽器並不會反應出是否有真正支援 canvas 的繪圖能力，所以必須針對標籤的特性再做一些測試，像是：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;var elem = document.createElement(&amp;#039;canvas&amp;#039;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return !!(elem.getContext &amp;amp;&amp;amp; elem.getContext(&amp;#039;2d&amp;#039;));&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;就可以測試建立出來的 &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; 物件是否真的有 &lt;code&gt;getContext&lt;/code&gt; 方法可以操作。比較特殊的測試還有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; 的支援測試，Modernizr 作了兩件事：
&lt;ol&gt;
&lt;li&gt;檢查是不是有 &lt;code&gt;canPlayType&lt;/code&gt; 方法&lt;/li&gt;
&lt;li&gt;檢查編碼器的支援能力（ogg, h264, webm）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完整的程式碼如下：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tests[&amp;#039;video&amp;#039;] = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var elem = document.createElement(&amp;#039;video&amp;#039;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( bool = !!elem.canPlayType ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= new Boolean(bool);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool.ogg&amp;nbsp;&amp;nbsp;= elem.canPlayType(&amp;#039;video/ogg; codecs=&amp;quot;theora&amp;quot;&amp;#039;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Workaround required for IE9, which doesn&amp;#039;t report video support without audio codec specified.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;&amp;nbsp; bug 599718 @ msft connect
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var h264 = &amp;#039;video/mp4; codecs=&amp;quot;avc1.42E01E&amp;#039;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool.h264 = elem.canPlayType(h264 + &amp;#039;&amp;quot;&amp;#039;) || elem.canPlayType(h264 + &amp;#039;, mp4a.40.2&amp;quot;&amp;#039;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool.webm = elem.canPlayType(&amp;#039;video/webm; codecs=&amp;quot;vp8, vorbis&amp;quot;&amp;#039;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch(e) { }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return bool;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;值得注意的是，這個測試的回傳值是一個 &lt;code&gt;Boolean&lt;/code&gt; 物件，為什麼不直接使用 &lt;code&gt;true&lt;/code&gt; 或 &lt;code&gt;false&lt;/code&gt; 這樣的 literal 呢？因為它可以借用這個物件來放入 &lt;code&gt;ogg&lt;/code&gt;、&lt;code&gt;h264&lt;/code&gt; 以及 &lt;code&gt;webm&lt;/code&gt; 的屬性，這樣單純在使用 &lt;code&gt;Modernizr.video&lt;/code&gt; 作為是否支援 &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; 標籤的真值判斷，同時又可以再使用 &lt;code&gt;Modernizr.video.h264&lt;/code&gt; 來判斷是否支援 h.264 編碼過的影片。&lt;/p&gt;
&lt;p&gt;而類似的 &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; 也有類似的作法。&lt;/li&gt;
&lt;li&gt;SVG 的支援，程式碼很簡單：&lt;br /&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;// ns = {&amp;#039;svg&amp;#039;: &amp;#039;http://www.w3.org/2000/svg&amp;#039;}
return !!document.createElementNS &amp;amp;&amp;amp; !!document.createElementNS(ns.svg, &amp;#039;svg&amp;#039;).createSVGRect;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;除了用 &lt;code&gt;createElementNS&lt;/code&gt; 來產生 &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; 標籤之外，也檢查產生出來的物件是否有 &lt;code&gt;createSVGRect&lt;/code&gt; 的方法。&lt;/p&gt;
&lt;p&gt;而瀏覽器是否支援 inline SVG 的部份也有點 tricky，簡單地說就是直接塞一個空的 &lt;code&gt;&amp;lt;svg /&amp;gt;&lt;/code&gt; 到文件中，然後看看瀏覽器會不會將它展開成標準格式的 SVG：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;pre&gt;&lt;code&gt;var div = document.createElement(&amp;#039;div&amp;#039;);
div.innerHTML = &amp;#039;&amp;lt;svg/&amp;gt;&amp;#039;;
return (div.firstChild &amp;amp;&amp;amp; div.firstChild.namespaceURI) == ns.svg;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;（下集將介紹 Modernizr 所提供的 API，以及它程式碼寫作的技巧）&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=qSVXoFs3h-g:C7LYvdPJMg8:s-8VKXkisxk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?d=s-8VKXkisxk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ericsk?a=qSVXoFs3h-g:C7LYvdPJMg8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ericsk?i=qSVXoFs3h-g:C7LYvdPJMg8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ericsk/~4/qSVXoFs3h-g" height="1" width="1"/&gt;</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://blog.ericsk.org/archives/1444</feedburner:origLink></entry></feed>
