<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Thin &amp; Light</title>
	
	<link>http://thinlight.org</link>
	<description>Passion for the web</description>
	<lastBuildDate>Mon, 11 May 2009 14:32:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/thinlight" type="application/rss+xml" /><feedburner:emailServiceId>thinlight</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/thinlight" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>My blog is mainly about web development and other computer related technologies. Welcome to subscribe!</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>When working in an old system</title>
		<link>http://thinlight.org/2009/05/11/when-working-in-an-old-system/</link>
		<comments>http://thinlight.org/2009/05/11/when-working-in-an-old-system/#comments</comments>
		<pubDate>Mon, 11 May 2009 14:32:43 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=87</guid>
		<description><![CDATA[Today I needed to pull some web page down from the internet and extract some specific contents in PHP. Sounds like a crawler, huh? Actually not the real crawler, just pulling our own contents. I was doing this because it&#8217;s not convenient for me to access the database directly.
I&#8217;m not quite familiar with PHP, but [...]]]></description>
			<content:encoded><![CDATA[<p>Today I needed to pull some web page down from the internet and extract some specific contents in PHP. Sounds like a crawler, huh? Actually not the real crawler, just pulling our own contents. I was doing this because it&#8217;s not convenient for me to access the database directly.</p>
<p>I&#8217;m not quite familiar with PHP, but with version 5 on my local dev machine, I was able to do this very quickly. Just use <a href="http://php.net/manual/en/function.file-get-contents.php">file_get_contents</a> to get the whole page as a string, and then use <a href="http://php.net/manual/en/function.preg-match-all.php">preg_match_all</a> to search for the parts I want.</p>
<p>Unexpected things happened after I uploaded the script to the server. It said function file_get_contents was not defined. Then I realized that I was on a machine with Red Hat 9, the PHP I was using was version 4.2.2 bundled with RH9. OK. I rewrote the code to use fopen/fread directly. This time, it complained that it couldn&#8217;t handle the scheme (I don&#8217;t remember the error report string clearly).</p>
<p>I don&#8217;t know if it was because of my configuration, or version 4.2.2 doesn&#8217;t support the <a href="http://php.net/manual/en/wrappers.php">wrappers</a>. It made me crazy. I don&#8217;t want to do an upgrade because all the packages are old. It takes time and may cause more problems. I even couldn&#8217;t find the apxs binary to compile PHP from source.</p>
<p>Finally, I got a workaround. First use <a href="http://php.net/manual/en/function.exec.php">exec</a> to call wget to download the url to a file in /tmp, and then use fopen/fread to read this temp file. It really works.</p>
<p>Another problem was that preg_match_all doesn&#8217;t accept the last $offset parameter in PHP 4.2.2, but it&#8217;s simple to fix, I think.</p>
<p>This took me some time, but made me realize that how the development of software/language tools eased our daily work.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=_Z0M7XQ_0aA:kHUljfhSBMQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=_Z0M7XQ_0aA:kHUljfhSBMQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=_Z0M7XQ_0aA:kHUljfhSBMQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=_Z0M7XQ_0aA:kHUljfhSBMQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=_Z0M7XQ_0aA:kHUljfhSBMQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=_Z0M7XQ_0aA:kHUljfhSBMQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=_Z0M7XQ_0aA:kHUljfhSBMQ:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2009/05/11/when-working-in-an-old-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It’s Hard to Persevere in a long-term Plan</title>
		<link>http://thinlight.org/2009/05/08/its-hard-to-persevere-in-a-long-term-plan/</link>
		<comments>http://thinlight.org/2009/05/08/its-hard-to-persevere-in-a-long-term-plan/#comments</comments>
		<pubDate>Fri, 08 May 2009 14:27:19 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=86</guid>
		<description><![CDATA[One month ago, I became interested in Django and made studying Python well a goal for myself.
Yes I know there are other ways to study a language. For example, learn Python by practicing with Django. But I want to be a bit familiar with Python before coding Django websites. So I decided to implement the [...]]]></description>
			<content:encoded><![CDATA[<p>One month ago, I became interested in <a href="http://www.djangoproject.com/">Django</a> and made studying <a href="http://www.python.org/">Python</a> well a goal for myself.</p>
<p>Yes I know there are other ways to study a language. For example, learn Python by practicing with Django. But I want to be a bit familiar with Python before coding Django websites. So I decided to implement the algorithms in the famous book &#8220;<a href="http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262032937">Introduction to Algorithms</a>&#8220;. The even greater benefit for me, I thought, was that I could get more familiar with algorithms.</p>
<p>It&#8217;s a great plan for me, one without great determination. Some friends said it&#8217;s hard when I told them. Now the fact turns out to be I really can&#8217;t go on with it. At least it must be paused, if not terminated.</p>
<p>I just got a new job. Although I really love it, I&#8217;m overwhelmed by the amount of new tools and knowledge I must learn. The good news is that I will learn Python for this job. The bad is that I&#8217;m afraid I can&#8217;t learn Python through implementing the famous algorithms. I must learn fast through practicing in real productions work.</p>
<p>So to learn Python is easy. But the road I chose to this goal is hard. Maybe it&#8217;ll return great profits &#8211; reading the book helped me a lot in the interview for this great job.</p>
<p>Will I resume the process when time is not so expensive as now? I wish.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=k4Ncgqwdlj4:ApxGAg9k6oE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=k4Ncgqwdlj4:ApxGAg9k6oE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=k4Ncgqwdlj4:ApxGAg9k6oE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=k4Ncgqwdlj4:ApxGAg9k6oE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=k4Ncgqwdlj4:ApxGAg9k6oE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=k4Ncgqwdlj4:ApxGAg9k6oE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=k4Ncgqwdlj4:ApxGAg9k6oE:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2009/05/08/its-hard-to-persevere-in-a-long-term-plan/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Reader API changed a little</title>
		<link>http://thinlight.org/2009/03/13/google-reader-api-changed-a-little/</link>
		<comments>http://thinlight.org/2009/03/13/google-reader-api-changed-a-little/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 13:35:30 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=85</guid>
		<description><![CDATA[Recently I noticed that one of my Greasemonkey script called &#8220;Google Reader Unread Count in Gmail&#8221; was displaying the wrong count. I was too busy but at least two users urged me to solve the problem so I took a look into the issue, which turned out to be very simple and easy to fix.
In [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I noticed that one of my Greasemonkey script called &#8220;<a href="http://thinlight.org/2008/07/27/google-reader-unread-count/">Google Reader Unread Count in Gmail</a>&#8221; was displaying the wrong count. I was too busy but at least two users urged me to solve the problem so I took a look into the issue, which turned out to be very simple and easy to fix.</p>
<p>In fact Google changed the xml schema of the output so my script was displaying a <strong>timestamp</strong>. That&#8217;s why the count look so strange <img src='http://thinlight.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Now the source code on userscripts.org is updated(here&#8217;s the <a href="http://userscripts.org/scripts/diff/30613/71249">diff</a>). Please update your local version if you&#8217;re facing the same problem.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=9scIGIWYZcE:ZmEvZ28BIbo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=9scIGIWYZcE:ZmEvZ28BIbo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=9scIGIWYZcE:ZmEvZ28BIbo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=9scIGIWYZcE:ZmEvZ28BIbo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=9scIGIWYZcE:ZmEvZ28BIbo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=9scIGIWYZcE:ZmEvZ28BIbo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=9scIGIWYZcE:ZmEvZ28BIbo:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2009/03/13/google-reader-api-changed-a-little/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DOMContentLoaded and Greasemonkey</title>
		<link>http://thinlight.org/2008/11/29/domcontentloaded-and-greasemonkey/</link>
		<comments>http://thinlight.org/2008/11/29/domcontentloaded-and-greasemonkey/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 13:47:55 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[onload]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=83</guid>
		<description><![CDATA[A very common purpose of Greasemonkey scripts is modifying the DOM structure of the document, mostly adding something new.
I&#8217;ve written several scripts before and have been doing such modifications in the &#8220;load&#8221; event handler, as in this script. The problem is that &#8220;load&#8221; event is fired after all images on the page have been downloaded [...]]]></description>
			<content:encoded><![CDATA[<p>A very common purpose of Greasemonkey scripts is modifying the DOM structure of the document, mostly adding something new.</p>
<p>I&#8217;ve written several scripts before and have been doing such modifications in the &#8220;load&#8221; event handler, as in <a href="http://userscripts.org/scripts/review/30613">this script</a>. The problem is that &#8220;load&#8221; event is fired after all images on the page have been downloaded completely, so users may suffer a great delay to see the changes occur if there&#8217;re many images.</p>
<p><a href="http://jquery.com/">jQuery</a> users know that jQuery has a function &#8220;ready&#8221;. It won&#8217;t wait for the images to load. We are writing Greasemonkey scripts, so we only care about Firefox. Firefox has a &#8220;DOMContentLoaded&#8221; event explained in detail <a href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events">here</a>.</p>
<blockquote><p>Fired on a Window object when a document&#8217;s DOM content is finished loaded, but unlike &#8220;load&#8221;, does not wait till all images are loaded. Used for example by GreaseMonkey to sneak in to alter pages before they are displayed.</p></blockquote>
<p>So when writing my last script I tried to rely on this event:</p>
<pre><code>window.addEventListener('DOMContentLoaded', function(e) {
	...
}, false);
</code></pre>
<p>But the codes in the handler were not executed.</p>
<p>I was confused and did some searching. Finally I got <a href="http://wiki.greasespot.net/DOMContentLoaded">this page</a> saying that &#8220;the code in a Greasemonkey user script gets invoked when the DOMContentLoaded event fires&#8221;. That explains all. The &#8220;DOMContentLoaded&#8221; event was already fired so the codes never had a chance to get executed.</p>
<p>The solution, of course, is pulling the handler codes out of the wrapper. If your script doesn&#8217;t really rely on the &#8220;load&#8221; event, don&#8217;t put them into its handler because there may be a obvious delay.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=wb2nB-HrmRk:a_iurvivulg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=wb2nB-HrmRk:a_iurvivulg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=wb2nB-HrmRk:a_iurvivulg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=wb2nB-HrmRk:a_iurvivulg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=wb2nB-HrmRk:a_iurvivulg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=wb2nB-HrmRk:a_iurvivulg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=wb2nB-HrmRk:a_iurvivulg:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/11/29/domcontentloaded-and-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Back from Mount Huang</title>
		<link>http://thinlight.org/2008/11/27/back-from-mount-huang/</link>
		<comments>http://thinlight.org/2008/11/27/back-from-mount-huang/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 07:43:07 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Travel]]></category>
		<category><![CDATA[Huangshan]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=82</guid>
		<description><![CDATA[Two weeks ago we went to Mount Huang (Huangshan in Chinese) and spent 3 days there (2 days on the mountains). The trip was wonderful and Mount Huang is really impressive.
During the shot trip we saw all kinds of beautiful sceneries like sea of clouds, sunrise, sunset, various strangely-shaped pines, peculiarly-shaped granite peaks, etc.
We walked [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago we went to <a href="http://en.wikipedia.org/wiki/Huangshan_Mountains">Mount Huang</a> (Huangshan in Chinese) and spent 3 days there (2 days on the mountains). The trip was wonderful and Mount Huang is really impressive.</p>
<p>During the shot trip we saw all kinds of beautiful sceneries like sea of clouds, sunrise, sunset, various strangely-shaped pines, peculiarly-shaped granite peaks, etc.</p>
<p>We walked on the dangerous roads hanging on the middle of the cliffs, which was very exciting. You&#8217;d better not look downwards, and pray the road is solid enough.</p>
<p><a href="http://www.flickr.com/photos/qingbo/3037848733/" title="绝壁栈道 by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3029/3037848733_011d6fd2a2_m.jpg" width="160" height="240" alt="绝壁栈道" /></a></p>
<p>Below is the carved steps to Celestial Peak. It&#8217;s like a ladder stretching into the fog. It&#8217;s almost vertical but don&#8217;t be too frightened, as there&#8217;re ropes beside it for travellers to grab.</p>
<p><a href="http://www.flickr.com/photos/qingbo/3039883761/" title="从北面上天都峰的路 by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3294/3039883761_074bfff0df_m.jpg" width="160" height="240" alt="从北面上天都峰的路" /></a></p>
<p>Sea of clouds appears in the morning. As you can see in the pictures, our standing ground is higher than the clouds. The picture on the right is a scenery called &#8220;monkey watching the sea&#8221;.</p>
<p><a href="http://www.flickr.com/photos/qingbo/3038313240/" title="云海 by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3187/3038313240_92b77d5b9c_m.jpg" width="240" height="160" alt="云海" /></a> <a href="http://www.flickr.com/photos/qingbo/3038098947/" title="猴子观海 by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3254/3038098947_2ddeaed10c_m.jpg" width="240" height="160" alt="猴子观海" /></a></p>
<p>If you&#8217;re interested, view more photos here: <a href="http://www.flickr.com/photos/qingbo/sets/72157609353527815/">http://www.flickr.com/photos/qingbo/sets/72157609353527815/</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=IHQanWPoBZ4:M-JJ3J0BPcw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=IHQanWPoBZ4:M-JJ3J0BPcw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=IHQanWPoBZ4:M-JJ3J0BPcw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=IHQanWPoBZ4:M-JJ3J0BPcw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=IHQanWPoBZ4:M-JJ3J0BPcw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=IHQanWPoBZ4:M-JJ3J0BPcw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=IHQanWPoBZ4:M-JJ3J0BPcw:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/11/27/back-from-mount-huang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fireworks (2008 Summer Olympics)</title>
		<link>http://thinlight.org/2008/08/24/fireworks-2008-summer-olympics/</link>
		<comments>http://thinlight.org/2008/08/24/fireworks-2008-summer-olympics/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 15:27:53 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[fireworks]]></category>
		<category><![CDATA[Olympics]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=79</guid>
		<description><![CDATA[These photos are taken after ending ceremony of the 2008 Summer Olympics. The ending ceremony was not very good, in contrast to the opening ceremonty   Except the fireworks. After the ending ceremony, Beijing was illuminated by fireworks everywhere in the sky:
 
 
Taking photos from my room is difficult because it&#8217;s not at [...]]]></description>
			<content:encoded><![CDATA[<p>These photos are taken after ending ceremony of the 2008 Summer Olympics. The ending ceremony was not very good, in contrast to the opening ceremonty <img src='http://thinlight.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Except the fireworks. After the ending ceremony, Beijing was illuminated by fireworks everywhere in the sky:</p>
<p><a href="http://www.flickr.com/photos/qingbo/2792858838/" title="Fireworks(2008 Summer Olympics) by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3007/2792858838_cf05f370bf_m.jpg" alt="Fireworks(2008 Summer Olympics)" width="240" height="180"></a> <a href="http://www.flickr.com/photos/qingbo/2792859242/" title="Fireworks(2008 Summer Olympics) by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3093/2792859242_58c6e921d3_m.jpg" alt="Fireworks(2008 Summer Olympics)" width="240" height="180"></a></p>
<p><a href="http://www.flickr.com/photos/qingbo/2792859696/" title="Fireworks(2008 Summer Olympics) by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3001/2792859696_14fd235fb0_m.jpg" alt="Fireworks(2008 Summer Olympics)" width="240" height="180"></a> <a href="http://www.flickr.com/photos/qingbo/2792860300/" title="Fireworks(2008 Summer Olympics) by qingbo, on Flickr"><img src="http://farm4.static.flickr.com/3181/2792860300_bea8a2f79f_m.jpg" alt="Fireworks(2008 Summer Olympics)" width="240" height="180"></a></p>
<p>Taking photos from my room is difficult because it&#8217;s not at the right position. Tripod is of no use because the camera must be projected outside the window. Besides, my camera (Canon A510) is not good enough.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=DdTejFrgLnY:N7pNdRzT9m0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DdTejFrgLnY:N7pNdRzT9m0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DdTejFrgLnY:N7pNdRzT9m0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DdTejFrgLnY:N7pNdRzT9m0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DdTejFrgLnY:N7pNdRzT9m0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DdTejFrgLnY:N7pNdRzT9m0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DdTejFrgLnY:N7pNdRzT9m0:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/08/24/fireworks-2008-summer-olympics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Reader Unread Count</title>
		<link>http://thinlight.org/2008/07/27/google-reader-unread-count/</link>
		<comments>http://thinlight.org/2008/07/27/google-reader-unread-count/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 07:58:31 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[Greasemonkey]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=77</guid>
		<description><![CDATA[Gmail is my Firefox home page and is always open as long as Firefox is there. So I wrote this Greasemonkey script to show Google Reader&#8217;s unread count in the nav-bar of Gmail. A good place, isn&#8217;t it?

The script checks for the unread count every 8 minutes. But after you click the &#8220;Reader&#8221; link, it [...]]]></description>
			<content:encoded><![CDATA[<p>Gmail is my Firefox home page and is always open as long as Firefox is there. So I wrote this Greasemonkey script to show Google Reader&#8217;s unread count in the nav-bar of Gmail. A good place, isn&#8217;t it?</p>
<p><a href="http://userscripts.org/scripts/show/30613"><img width="424" height="94" class="alignnone" title="Unread count" src="http://thinlight.org/wp-content/uploads/2008/07/gmail-reader.png" alt=""/></a></p>
<p>The script checks for the unread count every 8 minutes. But after you click the &#8220;Reader&#8221; link, it checks the count 1 minute later and extend the interval by 1 minute after every check until the interval returns to 8 minutes again.</p>
<p>Install <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a>，and then <a href="http://userscripts.org/scripts/source/30613.user.js">install this script</a>。</p>
<p><a href="http://userscripts.org/scripts/show/30613">Page on userscripts.org</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=BBUt5pHJ_fo:aVXmbsLRb1Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=BBUt5pHJ_fo:aVXmbsLRb1Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=BBUt5pHJ_fo:aVXmbsLRb1Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=BBUt5pHJ_fo:aVXmbsLRb1Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=BBUt5pHJ_fo:aVXmbsLRb1Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=BBUt5pHJ_fo:aVXmbsLRb1Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=BBUt5pHJ_fo:aVXmbsLRb1Q:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/07/27/google-reader-unread-count/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MyBlogLog Changed its Widget Theme</title>
		<link>http://thinlight.org/2008/07/26/mybloglog-changed-its-widget-theme/</link>
		<comments>http://thinlight.org/2008/07/26/mybloglog-changed-its-widget-theme/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 11:12:03 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[MyBlogLog]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=72</guid>
		<description><![CDATA[Half a year ago I wrote a small tool for customizing MyBlogLog widget. And, since then I didn&#8217;t notice the changes MyBlogLog has done.
As I noticed there are some problems with the widget colorer, I checked MyBlogLog and found that they&#8217;ve changed the widget theme.
Well, the new theme is polished and cool but lacks flexibility [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinlight.org/2008/01/05/mybloglog-widget-colorer/">Half a year ago</a> I wrote <a href="http://thinlight.org/toolbox/mybloglog/widget-colorer/">a small tool</a> for customizing <a href="http://www.mybloglog.com/">MyBlogLog</a> widget. And, since then I didn&#8217;t notice the changes MyBlogLog has done.</p>
<p>As I noticed there are some problems with the widget colorer, I checked MyBlogLog and found that they&#8217;ve changed the widget theme.</p>
<p>Well, the new theme is polished and cool but lacks flexibility due to the gradient background.</p>
<p>So I must mark the project as &#8220;obsolete&#8221;. But people still can play around with it, and the &#8220;obsolete&#8221; code can still be used on websites.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=HLONMVJCaW8:yhAjim2jR8w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=HLONMVJCaW8:yhAjim2jR8w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=HLONMVJCaW8:yhAjim2jR8w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=HLONMVJCaW8:yhAjim2jR8w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=HLONMVJCaW8:yhAjim2jR8w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=HLONMVJCaW8:yhAjim2jR8w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=HLONMVJCaW8:yhAjim2jR8w:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/07/26/mybloglog-changed-its-widget-theme/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Reader Unread Count in Gmail</title>
		<link>http://thinlight.org/2008/07/26/google-reader-unread-count-in-gmail/</link>
		<comments>http://thinlight.org/2008/07/26/google-reader-unread-count-in-gmail/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 10:43:48 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Info]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google Reader]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=69</guid>
		<description><![CDATA[
Handy new feature coming soon&#8230;
I use Gmail instead of iGoogle as browser home page. But I don&#8217;t want a complete integration. Just alert me the unread count and I will check it when I have time.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinlight.org/wp-content/uploads/2008/07/gmail-reader.png"><img src="http://thinlight.org/wp-content/uploads/2008/07/gmail-reader-300x66.png" alt="" title="gmail-reader" width="300" height="66" class="alignnone size-medium wp-image-70" /></a></p>
<p>Handy new feature coming soon&#8230;</p>
<p>I use Gmail instead of iGoogle as browser home page. But I don&#8217;t want a <a href="http://userscripts.org/scripts/show/8450">complete integration</a>. Just alert me the unread count and I will check it when I have time.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=egToKWpgRjw:h6PApxHuRoI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=egToKWpgRjw:h6PApxHuRoI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=egToKWpgRjw:h6PApxHuRoI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=egToKWpgRjw:h6PApxHuRoI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=egToKWpgRjw:h6PApxHuRoI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=egToKWpgRjw:h6PApxHuRoI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=egToKWpgRjw:h6PApxHuRoI:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/07/26/google-reader-unread-count-in-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use is.gd in TwitterFox to Shorten URL</title>
		<link>http://thinlight.org/2008/07/23/use-isgd-in-twitterfox-to-shorten-url/</link>
		<comments>http://thinlight.org/2008/07/23/use-isgd-in-twitterfox-to-shorten-url/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 11:58:42 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[TwitterFox]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=65</guid>
		<description><![CDATA[OK, tinyurl is short enough. But is.gd is even shorter.
Many tools use tinyurl to shorten URLs, because it was the origin of this wonderful idea. TwitterFox is such an example.
I prefer TwitterFox to twhirl because as a Firefox add-on, the url can be inserted into the tweet with a single click (Besides, word &#8220;twhirl&#8221; is [...]]]></description>
			<content:encoded><![CDATA[<p>OK, <a href="http://tinyurl.com/">tinyurl</a> is short enough. But <a href="http://is.gd/">is.gd</a> is even shorter.</p>
<p>Many tools use tinyurl to shorten URLs, because it was the origin of this wonderful idea. <a href="http://www.naan.net/trac/wiki/TwitterFox">TwitterFox</a> is such an example.</p>
<p>I prefer TwitterFox to <a href="http://www.twhirl.org/">twhirl</a> because as a Firefox add-on, the url can be inserted into the tweet with a single click (Besides, word &#8220;twhirl&#8221; is hard to remember <img src='http://thinlight.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). But why didn&#8217;t it provide an option of URL shortener to use?</p>
<p>We can modify its source to achieve this, though. Open the file chrome/TwitterFox.jar!/content/twitternotifier.js and find the line where TINYURL_CREATE_API is defined. Change the constant value to &#8220;http://is.gd/api.php?longurl=&#8221;, which is the <a href="http://is.gd/api_info.php">API of is.gd</a>.</p>
<p>There are countless URL shorteners around the web. Just choose your favorite.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=fb_QINf3f3g:PeoINYuPkLU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=fb_QINf3f3g:PeoINYuPkLU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=fb_QINf3f3g:PeoINYuPkLU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=fb_QINf3f3g:PeoINYuPkLU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=fb_QINf3f3g:PeoINYuPkLU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=fb_QINf3f3g:PeoINYuPkLU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=fb_QINf3f3g:PeoINYuPkLU:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2008/07/23/use-isgd-in-twitterfox-to-shorten-url/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
