<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2chinesetwfull.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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>Solrex Shuffling</title>
	
	<link>http://blog.solrex.org</link>
	<description>Engineering a better life, programming a great future.</description>
	<pubDate>Sun, 07 Mar 2010 11:08:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</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" type="application/rss+xml" href="http://feeds.feedburner.com/solrex" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="solrex" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">solrex</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/solrex" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fsolrex" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>An IPv6 Enabled NTP Client for Windows in Python</title>
		<link>http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html</link>
		<comments>http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:58:26 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[IPv6]]></category>

		<category><![CDATA[NTP]]></category>

		<category><![CDATA[Patch]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638695</guid>
		<description><![CDATA[Python NTP library (ntplib)  offers a simple interface to query NTP servers from Python. But it does not support IPv6 NTP servers. I wrote a patch for ntplib to support IPv6 connections. You can download the patch file here and the patched library here.
The code bellow is a simple IPv6 enabled NTP client (ntpdate.py) [...]]]></description>
			<content:encoded><![CDATA[<p>Python NTP library (<a href="http://pypi.python.org/pypi/ntplib/">ntplib</a>)  offers a simple interface to query NTP servers from Python. But it does not support IPv6 NTP servers. I wrote a <a href="http://share.solrex.org/misc/ntplib-ipv6.patch">patch </a>for ntplib to support IPv6 connections. You can download the patch file <a href="http://share.solrex.org/misc/ntplib-ipv6.patch">here</a> and the patched library <a href="http://share.solrex.org/ibuild/ntplib-0.1.8-solrex-ipv6.zip">here</a>.</p>
<p>The code bellow is a simple IPv6 enabled NTP client (<a href="http://share.solrex.org/scripts/ntpdate.py.zip">ntpdate.py</a>) in Python for Windows, using <a href="http://share.solrex.org/ibuild/ntplib-0.1.8-solrex-ipv6.zip">the patched ntplib</a>. It doesn't (and won't) support Linux because the official NTP release offers IPv6 support on that platform. </p>
<blockquote><p><span style="color: rgb(0, 128, 0);">#!/usr/bin/env python</span><br />
<span style="color: rgb(0, 128, 0);"># ntpdate.py - set the date and time via NTP</span><br />
<span style="color: rgb(0, 128, 0);"># An IPv6 enabled ntp client, for Windows ONLY.</span></p>
<p><span style="color: rgb(0, 0, 255);">import</span> ntplib, time<br />
<span style="color: rgb(0, 0, 255);">from</span> os <span style="color: rgb(0, 0, 255);">import</span> system<br />
<span style="color: rgb(0, 0, 255);">from</span> sys <span style="color: rgb(0, 0, 255);">import</span> argv</p>
<p><span style="color: rgb(0, 0, 255);">def</span> usage():<br />
&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'''Usage: ntpdate.py&nbsp; [-qh] server</span><br />
<span style="color: rgb(163, 21, 21);">Example:</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntpdate.py 210.72.145.44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # IPv4</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntpdate.py ntp6.remco.org&nbsp;&nbsp;&nbsp;&nbsp; # IPv6</span><br />
<span style="color: rgb(163, 21, 21);">Options:</span></p>
<p><span style="color: rgb(163, 21, 21);">&nbsp; -q&nbsp;&nbsp;&nbsp;&nbsp; Query only - don't set the clock.</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; -h&nbsp;&nbsp;&nbsp;&nbsp; Print this message.</span></p>
<p><span style="color: rgb(163, 21, 21);">IPv6 NTP Server List:</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp6.remco.org</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp6.space.net</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; time.buptnet.edu.cn</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; time.join.uni-muenster.de</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; time6.ipv6.uni-muenster.de</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.sixxs.net</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.eu.sixxs.net</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.us.sixxs.net</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.ap.sixxs.net</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.rhrk.uni-kl.de</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.ipv6.uni-leipzig.de</span></p>
<p><span style="color: rgb(163, 21, 21);">Report bugs to http://solrex.org.'''</span><br />
&nbsp; sys.exit()</p>
<p><span style="color: rgb(0, 0, 255);">def</span> main():<br />
&nbsp; ntp_svr = <span style="color: rgb(163, 21, 21);">''</span><br />
&nbsp; query = False</p>
<p>&nbsp; <span style="color: rgb(0, 0, 255);">for</span> a <span style="color: rgb(0, 0, 255);">in</span> argv[1:]:<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">if</span> a == <span style="color: rgb(163, 21, 21);">'-q'</span>:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query = True<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">elif</span> a == <span style="color: rgb(163, 21, 21);">'-h'</span>:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usage()<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">else</span>:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ntp_svr = a<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> ntp_svr == <span style="color: rgb(163, 21, 21);">''</span>:<br />
&nbsp;&nbsp;&nbsp; usage()</p>
<p>&nbsp; c = ntplib.NTPClient()<br />
&nbsp; res = c.request(ntp_svr, version=3)<br />
&nbsp; t_epoch = res.offset + res.delay + time.time()<br />
&nbsp; t = time.localtime(t_epoch)<br />
&nbsp; centi_sec = t_epoch%1 * 100<br />
&nbsp; time_str = time.strftime(<span style="color: rgb(163, 21, 21);">'%H:%M:%S'</span>, t)<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> <span style="color: rgb(0, 0, 255);">not</span> query:<br />
&nbsp;&nbsp;&nbsp; system(<span style="color: rgb(163, 21, 21);">'time </span><span style="color: rgb(163, 21, 21);">%s</span><span style="color: rgb(163, 21, 21);">.</span><span style="color: rgb(163, 21, 21);">%2.0f</span><span style="color: rgb(163, 21, 21);">'</span> % (time_str, centi_sec))<br />
&nbsp;&nbsp;&nbsp; date_str = time.strftime(<span style="color: rgb(163, 21, 21);">'%Y-%m-</span><span style="color: rgb(163, 21, 21);">%d</span><span style="color: rgb(163, 21, 21);">'</span>, t)<br />
&nbsp;&nbsp;&nbsp; system(<span style="color: rgb(163, 21, 21);">'date </span><span style="color: rgb(163, 21, 21);">%s</span><span style="color: rgb(163, 21, 21);">'</span> % date_str)<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> query:<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'server </span><span style="color: rgb(163, 21, 21);">%s</span><span style="color: rgb(163, 21, 21);">, stratum </span><span style="color: rgb(163, 21, 21);">%d</span><span style="color: rgb(163, 21, 21);">, offset </span><span style="color: rgb(163, 21, 21);">%f</span><span style="color: rgb(163, 21, 21);">, delay </span><span style="color: rgb(163, 21, 21);">%f</span><span style="color: rgb(163, 21, 21);">'</span> % (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ntp_svr, res.stratum, res.offset, res.delay)<br />
&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'</span><span style="color: rgb(163, 21, 21);">%s</span> <span style="color: rgb(163, 21, 21);">%s</span><span style="color: rgb(163, 21, 21);"> ntpdate.py: time server </span><span style="color: rgb(163, 21, 21);">%s</span><span style="color: rgb(163, 21, 21);"> offset </span><span style="color: rgb(163, 21, 21);">%f</span><span style="color: rgb(163, 21, 21);"> sec'</span> % (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time.strftime(<span style="color: rgb(163, 21, 21);">'</span><span style="color: rgb(163, 21, 21);">%d</span><span style="color: rgb(163, 21, 21);"> %b'</span>, t), time_str, ntp_svr, res.offset)</p>
<p><span style="color: rgb(0, 0, 255);">if</span> __name__ == <span style="color: rgb(163, 21, 21);">'__main__'</span>:<br />
&nbsp; main()</p></blockquote>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/python-htp-client-for-windows.html" title="一个 Windows 对时小工具">一个 Windows 对时小工具</a> <span class="count">(2)</span> - <small class="excerpt">由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Wind...</small></li>
<li><a href="http://blog.solrex.org/articles/qrfcview-proxy-patch.html" title="qRFCview Proxy Patch">qRFCview Proxy Patch</a> <span class="count">(7)</span> - <small class="excerpt">This patch enables qRFCview to load proxy settings...</small></li>
<li><a href="http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html" title="使用 Sikuli 实现同时登录两个 Dropbox 帐户">使用 Sikuli 实现同时登录两个 Dropbox 帐户</a> <span class="count">(7)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
<li><a href="http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html" title="升级黑莓 8700 系统到 4.5.0.182">升级黑莓 8700 系统到 4.5.0.182</a> <span class="count">(6)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/favorite-blackberry-apps.html" title="我喜欢的黑莓应用">我喜欢的黑莓应用</a> <span class="count">(10)</span> - <small class="excerpt">上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽...</small></li>
<li><a href="http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html" title="Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630">Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630</a> <span class="count">(6)</span> - <small class="excerpt">Platform: Dell Latitude D630, Nvidia NVS 135M, Int...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>一个 Windows 对时小工具</title>
		<link>http://blog.solrex.org/articles/python-htp-client-for-windows.html</link>
		<comments>http://blog.solrex.org/articles/python-htp-client-for-windows.html#comments</comments>
		<pubDate>Sat, 06 Mar 2010 14:59:43 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[HTP]]></category>

		<category><![CDATA[NTP]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Time]]></category>

		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638693</guid>
		<description><![CDATA[由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Windows 时间服务对时。偶尔维修电脑或者不小心调整错时间，再加上电脑时钟本身就有一定的漂移，对时就变成了件麻烦的事情。
手动调时也没个参照，误差往往比较大。IPv6 网络上存在一些 NTP 服务器，Linux 下有 ntpdate 是支持 IPv6 NTP 服务器的，但是我搜索了半天，才在一篇文章上看到有人评论说 Windows 下只有一款 NTP 客户端支持 IPv6，还是收费软件——可他也没给出名字。
无奈之下想到 Python 的 httplib 是支持 IPv6 连接的，于是我就仿照 htpdate  写了一个利用 Google 的 IPv6 Web 服务器进行对时的 Python 小工具 htpdate.py。虽然误差比 NTP 大不少，但是还是在可接受范围内（不到 1 秒），而且比较方便，连日期也一块更新了。下面是代码，比较粗糙。
#!/usr/bin/env python
import httplib, time
from os import system
def main():
&#160; conn = httplib.HTTPConnection('google.com')
&#160; time.clock()
&#160; conn.request('HEAD', '')
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Windows 时间服务对时。偶尔维修电脑或者不小心调整错时间，再加上电脑时钟本身就有一定的漂移，对时就变成了件麻烦的事情。</p>
<p>手动调时也没个参照，误差往往比较大。IPv6 网络上存在一些 NTP 服务器，Linux 下有 ntpdate 是支持 IPv6 NTP 服务器的，但是我搜索了半天，才在一篇文章上看到有人评论说 Windows 下只有一款 NTP 客户端支持 IPv6，还是收费软件——可他也没给出名字。</p>
<p>无奈之下想到 Python 的 httplib 是支持 IPv6 连接的，于是我就仿照 <a href="http://www.clevervest.com/foswiki/bin/view/HTP">htpdate</a>  写了一个利用 Google 的 IPv6 Web 服务器进行对时的 Python 小工具 htpdate.py。虽然误差比 NTP 大不少，但是还是在可接受范围内（不到 1 秒），而且比较方便，连日期也一块更新了。下面是代码，比较粗糙。</p>
<blockquote><p><span style="color: rgb(0, 128, 0);">#!/usr/bin/env python</span><br />
<span style="color: rgb(0, 0, 255);">import</span> httplib, time<br />
<span style="color: rgb(0, 0, 255);">from</span> os <span style="color: rgb(0, 0, 255);">import</span> system</p>
<p><span style="color: rgb(0, 0, 255);">def</span> main():<br />
&nbsp; conn = httplib.HTTPConnection(<span style="color: rgb(163, 21, 21);">'google.com'</span>)<br />
&nbsp; time.clock()<br />
&nbsp; conn.request(<span style="color: rgb(163, 21, 21);">'HEAD'</span>, <span style="color: rgb(163, 21, 21);">''</span>)<br />
&nbsp; t_rtt = time.clock()<br />
&nbsp; res_time = conn.getresponse().getheader(<span style="color: rgb(163, 21, 21);">'date'</span>)<br />
&nbsp; t = time.localtime(time.mktime(time.strptime(res_time,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(163, 21, 21);">'%a, </span><span style="color: rgb(163, 21, 21);">%d</span><span style="color: rgb(163, 21, 21);"> %b %Y %H:%M:%S %Z'</span>)) - time.timezone)<br />
&nbsp; time_str = time.strftime(<span style="color: rgb(163, 21, 21);">'%H:%M:%S'</span>, t)<br />
&nbsp; local_time = time.asctime()<br />
&nbsp; t_exe = time.clock()<br />
&nbsp; centi_sec = (t_exe - t_rtt/2)*100<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> centi_sec &gt; 99:<br />
&nbsp;&nbsp;&nbsp; centi_sec = 99<br />
&nbsp; system(<span style="color: rgb(163, 21, 21);">'time %s.%2.0f</span><span style="color: rgb(163, 21, 21);">'</span> % (time_str, centi_sec))<br />
&nbsp; date_str = time.strftime(<span style="color: rgb(163, 21, 21);">'%Y-%m-</span><span style="color: rgb(163, 21, 21);">%d</span><span style="color: rgb(163, 21, 21);">'</span>, t)<br />
&nbsp; system(<span style="color: rgb(163, 21, 21);">'date %s'</span> % date_str)<br />
&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'LOCAL&nbsp; TIME: '</span> + local_time<br />
&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'SERVER TIME: '</span> + time.asctime(t)<br />
&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'LOCAL&nbsp; TIME: '</span> + time.asctime()<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> (t_exe - t_rtt/2) &gt;= 1:<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">print</span> <span style="color: rgb(163, 21, 21);">'Round trip time is too long. Time error might be larger than 1 sec.'</span></p>
<p><span style="color: rgb(0, 0, 255);">if</span> __name__ == <span style="color: rgb(163, 21, 21);">'__main__'</span>:<br />
&nbsp; main()
</p></blockquote>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html" title="An IPv6 Enabled NTP Client for Windows in Python">An IPv6 Enabled NTP Client for Windows in Python</a> <span class="count">(0)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
<li><a href="http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html" title="使用 Sikuli 实现同时登录两个 Dropbox 帐户">使用 Sikuli 实现同时登录两个 Dropbox 帐户</a> <span class="count">(7)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
<li><a href="http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html" title="升级黑莓 8700 系统到 4.5.0.182">升级黑莓 8700 系统到 4.5.0.182</a> <span class="count">(6)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/favorite-blackberry-apps.html" title="我喜欢的黑莓应用">我喜欢的黑莓应用</a> <span class="count">(10)</span> - <small class="excerpt">上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽...</small></li>
<li><a href="http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html" title="Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630">Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630</a> <span class="count">(6)</span> - <small class="excerpt">Platform: Dell Latitude D630, Nvidia NVS 135M, Int...</small></li>
<li><a href="http://blog.solrex.org/articles/windows-tips-hotkeys-and-access-control-list.html" title="Windows Tips: 修改热键和文件访问权限">Windows Tips: 修改热键和文件访问权限</a> <span class="count">(3)</span> - <small class="excerpt">我平时习惯使用 Win+E 打开 Windows 的资源管理器，但对资源管理器的左侧栏一直不感冒。用...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/python-htp-client-for-windows.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>又是一年元宵时</title>
		<link>http://blog.solrex.org/articles/2010-shangyuanjie.html</link>
		<comments>http://blog.solrex.org/articles/2010-shangyuanjie.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 05:16:25 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Memory]]></category>

		<category><![CDATA[Dream]]></category>

		<category><![CDATA[Father]]></category>

		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638692</guid>
		<description><![CDATA[今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前去，摸摸他萎缩的两腿，问他：“爸，你到底去哪儿了？怎么走那么久也不给我打个电话？我想你了。”他说：“是想给你打的，几次都没打成。”我给爸说：“爸，你儿子现在出息了，研究生都要毕业了，还找了份不错的工作。”我爸笑着说：“好啊，比我强。”我又问他：“你这次回来还走吗？”还没等他回答，梦就醒了。
起来后我给我妈打了个电话，给她说了这个梦。我妈立刻泣不成声，说昨天下雪，没去我爸坟上送灯，他这是想我们了，所以会托梦给我。安慰完我妈，挂了电话，我也没忍住，大哭了一场。
8 年了，其实我梦见爸爸的次数并不多。年年春节回老家，我都会到我爸坟前拜祭一下。今年初四，只有我一个人和姑姑家一起回老家走了走亲戚，没有去看我爸。我妈说怪她，其实我觉得该怪我。常年在外，清明也不回去、七月十五也不回去，本来只有过年的机会能看到我，结果今年也没有往坟上走一走，我爸这是怨我了。
我爸曾经是我小学四年级的语文老师，奶奶走的那天，该他上课，他什么都没讲出来，坐在讲台上哭了一节课。我爸刚走时，我没有很难过，总觉得他还在身边似的。但年龄越大，越能体会到那种子欲养而亲不在的悲伤。小时候我爸总为我的学习成绩而骄傲，说我特为他挣面子，每当考试又得高分，我都会赶快告诉我爸。可惜现在我取得一点儿小成绩，总想着要是我爸能活着看见就好了。
今年清明，我得回家一趟，去拜拜我爸。
您可能对这些感兴趣：

为求职事谢诸君 (21) - 我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可...
长假之购物 (6) - 一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...
生勿有负，死愿无撼 (2) - 一点多了，翻来覆去还是睡不着，又下来打开电脑，写点东西，心里可能会好受些。晚上回寝室的时候，春妹说博...
百度新人开放日见闻 (16) - 前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的...
写在一个电闪雷鸣的雪夜 (6) - 从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏...
博客被搬家 (13) - 两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...

]]></description>
			<content:encoded><![CDATA[<p>今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前去，摸摸他萎缩的两腿，问他：“爸，你到底去哪儿了？怎么走那么久也不给我打个电话？我想你了。”他说：“是想给你打的，几次都没打成。”我给爸说：“爸，你儿子现在出息了，研究生都要毕业了，还找了份不错的工作。”我爸笑着说：“好啊，比我强。”我又问他：“你这次回来还走吗？”还没等他回答，梦就醒了。</p>
<p>起来后我给我妈打了个电话，给她说了这个梦。我妈立刻泣不成声，说昨天下雪，没去我爸坟上送灯，他这是想我们了，所以会托梦给我。安慰完我妈，挂了电话，我也没忍住，大哭了一场。</p>
<p>8 年了，其实我梦见爸爸的次数并不多。年年春节回老家，我都会到我爸坟前拜祭一下。今年初四，只有我一个人和姑姑家一起回老家走了走亲戚，没有去看我爸。我妈说怪她，其实我觉得该怪我。常年在外，清明也不回去、七月十五也不回去，本来只有过年的机会能看到我，结果今年也没有往坟上走一走，我爸这是怨我了。</p>
<p>我爸曾经是我小学四年级的语文老师，奶奶走的那天，该他上课，他什么都没讲出来，坐在讲台上哭了一节课。我爸刚走时，我没有很难过，总觉得他还在身边似的。但年龄越大，越能体会到那种子欲养而亲不在的悲伤。小时候我爸总为我的学习成绩而骄傲，说我特为他挣面子，每当考试又得高分，我都会赶快告诉我爸。可惜现在我取得一点儿小成绩，总想着要是我爸能活着看见就好了。</p>
<p>今年清明，我得回家一趟，去拜拜我爸。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/thanks-for-helpings-on-job-hunting.html" title="为求职事谢诸君">为求职事谢诸君</a> <span class="count">(21)</span> - <small class="excerpt">我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可...</small></li>
<li><a href="http://blog.solrex.org/articles/shopping-in-golden-week.html" title="长假之购物">长假之购物</a> <span class="count">(6)</span> - <small class="excerpt">一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...</small></li>
<li><a href="http://blog.solrex.org/articles/die-without-regret.html" title="生勿有负，死愿无撼">生勿有负，死愿无撼</a> <span class="count">(2)</span> - <small class="excerpt">一点多了，翻来覆去还是睡不着，又下来打开电脑，写点东西，心里可能会好受些。晚上回寝室的时候，春妹说博...</small></li>
<li><a href="http://blog.solrex.org/articles/baidu-open-day.html" title="百度新人开放日见闻">百度新人开放日见闻</a> <span class="count">(16)</span> - <small class="excerpt">前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的...</small></li>
<li><a href="http://blog.solrex.org/articles/on-a-thunder-snow-night.html" title="写在一个电闪雷鸣的雪夜">写在一个电闪雷鸣的雪夜</a> <span class="count">(6)</span> - <small class="excerpt">从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏...</small></li>
<li><a href="http://blog.solrex.org/articles/forced-to-move-my-blog.html" title="博客被搬家">博客被搬家</a> <span class="count">(13)</span> - <small class="excerpt">两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/2010-shangyuanjie.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>使用 Sikuli 实现同时登录两个 Dropbox 帐户</title>
		<link>http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html</link>
		<comments>http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 18:28:20 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Dropbox]]></category>

		<category><![CDATA[Free Software]]></category>

		<category><![CDATA[Genius]]></category>

		<category><![CDATA[Sikuli]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638689</guid>
		<description><![CDATA[来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出如此酷的软件着实令人羡慕。但除了 Demo 之外，能不能拿 Sikuli 来 engineer a better life 呢？显然是可以的，就如 Vgod 这篇文章所说，Sikuli 有无穷的潜力，那我们就来玩儿一把，展示一下 Sikuli 的一个现实应用。
1. Dropbox
Dropbox 是一个在线文件存储系统，可以用来存储和在不同电脑间共享文件，但是一个 Dropbox 用户只有 2G 的存储空间，当我们文件多的时候，就受到限制了。而一般情况下 Dropbox 只能运行一个例程，使用多个用户貌似不可行。但是到底可能吗？
当然可能，只是我们需要多个 Windows 帐户。也就是说，每个 Windows 帐户可以运行一个 Dropbox，如果你系统里有多个帐户，就可以运行多个 Dropbox。注意，受到安全策略的限制，这些帐户必须设置密码。比如我们新建一个"dropbox"帐户，密码也是"dropbox"。
2. 笨的方法
一般情况下使用其它帐户运行程序的方式为：在程序或者快捷方式上点右键，选择“运行方式”，然后选择“下列用户”，输入你期望的用户和密码(dropbox:dropbox)来执行该程序。
3. 聪明的方法
但是这样做太麻烦了，我们可以用批处理脚本做这件事情：
start D:\Program\Dropbox\Dropbox.exe
runas /user:dropbox D:\Program\Dropbox\Dropbox.exe
但这样还要手工输入密码，有很多种方法可以避免手工输入 runas 密码，但很遗憾它们大多在 Windows XP Home Edition 上不可用。
用 Home Edition 的同志还是得交互式的输入密码。能不能不手工输呢？可以，比如 expect 就是专门处理交互的语言。不过，学起来太麻烦了吧，要不来看看 Sikuli 怎么做？
4. 使用 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>来自 MIT 的用图片编程的 <a href="http://groups.csail.mit.edu/uid/sikuli/">Sikuli</a> 语言最近着实<a href="http://blog.vgod.tw/2010/01/25/change-the-world/">火了一把</a>，看着对岸的程序员 <a href="http://blog.vgod.tw/">Vgod</a> 开发出如此酷的软件着实令人羡慕。但除了 Demo 之外，能不能拿 Sikuli 来 engineer a better life 呢？显然是可以的，就如 Vgod <a href="http://blog.vgod.tw/2010/01/30/sikuli/">这篇文章</a>所说，Sikuli 有无穷的潜力，那我们就来玩儿一把，展示一下 Sikuli 的一个现实应用。</p></blockquote>
<p>1. Dropbox</p>
<p>Dropbox 是一个在线文件存储系统，可以用来存储和在不同电脑间共享文件，但是一个 Dropbox 用户只有 2G 的存储空间，当我们文件多的时候，就受到限制了。而一般情况下 Dropbox 只能运行一个例程，使用多个用户貌似不可行。但是到底可能吗？</p>
<p>当然可能，只是我们需要多个 Windows 帐户。也就是说，每个 Windows 帐户可以运行一个 Dropbox，如果你系统里有多个帐户，就可以运行多个 Dropbox。注意，受到安全策略的限制，这些帐户必须设置密码。比如我们新建一个"dropbox"帐户，密码也是"dropbox"。</p>
<p>2. 笨的方法</p>
<p>一般情况下使用其它帐户运行程序的方式为：在程序或者快捷方式上点右键，选择“运行方式”，然后选择“下列用户”，输入你期望的用户和密码(dropbox:dropbox)来执行该程序。</p>
<p>3. 聪明的方法</p>
<p>但是这样做太麻烦了，我们可以用批处理脚本做这件事情：</p>
<blockquote><p>start D:\Program\Dropbox\Dropbox.exe<br />
runas /user:dropbox D:\Program\Dropbox\Dropbox.exe</p></blockquote>
<p>但这样还要手工输入密码，有很多种方法可以<a href="http://hi.baidu.com/afantihome/blog/item/b464513f4d53ede654e723aa.html">避免手工输入 runas 密码</a>，但很遗憾它们大多在 Windows XP Home Edition 上不可用。</p>
<p>用 Home Edition 的同志还是得交互式的输入密码。能不能不手工输呢？可以，比如 expect 就是专门处理交互的语言。不过，学起来太麻烦了吧，要不来看看 Sikuli 怎么做？</p>
<p>4. 使用 Sikuli</p>
<p>下面这个图就是完成启动两个 Dropbox 的 Sikuli 程序：</p>
<p><img src="http://share.solrex.org/pictures/sikuli-dropbox.jpg" alt="使用 Sikuli 同时启动两个 Dropbox" /></p>
<p>首先switchApp("cmd")启动 Windows 的命令行，然后wait等待那个提示符出现，然后 type() 键入一行 runas 命令，wait 等待提示输入密码，type 输入密码 dropbox 加回车 \n，bingo，出来一个 dropbox 了，最后再 type 一行启动非 runas 的 dropbox，又出来一个 dropbox。</p>
<p>上述程序运行结果如下图所示：</p>
<p><img src="http://share.solrex.org/pictures/2-dropbox.jpg" alt="两个 Dropbox 在运行" /></p>
<p>好玩吧！Sikuli 程序就是那么简单，我从下载 Sikuli 到完成这个程序大约花了四十分钟的时间，这可比去学 expect 快多了。这下 expact 之类的交互语言在简单的场景下可以无视了。</p>
<p>你可以将 Sikuli 程序导出成一个 .skl 文件，据说可以双击运行，不过我尝试未成功，这是一个遗憾，希望后续版本可以解决这个问题。</p>
<p>5. 注册 Dropbox</p>
<p>您如果对 Dropbox 感兴趣的话，可以点击下面我的两个邀请链接注册，这样咱们的空间都可以增加 250M。本人将非常感谢您的支持。（如果您打算再注册一个的话，最好不要用自己的邀请链接，因为同一台电脑上激活的用户不会奖励空间。）</p>
<p><a href="https://www.dropbox.com/referrals/NTI0OTY1Mzk5">https://www.dropbox.com/referrals/NTI0OTY1Mzk5</a><br />
<a href="https://www.dropbox.com/referrals/NTE2NjMyMTU5">https://www.dropbox.com/referrals/NTE2NjMyMTU5</a><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/install-kscope-on-ubuntu-9-04.html" title="在 Ubuntu 9.04 上安装 Kscope">在 Ubuntu 9.04 上安装 Kscope</a> <span class="count">(5)</span> - <small class="excerpt">Kscope 是我很喜欢的 Linux 平台上的代码查看工具，因为我不会用 Emacs，vim + ...</small></li>
<li><a href="http://blog.solrex.org/articles/packaging-4-exe.html" title="应用程序打包技术之四（exe篇）">应用程序打包技术之四（exe篇）</a> <span class="count">(0)</span> - <small class="excerpt">1. 应用程序打包技术之一（源代码篇）2. 应用程序打包技术之二（deb篇）3. 应用程序打包技术之...</small></li>
<li><a href="http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html" title="An IPv6 Enabled NTP Client for Windows in Python">An IPv6 Enabled NTP Client for Windows in Python</a> <span class="count">(0)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
<li><a href="http://blog.solrex.org/articles/python-htp-client-for-windows.html" title="一个 Windows 对时小工具">一个 Windows 对时小工具</a> <span class="count">(2)</span> - <small class="excerpt">由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Wind...</small></li>
<li><a href="http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html" title="升级黑莓 8700 系统到 4.5.0.182">升级黑莓 8700 系统到 4.5.0.182</a> <span class="count">(6)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/favorite-blackberry-apps.html" title="我喜欢的黑莓应用">我喜欢的黑莓应用</a> <span class="count">(10)</span> - <small class="excerpt">上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>升级黑莓 8700 系统到 4.5.0.182</title>
		<link>http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html</link>
		<comments>http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html#comments</comments>
		<pubDate>Fri, 29 Jan 2010 16:05:14 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Blackberry]]></category>

		<category><![CDATA[OS]]></category>

		<category><![CDATA[ROM]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638687</guid>
		<description><![CDATA[好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。
本来我的 8700 系统是 4.2.x 版本的，有很多主题和软件不能用，我当时怕升级麻烦，也就忍了。但是当我前两天才憧憬过的 UCWEB 黑莓版今天发布时，而我的 4.2 系统无法支持它，只好下狠心升级一把。
之前我曾经看过无数帖子，评论 4.5 的系统如何如何，也看过不少教程，该如何如何升级系统，总之一个感觉，就是非常麻烦。众说纷纭以至于连该用什么固件都不知道。但是经过几次尝试之后，我才发现了升级黑莓系统是怎么回事，根本没有我想象的那么复杂。下面给出我对整个过程的理解。
1. 到哪里下载固件？
要想刷系统，首先得有固件，到哪里下载就成了一个问题。网上乱七八糟的，众说纷纭，但是我认为本应该只有一个答案：黑莓官网。不过到官网下载固件需要国外代理，因为它禁掉了中国 IP，所以不懂翻墙的人就在其它网站找吧。
2. 下载什么样的固件？
在黑莓官网上，黑莓也不像一般的手机网站一样把一堆系统软件列出来。黑莓官网的固件是按照运营商管理的，很遗憾我们找不到中国移动和中国联通。要找支持中文固件，一般来说我们可以找香港的运营商。但是不同运营商提供的固件版本并不一样，香港的运营商固件可能并不新，这时候美国的 AT&#038;T 反而是一个好的选择。如果需要中文支持的话，一般应该选择括号中注释为 EastAsia 和 Chinese 的固件（据我理解 MultiLanguage 并不包含中文支持）。选择版本的原则我觉得应该版本越高越好，但是不排除偏好某个稳定的版本。
3. 中文支持是不是必须的？
我之前以为必须下载的固件支持中文，装上之后才能使用中文。后来发现也不是那么回事，其实你完全可以下载一个高版本的不支持中文的固件装上，然后找一个相近版本的支持中文的固件，把里面中文支持部分的 .cod 文件找出来，然后用 JavaLoader 装到手机里，这个系统就可以支持中文了。简而言之，中文支持仅仅相当于应用软件而已，可以单独装的，只是需要用特别的方法装。
4. 如何安装固件？
这个就不用我说了，网上一堆一堆的教程。简单的流程就是先将固件安装到 Desktop Manager 里（其实是放到某个目录下），DM 识别了，然后装到手机里。我注意到的一点是：安装固件时最好不要联网，不然黑莓的 Desktop Manager 会老在那找软件更新，增加本来就很长的安装时间。
5. 安装固件时需要不需要备份？会不会对数据有影响？
不需要备份，安装时会自动备份和恢复。对黑莓自身应用，比如短信、通讯录等不会有影响，但是对第三方应用的数据会有影响，比如 Gmail、Mobipocket Reader 等。这也是没办法的事，第三方的应用数据本身也备份不出来。但很奇怪的是手动添加的 Service Book 和 TCP 的 APN 也会消失，只能重新修改。
6. 高版本的系统会不会很慢？
我曾经在网上看过一个耸人听闻的说法是 8700 4.5 的系统需要半个多小时才能启动，让我非常吃惊和迟疑，不敢升级系统。实践证明他大概说的是固件安装过程中的第一次启动需要那么长时间，之后的启动时间和 4.2 系统也没什么明显区别。至于内存占用啦、程序运行速度啦、网速啦，在使用中没有明显感觉。
我觉得将系统从 4.2 升级到 4.5 [...]]]></description>
			<content:encoded><![CDATA[<p>好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。</p>
<p>本来我的 8700 系统是 4.2.x 版本的，有很多主题和软件不能用，我当时怕升级麻烦，也就忍了。但是当我前两天才憧憬过的 UCWEB 黑莓版今天发布时，而我的 4.2 系统无法支持它，只好下狠心升级一把。</p>
<p>之前我曾经看过无数帖子，评论 4.5 的系统如何如何，也看过不少教程，该如何如何升级系统，总之一个感觉，就是非常麻烦。众说纷纭以至于连该用什么固件都不知道。但是经过几次尝试之后，我才发现了升级黑莓系统是怎么回事，根本没有我想象的那么复杂。下面给出我对整个过程的理解。</p>
<p>1. 到哪里下载固件？</p>
<p>要想刷系统，首先得有固件，到哪里下载就成了一个问题。网上乱七八糟的，众说纷纭，但是我认为本应该只有一个答案：黑莓官网。不过到官网下载固件需要国外代理，因为它禁掉了中国 IP，所以不懂翻墙的人就在其它网站找吧。</p>
<p>2. 下载什么样的固件？</p>
<p>在黑莓官网上，黑莓也不像一般的手机网站一样把一堆系统软件列出来。黑莓官网的固件是按照运营商管理的，很遗憾我们找不到中国移动和中国联通。要找支持中文固件，一般来说我们可以找香港的运营商。但是不同运营商提供的固件版本并不一样，香港的运营商固件可能并不新，这时候美国的 AT&#038;T 反而是一个好的选择。如果需要中文支持的话，一般应该选择括号中注释为 EastAsia 和 Chinese 的固件（据我理解 MultiLanguage 并不包含中文支持）。选择版本的原则我觉得应该版本越高越好，但是不排除偏好某个稳定的版本。</p>
<p>3. 中文支持是不是必须的？</p>
<p>我之前以为必须下载的固件支持中文，装上之后才能使用中文。后来发现也不是那么回事，其实你完全可以下载一个高版本的不支持中文的固件装上，然后找一个相近版本的支持中文的固件，把里面中文支持部分的 .cod 文件找出来，然后用 JavaLoader 装到手机里，这个系统就可以支持中文了。简而言之，中文支持仅仅相当于应用软件而已，可以单独装的，只是需要用特别的方法装。</p>
<p>4. 如何安装固件？</p>
<p>这个就不用我说了，网上一堆一堆的教程。简单的流程就是先将固件安装到 Desktop Manager 里（其实是放到某个目录下），DM 识别了，然后装到手机里。我注意到的一点是：安装固件时最好不要联网，不然黑莓的 Desktop Manager 会老在那找软件更新，增加本来就很长的安装时间。</p>
<p>5. 安装固件时需要不需要备份？会不会对数据有影响？</p>
<p>不需要备份，安装时会自动备份和恢复。对黑莓自身应用，比如短信、通讯录等不会有影响，但是对第三方应用的数据会有影响，比如 Gmail、Mobipocket Reader 等。这也是没办法的事，第三方的应用数据本身也备份不出来。但很奇怪的是手动添加的 Service Book 和 TCP 的 APN 也会消失，只能重新修改。</p>
<p>6. 高版本的系统会不会很慢？</p>
<p>我曾经在网上看过一个耸人听闻的说法是 8700 4.5 的系统需要半个多小时才能启动，让我非常吃惊和迟疑，不敢升级系统。实践证明他大概说的是固件安装过程中的第一次启动需要那么长时间，之后的启动时间和 4.2 系统也没什么明显区别。至于内存占用啦、程序运行速度啦、网速啦，在使用中没有明显感觉。</p>
<p>我觉得将系统从 4.2 升级到 4.5 的优势是：可用的应用和主题更多了、系统和字体更漂亮了；劣势可能是占用的存储空间多了点儿、少了个拼音输入法。除此之外没有其它明显区别，我自己认为值得升级。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/favorite-blackberry-apps.html" title="我喜欢的黑莓应用">我喜欢的黑莓应用</a> <span class="count">(10)</span> - <small class="excerpt">上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽...</small></li>
<li><a href="http://blog.solrex.org/articles/free-ebook-write-os-with-free-software-revision-2-released.html" title="《使用开源软件-自己动手写操作系统》Rev 2发布">《使用开源软件-自己动手写操作系统》Rev 2发布</a> <span class="count">(26)</span> - <small class="excerpt">免费电子书《使用开源软件-自己动手写操作系统》的主页在：http://share.solrex.cn...</small></li>
<li><a href="http://blog.solrex.org/articles/writing-x86-pc-bootloader-with-free-software.html" title="Hacking 《自己动手写操作系统》Chapter 1&#038;2">Hacking 《自己动手写操作系统》Chapter 1&#038;2</a> <span class="count">(3)</span> - <small class="excerpt">——Writing x86 PC Bootloader With Free Software本文内容...</small></li>
<li><a href="http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html" title="An IPv6 Enabled NTP Client for Windows in Python">An IPv6 Enabled NTP Client for Windows in Python</a> <span class="count">(0)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
<li><a href="http://blog.solrex.org/articles/python-htp-client-for-windows.html" title="一个 Windows 对时小工具">一个 Windows 对时小工具</a> <span class="count">(2)</span> - <small class="excerpt">由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Wind...</small></li>
<li><a href="http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html" title="使用 Sikuli 实现同时登录两个 Dropbox 帐户">使用 Sikuli 实现同时登录两个 Dropbox 帐户</a> <span class="count">(7)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>我喜欢的黑莓应用</title>
		<link>http://blog.solrex.org/articles/favorite-blackberry-apps.html</link>
		<comments>http://blog.solrex.org/articles/favorite-blackberry-apps.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 05:38:29 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[Apps]]></category>

		<category><![CDATA[Blackberry]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638686</guid>
		<description><![CDATA[上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽然和原来的手机相比，8700 不带照相和扩展卡功能，但各种应用让我觉得比传统手机好玩多了。自从开始玩黑莓的这些有趣应用后，我渐渐觉得以后什么手机应用多，才能占到市场先机。以 Google Android 的开放平台以后肯定有不错的表现。
折腾了一段时间后，下面是一些我喜欢的黑莓应用：
1. Opera Mini 浏览器 
如果没有网络，智能手机至少会少了一半的乐趣，现在很多网站都支持手机浏览了，包括我的这个博客，所以一个好用的网络浏览器非常重要。其实 Opera Mini 算不上很好用，但至少比黑莓自带浏览器好用多了，主要是在网页格式化方面。我比较看好的浏览器是 UCWEB，因为它支持标签功能，在 GPRS/EDGE 的低速网络下可以后台打开标签以节省时间。UCWEB 黑莓版已经在内测，希望能尽快推出。
2. Google Maps 
通过黑莓上的 Google Maps 我才第一次知道原来没有 GPS 也可以定位。Google Maps 使用基站定位的标称误差大约在 600 米左右，实际误差我觉得大约在三四百米内。虽然误差比较大，但是在北京城里晃悠时，这个范围的误差足够能判断行进方向是否正确了，可以少问很多路。另外还有路线查询功能，有点儿烂，但好歹能用。
3. Google Sync 
同步联系人和日历的工具，可以将手机联系人与 Gmail 联系人同步，将手机日程表与 Google 日历同步。这个应用实在是太酷了，在同步完联系人到 Gmail 中之后，我再也不用担心手机丢了会失掉很多人的联系方式。编辑自己的日程表也可以在电脑上进行，不用在手机上慢慢地敲字了。而且只要登出 Google 帐号，就可以删除所有联系人，换手机时候很方便。
4. Key Master
我平时不喜欢用鼠标在一堆图标中找应用程序，所以在电脑上我都是用 Launchy 来启动应用程序。Key Master 是在黑莓上自定义快捷键启动应用程序的工具，非常好用，一般情况下我都不需要再进黑莓的 Applications 目录用滚轮来找程序。
5. Mobipocket Reader 
这是一个电子书管理和阅读工具，有手机版和电脑版。电脑版和 iTunes 类似，先把电子书导入到电脑版里，然后通过数据线发送到手机上的 Reader。这不是它最酷的地方，它最酷的是可以直接导入 .pdf, [...]]]></description>
			<content:encoded><![CDATA[<p>上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽然和原来的手机相比，8700 不带照相和扩展卡功能，但各种应用让我觉得比传统手机好玩多了。自从开始玩黑莓的这些有趣应用后，我渐渐觉得以后什么手机应用多，才能占到市场先机。以 Google Android 的开放平台以后肯定有不错的表现。</p>
<p>折腾了一段时间后，下面是一些我喜欢的黑莓应用：</p>
<p>1.<a href="http://www.opera.com/mini/"> Opera Mini 浏览器</a> </p>
<p>如果没有网络，智能手机至少会少了一半的乐趣，现在很多网站都支持手机浏览了，包括我的这个博客，所以一个好用的网络浏览器非常重要。其实 Opera Mini 算不上很好用，但至少比黑莓自带浏览器好用多了，主要是在网页格式化方面。我比较看好的浏览器是 UCWEB，因为它支持标签功能，在 GPRS/EDGE 的低速网络下可以后台打开标签以节省时间。UCWEB 黑莓版已经在内测，希望能尽快推出。</p>
<p>2. <a href="http://www.google.com/mobile/maps/">Google Maps</a> </p>
<p>通过黑莓上的 Google Maps 我才第一次知道原来没有 GPS 也可以定位。Google Maps 使用基站定位的标称误差大约在 600 米左右，实际误差我觉得大约在三四百米内。虽然误差比较大，但是在北京城里晃悠时，这个范围的误差足够能判断行进方向是否正确了，可以少问很多路。另外还有路线查询功能，有点儿烂，但好歹能用。</p>
<p>3. <a href="http://www.google.com/mobile/sync/">Google Sync</a> </p>
<p>同步联系人和日历的工具，可以将手机联系人与 Gmail 联系人同步，将手机日程表与 Google 日历同步。这个应用实在是太酷了，在同步完联系人到 Gmail 中之后，我再也不用担心手机丢了会失掉很多人的联系方式。编辑自己的日程表也可以在电脑上进行，不用在手机上慢慢地敲字了。而且只要登出 Google 帐号，就可以删除所有联系人，换手机时候很方便。</p>
<p>4. <a href="http://bbdev.org/tag/keymaster/">Key Master</a></p>
<p>我平时不喜欢用鼠标在一堆图标中找应用程序，所以在电脑上我都是用 Launchy 来启动应用程序。Key Master 是在黑莓上自定义快捷键启动应用程序的工具，非常好用，一般情况下我都不需要再进黑莓的 Applications 目录用滚轮来找程序。</p>
<p>5. <a href="http://www.mobipocket.com">Mobipocket Reader</a> </p>
<p>这是一个电子书管理和阅读工具，有手机版和电脑版。电脑版和 iTunes 类似，先把电子书导入到电脑版里，然后通过数据线发送到手机上的 Reader。这不是它最酷的地方，它最酷的是可以直接导入 .pdf, .html, .chm, .epub 格式的电子书。如果有某本书的 pdf 版，就不用再费尽心机寻找 txt 版了，直接导入就可以在手机上阅读。Mobipocket Reader 对 pdf 的重新格式化在我看来已经到了值得称赞的地步，太牛了！</p>
<p>6. <a href="http://berryware360.cn/index.php/download/cat_view/34--">凌波微步 SmartDail</a></p>
<p>这是一款智能拨号软件，由于黑莓的电话簿不支持首字母查询功能，在电话簿中寻找联系人比较麻烦。这款软件可以支持名字首字母查询，定位联系人非常方便。</p>
<p>7. <a href="http://www.xk72.com/midpssh/">MidpSSH </a></p>
<p>黑莓上的 ssh 客户端，不支持中文，但是紧急情况下用来进行简单的服务器维护足够了。</p>
<p>8. <a href="http://www.google.com/mobile/mail/">Gmail 手机客户端 </a></p>
<p>这个不用解释了。</p>
<p>9. <a href="http://www.dayhand.com/bbs/viewthread.php?tid=14573">点讯输入法 </a></p>
<p>用这个输入速度比黑莓原生输入法快多了，主要体现在两个方面：选字快和匹配率高。缺点就是切换麻烦，或者在一些应用中只能拷贝粘贴。</p>
<p>10. <a href="http://www.berryon.com/blackberry/969.htm">BerryFetion </a></p>
<p>这个软件也相当酷，可以在短信上直接选择“使用飞信回复”，可以省不少短信费！</p>
<p>11. <a href="http://code.google.com/p/btalk/">Btalk</a></p>
<p>黑莓上的 Gtalk 客户端。由于官方的 Gtalk 黑莓版不支持个人用户，开源的 Btalk 让这变成了现实。但是实话说，谁用外出时还用手机挂 Gtalk 呀（又没经验值），也就是偶尔用一下而已。</p>
<p>12. AutoLock 和 TinyLock</p>
<p>自动锁屏软件，用处不大。</p>
<p>剩下还有一些应用，BBWeather, CallAssistant, MobCal, Anyview, BBNotePad 之类的，装上几乎没有用过，也就不评论了。</p>
<p>还有一方面的应用我觉得非常遗憾，我一直没有找到很棒的记事本软件。我希望这个记事本软件能支持(以优先级排序)：1. 自动保存，比如15秒保存一次；2. 导出到电脑；3. 支持点讯输入法。不知道这样的应用存在不存在？</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/upgrade-bb-8700-os-to-4-5-0-182.html" title="升级黑莓 8700 系统到 4.5.0.182">升级黑莓 8700 系统到 4.5.0.182</a> <span class="count">(6)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/an-ipv6-enabled-ntp-client-for-windows-in-python.html" title="An IPv6 Enabled NTP Client for Windows in Python">An IPv6 Enabled NTP Client for Windows in Python</a> <span class="count">(0)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
<li><a href="http://blog.solrex.org/articles/python-htp-client-for-windows.html" title="一个 Windows 对时小工具">一个 Windows 对时小工具</a> <span class="count">(2)</span> - <small class="excerpt">由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Wind...</small></li>
<li><a href="http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html" title="使用 Sikuli 实现同时登录两个 Dropbox 帐户">使用 Sikuli 实现同时登录两个 Dropbox 帐户</a> <span class="count">(7)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
<li><a href="http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html" title="Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630">Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630</a> <span class="count">(6)</span> - <small class="excerpt">Platform: Dell Latitude D630, Nvidia NVS 135M, Int...</small></li>
<li><a href="http://blog.solrex.org/articles/windows-tips-hotkeys-and-access-control-list.html" title="Windows Tips: 修改热键和文件访问权限">Windows Tips: 修改热键和文件访问权限</a> <span class="count">(3)</span> - <small class="excerpt">我平时习惯使用 Win+E 打开 Windows 的资源管理器，但对资源管理器的左侧栏一直不感冒。用...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/favorite-blackberry-apps.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>亲历卓越“硬盘门”事件</title>
		<link>http://blog.solrex.org/articles/amazon-cn-hard-disk-gate.html</link>
		<comments>http://blog.solrex.org/articles/amazon-cn-hard-disk-gate.html#comments</comments>
		<pubDate>Mon, 25 Jan 2010 11:17:22 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[Memory]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[Hard Disk]]></category>

		<category><![CDATA[Service]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638685</guid>
		<description><![CDATA[前天晚上看到有人在推上讨论卓越超便宜的 118 元 320G 硬盘，过去一看居然是真的。其实经过“25 元门” 之后，我知道这是几乎不可能的，其实我也知道即使我下了单卓越也是会赖掉的，但是我还是抱着“全民调戏，重在参与”的心理加入了抢购大潮，并且进一步散播了这一消息...
事实证明我的预料是对的，我下的两个硬盘的订单在保持 44 个小时后，被卓越取消，卓越再一次(无耻地？成功地？开心地？)赖掉订单：
尊敬的客户：
您好！感谢您的订购。
我们抱歉地通知您，您在卓越亚马逊网站上购买的劲永牌320GB移动硬盘的价格出现错误。卓越亚马逊上有数百万种商品，因此有些时候难免会出现这类问题。根据我们在卓越亚马逊网站上公布的使用条件中的价格政策：http://www.amazon.cn/static/claim.asp?uid=478-5181363-0560506，出现商品价格错误问题时，如果商品正确价格高于错误的标价时，我们不得不取消您的订单，并且通知您。因此，您的订单已被取消。如果您仍然想购买这个商品，请根据正确的价格再次购买。
对于就此给您带来的不便，请您接受我们真诚的道歉。今后我们将继续努力，尽力确保卓越亚马逊上不再出现此类问题。
我们衷心期待继续为您提供服务。
卓越亚马逊客户服务部
不过我依然很开心能亲身见证这一过程。:)
您可能对这些感兴趣：

笔记本磁盘高频加载/卸载循环问题 (20) - 注意：本人非硬件专家，下面我仅仅阐述遇到的问题，解决方法，以及我的一些猜想。要仔细的了解这个 BUG...
从安全的角度理解——为什么要使用 Google 的服务？ (15) - 我很喜欢 Google 的一些服务 Gmail, Reader, Documents等等，而且我也一...
Google 街景 (0) - Google Maps 推出了 Street View，就是在查询地点的时候，可以查看一条街的照片，...

]]></description>
			<content:encoded><![CDATA[<p>前天晚上看到有人在推上讨论卓越超便宜的 118 元 320G 硬盘，过去一看居然是真的。其实经过“<a href="http://tech.163.com/09/1223/19/5R8A8M94000915BF.html">25 元门</a>” 之后，我知道这是几乎不可能的，其实我也知道即使我下了单卓越也是会赖掉的，但是我还是抱着“全民调戏，重在参与”的心理加入了抢购大潮，并且进一步散播了这一消息...</p>
<p>事实证明我的预料是对的，我下的两个硬盘的订单在保持 44 个小时后，被卓越取消，卓越再一次(无耻地？成功地？开心地？)赖掉订单：</p>
<blockquote><p>尊敬的客户：</p>
<p>您好！感谢您的订购。</p>
<p>我们抱歉地通知您，您在卓越亚马逊网站上购买的劲永牌320GB移动硬盘的价格出现错误。卓越亚马逊上有数百万种商品，因此有些时候难免会出现这类问题。根据我们在卓越亚马逊网站上公布的使用条件中的价格政策：http://www.amazon.cn/static/claim.asp?uid=478-5181363-0560506，出现商品价格错误问题时，如果商品正确价格高于错误的标价时，我们不得不取消您的订单，并且通知您。因此，您的订单已被取消。如果您仍然想购买这个商品，请根据正确的价格再次购买。</p>
<p>对于就此给您带来的不便，请您接受我们真诚的道歉。今后我们将继续努力，尽力确保卓越亚马逊上不再出现此类问题。</p>
<p>我们衷心期待继续为您提供服务。</p>
<p>卓越亚马逊客户服务部</p></blockquote>
<p>不过我依然很开心能亲身见证这一过程。:)<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/high-frequency-of-hdd-loadunload-cycles-problem-on-laptop.html" title="笔记本磁盘高频加载/卸载循环问题">笔记本磁盘高频加载/卸载循环问题</a> <span class="count">(20)</span> - <small class="excerpt">注意：本人非硬件专家，下面我仅仅阐述遇到的问题，解决方法，以及我的一些猜想。要仔细的了解这个 BUG...</small></li>
<li><a href="http://blog.solrex.org/articles/why-google-security-issue.html" title="从安全的角度理解——为什么要使用 Google 的服务？">从安全的角度理解——为什么要使用 Google 的服务？</a> <span class="count">(15)</span> - <small class="excerpt">我很喜欢 Google 的一些服务 Gmail, Reader, Documents等等，而且我也一...</small></li>
<li><a href="http://blog.solrex.org/articles/google-street-view.html" title="Google 街景">Google 街景</a> <span class="count">(0)</span> - <small class="excerpt">Google Maps 推出了 Street View，就是在查询地点的时候，可以查看一条街的照片，...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/amazon-cn-hard-disk-gate.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>关于 SOCKS 代理的远端 DNS 解析</title>
		<link>http://blog.solrex.org/articles/remote-dns-lookup.html</link>
		<comments>http://blog.solrex.org/articles/remote-dns-lookup.html#comments</comments>
		<pubDate>Sat, 23 Jan 2010 03:34:52 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[DNS]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[IE]]></category>

		<category><![CDATA[Proxy]]></category>

		<category><![CDATA[Socks]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638683</guid>
		<description><![CDATA[经常使用 SOCKS 代理服务器的同志们会发现一种现象，即使 SOCKS 代理服务器设置正确，某些网站仍然无法访问，比如某著名微博网站。其一般原因都是 DNS 污染 (DNS cache poisoning)。
值得庆幸的是 SOCKS 5 协议增加了对 UDP 数据包的支持，DNS 查询是通过 UDP 传输的，所以我们可以使 DNS 查询数据包也走 SOCKS 5 代理来进行远端 DNS 解析(Remote DNS Lookup)。 SOCKS 5是通过将域名直接提交给 SOCKS 服务器来进行远端 DNS 解析的，即 Address Type 0x03，而非上述所说使用 UDP 通道解析。DNS 服务是 Internet 的基础服务，要求 DNS 解析应当尽量地快，所以浏览器默认不会使用远端 DNS 解析。在目前的常用浏览器中，貌似只有 Firefox 支持可选的远端 DNS 解析，方法见这里。
我没有找到 IE 和 Chrome 支持远端 DNS 解析的方法，从讨论来看似乎是不支持的，Opera [...]]]></description>
			<content:encoded><![CDATA[<p>经常使用 SOCKS 代理服务器的同志们会发现一种现象，即使 SOCKS 代理服务器设置正确，某些网站仍然无法访问，比如<a href="http://twitter.com">某著名微博网站</a>。其一般原因都是 <a href="http://gfwrev.blogspot.com/2009/11/gfwdns.html">DNS 污染 </a>(<a href="http://en.wikipedia.org/wiki/DNS_cache_poisoning">DNS cache poisoning</a>)。</p>
<p>值得庆幸的是 SOCKS 5 协议增加了对 UDP 数据包的支持，<del datetime="2010-03-03T01:45:23+00:00">DNS 查询是通过 UDP 传输的，所以我们可以使 DNS 查询数据包也走 SOCKS 5 代理来进行远端 DNS 解析(Remote DNS Lookup)。</del> SOCKS 5是通过将域名直接提交给 SOCKS 服务器来进行远端 DNS 解析的，即 Address Type 0x03，而非上述所说使用 UDP 通道解析。DNS 服务是 Internet 的基础服务，要求 DNS 解析应当尽量地快，所以浏览器默认不会使用远端 DNS 解析。在目前的常用浏览器中，貌似只有 Firefox 支持可选的远端 DNS 解析，方法见<a href="https://calomel.org/firefox_ssh_proxy.html">这里</a>。</p>
<p>我没有找到 IE 和 Chrome 支持远端 DNS 解析的方法，从讨论来看似乎是不支持的，Opera 则根本没有 SOCKS 代理支持。</p>
<p>即便是 Firefox，对远端 DNS 解析的支持也是有一些问题的。我的经验是：Firefox 只有在设置里面写死 SOCKS v5 的代理服务器设置时，才会支持远端 DNS 解析；当使用<a href="/articles/automatic-proxy-configuration-case.html">自动代理设置脚本(.pac )</a>时，即使返回 SOCKS 代理，Firefox 也不会进行远端 DNS 解析。</p>
<p>结论是，如果想要远端 DNS 解析，只能手动切换 SOCKS 代理，不能使用自动代理配置脚本。</p>
<blockquote><p>
网友 forkei 的<a href="/articles/remote-dns-lookup.html#comment-2556">重要评论</a>：</p>
<p>chrome 的 <a href="https://chrome.google.com/extensions/detail/caehdcpeofiiigpdhbabniblemipncjj?hl=en-us">Proxy Switchy</a> 1.4.2 版本插件可以很好的解决这个问题。Firefox 的 <a href="https://addons.mozilla.org/en-US/firefox/addon/2464">FoxyProxy</a> 插件也可以很好的解决 DNS 污染。支持插件扩展功能的浏览器功能就是强大。IE 内核浏览器和 opera 只有通过 polipo 或者 privoxy 将 socks 代理转为 http 代理才行，麻烦。
</p></blockquote>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/tor-anonymity-on-line.html" title="Tor - Anonymity on Line">Tor - Anonymity on Line</a> <span class="count">(2)</span> - <small class="excerpt">其实以前就见过 Baosheng 在博客里推荐 Tor 这个工具，据说可以访问 Wikipedia，...</small></li>
<li><a href="http://blog.solrex.org/articles/tohr-the-onion-http-router.html" title="Tohr - HTTP 层上的洋葱路由器">Tohr - HTTP 层上的洋葱路由器</a> <span class="count">(44)</span> - <small class="excerpt">Tohr (The Onion HTTP Router) 是我上个星期写的一个小的研究项目，它的名字...</small></li>
<li><a href="http://blog.solrex.org/articles/automatic-proxy-configuration-case.html" title="浏览器自动选择 Proxy 配置案例">浏览器自动选择 Proxy 配置案例</a> <span class="count">(10)</span> - <small class="excerpt">本文主要讨论的是浏览器代理服务器设置技术，文中出现的人名、公司名或者域名均为化名，如有雷同，纯属巧合...</small></li>
<li><a href="http://blog.solrex.org/articles/fix-gappproxy-set-cookie-and-https-cert-bugs.html" title="解决 GAppProxy Set-Cookie 和 HTTPS Cert Bugs">解决 GAppProxy Set-Cookie 和 HTTPS Cert Bugs</a> <span class="count">(14)</span> - <small class="excerpt">我自己写了一个类似 GAppProxy 的工具，支持 Python 和 PHP，有兴趣可以看这里。研...</small></li>
<li><a href="http://blog.solrex.org/articles/chrome-like-firefox-on-linux.html" title="Linux 下 Firefox 变身 Google Chrome">Linux 下 Firefox 变身 Google Chrome</a> <span class="count">(9)</span> - <small class="excerpt">几乎可以达到以假乱真的效果，屏幕截图请看：要求：1. KDE 4 ---&gt; Gnome 的窗口...</small></li>
<li><a href="http://blog.solrex.org/articles/firefox-addon-leechblock.html" title="用 Firefox 插件控制网络沉迷">用 Firefox 插件控制网络沉迷</a> <span class="count">(5)</span> - <small class="excerpt">最近好几个朋友都加入了一个叫做“你为什么不关掉电脑去做爱做的事”的豆瓣小组，当然，我也加入了。也许是...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/remote-dns-lookup.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>RSS Feed 迁移方法</title>
		<link>http://blog.solrex.org/articles/rss-feed-banjia.html</link>
		<comments>http://blog.solrex.org/articles/rss-feed-banjia.html#comments</comments>
		<pubDate>Sat, 09 Jan 2010 01:37:30 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Feed]]></category>

		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638682</guid>
		<description><![CDATA[由于政策的调整，目前很多博主都将博客域名从 .cn 迁出，相信很多朋友都会遇到 RSS Feed 迁移的问题。如果一直使用 Feedburner/Feedsky 这种第三方烧录网站管理订阅，只需要更换第三方抓取的源即可；但是如果之前订户多用 Wordpress 原始的源 example.cn/feed/、example.cn/?feed=rss2，或者使用自定的域名 feed.example.cn 的话，当域名迁移时，原来的 example.cn 被弃用后，订户就无法得到文章更新了。
我之前一直使用 feed.solrex.cn 作为 Feedsky 的自定义域名，因为我觉得 solrex.cn 可能比 feedsky.com 更长久，后来发现这是非常愚蠢的想法。当我把域名迁移到 .org 时，就面临 feed 迁移的问题。
最简单的方法是将原来的 feed url 重定向到 Feedburner/Feedsky，但这要求网站主必须仍然控制原来域名，那就没有更换域名的必要了。
或者使用一篇博客来通知订户更换 feed url，但是实践证明这种方法收效甚微。很多人(包括我)不会去看自己使用的是什么源，认为自己使用的就是正确的 feed url。
起初我是使用的直接重定向，但后来一封域名注册商的邮件，威胁如果不办理某些手续，24日之后会停止我的 .cn 域名解析。我想，还是用一些略显卑劣的手段通知大家更换订阅源吧。这种卑劣的方法是：如果使用原来的源订阅本站，就会看到每天一篇的“网站迁移通知”，直到用户更改订阅源，或者无法忍受直接删除 feed。
其技术实现方法是：使用 php 模仿 WP 的 rss 源生成一个 xml 文件，该文件只包含一篇文章，将原来的源指向它（或者 url 重定向到它）。该 xml 中的更新日期、文章 url 每天更新一次，这样阅读器就会认为博客有更新，把这篇文章抓取回去。我本以为阅读器是根据更新日期判断文章是否重复，后来发现是根据文章 url 来判断。为减少工作量，我们可以将文章的 url [...]]]></description>
			<content:encoded><![CDATA[<p>由于政策的调整，目前很多博主都将博客域名从 .cn 迁出，相信很多朋友都会遇到 RSS Feed 迁移的问题。如果一直使用 Feedburner/Feedsky 这种第三方烧录网站管理订阅，只需要更换第三方抓取的源即可；但是如果之前订户多用 Wordpress 原始的源 example.cn/feed/、example.cn/?feed=rss2，或者使用自定的域名 feed.example.cn 的话，当域名迁移时，原来的 example.cn 被弃用后，订户就无法得到文章更新了。</p>
<p>我之前一直使用 <a href="http://feed.solrex.cn">feed.solrex.cn</a> 作为 Feedsky 的自定义域名，因为我觉得 solrex.cn 可能比 feedsky.com 更长久，后来发现这是非常愚蠢的想法。当我<a href="http://blog.solrex.org/articles/switch-to-solrex-org.html">把域名迁移到 .org</a> 时，就面临 feed 迁移的问题。</p>
<p>最简单的方法是将原来的 feed url 重定向到 Feedburner/Feedsky，但这要求网站主必须仍然控制原来域名，那就没有更换域名的必要了。</p>
<p>或者使用一篇博客来通知订户更换 feed url，但是实践证明这种方法收效甚微。很多人(包括我)不会去看自己使用的是什么源，认为自己使用的就是正确的 feed url。</p>
<p>起初我是使用的直接重定向，但后来一封域名注册商的邮件，威胁如果不办理某些手续，24日之后会停止我的 .cn 域名解析。我想，还是用一些略显卑劣的手段通知大家更换订阅源吧。这种卑劣的方法是：如果使用原来的源订阅本站，就会看到每天一篇的“网站迁移通知”，直到用户更改订阅源，或者无法忍受直接删除 feed。</p>
<p>其技术实现方法是：使用 php 模仿 WP 的 rss 源生成一个 xml 文件，该文件只包含一篇文章，将原来的源指向它（或者 url 重定向到它）。该 xml 中的更新日期、文章 url 每天更新一次，这样阅读器就会认为博客有更新，把这篇文章抓取回去。我本以为阅读器是根据更新日期判断文章是否重复，后来发现是根据文章 url 来判断。为减少工作量，我们可以将文章的 url 指向某篇目标文章，然后在 url 后面加上 “?date=***”，这样阅读器就不会认为是同一篇文章，而且读者仍然能够点入目标文章。</p>
<p>方法很简单，如果您比较懒的话，可以参考我使用的文件（也可以从<a href="http://share.solrex.org/scripts/feed_banjia.php.txt">这里</a>直接下载 php 源代码）：</p>
<blockquote><p><span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> <span style="color: rgb(0, 0, 255);">'&lt;?xml version="1.0" encoding="UTF-8"?&gt;'</span>.<span style="color: rgb(0, 0, 255);">"</span><span style="color: rgb(0, 0, 255);">\n</span><span style="color: rgb(0, 0, 255);">"</span>; <span style="color: rgb(0, 128, 128);">?&gt;</span><br />
<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> <span style="color: rgb(0, 0, 255);">'&lt;?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2chinesetwfull.xsl"?&gt;&lt;?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?&gt;'</span>; <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0"&gt;</p>
<p>&lt;channel&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;Solrex Shuffling&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;link&gt;http://blog.solrex.org&lt;/link&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;description&gt;Engineering a better life, programming a great future.&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;pubDate&gt;<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'D, d M Y '</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> <span style="color: rgb(0, 0, 255);">'00:00:00 GMT'</span>; <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/pubDate&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;generator&gt;http://wordpress.org/?v=2.7.1&lt;/generator&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;language&gt;en&lt;/language&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;sy:updatePeriod&gt;hourly&lt;/sy:updatePeriod&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;sy:updateFrequency&gt;1&lt;/sy:updateFrequency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;<br />
<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;站点迁移通知-</span><span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'d M Y'</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;http://blog.solrex.org/?p=638679&amp;amp;q=<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'Ymd'</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/link&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;comments&gt;http://blog.solrex.org/?p=638679&amp;amp;q=<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'Ymd'</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>#comments&lt;/comments&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pubDate&gt;<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'D, d M Y '</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> <span style="color: rgb(0, 0, 255);">'00:00:00 GMT'</span>; <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/pubDate&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dc:creator&gt;Solrex Yang&lt;/dc:creator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;guid isPermaLink="false"&gt;http://blog.solrex.org/?p=638679&amp;amp;q=<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'Ymd'</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/guid&gt;<br />
<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&lt;![CDATA[您好，您之所以看到这篇文章是因为您仍在使用被遗弃的 feed 地址 http://feed.solrex.cn 订阅我的博客Solrex Shuffling。我已经将网站从 http://blog.solrex.cn 迁移到了 http://blog.solrex.org。由于 .cn 域名潜在被删除的危险，为了不丢失和您交流的渠道，我不得不出此下策以每天一篇博客的方式提醒您更新 feed 地址，希望您能谅解！...</span><br />
]]&gt;&lt;/description&gt;<br />
<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;content:encoded&gt;&lt;![CDATA[&lt;p&gt;您好，您之所以看到这篇文章是因为您仍在使用被遗弃的 feed 地址 http://feed.solrex.cn 订阅我的博客&lt;a href="http://blog.solrex.org"&gt;Solrex Shuffling&lt;/a&gt;。我已经将网站从 &lt;a href="http://blog.solrex.org"&gt;http://blog.solrex.cn&lt;/a&gt; 迁移到了 &lt;a href="http://blog.solrex.org"&gt;http://blog.solrex.org&lt;/a&gt;。由于 .cn 域名潜在被删除的危险，为了不丢失和您交流的渠道，我不得不出此下策以每天一篇博客的方式提醒您更新 feed 地址，希望您能谅解！&lt;/p&gt;</span><br />
<span style="color: rgb(0, 0, 0);">&lt;p&gt;如果您觉得&lt;a href="http://blog.solrex.org"&gt;本站&lt;/a&gt;对您还有点儿用处，可以使用以下方式继续订阅：&lt;/p&gt;</span><br />
&lt;ul&gt;<br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;如果您使用离线阅读器，请将本站的 feed 地址 &lt;a href="http://feeds.feedburner.com/solrex"&gt;http://feeds.feedburner.com/solrex&lt;/a&gt; 或者 &lt;a href="http://feed.feedsky.com/solrex"&gt;http://feed.feedsky.com/solrex&lt;/a&gt; 添加到您的订阅器中，并删除现有这个 feed。&lt;/p&gt;&lt;/li&gt;</span><br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;如果您使用在线阅读器，比如 Google Reader、抓虾 之类，您可以点击&lt;a href="http://blog.solrex.org"&gt;这里&lt;/a&gt;到本站首页，在右侧选择您的在线阅读器，重新订阅，并将现在这个 feed 删除。&lt;/p&gt;&lt;/li&gt;</span><br />
&lt;/ul&gt;<br />
<span style="color: rgb(0, 0, 0);">&lt;p&gt;如果您觉得&lt;a href="http://blog.solrex.org"&gt;本站&lt;/a&gt;对您不再有用，可以使用以下方式退订：&lt;/p&gt;</span><br />
&lt;ul&gt;<br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;如果您使用离线阅读器，请咨询阅读器帮助如何删除 feed，一般情况下在 feed 上直接点 del 键即可。&lt;/p&gt;&lt;/li&gt;</span><br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;Google Reader 用户可以在左侧 Subscriptions 中找到本 feed（一般名为 Solrex Shuffling），将鼠标移动至其上，您会发现右侧有一个向下的小箭头，点击箭头，您就会发现有 Unsubscribe 的选项；或者您也可以到右上角的 Setting 中，点入 Subscriptions 标签页，对所有 feed 进行管理时删除 Solrex Shuffling 这个 feed。您可以在&lt;a href="http://www.google.com/support/reader/bin/answer.py?hl=zh_CN&amp;answer=73062"&gt;这个页面&lt;/a&gt;找到更多帮助。&lt;/p&gt;&lt;/li&gt;</span><br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;抓虾用户可以在&lt;a href="http://zhuaxia.com/help.php#3_3"&gt;这个页面&lt;/a&gt;找到退订的帮助。&lt;/p&gt;&lt;/li&gt;</span><br />
<span style="color: rgb(0, 0, 0);">&lt;li&gt;&lt;p&gt;其它在线阅读器用户请咨询该网站帮助。&lt;/p&gt;&lt;/li&gt;</span><br />
&lt;/ul&gt;<br />
<span style="color: rgb(0, 0, 0);">&lt;p&gt;无论如何，感谢您一直以来对本站的支持，我希望能在&lt;a href="http://blog.solrex.org"&gt;新的站点&lt;/a&gt;继续收到您的批评或支持！祝您好运！&lt;/p&gt;</span><br />
&lt;p&gt;Solrex Yang&lt;/p&gt;<br />
&lt;p&gt;<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'D, d M Y '</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>&lt;/p&gt;<br />
]]&gt;&lt;/content:encoded&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wfw:commentRss&gt;http://blog.solrex.org/?p=638679&amp;amp;q=<span style="color: rgb(0, 128, 128);">&lt;?php</span> <span style="color: rgb(0, 0, 128); font-weight: bold;">echo</span> date(<span style="color: rgb(0, 0, 255);">'Ymd'</span>, strtotime(<span style="color: rgb(0, 0, 255);">"+7 hour"</span>)); <span style="color: rgb(0, 128, 128);">?&gt;</span>/feed/ ?&gt;&lt;/wfw:commentRss&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/item&gt;<br />
&lt;/channel&gt;<br />
&lt;/rss&gt;</p></blockquote>
<p>您可以到 <a href="http://feed.solrex.cn">feed.solrex.cn</a> 查看效果。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/google-reader-new-problem.html" title="Google Reader 的一点问题">Google Reader 的一点问题</a> <span class="count">(4)</span> - <small class="excerpt">Google Reader 是我非常喜欢的在线博客订阅器，自从发现这个服务之后我就结束了尝试 N 个...</small></li>
<li><a href="http://blog.solrex.org/articles/temporarily-be-quiet.html" title="暂停更新一段">暂停更新一段</a> <span class="count">(3)</span> - <small class="excerpt">明天就要开学了，今天是我在公司的最后一天。现在自己还没有个人电脑，以后大概就失去了持续的 Inter...</small></li>
<li><a href="http://blog.solrex.org/articles/switch-to-solrex-org.html" title="启用新域名 solrex.org">启用新域名 solrex.org</a> <span class="count">(12)</span> - <small class="excerpt">各位，即日起本博地址更换为 http://blog.solrex.org，原 solrex.cn 域...</small></li>
<li><a href="http://blog.solrex.org/articles/forced-to-move-my-blog.html" title="博客被搬家">博客被搬家</a> <span class="count">(13)</span> - <small class="excerpt">两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...</small></li>
<li><a href="http://blog.solrex.org/articles/douyou-count.html" title="豆瓣好友统计图标">豆瓣好友统计图标</a> <span class="count">(3)</span> - <small class="excerpt">自从 Feedburner 订阅数统计图标成为博客装逼工具之后，各种各样的统计图标层出不穷，比如我也...</small></li>
<li><a href="http://blog.solrex.org/articles/wordpress-28-and-281-beta1-sucks.html" title="Wordpress 2.8 和 2.8.1 beta1 毛病真多">Wordpress 2.8 和 2.8.1 beta1 毛病真多</a> <span class="count">(9)</span> - <small class="excerpt">前两天我才在 Twitter 炫耀了一下我忍住没当小白的努力，没想到昨天晚上被哥们一忽悠，他说他没有...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/rss-feed-banjia.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>我的 2009 报表</title>
		<link>http://blog.solrex.org/articles/2009-in-money.html</link>
		<comments>http://blog.solrex.org/articles/2009-in-money.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 14:42:46 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[2009]]></category>

		<category><![CDATA[Money]]></category>

		<category><![CDATA[Spend]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638681</guid>
		<description><![CDATA[2009 年，我第一次开始认真记账，使用的是“雙胞胎拔拔”的“電子式家庭記帳簿”。由于 WPS Office 无法支持很多 Excel 的高级功能，所以只能使用低版本的 V1.x。为了避免误操作，平时还将 xls 文件备份到 Dropbox。
一年来，基本上能想得起的花销都记了下来，总算形成了一份我的 2009 年报表。结果很悲剧，年终盘点，支出超过收入 1635.44 元。我原以为这每月 759.5 块的补助能使我收支平衡呢...还好我还有点儿积蓄，看来我还是高估了自己的节俭能力。

您可能对这些感兴趣：

长假之购物 (6) - 一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...

]]></description>
			<content:encoded><![CDATA[<p>2009 年，我第一次开始认真记账，使用的是“雙胞胎拔拔”的“電子式家庭記帳簿”。由于 WPS Office 无法支持很多 Excel 的高级功能，所以只能使用低版本的 V1.x。为了避免误操作，平时还将 xls 文件备份到 Dropbox。</p>
<p>一年来，基本上能想得起的花销都记了下来，总算形成了一份我的 2009 年报表。结果很悲剧，年终盘点，支出超过收入 1635.44 元。我原以为这每月 759.5 块的补助能使我收支平衡呢...还好我还有点儿积蓄，看来我还是高估了自己的节俭能力。</p>
<p><img src="http://share.solrex.org/pictures/sum_2009.png" alt="我的 2009 报表" width="534" height="444" /><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/shopping-in-golden-week.html" title="长假之购物">长假之购物</a> <span class="count">(6)</span> - <small class="excerpt">一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/2009-in-money.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>启用新域名 solrex.org</title>
		<link>http://blog.solrex.org/articles/switch-to-solrex-org.html</link>
		<comments>http://blog.solrex.org/articles/switch-to-solrex-org.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 05:34:09 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[Blog]]></category>

		<category><![CDATA[BSP]]></category>

		<category><![CDATA[History]]></category>

		<category><![CDATA[Wap]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638679</guid>
		<description><![CDATA[各位，即日起本博地址更换为 http://blog.solrex.org，原 solrex.cn 域名将逐渐作废。若有加本站为友链的朋友，麻烦您更新一下地址；使用 feed 地址 http://feed.solrex.cn 订阅本站的朋友，也请将 feed 地址更新为 http://feeds.feedburner.com/solrex 或者 http://feed.feedsky.com/solrex。谢谢！
另外，本站目前已经支持手机直接浏览，用手机浏览器访问 http://blog.solrex.org 直接看到的即是窄屏界面，无需再访问之前的 /wap/ 目录。
恰逢年底，许多人都在总结，屡次的搬迁和被搬迁，我也趁这个机会回忆一下自己博客迁移的历程。

2004 年 9 月 29 日
在南大小百合 BBS 博客写下第一篇日志。可惜，现在连 isince2003 这个 ID 都因生命力太低被清除了。
2005 年 6 月 12 日
在当时的 MSN Space 开博。因为某些原因，后来被自己封闭了。
2006 年 7 月 13 日
因为受不了 MSN Space 的经常性被封，在百度空间对外开放时，抢先申请了一个，开始将更新同步在百度空间。三个月后对百度空间失去兴趣，遂废弃。
2006 年 10 月 29 日
买下了自己的 .cn 独立域名，但是依然没有主机空间，只是定义了几个域名转向。
2007 年 2 月 3 [...]]]></description>
			<content:encoded><![CDATA[<p>各位，即日起本博地址更换为 <a href="/">http://blog.solrex.org</a>，原 solrex.cn 域名将逐渐作废。若有加本站为友链的朋友，麻烦您更新一下地址；使用 feed 地址 <a href="http://feed.solrex.cn">http://feed.solrex.cn</a> 订阅本站的朋友，也请将 feed 地址更新为 <a href="http://feeds.feedburner.com/solrex">http://feeds.feedburner.com/solrex</a> 或者 <a href="http://feed.feedsky.com/solrex">http://feed.feedsky.com/solrex</a>。谢谢！</p>
<p>另外，本站目前已经支持手机直接浏览，用手机浏览器访问 <a href="/">http://blog.solrex.org</a> 直接看到的即是窄屏界面，无需再访问之前的 /wap/ 目录。</p>
<p>恰逢年底，许多人都在总结，屡次的搬迁和被搬迁，我也趁这个机会回忆一下自己博客迁移的历程。</p>
<ul>
<li>2004 年 9 月 29 日
<p>在<a href="http://bbs.nju.edu.cn/blogdoc?userid=isince2003">南大小百合 BBS 博客</a>写下<a href="/articles/my-first-blog-post.html">第一篇日志</a>。可惜，现在连 isince2003 这个 ID 都因生命力太低被清除了。</li>
<li>2005 年 6 月 12 日
<p>在当时的 <a href="http://mu-er.spaces.live.com/">MSN Space</a> <a href="/articles/my-sun.html">开博</a>。因为某些原因，后来被自己封闭了。</li>
<li>2006 年 7 月 13 日
<p>因为受不了 MSN Space 的经常性被封，在百度空间对外开放时，抢先<a href="http://hi.baidu.com/solrex">申请了一个</a>，开始<a href="/articles/destroy-the-block.html">将更新同步在百度空间</a>。三个月后对百度空间失去兴趣，遂废弃。</li>
<li>2006 年 10 月 29 日
<p><a href="/articles/got-my-own-domain-name.html">买下了自己的 .cn 独立域名</a>，但是依然没有主机空间，只是定义了几个域名转向。</li>
<li>2007 年 2 月 3 日
<p>丢弃原 MSN Space，申请了一个<a href="http://solrex.spaces.live.com">新的 Live Space</a>，并同步在 <a href="http://solrex.blogspot.com">Blogspot</a> 上更新。</li>
<li>2007 年 6 月 18 日
<p>开始使用 <a href="/articles/new-wordpress-blog-comming.html">Wordpress 博客系统</a>，在 yo2.cn 上安家，并开始使用独立博客地址 <a href="http://blog.solrex.cn">http://blog.solrex.cn</a>。
</li>
<li>2008 年 12 月 24 日
<p>对 yo2 很满意，因此<a href="/articles/small-changes-of-my-blogs.html">关闭同步更新的 Blogspot 站</a>，技术文章也不再同步到 Live Space。</li>
<li>2009 年 5 月 16 日
<p><a href="/articles/bye-bye-yo2cn.html">博客迁出 yo2</a>，主要原因是当机时间太长，频率太高，而且过滤关键词。<a href="http://blog.youxu.info">Eric 师兄</a>两年来一直为我的主页提供托管空间，这次就把博客也迁了过去。</li>
<li>2009 年 9 月 24 日
<p><a href="http://blog.youxu.info">Eric</a> 主机空间所在服务器 IP 被封。由于在找工作的关头，希望几年来积累的技术博客能起些作用，于是承蒙<a href="http://verypig.com">信文君</a>收留，<a href="/articles/forced-to-move-my-blog.html">博客再次搬迁</a>。</li>
<li>2009 年 12 月 14 日
<p>虽然域名还有一年才到期，看着友链的一些网站变成 Connection reset by peer，某些机构这些让人寒心的行为还是让我下定决心遗弃 .cn 域名，重新在 Godaddy 注册了 <a href="/">solrex.org</a>，并将所有 .cn 的链接 301 永久重定向到 .org。(在我的忽悠下更换域名的还有 <a href="http://www.iron-feet.com/it/change-of-domain-name/">Iron-feet 同学</a>)</li>
</ul>
<p>总的来说，这就是一个折腾的过程，但我从这折腾中获得了很多乐趣——除了某些被折腾的经历外。值得庆幸的是写下的文字都得到了保留，于我而言是一笔宝贵的财富。我以前从不写日记，从开始使用博客才有了记录生活的习惯，现在回头看看，还蛮不错的。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/bye-bye-yo2cn.html" title="博客迁出 yo2.cn">博客迁出 yo2.cn</a> <span class="count">(5)</span> - <small class="excerpt">近两年以来我都是使用的 yo2.cn 提供的博客托管服务，就是说 yo2.cn 提供一个 Wordp...</small></li>
<li><a href="http://blog.solrex.org/articles/new-wordpress-blog-comming.html" title="开始使用 Wordpress">开始使用 Wordpress</a> <span class="count">(0)</span> - <small class="excerpt">先引用一段著名的对话：A: 你有博客吗？B: 有。A: 你介意换一个 BSP(Blog Servic...</small></li>
<li><a href="http://blog.solrex.org/articles/rss-feed-banjia.html" title="RSS Feed 迁移方法">RSS Feed 迁移方法</a> <span class="count">(3)</span> - <small class="excerpt">由于政策的调整，目前很多博主都将博客域名从 .cn 迁出，相信很多朋友都会遇到 RSS Feed 迁...</small></li>
<li><a href="http://blog.solrex.org/articles/forced-to-move-my-blog.html" title="博客被搬家">博客被搬家</a> <span class="count">(13)</span> - <small class="excerpt">两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...</small></li>
<li><a href="http://blog.solrex.org/articles/wordpress-28-and-281-beta1-sucks.html" title="Wordpress 2.8 和 2.8.1 beta1 毛病真多">Wordpress 2.8 和 2.8.1 beta1 毛病真多</a> <span class="count">(9)</span> - <small class="excerpt">前两天我才在 Twitter 炫耀了一下我忍住没当小白的努力，没想到昨天晚上被哥们一忽悠，他说他没有...</small></li>
<li><a href="http://blog.solrex.org/articles/lies-my-teacher-told-me.html" title="Lies My Teacher Told Me">Lies My Teacher Told Me</a> <span class="count">(11)</span> - <small class="excerpt">最早是从笑来的博客里看到这本书的信息，而目前从搜索结果来看，在中文世界里评论这本书的也只有笑来老师。...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/switch-to-solrex-org.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>心中一块大石落地</title>
		<link>http://blog.solrex.org/articles/icc-paper-accepted.html</link>
		<comments>http://blog.solrex.org/articles/icc-paper-accepted.html#comments</comments>
		<pubDate>Wed, 30 Dec 2009 07:49:03 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Security]]></category>

		<category><![CDATA[Wireless and Mobile]]></category>

		<category><![CDATA[ICC]]></category>

		<category><![CDATA[IEEE]]></category>

		<category><![CDATA[Paper]]></category>

		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638676</guid>
		<description><![CDATA[从找到工作以来，我就在忙论文，因为中科院的硕士毕业是要发表论文的。还有半年临近毕业，已经火烧眉毛了，因此我一直生活在无法按时毕业的恐慌中，也不愿意在博客上多讲，可以发现我最近两个月的更新非常少。
今天是中期答辩的日子。因为没有文章，我很怕答辩时候被枪毙掉，那我只能延期毕业了。但是，昨天正在反复修改答辩幻灯片的时候，收到了一条天大的好消息，我投往 ICC 2010 的一篇文章被录用了，而且还是 oral session！ICC，IEEE 通信学会的旗舰会议啊，我这个小硕实在是太满足了，太满足了，顷刻间，我内牛满面！
再看看审稿意见，我不得不赞叹我的运气。三个审稿人，4444，4444，4434；修改意见里，一个是“没特别的修改意见”，一个是“文章太干巴，应该生动些”，只有最后一个提出了一个切实的修改意见。看到这样友好的评审结果，我又一次内牛满面！
于是乎，两篇论文，一篇已录用，我的中期答辩顺利通过。从目前来看，毕业已经不成问题，谢天谢地！我也总算不用再羞羞答答，敢挺直腰板说俺也是搞过科研的人了。
您可能对这些感兴趣：

ACM 图灵奖演讲论文集 (0) - 今天尝试了一下 JabRef 论文数据库的 HTML 导出，将我搜集的 ACM Turing Awa...
一个对 Tor 的新型重放攻击方法 (5) - Tor 是一个旨在抵御流量分析的匿名网络访问服务，它也可以被用为穿透网络 censorship 的工...

]]></description>
			<content:encoded><![CDATA[<p>从找到工作以来，我就在忙论文，因为中科院的硕士毕业是要发表论文的。还有半年临近毕业，已经火烧眉毛了，因此我一直生活在无法按时毕业的恐慌中，也不愿意在博客上多讲，可以发现我最近两个月的更新非常少。</p>
<p>今天是中期答辩的日子。因为没有文章，我很怕答辩时候被枪毙掉，那我只能延期毕业了。但是，昨天正在反复修改答辩幻灯片的时候，收到了一条天大的好消息，我投往 <a href="http://www.ieee-icc.org/2010/ ">ICC 2010</a> 的一篇文章被录用了，而且还是 oral session！ICC，IEEE 通信学会的旗舰会议啊，我这个小硕实在是太满足了，太满足了，顷刻间，我内牛满面！</p>
<p>再看看审稿意见，我不得不赞叹我的运气。三个审稿人，4444，4444，4434；修改意见里，一个是“没特别的修改意见”，一个是“文章太干巴，应该生动些”，只有最后一个提出了一个切实的修改意见。看到这样友好的评审结果，我又一次内牛满面！</p>
<p>于是乎，两篇论文，一篇已录用，我的中期答辩顺利通过。从目前来看，毕业已经不成问题，谢天谢地！我也总算不用再羞羞答答，敢挺直腰板说俺也是搞过科研的人了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/acm-turing-award-lectures.html" title="ACM 图灵奖演讲论文集">ACM 图灵奖演讲论文集</a> <span class="count">(0)</span> - <small class="excerpt">今天尝试了一下 JabRef 论文数据库的 HTML 导出，将我搜集的 ACM Turing Awa...</small></li>
<li><a href="http://blog.solrex.org/articles/a-new-replay-attack-against-tor.html" title="一个对 Tor 的新型重放攻击方法">一个对 Tor 的新型重放攻击方法</a> <span class="count">(5)</span> - <small class="excerpt">Tor 是一个旨在抵御流量分析的匿名网络访问服务，它也可以被用为穿透网络 censorship 的工...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/icc-paper-accepted.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>京郊云佛山一游</title>
		<link>http://blog.solrex.org/articles/yunfo-and-nanshan-skating.html</link>
		<comments>http://blog.solrex.org/articles/yunfo-and-nanshan-skating.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:50:09 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Travel]]></category>

		<category><![CDATA[Bowling]]></category>

		<category><![CDATA[Miyun]]></category>

		<category><![CDATA[Skating]]></category>

		<category><![CDATA[Yunfo]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638666</guid>
		<description><![CDATA[其实算不得游云佛，只是在云佛山度假村住了一天。12月16、17日实验室20周年庆，年会选择在了密云县的云佛山度假村。除了开会之外，还有一些娱乐活动，我也就初体验了一把保龄球和滑雪。
云佛山度假村的保龄球馆挺旧的，经常发生卡住的情况。虽然以前没有玩过，但是我感觉只要手稳的话，不滑下球道还是比较容易的，就怕想使劲却失去对方向的控制。第一局什么也不懂，扔了七十多分。本来只有一局比赛，后来看没人继续过来玩，我们就又开了一局。这时候开始注意步法，很奇怪的是别人可以做到右手出球时左腿在前，我却无论如何尝试都是右手出球时右腿在前，所以姿势有点儿诡异。第一局用的球比较轻，方向虽然不偏，但是击倒的瓶子比较少。第二局换了重一点儿的球，很费劲，扔了一百一十多分。刚开第三局，时间就到了，只好吃饭去。出了球馆就觉得手指头真累呀，尤其是扣球的中指和无名指，相当疲劳。也不知道是不是步法错误，左脚脚心忽然开始有点儿疼，不过并不严重。
中午和晚上玩了会儿“三国杀”纸牌，第一次玩，整个过程基本上都是别人对我的扫盲教学。剩下时间开会不提。晚会抽奖，没我的份儿。
第二天滑雪，南山雪场，据说是北京最好的雪场。浪费了一些时间在领雪服和雪具上，集体活动嘛，总是不可避免。刚穿上滑雪板的时候，很不适应，在平地走起路来太痛苦了。一步一步地走，会滑；用雪杖推，推不动。上初级道顶端的履带运行很慢，我也就趁机观察了一下那些滑雪教练的教学。发现初学的技巧很简单，就是内八字利用摩擦力控制速度，刹车类似于 T 刹，不过那一横在前面。于是就用自己总结的技巧开始滑了，全赖有轮滑的底子，基本上没怎么摔跤，滑得不亦乐乎。南山雪场的确不错，有两个中级道，三个半初级道，我们去的时候开了两个半，人并不算很多，等履带或者小滑车的时间都不算长。
中午在雪场的食堂吃饭，所有的饭都是35元，有面条和盖浇饭之类的。味道还可以，不过价格是真贵，看见有自己带桶装方便面过去泡的，不失为一个好想法  
玩了一上午的初级道，下午壮着胆子上了一下中级道。从下面看着还好，但是坐缆车上到最顶上，再往下看，真的有点儿怕了。尤其是最顶上那个坡，非常陡，往下滑时，觉得速度都快超出自己控制了。很怕摔倒，更怕被后面的人撞到，还好有惊无险。那个速度感非常刺激，大概是因为这时候身体在你控制和无法控制的临界点吧，感觉很不一样。滑了七八圈之后，最惊险的事情发生了，下缆车时没下好，摔倒了，刚抬起头，后脑壳就被缆车底部碰了一下。还好没大碍，后来想想真后怕，不应该那么早抬头的，应该等缆车过去再起来。下来后心有余悸，就没敢再上去了，也累了，到初级道滑了两圈就去还雪具退场了。
脱完雪鞋出来，发现小腿都软了，胳膊也酸痛。回到车上没什么力气，聊聊天，然后就在回程的路上睡着了。到北京时正好赶上高峰期，很堵，而且暖气开得太足，快到学校时候感觉车上闷得不行，身体很难受。于是下车时候非常匆忙要逃离这个闷罐子，然后就悲剧了，跟随了我将近三年的三星 E908，不见了。更悲剧的是——我第二天早上才发现这一事实！
所以，人生就是一个茶几呀！稍觉安慰的是，好歹已经用了三年了，而且恰好一个星期前对联系人做了备份，所以还算不是特别悲剧。
另外，一个师兄滑雪时被别人撞伤了胳膊，还住院了。鉴于这些危险经历，提醒要去滑雪的朋友，一定要多加小心！
您可能对这些感兴趣：

在北京吃麻辣烫 (3) - 麻辣烫这种小吃按理说和京城扯不上太大关系，但我却是在京城第一次见这种稀罕物件。话说 2006 年底一...
首钢轮滑 (4) - 时代在变迁呀，小时候我们把滑旱冰的鞋叫做“旱冰鞋”，现在我们把旱冰鞋叫做“轮滑鞋”；小时候我们说“溜...
春游戒台寺 (1) - 我今天第一次骑了山路，是真正的盘山公路耶！继昨天骑车逛了卢沟桥之后，心里痒痒，就想再走远一点儿吧，于...
骑行卢沟桥 (5) - 昨天我把签名改成“明天骑车去卢沟桥吧”后，部分同学有点儿惊讶。我以前也以为卢沟桥好远，但当我用百度地...
国家美术馆一游 (0) - 黑乎乎地阴沉了一天，空气湿闷湿闷，到晚上总算开始下雨了。幸亏上次下雨带来的雨伞还扔在办公桌下， 北京...
类成员函数作为 pthread_create 函数参数 (1) - 花了三个工作日把原来写的一段通信守护进程代码从过程方法改到了 template class，对于 t...

]]></description>
			<content:encoded><![CDATA[<p>其实算不得游云佛，只是在云佛山度假村住了一天。12月16、17日实验室20周年庆，年会选择在了密云县的云佛山度假村。除了开会之外，还有一些娱乐活动，我也就初体验了一把保龄球和滑雪。</p>
<p>云佛山度假村的保龄球馆挺旧的，经常发生卡住的情况。虽然以前没有玩过，但是我感觉只要手稳的话，不滑下球道还是比较容易的，就怕想使劲却失去对方向的控制。第一局什么也不懂，扔了七十多分。本来只有一局比赛，后来看没人继续过来玩，我们就又开了一局。这时候开始注意步法，很奇怪的是别人可以做到右手出球时左腿在前，我却无论如何尝试都是右手出球时右腿在前，所以姿势有点儿诡异。第一局用的球比较轻，方向虽然不偏，但是击倒的瓶子比较少。第二局换了重一点儿的球，很费劲，扔了一百一十多分。刚开第三局，时间就到了，只好吃饭去。出了球馆就觉得手指头真累呀，尤其是扣球的中指和无名指，相当疲劳。也不知道是不是步法错误，左脚脚心忽然开始有点儿疼，不过并不严重。</p>
<p>中午和晚上玩了会儿“三国杀”纸牌，第一次玩，整个过程基本上都是别人对我的扫盲教学。剩下时间开会不提。晚会抽奖，没我的份儿。</p>
<p>第二天滑雪，南山雪场，据说是北京最好的雪场。浪费了一些时间在领雪服和雪具上，集体活动嘛，总是不可避免。刚穿上滑雪板的时候，很不适应，在平地走起路来太痛苦了。一步一步地走，会滑；用雪杖推，推不动。上初级道顶端的履带运行很慢，我也就趁机观察了一下那些滑雪教练的教学。发现初学的技巧很简单，就是内八字利用摩擦力控制速度，刹车类似于 T 刹，不过那一横在前面。于是就用自己总结的技巧开始滑了，全赖有轮滑的底子，基本上没怎么摔跤，滑得不亦乐乎。南山雪场的确不错，有两个中级道，三个半初级道，我们去的时候开了两个半，人并不算很多，等履带或者小滑车的时间都不算长。</p>
<p>中午在雪场的食堂吃饭，所有的饭都是35元，有面条和盖浇饭之类的。味道还可以，不过价格是真贵，看见有自己带桶装方便面过去泡的，不失为一个好想法 <img src='http://blog.solrex.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>玩了一上午的初级道，下午壮着胆子上了一下中级道。从下面看着还好，但是坐缆车上到最顶上，再往下看，真的有点儿怕了。尤其是最顶上那个坡，非常陡，往下滑时，觉得速度都快超出自己控制了。很怕摔倒，更怕被后面的人撞到，还好有惊无险。那个速度感非常刺激，大概是因为这时候身体在你控制和无法控制的临界点吧，感觉很不一样。滑了七八圈之后，最惊险的事情发生了，下缆车时没下好，摔倒了，刚抬起头，后脑壳就被缆车底部碰了一下。还好没大碍，后来想想真后怕，不应该那么早抬头的，应该等缆车过去再起来。下来后心有余悸，就没敢再上去了，也累了，到初级道滑了两圈就去还雪具退场了。</p>
<p>脱完雪鞋出来，发现小腿都软了，胳膊也酸痛。回到车上没什么力气，聊聊天，然后就在回程的路上睡着了。到北京时正好赶上高峰期，很堵，而且暖气开得太足，快到学校时候感觉车上闷得不行，身体很难受。于是下车时候非常匆忙要逃离这个闷罐子，然后就悲剧了，跟随了我将近三年的三星 E908，不见了。更悲剧的是——我第二天早上才发现这一事实！</p>
<p>所以，人生就是一个茶几呀！稍觉安慰的是，好歹已经用了三年了，而且恰好一个星期前对联系人做了备份，所以还算不是特别悲剧。</p>
<p>另外，一个师兄滑雪时被别人撞伤了胳膊，还住院了。鉴于这些危险经历，提醒要去滑雪的朋友，一定要多加小心！<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/beijing-ma-la-tang.html" title="在北京吃麻辣烫">在北京吃麻辣烫</a> <span class="count">(3)</span> - <small class="excerpt">麻辣烫这种小吃按理说和京城扯不上太大关系，但我却是在京城第一次见这种稀罕物件。话说 2006 年底一...</small></li>
<li><a href="http://blog.solrex.org/articles/shou-gang-skating.html" title="首钢轮滑">首钢轮滑</a> <span class="count">(4)</span> - <small class="excerpt">时代在变迁呀，小时候我们把滑旱冰的鞋叫做“旱冰鞋”，现在我们把旱冰鞋叫做“轮滑鞋”；小时候我们说“溜...</small></li>
<li><a href="http://blog.solrex.org/articles/jietaisi-outing.html" title="春游戒台寺">春游戒台寺</a> <span class="count">(1)</span> - <small class="excerpt">我今天第一次骑了山路，是真正的盘山公路耶！继昨天骑车逛了卢沟桥之后，心里痒痒，就想再走远一点儿吧，于...</small></li>
<li><a href="http://blog.solrex.org/articles/lugouqiao-ride.html" title="骑行卢沟桥">骑行卢沟桥</a> <span class="count">(5)</span> - <small class="excerpt">昨天我把签名改成“明天骑车去卢沟桥吧”后，部分同学有点儿惊讶。我以前也以为卢沟桥好远，但当我用百度地...</small></li>
<li><a href="http://blog.solrex.org/articles/national-gallery-of-china.html" title="国家美术馆一游">国家美术馆一游</a> <span class="count">(0)</span> - <small class="excerpt">黑乎乎地阴沉了一天，空气湿闷湿闷，到晚上总算开始下雨了。幸亏上次下雨带来的雨伞还扔在办公桌下， 北京...</small></li>
<li><a href="http://blog.solrex.org/articles/class-member-function-as-pthread_create-argument.html" title="类成员函数作为 pthread_create 函数参数">类成员函数作为 pthread_create 函数参数</a> <span class="count">(1)</span> - <small class="excerpt">花了三个工作日把原来写的一段通信守护进程代码从过程方法改到了 template class，对于 t...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/yunfo-and-nanshan-skating.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>因为真实才宝贵</title>
		<link>http://blog.solrex.org/articles/it-birds-review.html</link>
		<comments>http://blog.solrex.org/articles/it-birds-review.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 11:59:28 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Reading]]></category>

		<category><![CDATA[Book]]></category>

		<category><![CDATA[Friends]]></category>

		<category><![CDATA[Story]]></category>

		<category><![CDATA[Truth]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638656</guid>
		<description><![CDATA[读大学时我很佩服一个老师。他教过我两门课，两门都是计算机类的课程，在数学系并不很受欢迎。他讲得不错，人很好，但这不是我佩服他的原因。我佩服他，主要是因为他说真话。他敢在课堂上讲他的经历，讲那些年轻的鲁莽和中年的困扰，讲他的爱情的开始和结束，以及那些做过的好事和坏事。
说真话——这一点很难做到。我写博客，越写越不真，看的人越多，就越不敢写。所谓白纸黑字，写下来，就要后怕很多事。隐私的话，怕被有恶意的人利用；针砭的话，怕被人抓住把柄；牢骚的话，怕被相关的人误解。很慷慨地写下自己的得意和风光，却吝啬于记录下自身的失意和落魄。在互联网的一个小小角落留下点儿自己的印迹都要想那么多，可见一个“真”字有多难得！
昨天 ironfeet 从我这借走一本书，我才想起来还欠一篇自己给自己承诺下的书评。这本书的名字叫做《我是一只 IT 小小鸟》。

我开始并不看好这本书。这本书的作者里有几个是我的师兄和朋友，他们都是很杰出的人，丝毫没有诋毁的意思，但是我认为有多少人会买几个年轻人写的书呢？因此这本书推广的九月份 China-Pub 九周年庆生会，我和它的几个作者和编辑一起参加了，但是出于对读物的挑剔，我并没有掏钱买一本。

(图片来自 Linjian 博客)
后来有了点儿时间，我想想自己受过这几个朋友的很多帮助，而且 Eric  和 Linjian 都提到过要将稿酬用于公益事业。那么至少出于对朋友的尊重和支持，我觉得有必要买一本来读读，于是我就到卓越上网购了一本。
和其它书不一样，这本书我不是一口气读完的，而是按照感兴趣的顺序翻看了每个人的故事。然后我忽然发现：这不是我想象的那种"IT 牛人炫耀帖合集"。首先，里面有些人其实算不得通常意义上的“牛人”；其次，里面有很多人抑制住了炫耀的欲望，写的是真挚的东西。其实，读任何故事，精彩的往往不是一帆风顺的。如果一个人讲他的经历是把握住了任何时代的脉搏，永远站立在时代大潮的顶端，那么他的故事会很乏味，我很开心地看到这些年轻的朋友们没有这样写。其中某些内容，我想，也许他们平时都不会和别人谈起，但是他们却怀着与人共享的良好意愿写了下来。写自己的经历，不难，但是对于年轻人来讲，能平静地讲述过去的真实故事，并不容易。
大学的时候，我经常读一本杂志，叫做《中国青年》。其中我挺喜欢的一个专栏，叫做“我或我身边青年的生存状态”，《我是一只 IT 小小鸟》大概也能算成“我身边 IT 青年人的生存状态”了。在内心冲突挣扎的青年时代，有一些这样的书和文章可以给自己参考和启迪，知道自己“不是一个人在战斗”，真好！
您可能对这些感兴趣：

西格玛奇遇记 (9) - 这是一个很有趣又神奇的世界，比如说忽然有一天，你发现和你聊天的将来的同事居然是你老板的直系师兄，忽然...
Lies My Teacher Told Me (11) - 最早是从笑来的博客里看到这本书的信息，而目前从搜索结果来看，在中文世界里评论这本书的也只有笑来老师。...
新购《少有人走的路》等五本书 (1) - 其实本想只买《少有人走的路》一本书，但卓越网购书总价 49 元以上才给免配送费，于是就在卓越的特价店...
密码传奇 (1) - 不想睡觉，就写一个小书评吧。《密码传奇》上次在国家科学图书馆借一本密码学教材的时候，碰巧看到了这本书...
你能感到书本给你的压力吗 (4) - 你能感到书本给你的压力吗？随着案头累积的书越来越多，我忽然想到这个问题，因为我发现我越来越为这个焦虑...
《宽容》和《圣经的故事》 (2) - 这几天读了两本房龙的书，《宽容》和《圣经的故事》。以前曾经读过他《人类的故事》，虽然写得很好，但是我...

]]></description>
			<content:encoded><![CDATA[<p>读大学时我很佩服一个老师。他教过我两门课，两门都是计算机类的课程，在数学系并不很受欢迎。他讲得不错，人很好，但这不是我佩服他的原因。我佩服他，主要是因为他说真话。他敢在课堂上讲他的经历，讲那些年轻的鲁莽和中年的困扰，讲他的爱情的开始和结束，以及那些做过的好事和坏事。</p>
<p>说真话——这一点很难做到。我写博客，越写越不真，看的人越多，就越不敢写。所谓白纸黑字，写下来，就要后怕很多事。隐私的话，怕被有恶意的人利用；针砭的话，怕被人抓住把柄；牢骚的话，怕被相关的人误解。很慷慨地写下自己的得意和风光，却吝啬于记录下自身的失意和落魄。在互联网的一个小小角落留下点儿自己的印迹都要想那么多，可见一个“真”字有多难得！</p>
<p>昨天 <a href="http://www.iron-feet.cn/ ">ironfeet</a> 从我这借走一本书，我才想起来还欠一篇自己给自己承诺下的书评。这本书的名字叫做《<a href="http://www.douban.com/subject/4006425/">我是一只 IT 小小鸟</a>》。</p>
<p><center><a href="http://www.douban.com/subject/4006425/"><img src="http://t.douban.com/lpic/s3958139.jpg" width="150" style="border: 1pt;"/></a></center></p>
<p>我开始并不看好这本书。这本书的作者里有几个是我的师兄和朋友，他们都是很杰出的人，丝毫没有诋毁的意思，但是我认为有多少人会买几个年轻人写的书呢？因此这本书推广的九月份 China-Pub 九周年庆生会，我和它的几个作者和编辑一起参加了，但是出于对读物的挑剔，我并没有掏钱买一本。</p>
<p><img src="http://www.linjian.org/imagoxy/getimg.php?u=HBlSukTLiVHctEmbph2YvADN2M3LZJFWuZFS4BHUv10LVdlQBFUQBFUQBF0LJp1ToR2ZyBTSyN1LZFlQFlXMU1yXRp1Xv02bj5CdoB3Zn5iNox2LvoDc0RHa" alt="China Pub 九周年庆生会合照" width="600" height="450" /><br />
(图片来自 <a href="http://blog.linjian.org/articles/it-small-birds-essay/">Linjian</a> 博客)</p>
<p>后来有了点儿时间，我想想自己受过这几个朋友的很多帮助，而且 <a href="http://blog.youxu.info/2009/09/03/tinybird-behind-the-scene/">Eric</a>  和 <a href="http://blog.linjian.org/articles/it-small-birds-essay/">Linjian</a> 都提到过要将稿酬用于公益事业。那么至少出于对朋友的尊重和支持，我觉得有必要买一本来读读，于是我就到卓越上网购了一本。</p>
<p>和其它书不一样，这本书我不是一口气读完的，而是按照感兴趣的顺序翻看了每个人的故事。然后我忽然发现：这不是我想象的那种"IT 牛人炫耀帖合集"。首先，里面有些人其实算不得通常意义上的“牛人”；其次，里面有很多人抑制住了炫耀的欲望，写的是真挚的东西。其实，读任何故事，精彩的往往不是一帆风顺的。如果一个人讲他的经历是把握住了任何时代的脉搏，永远站立在时代大潮的顶端，那么他的故事会很乏味，我很开心地看到这些年轻的朋友们没有这样写。其中某些内容，我想，也许他们平时都不会和别人谈起，但是他们却怀着与人共享的良好意愿写了下来。写自己的经历，不难，但是对于年轻人来讲，能平静地讲述过去的真实故事，并不容易。</p>
<p>大学的时候，我经常读一本杂志，叫做《中国青年》。其中我挺喜欢的一个专栏，叫做“我或我身边青年的生存状态”，《<a href="http://www.douban.com/subject/4006425/">我是一只 IT 小小鸟</a>》大概也能算成“我身边 IT 青年人的生存状态”了。在内心冲突挣扎的青年时代，有一些这样的书和文章可以给自己参考和启迪，知道自己“不是一个人在战斗”，真好！</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/adventure-in-sigma.html" title="西格玛奇遇记">西格玛奇遇记</a> <span class="count">(9)</span> - <small class="excerpt">这是一个很有趣又神奇的世界，比如说忽然有一天，你发现和你聊天的将来的同事居然是你老板的直系师兄，忽然...</small></li>
<li><a href="http://blog.solrex.org/articles/lies-my-teacher-told-me.html" title="Lies My Teacher Told Me">Lies My Teacher Told Me</a> <span class="count">(11)</span> - <small class="excerpt">最早是从笑来的博客里看到这本书的信息，而目前从搜索结果来看，在中文世界里评论这本书的也只有笑来老师。...</small></li>
<li><a href="http://blog.solrex.org/articles/the-road-less-traveled-etc-5-books.html" title="新购《少有人走的路》等五本书">新购《少有人走的路》等五本书</a> <span class="count">(1)</span> - <small class="excerpt">其实本想只买《少有人走的路》一本书，但卓越网购书总价 49 元以上才给免配送费，于是就在卓越的特价店...</small></li>
<li><a href="http://blog.solrex.org/articles/book-legends-of-the-enigma.html" title="密码传奇">密码传奇</a> <span class="count">(1)</span> - <small class="excerpt">不想睡觉，就写一个小书评吧。《密码传奇》上次在国家科学图书馆借一本密码学教材的时候，碰巧看到了这本书...</small></li>
<li><a href="http://blog.solrex.org/articles/can-you-feel-the-pressure-frombooks.html" title="你能感到书本给你的压力吗">你能感到书本给你的压力吗</a> <span class="count">(4)</span> - <small class="excerpt">你能感到书本给你的压力吗？随着案头累积的书越来越多，我忽然想到这个问题，因为我发现我越来越为这个焦虑...</small></li>
<li><a href="http://blog.solrex.org/articles/tolerance-and-the-story-of-the-bible.html" title="《宽容》和《圣经的故事》">《宽容》和《圣经的故事》</a> <span class="count">(2)</span> - <small class="excerpt">这几天读了两本房龙的书，《宽容》和《圣经的故事》。以前曾经读过他《人类的故事》，虽然写得很好，但是我...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/it-birds-review.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>百度新人开放日见闻</title>
		<link>http://blog.solrex.org/articles/baidu-open-day.html</link>
		<comments>http://blog.solrex.org/articles/baidu-open-day.html#comments</comments>
		<pubDate>Tue, 24 Nov 2009 11:33:18 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Memory]]></category>

		<category><![CDATA[Baidu]]></category>

		<category><![CDATA[Health]]></category>

		<category><![CDATA[Job]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638655</guid>
		<description><![CDATA[前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的。后来想想见见未来的同事也是有好处的，于是今天就横穿北京城到上地的百度大厦转了一圈。
先说说新落成的百度大厦。虽然有些人嫌它内部结构过于复杂，但我还是很喜欢的，以前南大浦口校区的教学楼比它弯弯绕多了。大厦外面有篮球场，一楼有乒乓球场，地下一层有很大的健身房和瑜伽室，食堂也在负一楼。
每层都有很多休息区，这一点我非常欣赏。休息区有免费的水果、纯净水和咖啡，零食贩卖机也比外面便宜一些。整个大厦几乎都是玻璃幕墙，阳光的通透性很好，负一楼、五楼顶和七楼顶都有花园，散散步挺不错的。
最好玩的是三楼还有专门的睡眠室和母婴室，七楼还有两个禅院。整个建筑唯一不方便的地方就是门禁太多，几乎每个门都有门禁，连进个电梯间都要刷卡。
虽然参加活动的总人数挺多，但是分到部门也就那么几个人。eCom 总共来了九位同学，其中有一个是和我一起面过斯伦贝谢 BGC 的北航女生，还有一个是我相熟的一位 IBM 前辈带过的人大男生。有点儿关系的居然占到 1/4，这世界真小！了解了一些部门的具体结构和工作内容，我想以后我应该是在 eCom 做后台相关的开发工作了。
没有管饭，每人发了本“brainwash”的书——《百度世界》。坐地铁回来的，在复兴门坐一号线，历史上第一次被工作人员硬推入车厢中。被风吹了一路，前两天刚刚好转的鼻子又有点儿不舒服了，头晕。这学期来一直很忙，都顾不上锻炼，导致抵抗力严重下降。打个流感疫苗把我的鼻炎症状加重很多，赶紧好起来吧。
您可能对这些感兴趣：

为求职事谢诸君 (21) - 我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可...
又是一年元宵时 (13) - 今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...
写在一个电闪雷鸣的雪夜 (6) - 从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏...
长假之购物 (6) - 一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...
博客被搬家 (13) - 两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...
工行网银：用9个月的时间修正一个错误 (8) - 这可不是篇什么歌功颂德的文章，这是我个人的亲身经历。话说2008年12月中旬，我不慎丢失一张工行信用...

]]></description>
			<content:encoded><![CDATA[<p>前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的。后来想想见见未来的同事也是有好处的，于是今天就横穿北京城到上地的百度大厦转了一圈。</p>
<p>先说说新落成的百度大厦。虽然有些人嫌它内部结构过于复杂，但我还是很喜欢的，以前南大浦口校区的教学楼比它弯弯绕多了。大厦外面有篮球场，一楼有乒乓球场，地下一层有很大的健身房和瑜伽室，食堂也在负一楼。</p>
<p>每层都有很多休息区，这一点我非常欣赏。休息区有免费的水果、纯净水和咖啡，零食贩卖机也比外面便宜一些。整个大厦几乎都是玻璃幕墙，阳光的通透性很好，负一楼、五楼顶和七楼顶都有花园，散散步挺不错的。</p>
<p>最好玩的是三楼还有专门的睡眠室和母婴室，七楼还有两个禅院。整个建筑唯一不方便的地方就是门禁太多，几乎每个门都有门禁，连进个电梯间都要刷卡。</p>
<p>虽然参加活动的总人数挺多，但是分到部门也就那么几个人。eCom 总共来了九位同学，其中有一个是和我一起面过斯伦贝谢 BGC 的北航女生，还有一个是我相熟的一位 IBM 前辈带过的人大男生。有点儿关系的居然占到 1/4，这世界真小！了解了一些部门的具体结构和工作内容，我想以后我应该是在 eCom 做后台相关的开发工作了。</p>
<p>没有管饭，每人发了本“brainwash”的书——《百度世界》。坐地铁回来的，在复兴门坐一号线，历史上第一次被工作人员硬推入车厢中。被风吹了一路，前两天刚刚好转的鼻子又有点儿不舒服了，头晕。这学期来一直很忙，都顾不上锻炼，导致抵抗力严重下降。打个流感疫苗把我的鼻炎症状加重很多，赶紧好起来吧。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/thanks-for-helpings-on-job-hunting.html" title="为求职事谢诸君">为求职事谢诸君</a> <span class="count">(21)</span> - <small class="excerpt">我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(13)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
<li><a href="http://blog.solrex.org/articles/on-a-thunder-snow-night.html" title="写在一个电闪雷鸣的雪夜">写在一个电闪雷鸣的雪夜</a> <span class="count">(6)</span> - <small class="excerpt">从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏...</small></li>
<li><a href="http://blog.solrex.org/articles/shopping-in-golden-week.html" title="长假之购物">长假之购物</a> <span class="count">(6)</span> - <small class="excerpt">一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...</small></li>
<li><a href="http://blog.solrex.org/articles/forced-to-move-my-blog.html" title="博客被搬家">博客被搬家</a> <span class="count">(13)</span> - <small class="excerpt">两年多来我的主页都寄生在徐宥师兄的 HostMonster 空间上，今年5月份博客也搬了过去，因此对...</small></li>
<li><a href="http://blog.solrex.org/articles/icbc-internet-banking-using-9-month-to-fix-an-error.html" title="工行网银：用9个月的时间修正一个错误">工行网银：用9个月的时间修正一个错误</a> <span class="count">(8)</span> - <small class="excerpt">这可不是篇什么歌功颂德的文章，这是我个人的亲身经历。话说2008年12月中旬，我不慎丢失一张工行信用...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/baidu-open-day.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>写在一个电闪雷鸣的雪夜</title>
		<link>http://blog.solrex.org/articles/on-a-thunder-snow-night.html</link>
		<comments>http://blog.solrex.org/articles/on-a-thunder-snow-night.html#comments</comments>
		<pubDate>Mon, 09 Nov 2009 16:43:46 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Beijing]]></category>

		<category><![CDATA[Snow]]></category>

		<category><![CDATA[Thinking]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638652</guid>
		<description><![CDATA[从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏着别致或者异样的风景。此时心中的抑郁也许和这雪夜一样，除了眼前照亮的这点儿空间，似乎无它路可寻。
罕见地在雪夜看到红色的闪电，听到轰隆的雷声，这在汉乐府中描述的奇景不知道算不算是帝都的特色？在这样的夜里，会有几个人像我一样望着窗外的雪景，想着心中的愁绪呢？
唉，问题在，感叹也于事无补，还是洗洗睡吧。
您可能对这些感兴趣：

兄弟写的不是博客，是失败感 (14) - 我需要认识并承认的一点是，自从正式进入实验室开始研究工作以来我的时间管理就是一团糟，糟糕地我都不忍回...
窗外皓月当空 (5) - 睁开眼睛，发现屋内亮亮堂堂，不像是夜晚，抬头一看，原来今天是满月。在被窝里想学别人掐指一算，根据月相...
雪和太阳 (1) - 前天北京下了 2007 年冬天的第一场雪，不过意思意思就过去了，隔日又是阳光明媚。坐在教室中向外看去...
明天和永远 (0) - 要像明天会死去那样活着，要像会永远活着那样学习。今天天气不好，阴沉沉的，据说有雪。昨天晚上做了一个很...
The Real World (0) - Welcome back to the real world, it sucks but you c...
熙熙攘攘，利来利往 (0) - 今天晚上考副修第一门，国际结算与融资。不难，有好多老师给的样卷上的题目。又想起来去年VFP的考试，所...

]]></description>
			<content:encoded><![CDATA[<p>从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏着别致或者异样的风景。此时心中的抑郁也许和这雪夜一样，除了眼前照亮的这点儿空间，似乎无它路可寻。</p>
<p>罕见地在雪夜看到红色的闪电，听到轰隆的雷声，这在<a href="http://www.google.com/search?ie=UTF-8&#038;q=冬雷阵阵夏雨雪">汉乐府</a>中描述的奇景不知道算不算是帝都的特色？在这样的夜里，会有几个人像我一样望着窗外的雪景，想着心中的愁绪呢？</p>
<p>唉，问题在，感叹也于事无补，还是洗洗睡吧。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/i-feel-like-a-loser.html" title="兄弟写的不是博客，是失败感">兄弟写的不是博客，是失败感</a> <span class="count">(14)</span> - <small class="excerpt">我需要认识并承认的一点是，自从正式进入实验室开始研究工作以来我的时间管理就是一团糟，糟糕地我都不忍回...</small></li>
<li><a href="http://blog.solrex.org/articles/moon-in-my-window.html" title="窗外皓月当空">窗外皓月当空</a> <span class="count">(5)</span> - <small class="excerpt">睁开眼睛，发现屋内亮亮堂堂，不像是夜晚，抬头一看，原来今天是满月。在被窝里想学别人掐指一算，根据月相...</small></li>
<li><a href="http://blog.solrex.org/articles/snow-and-sun.html" title="雪和太阳">雪和太阳</a> <span class="count">(1)</span> - <small class="excerpt">前天北京下了 2007 年冬天的第一场雪，不过意思意思就过去了，隔日又是阳光明媚。坐在教室中向外看去...</small></li>
<li><a href="http://blog.solrex.org/articles/tomorrow-forever.html" title="明天和永远">明天和永远</a> <span class="count">(0)</span> - <small class="excerpt">要像明天会死去那样活着，要像会永远活着那样学习。今天天气不好，阴沉沉的，据说有雪。昨天晚上做了一个很...</small></li>
<li><a href="http://blog.solrex.org/articles/the-real-world.html" title="The Real World">The Real World</a> <span class="count">(0)</span> - <small class="excerpt">Welcome back to the real world, it sucks but you c...</small></li>
<li><a href="http://blog.solrex.org/articles/xi-xi-rang-rang-li-lai-li-wang.html" title="熙熙攘攘，利来利往">熙熙攘攘，利来利往</a> <span class="count">(0)</span> - <small class="excerpt">今天晚上考副修第一门，国际结算与融资。不难，有好多老师给的样卷上的题目。又想起来去年VFP的考试，所...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/on-a-thunder-snow-night.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>为求职事谢诸君</title>
		<link>http://blog.solrex.org/articles/thanks-for-helpings-on-job-hunting.html</link>
		<comments>http://blog.solrex.org/articles/thanks-for-helpings-on-job-hunting.html#comments</comments>
		<pubDate>Sat, 07 Nov 2009 02:25:38 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<category><![CDATA[Friends]]></category>

		<category><![CDATA[Hunting]]></category>

		<category><![CDATA[Job]]></category>

		<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638651</guid>
		<description><![CDATA[我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可以说一下的——非常感谢百度公司，给了我期盼已久的 offer。从九月中旬开始，到十一月初结束，中间也经历了不少公司的笔试面试，有甜有苦，个中滋味，相信品过的诸位都知道。
我不会公开写什么面经，也不会炫耀自己拿了多少 offer，相反，我拿到的并不多，因为结束地太早。我的要求并不高，百度给了我很满意的 offer，而且在接触的过程中，我以及我的朋友们都感到百度的 HR 以及面试官对人非常 nice。因此在接受百度 offer 后，我就推掉了其它所有公司的笔试和面试邀请——我并不是那种在求职过程中享受到很多乐趣的人，世界上还有很多有意义的事情可以做。
在整个求职的过程中，我得到了很多朋友的无私帮助，让我非常感激。这里面有的推荐我参加面试，有的直接给我面试机会，有的给我讲解面试技巧，有的和我讨论笔试面试中遇到的难题，有的帮我打探内部消息，不一而足。能得到这么多好人的帮助，我觉得自己非常幸运。希望能借我的博客这互联网的小小一隅，表达对诸君的谢意（以拼音序）：
百度的杨帆师弟、张弦小姐（《IT 小小鸟》作者）和赵柏敏师兄（曾经的面试官，现在的朋友）；
和我一起奋斗的北大小伙蔡白银和曹磊；
博文视点的周筠老师；
HP 的 Shin-Ming Liu；
IBM 的甘志博士和李获鼎师兄；
以前的老板 Intel 的 Sun Chan；
MSRA 的刘未鹏师兄(《IT 小小鸟》作者)；
纳拓软件的 Yong Liu；
农行的高飞师兄；
Opera 咨询的吴新雨师弟；
Synopsys 的陈怀兴先生；
泰为科技的 John Zhao；
淘宝网的马震先生和章文嵩博士；
腾讯的王信文师弟；
新浪网的刘立先生和张慧聪先生；
和我一起奋斗的中科院同学王捷。
您可能对这些感兴趣：

又是一年元宵时 (13) - 今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...
百度新人开放日见闻 (16) - 前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的...
长假之购物 (6) - 一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...
天黑黑 (2) - 好久没有听歌了。今晚上自习的时候就带上了随身听，放燕姿的第一盘专辑。这盘带子里尤其喜欢“天黑黑”这首...
毛毛生日 (0) - 认真地自习了一天，看数值和偏微，累得很。然后回来早了点，今天毛毛生日，太久不见面了，得打个电话。都忙...
孤独 (0) - 假期里总感到莫名的孤独。也许是很少一个人安静地做事，不习惯。想到自己的周围，看着朋友们渐行渐远，一阵...

]]></description>
			<content:encoded><![CDATA[<p>我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可以说一下的——非常感谢百度公司，给了我期盼已久的 offer。从九月中旬开始，到十一月初结束，中间也经历了不少公司的笔试面试，有甜有苦，个中滋味，相信品过的诸位都知道。</p>
<p>我不会公开写什么面经，也不会炫耀自己拿了多少 offer，相反，我拿到的并不多，因为结束地太早。我的要求并不高，百度给了我很满意的 offer，而且在接触的过程中，我以及我的朋友们都感到百度的 HR 以及面试官对人非常 nice。因此在接受百度 offer 后，我就推掉了其它所有公司的笔试和面试邀请——我并不是那种在求职过程中享受到很多乐趣的人，世界上还有很多有意义的事情可以做。</p>
<p>在整个求职的过程中，我得到了很多朋友的无私帮助，让我非常感激。这里面有的推荐我参加面试，有的直接给我面试机会，有的给我讲解面试技巧，有的和我讨论笔试面试中遇到的难题，有的帮我打探内部消息，不一而足。能得到这么多好人的帮助，我觉得自己非常幸运。希望能借我的博客这互联网的小小一隅，表达对诸君的谢意（以拼音序）：</p>
<p>百度的杨帆师弟、<a href="http://stonefish9.blogbus.com/">张弦小姐</a>（《<a href="http://www.douban.com/subject/4006425/">IT 小小鸟</a>》作者）和赵柏敏师兄（曾经的面试官，现在的朋友）；<br />
和我一起奋斗的北大小伙蔡白银和曹磊；<br />
博文视点的<a href="http://yeka.blogbus.com/">周筠老师</a>；<br />
HP 的 Shin-Ming Liu；<br />
IBM 的<a href="http://ganzhi.blogspot.com">甘志博士</a>和<a href="http://dean1873.spaces.live.com">李获鼎师兄</a>；<br />
以前的老板 Intel 的 Sun Chan；<br />
MSRA 的<a href="http://mindhacks.cn/">刘未鹏师兄</a>(《<a href="http://www.douban.com/subject/4006425/">IT 小小鸟</a>》作者)；<br />
纳拓软件的 Yong Liu；<br />
农行的高飞师兄；<br />
Opera 咨询的<a href="http://sinrain.cn/">吴新雨师弟</a>；<br />
Synopsys 的<a href="http://silwile.net">陈怀兴先生</a>；<br />
泰为科技的 John Zhao；<br />
淘宝网的马震先生和章文嵩博士；<br />
腾讯的<a href="http://verypig.com/">王信文师弟</a>；<br />
新浪网的刘立先生和张慧聪先生；<br />
和我一起奋斗的中科院同学<a href="http://www.iron-feet.cn/">王捷</a>。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(13)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
<li><a href="http://blog.solrex.org/articles/baidu-open-day.html" title="百度新人开放日见闻">百度新人开放日见闻</a> <span class="count">(16)</span> - <small class="excerpt">前天收到百度邮件说邀请约百个校园招聘录取同学到百度大厦参加开放日活动，最近非常忙，本来打算推掉不去的...</small></li>
<li><a href="http://blog.solrex.org/articles/shopping-in-golden-week.html" title="长假之购物">长假之购物</a> <span class="count">(6)</span> - <small class="excerpt">一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博...</small></li>
<li><a href="http://blog.solrex.org/articles/%e5%a4%a9%e9%bb%91%e9%bb%91.html" title="天黑黑">天黑黑</a> <span class="count">(2)</span> - <small class="excerpt">好久没有听歌了。今晚上自习的时候就带上了随身听，放燕姿的第一盘专辑。这盘带子里尤其喜欢“天黑黑”这首...</small></li>
<li><a href="http://blog.solrex.org/articles/yujie-birthday.html" title="毛毛生日">毛毛生日</a> <span class="count">(0)</span> - <small class="excerpt">认真地自习了一天，看数值和偏微，累得很。然后回来早了点，今天毛毛生日，太久不见面了，得打个电话。都忙...</small></li>
<li><a href="http://blog.solrex.org/articles/lonely.html" title="孤独">孤独</a> <span class="count">(0)</span> - <small class="excerpt">假期里总感到莫名的孤独。也许是很少一个人安静地做事，不习惯。想到自己的周围，看着朋友们渐行渐远，一阵...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/thanks-for-helpings-on-job-hunting.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630</title>
		<link>http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html</link>
		<comments>http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 01:16:15 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Fix]]></category>

		<category><![CDATA[Grub]]></category>

		<category><![CDATA[Install]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638649</guid>
		<description><![CDATA[Platform: Dell Latitude D630, Nvidia NVS 135M, Intel CPU, Ubuntu 9.10
Problem:
1. Boot from livecd, select install. After a glowing ubuntu Symbol, screen shows nothing, even no CLI.
2. After installation with "text mode", boot from HD. After a glowing ubuntu Symbol, screen shows nothing, even no CLI.
Solution:
I am not very sure whether this problem is caused [...]]]></description>
			<content:encoded><![CDATA[<p>Platform: Dell Latitude D630, Nvidia NVS 135M, Intel CPU, Ubuntu 9.10</p>
<p>Problem:</p>
<p>1. Boot from livecd, select install. After a glowing ubuntu Symbol, screen shows nothing, even no CLI.</p>
<p>2. After installation with "text mode", boot from HD. After a glowing ubuntu Symbol, screen shows nothing, even no CLI.</p>
<p>Solution:</p>
<p>I am not very sure whether this problem is caused by the NV 185 driver(nvidia-glx-185). Installing or removing this package gave no help. I googled a lot, found many people encountered the same problem. However, no answer could work on my laptop. Then I tried to install NV driver manually...it works! So, here is the fix:</p>
<p>1. When you get the GRUB boot menu screen, press 'e' to edit the fist entry. Add a word 'single' after 'linux /boot/vmlinuz..... quiet splash', then press 'Ctrl+x' to boot. (I cannot enable networking in recovery mode, so I tried with the single mode.)</p>
<p>2. Select the 'netroot' entry. You will get a root command line with network support.</p>
<p>3. Download the latest NV driver for linux (2010-11-3):</p>
<blockquote><p># wget <a href="http://us.download.nvidia.com/XFree86/Linux-x86/190.42/NVIDIA-Linux-x86-190.42-pkg1.run">http://us.download.nvidia.com/XFree86/Linux-x86/190.42/NVIDIA-Linux-x86-190.42-pkg1.run</a></p></blockquote>
<p>[You can visit <a href="http://www.nvidia.com/object/unix.html">http://www.nvidia.com/object/unix.html</a> for the latest NV driver.]</p>
<p>4. Install development tools to build NV driver on you os.</p>
<blockquote><p># apt-get update<br />
# apt-get install build-essential</p></blockquote>
<p>5. Install the NV driver:</p>
<blockquote><p># chmod u+x NVIDIA-Linux-x86-190.42-pkg1.run<br />
# ./NVIDIA-Linux-x86-190.42-pkg1.run</p></blockquote>
<p>6. Reboot.</p>
<p>If you are using a livecd, please use the "text mode" to install Ubuntu 9.10. After installation, try the solution above.</p>
<p><strong>Ubuntu 9.10 启动后黑屏的解决方法</strong></p>
<p>平台： Dell Latitude D630, Nvidia NVS 135M, Intel CPU, Ubuntu 9.10</p>
<p>问题描述：</p>
<p>1. 从 livecd 启动后，选择安装，在白色 Ubuntu 图标闪烁结束之后，无任何屏显，连命令行都没有。</p>
<p>2. 用文本模式安装完成后，从硬盘启动，在白色 Ubuntu 图标闪烁结束之后，无任何屏显，连命令行都没有。</p>
<p>解决方法：</p>
<p>我不太清楚是不是 NV 的 185 驱动有问题(nvidia-glx-185)，安装或者删除它对状况没有任何帮助。我搜索了一下，发现很多人遇到和我类似的问题，不过没有任何解决方法可以在我的电脑上工作。无奈下我尝试手动安装了一下 NV 的最新驱动——居然解决了！下面是我的解决方法：</p>
<p>1. 当你进入 grub 启动菜单选择屏幕时，在第一条上按 e 进入编辑状态，在 'linux /boot/vmlinuz..... quiet splash' 这一行最后添加一个单词 single，然后按 Ctrl+x 启动。其实 recovery mode 能做类似的事，但是 9.10 的 recovery mode 好像不能启动网络，所以只好自己进入 single 模式了。</p>
<p>2. 启动后选择 'netroot' 选项，进入带网络的 root 命令行。</p>
<p>3. 下载最新的 NV 驱动(2010-11-3)：</p>
<blockquote><p># wget <a href="http://us.download.nvidia.com/XFree86/Linux-x86/190.42/NVIDIA-Linux-x86-190.42-pkg1.run">http://us.download.nvidia.com/XFree86/Linux-x86/190.42/NVIDIA-Linux-x86-190.42-pkg1.run</a></p></blockquote>
<p>[你可以先访问 <a href="http://www.nvidia.com/object/unix.html">http://www.nvidia.com/object/unix.html</a> 查看 NV 最新驱动的地址。]</p>
<p>4. 安装编译 NV 驱动需要的编译工具：</p>
<blockquote><p># apt-get update<br />
# apt-get install build-essential</p></blockquote>
<p>5. 安装 NV 驱动：</p>
<blockquote><p># chmod u+x NVIDIA-Linux-x86-190.42-pkg1.run<br />
# ./NVIDIA-Linux-x86-190.42-pkg1.run</p></blockquote>
<p>6. 重启</p>
<p>如果您使用 livecd 安装 Ubuntu 9.10 的话，您应该选择 "text mode" 进行安装。成功安装完成后，仍然遇到黑屏问题，请尝试上述方法。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/jaunty-alpha-test.html" title="Ubuntu 9.04 安装手记">Ubuntu 9.04 安装手记</a> <span class="count">(8)</span> - <small class="excerpt">此次安装是在一台 Dell OptiPlex 740 台式机上进行，处理器 AMD Athlon 6...</small></li>
<li><a href="http://blog.solrex.org/articles/install-eioffice-2007-on-ubuntu-linux-804.html" title="在 Ubuntu Linux 8.04 上安装永中 Office 2007">在 Ubuntu Linux 8.04 上安装永中 Office 2007</a> <span class="count">(6)</span> - <small class="excerpt">这篇文章介绍了在 Ubuntu  Linux 8.04上安装永中 Office 2007 遇到的问题...</small></li>
<li><a href="http://blog.solrex.org/articles/ubuntu-8-04-on-my-dell-d630.html" title="在 Dell Latitude D630 上硬盘安装 Ubuntu Linux 8.04">在 Dell Latitude D630 上硬盘安装 Ubuntu Linux 8.04</a> <span class="count">(18)</span> - <small class="excerpt">最后更新时间：2008年4月18日摘要这份文档主要描述了我在自己的 Dell Latitude D6...</small></li>
<li><a href="http://blog.solrex.org/articles/some-problems-with-ubuntu-710.html" title="Ubuntu 7.10 的一些小问题">Ubuntu 7.10 的一些小问题</a> <span class="count">(1)</span> - <small class="excerpt">这两天用 Ubuntu 7.10 和 Compiz-Fusion 遇到了几个小问题：1. Firef...</small></li>
<li><a href="http://blog.solrex.org/articles/ubuntu-7-10-on-my-dell-latitude-d630.html" title="在 Dell Latitude D630 上安装 Ubuntu LInux 7.10">在 Dell Latitude D630 上安装 Ubuntu LInux 7.10</a> <span class="count">(1)</span> - <small class="excerpt">摘要这份文档主要描述了我在自己的 Dell Latitude D630 上安装 7.10 的过程，U...</small></li>
<li><a href="http://blog.solrex.org/articles/using-windows-fonts-in-linux.html" title="在双系统环境中使用Windows字体美化Linux中文字体">在双系统环境中使用Windows字体美化Linux中文字体</a> <span class="count">(4)</span> - <small class="excerpt">安装完 Linux 操作系统的中文支持后，看到那些难看的字体是不是很不爽，下面这个脚本就帮助你使用 ...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/fix-black-screen-problem-of-ubuntu-9-10.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Math in CS：置换的轮换分解</title>
		<link>http://blog.solrex.org/articles/math-in-cs-permutation-and-cycle-decomposition.html</link>
		<comments>http://blog.solrex.org/articles/math-in-cs-permutation-and-cycle-decomposition.html#comments</comments>
		<pubDate>Sun, 18 Oct 2009 13:00:41 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Algorithm]]></category>

		<category><![CDATA[Mathematics]]></category>

		<category><![CDATA[Abstract Algebra]]></category>

		<category><![CDATA[Algebra]]></category>

		<category><![CDATA[C Language]]></category>

		<category><![CDATA[Number Theory]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638647</guid>
		<description><![CDATA[随便一本《近世代数》或者《抽象代数》书上在讲到置换群的时候，应该都会讲到这样一个定理：
任何一个置换都可以表示为不相交轮换的乘积，若不计因子的顺序，其分解式是唯一的。
一、简单解释
没有数学背景的人，这句话很难读懂，下面我们来看一个简单的例子。假设我们有这样一个置换 P：

1, 2, 3, 4, 5
2, 5, 4, 3, 1
那么这个置换是什么样的轮换的乘积呢？我们先从 1 出发，1 被换到 2，2 被换到 5，5 又被换到 1，这就是一个轮换；然后再从 3 出发，3 被换到 4，4 又被换到 3，这又是一个轮换。也就是说 P 是两个不相交轮换 (1, 2, 5) 和 (3,4) 的乘积。
二、一个应用：全排列判断问题
下面我们来看这个定理有什么作用，考虑下面这道题目[1][2]：
给一个 n 长的数组，判断它是否为一个 1, 2, ..., n 的全排列，要求在线性时间，常数空间内实现。
我们可以容易看到，每个全排列都可以视为 1, 2, ..., n 上的一个置换。问题就转化为检测该数组是不是一个 1, 2, ..., n 的置换。由本文开头提到的定理可知，我们只需要检查该置换是不是由不相交的轮换构成的即可。
还是上面那个例子，怎么检查
1, 2, 3, 4, 5
2, 5, 4, [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>随便一本《近世代数》或者《抽象代数》书上在讲到置换群的时候，应该都会讲到这样一个定理：<br />
<strong>任何一个置换都可以表示为不相交轮换的乘积，若不计因子的顺序，其分解式是唯一的。</strong></p></blockquote>
<p><strong>一、简单解释</strong></p>
<p>没有数学背景的人，这句话很难读懂，下面我们来看一个简单的例子。假设我们有这样一个置换 P：</p>
<pre>
1, 2, 3, 4, 5
2, 5, 4, 3, 1</pre>
<p>那么这个置换是什么样的轮换的乘积呢？我们先从 1 出发，1 被换到 2，2 被换到 5，5 又被换到 1，这就是一个轮换；然后再从 3 出发，3 被换到 4，4 又被换到 3，这又是一个轮换。也就是说 P 是两个不相交轮换 (1, 2, 5) 和 (3,4) 的乘积。</p>
<p><strong>二、一个应用：全排列判断问题</strong></p>
<p>下面我们来看这个定理有什么作用，考虑下面这道题目[1][2]：</p>
<blockquote><p>给一个 n 长的数组，判断它是否为一个 1, 2, ..., n 的全排列，要求在线性时间，常数空间内实现。</p></blockquote>
<p>我们可以容易看到，每个全排列都可以视为 1, 2, ..., n 上的一个置换。问题就转化为检测该数组是不是一个 1, 2, ..., n 的置换。由本文开头提到的定理可知，我们只需要检查该置换是不是由不相交的轮换构成的即可。</p>
<p>还是上面那个例子，怎么检查</p>
<blockquote><p>1, 2, 3, 4, 5<br />
2, 5, 4, 3, 1</p></blockquote>
<p>是不是一个置换呢？首先从 1 开始，a[1]=2，那么再检查 a[a[1]]=a[2]=5，然后再检查a[a[a[1]]]=a[5]=1，这样就发现了一个轮换 (1, 2, 5)。然后接下来检测第二个，第三个轮换...</p>
<p>如何保证检查的高效以及所有轮换都不相交呢？我们每次检查完一个数，就将它置负，这样遇到负值，循环就终止了。如果终止前检查的那个数与起始的数相同，那么我们就发现了一个轮换，否则它就不是一个轮换，说明 P 不是一个置换。由于检查过的轮换中的数字都被置为负值，所以第二个轮换肯定不会与第一个轮换相交。如果到最后所有的数都被置为负值，且循环正常终止，那么说明它们都在不相交的轮换里，那么 P 就是一个置换。</p>
<p>如果想要查找过程不影响最终数组的值，到最后把所有置负的元素都重新置正即可。</p>
<p>代码实现如下[2]：</p>
<blockquote><p><span style="color: rgb(0, 128, 0);">/* We use a n+1 elements array a[n+1] for convenience. a[0] is used to store</span><br />
<span style="color: rgb(0, 128, 0);">&nbsp;* the return value, thus is not part of the permutation.&nbsp; */</span><br />
<span style="color: rgb(43, 145, 175);">int</span> test_perm(<span style="color: rgb(43, 145, 175);">int</span> *a, <span style="color: rgb(43, 145, 175);">int</span> n)<br />
{<br />
&nbsp; <span style="color: rgb(43, 145, 175);">int</span> i, j;<br />
&nbsp; <span style="color: rgb(0, 0, 255);">if</span> (a == NULL)&nbsp; <span style="color: rgb(0, 0, 255);">return</span> 0;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* Test input */</span><br />
&nbsp; a[0] = 1;<br />
&nbsp; <span style="color: rgb(0, 0, 255);">for</span> (i = 1; i &lt;= n; ++i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* Test input */</span><br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">if</span> (a[i] &lt; 1 || a[i] &gt; n) { <span style="color: rgb(0, 128, 0);">/* Is a[i] in the range 1~n? */</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[0] = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">return</span> a[0];<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp; <span style="color: rgb(0, 0, 255);">for</span> (i = 1; i &lt;= n; ++i)<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">if</span> (a[i] &gt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">while</span> (a[j] &gt; 0) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* Follow the cycle */</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[j] = -a[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = -a[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255);">if</span> (j != i)&nbsp; a[0] = 0;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0);">/* Test the cycle */</span><br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp; <span style="color: rgb(0, 0, 255);">for</span> (i = 1; i &lt;= n; ++i)<br />
&nbsp;&nbsp;&nbsp; a[i] = a[i] &gt; 0 ? a[i] : -a[i];</p>
<p>&nbsp; <span style="color: rgb(0, 0, 255);">return</span> a[0];<br />
}</p></blockquote>
<p><strong>三、另一个应用：100 囚徒碰运气问题</strong></p>
<p>那么这个定理还有其它的用处没有呢？考虑下面这道题目[3][4]：</p>
<blockquote><p>100 个囚犯，每人有一个从 1 到 100 的不重复不遗漏的号码，国王把这些号码收集起来，打乱放进 100 个箱子里，每个箱子里有且仅有一个号码。囚犯们一个一个地来到 100 个箱子面前，每人可以打开至多 50 个箱子来寻找自己的号码，可以一个一个打开（即可以根据之前箱子里看到的号码来决定后面要打开的箱子）。如果有一个囚犯没有找到自己的号码，那么这 100 个人一起被处死；只有当所有的囚犯都找到了自己的号码，他们才会被国王全部释放。</p>
<p>囚犯们可以在没开箱子前商量对策，但是一但打开了箱子，他就不能告诉别人箱子和号码的对应关系。问他们应该用什么样的策略以保证最大的存活概率？</p></blockquote>
<p>显然，每个人随机选 50 个箱子打开，100 个人的存活概率会是 1/2 的 100 次方，即1/1267650600228229401496703205376，可以小到忽略不计。但是事实上有一种极简单的办法，其存活概率高达 30% 。至于有没有更好的办法？我不知道。</p>
<p>存活率达 30% 的策略就是：</p>
<blockquote><p>囚犯打开自己号码对应的箱子，就按照箱子中的号码打开另一个箱子，一直到找到自己号码或者选50 次为止，这样就能保证整体有 30% 的存活概率。</p></blockquote>
<p>这个策略背后的数学原理是什么呢？其实国王所作的事情，就是一个 1 到 100 元素集合的置换，囚犯所做的事情，就是顺着自己号码所在的轮换找自己号码。那么什么时候所有人都不用死呢？就是这个置换中所有的轮换长度都不大于 50，因为每个囚犯号码的轮换都不大于 50，那么他总能在 50 次以内找到自己的号码。</p>
<p>怎么计算这个概率 P 呢？{这个置换中所有的轮换长度都不大于 50 的概率}，就是 1 - {存在轮换长度大于 50 的概率}，进而 1 - {存在轮换长度为 51, 52, ..., 100 的概率}，由此，我们可以得到下面的等式：</p>
<p><img src="http://www.codecogs.com/eq.latex?P=1-\frac{1}{100!}\sum_{k=51}^{100}\binom{100}{k}%28k-1%29!%28100-k%29!=1-\sum_{k=51}^{100}%20\frac{1}{k}=1-%28H_{100}-H_{50}%29" alt="P=1-\frac{1}{100!}\sum_{k=51}^{100}\binom{100}{k}(k-1)!(100-k)!=1-\sum_{k=51}^{100}%20\frac{1}{k}=1-(H_{100}-H_{50})" /></p>
<p>其中，Hn 代表调和数（<a href="http://en.wikipedia.org/wiki/Harmonic_number">Harmonic Number</a>）。虽然调和数没有精确的公式，但是我们知道调和数和自然对数有着密切的联系[5]，那么我们就可以用自然对数来近似：</p>
<p><img src="http://www.codecogs.com/eq.latex?P\approx1-%28ln%28100%29-ln%2850%29%29=1-ln%282%29\approx0.30685281944005469059" alt="P\approx1-(ln(100)-ln(50))=1-ln(2)\approx0.30685281944005469059" />[6]</p>
<p>因此，我们可以得到，使用这种策略 100个囚犯的存活概率 P 约为 30%。</p>
<p>[1] <a href="http://yueweitang.org/bbs/topic/22">http://yueweitang.org/bbs/topic/22</a><br />
[2] <a href="http://fayaa.com/tiku/view/84/">http://fayaa.com/tiku/view/84/</a><br />
[3] <a href="http://tydsh.spaces.live.com/Blog/cns!435F1A315756AD5D!833.entry">http://tydsh.spaces.live.com/Blog/cns!435F1A315756AD5D!833.entry</a><br />
[4] <a href="http://fayaa.com/tiku/view/141/">http://fayaa.com/tiku/view/141/</a><br />
[5] <a href="http://en.wikipedia.org/wiki/Harmonic_number#Calculation">http://en.wikipedia.org/wiki/Harmonic_number#Calculation</a><br />
[6] 求和得到的更精确的结果是：0.31182782068980479698，Bash 代码：</p>
<blockquote><p>STR=<span style="color: rgb(163, 21, 21);">"1-("</span><br />
<span style="color: rgb(0, 0, 255);">for </span>i in <span style="color: rgb(163, 21, 21);">`</span>seq 51 99<span style="color: rgb(163, 21, 21);">`</span>; <span style="color: rgb(0, 0, 255);">do</span><br />
&nbsp; STR+=<span style="color: rgb(163, 21, 21);">"1/$i+"</span><br />
<span style="color: rgb(0, 0, 255);">done</span><br />
STR+=<span style="color: rgb(163, 21, 21);">"1/100)"</span><br />
echo $STR | bc -l</p></blockquote>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error-ext.html" title="Cygwin GCC qsort 函数错误（续）">Cygwin GCC qsort 函数错误（续）</a> <span class="count">(0)</span> - <small class="excerpt">上一篇文章中提到我在为 qsort 写 compare 函数时犯了一个愚蠢的错误：我脑袋陷入了一个错...</small></li>
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error.html" title="Cygwin GCC qsort 函数错误">Cygwin GCC qsort 函数错误</a> <span class="count">(5)</span> - <small class="excerpt">我平时在 Windows 下写代码时，经常使用 Cygwin 的 gcc。但是今天我居然发现 Cyg...</small></li>
<li><a href="http://blog.solrex.org/articles/read-text-to-array-with-c.html" title="将文本文件读入数组-C语言实现">将文本文件读入数组-C语言实现</a> <span class="count">(7)</span> - <small class="excerpt">要求：使用 C 语言将文本文件的每一行读入为数组的一个元素，返回一个 char ** 指针。由于行长...</small></li>
<li><a href="http://blog.solrex.org/articles/does-vasprintf-allocate-space-on-stack.html" title="vasprintf 会将空间分配到栈上吗？">vasprintf 会将空间分配到栈上吗？</a> <span class="count">(11)</span> - <small class="excerpt">由于提交过几次 Linux Fetion 的 bug 和 patch，Linux Fetion 的开...</small></li>
<li><a href="http://blog.solrex.org/articles/extra-comma-in-c.html" title="多余的逗号？">多余的逗号？</a> <span class="count">(11)</span> - <small class="excerpt">晚上看了两页 The Art of Unix Programming，其中提到了一个我以前一直感觉困...</small></li>
<li><a href="http://blog.solrex.org/articles/number-theory-and-public-key-cryptography.html" title="Math in CS: 数论和公钥密码学">Math in CS: 数论和公钥密码学</a> <span class="count">(2)</span> - <small class="excerpt">1940年，英国数学家哈代在他的一本小书《一个数学家的辩白》(A Mathematician's A...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/math-in-cs-permutation-and-cycle-decomposition.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>25 马问题</title>
		<link>http://blog.solrex.org/articles/25-horses-problem.html</link>
		<comments>http://blog.solrex.org/articles/25-horses-problem.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 10:25:31 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
		
		<category><![CDATA[Algorithm]]></category>

		<category><![CDATA[Problem]]></category>

		<guid isPermaLink="false">http://blog.solrex.cn/?p=638645</guid>
		<description><![CDATA[这是以前在 TopLanguage 讨论组讨论过的一道题目 ，题目描述为：
有 25 匹马和 1 个赛场，但赛场只有 5 条赛道，即一次只能给最多 5 匹马提供比赛机会，并且不能计时。请问如何设计比赛策略得到最快的 3/5 匹马，使得使用赛道的次数最少。
我想了一下，下面尝试给出我的分析，如果不对的话，还请指正。
一、决出前三名的策略
决出前 3 名网上有很多讨论，答案是 7 次，没有见过更少的，策略如下：
1. 将 25 匹马分成 5 组，分别赛一轮，得出一个先后顺序，共 5 轮。
2. 将每组的头马组成一组，再赛一轮，得出一个先后顺序。这第 6 轮能确定第一名。
3. 将最快一组的二三名，第二那组的一二名，以及第三那组的第一名五匹马放在一起，再赛一轮。这第 7 轮的前两名就是最终的二三名。总共赛 7 轮。
下面是分析。不失一般性，在赛 6 次之后，我们假设这 25 匹马的序号为：
A1 A2 A3 A4 A5&#160; // 1 &#60;-------
B1 B2 B3 B4 B5&#160; // 2&#160; &#124;&#160;&#160;&#160;&#160; &#124;
C1 C2 C3 C4 [...]]]></description>
			<content:encoded><![CDATA[<p>这是以前在 TopLanguage 讨论组<a href="http://groups.google.com/group/pongba/browse_thread/thread/700ebb5d00e72299/84cf7bea74ff51c4?lnk=raot">讨论过的一道题目</a> ，题目描述为：</p>
<blockquote><p>有 25 匹马和 1 个赛场，但赛场只有 5 条赛道，即一次只能给最多 5 匹马提供比赛机会，并且不能计时。请问如何设计比赛策略得到最快的 3/5 匹马，使得使用赛道的次数最少。</p></blockquote>
<p>我想了一下，下面尝试给出我的分析，如果不对的话，还请指正。</p>
<p><strong>一、决出前三名的策略</strong></p>
<p>决出前 3 名网上有很多讨论，答案是 7 次，没有见过更少的，策略如下：</p>
<p>1. 将 25 匹马分成 5 组，分别赛一轮，得出一个先后顺序，共 5 轮。<br />
2. 将每组的头马组成一组，再赛一轮，得出一个先后顺序。这第 6 轮能确定第一名。<br />
3. 将最快一组的二三名，第二那组的一二名，以及第三那组的第一名五匹马放在一起，再赛一轮。这第 7 轮的前两名就是最终的二三名。总共赛 7 轮。</p>
<p>下面是分析。不失一般性，在赛 6 次之后，我们假设这 25 匹马的序号为：</p>
<blockquote><p>A1 A2 A3 A4 A5&nbsp; <span style="color: rgb(0, 128, 0);">// 1 &lt;-------</span><br />
B1 B2 B3 B4 B5&nbsp; <span style="color: rgb(0, 128, 0);">// 2&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; |</span><br />
C1 C2 C3 C4 C5&nbsp; <span style="color: rgb(0, 128, 0);">// 3 Main&nbsp;&nbsp; |</span><br />
D1 D2 D3 D4 D5&nbsp; <span style="color: rgb(0, 128, 0);">// 4&nbsp; |&nbsp; Extended</span><br />
E1 E2 E3 E4 E5&nbsp; <span style="color: rgb(0, 128, 0);">// 5 &lt;--&nbsp;&nbsp;&nbsp; |</span><br />
--------------&nbsp; <span style="color: rgb(0, 128, 0);">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</span><br />
A1 B1 C1 D1 E1&nbsp; <span style="color: rgb(0, 128, 0);">// 6&nbsp; {A1} &lt;-</span></p></blockquote>
<p>其中主矩阵列出了 25 匹马的序号，扩展矩阵的每行是每轮比赛的结果。我们可以看到主矩阵的行有序，第一列有序，那么现在我们知道第一名是 A1。</p>
<p>由于已知 A1 是第一名，第二名肯定是在每轮中紧挨在 A1 后面的，因此第二名的候选集为 {A2, B1}。</p>
<p>它们两个占不满 5 个赛道，我们再来看第三名的候选集。第三名在每轮中只可能是挨在第一或第二名的后面，也就是说在 {A1} U {A2, B1} 的后面，那么第三名的候选集就是 {A2, A3, B1, B2, C1}，正好 5 匹马（第二名的候选集肯定包含在第三名候选集中）。那么第二三名只可能在这 5 匹马中，因此我们只需要让 {A2, A3, B1, B2, C1} 这 5 匹马再比一次，得到前两名，与 {A1} 合起来就是总的前三名。这样总共的比赛次数是 7 次。</p>
<p><strong>2. 决出前五名的策略</strong></p>
<p>决出前 5 名，就比较复杂了，我们按照同样策略再往下思考：</p>
<p>{A2, A3, B1, B2, C1} 决出前两名，有几种可能呢？如果它们没有比过，可能性就是从 5 个中取 2 个后的排列数，20 种可能。但是我们前面的比赛已经得到了一些快慢信息，我们就可以发现，第 7 轮 {A2, A3, B1, B2, C1} 决出前两名只有 5 种可能情况：</p>
<blockquote><p>A2 A3 B1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B2/C1 * <span style="color: rgb(0, 128, 0);">// 7&nbsp; {A1, A2, A3}</span><br />
B1 B2 A3/C1&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; * <span style="color: rgb(0, 128, 0);">// 7&nbsp; {A1, B1, B2}</span><br />
B1 C1 A2/B2&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp; * <span style="color: rgb(0, 128, 0);">// 7&nbsp; {A1, B1, C1}</span><br />
A2 B1 A3/B2/C1 *&nbsp;&nbsp;&nbsp;&nbsp; * <span style="color: rgb(0, 128, 0);">// 7&nbsp; {A1, A2, B1}</span><br />
B1 A2 A3/B2/C1 *&nbsp;&nbsp;&nbsp;&nbsp; *</p></blockquote>
<p>去掉可交换的 A2 B1，其实只有 4 种情况。我们分别来考虑这 4 种情况：</p>
<p>1. {A1, A2, A3}</p>
<p>第四名肯定是 {A1, A2, A3} 之后的马，候选集为 {A4, B1}；元素不足 5，再推一下第五名，即{A1, A2, A3} U {A4, B1} 之后的马，候选集为 {A4, B1, A5, B2, C1}，只有 5 匹马。就是说第四、五名可以从这五匹马中产生，那么我们只需要再比一轮，取前两名，与 {A1, A2, A3} 并起来就能得到整个的前 5 匹马。那么最少的比赛次数是 8 次。</p>
<p>2. {A1, B1, B2}</p>
<p>这种情况下，同理，第四名候选集为 {A2, B3, C1} ，第五名候选集为 {A2, A3, B3, B4, C1, C2, D1}，元素多于 5 个。因此我们必须先让 {A2, B3, C1} 比赛得到第 4 名，才能将第五名候选集的元素个数减少到 5 个以内。穷举：第 8 轮 A2 第一，可以消去 {C2, D1, B4, A2}；B3 第一，可以消去 {B3, A3, C2, D1}；C1 第一，可以消去 {C1, A3, B4}，均能保证第五名的取值集合减少到 5 以内，因此只需要再一轮，就可以得到第五名。总的比赛次数是 9 次。</p>
<p>3. {A1, B1, C1}</p>
<p>同理，第四名候选集为 {A2, B2, C2, D1}，第五名候选集为{A2, A3, B2, B3, C2, C3, D1, E1}。第四名无论取哪个，都会消去四个第五名候选集中的元素，总的比赛次数仍然是 9 次。</p>
<p>4. {A1, A2, B1}</p>
<p>同理，第四名候选集为{A3, B2, C1}，第五名候选集为{A3, A4, B2, B3, C1, C2, D1}。第四名无论取哪个，至少消去第五名候选集中的 3 个元素，总的比赛次数也是 9 次。</p>
<p>穷举结束了，现在我们可以得出结论：最坏情况下该策略决出前 5 匹马的最少比赛次数是 9 次。</p>
<p><strong>三、扩展问题</strong></p>
<p>我有一个问题是：这种策略下取3, 5名比赛次数一定是最少的吗？有没有数学证明？</p>
<p>再扩展一点儿，如果需要求前 n 名，最少需要比赛几次？</p>
<p>在我们的这种策略下，因为主矩阵只有 5 行，每行还是有序的，那么求下一名的候选集最多有 5 个元素。也就是说多求一名，至多需要增加一轮比赛。什么情况下可以少于一轮呢？当已经确定第 n 名的情况时，第 n+2 名的候选集元素少于 5 个，我们就可以一轮比赛确定两个名次了。</p>
<p>我还比较好奇的是，如果需要决出所有 25 匹马的快慢顺序，最坏情况下至少需要比赛几次？</p>
<p>在我们这种策略下，假设 f(n) 是第 n 名最坏情况下的最少比赛次数，我们已知 f(1) = 6, f(2) = f (3) = 7, f(4) = 8, f(5) = 9，f(n) <= (n-5)+9 = n+4。那么 f(25) = f(20)+1 <= (20-5)+9 + 1 = 25 次，其上界应该是 25。但其准确值怎么确定？穷举就太困难了。</p>
<p>但是如果题目要求是确定 25 个的全部顺序，我们这种策略未必是最好的。这时候这题可以看成 n 路归并排序，并且可同时比较 n 个数的优化问题。过程中有很多可优化的可能。比如我们预处理时可以对每行和每列都排一下序，能否可以得到一些额外的信息？当主矩阵（去掉已确定顺序的元素）显得不那么平衡时，用扩展矩阵中的比较信息是否可以将主矩阵平衡一下，或者消去某些行列，这样做是否有帮助？</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/math-in-cs-permutation-and-cycle-decomposition.html" title="Math in CS：置换的轮换分解">Math in CS：置换的轮换分解</a> <span class="count">(7)</span> - <small class="excerpt">随便一本《近世代数》或者《抽象代数》书上在讲到置换群的时候，应该都会讲到这样一个定理：任何一个置换都...</small></li>
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error-ext.html" title="Cygwin GCC qsort 函数错误（续）">Cygwin GCC qsort 函数错误（续）</a> <span class="count">(0)</span> - <small class="excerpt">上一篇文章中提到我在为 qsort 写 compare 函数时犯了一个愚蠢的错误：我脑袋陷入了一个错...</small></li>
<li><a href="http://blog.solrex.org/articles/population-count-problem.html" title="统计二进制中 1 的个数">统计二进制中 1 的个数</a> <span class="count">(6)</span> - <small class="excerpt">这是一道《编程之美－微软技术面试心得》中的题目，问题描述如下：对于一个字节(8bit)的变量,求其二...</small></li>
<li><a href="http://blog.solrex.org/articles/smallest-subsequence-from-an-array-of-signed-numbers.html" title="从一个数列中取具有最小和的子序列">从一个数列中取具有最小和的子序列</a> <span class="count">(11)</span> - <small class="excerpt">问题描述：给定一个含有 n 个元素的数列，元素有正有负，找出和最小的一组相邻的数。即给定 a[n]，...</small></li>
<li><a href="http://blog.solrex.org/articles/3-not-gates-from-2-not-gates.html" title="用两个非门和任意的与、或门构造三个非门">用两个非门和任意的与、或门构造三个非门</a> <span class="count">(3)</span> - <small class="excerpt">计算机科学中有很多有趣的 puzzle，他们可能出现在那些自命清高的企业的笔试题中，也可能来源于在网...</small></li>
<li><a href="http://blog.solrex.org/articles/i-know-little-of-algorithms.html" title="薄弱的算法基础">薄弱的算法基础</a> <span class="count">(4)</span> - <small class="excerpt">这几日复习累时，翻出来 MIT 的《算法导论》课程录像来看，发现一个非常沮丧的事实：我对算法知道的真...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/25-horses-problem.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 3.175 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-07 19:08:13 -->
