<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>熱血漢誌 - Question about myself.</title><link>http://clonn.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/clonn" /><description>熱血，是一輩子的事！
Answer is there, dig it.</description><language>en</language><managingEditor>noreply@blogger.com (Caesar Chi)</managingEditor><lastBuildDate>Mon, 30 Jan 2012 15:48:13 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">126</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="clonn" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:thumbnail url="https://lh4.googleusercontent.com/-8e8GF-8I108/Tggr9FbrwdI/AAAAAAAAMho/RvgGylxKrjM/han.jpg" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:image href="https://lh4.googleusercontent.com/-8e8GF-8I108/Tggr9FbrwdI/AAAAAAAAMho/RvgGylxKrjM/han.jpg" /><itunes:subtitle>Clonn - Question about myself</itunes:subtitle><itunes:summary>Life for myself</itunes:summary><item><title>[回顧] 2011 永不放棄單車全系列</title><link>http://clonn.blogspot.com/2012/01/2011.html</link><category>環島</category><category>腳踏車</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Thu, 26 Jan 2012 09:17:06 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-7575964177935624017</guid><description>&lt;a href="http://clonn.blogspot.com/2011/06/2011.html" target="_blank"&gt;2011 對我來說是一個單車生崖嶄新的開始&lt;/a&gt;，自從&lt;a href="http://clonn.blogspot.com/2010/07/98-1t-day2.html" target="_blank"&gt;2010 單車環島之後&lt;/a&gt;就開啟了自己的單車生活，也讓自己對單車這項運動有了更深一層認識，對於這項運動更為熱愛。在這一年當中，完成了許多的不可能，真正的完成了永不放棄。&lt;br /&gt;
&lt;br /&gt;
2011 這一年，回顧起來是自我運動的全新開始，一開始只希望有一台自己的單車，與朋友一同參與挑戰賽事，最後卻演變成一同完成永不放棄全系列單車賽事，回頭看看是自己挖了一個坑給自己，還是真的想要挑戰自己?!&lt;br /&gt;
&lt;br /&gt;
2011 ，初次體會到什麼叫做【永不放棄】，從身體的疼痛，氣候的考驗，耐力的極限，每每都是挑戰自我的最大極限，過程中幾乎痛苦萬分，最後的結果不一定是甜美的，卻是踏實的。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2011，挑戰自我賽事，&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
2011/04 洄瀾300KM&lt;br /&gt;
2011/05 第三屆武嶺盃&lt;br /&gt;
2011/05 探索新中橫(塔塔加)&lt;br /&gt;
2011/06 鹿場新視界(苗栗鹿場)&lt;br /&gt;
2011/06 冬三河鐵人三項(半程體人三項)&lt;br /&gt;
2011/07 阿里山極限挑戰王&lt;br /&gt;
2011/08 挑戰巔峰武嶺(南投武嶺)&lt;br /&gt;
2011/11 西濱極限(200KM)&lt;br /&gt;
2011/12 陽金P字道&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-bvhapkQ46Ss/TyGAmZ0f4XI/AAAAAAAAQZM/06RNXoMJrHA/s1600/DSC_0120.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-bvhapkQ46Ss/TyGAmZ0f4XI/AAAAAAAAQZM/06RNXoMJrHA/s400/DSC_0120.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-bDL_tF0Av6E/TyGAoox1WsI/AAAAAAAAQZU/x24_a9ildCg/s1600/DSC_0056.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-bDL_tF0Av6E/TyGAoox1WsI/AAAAAAAAQZU/x24_a9ildCg/s400/DSC_0056.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-ac3oNlItkdI/TyGAyFc2ukI/AAAAAAAAQZc/4A2BcGVbiiU/s1600/DSC_0962.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-ac3oNlItkdI/TyGAyFc2ukI/AAAAAAAAQZc/4A2BcGVbiiU/s400/DSC_0962.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Me7iv-jG6TI/TyGA1fmYrhI/AAAAAAAAQZk/j_6ujkZYVLg/s1600/DSC_0882.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-Me7iv-jG6TI/TyGA1fmYrhI/AAAAAAAAQZk/j_6ujkZYVLg/s400/DSC_0882.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-DuH-Txfz0WY/TyGA7bb9R7I/AAAAAAAAQZs/gVnbTURfXWc/s1600/DSC_1463.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-DuH-Txfz0WY/TyGA7bb9R7I/AAAAAAAAQZs/gVnbTURfXWc/s400/DSC_1463.jpg" width="225" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1AA5tZZc-hY/TyGBPkcyDwI/AAAAAAAAQZ8/-DXe5lGQfEA/s1600/DSC_2716.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://3.bp.blogspot.com/-1AA5tZZc-hY/TyGBPkcyDwI/AAAAAAAAQZ8/-DXe5lGQfEA/s400/DSC_2716.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-gakVYe6FmOE/TyGBV1iabqI/AAAAAAAAQaE/EnMv5nGhtkQ/s1600/DSC_2363.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-gakVYe6FmOE/TyGBV1iabqI/AAAAAAAAQaE/EnMv5nGhtkQ/s400/DSC_2363.jpg" width="225" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/--CNkxOVXMaU/TyGJ_GYMmII/AAAAAAAAQaM/tKQLutuDva4/s1600/DSC_2759.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/--CNkxOVXMaU/TyGJ_GYMmII/AAAAAAAAQaM/tKQLutuDva4/s400/DSC_2759.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最後，當然還是要感謝所有一同參與的夥伴以及支援的朋友，因為有你們，才有辦法支撐到最後，也因為有你們，這一路走起來並不孤單，2011這一年的單車生活，特別感謝&lt;a href="http://blog.xuite.net/chang223/123" target="_blank"&gt;單車家族&lt;/a&gt;，給予我第一台自己的單車也讓我實踐了夢想的第一步，2012 相信有許多挑戰等著我去面對。&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-size: x-large;"&gt;挑戰極限，永不放棄!!!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-7575964177935624017?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=FBPLMsmBGGg:NEmRttkXSQA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=FBPLMsmBGGg:NEmRttkXSQA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=FBPLMsmBGGg:NEmRttkXSQA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T09:17:06.734-08:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/-bvhapkQ46Ss/TyGAmZ0f4XI/AAAAAAAAQZM/06RNXoMJrHA/s72-c/DSC_0120.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] Git 簡單介紹</title><link>http://clonn.blogspot.com/2011/12/slide-git.html</link><category>快快樂樂教學系列</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Thu, 22 Dec 2011 08:54:07 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-6633541724005450903</guid><description>&lt;br /&gt;
上次在PHP 讀書會裡面分享的一個主題，Git 一個經常使用，卻不太熟得版本控制工具，上面資料如果有錯歡迎各位指正。

&lt;br /&gt;
&lt;div id="__ss_10667502" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/clonncd/simple-git" target="_blank" title="simple Git "&gt;simple Git &lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/10667502" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/clonncd" target="_blank"&gt;Caesar Chi&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
裡面有介紹到幾個工具，
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/webmat/git_remote_branch" target="_blank"&gt;Git remote branch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gitready.com/advanced/2009/07/31/tig-the-ncurses-front-end-to-git.html" target="_blank"&gt;Tig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bobthecow/git-flow-completion" target="_blank"&gt;git-completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
這些工具及資料要特別感謝&lt;a href="http://www.plurk.com/hsatac" target="_blank"&gt;hSATAC&lt;/a&gt;提供。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-6633541724005450903?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=KVv_57IJNfE:12ZV-kpi30g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=KVv_57IJNfE:12ZV-kpi30g:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=KVv_57IJNfE:12ZV-kpi30g:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-22T08:54:07.645-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] javascript RegExp.$1 正規表示法理論與範例</title><link>http://clonn.blogspot.com/2011/12/javascript-regexp1.html</link><category>javascript</category><category>reg</category><category>快快樂樂教學系列</category><category>html</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 20 Dec 2011 10:54:24 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-7042623572344910347</guid><description>&lt;br /&gt;
javascript 裡面正規表示法其實蠻多元的，參考&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" target="_blank"&gt;ECMAScript 15.5.2 &lt;/a&gt;當中提到，&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;""When String is called as part of a new expression, it is a constructor: it initialises the newly created object.
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" target="_blank"&gt;原文網址&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
意謂著當String 出現的時候，同時也會產生RegExp 這個物件，表示String 也同時帶有RegExp 屬性。因此可以瞭解為何javascript String 可以match, exec, replace 等function 當中使用正規表示法。&lt;br /&gt;
&lt;br /&gt;
RegExp 如同前面提到是一個javascript object.該如何建構？&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var reg = new RegExp(/text/, "gims");

var reg = /text/gims;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
兩者的宣告方式是相同的，如此就宣告一個完整的正規表示法物件。實際應用幾乎使用第二種宣告方式，今天要討論的就是RegExp.$ 這個變數到底是怎麼產生。&lt;br /&gt;
&lt;br /&gt;
在這邊就不討論深入正規表示法內部使用規則及原理，回到本文重點，實際上看一下在javascript 正規表示法的另外一種用法RegExp.$1.....$xx&lt;br /&gt;
&lt;br /&gt;
當我們使用正規表示法時，使用分群就會可以將不同分群，視為不同的變數，就可以直接使用RexExp.$1,RexExp.$2...以此類推。&lt;br /&gt;
&lt;br /&gt;
一個很爛的舉例來說，&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var str = "abcdefghij";
var reg = new RegExp(/(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)/);

for (var i=1; i&amp;lt; 99; i++) {
console.log(RegExp["$" + i]);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
會看到結果為，&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-8tg4psZAOo4/TvDXbAz63hI/AAAAAAAAQY0/-OGQH3SR3Rg/s1600/2011-12-21_022756.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-8tg4psZAOo4/TvDXbAz63hI/AAAAAAAAQY0/-OGQH3SR3Rg/s320/2011-12-21_022756.png" width="201" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/regx/reg.php" target="_blank"&gt;live demo&lt;/a&gt;&lt;br /&gt;
實例上活用起來也蠻有趣的，例如&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var str = "tel:(02)2888-8888";
var reg = new RegExp(/^tel:[(](\d\d)[)]+(\d+)-(\d+)/);
str.match(reg);
console.log("tel number is : " + str);
console.log("tel country number is : " + RegExp.$1);
console.log("tel front 4 number are : " + RegExp.$2);
console.log("tel last 4 nuber are : " + RegExp.$3);

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
結果如下&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-8tT7QT0HpJU/TvDXleMRTWI/AAAAAAAAQY8/5xgBzyWjYFo/s1600/2011-12-21_023629.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="96" src="http://1.bp.blogspot.com/-8tT7QT0HpJU/TvDXleMRTWI/AAAAAAAAQY8/5xgBzyWjYFo/s320/2011-12-21_023629.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/regx/reg2.php" target="_blank"&gt;live demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: #b45f06; font-size: x-large;"&gt;結語&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
RegExp 這個物件之前有稍微接觸過，不過並不是十分瞭解，這次因為工作的關係又有機會碰到，實際找了一下&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" target="_blank"&gt;ECMA-262&lt;/a&gt;之後，對於這個物件為何會產生也稍微有點瞭解。&lt;br /&gt;
&lt;br /&gt;
正規表示法實際上在javascript 的使用上十分廣泛，不只是String 的過濾，例如其他DOM選取，js-template 正規表示法都是增加實做速度的實際應用。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: #b45f06; font-size: x-large;"&gt;相關連結&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf"&gt;http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.regular-expressions.info/javascript.html"&gt;http://www.regular-expressions.info/javascript.html&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://blog.roodo.com/rocksaying/archives/2670695.html"&gt;http://blog.roodo.com/rocksaying/archives/2670695.html&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-7042623572344910347?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=Qak_pT5XgCg:f3PdSA_Oe7w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=Qak_pT5XgCg:f3PdSA_Oe7w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=Qak_pT5XgCg:f3PdSA_Oe7w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-20T10:54:24.475-08:00</app:edited><media:thumbnail url="http://2.bp.blogspot.com/-8tg4psZAOo4/TvDXbAz63hI/AAAAAAAAQY0/-OGQH3SR3Rg/s72-c/2011-12-21_022756.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" length="3067290" type="application/pdf" /><media:content url="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" fileSize="3067290" type="application/pdf" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> javascript 裡面正規表示法其實蠻多元的，參考ECMAScript 15.5.2 當中提到， ""When String is called as part of a new expression, it is a constructor: it initialises the newly created object. 原文網址 意謂著當String 出現的時候，同時也會產生RegExp 這個物件，表示String 也同時帶有RegExp 屬性。因此可以瞭解為何javascript Strin</itunes:subtitle><itunes:author>noreply@blogger.com (Caesar Chi)</itunes:author><itunes:summary> javascript 裡面正規表示法其實蠻多元的，參考ECMAScript 15.5.2 當中提到， ""When String is called as part of a new expression, it is a constructor: it initialises the newly created object. 原文網址 意謂著當String 出現的時候，同時也會產生RegExp 這個物件，表示String 也同時帶有RegExp 屬性。因此可以瞭解為何javascript String 可以match, exec, replace 等function 當中使用正規表示法。 RegExp 如同前面提到是一個javascript object.該如何建構？ var reg = new RegExp(/text/, "gims"); var reg = /text/gims; 兩者的宣告方式是相同的，如此就宣告一個完整的正規表示法物件。實際應用幾乎使用第二種宣告方式，今天要討論的就是RegExp.$ 這個變數到底是怎麼產生。 在這邊就不討論深入正規表示法內部使用規則及原理，回到本文重點，實際上看一下在javascript 正規表示法的另外一種用法RegExp.$1.....$xx 當我們使用正規表示法時，使用分群就會可以將不同分群，視為不同的變數，就可以直接使用RexExp.$1,RexExp.$2...以此類推。 一個很爛的舉例來說， var str = "abcdefghij"; var reg = new RegExp(/(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)/); for (var i=1; i&amp;lt; 99; i++) { console.log(RegExp["$" + i]); } 會看到結果為， live demo 實例上活用起來也蠻有趣的，例如 var str = "tel:(02)2888-8888"; var reg = new RegExp(/^tel:[(](\d\d)[)]+(\d+)-(\d+)/); str.match(reg); console.log("tel number is : " + str); console.log("tel country number is : " + RegExp.$1); console.log("tel front 4 number are : " + RegExp.$2); console.log("tel last 4 nuber are : " + RegExp.$3); 結果如下 live demo 結語 RegExp 這個物件之前有稍微接觸過，不過並不是十分瞭解，這次因為工作的關係又有機會碰到，實際找了一下ECMA-262之後，對於這個物件為何會產生也稍微有點瞭解。 正規表示法實際上在javascript 的使用上十分廣泛，不只是String 的過濾，例如其他DOM選取，js-template 正規表示法都是增加實做速度的實際應用。 相關連結 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf http://www.regular-expressions.info/javascript.html http://blog.roodo.com/rocksaying/archives/2670695.html </itunes:summary><itunes:keywords>javascript, reg, 快快樂樂教學系列, html</itunes:keywords></item><item><title>[閒談] 產品開發對於瀏覽器支援度之取捨</title><link>http://clonn.blogspot.com/2011/12/blog-post.html</link><category>javascript</category><category>Black and white to write</category><category>html5</category><category>Word</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 13 Dec 2011 09:58:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-3005808982744800167</guid><description>&lt;br /&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
最近以前的學弟有提到關於Html5支援的問題，總覺得對於某些技術在某些瀏覽器之下無法運作，就放棄實做的可行性，個人真的覺得十分可惜，因此以下是我回覆的內容，當然也是在實務開發流程所會遇到的狀況，分享給大家。&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
---------------------------------------------------------------------&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
對於html5 的整體規格來說，目前已經是趨向於瀏覽器先行，&lt;wbr&gt;&lt;/wbr&gt;目前的狀況幾乎是先實做，後規範，&lt;a href="http://www.w3.org/" target="_blank"&gt;W3C&lt;/a&gt;，&lt;span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 18px;"&gt;&lt;a href="http://www.whatwg.org/" target="_blank"&gt;WhatWG&lt;/a&gt;所有相關&lt;wbr&gt;&lt;/wbr&gt;單位的規格書幾乎趨向於邊看邊修的地步，&lt;wbr&gt;&lt;/wbr&gt;因此如果要實做這些新規範（新標準）自然會有所取捨，&lt;wbr&gt;&lt;/wbr&gt;在前期也需要花費一番功夫。&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;文中提到的東西是實際存在的問題，&lt;wbr&gt;&lt;/wbr&gt;在我們實際產品開發上幾乎會碰到html5 支援度問題，而我們的規劃會是：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;1. 瀏覽器支援的底限為何&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;2. 其他瀏覽器支援度&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;3. 其他瀏覽器可替代方案&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;首先，查詢需要的規格有哪些，接著訂定出瀏覽器支援度的底限，&lt;wbr&gt;&lt;/wbr&gt;例如本產品只能支援到IE8 ，IE6.7 完全無法支援（但是用IE6.7 會跳出警告視窗）&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;接著，當然以瀏覽器基本支援為最佳，&lt;wbr&gt;&lt;/wbr&gt;再者於瀏覽器上開始尋找替代方案，例如安裝外掛程式、&lt;wbr&gt;&lt;/wbr&gt;安裝Flash等方式進行調整。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;通常會先建議使用的瀏覽器，以及其他支援的瀏覽器，&lt;wbr&gt;&lt;/wbr&gt;當然會附註哪些瀏覽器效能會比較差，請升級或安裝他牌瀏覽器。（&lt;wbr&gt;&lt;/wbr&gt;畢竟使用者希望用美工刀切西瓜，我們還是要讓他這麼做。）&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;例如像網站的圓角，在Chrome, firefox, Opera, Safari 都可以使用CSS語法自然呈現，不過對於IE 7.8.9 就會使用SVG圖形描繪的方式（目前是使用&lt;a href="http://css3pie.com/" style="color: #1155cc;" target="_blank"&gt;CSS-PIE3&lt;/a&gt;）&lt;wbr&gt;&lt;/wbr&gt;達到相同的目的，當然不可否認，IE 7.8.9 自然呈現的效率就是慢，而另外一種選擇方式就採用，IE 7.8.9不會有圓角效果，只會出現正正方方的邊角。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;當然這只是其中一個例子，&lt;wbr&gt;&lt;/wbr&gt;在跨瀏覽器的實做上還有許多解決方式和許多有趣的套件庫可以參考&lt;wbr&gt;&lt;/wbr&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px;"&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;這當中有一種例外，就是對於新技術的展現，&lt;wbr&gt;&lt;/wbr&gt;就像目前只有Chrome，&lt;wbr&gt;&lt;/wbr&gt;Opera支援Device這種tag，&lt;wbr&gt;&lt;/wbr&gt;而你當中就是希望使用原生Tag 支援多媒體裝置的展現，當然就不需要考慮到瀏覽器支援度的問題，&lt;wbr&gt;&lt;/wbr&gt;這個時候是屬於呈現新技術，展現新方向，&lt;wbr&gt;&lt;/wbr&gt;跟一般產品開發上是截然不同。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-3005808982744800167?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=5KCYeTO7upE:4fTgxA4x5qY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=5KCYeTO7upE:4fTgxA4x5qY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=5KCYeTO7upE:4fTgxA4x5qY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-13T09:58:01.497-08:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>insertAdjacentHTML和 innerHTML 的差異</title><link>http://clonn.blogspot.com/2011/11/insertadjacenthtml-innerhtml.html</link><category>javascript</category><category>html5</category><category>html</category><category>jQuery</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Thu, 10 Nov 2011 05:12:33 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-4518159389471747867</guid><description>&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-cOX-NG7aX-I/TruCOMUwj0I/AAAAAAAAP5I/HFjKly4Hu4M/s1600/HTML5_Logo_256.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-cOX-NG7aX-I/TruCOMUwj0I/AAAAAAAAP5I/HFjKly4Hu4M/s1600/HTML5_Logo_256.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
在Html document 方法當中，在W3C Html5 裡面有提到幾個DOM create 方法，今天來探討一下&lt;a href="http://www.w3.org/TR/html5/apis-in-html-documents.html#insertadjacenthtml" target="_blank"&gt;insertAdjacentHTML()&lt;/a&gt;這個方法。&lt;br /&gt;
&lt;br /&gt;
insertAdjacentHTML(position, text)，使用上類似於之前的append()，多加上了位置選擇，因此可以做到類似於&lt;a href="http://api.jquery.com/category/manipulation/dom-insertion-inside/" target="_blank"&gt;jQuery DOM Insertion&lt;/a&gt;這些方式。&lt;br /&gt;
&lt;br /&gt;
另外值得一提的部份就是text ，是可以直接以文字帶入，由insertAdjacentHTML產生為DOM Object，不需要類似之前先Create DOM，再執行append的方式。&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;// document.getElementById("insert-method").insertAdjacentHTML("beforeend", "&amp;lt;span&amp;gt;bar&amp;lt;/span&amp;gt;");&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
除了提一下insertAdjacentHTML這個方法之外，同時也探討一下innerHTML，到底跟insertAdjacentHTML有什麼差異。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
在&lt;a href="http://hacks.mozilla.org/2011/11/insertadjacenthtml-enables-faster-html-snippet-injection/" target="_blank"&gt;insertAdjacentHTML() Enables Faster HTML Snippet Injection&lt;/a&gt;&amp;nbsp;這篇文章當中裡面有點出innerHTML的異同，如果只是需要使用append DOM的方式，強烈建議採用insertAdjacentHTML，而不要再使用innerHTML，怎麼說呢？&lt;br /&gt;
&lt;br /&gt;
通常會看到一種簡化append 的方式&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;// document.getElementById("inner-method").innerHTML += "&amp;lt;span&amp;gt;bar&amp;lt;/span&amp;gt;";&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
執行上當然沒有任何問題，不過在執行效率上會有差異，innerHTML會先將取得內部所有DOM tree，接著再將DOM object 執行serialize，最後才會&amp;lt;span&amp;gt;bar&amp;lt;/span&amp;gt;這段文字接上。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/DOM/insertDom.php" target="_blank"&gt;可以在這邊直接看一下線上範例。&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;測試&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
在不同瀏覽器經過實際測試效果，可以看一下底下數據（經過500次loop）:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Chrome&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-ip7tKsNriVw/TruEEXE9UYI/AAAAAAAAP5g/lfrsqttYY0g/s1600/20111110_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="84" src="http://3.bp.blogspot.com/-ip7tKsNriVw/TruEEXE9UYI/AAAAAAAAP5g/lfrsqttYY0g/s320/20111110_4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Firefox&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/--G6cNZuimKM/TruEQTGQYrI/AAAAAAAAP5o/5KD8LOuxvkw/s1600/20111110_5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--G6cNZuimKM/TruEQTGQYrI/AAAAAAAAP5o/5KD8LOuxvkw/s1600/20111110_5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Safari&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-FZrjEbZrIAk/TruD_JE6qBI/AAAAAAAAP5Y/GIAnXj44u8s/s1600/20111110_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="81" src="http://3.bp.blogspot.com/-FZrjEbZrIAk/TruD_JE6qBI/AAAAAAAAP5Y/GIAnXj44u8s/s320/20111110_3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Opera&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-j6q3macxxHc/TruD2eQ0SzI/AAAAAAAAP5Q/O6BP-7mOhYY/s1600/20111110_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-j6q3macxxHc/TruD2eQ0SzI/AAAAAAAAP5Q/O6BP-7mOhYY/s1600/20111110_1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結論&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
當然也不會要大家都捨棄innerHTML，但是使用時機可能要在多加注意，如果只是取得單純DOM to string ，用innerHTML是個不錯的方式，一行搞定，而且取得資料符合需求，但是如果要append 可以考慮一下insertAdjacentHTML。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
HTML5 裡面提供許多新型態的DOM selector 和 insert method, 各位開發網站的時候，如果不考慮支援IE 之類網站，其實就可以大方使用這些瀏覽器，畢竟支援度佳速度效率上也提高很多，歡迎來到HTML5 的世界。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-4518159389471747867?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=I3rVEaL71jw:3AMrTtkd1IM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=I3rVEaL71jw:3AMrTtkd1IM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=I3rVEaL71jw:3AMrTtkd1IM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T05:12:33.649-08:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-cOX-NG7aX-I/TruCOMUwj0I/AAAAAAAAP5I/HFjKly4Hu4M/s72-c/HTML5_Logo_256.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><georss:featurename xmlns:georss="http://www.georss.org/georss">Taipei City, Taiwan</georss:featurename><georss:point xmlns:georss="http://www.georss.org/georss">25.091075 121.5598345</georss:point><georss:box xmlns:georss="http://www.georss.org/georss">24.976033 121.401906 25.206117 121.71776299999999</georss:box></item><item><title>[教學] hubot install. hubot 機器人安裝</title><link>http://clonn.blogspot.com/2011/10/hubot-install-hubot.html</link><category>js</category><category>javascript</category><category>Black and white to write</category><category>node.js</category><category>快快樂樂教學系列</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 26 Oct 2011 19:30:00 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-4349642070377428821</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://github-images.s3.amazonaws.com/blog/2011/hubot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="https://github-images.s3.amazonaws.com/blog/2011/hubot.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;source:&amp;nbsp;&lt;a href="https://github.com/blog/968-say-hello-to-hubot"&gt;https://github.com/blog/968-say-hello-to-hubot&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
hubot 機器人，可以自己寫script 代替人工作業，也可以用來做代替工人智慧產物。目前這個專案已經使用Coffee script 和node.js重新編寫，並且Open source於github，詳細內容就不多介紹 ，本篇主要教學如何安裝hubot 。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #999999;"&gt;查了很久，對於這套專案的安裝說明實在很少，做個簡單教學紀錄。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;安裝前提，以下幾個項目需要事先安裝&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-for-all-os.html"&gt;node.JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-npm.html"&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://redis.io/download"&gt;redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.eddie.com.tw/2011/08/05/coffeescript-in-action/"&gt;coffee-script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;安裝步驟&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;git clone https://github.com/github/hubot.git
cd hubot
bin/hubot
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;注意：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
中間可能遇到某些module 尚未安裝，請使用npm install 安裝其他module執行指令&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-5jTTcq4fIms/TqfI0v8cILI/AAAAAAAAO_g/vvhx98fFyAc/s1600/20111026_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="395" src="http://4.bp.blogspot.com/-5jTTcq4fIms/TqfI0v8cILI/AAAAAAAAO_g/vvhx98fFyAc/s640/20111026_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;注意：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;執行hubot 之前，請先切換到&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;hubot &lt;/span&gt;&lt;/b&gt;目錄下&lt;/li&gt;
&lt;li&gt;執行hubot 之前，請先啟動redis server &amp;nbsp;-&amp;gt;&amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;redis-server&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;常用指令&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;hubot help
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-TGGhNAhXoyU/TqfJdwNFsrI/AAAAAAAAO_o/CgTSX1qJKF4/s1600/20111026_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-TGGhNAhXoyU/TqfJdwNFsrI/AAAAAAAAO_o/CgTSX1qJKF4/s640/20111026_3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;範例指令&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;搜尋圖片&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;hubot image me &amp;lt;query&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-tToUO2DVxK4/TqfKA51AxCI/AAAAAAAAO_w/IAIX2hYGK1k/s1600/20111026_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="38" src="http://2.bp.blogspot.com/-tToUO2DVxK4/TqfKA51AxCI/AAAAAAAAO_w/IAIX2hYGK1k/s640/20111026_4.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;搜尋youtube&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;hubot youtube me &amp;lt;query&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-KrGNVVmM5l8/TqfKJvAA7cI/AAAAAAAAO_4/4Vbhy9i7RJs/s1600/20111026_5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="34" src="http://2.bp.blogspot.com/-KrGNVVmM5l8/TqfKJvAA7cI/AAAAAAAAO_4/4Vbhy9i7RJs/s640/20111026_5.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;加載script&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
指令就是將整個script 專案下載之後，將src/scripts 的資料整個複製到hubot 裡面執行。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;git clone https://github.com/github/hubot-scripts
cd ~/hubot
cp -r ~/hubot-scripts/src/scripts ~/hubot/src/scripts
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;參考網址 &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://joeloughton.com/blog/uncategorized/installing-hubot-on-mac-os-x-10-7/"&gt;http://joeloughton.com/blog/uncategorized/installing-hubot-on-mac-os-x-10-7/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/hubot-scripts"&gt;https://github.com/github/hubot-scripts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-4349642070377428821?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=8ca_DyO3IFc:M8jZXKuk5IU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=8ca_DyO3IFc:M8jZXKuk5IU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=8ca_DyO3IFc:M8jZXKuk5IU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T19:30:00.428-07:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-5jTTcq4fIms/TqfI0v8cILI/AAAAAAAAO_g/vvhx98fFyAc/s72-c/20111026_2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><georss:featurename xmlns:georss="http://www.georss.org/georss">Taiwan</georss:featurename><georss:point xmlns:georss="http://www.georss.org/georss">23.69781 120.960515</georss:point><georss:box xmlns:georss="http://www.georss.org/georss">19.977947 115.906804 27.417673 126.01422600000001</georss:box></item><item><title>[教學] nodeJS - npm install on linux and windows</title><link>http://clonn.blogspot.com/2011/01/nodejs-npm.html</link><category>javascript</category><category>node.js</category><category>nmp</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 18 Oct 2011 22:33:57 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-1686935638947340978</guid><description>&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;修改紀錄：&lt;/span&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 676px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: x-small; line-height: normal; white-space: normal;"&gt;2011/10/19 &amp;nbsp;node.exe 經過努力之後，child_process 已經可以支援npm cli.js安裝指令，npm github 網站資料安裝說明也進行同步更新，因此本篇資料經過調整後，簡化linux 部份，增加windows 安裝說明！&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-for-all-os.html" target="_blank"&gt;node.JS &lt;/a&gt;就已經夠麻煩了，還需要什麼nmp，看這三個字就覺得沒有意義，&lt;a href="https://github.com/isaacs/npm" target="_blank"&gt;npm (NodeJS package management)&lt;/a&gt; ，許多擴充功能都可以藉由此套件快速安裝，例如express, HTTP-connect, template，藉由第三方套件可以大大縮短開發時程。&lt;br /&gt;
&lt;br /&gt;
&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-for-all-os.html" style="color: black;" target="_blank"&gt;nodejs 主要程式&lt;/a&gt;安裝完後，其實還有一大區塊，就是直接使用module ，使用現成的模組來開發，以下教學如何安裝npm，主要分為&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;linux&lt;/span&gt; 、 &lt;span class="Apple-style-span" style="color: red;"&gt;windows&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; &lt;/span&gt;安裝教學說明：&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
PS. 記得&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;別&lt;/span&gt;&lt;/b&gt;使用root權限安裝&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;Linux npm 安裝&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;curl http://npmjs.org/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
linux npm 安裝完成！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;windows  npm安裝&lt;/span&gt;&lt;/b&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;下載&lt;/span&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="background-color: #353129; color: #eeeeee; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 19px; line-height: 28px;"&gt;&lt;a href="http://nodejs.org/dist/v0.5.9/node.exe" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;&lt;code style="color: #c3cc88; font-family: Monaco, 'Andale Mono', 'Lucida Console', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 11pt;"&gt;node.exe&lt;/code&gt;&amp;nbsp;Windows executable&lt;/a&gt;&lt;/span&gt;，預設放至於&lt;/span&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;curl http://npmjs.org/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;1. 設定環境變數&lt;/b&gt;&lt;br /&gt;
將node 路徑設定環境變數%PATH%，指令模式(command line)下輸入以下指令&lt;br /&gt;
&lt;div&gt;
&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: Tahoma; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code style="color: black; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px;"&gt;cd c:\node\bin\
set path=%PATH%;%CD%
setx path "%PATH%"&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. 安裝npm &lt;/b&gt;&lt;br /&gt;
安裝npm 前請先&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;確認&lt;/span&gt;&lt;/b&gt;已經 &lt;a href="http://code.google.com/p/msysgit/downloads/list?can=3" target="_blank"&gt;Git 1.7.6 以上版本&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;git config --system http.sslcainfo /bin/curl-ca-bundle.crt
git clone --recursive git://github.com/isaacs/npm.git
cd npm
node cli.js install npm -gf
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
恭喜，npm 安裝完成。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;完成&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
試試看安裝npm 套件&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;npm install socket.io
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: sans-serif; font-size: 14px; line-height: 22px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;[工商服務]&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;a href="http://nodejs.tw/" style="color: #b45f06; text-decoration: none;"&gt;NodeJS Taiwan&lt;/a&gt;期待更多人的支持，希望能夠聽到你的回應及分享。&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;參考資料：&lt;/b&gt;&lt;br /&gt;
&lt;a href="https://github.com/isaacs/npm"&gt;https://github.com/isaacs/npm&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-1686935638947340978?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=vpObI2hPtMQ:nAs5U9bQH0s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=vpObI2hPtMQ:nAs5U9bQH0s:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=vpObI2hPtMQ:nAs5U9bQH0s:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-18T22:33:57.038-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://nodejs.org/dist/v0.5.9/node.exe" length="4925440" type="application/octet-stream" /><media:content url="http://nodejs.org/dist/v0.5.9/node.exe" fileSize="4925440" type="application/octet-stream" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>修改紀錄： 2011/10/19 &amp;nbsp;node.exe 經過努力之後，child_process 已經可以支援npm cli.js安裝指令，npm github 網站資料安裝說明也進行同步更新，因此本篇資料經過調整後，簡化linux 部份，增加windows 安裝說明！ node.JS 就已經夠麻煩了，還需要什麼nmp，看這三個字就覺得沒有意義，npm (NodeJS package management) ，許多擴充功能都可以藉由此套件快速安裝，例如express, HTTP-connect, </itunes:subtitle><itunes:author>noreply@blogger.com (Caesar Chi)</itunes:author><itunes:summary>修改紀錄： 2011/10/19 &amp;nbsp;node.exe 經過努力之後，child_process 已經可以支援npm cli.js安裝指令，npm github 網站資料安裝說明也進行同步更新，因此本篇資料經過調整後，簡化linux 部份，增加windows 安裝說明！ node.JS 就已經夠麻煩了，還需要什麼nmp，看這三個字就覺得沒有意義，npm (NodeJS package management) ，許多擴充功能都可以藉由此套件快速安裝，例如express, HTTP-connect, template，藉由第三方套件可以大大縮短開發時程。 nodejs 主要程式安裝完後，其實還有一大區塊，就是直接使用module ，使用現成的模組來開發，以下教學如何安裝npm，主要分為linux 、 windows 安裝教學說明： PS. 記得別使用root權限安裝 Linux npm 安裝 curl http://npmjs.org/install.sh | sh linux npm 安裝完成！ windows npm安裝 下載node.exe&amp;nbsp;Windows executable，預設放至於 curl http://npmjs.org/install.sh | sh 1. 設定環境變數 將node 路徑設定環境變數%PATH%，指令模式(command line)下輸入以下指令 cd c:\node\bin\ set path=%PATH%;%CD% setx path "%PATH%" 2. 安裝npm 安裝npm 前請先確認已經 Git 1.7.6 以上版本 git config --system http.sslcainfo /bin/curl-ca-bundle.crt git clone --recursive git://github.com/isaacs/npm.git cd npm node cli.js install npm -gf 恭喜，npm 安裝完成。 完成 試試看安裝npm 套件 npm install socket.io [工商服務] NodeJS Taiwan期待更多人的支持，希望能夠聽到你的回應及分享。 參考資料： https://github.com/isaacs/npm </itunes:summary><itunes:keywords>javascript, node.js, nmp</itunes:keywords></item><item><title>[教學]Node.js 安裝教學. node.JS install</title><link>http://clonn.blogspot.com/2011/01/nodejs-for-all-os.html</link><category>js</category><category>javascript</category><category>node.js</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Mon, 17 Oct 2011 20:01:53 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-2490640015230804153</guid><description>修改紀錄：&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; line-height: normal; white-space: normal;"&gt;2011/10/18
目前nodeJS 已提供windows 執行版本，以及linux 自行編譯的步驟，程序上也都大為降低錯誤率，因此本篇文章將內容縮減為Linux、Windows 兩種版本安裝說明。&lt;/span&gt;&lt;/pre&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Geneva, Lucida; line-height: 24px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Geneva, Lucida; line-height: 24px;"&gt;所有的nodeJS文章，通常一開始的簡介，之後就是環境安裝介紹，當然也不免俗的來介紹一下，隨著時間的演進與發展，在各種環境都已經有自己一套node repository ，這邊就介紹最基本的unix 底下compile，和windows 兩種方式&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 2px; color: #444444; font-family: sans-serif; font-size: 1.7em; line-height: 1em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 20px; padding-bottom: 5px;"&gt;






Linux&lt;/h2&gt;
執行以下指令&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;git clone --depth 1 git://github.com/joyent/node.git   
./configure  
make -j2  
make install # 如果出現權限問題，再加上sudo 試試看 
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
以下事項提醒，安裝前先行確認環境中已安裝：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;gcc&lt;/li&gt;
&lt;li&gt;python&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
同時不要使用root權限安裝，否則會導致node module 因為權限問題，執行出現錯誤。&lt;/div&gt;
&lt;br /&gt;
&lt;h2 style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 2px; color: #444444; font-family: sans-serif; font-size: 1.7em; line-height: 1em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 20px; padding-bottom: 5px;"&gt;






Windows&lt;/h2&gt;
&lt;a href="http://nodejs.org/#download"&gt;http://nodejs.org/#download&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
至此網址，下載&lt;span class="Apple-style-span" style="background-color: #353129; color: #eeeeee; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 19px; line-height: 28px;"&gt;&lt;a href="http://nodejs.org/dist/v0.5.9/node.exe" style="color: #8bc84b; text-decoration: none;"&gt;&lt;code style="color: #c3cc88; font-family: Monaco, 'Andale Mono', 'Lucida Console', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 11pt;"&gt;node.exe&lt;/code&gt;&amp;nbsp;Windows executable&lt;/a&gt;&lt;/span&gt;，下載完後預設放入C:\node\node.exe，同時設定環境變數：&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;NODE_PATH="c:\node\"&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 26px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Arial; font-size: small; font-weight: normal; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 15px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 26px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Arial; font-size: small; font-weight: normal; line-height: normal;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 15px; line-height: 19px;"&gt;設定完後可以將其他module 放置此目錄底下，執行node 程式時，將會引用此目錄中module，如不存在才會尋找相對路徑。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2 style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 2px; color: #444444; font-family: sans-serif; font-size: 1.7em; line-height: 1em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 20px; padding-bottom: 5px;"&gt;




測試hello.js&lt;/h2&gt;
&lt;br /&gt;
&lt;br /&gt;
將底下檔案儲存為&lt;b&gt;hello.js&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
在console 切換到hello.js 目錄底下執行以下指令。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;node hello_node.js
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
會顯示以下結果。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;Server running at http://127.0.0.1:8124/
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
接著開啟瀏覽器輸入&lt;span class="Apple-style-span" style="color: red; font-weight: bold;"&gt;http://127.0.0.1:8124/&lt;/span&gt;&lt;span class="Apple-style-span"&gt;，會顯示以下訊息&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;Hello Node.js
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 2px; color: #444444; font-family: sans-serif; font-size: 1.7em; line-height: 1em; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 20px; padding-bottom: 5px;"&gt;






恭喜安裝成功!&lt;/h2&gt;
會顯示正確訊息表示 node.js.安裝成功。&lt;br /&gt;
&lt;div style="font-family: sans-serif; font-size: 14px; line-height: 1.6em; text-align: justify;"&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;[工商服務]&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;a href="http://nodejs.tw/"&gt;NodeJS Taiwan&lt;/a&gt;期待更多人的支持，希望能夠聽到你的回應及分享。&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-2490640015230804153?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=HyXJqFDuEfc:9ht0uKP2YAw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=HyXJqFDuEfc:9ht0uKP2YAw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=HyXJqFDuEfc:9ht0uKP2YAw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T20:01:53.480-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://nodejs.org/dist/v0.5.9/node.exe" length="4925440" type="application/octet-stream" /><media:content url="http://nodejs.org/dist/v0.5.9/node.exe" fileSize="4925440" type="application/octet-stream" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>修改紀錄： 2011/10/18 目前nodeJS 已提供windows 執行版本，以及linux 自行編譯的步驟，程序上也都大為降低錯誤率，因此本篇文章將內容縮減為Linux、Windows 兩種版本安裝說明。 所有的nodeJS文章，通常一開始的簡介，之後就是環境安裝介紹，當然也不免俗的來介紹一下，隨著時間的演進與發展，在各種環境都已經有自己一套node repository ，這邊就介紹最基本的unix 底下compile，和windows 兩種方式 Linux 執行以下指令 git clone -</itunes:subtitle><itunes:author>noreply@blogger.com (Caesar Chi)</itunes:author><itunes:summary>修改紀錄： 2011/10/18 目前nodeJS 已提供windows 執行版本，以及linux 自行編譯的步驟，程序上也都大為降低錯誤率，因此本篇文章將內容縮減為Linux、Windows 兩種版本安裝說明。 所有的nodeJS文章，通常一開始的簡介，之後就是環境安裝介紹，當然也不免俗的來介紹一下，隨著時間的演進與發展，在各種環境都已經有自己一套node repository ，這邊就介紹最基本的unix 底下compile，和windows 兩種方式 Linux 執行以下指令 git clone --depth 1 git://github.com/joyent/node.git ./configure make -j2 make install # 如果出現權限問題，再加上sudo 試試看 以下事項提醒，安裝前先行確認環境中已安裝： git gcc python 同時不要使用root權限安裝，否則會導致node module 因為權限問題，執行出現錯誤。 Windows http://nodejs.org/#download 至此網址，下載node.exe&amp;nbsp;Windows executable，下載完後預設放入C:\node\node.exe，同時設定環境變數： NODE_PATH="c:\node\" 設定完後可以將其他module 放置此目錄底下，執行node 程式時，將會引用此目錄中module，如不存在才會尋找相對路徑。 測試hello.js 將底下檔案儲存為hello.js var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Node.js\n'); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); 在console 切換到hello.js 目錄底下執行以下指令。 node hello_node.js 會顯示以下結果。 Server running at http://127.0.0.1:8124/ 接著開啟瀏覽器輸入http://127.0.0.1:8124/，會顯示以下訊息 Hello Node.js 恭喜安裝成功! 會顯示正確訊息表示 node.js.安裝成功。 [工商服務] NodeJS Taiwan期待更多人的支持，希望能夠聽到你的回應及分享。 </itunes:summary><itunes:keywords>js, javascript, node.js</itunes:keywords></item><item><title>無法取代的原生 - Javascript</title><link>http://clonn.blogspot.com/2011/10/javascript.html</link><category>javascript</category><category>Black and white to write</category><category>Google</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Sat, 15 Oct 2011 06:00:49 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-6630245003907078063</guid><description>最近幾年javascript 實在是一門進步神速的語言，從基本瀏覽器腳本語言，到HTML5 使用canvas、video、websocket、worker等，甚至是後端編譯腳本&lt;a target="_blank" href="http://nodejs.org/"&gt;nodeJS &lt;/a&gt;/&amp;nbsp;&lt;a  target="_blank" href="http://ringojs.org/"&gt;ringoJS&lt;/a&gt;，當然還有許多從javascript 編寫出來的套件庫，整體來說javascript 發展的速度比我想像的還要快得多。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;回顧javascript 歷史&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a target="_blank"  href="http://en.wikipedia.org/wiki/JavaScript"&gt;從Netscape 發展此種語言開始&lt;/a&gt;，壓根不會想到javascript 會演變成現在的局面，因此在當初訂定javascript 來說，就是毫無標準可言。Javascript 對於沒有接觸過程式開發的人來說，是一種好的開始，畢竟它的容錯性高，出錯率低，簡單來說就是，開心宣告就宣告，不用宣告也可以寫出能動的程式碼！這也造就了javascript 初期開始，可以直接複製、貼上、接專案的映像。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
因此由&lt;a target="_blank"  href="http://www.crockford.com/"&gt;Douglas Crockford&lt;/a&gt; 也開始提倡起&lt;a  target="_blank" href="http://shop.oreilly.com/product/9780596517748.do?sortby=publicationDate"&gt;javascript: Good parts(javascript :優良部份)&lt;/a&gt;，也發展出&lt;a target="_blank"  href="http://www.jslint.com/"&gt;jslint &lt;/a&gt;，提供大家作為javascript 程式碼驗證工具，會這樣子做不是沒有原因，畢竟javascript 實在是『太方便寫』，自己寫自己的，當然獨自開發這不是太大的問題，但是如果遇到大型專案時，這種充滿『重構味道』的程式碼，自然是一場不可抹滅的惡夢。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;套件庫掘起&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
在AJAX 崛起之後，javascript 的發展就變得相當吃重，也漸漸的讓開發人員體會到&lt;a  target="_blank" href="http://clonn.blogspot.com/2011/05/what-is-front-end-engineer.html"&gt;前端開發的重要性&lt;/a&gt;。當然javascript 開發，對於前端來說還是有很多問題，光是跨瀏覽器就是個很令人頭大的問題。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
因此各家開發出自己的套件、工具庫，例如&lt;a target="_blank"  href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;，&lt;a  target="_blank" href="http://dojotoolkit.org/"&gt;dojo&lt;/a&gt;，&lt;a  target="_blank" href="http://jquery.com/"&gt;jQuery&lt;/a&gt;等。當然這是個很不錯得方向，專家們開發出套件，而開發者可以利用套件組裝出自己所需要的效果，瑣碎的問題交由套件處理掉，讓開發者減少開發時間與降低開發門檻。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;Javascript 還是沒這麼簡單&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
前面的套件其實只解決了『前端開發的問題』，但是此時的javascript 已經不再是原本的javascript ，從前端到後端，甚至是指令等都可以利用javascript 來處理，例如nodeJS ，要怎麼利用javascript 寫出易讀，讓開發者容易瞭解、再利用的程式這是個難題。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a  target="_blank" href="http://jashkenas.github.com/coffee-script/"&gt;coffeescript&lt;/a&gt;、&lt;a  target="_blank" href="https://code.google.com/p/dart/"&gt;Dart&lt;/a&gt;兩者都屬於基於javascript 之上的產物，其目的就是為了解決&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;『javascript 物件化』&lt;/b&gt;&lt;/span&gt;的問題，對於我來說，這兩種語言都不算是新的產物，頂多算是開發javascript 簡化工具，開發的程式結構越來越有&lt;b&gt;『物件導向』&lt;/b&gt;的感覺，閱讀程式碼也更加簡單、優雅。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;潛在的問題&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
萬變不離其宗，以上這幾種&lt;b&gt;『工具』&lt;/b&gt;都是基於javascript 的變化型，根據使用套件及簡化作業的經驗來說，最終的最終還是會遇到許多不可解的問題，想要解決這些問題，或者是瞭解問題的所在，還是要去瞭解javascript ，只有根本的瞭解底層基礎運作，才是根本。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
當然也許有開發者都不會碰到&lt;b&gt;『地雷』&lt;/b&gt;，或者是『將地雷視而不見』，選擇繞路而行，雖然問題看似被解決了，事實上就變成了某種&lt;b&gt;『經驗談』&lt;/b&gt;，或者是&lt;b&gt;『它就是這樣子處理』&lt;/b&gt;，根本的問題還是存在著。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;結語&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
javascript 演變至今，已經有一種越來越強大的局面，不可否認它是一種『非常糟糕的語言』，任何一種寫法都可以執行。當然隨著規範的更動，以及開發者的努力，這些問題都會漸漸被限制，規範也會越來越清楚。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
當然利用套件開始自己的javascript 之路其實是不錯的事情，不管是從前端的jQuery 開始，或者是直接撰寫coffeescript 、Dart開始，都是一個不錯的方向，從門檻最低的平路開始，在一路上中後段還是會發現 - &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;『越不想碰的，最終還是要面對』&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
但至少你已經開始了這條，&lt;b&gt;『不歸路』&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-6630245003907078063?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=_hrpJy-G268:8E1BsYnLI2k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=_hrpJy-G268:8E1BsYnLI2k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=_hrpJy-G268:8E1BsYnLI2k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-15T06:00:49.624-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] livereload 設定及原理分析, livereload project  analysis</title><link>http://clonn.blogspot.com/2011/09/livereload-livereload-project-analysis.html</link><category>javascript</category><category>外掛</category><category>api</category><category>linux</category><category>快快樂樂教學系列</category><category>ajax</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Sat, 24 Sep 2011 04:28:26 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-3123758964059916778</guid><description>&lt;a href="http://clonn.blogspot.com/2011/09/livereload-linux.html" target="_blank"&gt;之前介紹過livereload &lt;/a&gt;，深深覺得他是個好東西，用過之後開發網站就不能缺少他，我真的回不去了。可是就會想要探討到底livereload 是怎麼做到修改檔案之後，就即時做頁面重新讀取呢？&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;分析&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
livereload 當程式執行之後就會開啟一個websocket server，如果檔案有任何變動，會發送訊息給瀏覽器，瀏覽器就會依據檔案不同執行不同程序。&lt;br /&gt;
&lt;br /&gt;
Server端其實做的事情就是監聽檔案變化，發送訊息給client！&lt;br /&gt;
&lt;br /&gt;
而預設的網站port號會採用35729，如果想要變更port號，在自己的家目錄底下有一個.livereload 檔案，去底下修改這個檔案，例如35729 修改為 88887。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;~/.livereload&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;config.port = 88887
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
如此就可以將預設的port號修改，那到底還有哪些config 可以使用呢？還有哪些不為人知的秘密呢？接下來直接&lt;a href="https://github.com/mockko/livereload" target="_blank"&gt;https://github.com/mockko/livereload&lt;/a&gt;一探究竟。&lt;br /&gt;
&lt;br /&gt;
伺服器端檔案&lt;br /&gt;
&lt;b&gt;livereload / server / lib / livereload.rb&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;host, 
:port, 
:exts, 
:exts_overwrite, 
:exclusions, 
:debug, 
:apply_js_live, 
:apply_css_live, 
:apply_images_live, 
:grace_period
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
原來可以使用的設定有這麼多種，至於每一個變數的功能為何，就不一一闡述，但是要置換的話，其實可以直接修改&lt;b&gt;~/.livereload&lt;/b&gt; 這個檔案就可以了。&lt;br /&gt;
&lt;br /&gt;
同時可以從原始碼中得知是採用&lt;a href="https://github.com/mockko/em-dir-watcher" target="_blank"&gt;em-dir-watcher&lt;/a&gt;（也是同一個作者），做IO 監控只要檔案有變動，立即就會得知同時做檔名比對發送資料到前端。&lt;br /&gt;
&lt;br /&gt;
在linux 環境底下，底層檔案變更監控是採用&lt;a href="http://en.wikipedia.org/wiki/Inotify" target="_blank"&gt;Inotify機制&lt;/a&gt;，如此一來檔案變更的時候就可以即時知道哪些檔案變更了。&lt;br /&gt;
&lt;br /&gt;
接著看到example 裡面有兩個檔案xbrowser.html, xbrowser.css，看到這個檔名應該跟跨瀏覽器有關係，讓我們來看一下。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;    &amp;lt;script src="../src/content.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="../src/background.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="../src/xbrowser/livereload.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script&amp;gt;
    window.onload = function(){
        livereload.run();
    };
    &amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
xbrowser.html就是直接使用livereload client 的連接，直接載入javascript，因此不需要加載任何外掛，測試一下也的確可以正常使用。&lt;br /&gt;
&lt;br /&gt;
設定ip, port&lt;br /&gt;
&lt;b&gt;/src/background.js&lt;/b&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;host: ('ip'),
port: 35729,
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
直接在這個檔案修改即可。&lt;br /&gt;
&lt;br /&gt;
既然都有前端source code ，那就來找一下到底是怎麼換至javascript, css, img是不需要整頁重載，而只有載入局部資料的呢？整個頁面怎麼處理呢？&lt;br /&gt;
/src/content.js&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;html 重新載入&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;handleHTML: function(path) {

                this.document.location.reload();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
頁面變動的部份其實很簡單，只要頁面檔案有變動，就直接reload page。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;javascript 載入&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;handleJS: function(path, options) {
// 省略
            if (script.src &amp;amp;&amp;amp; this.equals(script.src, path)) {
                this.reloadScript(script);
                reloaded++;
            }
// 省略

        return reloaded;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;css 載入&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;handleCSS: function(path, options) {

        var links = this.document.querySelectorAll('link[rel="stylesheet"]');

            if (this.equals(link.href, path)) {
                reloaded += this.reattachStylesheetLink(link);
            } 
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
可以看到是讀取script, style 節點，取得src 資料之後進行比對，在做重新載入的動作，可以得知只要任何一個.js 檔案變動之後，就會直接將script 的資料重新載入執行。&lt;br /&gt;
&lt;br /&gt;
另外比較值得一提，css部份，為了重新載入不要有畫面一閃的問題出現，因此會先clone style&amp;nbsp;節點，在真正得到新的資料之後，再將利用reattachStylesheetLink這個方法將檔案重新載入，如此解決掉畫面閃爍的問題。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Image 載入&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;    handleImages: function(path, options) {
        var reloaded = 0;


        var stylesheets = this.document.styleSheets;
        var imgs = this.document.images;
        var expando = this.generateExpando();
        for (var i = 0; i &amp;lt; imgs.length; i++) {
            var img = imgs[i];
            if (this.equals(img.src, path)) {
                img.src = this.generateNextUrl(img.src, expando);
                reloaded++;
            }
        }
        var src;
        imgs = this.document.querySelectorAll('[style*=background]');
        for (i = 0; i &amp;lt; imgs.length; i++) {
            img = imgs[i];
            if (!img.style.backgroundImage) {
                continue;
            }
            src = this.extractURL(img.style.backgroundImage);
            if (src &amp;amp;&amp;amp; this.equals(src, path)) {
                img.style.backgroundImage = 'url(' + this.generateNextUrl(src, expando) + ')';
                reloaded++;
            }
        }

        imgs = this.document.querySelectorAll('[style*=border]');
        for (i = 0; i &amp;lt; imgs.length; i++) {
            img = imgs[i];
            if (!img.style.borderImage) {
                continue;
            }
            src = this.extractURL(img.style.borderImage);
            if (src &amp;amp;&amp;amp; this.equals(src, path)) {
                img.style.borderImage = 'url(' + this.generateNextUrl(src, expando) + ')';
                reloaded++;
            }
        }

        for (i = 0; i &amp;lt; stylesheets.length; i++) {
            reloaded += this.reloadStylesheetImages(stylesheets[i], path, expando).length;
        }

        return reloaded;
    },
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Image 就分成幾個部份來實做重新載入&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;css重新載入之後，會讀取相關css image&lt;/li&gt;
&lt;li&gt;img 節點，路徑比對之後，重新載入影像&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
事實上其他瀏覽器外掛，也是載入javascript 的方式來執行。如果直接自行載入javascript ，就可以免除掉各個瀏覽器安裝外掛的問題發生。只要瀏覽器支援websocket 就可以直接執行。&lt;br /&gt;
&lt;br /&gt;
從原始碼來看，其實livereload 在前端(javascript )做了許多小地方調整，例如為了保證載入的檔案不會有cache 問題，因此加載的uri 都會加上一組亂數，在頁面重新讀取也考慮到css, javascript 的問題等。&lt;br /&gt;
&lt;br /&gt;
目前比較可惜的是IE無法支援websocket，似乎可以使用socket.io 替換掉 &amp;nbsp;websocket，如此就可以直接跨瀏覽器支援了，但是目前沒有這個版本！殘念（有人想要一起寫嗎？livereload rewrite）&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-3123758964059916778?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=wNbZyTz8Tz0:Eo325p3ghSs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=wNbZyTz8Tz0:Eo325p3ghSs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=wNbZyTz8Tz0:Eo325p3ghSs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T04:28:26.472-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] livereload 安裝及使用 (linux). livereload install and tutorial</title><link>http://clonn.blogspot.com/2011/09/livereload-linux.html</link><category>js</category><category>javascript</category><category>plug</category><category>linux</category><category>快快樂樂教學系列</category><category>php</category><category>Google</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Sat, 24 Sep 2011 05:10:07 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-5446110883971637906</guid><description>&lt;a href="https://github.com/mockko/livereload" target="_blank"&gt;livereload&lt;/a&gt; 就跟名字一樣，『立即重新讀取』，主要用途為當編輯檔案修改後，會讓監聽頁面自動重新讀取。這樣子好處在於網站開發者不需要一直重新執行瀏覽器、編輯器切換，按下F5 重新讀取頁面等繁雜的手續。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
本篇文章將講解livereload ，快速導覽！&lt;br /&gt;
&lt;a href="http://clonn.blogspot.com/2011/09/livereload-livereload-project-analysis.html" target="_blank"&gt;livereload 原理說明請參考！&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;安裝&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
需要先安裝&lt;b&gt;ruby, gem&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://www.christopherirish.com/2010/08/25/how-to-install-rvm-on-ubuntu-10-04/" target="_blank"&gt;參考ruby, rvm, gem 安裝文章&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;sudo gem install livereload
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-0cWKMST0mIY/Tn1GBQhGzdI/AAAAAAAAN64/NlEITOqMFlw/s1600/20110924_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="534" src="http://4.bp.blogspot.com/-0cWKMST0mIY/Tn1GBQhGzdI/AAAAAAAAN64/NlEITOqMFlw/s640/20110924_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;使用&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
在需要監控的資料夾底下輸入&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;livereload
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/--ad4_QmGw6E/Tn1Gubt6nfI/AAAAAAAAN68/ERwy6GHjnIg/s1600/20110924_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="142" src="http://4.bp.blogspot.com/--ad4_QmGw6E/Tn1Gubt6nfI/AAAAAAAAN68/ERwy6GHjnIg/s640/20110924_3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
完成伺服端的操控。&lt;br /&gt;
&lt;br /&gt;
接著開啟chrome 瀏覽器，安裝&lt;a href="https://chrome.google.com/webstore/detail/jnihajbhpnppcggbcgedagnkighmdlei" target="_blank"&gt;livereload extension&lt;/a&gt;，&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-e_KF_P9j-_Y/Tn1HRxqIgEI/AAAAAAAAN7A/n4Ebaoqm_BY/s1600/20110924_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="214" src="http://2.bp.blogspot.com/-e_KF_P9j-_Y/Tn1HRxqIgEI/AAAAAAAAN7A/n4Ebaoqm_BY/s640/20110924_4.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
會看到瀏覽器右上角多一個圖示&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-8YH13e5DyIY/Tn1e_K3hzCI/AAAAAAAAN7I/AlVaR6bB3HQ/s1600/20110924_6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-8YH13e5DyIY/Tn1e_K3hzCI/AAAAAAAAN7I/AlVaR6bB3HQ/s1600/20110924_6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
接著對著按鈕按下滑鼠左鍵，&lt;b&gt;選項&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-yg1TqtrodWI/Tn1XvfM4zGI/AAAAAAAAN7E/fs-bjHrYiW4/s1600/20110924_5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-yg1TqtrodWI/Tn1XvfM4zGI/AAAAAAAAN7E/fs-bjHrYiW4/s320/20110924_5.jpg" width="275" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
輸入&lt;b&gt;IP&lt;/b&gt;，或者監聽的&lt;b&gt;Domain name&lt;/b&gt;，按下按鈕之後，就開始監聽&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/--2c2KiiEijg/Tn1kyneJT8I/AAAAAAAAN7M/08KbQ_P4mLQ/s1600/20110924_7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--2c2KiiEijg/Tn1kyneJT8I/AAAAAAAAN7M/08KbQ_P4mLQ/s1600/20110924_7.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-HcPGhCwG5TY/Tn1lDezZZ2I/AAAAAAAAN7Q/TeXyeiuglDE/s1600/20110924_8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="62" src="http://1.bp.blogspot.com/-HcPGhCwG5TY/Tn1lDezZZ2I/AAAAAAAAN7Q/TeXyeiuglDE/s640/20110924_8.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
網站就開始會自行進行頁面更新。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;結語&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
livereload 可以替網站開發者帶來很多好處，雖然只有減少開發者重新讀取頁面的時間，不過對於重複動作來說其實縮短很多，只需要專注於程式的開發，如果以缺點來說的話，應該就是會發現，需要兩顆螢幕才夠使用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-5446110883971637906?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=6gG_cft2bQ0:UxoGIbQ_ePk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=6gG_cft2bQ0:UxoGIbQ_ePk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=6gG_cft2bQ0:UxoGIbQ_ePk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T05:10:07.338-07:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-0cWKMST0mIY/Tn1GBQhGzdI/AAAAAAAAN64/NlEITOqMFlw/s72-c/20110924_2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[筆記] nodeJS VM module使用方法</title><link>http://clonn.blogspot.com/2011/09/nodejs-vm-module.html</link><category>javascript</category><category>api</category><category>node.js</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 21 Sep 2011 05:57:18 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-1071653756604983413</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s1600/nodejs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="109" src="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s320/nodejs.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
在&lt;a href="http://clonn.blogspot.com/2011/06/nodejscomet.html" target="_blank"&gt;node &lt;/a&gt;裡面通常比較少寫到怎麼使用&lt;a href="http://nodejs.org/docs/v0.4.12/api/vm.html" target="_blank"&gt;vm module&lt;/a&gt;，今天看了這則&lt;a href="http://groups.google.com/group/nodejs/browse_thread/thread/c45c7174baa0aab5" target="_blank"&gt;require() files that do not use module structure&lt;/a&gt;，才曉得原來&lt;a href="http://clonn.blogspot.com/2011/09/nodejs-vm-module.html" target="_blank"&gt;vm 可以這樣子使用&lt;/a&gt;。可以參考一下&lt;a href="https://github.com/baudehlo/Haraka/blob/master/plugins.js" target="_blank"&gt;source code&lt;/a&gt; ，裡面的程式就是實際vm 運作的方式。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;時機&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;官方解說&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;JavaScript code can be compiled and run immediately or compiled, saved, and run later.
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
當我們需要執行一段程式 ，但是又不想寫成module 的模式（使用require），這個時候可以採取vm 來執行片段程式，簡單來說可以達到兩個目的：&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;部份程式片段抽離。&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;不使用全域變數污染環境。&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example.js&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var vm = require('vm');

globalVar = 0;

var script = vm.createScript('globalVar += 1', 'myfile.vm');

for (var i = 0; i &amp;lt; 1000 ; i += 1) {
  script.runInThisContext();
}

console.log(globalVar);
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
程式碼產生之後，使用runInThisContext，重複執行1000次之前產生的程式，實際得到的結果為：&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Sx8CBcwEEes/TnnLHDgm4GI/AAAAAAAAN6w/nlNnqf9GJIU/s1600/20110921_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="94" src="http://4.bp.blogspot.com/-Sx8CBcwEEes/TnnLHDgm4GI/AAAAAAAAN6w/nlNnqf9GJIU/s640/20110921_1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
範例中得知，其實vm 的執行方式類似於javascript eval，雖然前端是不喜歡這種eval （evil）作法，不過對於後端來說，似乎是一種將程式分離的方法之一。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;進階&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
如果想要從外部寫檔案，又不想要使用require，那該怎麼做呢？比較好得選擇可以採取&lt;a href="http://nodejs.org/docs/v0.4.12/api/fs.html#file_System" target="_blank"&gt;file system&lt;/a&gt;，直接將檔案讀取回來之後，再使用一個參數下去接收，比較理想的function 在範例裡面來看，推薦使用&lt;a href="http://nodejs.org/docs/v0.4.12/api/vm.html#vm.runInNewContext" target="_blank"&gt;vm.runInNewContext()&lt;/a&gt;，實際來個範例。&lt;br /&gt;
&lt;br /&gt;
testVm.js，要抽離的javascript&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;count += 200;
k += 100;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
vm.js&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var vm = require('vm'),
    fs = require('fs'),
    sandbox = {
        id    : '123',
        count : 0,
        k     : 0
    },
    jsCode;

jsCode = fs.readFileSync('./testVm.js');

vm.runInNewContext(jsCode, sandbox, 'myfile.vm');

console.dir(sandbox);
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
實際結果&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-r1JDj6vb2uA/TnnZ00QuNfI/AAAAAAAAN60/oRGgb-LFurE/s1600/20110921_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="84" src="http://4.bp.blogspot.com/-r1JDj6vb2uA/TnnZ00QuNfI/AAAAAAAAN60/oRGgb-LFurE/s640/20110921_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
將需要的變數全部包裝於sanbox，讀取程式之後，參數會存回sanbox中，就可以不用使用全域變數(Global variable)，如此可以達到將&lt;b&gt;程式抽離，變數封裝&lt;/b&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
之前還真沒有碰過&lt;a href="http://clonn.blogspot.com/2011/09/nodejs-vm-module.html" target="_blank"&gt;vm&lt;/a&gt;，只知道node 裡面有這個模組，實際到底要怎麼使用卻不太清楚，經過討論串提出之後，配合著實例重新閱讀API，就可以明白到底VM的產生是為了什麼，要怎麼去使用這個模組，也許大家會有更好得用法，歡迎提出！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;[工商服務]&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
nodeJS 華文資料需要&lt;b&gt;你&lt;/b&gt;的支持，希望能夠聽到你的回應及分享，歡迎加入。&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wiki.nodejs.tw/" target="_blank"&gt;NodeJS Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.facebook.com/NodeJS.tw" target="_blank"&gt;NodeJS Taiwan 粉絲頁&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.facebook.com/groups/node.js.tw/" target="_blank"&gt;NodeJS Taiwan 社團&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-1071653756604983413?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=6M7cZIiD97M:pB5qEKgQpQ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=6M7cZIiD97M:pB5qEKgQpQ0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=6M7cZIiD97M:pB5qEKgQpQ0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T05:57:18.685-07:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s72-c/nodejs.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Document.write 塞入script 會如何？</title><link>http://clonn.blogspot.com/2011/09/documentwrite-script.html</link><category>javascript</category><category>Black and white to write</category><category>html</category><category>document</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 13 Sep 2011 07:31:37 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-6650714509826526937</guid><description>今天看到一則&lt;a href="http://www.plurk.com/p/dyo0kr" target="_blank"&gt;噗浪討論串&lt;/a&gt;，感覺很有趣，便花點時間研究一下這個課題，問題如果使用document.write塞入script會有什麼優缺點？&lt;br /&gt;
&lt;br /&gt;
在實做上大部分都是使用非同步載入，主要都是為了讓頁面載入時間能夠重疊，感覺上讀取時間就會縮短，幾乎使用document.createElement('script')，塞入head當中，這樣子執行上就不會有阻塞的問題。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;如果頁面上是使用document.write？&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
這個問題還真的沒有研究過，稍微Google一下之後，發現有&lt;a  target="_blank" href="http://zh-tw.w3support.net/index.php?db=so&amp;amp;id=94141"&gt;一篇討論串解決心中的疑惑&lt;/a&gt;，不過還是隨手寫一下sample page藉由瀏覽器來驗證。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;測試1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;sample.html&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
&amp;lt;!--javascript--&amp;gt;
&amp;lt;script language="javascript" type="text/javascript"&amp;gt;
document.write("&amp;lt;script language='javascript' type='text/javascript' src='after.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
document.write("&amp;lt;script language='javascript' type='text/javascript' src='before.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
&amp;lt;/script&amp;gt; 
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;before.js&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;alert("Before");
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;after.js&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;alert("After");
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
為了讓容量上有些差異因此，使用&lt;a href="http://utf-8.jp/public/jjencode.html" target="_blank"&gt;javascript 混淆器&lt;/a&gt;，將after.js 內容調整為&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.___+$.__$+$.$$$$+$.__+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\\");"+"\"")())();
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
接著可以看到sample.html，程式內部先使用document.write載入，after.js，再載入before.js，先預期一下結果：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;非同步，先執行before.js，再執行after.js&lt;/li&gt;
&lt;li&gt;同步載入，執行after.js，再執行before.js&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結果1&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
結果看到，先執行after，再執行before ，因此可以判斷如果採用document.write，頁面的script 是會同步載入資料。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;測試2&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
接著測試看看，如果頁面上資料跟載入的頁面有相關性會是什麼情況呢？&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;sample.html&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;    document.write("&amp;lt;script language='javascript' type='text/javascript' src='after.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
    document.write("&amp;lt;script language='javascript' type='text/javascript' src='before.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
    document.write("&amp;lt;script language='javascript' type='text/javascript'&amp;gt;function during() { alert('during'); }&amp;lt;\x2Fscript&amp;gt;");
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
多寫入一個function callContent。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;before.js&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code style="font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace;"&gt;alert("Before");
&lt;/code&gt;during&lt;code style="font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace;"&gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
呼叫sample頁面上的during函式 ，如果正確的話，應該是before之後就會執行during&amp;nbsp;。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;after.js&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.___+$.__$+$.$$$$+$.__+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\\");"+"\"")())();

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
混淆碼，內容不變。&lt;br /&gt;
&lt;br /&gt;
依據上面的順序，預測輸出結果應該是after, before, during。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結果2&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
透過瀏覽器測試，發現during 執行時會顯示錯誤。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;測試3&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
修改一下，sample.html 順序&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;
    document.write("&amp;lt;script language='javascript' type='text/javascript' src='after.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
    document.write("&amp;lt;script language='javascript' type='text/javascript'&amp;gt;function during() { alert('during'); }&amp;lt;\x2Fscript&amp;gt;"); 
    document.write("&amp;lt;script language='javascript' type='text/javascript' src='before.js'&amp;gt;&amp;lt;\x2Fscript&amp;gt;");
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
其餘程式不變，測試之後發現，順序果然如預期after, before, during，正常執行。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/documentWrite/sample.html" target="_blank"&gt;線上測試頁面 online demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結論&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
使用document.write方式，確定可以使script節點同步載入，會等待資料載入結束後才會繼續執行後續程式，與javascript 載入有相同問題，必須要注意宣告先後順序，需要優先執行的函式盡量在最開始就宣告完畢，以避免錯誤發生。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-6650714509826526937?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=drmf-lkLvEU:IKr3b7TspPk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=drmf-lkLvEU:IKr3b7TspPk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=drmf-lkLvEU:IKr3b7TspPk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T07:31:37.914-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] Google API Oauth 2.0 教程範例</title><link>http://clonn.blogspot.com/2011/09/google-api-oauth-20.html</link><category>api</category><category>oauth2.0</category><category>Google</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Thu, 08 Sep 2011 02:47:57 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-7878221454514981363</guid><description>Oauth 2.0 開始需要事先註冊project。&lt;br /&gt;
&lt;a href="http://code.google.com/apis/console#access" target="_blank"&gt;http://code.google.com/apis/console#access&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-iAxFCGZ8m_A/TmiBqTqxUnI/AAAAAAAANyE/UHN11r5BSlo/s1600/20110908_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="487" src="http://1.bp.blogspot.com/-iAxFCGZ8m_A/TmiBqTqxUnI/AAAAAAAANyE/UHN11r5BSlo/s640/20110908_1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
專案開啟完之後，接著需要參考文件&lt;br /&gt;
&lt;a href="http://code.google.com/intl/zh-TW/apis/accounts/docs/OAuth2.html" target="_blank"&gt;http://code.google.com/intl/zh-TW/apis/accounts/docs/OAuth2.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
接著需要些基本的Sample code&lt;br /&gt;
&lt;a href="http://code.google.com/intl/zh-TW/apis/accounts/docs/OAuth2.html#ClientLibraries" target="_blank"&gt;http://code.google.com/intl/zh-TW/apis/accounts/docs/OAuth2.html#ClientLibraries&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-CjmTL37wWP4/TmiCT1HWuAI/AAAAAAAANyI/sCIoikgyW9M/s1600/20110908_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="190" src="http://1.bp.blogspot.com/-CjmTL37wWP4/TmiCT1HWuAI/AAAAAAAANyI/sCIoikgyW9M/s640/20110908_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
以PHP client 為例，需要修改&lt;b&gt; google-api-php-client/src/config.php&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;    // The application_name is included in the User-Agent HTTP header.
&lt;span class="Apple-style-span" style="color: red;"&gt;    'application_name' =&amp;gt; '',&lt;/span&gt;

    // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
    &lt;span class="Apple-style-span" style="color: red;"&gt;'oauth2_client_id' =&amp;gt; '',
    'oauth2_client_secret' =&amp;gt; '',
    'oauth2_redirect_uri' =&amp;gt; '',
&lt;/span&gt;
    // The developer key, you get this at https://code.google.com/apis/console
    &lt;span class="Apple-style-span" style="color: red;"&gt;'developer_key' =&amp;gt; '',&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
這些資訊都必須填入，注意！&lt;span class="Apple-style-span" style="background-color: #eeeeee; color: red; font-family: monospace; font-size: 12px; line-height: 14px; white-space: pre;"&gt;oauth2_redirect_uri&lt;/span&gt;必須和project 填寫資訊相同。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;相關&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
在找相關資訊的時候也找到這個不錯的文章介紹&lt;br /&gt;
&lt;a href="http://sudocode.net/article/430/get-a-users-google-email-address-via-oauth2-in-php/" target="_blank"&gt;http://sudocode.net/article/430/get-a-users-google-email-address-via-oauth2-in-php/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/gdata/oauth2.php" target="_blank"&gt;LIVE DEMO&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-VEOsyQBWJ4c/TmiInPq7rCI/AAAAAAAANyM/BlY5YASUIqs/s1600/20110908_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="106" src="http://2.bp.blogspot.com/-VEOsyQBWJ4c/TmiInPq7rCI/AAAAAAAANyM/BlY5YASUIqs/s400/20110908_3.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
要求使用者授權。&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-TFUwAUKpWlE/TmiJSCsdLlI/AAAAAAAANyU/i_zGD9c3e60/s1600/20110908_5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="325" src="http://1.bp.blogspot.com/-TFUwAUKpWlE/TmiJSCsdLlI/AAAAAAAANyU/i_zGD9c3e60/s400/20110908_5.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
取得所有聯絡人資訊&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Aeg-yy2ysFI/TmiMTbR2_wI/AAAAAAAANyY/ZSTdDa4hMUw/s1600/20110908_6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="297" src="http://4.bp.blogspot.com/-Aeg-yy2ysFI/TmiMTbR2_wI/AAAAAAAANyY/ZSTdDa4hMUw/s400/20110908_6.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;後記&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
發現網路上的資料大部分都以Oauth 1.0居多，2.0的資料十分少量，可能是因為Google api 目前Oauth 1.0, 2.0 並行授權的關係吧！筆記一下這些資料，希望下次進行撰寫API會有些幫助。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-7878221454514981363?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=tTMd5WUPlwI:-l7gtf36pt8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=tTMd5WUPlwI:-l7gtf36pt8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=tTMd5WUPlwI:-l7gtf36pt8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T02:47:57.061-07:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/-iAxFCGZ8m_A/TmiBqTqxUnI/AAAAAAAANyE/UHN11r5BSlo/s72-c/20110908_1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[教學] git submodule 移除，合併不同git</title><link>http://clonn.blogspot.com/2011/09/git-submodule-git.html</link><category>open social</category><category>Black and white to write</category><category>git</category><category>快快樂樂教學系列</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 07 Sep 2011 22:59:24 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-2211897510833426806</guid><description>Git submodule 移除的方法。找到相關資料，做一下筆記！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;假設要移除的Git submodule 名稱為foo！&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;修改.gitmodules檔案&lt;/i&gt;&lt;/b&gt;，將foo相關資訊行數刪除。&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;修改.git/config 檔案&lt;/i&gt;&lt;/b&gt;，將foo相關資訊行數刪除。&lt;/li&gt;
&lt;li&gt;git rm foo，把foo資料夾移除。&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
完成！&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;如果要從其他git 將資料合併怎麼做？&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;切換 git 目錄底下&lt;/li&gt;
&lt;li&gt;執行 &lt;b&gt;&lt;i&gt;git clone git://example.com &amp;nbsp;example&lt;/i&gt;&lt;/b&gt;，將資料複製下來&lt;/li&gt;
&lt;li&gt;接著進入exmaple目錄，將目錄底下的 &lt;b&gt;&lt;i&gt;.git , .gitignore移除&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
完成！&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #999999;"&gt;文章有寫得不詳盡之處，再麻煩底下留言以方便資料改進，感謝！&lt;/span&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-2211897510833426806?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=TMDF-ehz2yU:UVK2dZmr0fE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=TMDF-ehz2yU:UVK2dZmr0fE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=TMDF-ehz2yU:UVK2dZmr0fE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T22:59:24.840-07:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] XMLHttpRequest執行AJAX 跨網域存取</title><link>http://clonn.blogspot.com/2011/08/xmlhttprequestajax.html</link><category>javascript</category><category>nginx</category><category>php</category><category>html</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Mon, 29 Aug 2011 05:57:21 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-9172720519093468219</guid><description>跟大家在介紹&lt;a href="http://socket.io/" target="_blank"&gt;Socket.io &lt;/a&gt;的時候，意外發現居然Socket.io 可以執行跨網域的存取，為什麼？這個時候問題就已經埋下，挖掘之後發現！居然是平凡無奇的XMLHttpRequest，還有針對IE做的奇怪處理，到底是怎麼辦到的？&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;分析&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
W3C&amp;nbsp;提案&lt;a href="http://www.w3.org/TR/access-control/" target="_blank"&gt;Cross-Origin Resource Sharing&lt;/a&gt;(CORS)，這份文件裡面提到，可以透過文件Header 設定可存取網域限制，以及存取方法、時間等，限制的部份有幾個：&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;必須為http, https&lt;/li&gt;
&lt;li&gt;傳送資料方式為GET, POST&lt;/li&gt;
&lt;li&gt;資料格式為application/xml&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
透過剛才的&lt;a href="http://www.w3.org/TR/access-control/" target="_blank"&gt;CORS&lt;/a&gt;，發展出更高層級XMLHttpRequest，W3C裡面也有實現方式&lt;a href="http://www.w3.org/TR/XMLHttpRequest2/" target="_blank"&gt;XMLHttpRequest Level 2&lt;/a&gt;草案，裡面的這一段介紹:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;The XMLHttpRequest Level 2 specification enhances the XMLHttpRequest object with new features, such as cross-origin requests, progress events, and the handling of byte streams for both sending and receiving.
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
XMLHttpRequest Level 2，可以支援cross-domain 請求，這個部份符合我們的需求。與CORS結合之後，似乎就可以ajax 跨網域存取，感覺不賴。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;IE呢？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
IE8以上有類似XMLHttpRequest Level 2的物件，稱為&lt;a href="http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx" target="_blank"&gt;XDomainRequest&lt;/a&gt;，在&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx" target="_blank"&gt;XDomainRequest - Restrictions, Limitations and Workarounds&lt;/a&gt;這篇文章裡面仔細描述如何搭配CORS原則完成跨網域的實做。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;實做&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
準備請求網頁，header 就遵守CORS的規範編寫，範例為cross.php&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;?php
header("Access-Control-Allow-Origin: http://clonn.info");
echo "hello cross domain.";
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
Header 的部份宣告Access-Control-Allow-Origin，並且限制可存取網域為http://clonn.info，如果希望所有網站都可以存取可以使用"*"&lt;br /&gt;
&lt;br /&gt;
接著準備一個十分基本的html 網頁，裡面的Javascript 就是這場重頭戲。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;
function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

var request = createCORSRequest("get", "http://60.248.47.246/demo/crossDomain/cross.php");
if (request){
    request.onload = function(){
        alert(request.responseText);
    };
    request.send();
}

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
這邊會向cross.php頁面請求，主要的請求在createCORSRequest 裡面，要檢查瀏覽器是否支援XMLHttpRequest Level 2 ，可藉由檢查物件裡是否預設有withCredentials屬性做為判斷，IE的部份檢查是否有XDomainRequest object。&lt;br /&gt;
&lt;br /&gt;
藉由這個方法就能夠達到跨網域的存取。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;線上模擬&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://clonn.info/demo/crossDomain/simple.html" target="_blank"&gt;Live demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
請求的頁面，回應畫面如下&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-DRpYkH8Tm3c/TluGgXbywJI/AAAAAAAANxg/GBmDOiRhDN8/s1600/20110829_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="512" src="http://1.bp.blogspot.com/-DRpYkH8Tm3c/TluGgXbywJI/AAAAAAAANxg/GBmDOiRhDN8/s640/20110829_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
跨網域存取要求發送之後，會顯示網頁如下&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-qlIH1R1s10M/TluHBZopbQI/AAAAAAAANxk/8j5YZrS61jw/s1600/20110829_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="302" src="http://2.bp.blogspot.com/-qlIH1R1s10M/TluHBZopbQI/AAAAAAAANxk/8j5YZrS61jw/s640/20110829_3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
的確，我們做出跨網域請求，同時也將頁面的資料完成呈現，成功！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;後記&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
很多時候都是站在前人的肩膀上看世界，才發現自己如此的渺小，跨網域存取的方式之前只知道iframe 或者是使用flash，如果不考慮IE 7的話，實際上&lt;a href="http://clonn.blogspot.com/2011/08/xmlhttprequestajax.html" target="_blank"&gt;以CORS原則的Ajax 跨網域存取&lt;/a&gt;是個不錯的解決方案。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;參考資料&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/" target="_blank"&gt;http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/" target="_blank"&gt;http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-9172720519093468219?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=y2uvpVf6HWI:6t8BOGKrdYk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=y2uvpVf6HWI:6t8BOGKrdYk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=y2uvpVf6HWI:6t8BOGKrdYk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T05:57:21.049-07:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/-DRpYkH8Tm3c/TluGgXbywJI/AAAAAAAANxg/GBmDOiRhDN8/s72-c/20110829_2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] elementFromPoint() 模擬 Google feedback 效果</title><link>http://clonn.blogspot.com/2011/08/elementfrompoint-google-feedback.html</link><category>javascript</category><category>Google</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Fri, 26 Aug 2011 03:22:11 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-5630594145410285819</guid><description>最近很熱門的Google +，其中最讓自己感覺最深刻的部份就是feedback system，整個的回饋機制十分貼心，運作上也是十分流暢。不過最讓人好奇的地方就是，為什麼進入feedback system 之後，會發現更神奇的地方。

&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-lqo8obF98FI/Tk5A3zxv5EI/AAAAAAAANao/eNfIxlstxCY/s1600/20110819_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-lqo8obF98FI/Tk5A3zxv5EI/AAAAAAAANao/eNfIxlstxCY/s1600/20110819_4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
為何在最上層有個 iframe mask，可是當我滑鼠移動的時候卻可以取得底下的物件！？這到底是怎麼回事呢？&lt;br /&gt;
&lt;br /&gt;
經過幾番尋找之後，透過&lt;a href="http://about.me/flyworld" target="_blank"&gt;Flyworld&lt;/a&gt; 得知，原來可以使用&lt;a href="http://dev.w3.org/csswg/cssom-view/" target="_blank"&gt;elementFromPoint&lt;/a&gt; 的方式，利用滑鼠座標取得目前指到的元素(Element)。&lt;br /&gt;
&lt;br /&gt;
似乎看到了一點署光，可以試著用elementFromPoint 來取得目前的物件。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;作法：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;HTML&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;amp;lt;!--//many HTML element--&amp;amp;gt;
&amp;amp;lt;!--iframe is a mask.--&amp;amp;gt;
&amp;amp;lt;iframe id="mask" src="inner.html" style="border: 1px solid red; position: absolute; background: #000;width:100%; height: 100%;opacity: 0.5;filter:alpha(opacity=50);"&amp;amp;gt;&amp;amp;lt;/iframe&amp;amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
接著在HTML裡面的Javascript code ，建立一個getElement的方法，在滑鼠移動座標的同時，會將mask iframe 移開，再瞬間移動回來，回傳目前得知的元素(element)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Javascript&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;function getElement(e) {
    $("#mask").css("top", "-9999px");
    ele = document.elementFromPoint(e.clientX, e.clientY);
    $("#mask").css("top", "0");
    return ele;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
接著maks iframe裡面我們也要做些手腳，當滑鼠移動的同時，事件觸發主要還是在mask上面產生，因此mask 的頁面中只需要加上javascript code.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Mask ifram javascript&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;function eventHandle(e){
    e.cancelBubble=true;
    // this is the element from Top view.
    var elm = top.getElement(e);
    // do something  
}

document.onmousemove=eventHandle;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
如此完成Mask跟主要頁面的溝通，並且可以藉由滑鼠移動取得目前元素，感覺還蠻實用的。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;實例：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://clonn.info/demo/elementFromPoint/elementFromPoint.html" target="_blank"&gt;Live demo link&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
一開始進入頁面會是這樣子，灰色效果為Mask遮罩，底下元素全部都被覆蓋&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-vkBzHffORqo/TldTX-MtX2I/AAAAAAAANlI/hOiZaE8zk-I/s1600/20110826_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="307" src="http://2.bp.blogspot.com/-vkBzHffORqo/TldTX-MtX2I/AAAAAAAANlI/hOiZaE8zk-I/s640/20110826_2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
滑鼠移動之後，會出現物件黃色框框，乍看之下好像是在元素上加上border，實際上呢？&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-3_EZws1eHiU/TldTpQJePLI/AAAAAAAANlM/yoRBB6Mt6vo/s1600/20110826_3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="416" src="http://4.bp.blogspot.com/-3_EZws1eHiU/TldTpQJePLI/AAAAAAAANlM/yoRBB6Mt6vo/s640/20110826_3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
實際上是取得頁面物件後，將此元素的座標大小（寬高）重製一個放在在Mask iframe裡面&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-zsEJNgGuhYo/TldUIzVFI8I/AAAAAAAANlQ/56NjEe68ibo/s1600/20110826_4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="220" src="http://4.bp.blogspot.com/-zsEJNgGuhYo/TldUIzVFI8I/AAAAAAAANlQ/56NjEe68ibo/s640/20110826_4.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
完成隔著mask卻可以實際取得元素的方法！&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;後記：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
主要感謝協助的各位，提供這麼好用的方法，之前根本就不曉得elementFromPoint 這個方法，而且幾乎目前主流瀏覽器都支援，真是大大感動。&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-5630594145410285819?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=jKg6BquXpvU:4UtSWMW31Bw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=jKg6BquXpvU:4UtSWMW31Bw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=jKg6BquXpvU:4UtSWMW31Bw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T03:22:11.458-07:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-lqo8obF98FI/Tk5A3zxv5EI/AAAAAAAANao/eNfIxlstxCY/s72-c/20110819_4.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[教學] nginx 設定 virtual host.</title><link>http://clonn.blogspot.com/2011/08/nginx-virtual-host.html</link><category>node.js</category><category>nginx</category><category>ubuntu</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 03 Aug 2011 23:53:38 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-4927959775295707570</guid><description>很多時候會用到不同子域名(sub domain)，這邊講解如何使用nginx 設定不同網域名稱及設定成不同資料夾。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;設定&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
DNS server 設定好名稱之後，修改檔案default&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;sudo vim /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
假設目前要增加nodejs.clonn.info，資料夾為/usr/share/nginx/www/nodejs&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;#    其他設定資料&lt;/pre&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;server {
        listen 80;
        server_name &lt;span class="Apple-style-span" style="color: red;"&gt;nodejs.clonn.info&lt;/span&gt;;
        root &lt;span class="Apple-style-span" style="color: red;"&gt;/usr/share/nginx/www/nodejs&lt;/span&gt;;
        index index.html index.htm index.php;

        location / {
                try_files $uri $uri/ /index.html;
        }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;#     其他設定資料&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;實測&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
在/usr/share/nginx/www，/usr/share/nginx/www/nodejs各增加不同的index.html，測試一下結果，的確如我們所想像。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-bUWsyUTzBQM/TjpBDQVQ-oI/AAAAAAAANSk/LgmfAQx-InI/s1600/%25E5%259C%2596%25E7%2589%2587+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="http://3.bp.blogspot.com/-bUWsyUTzBQM/TjpBDQVQ-oI/AAAAAAAANSk/LgmfAQx-InI/s400/%25E5%259C%2596%25E7%2589%2587+2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
目前測試起來nginx和apache的設定方式雖然不大相同，不過能做到的功能大多可及，想要嘗試看看nginx的人可以一起來測試看看，另外歡迎加入&lt;a href="http://www.facebook.com/nodejs.tw"&gt;NodeJS&lt;/a&gt;的行列。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-4927959775295707570?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=N8pD5jXDQsk:ZmlwXDcI5us:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=N8pD5jXDQsk:ZmlwXDcI5us:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=N8pD5jXDQsk:ZmlwXDcI5us:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-03T23:53:38.255-07:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-bUWsyUTzBQM/TjpBDQVQ-oI/AAAAAAAANSk/LgmfAQx-InI/s72-c/%25E5%259C%2596%25E7%2589%2587+2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>分享的習慣造就了Google +</title><link>http://clonn.blogspot.com/2011/08/google.html</link><category>blogger</category><category>Black and white to write</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 02 Aug 2011 23:33:07 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-4792404368693361303</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-fK232i4eJmA/TjjqssJq_SI/AAAAAAAANRI/Rl79OLQliCw/s1600/Google-plus.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="http://4.bp.blogspot.com/-fK232i4eJmA/TjjqssJq_SI/AAAAAAAANRI/Rl79OLQliCw/s400/Google-plus.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
從2006年開始就進入到social network的時代，沈迷當中卻不知道為何而沈迷，當時最興盛的『&lt;a  target="_blank" href="http://www.wretch.cc/"&gt;無名小站&lt;/a&gt;』，每天生態就是看看好友動態，看看大家照片，分享照片，寫寫自己遊記分享心情故事，同時在底下與大家留言、討論、激戰，同時與『&lt;a  target="_blank" href="http://www.ptt.cc/index.html"&gt;PTT&lt;/a&gt;』新聞同步聯播，這就是當時最興盛的social network in Taiwan.&lt;br /&gt;
&lt;br /&gt;
之後網路上有了些變動，開始紅起來『&lt;a  target="_blank"href="http://twitter.com/"&gt;twitter&lt;/a&gt;』『&lt;a  target="_blank" href="http://plurk.com/"&gt;plurk&lt;/a&gt;』『&lt;a target="_blank" href="http://www.facebook.com/"&gt;facebook&lt;/a&gt;』...好多人開始進入微型網誌的時代，一開始進入網站之後大家還不瞭解，這些東西能夠幫你做什麼，而今天這些不能夠幫你做什麼的網站，卻一點一點的深入每個人的生活當中。&lt;br /&gt;
&lt;br /&gt;
2011年，&lt;a  target="_blank" href="http://plus.google.com/"&gt;Google +&lt;/a&gt;的崛起，為什麼Google +能夠真的快速崛起？個人認為這都是習慣的養成，一個新的服務形成，大家第一步會做些什麼？&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;註冊&lt;/li&gt;
&lt;li&gt;編輯個人資料&lt;/li&gt;
&lt;li&gt;隨處亂點&lt;/li&gt;
&lt;li&gt;在其他social website分享此訊息給我的好友&lt;/li&gt;
&lt;li&gt;分享資料給其他人&lt;/li&gt;
&lt;li&gt;加更多人為好友&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;為什麼會這樣子？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
可以從Social network歷史看出一點端倪，從一開始twitter，plurk來說，當時進入這個網站，能夠張貼些簡短的話，給大家看到，許多人還以為這只有白痴會做的事情，沒事情為什麼要讓大家知道你在碎碎念什麼。另外一個問題就是，你要碎碎念給誰聽啊？&lt;br /&gt;
&lt;br /&gt;
接著模式形成了，大家發現，咦！？一堆網友七嘴八舌，可以同時即時得到回饋的感覺還真不賴，每個人都有機會成為萬人注目的焦點，而其中主要的關鍵就是『好友』。&lt;br /&gt;
&lt;br /&gt;
沒錯！只要好友一多，分享的事情又能夠令人關注，就能夠成為這個小圈圈的王，哪怕只是雞毛蒜皮小事情。帶動了『分享』，『線上互動』的習慣開始生成。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;Google + 做了什麼？&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a target="_blank" href="http://plus.google.com/"&gt;Google +&lt;/a&gt; 在2011年這個已經被 Facebook，Twitter所河蟹的龐大網路世界中，大家已經習慣加入好友，而Google +帶來的就是簡便的介面，其他Social network所缺少的部份，Google + 做到的部份就是：&lt;br /&gt;
朋友分群&lt;br /&gt;
特定分享&lt;br /&gt;
群組關注&lt;br /&gt;
隨意分享&lt;br /&gt;
&lt;br /&gt;
這些點在其他Social network上雖然都有，但不是全部都有，而Google + 將這些缺少的部份整合了起來，也讓更多人能夠接受，簡單的介面，乾淨的版面，更是其他版面所沒有，另外一個優勢就是Google + 可以透過Chrome 結合更多extension做到更多事情。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Google + 做到其他Social network定位所缺少的部份，雖然並不是最好，但至少是個突破，也許Google +是另外一種工具也不一定，至少對筆者來說分群就是一種很棒的機制，對於不同分群分享不同話題，用著不同的概念來描述事情，都是一種不同的體驗。&lt;br /&gt;
&lt;br /&gt;
有興趣歡迎大家加入&lt;a  target="_blank" href="http://gplus.to/clonn"&gt;我的Google +&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-4792404368693361303?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=G_844qi9Hf0:gdKlfZVR1eY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=G_844qi9Hf0:gdKlfZVR1eY:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=G_844qi9Hf0:gdKlfZVR1eY:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T23:33:07.179-07:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-fK232i4eJmA/TjjqssJq_SI/AAAAAAAANRI/Rl79OLQliCw/s72-c/Google-plus.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] node.exe 利用child_process做些事情</title><link>http://clonn.blogspot.com/2011/08/nodeexe-childprocess.html</link><category>node.js</category><category>nmp</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 02 Aug 2011 23:34:55 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-2751672105072290033</guid><description>&lt;a href="http://blog.nodejs.org/2011/08/02/node-v0-5-3/"&gt;node v0.5.3&lt;/a&gt; 版本終於出現了，先看一下原文到底做了哪些更新。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;2011.08.01, Version 0.5.3 (unstable)

Fix crypto encryption/decryption with Base64. (SAWADA Tadashi)
#243 Add an optional length argument to Buffer.write() (koichik)
#657 convert nonbuffer data to string in fs.writeFile/Sync (Daniel Pihlström)
Add process.features, remove process.useUV (Ben Noordhuis)
#324 Fix crypto hmac to accept binary keys + add test cases from rfc 2202 and 4231 (Stefan Bühler)
Add Socket::bytesRead, Socket::bytesWritten (Alexander Uvarov)
#572 Don’t print result of –eval in CLI (Ben Noordhuis)
#1223 Fix http.ClientRequest crashes if end() was called twice (koichik)
#1383 Emit ‘close’ after all connections have closed (Felix Geisendörfer)
Add sprintf-like util.format() function (Ben Noordhuis)
Add support for TLS SNI (Fedor Indutny)
New http agent implementation. Off by default the command line flag --use-http2 will enable it. make test-http2 will run the tests for the new implementation. (Mikeal Rogers)
Revert AMD compatibility. (isaacs)
Windows: improvements, child_process support.
Remove pkg-config file.
Fix startup time regressions.
doc improvements
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
這次更新主要的幾個重點在於，windows用戶來說最大的更動開始支援&lt;a href="http://nodejs.org/docs/v0.5.3/api/child_processes.html"&gt;child_process&lt;/a&gt;，node能夠支援child_process之後，就可以做很多&lt;strike&gt;（壞）&lt;/strike&gt;事情。&lt;br /&gt;
&lt;br /&gt;
模組(Modules)幾乎都可以支援（目前專案上所使用的模組都可以支援），雖然幾經測試之後筆者這邊的&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-npm.html"&gt;npm&lt;/a&gt;還是無法安裝成功。但是根據上篇文章的&lt;a href="http://clonn.blogspot.com/2011/07/nodejsmodulewindows-native-node.html"&gt;windows模組加載方式&lt;/a&gt;，皆可以正常執行。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;關於child_process&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
測試nodejs code，儲存為test.js&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var exec = require('child_process').exec,
    ls    = exec('dir');

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('exit', function (code) {
  console.log('child process exited with code ' + code);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
使用&lt;b&gt;node.exe v0.5.2以前&lt;/b&gt;，會造成錯誤無法執行&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-7u8R5ruNsqM/TjfP4MAZRBI/AAAAAAAANRA/DAtitT26vwM/s1600/%25E5%259C%2596%25E7%2589%2587+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://1.bp.blogspot.com/-7u8R5ruNsqM/TjfP4MAZRBI/AAAAAAAANRA/DAtitT26vwM/s400/%25E5%259C%2596%25E7%2589%2587+1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
使用&lt;b&gt;node.exe v0.5.3&lt;/b&gt;，可以正確執行cli指令&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-f7XbM_4TFOc/TjfQDfEl0EI/AAAAAAAANRE/iIHjRLvyh6s/s1600/%25E5%259C%2596%25E7%2589%2587+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" src="http://4.bp.blogspot.com/-f7XbM_4TFOc/TjfQDfEl0EI/AAAAAAAANRE/iIHjRLvyh6s/s400/%25E5%259C%2596%25E7%2589%2587+2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
child_process可以讓node.exe變成windows本地端服務的產出，這邊只是一個小小範例，當然各位的技術都比我強，說不定能產出些&lt;b&gt;java xxxx.java&lt;/b&gt;之類的指令做出些&lt;strike&gt;更奇怪&lt;/strike&gt;偉大的事情出來。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-2751672105072290033?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=zkcdbhWu6rU:m2mDXONft4I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=zkcdbhWu6rU:m2mDXONft4I:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=zkcdbhWu6rU:m2mDXONft4I:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T23:34:55.986-07:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/-7u8R5ruNsqM/TjfP4MAZRBI/AAAAAAAANRA/DAtitT26vwM/s72-c/%25E5%259C%2596%25E7%2589%2587+1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[教學] nodeJS直接module加載於windows native node</title><link>http://clonn.blogspot.com/2011/07/nodejsmodulewindows-native-node.html</link><category>npm</category><category>node.js</category><category>nginx</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Tue, 02 Aug 2011 23:33:54 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-615173413569595575</guid><description>&lt;a href="http://nodejs.org/" target="_blank"&gt;NodeJS&lt;/a&gt; 終於在0.5.1(unstable) 版本提供了Windows native supprot.，但是美中不足的部份就是childprocess的功能支援不完全，因此無法透過node.exe來&lt;a href="http://clonn.blogspot.com/2011/01/nodejs-npm.html" target="_blank"&gt;安裝npm&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
這樣子會造成很多遺憾，例如socket.io, redis, mysql等其他外掛模組都無法加載進來，本篇文章就是講解如何直接將這些外部module加載進來，不需要經過npm或者其他腳本語言安裝module。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;設定環境變數&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://nodejs.org/dist/v0.5.2/node.exe" target="_blank"&gt;下載node v0.5.2 native windows&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
將node.exe放置到自己的資料夾中（這邊預設為&lt;b&gt;c:\node&lt;/b&gt;）&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
設定windows 環境變數，設定其中一個變數為&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;NODE_PATH&lt;/span&gt;&lt;/b&gt;，值為&lt;b&gt;c:\node&lt;/b&gt;&amp;nbsp;(剛才設定的路徑)，另外變數&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;Path&lt;/b&gt;&lt;/span&gt;，在數值後面加上&lt;b&gt;;%NODE_PATH%&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-vC5e3HKfXD4/TjIdf8G1KEI/AAAAAAAANIU/M76rRBU9uLo/s1600/%25E5%259C%2596%25E7%2589%2587+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-vC5e3HKfXD4/TjIdf8G1KEI/AAAAAAAANIU/M76rRBU9uLo/s400/%25E5%259C%2596%25E7%2589%2587+1.jpg" width="363" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-kyr3I3OXmlw/TjIeFn2cJYI/AAAAAAAANIY/Z3_sYgbpl28/s1600/%25E5%259C%2596%25E7%2589%2587+2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-kyr3I3OXmlw/TjIeFn2cJYI/AAAAAAAANIY/Z3_sYgbpl28/s400/%25E5%259C%2596%25E7%2589%2587+2.jpg" width="382" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-xS9G3l2Nv50/TjIeGF1mX1I/AAAAAAAANIc/Poi2q9hIPH4/s1600/%25E5%259C%2596%25E7%2589%2587+3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-xS9G3l2Nv50/TjIeGF1mX1I/AAAAAAAANIc/Poi2q9hIPH4/s400/%25E5%259C%2596%25E7%2589%2587+3.jpg" width="385" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-6Cns2M6r4NU/TjIeGQjcs1I/AAAAAAAANIg/UuCWQFaJN24/s1600/%25E5%259C%2596%25E7%2589%2587+5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-6Cns2M6r4NU/TjIeGQjcs1I/AAAAAAAANIg/UuCWQFaJN24/s400/%25E5%259C%2596%25E7%2589%2587+5.jpg" width="390" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;加載外部模組&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
首先準備了一個&lt;a href="https://github.com/devinsba/nodejs-simplechat" target="_blank"&gt;simplechat 範例程式&lt;/a&gt;(這是從網路上挖出來的)，下載後解開，將資料夾重新命名為simplechat，應該會看到如下圖&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-0XmjOF9a1EU/TjImiZtdAEI/AAAAAAAANIk/Af75AgBrpnQ/s1600/%25E5%259C%2596%25E7%2589%2587+6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-0XmjOF9a1EU/TjImiZtdAEI/AAAAAAAANIk/Af75AgBrpnQ/s1600/%25E5%259C%2596%25E7%2589%2587+6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
接下來就是我們要使用的加載模組，這邊以socket.io為例。其實原則很簡單，就是將整包模組原始檔下載之後，再解壓縮到c:\node資料夾中，應該看到的檔名會是xxxxx-socket.io----，原本名稱會加上開發者名稱、版本號碼等，只要將資料夾重新命名為模組名稱，socket.io就行了。&lt;br /&gt;
&lt;br /&gt;
目前這邊所需要的東西有兩個&lt;a href="http://socket.io/" target="_blank"&gt;socket.io&lt;/a&gt;, &lt;a href="http://socket.io-client/" target="_blank"&gt;socket.io-client&lt;/a&gt;，一樣下載之後解壓縮重新命名&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-5hVejPZaD_E/TjIm5Oa0MJI/AAAAAAAANIo/8jhW-GbOdGs/s1600/%25E5%259C%2596%25E7%2589%2587+7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-5hVejPZaD_E/TjIm5Oa0MJI/AAAAAAAANIo/8jhW-GbOdGs/s1600/%25E5%259C%2596%25E7%2589%2587+7.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
接著我們進入commnad line執行一下看看是否如願執行。&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;c:\node&amp;gt;cd simplechat

c:\node\simplechat&amp;gt;..\node.exe realtime-chat.js
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-CGvWNn4X5hY/TjInh4lVt6I/AAAAAAAANIs/aaNIhXNY2vQ/s1600/%25E5%259C%2596%25E7%2589%2587+8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-CGvWNn4X5hY/TjInh4lVt6I/AAAAAAAANIs/aaNIhXNY2vQ/s1600/%25E5%259C%2596%25E7%2589%2587+8.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
結果好像出現了些錯誤，沒關係至少可以得到些提示，&lt;a href="https://github.com/mishoo/UglifyJS" target="_blank"&gt;uglify-js&lt;/a&gt;，一樣下載之後解壓縮重新命名成uglify-js，再重新執行看看。&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-ANNG3XvDaQw/TjIoYAX60xI/AAAAAAAANIw/UEbveVygZKQ/s1600/%25E5%259C%2596%25E7%2589%2587+9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ANNG3XvDaQw/TjIoYAX60xI/AAAAAAAANIw/UEbveVygZKQ/s1600/%25E5%259C%2596%25E7%2589%2587+9.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
還是一樣出現錯誤，一樣下載&lt;a href="https://github.com/mranney/node_redis" target="_blank"&gt;redis&lt;/a&gt;，接著應該不會有問題了，吧！？&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;執行&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
果然看到了一線署光，沒錯伺服器開始運作了，接著到瀏覽器試試看&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;localhost:3000
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-nCJDUWQocuA/TjIpu8MXDZI/AAAAAAAANI0/q0EeizMiFuY/s1600/%25E5%259C%2596%25E7%2589%2587+11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="522" src="http://4.bp.blogspot.com/-nCJDUWQocuA/TjIpu8MXDZI/AAAAAAAANI0/q0EeizMiFuY/s640/%25E5%259C%2596%25E7%2589%2587+11.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
沒錯，果然沒有任何問題，實在是太好了！外掛模組載入&lt;b&gt;成功&lt;/b&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
目前所使用版本為node.exe v0.5.2，這個版本之後開始可以支援windows環境變數，因此可以設定NODE_PATH之後，外掛模組會自己導向到這個環境變數尋找node.exe的路徑。雖然npm還是無法在windows上完整執行，不過已經算是一個很大的邁進，之後node將會走上什麼變化，大家就拭目以待。&lt;br /&gt;
&lt;br /&gt;
如果對於node抱持著一點點好奇，可以參考&lt;a href="http://clonn.blogspot.com/search?q=node" target="_blank"&gt;這邊相關文章&lt;/a&gt;，或者到&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wiki.nodejs.tw/" target="_blank"&gt;wiki.nodejs.tw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nodejs.tw/" target="_blank"&gt;nodejs.tw&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
期待聽到大家的回饋與想法，謝謝！&lt;br /&gt;
&lt;br /&gt;
本篇文章資料參考於：&lt;br /&gt;
&lt;div&gt;
&lt;a href="http://icewalker2g.wordpress.com/2011/07/23/node-js-on-windows-who-needs-npm/" target="_blank"&gt;Node.js on Windows: Who Needs NPM?&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-615173413569595575?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=D3Y_7mPIWBY:ABqe_TyZkDE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=D3Y_7mPIWBY:ABqe_TyZkDE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=D3Y_7mPIWBY:ABqe_TyZkDE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T23:33:54.239-07:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/-vC5e3HKfXD4/TjIdf8G1KEI/AAAAAAAANIU/M76rRBU9uLo/s72-c/%25E5%259C%2596%25E7%2589%2587+1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://nodejs.org/dist/v0.5.2/node.exe" length="10197336" type="application/octet-stream" /><media:content url="http://nodejs.org/dist/v0.5.2/node.exe" fileSize="10197336" type="application/octet-stream" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>NodeJS 終於在0.5.1(unstable) 版本提供了Windows native supprot.，但是美中不足的部份就是childprocess的功能支援不完全，因此無法透過node.exe來安裝npm。 這樣子會造成很多遺憾，例如socket.io, redis, mysql等其他外掛模組都無法加載進來，本篇文章就是講解如何直接將這些外部module加載進來，不需要經過npm或者其他腳本語言安裝module。 設定環境變數 下載node v0.5.2 native windows 將node</itunes:subtitle><itunes:author>noreply@blogger.com (Caesar Chi)</itunes:author><itunes:summary>NodeJS 終於在0.5.1(unstable) 版本提供了Windows native supprot.，但是美中不足的部份就是childprocess的功能支援不完全，因此無法透過node.exe來安裝npm。 這樣子會造成很多遺憾，例如socket.io, redis, mysql等其他外掛模組都無法加載進來，本篇文章就是講解如何直接將這些外部module加載進來，不需要經過npm或者其他腳本語言安裝module。 設定環境變數 下載node v0.5.2 native windows 將node.exe放置到自己的資料夾中（這邊預設為c:\node） 設定windows 環境變數，設定其中一個變數為NODE_PATH，值為c:\node&amp;nbsp;(剛才設定的路徑)，另外變數Path，在數值後面加上;%NODE_PATH% 加載外部模組 首先準備了一個simplechat 範例程式(這是從網路上挖出來的)，下載後解開，將資料夾重新命名為simplechat，應該會看到如下圖 接下來就是我們要使用的加載模組，這邊以socket.io為例。其實原則很簡單，就是將整包模組原始檔下載之後，再解壓縮到c:\node資料夾中，應該看到的檔名會是xxxxx-socket.io----，原本名稱會加上開發者名稱、版本號碼等，只要將資料夾重新命名為模組名稱，socket.io就行了。 目前這邊所需要的東西有兩個socket.io, socket.io-client，一樣下載之後解壓縮重新命名 接著我們進入commnad line執行一下看看是否如願執行。 c:\node&amp;gt;cd simplechat c:\node\simplechat&amp;gt;..\node.exe realtime-chat.js 結果好像出現了些錯誤，沒關係至少可以得到些提示，uglify-js，一樣下載之後解壓縮重新命名成uglify-js，再重新執行看看。 還是一樣出現錯誤，一樣下載redis，接著應該不會有問題了，吧！？ 執行 果然看到了一線署光，沒錯伺服器開始運作了，接著到瀏覽器試試看 localhost:3000 沒錯，果然沒有任何問題，實在是太好了！外掛模組載入成功。 結語 目前所使用版本為node.exe v0.5.2，這個版本之後開始可以支援windows環境變數，因此可以設定NODE_PATH之後，外掛模組會自己導向到這個環境變數尋找node.exe的路徑。雖然npm還是無法在windows上完整執行，不過已經算是一個很大的邁進，之後node將會走上什麼變化，大家就拭目以待。 如果對於node抱持著一點點好奇，可以參考這邊相關文章，或者到 wiki.nodejs.tw nodejs.tw 期待聽到大家的回饋與想法，謝謝！ 本篇文章資料參考於： Node.js on Windows: Who Needs NPM? </itunes:summary><itunes:keywords>npm, node.js, nginx</itunes:keywords></item><item><title>[分享] 解決網頁長文字破版現象</title><link>http://clonn.blogspot.com/2011/07/blog-post.html</link><category>javascript</category><category>html</category><category>css</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 27 Jul 2011 23:42:24 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-2878081364051742656</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-liw9Ym92RP0/TiY3fh1sOfI/AAAAAAAAMwA/DzraiKpIc_Q/s1600/html5-display.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-liw9Ym92RP0/TiY3fh1sOfI/AAAAAAAAMwA/DzraiKpIc_Q/s320/html5-display.png" width="318" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
網頁前端處理，最常碰到的事情就是『破版』，會因為樣式問題導致許多破版的狀況產生。這邊所提到的就是在&lt;span class="Apple-style-span" style="color: red;"&gt;『英數連續長字串』&lt;/span&gt;會發生的破版現象，並解說如何解決。&lt;br /&gt;
&lt;br /&gt;
首先讓我們看一下怎麼樣的情況會破版。&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-jvKda2p6S9k/TiYwANxmRSI/AAAAAAAAMvs/IhgJikukJGE/s1600/%25E5%259C%2596%25E7%2589%2587+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="56" src="http://4.bp.blogspot.com/-jvKda2p6S9k/TiYwANxmRSI/AAAAAAAAMvs/IhgJikukJGE/s320/%25E5%259C%2596%25E7%2589%2587+1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
前提，文字內容為英數連續長字串，在紅色div寬度限制下，會凸出來一大塊，這想必不是我們所樂見的，因此需要做些改進，這邊就介紹一下改進的方式。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;後端擷取字串&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
預先設定好可容許字元數量，當字串超過長度的時候，就採取擷取字串的方式，只讓部份內容顯示出來，其餘內容斷字，或者是隱藏。&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;?php
$str = "HelloEverybodyIamClonnThisIsATestWordWrap";
echo (mb_strlen($str) &amp;gt; 10) ? mb_substr($str, 0, 10, 'UTF-8') . "..." : $str;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-5CRoCFoqS2E/TiYxRrENEPI/AAAAAAAAMvw/LngjQ8zRQiE/s1600/%25E5%259C%2596%25E7%2589%2587+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="76" src="http://4.bp.blogspot.com/-5CRoCFoqS2E/TiYxRrENEPI/AAAAAAAAMvw/LngjQ8zRQiE/s320/%25E5%259C%2596%25E7%2589%2587+2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
範例限制字元長度為10，超過多餘的字顯示『...』，沒有超過就直接完整字串顯示，可前後比對顯示狀態。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;寬度限制，高度不限&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
當資料需要完成顯示，但是又要限制寬度的時候就可以採用CSS的其中一個樣式word-wrap，這邊採用的屬性為break-word，經過實測之後IE8, Chrome, Firefox , Safari, Opera都有很好的顯示效果，而文字內容會依照寬度限制，不斷地長高。&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;word-wrap: break-word;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Qgr78CfRtDE/TiYyk6TWN5I/AAAAAAAAMv0/-vm3rCNGfIc/s1600/%25E5%259C%2596%25E7%2589%2587+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="117" src="http://1.bp.blogspot.com/-Qgr78CfRtDE/TiYyk6TWN5I/AAAAAAAAMv0/-vm3rCNGfIc/s320/%25E5%259C%2596%25E7%2589%2587+3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;高度寬度皆限制顯示&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
這個時候也是會將部份資料隱蔽，與上個樣式描述差異在於，需要增加高度限制，設定超過時隱蔽(overflow屬性)&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;border: 1px solid #f00;
overflow: hidden;
height: 2.5em;
word-wrap: break-word;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-veyzqRdDLrY/TiYzv0MnVUI/AAAAAAAAMv4/N1Fb97k8KYw/s1600/%25E5%259C%2596%25E7%2589%2587+4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="84" src="http://2.bp.blogspot.com/-veyzqRdDLrY/TiYzv0MnVUI/AAAAAAAAMv4/N1Fb97k8KYw/s320/%25E5%259C%2596%25E7%2589%2587+4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
需要預設寬度和高度，又設定word-wrap之後，可以讓顯示侷限於div寬高當中，當然就會有某些資訊被隱藏，這其中還是有些取捨。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;text-overflow ellipsis;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
另外，text-overflow也可以用來取代word-wrap，過長之後會顯示...，唯一缺點是Firefox不支援。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://clonn.info/demo/word_wrap.php" target="_blank"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;範例連結&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結論&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
文字導致破版，目前來看還是有些取捨，並沒有一定的解法，勢必要看版面如何製作而定，當然可以使用javascript搭配hover效果來達到一些不錯的機制，這邊主要拋出一個常見的問題，並且提出目前我們所採取的作法有哪些，也希望聽到大家的聲音，看看每個人對於字串的作法會是怎麼處理。&lt;br /&gt;
&lt;br /&gt;
最後感謝同事提出來這個問題的解決方式，本人將資料重新編寫之後分享給各位！&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-2878081364051742656?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=_sUezzImqi0:-S5gIIhmkRw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=_sUezzImqi0:-S5gIIhmkRw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=_sUezzImqi0:-S5gIIhmkRw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T23:42:24.551-07:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-liw9Ym92RP0/TiY3fh1sOfI/AAAAAAAAMwA/DzraiKpIc_Q/s72-c/html5-display.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[分享] Javascript 計算字元長度, count string length by javascript</title><link>http://clonn.blogspot.com/2011/07/javascript-count-string-length-by.html</link><category>javascript</category><category>快快樂樂教學系列</category><category>html</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Thu, 14 Jul 2011 11:31:12 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-5828043988152499389</guid><description>&lt;br /&gt;
&lt;br /&gt;
今天遇到一個問題，很簡單的一個問題當有一個input box需要限制輸入長度，想當然很簡單在input 裡面加上一個maxlength屬性就可以完成限制，接著有另一個更大的問題，因為使用者從多個國家而來，我們需要接受，『中英輸入』的文字，那問題就出現了！&lt;br /&gt;
&lt;br /&gt;
像是&lt;a href="http://clonn.blogspot.com/2011/05/facebook-api-build-facebook-album-using.html" target="_blank"&gt;Facebook album&lt;/a&gt;就有這樣的問題存在，當我很開心的輸入了&lt;b&gt;一連串的國&lt;/b&gt;，直到不能輸入為止，再按下儲存，本以為&lt;b&gt;『國國國國國....國國國』&lt;/b&gt;相簿應該會存在，可惜...&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-2oyHbZOz9f4/Th8o-BIRS4I/AAAAAAAAMvk/6jJWVkresrQ/s1600/2011-07-15_013422.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-2oyHbZOz9f4/Th8o-BIRS4I/AAAAAAAAMvk/6jJWVkresrQ/s1600/2011-07-15_013422.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-r7Q8mhbsUtI/Th8pSIw3XAI/AAAAAAAAMvo/nV7Mkt8jhE8/s1600/2011-07-15_013525.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-r7Q8mhbsUtI/Th8pSIw3XAI/AAAAAAAAMvo/nV7Mkt8jhE8/s1600/2011-07-15_013525.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
實際上後面卻給我出現外星符號，而且我剛剛輸入的『國國國....』應該是目前數量2倍之多啊，為什麼會這樣子，搞了許久發現問題在於，在PHP認定字串長度是使用byte來計算，並不是採用字元為單位。&lt;br /&gt;
&lt;br /&gt;
前端頁面的算法，input box裡面，一個字為一個長度，在Javascript裡面也是，一個字就是一個長度，所以前端所看到的字串，丟到PHP之後又變成了第三度空間，內容都會被扭曲，尤其是尾巴的部份。&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;介紹將字串轉換為Byte 計算長度：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;"測試".length;
//　output : 2;

"ab".length;
// output : 2;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
這樣子的結果似乎不是我們要得，所以我們決定轉換另一個方向，將所有字元長度都先轉換為byte code，之後再計算字元長度。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;encodeURIComponent("測試");
// output "%E6%B8%AC%E8%A9%A6"

encodeURIComponent("ab");
// output "ab"
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
轉換成 byte之後，感覺上就可以開始計算了，&lt;b&gt;一個中文可以切成3個byte，1個byte會呈現%dd&lt;/b&gt;，就可以計算成一個中文字，將上面得到的字串長度再除&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;3&lt;/span&gt;&lt;/b&gt;就可以得知目前字長度。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var str = encodeURIComponent("測試");
console.log(str.length /3);
// output 6
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
乍看之下的確如此，但是&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;中英文&lt;/span&gt;&lt;/b&gt;的情況會是如何！？&lt;br /&gt;
剛剛的結果很明顯長度為&lt;b&gt;6&lt;/b&gt;，如果在中間穿插3個英文，會是什麼狀況？&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;var str = encodeURIComponent("a測b試c");
console.log(str.length /3);
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;// output: 7&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;// expect output: 6 + 3&lt;/span&gt;&lt;/b&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
實際輸出結果會是&lt;b&gt;7&lt;/b&gt;，不，這並不是我們想要的答案。既然知道byte code結構為&lt;b&gt;%dd&lt;/b&gt;，那我們就使用&lt;a href="http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" target="_blank"&gt;正規表示法&lt;/a&gt;，將需要的字元做取代，這樣所取得的字串長度就是實際需要的長度了。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;replace(/%[A-F\d]{2}/g, 'U')
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
接著拿剛才的實際狀況來測試，沒錯真的是我們所需要的結果，太好啦，大功告成。&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; font-family: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;var str = encodeURIComponent("測試");
str = str.replace(/%[A-F\d]{2}/g, 'U').length;
console.log(str);
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;// output: 6&lt;/span&gt;&lt;/b&gt;

var str = encodeURIComponent("a測b試c");
str = str.replace(/%[A-F\d]{2}/g, 'U').length;
console.log(str);
&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;// output: 9&lt;/span&gt;&lt;/b&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;後記：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" target="_blank"&gt;正規表示法&lt;/a&gt;果然夠威，夠強大，令所有文字都能夠臣服於它的腳下，實在是感受到無限的威力。這次也要感謝同事的協助才能順利找到這個答案，果然在大家身上都可以學到很多很多，所以別輕易相信&lt;b&gt;input maxlength這個屬性&lt;/b&gt;，&lt;b&gt;有時候眼前所看到的不一定為真，還是要實際測試過後才會清楚得到答案。&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
全文資料參考&lt;a href="http://stackoverflow.com/questions/2848462/count-bytes-in-textarea-using-javascript" target="_blank"&gt;Count bytes in textarea using javascript&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;b&gt;[工商服務]&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;a href="http://www.facebook.com/NodeJS.tw" target="_blank"&gt;NodeJS Taiwan&lt;/a&gt;期待更多人的支持，希望能夠聽到你的回應及分享。&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-5828043988152499389?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=W2HLQ3QQ9u4:4L3etSiPfOE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=W2HLQ3QQ9u4:4L3etSiPfOE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=W2HLQ3QQ9u4:4L3etSiPfOE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T11:31:12.192-07:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-2oyHbZOz9f4/Th8o-BIRS4I/AAAAAAAAMvk/6jJWVkresrQ/s72-c/2011-07-15_013422.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[新聞] NodeJS換新LOGO, NodeJS change a new logo.</title><link>http://clonn.blogspot.com/2011/07/nodejslogo-nodejs-change-new-logo.html</link><category>javascript</category><category>Black and white to write</category><category>node.js</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Mon, 11 Jul 2011 12:37:13 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-1201419605176158258</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s1600/nodejs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="109" src="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s320/nodejs.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
根據&lt;a href="http://nodejs.org/logos/" target="_blank"&gt;官方說明&lt;/a&gt;，NodeJS將朝向品牌，為了這個目標建立了新的LOGO，提高NodeJS的辨識度。&lt;br /&gt;
&lt;br /&gt;
針對這次新設計的LOGO邀請&lt;a href="http://www.chrisglass.com/" target="_blank"&gt;Chris Glass&lt;/a&gt;，為NodeJS設計新的LOGO，利用幾何圖學結構，來強調出Node，這個字樣，是活潑、有整體結構而且與彼此關係是緊密連結的。整個Node字樣，是基於拓普網路，將各個節點結合，形成緊密的網路型態。&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-WriGnqlrel4/ThtOXMJ7lyI/AAAAAAAAMvg/bCJu7CfEJAA/s1600/nodejs+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-WriGnqlrel4/ThtOXMJ7lyI/AAAAAAAAMvg/bCJu7CfEJAA/s1600/nodejs+%25281%2529.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
目前官方提供了：&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;四種不同顏色LOGO (EPS原始檔)&lt;/li&gt;
&lt;li&gt;桌布(&lt;span class="Apple-style-span" style="color: #eeeeee; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 19px; line-height: 28px;"&gt;&lt;a href="http://nodejs.org/logos/nodejs-1024x768.png" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;&lt;span class="desktops" style="font-size: 14px;"&gt;1024 x 768&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #eeeeee; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 19px; line-height: 28px;"&gt;&lt;span class="desktops" style="font-size: 14px;"&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://nodejs.org/logos/nodejs-1280x1024.png" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;1280 x 1024&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://nodejs.org/logos/nodejs-1440x900.png" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;1440 x 900&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://nodejs.org/logos/nodejs-1920x1200.png" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;1920 x 1200&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://nodejs.org/logos/nodejs-2560x1440.png" style="color: #8bc84b; text-decoration: none;" target="_blank"&gt;2560 x 1440&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
歡迎到&lt;a href="http://nodejs.org/logos/" target="_blank"&gt;NodeJS官方網站下載&lt;/a&gt;！多種樣式任君挑選。&lt;/div&gt;
&lt;div&gt;
最後讓我們再看一眼早期的LOGO...&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-BBVRihV2Mdc/TgXWNZ5nJaI/AAAAAAAAMfs/ZMvVNg8Cx7o/s1600/images.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="83" src="http://3.bp.blogspot.com/-BBVRihV2Mdc/TgXWNZ5nJaI/AAAAAAAAMfs/ZMvVNg8Cx7o/s320/images.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;[工商服務]&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;a href="http://www.facebook.com/NodeJS.tw" target="_blank"&gt;NodeJS Taiwan&lt;/a&gt;期待更多人的支持，希望能夠聽到你的回應及分享。&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-1201419605176158258?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=jL-d9kWinLI:1hhULE_2-Ao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=jL-d9kWinLI:1hhULE_2-Ao:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=jL-d9kWinLI:1hhULE_2-Ao:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T12:37:13.252-07:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/-cYYH7p934eo/ThtOFdAhz9I/AAAAAAAAMvc/CQiw0MV1lpc/s72-c/nodejs.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>[教學] CSSLint 檢查CSS 安裝及教學. How use CSSLint</title><link>http://clonn.blogspot.com/2011/07/csslint-css-how-use-csslint.html</link><category>npm</category><category>node.js</category><category>css</category><author>noreply@blogger.com (Caesar Chi)</author><pubDate>Wed, 06 Jul 2011 20:46:54 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-1042528968305757333.post-5486773426813257129</guid><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a target="_blank" href="http://3.bp.blogspot.com/-B6bVqboLeCw/ThPr1g2tCCI/AAAAAAAAMrM/2KCqEDWFsPc/s1600/%25E5%259C%2596%25E7%2589%2587+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://3.bp.blogspot.com/-B6bVqboLeCw/ThPr1g2tCCI/AAAAAAAAMrM/2KCqEDWFsPc/s320/%25E5%259C%2596%25E7%2589%2587+1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;前端工程總是需要很多的工具搭配和經驗，Javascript 已經有套很好用的檢驗工具JSLint，而今天介紹的就是使用CSSLint，CSSLint顧名思義，就是用來檢查CSS的項目，當然裡面有許多檢查的範圍，這篇文章就不一一贅述。&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;CSSLint最棒的地方就是目前有直接線上網站檢查機制。這套工具是由&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Nicole_Sullivan"&gt;Nicole Sullivan&lt;/a&gt;, &lt;a target="_blank" href="http://www.nczonline.net/about/"&gt;Nicholas C. Zakas&lt;/a&gt;共同製作的工具同時也是放置&lt;a target="_blank" href="https://github.com/stubbornella/csslint"&gt;Github Open source專案&lt;/a&gt;，CSSLint檢查工具是搭配&lt;a target="_blank" href="http://clonn.blogspot.com/2011/01/nodejs-npm.html"&gt;NPM&lt;/a&gt;所發展的CLI檢查工具，讓開發者編寫完CSS之後可以立即檢查，透過工具檢查機制，可以讓犯錯的機會降低，這就是工具發展的願景，更也是大家共同的目標。話不多說，直接看看怎麼使用CSSLint。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;CSSLint：&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://csslint.net/"&gt;線上網站&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="https://github.com/stubbornella/csslint"&gt;CSSLint Source code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;檢查標準官方有列出所有檢查機制&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;安裝以及執行CSSLint：&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;npm install csslint -global
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a target="_blank" href="http://1.bp.blogspot.com/-iUKPqEgEmh0/ThPtHFVezPI/AAAAAAAAMrQ/yoguV77y7XQ/s1600/%25E5%259C%2596%25E7%2589%2587+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-iUKPqEgEmh0/ThPtHFVezPI/AAAAAAAAMrQ/yoguV77y7XQ/s1600/%25E5%259C%2596%25E7%2589%2587+2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
當以上畫面完成之後，表示CSSLint已經透過npm安裝完成，如果出現錯誤訊息，請查詢是否為權限問題導致，可以試著加入sudo, chown來改變權限。&lt;br /&gt;
&lt;br /&gt;
官方給的指令介紹如下&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;csslint file-name.css folder/
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;檢查單一檔案&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;csslint test.css ./test/
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
例如我們要將test 資料夾裡面的css檔案全部掃描一次，直接可以下這個指令：&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;csslint *.css ./test/
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-xNVRCOjospc/ThPvp-3QJDI/AAAAAAAAMrU/QrjEzXwrZGI/s1600/%25E5%259C%2596%25E7%2589%2587+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-xNVRCOjospc/ThPvp-3QJDI/AAAAAAAAMrU/QrjEzXwrZGI/s1600/%25E5%259C%2596%25E7%2589%2587+3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
發現錯誤就會顯示項目，並且指出錯誤方向為何，如果檢查結果正確就會顯示No errors，恭喜你，編寫出一個漂亮的css檔案。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;檢查項目：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
如果不需要全部項目都檢查，可以自行加入所需要的檢查選項，假設我們只需要檢查id, box-model，可以輸入以下指令。&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;csslint --rules=ids,box-model test.css
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;檢查項目：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;adjoining-classes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;empty-rules&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;空規則&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;empty-rules&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;空規則&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;empty-rules&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;空規則&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;empty-rules&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;空規則&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="empty-rules: 空規則"&gt;empty-rules&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;display-property-grouping&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;floats&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;font-faces&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;font-sizes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ids&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;IDS&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ids&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;IDS&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ids&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;IDS&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ids&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;IDS&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ids: IDS"&gt;ids&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;qualified-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;合格的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;qualified-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;合格的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;qualified-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;合格的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;qualified-headings&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;合格的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="qualified-headings: 合格的小標題"&gt;qualified-headings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;unique-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;獨特的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;unique-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;獨特的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;unique-headings&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;獨特的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;unique-headings&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;獨特的小標題&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="unique-headings: 獨特的小標題"&gt;unique-headings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;zero-units&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;零單位&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;zero-units&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;零單位&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;zero-units&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;零單位&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;zero-units&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;零單位&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="zero-units: 零單位"&gt;zero-units&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;vendor-prefix&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;供應商的前綴&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;vendor-prefix&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;供應商的前綴&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;vendor-prefix&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;供應商的前綴&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;vendor-prefix&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;供應商的前綴&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="vendor-prefix: 供應商的前綴"&gt;vendor-prefix&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;gradients&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;梯度&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;gradients&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;梯度&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;gradients&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;梯度&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;gradients&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;梯度&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="gradients: 梯度"&gt;gradients&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;regex-selectors&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;正則表達式，選擇&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;regex-selectors&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;正則表達式，選擇&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;regex-selectors&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;正則表達式，選擇&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;regex-selectors&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;正則表達式，選擇&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="regex-selectors: 正則表達式，選擇"&gt;regex-selectors&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;box-model&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;盒模型&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;box-model&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;盒模型&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;box-model&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;盒模型&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;box-model&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;盒模型&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="box-model: 盒模型"&gt;box-model&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;進口&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;進口&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;進口&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;進口&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="import: 導入"&gt;import&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;ID&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="ID: ID"&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;important&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重要的&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;important&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重要的&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;important&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重要的&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;important&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重要的&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="important: 重要的"&gt;important&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;compatible-vendor-prefixes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;strong style="font-style: normal; font-weight: bold;"&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;&lt;span style="display: inline;" title="translating..."&gt;ID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #414141; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;code style="color: #0b8c8f; font-family: monospace; font-style: normal; font-weight: normal; line-height: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;duplicate-properties&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重複-屬性&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;duplicate-properties&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重複-屬性&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;duplicate-properties&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重複-屬性&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="&amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;translating...&amp;quot;&amp;gt;duplicate-properties&amp;lt;/span&amp;gt;: &amp;lt;span style=&amp;quot;display:inline&amp;quot; onmouseover=&amp;quot;translate(this)&amp;quot; title=&amp;quot;翻譯 ... ...&amp;quot;&amp;gt;重複-屬性&amp;lt;/span&amp;gt;"&gt;&lt;span style="display: inline;" title="duplicate-properties: 重複 - 屬性"&gt;duplicate-properties&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;至於每個項目&lt;a target="_blank" href="http://csslint.net/about.html"&gt;詳細內容說明，請參考官方網站&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
更改輸出格式：&lt;br /&gt;
目前可以支援xml的格式，輸出格式就像jslint xml的格式。&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;csslint --format=lint-xml test.css
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-gzJD-cRfdoM/ThUrT4pbHiI/AAAAAAAAMr8/IYD7sXt9KbE/s1600/%25E5%259C%2596%25E7%2589%2587+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://4.bp.blogspot.com/-gzJD-cRfdoM/ThUrT4pbHiI/AAAAAAAAMr8/IYD7sXt9KbE/s640/%25E5%259C%2596%25E7%2589%2587+2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #b45f06; font-size: x-large;"&gt;&lt;b&gt;結語：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
CSS是前端工程中一門很艱深的學問，例如要怎麼將CSS重新利用，或者如何將CSS架構彈性化，CSS命名方式，更不用說跨瀏覽器的問題解法，這些都屬於在前端開發中CSS會遇到的問題。&lt;br /&gt;
&lt;br /&gt;
對於這麼一個好用的工具，我們是樂意看見的，所以也很開心的分享給大家，畢竟寫出有品質的CSS對於後期維護和調整都是一件好事情，利用工具將能避免的錯誤降到最低，同時提供自己的生產力，這才是共同努力的目標。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;本文資料參考&lt;a target="_blank" href="http://www.nczonline.net/blog/2011/06/15/introducing-css-lint-2/"&gt;Introducing CSS Lint&lt;/a&gt;，在此特別註明。&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a target="_blank" href="http://www.facebook.com/NodeJS.tw" target="_blank"&gt;NodeJS Taiwan&lt;/a&gt;期待更多人的支持，希望能夠聽到你的回應及分享。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1042528968305757333-5486773426813257129?l=clonn.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/clonn?a=bVEaIxmhSZg:L_FeIznmuoI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/clonn?a=bVEaIxmhSZg:L_FeIznmuoI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/clonn?i=bVEaIxmhSZg:L_FeIznmuoI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T20:46:54.105-07:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/-B6bVqboLeCw/ThPr1g2tCCI/AAAAAAAAMrM/2KCqEDWFsPc/s72-c/%25E5%259C%2596%25E7%2589%2587+1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><media:rating>nonadult</media:rating><media:description type="plain">Clonn - Question about myself</media:description></channel></rss>

