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

<channel>
	<title>網絡暴民 Jacky&#039;s Blog &#187; programming</title>
	<atom:link href="http://jacky.seezone.net/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://jacky.seezone.net</link>
	<description></description>
	<lastBuildDate>Mon, 30 Jan 2012 17:45:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>網摘三 weekly</title>
		<link>http://jacky.seezone.net/2011/09/28/3605/</link>
		<comments>http://jacky.seezone.net/2011/09/28/3605/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 18:24:20 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[網摘]]></category>
		<category><![CDATA[網絡]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[bookmark]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[newsletter]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3605</guid>
		<description><![CDATA[最近訂了幾個 weekly 的 newsletter，都是關於 web 開發的，分別是： Javascript Weekly HTML5 Weekly Web Design Weekly 這些 newsletter 也其實就是一周網摘了，對於沒有太多時間看 rss 或跟 tweets 的人來說，這個每周精華很有用，能令你貼緊技術進展。也並不只是一堆連結，還附有一些介紹，分類上也有編排過，感覺用心。 Tags: bookmark, development, newsletter, programming, web]]></description>
			<content:encoded><![CDATA[	<p>最近訂了幾個 weekly 的 newsletter，都是關於 web 開發的，分別是：</p>

	<ul>
		<li><a href="http://javascriptweekly.com/">Javascript Weekly</a></li>
		<li><a href="http://html5weekly.com/">HTML5 Weekly</a></li>
		<li><a href="http://web-design-weekly.com/">Web Design Weekly</a></li>
	</ul>

	<p>這些 newsletter 也其實就是一周網摘了，對於沒有太多時間看 rss 或跟 tweets 的人來說，這個每周精華很有用，能令你貼緊技術進展。也並不只是一堆連結，還附有一些介紹，分類上也有編排過，感覺用心。</p>


	Tags:  <a href="http://jacky.seezone.net/tag/bookmark/" title="bookmark" rel="tag">bookmark</a>, <a href="http://jacky.seezone.net/tag/development/" title="development" rel="tag">development</a>, <a href="http://jacky.seezone.net/tag/newsletter/" title="newsletter" rel="tag">newsletter</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/web/" title="web" rel="tag">web</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/09/28/3605/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sass &amp; less</title>
		<link>http://jacky.seezone.net/2011/09/15/3567/</link>
		<comments>http://jacky.seezone.net/2011/09/15/3567/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 20:15:55 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[電腦]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[preprocessor]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3567</guid>
		<description><![CDATA[最近都有接觸到 SASS/SCSS 和 LESS 這兩隻 CSS Pre-processor，功能上都是大同小異的，都是用更「Programming」的語法，去處理 CSS。有 Variable、Nesting、Mixins、Inheritance 等等，都使 CSS Code 更簡單易處理，用過的必定愛不釋手。 雖說大同小異，但實作時仍然會有分別，這裏特別說說一些個人經驗。例如專案有用到其他的 CSS Framework 如 jquery-ui 時，想配合這些 CSS Pre-processor 用時，有時會索性將這些檔案直接導入，然後你就可以隨便 extend 這些 CSS Framework 的 class。以 SASS 為例，要首先將 jquery-ui 的 CSS 轉成 SCSS 檔，可用 sass-convert 工具： sass-convert --from css --to scss \ jquery-ui-1.8.2.custom.css &#62; _jquery_ui.scss 然後 import @import &#34;jquery_ui&#34; 在此以前，你寫一件新的元件要 jquery-ui themeable 的，就要寫類似這樣 [...]]]></description>
			<content:encoded><![CDATA[	<p>最近都有接觸到 <a href="http://sass-lang.com/"><span class="caps">SASS</span>/SCSS</a> 和 <a href="http://lesscss.org/"><span class="caps">LESS</span></a> 這兩隻 <span class="caps">CSS</span> Pre-processor，功能上都是大同小異的，都是用更「Programming」的語法，去處理 CSS。有 Variable、Nesting、Mixins、Inheritance 等等，都使 <span class="caps">CSS</span> Code 更簡單易處理，用過的必定愛不釋手。</p>

	<p>雖說大同小異，但實作時仍然會有分別，這裏特別說說一些個人經驗。例如專案有用到其他的 <span class="caps">CSS</span> Framework 如 <a href="http://jqueryui.com/themeroller/">jquery-ui</a> 時，想配合這些 <span class="caps">CSS</span> Pre-processor 用時，有時會索性將這些檔案直接導入，然後你就可以隨便 extend 這些 <span class="caps">CSS</span> Framework 的 class。以 <span class="caps">SASS</span> 為例，要首先將 jquery-ui 的 <span class="caps">CSS</span> 轉成 <span class="caps">SCSS</span> 檔，可用 sass-convert 工具：</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">sass-convert <span style="color: #660033;">--from</span> css <span style="color: #660033;">--to</span> scss \
  jquery-ui-1.8.2.custom.css <span style="color: #000000; font-weight: bold;">&gt;</span> _jquery_ui.scss</pre></div></div>


	<p>然後 import</p>


<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@import &quot;jquery_ui&quot;</span></pre></div></div>


	<p>在此以前，你寫一件新的元件要 jquery-ui themeable 的，就要寫類似這樣 class 滿天飛的 code:</p>


<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;banner-box ui-widget ui-corner-all&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;title ui-widget-header&quot;</span>&gt;</span>header<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content ui-widget-content&quot;</span>&gt;</span>
        Lorem ipsum dolor sit amet, consectetur 
        adipisicing elit, sed do eiusmod
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>


	<p>用了 <span class="caps">SCSS</span> 就可以這樣了：</p>


<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">.banner-box<span style="color: #00AA00;">&#123;</span>
    <span style="color: #a1a100;">@extend .ui-widget;</span>
    <span style="color: #a1a100;">@extend .ui-corner-all;</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span>
    .title<span style="color: #00AA00;">&#123;</span>
        <span style="color: #a1a100;">@extend .ui-widget-header;</span>
        <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span>
        <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#eee</span><span style="color: #00AA00;">;</span>
    <span style="color: #00AA00;">&#125;</span>
    .<span style="color: #000000; font-weight: bold;">content</span><span style="color: #00AA00;">&#123;</span>
        <span style="color: #a1a100;">@extend .ui-widget-content;</span>
        <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#333</span><span style="color: #00AA00;">;</span>
    <span style="color: #00AA00;">&#125;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>


	<p><span class="caps">HTML</span> 就可以變得清減了:</p>


<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;banner-box&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;title&quot;</span>&gt;</span>header<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content&quot;</span>&gt;</span>
        Lorem ipsum dolor sit amet, consectetur 
        adipisicing elit, sed do eiusmod
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>


	<p>對於那些非常不滿如 blueprint 那些 <span class="caps">CSS</span> Grid 搞到一地都是 presentational class 的人，應該會相當高興。</p>

	<p><span class="caps">LESS</span> 雖然沒有 <code>@extend</code>，但也可以將普通的 <span class="caps">CSS</span> 直接導入(改成 <code>.less</code>就可以了)，將那些 class 當是 mixins 使用：</p>


<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">.banner-box<span style="color: #00AA00;">&#123;</span>
    .ui-widget<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>


	<p>不過問題就在於，要成功導入 less 檔，裏面的 <span class="caps">CSS</span> Rule 必需正確，即是說不可以有 hack 出現。當然 <span class="caps">LESS</span> 也讓你可以 escape hack (用 ~ prefix)，但若你要導入人家一整個如 jquery-ui 般龐大的 file，難道要自己手動找這些 hack 出來 escape 嗎？這方面 <code>sass-convert</code> 就更勝一籌。</p>

	<p>而且 sass 之外，還有更強大的 <a href="http://compass-style.org">compass</a> ，已有很多預設配方，如 <a href="http://compass-style.org/help/tutorials/spriting/">spriting</a> 、 <a href="http://compass-style.org/reference/compass/layout/">layout</a> 等等，都能大大免去 developer 之憂。</p>


	Tags:  <a href="http://jacky.seezone.net/tag/css/" title="css" rel="tag">css</a>, <a href="http://jacky.seezone.net/tag/html/" title="html" rel="tag">html</a>, <a href="http://jacky.seezone.net/tag/less/" title="less" rel="tag">less</a>, <a href="http://jacky.seezone.net/tag/preprocessor/" title="preprocessor" rel="tag">preprocessor</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/sass/" title="sass" rel="tag">sass</a>, <a href="http://jacky.seezone.net/tag/web/" title="web" rel="tag">web</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/09/15/3567/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RSSGet 2.0</title>
		<link>http://jacky.seezone.net/2011/09/12/3560/</link>
		<comments>http://jacky.seezone.net/2011/09/12/3560/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 19:06:58 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[網絡]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rssget]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3560</guid>
		<description><![CDATA[最近將舊的 RSSGet (取全文) userscript 執過 將 source code 搬了過 github 以前的寫法有點累贅了，沒有充足使用較新的 API (如 querySelectorAll)，所以重新 Refactor 過，減減肥 因為 chrome 沒有 DOMAttrModified，所以用 timer 寫了加 marker 的部份 siteParser 部份改成簡單的 selector 描述就可以了 輔以 test case 其實之前都放棄支持 bloglines，就索性徹回了 (其實就沒幾個在用&#8230; bloglines 或這個 script 本身 :p) 最近版本，按此安裝。 Tags: github, javascript, programming, rssget, userscript]]></description>
			<content:encoded><![CDATA[	<p>最近將舊的 <span class="caps">RSSG</span>et (取全文) userscript 執過</p>

	<ul>
		<li>將 source code 搬了過 <a href="https://github.com/jackysee/rssget">github</a></li>
		<li>以前的寫法有點累贅了，沒有充足使用較新的 <span class="caps">API</span> (如 <code>querySelectorAll</code>)，所以重新 Refactor 過，減減肥</li>
		<li>因為 chrome 沒有 <code>DOMAttrModified</code>，所以用 timer 寫了加 marker 的部份</li>
		<li><code>siteParser</code> 部份改成簡單的 selector 描述就可以了</li>
		<li>輔以 test case</li>
		<li>其實之前都放棄支持 bloglines，就索性徹回了 (其實就沒幾個在用&#8230; bloglines 或這個 script 本身 :p)</li>
	</ul>

	<p>最近版本，<a href="https://github.com/jackysee/rssget/raw/master/rssget.user.js">按此</a>安裝。</p>
	Tags:  <a href="http://jacky.seezone.net/tag/github/" title="github" rel="tag">github</a>, <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/rssget/" title="rssget" rel="tag">rssget</a>, <a href="http://jacky.seezone.net/tag/userscript/" title="userscript" rel="tag">userscript</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/09/12/3560/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>試玩 Treesaver</title>
		<link>http://jacky.seezone.net/2011/05/05/3470/</link>
		<comments>http://jacky.seezone.net/2011/05/05/3470/#comments</comments>
		<pubDate>Thu, 05 May 2011 05:03:37 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[網絡]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[treesaver]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3470</guid>
		<description><![CDATA[這兩天試玩 Treesaver ，拿了幾頁 《讀書好》 來排，這是成果: 讀書好 Treesaver DEMO ，可用 Firefox4 或 Chrome12 試。 Treesaver 的原理是用 absolute position 的方法，幫你自動排好 column、figure (heading、圖片)。Treesaver 是 size-sensitive 的，會就著當前的 browser size，選用不同的 grid 做排版，而這些 grid、column 等都可以在一個 resources.html 和 styles.css 裏定義好。也可以製訂文件目錄，Treesaver 會自動讀取，連續閱讀。 理論上，寫內容的大概知道了一些 Treesaver 的規則，就可以直接寫 html，放上 server 就可以了，不用碰到 script 的部份。但如果想做特別排版，就要連帶修改 resources.html 和 styles.css ，這就比較難。 Treesaver 算是能簡單幫你做到一個 web 版的 magazine，效果算不錯，花點心力還可以支持 mobile device。不過中文網頁的硬傷，還是字型吧，看來看去都好醜。 Tags: css, [...]]]></description>
			<content:encoded><![CDATA[	<p>這兩天試玩 <a href="http://treesaverjs.com">Treesaver</a> ，拿了幾頁 <a href="http://www.books4you.com.hk">《讀書好》</a> 來排，這是成果: <a href="http://dl.dropbox.com/u/603382/b4u/cover.html">讀書好 Treesaver <span class="caps">DEMO</span></a> ，可用 Firefox4 或 Chrome12 試。</p>

	<p><a href="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-1.png"><img src="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-1.png" width="500" alt=""/></a><br />
<a href="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-2.png"><img src="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-2.png" width="500" alt=""/></a><br />
<a href="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-3.png"><img src="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-3.png" width="500" alt=""/></a><br />
<a href="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-4.png"><img src="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/b4u-4.png" width="500" alt=""/></a></p>

	<p>Treesaver 的原理是用 absolute position 的方法，幫你自動排好 column、figure (heading、圖片)。Treesaver 是 size-sensitive 的，會就著當前的 browser size，選用不同的 grid 做排版，而這些 grid、column 等都可以在一個 resources.html 和 styles.css 裏定義好。也可以製訂文件目錄，Treesaver 會自動讀取，連續閱讀。</p>

	<p>理論上，寫內容的大概知道了一些 Treesaver 的規則，就可以直接寫 html，放上 server 就可以了，不用碰到 script 的部份。但如果想做特別排版，就要連帶修改 resources.html 和 styles.css ，這就比較難。</p>

	<p>Treesaver 算是能簡單幫你做到一個 web 版的 magazine，效果算不錯，花點心力還可以支持 mobile device。不過中文網頁的硬傷，還是字型吧，看來看去都好醜。</p>
	Tags:  <a href="http://jacky.seezone.net/tag/css/" title="css" rel="tag">css</a>, <a href="http://jacky.seezone.net/tag/html/" title="html" rel="tag">html</a>, <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/layout/" title="layout" rel="tag">layout</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/treesaver/" title="treesaver" rel="tag">treesaver</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/05/05/3470/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google J/K userscript</title>
		<link>http://jacky.seezone.net/2011/04/05/3415/</link>
		<comments>http://jacky.seezone.net/2011/04/05/3415/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 02:59:18 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[網絡]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3415</guid>
		<description><![CDATA[Just wrote a simple userscript to j/k (up/down) through google search records, setting focus on link. Just that. Yes, similar script is available but I just like to have it the way I want. Google J/K [gist] Tags: google, greasemonkey, javascript, programming, search, userscript]]></description>
			<content:encoded><![CDATA[	<p>Just wrote a simple userscript to j/k (up/down) through google search records, setting focus on link. Just that. Yes, similar script is available but I just like to have it the way I want.</p>

 <script src="https://gist.github.com/901226.js?file=googlejk.user.js"></script>

	<p><a href="https://gist.github.com/901226">Google J/K [gist]</a></p>
	Tags:  <a href="http://jacky.seezone.net/tag/google/" title="google" rel="tag">google</a>, <a href="http://jacky.seezone.net/tag/greasemonkey/" title="greasemonkey" rel="tag">greasemonkey</a>, <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/search/" title="search" rel="tag">search</a>, <a href="http://jacky.seezone.net/tag/userscript/" title="userscript" rel="tag">userscript</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/04/05/3415/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一人一小步</title>
		<link>http://jacky.seezone.net/2011/04/04/3410/</link>
		<comments>http://jacky.seezone.net/2011/04/04/3410/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 08:52:51 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[社會]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[hk]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[society]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3410</guid>
		<description><![CDATA[有很多東西，都需要我們一人一小步。 例如，少用一點膠袋，自備購物袋，拒絕過度包裝。 例如，晚上關上不必要的燈、電器，節省電力，減少光害。 例如，每 星期一不吃肉 ，減少碳排放。 例如，拒看低俗無益的八卦雜誌，拒看公式電視劇。 例如，幫趁小商店， 拒絕大地產商生意 。 會需要大家一人一小步，是想每人都做一點點，以改變現有的習慣、風氣、市場。要這樣做，皆因這些固有東西，都已經成為一種架構，將每個人潛而默化了。架構太堅固，太難改變，只能靠人們自己自覺，一人一小步。 這一小步雖然看起來簡單，但行起來卻難。有人會說，這真的有用嗎？會有效嗎？還是只是宣傳技倆？有人會說，最終還不是只得一小撮人做，有甚麼用？有人會說，沒有配套怎行啊？有人會說，那麼多東西要一小步，其實還不是一大步？然後，我們自困於架構當中。 想起寫軟件也會越寫越像怪獸，架構越大越難動，這叫 Software Entropy。結果就是開發到一個地步，再沒有人碰得了，或者砍掉重練，或者被迫繼續使用。近年 (其實也十幾年) 提倡寫軟件應要敏捷 (Agile)，時時聆聽客戶需求，用工具簡化開發步驟，縮短開發循環，輕身上路。軟件不是一開始寫好藍圖建設，而是「成長」出來的，會隨環境需求而變化。 軟件特別在於「少有材料可有如此彈性，易於重建優化，又容易實現偉大的概念和結構。」1 然而現實社會的機器架構，卻沒有那麼容易，改變更要靠大家的恒心耐力。但另一面看，現在虛擬與現實漸融和，也將虛擬世界的可朔性帶進了現實，配合網絡發揮作用，改變不必由上而下，可以由下而上。 架構巨獸之下，人覺得小步無用，是可以理解的。不強求人人齊走小步，只想大家知道當大家有得選擇時，便要珍惜，小心明智地選擇。巨獸放著不管，最終還是會發臭崩壞的，這是熱力學第二定律。 1 見 編程之樂 Tags: agile, hk, programming, society]]></description>
			<content:encoded><![CDATA[	<p>有很多東西，都需要我們一人一小步。</p>

	<p>例如，少用一點膠袋，自備購物袋，拒絕過度包裝。</p>

	<p>例如，晚上關上不必要的燈、電器，節省電力，減少光害。</p>

	<p>例如，每 <a href="http://vegan.hk/meatfree/index.html">星期一不吃肉</a> ，減少碳排放。</p>

	<p>例如，拒看低俗無益的八卦雜誌，拒看公式電視劇。</p>

	<p>例如，幫趁小商店， <a href="http://yatming.wordpress.com/">拒絕大地產商生意</a> 。</p>

	<p>會需要大家一人一小步，是想每人都做一點點，以改變現有的習慣、風氣、市場。要這樣做，皆因這些固有東西，都已經成為一種架構，將每個人潛而默化了。架構太堅固，太難改變，只能靠人們自己自覺，一人一小步。</p>

	<p>這一小步雖然看起來簡單，但行起來卻難。有人會說，這真的有用嗎？會有效嗎？還是只是宣傳技倆？有人會說，最終還不是只得一小撮人做，有甚麼用？有人會說，沒有配套怎行啊？有人會說，那麼多東西要一小步，其實還不是一大步？然後，我們自困於架構當中。</p>

	<p>想起寫軟件也會越寫越像怪獸，架構越大越難動，這叫 Software Entropy。結果就是開發到一個地步，再沒有人碰得了，或者砍掉重練，或者被迫繼續使用。近年 (其實也十幾年) 提倡寫軟件應要敏捷 (Agile)，時時聆聽客戶需求，用工具簡化開發步驟，縮短開發循環，輕身上路。軟件不是一開始寫好藍圖建設，而是「成長」出來的，會隨環境需求而變化。</p>

	<p>軟件特別在於「少有材料可有如此彈性，易於重建優化，又容易實現偉大的概念和結構。」<sup class="footnote"><a href="#fn20422373764f33f9ff69ed9">1</a></sup> 然而現實社會的機器架構，卻沒有那麼容易，改變更要靠大家的恒心耐力。但另一面看，現在虛擬與現實漸融和，也將虛擬世界的可朔性帶進了現實，配合網絡發揮作用，改變不必由上而下，可以由下而上。</p>

	<p>架構巨獸之下，人覺得小步無用，是可以理解的。不強求人人齊走小步，只想大家知道當大家有得選擇時，便要珍惜，小心明智地選擇。巨獸放著不管，最終還是會發臭崩壞的，這是熱力學第二定律。</p>

	<p id="fn20422373764f33f9ff69ed9" class="footnote"><sup>1</sup> 見 <a href="http://jacky.seezone.net/2009/04/16/2458/">編程之樂</a></p>
	Tags:  <a href="http://jacky.seezone.net/tag/agile/" title="agile" rel="tag">agile</a>, <a href="http://jacky.seezone.net/tag/hk/" title="hk" rel="tag">hk</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/society/" title="society" rel="tag">society</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/04/04/3410/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Twitter Quick Links</title>
		<link>http://jacky.seezone.net/2011/03/24/3383/</link>
		<comments>http://jacky.seezone.net/2011/03/24/3383/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 03:36:00 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[網絡]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3383</guid>
		<description><![CDATA[Wrote a simple userscript that would allow keyboard freak like me to press 1-9 to open link of current tweet in a new background tab in Twitter. Twitter Quick Links [gist] Tags: greasemonkey, javascript, programming, userscript]]></description>
			<content:encoded><![CDATA[	<p>Wrote a simple userscript that would allow keyboard freak like me to press 1-9 to open link of current tweet in a new background tab in Twitter.</p>

	<p><script src="https://gist.github.com/884490.js?file=twitterquicklinks.user.js"></script></p>

	<p><a href="http://gist.github.com/884490">Twitter Quick Links [gist]</a></p>
	Tags:  <a href="http://jacky.seezone.net/tag/greasemonkey/" title="greasemonkey" rel="tag">greasemonkey</a>, <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/userscript/" title="userscript" rel="tag">userscript</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/03/24/3383/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yepnope + Modernizr</title>
		<link>http://jacky.seezone.net/2011/03/22/3367/</link>
		<comments>http://jacky.seezone.net/2011/03/22/3367/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 16:41:25 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[電腦]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3367</guid>
		<description><![CDATA[早前試了 Yepnope 做 script loading 加上 Modernizr 做 HTML5 feature detection，來為表格加上如 placeholder 的功能。用這個的好處是如果 browser 已支持該功能，就不用 load 相關的 javascript。 你可以選擇直接 include 這兩個 script，或者自己 build 一個 Modernizr 連 Yepnope 的檔。找你要用的 script，例如 inputPlaceholder 。然後，在需要的地方這樣寫: Modernizr.load&#40;&#123; test: Modernizr.input.placeholder, nope: &#91;'inputplaceholder.js'&#93;, callback: function&#40;&#41;&#123; inputPlaceholder&#40;document.getElementById&#40;&#34;top-search-box&#34;&#41;, '#333333'&#41;; &#125; &#125;&#41; 就這樣子。Modernizr 會偵察你的 browser 是否支援 placeholder 屬性，如果是 &#8216;nope&#8217; 的話，就會載入 inputplaceholder.js，再在成功載入後執後 callback。很簡單吧！ 當然這只是舉個例，如果只是要載入如 inputplaceholder.js 這小 [...]]]></description>
			<content:encoded><![CDATA[	<p>早前試了 <a href="http://yepnopejs.com/">Yepnope</a> 做 script loading 加上 <a href="http://www.modernizr.com/">Modernizr</a> 做 HTML5 feature detection，來為表格加上如 placeholder 的功能。用這個的好處是如果 browser 已支持該功能，就不用 load 相關的 javascript。</p>

	<p>你可以選擇直接 include 這兩個 script，或者自己 <a href="http://modernizr.github.com/Modernizr/2.0-beta/">build 一個</a> Modernizr 連 Yepnope 的檔。找你要用的 script，例如  <a href="http://github.com/NV/placeholder.js/">inputPlaceholder</a> 。然後，在需要的地方這樣寫:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">Modernizr.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
	test<span style="color: #339933;">:</span> Modernizr.<span style="color: #660066;">input</span>.<span style="color: #660066;">placeholder</span><span style="color: #339933;">,</span>
	nope<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'inputplaceholder.js'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
	callback<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		inputPlaceholder<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;top-search-box&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'#333333'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>


	<p>就這樣子。Modernizr 會偵察你的 browser 是否支援 placeholder 屬性，如果是 &#8216;nope&#8217; 的話，就會載入 inputplaceholder.js，再在成功載入後執後 callback。很簡單吧！</p>

	<p>當然這只是舉個例，如果只是要載入如 inputplaceholder.js 這小 script，用 Modernizr 配 Yepnope 分明是用牛刀殺雞 (用多於 5K 的 loader 去 load 1K 的 script)。但當要載入較大的 library 時，才值得用這些 loader。</p>

	<p>後話：其實這陣子推出了很多 js loader： <a href="http://labjs.com/"><span class="caps">LAB</span>js</a> 、 <a href="http://headjs.com/">HeadJS</a> 、 <a href="http://requirejs.org/">RequireJs</a> 、 <a href="http://stevesouders.com/controljs/">ControlJs</a> 、 <a href="http://github.com/chriso/load.js">load.js</a> &#8230; 身形功能大小不同，這裏有個 <a href="http://spreadsheets.google.com/lv?key=tDdcrv9wNQRCNCRCflWxhYQ">Comparison matrix</a> 可以參考一下。</p>
	Tags:  <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/library/" title="library" rel="tag">library</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/03/22/3367/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My attempt to IE6/7 select box width</title>
		<link>http://jacky.seezone.net/2011/03/14/3335/</link>
		<comments>http://jacky.seezone.net/2011/03/14/3335/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 08:31:17 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[電腦]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3335</guid>
		<description><![CDATA[In IE6/7, when you set the width of a &#60;select&#62; element, it will chop off the option text. It&#8217;s an age-old question but I would like to record my attempt to this problem: create an inline block to wrap the &#60;select&#62; up set width and height of the inline block the same as the original [...]]]></description>
			<content:encoded><![CDATA[	<p>In IE6/7, when you set the width of a &lt;select&gt; element, it will chop off the option text. It&#8217;s an age-old question but I would like to record my attempt to this problem:</p>

	<ul>
		<li>create an inline block to wrap the &lt;select&gt; up</li>
		<li>set width and height of the inline block the same as the original select</li>
		<li>set position &#8216;relative&#8217; for inline block</li>
		<li>set position &#8216;absolute&#8217; for &lt;select&gt;</li>
		<li>when mouse over, set &lt;select&gt; width as &#8216;auto&#8217;</li>
		<li>when mouse click, toggle a flag &#8216;clicked&#8217; (using $.data)</li>
		<li>when mouse out and flagged as &#8216;clicked&#8217;, reset &lt;select&gt; width</li>
		<li>when blur or change, reset &lt;select&gt; width</li>
	</ul>

	<p>The reason for wrapping an inline block is that when &lt;select&gt; set/reset width, it would not affect the layout of other elements.</p>

	<p>The &#8216;clicked&#8217; flag is used to indicate if the &lt;select&gt; is &#8216;expanded&#8217;. If it is, the mouseout event should not reset the width.</p>

	<p>Here is the code (and of course only effective in IE6/7):</p>

	<p><iframe style="width: 500px; height: 500px" src="http://jsfiddle.net/jackysee/4N6w8/2/embedded/"></iframe></p>


	Tags:  <a href="http://jacky.seezone.net/tag/ie/" title="ie" rel="tag">ie</a>, <a href="http://jacky.seezone.net/tag/javascript/" title="javascript" rel="tag">javascript</a>, <a href="http://jacky.seezone.net/tag/jquery/" title="jquery" rel="tag">jquery</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/ui/" title="ui" rel="tag">ui</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2011/03/14/3335/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>人月神話</title>
		<link>http://jacky.seezone.net/2010/09/02/3065/</link>
		<comments>http://jacky.seezone.net/2010/09/02/3065/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 09:08:36 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[書籍]]></category>
		<category><![CDATA[電腦]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=3065</guid>
		<description><![CDATA[成書至今 35 年的《The Mythical Man-month》 (人月神話)，至今讀來仍然不老，可見書對程式設計和軟件工程有透徹的了解，明白這一項工作的本質、涉及人事、流程等等，有什麼特質和局限，所以才能直擊要害，成為經典。 我們通常會說「這項目一共花了十個月的 man-month」，可是 Man-month 是一個神話，其估計永遠不準確。因為編寫程式不同耕田種菜，那些工作只要技巧上了手，工人們就可以獨立工作，所以要增加生產力，直接加人就可以了。可是編寫軟件卻不能這樣算，因為除了技巧，溝通也很重要。軟件涉及不同部份互相合作，各部份資料如何傳遞、格式如何，需要成員間的溝通。在一個趕頭趕命的軟件項目裏增加人手，並不能加快生產，反而要花更多時間作訓練、溝通。「人」與「月」是不可互換的。 寫程式是一項心智活動，程式員有很大的自由，能將意念化成文字指令讓機器執行。偉大的建築或音樂，可以只有一個設計者，作品強烈反映個人意志。但軟件通常時間迫切，總是需要很多人手加入規劃設計。如何將不同人的設計意念統一、實作、測試、付運，就成為軟件工程的最大課題。這裏面，要訂立很多不同架構、規則、流程、工具、文件等等。 此書亦收錄後來作者一篇《No Silver Bullet》，引起爭議最大。書中預測：十年內沒有任何技術，可以幾何級數增加軟件生產力。這預言是應驗了。這當中，作者討論軟件開發的本質：複雜、不一致、易變、無形。軟件各部份各異，無一相似，又有超多狀態，所以複雜。軟件開發總是要面對不一樣的問題，帶來不一樣的複雜，這並無任何一致性可言。因為軟件本身很容易被修改，引至用戶要求、排程、實作、測試等等活動，都經常處於改變之中。與實物不同，軟件是無形的，結構不受空間限制，也沒有任何一大圖表能夠代表整體 (要多張才可以)。 而在那時一些技術，如高階語言、時間分享、統一開發環境等等，都不能直擊這些本質問題。及至日後的一些技術，如 OO、AI、圖形編程等等，也沒有成為 silver bullet。 雖然如此，還是有些東西可以做到的。作者預測了一系列改變也正在發生，如由買軟件代替開發專用的 (組合使用 spreadsheet、word 等解決問題)、以不斷修正需求快速試作來開發、「生長」軟件等等，都可以減輕我們開發軟件的負擔。我讀此書是二十週年版，也就附有一篇作者在二十年後的回顧，詳細地察看自己的預測的異同及其因。 Software is hard。寫程式如寫詩一樣，自由度很大，卻又可以做出實際的東西， 猶如魔法 。可是自由越大，也越易出錯，加上要協調不同人事，就更複雜。我們需要各種各樣的規則流程方法，才能做出可靠的產品，這在現在越來越依賴電腦的世界，尤其重要。 Tags: book, development, engineering, programming, review, software]]></description>
			<content:encoded><![CDATA[	<p><img src="http://img.photobucket.com/albums/v217/jackysee/JackyBlog/4950953802_0544c8d10f.jpg" alt="tar-pit"/></p>

	<p>成書至今 35 年的《The Mythical Man-month》 (人月神話)，至今讀來仍然不老，可見書對程式設計和軟件工程有透徹的了解，明白這一項工作的本質、涉及人事、流程等等，有什麼特質和局限，所以才能直擊要害，成為經典。</p>

	<p>我們通常會說「這項目一共花了十個月的 man-month」，可是 Man-month 是一個神話，其估計永遠不準確。因為編寫程式不同耕田種菜，那些工作只要技巧上了手，工人們就可以獨立工作，所以要增加生產力，直接加人就可以了。可是編寫軟件卻不能這樣算，因為除了技巧，溝通也很重要。軟件涉及不同部份互相合作，各部份資料如何傳遞、格式如何，需要成員間的溝通。在一個趕頭趕命的軟件項目裏增加人手，並不能加快生產，反而要花更多時間作訓練、溝通。「人」與「月」是不可互換的。</p>

	<p>寫程式是一項心智活動，程式員有很大的自由，能將意念化成文字指令讓機器執行。偉大的建築或音樂，可以只有一個設計者，作品強烈反映個人意志。但軟件通常時間迫切，總是需要很多人手加入規劃設計。如何將不同人的設計意念統一、實作、測試、付運，就成為軟件工程的最大課題。這裏面，要訂立很多不同架構、規則、流程、工具、文件等等。</p>

	<p>此書亦收錄後來作者一篇《No Silver Bullet》，引起爭議最大。書中預測：十年內沒有任何技術，可以幾何級數增加軟件生產力。這預言是應驗了。這當中，作者討論軟件開發的本質：複雜、不一致、易變、無形。軟件各部份各異，無一相似，又有超多狀態，所以複雜。軟件開發總是要面對不一樣的問題，帶來不一樣的複雜，這並無任何一致性可言。因為軟件本身很容易被修改，引至用戶要求、排程、實作、測試等等活動，都經常處於改變之中。與實物不同，軟件是無形的，結構不受空間限制，也沒有任何一大圖表能夠代表整體 (要多張才可以)。</p>

	<p>而在那時一些技術，如高階語言、時間分享、統一開發環境等等，都不能直擊這些本質問題。及至日後的一些技術，如 OO、AI、圖形編程等等，也沒有成為 silver bullet。</p>

	<p>雖然如此，還是有些東西可以做到的。作者預測了一系列改變也正在發生，如由買軟件代替開發專用的 (組合使用 spreadsheet、word 等解決問題)、以不斷修正需求快速試作來開發、「生長」軟件等等，都可以減輕我們開發軟件的負擔。我讀此書是二十週年版，也就附有一篇作者在二十年後的回顧，詳細地察看自己的預測的異同及其因。</p>

	<p>Software is hard。寫程式如寫詩一樣，自由度很大，卻又可以做出實際的東西， <a href="http://jacky.seezone.net/2009/04/16/2458/">猶如魔法</a> 。可是自由越大，也越易出錯，加上要協調不同人事，就更複雜。我們需要各種各樣的規則流程方法，才能做出可靠的產品，這在現在越來越依賴電腦的世界，尤其重要。</p>
	Tags:  <a href="http://jacky.seezone.net/tag/book/" title="book" rel="tag">book</a>, <a href="http://jacky.seezone.net/tag/development/" title="development" rel="tag">development</a>, <a href="http://jacky.seezone.net/tag/engineering/" title="engineering" rel="tag">engineering</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a>, <a href="http://jacky.seezone.net/tag/review/" title="review" rel="tag">review</a>, <a href="http://jacky.seezone.net/tag/software/" title="software" rel="tag">software</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2010/09/02/3065/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

