<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6721071264063477716</id><updated>2012-02-16T20:47:58.774+08:00</updated><category term='gsoc'/><category term='foss'/><category term='git-fix-ws'/><category term='cloud'/><category term='olpc'/><category term='europe08'/><category term='gcj'/><title type='text'>Emptiness Blogging</title><subtitle type='html'>from emptiness to emptiness ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default?start-index=101&amp;max-results=100'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>276</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6203294910686341077</id><published>2012-01-20T22:38:00.000+08:00</published><updated>2012-01-20T22:38:06.311+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='git-fix-ws'/><title type='text'>git-fix-whitespace series 1: Knowing about `git diff -p`</title><content type='html'>In the &lt;a href="http://mrkschan.blogspot.com/2012/01/git-fix-whitespace-series-0-gitpython.html"&gt;last post&lt;/a&gt;, the first requirement of the project (&lt;a href="https://github.com/mrkschan/git-fix-whitespace"&gt;https://github.com/mrkschan/git-fix-whitespace&lt;/a&gt;) has been settled. The next requirement of this project is to read the git-diff patch in order to find any line changes that violate the whitespace rules specified in git config.&lt;br /&gt;&lt;br /&gt;In a typical git-diff patch (see below), there are a few major parts.&lt;br /&gt;&lt;script src="https://gist.github.com/1647409.js"&gt;&lt;/script&gt;&lt;ol&gt;&lt;li&gt;Line 1 provides metadata about the modified file. It gives the file path to the file, rooted at the git repository.&lt;/li&gt;&lt;li&gt;Line 2 provides metadata about the git index and the file object discretionary access control list.&lt;/li&gt;&lt;li&gt;Line 3 and 4 provides metadata about which file path is old and which is new.&lt;/li&gt;&lt;li&gt;Line 5, 14, and 24 are metadata that tells which part of the file is modified. Let's take an example to explain this - "@@ -33,8 +33,7 @@ def sanitize_diff(git_diff):". "-33,8" tells that there is a diff hunk with 8 lines starts at line 33 of the old version of the file. "+33,7" tells that there is a diff hunk with 7 lines starts at line 33 of the new version of the file. As a result, the new version of the file gets one line fewer than the old version.&lt;/li&gt;&lt;li&gt;The rest of the patch is the content in the modified file. Those lines are either prefixed by ' ', '-', or '+'. ' ' means no modification, '-' means removed line, and '+' means added line. Note, there is no line replacement since it is represented by '-' lines followed by '+' lines (see line 28-31).&lt;/li&gt;&lt;/ol&gt;After knowing the structure of a git-diff patch, the next step is to read and write the modified file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6203294910686341077?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6203294910686341077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6203294910686341077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6203294910686341077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6203294910686341077'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2012/01/git-fix-whitespace-series-1-knowing.html' title='git-fix-whitespace series 1: Knowing about `git diff -p`'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5142014288198310543</id><published>2012-01-15T18:27:00.003+08:00</published><updated>2012-01-15T18:47:26.905+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='git-fix-ws'/><title type='text'>git-fix-whitespace series 0: GitPython vs libgit2</title><content type='html'>This is the first post of the git-fix-whitespace series. In this series, I will put some notes about working on the project - &lt;a href="https://github.com/mrkschan/git-fix-whitespace"&gt;https://github.com/mrkschan/git-fix-whitespace&lt;/a&gt;. (NOTE: This series is a by-product of the git-fix-whitespace project, since my blog need some updates :P)&lt;br /&gt;&lt;br /&gt;First of all, let me introduce the rationale of working on this git-fix-whitespace project. Most of the time, as a Python developer, I hate tab indentation and trailing whitespaces (read pep8). I know there are existing tools to "proof-read" a file using certain whitespacing rules. However, I insist to create my own tool to achieve the goal. Reason: I just wanna have a pet project that I LOVE to keep working on.&lt;br /&gt;&lt;br /&gt;The very first requirement of this project is to support the configuration directives of git (see `man git-config` and look for `core.whitespace`). Hence, I need to find a tool that can read the git configuration files (both the user level git config file ~/.gitconfig and repository level git config file &lt;repo&gt;/.git/config). By using Google, I got GitPython and libgit2/pygit2. At first, I try to read the libgit2 python binding to see if I can read whitespace configuration by simple api calls. But it seems that it did not support that yet (as of 2012-Jan-15). Then I move on to GitPython.  Gotcha! There's simple api call to read the core.whitespace configurations :) As a result, git-fix-whitespace got a dependency on GitPython at the moment.&lt;br /&gt;&lt;/repo&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5142014288198310543?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5142014288198310543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5142014288198310543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5142014288198310543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5142014288198310543'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2012/01/git-fix-whitespace-series-0-gitpython.html' title='git-fix-whitespace series 0: GitPython vs libgit2'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8049026865597149756</id><published>2011-11-05T21:32:00.000+08:00</published><updated>2011-11-05T21:32:13.416+08:00</updated><title type='text'>話說的好滑腸粉</title><content type='html'>聽阿媽話說, 97年果時有位茶樓點心大廚, 因為人工高被人炒魷, 結果到了沙田博康村的大排檔拉腸粉.今日, 本來是要跟阿媽行山去川龍飲茶的日子, 但因為唔多想坐車入荃灣咁遠, 結果是從獅子山行入沙田...朝早7:30出門口, 9:30到了博康村. 剛剛好趕得上腸粉時段 (NOTE: 果間野 d 即拉腸粉, 只限每天早上十時前供應).&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fffu21rR7Go/TrU5z5s0GiI/AAAAAAAAApg/eWfC0-Uj0aI/s1600/DSC00624.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="240" width="320" src="http://3.bp.blogspot.com/-fffu21rR7Go/TrU5z5s0GiI/AAAAAAAAApg/eWfC0-Uj0aI/s320/DSC00624.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2MB6ExF-3v8/TrU5zs5mMiI/AAAAAAAAApY/n8U9JnjZ108/s1600/DSC00623.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="240" src="http://4.bp.blogspot.com/-2MB6ExF-3v8/TrU5zs5mMiI/AAAAAAAAApY/n8U9JnjZ108/s320/DSC00623.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;這即拉腸粉的滑口程度, 絕對比米豬蓮添女子運的腸粉好得多... And, 添女子運沒有花生醬及甜醬供應....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8049026865597149756?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8049026865597149756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8049026865597149756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8049026865597149756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8049026865597149756'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/11/blog-post.html' title='話說的好滑腸粉'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-fffu21rR7Go/TrU5z5s0GiI/AAAAAAAAApg/eWfC0-Uj0aI/s72-c/DSC00624.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8488790300258896251</id><published>2011-05-12T23:26:00.001+08:00</published><updated>2011-05-25T15:21:56.652+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Stats for Firefox 4 Release Party on May 14</title><content type='html'>As you may know, we're going to have a Firefox 4 Release Party this Saturday in Hong Kong!! (see &lt;a href="http://opensource.hk/node/666"&gt;http://opensource.hk/node/666&lt;/a&gt; :) &lt;br /&gt;&lt;br /&gt;I would like to share with you some interesting stats we collected from the registration :)&lt;br /&gt;&lt;br /&gt;At first, let's see who's coming :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-kDAsq0s3Y4k/Tcv8jlAo1GI/AAAAAAAAAlo/qIY_p9e42FA/s1600/fx4-who.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 70px;" src="http://4.bp.blogspot.com/-kDAsq0s3Y4k/Tcv8jlAo1GI/AAAAAAAAAlo/qIY_p9e42FA/s320/fx4-who.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5605851849353122914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of us are user of Firefox :) You can find contributor as well :)&lt;br /&gt;&lt;br /&gt;Then, which OS we use most???&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-A2vMNkaddRg/Tcv8jGvzKAI/AAAAAAAAAlY/k1yrvG-ekuE/s1600/fx4-os.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 85px;" src="http://1.bp.blogspot.com/-A2vMNkaddRg/Tcv8jGvzKAI/AAAAAAAAAlY/k1yrvG-ekuE/s320/fx4-os.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5605851841229432834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feeling sorry to "vista" ... what is it -.-? Anyway, what are we going to do this Saturday ?? hehe... see below :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-omPW5S6fG6c/Tcv8jRapl7I/AAAAAAAAAlg/Xg2HflLdjOk/s1600/fx4-role.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 72px;" src="http://4.bp.blogspot.com/-omPW5S6fG6c/Tcv8jRapl7I/AAAAAAAAAlg/Xg2HflLdjOk/s320/fx4-role.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5605851844093515698" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8488790300258896251?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8488790300258896251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8488790300258896251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8488790300258896251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8488790300258896251'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/05/stats-for-firefox-4-release-party-on.html' title='Stats for Firefox 4 Release Party on May 14'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-kDAsq0s3Y4k/Tcv8jlAo1GI/AAAAAAAAAlo/qIY_p9e42FA/s72-c/fx4-who.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8409306222497651939</id><published>2011-02-14T21:13:00.002+08:00</published><updated>2011-02-14T21:18:09.862+08:00</updated><title type='text'>happy valentine's</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-fx8-ZSK7lCc/TVkrH_aNmCI/AAAAAAAAAk8/rWg5kJGnMXA/s1600/DSC00514.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-fx8-ZSK7lCc/TVkrH_aNmCI/AAAAAAAAAk8/rWg5kJGnMXA/s320/DSC00514.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5573533430128154658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ksrpN_R-NlQ/TVkrHgaoyhI/AAAAAAAAAk0/fg_j2t2ey10/s1600/DSC00511.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/-ksrpN_R-NlQ/TVkrHgaoyhI/AAAAAAAAAk0/fg_j2t2ey10/s320/DSC00511.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5573533421808437778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ktzUh1T75VY/TVkrHX6FGfI/AAAAAAAAAks/lCosxLCBazw/s1600/DSC00515.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/-ktzUh1T75VY/TVkrHX6FGfI/AAAAAAAAAks/lCosxLCBazw/s320/DSC00515.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5573533419524397554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-a2vXfhVpzUQ/TVkrHBGdTII/AAAAAAAAAkk/6uYk0Kq62_s/s1600/DSC00515.masked2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/-a2vXfhVpzUQ/TVkrHBGdTII/AAAAAAAAAkk/6uYk0Kq62_s/s320/DSC00515.masked2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5573533413402299522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mrkschan.blogspot.com/2011/02/prep-for-monday.html"&gt;http://mrkschan.blogspot.com/2011/02/prep-for-monday.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8409306222497651939?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8409306222497651939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8409306222497651939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8409306222497651939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8409306222497651939'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/02/happy-valentines.html' title='happy valentine&apos;s'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-fx8-ZSK7lCc/TVkrH_aNmCI/AAAAAAAAAk8/rWg5kJGnMXA/s72-c/DSC00514.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4879623552231648163</id><published>2011-02-12T12:28:00.013+08:00</published><updated>2011-02-12T13:13:06.750+08:00</updated><title type='text'>屎忽痕, 行山飲"早"茶</title><content type='html'>昨晚, 阿爸忽然話今朝行山去什麼 "川龍" 飲早茶.. 小弟見屎忽痕, 又 assume 了要行山去吃的 實會係正野 ... 很自然的話要跟住去.&lt;br /&gt;&lt;br /&gt;今晨七時出門口 .. 坐mtr到荃灣, 由荃灣地鐵站行上圓玄學院. (那時大約是8點了)&lt;br /&gt;&lt;br /&gt;由圓玄學院出發, 經山路到川龍大約為 3Km. 不要以為很輕鬆... 從圓玄學院走上大帽山的樓梯, 約一公里長 -.- 跟阿媽慢慢走了40分鐘, 才到那什麼觀景台.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-CGo0iidcDN0/TVYOVAVhcyI/AAAAAAAAAjY/1RhwpqVBvsM/s1600/DSC00518.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-CGo0iidcDN0/TVYOVAVhcyI/AAAAAAAAAjY/1RhwpqVBvsM/s320/DSC00518.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572657342947881762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;之後再走一會輕鬆的山路, 就差不多到川龍了.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-ITHgBaMOY8k/TVYQIUhHn6I/AAAAAAAAAjg/Y2mDXoodErI/s1600/DSC00521.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-ITHgBaMOY8k/TVYQIUhHn6I/AAAAAAAAAjg/Y2mDXoodErI/s320/DSC00521.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572659324050186146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-_2OwQzV0Gto/TVYQJKJoHfI/AAAAAAAAAjo/1Nti0A5ym4M/s1600/DSC00524.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-_2OwQzV0Gto/TVYQJKJoHfI/AAAAAAAAAjo/1Nti0A5ym4M/s320/DSC00524.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572659338447166962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-A015LBK_EQg/TVYQJfrLyXI/AAAAAAAAAjw/FD-oQAMcAZE/s1600/DSC00525.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-A015LBK_EQg/TVYQJfrLyXI/AAAAAAAAAjw/FD-oQAMcAZE/s320/DSC00525.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572659344225061234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上到茶樓, 見到好耐無見的雀籠.. 對上一次與雀共茶, 應該係細路仔果時, 同屋企人去藍田的德田村冬菇亭了. 自從有禽流感之後, 都好耐無試過聽雀仔聲飲茶.&lt;br /&gt;&lt;br /&gt;在茶樓叫的東西不是很多, 其中的芋角同客家豬肉最為正 :P 那個芋角入面, 有d馬蹄, 很爽口. 而那個豬肉, 不是很肥. 豬肉像三文治一樣, 中間夾了一片芋頭.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-TztLldaSryQ/TVYSbyTs8II/AAAAAAAAAkQ/39S-80U0IUY/s1600/DSC00528.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-TztLldaSryQ/TVYSbyTs8II/AAAAAAAAAkQ/39S-80U0IUY/s320/DSC00528.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572661857487745154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YXuNLqfZYA8/TVYSbof606I/AAAAAAAAAkI/mHGm742OBso/s1600/DSC00530.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-YXuNLqfZYA8/TVYSbof606I/AAAAAAAAAkI/mHGm742OBso/s320/DSC00530.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572661854854632354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Nrl1286xh-E/TVYSbdcXmzI/AAAAAAAAAkA/5J0seCq9qlE/s1600/DSC00527.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/-Nrl1286xh-E/TVYSbdcXmzI/AAAAAAAAAkA/5J0seCq9qlE/s320/DSC00527.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572661851886951218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NdVLzOUg-DA/TVYSbKG_CyI/AAAAAAAAAj4/vT7vzVN4qCc/s1600/DSC00529.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-NdVLzOUg-DA/TVYSbKG_CyI/AAAAAAAAAj4/vT7vzVN4qCc/s320/DSC00529.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572661846696987426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三個人.. 70$ 落樓.&lt;br /&gt;&lt;br /&gt;小記:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-HtjkLnAX14M/TVYTR--kvTI/AAAAAAAAAkY/rugjtLtnHcU/s1600/DSC00531.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/-HtjkLnAX14M/TVYTR--kvTI/AAAAAAAAAkY/rugjtLtnHcU/s320/DSC00531.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5572662788601724210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;坐車落荃灣果陣, 經過了曹公潭戶外康樂中心. 我不記得是小學還是中學去過呢到. 最記得係.. 有一晚在裡面不知道干嘛通宵後.. 到了那 canteen 吃早餐... 那個早餐是我一生人入面 (暫時來說) ... 最難食的一餐 -.-"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4879623552231648163?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4879623552231648163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4879623552231648163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4879623552231648163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4879623552231648163'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/02/blog-post.html' title='屎忽痕, 行山飲&quot;早&quot;茶'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CGo0iidcDN0/TVYOVAVhcyI/AAAAAAAAAjY/1RhwpqVBvsM/s72-c/DSC00518.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1057632396567611408</id><published>2011-02-09T13:33:00.004+08:00</published><updated>2011-02-09T13:41:42.969+08:00</updated><title type='text'>Prep for Monday.</title><content type='html'>老板有個 lunch meeting, 到了旺角新世紀. 那麼近花墟, lunch time 當然不可放過 :)&lt;br /&gt;&lt;br /&gt;先到"快靚正"的&lt;a href="http://www.openrice.com/restaurant/sr2.htm?shopid=11293"&gt;金華&lt;/a&gt;整番個 奶茶 lunch, 再過花墟走走也有大把時間.&lt;br /&gt;&lt;br /&gt;雖然吃的不是金華出名的波羅油, 但 28$ 快餐 (連湯連奶茶), 在太子也算是抵吧 :P&lt;br /&gt;&lt;br /&gt;為什麼要到花墟?? 因為快來的星期一吧 :P&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TVIoxtocadI/AAAAAAAAAjQ/sYW97KCHKg8/s1600/DSC00508.mod.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TVIoxtocadI/AAAAAAAAAjQ/sYW97KCHKg8/s320/DSC00508.mod.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5571560523538655698" /&gt;&lt;/a&gt; (張相影得唔好 :P）&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/6721071264063477716-1057632396567611408?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1057632396567611408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1057632396567611408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1057632396567611408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1057632396567611408'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/02/prep-for-monday.html' title='Prep for Monday.'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/TVIoxtocadI/AAAAAAAAAjQ/sYW97KCHKg8/s72-c/DSC00508.mod.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2942502116629378259</id><published>2011-01-28T12:48:00.011+08:00</published><updated>2011-01-28T13:19:25.857+08:00</updated><title type='text'>茄牛通</title><content type='html'>很久沒有興致寫野, 難得今日有番些許, 緊係寫番些許東西.&lt;br /&gt;&lt;br /&gt;今日跟老板去了 中環 Alexandra House間 Starbucks. 老板十一點多就有個 lunch meeting ... 咁我果陣又有些許肚餓 ... 緊係 &lt;a href="http://www.openrice.com/restaurant/sr1.htm?s=1&amp;district_id=1003&amp;inputcategory=cname&amp;inputstrrest="&gt;openrice: 中環&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;去到第一頁 result, 第一間野竟然係&lt;a href="http://www.openrice.com/special/feature.htm?cmsid=345"&gt;酸辣粉&lt;/a&gt; ... 無言... 即時 skip 了沒看 -.-... 不想深圳又酸辣粉, 香港又酸辣粉...&lt;br /&gt;&lt;br /&gt;result 第二間就係今日 lunch &lt;a href="http://www.openrice.com/restaurant/sr2.htm?shopid=10577"&gt;目的地&lt;/a&gt;... 眼見 less than $40 ... 唔洗諗啦 ... 去馬 :P&lt;br /&gt;&lt;br /&gt;那時還想在 starbucks 坐多陣, 但又見 review 話要等位, 11:45左右就行出 starbucks, 找路到&lt;a href="http://www.openrice.com/restaurant/sr2.htm?shopid=10577&amp;mapType=1"&gt;勝香園&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;大約 12:05 搵到間野, 果時都唔係"好Q"多人, 雖然有人等緊位, 但見間野仲有一兩張細檯未開. 一條友o既我, 緊係見位就坐 -.- 叫左個 茄牛蛋通 + 熱奶荼 ($25 + $9).&lt;br /&gt;&lt;br /&gt;叫完阿姐寫野, 唔洗3分鐘就有得食... 果時身後有班女仔係到等位.. 本來想幫碗通粉影番張靚相, 但太多女仔望住.. 淆底, 廢事做柒野 :P&lt;br /&gt;&lt;br /&gt;&lt;img src="http://static2.openrice.com.hk/UserPhoto/photo/0/1R/000CHLA0A427CF3C0C7F45l.jpg" /&gt;&lt;br /&gt;(老笠 openrice 其中一張相)&lt;br /&gt;&lt;br /&gt;講番碗通粉... 其實.... 沒什麼特別... 跟以前(細路仔果陣) d 屋村大排檔 同 屋企 d 住家口味 差不多... 可能大家對那些 大x樂, x快活, 美x 等等 chain 吃厭了味覺... 不知道為什麼會有些遊客"慕名"到訪 (self included). 不過... 很久沒有食粉麵連湯飲... 感覺那碗番茄湯沒多味精呢.&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/6721071264063477716-2942502116629378259?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2942502116629378259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2942502116629378259' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2942502116629378259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2942502116629378259'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/01/blog-post.html' title='茄牛通'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-9084961845675618701</id><published>2011-01-21T19:36:00.004+08:00</published><updated>2011-01-21T19:46:12.500+08:00</updated><title type='text'>Badges Unlocked.</title><content type='html'>現在什麼遊戲, 什麼網站都有 badges / achievements... 今日, 現實生活中 (網絡還不現實麼?) 多了一個 badge ... upload 上來看看的說 :P&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TTlxuNHjXyI/AAAAAAAAAio/cIT2Lbp6eP4/s1600/DSC00495.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TTlxuNHjXyI/AAAAAAAAAio/cIT2Lbp6eP4/s320/DSC00495.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5564603853202218786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TTlxt9hGSKI/AAAAAAAAAig/pjokAUxmG9E/s1600/DSC00496.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TTlxt9hGSKI/AAAAAAAAAig/pjokAUxmG9E/s320/DSC00496.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5564603849014397090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TTlxtWX-_4I/AAAAAAAAAiY/eaURsPUxCBo/s1600/DSC00497.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TTlxtWX-_4I/AAAAAAAAAiY/eaURsPUxCBo/s320/DSC00497.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5564603838507188098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/TTlxtCZUm5I/AAAAAAAAAiQ/7LzWe8RpHW8/s1600/DSC00499.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/TTlxtCZUm5I/AAAAAAAAAiQ/7LzWe8RpHW8/s320/DSC00499.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5564603833144089490" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-9084961845675618701?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/9084961845675618701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=9084961845675618701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9084961845675618701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9084961845675618701'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2011/01/badges-unlocked.html' title='Badges Unlocked.'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/TTlxuNHjXyI/AAAAAAAAAio/cIT2Lbp6eP4/s72-c/DSC00495.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2712876913198003544</id><published>2010-11-20T22:57:00.008+08:00</published><updated>2010-11-20T23:18:30.909+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>Getting back XO-ing</title><content type='html'>Just finished a contest for the secondary school students ... now, i'm available for the XO :)&lt;br /&gt;&lt;br /&gt;I met XO 2-3 years ago and I was involved in a project for XO. It's for the kids to practice oral English.&lt;br /&gt;&lt;br /&gt;Given several vocabularies to the kids, ask them to pronounce it and we grade it :) The project involved porting an aged library from Windows to Linux and making a GUI for kids. No matter how well the grading is ... here is the current interface :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/TOfi2pCcyiI/AAAAAAAAAhs/Nycxwdewqy0/s1600/old-interface.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 242px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/TOfi2pCcyiI/AAAAAAAAAhs/Nycxwdewqy0/s320/old-interface.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5541647294859627042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, kids can type in the vocabulary and speak to the XO... and XO tell them ... how well they are.&lt;br /&gt;&lt;br /&gt;Here's a lovely video telling how they use it :)&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wnUiuprlPCM?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/wnUiuprlPCM?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;OK. Kids are interested... So Why not making them more interested ^^? Stuffs come to my mind ... can we have a pretty face to them for the feedback about the grade? can we speak to them about the feedback? Those make me get excited with the Speak activity. And ... i just wanna integrate the whole thing with Speak...&lt;br /&gt;&lt;br /&gt;Here's a prototype interface for it :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TOfkHEMhLGI/AAAAAAAAAh0/7QZQFTGU17Y/s1600/new-interface.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 252px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TOfkHEMhLGI/AAAAAAAAAh0/7QZQFTGU17Y/s320/new-interface.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5541648676539149410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, why do i do XO? several things come to my mind.&lt;br /&gt;- it's less than USD$200&lt;br /&gt;- its battery long-lasting&lt;br /&gt;- it can be used under sunshine/sun-light&lt;br /&gt;- it can connect to a Wifi access point 1KM away&lt;br /&gt;- it can run Flash&lt;br /&gt;- it gives kids High DPI screen (their eyes will be fine in using it)&lt;br /&gt;- it gives kids Email&lt;br /&gt;- it gives kids Game (not yet an AngryBird out there)&lt;br /&gt;- it gives kids Wiki&lt;br /&gt;- it gives kids Internet&lt;br /&gt;- it gives kids Calculator&lt;br /&gt;- it gives kids IM, WebCam, VOIP&lt;br /&gt;- it gives kids Music, jamming&lt;br /&gt;- it gives kids E-book&lt;br /&gt;- it gives kids Scratch for learning programming (or just story-boarding)&lt;br /&gt;- it gives kids Painting, Drawing&lt;br /&gt;- it gives kids a Maze ... (many kids love playing it ... both boys and girls :)&lt;br /&gt;- it gives kids ...&lt;br /&gt;   :&lt;br /&gt;   :&lt;br /&gt;   :&lt;br /&gt;- it runs F/OSS&lt;br /&gt;- And, it's less than USD$200&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-2712876913198003544?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2712876913198003544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2712876913198003544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2712876913198003544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2712876913198003544'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/11/getting-back-xo-ing.html' title='Getting back XO-ing'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/TOfi2pCcyiI/AAAAAAAAAhs/Nycxwdewqy0/s72-c/old-interface.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1133647624384812768</id><published>2010-10-21T00:12:00.005+08:00</published><updated>2010-10-21T00:45:09.121+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Standard 的進步 還是 Compatibility 的倒退?</title><content type='html'>看下圖 ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/TL8VMAx28iI/AAAAAAAAAhU/NNWnQKGITyU/s1600/Screenshot-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 126px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/TL8VMAx28iI/AAAAAAAAAhU/NNWnQKGITyU/s320/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5530162163545993762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TL8VLcxq4OI/AAAAAAAAAhM/SNIUgh1uqec/s1600/Screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 111px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TL8VLcxq4OI/AAAAAAAAAhM/SNIUgh1uqec/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5530162153881526498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二圖有什麼分別, 明眼人一看就知 ... 一個是 Windows 上的 Google Chrome 而另一個是 Ubuntu 上的 Chromium. 兩者 version number 有點不同 ... 但 ... 應該不會 大 build no. 衰過 細 build no. 吧 -.-...&lt;br /&gt;&lt;br /&gt;我由 Firefox 2.x 用到 Firefox 3.6 ... 從來都未試過 windows 同 linux 上 ... 有 咁大 分別 ... I &lt;3 Firefox! &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mozilla.com/en-US/firefox/personal.html"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 117px; height: 119px;" src="http://itechnology.files.wordpress.com/2007/02/firefox.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;其實我唔清楚是 WebKit 的問題 還是 Chrome 的問題... 我只知道 Firefox 無問題 :)&lt;br /&gt;&lt;br /&gt;If 呢個係 WebKit 問題... 即係 Safari on Windows 應該可以 reproduce ... (but i didn't try... as some friends already told me Safari on Windows is a totally different thing from Safari on Mac)&lt;br /&gt;&lt;br /&gt;Anyway ... 小弟今次不是要 blame 什麼 ... 而是想提出什麼 ....&lt;br /&gt;&lt;br /&gt;Imagine ... If there's a software ... allows you to switch between different kind of web browsers on different kind of operating system ... by pressing a "tab" key ... is that a good news for developer ^^?&lt;br /&gt;&lt;br /&gt;呢個想法好似好簡單 ... 大概係 ... there is a cloud of VMs ... each VM contains 1 OS and 1 browser, as sandboxes ...  And, they can be remotely connected &amp; controlled by VNC (so that the client viewer can just use VNC for all OS) ... When you scroll in the client viewer... the browser scroll on all VMs. When you press "tab" or some other key combination ... you can switch the view from 1 browser to another browser. GOOOOOD for "Debugging the UI".&lt;br /&gt;&lt;br /&gt;OK ... easy? nope ... Can i do it? ... not really .. i'm not that talent to "sync" the UI control of a browser on all different OSes.&lt;br /&gt;&lt;br /&gt;點解要將呢d好似好正o既 idea 拎出黎講??? &lt;br /&gt;1) 因為我自知無料做到. &lt;br /&gt;2) 因為我唔識人幫手做到 &lt;br /&gt;3) 如果有人見此 post 做到一個俾我用... 我會超級 appreciate 佢 XD &lt;br /&gt;4) 以前上堂聽過... Silicon Valley 成功的一個原因是 dynamics of the creative ideas ... The westerners like drinks and when they drunk, they shared ideas to other westerners who work for another company... A 公司 做緊 B 公司 d 野 ... B 公司 做緊 C 公司 d 野 ... C 公司 做緊 A 公司 d 野... &lt;br /&gt;&lt;br /&gt;百花齊放 :) 互相改善, 互相撕殺 :) 最終在綠葉扶持下爆出一粒美麗的花蕾 :)&lt;br /&gt;&lt;br /&gt;每間公司, 每個人都想做花lum唔做綠葉 ... BUT ... 你唔去 互相改善, 互相撕殺 ... 又何來有綠葉襯托你做花lum :)&lt;br /&gt;&lt;br /&gt;而且.. 你可能覺得其實的呢個係廢 idea ... or 你都諗過但無 share (or 已失敗 rip)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1133647624384812768?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1133647624384812768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1133647624384812768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1133647624384812768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1133647624384812768'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/10/standard-compatibility.html' title='Standard 的進步 還是 Compatibility 的倒退?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/TL8VMAx28iI/AAAAAAAAAhU/NNWnQKGITyU/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-534645547116848792</id><published>2010-10-15T21:55:00.006+08:00</published><updated>2010-10-15T22:18:06.750+08:00</updated><title type='text'>Blog Action Day 2010 - Clean Water</title><content type='html'>When u brush your teeth, do u ever think of the amount of clean water u used?&lt;br /&gt;&lt;br /&gt;Let me introduce my "philosophy" :P&lt;br /&gt;&lt;br /&gt;Here is a little green cup that i use to contain the water when i brush my teeth. I started using it since my childhood. It's around 2x years old :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TLhenjK8X7I/AAAAAAAAAg8/ZmHWEnvC-uw/s1600/DSC00480.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TLhenjK8X7I/AAAAAAAAAg8/ZmHWEnvC-uw/s320/DSC00480.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5528272576146333618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When u compare it to some normal sized container ... the red one in the photo ... u will know how little is my green cup.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TLhe8ozYgHI/AAAAAAAAAhE/EG_QJT1RW9g/s1600/DSC00483.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TLhe8ozYgHI/AAAAAAAAAhE/EG_QJT1RW9g/s320/DSC00483.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5528272938435379314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Someone asked me why i keep using such a little cup? Don't u need to fill the cup more times than a bigger one.&lt;br /&gt;&lt;br /&gt;My philosophy is that ... when u used a bigger cup, u may waste MUCH MORE clean water. This is the same as the plate or bowl that holds food. If u get a big plate, u may fill much more food with it. This is because our habit is to fill something "full". So, the smaller the container, the less you can fill with it. Most of the time when u fill something ... u will fill more than u need. If u agree ... try look for a smaller container :)&lt;br /&gt;&lt;br /&gt;support &lt;a href="http://blogactionday.change.org/"&gt;Blog Action Day&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-534645547116848792?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/534645547116848792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=534645547116848792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/534645547116848792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/534645547116848792'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/10/blog-action-day-2010-clean-water.html' title='Blog Action Day 2010 - Clean Water'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/TLhenjK8X7I/AAAAAAAAAg8/ZmHWEnvC-uw/s72-c/DSC00480.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6806260078743224657</id><published>2010-10-10T23:45:00.025+08:00</published><updated>2010-10-11T01:44:41.661+08:00</updated><title type='text'>學習 、工作</title><content type='html'>好耐無寫自己"內心"o既野 (小弟語文能力唔好, 唔識形容乜野係"野" ... 寫下寫下, 可能係內心獨白吧) ... 襯今日10.10.10, 又咁岩同一位朋友傾過一d認真話題... 有感而發... 雖然好眼訓, 但都要寫.... 因為.. 曾經在友人看過一篇 blog post (沒記錯的話是友人的 "森路歷程", 錯了勿插 :P), 開場白大概是 "曾經聽友人說過, 回家了, 累了. 若是有 blog "要" post, 再累也要先 post 後休息. 不然, 過了那興致, 之後想再 post 都不可能了"... 可能怕是失去靈感了吧.&lt;br /&gt;&lt;br /&gt;今次, 小弟想講下, 小弟 常常常常 聽到的一句話. "工作的時候,好多時會學到新野". 我想問: 什麼是工作? 什麼是學習? &lt;br /&gt;&lt;br /&gt;如果你曾經簽過一份工作合同, 上面應該會有.. 如 "You are expected to put your best effort on accomplishing the tasks assigned to you" 咁o既說話. 那... 在我心中點睇乜野係工作? 如果我是 interviewer, 又如果有一位求職者跟我說: "我進這公司, 接這工作, 是希望學到新野..." 我一定好串咁問佢: "你來學野? 想學乜野? 我呢到無乜教材".&lt;br /&gt;&lt;br /&gt;係我心目中, 學習 跟 工作 完完全全是兩回事... &lt;br /&gt;&lt;br /&gt;工作, 你老闆肯定想你將最好o既野做出黎. 如果你認為岩岩學完o既野, 做出黎可以交差, 那還是不是最好的? "best effort" 了? 其實這沒有答題, 因為每個人追求的 best 都不一樣. 而我想係到表達o既係... 好多時, 工作是有時限的. 做得黎又要學, 學得黎又要做.. 你學得又有幾深入呢? 工作上, 遇到一些從沒遇過的東西, 給你遇上了, 是你多了一點這東西的 經驗, 是你 "認識" 多了一樣東西. You "know" something new. 那是真正的"學習"嗎?&lt;br /&gt;&lt;br /&gt;學習, 到底係我心目中又是什麼??&lt;br /&gt;&lt;br /&gt;不知是好運還是惡夢... 小弟畢業作 (即 fyp) 遇上了 e-Learning. 那時看了一本書.. 大概是講 adult learning... 什麼是最好的學習?? What is the BEST LEARNING? 最好的學習是來自內心的 渴求 (難聽d叫 慾望, 即desire) .. 自發的, 有興趣的, 渴求得到的. (如果你睇番小弟所寫 ... 有關在 barcamp 2010 裡, 小弟有幸聽了 &lt;a href="http://mrkschan.blogspot.com/2010/09/barcamp-consciousness.html"&gt;有關Consciousness 的 session&lt;/a&gt;... 要想知自己在做什麼, 那便要分清楚是 your desire, need, fear, or joy 哦) 工作上 所謂的學習 ??? Is it desire? Is it fear?? Or is it a NEED??? Perhaps, it may be joyful :P (someone LOVES works all day, right?) 如果你工作上所"學習"的是你所"渴求"的, Congratulation! 但是, 又有幾可, 你工作上遇到的新事物, 是你所渴求認識的那東西?? 工作好多時會有d框架 bound 住你... 請不要退而求其次的說: "那東西不能用到工作上嗎? 沒打緊, 我也想學這東西"... 那到底什麼是你 desire 的?? 又或者, 你又真係好鬼想學這 "2nd Priority" 吧 ... 嘿嘿... anyway.. 不要太貪心... "吾生也有涯，而知也無涯，以有涯隨無涯，殆矣". (在拋拋書包麼!? Remember.. my blog's name is "Emptiness Blogging"... somehow Taoism... lol)&lt;br /&gt;&lt;br /&gt;你要學習你所 desire 的東西, 你將會付出很多, 但不一定有相對應的回報. 但係, 你又會戇戇居居咁走去完成佢... (小弟就咁戇戇居居左個 year4 + 1年 cs master degree, 諗番都好鬼戇居-.- 浪費咁多時間同精神, 仲要 put 多左 effort... but, so what? i did that. XD )&lt;br /&gt;&lt;br /&gt;Hope you get what is Learning.&lt;br /&gt;&lt;br /&gt;其實, 我認為互聯網是比避孕套更偉大o既發明, 因為你可以透過 超連結 (都幾超下架..) 去將有關係o既野 "連埋". 對學習來說帶來極大方便. (回想起.. 寫paper時, 找 reference 中的 reference 來看看, 沒有 hyperlink , 可以找死你)&lt;br /&gt;&lt;br /&gt;到最後, 我想講.. 其實我寫呢篇野果時已經係 10月 11號 零晨時份 :P 改改 post date 而已. 上述只是個人見解, 如有得罪, 多多包容.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6806260078743224657?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6806260078743224657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6806260078743224657' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6806260078743224657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6806260078743224657'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/10/blog-post.html' title='學習 、工作'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4599348541835911873</id><published>2010-09-19T09:00:00.003+08:00</published><updated>2010-09-19T09:06:55.939+08:00</updated><title type='text'>barcamp: Consciousness</title><content type='html'>Simply speaking, &lt;a href="http://en.wikipedia.org/wiki/Consciousness"&gt;Consciousness&lt;/a&gt; is the study about the relation between our mind and our body. Sometimes, we physically situated at somewhere but our minds go to somewhere eles... A PolyU professor shared about Consciousness in &lt;a href="http://barcamp.hk/"&gt;barcamphk 2010&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;One key point to understand why we do something is to differentiate the following four:&lt;br /&gt;- fear&lt;br /&gt;- desire&lt;br /&gt;- need&lt;br /&gt;- joy&lt;br /&gt;&lt;br /&gt;For example, we went to the student canteen of PolyU for lunch yesterday... Why?&lt;br /&gt;From my point of view, we need to lunch and that's our need but we can lunch anywhere instead of the student canteen. So, this is not caused by need. Is it joyful? Yup, pretty joyful when chatting with other barcampers... but we can chat anywhere. Is it the desire? or is it fear? Desire to have free lunch? or fear of paying for a lunch? em... 50/50 in this case :P but I think it should be my desire of free lunch :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4599348541835911873?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4599348541835911873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4599348541835911873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4599348541835911873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4599348541835911873'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/09/barcamp-consciousness.html' title='barcamp: Consciousness'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3764417604020210364</id><published>2010-09-13T00:02:00.009+08:00</published><updated>2010-09-13T00:21:16.239+08:00</updated><title type='text'>tour to planet pandora</title><content type='html'>actually ... not going to planet Pandora but 张家界 and 凤凰城 :P&lt;br /&gt;&lt;br /&gt;just wanna post some shots here :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/TIz7HbZMb-I/AAAAAAAAAgU/X3yJJxfGMkk/s1600/IMGP0315.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/TIz7HbZMb-I/AAAAAAAAAgU/X3yJJxfGMkk/s320/IMGP0315.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516059748653101026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/TIz7F8vwcmI/AAAAAAAAAgM/bWgTGDPrl6c/s1600/IMGP0199.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/TIz7F8vwcmI/AAAAAAAAAgM/bWgTGDPrl6c/s320/IMGP0199.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516059723246367330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TIz7FPhczvI/AAAAAAAAAgE/svlwbicu8vE/s1600/IMGP0052.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TIz7FPhczvI/AAAAAAAAAgE/svlwbicu8vE/s320/IMGP0052.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516059711106764530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/TIz7Ek-5NuI/AAAAAAAAAf8/xoIpUYpuXNs/s1600/IMGP0080.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/TIz7Ek-5NuI/AAAAAAAAAf8/xoIpUYpuXNs/s320/IMGP0080.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516059699687536354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;indeed, you can find out more shots in my facebook album ... (yep, i dont pay flickr as i'm poor :P)&lt;br /&gt;&lt;br /&gt;http://www.facebook.com/album.php?aid=247441&amp;id=508149973&amp;l=93f5e6b411&lt;br /&gt;http://www.facebook.com/album.php?aid=247438&amp;id=508149973&amp;l=839a5bea37&lt;br /&gt;http://www.facebook.com/album.php?aid=247428&amp;id=508149973&amp;l=83e7bf4e09&lt;br /&gt;&lt;br /&gt;PLus ... wanna post 2 pictures of the 军声砂石画 (being introduced during the tour)... that's pretty new to me.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TIz8PuJy1HI/AAAAAAAAAgc/bdxad2sLGs0/s1600/IMGP0215.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TIz8PuJy1HI/AAAAAAAAAgc/bdxad2sLGs0/s320/IMGP0215.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516060990639363186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This kind of art gives EXTREMELY HIGH "dpi". Yes, dot per inch.... Since it uses raw materials like woods, sands and rocks as the painting materials, the texture of the objects in the painting is pretty close to the texture of real objects. The following is a close-up of the bottom right corner of the painting above and you can find that there are many sands.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TIz8QXJxEAI/AAAAAAAAAgk/EweaRN8d-cw/s1600/IMGP0217.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TIz8QXJxEAI/AAAAAAAAAgk/EweaRN8d-cw/s320/IMGP0217.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5516061001645101058" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3764417604020210364?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3764417604020210364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3764417604020210364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3764417604020210364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3764417604020210364'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/09/tour-to-planet-pandora.html' title='tour to planet pandora'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/TIz7HbZMb-I/AAAAAAAAAgU/X3yJJxfGMkk/s72-c/IMGP0315.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5797218552586595340</id><published>2010-08-26T19:57:00.028+08:00</published><updated>2010-08-26T21:52:23.132+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>GoF State Pattern implemented in Javascript UI component</title><content type='html'>In these recent weeks, i'm writing a javascript UI component that can shrink/expand and hide/show. I call it "browser" in later paragraphs.&lt;br /&gt;&lt;br /&gt;It's a pretty easy-to-write component where it only has 3 different states as shown below.&lt;br /&gt;&lt;br /&gt;The first state is a hidden state which the "browser" hides itself somewhere in the page.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THZhhGN4nYI/AAAAAAAAAfk/6iOMlSF2KGA/s1600/hidden.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 145px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THZhhGN4nYI/AAAAAAAAAfk/6iOMlSF2KGA/s320/hidden.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509698415366806914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When clicking on those boxes shown, the "browser" shows itself and presents an abstract view of data.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THZhgv1jKyI/AAAAAAAAAfc/P-7st_hJgxI/s1600/abstract.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 143px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THZhgv1jKyI/AAAAAAAAAfc/P-7st_hJgxI/s320/abstract.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509698409359158050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When selecting a little box of the list on the right, the "browser" enters a state that displays detail view of data.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THZhgeO70kI/AAAAAAAAAfU/8PeNTe3u69Q/s1600/detail.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 142px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THZhgeO70kI/AAAAAAAAAfU/8PeNTe3u69Q/s320/detail.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509698404633793090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Whenever in either the abstract or detail state, once the grey-out area or the little close button [x] got a click on it, the browser goes back to hidden state. And, the browser can switch between the abstract state and the detail state by clicking on some buttons.&lt;br /&gt;&lt;br /&gt;So, it sounds strict forward and thus my very first naive attempt was to implement it by just using the event-driven approach which i explicitly controlled the hide/show and shrink/expand line-by-line with the help of some if-else statements.&lt;br /&gt;&lt;br /&gt;But after doing that for 2-3 days... the mess becomes not-that-easy to manage and little UI bugs come out from those event handler blocks. I had to trace those handler blocks and to find out where the UI effect went wrong. So, i decided to rewrite the entire mess with the &lt;a href="http://en.wikipedia.org/wiki/State_pattern"&gt;GoF State Pattern&lt;/a&gt; (spending half an hour or so in implementing that) and post it here :P&lt;br /&gt;&lt;br /&gt;As i wrote, the "browser" has some states {hidden, abstract, detail} and each state will transit to each another triggered by some events. It is pretty nice that the situation aligns to the state pattern perfectly. So, what i need to do with javascript is to implement a browser object that holds a state object where the state object references to either a hidden or abstract or detail state object.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THZsDIvt27I/AAAAAAAAAf0/TSGTekE0-wo/s1600/state_pattern.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 140px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THZsDIvt27I/AAAAAAAAAf0/TSGTekE0-wo/s320/state_pattern.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5509709995277409202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above class diagram shows some of the details of my implementation. The enter() function of HiddenState is to hide the browser while the paint() function of it is to show the browser and transits the browser state from hidden to abstract. When AbstractState is set, it's enter() function displays the abstract content. Upon some events like button click, browser's roll() function is called and delegated to AbstractState roll() function where DetailState is going to be entered.&lt;br /&gt;&lt;br /&gt;The full implementation of this "browser" is available at &lt;a href="http://github.com/mrkschan/learning-repo/blob/master/web/view2.jsp#L323"&gt;github&lt;/a&gt; (line 323-559). Although it's pretty long (i already skipped implementing the inheritance :P), the "browser" now is simply mixing the State pattern and UI event handlers for ui transition, effects, and content displaying. If you trace further down the &lt;a href="http://github.com/mrkschan/learning-repo/blob/master/web/view2.jsp#L591"&gt;source&lt;/a&gt;, you will find my naive strict forward implementation of the "browser" where i believe it's pretty a mess to manage :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5797218552586595340?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5797218552586595340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5797218552586595340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5797218552586595340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5797218552586595340'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/08/gof-state-pattern-implemented-in.html' title='GoF State Pattern implemented in Javascript UI component'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/THZhhGN4nYI/AAAAAAAAAfk/6iOMlSF2KGA/s72-c/hidden.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1732004663239405447</id><published>2010-08-24T20:44:00.010+08:00</published><updated>2010-08-24T20:57:25.266+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>hacker...</title><content type='html'>in these few days, i was packing my desktop in school as i'm leaving it very soon. From the desktop, i found something which is GREAT and got my focus.&lt;br /&gt;&lt;br /&gt;flying back to 2009 autumn, there was a &lt;a href="http://www.zeuux.org/campaign/zeuux-summit-2009.cn.html"&gt;zeuux summit&lt;/a&gt; held in CityU. It was my pleasure to see Richard Stallman and Akira Urushibata there.&lt;br /&gt;&lt;br /&gt;And, what i found in my desktop is Akira's excellent presentation "slide". Enjoy it :D&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAUa05WKI/AAAAAAAAAdk/RwLlEzTYna4/s1600/s010.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAUa05WKI/AAAAAAAAAdk/RwLlEzTYna4/s320/s010.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958226235349154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAUxjn-SI/AAAAAAAAAds/MuDnA-osw80/s1600/s020.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAUxjn-SI/AAAAAAAAAds/MuDnA-osw80/s320/s020.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958232336922914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVMNnD2I/AAAAAAAAAd0/PEPVsY3VzJA/s1600/s030.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVMNnD2I/AAAAAAAAAd0/PEPVsY3VzJA/s320/s030.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958239492345698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVtk5YXI/AAAAAAAAAd8/ONA4YsQmiVg/s1600/s040.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVtk5YXI/AAAAAAAAAd8/ONA4YsQmiVg/s320/s040.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958248448385394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVygQLtI/AAAAAAAAAeE/c0mye_D_TqI/s1600/s050.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAVygQLtI/AAAAAAAAAeE/c0mye_D_TqI/s320/s050.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958249771085522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAkveiZSI/AAAAAAAAAeM/ydqQxXVKaUw/s1600/s060.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAkveiZSI/AAAAAAAAAeM/ydqQxXVKaUw/s320/s060.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958506656621858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAlPIaoiI/AAAAAAAAAeU/oCBfUh9VU9s/s1600/s070.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAlPIaoiI/AAAAAAAAAeU/oCBfUh9VU9s/s320/s070.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958515153773090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAlXg-xUI/AAAAAAAAAec/I6H1_e_uFoQ/s1600/s080.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/THPAlXg-xUI/AAAAAAAAAec/I6H1_e_uFoQ/s320/s080.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958517404288322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/THPAl7xWIuI/AAAAAAAAAek/YeMoyJLd-38/s1600/s090.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/THPAl7xWIuI/AAAAAAAAAek/YeMoyJLd-38/s320/s090.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958527136604898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAmUSP7GI/AAAAAAAAAes/Y-RX-viIzBg/s1600/s100.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAmUSP7GI/AAAAAAAAAes/Y-RX-viIzBg/s320/s100.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958533717060706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAwZ6bEmI/AAAAAAAAAe0/-e58x9TX61w/s1600/s110.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAwZ6bEmI/AAAAAAAAAe0/-e58x9TX61w/s320/s110.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958707026432610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAwhNyS0I/AAAAAAAAAe8/mp04V4t8dr4/s1600/s120.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/THPAwhNyS0I/AAAAAAAAAe8/mp04V4t8dr4/s320/s120.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958708986694466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAxD_uGeI/AAAAAAAAAfE/qx-lR8EHrCc/s1600/s130.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAxD_uGeI/AAAAAAAAAfE/qx-lR8EHrCc/s320/s130.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958718322940386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAxuWkiXI/AAAAAAAAAfM/sJEOjFB_xRM/s1600/s140.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAxuWkiXI/AAAAAAAAAfM/sJEOjFB_xRM/s320/s140.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5508958729693071730" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1732004663239405447?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1732004663239405447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1732004663239405447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1732004663239405447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1732004663239405447'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/08/hacker.html' title='hacker...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/THPAUa05WKI/AAAAAAAAAdk/RwLlEzTYna4/s72-c/s010.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8728199375840774105</id><published>2010-08-03T13:46:00.006+08:00</published><updated>2010-08-03T14:41:20.484+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>python decorator for input validation</title><content type='html'>I was reading how decorator in python can be used to &lt;a href="http://wiki.python.org/moin/PythonDecoratorLibrary#StateMachineImplementaion"&gt;state machine&lt;/a&gt;... And, wonder, can this also apply to input validation for web framework like web.py.&lt;br /&gt;&lt;br /&gt;I tried the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def getInput():&lt;br /&gt;    ''' simulate web.input() for web.py framework '''&lt;br /&gt;    return {&lt;br /&gt;        'x': 'banananaa',&lt;br /&gt;        'y': None,&lt;br /&gt;        'z': 'zz',&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;def validate_required(rules):&lt;br /&gt;    ''' validation decorator '''&lt;br /&gt;    def wrapper(method):&lt;br /&gt;        ''' wrapping the actual handler '''&lt;br /&gt;        def validate(*args, **kwargs):&lt;br /&gt;            ''' validation take places according to rules '''&lt;br /&gt;            inputs = getInput()&lt;br /&gt;            for k in inputs.keys():&lt;br /&gt;                if k in rules: f = rules[k]&lt;br /&gt;                else: continue&lt;br /&gt;                input = inputs[k]&lt;br /&gt;                if not f(input):&lt;br /&gt;                    out = 'Invalid input %s - %s' % (k, input)&lt;br /&gt;                    print out # or raise Exception here to stop execution&lt;br /&gt;            return method(*args, **kwargs)&lt;br /&gt;        return validate&lt;br /&gt;    return wrapper&lt;br /&gt;&lt;br /&gt;class Handler:&lt;br /&gt;    rules = {&lt;br /&gt;        'x': lambda(x): len(x) &gt; 0,&lt;br /&gt;        'y': lambda(y): y is not None,&lt;br /&gt;        'z': lambda(z): z is not None and len(z) &gt; 3,&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @validate_required(rules)&lt;br /&gt;    def POST(self):&lt;br /&gt;        print 'do something'&lt;br /&gt;&lt;br /&gt;# simulate request handling&lt;br /&gt;h = Handler()&lt;br /&gt;h.POST()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8728199375840774105?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8728199375840774105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8728199375840774105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8728199375840774105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8728199375840774105'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/08/python-decorator-for-input-validation.html' title='python decorator for input validation'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5506326035096959542</id><published>2010-07-17T14:38:00.018+08:00</published><updated>2010-09-15T14:30:30.620+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>Ubuntu Enterprise Cloud: Experiencing the "Cloud" #2</title><content type='html'>Continue from &lt;a href="http://mrkschan.blogspot.com/2010/07/ubuntu-enterprise-cloud-experiencing.html"&gt;last post&lt;/a&gt;, after solving the booting problem of vm instance (The cause of this problem is just my silly mistake which i ask vm to boot from a kernel image instead of vm image); several observations are obtained.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Observation-1&lt;br /&gt;---&lt;br /&gt;If you write to the root filesys of vm instance, the wrote data will not be saved to WSC when the instance is terminated. But, euca2ools provides "euca-bundle-vol" utility to "upload" a local filesys of an instance to WSC. That's to say ... u have to create another root filesys copy on WSC to save your write.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Observation-2&lt;br /&gt;---&lt;br /&gt;If a volume attached to 1 vm instance, it cannot be attached to other at the same moment unless it is detached. So, if you wanna host a shared data pool on eucalyptus, you have to use several vm instances to host nosqldb like mongodb or cassandra. And each of these instances has dedicated volume attached. Save your data via NoSQL :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Observation-3&lt;br /&gt;---&lt;br /&gt;With eucalyptus managed network setting, network access to vm instances is controlled by security group. A security group will maintain a set of in-bound rules likes below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;PERMISSION admin default ALLOWS tcp 22 22 FROM CIDR 144.214.0.0/16&lt;br /&gt;PERMISSION admin default ALLOWS tcp 22 22 FROM CIDR 10.2.0.0/16&lt;br /&gt;PERMISSION admin default ALLOWS icmp 0 0 FROM CIDR 10.2.0.0/16&lt;br /&gt;PERMISSION admin default ALLOWS icmp 0 0 FROM CIDR 144.214.0.0/16&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For out-bound rules, setup firewall within the vm instances. Eucalyptus does not manage that.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Observation-4&lt;br /&gt;---&lt;br /&gt;As with eucalyptus managed private network, vm instances may use private IP address. To access them, you have to be connected to an instance at first and use the private IP address as locator. That's to say, you need to have at least 1 public IP address that the outside world can connect to an instance. &lt;br /&gt;&lt;br /&gt;If you configured to use vlan enabled managed network, vm instances of different security group will have different subnet assigned. The virtual network isolation is done by this feature. To allow two subnet to communicate, add in-bound rules to the security group.&lt;br /&gt;&lt;br /&gt;(But i'm still trying the network config, may have update on this later)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Personal opinion in managing the cloud with client tool&lt;br /&gt;---&lt;br /&gt;Hybridfox is great! But euca2ools with just cli is simple and even more great. I personally prefer euca2ools.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's next??&lt;br /&gt;---&lt;br /&gt;Go ahead to host private AppEngine - &lt;a href="http://code.google.com/p/appscale/"&gt;appsacle&lt;/a&gt;. But, don't know whether i can get it managed with such a limited "availability" zone&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5506326035096959542?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5506326035096959542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5506326035096959542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5506326035096959542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5506326035096959542'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/07/ubuntu-enterprise-cloud-experiencing_17.html' title='Ubuntu Enterprise Cloud: Experiencing the &quot;Cloud&quot; #2'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5451761734694391529</id><published>2010-07-16T21:10:00.037+08:00</published><updated>2010-09-15T14:30:16.799+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>Ubuntu Enterprise Cloud: Experiencing the "Cloud" #1</title><content type='html'>Continue from last &lt;a href="http://mrkschan.blogspot.com/2010/07/ubuntu-enterprise-cloud-explaining.html"&gt;post&lt;/a&gt;, this post documents my experience in setting up the ubuntu cloud.&lt;br /&gt;&lt;br /&gt;Here is the resources i used to conduct the experiment:&lt;br /&gt;&lt;br /&gt;* machine1 [Physical] - PentiumD 3GHz (core x2, VT-enabled), 2Gb RAM (512Mb x4), 200Gb HDD, NIC x1&lt;br /&gt;* machine2 [vSphere VM] - Xeon X5560 2.8GHz (core x4), 2GB RAM, 100Gb HDD, NIC x2&lt;br /&gt;* machine3 [vSphere VM] - Xeon X5560 2.8GHz (core x4), 2GB RAM, 200Gb HDD, NIC x1&lt;br /&gt;* USB Thumb 1Gb x1&lt;br /&gt;* CR-RW x2&lt;br /&gt;&lt;br /&gt;To mostly align the &lt;a href="http://cssoss.files.wordpress.com/2010/05/eucalyptus_cloud.png?w=600&amp;amp;h=467"&gt;architecture&lt;/a&gt;, the role of machines follow.&lt;br /&gt;* machine1 - NC&lt;br /&gt;* machine2 - CLC, WSC&lt;br /&gt;* machine3 - CC, SC&lt;br /&gt;&lt;br /&gt;And, these machines are connected by a single subnet (private network) 10.1.0.x while machine2 with another NIC connected to a "public" network.&lt;br /&gt;&lt;br /&gt;Setup of the machines "strictly" follows the &lt;a href="http://cssoss.files.wordpress.com/2010/06/book_eucalyptus_beginners_guide_uec_edition1.pdf"&gt;user guide&lt;/a&gt; except the setup of NTP server. A  public IP address is provided to CC as the "elastic" address of VM instances. The availability zone is resulted as follow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/TEBjU-492tI/AAAAAAAAAcw/HdxzCtfQrjQ/s1600/availability-zones.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 230px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/TEBjU-492tI/AAAAAAAAAcw/HdxzCtfQrjQ/s320/availability-zones.png" alt="" id="BLOGGER_PHOTO_ID_5494500757522471634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Each row of the table describes a particular type of VM that can be created. The availability of particular type can be found in the "free/max" column. The "max" is computed according to the number of CPU in NC machines by default (in this case, exactly 2). The number of CPU in NC can be shrank or grew according to config (see edit 2010-07-19). The cpu, ram, disk of particular type can be configured via the web interface of CLC.&lt;br /&gt;&lt;br /&gt;After the installation of controllers, it's time to prepare the VM image. VM image has to be prepared by user and uploaded to WSC. The preparation requires KVM in UEC. If you don't wanna prepare your own image, just download it from ubuntu as shown.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBkrPS6mPI/AAAAAAAAAc4/ALcg4SRXtC4/s1600/prepare-images.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 209px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBkrPS6mPI/AAAAAAAAAc4/ALcg4SRXtC4/s320/prepare-images.png" alt="" id="BLOGGER_PHOTO_ID_5494502239395027186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After uploading the kernel, initrd ramdisk, and root file system (the vm image) to WSC, that's the time to use &lt;a href="http://code.google.com/p/hybridfox/"&gt;Hybridfox&lt;/a&gt; to start VM instances. Selects the uploaded image and launches VM instances according to that image.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBltjYUXqI/AAAAAAAAAdA/sSZiyCGmgz0/s1600/running.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 262px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBltjYUXqI/AAAAAAAAAdA/sSZiyCGmgz0/s320/running.png" alt="" id="BLOGGER_PHOTO_ID_5494503378657762978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When NC receives the request to launch VM instances, it retrieves the VM image from WSC. This is the "pending" phase of VM instance. Once image is loaded, VM instance gets booted and entering "running" phase. When VM instance receives shutdown request, it enters "shutting down" phase and finally goes to "terminated" phase. Phase change follows.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://cssoss.files.wordpress.com/2010/05/instancelifecycle.png" /&gt;&lt;br /&gt;&lt;br /&gt;In this experiment, i try to launch 2 instances so that there will not be enough "elastic" IP addresses for the instances. My observation is that when launching the first instance, it acquires the "elastic" IP address. When launching the second instance, a complain is shown and asking to launch the instance with "private" address. Indeed, Eucalyptus CC contains a DHCP server and manages VLAN for "private" address. The "elastic" IP address can be detached from and attached to any instances at any time frame.&lt;br /&gt;&lt;br /&gt;Let's get back to the last figure showing Hybridfox.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBltjYUXqI/AAAAAAAAAdA/sSZiyCGmgz0/s1600/running.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 262px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/TEBltjYUXqI/AAAAAAAAAdA/sSZiyCGmgz0/s320/running.png" alt="" id="BLOGGER_PHOTO_ID_5494503378657762978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you may noticed, the console output of the VM instance in the figure shows error message during the boot time. That's my next problem need to be solved.&lt;br /&gt;&lt;br /&gt;***EDIT 2010-07-17*** The boot problem is solved... the cause is that i made a mistake to ask a VM to boot from a kernel image, instead of a vm image :P Now, i can ssh to the vm instance ^^"&lt;br /&gt;&lt;br /&gt;***EDIT 2010-07-19*** The max of "Free/Max" of a node can be configured by NC's config MAX_CORES, MAX_MEM, and SWAP_SIZE, according to &lt;a href="http://open.eucalyptus.com/forum/more-instances-nc-cores-existing"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;***EDIT 2010-07-20*** For MAX_MEM configured more than actual physical memory, sorry. See &lt;a href="http://community.eucalyptus.com/forum/maxmem-it-possible-use-more-memory"&gt;this post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Something happened during the setup...&lt;br /&gt;&lt;br /&gt;I was trying to burn ubuntu-1004-amd64 to one of the CD-RW. When using the CD-RW to install ubuntu onto the physical machine, it blamed that the disc was corrupted. Then, i tried burning another CD-RW... same corruption happened. Lastly, i used USB thumb as live-usb and got no file corruption.... As a result, i spent about 2 hours in doing this.&lt;br /&gt;&lt;br /&gt;This is the first time i managed a machine with 2 legs (NIC x2) ... Some mis-configurations existed and thus slowing down the entire experiment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5451761734694391529?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5451761734694391529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5451761734694391529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5451761734694391529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5451761734694391529'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/07/ubuntu-enterprise-cloud-experiencing.html' title='Ubuntu Enterprise Cloud: Experiencing the &quot;Cloud&quot; #1'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/TEBjU-492tI/AAAAAAAAAcw/HdxzCtfQrjQ/s72-c/availability-zones.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1567904212097058824</id><published>2010-07-14T22:29:00.013+08:00</published><updated>2010-09-15T14:29:58.547+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>Ubuntu Enterprise Cloud: Explaining the "Cloud"</title><content type='html'>Ubuntu Enterprise Cloud (UEC) depends heavily on KVM as the hypervisor and Eucalyptus as the elastic cloud solution.&lt;br /&gt;&lt;br /&gt;In this post, a brief explanation of the Eucalyptus solution will be given.&lt;br /&gt;[Disclosure: I just read a &lt;a href="http://open.eucalyptus.com/documents/ccgrid2009.pdf"&gt;conference paper&lt;/a&gt; from Eucalyptus and a &lt;a href="http://cssoss.files.wordpress.com/2010/06/book_eucalyptus_beginners_guide_uec_edition1.pdf"&gt;user guide&lt;/a&gt; to write this post... Some info. may not be detailed or having mistake. If there's any mistake, please point it out directly. I will later setup a private cloud for testing soon.]&lt;br /&gt;&lt;br /&gt;Here is the architecture of Eucalyptus (direct linking from user guide).&lt;br /&gt;&lt;img src="http://cssoss.files.wordpress.com/2010/05/eucalyptus_cloud.png?w=600&amp;amp;h=467" /&gt;&lt;br /&gt;&lt;br /&gt;There are few components in the architecture:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cloud Controller, CLC (Interface with user)&lt;/li&gt;&lt;li&gt;Cluster Controller, CC (Sits in between CLC and NC, governing a cluster of node)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Node Controller, NC (Live in a node)&lt;/li&gt;&lt;li&gt;Walrus Storage Controller, WS3 (Keeping VM's kernel, root filesystem, and ramdisk)&lt;/li&gt;&lt;li&gt;Storage Controller, SC (The datastore)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Indeed, the very basic setup of UEC requires two machine. One of them MUST have Intel-VT / AMD-V enabled CPU for hardware virtualization acceleration (requirement of KVM indeed). So, let's say the first machine without Intel-VT / AMD-V CPU is named "uec-master" while another machine with the CPU is named "uec-node".&lt;br /&gt;&lt;br /&gt;The Node Controller is going to be installed in the machine uec-node. NC is a software package that communicates with the KVM installed in uec-node. The communication is carried via libvirt. The "elastic" VM instances are going to be deployed onto uec-node running on top of KVM.&lt;br /&gt;&lt;br /&gt;Other four controller: CLC, CC, WSC, SC can be installed on another machine uec-master. CLC is the software package that interfaces with user. CC is the package that masters a set of nodes (talking to NC directly for operations). WSC is the package to simluate Amazon S3 and maintaining the VM instance kernel, root filesys, and ramdisk. SC is the package to manage the actual datastore (volume or file space to be mounted) used by VM instances.&lt;br /&gt;&lt;br /&gt;To setup VM instances, user have to first prepare the VM kernel and root filesystem (there're tools existed to aid you). This preparation is done via KVM. That's to say client machine used to prepare VM image would probably have Intel-VT/AMD-V CPU. After packaging the kernel and root fs, user can "upload" the package via CLC to WSC.&lt;br /&gt;&lt;br /&gt;When user want to allocate resource for the VM instances, user have to assign a datastore for the instances. The datastore will be kept in SC. Once prepared, user issues instance-start to CLC and the CLC will forward the request to CC. CC will pick NC to serve the request; NC will finally load the the VM image from WSC and mount the volume from SC.&lt;br /&gt;&lt;br /&gt;Thus, there will be 1 or more instances sharing the same volume from SC. The data persistence uses AoE or iSCSI protocol (which i have no idea at all yet :P).&lt;br /&gt;&lt;br /&gt;So where does "elastic" come from? VM instances (CPU and memory resource) can be added to/removed from the cloud dynamically. SO elastic, man~ Apps running on VM instances have no idea of the CPU, memory, and the actual datastore. SO virtual, man~&lt;br /&gt;&lt;br /&gt;Note that ... "any" Amazon S3 and EC2 client application would work with Eucalyptus as they share the same SOAP interface (REST interface for datastore).&lt;br /&gt;&lt;br /&gt;Questions?&lt;br /&gt;&lt;br /&gt;*** EDIT 2010-07-17 *** When a volume is attached to 1 vm instance, it cannot be attached to other vm instances at the same moment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1567904212097058824?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1567904212097058824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1567904212097058824' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1567904212097058824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1567904212097058824'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/07/ubuntu-enterprise-cloud-explaining.html' title='Ubuntu Enterprise Cloud: Explaining the &quot;Cloud&quot;'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5860589291963605298</id><published>2010-06-08T14:50:00.005+08:00</published><updated>2010-06-08T14:53:39.014+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Quicksilver String Ranking Java Port</title><content type='html'>I search the phrase "Quicksilver String Ranking Java Port" in google... cannot find some interesting result...&lt;br /&gt;&lt;br /&gt;so i just wrote one - &lt;a href="http://github.com/mrkschan/qs-score-java/blob/master/QSString.java"&gt;http://github.com/mrkschan/qs-score-java/blob/master/QSString.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One point to note is that ... In Java (v6)... String is a final class that cannot be extended... so i have to wrap a string and make this class less convenient.&lt;br /&gt;&lt;br /&gt;Rationale for this: i'm writing a string filter for a eclipse plug-in which i wanna use a fast and excellent string ranking algorithm. Quicksilver is the way to go :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5860589291963605298?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5860589291963605298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5860589291963605298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5860589291963605298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5860589291963605298'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/06/quicksilver-string-ranking-java-port.html' title='Quicksilver String Ranking Java Port'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3296321323427390800</id><published>2010-05-08T09:15:00.004+08:00</published><updated>2010-05-08T09:25:13.191+08:00</updated><title type='text'>香港紅十字會的來信</title><content type='html'>內容: 請繼續支持捐血救人 :) 下為你新的捐血卡 :P&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/S-S7qFs7K2I/AAAAAAAAAcA/6IPpcDfWJwg/s1600/DSC00415.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/S-S7qFs7K2I/AAAAAAAAAcA/6IPpcDfWJwg/s320/DSC00415.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468702179294128994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;其實睇下張舊卡, 就知道原來我兩年先捐得五次... 數量什少 =.=... (男性一年可以捐四次的呢) &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/S-S8AR5KHPI/AAAAAAAAAcI/y6SuJm9VUX0/s1600/DSC00414.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/S-S8AR5KHPI/AAAAAAAAAcI/y6SuJm9VUX0/s320/DSC00414.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5468702560523787506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;玩開 FB 的朋友, 可以加 &lt;a href="http://apps.facebook.com/hkrcbts"&gt;此App&lt;/a&gt; 留意紅十字會最近消息&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www5.ha.org.hk/rcbts/Image/e-bannerOA(Chin).jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 443px; height: 299px;" src="http://www5.ha.org.hk/rcbts/Image/e-bannerOA(Chin).jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3296321323427390800?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3296321323427390800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3296321323427390800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3296321323427390800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3296321323427390800'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/05/blog-post.html' title='香港紅十字會的來信'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/S-S7qFs7K2I/AAAAAAAAAcA/6IPpcDfWJwg/s72-c/DSC00415.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5552909420713377153</id><published>2010-04-13T13:41:00.015+08:00</published><updated>2010-04-13T15:33:08.507+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Given a sequence of increasing values, find ...</title><content type='html'>The rationale of this post is hoping to find someone give me hints on a problem: Given a sequence of increasing values, find the first value which has a significant change in the sequence.&lt;br /&gt;&lt;br /&gt;To visualize the problem: consider this sequence [1, 1, 2, 4, 6, 14, 24]&lt;br /&gt;the "value" that has a significant change may be 14.&lt;br /&gt;&lt;br /&gt;This can be plotted in a chart.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/S8QH8TC0SPI/AAAAAAAAAb0/Hay2UfeMndc/s1600/kdist.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 289px; height: 320px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/S8QH8TC0SPI/AAAAAAAAAb0/Hay2UfeMndc/s320/kdist.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5459497380765518066" /&gt;&lt;/a&gt;&lt;br /&gt;The slope in between value 6 and 14 gives a significant change, obviously.&lt;br /&gt;&lt;br /&gt;Indeed, this is a problem that i encountered when implementing the &lt;a href="http://en.wikipedia.org/wiki/DBSCAN"&gt;DBScan algorithm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;DBScan algorithm is a "density based" clustering algorithm. It takes two parameters - radius of a circle (eps), and the number of points in the circle which the circle can be considered as dense (minPts).&lt;br /&gt;&lt;br /&gt;You may think DBScan as simple as... Taking any point, a "sphere" is formed with the radius (eps) center at that point. The circle may cover other points in a N-dimensions space. If the number of points covered by the "sphere" is larger than minPts, it is dense enough to form a cluster. And that cluster further expands with the points covered by that "sphere".&lt;br /&gt;&lt;br /&gt;Finally ... points that are "closely" distanced will form a cluster and all points in the N-dimension space will form "many" cluster.&lt;br /&gt;&lt;br /&gt;An important parameter in DBScan algorithm is the radius. From the &lt;a href="http://en.wikipedia.org/wiki/DBSCAN#Parameter_Estimation"&gt;wikipedia&lt;/a&gt;, the radius can be estimated by k-distance graph. First, let's define what is k-distance. Given a point, k-distance is distance between the k-th closest point of the given point. A k-distance graph is plotted by getting k-distance of all points in the N-dimension space, sorting them and plot it out as shown above. From the graph, it is simple to get the sharp change k-distance as the eps and using k as the minPts.&lt;br /&gt;&lt;br /&gt;But, my concern is raised since it's not practical to plot 100 graph and read them all if i wanna try out k from 1 to 101. As consequence, i wanna have a algorithm to get the k-distance without looking into a visual graph.&lt;br /&gt;&lt;br /&gt;One idea flow to my mind is to compare the slopes of neighbouring k-distance. If k-distance of pt-b is much larger than that of pt-a (the point just before pt-b), then k-distance of pt-b may probably be the selected sharp change k-distance. However, what is "much larger than" in this method? A parameter of floating point? Thus, i think this method is not that practical.&lt;br /&gt;&lt;br /&gt;Another idea is to use the statistics - mean and standard deviation. Mean is the average while standard deviation is the square root of the variance. Variance is the average difference from the mean value of every point. So, standard deviation split the k-distance graph piece by piece fairly. If this is the case, I can compute the mean and make use of standard deviation to obtain a k-distance in several split away from the mean. By this method, the parameter is the number of split away from the mean value. An integer that can loop nicely :]&lt;br /&gt;&lt;br /&gt;My implementation of this method is hosted on &lt;a href="http://github.com/mrkschan/py-dbscan/blob/master/dbscan.py"&gt;github #line23&lt;/a&gt;. Anyway, i believe there must be better method to obtain k-distance "automatically"... please comment :]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5552909420713377153?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5552909420713377153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5552909420713377153' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5552909420713377153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5552909420713377153'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/04/given-sequence-of-increasing-values.html' title='Given a sequence of increasing values, find ...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/S8QH8TC0SPI/AAAAAAAAAb0/Hay2UfeMndc/s72-c/kdist.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6700636044104969726</id><published>2010-03-31T23:50:00.019+08:00</published><updated>2010-04-01T01:08:43.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Future Chromium bundles Flash ... Why.</title><content type='html'>There's a breaking news this morning from google's chromium blog - &lt;a href="http://blog.chromium.org/2010/03/bringing-improved-support-for-adobe.html"&gt;Bringing improved support for Adobe Flash Player to Google Chrome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the post ... it mentioned.. &lt;br /&gt;&lt;blockquote&gt;We believe this initiative will help our users in the following ways:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    * When users download Chrome, they will also receive the latest version of Adobe Flash Player. There will be no need to install Flash Player separately.&lt;br /&gt;&lt;br /&gt;    * Users will automatically receive updates related to Flash Player using Google Chrome’s auto-update mechanism. This eliminates the need to manually download separate updates and reduces the security risk of using outdated versions.&lt;br /&gt;&lt;br /&gt;    * With Adobe's help, we plan to further protect users by extending Chrome's “sandbox” to web pages with Flash content.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The 1st two points are trivial, but the 3rd? This is the reason why i'm writing this post.&lt;br /&gt;&lt;br /&gt;The 3rd generated my interest in knowing more about the sandbox model of Chrome and thus leading me to read their "&lt;a href="http://seclab.stanford.edu/websec/chromium/"&gt;technical report&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;In the following paragraph, i will briefly explain the architecture of Chromium based on reading their "&lt;a href="http://seclab.stanford.edu/websec/chromium/"&gt;technical report&lt;/a&gt;". (Note: I didn't read any source code of the beautiful Chromium project and their "report" was published quite a while ago. Thus, some info. below may be inaccurate or outdated but fairly enough for u to get understand with their sandbox model.)&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;Here we go.&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;In the chromium architecture, the web browser is separated into two core components: the rendering engine and the browser kernel.&lt;br /&gt;&lt;br /&gt;Here is the task assignments mentioned in the report.&lt;br /&gt;&lt;br /&gt;Rendering Engine: HTML parsing, CSS parsing, Image decoding, Javascript interpreter, Regular expressions, Layout, Document object model, Rendering, SVG, XML parsing, XSLT&lt;br /&gt;&lt;br /&gt;Browser Kernel: Cookie database, History database, Password database, Window management, Location bar, Safe browsing blacklist, Network stack, SSL/TLS, Data cache, Download manager, Clipboard&lt;br /&gt;&lt;br /&gt;And, both of the components can carry URL parsing and Unicode parsing.&lt;br /&gt;&lt;br /&gt;From their design philosophy, the rendering engine is always subjected to a bunch of known / unknown vulnerabilities. Thus, they decided to grant limited privileges to the rendering engine while letting the browser kernel to have the user's privileges.&lt;br /&gt;&lt;br /&gt;These two components are communicating with IPC (Inter-Process communication) from a "big" picture in the report and the browser kernel provides API for the rendering engine to use its services.&lt;br /&gt;&lt;br /&gt;Before i continue, here is a remark. Their report mentioned:&lt;br /&gt;&lt;blockquote&gt;Chromium's security architecture mitigates approximately 70% of critical browser vulnerabilities that let an attacker execute arbitrary code.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Where is the rest 30%? You will, perhaps, know later.&lt;br /&gt;&lt;br /&gt;Whenever a user create a new tab in Chrome, the browser kernel fork() a new rendering engine with a sandbox. What is the sandbox? On windows, it's the Windows Security Manager.  The rendering engine runs with a "restricted security token", that is used by the security manager, on a Windows Job Object. Whenever some action is performed by the rendering engine, the manager will check for privileges.&lt;br /&gt;&lt;br /&gt;It sounds work ... but some known limitations in this M$ windows sandbox.&lt;br /&gt;[1] FAT32 - FAT32 does not support the access control list and thus user's USB thumb with FAT32 format may be read or write by a compromised rendering engine.&lt;br /&gt;[2] Misconfigured objects - Some application create objects with NULL DACLs. This will let security manager ignore the security token owned by rendering engine. (But NTFS mitigated that)&lt;br /&gt;[3] TCP/TP - Theoretically, rendering engine can create any socket as it wishes... (But Win API require a "handle", which the rendering engine will not hv, to open a socket ... a bug in Win API?? or a feature??)&lt;br /&gt;&lt;br /&gt;As a result of using the sandbox, even a rendering engine is compromised by buffer overflow of HTML parser, integer overflow of regex, or what-so-ever related to attack against rendering engine... [a] the attack can only use the restricted sandbox to do the bad ... [b] or invoke the IPC with Chrome's browser kernel ... [c] or if m$ security manager hv bug, sandbox broke too&lt;br /&gt;&lt;br /&gt;You may noticed that [a] is assumed to be secured and [c] has nothing to do at all since m$ is "closed". The only problem left is [b] ... attacker insert code to invoke browser kernel to do bad.&lt;br /&gt;&lt;br /&gt;Now, let's see how's kernel work.&lt;br /&gt;&lt;br /&gt;Browser kernel API handles a few things. User interaction, persistent storage, and networking.&lt;br /&gt;&lt;br /&gt;User interaction includes - rendering and user input. &lt;br /&gt;Rendering is handled by the rendering engine. Unparsed HTML is sent to the engine and a bitmap is returned to the browser kernel. The kernel uses the trick like "double-buffering" for the bitmap and presents it onto screen.&lt;br /&gt;User input either occurs on Chrome's body (they call it browser chrome) like location bar or within the web page. For former case, kernel will handle it. For latter case, kernel asks rendering engine to render the input as bitmap again. Even rendering engine is compromised, it cannot receives keyboard signals.&lt;br /&gt;&lt;br /&gt;Persistent storage includes - upload and download.&lt;br /&gt;Upload is handled by kernel. When user selects certain file, kernel will ask to render the selection path and keeps records of which file the user granted to the web (engine) to access. Even compromised, the engine cannot touch those files which are not granted yet.&lt;br /&gt;Download is also handled by kernel. Kernel API provides method to invoke a download action which the kernel will blacklist some filename like desktop.ini (M$ vulnerable feature). Even a rendering engine is compromised, the engine cannot ask the kernel to download some file to anywhere on user's disk.&lt;br /&gt;&lt;br /&gt;Networking includes URL requests.&lt;br /&gt;Rendering engine itself is allowed to fire requests for protocol like http, https, ftp, etc. But not the file://&lt;br /&gt;File opening is handled by browser kernel when user type in file:// in the location bar. The file is rendered in a dedicated rendering engine.&lt;br /&gt;&lt;br /&gt;After the long boring things... you will noticed that ... Chrome actually deals with 3 security threats. [1] Persistent Malware, [2] Transient Keylogger, and [3] File Theft. Other threat like phishing, origin isolation, firewall circumvention, and website vulnerabilities are not in scope of Chromium written in the "&lt;a href="http://seclab.stanford.edu/websec/chromium/"&gt;technical report&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Last but not least ... why bundle Flash (a "the most widely used web browser" plugin?) There is a small paragraph in the report talks about plug-in. From historical reason, plug-in is a separate host process which execute outside the browser. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;In order to maintain compatibility with existing web sites, browser plug-ins cannot be hosted inside the rendering engine because plug-in vendors expect there to be at most one instance of a plugin for the entire web browser. If plug-ins were hosted inside the browser kernel, a plug-in crash would be sufficient to crash the entire browser... each plug-in runs outside of the sandbox and with the user's privileges... For example, the Flash Player plug-in can access the user's microphone and webcam, as well as write to the user's file system (to update itself and store Flash cookies).&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Chromium also contains an option to run existing plug-ins inside the sandbox. To do so, run the browser with the --safe-plugins command line option. This setting is experimental and might cause instability or unexpected behavior.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So... you know why "With Adobe's help, we plan to further protect users by extending Chrome's “sandbox” to web pages with Flash content." (Flash player like m$ is "closed")&lt;br /&gt;&lt;br /&gt;The chromium team phoned adobe and says... let's work together to secure Flash and silent those who against Flash coz of security concern in unknown implementation flaws. H.264 video codec will keep on our Utube. (this paragraph is some "bs" that comes to my mind)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6700636044104969726?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6700636044104969726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6700636044104969726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6700636044104969726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6700636044104969726'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/03/future-chromium-bundles-flash-why.html' title='Future Chromium bundles Flash ... Why.'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-23785792723407811</id><published>2010-02-11T18:22:00.003+08:00</published><updated>2010-02-11T22:38:01.315+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>My 1st jQuery plugin - jQuery.fn.timeSink</title><content type='html'>My first contact with jQuery was last summer when i was exploring Django. Indeed, i just used jQuery autocomplete plugin only. In this month, I have another project aimed to explore &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API"&gt;ESAPI &lt;/a&gt;and &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;. The project is in its very early stage that just allows student submission for a course assignment. As i don't want to use any framework that may distribute my experience with ESAPI and MongoDB, I opt to use pure Servlet and JSP. (Although i prefer python, but my "boss" prefer java anytime.)&lt;br /&gt;&lt;br /&gt;This project has a JSP to list out all submissions from student. My first intuition is to provide a keyword filter (&lt;a href="http://ejohn.org/blog/jquery-livesearch/"&gt;jquery-livesearch-plugin&lt;/a&gt; that uses quicksilver algorithm for filtering) to assist information lookup. Then my boss ask me.. in a run long, can it be filtered by time? Then, django admin page comes to my mind. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://media.djangoproject.com/img/doc/tutorial/admin14t.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 142px;" src="http://media.djangoproject.com/img/doc/tutorial/admin14t.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Django admin page has a very nice time-based filter on the right to filter out entries. So, my question is, can I have a time-based filter to work with the nice quicksilver filter? I did a brief search on google and find none such time-based filter for jQuery. Thus... I have to create one for my purpose.&lt;br /&gt;&lt;br /&gt;You may goto &lt;a href="http://github.com/mrkschan/jquery-timesink-plugin"&gt;github&lt;/a&gt; to obtain a copy of the so called "time sink" plugin. I call it a "sink" because it uses a time sieve... (a sink always has a sieve to prevent big particles entering the pipe... right?) There is a demo html and you will see how can the plugin be used with two separate html-list.&lt;br /&gt;&lt;br /&gt;You may also checkout the &lt;a href="http://github.com/mrkschan/learning-repo/blob/master/web/view.jsp"&gt;JSP&lt;/a&gt; that actually migrates the two different filters applying on the same set of items. They cooperate with each other using custom events dispatched from those filters.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/S3PabP0F8KI/AAAAAAAAAag/9VcSvPgd_f4/s1600-h/liveUpdate_timeSink.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/S3PabP0F8KI/AAAAAAAAAag/9VcSvPgd_f4/s320/liveUpdate_timeSink.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5436929336802668706" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-23785792723407811?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/23785792723407811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=23785792723407811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/23785792723407811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/23785792723407811'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/02/my-1st-jquery-plugin-jqueryfntimesink.html' title='My 1st jQuery plugin - jQuery.fn.timeSink'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/S3PabP0F8KI/AAAAAAAAAag/9VcSvPgd_f4/s72-c/liveUpdate_timeSink.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-641887190634609387</id><published>2010-01-29T09:16:00.004+08:00</published><updated>2010-01-29T14:16:39.205+08:00</updated><title type='text'>耍盲雞@Dialogue-in-the-Dark</title><content type='html'>耍盲雞 - 兒時玩意. 其中一人矇住雙眼, 其他人以叫聲或其他行動引導之, 矇眼者只要抓到任何一人, 遊戲結束.&lt;br /&gt;(電視劇裡, 通常被抓到的是位美女)&lt;br /&gt;&lt;br /&gt;昨夜有幸到 &lt;a href="http://www.dialogue-in-the-dark.hk/"&gt;Dialogue-in-the-Dark&lt;/a&gt; 的體驗館 (brochure在&lt;a href="http://www.dialogue-in-the-dark.hk/download/DiD1.jpg"&gt;這 &lt;/a&gt;). 那裡不是跟你玩耍盲雞, 而是分組在一個完全黑暗的地方, 嘗試去感受一下失明人士的生活.&lt;br /&gt;&lt;br /&gt;每組人, 都有一根盲公竹以及一位失明人士作嚮導. 在進入第一間房間之前, 到了一個跟嚮導會合的地方. 嚮導說: "我在這裡, 你們聽著聲音來找我吧". 這應該就是我們第一個 "training" 吧. 這裡, 小弟隨了靠聲音"導航"外, 沒其他法子吧...&lt;br /&gt;&lt;br /&gt;到了第一個房間, 那裡是一個公園的擺設吧.. 有一些小樹放了在那裡.. 嚮導說: "試找一下有什麼在這, 摸到人也不怕, 這一刻你摸他, 下一刻他摸你呢..." 其實, 只靠摸又怎樣知道是什麼樹呢... 小弟到這一刻都不知道是什麼樹... 可能是鐵樹吧 :p 大家都說了些樹的名字吧.. 嚮導說: "其實我都不知道是什麼呢.." 他從來沒有機會看過樹. 接著, 那房間要走過一條小橋... 大家走上橋時, 嚮導"可惡的"搖晃小橋... well ... What's Happening!? 0rz... 小弟只知道...很暈呢-.-&lt;br /&gt;&lt;br /&gt;房間跟房間之間, 有一條小道連接... 嚮導說: "摸著你們左邊的牆一直走" ... well, 左邊是人呢 lol... 當一直摸著牆走時... 手跟我說牆不見了.... 唯一的"導航"工具突然失去 -.- 汗! 嚮導說: "摸清楚少少..." 原來是個 左彎 =]&lt;br /&gt;&lt;br /&gt;第二個房間, 到了"馬路"旁... 那裡有間雜貨店吧... 嚮導說: "摸下有什麼"... 除了一些熟悉的水果, 其他東西的不知道是什麼呢 ... 雜貨店對面有一架單車, 組友們說了有單車, 但我找了很久才找到呢 :p 人笨也~ 之後走到 "馬路旁" .... 那盲人輔導線是他媽的難感受得到呢-.- 馬路旁有輛車, 有賣公仔的店, 及有個電話... 嚮導說: "試下打電話" =] 0rz&lt;br /&gt;&lt;br /&gt;第三間房間, 是一個音樂廳吧... 坐著就是聽音樂... 但其實... 其間小弟的緊張心情只有些許改善, 因為.. 座著聽的時候... 很期待會有什麼發生呢... &lt;br /&gt;&lt;br /&gt;最後一個房間很深感受... 要買賣呢... 那裡有些飲品賣... well 小弟沒有散紙, 摸出銀包時... 摸著頭腦問... 10蚊 or 20蚊紙 收唔收 -.-" 事實上我都不知道自己的紙幣是 10蚊 or 20蚊 =.=..... 憑著自己放錢的習慣... 拿了一張"疑似" 10蚊紙出來 .. 店員肯定的跟我說, 那的確是 10蚊紙, 他拿了包 維x奶 給我.. 完成交易!! 之後找了個座.. 跟嚮導聊聊天... 因嚮導是先天的視力障礙, 自小看不清東西, 要東西放到很近才有些許影像... 小弟又一次發揮白痴精神.. 問了題白痴問題: "你看東西是朦還是黑?" 嚮導: "我根本不知道什麼是朦" ...&lt;br /&gt;&lt;br /&gt;過後... 跟友人研究著... 紙幣有什麼 token 給失明人士呢 ~.~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-641887190634609387?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/641887190634609387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=641887190634609387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/641887190634609387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/641887190634609387'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/01/dialogue-in-dark.html' title='耍盲雞@Dialogue-in-the-Dark'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5188078764086867222</id><published>2010-01-27T23:32:00.011+08:00</published><updated>2010-01-28T00:39:43.591+08:00</updated><title type='text'>五區總辭, 你知多少?</title><content type='html'>其實, 小弟身邊不斷有人問, 五區總辭, 為何變相"公投"? 小弟現以自己有限知識, 跟各位說一下, 如有錯誤, 請插之!&lt;br /&gt;&lt;br /&gt;源由: 泛民眾認為, 立法會議席一天仍有功能組別, 一天沒有"真普選".&lt;br /&gt;原因: 功能組別是由某一群界別人士推選出來的代表人, 就是這樣, 立法會不會是一人一票得出來, 有些人可以多投一票在功能組別 (功能組別好壞, 請各位自行研究, 這就是"公投"的目標)&lt;br /&gt;&lt;br /&gt;政府最近提出的"政改"方案, 把地方議席增加了, 同時因要維持比例不變, 功能組別議席相對亦增加. 泛民眾則認為此方案, 根本沒有進步. 因而流出... 五區總辭, 變相"公投" 的說法&lt;br /&gt;&lt;br /&gt;到底, 如何"公投"呢? 社民、公民眾訂了一些"準則", 認為補選中, 社民、公民五人得票量總和 少於 其餘黨派中五位最高得票的總和, 社民、公民眾便視之為 大眾市民支持那 "政改"方案, 社民、公民仍留在議會的便支持其方案. 否則, 反對之. (社民、公民眾訂的"準則", 請看&lt;a href="http://zh.wikipedia.org/wiki/%E4%BA%94%E5%8D%80%E7%B8%BD%E8%BE%AD#.E5.8B.9D.E6.95.97.E6.BA.96.E5.89.87"&gt;wiki&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;民建聯那群"禮義廉"則否認此仍"公投"... 因為"公投"結果只是由社民、公民眾自編自導自演. 社民、公民眾則認為, 這"公投"相對一般按比例的民意調查"更科學" (事實只有科學不科學, 沒有更科學... 這意思是更有說服力).. "禮義廉"眾則認為此乃浪費公帑. 而事實上, 這個普選只需要全港 700萬 市民, 每人花 20$ ... (其實 $20 是很多, 足夠小弟在城大兩餐 10$飯 =D)&lt;br /&gt;&lt;br /&gt;其實, 那群"禮義廉"何不像自由黨眾.. 表決不參與補選... 而在大費周章?? 大家都明白, 只要沒有人跟社民、公民眾參與補選, 他們很自然是浪費公帑的"罪人" ... 借此大費周章提高自己政治身價的一眾, 真是禮義廉!&lt;br /&gt;&lt;br /&gt;小弟個人意見: "政改"的表決, 認同需要廣泛參與的表決.. 而一般按比例的民意調查 (即 statistics 中的 random sampling by population ratio), 不能代表廣泛意見及參與. 如果沒有一個比 變相"公投" 更好的參與方法, 小弟只有支持 "公投". &lt;br /&gt;&lt;br /&gt;人是需要有選擇的, 沒有其他更好的選擇時, 選擇那唯一的選擇, 比默默接受更好.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;要清楚更多更多五區總辭的資訊... 請看 &lt;a href="http://zh.wikipedia.org/zh-tw/%E4%BA%94%E5%8D%80%E7%B8%BD%E8%BE%AD"&gt;wiki&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5188078764086867222?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5188078764086867222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5188078764086867222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5188078764086867222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5188078764086867222'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/01/blog-post.html' title='五區總辭, 你知多少?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5903263803825422604</id><published>2010-01-17T13:30:00.003+08:00</published><updated>2010-01-17T13:34:39.949+08:00</updated><title type='text'>Welcome to "China"</title><content type='html'>Just half an hour ago, i was going back to school. I met a foreign couple. They asked me: "How to go to Wong Tai Sin Temple?" The first sentence I smile and spoke: "Welcome to China". Yes! There is no typo. Welcome to "China".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E8%AD%9A%E6%83%A0%E7%8F%A0"&gt;譚惠珠&lt;/a&gt;在今天城市論壇把大家可能忽略的事實再一次翻出來 - "香港的主權不在於民, 中國才是香港的主權國..."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5903263803825422604?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5903263803825422604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5903263803825422604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5903263803825422604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5903263803825422604'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2010/01/welcome-to-china.html' title='Welcome to &quot;China&quot;'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1092919465231218016</id><published>2009-12-10T11:02:00.006+08:00</published><updated>2009-12-10T11:08:59.505+08:00</updated><title type='text'>宣傳單張</title><content type='html'>路過, 感興致, 拿.&lt;br /&gt;看了, 感有趣, 影.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SyBlRf2gzjI/AAAAAAAAAaE/ykmOopEcHYM/s1600-h/DSC00378.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SyBlRf2gzjI/AAAAAAAAAaE/ykmOopEcHYM/s320/DSC00378.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5413438103381659186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SyBlXPwJmaI/AAAAAAAAAaM/Vcr0ZTZt3Wk/s1600-h/DSC00379.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SyBlXPwJmaI/AAAAAAAAAaM/Vcr0ZTZt3Wk/s320/DSC00379.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5413438202139220386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/SyBlcA-CYzI/AAAAAAAAAaU/HiX_6PJUpTw/s1600-h/DSC00380.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/SyBlcA-CYzI/AAAAAAAAAaU/HiX_6PJUpTw/s320/DSC00380.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5413438284070282034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;$669 億 = 39,585,798 部 OLPC =] (&lt;a href="https://secure.olpc.asia/Donation/Direct_donation.asp"&gt;$1690 一部&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1092919465231218016?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1092919465231218016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1092919465231218016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1092919465231218016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1092919465231218016'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/12/blog-post_10.html' title='宣傳單張'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/SyBlRf2gzjI/AAAAAAAAAaE/ykmOopEcHYM/s72-c/DSC00378.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7147600976109075212</id><published>2009-12-09T11:16:00.004+08:00</published><updated>2009-12-09T11:25:39.111+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>不是那麼開放 ...</title><content type='html'>這 post 純屬是看了 Chromium Blog - &lt;a href="http://blog.chromium.org/2009/12/google-chrome-for-linux-goes-beta.html"&gt;Google Chrome for Linux goes beta!&lt;/a&gt; 中的一句: "It has also been developed as a true open source project, using public mailing lists, IRC channels, bug tracker, code repository, and continuous build and test farm -- following in large part the trail blazed by Mozilla." 有感而發...&lt;br /&gt;&lt;br /&gt;話說... 小弟於十一月之時, 見友人 post 了一個關於 Android 開源問題的 &lt;a href="http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/397"&gt;blog&lt;/a&gt; ... 再加上 上述一句說話, 忽然回去看看那 &lt;a href="http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/397"&gt;Android 開源問題&lt;/a&gt;... &lt;br /&gt;&lt;br /&gt;重回此 &lt;a href="http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/397"&gt;blog&lt;/a&gt;, 小弟注視的... 是 blog comment 而非 blog content.&lt;br /&gt;&lt;br /&gt;如果你有時間, 不彷看看 comment ... 獲益不少呢&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7147600976109075212?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7147600976109075212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7147600976109075212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7147600976109075212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7147600976109075212'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/12/blog-post.html' title='不是那麼開放 ...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8940464374300925735</id><published>2009-12-06T11:10:00.004+08:00</published><updated>2009-12-06T11:16:40.084+08:00</updated><title type='text'>Google Public DNS and Privacy issue...</title><content type='html'>I was reading the Privacy chapter of the book &lt;a href="http://www.amazon.com/How-Break-Web-Software-Applications/dp/0321369440"&gt;How to Break Web Software&lt;/a&gt; in this morning...&lt;br /&gt;&lt;br /&gt;When I read the sections tracking cookie and web bug, I just wonder "Does Google DNS become a new way to deliver personalized Ads to u ^^?"&lt;br /&gt;&lt;br /&gt;After a brief googling of keywords: "google dns privacy"... I come to 2 pages ...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/speed/public-dns/privacy.html"&gt;http://code.google.com/speed/public-dns/privacy.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pcworld.com/article/183671/google_public_dns_and_your_privacy.html"&gt;http://www.pcworld.com/article/183671/google_public_dns_and_your_privacy.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;um .... anyway, if u prefer speed ... try the dns @ 8.8.8.8 and 8.8.4.4 =]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8940464374300925735?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8940464374300925735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8940464374300925735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8940464374300925735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8940464374300925735'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/12/google-public-dns-and-privacy-issue.html' title='Google Public DNS and Privacy issue...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8093302261656707015</id><published>2009-11-11T23:00:00.002+08:00</published><updated>2009-11-11T23:02:18.046+08:00</updated><title type='text'>很叉貴...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/SvrR8wSplfI/AAAAAAAAAZ8/V7zXHm69QbM/s1600-h/DSC00363.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/SvrR8wSplfI/AAAAAAAAAZ8/V7zXHm69QbM/s320/DSC00363.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5402861544669812210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SvrR2eu4ESI/AAAAAAAAAZ0/XwOM_Jtjwvk/s1600-h/DSC00362.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SvrR2eu4ESI/AAAAAAAAAZ0/XwOM_Jtjwvk/s320/DSC00362.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5402861436877148450" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8093302261656707015?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8093302261656707015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8093302261656707015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8093302261656707015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8093302261656707015'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/11/blog-post.html' title='很叉貴...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/SvrR8wSplfI/AAAAAAAAAZ8/V7zXHm69QbM/s72-c/DSC00363.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7909908251527579329</id><published>2009-10-16T09:47:00.003+08:00</published><updated>2009-10-16T09:50:49.315+08:00</updated><title type='text'>Blog Action Day 2009 - climate change?</title><content type='html'>I heard a recent news report on forecasting the climate in HK (where i live) ... the winter will tends not to have no longer below 10.&lt;br /&gt;&lt;br /&gt;What's really matter is that our summer is hotter and longer ... Now it's October in HK ... but ... this morning it's 28 degree..&lt;br /&gt;&lt;br /&gt;I believe this is not happy to see.&lt;br /&gt;&lt;br /&gt;support Blog Action Day 2009 - &lt;a href="http://www.blogactionday.org/"&gt;http://www.blogactionday.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7909908251527579329?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7909908251527579329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7909908251527579329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7909908251527579329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7909908251527579329'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/10/blog-action-day-2009-climate-change.html' title='Blog Action Day 2009 - climate change?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3885397780951767909</id><published>2009-10-15T20:01:00.009+08:00</published><updated>2009-10-15T20:52:41.310+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>開源於香港</title><content type='html'>今天, 很榮幸, 能透過內地 &lt;a href="http://www.zeuux.org"&gt;哲思社群(Zeuux)&lt;/a&gt; 邀請到 Akira Urushibata 跟 Richard Stallment 於城大一講. 此一講乃 &lt;a href="http://www.zeuux.org/campaign/zeuux-summit-2009.cn.html"&gt;哲思自由软件峰会2009&lt;/a&gt; 的期中一站. 有關這一講的內容.. 先在這賣一賣關子. 待 video 弄好了, 再跟大家說也不遲 =P&lt;br /&gt;&lt;br /&gt;小弟亦有幸滔光, 作了一個小小的 MC ... 但坦白說, 小弟做 MC 做得不好... 因為完全沒有心理準備, 便又一次 (小弟才第二次做 MC 呢) 被拉馬上台了... 在此, 對聽眾們跟講者們表示歉意.&lt;br /&gt;&lt;br /&gt;說回 開源於香港 ... 其實小弟不是參與了開源活動很久, 所以認識還不是很深呢 (小弟今天才得知, 是 GNU/Linux 而不只是 Linux 呢 ... Linux 只是 kernel , 而很多 OS util 是 GNU 哦... 有愧有愧)&lt;br /&gt;&lt;br /&gt;在此, 小弟不彷列出小弟認知範圍以內的香港開源知識吧.&lt;br /&gt;&lt;br /&gt;1) OAKA (&lt;a href="http://www.oaka.org/"&gt;http://www.oaka.org/&lt;/a&gt;) - 一個在香港推廣開源活動的合法組織. 曾舉辦大大少少的活動.. 近期的例如: &lt;a href="http://wiki.opensource.hk/index.php/Firefox_3_Kick-off_Party"&gt;Firefox 3 Release Party&lt;/a&gt; 及 &lt;a href="http://wiki.opensource.hk/index.php/Software_Freedom_Day_2009%2C_Hong_Kong"&gt;Software Freedom Day 2009&lt;/a&gt;.&lt;br /&gt;2) OpenSource.HK (&lt;a href="http://www.opensource.hk/"&gt;http://www.opensource.hk/&lt;/a&gt;) - 一位好友以drupal開發的網站. 雖然暫時定位還不太很清楚, 但已有 &lt;a href="http://wiki.opensource.hk/index.php/Main_Page"&gt;wiki&lt;/a&gt; 跟 &lt;a href="http://planet.opensource.hk/"&gt;blog planet&lt;/a&gt; 在上面. 不彷 subscribe 裡面的 rss , 便可 "追蹤" 一下 香港的開源活動&lt;br /&gt;3) OLPC Asia (&lt;a href="http://www.olpc.asia/"&gt;http://www.olpc.asia/&lt;/a&gt;) - 每童一電腦(Asia支部). 曾在馬來西亞、中國四川、不丹 delpoy 了一些 XO Laptop. 小弟不敢在這滔光, 但現時有一些還沒可以對外公開的項目,對這組織作些微貢獻 ^^" (小弟還曾經為此組織當當義工, 還想起第一次在街派傳單就是 olpc 的傳單呢 =P)&lt;br /&gt;4) GoGoGo HK (&lt;a href="http://www.gogogo.hk"&gt;http://www.gogogo.hk&lt;/a&gt;) - 一個暫時還沒完善的本港開源項目. 他們做的 就是要給香港人 一個找車回家的平台 (小弟曾作了些許 git-commit ^^") "潛力無限"呢~ 各位對 algorithm 有研究的人, 不彷去看看 ... 我們要一個快快快快的 shortest path algorithm on around 6xxx nodes.&lt;br /&gt;5) mcore3d (&lt;a href="http://code.google.com/p/mcore3d/"&gt;http://code.google.com/p/mcore3d/&lt;/a&gt;) - 小弟的兄長與他的朋友一起開發的game engine. 內裡詳情小弟不太清楚.&lt;br /&gt;6) MobileRadio.HK (&lt;a href="http://www.mobileradio.hk/"&gt;http://www.mobileradio.hk/&lt;/a&gt;) - 雖然他們不是直接與 opensource 有關, 但他們很多時會幫忙推廣香港的 opensource 活動. 功不可沒. (他們的平台是 wordpress-cms 呢)&lt;br /&gt;7) MyStatusSearch (&lt;a href="http://code.google.com/p/warenix/wiki/MyStatusSearch"&gt;http://code.google.com/p/warenix/wiki/MyStatusSearch&lt;/a&gt;) - Facebook Status Search Application ... 一位好友最近的項目. 就是這位好友令我接觸 GNU/Linux 呢... 到這裡找他 =] http://code.google.com/p/warenix (很有趣的 ... 他的名字.. 暫時應該還是 google-globally-unique XD)&lt;br /&gt;8) STK-in-AS3 (&lt;a href="http://code.google.com/p/stk-in-as3/"&gt;http://code.google.com/p/stk-in-as3/&lt;/a&gt;) - 一位在活動中認識的朋友... 這項目要把 &lt;a href="http://ccrma.stanford.edu/software/stk/"&gt;The Synthesis ToolKit in C++ (STK)&lt;/a&gt; 這 project port 到 as3 哦 ... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;其實小弟的認知很少, 如果你有更多的資訊, 小弟非常希望你能夠給大家分享分享 =]&lt;br /&gt;&lt;br /&gt;小弟中文不才, 比日本來的Akira Urushibata生先 差很多... 有愧 :$&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3885397780951767909?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3885397780951767909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3885397780951767909' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3885397780951767909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3885397780951767909'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/10/blog-post_15.html' title='開源於香港'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2700362113816030895</id><published>2009-10-13T12:53:00.004+08:00</published><updated>2009-10-13T12:59:06.614+08:00</updated><title type='text'>科研與教學, 兩者密切關係, 例子一</title><content type='html'>科研與教學, 可能是兩回事...&lt;br /&gt;&lt;br /&gt;有些時候... 他們是一回事...&lt;br /&gt;&lt;br /&gt;舉例: &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/6721071264063477716-2700362113816030895?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2700362113816030895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2700362113816030895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2700362113816030895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2700362113816030895'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/10/blog-post.html' title='科研與教學, 兩者密切關係, 例子一'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6161863180802413519</id><published>2009-10-12T11:39:00.004+08:00</published><updated>2009-10-12T11:41:16.746+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>gsoc t-shirt 之到來</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/StKlISyhDoI/AAAAAAAAAZk/OVklXb3aCSs/s1600-h/DSC00266.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/StKlISyhDoI/AAAAAAAAAZk/OVklXb3aCSs/s320/DSC00266.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5391553265817161346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/StKlOhZbpqI/AAAAAAAAAZs/JQ_YIr3GT3w/s1600-h/DSC00267.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/StKlOhZbpqI/AAAAAAAAAZs/JQ_YIr3GT3w/s320/DSC00267.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5391553372817696418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/StKlCA4lWOI/AAAAAAAAAZc/XV6IIJHzTKE/s1600-h/DSC00269.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/StKlCA4lWOI/AAAAAAAAAZc/XV6IIJHzTKE/s320/DSC00269.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5391553157931555042" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6161863180802413519?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6161863180802413519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6161863180802413519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6161863180802413519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6161863180802413519'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/10/gsoc-t-shirt.html' title='gsoc t-shirt 之到來'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/StKlISyhDoI/AAAAAAAAAZk/OVklXb3aCSs/s72-c/DSC00266.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3938952239997778214</id><published>2009-09-29T23:23:00.003+08:00</published><updated>2009-09-29T23:33:02.639+08:00</updated><title type='text'>唔怕一萬, 至怕萬一</title><content type='html'>相信不少朋友, 對"唔怕一萬, 至怕萬一"這說話有一定認識... 究竟, 你跟我的認識有何不同呢??&lt;br /&gt;&lt;br /&gt;從數學角度看, "唔怕一萬, 至怕萬一"是指一件事件發生的概率 (Probability). 對! 就是 Probability.&lt;br /&gt;&lt;br /&gt;Prob(事件發生) = 1/10001&lt;br /&gt;&lt;br /&gt;即是說, 事件發生的可能性為: 每10001個機會, 發生1次&lt;br /&gt;&lt;br /&gt;所以... 唔怕一萬, 至怕萬一發生事情!&lt;br /&gt;&lt;br /&gt;現在, 由另一個角度看吧~&lt;br /&gt;&lt;br /&gt;一萬是 10000, 萬一是 10001&lt;br /&gt;&lt;br /&gt;讀電腦的 ... 你會如何理解 10000 及 10001?&lt;br /&gt;&lt;br /&gt;無錯! 二進制!&lt;br /&gt;&lt;br /&gt;10000 = 16&lt;br /&gt;10001 = 17&lt;br /&gt;&lt;br /&gt;16 即 實碌&lt;br /&gt;17 即 實柒&lt;br /&gt;&lt;br /&gt;碌乃為幸運之意, 柒乃為真係柒之意&lt;br /&gt;&lt;br /&gt;唔怕一萬, 至怕萬一 .... 即是說一件事情, 唔怕走運, 至怕"柒ed"&lt;br /&gt;&lt;br /&gt;夠爛嗎? XDDDDDDDDDDDDDDDD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3938952239997778214?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3938952239997778214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3938952239997778214' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3938952239997778214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3938952239997778214'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/09/blog-post_29.html' title='唔怕一萬, 至怕萬一'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2398300901485285701</id><published>2009-09-18T20:28:00.009+08:00</published><updated>2009-09-19T11:42:42.003+08:00</updated><title type='text'>貼紙... 我的第一次</title><content type='html'>因為要準備 Sept 19 的 Software Freedom Day, 這數天, 除了花時間到自己要做的事, 很多時間花了在 SFD 上.&lt;br /&gt;&lt;br /&gt;這一兩天, 就是花在小弟第一次整的貼紙上. 雖然那些貼紙, 未有想像中的好... (size 細了) 但還是要做吧 XD&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SrN9YOLxEcI/AAAAAAAAAYc/YyvM5YXi16U/s1600-h/DSC00236.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SrN9YOLxEcI/AAAAAAAAAYc/YyvM5YXi16U/s320/DSC00236.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382783834715656642" /&gt;&lt;/a&gt;&lt;br /&gt;我的工作間, 已被貼紙攻佔!!&lt;br /&gt;&lt;br /&gt;而我工作就係... 張 1x6 的大大貼紙群, 修剪為 1x1 的小小貼紙仔 (即下圖)&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SrN-LrxU0hI/AAAAAAAAAYk/Q8NyPNXcZFU/s1600-h/DSC00238.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SrN-LrxU0hI/AAAAAAAAAYk/Q8NyPNXcZFU/s320/DSC00238.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382784718831145490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/SrN-cA6LuUI/AAAAAAAAAYs/y5JP3_Uw6FI/s1600-h/DSC00237.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/SrN-cA6LuUI/AAAAAAAAAYs/y5JP3_Uw6FI/s320/DSC00237.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382784999383349570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;其中... 最喜歡的一 set 貼紙, 當然是 ... Linux Kernel in the Black Box =]&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SrN-zYEbhxI/AAAAAAAAAY0/UfE1345TqQg/s1600-h/DSC00239.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SrN-zYEbhxI/AAAAAAAAAY0/UfE1345TqQg/s320/DSC00239.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382785400737335058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;近呢幾日都會寫 ... "You make SFD Happen!"&lt;br /&gt;&lt;br /&gt;想知 SFD 會點? Sept 19 到城大逛逛 =] &lt;a href="http://bit.ly/registersfd09hk"&gt;http://bit.ly/registersfd09hk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;p.s. 其實我好整齊架 ._.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SrN_vbu7FCI/AAAAAAAAAY8/bcNr_wrLAFs/s1600-h/DSC00240.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SrN_vbu7FCI/AAAAAAAAAY8/bcNr_wrLAFs/s320/DSC00240.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382786432513020962" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-2398300901485285701?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2398300901485285701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2398300901485285701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2398300901485285701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2398300901485285701'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/09/blog-post.html' title='貼紙... 我的第一次'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SrN9YOLxEcI/AAAAAAAAAYc/YyvM5YXi16U/s72-c/DSC00236.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6058893291081657672</id><published>2009-09-11T10:12:00.003+08:00</published><updated>2009-09-11T10:13:51.306+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcj'/><title type='text'>o... i just passed</title><content type='html'>=P I passed the qual-round ~~~ And, will die in upcoming round 1-a,1-b, and 1-c XDDDDDDDD&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SqmyJ7lF6JI/AAAAAAAAAXk/jNfuh4yH3Ds/s1600-h/codejam-qual.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SqmyJ7lF6JI/AAAAAAAAAXk/jNfuh4yH3Ds/s320/codejam-qual.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5380027113552603282" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6058893291081657672?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6058893291081657672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6058893291081657672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6058893291081657672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6058893291081657672'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/09/o-i-just-passed.html' title='o... i just passed'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/SqmyJ7lF6JI/AAAAAAAAAXk/jNfuh4yH3Ds/s72-c/codejam-qual.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5308364703645956471</id><published>2009-09-06T22:00:00.003+08:00</published><updated>2009-09-06T22:11:53.988+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><title type='text'>Enabling MLS policy module in SELinux</title><content type='html'>This "experiment" is carried on late of August, 2009.&lt;br /&gt;&lt;br /&gt;Environment: Fedora Core 11 (guest) under VirtualBox-3.0.4  on Ubuntu-9.0.4 (host)&lt;br /&gt;MLS Policy Module Version: 3.6.12&lt;br /&gt;&lt;br /&gt;Credits: Most information about SELinux comes from &lt;a href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/index.html"&gt;Red Hat Enterprise Linux 5 Deployment Guide&lt;/a&gt; [ref-G] and MLS setup procedures come from &lt;a href="http://fedoraproject.org/wiki/SELinux/FedoraMLSHowto"&gt;Fedora Project Wiki&lt;/a&gt;. And, &lt;a href="http://www.lurking-grue.org/selinuxHOWTO.html"&gt;Getting Started with SE Linux HOWTO&lt;/a&gt; gives me better understanding. If you like reading SELinux from academic paper, consult &lt;a href="http://portal.acm.org/citation.cfm?id=1266840.1266854"&gt;A logical specification and analysis for SELinux MLS policy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SELinux Overview in Brief&lt;/span&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Security-Enhanced Linux (SELinux) is a security architecture integrated into the 2.6.x kernel using the Linux Security Modules (LSM). It is a project of the United States National Security Agency (NSA) and the SELinux community. SELinux integration into Red Hat Enterprise Linux was a joint effort between the NSA and Red Hat.&lt;br /&gt;&lt;br /&gt;-- 44.2. Introduction to SELinux, [ref-G]&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In standard Linux Distro, there is &lt;a href="http://en.wikipedia.org/wiki/Discretionary_access_control"&gt;Discretionary Access Control&lt;/a&gt; (DAC). Any process running as a user has the permission to any object (file, socket, executable...) as the user. A typical &lt;span style="font-weight: bold;"&gt;ls -l&lt;/span&gt; shows the permission of objects.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sp5SsEVNJrI/AAAAAAAAAW8/yeY7Ovo5Dgg/s1600-h/selinux-dac.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sp5SsEVNJrI/AAAAAAAAAW8/yeY7Ovo5Dgg/s320/selinux-dac.png" alt="" id="BLOGGER_PHOTO_ID_5376825922157356722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For example, the object "Mario_Gant" is owned by user and grouped under the group "user". The permission of the object is rwx:r-x:r-x for owner:group:others respectively. The owner - "user" is granted to read-write-execute of the object. The group - "user" is granted to read-execute. And, any person other than the owner or outside the group of "user" have the read-execute permission on the object. This is typical DAC on any Linux Distro.&lt;br /&gt;&lt;br /&gt;SELinux builds another access control layer on top of DAC - the Mandatory Access Control (MAC). SELinux privilege checking is first carried on DAC and then MAC. If DAC denied the access, MAC is not carried. SELinux Decision Process is visualized in [ref-G] as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/images/SELinux_Decision_Process.png"&gt;&lt;img style="cursor: pointer; width: 541px; height: 286px;" src="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/images/SELinux_Decision_Process.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Any subject passed DAC checking fires an action request on an object to the SELinux Security Server, a.k.a. the policy enforcement server. The server consult the SELinux Policy Database, either from the Access Vector Cache (AVC) or security context matrix on disk, for policy on that particular object requested. The server grants permission to the subject according to policy consulted. If permission is denied, a denial message is logged.&lt;br /&gt;&lt;br /&gt;There are 2 modes of operation in SELinux - Enforcing mode and Permissive mode. The only difference between 2 modes is that Permissive mode does not deny any unprivileged MAC attempt but those unprivileged attempts will be logged. Permissive mode is useful for troubleshooting and development of security contexts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Security Contexts, User, Role, Type/Domain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELinux security context of any object is stored as file attribute. Context of object can be viewed by issuing &lt;span style="font-weight:bold;"&gt;ls -Z&lt;/span&gt;. A typical context is shown below.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@myServer ~]# ls -Z gravityControl.txt&lt;br /&gt;-rw-r--r--  user     user     user_u:object_r:tmp_t:Moonbase_Plans gravityControl.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;user_u:object_r:tmp_t:Moonbase_Plans refers to {SELinux User}:{SELinux Role}:{SELinux Domain/Type}:{SELinux MCS/MLS Label} respectively. &lt;br /&gt;&lt;br /&gt;Here, SELinux User is different to user in conventional Linux. For instance, a linux user 'pi' is configured as SELinux user "user_u". If 'pi' issue &lt;span style="font-weight:bold;"&gt;su&lt;/span&gt; command to login as 'root', he/she's SELinux user identity is still 'user_u' and thus security policies applied on 'user_u' still remains. Mapping between SELinux User and typical linux uid is maintained by SELinux Login. SELinux Login can be viewed by issuing &lt;span style="font-weight:bold;"&gt;semanage login -l&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@dhcp-133 ~]# semanage login -l&lt;br /&gt;&lt;br /&gt;Login Name                SELinux User              MLS/MCS Range&lt;br /&gt;&lt;br /&gt;__default__               user_u                    s0&lt;br /&gt;james                     user_u                    s0&lt;br /&gt;daniel                    user_u                    s0&lt;br /&gt;root                      root                      s0-s0:c0.c1023&lt;br /&gt;olga                      user_u                    s0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first column is typical linux uid while second column is the SELinux user identity. The last column is the MLS/MCS (Multi Level Security/Multi Category System) Range. MLS and MCS is two different security policies. MLS will be explained in later section in this article.&lt;br /&gt;&lt;br /&gt;In above example, different linux uids are mapped to two SELinux User. To obtain the definition of those SELinux User, issue &lt;span style="font-weight:bold;"&gt;semanage user -l&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@dhcp-133 ~]# semanage user -l&lt;br /&gt;&lt;br /&gt;                Labeling   MLS/       MLS/&lt;br /&gt;SELinux User    Prefix     MCS Level  MCS Range            SELinux Roles&lt;br /&gt;&lt;br /&gt;root            user       s0         s0-s0:c0.c1023       system_r sysadm_r user_r&lt;br /&gt;system_u        user       s0         s0-s0:c0.c1023       system_r&lt;br /&gt;user_u          user       s0         s0-s0:c0.c1023       system_r sysadm_r user_r&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In this snap, SELinux User 'root' is having 3 different SELinux Roles while it's the same as 'user_u'. However, 'user_u' is being mapped to all typical linux uid while 'root' is mapped to uid 'root' as system administrator. The user, 'system_u', is dedicated for system processes. &lt;br /&gt;&lt;br /&gt;Let's move on to SELinux Roles. It is part of SELinux Role-based Access Control and predefined in SELinux policies. SELinux Role determines which process domains / object types can be accessed. All processes under SELinux run under a domain. A domain specifies what can be performed by processes while a type specifies who can access an object.&lt;br /&gt;&lt;br /&gt;Roles are predefined. For instance, 'system_r' is the role specifically for all system processes except user processes. It allows domains/types like .. dhcpd_t, httpd_t, initrc_t, and ldconfig_t. These domains/types are for dhcp daemon, http daemon, initrc script, and ldconfig respectively.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SqOvVXO3ORI/AAAAAAAAAXc/wbjsY1QjTos/s1600-h/selinux.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SqOvVXO3ORI/AAAAAAAAAXc/wbjsY1QjTos/s320/selinux.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5378335161558972690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SELinux actually is not that complicated ... Let's keep it short! When you login, you obtain a role. This role can perform certain tasks according to predefined rules. Those rules make use of domain and type. So, if your role does not match the specified domain / type, permission deny as result. A SELinux user can have more than a single role. Thus, user may switch between role for certain tasks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MLS  Policy&lt;/span&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;MLS policy in SELinux is implemented like an add-on to SELinux MAC. MLS is abbreviation of Multi-Level Security. So, what is multi-level? It is actually derived from Bell-La Padula model.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The term multi-level arises from the defense community's security classifications: Confidential, Secret, and Top Secret. -- 44.6.1 Why Multi-Level, [ref-G]&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In short, using the military terms, a general that can view national secret stuffs can also view national confidential stuffs and of course unclassified stuffs. But, general does not have enough privileges to view stuffs that are classified as national top secret like ... UFO ^^? On the other hand, a general would report to the upstreams but not report anything to the soldiers. (Like you have to report to your boss all the time @@?) This is the general belief behind Bell-La Padula model - "no read up, no write down".&lt;br /&gt;&lt;br /&gt;To put this concept into SELinux, look at the self-explanatory visualization from [ref-G].&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/images/security-mls-data-flow.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 567px; height: 390px;" src="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/images/security-mls-data-flow.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MLS further extends BLP by allowing categorization, a.k.a. compartment. For example, if UFO is considered as top secret, it belongs to the UFO category. At the same time, another top secret category would be Nuclear. Someone that is allowed to access top secret information related to UFO does not necessarily need to access information about Nuclear. You may consider as sub-levels.&lt;br /&gt;&lt;br /&gt;SELinux implementation provides 16 default levels - from s0 (lowest) to s15 (highest), and 1024 categories - from c0 to c1023. Level can be added on demand by editing the file '/etc/selinux/mls/setrans.conf'. At the same time, MLS policy has its own set of roles definition. According to &lt;a href="http://fedoraproject.org/wiki/SELinux/MLSRoles"&gt;Fedora wiki&lt;/a&gt;, roles include: user_r, staff_r, sysadm_r, secadm_r, and auditadm_r. Other than that, DAC, SELinux Role, Type, and Domain still applies with MLS policy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Experiment - setup&lt;/span&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Steps listed below are used to carry my experiment in enabling MLS policy in SELinux under FC11.&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;br /&gt;&lt;legend&gt;Friendly Reminders&lt;/legend&gt;&lt;br /&gt;[1] MLS Policy in FC11 is still "experimental" (I like this pretty word so that noone think it's buggy). You're suggested to do the following steps without the GUI so that you can always take the root access. To do so, edit the /etc/inittab and replace "id:5:initdefault:" with "id:3:initdefault:". Starting from now, the next boot of Fedora will fall into run-level 3.&lt;br /&gt;&lt;br /&gt;[2] Whenever you lose your root access by any accident, GRUB will help! When booting your machine, pressing Esc-key will stop GRUB automatic boot process (You have to press Esc-key before Fedora is being booted). Then, press 'e' to edit the boot parameter under the boot menu. Append 'single' to the back of the line with something like .. 'kernel /vmlinuz-2.6. ... rhgb quiet' so that the line becomes something like 'kernel /vmlinuz-2.6. ... rhgb quiet single'. After that, pressing 'b' will start booting Fedora into single-user mode. After booting into single-user mode, you'll get a terminal without login. Type 'init 3' and hit your enter-key so that Fedora will boot into run-level 3.&lt;br /&gt;&lt;br /&gt;[3] And... prevent trying the MLS policy with your working machine... vbox or any spare machine are better starting points for experiments.&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1. Installing FC11 with the wonderful LiveCD.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2. Update your fresh installation in order to fix anything the update can fix&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To update in FC11, Do the following as root.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yum update&lt;br /&gt;reboot&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;*Note: I do this in my tea time ... as the update took me around 30minutes to complete.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3. Install and configure the MLS policy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Again, do as root.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yum install selinux-policy-mls&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, &lt;span style="font-weight:bold;"&gt;vi&lt;/span&gt; the file '/etc/selinux/config' to configure SELinux. Setting the two config-variable as follows.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELINUX=permissive&lt;br /&gt;SELINUXTYPE=mls&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This configuration tells SELinux to operate in permissive mode (the one mentioned in previous section that it just warns) and use the MLS policy. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;4. Ask SELinux to relabel with MLS policy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Issue "&lt;span style="font-weight:bold;"&gt;touch /.autorelabel&lt;/span&gt;" in your terminal so that your next boot will ask SELinux to relabel stuffs with the MLS policy. Then, reboot into single-user mode (see friendly reminder [2] in order to know howto do so) and the relabeling will start. Once relabeling is finished, issue "&lt;span style="font-weight:bold;"&gt;init 3&lt;/span&gt;" to boot into run-level 3.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;5. Enabling MLS policy and Getting Back the GUI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To turn on MLS policy, edit the file '/etc/selinux/config' and set 'SELINUX=enforcing'&lt;br /&gt;To turn off MLS policy, edit the file '/etc/selinux/config' and set 'SELINUX=permissive'&lt;br /&gt;To turn on GUI, edit the file '/etc/inittab' and set 'id:5:initdefault:'&lt;br /&gt;To turn off GUI, edit the file '/etc/inittab' and set 'id:3:initdefault:'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Experiment - tryout&lt;/span&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;br /&gt;&lt;legend&gt;Tips&lt;/legend&gt;&lt;br /&gt;[1] su and sudo are no longer the great. If your active user is having the role "user_r", you cannot su/sudo. If your active user is having the role "staff_r", you can sudo but still you're not as powerful as system administrator.&lt;br /&gt;&lt;br /&gt;[2] To check your role, issue &lt;span style="font-weight:bold;"&gt;id -Z&lt;/span&gt;. For example, "root:sysadm_r:sysadm_t:s0-s15:c0.c1023" refers to the SELinux user "root" having the SELinux role "sysadm_r" and domain/type as "sysadm_t". The MLS range from s0 to s15 and authorized to compartment c0 till c1023.&lt;br /&gt;&lt;br /&gt;[3] To change your role so that you gain different privileges, issue &lt;span style="font-weight:bold;"&gt;newrole -r {role}&lt;/span&gt;. For example, default role for root is "sysadm_r", you may switch to "secadm_r" as security admin by issuing &lt;span style="font-weight:bold;"&gt;newrole -r secadm_r&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;[4] To adhoc switch between enforcing mode and permissive mode, you can edit the file /selinux/enforce.&lt;br /&gt;- From permissive to enforcing: &lt;span style="font-weight:bold;"&gt;echo 1 &amp;gt; /selinux/enforce&lt;/span&gt;&lt;br /&gt;- From enforcing to permissive: &lt;span style="font-weight:bold;"&gt;newrole -r secadm_r; echo 0 &amp;gt; /selinux/enforce; exit&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;In this trial, we are going to setup 2 files with different MLS level, 2 SELinux User with different MLS level, and to see if MLS policies apply correctly.&lt;br /&gt;&lt;br /&gt;*Note: Carry the following as root and SELinux in permissive mode. &lt;span style="font-weight:bold;"&gt;semanage&lt;/span&gt; may not work fine in enforcing mode.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1. Creating users and specifies MLS levels for user&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;adduser alice&lt;br /&gt;adduser bob&lt;br /&gt;semanage user -a -L s1 -r s1:c0.c1023 -R user_r -P user s1_u&lt;br /&gt;semanage user -a -L s2 -r s2:c0.c1023 -R user_r -P user s2_u&lt;br /&gt;semanage login -a -s s1_u -r s1:c0.c1023 alice&lt;br /&gt;semanage login -a -s s2_u -r s2:c0.c1023 bob&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In case, Alice is assigned to SELinux user s1_u while Bob is assigned to s2_u. And, they are having different MLS levels. You need to set password for Alice and Bob by issuing &lt;span style="font-weight:bold;"&gt;passwd&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2. Creating files and apply security context to them&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;echo "This is file 1" &amp;gt; /file1&lt;br /&gt;echo "This is file 2" &amp;gt; /file2&lt;br /&gt;chmod 777 /file1&lt;br /&gt;chmod 777 /file2&lt;br /&gt;semanage fcontext -a -r s1 -s s1_u -t user_t /file1&lt;br /&gt;semanage fcontext -a -r s2 -s s2_u -t user_t /file2&lt;br /&gt;restorecon -v /file1&lt;br /&gt;restorecon -v /file2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As SELinux policy first check DAC, &lt;span style="font-weight:bold;"&gt;chmod 777&lt;/span&gt; allows the checking to be passed. Then set the security context to /file1 and /file2 respectively. /file1 belongs to MLS level s1 while /file2 belongs to MLS level s2. The last step is to restore the new context by issuing &lt;span style="font-weight:bold;"&gt;restorecon&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3. See what happen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, switch SELinux into enforcing mode by issuing "echo 1 &amp;gt; /selinux/enforce". Do the following and see what happen.&lt;br /&gt;&lt;br /&gt;(a) You're still login as root, try to &lt;span style="font-weight:bold;"&gt;cat /file1&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;cat /file2&lt;/span&gt;. You probably get permission denied. You may issue &lt;span style="font-weight:bold;"&gt;ls -Z /&lt;/span&gt; and you may find "strange" thing like...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;?---------    ?    ?                          file1&lt;br /&gt;?---------    ?    ?                          file2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Even root is the owner of /file1 and /file2, root cannot access the files. This is because, by default, root is having MLS level s0 when login. By definition that can be viewed by &lt;span style="font-weight:bold;"&gt;semanage login -l&lt;/span&gt;, root can access levels from s0 to s15. To switch your MLS level to s15, issue &lt;span style="font-weight:bold;"&gt;newrole -l s15&lt;/span&gt;. Now, you can &lt;span style="font-weight:bold;"&gt;cat&lt;/span&gt; /file1 and /file2.&lt;br /&gt;&lt;br /&gt;(b) Login as Alice, try to &lt;span style="font-weight:bold;"&gt;cat /file1&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;cat /file2&lt;/span&gt;. You probably get content in /file1 but not in /file2. The reason is simple, user with MLS level s1 can access s1 objects but not objects in level s2. By Bell-La Padula model, you cannot read up ^^.&lt;br /&gt;&lt;br /&gt;(c) Login as Bob, try to &lt;span style="font-weight:bold;"&gt;cat /file1&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;cat /file2&lt;/span&gt;. You probably get content in both /file1 and /file2. By definition of Bell-La Padula model again, you can read down ^^.&lt;br /&gt;&lt;br /&gt;(d) Try to write any stuff into /file1 or /file2 with any MLS level. You probably find that you get permission denied. The reason? SELinux MLS policy module is still "experimental" in FC11.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5308364703645956471?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5308364703645956471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5308364703645956471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5308364703645956471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5308364703645956471'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/09/enabling-mls-policy-module-in-selinux.html' title='Enabling MLS policy module in SELinux'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/Sp5SsEVNJrI/AAAAAAAAAW8/yeY7Ovo5Dgg/s72-c/selinux-dac.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-158701721339545181</id><published>2009-09-03T13:28:00.006+08:00</published><updated>2009-09-11T10:11:36.667+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcj'/><title type='text'>CodeJam 2009, Did you ^^?</title><content type='html'>Haha ~~ codejam is back:p&lt;br /&gt;&lt;br /&gt;This morning ... i was struggling with the problem set :p&lt;br /&gt;&lt;br /&gt;And... finally tackled the easiest one :p&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sp9UXnGxXbI/AAAAAAAAAXE/agYGDB-XBro/s1600-h/score.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 79px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sp9UXnGxXbI/AAAAAAAAAXE/agYGDB-XBro/s320/score.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377109244714769842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BUT .... if you carry the codejam early in the morning ... you will find if you download the input data... You get THIS XD&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/Sp9UoZXI08I/AAAAAAAAAXM/lqaiK3kOcJI/s1600-h/err.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/Sp9UoZXI08I/AAAAAAAAAXM/lqaiK3kOcJI/s320/err.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377109533083096002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And ... you can check the QA list for the error...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sp9U2B2_RCI/AAAAAAAAAXU/sF3LTBRLneE/s1600-h/qa.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sp9U2B2_RCI/AAAAAAAAAXU/sF3LTBRLneE/s320/qa.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5377109767292404770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-158701721339545181?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/158701721339545181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=158701721339545181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/158701721339545181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/158701721339545181'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/09/codejam-2009-did-you.html' title='CodeJam 2009, Did you ^^?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/Sp9UXnGxXbI/AAAAAAAAAXE/agYGDB-XBro/s72-c/score.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5986203229523993401</id><published>2009-08-13T15:26:00.003+08:00</published><updated>2009-08-13T15:50:09.395+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ August 13</title><content type='html'>I just issued my "last" gsoc status report to the php ml =]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SoPFgXSsB2I/AAAAAAAAAWc/Ry6HzYm3bKg/s1600-h/last_report_ml.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SoPFgXSsB2I/AAAAAAAAAWc/Ry6HzYm3bKg/s320/last_report_ml.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5369352340554647394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Even so... i'm still going to work on it as leisure :p The next target ... Implementing a WYSIWYG doc-editor!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5986203229523993401?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5986203229523993401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5986203229523993401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5986203229523993401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5986203229523993401'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/08/my-gsoc2009-august-13.html' title='my gsoc2009 @ August 13'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SoPFgXSsB2I/AAAAAAAAAWc/Ry6HzYm3bKg/s72-c/last_report_ml.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6445065633511129022</id><published>2009-08-07T11:01:00.002+08:00</published><updated>2009-08-07T11:17:46.070+08:00</updated><title type='text'>一生何求 - 給還為工作摸不著頭腦的朋友</title><content type='html'>今早, 在快樂長門人的老人家點唱站, 聽到這首歌.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;一生何求 - 陳百強&lt;br /&gt;曲︰王文清&lt;br /&gt;詞︰潘偉源&lt;br /&gt;編︰蘇德華&lt;br /&gt;&lt;br /&gt;冷暖那可休　回頭多少個秋&lt;br /&gt;尋遍了卻偏失去　未盼卻在手&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;我得到沒有　沒法解釋得失錯漏&lt;/span&gt;&lt;br /&gt;剛剛聽到望到便更改　不知那裡追究&lt;br /&gt;&lt;br /&gt;一生何求　&lt;span style="font-weight:bold;"&gt;常判決放棄與擁有&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;耗盡我這一生　觸不到已跑開&lt;/span&gt;&lt;br /&gt;一生何求　迷惘裡永遠看不透&lt;br /&gt;沒料到我所失的竟已是我的所有&lt;br /&gt;&lt;br /&gt;一生何求　曾妥協也試過苦鬥&lt;br /&gt;夢內每點繽紛　一消散那可收&lt;br /&gt;一生何求　誰計較讚美與咀咒&lt;br /&gt;沒料到我所失的竟已是我的所有&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;常判決放棄與擁有... 你們判決了你們所找的工作, 是對嗎?&lt;br /&gt;&lt;br /&gt;還記得, 數日前, 一好友找工 interview 時, 被問到: "&lt;span style="font-weight:bold;"&gt;你期望你三十歲時, 在做什麼?&lt;/span&gt;" ... 當時心裡想... 子曰:"吾十有五而志于学，三十而立" ... 這很有意思的問題! 老太爺都是三十歲自立呢.... &lt;br /&gt;&lt;br /&gt;三十歲時, 我不想當經理, 不想當主管... 只想... 跟未來老婆大人開一家賣花茶的小店, 讓客人休息休息, 讓自己做些自己想做的事... 難不難? 不難! 何休哉? 休哉! 休哉!&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/6721071264063477716-6445065633511129022?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6445065633511129022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6445065633511129022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6445065633511129022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6445065633511129022'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/08/blog-post.html' title='一生何求 - 給還為工作摸不著頭腦的朋友'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6361429774783235885</id><published>2009-07-29T17:38:00.003+08:00</published><updated>2009-07-29T17:53:10.895+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ July 29</title><content type='html'>Thanks to &lt;a href="http://www.php.net/manual/en/features.http-auth.php"&gt;php-manual&lt;/a&gt;, I can generate mod_auth_digest MD5 hash nicely =]&lt;br /&gt;&lt;br /&gt;The hash is highlighted below ~&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SnAZ4QvnsBI/AAAAAAAAAVw/SF3QikEIqRg/s1600-h/auth.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 109px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SnAZ4QvnsBI/AAAAAAAAAVw/SF3QikEIqRg/s320/auth.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5363815610556330002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, what I'm doing to simulate a "cvs-login" on subversion is to fire a MKACTIVITY request to the server. (this is documented in the &lt;a href="http://svn.collab.net/repos/svn/trunk/notes/webdav-protocol"&gt;protocol&lt;/a&gt; that most "write" operations first fire it before any other operation).&lt;br /&gt;&lt;br /&gt;This MKACTIVITY request will be responded with HTTP-401 Authorization Required =]&lt;br /&gt;&lt;br /&gt;Then, I use the info from the HTTP-401 and generate a valid hash of it.... Fire back another MKACTIVITY request with Authorization header.&lt;br /&gt;&lt;br /&gt;If... server still reply me with HTTP-401... then the user-password is not valid to the server.&lt;br /&gt;If... server reply me with the superb HTTP-201... That's valid user-password pair.&lt;br /&gt;&lt;br /&gt;The whole stuff like this ... &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SnAb9lDrDMI/AAAAAAAAAV4/NryIiZSKdQQ/s1600-h/digest_whole.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SnAb9lDrDMI/AAAAAAAAAV4/NryIiZSKdQQ/s320/digest_whole.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5363817900931747010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;p.s. ... invalid credential give me an apache-error on my own repository ... &lt;br /&gt;&lt;blockquote&gt;[Wed Jul 29 17:20:41 2009] [error] [client 144.214.121.111] Digest: user kschan: password mismatch: /svn/acm/!svn/act/67764a9e-5629-6c72-d9fc-6205068e0a1a&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6361429774783235885?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6361429774783235885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6361429774783235885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6361429774783235885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6361429774783235885'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/my-gsoc2009-july-29.html' title='my gsoc2009 @ July 29'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SnAZ4QvnsBI/AAAAAAAAAVw/SF3QikEIqRg/s72-c/auth.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-431527298514898552</id><published>2009-07-28T17:39:00.006+08:00</published><updated>2009-07-28T17:58:14.199+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ July 28</title><content type='html'>SVN is good for source control "only".&lt;br /&gt;&lt;br /&gt;Why I'm saying so ^^? Read the story...&lt;br /&gt;&lt;br /&gt;The story is simple....&lt;br /&gt;&lt;br /&gt;In doc-editor, user won't need to register in which doc-editor will check for cvs-credential automatically. As cvs2svn migration complete, I need to adopt svn for doc-editor. So, the very first thing is that I need to understand how svn authenticate!!&lt;br /&gt;&lt;br /&gt;Just before my study ... I just know ... svn uses Apache and Http... That's ALL! So, I googled ... "subversion http protocol" and failed. Then, I read subversion *documents* slowly and know that it's using webdav. So, I googled "subversion webdav protocol"... Yes! It give me &lt;a href="http://svn.collab.net/repos/svn/trunk/notes/webdav-protocol"&gt;this&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Therefore, I make my first trail with php-webdav-extension from &lt;a href="http://php-webdav.pureftpd.org/project/php-webdav"&gt;here&lt;/a&gt;... &lt;br /&gt;&lt;br /&gt;The codes are simple as shown here ~.~ It fires a webdav-put request and so the authentication stuff are sent to server.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sm7I-AJRPUI/AAAAAAAAAVY/lq3rXmPykLo/s1600-h/php-webdav.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 151px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sm7I-AJRPUI/AAAAAAAAAVY/lq3rXmPykLo/s320/php-webdav.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5363445173761162562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Even it worked... but ... drawbacks come.... no matter what, Apache give me error log as the webdav request is not valid to mod_dav_svn.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sm7JmK2D0ZI/AAAAAAAAAVg/F5KDgF3MJac/s1600-h/apache-err-log.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sm7JmK2D0ZI/AAAAAAAAAVg/F5KDgF3MJac/s320/apache-err-log.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5363445863828148626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thus, I think I better seek advice from mentor =] And mentor just said, if we're going to use php-extension, we better use the &lt;a href="http://pecl.php.net/package/svn"&gt;official&lt;/a&gt; ... However, the official svn package is somehow like the native svn-client in which the authentication is fired when some operations ask for that... That's to say... it's not much different that I use exec('svn ci') =.=" So, it's much better to do it raw!&lt;br /&gt;&lt;br /&gt;To do it raw... I need to understand how's the webdav protocol actually works out ... That's pretty difficult (I should say it's evil honestly =.=) I tried to seek help from freenode-irc #svn but not much help ... So I googled to see how can I trace a http-request and response....&lt;br /&gt;&lt;br /&gt;The answer is .... strace!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sm7LBw7kMYI/AAAAAAAAAVo/mgz2Li6zMzY/s1600-h/strace.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sm7LBw7kMYI/AAAAAAAAAVo/mgz2Li6zMzY/s320/strace.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5363447437419884930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As fas as I know from the strace ... Apache may be using mod_auth_digest for authentication ... Therefore ... i'm going to study how it works now ... so that i can MD5 the "password" for the authorization header.&lt;br /&gt;&lt;br /&gt;( another hard task for me -.-" but that's quite enjoyable =] )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-431527298514898552?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/431527298514898552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=431527298514898552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/431527298514898552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/431527298514898552'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/my-gsoc2009-july-28.html' title='my gsoc2009 @ July 28'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/Sm7I-AJRPUI/AAAAAAAAAVY/lq3rXmPykLo/s72-c/php-webdav.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5858532376191319259</id><published>2009-07-24T11:39:00.011+08:00</published><updated>2009-07-24T12:04:08.814+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ July 24</title><content type='html'>php svn-migration is complete and that's time to commit changes :p (excuse for my laziness)&lt;br /&gt;&lt;br /&gt;the project is now on &lt;a href="http://svn.php.net/viewvc/web/doc-editor/trunk/"&gt;http://svn.php.net/viewvc/web/doc-editor/trunk/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You may have a look into the dirty codes by "svn co http://svn.php.net/repository/web/doc-editor/trunk doc-editor"&lt;br /&gt;&lt;br /&gt;What I've done thus far from the last commit is that I factored the php files from the ground to the top. The single pain-long (yup, pain-long not plain-long as that's really painful!) class.php is now separated into dozen of files in which each of them groups related functions. The groupings are now written on &lt;a href="http://wiki.php.net/gsoc/2009/phdoe#factored_php_classes"&gt;http://wiki.php.net/gsoc/2009/phdoe#factored_php_classes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's have a sneak preview :p&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SmkuhevqV-I/AAAAAAAAAVA/VbrbVwbUWoM/s1600-h/wiki.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 205px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SmkuhevqV-I/AAAAAAAAAVA/VbrbVwbUWoM/s320/wiki.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5361867984084817890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, what are other excuses of a late commit ^^?&lt;br /&gt;&lt;br /&gt;The trouble was that .... i failed to commit the codes .... OMG... What a pity?&lt;br /&gt;The case was that ... when i did svn ci, server responded me ..&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;svn: Commit failed (details follow):&lt;br /&gt;svn: At least one property change failed; repository is unchanged&lt;br /&gt;svn: Server sent unexpected return value (400 Bad Request) in response to PROPPATCH request &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;err.... what can I do? Of course.... shout SOS!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SmkvNgH2wyI/AAAAAAAAAVI/8UmaNjwr6Bg/s1600-h/mailing-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SmkvNgH2wyI/AAAAAAAAAVI/8UmaNjwr6Bg/s320/mailing-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5361868740368974626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And, I got a hand from the mailing list and lovely Apache told me ...&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[Wed Jul 22 02:29:46 2009] [error] [client (screened)] Could not fetch resource information.  [301, #0]&lt;br /&gt;[Wed Jul 22 02:29:46 2009] [error] [client (screened)] Requests for a collection must have a trailing slash on the URI.  [301, #0]&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Smkv8GttsVI/AAAAAAAAAVQ/GzgKu3m-yAc/s1600-h/mailing-2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Smkv8GttsVI/AAAAAAAAAVQ/GzgKu3m-yAc/s320/mailing-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5361869541002293586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So ... the last resort is Goooooogle!&lt;br /&gt;&lt;br /&gt;With a day or two of searching and guessing ... I came to &lt;a href="http://lists.gnucash.org/pipermail/gnucash-user/2005-December/015186.html"&gt;this&lt;/a&gt;... The archived mail told me that ... perhaps my network proxy did something naughty to my svn ci .... ( :[ damn hidden proxy? )&lt;br /&gt;&lt;br /&gt;The solution is this... i bring the patch back to my home with no hidden proxy ... and committed =]&lt;br /&gt;&lt;br /&gt;p.s. Have a footnote here... I'm brainstorming further refactor the project ... see &lt;a href="http://wiki.php.net/gsoc/2009/phdoe#brainstorming_idea"&gt;http://wiki.php.net/gsoc/2009/phdoe#brainstorming_idea&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5858532376191319259?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5858532376191319259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5858532376191319259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5858532376191319259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5858532376191319259'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/my-gsoc2009-july-24.html' title='my gsoc2009 @ July 24'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SmkuhevqV-I/AAAAAAAAAVA/VbrbVwbUWoM/s72-c/wiki.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3523254262796049296</id><published>2009-07-21T09:52:00.003+08:00</published><updated>2009-09-11T10:11:36.667+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcj'/><title type='text'>Code Jam is back!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SmUfVxTnjfI/AAAAAAAAAU4/n8wsbPv0mP8/s1600-h/gcj09-announce.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SmUfVxTnjfI/AAAAAAAAAU4/n8wsbPv0mP8/s320/gcj09-announce.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5360725390327778802" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3523254262796049296?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3523254262796049296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3523254262796049296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3523254262796049296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3523254262796049296'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/code-jam-is-back.html' title='Code Jam is back!'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/SmUfVxTnjfI/AAAAAAAAAU4/n8wsbPv0mP8/s72-c/gcj09-announce.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1330482865575841184</id><published>2009-07-07T17:34:00.008+08:00</published><updated>2009-07-24T13:08:47.940+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ July 07</title><content type='html'>When I read the gsoc &lt;a href="http://socghop.appspot.com/document/show/program/google/gsoc2009/timeline"&gt;timeline&lt;/a&gt;, I was expected to submit a "mid-term evaluation" that I thought it's a written report. But... finally, it turns out that it's a MC-alike survey ^^ My Life Is MUCH EASIER!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SlMXgJ7ZIGI/AAAAAAAAAUo/CyVEPl4jDeU/s1600-h/gsoc-report.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 199px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SlMXgJ7ZIGI/AAAAAAAAAUo/CyVEPl4jDeU/s320/gsoc-report.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355650223061934178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, there are still 2 big empty boxes to fill in texxxxxxxxxxxxxxxxxt :( I'm not feeling comfortable with it as the boxes are at the bottom of the MCs :p (quite disappoint me that I need to think of something to fill the boxes :p)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SlMYAn76DeI/AAAAAAAAAUw/y1jmHAKFR1w/s1600-h/gsoc-report-difficult.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SlMYAn76DeI/AAAAAAAAAUw/y1jmHAKFR1w/s320/gsoc-report-difficult.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355650780872969698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By the way, I got a good news and bad news from the &lt;a href="http://marc.info/?l=phpdoc&amp;m=124695429221855&amp;w=2"&gt;php mailing list&lt;/a&gt; ... Good news is that php is going to use SVN. Bad news is that doc-editor is CVS-dependent. That's to say I need to twist the code and adopt the migration ^^"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1330482865575841184?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1330482865575841184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1330482865575841184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1330482865575841184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1330482865575841184'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/my-gsoc2009-july-03_07.html' title='my gsoc2009 @ July 07'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SlMXgJ7ZIGI/AAAAAAAAAUo/CyVEPl4jDeU/s72-c/gsoc-report.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5804540215655124366</id><published>2009-07-03T23:55:00.007+08:00</published><updated>2009-07-04T00:44:37.359+08:00</updated><title type='text'>香港人在做什麼?</title><content type='html'>晚, 與友聚, 夜回家. 路經街市後巷, 見老婆婆數名, 在垃圾箱裡找紙皮.&lt;br /&gt;&lt;br /&gt;到底, 誰是兇手? 誰要老婆婆在大熱天時的深夜拾紙皮?&lt;br /&gt;&lt;br /&gt;是因為廢紙回收商的幾元吸引了老婆婆? 是因為企業商品價格高漲? 還是因為政府官員不力?&lt;br /&gt;坦白說, 誰人走到銀行裡, 要求補印單據, 服務費定超十元... 而老婆婆拾紙半天, 可能還得不到十元的"利潤"&lt;br /&gt;&lt;br /&gt;到底企業盈利增長, 是不是代表窮人愈來愈多? 是官商釣結? 還是官被商弄?&lt;br /&gt;&lt;br /&gt;有錢商人每半年的忽然"捐出"數十/百/千萬給一些慈善機構的整體社會意義大? 還是商人旗下企業商品價格每半年的下調0.1%的整體社會意義大?&lt;br /&gt;&lt;br /&gt;有"心"的商人們哦... 你們在做什麼? 你們的盈利是否遠超於香港社會整體的發展? 為什麼香港還窮的時候沒有老婆婆拾紙皮, 到了香港發展了卻"新興起"這"行業"?&lt;br /&gt;&lt;br /&gt;政府的官員們..公務員們.. 你們在做什麼? 你們的高薪價值是否只在於你們的學歷與經驗? 可否大膽一點的執行些有利香港整體社會的措施? 可否令老婆婆拾紙皮這"行業"沒落?&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/6721071264063477716-5804540215655124366?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5804540215655124366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5804540215655124366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5804540215655124366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5804540215655124366'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/blog-post.html' title='香港人在做什麼?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7738480565481612975</id><published>2009-07-03T12:48:00.008+08:00</published><updated>2009-07-03T15:23:39.528+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ July 03</title><content type='html'>=] The first milestone is reached!&lt;br /&gt;&lt;br /&gt;The clearance of js namespace has been completed and ui-components resulted.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sk2vfKdSykI/AAAAAAAAAUQ/46d3XmkWHNo/s1600-h/tree.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 196px; height: 320px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/Sk2vfKdSykI/AAAAAAAAAUQ/46d3XmkWHNo/s320/tree.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5354128481931414082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;main.js keeps several things in its namespace and a clear layout in the source.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sk2wQgiruiI/AAAAAAAAAUY/kztWSfPwTfE/s1600-h/main.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Sk2wQgiruiI/AAAAAAAAAUY/kztWSfPwTfE/s320/main.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5354129329673189922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The next milestone is to cleanup the PHPs as listed in the todo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sk2wmXQj4uI/AAAAAAAAAUg/pd8RR7glbyk/s1600-h/todo.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/Sk2wmXQj4uI/AAAAAAAAAUg/pd8RR7glbyk/s320/todo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5354129705138381538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Currently, a single ExtJsController.php dispatches corresponding handler for particular request. This will be kept but the handler structure will be changed as the handlers are all messed up in class.php. My plan is like this... first groups those related handlers (some are listed in todo), then try to build a hierarchy if there's any. Hope this can be finished before mid of July =]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7738480565481612975?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7738480565481612975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7738480565481612975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7738480565481612975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7738480565481612975'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/my-gsoc2009-july-03.html' title='my gsoc2009 @ July 03'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/Sk2vfKdSykI/AAAAAAAAAUQ/46d3XmkWHNo/s72-c/tree.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8110245914299977223</id><published>2009-07-01T10:28:00.002+08:00</published><updated>2009-07-01T10:31:20.387+08:00</updated><title type='text'>FF3.5 and the Evil</title><content type='html'>The long waited Firefox 3.5 is released!!! &lt;a href="http://www.mozilla.com/products/download.html?product=firefox-3.5&amp;os=win&amp;lang=en-US"&gt;get it&lt;/a&gt; =]&lt;br /&gt;&lt;br /&gt;But.. the evil comes .... :( &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SkrKbAN3c6I/AAAAAAAAAUI/R2sWesYSJN0/s1600-h/evil.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SkrKbAN3c6I/AAAAAAAAAUI/R2sWesYSJN0/s320/evil.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5353313672346694562" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8110245914299977223?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8110245914299977223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8110245914299977223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8110245914299977223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8110245914299977223'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/07/ff35-and-evil.html' title='FF3.5 and the Evil'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/SkrKbAN3c6I/AAAAAAAAAUI/R2sWesYSJN0/s72-c/evil.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7685352725874962786</id><published>2009-06-21T21:43:00.004+08:00</published><updated>2009-06-21T22:11:33.072+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ June 21</title><content type='html'>It's a GDay =] Several bugs are KIA... AND, only several miles away from the destination =]&lt;br /&gt;&lt;br /&gt;main.js is now 18xx lines (which is 23% of the original main.js)&lt;br /&gt;&lt;br /&gt;There are totally 22 ui-components that builds up the doc-editor ui while there are 8 ui-task wrappers work for the user.&lt;br /&gt;&lt;br /&gt;if you read my &lt;a href="http://news.php.net/php.gsoc/86"&gt;previous report&lt;/a&gt; back to 2 weeks ago, i have refactored and tested 4xxx lines js in this two weeks :p indeed ... these 4xxx lines are 70-80% alike but different context in use.&lt;br /&gt;&lt;br /&gt;anyway ... if you read my &lt;a href="http://wiki.php.net/gsoc/2009/phdoe#timeline"&gt;proposed timeline&lt;/a&gt; .... i'm still behind schedule :p even so ... the proposed one is actually different from the acting one :p Thus! this week ... i will use the time for "merging and testing" to refactor and test out the rest of main.js.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7685352725874962786?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7685352725874962786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7685352725874962786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7685352725874962786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7685352725874962786'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/my-gsoc2009-june-21.html' title='my gsoc2009 @ June 21'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2179663265510909688</id><published>2009-06-21T12:16:00.008+08:00</published><updated>2009-06-21T15:09:26.749+08:00</updated><title type='text'>可以做的, 都做完了</title><content type='html'>曾經有一位小朋友問我... 讀大學跟讀中學有什麼分別??&lt;br /&gt;&lt;br /&gt;當時我不懂怎樣回答. 因為.. 我的大學生涯實在有點乏味!&lt;br /&gt;&lt;br /&gt;現在... 作個總結吧.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yr1: &lt;br /&gt; * 為金錢打拚... 打拚... 打拚... 打拚... 打拚... 打拚... 打拚... &lt;br /&gt; * 曾參與 career center 的一些活動... 為將來的金錢打拚... 打拚... 打拚...&lt;br /&gt; * 曾以打拚的金錢, 在summer 時參加了日本與台灣遊學 (好像是工作人士一樣呢... 搵完錢, 放下大假)&lt;br /&gt; * tour 完之後... summer job 為金錢打拚... 打拚...&lt;br /&gt;yr2:&lt;br /&gt; * 為金錢打拚... 打拚... 打拚... 打拚... 打拚... 打拚... 打拚... &lt;br /&gt; * 因遊學認識了些師兄, 從而神推鬼使的參與了faculty支持的"自主研發"項目...&lt;br /&gt; * 曾為項目負出時間, 因不知怎的原因... 項目步入爛尾之路.... orz&lt;br /&gt; * 曾以打拚的金錢, 在summer 時參加了英國遊學 (又放下大假)&lt;br /&gt; * 踏入placement年...&lt;br /&gt;yr3:&lt;br /&gt; * 在大笨象公司實習.....為金錢打拚... 打拚... 打拚... 打拚... 打拚...&lt;br /&gt; * 在"空餘"時間, 完成了"接近爛尾"項目... BUT, 到最後都是一個爛尾的經驗 (因為項目早以失去其意義)&lt;br /&gt; * 受聘於外資科技公司, "推動校園開源文化"?? (終於有一點點的味道了)&lt;br /&gt; * summer .... 與同學歐遊 =] (又放假)&lt;br /&gt;yr4:&lt;br /&gt; * 開始不再把"為金錢打拚"放到第一位 ... 因為好累 =.=" &lt;br /&gt; * 盡心為畢業設計努力.. (終於明白到..成果是怎樣並不太重要... 重要的是過程是怎樣)&lt;br /&gt; * 繼續"推動校園開源文化" ... (黎緊919見 =])&lt;br /&gt; * 與業內社區組織打交道, oaka.. agilehk.. barcamp.. fxair.. olpc.. 等等&lt;br /&gt; * 參與了很多開源/義務/技術發展工作與活動. 認識了很多很多很多的朋友. (是我最開心的其中一件事吧)&lt;br /&gt; * 有幸參與 Google Summer of Code. 參與php internal util 開發(完&lt;a href="http://mrkschan.blogspot.com/2009/04/gsoc.html"&gt;夢&lt;/a&gt;了!?)&lt;br /&gt; * 參與 acm-hk-contest, 終於可以為"電腦科學系學生"這字眼添上一些色彩.&lt;br /&gt; * 還有.. 認識了她 (是我最開心的另一件事)&lt;br /&gt;&lt;/pre&gt;&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/6721071264063477716-2179663265510909688?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2179663265510909688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2179663265510909688' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2179663265510909688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2179663265510909688'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/blog-post.html' title='可以做的, 都做完了'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1016844994785803176</id><published>2009-06-11T11:21:00.002+08:00</published><updated>2009-06-11T11:33:17.000+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ June 11</title><content type='html'>As doc-editor has many sub-components open a code-mirror editor.. i'm trying to make the editor becomes a reusable ui component.&lt;br /&gt;&lt;br /&gt;Today ... i'm working on that and trying to allows two editor to synchronize their scroll bar...&lt;br /&gt;&lt;br /&gt;BUT... problemsssssssssssssssssssssssssssss :)&lt;br /&gt;&lt;br /&gt;Let's consider this!&lt;br /&gt;Editor-A scroll for 40px from top&lt;br /&gt;Editor-A's scroll listener catch the event and ask Editor-B to scroll to 40px from top&lt;br /&gt;Editor-B scroll for 40px from top&lt;br /&gt;Editor-B's scroll listener catch the event and ask Editor-A to scroll to 40px from top&lt;br /&gt;Editor-A scroll for 40px from top&lt;br /&gt; :&lt;br /&gt; :&lt;br /&gt; :&lt;br /&gt;who scroll NEXT?&lt;br /&gt;&lt;br /&gt;in Chrome ... the logic seems working.... but in Firefox ... the logic breaks.&lt;br /&gt;&lt;br /&gt;To handle this.... I added a "scroll-lock" to the editors :] (just a conventional solution to handle synchronization problem)&lt;br /&gt;&lt;br /&gt;New logic follows....&lt;br /&gt;&lt;br /&gt;Editor-A scroll for 40px from top&lt;br /&gt;Editor-A listener gains lock as Editor-B is not scrolling&lt;br /&gt;Editor-B scroll for 40px from top asked by Editor-A listener&lt;br /&gt;Editor-B listener cannot gain lock as Editor-A gained&lt;br /&gt;Editor-B listener gives up asking Editor-A to scroll and force Editor-A to release the lock&lt;br /&gt;&lt;br /&gt;So... scrolling won't be propagated&lt;br /&gt;if Editor-A/Editor-B scroll again, lock can be gained and logic applies&lt;br /&gt;&lt;br /&gt;Sync is FUNNY XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1016844994785803176?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1016844994785803176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1016844994785803176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1016844994785803176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1016844994785803176'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/my-gsoc2009-june-11.html' title='my gsoc2009 @ June 11'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7996654187396172374</id><published>2009-06-05T10:43:00.001+08:00</published><updated>2009-06-05T10:44:58.130+08:00</updated><title type='text'>My Firefox3 was HACKED!! Did yours?</title><content type='html'>:( very very unhappy ... my firefox was hacked by m$ /___\&lt;br /&gt;&lt;br /&gt;damn m$.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SiiGn3WQKII/AAAAAAAAAUA/5RIjZUcyRLc/s1600-h/ff_hack.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SiiGn3WQKII/AAAAAAAAAUA/5RIjZUcyRLc/s320/ff_hack.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5343668977305397378" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7996654187396172374?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7996654187396172374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7996654187396172374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7996654187396172374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7996654187396172374'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/my-firefox3-was-hacked-did-yours.html' title='My Firefox3 was HACKED!! Did yours?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/SiiGn3WQKII/AAAAAAAAAUA/5RIjZUcyRLc/s72-c/ff_hack.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3108446747353615318</id><published>2009-06-04T08:31:00.001+08:00</published><updated>2009-06-04T08:34:00.291+08:00</updated><title type='text'>A joke?? Google Squared</title><content type='html'>&lt;a href="http://googleblog.blogspot.com/2009/06/square-your-search-results-with-google.html"&gt;Google Squared&lt;/a&gt; ... a new comers to goog-lab ...&lt;br /&gt;&lt;br /&gt;Actually ... it's a lie :p&lt;br /&gt;&lt;br /&gt;I see no square in google squared but rectanglesssssssss&lt;br /&gt;If squared means google x google (google ^ 2) ... then this means squared amount of queries which is inbelieveable&lt;br /&gt;&lt;br /&gt;So ... I bet ... the name squared is a lie~~~~~&lt;br /&gt;&lt;br /&gt;Anyway ... good fight to Wolfram Alpha as Squared is already in beta as initial XDDDDDDDDDDDD&lt;br /&gt;&lt;br /&gt;waiting for Google Cube @.@v~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3108446747353615318?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3108446747353615318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3108446747353615318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3108446747353615318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3108446747353615318'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/joke-google-squared.html' title='A joke?? Google Squared'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5223563559290119436</id><published>2009-06-03T16:47:00.002+08:00</published><updated>2009-06-03T16:49:41.659+08:00</updated><title type='text'>Google is Different!!!</title><content type='html'>Take a look of Google in FF3 vs IE7 by &lt;a href="https://browserlab.adobe.com/"&gt;https://browserlab.adobe.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SiY4_0AizEI/AAAAAAAAAT4/6c6XH0AcwtU/s1600-h/Screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 244px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SiY4_0AizEI/AAAAAAAAAT4/6c6XH0AcwtU/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5343020676865510466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google is asking you to download Chrome in IE7 ^^ (but not in FF)&lt;br /&gt;&lt;br /&gt;GOOD!!!!!!!!!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5223563559290119436?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5223563559290119436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5223563559290119436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5223563559290119436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5223563559290119436'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/06/google-is-different.html' title='Google is Different!!!'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/SiY4_0AizEI/AAAAAAAAAT4/6c6XH0AcwtU/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1099808897146438862</id><published>2009-05-31T17:47:00.012+08:00</published><updated>2009-06-08T16:06:36.228+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ May 31</title><content type='html'>This is again not a good day for coding .... But the day to learn coding -.-"&lt;br /&gt;&lt;br /&gt;Let's consider the following js...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var items = this.items;&lt;br /&gt;if (items) {&lt;br /&gt;   delete this.items;&lt;br /&gt;   ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Have you ever think of ... "this.items" is still exist after the delete statement??&lt;br /&gt;&lt;br /&gt;This is why i said today is not that good for coding :p&lt;br /&gt;&lt;br /&gt;Sooooooooooo, let me explain wt's actually happening...&lt;br /&gt;&lt;br /&gt;When i'm refactoring the codes of doc-editor ... I do something like this ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SiJX9pcAlHI/AAAAAAAAATo/IEq9qzmGdCg/s1600-h/extend.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SiJX9pcAlHI/AAAAAAAAATo/IEq9qzmGdCg/s320/extend.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5341928824621798514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;items of the ui-component are directly defined in the Ext.extend function.&lt;br /&gt;&lt;br /&gt;BUT............ The devil comes!!!!!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SiJYV21UqjI/AAAAAAAAATw/x9WBX5u_q7M/s1600-h/firebug-js-delete-prototype.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SiJYV21UqjI/AAAAAAAAATw/x9WBX5u_q7M/s320/firebug-js-delete-prototype.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5341929240534493746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see from the nice FireBug console ... Before the delete statement ... items are there... After the delete statement ... ITEMS ARE STILL THERE and making the initComponent CRASHES!!!&lt;br /&gt;&lt;br /&gt;Right before I know the problem behind ... i guess it's Firefox bug ^^ then I tried on Chrome ... Same thing happen in Chrome's console .... SO... THat's not bug of browser .... &lt;br /&gt;&lt;br /&gt;Wt next?? I dig into Ext.extend ... and think that's bug of Ext.extent ... BUT... Indeed ... it's not a bug but my poor understanding of javascript ~~~~~&lt;br /&gt;&lt;br /&gt;From Ext.extend ... items are considered as prototype attribute SO THAT delete statement WONT work here....&lt;br /&gt;&lt;br /&gt;Solution! prevent using extend statement for defining the itemssssssssssssssss&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;Update@4-June-2009&lt;br /&gt;This morning... I spent another hour to fight against a bug due to Ext.extend(). In addition to items, overriding tbar + bbar as prototype attribute DOES ALSO CRASH extjs. Looook OUT!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1099808897146438862?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1099808897146438862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1099808897146438862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1099808897146438862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1099808897146438862'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/my-gsoc2009-may-31.html' title='my gsoc2009 @ May 31'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SiJX9pcAlHI/AAAAAAAAATo/IEq9qzmGdCg/s72-c/extend.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-9112614913460708642</id><published>2009-05-25T10:03:00.006+08:00</published><updated>2009-10-12T11:41:54.016+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>The GSOC Package</title><content type='html'>When I awoke this morning, a FedEx package arrived ~~~ It's My GSOC Package!! &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Shn8n89q7_I/AAAAAAAAATQ/uwMg7DkiyM0/s1600-h/DSC00134.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Shn8n89q7_I/AAAAAAAAATQ/uwMg7DkiyM0/s320/DSC00134.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5339576596534325234" /&gt;&lt;/a&gt;&lt;br /&gt;A little bit blur as my phone doesn't have anti-handshake ~o~"&lt;br /&gt;&lt;br /&gt;So~ Let's have a macro-shot on the notebook!!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/Shn9R9sHSYI/AAAAAAAAATY/3dNyTR2t8yA/s1600-h/DSC00135.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/Shn9R9sHSYI/AAAAAAAAATY/3dNyTR2t8yA/s320/DSC00135.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5339577318283626882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's pretty the same as Google Notebook XD&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/Shn-AGltD6I/AAAAAAAAATg/niG_p2delKM/s1600-h/g-notebook.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/Shn-AGltD6I/AAAAAAAAATg/niG_p2delKM/s320/g-notebook.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5339578110946643874" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-9112614913460708642?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/9112614913460708642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=9112614913460708642' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9112614913460708642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9112614913460708642'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/gsoc-package.html' title='The GSOC Package'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/Shn8n89q7_I/AAAAAAAAATQ/uwMg7DkiyM0/s72-c/DSC00134.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-932494480834904734</id><published>2009-05-24T16:57:00.011+08:00</published><updated>2009-05-31T17:56:20.821+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ May 24</title><content type='html'>This week, I finished abstracting the Ext.ajax.request() and reflect corresponding changes in phps.&lt;br /&gt;&lt;br /&gt;The major reason for abstracting the pretty good Ext.ajax.request() is that ... we may save some lines for those repeating things like the url of the web service... And another reason is that I know how doc-editor works throughout all request-and-response.&lt;br /&gt;&lt;br /&gt;To have a brief review on main.js ... it's a one-big-ui-class with many methods ... those ui-components can be classified by their nature of task ... The following code block can explain the situation...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class something_like_the_main {&lt;br /&gt;    task1 : function() {&lt;br /&gt;        define_ui_of_task1();&lt;br /&gt;        fire_any_XHR_to_construct_the_ui();&lt;br /&gt;        show_the_ui_for_task1();&lt;br /&gt;    },&lt;br /&gt;    task2 : function() {&lt;br /&gt;        define_ui_of_task2();&lt;br /&gt;        fire_any_XHR_to_construct_the_ui();&lt;br /&gt;        show_the_ui_for_task2();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;    ...&lt;br /&gt;    taskN : function() {&lt;br /&gt;        // feels like copy &amp; paste from above tasks...................&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As you can see, this make my life easier to break them into different large piece ui components. But.. probably these large piece ui-components are not reusable for other task ... Anyway... i'm not making an ui library so that's not a problem =]&lt;br /&gt;&lt;br /&gt;Let's get back to the XHR abstraction. From extjs implementation of ext.ajax.request() method ...&lt;br /&gt;- success callback will be invoked if (httpStatus &gt;= 200 &amp;amp;&amp;amp; httpStatus &lt; 300) || (httpStatus == 1223 for IE)&lt;br /&gt;- failure callback will be invoked else&lt;br /&gt;- request callback will be invoked right after calling success/failure callback&lt;br /&gt;&lt;br /&gt;And, most (but not every) XHRs in doc-editor depend on the "success" attribute in the response json string to make decision. So, why not slightly improve the readability by re-directing those response with "success: false" to the failure callback and free the success callback by a single if-else branching ??&lt;br /&gt;&lt;br /&gt;As a result ... the abstraction is made as follow.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/ShkTIerpL7I/AAAAAAAAAS4/qCs1cAB_jbo/s1600-h/XHR.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 222px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/ShkTIerpL7I/AAAAAAAAAS4/qCs1cAB_jbo/s320/XHR.png" alt="" id="BLOGGER_PHOTO_ID_5339319869620432818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Followed by this decision, I need to reflect the changes in phps. In php... there are 3 routines something like ...&lt;br /&gt;&lt;br /&gt;1) getResponse( $mixed ) {return json_encode($mixed); }&lt;br /&gt;2) getSuccess() { return getResponse( array( 'success' =&gt; true ) ); }&lt;br /&gt;3) getFailure( $message ) { return getResponse( array( 'success' =&gt; false, 'msg' =&gt; $message ) ); }&lt;br /&gt;&lt;br /&gt;XHR request handlers depend on this 3 functions ... sometimes getFailure-getResponse pair while sometimes getFailure-getSuccess pair. So, I decide to unite them.&lt;br /&gt;&lt;br /&gt;It's pretty simple ... change all handlers into getFailure-getSuccess pair and then the XHR abstraction should work. Hence, following codes resulted.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/ShkUi0hkbBI/AAAAAAAAATA/tFo9knJ8vJ4/s1600-h/php.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 222px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/ShkUi0hkbBI/AAAAAAAAATA/tFo9knJ8vJ4/s320/php.png" alt="" id="BLOGGER_PHOTO_ID_5339321421671984146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/ShkZU5unN9I/AAAAAAAAATI/z-wiXFHyp8Y/s1600-h/file-tree.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 219px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/ShkZU5unN9I/AAAAAAAAATI/z-wiXFHyp8Y/s320/file-tree.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5339326680108840914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, when i try to test out the changes ... Something failed... The repository tree failed to load and not files can be retrieved... So, i go back to main.js and see what's matter. It's tricky... the tree nodes are loaded by ext.tree.TreeLoader in which this loader can only accepts json with ext-tree-node config ... While ... the php is returning something like ... { success : true, 1 : tree_node_config1, 2 : tree_node_config2, ... }. A solution is to rollback the change on the repository request handler and allows it to use getResponse instead of getSuccess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-932494480834904734?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/932494480834904734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=932494480834904734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/932494480834904734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/932494480834904734'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/my-gsoc2009-may-24.html' title='my gsoc2009 @ May 24'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/ShkTIerpL7I/AAAAAAAAAS4/qCs1cAB_jbo/s72-c/XHR.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3749237391062497368</id><published>2009-05-18T15:48:00.007+08:00</published><updated>2009-05-18T16:09:09.629+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc2009 @ May 18</title><content type='html'>At the first glance ... the javascript is really a big mess -.-"&lt;br /&gt;&lt;br /&gt;So... I try to study it by first refactoring ALL XHR in the script... So ... I know ... where I click the UI fires what XHR and links to which UI component.&lt;br /&gt;&lt;br /&gt;When I was refactoring the script ... I found that ... when I open a XML with the CodeMirror integrated editor and then close it after loading ... Firebug tells me the following ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/ShEUKYKbWDI/AAAAAAAAASw/Ru8CsaCOMC4/s1600-h/code-mirror-bug.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 183px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/ShEUKYKbWDI/AAAAAAAAASw/Ru8CsaCOMC4/s320/code-mirror-bug.png" alt="" id="BLOGGER_PHOTO_ID_5337069201928181810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"method is not defined" ... At first ... I was wondering if it's my introduced error ... So ... I spent time to setup another environment with cvs no-modification copy... But I still get the "method is not defined".&lt;br /&gt;&lt;br /&gt;Then I see the green wordings saying the stuff relating to i18n ... So ... I spent time to look at it. I'm wondering is this a problem related to script include sequence in the php file or cross script reference issue .... This is because I googled: "javascript method is not defined" and read a &lt;a href="http://stackoverflow.com/questions/153909/why-is-my-javascript-function-sometimes-not-defined"&gt;stackoverflow page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As time passes by ... I figure out that it could not be the referencing issue anymore when I try the bug reproduction steps again and again with one &lt;span style="font-weight: bold;"&gt;slight&lt;/span&gt; change.&lt;br /&gt;&lt;br /&gt;Original reproduce procedure...&lt;br /&gt;1. double click on a XML in "Files Need update"&lt;br /&gt;2. close the newly opened tab after loading complete&lt;br /&gt;3. you could get the err from firebug...&lt;br /&gt;&lt;br /&gt;The slight modifed one...&lt;br /&gt;1. double click on a XML in "Files Need update"&lt;br /&gt;2. wait for a few second after loading complete&lt;br /&gt;2. close tab&lt;br /&gt;3. It's FINE!!!&lt;br /&gt;&lt;br /&gt;The only thing I can do is to read the stack trace :p&lt;br /&gt;&gt; method is not defined&lt;br /&gt;&gt; _("Loading...")                 main.js (line 5)&lt;br /&gt;&gt; getFile()("9f389d22c5cd3246733a5c672c6dcf0f", "hk/chapters/","tutorial.xml", "FNU-LANG-PANEL-", "FNU-LANG-")&lt;br /&gt;&lt;div&gt; &gt; main.js (line 1759)&lt;br /&gt;&gt; initialize()()                      main.js (line 4743)&lt;br /&gt;&gt; DomHelper()()                 ext-all.js (line 9)&lt;br /&gt;&gt; DomHelper()()                 ext-all.js (line 9)&lt;br /&gt;&gt; onInit()()                         Ext.ux.C...Mirror.js (line 59)&lt;br /&gt;&gt; init()()                            codemirror.js (line 153)&lt;br /&gt;&lt;b&gt;&gt; method()                        util.js (line 8)&lt;/b&gt;&lt;br /&gt;&gt;&lt;br /&gt;&gt;  var str = i18n[key];&lt;/div&gt;&lt;br /&gt;As you can see from the bold ... method is not defined is really a method which can be found by CodeMirror source ........ Then I look at the source and found that util.js is included using an iframe ... so ... step 2 ... "wait for a few second after loading complete" WORKS!&lt;br /&gt;&lt;br /&gt;Next time ... i will see the stack trace before interrupting what's an error message actually mean......... :p silly man~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3749237391062497368?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3749237391062497368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3749237391062497368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3749237391062497368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3749237391062497368'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/my-gsoc2009-may-18.html' title='my gsoc2009 @ May 18'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3MkWQdMW-_A/ShEUKYKbWDI/AAAAAAAAASw/Ru8CsaCOMC4/s72-c/code-mirror-bug.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-668144688581110089</id><published>2009-05-18T01:00:00.002+08:00</published><updated>2009-05-18T15:48:04.919+08:00</updated><title type='text'>十天</title><content type='html'>&lt;span&gt;&lt;span&gt;第0天:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "我們做十天的朋友吧. 這十天裡我把你當普通朋友. 你也一樣把我當朋友吧"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "對不起, 其實我想了很久, 我還是不成熟, 還不合適當你的男朋友. 是我負了你, 對不起"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;晚上, 他哭了, 整晚沒睡. 他一直想著與她的一段段片段. 想著她對他的心意. 想著她...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;第1天:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "昨天的說話有沒有後悔呀,呵呵... 起初匆忙地確定我們的關係,但是又匆忙地結束我們的關係不太好吧? 既然你說你不成熟,那就給你一個成熟的做一次決定的機會吧. 既然我想約定要做幾天的朋友的,不能一點也不給面子吧? 所以不管昨天之前是什麼關係, 也不管以後是什麼關係, 我們約定做一個月的好朋友吧"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "笨蛋, 十天變了一個月了... 其實不是說不給面子, 只是知道, 我還是不習慣. 我習慣跟普通朋友聊幾句 ... 可是不習慣常常的聊著. 你昨天晚上睡不著哭了吧... 我也哭了. 我其實很明白... 我沒好好的關心你..."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他知道這段關係是還可以挽留的, 但他沒有.. 因為, 他知道自己不合適去維持這段關係...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;本來, 他已經心死了... 但是, 她卻不想就這樣結束這段感情.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "放棄愛一個人, 如果是為了讓他/她更幸福,那可以放棄. 但是如果選擇繼續愛一個人是為了讓他/她更幸福那為什麼要放棄"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "愛一個人也要懂得放手. 我錯了, 本來不應該開始, 繼續下去只會樣你一直不開心"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "如果你說我們的開始是一個錯誤的話, 那現在結束就是一個解決錯誤的完美答案嗎? 為什麼不嘗試用更好的辦法去解決這個錯誤呢"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "如果覺得現在不夠成熟, 其實你其他方面都很成熟, 就是對待感情不夠成熟. 但是, 最終總有一個從不成熟到成熟的過程. 你最後還是要過這一步的. 為什麼遇到問題就逃避而不敢從實質去解決? 你不想成為一個事業感情家庭都能成熟對待的人嗎"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他這時, 知道她不再想結束這感情, 但他實在知道自己的不足.. 卻真的想逃避.. 結果, 他說了一番非常狠的說話.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "我很辛苦. 要坐兩個多小時的車很辛苦、想見的時候見不到很辛苦、到一個陌生的地方很辛苦、常常用文字遘通很辛苦" (因為他們相隔異地)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "真的沒有想像到和我的這段相處, 你會覺得是那麼的辛苦. 想到最初我的想法和你現在的一樣. 當時你的一句話 - 其實這些都不重要. 一句什麼都不重要的話，讓我放下了一切顧慮"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "其實我很自私, 你就當我是負心人吧! 我不值得你去愛, 我不想大家辛苦下去"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;他: "我們分手吧"&lt;br /&gt;&lt;br /&gt;他: "做一對不久就關心對方的朋友, 不是好多嗎"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;過了很久... 他還沒收到她的回覆... 他開始擔心起上來...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "笨蛋, 又在哭嗎?"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;他: "還在嗎? 不要不說話. 很擔心你"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "你還會擔心我嗎? 剛剛那些話, 真的可以透涼到心底"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他聽了, 淚一直下...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "你很壞, 常常說一些要人哭的話... 笨蛋!"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "你不是也一樣嗎? 擔心我哭, 可是哪句話不會讓我不哭呢"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "你每次坐兩個多小時車來見我, 我當然知道你很辛苦. 你曾說了這不重要, 就是因為這些都可以解決的. 自從我答應你之後就沒考慮這些"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "因為我知道只要能吃苦, 沒有過不去的. 要我等3年, 我也願意. 但是我不能接受你心裡沒有我" (他們有3年成婚之約)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "為什麼你要對我這樣好... 為什麼要對一個常常忽略你的人這樣好"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "因為一個我累時, 樂意幫我按摩的人. 因為一個和我吵了架, 夢裡喊我名字的人. 因為一個在車上怕我暈車, 怕我扶手扶痛, 要我抱他腰的人. 因為一個怕我睡不好, 用膊頭給我當枕頭的負心的人..."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "就當我們有緣沒份吧..." (這時, 他的淚水下得更多...)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "現在一句話就結束了嗎? 怎麼沒有前幾天的,想去修補我們關係的勇氣了" &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;她: "可是你都沒有嘗試過,去修補這次"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;話說不是第一次因他忽略她而令到關係緊張了... 他就是知道... 一次又一次的忽略她, 一次又一次的令她失望... 他只說了三個字...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "我累了"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "你這次真的放棄了嗎? 曾經說要喝我煲的湯, 可是還沒嚐過, 就放棄了嗎? 曾經說要我幸福, 現在不關心我的幸福了嗎?"  (他的淚下得不停)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "你要做回自私的人, 為什麼對其他的人你可以無私奉獻? 對我就要自私, 真的是為了我未來的幸福嗎"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "我就是知道帶不了幸福給你... 還是算吧... 我已經連流淚的力也沒有啦"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "不要那麼不重視一次決定好不好? 為什麼不能好好的溝通? 為什麼可以對我這樣?"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "靜下來一天好嗎? 是我負了你"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "我何嘗不想靜下來? 可是靜不下來"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;她: "你這個大壞蛋, 可不可以教幾種讓我靜下來的方法.. 我怕回家在家人面前哭"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;她: "你既然把跟我的相處看成負擔, 那我還是不成為你的負擔吧... 希望你記住曾經有個唯一的女朋友為你流淚, 有個天天牽掛你而被你忽略的人"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;這時, 他再不想說些什麼... 只想一直的哭下去... 他心中只知道... 原來... 喜歡一個人跟愛一個人是不一樣的. 他很愛她, 但卻怕負了她, 只想她找到比他更好的.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;過了很久很久.... 他知道她在街上... 又很久沒消息... 又再擔心起來.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他 (帶著冷淡的語氣) : "到家了沒有, 到家給我發個短訊就好了" &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "我放不下, 我的心很痛"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;她: "你不可以不要我的.. 你曾說過, 要照顧我一生. 以前是, 以後也是. 不要對我說那麼狠心的話"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "在那啦?? 還沒回去嗎? 找你的姪子玩吧.. 不要一個人在街"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "我怕在家人面前哭. 我很沒用的, 常常哭"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他更擔心了... 只好來個小計...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "我的乖乖, 聽話快回家, 回家再說吧"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;他: "快回家, 你不回去, 我就不理你, 回家網上談吧.."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "我聽話, 不要不理我, 我回家"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "好啦, 我在網上等你"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他本來只是想騙她先回家... 他便可安心一點... &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;他為了這段可挽留而怕最後卻害傷她的感情, 掙扎了一整天.. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;最後... 他仍留在網上等她的出現...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "笨蛋, 有沒有哭到眼晴累累的?"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "其實一直在想, 為什麼我們兩個都是一遇到困難, 首先想到的是放棄? 曾經還說過的, 不要輕易放棄的說"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他知道她到家了.. 還是只想快一點靜下來想想...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;他: "我的眼睛哭得快睜不開了. 早點休息, 明天靜下來再談好嗎"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;她: "可是睡不著, 現在談吧"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他: "不要, 明天談吧"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... 兩個人一直的爭了幾句... 最後他下線了.&lt;/div&gt;&lt;div&gt;過了一會... 她又發短訊了... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "你睡覺了嗎? 是不是眼睛痛得不想對著電腦? 還是為了讓我徹底死心? 其實我是早上才看到你的短信. 從看到短信起就一直在流淚, 但是開始一直忍著、克制著, 所以給你發了電郵. 但是之後實在忍不住了"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "給我點勇氣, 讓我安心吧"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他仍沒睡, 卻想裝睡下去... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "我看了以前你給我發的短信. 我好難受, 我知道你沒有睡著, 可是你不要不理我"&lt;/div&gt;&lt;div&gt;她: "幾天前, 你還說了要學會做我的好老公的..."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他開始心動 ... 但卻仍堅持著.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "我很沒用, 說了讓你睡, 可是我真的很難受. 為什麼我們要相互折磨對方呢?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;過了又一會...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "我又一遍看了你和我的blog. 護身符其實很有用, 因為它不但讓我沒怎麼生病, 還讓我愛上了你. 可是不知道護身符會不會繼續保護我, 因為他就是你. 我不想讓護身符離開" (那個護身符應該算是他們的訂情信物吧....)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他堅持不了...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他: "嘈死啦 明天才說吧"&lt;/div&gt;&lt;div&gt;他: "親愛的~ 樣親愛的睡吧~"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "同樣的一句話, 怎麼換種方式說, 聽起來就感覺完全不一樣啦. 聽了第一句話, 我完全崩潰. 聽了第二句話, 我想抱著你親一口. 好啦, 親愛的不吵親愛的了. 可是親愛的明天不要放棄親愛的, 有什麼苦, 有什麼問題, 我都願意和你一起承擔的. 我不想輕易放棄你, 你也不要我"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;就這樣... 過了第一天. 他其實還沒下決定... 因為.. 他想靜靜的想.. 想一想, 是否去修補這段感情...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第2天:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她跟他說了很多很多, 但他卻只想靜下來, 只好一時冷淡的回應, 又一時關心的問候...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;到了深夜...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他: "你在睡吧.. 其實, 我不想樣你傷心. 我知道最近你受了很多苦, 可是我沒好好關心你... 其實我沒想過我們將來怎樣, 太多不明因素啦. 只是想問你, 將來你又需要我關心的時候, 我又卻忽略你, 我又沒關心你, 你會怎樣想呢"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "其實我在意的, 是最終你願意跟我過嗎?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他給了她一個很失望的答案.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他: "這麼短時間就可以肯定嗎? 可以樣我們再認識多一點才回答嗎?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她: "那不急著回答吧. 那我們接下來的時間, 先不考慮這些吧. 順其自然吧讓時間來回答吧"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第3天:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;她在Blog 裡留了一封信給他....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;如果你覺得認定了我，那你跟我說下，如果現在沒認定，可以到你認定的那天，再告訴我。如果你現在沒認定我，或者將來也沒認定我，那請你永遠不要跟我講，就讓時間去平息這一切吧。因為我不知道我還有沒有承受力去承受這一答案。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;感情不是遊戲，不是一句簡單的話，我們開始吧，我們結束吧，就開始了，就結束了。一個真正負責任的人不會輕易的去開始，也不會輕易的去結束，除非到了不得不開始的時候，除非到了無法挽回不得不結束的時候，因為這都將影響人的一輩子。開始的時候請多思考些問題，不是一句簡單的是個錯誤的開始，我們結束吧，就結束了。因為以後也許這些簡單的幾句話，就會結束一個美麗的生命，即使你不為之感到惋惜，我相信在你一輩子的生活裡也會留下陰影。所以請從一開始就做個負責任的人吧，而不是太多的我還不成熟之類的話。... 既然開始了，即使是個錯誤，但也是一個不同尋常的錯誤，因此不能像解決其他錯誤一樣-既然是錯誤就結束這個錯誤吧。其實這些都是不負責任的做法，是在逃避。這些都是說起來簡單，做起來很難。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後祝你事業上輝煌，我相信以你現在的事業心態肯定可以實現你的事業夢想！同時祝你感情美滿，請不要無心地傷害下一個愛你的女孩。認定她之後再去追，認定她之後，選擇了開始，就不要輕易跟她說--選擇放棄吧。 &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;請不要跟我說--我負了你之類的話，傷害了一個人，說這些話只會讓她更傷害，讓時間去平息這一切吧！&lt;/div&gt;&lt;/blockquote&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/6721071264063477716-668144688581110089?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/668144688581110089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/668144688581110089'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/blog-post_18.html' title='十天'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2509813174616422329</id><published>2009-05-08T12:32:00.003+08:00</published><updated>2009-05-08T12:37:12.292+08:00</updated><title type='text'>Oracle FAQ for Sun Acquisition...</title><content type='html'>The faq can be found &lt;a href="http://www.oracle.com/sun/lje-oracle-sun-faq.pdf"&gt;here&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just wondering ... is the purpose of Greening an economic consideration or a sustainability consideration??&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What's the "1st cause" of Greening??&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;This is not just a green issue, it’s an economic issue. Today, database centers are paying as much for electricity to run their computers as they pay to buy their computers.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;or ... it's just a win-win situation and so the 1st cause can be ignored??&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/6721071264063477716-2509813174616422329?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2509813174616422329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2509813174616422329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2509813174616422329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2509813174616422329'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/oracle-faq-for-sun-acquisition.html' title='Oracle FAQ for Sun Acquisition...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4603416088663426941</id><published>2009-05-07T22:02:00.005+08:00</published><updated>2009-05-07T22:21:25.961+08:00</updated><title type='text'>some words from Larry... @ Michigan 2009</title><content type='html'>Google's co-founder just gave a &lt;a href="http://www.google.com/intl/en/press/annc/20090502-page-commencement.html"&gt;commencement address&lt;/a&gt; @ Michigan...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I won't compare it with &lt;a href="http://mrkschan.blogspot.com/2007/09/some-words-from-steve-stanford-2005.html"&gt;Steve's &lt;/a&gt; but I can say both of them are ambitious!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I very like two sentences which I quote here....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;You know what it's like to wake up in the middle of the night with a vivid dream? And you know how, if you don't have a pencil and pad by the bed to write it down, it will be completely gone the next morning?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just like me, your families brought you here, and you brought them here. Please keep them close and remember: they are what really matters in life.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;For the 1st sentence, I was thinking whether he's making a joke at the very beginning... But, when he elaborate further .... There's actually meaning in it. What's that mean??? Another sentence from him can explain "When a really great dream shows up, grab it!".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's true ... That's always true! A dream will be completely gone in the next morning !!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have my dream ... I know it is not a crazy dream at the moment... But... I'll make it crazy someday later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the other hand, the 2nd sentence remind me to do more with my family.. Frankly speaking... I know i'm not doing so well with my family... My brother is doing much more than me ... I should learn from him to do better with my family =] (i'm not doing bad to my family anyway^^")&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4603416088663426941?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4603416088663426941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4603416088663426941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4603416088663426941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4603416088663426941'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/some-words-from-larry-michigan-2009.html' title='some words from Larry... @ Michigan 2009'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4345435234880062443</id><published>2009-05-02T11:59:00.002+08:00</published><updated>2009-05-02T12:01:52.447+08:00</updated><title type='text'>一句讓我刻骨鉻心的說話</title><content type='html'>&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:-webkit-monospace;"&gt;&lt;blockquote&gt;不要以為就你的時間很寶貴,別人都是閒人. 別人也是抽時間跟你聊,為什麼就在別人好心好意跟你聊時,你心不在焉? 有這種那種忙的理由? 好像你是神人,可以一心幾種,心在玩,然後這邊敷衍幾句.&lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4345435234880062443?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4345435234880062443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4345435234880062443' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4345435234880062443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4345435234880062443'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/blog-post.html' title='一句讓我刻骨鉻心的說話'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4334741263262157098</id><published>2009-05-02T10:28:00.001+08:00</published><updated>2009-05-02T10:29:50.617+08:00</updated><title type='text'>my blog ... a New Look =]</title><content type='html'>Just changed the template here =]&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having a clear looking now ~~ yeah~~~ i'm loving it :p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Template from &lt;a href="http://btemplates.com/2009/04/15/greenpress/"&gt;http://btemplates.com/2009/04/15/greenpress/&lt;/a&gt;  ~~ Many thx for the beauty work~~~~&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cool!!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4334741263262157098?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4334741263262157098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4334741263262157098' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4334741263262157098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4334741263262157098'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/05/my-blog-new-look.html' title='my blog ... a New Look =]'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4831975505861214964</id><published>2009-04-27T23:03:00.003+08:00</published><updated>2009-04-27T23:06:12.482+08:00</updated><title type='text'>HTML5 + SVG + CANVAS = CHROME!!</title><content type='html'>FYP SUCKS!!! It uses all my time ..... I missed an important news ..... &lt;div&gt;&lt;a href="http://news.cnet.com/8301-17939_109-10199417-2.html?tag=mncol;txt"&gt;http://news.cnet.com/8301-17939_109-10199417-2.html?tag=mncol;txt&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The news about Chrome Experiment....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://www.chromeexperiments.com/"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a href="http://www.chromeexperiments.com/"&gt;http://www.chromeexperiments.com/&lt;/a&gt; - These experiments were created by designers and programmers from around the world using the latest open standards, including HTML5, Canvas, SVG, and more. Their work is making the web faster, more fun, and more open – the same spirit in which we built Google Chrome.&lt;/blockquote&gt;I think .... I have a long way to catch the latest again -o-........&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/6721071264063477716-4831975505861214964?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4831975505861214964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4831975505861214964' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4831975505861214964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4831975505861214964'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/html5-svg-canvas-chrome.html' title='HTML5 + SVG + CANVAS = CHROME!!'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-208132829678351252</id><published>2009-04-26T13:55:00.003+08:00</published><updated>2009-04-26T17:10:12.823+08:00</updated><title type='text'>The day after ... An Annual Experiment</title><content type='html'>As ... last year .... i'm not able to stay in project lab .... I cannot continue the experiment....&lt;br /&gt;&lt;br /&gt;So... the last experimental result can only be refer to the year before last year ....&lt;br /&gt;&lt;br /&gt;see &lt;a href="http://mrkschan.blogspot.com/2007/04/project-lab.html"&gt;http://mrkschan.blogspot.com/2007/04/project-lab.html&lt;/a&gt; for the result.&lt;br /&gt;&lt;br /&gt;This year .... I'm a citizen in the project lab ... so ... let me report the result of this year...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today = The Day after FYP is Over...&lt;br /&gt;Head count() &lt;= 5.&lt;br /&gt;&lt;br /&gt;Result is as expected. Looking forwards to next year's result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-208132829678351252?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/208132829678351252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=208132829678351252' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/208132829678351252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/208132829678351252'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/day-after-annual-experiment.html' title='The day after ... An Annual Experiment'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-570893334188175719</id><published>2009-04-21T10:29:00.002+08:00</published><updated>2009-10-12T11:42:14.671+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GSOC RESULT</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/Se0vqQr2svI/AAAAAAAAASo/CuJsoDzVaEQ/s1600-h/AC.PNG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/Se0vqQr2svI/AAAAAAAAASo/CuJsoDzVaEQ/s320/AC.PNG" alt="" id="BLOGGER_PHOTO_ID_5326966337329083122" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-570893334188175719?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/570893334188175719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=570893334188175719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/570893334188175719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/570893334188175719'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/gsoc-result.html' title='GSOC RESULT'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/Se0vqQr2svI/AAAAAAAAASo/CuJsoDzVaEQ/s72-c/AC.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5101706058445200512</id><published>2009-04-18T18:36:00.005+08:00</published><updated>2009-04-18T21:43:25.924+08:00</updated><title type='text'>晝夜無間的成果...</title><content type='html'>My pooooooor fyp ... finally..... =]&lt;br /&gt;&lt;object width="454" height="376" class="BLOG_video_class" id="BLOG_video-b64b99504723f985" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v6.nonxt7.googlevideo.com/videoplayback?id%3Db64b99504723f985%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331627737%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D21F7909731552AE38F1EDCFFBF711744909EE238.39322514FE10AF90D1876A06C8A313CCBB967275%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db64b99504723f985%26offsetms%3D5000%26itag%3Dw160%26sigh%3DU7hGFwZwMAVdq2tY1a0m6o6M9nE&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="454" height="376" bgcolor="#FFFFFF"flashvars="flvurl=http://v6.nonxt7.googlevideo.com/videoplayback?id%3Db64b99504723f985%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331627737%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D21F7909731552AE38F1EDCFFBF711744909EE238.39322514FE10AF90D1876A06C8A313CCBB967275%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db64b99504723f985%26offsetms%3D5000%26itag%3Dw160%26sigh%3DU7hGFwZwMAVdq2tY1a0m6o6M9nE&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;utube with HD XD &lt;a href="http://www.youtube.com/watch?v=jjRHyPCBV3o"&gt;http://www.youtube.com/watch?v=jjRHyPCBV3o&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5101706058445200512?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=b64b99504723f985&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5101706058445200512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5101706058445200512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5101706058445200512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5101706058445200512'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/blog-post_18.html' title='晝夜無間的成果...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8383671370858394781</id><published>2009-04-13T13:53:00.015+08:00</published><updated>2009-04-13T14:53:42.633+08:00</updated><title type='text'>The Art of Computer Science</title><content type='html'>藝術, 是抽象的, 是需要親身感受才知曉的.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;source from wiki...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;艺术（art）一词源自于拉丁文ars，意为“技巧”，现在虽保有原意，却也衍生出更广义的含意，几乎包括所有的创造性学问。　&lt;/p&gt; &lt;p&gt;目前艺术的大类包括：&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E6%96%87%E5%AD%B8&amp;amp;variant=zh-cn" title="文学" class="mw-redirect"&gt;文学&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E7%B9%AA%E7%95%AB&amp;amp;variant=zh-cn" title="绘画" class="mw-redirect"&gt;绘画&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E9%9F%B3%E6%A8%82&amp;amp;variant=zh-cn" title="音乐" class="mw-redirect"&gt;音乐&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E8%88%9E%E8%B9%88&amp;amp;variant=zh-cn" title="舞蹈"&gt;舞蹈&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E9%9B%95%E5%A1%91&amp;amp;variant=zh-cn" title="雕塑"&gt;雕塑&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E5%BB%BA%E7%AF%89&amp;amp;variant=zh-cn" title="建筑" class="mw-redirect"&gt;建筑&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E6%88%B2%E5%8A%87&amp;amp;variant=zh-cn" title="戏剧" class="mw-redirect"&gt;戏剧&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E6%94%9D%E5%BD%B1&amp;amp;variant=zh-cn" title="摄影" class="mw-redirect"&gt;摄影&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=%E9%9B%BB%E5%BD%B1&amp;amp;variant=zh-cn" title="电影" class="mw-redirect"&gt;电影&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;那麼... 科學呢? 科學又有沒有藝術的存在? 而電腦科學... 又有沒有繼承科學本身應有的藝術? 既然, 音樂是藝術的一類, 就拿音樂作一個比喻.&lt;br /&gt;&lt;br /&gt;同一段音律, 同一篇樂譜, 經過不同的人, 不同的演譯手法, 帶給人不同的感覺,不同的影響. 這.. 就是藝術嗎?&lt;br /&gt;&lt;br /&gt;如果你認同的話... 科學, 理應亦是一門藝術!&lt;br /&gt;&lt;br /&gt;科學分為兩類: 一為立論層面、一為應用層面.&lt;br /&gt;&lt;br /&gt;從立論層面角度看. 由觀察, 到假設. 由假設, 到實驗與推論. 由實驗與推論, 到定論. 由定論, 到再假設.&lt;br /&gt;&lt;br /&gt;從應用層面角度看. 同樣由觀察, 到設計. 由設計, 到實踐理論. 由實踐理論, 到測試. 由測試, 到廣泛應用. 由廣泛應用, 到再觀察.&lt;br /&gt;&lt;br /&gt;綜合兩方面的過程, 同樣可以是... 經過不同的人, 不同的手法, 帶給人不同的結果,不同的影響. 最終亦是可以帶給人不同的感覺,不同的影響. 科學, 理應亦是一門藝術!&lt;br /&gt;&lt;br /&gt;至於, 電腦科學呢?&lt;br /&gt;&lt;br /&gt;理論上, 電腦科學理應同樣繼承了科學的藝術.&lt;br /&gt;&lt;br /&gt;這些東西... 在今早看一套與音樂有關的電視劇時想到的....&lt;br /&gt;&lt;br /&gt;這一篇文章的重點, 並不在於尋找科學的藝術價值... 而是尋找科學的藝術價值在於我本身的價值.&lt;br /&gt;&lt;br /&gt;其實... 這價值只不過是一條問題的答案... 而這條問題, 我亦層經在之前不時提出. "我在大學究竟做什麼?"&lt;br /&gt;&lt;br /&gt;理論上, 在大學所能學會的理論與實踐手法, 在其他大學, 什至乎書本上亦可學會. 更什的是, 有很多知識在大學學不會! 那在大學的存在意義到底是什麼?&lt;br /&gt;&lt;br /&gt;可能有人會說... 入大學與自學的分別在於, 大學有人指導. 但到了廿十世紀後, 亙聯網的出現已經令這一個說法失去其意義. 自學亦可從網上發問, 不知為什麼的, 網上亦會有人回應. 那麼.. 入大學做乜!?&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/6721071264063477716-8383671370858394781?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8383671370858394781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8383671370858394781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8383671370858394781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8383671370858394781'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/art-of-computer-science.html' title='The Art of Computer Science'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-9118521824362940030</id><published>2009-04-06T18:21:00.002+08:00</published><updated>2009-05-16T14:41:33.872+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>gsoc .. 兩年前、一年前、今年的想法</title><content type='html'>Google Summer Of Code ... 是我在兩年前認識的一個 program. 當我第一次接觸它的時間, 它已經 deadline 了.&lt;br /&gt;&lt;br /&gt;自此, 小弟不斷的留意與 GSOC 有關的消息. 直至一年前, GSOC 2008 的舉辦... 小弟心動了... 只可惜... 因為要到某銀行實習, 給了自己一個藉口, 繼而卻步於門前. 那一年... 小弟雖未能參與其中... 但亦在歐遊的期間, 參與了 Google Code Jam (GCJ). 由於未有準備 + 人在歐遊 , 結果很自然連第一round 都過不了.&lt;br /&gt;&lt;br /&gt;這一年, GSOC 2009 舉辦了, 起初未有心動. 後來, 得到一位&lt;a href="http://benlaux.blogspot.com/2009/02/google-summer-of-code.html"&gt;朋友&lt;/a&gt;的問題: "有沒有興趣參加這一年的 GSOC ?" 小弟對 GSOC 的情意結又一次的被觸動了.&lt;br /&gt;&lt;br /&gt;事實上... 小弟這一年是 undergrad 的最後一年... 假如讀不上 mphil, 就是最後一年的學生生涯. 換句話說, 很大可能是最後一個參與 GSOC 的機會. 坦白說, 就算有多忙, 也要花時間參與.. 無論成功與否... 就像&lt;a href="http://www.google.com/search?hl=en&amp;amp;rlz=1B5GGGL_enHK313HK313&amp;amp;q=%E6%94%BE%E6%A3%84%E6%98%AF%E6%9C%80%E5%A4%A7%E7%9A%84%E5%A4%B1%E6%95%97&amp;amp;btnG=Search"&gt;馬雲&lt;/a&gt;所說: "放弃才是最大的失败". (那麼... 不成功便成仁麼!? XD)&lt;br /&gt;&lt;br /&gt;April 20 19:00 UTC 便是結果公報的時間, 靜候 ...&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Anyway ... i will go for GCJ this year ~~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-9118521824362940030?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/9118521824362940030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=9118521824362940030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9118521824362940030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/9118521824362940030'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/gsoc.html' title='gsoc .. 兩年前、一年前、今年的想法'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-853060132920040921</id><published>2009-04-02T22:35:00.005+08:00</published><updated>2009-05-16T14:41:33.873+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>my gsoc proposal submitted to php.net</title><content type='html'>&lt;p&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Proposal&lt;/strong&gt;&lt;/span&gt;: Online editor for the PHP Manual ... &lt;a href="http://wiki.php.net/gsoc/2009#online_editor_for_the_php_manual"&gt;http://wiki.php.net/gsoc/2009#online_editor_for_the_php_manual&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"  style="border-collapse: collapse;  font-weight: bold; line-height: 22px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;font-family:Arial;"&gt;&lt;span class="Apple-style-span"  style="border-collapse: separate;  font-weight: normal; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;font-family:Georgia;"&gt;Currently, the documentation work is synchronized by cvs. But still, there are potential conflicts due to redundant work. Besides, it's not that easy to share the works or even pipelining the works in a distributed environment. Therefore, a centralized environment is introduced. &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The editor is still under development and the source can be found by http://cvs.php.net/viewvc.cgi/doc-editor/ &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Short Description&lt;/strong&gt;&lt;/span&gt;: In order to ease the work of PHP Documentation Group, work on Online Editor for PHP Manual has already started by Yannick... The Online Editor mimicks an offline PHP documentation environment by using ExtJS as ide alike ui and providing xml-editor with CodeMirror syntax highlighting. The documentation group can make changes online, DocBook syntax check, CVS Log/Diff/Commit, patch review list, etc.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Full Description&lt;/strong&gt;&lt;/span&gt;:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PhD OE allows PHP Documentation Group to carry documentation right ahead through the browser instead of using cvs to synchronize their local copy. There is ide alike ui on PhD OE so that the doc-group can directly edit the PHP DocBook xml online. Despite, PhD OE also eases the collaboration in an open documentation environment. Doc-group can share the workloads easily since they no longer need to pass the local modified copies around but on PhD OE. In addition to this, PhD OE does allow community contributor to submit patch so that the doc-group can review the patch in a centralized location like an issue list.&lt;/p&gt;&lt;p&gt;To find out the implemented features of PhD OE, visit following posts on mailing list:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://marc.info/?l=phpdoc&amp;amp;m=123394012724778&amp;amp;w=4"&gt;http://marc.info/?l=phpdoc&amp;amp;m=123394012724778&amp;amp;w=4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://marc.info/?l=phpdoc&amp;amp;m=123543064407717&amp;amp;w=4"&gt;http://marc.info/?l=phpdoc&amp;amp;m=123543064407717&amp;amp;w=4&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Currently, there are some opening issues on the TODO list (found by - &lt;a href="http://cvs.php.net/viewvc.cgi/doc-editor/TODO?revision=1.5&amp;amp;view=markup"&gt;http://cvs.php.net/viewvc.cgi/doc-editor/TODO?revision=1.5&amp;amp;view=markup&lt;/a&gt;). One of the major task is to "Split main.js into several objects &amp;amp; files" because of the coding readability, continunity, and scaliability. main.js contains ui of PhD OE. There are 6922 lines of code in revision 1.21. It is obvious that maintaining such a large piece of codes is tidous and not that good. Thus, this proposal describe how to split the main.js and merge the js for deployment.&lt;/p&gt;&lt;p&gt;Right before talking about the split, let's see how to merge. ExtJS ant script make use of YUI compressor. So, there's no doublt that YUI compressor is a good choice to merge js in this project as the ui depends on ExtJS. Anyway, moving back to the split, main.js can be split based on module. I suggest Java alike model using 1 module 1 class 1 js. This is the practice I used in my own ExtJS project. Nevertheless the split is time consuming, the effort spent on this kind of refactoring allows me to better understand how the ui works and improve the structure. The proposed approach follows.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Fork a branch to work on refactoring. The trunk keeps on development&lt;/li&gt;&lt;li&gt;Refactor and Test the branch... Testing is important here! No failure should be induced by refactoring.&lt;/li&gt;&lt;li&gt;Merge the modified trunk to the refactored branch.&lt;/li&gt;&lt;li&gt;Freeze trunk, test the merge.&lt;/li&gt;&lt;li&gt;Done.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Another task is to "Clean up class.php". Again, a refactoring task. class.php is the "bootstrap" residing on the apache server ... with 4075 lines of code in revision 1.21. As written in the TODO list, initial ideas for refactoring already exist.  It would be splited into several smaller classes that are quite relatively independent to each other. The proposed appraoch would be somehow the same as refactoring main.js. Fork, Refactor &amp;amp; Test, Merge, Freeze &amp;amp; Test, complete!&lt;/p&gt;&lt;p&gt;Thirdly, according to the TODO list again... the mod_rewrite task is another "better to have first". It makes the codes look much better to understand. This task is pretty strict forward. Design the pattern, write the regular expression on apache conf (.htaccess could be the choice). And then, reflects the changes in both php and js. It's totally different from refactoring, no forking and no code freezing.&lt;/p&gt;&lt;p&gt;Finally, if there's still plenty of time, I would like to propose that the modified but not-yet-saved file should have a lock or google-doc alike collaborative editing. When someone is editing a file with file-based locking, others cannot edit it at the same time before the file is commited (lock released). This reduce the chance of having conflict in modification. If collaborative editing is considered, high level DocBook xml-tag locking can be considered. This means ... partly locking the file so that anyone can edit different parts of the same file. When conflict occur, notify the editors. This would be another busy task.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Timeline&lt;/strong&gt;&lt;/span&gt;:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Community Bonding Period - Study current PhD OE architecture. Confirm refactoring procedures and exact deliverables with mentor.&lt;/p&gt;&lt;p&gt;May 23 ~ June 20 [around 4 man week] - Refactor &amp;amp; Test main.js&lt;/p&gt;&lt;p&gt;June 20 ~ June 27 [around 1 man week] - Merge Refactored code with trunk + Testing + Documentation&lt;/p&gt;&lt;p&gt;June 27 ~ July 4 - [around 1 man week] - Compile interim report&lt;/p&gt;&lt;p&gt;July 4 ~ July 18 [around to 3 man week] - Refactor &amp;amp; Test class.php&lt;/p&gt;&lt;p&gt;July 18 ~ July 25 [around 1 man week] - Merge Refactored code with trunk + Testing + Documentation&lt;/p&gt;&lt;p&gt;July 25 ~ August 15 [around 3 man week] - Implement mod_rewrite, reflect changes in php and js + Testing + Documentation&lt;/p&gt;&lt;p&gt;August 15 onwards - Compiling final report&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Category (PHP, PELC, PEAR, other)&lt;/strong&gt;&lt;/span&gt;: PHP Manual&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-853060132920040921?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/853060132920040921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=853060132920040921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/853060132920040921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/853060132920040921'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/my-gsoc-proposal-submitted-to-phpnet.html' title='my gsoc proposal submitted to php.net'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4648309596921002220</id><published>2009-04-01T12:02:00.001+08:00</published><updated>2009-04-01T12:03:57.615+08:00</updated><title type='text'>職業無分貴賤</title><content type='html'>很久沒寫, 因為實在是忙&lt;br /&gt;&lt;br /&gt;今日在填 MPhil Application ... 到了 Grad School 一遊, 實在是有感而發 ....&lt;br /&gt;&lt;br /&gt;職業無分貴賤 .. 是真的嗎 !?&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;XD&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;rlz=1B5GGGL_enHK313HK313&amp;amp;q=%E8%81%B7%E6%A5%AD%E7%84%A1%E5%88%86%E8%B2%B4%E8%B3%A4&amp;amp;btnG=Search"&gt;http://www.google.com/search?hl=en&amp;amp;rlz=1B5GGGL_enHK313HK313&amp;amp;q=%E8%81%B7%E6%A5%AD%E7%84%A1%E5%88%86%E8%B2%B4%E8%B3%A4&amp;amp;btnG=Search&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4648309596921002220?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4648309596921002220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4648309596921002220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4648309596921002220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4648309596921002220'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/04/blog-post.html' title='職業無分貴賤'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-955386789948873343</id><published>2009-03-01T13:53:00.003+08:00</published><updated>2009-03-01T14:31:18.480+08:00</updated><title type='text'>春,來了</title><content type='html'>天空是灰灰的, 不過.. 在家附近的杜鵑花, 開得很漂亮&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SaophsDIzLI/AAAAAAAAASI/rJ4tCm5KHXs/s1600-h/DSC00128.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SaophsDIzLI/AAAAAAAAASI/rJ4tCm5KHXs/s320/DSC00128.JPG" alt="" id="BLOGGER_PHOTO_ID_5308100769546292402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;無疑, 春天來了.&lt;br /&gt;&lt;br /&gt;一年之計在於春... 很坦白的說, 最近兩三個星期很頹廢. 對時間的觀念像是完全忘卻了. 最近的時間觀念, 彷如垃圾一樣...&lt;br /&gt;&lt;br /&gt;是時候要整頓一下!!&lt;br /&gt;&lt;br /&gt;這一年有何大計? 可能不多...&lt;br /&gt;1. 考上MPhil&lt;br /&gt;2. 望能在最後一年的ug生涯 (應該要說最後的ug暑假), 做些什麼的... SummerOfCode? CodeJam?&lt;br /&gt;&lt;br /&gt;事實上, 剩下來的時間並不多. focus 應該是放在 MPhil 上吧... 找工作?? 還是不要花時間去想吧... 好好的、盡力的, 考上MPhil ... 要是失敗了, 也不枉一番努力.. 也不會後悔自己多心吧.&lt;br /&gt;&lt;br /&gt;快 grad 的 ug 朋友們... 如果你是有些東西想做, 用剩下來的時間追趕吧... 如果你是有些東西不想做, 用剩下來的時間離開吧... 追一追自己的目標, 不枉這兩三個月的努力.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-955386789948873343?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/955386789948873343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=955386789948873343' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/955386789948873343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/955386789948873343'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/03/blog-post.html' title='春,來了'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SaophsDIzLI/AAAAAAAAASI/rJ4tCm5KHXs/s72-c/DSC00128.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4839827431234189539</id><published>2009-02-26T20:32:00.002+08:00</published><updated>2009-02-26T20:39:02.393+08:00</updated><title type='text'>阿爸學打字</title><content type='html'>這是第二百個 post... 沒想過... 文中主角是 ... 父親大人~&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一個退休人士... 在家無聊沒事干... 有咩好做?? 打機囉-.-..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;沒想到... 他就此沉迷 mmorpg....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;前幾天, 他忽然問我 ... 點打倉頡... 起初沒理他.. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;竟然... 這天一回家... 見到檯頭多左本 "倉頡輸入法 - 用戶手冊"&lt;/div&gt;&lt;div&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/6721071264063477716-4839827431234189539?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4839827431234189539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4839827431234189539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4839827431234189539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4839827431234189539'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/02/blog-post.html' title='阿爸學打字'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5954976131313031086</id><published>2009-02-06T23:59:00.002+08:00</published><updated>2009-02-07T01:30:06.645+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>Y XO @ HK ?</title><content type='html'>香港, 曾被 時代雜誌 以 Ny-Lon-Kong 與 紐約、倫敦 相相齊名. 在這樣一個富裕的地方, 有 XO Laptop 的 存在價值嗎?&lt;br /&gt;&lt;br /&gt;對我來說, XO 只是給我用來編程或上網, 作用並不大. 小弟生於小康之家, 不用為飽肚憂愁. 由初中開始 (還記得是97-98年間的事), 家中已經擁有一台電腦. 到了現在, 很自然是一個擁有一台高階電腦的香港人. XO Laptop .. 就算技術有多高, 無疑是一台低階電腦. 坦白說, 當我一開始知道 XO 在香港推行, 實在質疑它的存在價值. 因為, 我很幸運, 生於我家.&lt;br /&gt;&lt;br /&gt;到了這個星期五晚上 (tgif), 小弟有幸參與 &lt;a href="http://www.hkfyg.org.hk/chi/press_releases/2009/xo/index.html"&gt;香港青年協會 「一孩一電腦 學習多個寶」&lt;/a&gt; 的 XO 送贈儀式. 同學曾跟我說.. 為什麼要花時間出席這樣的影相活動? 以下, 可能是答案吧.&lt;br /&gt;&lt;br /&gt;當我看見很多小朋友合力玩迷宮, 去到一個連小弟也未必有能力到達的難度...&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SYxbPXFu4ZI/AAAAAAAAARA/RW71p5PXl0s/s1600-h/DSC00105.JPG"&gt;&lt;img style="cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SYxbPXFu4ZI/AAAAAAAAARA/RW71p5PXl0s/s320/DSC00105.JPG" alt="" id="BLOGGER_PHOTO_ID_5299711180962455954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SYxbBthXB9I/AAAAAAAAAQ4/tik_TvxVPUU/s1600-h/DSC00107.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SYxbBthXB9I/AAAAAAAAAQ4/tik_TvxVPUU/s320/DSC00107.JPG" alt="" id="BLOGGER_PHOTO_ID_5299710946465744850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;當我看見大小同樂的時候...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3MkWQdMW-_A/SYxcHw4CTiI/AAAAAAAAARI/8PSfMi39jTA/s1600-h/DSC00106.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3MkWQdMW-_A/SYxcHw4CTiI/AAAAAAAAARI/8PSfMi39jTA/s320/DSC00106.JPG" alt="" id="BLOGGER_PHOTO_ID_5299712149957004834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;當我看見他們面上的笑容...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SYxhSnL5Q3I/AAAAAAAAARQ/xWX9l6hCqao/s1600-h/DSC00108.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SYxhSnL5Q3I/AAAAAAAAARQ/xWX9l6hCqao/s320/DSC00108.JPG" alt="" id="BLOGGER_PHOTO_ID_5299717833892643698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;腦袋浮現的是 比爾·蓋茨太太 Melinda Gates 接受訪問時的一句說話:&lt;br /&gt;&lt;blockquote&gt;If you are successful, it is because somewhere, sometime, someone gave you a life or an idea that started you in the right direction. Remember also that you are indebted to life until you help some less fortunate person, just as you were helped. - Melinda Gates&lt;/blockquote&gt;世界無論是有多富裕的地方, 街上亦會有乞丐, 社會亦會有較弱勢的一群. 香港同樣. 一位隨團家長聽到 XO 可以用來上網, 他很興奮的問我, 想確實一下. 我回答說. "係! 但首要條件是屋企要先有網絡..." 他聽了.. 給了我一個很失望的眼神... 我只可再說 "或者係 去政府場地、老麥等地, 都可免費上網". 然後的是... 我聽了一個令我覺得誇然的問題 .. "政府場地有免費上網的嗎?" 我猜想... 這位家長的日常生活, 隨了花時間到起居飲食、照顧家庭、及當個打工仔外, 應該沒有很多時間看新聞吧...&lt;br /&gt;&lt;br /&gt;其實, OLPC Asia 的發起人 黃錫基 先生 常掛在咀邊的 ... "在退休前, 我曾推動香港 每人一手機、 每戶上寬頻. 退休後, 要推動 每童一電腦". 每人一手機, 我很認同. 但 每戶上寬頻, 其實還是有點距離. 而 每童一電腦, 我絕對支持、響應! 很可能... XO 在幫助香港所有小朋友能夠接觸亙聯網的一個先缺條件是... 寬頻.&lt;br /&gt;&lt;br /&gt;話到於此, 跟你分享一下給了我很深印象的兩位小朋友吧.&lt;br /&gt;&lt;br /&gt;第一位是一個小學一年級的小妹妹. 她很怕羞, 其他小朋友一齊比賽玩迷宮的時侯, 她跟不上.. 跟我說... "哥哥..迷宮很悶.. 有沒有其他呀?" 我之後教她玩畫畫. 可惜.. XO 操作不方便. 她又覺得悶了... 之後, 我問她 "你識唔識彈琴, 玩音樂呀?" 她答...不懂. 結果, 我便慢慢的教她玩 &lt;a href="http://www.youtube.com/watch?v=fHajxmhYYI4"&gt;TamTamMini&lt;/a&gt;. 起初, 她很怕.. 因為她真的不懂音樂... 事實上, 我只可以教她按 .. Do Re Mi 三個音... (因為我都不懂 =.=") 當她聽到音樂, 便開始笑了 =] 然後, 我選了一隻貓貓作為發聲的樂器, 同樣的 Do Re Mi 以瞄瞄聲發出的三個音... 她便搶著 XO 的說... "我要玩我要玩". 最後.. 小朋友們一起合奏 "仙樂飄飄處處聞 的 Do Re Mi".. 我走到她的身旁, 她便以不同的發聲樂器, 給我奏了起來, 像是要給我示威一樣呢 ^^ 這是不出三十分鐘的經歷 XO&lt;br /&gt;&lt;br /&gt;另一位小朋友, 應該是小三小四的小男孩... 在合奏的時侯, 他很苦惱 (將來可能跟我一樣對音律不通吧 ^^" 但他玩迷宮很厲害-.-... 上方的複雜迷宮照.. 就是他!) 他彈黎彈去... 歌不成歌.. 然後說了 .. "垃圾電腦!" 我聽了, 很失望. 但我聽得出他的語氣.. 是發脾氣的說. 我只好細細聲在他耳邊問他... "點解咁講呀?" 他說.."我都唔識玩.. 又慢又難用"... 然後我跟他說... "係, 的確係慢左少少.. 但係, 我地要學下有耐性架喎~" 他之後忽然的問我.. "我係唔係可以帶佢(XO)番屋企架? 之前姨姨話可以架~" 如果是垃圾電腦... 可以吸引他嗎 ^^? 可惜.. 現在還沒有這麼多的電腦... 做到 每童一電腦.&lt;br /&gt;&lt;br /&gt;假如你對 每童一電腦 這計劃有興趣的話, 想了解更多的話 .. click here .. &lt;a href="http://www.olpc.asia"&gt;http://www.olpc.asia&lt;/a&gt; 想加入義工團隊? 到 &lt;a href="http://www.facebook.com/group.php?gid=43938953178"&gt;facebook&lt;/a&gt; 吧&lt;br /&gt;&lt;br /&gt;最後, 給大家送上, 小朋友們的賀年說話 =]&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-123ab7e1f968c3e8" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v12.nonxt5.googlevideo.com/videoplayback?id%3D123ab7e1f968c3e8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331627738%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D18AF257A2E10D54FD4F7397A94250309E991F4EB.6C45DE8280921B6545B1042E24D04E1DFB3503F9%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D123ab7e1f968c3e8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DWaKqG40nVpmvU91-A7_QfzD6o9E&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v12.nonxt5.googlevideo.com/videoplayback?id%3D123ab7e1f968c3e8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331627738%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D18AF257A2E10D54FD4F7397A94250309E991F4EB.6C45DE8280921B6545B1042E24D04E1DFB3503F9%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D123ab7e1f968c3e8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DWaKqG40nVpmvU91-A7_QfzD6o9E&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-5954976131313031086?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=123ab7e1f968c3e8&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5954976131313031086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5954976131313031086' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5954976131313031086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5954976131313031086'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/02/y-xo-hk.html' title='Y XO @ HK ?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3MkWQdMW-_A/SYxbPXFu4ZI/AAAAAAAAARA/RW71p5PXl0s/s72-c/DSC00105.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2355054061735726275</id><published>2009-02-04T11:17:00.003+08:00</published><updated>2009-02-04T11:20:06.656+08:00</updated><title type='text'>Google Chrome ON LINUX !?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7ZYqYi4xigk/SYNIL8GEilI/AAAAAAAACTI/5Om8F-Hb-9E/s400/ff-tabs-blogpost-image.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 400px;" src="http://1.bp.blogspot.com/_7ZYqYi4xigk/SYNIL8GEilI/AAAAAAAACTI/5Om8F-Hb-9E/s400/ff-tabs-blogpost-image.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you're reading this... because u're interested and enjoyed using Chrome on Windows =]&lt;br /&gt;&lt;br /&gt;Now, if you want to use Chrome like features on Linux .... YOU CAN INSTALL Google Toolbar and setting your homepage to "chrome://google-toolbar/content/new-tab.html" . Enjoy Chrome in Firefox!!!!!!!&lt;br /&gt;&lt;br /&gt;read more on &lt;a href="http://googleblog.blogspot.com/2009/01/google-toolbar-in-firefox-personalized.html"&gt;http://googleblog.blogspot.com/2009/01/google-toolbar-in-firefox-personalized.html&lt;/a&gt; and Thx Google ^^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-2355054061735726275?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2355054061735726275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2355054061735726275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2355054061735726275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2355054061735726275'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/02/google-chrome-on-linux.html' title='Google Chrome ON LINUX !?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7ZYqYi4xigk/SYNIL8GEilI/AAAAAAAACTI/5Om8F-Hb-9E/s72-c/ff-tabs-blogpost-image.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4740161475170884610</id><published>2009-01-21T22:51:00.003+08:00</published><updated>2009-01-21T22:57:09.989+08:00</updated><title type='text'>開心的"難"題</title><content type='html'>剛在地鐵裡 .. 聽到數位OL 提起一個家家都會碰到的開心難題...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;難題是... 每家生了小孩, 親朋戚友們一定會買很多 BB 衫褲 送贈給小孩...&lt;/div&gt;&lt;div&gt;問題來了, 每逢大時大節, 親朋戚友們定必相聚. 那..小孩應該穿誰送來的可愛衣服呢 ^^?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;解決辦法 - 多帶幾套衫褲... 定時換裝 =]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這令我想到另一&lt;a href="http://mrkschan.blogspot.com/2008/12/blog-post_21.html"&gt;開心的難題&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/6721071264063477716-4740161475170884610?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4740161475170884610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4740161475170884610' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4740161475170884610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4740161475170884610'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/01/blog-post_21.html' title='開心的&quot;難&quot;題'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3123470356952122231</id><published>2009-01-18T09:34:00.002+08:00</published><updated>2009-01-18T09:38:40.216+08:00</updated><title type='text'>一個可怕的晚上</title><content type='html'>昨晚.. 半夜睡夢中... 突有一男一女大吵大鬧...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;鬧著要自殺.. 跳樓的... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;聽了... 十分可怕... 不斷有可怕的幻想...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;幸好... 吵了十多分鐘... 應該有警察來調停了...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;感覺.. 夜晚變得突別安寧.&lt;/div&gt;&lt;div&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/6721071264063477716-3123470356952122231?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3123470356952122231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3123470356952122231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3123470356952122231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3123470356952122231'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/01/blog-post_18.html' title='一個可怕的晚上'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7184064049928066657</id><published>2009-01-13T21:57:00.001+08:00</published><updated>2009-01-13T21:58:02.256+08:00</updated><title type='text'>How much energy I spend on a google search?</title><content type='html'>&lt;div&gt;from &lt;a href="http://googleblog.blogspot.com/2009/01/powering-google-search.html"&gt;Official Google Blog: Powering a Google search&lt;/a&gt;: "Together with other work performed before your search even starts (such as building the search index) this amounts to 0.0003 kWh of energy per search, or 1 kJ. For comparison, the average adult needs about 8000 kJ a day of energy from food, so a Google search uses just about the same amount of energy that your body burns in ten seconds"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I do 30 - 40 google search per day. Sometimes less, and sometimes more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's say .... 30 * 1kJ... I spent 30kJ energy per day on google search ~.~"&lt;/div&gt;&lt;div&gt;BUT... the energies I spent on typing keywords, clicking links, etc ... are not counted =]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps ... I might spent 80kJ per day as a sum ~~ lol&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I really like GOOG. It's really doing a good business!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7184064049928066657?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7184064049928066657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7184064049928066657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7184064049928066657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7184064049928066657'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/01/how-much-i-energy-spend-on-google.html' title='How much energy I spend on a google search?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5174196546853163444</id><published>2009-01-10T18:46:00.002+08:00</published><updated>2009-01-10T18:52:05.306+08:00</updated><title type='text'>香港教署... 囧</title><content type='html'>中文教科書要用中文教&lt;div&gt;英文教科書要用英文教&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;母語教學只可用中文 ... 最後就係學校自行決定 全中 / 全英 .... &lt;/div&gt;&lt;div&gt;母語教學 只可以叫做失敗!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;點解教署唔肯承認錯誤??? &lt;/div&gt;&lt;div&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/6721071264063477716-5174196546853163444?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5174196546853163444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5174196546853163444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5174196546853163444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5174196546853163444'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2009/01/blog-post.html' title='香港教署... 囧'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4848043891922073872</id><published>2008-12-31T23:15:00.001+08:00</published><updated>2009-01-01T00:30:47.774+08:00</updated><title type='text'>新的一頁書(三)</title><content type='html'>&lt;div&gt;只怪實在忙....忙得連自己的時間也像失去了一樣... 讀書報告... 要留到這個時段才可以繼續... 唉~&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;續&lt;a href="http://mrkschan.blogspot.com/2008/10/blog-post_14.html"&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;br /&gt;&lt;/div&gt;&lt;div&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;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;他: "有沒有收到郵件呀~"&lt;/div&gt;&lt;div&gt;她: "什麼郵件?"&lt;/div&gt;&lt;div&gt;他: "...還沒到@.@ 哈哈, 不說了..."&lt;/div&gt;&lt;/blockquote&gt;&lt;div&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;他: "有郵件嗎"&lt;/div&gt;&lt;div&gt;(同時間) 她: "告訴你一個好消息 收到你特别的禮物啦 哈哈 好漂亮 好香的護身符哦"&lt;/div&gt;&lt;div&gt;他: "好好好~~~ 那跟在一起的卡漂亮嗎~~~ "&lt;/div&gt;&lt;div&gt;她: "是不是有心靈感應啊 我正在给你發信息 你就给我發信息了"&lt;/div&gt;&lt;div&gt;他: "不知道... 還要是說同一件事"&lt;/div&gt;&lt;div&gt;他: "剛剛在忙, 忙到悶了, 就想問你郵件的事啦. 你就跟我說你收到 ~~"&lt;/div&gt;&lt;div&gt;她: "卡也很漂亮的 也好香的哦"&lt;/div&gt;&lt;div&gt;他: "因為護身符把卡弄香了~"&lt;/div&gt;&lt;div&gt;她: "呵呵 你怎麼選了這個颜色的  我很喜歡這個颜色的"&lt;/div&gt;&lt;div&gt;他: "我自己喜歡白色跟淺藍色的"&lt;/div&gt;&lt;div&gt;她: "真的嗎 怪不得哦 我也喜歡白色 和 淺藍色"&lt;/div&gt;&lt;div&gt;她: "&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;不過 有件煩事哦 本来想把護身符掛在手機上 但是 不想讓太多的人都看到它 而且也怕手機會唔見 又想放在銀包裡 但是不想和污糟的錢放得很近 又想放在 我手袋裡 但是 又擔心手袋&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;會唔見 你给我提點建議吧 是放手機好 還是 銀包好 還是 手袋&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;好啦&lt;/span&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;就是這一句說話, 他真的是意想不到. 一個小小的護身符卻有如此大的愛情魔力... 他知道... 她真的很喜歡他, 因為她十分緊張那小小的護身符 (最後.. 護身符放到手提袋去了~~)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;至此之後, 他與她, 更一步步的走近. 他們兩的感情亦日漸加深.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;書又到了一個新 chapter... 下回再說....&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/6721071264063477716-4848043891922073872?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4848043891922073872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4848043891922073872' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4848043891922073872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4848043891922073872'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/blog-post_21.html' title='新的一頁書(三)'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2329586879071826988</id><published>2008-12-28T11:43:00.001+08:00</published><updated>2008-12-28T11:45:43.728+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>OLPC, 絕對可以跌的電腦</title><content type='html'>昨天 Dec27, 會展有一個 BookFest ... BookFest 有一個 OLPC 實驗 !!!!!!&lt;br /&gt;&lt;br /&gt;有 Facebook 的你, 可以去看一看這個&lt;a href="http://www.facebook.com/video/video.php?v=41892338567&amp;amp;oid=51136954362"&gt;實驗&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;OLPC, 絕對是可以跌的電腦 =]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-2329586879071826988?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2329586879071826988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2329586879071826988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2329586879071826988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2329586879071826988'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/olpc.html' title='OLPC, 絕對可以跌的電腦'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3778362152752287836</id><published>2008-12-20T20:35:00.004+08:00</published><updated>2008-12-20T21:09:35.623+08:00</updated><title type='text'>香港? 也有世界文化遺產??</title><content type='html'>完全沒想過的事情... &lt;span class="Apple-style-span"   style="  white-space: pre; font-family:Arial;font-size:13px;"&gt;香港也會有世界文化遺產... &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&gt;到底是什麼... 原來是一些石頭...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&gt;唔講唔知... 香港有大約40%地方係郊外地區 ... 而有d地方o既石頭仲要係世界罕有...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  white-space: pre;font-family:Arial;font-size:13px;"&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/6721071264063477716-3778362152752287836?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3778362152752287836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3778362152752287836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3778362152752287836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3778362152752287836'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/blog-post_20.html' title='香港? 也有世界文化遺產??'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-7907800852165924026</id><published>2008-12-18T12:08:00.007+08:00</published><updated>2008-12-24T11:59:50.824+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>100元電腦...OLPC!!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos-b.ak.fbcdn.net/photos-ak-snc1/v1775/133/122/574534216/n574534216_1256441_12.jpg"&gt;&lt;img style="cursor: pointer; width: 604px; height: 453px;" src="http://photos-b.ak.fbcdn.net/photos-ak-snc1/v1775/133/122/574534216/n574534216_1256441_12.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;一個意想不到的機遇、一個意想不到的計劃.&lt;br /&gt;OLPC / XO Laptop .. 究然在香港出現!&lt;br /&gt;&lt;br /&gt;小弟還有幸能當OLPC Asia 義工, 向不同的人推廣這個計劃... 真的是發夢都估唔到 ~.~"&lt;br /&gt;&lt;br /&gt;昨夜, 首次參與義工活動... 第一次親身接觸這台百元電腦... 簡直是夢魅以求.&lt;br /&gt;&lt;br /&gt;起初, 對 OLPC 上的 Sugar 介面... 認真摸不著頭腦 orz .. 實在不習慣... 但後來, 玩玩下... 個 UI 真係好鬼正! 好似仲正過 Gnome + Screenlet ... 遲下應該要試下將自己個 ubuntu 換個 sugar 玩下 =D&lt;br /&gt;&lt;br /&gt;OLPC 仲有超強勁 LCD mon... 兩大特點!&lt;br /&gt;1. 慳電&lt;br /&gt;2. 高解像度... 護眼!&lt;br /&gt;&lt;br /&gt;再加埋 Mesh Network ... 的的確確對貧窮地方小朋友非常適用.&lt;br /&gt;&lt;br /&gt;小弟現時第一個 Urgent &amp;amp; Important task... 就係 upgrade 手頭上 一部 OLPC (義工專用機... 勁過馬沙專用機 XD) 星期六借機會向城大朋友仔介紹一下呢個計劃 =]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-7907800852165924026?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/7907800852165924026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=7907800852165924026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7907800852165924026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/7907800852165924026'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/100olpc.html' title='100元電腦...OLPC!!!!!'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-2538741106976444898</id><published>2008-12-15T12:06:00.000+08:00</published><updated>2008-12-15T12:07:32.375+08:00</updated><title type='text'>Agile Learning...?</title><content type='html'>In the water-fall model ...&lt;br /&gt;&lt;br /&gt;we have Lecture 1 -&gt; Lecture 2 -&gt; ... Lecture n -&gt; Final Exam.&lt;br /&gt;&lt;br /&gt;In the agile learning model ...&lt;br /&gt;&lt;br /&gt;we have Lecture 1 -&gt; Quiz 1 -&gt; Lecture 2 -&gt; Quiz 2 -&gt; ... Lecture n -&gt; Quiz n .&lt;br /&gt;We DON'T have FINAL EXAM ... cool ^^?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-2538741106976444898?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/2538741106976444898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=2538741106976444898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2538741106976444898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/2538741106976444898'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/agile-learning.html' title='Agile Learning...?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8987814330162129420</id><published>2008-12-10T22:19:00.002+08:00</published><updated>2008-12-10T22:21:51.143+08:00</updated><title type='text'>孙振耀撰文谈退休并畅谈人生</title><content type='html'>看過 HP大中華區總裁 &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=%E5%AD%99%E6%8C%AF%E8%80%80%E6%92%B0%E6%96%87%E8%B0%88%E9%80%80%E4%BC%91%E5%B9%B6%E7%95%85%E8%B0%88%E4%BA%BA%E7%94%9F&amp;amp;btnG=Google+Search&amp;amp;aq=f&amp;amp;oq="&gt;孙振耀撰文谈退休并畅谈人生&lt;/a&gt; 一文... 忽然就想...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;假如要我入香港一間銀行工作.... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我會選擇 恆生 instead of 匯豐 ... 因為我覺得 恆生 真的有 CSR ...&lt;/div&gt;&lt;div&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/6721071264063477716-8987814330162129420?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8987814330162129420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8987814330162129420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8987814330162129420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8987814330162129420'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/blog-post_10.html' title='孙振耀撰文谈退休并畅谈人生'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8768905317483272925</id><published>2008-12-05T09:31:00.002+08:00</published><updated>2008-12-05T09:37:44.236+08:00</updated><title type='text'>找工作...</title><content type='html'>Intel ... 聞說招聘一千多人...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;鄰近地點... 上海、北京、成都、大連 .....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google ... 不知招多少...&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;br /&gt;&lt;/div&gt;&lt;div&gt;-.-" 看來... 最後一個 sem... 要小心選科&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8768905317483272925?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8768905317483272925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8768905317483272925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8768905317483272925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8768905317483272925'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/blog-post_05.html' title='找工作...'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-5763741018103639633</id><published>2008-12-01T09:53:00.003+08:00</published><updated>2009-05-05T11:52:14.362+08:00</updated><title type='text'>沒有制動系統的輪椅</title><content type='html'>這一個早上,如常走路回校.&lt;br /&gt;&lt;br /&gt;在一條平時不覺得是什麼的斜路上,遇上了一位輪椅人士.&lt;br /&gt;&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/6721071264063477716-5763741018103639633?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/5763741018103639633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=5763741018103639633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5763741018103639633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/5763741018103639633'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/12/blog-post.html' title='沒有制動系統的輪椅'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1876631402446127423</id><published>2008-11-21T20:20:00.001+08:00</published><updated>2008-11-21T20:22:17.887+08:00</updated><title type='text'>Very Interesting !!! IM WAR?</title><content type='html'>just talked to my schoolmates ... they raised the question ...&lt;br /&gt;&lt;br /&gt;WHY ICQ disappeared in HK and MSN replaced it few years ago???&lt;br /&gt;&lt;br /&gt;Here's the IM market share statistics ... &lt;a href="http://billionsconnected.com/blog/2008/08/global-im-market-share-im-usage/"&gt;http://billionsconnected.com/blog/2008/08/global-im-market-share-im-usage/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Obviously ... MSN dominant ... OMG ... it's MSFT -.-"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1876631402446127423?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1876631402446127423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1876631402446127423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1876631402446127423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1876631402446127423'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/11/very-interesting-im-war.html' title='Very Interesting !!! IM WAR?'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-687027026582570406</id><published>2008-11-10T21:22:00.003+08:00</published><updated>2008-11-10T21:31:16.390+08:00</updated><title type='text'>想趴在你身上哭</title><content type='html'>&lt;blockquote&gt;她在很遠的他方... 她很不開心的說... "想趴在你身上哭"...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他在很遠的這一方... 他只可以很不開心的跟她說 ... "想哭就哭吧"... 可是.. 他心裡在想.. "很想在你身邊一齊渡過這一個晚上"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;他也很想哭.. 因為他在想... 他真的可以在遠遠的地方維繫這段感情嗎...? 他很想很想多一點見她.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&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/6721071264063477716-687027026582570406?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/687027026582570406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=687027026582570406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/687027026582570406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/687027026582570406'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/11/blog-post_10.html' title='想趴在你身上哭'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-4637066247930780859</id><published>2008-11-08T13:42:00.004+08:00</published><updated>2008-11-08T13:48:34.748+08:00</updated><title type='text'>2 Big Statistics ... SmartPhone and its OS</title><content type='html'>See ... &lt;a href="http://apple20.blogs.fortune.cnn.com/2008/11/07/iphone-passes-rim-gains-on-nokia/"&gt;http://apple20.blogs.fortune.cnn.com/2008/11/07/iphone-passes-rim-gains-on-nokia/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fortuneapple20.files.wordpress.com/2008/11/picture-251.png"&gt;&lt;img style="cursor: pointer; width: 540px; height: 250px;" src="http://fortuneapple20.files.wordpress.com/2008/11/picture-251.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fortuneapple20.files.wordpress.com/2008/11/picture-26.png"&gt;&lt;img style="cursor: pointer; width: 529px; height: 256px;" src="http://fortuneapple20.files.wordpress.com/2008/11/picture-26.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;iPhone SDK is really suck... but ... hackers like to build excellent thing from the suck =]&lt;br /&gt;Because.. it's worth to do so .... the growth is terrible ....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-4637066247930780859?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/4637066247930780859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=4637066247930780859' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4637066247930780859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/4637066247930780859'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/11/2-big-statistics-smartphone-and-its-os.html' title='2 Big Statistics ... SmartPhone and its OS'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3950394517768305711</id><published>2008-11-05T22:56:00.002+08:00</published><updated>2008-11-05T22:59:25.708+08:00</updated><title type='text'>飛機師 . . .</title><content type='html'>&lt;a href="http://www.cathaypacific.com/cpa/zh_INTL/careers/student/cadetpilot_schedules"&gt;http://www.cathaypacific.com/cpa/zh_INTL/careers/student/cadetpilot_schedules&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CX 本地飛行員培訓計劃 . . . 眼力不錯的我 ... 不曾想過當個飛機師呢~~~&lt;br /&gt;&lt;br /&gt;但是... 每當想到... 飛機師控制著數百人命 ... 便不敢想了 =o=" orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3950394517768305711?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3950394517768305711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3950394517768305711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3950394517768305711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3950394517768305711'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/11/blog-post.html' title='飛機師 . . .'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-8483749049972237894</id><published>2008-10-31T10:42:00.002+08:00</published><updated>2008-10-31T10:45:43.343+08:00</updated><title type='text'>SMI FY09 Q1 Result - Blog from CEO</title><content type='html'>It's out! Check out the &lt;a href="http://blogs.sun.com/jonathan/entry/understanding_sun_s_business_q1"&gt;CEO's Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In the blog entry, I definitely like the following ... &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Now, how is Software growing if you give everything away?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We make our software freely available to enable its distribution to the farthest reaches of the market - which we then monetize with commercial subscriptions and services, alongside optimized hardware systems (like Open Storage, above). We continue to reach customers that have already settled on our software - the process of selling to them is simplified by the fact they're already using our core products. And unlike most university students (who typically have more time than money), our paying customers view downtime or administrative complexity as more expensive than a software subscription (that is, they have more money than time).&lt;br /&gt;&lt;br /&gt;Thus, customers will pay, and continue to pay for access to enterprise grade features, along with mission critical support and maintenance - the Software business is both a license, subscription and services business.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;"most university students (who typically have more time than money)" is definitely right and that's why I previously don't understand how open source makes $$ =].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-8483749049972237894?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/8483749049972237894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=8483749049972237894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8483749049972237894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/8483749049972237894'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/10/smi-fy09-q1-result-blog-from-ceo.html' title='SMI FY09 Q1 Result - Blog from CEO'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-3303574688403974962</id><published>2008-10-29T10:39:00.011+08:00</published><updated>2008-10-29T11:11:55.334+08:00</updated><title type='text'>SMI 2008 CSR Report ... Letter from the CEO</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3MkWQdMW-_A/SQfNEpJ30YI/AAAAAAAAAPg/bqS2GyMfXXE/s1600-h/csr2008.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 228px; height: 320px;" src="http://3.bp.blogspot.com/_3MkWQdMW-_A/SQfNEpJ30YI/AAAAAAAAAPg/bqS2GyMfXXE/s320/csr2008.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5262400169256145282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sun Micro. 的 &lt;a href="http://www.sun.com/aboutsun/csr/report2008/"&gt;2008 CSR Report&lt;/a&gt; 發報了... 在Q1 Financial Report 之前發報 ... 作為一位學生,同時亦是一位員工... (當然也是一位投資者 =.=") 對 Financial Report 絕對有興趣!! 那麼... CSR Report 呢? 是否可以忽略呢? 當然不是啦.... 歌都有得唱... "同住地球村"~&lt;br /&gt;&lt;br /&gt;其實, 小弟一向對 CSR 不認識... 只知道.. 一間企業雖要對社會付責任, 因為企業取"資"於社會. (這裡, 資可解資金、亦可解資源吧)&lt;br /&gt;&lt;br /&gt;小弟曾受惠於 CSR, 到了一間大銀行裡實習, 理應非常熱愛 CSR 這一詞. 但其實... 很坦白的說... 在這資本主義的社會底下.. 企業 CSR 到底是為了付責還是節流呢? 這一個問題對我存在已久.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;openness has always been a powerful force for progress. And when people are empowered to change their world—in their way, however they can—the possibilities are endless.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Sun's 2008 CSR report is a snapshot of where we are on our sustainability journey. As you'll read, we're proud of all that we're doing well: Investing in eco innovation while also reducing our own environmental impact; enabling access to technology and opportunity, with an unwavering commitment to openness; and recognizing and rewarding our people so that they are empowered to make the best choices – for themselves and their communities.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;若去看看 Report 的 &lt;a href="http://www.sun.com/aboutsun/csr/report2008/intro/data.jsp"&gt;Key Data&lt;/a&gt;... SMI 的確是一間對社會、對環境付責任的企業. 當上 &lt;a href="http://money.cnn.com/2007/04/13/technology/fastforward_sun.fortune/index.htm"&gt;Fortune Greenest Company&lt;/a&gt; 絕不是虛名!&lt;br /&gt;&lt;br /&gt;Steve Jobs 曾經說過... "要愛上自己做的事..." 可能,留了在 SMI 這麼久... 就是因為 SMI 的 CSR 做得好吧.&lt;br /&gt;&lt;br /&gt;當然... 說到技術、公司方向, 還有其他總總的 factor... Google 還是我的最大夢想.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-3303574688403974962?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/3303574688403974962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=3303574688403974962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3303574688403974962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/3303574688403974962'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/10/smi-2008-csr-report-letter-from-ceo.html' title='SMI 2008 CSR Report ... Letter from the CEO'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3MkWQdMW-_A/SQfNEpJ30YI/AAAAAAAAAPg/bqS2GyMfXXE/s72-c/csr2008.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-6958990810662338200</id><published>2008-10-24T08:35:00.001+08:00</published><updated>2008-10-24T08:36:53.582+08:00</updated><title type='text'>時間真的不夠用</title><content type='html'>昨天跟同學談天... 發覺... 11月尾就要交 fyp 的 中期報告!!!&lt;br /&gt;&lt;br /&gt;現在...還在努力的寫 prototype ... 那有時間寫 report -.-"&lt;br /&gt;&lt;br /&gt;OMG~~~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-6958990810662338200?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/6958990810662338200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=6958990810662338200' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6958990810662338200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/6958990810662338200'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/10/blog-post_24.html' title='時間真的不夠用'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1382354313514585461</id><published>2008-10-19T12:11:00.001+08:00</published><updated>2008-10-19T12:13:21.287+08:00</updated><title type='text'>XD 8個1.5</title><content type='html'>今天~~~目標跑 6個1.5~~~&lt;br /&gt;&lt;br /&gt;最後跑了8個1.5~~~&lt;br /&gt;&lt;br /&gt;12公里啊~~~~~ XD &lt;br /&gt;&lt;br /&gt;應該要花時間看一看 CityU 馬拉虫 Delegate 的事宜了~~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1382354313514585461?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1382354313514585461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1382354313514585461' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1382354313514585461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1382354313514585461'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/10/xd-815.html' title='XD 8個1.5'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6721071264063477716.post-1665919835690314943</id><published>2008-10-16T12:03:00.002+08:00</published><updated>2008-10-16T12:06:01.017+08:00</updated><title type='text'>Blood Donation @ CityU</title><content type='html'>又捐血啦~~~花了七分鐘, 放了 450cc 血... 姑娘話:"Fast, but not too fast."&lt;br /&gt;&lt;br /&gt;今次仲有小禮物添 =]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3MkWQdMW-_A/SPa9L7BB1oI/AAAAAAAAAPQ/mDRCvP1MMJ8/s1600-h/1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_3MkWQdMW-_A/SPa9L7BB1oI/AAAAAAAAAPQ/mDRCvP1MMJ8/s320/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5257597627519850114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Give Blood~~ My Power to Save Lives~~~&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3MkWQdMW-_A/SPa9YWNEOXI/AAAAAAAAAPY/BNSnlo3caO0/s1600-h/2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_3MkWQdMW-_A/SPa9YWNEOXI/AAAAAAAAAPY/BNSnlo3caO0/s320/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5257597840976525682" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6721071264063477716-1665919835690314943?l=mrkschan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mrkschan.blogspot.com/feeds/1665919835690314943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6721071264063477716&amp;postID=1665919835690314943' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1665919835690314943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6721071264063477716/posts/default/1665919835690314943'/><link rel='alternate' type='text/html' href='http://mrkschan.blogspot.com/2008/10/blood-donation-cityu.html' title='Blood Donation @ CityU'/><author><name>mr.kschan</name><uri>http://www.blogger.com/profile/06012690204954889945</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.vanille-media.de/images/python.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3MkWQdMW-_A/SPa9L7BB1oI/AAAAAAAAAPQ/mDRCvP1MMJ8/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
