<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog: timdream &#187; MozTW</title>
	<atom:link href="http://blog.timc.idv.tw/categories/moztw/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.timc.idv.tw</link>
	<description>網路、Mozilla、天文、物理、科學、科幻、社會 …… 自由</description>
	<lastBuildDate>Tue, 31 Jan 2012 01:32:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>American Censorship Day</title>
		<link>http://blog.timc.idv.tw/posts/american-censorship-day/</link>
		<comments>http://blog.timc.idv.tw/posts/american-censorship-day/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 02:47:12 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1406</guid>
		<description><![CDATA[Note: If you are reading this on the site, you will see the banner censored. The US Congress is currently discussing a bill that will give the power of government to shut down websites, prosecute social network users (i.e. you and me) for making minor non-commercial copyright violation (e.g. singing a pop song on Facebook), [...]]]></description>
			<content:encoded><![CDATA[<p><a style="width:40%; min-width: 300px; height:17px;vertical-align:middle;text-align:center;background-color:#000;position:absolute;z-index:5555;top:40px;left:5%;background-image:url(http://americancensorship.org/images/stop-censorship-small.png);background-position:center center;background-repeat:no-repeat;-moz-transform: rotate(-3deg);-webkit-transform: rotate(-3deg);-ms-transform: rotate(-3deg);-o-transform: rotate(-3deg);transform: rotate(-3deg);" href="http://americancensorship.org"></a></p>
<p><strong>Note:</strong> If you are reading this on <a href="http://blog.timc.idv.tw/">the site</a>, you will see the banner censored.</p>
<p>The US Congress is currently discussing a bill that will give the power of government to shut down websites, prosecute social network users (i.e. you and me) for making minor non-commercial copyright violation (e.g. singing a pop song on Facebook), etc. <strong>This is the end of free speech on Internet as we know it, and is an attempt to build national firewall and censorship system much like <a href="https://en.wikipedia.org/wiki/Great_Firewall_of_China">the one in China</a>.</strong></p>
<p><iframe class="aligncenter" src="http://player.vimeo.com/video/31100268?title=0&#038;byline=0&#038;portrait=0" width="640" height="360" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<p>Please join us for the fight to preserve freedom on Internet. More information can be found at <a href="http://americancensorship.org/">americancensorship.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/american-censorship-day/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Looking Backwards, Connecting the Dots</title>
		<link>http://blog.timc.idv.tw/posts/looking-backwards-connecting-the-dots/</link>
		<comments>http://blog.timc.idv.tw/posts/looking-backwards-connecting-the-dots/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 16:37:31 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Journal]]></category>
		<category><![CDATA[Me Me Me]]></category>
		<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Physics]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1322</guid>
		<description><![CDATA[So the day came. I have not much to say like everyone else on the web and mess media. I don&#8217;t want to go on skin-depth things like how he transformed the computer industry and the world &#8211; I didn&#8217;t even agree most of the tactics he used (like, all closed-source, closed and single distributor [...]]]></description>
			<content:encoded><![CDATA[<p>So the day came.</p>
<p>I have not much to say like everyone else on the web and mess media. I don&#8217;t want to go on skin-depth things like how he transformed the computer industry and the world &#8211; I didn&#8217;t even agree most of the tactics he used (like, all closed-source, closed and single distributor model for the iOS platform, etc.).</p>
<p><strong>I want to share something personal with you here, instead.</strong></p>
<p>I did a lot of things that didn&#8217;t make sense to my parents, nor to myself at the time. Ever since mid-school, I spent countless hours making websites. I was the computer guru to my high school classmates because the guestbook/chatroom service I built was practically <em>the</em> online social network to them. When I went to college, I chose to take physics as major instead of computer science because I thought there were more wonders in the mechanics of the physical world instead of inside a computer. That turned out to be true, and the wonders unfortunately succumbed me; my grades in physics classes were never higher than the one and only computer science class I took. I didn&#8217;t know what to do at the time; I didn&#8217;t want to, and couldn&#8217;t go for the regular career a physics-major in Taiwan would usually do, that is go to graduate school, and to TSMC/UMC or other semiconductor companies straight from school, the flagship industry of Taiwan &#8211; The promise land with dicent salary and social recognition.</p>
<p>Nevertheless, I got my B.Sc. anyway. I stall a bit by deliberately not to meet the graduation requirement (which is, ironically, English requirement) and stayed for a fifth year. I joined MozTW and took care of Firefox localization, started to get to know people in the technology circle, many of whom are big names I admired. I gave lectures at meet-ups and events, wrote web application for Firefox promotion. I co-organized events, designed event websites. I built a paper toss game in the IE9 hackathon event and was awarded an XBox 360 + Kinect. Eventually, I am recognized by people as a qualified front-end developer.</p>
<p><iframe width="420" height="315" class="aligncenter" src="http://www.youtube.com/embed/Hd_ptbiPoXM" frameborder="0" allowfullscreen></iframe></p>
<p>(<a href="http://news.stanford.edu/news/2005/june15/jobs-061505.html">Full text of Steve Jobs&#8217; 2005 Stanford Commencement Address</a>)</p>
<p>I don&#8217;t actually remember when I see the speech for the first time. At first it didn&#8217;t make an impression. It was not until some day, I realized <strong>&#8220;connecting the dots by looking backwards&#8221;</strong> is exactly what I did, and do right now: Without these &#8220;personal homepage&#8221; I wrote before college, I wouldn&#8217;t know how server-client architecture works. Without my college projects in the physics department, I wouldn&#8217;t have any idea how to organize a full-scale rich-content website, nor the chance to improve my communication skill. Without MozTW I wouldn&#8217;t be known by my talented peers. Even physics has a part when I looked backwards &#8211; The paper toss game I wrote at the IE9 event is actually based on physics simulation skill I learned in school. I hated that class, but without the knowledge the game wouldn&#8217;t have such animation effect.</p>
<p>Indeed, Steve was right all along. <strong>&#8220;You can&#8217;t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. &#8230; This approach has never let me down, and it has made all the difference in my life.&#8221;</strong>, he said. By looking backwards, I found everything I did somehow makes who I am today, and they surely made all the difference.</p>
<p>This is what Mr. Jobs meant to me. Nothing technological nor innovative, purely personal. So long, Steve, you lived a good life. This post is my tribute to you, and you will certainly be missed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/looking-backwards-connecting-the-dots/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>專訪 Mozilla 總部</title>
		<link>http://blog.timc.idv.tw/posts/mozilla-hq-interview/</link>
		<comments>http://blog.timc.idv.tw/posts/mozilla-hq-interview/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 08:19:01 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Me Me Me]]></category>
		<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1123</guid>
		<description><![CDATA[去年 12 月去了 San Francisco，順道去參觀了 Mountain View 的 Mozilla 總部（感謝 Marketing 的 Mary Colvig 的招待！）。我自己在當天例會給了 5 min 的小 talk 介紹了 MozTW，反過來則邀請了四位 Mozilla 的員工讓我訪問，影片在 YouTube 上。 如果有時間的話，請到 Universal Subtitles 幫忙上字幕！感謝！]]></description>
			<content:encoded><![CDATA[<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/p/0D758EE24E664330?hl=zh_TW&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/p/0D758EE24E664330?hl=zh_TW&#038;fs=1" type="application/x-shockwave-flash" width="480" height="385" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>去年 12 月去了 San Francisco，順道去參觀了 Mountain View 的 Mozilla 總部（感謝 Marketing 的 Mary Colvig 的招待！）。我自己在當天例會給了 5 min 的小 talk 介紹了 <a href="http://moztw.org/">MozTW</a>，反過來則邀請了四位 Mozilla 的員工讓我訪問，<a href="http://www.youtube.com/view_play_list?p=0D758EE24E664330">影片在 YouTube 上</a>。</p>
<p>如果有時間的話，請到 <a href="http://universalsubtitles.org/">Universal Subtitles</a> 幫忙上字幕！感謝！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/mozilla-hq-interview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Developers Conference 2010</title>
		<link>http://blog.timc.idv.tw/posts/firefox-developers-conference-2010/</link>
		<comments>http://blog.timc.idv.tw/posts/firefox-developers-conference-2010/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 15:38:11 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1077</guid>
		<description><![CDATA[週末應 Mozilla Japan 之邀，飛去東京參加 Firefox Developers Conference 2010，以下摘要聽到新知和感想。 Browsing Without Borders &#8211; Jay Sullivan Mozilla 作為一個非營利組織，其核心目標為：維護網路的自由、開放、與創新。藉由 Firefox，Mozilla 成功達成了階段性的目標。接下來呢？ Sullivan 介紹了目前 Internet 的發展的四個面向：Mobile、Cloud、Apps、Social。這四個面向均有其創新，但也有許多現有的商業模式會影響網路的自由、開放、與創新。 在行動網路上，Mozilla 會開發手機版本的 Firefox，確保單一廠商不會像 2001 年那樣壟斷網路。Mozilla 會堅持網路中立性、尤其是反對現在在行動網路電信商已經實施的不中立資費方式 在雲端應用上，Mozilla 會持續投資原來稱為 Weave 的瀏覽器同步技術，讓瀏覽器能輕易的在任何地方帶來個人化體驗；也利用 Weave 處理個人資料的模式來實做真正能保障個人隱私的雲端技術。 在網路應用程式的層面，Mozilla 已經發表了 Open Web App 提議，用去中心式的架構散佈軟體，以及確保創新。 在社群網絡的部份，Mozilla 會繼續開發讓使用者能夠方便分享資訊的產品，同時要強調使用者能夠保有對資料的最終控制權。 有句很重要的話就是，「Without product, we are just talking」。Mozilla 會繼續發展產品與技術（例如，讓 Firefox 的執行速度追上其他瀏覽器），用產品來彰顯其核心價值。 最後的 QA，有人問了 Firefox 為何沒有 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.timc.idv.tw/wp-content/uploads/fxdevcon.png" alt="" title="Firefox Developers Conference 2010" class="aligncenter size-full wp-image-1084" /></p>
<p>週末應 Mozilla Japan 之邀，飛去東京參加 <a href="http://mozilla.jp/events/2010/fxdevcon/">Firefox Developers Conference 2010</a>，以下摘要聽到新知和感想。</p>
<h3>Browsing Without Borders &#8211; Jay Sullivan</h3>
<p>Mozilla 作為一個非營利組織，其核心目標為：維護網路的自由、開放、與創新。藉由 Firefox，Mozilla 成功達成了階段性的目標。接下來呢？</p>
<p>Sullivan 介紹了目前 Internet 的發展的四個面向：Mobile、Cloud、Apps、Social。這四個面向均有其創新，但也有許多現有的商業模式會影響網路的自由、開放、與創新。</p>
<ul>
<li>在行動網路上，Mozilla 會開發手機版本的 Firefox，確保單一廠商不會像 2001 年那樣壟斷網路。Mozilla 會堅持網路中立性、尤其是反對現在在行動網路電信商已經實施的不中立資費方式</li>
<li>在雲端應用上，Mozilla 會持續投資原來稱為 Weave 的瀏覽器同步技術，讓瀏覽器能輕易的在任何地方帶來個人化體驗；也利用 Weave 處理個人資料的模式來實做真正能保障個人隱私的雲端技術。</li>
<li>在網路應用程式的層面，Mozilla 已經發表了 <a href="http://apps.mozillalabs.com/">Open Web App 提議</a>，用去中心式的架構散佈軟體，以及確保創新。</li>
<li>在社群網絡的部份，Mozilla 會繼續開發讓使用者能夠方便分享資訊的產品，同時要強調使用者能夠保有對資料的最終控制權。</li>
</ul>
<p>有句很重要的話就是，「Without product, we are just talking」。Mozilla 會繼續發展產品與技術（例如，讓 Firefox 的執行速度追上其他瀏覽器），用產品來彰顯其核心價值。</p>
<p>最後的 QA，有人問了 Firefox 為何沒有 iPhone 版的老問題。我問了 Mozilla 有沒有 Firefox OS 的構想。Sullivan 說內部有討論過，但是有些細節的問題：例如市場目前還是對 Andorid 比對 Chrome OS 有興趣、這麼大的計畫在 Mozilla 的資源分配、還有使用者的觀點等等。我想這未來應該有機會 follow up。</p>
<h3>John Resig feat. Shibuya.js</h3>
<p>John Resig 受 Javascript 開發同好組織 Shibuya.js 之邀再度訪問日本。這個 session 以 lightening talk 的方式進行，John 佔三個，其他時間由 Shibuya.js 發表，由 Resig 給 comment。</p>
<p>列出幾個我記得的：</p>
<ul>
<li>John Resig 的三個 talk 分別是介紹 ECMAScript 5、Processing.js 1.0、和 jQuery Mobile。</li>
<li>@gyuque 用 AudioDataAPI 在 JavaScript 上實做了調變器（JS Modulator；調變就是數據機 MODEM 這個字的前兩個字母的縮寫），把數據資料轉換成聲音。在會場上播那個聲音（跟以前撥接的聲音一樣）的時候大家都笑了；最後他把聲音信號接進小時候玩的用錄音帶紀錄資訊的電腦，然後就把資料傳進去了！在投影片上看起來是 BASIC 的程式。不過現在還沒有 Device API 因此無法達成雙向通訊，所以這部份就待續。</li>
<li>@ku 寫了一個 iPhone 程式，把 WebView 接上了自己刻的 HTTP Server；該 Server 即為 Mobile Safari 的 JS Console（不過還不能抓到 Exception）。</li>
<li>8-p.info 的 Kato-san，幫 Chrome 寫了 MozRepl，稱為 ChromeRepl。</li>
<li>@yksk 解釋他在 pixiv 的工作，用 LABjs 增加 Javascript 在網站上的載入效率；Pixiv 因為歷史共頁同時用了很多 lib，還需要下載很多 JSON。</li>
<li>@t_wada 介紹了一些 coding 的 best practice，尤其是 testing 上的。</li>
<li>@mesc 講了一些人們對 Node.js 的誤解</li>
<li>@_fp 是 NetFront 的工程人員，他介紹了 NetFront 的 Javascript 引擎。用 C 開發，目前在 x86 上的效率可以趕上 Firefox 2 （OS: 這樣就比 IE6 還快了&#8230;）</li>
<li>Yukoba 介紹了他的作品<a href="http://blog.orto-app.com/2010/11/java-midp-implementation-on-html5-and.html">Orto-App</a> －－ 自己寫 Complier 處理 Java MIDP 程式，轉成用 JavaScript/canvas 或 ActionScript/Flash 執行。</li>
</ul>
<p>感覺這些東西都好厲害呀&#8230; 都要有除了「寫 JavaScript」以外的知識才做的出來。要再努力一點才行。</p>
<h3>其他議程</h3>
<p><a href="http://www.flickr.com/photos/timdream/5196492421/"><img src="http://farm5.static.flickr.com/4151/5196492421_e24b337763_z.jpg" alt="JetPack" /></a></p>
<p>下午的沒有很認真聽跟做筆記 <img src='http://blog.timc.idv.tw/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 。有一些介紹性的演講，講 JetPack SDK 的寫作，展示一些 API （可以換 personas 的圖片、在 Paranoma 上顯示數字等等）。最後 Lightening Talk 之前有個論壇型式的議程，討論 HTML5 的影響。</p>
<p>Lightening Talk 我上去介紹了 Mozilla Taiwan。</p>
<h3>懇親會</h3>
<p>其實就是 Party 啦！有酒、Buffet 啥的。同時舉辦 Lightening Talk （Part II）和抽獎。Lightening Talk 時有一位熱血 developer 展示了把 accerometer API 接上了 AudioDataAPI，結果電腦就變成拿起來搖音波就會改變的東西 <img src='http://blog.timc.idv.tw/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>在 Mozilla 總部負責 Release Engineering 的 John O&#8217;Duinn 和 Mitcho 表演了同步口譯 Lightening Talk！講題是 RE 蓋了多大的機房（Mac Mini 機房，因為 Mac Mini 是唯一能在同一種硬體上執行所有支援的 OS 的機器）只是為了要加快每個 commit 被完整跑完測試的時間（測試越快就越能繼續 commit 下個修改，開發速度就越快）。其中手機機房更是驚人 －－ 基本上是個四面都是金屬，屏蔽外界訊號的房間，裡面用木架布鞋櫃放一台一台的手機（要屏蔽的原因是因為訊號的變化會導致手機把運算轉向到其他服務，讓軟體效能測試無法正確進行）。</p>
<p>抽獎的時候送了一些 T-shirt、外套、大獎是小隻 FoxKeh。更後面的獎是三個 Firefox 滑鼠墊，瀧田（代表理事，Mozilla Japan 的頭）說要請 John Resig 簽名的時候大家都 high 起來了。最後抽獎方式是和 Resig 剪刀石頭布XD</p>
<h3>活動的其他</h3>
<p>回來 Bob 才說，他們辦活動都會準備同步口譯，日翻英、英翻日。像我在台上的時候下面大部分的人就都戴耳機這樣。另外，參加人數大約近 300 人，年紀最小的也有對技術有興趣的中學生。感覺東京的 Web Developer 很多呀 &#8230;&#8230; 不過他們有點太害羞了，在懇親會的時候有段時間竟然是我和 John Resig 和兩個口譯在聊天，哈哈。John Resig 滿有趣的，最後在休息室準備離開之前，還戴了 Foxmosa 耳朵抱著 Foxkeh 拍了這張很萌(?)的照片：</p>
<p><a href="http://www.flickr.com/photos/timdream/5197098044/"><img src="http://farm5.static.flickr.com/4106/5197098044_b229c2a089_z.jpg" alt="John Resig featuring Foxkeh and Foxmosa ears" /></a></p>
<p>當面也討論了有沒有機會請他來台灣的事宜。他希望亞洲這邊能喬好，讓他能夠飛一趟就能巡迴演講到所有地方。這就要各地 Mozilla 社群、或是 jQuery 社群的幫忙了（台灣有人願意喊聲接辦活動嗎？）</p>
<h3>東京其他</h3>
<p>除了活動，我還去了新宿、歌舞伎町、明治神宮和台場的未來科學博物館。星期五的新宿都是一群一群找居酒屋、剛下班的上班族。明治神宮星期天有很多帶小朋友去過七五三節的家長，小朋友都穿的很正式的樣子。台場的未來科學博物館有一些特別的東西，其中一個是用黑白彈珠演示網路的封包傳遞。不過我時間沒量好，在台場超匆忙的，只逛了博物館就離開了。</p>
<p>東京是個只要知道地鐵跟 JR 怎麼坐就可以到處去的地方，但是有一次遇到被售票機吃錢，不說英文的站務員就不幫我忙了（後來不知為何錢又回來了倒是）。松山到羽田真的很方便，來回都可以坐捷運／電車到機場。不過羽田機場因為國際航廈新開幕，很多本地人去逛街，回台北的晚上整個就是滿的，我 check-in 之後趕緊逃到關外去。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/firefox-developers-conference-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML5 之先縮圖再上傳</title>
		<link>http://blog.timc.idv.tw/posts/html5-resize-image-and-upload/</link>
		<comments>http://blog.timc.idv.tw/posts/html5-resize-image-and-upload/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 08:14:53 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1064</guid>
		<description><![CDATA[為了要實現「使用者選了檔案，先用 canvas 縮圖然後當做檔案上傳」這個 idea，後來又花了一點時間把HTML5 檔案上傳改了一下。如果聽過或是看過之前的投影片就知道之前的程式碼分成三步驟： 讀檔案 組合 multipart/form-data 上傳檔案 而要實做縮圖則是加上了步驟 1.5： 把檔案轉換成 data: URL 用 &#60;img&#62; 載入 把圖貼進 &#60;canvas&#62; 把 &#60;canvas&#62; 的資料讀出來 然後就可以送到步驟 2 了。但是我試了半天，發現還是只能讓 Firefox 用；因為 Firefox 3 以上可以接受且上傳 binary string 組出來的 multipart/form-data；如果是 Firefox 4 (> 20100917; beta7pre) 的話，還可以用 canvas.mozGetAsFile 直接產生在硬碟裡不存在的 File 物件，送進 FormData。 Webkit 因為上述兩種做法都不存在所以行不通。直接把 binary string 送去 xhr.send() 在 Chrome 6 會錯誤，在 [...]]]></description>
			<content:encoded><![CDATA[<p>為了要實現「使用者選了檔案，先用 canvas 縮圖然後當做檔案上傳」這個 idea，後來又花了一點時間把<a href="http://timc.idv.tw/html5-file-upload/">HTML5 檔案上傳</a>改了一下。如果聽過或是看過<a href="http://blog.timc.idv.tw/posts/html5-ajax-file-upload/">之前的投影片</a>就知道之前的程式碼分成三步驟：</p>
<ol>
<li>讀檔案</li>
<li>組合 multipart/form-data</li>
<li>上傳檔案</li>
</ol>
<p>而要實做縮圖則是加上了步驟 1.5：</p>
<ol>
<li>把檔案轉換成 data: URL</li>
<li>用 &lt;img&gt; 載入</li>
<li>把圖貼進 &lt;canvas&gt;</li>
<li>把 &lt;canvas&gt; 的資料讀出來</li>
</ol>
<p>然後就可以送到步驟 2 了。但是我試了半天，發現還是只能讓 Firefox 用；因為 Firefox 3 以上可以接受且上傳 binary string 組出來的 multipart/form-data；如果是 Firefox 4 (> 20100917; beta7pre) 的話，還可以用 canvas.mozGetAsFile 直接產生在硬碟裡不存在的 File 物件，送進 FormData。</p>
<p>Webkit 因為上述兩種做法都不存在所以行不通。直接把 binary string 送去 xhr.send() 在 Chrome 6 會錯誤，在 Chrome 7 會把字串當成 UTF-8 轉碼再傳，整個破壞掉。Google 之後發現了 <a href="http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface">BlobBuilder</a> 和 xhr.send(blob) 這些標準 binary data 處理方式，但是試了之後還是沒有把 binary string 正確轉換成 Blob 的方法；字串一樣會被當成 UTF-8；指定 byte code 轉換成 blob 所需的 ArrayBuffer 物件瀏覽器還沒實做。</p>
<p>最後自暴自棄了試了一些 hack 的方法：因為 Blob 可以切割，故只要想辦法把某個長度為 255 bytes 的 ascii.bin 轉成 Blob，就可以拿來拼湊任何資料。XMLHttpRequest level 2 有定義 <a href="http://www.w3.org/TR/XMLHttpRequest2/#the-responseblob-attribute">responseBlob</a>，不過試了才發現瀏覽器沒實做。FileReader 和 File 物件的 hack 變成要<a href="http://www.cs.helsinki.fi/u/twruottu/testi/bpost.html">要求使用者下載某個檔案再選</a>。UTF-8 <a href="http://en.wikipedia.org/wiki/UTF-8#Description">無法用到所有的 byte 位置</a>，所以不能拿來湊有所有 byte 碼位的 blob。</p>
<p>所以啦，感想就是如果瀏覽器要實做 HTML5 要把所有功能都實做完呀，不然要做的事情拼不出來。</p>
<p>關於 Blob 無法表現任意資料的問題，<a href="http://lists.w3.org/Archives/Public/public-webapps/2010OctDec/0155.html">這邊有一篇抱怨</a>。</p>
<p><strong>Update: </strong> 後來發現 ArrayBuffer 在 Chrome 9 (dev) 和 Firefox 有實做，所以還是把功能加上去了。就看 Chrome 9 什麼時候變正式版？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/html5-resize-image-and-upload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Account as OpenID</title>
		<link>http://blog.timc.idv.tw/posts/google-app-account-as-openid/</link>
		<comments>http://blog.timc.idv.tw/posts/google-app-account-as-openid/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 09:50:28 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1059</guid>
		<description><![CDATA[Scroll down for English. 這是我今天在高雄 MozTW 連續聚的講題：Google Apps 帳號 OpenID 化，或是說，用 Google Apps 把網域升級成 OpenID 帳號提供者。 同時提供英文版投影片。 This is my talk in MozTW gathering at Kaohsiung today: Google Apps Account as OpenID, or, OpenID-ize your domain with Google Apps. Slides are also available in zh-TW.]]></description>
			<content:encoded><![CDATA[<blockquote>
<p>Scroll down for English.</p>
</blockquote>
<p>這是我今天在<a href="http://registrano.com/events/moztw-gathering-kh-2010">高雄 MozTW 連續聚</a>的講題：<a href="http://www.slideshare.net/timdream/google-apps-account-as-open-id-zh-tw">Google Apps 帳號 OpenID 化</a>，或是說，用 Google Apps 把網域升級成 OpenID 帳號提供者。</p>
<div style="width:425px" id="__ss_5609811"><object id="__sse5609811" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleappsaccountasopenidzh-tw-101029103507-phpapp01&#038;rel=0&#038;stripped_title=google-apps-account-as-open-id-zh-tw&#038;userName=timdream" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5609811" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleappsaccountasopenidzh-tw-101029103507-phpapp01&#038;rel=0&#038;stripped_title=google-apps-account-as-open-id-zh-tw&#038;userName=timdream" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>同時提供<a href="http://www.slideshare.net/timdream/google-apps-account-as-openid">英文版投影片</a>。</p>
<hr />
<p>This is my talk in MozTW gathering at Kaohsiung today: <a href="http://www.slideshare.net/timdream/google-apps-account-as-openid">Google Apps Account as OpenID</a>, or, OpenID-ize your domain with Google Apps.</p>
<div style="width:425px" id="__ss_5609810"><object id="__sse5609810" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleappsaccountasopenid-101029103510-phpapp01&#038;rel=0&#038;stripped_title=google-apps-account-as-openid&#038;userName=timdream" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5609810" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=googleappsaccountasopenid-101029103510-phpapp01&#038;rel=0&#038;stripped_title=google-apps-account-as-openid&#038;userName=timdream" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>Slides are also <a href="http://www.slideshare.net/timdream/google-apps-account-as-open-id-zh-tw">available in zh-TW</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/google-app-account-as-openid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>To Mozilla HQ: It&#8217;s about time to launch a Firefox OS Project</title>
		<link>http://blog.timc.idv.tw/posts/to-mozilla-hq-its-about-time-to-launch-a-firefox-os-project/</link>
		<comments>http://blog.timc.idv.tw/posts/to-mozilla-hq-its-about-time-to-launch-a-firefox-os-project/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 05:40:50 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=1000</guid>
		<description><![CDATA[I&#8217;ve talked about Firefox OS during several offline occasion; some people find the concept hard to understand, some, agreed with me, suggested that I should put everything together in written so people at large would know about it. Here are the reasons why I believe Mozilla should start working on an operating system based on [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve talked about Firefox OS during several offline occasion; some people find the concept hard to understand, some, agreed with me, suggested that I should put everything together in written so people at large would know about it. <strong>Here are the reasons why I believe Mozilla should start working on an operating system based on Firefox.</strong></p>
<h3 id="enrich-ecosystem">1. To enrich the add-on ecosystem</h3>
<p>Before Apple&#8217;s iTunes Apps Store for iPhone, and iPod or iPad later, <a href="http://addons.mozilla.org/">Mozilla Add-ons</a> was one of the largest collections of web software. The add-ons does from simply help people to access content to development tools. However, after 5 years of introduction of Firefox and it&#8217;s extension framework, people find it hard to formulate a business model with it &#8211; Mozilla try to cope the problem with donation system incorporated within the add-on site, however, with the proven model from the competitors, developers had shift their focus to these new platforms. <a href="http://www.echofon.com/">Echofon</a>, once called TwitterFox, would not be able to deliver a paid &#8220;pro&#8221; version successfully if it had not reach other platforms.</p>
<p>By developing an Firefox OS, Mozilla could make proof to developers in the ecosystem that Firefox is more than a browser, and their hard work is more than browser add-ons. I am not saying turning Firefox into an OS would immediately make add-ons development profitable &#8211; however, it might not never be if there is no OS.</p>
<h3 id="provide-alternative">2. To provide an alternative browser OS</h3>
<p>When I talked about Firefox OS, people often compare my imaginary OS with Chrome OS. It&#8217;s comparable, yet, the Google&#8217;s approach might not be the best way. For instance, Google intend to copy Apple&#8217;s business model, creating an centralized <a href="https://chrome.google.com/webstore">Chrome Web Store</a>, defeat the purpose that web should be a platform without a controlling vendor.</p>
<p>Should Mozilla had working on a Firefox OS, it not only provide an alternative to Chrome OS, but it also give users valuable choices on browser OS front. Alternative is not about playing the RMS card &#8211; that every software should have a libre alternative &#8211; instead, the existence of the strong enough alternative is the key to drive innovation.</p>
<p>(Don&#8217;t believe me? Think about IE6.)</p>
<h3 id="deliver-better-ux">3. To deliver better user experience in Firefox</h3>
<p>The recent development of Firefox 4 bring exciting UI changes that align with many modern browsers, like Application Tabs or TabCandy, later known as <a href="http://www.azarask.in/blog/post/designing-tab-candy/">Panorama</a>, which enables user new innovate ways to organize information and works.</p>
<p>These powerful features, nevertheless, doesn&#8217;t work within an application as tiny as a browser sometimes. Before Panorama, I usually group my works in different browser windows, so I could switch between them on Windows taskbar. After trying Panorama, along with Application Tab, I don&#8217;t think it works as well as Exposé in Mac OS X, or even what I did. For example, app tabs are always visible no matter what Panorama work space you selected, yet in Panorama view app tabs actually belongs to a group &#8211; this results confusion. What&#8217;s worse, click in any app tab in another work group immediately brings you to that group, with no fast way to switching back.</p>
<p>Another example would be the UI change decision about <a href="http://www.youtube.com/watch?v=HmgtW2Iw-kE">bringing tabs on top of the toolbar</a>. I agreed with the decision to bring tabs to top; but when I pressed F11 to make my Firefox window go full screen, I found the close window button (the X) was not on the top-right corner of the screen (which, according to <a href="http://en.wikipedia.org/wiki/Fitts%27s_law">Fitt&#8217;s law</a>, is a hot spot for cursor aiming, and, according to the logic of Windows OS, should be always the place to close a maximized window).</p>
<p><a href="http://blog.timc.idv.tw/wp-content/uploads/fx-4-top-right-close-button.png"><img src="http://blog.timc.idv.tw/wp-content/uploads/fx-4-top-right-close-button.png" alt="" title="fx-4-top-right-close-button" class="aligncenter size-full wp-image-1008" /></a></p>
<p>These examples might be just tiny issues that come with a beta version of Firefox; I believe most of them will be fixed by talent people at Mozilla before the final version releases. Nonetheless, these are the evidence that how messy it would be to ask an browser <em>within an operating system</em> to manage it&#8217;s own tasks &#8211; We should definitely work on these user experience innovation, however a Firefox <em>browser</em> will always be a constraint for these interaction innovations &#8211; A Firefox <em>OS</em> will not. By developing a Firefox OS with these innovations, Mozilla will certainly have a better chance to polish them before they were brought to the browser.</p>
<p>Ever since Windows 95, binding between tasks in browser window and tasks in client applications has always been a key issue. Windows 7 introduced jump list; IE9 users will be able to pin websites on their Windows task bar. A Firefox OS will help Mozilla developers come up with even better interaction, instead of endlessly implement what Windows, or other OS APIs enables applications (browsers) to do. </p>
<h3 id="defend-open-web">4. To defend the Open Web</h3>
<p>Mozilla is a foundation with limited resource. Everything it does has to be somehow connect to <a href="http://www.mozilla.org/about/manifesto.en">its mission</a>. A Firefox OS project will undeniably connect to the cause. Here is one of the reasons why: Today, <a href="http://gigaom.com/2010/08/13/gowalla-ceo-sorry-mobile-web-users-prefer-apps/">users prefer mobile apps than [mobile] web.</a></p>
<p>I <a href="http://twitter.com/timdream/status/22080033931">twitted</a> the link sometimes ago. The sad inconvenient truth is, if people access information mainly from apps but not the through the browser, the browser itself will be irrelevant. Eventually, the web itself will be irrelevant, along with the promises of the Open Web that Mozilla holds true. Yet, this is exactly what is happening right now on the mobile front.</p>
<p>(Stilling thinking about bring a full Firefox to iOS is important? IMO it brings more buzz than piratical use.)</p>
<p>Firefox OS has the potential to become not just browser OS for web platform but also a truly open platform. Think about a slightly exaggerated future, where desktops, OSes, and applications on it seize to exist. People would access information on the Internet without going through the Web (and HTTP) but using devices and site-specific applications using socket connections. In that future, there are better be a vendor that continue express interests of openness through technologies and end-user products, and let that vendor be Mozilla, even though the Web as we know it seize to exist. Firefox OS could be that end-user product, just like Firefox 1.0 did to the web almost 6 years ago. Firefox OS could ultimately transform itself beyond <em>browser</em>, or <em>browser OS</em>, but first Mozilla need to make a browser OS.</p>
<p>Thus, to Mozilla HQ: <strong>It&#8217;s about time to launch a Firefox OS Project.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/to-mozilla-hq-its-about-time-to-launch-a-firefox-os-project/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Responsive Web Design</title>
		<link>http://blog.timc.idv.tw/posts/responsive-web-design/</link>
		<comments>http://blog.timc.idv.tw/posts/responsive-web-design/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 03:44:59 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=963</guid>
		<description><![CDATA[Ethan Marcotte 的《Responsive Web Design》，布丁爸爸說這是 2010 上半年最重要的文章之一。 內文主要是在闡述一個重要的 Idea：「Responsive Web Design」。隨著 Web 從 PC 螢幕移動到各式各樣的裝置，為每個裝置設計不同的網站版本（iPad 版、iPhone 版、手機版）是個 viable 但是不 scalable 的解決方法。作者認為，網站開發時如同「Responsive Architecture」的概念一樣，讓環境去適應使用者的存在 －－ 像是自動調節室內溫度、將窗戶霧化以保護隱私等。網站設計不應該是平面出版的電子化，存在於固定的版面、文字大小、圖文配置；設計應該要自然的適應不同的裝置，自動調整版面的 flow，甚至是互動 UI 的大小等等。 實作的細節，作者花了後半的篇幅在介紹 CSS media query。Media Query 是以前 CSS 2 的 media type 延伸，不同的是它不只是一組預先設定好的媒體（螢幕、紙本、點字、語音&#8230;），它可以讓開發者自行設定 CSS 規則適用的裝置類型、寬度等等。文章內提供了具體的範例，展示了使用 Media Query，作者可以指定當裝置的螢幕寬度小於多少、或是介於多少時，網頁可以隨之切換欄數、圖片寬度、圖文配置等等。 我自己把文章印了出來（地球對不起 &#62; &#60;），認真讀了一遍，滿有收穫的。雖然 CSS media query 是早就知道的東西，但是不了解前面的設計哲學與意義就不會有動機去玩它（現在就超有動機的哈）。作者的文筆讓人耳目一新，闡述概念的方式相當的生動，可以拿來練英文（真的）。 有個研伸的問題，作者也有簡略提到。CSS media query 解決了排版適應裝置畫面的問題，但如果開發者希望在不同裝置呈現不同的內容，甚至不同的互動時，多版本網站還是解法。如果只是幾行字，或許可以用 display 屬性開關切換掉，但總不會 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alistapart.com/authors/m/emarcotte">Ethan Marcotte</a> 的<strong>《<a href="http://www.alistapart.com/articles/responsive-web-design/">Responsive Web Design</a>》</strong>，<a href="http://iamhlb.com/">布丁爸爸</a><a href="http://twitter.com/bobchao/status/19557422609">說這是 2010 上半年最重要的文章之一</a>。</p>
<p>內文主要是在闡述一個重要的 Idea：「Responsive Web Design」。隨著 Web 從 PC 螢幕移動到各式各樣的裝置，為每個裝置設計不同的網站版本（iPad 版、iPhone 版、手機版）是個 viable 但是不 scalable 的解決方法。作者認為，網站開發時如同「Responsive Architecture」的概念一樣，<strong>讓環境去適應使用者的存在</strong> －－ 像是自動調節室內溫度、將窗戶霧化以保護隱私等。網站設計不應該是平面出版的電子化，存在於固定的版面、文字大小、圖文配置；<strong>設計應該要自然的適應不同的裝置，自動調整版面的 flow，甚至是互動 UI 的大小等等</strong>。</p>
<p>實作的細節，作者花了後半的篇幅在介紹 <strong>CSS media query</strong>。Media Query 是以前 <a href="http://www.w3.org/TR/CSS2/media.html">CSS 2 的 media type</a> 延伸，不同的是它不只是一組預先設定好的媒體（螢幕、紙本、點字、語音&#8230;），它可以讓開發者自行設定 CSS 規則適用的裝置類型、寬度等等。文章內提供了具體的範例，展示了使用 Media Query，作者可以指定當裝置的螢幕寬度小於多少、或是介於多少時，網頁可以隨之切換欄數、圖片寬度、圖文配置等等。</p>
<p>我自己把文章印了出來（地球對不起 &gt; &lt;），認真讀了一遍，滿有收穫的。雖然 CSS media query 是早就知道的東西，但是不了解前面的設計哲學與意義就不會有動機去玩它（現在就超有動機的哈）。作者的文筆讓人耳目一新，闡述概念的方式相當的生動，可以拿來練英文（真的）。</p>
<p>有個研伸的問題，作者也有簡略提到。CSS media query 解決了排版適應裝置畫面的問題，但如果開發者希望在不同裝置呈現不同的內容，甚至不同的互動時，多版本網站還是解法。如果只是幾行字，或許可以用 display 屬性開關切換掉，但總不會 <a href="http://www.facebook.com/">Facebook</a> 套了另一份 CSS 就變成 <a href="http://touch.facebook.com/">Facebook for touch devices</a> 吧 <img src='http://blog.timc.idv.tw/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> 。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/responsive-web-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>知識信用與 HTML5</title>
		<link>http://blog.timc.idv.tw/posts/intellectual-honesty-and-html5/</link>
		<comments>http://blog.timc.idv.tw/posts/intellectual-honesty-and-html5/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 15:36:50 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=959</guid>
		<description><![CDATA[Chris Blizzard 的文章 intellectual honesty and html5，正中我上篇文章講的 Apple 如何假裝開放實際上還是在做 vendor locked-in 的陰謀(陽謀?)。只是這次做的太明顯然後就翻船了。 Blizzard 主要的論點是 Apple 竟然大聲說他們喜歡創新的網路，那出來的產品跟作法就要言行一致 －－ 尤其是 HTML5 這一系列的創新本身的目標之一就是互通性 －－ 不能到處廣告說 Safari 支援 HTML5 然後故意把其他也支援的瀏覽器從示範網頁排除掉；這種顯然是沒有信用、不誠懇的傳遞知識的做為。 Mozilla 的 Sayre 做了一個很酸的 HTML5 demo，哈哈哈 (當然不代表 Mozilla 的立場)。]]></description>
			<content:encoded><![CDATA[<p>Chris Blizzard 的文章 <a href="http://www.0xdeadbeef.com/weblog/2010/06/intellectual-honesty-and-html5/">intellectual honesty and html5</a>，正中我<a href="http://blog.timc.idv.tw/posts/ipad-ready-ipad-only/">上篇文章</a>講的 Apple 如何假裝開放實際上還是在做 vendor locked-in 的陰謀(陽謀?)。只是這次做的太明顯然後就翻船了。</p>
<p>Blizzard 主要的論點是 Apple 竟然大聲說他們喜歡創新的網路，那出來的產品跟作法就要言行一致 －－ 尤其是 HTML5 這一系列的創新本身的目標之一就是互通性 －－ 不能到處廣告說 Safari 支援 HTML5 然後故意把其他也支援的瀏覽器從示範網頁排除掉；這種顯然是沒有信用、不誠懇的傳遞知識的做為。</p>
<p>Mozilla 的 Sayre 做了<a href="http://blog.mozilla.com/rob-sayre/2010/06/04/check-out-these-html5-demos/">一個很酸的 HTML5 demo</a>，哈哈哈 (當然不代表 Mozilla 的立場)。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/intellectual-honesty-and-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 File API + XmlHttpRequest = SWFUpload, now what?</title>
		<link>http://blog.timc.idv.tw/posts/html5-file-api-xmlhttprequest-swfupload-now-what/</link>
		<comments>http://blog.timc.idv.tw/posts/html5-file-api-xmlhttprequest-swfupload-now-what/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:10:01 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=879</guid>
		<description><![CDATA[So what should you do if you decided to ditch SWFUpload and embrace HTML5 solution for ajax file upload? In honor of the releases of Firefox 3.6 (with File API), I decided to just that in the GFX Firefox promotion site. (sounds perfectly reasonable to use Fx-only technology on such site, right?) Firefox now gives [...]]]></description>
			<content:encoded><![CDATA[<p>So what should you do if you decided to ditch <a href="http://swfupload.org/">SWFUpload</a> and embrace HTML5 solution for ajax file upload? In honor of the releases of <a href="http://www.mozilla.com/">Firefox 3.6</a> (with File API), I decided to just that in the <a href="http://gfx.tw/">GFX Firefox promotion site</a>. <small>(sounds perfectly reasonable to use Fx-only technology on such site, right?)</small> Firefox now gives us the bricks (File API, binary XHR, and File drag-drop), but to build a house it still takes some work. <a href="http://demos.hacks.mozilla.org/openweb/uploadingFiles/">The Mozilla Hacks demo</a> works great but to work with the existing site I need:</p>
<ol>
<li>To create a SWFUpload-like button that opens file selection dialog instead of HTML form file input.</li>
<li>To send the file as a ordinary file upload form &#8211; no need to change php backend to handle raw post</li>
<li>Send the file by jQuery.ajax, firing global callbacks</li>
</ol>
<p>I came up with these methods to solve them:</p>
<p><span id="more-879"></span></p>
<h3>SWFUpload-like button</h3>
<div style="margin: 1em auto">
<input type="file" />
</div>
<p>From the JavaScript almighty <a href="http://www.quirksmode.org/">ppk</a> we know that <a href="http://www.quirksmode.org/dom/inputfile.html">file input from control is almost impossible to style</a>. The solution outlined on that page only tell us how to replace the control with images using <code>opacity: 0</code> trick. In order to fit the clickable area into my 65&#215;65-px button, I have to enlarge the control and confine it into a &lt;div&gt; with <code>overflow: hidden</code>. </p>
<div style="overflow: hidden; height: 65px; width: 65px; background: #ffcccc; margin: 1em auto">
<input type="file" style="opacity: 0.5" />
</div>
<p>The actual hard part is how to enlarge the control. It turns out in Firefox <strong>it ignores CSS specified height and width</strong>; the only thing left for you to set is <code>font-size</code> propriety. </p>
<div style="overflow: hidden; height: 65px; width: 65px; background: #ffcccc; margin: 1em auto">
<input type="file" style="font-size: 65px; opacity: 0.5" />
</div>
<p>Another CSS properity it ignores is the cursor. Firefox puts the &#8220;browse&#8221; button at the very right, so you might what to make sure the arrow cursor, instead of text-input cursor, shows.</p>
<div style="overflow: hidden; height: 65px; width: 65px; background: #ffcccc; margin: 1em auto; position: relative">
<input type="file" style="font-size: 65px; opacity: 0.5; position: absolute; right: 0" />
</div>
<h3>Simulate form upload</h3>
<p>On Mozilla Hacks demo, the file is sent as raw HTTP POST/PUT data. To process such input, one must craft the server-side script all over, without any upload-handling library that I&#8217;ve known of. So we go back to client-side solution: the question now effectively becomes <strong>how to implement <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> format to your (raw) post data</strong>. I&#8217;ll simply post my code snippet below &#8211; turn out to be quite self-explanatory. <sup><a href="#note-rfc-1522">*</a></sup></p>
<pre>
var bd = 'gfx-xhrupload-'
	+ parseInt(Math.random()*(2 &lt;&lt; 16));
var data = '--' + bd + '\n'
	+ 'content-disposition: form-data; name="Filedata";'
	+ ' filename="' + files[0].name + '"\n'
	+ 'Content-Type: ' + files[0].type + '\n\n'
	+ ev.target.result + '\n\n'
	+ '--' + bd + '--';
</pre>
<p>Where <code>ev.target.result</code> is the binary string represent the file, access using FileReader object, and <code>files</code> is the FileList object.</p>
<h3>Send the file via jQuery.ajax</h3>
<blockquote>
<p><strong>Update:</strong> Just found an easy way to do this right instead below: overwrite <code>xhr.send</code> with <code>xhr.sendAsBinary</code> since it&#8217;s seems all right to send text data in binary mode.<a href="#xhr-prototype"><sup>*</sup></a></p>
<pre>
if (window.XMLHttpRequest &#038;&#038; XMLHttpRequest.prototype.sendAsBinary) {
	XMLHttpRequest.prototype.send = function (data) {
		return this.sendAsBinary(data);
	};
}
</pre>
</blockquote>
<p>You might think this is the easiest part, but in reality the normal <code>$.ajax</code> won&#8217;t work even if you set the correct Content-Type, which, according to RFC 1867, is <code>'multipart/form-data, boundary=' + bd</code>.</p>
<p>What went wrong? The problem is jQuery hard-coded <code>xhr.send(data)</code> in it&#8217;s function, and it does not send binary data. I resolved the problem by <strong>actually copying jQuery code, &#8220;patch&#8221; it, and overwrite the original $.ajax function.</strong> I added a &#8220;binary&#8221; option for the purpose; the function would switch to <code>xhr.sendAsBinary(data)</code> if the option is set to true.</p>
<h3>Bonus: File drag and drop</h3>
<p>What SWFUpload doesn&#8217;t do is to make the control accepts files by droping them on it. With Firefox 3.6 you could to that, but you cannot hook the drop event on the &lt;input&gt; itself. Frankly speaking, the button would be to small to aim, so for the sake of better UX, a larger overlay, like the one in Mozilla Hacks demo, should be made. Do remember that hiding the overlay as soon as dragleave fires will stop drop event from firing though &#8211; took me a day to figure that out.</p>
<p>Also, keep in mind your transparent button will accept file dropping if the user had installed <a href="https://addons.mozilla.org/firefox/addon/2190">dragdropupload</a> add-on.</p>
<h3>Conclusion</h3>
<p>With all these research, looks like it&#8217;s actually possible to write <strong>a SWFUpload.js without Flash</strong>. The library would support anything SWFUpload does, except cursor choices on the button. For my project, I didn&#8217;t craft a new <code>XHRUpload()</code> object to replace <code>SWFUpload()</code> because I don&#8217;t need that much of functionality, yet it&#8217;s something can be done.</p>
<p><a href="http://twitter.com/timdream/status/8017601285">It struck me</a> that HTML 5 is practically involves around what Google want to do things w/o Flash. StreetView? We got WebGL. GMail attach. upload? Got File API.</p>
<p>HTML 5. Exciting new world.</p>
<p><small>For complete code on the implementation, stay tuned and check code <a href="http://gfx.tw/js/page.editor.js">here</a> once it went live. For the site, we have not deliver English version yet, but feel free to play around with buttons and symbols &#8211; you should be able to understand it without reading any Chinese.</small></p>
<p><small><strong><a id="note-rfc-1522">Note: </a></strong>According to the MIME spec, the filename should be encoded according to RFC 1522 (&#8220;quoted-printable&#8221;) if it contains characters other than US-ASCII. Personally I replace these characters with underlines instead &#8211; <code>name = name.replace(/[^\x20-\x7E]/g, '_');</code>.</p>
<p><small><strong><a id="xhr-prototype">More update: </a></strong><code>XMLHttpRequest.prototype.sendAsBinary</code> instead of <code>(new XMLHttpRequest()).sendAsBinary<code></small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/html5-file-api-xmlhttprequest-swfupload-now-what/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Firefox 的預設 Windows 中文字型預設值修改提議</title>
		<link>http://blog.timc.idv.tw/posts/firefox-default-zh-tw-font/</link>
		<comments>http://blog.timc.idv.tw/posts/firefox-default-zh-tw-font/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 02:58:31 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=842</guid>
		<description><![CDATA[如果您不想看這落落長的解釋，請往下捲看範例，分享一下您覺得哪個比較好看、容易閱讀。 Firefox 的預設中文字型設定存在 about:config 裡面的 font.name-list.*.zh-TW，裡面列出的字型在下列情況下會被套用在出現的文字上： 文字是中文，且 網頁沒有指定任何中文字型或指定 generic font name，且 HTML 元素的 lang 屬性 設定在 zh-TW，或 設定語言的 font.name 與 font.name-list 屬性沒有任何中文字型且 Firefox 為中文版 目前 sans-serif 和 serif 字型的預設值都放在 PMingLiu，也就是新細明體/細明體。既然 Microsoft 在最近的 Windows 與 Office 提供了新的字型「微軟正黑體」，或許我們可以考慮把這兩個預設值換過去。 Why fix something that is not broken? 是不是「broken」，要看您怎麼定義它 (^^;)。新細明體多年以來是網路設計師唯一的選擇（標楷體太醜了不考慮），在螢幕解析度隨著科技進步，我們再也不需要點陣字才能看清楚中文筆劃的時候，貼近作業系統廠商所提供的新功能是比較好的方向。 新的 Windows 瀏覽器，例如 Safari 與 Chrome，已經將設定換到正黑體了。新版的 Opera 也是。 那就直接改吧，有什麼問題呢？ 有一些 [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<p>如果您不想看這落落長的解釋，請往下捲看範例，分享一下您覺得哪個比較好看、容易閱讀。</p>
</blockquote>
<p>Firefox 的預設中文字型設定存在 about:config 裡面的 <code>font.name-list.*.zh-TW</code>，裡面列出的字型在下列情況下會被套用在出現的文字上：</p>
<ul>
<li>文字是中文，且</li>
<li>網頁沒有指定任何中文字型或指定 generic font name，且</li>
<li>HTML 元素的 lang 屬性
<ul>
<li>設定在 zh-TW，或</li>
<li>設定語言的 font.name 與 font.name-list 屬性沒有任何中文字型且 Firefox 為中文版</li>
</ul>
</ul>
<p>目前 sans-serif 和 serif 字型的預設值都放在 PMingLiu，也就是新細明體/細明體。既然 Microsoft 在最近的 Windows 與 Office 提供了新的字型「<strong>微軟正黑體</strong>」，或許我們可以考慮把這兩個預設值換過去。</p>
<h3>Why fix something that is not broken?</h3>
<p>是不是「broken」，要看您怎麼定義它 (^^;)。新細明體多年以來是網路設計師唯一的選擇（標楷體太醜了不考慮），在螢幕解析度隨著科技進步，我們再也不需要點陣字才能看清楚中文筆劃的時候，貼近作業系統廠商所提供的新功能是比較好的方向。</p>
<p>新的 Windows 瀏覽器，例如 Safari 與 Chrome，已經將設定換到正黑體了。新版的 Opera 也是。</p>
<h3>那就直接改吧，有什麼問題呢？</h3>
<p>有一些 pros and cons 需要釐清；雖說是大哉問，因為我們沒有量化的數據可以確定：</p>
<ul>
<li>正黑體在某些電腦上反而是比較難看的字型，例如沒有開 ClearType 的 Windows XP，或是開了卻沒有 tune 過。
<ul>
<li>沒有正黑體的電腦不管預設值怎麼改都沒差。</li>
<li>不確定「特別安裝了正黑體」的 Windows XP 的比率。或許約等於 Office 2007 的比率？</li>
</ul>
</li>
<li>必須在「使用者習慣」與「提供更好選擇」做抉擇。
<ul>
<li>市場上只剩下 IE6/7/8 還是預設在新細明體呀，改到正黑體變成是產品差異化，但是使用者喜歡這個差異嗎？</li>
<li>很多知名的網站會掉進上列的字型套用條件，對使用者的感受相當大。</li>
</ul>
</li>
<li>一般使用者很難找到這個設定值
<ul>
<li>選項視窗裡面的字型是 <code>font.name.*.zh-TW</code>，當年因為不想讓語言屬性影響英文字的顯示，所以一直都放在 Arial 與 Times New Roman。</li>
<li>中文字是因為那兩個字型沒有那些字所以才找 font.name-list 裡指定的字型的。</li>
<li>如果使用者不喜歡，他無法從選項視窗改回來。</li>
</ul>
</li>
</ul>
<h3>來個有圖有真相吧</h3>
<p>簡單來說，如果大家覺得不錯，我們可以把 Windows <ins>XP</ins> 上的 Yahoo 奇摩首頁從這個樣子（點進去看完整圖）：</p>
<p><a href="http://bit.ly/5fvjD3"><img src="http://blog.timc.idv.tw/wp-content/uploads/yahoo-part-ming.PNG" alt="yahoo-part-ming" title="yahoo-part-ming" width="500" height="190" class="aligncenter size-full wp-image-852" /></a></p>
<p>變成這個樣子：</p>
<p><a href="http://bit.ly/6RMjHx"><img src="http://blog.timc.idv.tw/wp-content/uploads/yahoo-part-hei.png" alt="yahoo-part-hei" title="yahoo-part-hei" width="500" height="190" class="aligncenter size-full wp-image-854" /></a></p>
<p>這兩個 screenshot 是在 Windows XP 上開 ClearType （沒有 tune 過）的結果。想要測試自己的電腦，請打開 about:config，輸入 zh-TW，修改兩個 font.name-list，從「<strong>PMingLiU, MingLiU</strong>」改成「<strong>微軟正黑體, PMingLiU, MingLiU</strong>」。歡迎提供 Vista 或是 7 上面的 screenshot （話說我還真的不知道有什麼不同）</p>
<p><strong>Update:</strong> Windows 7 和 Vista 下面有回應回報 ClearType + 正黑體不會太細。</p>
<p>已知此設定會影響的網站有：<strong>Yahoo!奇摩首頁、Google 首頁、PIXNET 首頁、無名小站首頁、Facebook 英文版上的中文字（中文版把語言指到 zh 所以沒有影響）、GMail、Twitter、Plurk 預設模板</strong>。</p>
<h3>所以？</h3>
<p>告訴我您認為哪個字型比較容易閱讀吧。網頁設計師如果有一些經驗和數據可以分享，也請不吝指教。</p>
<h3>番外篇：那其他作業系統呢？</h3>
<p>Mac OS X 的設定很歡樂的放在 LiGothic，而不是 Snow Leopard <a href="http://zonble.github.com/tcfail/">萬惡的 Heiti TC</a>。倒是在討論這件事情的過程我們發現 monospace.zh-TW 指定的字型是錯的，這個已經開 bug 報上去了（感謝 Irvin）。</p>
<p>Linux 則是完全沒有寫 font.name-list 預設值 &#8230; Firefox 會很合理的去拉 Gnome 與系統 fontconfig 所定義的 sans-serif 與 serif 字型。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/firefox-default-zh-tw-font/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>MozTW 招募新手喔！</title>
		<link>http://blog.timc.idv.tw/posts/moztw-wants-you/</link>
		<comments>http://blog.timc.idv.tw/posts/moztw-wants-you/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 11:43:19 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=837</guid>
		<description><![CDATA[MozTW 招募新手喔！11/21 晚上 7 點我們會在高雄辦個小聚，介紹現在進行的事項還有你能幫助的部份。 我們希望找到有熱情能夠承諾把生活中一部分的時間拉出來，負責完成某項工作的人。當然既然是志願性質的，就不會逼你做你不想做的事情啦。還有，不要覺得自己沒能力，我們沒有任何一件工作是能夠自稱為專家的人在處理；無論從企劃到技術&#8230;XD 我們目前進行的工作大概有： L10n: Firefox、Firefox Mobile、Weave Sync、Mozilla.com；(Thunderbird、AMO、Sunbird、SeaMonkey) Web Dev: Server Admin, moztw.org 主站、抓火狐、其他臨時活動等等；(歡迎提供企劃；Facebook 遊戲？) Docs: moztw.org 主站；(Mozilla Links、moztw Wiki、SUMO) 括號是目前懸空的工作（如果沒有人接手可能會斷掉的事情）。 而我們需要下列技能（當然，別忘了前面提到，您不一定是 pro 才能參與）： Web Developer Web Designer Technical evangelist Usability specialist (Localization or Web) Translator (Localization or documentation) 如果有興趣會到場的話，麻煩來簽個到吧！另外台北場會在高雄之後的下週或是下下週末進行，如果無法到高雄的朋友可以考慮。 Update: 台北場相關資訊。 PS: 寫完上面的列表才發現原來雜工做的事情還真雜呀 (T_T)&#8230;]]></description>
			<content:encoded><![CDATA[<p>MozTW 招募新手喔！11/21 晚上 7 點我們會在高雄辦個小聚，介紹現在進行的事項還有你能幫助的部份。</p>
<p>我們希望找到有熱情能夠承諾把生活中一部分的時間拉出來，負責完成某項工作的人。當然既然是志願性質的，就不會逼你做你不想做的事情啦。還有，不要覺得自己沒能力，我們沒有任何一件工作是能夠自稱為專家的人在處理；無論從企劃到技術&#8230;XD</p>
<p>我們目前進行的工作大概有：</p>
<ul>
<li>L10n: Firefox、Firefox Mobile、Weave Sync、Mozilla.com；(Thunderbird、AMO、Sunbird、SeaMonkey)</li>
<li>Web Dev: Server Admin, moztw.org 主站、抓火狐、其他臨時活動等等；(歡迎提供企劃；Facebook 遊戲？)</li>
<li>Docs: moztw.org 主站；(Mozilla Links、moztw Wiki、SUMO)</li>
</ul>
<p>括號是目前懸空的工作（如果沒有人接手可能會斷掉的事情）。</p>
<p>而我們需要下列技能（當然，別忘了前面提到，您不一定是 pro 才能參與）：</p>
<ul>
<li>Web Developer</li>
<li>Web Designer</li>
<li>Technical evangelist</li>
<li>Usability specialist (Localization or Web)</li>
<li>Translator (Localization or documentation)</li>
</ul>
<p>如果有興趣會到場的話，麻煩<a href="http://forum.moztw.org/viewtopic.php?p=153098#p153098">來簽個到吧</a>！另外台北場會在高雄之後的下週或是下下週末進行，如果無法到高雄的朋友可以考慮。</p>
<p><strong>Update: <a href="http://forum.moztw.org/viewtopic.php?f=48&#038;t=28876">台北場相關資訊</a>。</strong></p>
<p>PS: 寫完上面的列表才發現原來雜工做的事情還真雜呀 (T_T)&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/moztw-wants-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firefox 5 Birthday!</title>
		<link>http://blog.timc.idv.tw/posts/firefox-5-birthday/</link>
		<comments>http://blog.timc.idv.tw/posts/firefox-5-birthday/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 07:18:16 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=832</guid>
		<description><![CDATA[要怎麼形容我們這個社群在幹麻呢？最近因故又遇到了這個問題。不過也是剛好正在翻譯Firefox 五週年！網站的文案，發現文中的描述的概念很簡單，卻很精確：我們希望人人的網際生活體驗能變的更美好。 不管你有沒有在用 Firefox 或是覺得它好不好用，Firefox 五年的存在的確讓 web 變的更好；即便不是市場上的 dominant force，但鳳凰的重生(*)的確驅使了新的技術進步，與隨之而來的網路應用。想想看，下個五年我們能一起成就什麼？ * 參考 about:mozilla。 技術筆記： 這個網站 (project 代號 [Fyfx]) 我貢獻了中文 embedded font 的部份（標題後面的「五週年！」三個字），其中用到了 tka 的神妙 script，把 Droid Sans 字型 (3MB) 裡面會用到的字抽出來組 subset 字型 (16KB) 的技術。用 Droid 是因為版權，還有要同時讓簡繁日韓四個 locale 都能使用；我知道寫法和繁體標準字不一樣，不過這是 trade off。 當然要感謝 tka 大大的幫助！]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube-nocookie.com/v/-ULDH90H530&#038;hl=zh_TW&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/-ULDH90H530&#038;hl=zh_TW&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>要怎麼形容我們這個社群在幹麻呢？最近因故又遇到了這個問題。不過也是剛好正在翻譯<a href="http://www.spreadfirefox.com/5years/zh-TW/">Firefox 五週年！</a>網站的文案，發現文中的描述的概念很簡單，卻很精確：<strong>我們希望人人的網際生活體驗能變的更美好。</strong></p>
<p>不管你有沒有在用 Firefox 或是覺得它好不好用，Firefox 五年的存在的確讓 web 變的更好；即便不是市場上的 dominant force，但鳳凰的重生(*)的確驅使了新的技術進步，與隨之而來的網路應用。想想看，下個五年我們能一起成就什麼？ </p>
<p>* 參考 <a href="http://en.wikipedia.org/wiki/About:mozilla">about:mozilla</a>。</p>
<p><strong>技術筆記：</strong> 這個網站 (project 代號 [Fyfx]) 我貢獻了中文 embedded font 的部份（標題後面的「五週年！」三個字），其中用到了 tka 的神妙 script，把 Droid Sans 字型 (3MB) 裡面會用到的字抽出來組 subset 字型 (16KB) 的技術。用 Droid 是因為版權，還有要同時讓簡繁日韓四個 locale 都能使用；我知道寫法和繁體標準字不一樣，不過這是 trade off。</p>
<p>當然要感謝 <a href="http://www.tkalu.com/">tka 大大</a>的幫助！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/firefox-5-birthday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open ID 的登出：易用性與安全性問題</title>
		<link>http://blog.timc.idv.tw/posts/loging-out-an-open-id-sp-an-usibility-and-security-issue/</link>
		<comments>http://blog.timc.idv.tw/posts/loging-out-an-open-id-sp-an-usibility-and-security-issue/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 02:23:11 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=806</guid>
		<description><![CDATA[之前在 Twitter 和 Irvin 討論過，後來又在 xdite 的 ptt2 個人板上面也討論過 PIXNET 的 implement 方法，但我一直都沒有講清楚（阿表達能力薄弱呀orz）所以試著在這裡用長篇幅表達看看： Open ID 對許多使用者來說，是首次能將「登入認證」和「登入狀態」兩者拆開的全新體驗。因為是認證機制，所以要在易用性上確保使用者能認知 Open ID 幫他做了什麼，且他自己要做什麼以免身分遭到冒用。 定義一下，「登入認證」就是那組帳號密碼（或是指紋、掌紋、聲音辨識，隨便），「登入狀態」則是使用者是否已經登入的判斷，在網頁上面就是 cookie。 Open ID 的設計讓使用者看起來1可以共用「登入認證」（即，用同一個身份登入不同的網站），甚至看起來2是直接複製「登入狀態」（因為許多 Open ID sp 的作法是如果已經登入 rp 來要認證的話就直接發 token，不顯示確認畫面）。 因為沒有 single sign-off 能力，當使用者登出 sp 的時候，rp 的「登入狀態」不會因此更新。反過來登出 rp 的時候當然不能讓 rp 去登出 sp（想像你去逛一下抓火狐然後按登出結果連 GMail 都登出了&#8230;），只是就以上的情況與 UI 暗示，使用者真的知道登出 PIXNET 主站的時候 murmur.tw 不會跟著登出嗎？ 如果不知道，這就是個安全性問題。使用者去 PIXNET 發完部落格文章然後去 murmur [...]]]></description>
			<content:encoded><![CDATA[<p>之前在 Twitter 和 <a href="http://twitter.com/irvinfly">Irvin</a> 討論過，後來又在 <a href="http://blog.xdite.net/">xdite</a> 的 <a href="telnet://ptt2.cc/" title="板名 xdite">ptt2 個人板</a>上面也討論過 <a href="http://pixnet.net/">PIXNET</a> 的 implement 方法，但我一直都沒有講清楚（阿表達能力薄弱呀orz）所以試著在這裡用長篇幅表達看看：</p>
<p>Open ID 對許多使用者來說，是<strong>首次能將「登入認證」和「登入狀態」兩者拆開的全新體驗</strong>。因為是認證機制，所以要在易用性上確保使用者能認知 Open ID 幫他做了什麼，且<strong>他自己要做什麼以免身分遭到冒用</strong>。</p>
<p>定義一下，「登入認證」就是那組帳號密碼（或是指紋、掌紋、聲音辨識，隨便），「登入狀態」則是使用者是否已經登入的判斷，在網頁上面就是 cookie。</p>
<p>Open ID 的設計讓使用者<em>看起來</em><sup>1</sup>可以共用「登入認證」（即，用同一個身份登入不同的網站），甚至<em>看起來</em><sup>2</sup>是直接複製「登入狀態」（因為許多 Open ID sp 的作法是如果已經登入 rp 來要認證的話就直接發 token，不顯示確認畫面）。</p>
<p>因為沒有 single sign-off 能力，當使用者登出 sp 的時候，rp 的「登入狀態」不會因此更新。反過來登出 rp 的時候當然不能讓 rp 去登出 sp（想像你去逛一下<a href="http://gfx.tw/">抓火狐</a>然後按登出結果連 <a href="http://mail.google.com/mail">GMail</a> 都登出了&#8230;），只是<strong>就以上的情況與 UI 暗示，使用者真的知道登出 PIXNET 主站的時候 <a href="http://murmur.tw/">murmur.tw</a> 不會跟著登出嗎？</strong></p>
<p>如果不知道，這就是個安全性問題。使用者去 PIXNET 發完部落格文章然後去 murmur 碎碎念一下，結果只按了 PIXNET 的登出卻不知道要按 murmur 的登出&#8230; 更何況 murmur 的首頁上只用了一個「使用痞客邦 PIXNET 帳號登入」的按鈕就直接用 OpenID 交換認證。</p>
<p>在我和 xdite 反應這件事情之後，PIXNET 在 sp 端輸入帳號密碼的畫面加上了[同時也登入痞客邦 PIXNET]的勾勾。雖說這個勾勾能讓使用者正確意識到 murmur 和 PIXNET 兩者的「登入狀態」是獨立的，但是因為 PIXNET 做的 Open ID sp 在已認證的狀態下會跳過這個畫面，所以大部分的時候是白搭，使用者根本看不到。</p>
<p>重新整理一次：</p>
<p>Open ID：</p>
<ul>
<li>共用登入認證，sp 端登入後 rp 可以直接拿 token</li>
<li>不共用登入狀態，要分別登出</li>
</ul>
<p>但使用者看起來：</p>
<ul>
<li>因為登入不用重新輸入認證，所以登入狀態好像是共用的</li>
<li>那在 sp 登出的時候 rp 好像會一起登出</li>
<li>實際上不會，所以這造成了<strong>安全性問題</strong></li>
</ul>
<p>這樣的暗示問題在 PIXNET 會比其他網站嚴重，因為使用者明知 murmur 或是 belovely 就是 PIXNET 的網站，要意識到同一家公司的不同網站「登入狀態」竟然是獨立的這還滿難的。畢竟我們都被 Google 或是 Yahoo! 跳來跳去的登入畫面養壞胃口了。</p>
<p>倒是我想不透除了背後從資料庫每次查詢認證以外，Google 怎麼從 google.com 把 blogger.com 的認證拿掉的；不同 domain 的 cookie 不是沒辦法存取嗎？會不會搞半天其實這是唯一的解法&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/loging-out-an-open-id-sp-an-usibility-and-security-issue/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WebGL</title>
		<link>http://blog.timc.idv.tw/posts/webgl/</link>
		<comments>http://blog.timc.idv.tw/posts/webgl/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 03:13:57 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=793</guid>
		<description><![CDATA[用 JavaScript 在網頁上不經由外掛直接 access 機器的 OpenGL 硬體加速。超級誘人的呀！連 Ajaxian 的 Dion Almaer 都 RT 說： Your next 3D shooter will sport a nice &#8220;Your browser is not supported please install Chrome, Safari or Firefox.&#8221; 但我想到的事情是 OpenGL 真正 implement 的情況。記得之前和 Walker 做 Stellarium 的地景的時候，就發現有些電腦 PNG 檔可以超過 3600px，有些不行；有些電腦上有些行星的材質會亂閃，有些不會；有些電腦 Stellarium 會錯誤根本無法啟動。所以標準是一回事，以後要用 Web 寫 3D 遊戲可能要有財力買個五六張顯示卡，加上瀏覽器/作業系統做排列組合測試。真正可能會出現的訊息是： Your graphics card, browser, [...]]]></description>
			<content:encoded><![CDATA[<p>用 JavaScript 在網頁上不經由外掛直接 access 機器的 OpenGL 硬體加速。超級誘人的呀！連 <a href="http://ajaxian.com/">Ajaxian</a> 的 <a href="http://twitter.com/dalmaer">Dion Almaer</a> 都 <a href="http://twitter.com/dalmaer/status/4139870702">RT 說</a>：</p>
<blockquote><p>Your next 3D shooter will sport a nice &#8220;Your browser is not supported please install Chrome, Safari or Firefox.&#8221;
</p></blockquote>
<p>但我想到的事情是 OpenGL 真正 implement 的情況。記得之前和 <a href="http://taipro.blogspot.com/">Walker</a> 做 <a href="http://www.stellarium.org/">Stellarium</a> 的地景的時候，就發現有些電腦 PNG 檔可以超過 3600px，有些不行；有些電腦上有些行星的材質會亂閃，有些不會；有些電腦 Stellarium 會錯誤根本無法啟動。所以標準是一回事，以後要用 Web 寫 3D 遊戲可能要有財力買個五六張顯示卡，加上瀏覽器/作業系統做排列組合測試。真正可能會出現的訊息是：</p>
<blockquote><p>Your graphics card, browser, and OS combination is untested. Use at your own risk!
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/webgl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID Login 畫面的易用性</title>
		<link>http://blog.timc.idv.tw/posts/usability-on-openid-login-dialog/</link>
		<comments>http://blog.timc.idv.tw/posts/usability-on-openid-login-dialog/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 19:59:52 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=766</guid>
		<description><![CDATA[抓火狐的規格書有一項是這樣：不使用傳統的註冊、登入帳號系統，用 OpenID 讓使用者感受攜帶帳號與個人資料的自由，並讓使用者意識到提供這項好處的是「OpenID」這個技術。 這是一推出時的 OpenID 登入畫面： 看的出問題在哪嗎？我也看不出來，直到真的看到一個不知什麼是 OpenID 的人用過之後： 這個 UI 雖然很詳盡的介紹 OpenID，但是充斥著專有名詞：「OpenID 網址」、「服務商」 這樣就算了，但是使用者沒有看到任何熟悉的欄位，所以開始自行想像上面要填什麼（填了「自己想的 ID」、「想要的抓火狐網址」） 然後失敗大約三次之後，終於開始認真讀畫面上的文字，去按 OpenID 服務商的下拉選單，找到熟悉的 Google（目前的統計是大約六成的人都用 Google OpenID） 但是呢，看到自動填入的 Google OpenID endpoint 網址，以為最後面的「id」要改成自己的 GMail ID（結果又失敗了） 評價：顯然這個登入畫面是個測驗，需要失敗多次證明你夠愛 Firefox 才能進來一起宣傳。 OpenID 有兩種形式，一種是該服務商的所有帳號都用一個固定的 endpoint 網址登入（像 Google、Yahoo），另一種是每個人都有個人網址。以下是 Yahoo 建議的登入畫面 (Google 也這樣建議，但我一時找不到)： 發現有詐了吧？顯然他們認為既然不需要使用者輸入個人網址，就根本不需要讓他們知道他們用的是 OpenID；還有，需要輸入 username 的 OpenID 就管它去死吧跟我的按鈕無關。這種按鈕其實也不少人用，最知名的 Google OpenID 利用者 zoho 就是這樣（用競爭者的帳號服務開拓客戶呀嘖嘖）。而其他舊式的 OpenID 登入頁面（像 SourceForge [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gfx.tw/">抓火狐</a>的規格書有一項是這樣：<strong>不使用傳統的註冊、登入帳號系統，用 OpenID 讓使用者感受攜帶帳號與個人資料的自由，並讓使用者意識到提供這項好處的是「OpenID」這個技術。</strong></p>
<p>這是一推出時的 OpenID 登入畫面：</p>
<p><img class="aligncenter size-full wp-image-768" title="舊登入畫面" src="http://blog.timc.idv.tw/wp-content/uploads/openid-dialog-old.PNG" alt="舊登入畫面" width="509" height="468" /></p>
<p>看的出問題在哪嗎？我也看不出來，直到真的看到一個不知什麼是 OpenID 的人用過之後：</p>
<ul>
<li>這個 UI 雖然很詳盡的介紹 OpenID，但是充斥著專有名詞：「OpenID 網址」、「服務商」</li>
<li>這樣就算了，但是使用者沒有看到任何熟悉的欄位，所以開始自行想像上面要填什麼（填了「自己想的 ID」、「想要的抓火狐網址」）</li>
<li>然後失敗大約三次之後，終於開始認真讀畫面上的文字，去按 OpenID 服務商的下拉選單，找到熟悉的 Google（目前的統計是大約六成的人都用 Google OpenID）</li>
<li>但是呢，看到自動填入的 Google OpenID endpoint 網址，以為最後面的「id」要改成自己的 GMail ID（結果又失敗了）</li>
</ul>
<p>評價：<strong>顯然這個登入畫面是個測驗，需要失敗多次證明你夠愛 Firefox 才能進來一起宣傳</strong>。</p>
<p>OpenID 有兩種形式，一種是該服務商的所有帳號都用一個固定的 endpoint 網址登入（像 Google、Yahoo），另一種是每個人都有個人網址。以下是 <a href="http://developer.yahoo.com/openid/bestpractices.html">Yahoo 建議的登入畫面</a> (Google 也這樣建議，但我一時找不到)：</p>
<p><img class="aligncenter size-full wp-image-769" title="OpenID sign-in suggested by Google and Yahoo" src="http://blog.timc.idv.tw/wp-content/uploads/openid-dialog-signin-button.png" alt="OpenID sign-in suggested by Google and Yahoo" width="509" height="230" /></p>
<p>發現有詐了吧？顯然他們認為<strong>既然不需要使用者輸入個人網址，就根本不需要讓他們知道他們用的是 OpenID；還有，需要輸入 username 的 OpenID 就管它去死吧跟我的按鈕無關</strong>。這種按鈕其實也不少人用，最知名的 Google OpenID 利用者 <a href="http://www.zoho.com/">zoho</a> 就是這樣（用競爭者的帳號服務開拓客戶呀嘖嘖）。而其他舊式的 OpenID 登入頁面（<a href="https://sourceforge.net/account/login.php">像 SourceForge 的</a>）則沒有辦法表達「這個 endpoint 網址不需要再修改網址輸入 username 」這件事情。</p>
<p>最後，經過了攏長的討論（中間還包括奇怪的設計像是準備兩個網址/登入 widget 一個可輸入一個 readonly），最後我們採用了現在這個設計：</p>
<p><img class="aligncenter size-full wp-image-770" title="Current OpenID dialog" src="http://blog.timc.idv.tw/wp-content/uploads/openid-dialog-new.png" alt="Current OpenID dialog" width="509" height="509" /></p>
<p>這個設計直接解決了數個問題：</p>
<ul>
<li>開始的焦點依然是 OpenID 輸入框，不是什麼選擇登入方式的選單。<strong>直接打網址的使用者操作是完全相同的（私心認為很重要）。</strong></li>
<li>服務商選單變成 radio buttons，可以直接找到熟悉的標誌。</li>
<li>不使用「服務商」這種詞彙來引導使用者點選（實際上他們也不懂這個詞所以也引導不了）</li>
<li>最後，點選服務商時提供適當的回饋引導他輸入使用者名稱或是直接去點登入（請看下面）</li>
</ul>
<p>這是使用者點選 Google 會出現的提示，上面會變成灰色且唯讀。</p>
<p><img class="aligncenter size-full wp-image-771" title="New OpenID Login dialog - Click Google" src="http://blog.timc.idv.tw/wp-content/uploads/openid-dialog-new-google.png" alt="New OpenID Login dialog - Click Google" width="508" height="203" /></p>
<p>這是使用者點選需要輸入 username 時會出現的提示，一樣上面是灰色不能改但下面打字時會跟著變化。</p>
<p><img class="aligncenter size-full wp-image-772" title="New OpenID Login dialog - Click Google" src="http://blog.timc.idv.tw/wp-content/uploads/openid-dialog-new-wp.png" alt="New OpenID Login dialog - Click Google" width="509" height="242" /></p>
<p>就希望這樣的設計能夠達到原本規格的要求了。不過，OpenID 怎麼這麼不紅呀，大部分的使用者好像都不知道。加油，好嗎？</p>
<p><strong>註：</strong>大部分的網站不會有規格說要讓使用者意識到 OpenID 啦，所以最後兩個畫面可以再修改成當使用者點選 Google 時，OpenID 網址方塊直接消失改成 [使用 Google 登入] 的按鈕。點選 WordPress.com 時也可以消失只顯示下面那個使用者名稱的輸入方塊。</p>
<p>再討論的 metaphysical 一點，問題就變成「我們有辦法讓使用者在不了解 OpenID 的情況下推廣 OpenID 嗎？」或是「對使用者推廣 OpenID 的概念和推廣使用 OpenID 有關嗎？」不過這就不是本文的範圍了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/usability-on-openid-login-dialog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>「抓火狐」網站公開</title>
		<link>http://blog.timc.idv.tw/posts/gfx-open-for-testing/</link>
		<comments>http://blog.timc.idv.tw/posts/gfx-open-for-testing/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 13:38:15 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=740</guid>
		<description><![CDATA[「抓火狐」源自一個很直接的 idea：既然你都可以把 Firefox 用擴充套件自訂成你喜歡的樣子，那為何不把要宣傳什麼功能、要推廣什麼擴充套件這些選擇都交給你，讓你把最適合的功能/套件宣傳給別人呢？ 邀請所有願意和我們推廣 Firefox 的同好登入「抓火狐」網站，登入之後可以在自己的推薦頁面選擇三個您最想要推薦的 Firefox 功能： 在下方，則可以加上您最想要推薦的附加元件，新增完之後在推薦頁上會呈現類似「擴充套件 Top 15」的清單可以讓讀者一次安裝自己想要的套件。別忘了按左方的按鈕編輯個人介紹。 最後按上方提示列的「儲存您的頁面」： 存檔後就可以到「宣傳貼紙」頁面領取貼到部落格、網站的宣傳貼紙： 就這樣。大家一起抓火狐吧！]]></description>
			<content:encoded><![CDATA[<p>「抓火狐」源自一個很直接的 idea：既然你都可以把 Firefox 用擴充套件自訂成你喜歡的樣子，那為何不把<strong>要宣傳什麼功能、要推廣什麼擴充套件</strong>這些選擇都交給你，讓你把最適合的功能/套件宣傳給別人呢？</p>
<p><a href="http://gfx.tw/"><img class="aligncenter size-full wp-image-752" title="抓火狐首頁" src="http://blog.timc.idv.tw/wp-content/uploads/home.png" alt="抓火狐首頁" width="504" height="953" /></a></p>
<p>邀請所有願意和我們推廣 Firefox 的同好登入「抓火狐」網站，登入之後可以在自己的推薦頁面選擇三個您最想要推薦的 Firefox 功能：</p>
<p><img class="aligncenter size-full wp-image-750" title="選擇想要推薦的功能" src="http://blog.timc.idv.tw/wp-content/uploads/edit-feature.PNG" alt="選擇想要推薦的功能" width="500" height="250" /></p>
<p>在下方，則可以加上您最想要推薦的附加元件，新增完之後在推薦頁上會呈現類似「擴充套件 Top 15」的清單可以讓讀者一次安裝自己想要的套件。別忘了按左方的按鈕編輯個人介紹。</p>
<p><img class="aligncenter size-full wp-image-749" title="選擇想要推薦的附加元件" src="http://blog.timc.idv.tw/wp-content/uploads/edit-addons.PNG" alt="選擇想要推薦的附加元件" width="500" height="176" /></p>
<p>最後按上方提示列的「儲存您的頁面」：</p>
<p><img class="aligncenter size-full wp-image-753" title="編輯完後存檔" src="http://blog.timc.idv.tw/wp-content/uploads/edit-save.PNG" alt="編輯完後存檔" width="500" height="59" /></p>
<p>存檔後就可以到「宣傳貼紙」頁面領取貼到部落格、網站的宣傳貼紙：</p>
<p><a title="連到我的抓火狐推薦頁！" href="http://gfx.tw/tim"><img style="margin: 5px auto; width: 200px; height: 250px;" src="http://gfx.tw/userstickers/0/2/featurecard.png" alt="連到我的抓火狐推薦頁！" /></a></p>
<p>就這樣。大家<a href="http://gfx.tw/">一起抓火狐</a>吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/gfx-open-for-testing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IE6 在 PIXNET 的佔有率</title>
		<link>http://blog.timc.idv.tw/posts/ie6-usage-on-pixnet/</link>
		<comments>http://blog.timc.idv.tw/posts/ie6-usage-on-pixnet/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 07:26:59 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=724</guid>
		<description><![CDATA[English: Pixnet is the second largest Blog Service Provider in Taiwan. The lead developer just released IE6 usage on their website (Base on Google Analytics statistics). While this data is valuable, yet I don&#8217;t think this represents the overall browser usage of Taiwan, since different generations use the web in different way, not everyone read [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<p><strong>English:</strong> <a href="http://www.pixnet.net/">Pixnet</a> is the second largest Blog Service Provider in Taiwan. The lead developer just released IE6 usage on their website (Base on Google Analytics statistics). While this data is valuable, yet I don&#8217;t think this represents the overall browser usage of Taiwan, since different generations use the web in different way, not everyone read or write blogs.</p>
<p>Base on the target customers of your website, you might found this data useful though.</p>
<p><strong>Update:</strong> Detailed usage share for June 2009 from the same article.</p>
</blockquote>
<p>感謝 <a href="http://blog.gslin.org/">gslin 大長輩</a>提供<a href="http://blog.gslin.org/archives/2009/07/11/2058/">完整的六月份數據</a>(已更新，加上 Firefox 數據)：</p>
<p><img src="http://chart.apis.google.com/chart?cht=p3&amp;chd=t:40.43,40.36,2.47,0.24,6.3,5.18,1.98,1.63,1.27,0.54&amp;chs=500x180&amp;chl=IE6 (40.43%)|IE7 (40.36%)|IE8 (2.47%)|Other IE (0.24%)|Fx3.0.11 (6.3%)|Fx3.0.10 (5.18%)|Other Firefox (1.98%)|Chrome (1.63%)|Safari (1.27%)|Others&amp;chco=0000ff,6666ff,9999ff,ccccff,ff9900,ff9933,ff9966,009900,cccccc,ffffff" alt="IE6 usage on pixnet.net" /></p>
<p>我比較驚訝的事情是對 <a href="http://www.pixnet.net/">PIXNET</a> 來說， IE6 不管在所有瀏覽器或是只算 IE 的比率，都已經小於 50% 了。當然網路的使用者的分層很嚴重，大概永遠無法知道「台灣整體」的瀏覽器佔有率；但就算知道整體的數據，如果跟網站針對的客群不同也沒什麼意義。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/ie6-usage-on-pixnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mozilla Developer Certification</title>
		<link>http://blog.timc.idv.tw/posts/mozilla-developer-certification/</link>
		<comments>http://blog.timc.idv.tw/posts/mozilla-developer-certification/#comments</comments>
		<pubDate>Thu, 14 May 2009 05:11:30 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=662</guid>
		<description><![CDATA[English: Do you think Mozilla should issue certifcations to Mozilla Application Platform developers? The first pro I can think of is too boost platform visibilty, yet Bob said this only apply to certain certification-loving Asian countries, e.g. Taiwan. Leave your thought at the comment. Thanks! 以下是參加 MozTW 擴充套件開發講座時發生的對話： Tim: 我覺得 Mozilla 應該要辦個認證，這樣就可以跟(今天的場地)巨匠電腦一起騙錢了。 Bob: 我們還在人家的場地耶XD 小聲一點&#8230; [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>English:</strong> Do you think Mozilla should issue certifcations to Mozilla Application Platform developers? The first pro I can think of is too boost platform visibilty, yet <a href="http://blog.bobchao.net/">Bob</a> said this only apply to certain  certification-loving Asian countries, e.g. Taiwan.</p>
<p>Leave your thought at the comment. Thanks!</p></blockquote>
<p>以下是參加 MozTW <a href="http://www.moztw.org/events/may2009/">擴充套件開發講座</a>時發生的對話：</p>
<p><strong>Tim: </strong>我覺得 Mozilla 應該要辦個認證，這樣就可以跟(今天的場地)巨匠電腦一起<del>騙錢</del>了。<strong><br />
Bob:</strong> 我們還在人家的場地耶XD 小聲一點&#8230;<br />
<strong>Tim:</strong> 不過認真說，這樣 Mozilla 平台就可以在外面牆上那堆認證之中有個知名度。<br />
<strong>Bob:</strong> 可是這種知名度只會在某些亞洲國家有意義喔&#8230;<br />
<strong>Tim:</strong> 如果這些亞洲國家有四五個那就夠啦，哈。</p>
<p>你覺得呢？想說什麼就在下面留個回應吧。</p>
<p>額外一提，Mozilla 目前發過的認證<a href="http://www.scribd.com/doc/3488870/Mozilla-Certificate">只有這個</a>，Download Day 活動的 PDF 獎狀。我也有(噗)。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/mozilla-developer-certification/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 新功能簡介</title>
		<link>http://blog.timc.idv.tw/posts/firefox-35-intro/</link>
		<comments>http://blog.timc.idv.tw/posts/firefox-35-intro/#comments</comments>
		<pubDate>Fri, 01 May 2009 19:15:08 +0000</pubDate>
		<dc:creator>timdream</dc:creator>
				<category><![CDATA[MozTW]]></category>

		<guid isPermaLink="false">http://blog.timc.idv.tw/?p=660</guid>
		<description><![CDATA[投影片上架，請到活動網頁下載。 （好像應該上一下 Slideshare 可是我好懶 &#62;&#60; ）]]></description>
			<content:encoded><![CDATA[<p>投影片上架，請到<a href="http://www.moztw.org/events/may2009/">活動網頁</a>下載。</p>
<p>（好像應該上一下 Slideshare 可是我好懶 &gt;&lt; ）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.timc.idv.tw/posts/firefox-35-intro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

