<?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:slash="http://purl.org/rss/1.0/modules/slash/" 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>
	<lastBuildDate>Fri, 27 Aug 2010 13:57:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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>我要一所大房子，有很大的落地窗户</title>
		<link>http://blog.solrex.org/articles/i-wanna-a-big-house.html</link>
		<comments>http://blog.solrex.org/articles/i-wanna-a-big-house.html#comments</comments>
		<pubDate>Fri, 27 Aug 2010 13:56:23 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[House]]></category>
		<category><![CDATA[Rent]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638910</guid>
		<description><![CDATA[我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一个已知现象却不知缘由的 bug 一样，不解决掉它我感觉整个系统都不稳定。 前面曾说过办手续的各种烦，没想到才见看稳定下来，又得到一条消息：女友可以提前调回北京总部了。而我们工作地位一个在丰台总部基地，一个在海淀西二旗，这就意味着必须得换房子了——令人愉悦的烦恼！ 先说说我现在住的房子吧：西二旗智学苑，三室一厅次卧，无隔断间，距公司一千米，日常设施齐全，北大家属楼，北大校园网，房东直租，便宜——950/月，再加上免取暖物业费，网费和取暖费一年下来省不少；缺点是：小——实测只有九平米 + 一平米飘窗（虽然号称12平米），脏——关注我 Twitter 或者 Buzz 的同学应该知道卫生间我是如何打扫干净的。 毕竟住了三个月了，已经熟悉，而且离公司不是一般的近，骑自行车就更方便了。在校园网里，还可以上 IPV6 下电影，真有些舍不得，但是没办法。 我是一个土人，很羡慕那些电视里精心装修的干干净净的家居环境，比如《家有儿女》那种。本来换房子也想租个那样的，无奈房子太难找，好点儿的房子迟一点儿就会被人抢走。即使是找中介，也没有很多信息。而且都比较贵，因此都不敢想租个一居二居啥的，觉得负担不起。 在水木租房版、豆瓣租房小组、赶集网之类的地方关注了很久，也找了我爱我家中介，都没找到合适的。本来目标是长椿街和宣武门地铁站附近的合租主卧，昨天鬼使神差地在豆瓣租房小组多翻了一会儿，居然翻出来个牛街的一居，还挺便宜。赶忙提前下班去看了一下，怕被别人抢走，当场就定下来了，今天晚上刚和房东签了合同回来。 房子不能完全如我所期望，没有什么高档家具，全部都是简易的，也不是木地板，距离地铁也不是特别近。但让我满意的是：比较新——06年的房子、落地窗带阳台、卫生间和厨房都很干净、小区也比较安全。总共使用面积有四十多平吧，进去和我九平米的房间果然感觉不一样！ 其实，最开心的是，总算能住上自己独门独户的房子了！再也不用和别人合用厨房、冰箱、卫生间、洗衣机——这可是我从上学时就梦寐以求的事情！ 这个周末，就要用来搬家了。 广告：我的朋友们，谁想换个离西二旗地铁近的合租单间，可以和我联系了。要求高的满足不了，但是有两点必须得赞：房子很实惠，房东很实在。 您可能对这些感兴趣： 我为什么这么忙 (16) - 这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村... 宅并低俗着 (11) - 其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，... 南京一樽牛排 (5) - 在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有... 又想念南京了 (6) - 今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心... 播客和其它 (8) - 每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人... 又是一年元宵时 (15) - 今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...]]></description>
			<content:encoded><![CDATA[<p>我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一个已知现象却不知缘由的 bug 一样，不解决掉它我感觉整个系统都不稳定。</p>
<p>前面曾说过办手续的各种烦，没想到才见看稳定下来，又得到一条消息：女友可以提前调回北京总部了。而我们工作地位一个在丰台总部基地，一个在海淀西二旗，这就意味着必须得换房子了——令人愉悦的烦恼！</p>
<p>先说说我现在住的房子吧：西二旗智学苑，三室一厅次卧，无隔断间，距公司一千米，日常设施齐全，北大家属楼，北大校园网，房东直租，便宜——950/月，再加上免取暖物业费，网费和取暖费一年下来省不少；缺点是：小——实测只有九平米 + 一平米飘窗（虽然号称12平米），脏——关注我 Twitter 或者 Buzz 的同学应该知道卫生间我是如何打扫干净的。</p>
<p>毕竟住了三个月了，已经熟悉，而且离公司不是一般的近，骑自行车就更方便了。在校园网里，还可以上 IPV6 下电影，真有些舍不得，但是没办法。</p>
<p>我是一个土人，很羡慕那些电视里精心装修的干干净净的家居环境，比如《家有儿女》那种。本来换房子也想租个那样的，无奈房子太难找，好点儿的房子迟一点儿就会被人抢走。即使是找中介，也没有很多信息。而且都比较贵，因此都不敢想租个一居二居啥的，觉得负担不起。</p>
<p>在水木租房版、豆瓣租房小组、赶集网之类的地方关注了很久，也找了我爱我家中介，都没找到合适的。本来目标是长椿街和宣武门地铁站附近的合租主卧，昨天鬼使神差地在豆瓣租房小组多翻了一会儿，居然翻出来个牛街的一居，还挺便宜。赶忙提前下班去看了一下，怕被别人抢走，当场就定下来了，今天晚上刚和房东签了合同回来。</p>
<p>房子不能完全如我所期望，没有什么高档家具，全部都是简易的，也不是木地板，距离地铁也不是特别近。但让我满意的是：比较新——06年的房子、落地窗带阳台、卫生间和厨房都很干净、小区也比较安全。总共使用面积有四十多平吧，进去和我九平米的房间果然感觉不一样！</p>
<p>其实，最开心的是，总算能住上自己独门独户的房子了！再也不用和别人合用厨房、冰箱、卫生间、洗衣机——这可是我从上学时就梦寐以求的事情！</p>
<p>这个周末，就要用来搬家了。</p>
<p>广告：我的朋友们，谁想换个离西二旗地铁近的合租单间，可以和我联系了。要求高的满足不了，但是有两点必须得赞：房子很实惠，房东很实在。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/sorry-i-am-busy.html" title="我为什么这么忙">我为什么这么忙</a> <span class="count">(16)</span> - <small class="excerpt">这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村...</small></li>
<li><a href="http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html" title="宅并低俗着">宅并低俗着</a> <span class="count">(11)</span> - <small class="excerpt">其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...</small></li>
<li><a href="http://blog.solrex.org/articles/yizun-steak-nanjing.html" title="南京一樽牛排">南京一樽牛排</a> <span class="count">(5)</span> - <small class="excerpt">在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有...</small></li>
<li><a href="http://blog.solrex.org/articles/miss-nanjing-again.html" title="又想念南京了">又想念南京了</a> <span class="count">(6)</span> - <small class="excerpt">今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(15)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/i-wanna-a-big-house.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Fastbit中的bitmap索引算法</title>
		<link>http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html</link>
		<comments>http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html#comments</comments>
		<pubDate>Thu, 19 Aug 2010 00:17:47 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[Fastbit]]></category>
		<category><![CDATA[Index]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638865</guid>
		<description><![CDATA[摘要：bitmap 索引是一种典型的数据库索引方案，本文基于 Fastbit 软件包，使用实际用例对一些常用的 bitmap 索引算法进行了一个较为系统的介绍。 一、Fastbit是什么？ 引用 Fastbit 的官方网站上的介绍：Fastbit是一个追随 NoSQL(Not Only SQL) 运动精神的开源的数据处理程序库，它提供了一系列的用压缩的 bitmap 索引支持的查询函数。在这里，我们关注的关键词是“bitmap 索引”。Fastbit 使用的是按列存储方式，其 bitmap 索引也是在按列存储的数据上建立起来的。 二、Fastbit 中的 bitmap 索引算法 Fastbit 的源代码有着非常清晰的结构。在 Fastbit 的源代码中，每个索引算法都用一个 C++ 类来实现，所有的索引算法类都是基类 index 的派生，并且在 fastbit 源代码中保存为以 i 开头的源文件。 下面是 Fastbit 中的索引类的派生关系图，从美观考虑，直接使用 xmind 思维导图而不是 UML 来展现了： 下面我们将对其中部分算法进行简单的介绍。我们将这些索引算法分为几大类：基础算法、扩展算法、多层算法和多成分算法。 三、基础 bitmap 索引算法 基础的 bitmap 索引算法是最简单的 bitmap 索引算法，给出了 bitmap 索引的基本原理。 3.1 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>摘要：<a href="http://en.wikipedia.org/wiki/Bitmap_index">bitmap 索引</a>是一种典型的<a href="http://en.wikipedia.org/wiki/Database_index">数据库索引</a>方案，本文基于 Fastbit 软件包，使用实际用例对一些常用的 bitmap 索引算法进行了一个较为系统的介绍。</p></blockquote>
<h4>一、Fastbit是什么？</h4>
<p>引用 <a href="https://sdm.lbl.gov/fastbit/">Fastbit 的官方网站</a>上的介绍：Fastbit是一个追随<a href="http://en.wikipedia.org/wiki/NoSQL"> NoSQL</a>(Not Only SQL) 运动精神的开源的数据处理程序库，它提供了一系列的用压缩的 <span style="color: red;">bitmap 索引</span>支持的查询函数。在这里，我们关注的关键词是“<span style="color: red;">bitmap 索引</span>”。Fastbit 使用的是按列存储方式，其 bitmap 索引也是在按列存储的数据上建立起来的。</p>
<h4>二、Fastbit 中的 bitmap 索引算法</h4>
<p>Fastbit 的源代码有着非常清晰的结构。在 Fastbit 的源代码中，每个索引算法都用一个 C++ 类来实现，所有的索引算法类都是基类 index 的派生，并且在 fastbit 源代码中保存为以 i 开头的源文件。</p>
<p>下面是 Fastbit 中的索引类的派生关系图，从美观考虑，直接使用 xmind 思维导图而不是 UML 来展现了：</p>
<p><a rel="attachment wp-att-638871" href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/index"><img class="aligncenter size-full wp-image-638871" title="fastbit-index" src="/wp-content/uploads/2010/08/index.png" alt="fastbit 索引算法派生关系图" width="550" height="373" /></a></p>
<p>下面我们将对其中部分算法进行简单的介绍。我们将这些索引算法分为几大类：基础算法、扩展算法、多层算法和多成分算法。</p>
<h4>三、基础 bitmap 索引算法</h4>
<p>基础的 bitmap 索引算法是最简单的 bitmap 索引算法，给出了 bitmap 索引的基本原理。</p>
<h5>3.1 relic</h5>
<p>relic （定义在 irelic.h 中，实现在 irelic.cpp ） 是最原始的 equality-encoded 算法，这个单词代表“遗迹”的意思。它可谓是最简单直观的 bitmap 索引算法。relic 为需要索引的每个值都建立一个 bitvector，在该 bitvector 中，只有等于该值的列才会被置 1，其它位都被置 0，如下表所示：</p>
<table border="1" cellspacing="0" cellpadding="0">
<colgroup>
<col span="6" width="30"></col>
</colgroup>
<tbody>
<tr>
<td width="30">数据</td>
<td colspan="5">索引（bitmap）</td>
</tr>
<tr>
<td width="30"></td>
<td width="30">a</td>
<td width="30">b</td>
<td width="30">d</td>
<td width="30">e</td>
<td width="30">g</td>
</tr>
<tr>
<td width="30">a</td>
<td width="30">1</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
</tr>
<tr>
<td width="30">g</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
</tr>
<tr>
<td width="30">d</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
<td width="30">0</td>
<td width="30">0</td>
</tr>
<tr>
<td width="30">e</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
<td width="30">0</td>
</tr>
<tr>
<td width="30">b</td>
<td width="30">0</td>
<td width="30">1</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
</tr>
<tr>
<td width="30">d</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
<td width="30">0</td>
<td width="30">0</td>
</tr>
<tr>
<td width="30">g</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
</tr>
<tr>
<td width="30">e</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">0</td>
<td width="30">1</td>
<td width="30">0</td>
</tr>
</tbody>
</table>
<h5>3.2 bin</h5>
<p>bin （定义于 ibin.h，实现在 ibin.cpp）是 binned equality-encoded 算法，这里它代表“桶”的意思。它可以视为是 relic 的一种变形，它将值域分为几个不相交的区间，将原本是相等才置一的规则转变为值落在该区间内就置一，如下表所示。当然，relic 也可以视为 bin 的一个特例（将区间定义为 [a, a+ε）。bin 每个区间的范围由程序遵从某些规则设定，这些规则由命令行通过参数传入。</p>
<table border="1" cellspacing="0" cellpadding="0" width="395">
<colgroup>
<col width="98"></col>
<col width="105"></col>
<col width="85"></col>
<col width="106"></col>
</colgroup>
<tbody>
<tr>
<td width="98">数据</td>
<td colspan="3" width="297">索引（bitmap）</td>
</tr>
<tr>
<td width="98"></td>
<td width="105">(…,b)</td>
<td width="85">[b,e)</td>
<td width="106">[e,…)</td>
</tr>
<tr>
<td width="98">a</td>
<td width="105">1</td>
<td width="85">0</td>
<td width="106">0</td>
</tr>
<tr>
<td width="98">g</td>
<td width="105">0</td>
<td width="85">0</td>
<td width="106">1</td>
</tr>
<tr>
<td width="98">d</td>
<td width="105">0</td>
<td width="85">1</td>
<td width="106">0</td>
</tr>
<tr>
<td width="98">e</td>
<td width="105">0</td>
<td width="85">0</td>
<td width="106">1</td>
</tr>
<tr>
<td width="98">b</td>
<td width="105">0</td>
<td width="85">1</td>
<td width="106">0</td>
</tr>
<tr>
<td width="98">d</td>
<td width="105">0</td>
<td width="85">1</td>
<td width="106">0</td>
</tr>
<tr>
<td width="98">g</td>
<td width="105">0</td>
<td width="85">0</td>
<td width="106">1</td>
</tr>
<tr>
<td width="98">e</td>
<td width="105">0</td>
<td width="85">0</td>
<td width="106">1</td>
</tr>
</tbody>
</table>
<h5>3.3 bin-&gt;range</h5>
<p>range （定义于 ibin.h，实现于 irange.cpp）是 range-encoded 算法，这里它代表“范围”的意思。正如它字面所表达的意思，range 的每个 bitvector 标记着小于某边界值的值，如下表所示。因此，它可以视为是 bin 的一个累积表示，这也是 fastbit 软件包中所做的：首先构造 bin，然后累加转换成 range。值得注意的是，一般最后一列代表着小于无穷大，因此该 bitvector 全为 1，会被略去不写。</p>
<table border="1" cellspacing="0" cellpadding="0" width="344">
<colgroup>
<col width="86"></col>
<col width="86"></col>
<col span="2" width="86"></col>
</colgroup>
<tbody>
<tr>
<td width="86">数据</td>
<td colspan="3" width="258">索引（bitmap）</td>
</tr>
<tr>
<td width="86"></td>
<td width="86">(…,b)</td>
<td width="86">(…,e)</td>
<td width="86">(…,g)</td>
</tr>
<tr>
<td width="86">a</td>
<td width="86">1</td>
<td width="86">1</td>
<td width="86">1</td>
</tr>
<tr>
<td width="86">g</td>
<td width="86">0</td>
<td width="86">0</td>
<td width="86">0</td>
</tr>
<tr>
<td width="86">d</td>
<td width="86">0</td>
<td width="86">1</td>
<td width="86">1</td>
</tr>
<tr>
<td width="86">e</td>
<td width="86">0</td>
<td width="86">0</td>
<td width="86">1</td>
</tr>
<tr>
<td width="86">b</td>
<td width="86">0</td>
<td width="86">1</td>
<td width="86">1</td>
</tr>
<tr>
<td width="86">d</td>
<td width="86">0</td>
<td width="86">1</td>
<td width="86">1</td>
</tr>
<tr>
<td width="86">g</td>
<td width="86">0</td>
<td width="86">0</td>
<td width="86">0</td>
</tr>
<tr>
<td width="86">e</td>
<td width="86">0</td>
<td width="86">0</td>
<td width="86">1</td>
</tr>
</tbody>
</table>
<h5>3.4 bin-&gt;mesa</h5>
<p>mesa （定义于 ibin.h，实现于 imesa.cpp）是 interval-encoded 算法[1]，它与 bin 类似，只不过它的区间之间有重叠部分。与 range 相同，在 fastbit 软件包中，它也是通过 bin 构造起来的。</p>
<table border="1" cellspacing="0" cellpadding="0" width="404">
<colgroup>
<col width="81"></col>
<col width="81"></col>
<col width="81"></col>
<col width="81"></col>
<col width="81"></col>
</colgroup>
<tbody>
<tr>
<td width="81">数据</td>
<td colspan="4" width="323">索引（bitmap）</td>
</tr>
<tr>
<td width="81"></td>
<td width="81">(…,d)</td>
<td width="81">[a,e)</td>
<td width="81">[b,g)</td>
<td width="81">[d,…)</td>
</tr>
<tr>
<td width="81">a</td>
<td width="81">1</td>
<td width="81">1</td>
<td width="81">0</td>
<td width="81">0</td>
</tr>
<tr>
<td width="81">g</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">1</td>
</tr>
<tr>
<td width="81">d</td>
<td width="81">0</td>
<td width="81">1</td>
<td width="81">1</td>
<td width="81">1</td>
</tr>
<tr>
<td width="81">e</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">1</td>
<td width="81">1</td>
</tr>
<tr>
<td width="81">b</td>
<td width="81">1</td>
<td width="81">1</td>
<td width="81">1</td>
<td width="81">0</td>
</tr>
<tr>
<td width="81">d</td>
<td width="81">0</td>
<td width="81">1</td>
<td width="81">1</td>
<td width="81">1</td>
</tr>
<tr>
<td width="81">g</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">1</td>
</tr>
<tr>
<td width="81">e</td>
<td width="81">0</td>
<td width="81">0</td>
<td width="81">1</td>
<td width="81">1</td>
</tr>
</tbody>
</table>
<h4>四、扩展 bitmap 索引算法</h4>
<h5>4.1 direkte</h5>
<p>direkte （定义于 idirekte.h，实现于 idirekte.cpp）是丹麦语中的 direct，它与 relic 几乎是一样的，不同点只是它为小于最大值的所有值都建立了一个 bitvector（即使该值并不存在于列中）。</p>
<table border="1" cellspacing="0" cellpadding="0" width="472">
<colgroup>
<col span="8" width="59"></col>
</colgroup>
<tbody>
<tr>
<td width="59">数据</td>
<td colspan="7" width="413">索引（bitmap）</td>
</tr>
<tr>
<td width="59"></td>
<td width="59">a</td>
<td width="59">b</td>
<td width="59">c</td>
<td width="59">d</td>
<td width="59">e</td>
<td width="59">f</td>
<td width="59">g</td>
</tr>
<tr>
<td width="59">a</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
<tr>
<td width="59">g</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
</tr>
<tr>
<td width="59">d</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
<tr>
<td width="59">e</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
<tr>
<td width="59">b</td>
<td width="59">0</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
<tr>
<td width="59">d</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
<tr>
<td width="59">g</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
</tr>
<tr>
<td width="59">e</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">0</td>
<td width="59">1</td>
<td width="59">0</td>
<td width="59">0</td>
</tr>
</tbody>
</table>
<h5>4.2 relic-&gt;slice</h5>
<p>slice（定义于 irelic.h，实现于 islice.cpp）实现了 O'Neil'97 [2] 提出的 bit-slice 算法。它的基本思想就是首先将原始数据用二进制进行编码，bitmap 就是所有值的二进制编码表示的集合，bitvector 的个数由最大值的二进制表示决定，如下表所示：</p>
<table border="1" cellspacing="0" cellpadding="0" width="381">
<colgroup>
<col width="76"></col>
<col width="76"></col>
<col width="76"></col>
<col width="76"></col>
<col width="76"></col>
</colgroup>
<tbody>
<tr>
<td width="76">数据</td>
<td width="76">编码</td>
<td colspan="3" width="229">索引(bitmap)</td>
</tr>
<tr>
<td width="76">a</td>
<td width="76">0</td>
<td width="76">0</td>
<td width="76">0</td>
<td width="76">0</td>
</tr>
<tr>
<td width="76">g</td>
<td width="76">4</td>
<td width="76">1</td>
<td width="76">0</td>
<td width="76">0</td>
</tr>
<tr>
<td width="76">d</td>
<td width="76">2</td>
<td width="76">0</td>
<td width="76">1</td>
<td width="76">0</td>
</tr>
<tr>
<td width="76">e</td>
<td width="76">3</td>
<td width="76">0</td>
<td width="76">1</td>
<td width="76">1</td>
</tr>
<tr>
<td width="76">b</td>
<td width="76">1</td>
<td width="76">0</td>
<td width="76">0</td>
<td width="76">1</td>
</tr>
<tr>
<td width="76">d</td>
<td width="76">2</td>
<td width="76">0</td>
<td width="76">1</td>
<td width="76">0</td>
</tr>
<tr>
<td width="76">g</td>
<td width="76">4</td>
<td width="76">1</td>
<td width="76">0</td>
<td width="76">0</td>
</tr>
<tr>
<td width="76">e</td>
<td width="76">3</td>
<td width="76">0</td>
<td width="76">1</td>
<td width="76">1</td>
</tr>
</tbody>
</table>
<h5>4.3 bin->bak</h5>
<p>bak （定义于 ibin.h，实现于 idbak.cpp）是丹麦语中的 bin，因此它是 bin 的变形。它使用减精度来表示 bin 区间的中心，即它的每一个区间都是用一个更低精度的数来表示，具体来说就是四舍五入啦。下面是一个对 1-100 的数据列建立 bak 索引的输出，其中第一列表示区间的中心，第二三列代表区间最小最大值，第四列代表该区间内数据的个数：</p>
<pre>index (equality encoding on reduced precision values) for data.a contains 19 bitvectors for 100 objects
1   1   1   1
2   2   2   1
3   3   3   1
4   4   4   1
5   5   5   1
6   6   6   1
7   7   7   1
8   8   8   1
9   9   9   1
10  10  14  5
20  15  24  10
30  25  34  10
40  35  44  10
50  45  54  10
60  55  65  11
70  66  74  9
80  75  84  10
90  85  94  10
100 95  100 6</pre>
<h5>4.4 bin->bak2</h5>
<p>bak2 （定义于 ibin.h，实现于 idbak2.cpp）是 bak 的变形，也是以减精度来表示区间。但与 bak 不同的是，它将 bak 的每个区间区分为两个区间：小于减精度数的区间，和大于等于减精度数的区间。虽然注释中这样说，但实现时 bak2 是将 bak 的区间分为了三个：小于、等于和大于。下面是一个对 1-100 的数据列建立 bak2 索引的输出，每列的含义与 bak 中示例相同：</p>
<pre>index (equality encoding on reduced precision values) for data.a contains 37 bitvectors for 100 objects
1   1   1   1
2   2   2   1
3   3   3   1
4   4   4   1
5   5   5   1
6   6   6   1
7   7   7   1
8   8   8   1
9   9   9   1
10  10  10  1
10  11  14  4
15  15  19  5
20  20  20  1
20  21  24  4
25  25  29  5
30  30  30  1
30  31  34  4
35  35  39  5
40  40  40  1
40  41  44  4
45  45  49  5
50  50  50  1
50  51  54  4
55  55  59  5
60  60  60  1
60  61  65  5
66  66  69  4
70  70  70  1
70  71  74  4
75  75  79  5
80  80  80  1
80  81  84  4
85  85  89  5
90  90  90  1
90  91  94  4
95  95  99  5
100 100 100 1</pre>
<p>除了上面几个算法之外，扩展的算法还有 roster 和 keywords，这两种算法比较复杂，这里就不示例讲解了。</p>
<h4>五、多层 bitmap 索引算法</h4>
<p>有了几个基础的 bitmap 索引算法，我们就可以考虑将这些算法组合成一个层次的结构，构造出多层的 bitmap 索引算法。下面的几个算法，即是由前面的基础 bitmap 索引算法构造出来的二（多）层 bitmap 索引算法。</p>
<h5>5.1 bin->ambit</h5>
<p>ambit（定义于 ibin.h，实现于 ixambit.cpp）是 multilevel-range based算法，在这个算法中索引分为多层，每层索引都是基于 range 的索引。具体实现时，fastbit 首先构造 bin，然后对桶进行分组(调用 bin::divideBitmaps)，然后构造 ambit。分组粒度可以由命令行传入参数 ncoarse=x 和/或 nrefine=n 指定，否则由一简单算法确定，确定分组个数的算法为（第一个桶不参与分组）：</p>
<pre>ixambit.cpp:
33     // the default number of coarse bins is determined based on a set
34     // of simplified assumptions about expected sizes of range encoded
35     // bitmaps and word size being 32 bits.
36     const uint32_t defaultJ = static_cast<uint32_t>
37         (nbins < 100 ? sqrt((double)nbins) :
38          0.5*(31.0 + sqrt(31.0*(31 + 4.0*nbins))));</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 bin，右侧是基于该 bin 构造的 ambit：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/bin_ambit" rel="attachment wp-att-638880"><img src="/wp-content/uploads/2010/08/bin_ambit.jpg" alt="ambit 索引" title="bin_ambit" width="655" height="330" class="aligncenter size-full wp-image-638880" /></a></p>
<h5>5.2 bin->pale</h5>
<p>pale（定义于 ibin.h，实现于 ixpale.cpp）是 two-level binned equality-range算法，它的索引分为两层，第一层为 binned equality(bin) 索引，第二层为 range 索引。在具体实现时，pale 首先构造 bin，然后对桶进行分组(调用 bin::divideBitmaps)，然后构造 pale。与 ambit 相同，分组粒度可以由命令行传入参数 ncoarse=x 和/或 nrefine=n 指定，否则当 bin 桶数大于31时，默认第一层为16个组：</p>
<pre>ixpale.cpp:
45     else { // default -- 16 coarse bins
46         if (nbins > 31) {
47         j = 16;
48         }
49         else {
50         j = nbins;
51         }
52     }</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 bin，右侧是基于该 bin 构造的 pale：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/bin_pale" rel="attachment wp-att-638881"><img src="/wp-content/uploads/2010/08/bin_pale.jpg" alt="pale 索引" title="bin_pale" width="686" height="352" class="aligncenter size-full wp-image-638881" /></a></p>
<h5>5.3 bin->pack</h5>
<p>pack（定义于 ibin.h，实现于 ixpack.cpp）是 two-level binned range-equality 算法。它的索引分两层，与 pale 相反，第一层为 range 索引，第二层为 binned equality(bin) 索引。具体实现时，fastbit 首先构造 bin，然后对桶进行分组(调用bin::divideBitmaps)，然后构造 pack。分组粒度可以由命令行传入参数 ncoarse=x 和/或 nrefine=n 指定，否则当bin桶数大于63时，默认第一层为31个组：</p>
<pre>ixpack.cpp:
44     else { // default -- 31 coarse bins
45         if (nbins > 63) {
46         j = 31;
47         }
48         else {
49         j = nbins;
50         }
51     }</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 bin，右侧是基于该 bin 构造的 pack：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/bin_pack" rel="attachment wp-att-638883"><img src="/wp-content/uploads/2010/08/bin_pack.jpg" alt="pack 索引" title="bin_pack" width="642" height="334" class="aligncenter size-full wp-image-638883" /></a></p>
<h5>5.4 bin->zone</h5>
<p>zone（定义于 ibin.h，实现于 ixzone.cpp）是 two-level binned equality-equality 算法，它的索引分两层，两层均为 binned equality(bin) 索引。它的实现方式也是首先构造 bin，然后对桶进行分组(调用 bin::divideBitmaps)，然后构造 zone。其分组粒度可以由命令行传入参数 ncoarse=x 和/或 nrefine=n 指定，否则当bin桶数大于31时，默认第一层为14个组：</p>
<pre>ixpack.cpp:
46     else { // default -- 14 coarse bins
47         if (nbins > 31) {
48         j = 14;
49         }
50         else {
51         j = nbins;
52         }
53     }</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 bin，右侧是基于该 bin 构造的 zone：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/bin_zone" rel="attachment wp-att-638884"><img src="/wp-content/uploads/2010/08/bin_zone.jpg" alt="zone 索引" title="bin_zone" width="666" height="316" class="aligncenter size-full wp-image-638884" /></a></p>
<h5>5.5 bin->fuge</h5>
<p>fuge（定义于 ibin.h，实现于 ixfuge.cpp）是 two-level binned interval-equality 算法，fuge 为德语中 interstice 的表述。fuge 的索引分两层，第一层为 interval(mesa) 索引，第二层为 binned equality(bin) 索引，它也是采用首先构造 bin，然后基于 bin 构造 fuge 的方式。其分组粒度由 ncoarse=x 指定，否则默认的分组个数由下面算法确定：</p>
<pre>ixfuge.cpp:
887     // default size based on the size of fine level index sf: sf(w-1)/N/sqrt(2)
...
899     if (ncoarse < 5U &#038;& offset32.back() >
900     offset32[0]+static_cast<int32_t>(nrows/31)) {
901     ncoarse = sizeof(ibis::bitvector::word_t);
...
913     else {
914         ncoarse = ncmax;
915     }
916     }</int32_t></pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 bin，右侧是基于该 bin 构造的 fuge：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/bin_fuge" rel="attachment wp-att-638885"><img src="/wp-content/uploads/2010/08/bin_fuge.jpg" alt="fuge 索引" title="bin_fuge" width="660" height="357" class="aligncenter size-full wp-image-638885" /></a></p>
<h5>5.6 relic->bylt</h5>
<p>bylt（定义于 irelic.h，实现于 ixrelic.cpp）是 two-level unbinned range-equality 算法，bylt 是丹麦语的 pack(binned 版本算法)。bylt 索引分两层，第一层为 range 索引，第二层为 unbinned equality(relic) 索引。在实现时首先构造 relic，然后对桶进行分组(调用bin::divideBitmaps)，然后构造 bylt。分组粒度可以由 ncoarse=x 指定，bylt 保证每组中桶数是大致均匀的，否则由下面算法决定分组的个数：</p>
<pre>ixbylt.cpp:
182     // default size based on the size of fine level index sf:
183     // (w-1) * sqrt(sf*(sf-N/(w-1))) / (2N)
184     if (ncoarse < 5U &#038;& offset64.back() > offset64[0]+(int32_t)(nrows/31U)) {
185     ncoarse = sizeof(ibis::bitvector::word_t);
     const int wm1 = ncoarse*8-1;
...
199         ncoarse = ncmax;
200     }
201     }</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 relic，右侧是基于该 relic 构造的 bylt：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/relic_bylt" rel="attachment wp-att-638888"><img src="/wp-content/uploads/2010/08/relic_bylt.jpg" alt="bylt 索引" title="relic_bylt" width="673" height="349" class="aligncenter size-full wp-image-638888" /></a></p>
<h5>5.7 relic->fuzz</h5>
<p>fuzz（定义于 irelic.h，实现于 ixfuzz.cpp）是two-level unbinned interval-equality 算法，即 fuge 的 unbinned 版本，名字起源于 fuzzy 聚类/分类。fuzz 索引分两层，第一层为 interval(mesa) 索引，第二层为 unbinned equality(relic) 索引，具体实现时 fastbit 也是采用首先构造 relic，然后构造 fuzz 的方式。其分组粒度可以由 ncoarse=x 指定，否则默认分组个数由下面算法确定：</p>
<pre>ixfuzz.cpp:
168     // default size based on the size of fine level index sf: sf(w-1)/N/        sqrt(2)
169     if (ncoarse < 5U &#038;& offset64.back() > offset64[0]+nrows/31U) {
170     ncoarse = sizeof(ibis::bitvector::word_t);
...
182     else {
183         ncoarse = ncmax;
184     }
185     }</pre>
<p>下面看一个实际的例子，左侧是对 1-100 的数据列构造的 relic，右侧是基于该 relic 构造的 fuzz：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/relic_fuzz" rel="attachment wp-att-638889"><img src="/wp-content/uploads/2010/08/relic_fuzz.jpg" alt="fuzz 索引" title="relic_fuzz" width="639" height="351" class="aligncenter size-full wp-image-638889" /></a></p>
<h5>5.8 relic->zona</h5>
<p>zona（定义于 irelic.h，实现于 ixzona.cpp）是 two-level unbinned equality-equality 算法，zona 是丹麦语的zone(binned 版本算法)，其索引分两层，两层均为 unbinned equality(relic) 索引。首先构造 relic，然后对桶进行分组构造zona，分组个数默认为11个。下面看一个实际的例子，左侧是对 1-100 的数据列构造的 relic，右侧是基于该 relic 构造的 zona：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/relic_zona" rel="attachment wp-att-638890"><img src="/wp-content/uploads/2010/08/relic_zona.jpg" alt="zona 索引" title="relic_zona" width="661" height="358" class="aligncenter size-full wp-image-638890" /></a></p>
<h4>六、多成分 bitmap 索引</h4>
<p>多成分（multi-component）bitmap 索引[3]是使用一组基数将数据值分解成多个部分，分别对每个部分进行 bitmap 索引的方案。原理描述如下：给定 n-1 个基数 { b<sub>n-1</sub>, b<sub>n-2</sub>, ..., b<sub>1</sub>}，那么一个值 v 可以通过下式分解为 {v<sub>n</sub>, v<sub>n-1</sub>, ..., v<sub>1</sub>}：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/atrribute_value_decomposition" rel="attachment wp-att-638897"><img src="/wp-content/uploads/2010/08/atrribute_value_decomposition.jpg" alt="数据值的分解" title="atrribute_value_decomposition" width="482" height="270" class="aligncenter size-full wp-image-638897" /></a></p>
<p>这和数的表示法类似，如果令 b<sub>i</sub> 都是 10，那么 v<sub>i</sub> 就是十进制表示法中第 i 位的值（大于等于0，小于10）。更准确的表述可以参考[3]。下面我们来看 fastbit 中的几个实现。</p>
<h5>6.1 relic->fade</h5>
<p>fade（定义于 irelic.h，实现于 ifade.cpp）是 multicomponent range-encoded 算法，即在每个部分中，是使用的 range 索引。下面来看一个 range-encoded 的例子：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/relic_fade" rel="attachment wp-att-638898"><img src="/wp-content/uploads/2010/08/relic_fade.jpg" alt="fade 索引" title="relic_fade" width="496" height="589" class="aligncenter size-full wp-image-638898" /></a></p>
<p>在(b)图中，选择的基数是 9，那么索引就变成了一个单成分的 range 索引算法；在(c)图中，选择的基数是 &lt;3, 3> 这样一个双成分编码，对分解出来的每个成分（大于等于0，小于3）生成 range 索引，就得出了 (c) 图中的结果。</p>
<h5>6.2 relic->fade->sapid</h5>
<p>sapid（定义于 irelic.h，实现于 isapid.cpp）是 multicomponent equality-encoded 算法，即在每个部分中是使用的 equality(relic) 索引。下面来看一个 equality-encoded 的例子：</p>
<p><a href="http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/relic_sapid" rel="attachment wp-att-638899"><img src="/wp-content/uploads/2010/08/relic_sapid.jpg" alt="sapid 索引" title="relic_sapid" width="486" height="446" class="aligncenter size-full wp-image-638899" /></a></p>
<p>在(b)图中，选择的基数是 &lt;3, 4> 这样一个双成分编码，对分解出来的每个成分生成 relic 索引，就得到了 (b) 图中的索引结果。</p>
<p>除了这两个索引算法之外，还有 sbiad(multicomponent interval-encoded)，egale(multicomponent equality code on bins), entre(multicomponent interval code on bins), moins(multicomponent range code on bins)这几个索引算法。从括号中我们可以大致猜出这些索引的实现方式，但是由于我们现在没有一个很好的示例展现方式，用实际用例来展现这些索引算法的效果将会留给以后的文章进行。</p>
<h4>七、总结</h4>
<p>这篇文章基于 fastbit 软件包，加以实际的用例对常用的 bitmap 索引算法进行了一个较为系统的介绍。不过生成 bitmap 索引仅仅是第一步，bitmap 索引在存储时会有很大的开销，在不损害（较少损害）查询效率的情况下，对 bitmap 索引进行有效的压缩是一个非常有挑战性的课题。除了 bitmap 索引的生成和存储之外，在不同类型的 bitmap 索引上实现高效的各种类型的查询，也是一个值得进一步探讨的问题。我们很高兴地看到 fastbit 软件包实现了很多这些相关领域的算法，为我们提供了非常宝贵的资料。</p>
<h4>参考文献</h4>
<p>[1] C-Y. Chan and Y. E. Ioannidis, An efficient bitmap encoding scheme for selection queries, in Proceedings of the ACM international conference on Management of data (SIGMOD), 1999.<br />
[2] P. O’Neil and DalIan Quass, Improved Query Performance with Variant Indexes,  in Proceedings of the ACM international conference on Management of data (SIGMOD), 1997.<br />
[3] C-Y. Chan and Y. E. Ioannidis, Bitmap Index Design and Evaluation, in Proceedings of the ACM international conference on Management of data (SIGMOD), 1998.</uint32_t></pre>
<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/25-horses-problem.html" title="25 马问题">25 马问题</a> <span class="count">(11)</span> - <small class="excerpt">这是以前在 TopLanguage 讨论组讨论过的一道题目 ，题目描述为：有 25 匹马和 1 个赛...</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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/bitmap-index-algorithms-in-fastbit.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>我为什么这么忙</title>
		<link>http://blog.solrex.org/articles/sorry-i-am-busy.html</link>
		<comments>http://blog.solrex.org/articles/sorry-i-am-busy.html#comments</comments>
		<pubDate>Tue, 10 Aug 2010 12:14:20 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[GUCAS]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638859</guid>
		<description><![CDATA[这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村园区东小楼的台阶上，等待某人过来给我盖一个戳——如果能把这个行为称为被“戳”一下的话，我已经千疮百孔了。 1. 品行鉴定 今天这个戳，是要戳到“品行鉴定”上。我个人是相当不理解该文件存在的意义，但是为了这个戳，我已经是第二次跑过来了。最开始给院系总支的老师打电话，她说，嗯，我们已经放假了，你8月26号以后再来吧。幸运的是，我最后总算联系上一个非常好心的老师，他给我戳了一下。但没有料到的是，过了一个星期之后，该文件又回来了，意见是：落款不能用手写，必须机打。于是，我只能打电话找人，然后再跑来。 2. 离校手续单 拿到离校手续单的时候，我花了几天时间跑了一圈，我以为都办完了。然后才被告知，虽然我一次没踏入过机房，也一次没从学校财务借过钱，我仍然需要到两个相关部门去签字盖戳，否则离校手续就是没有办全，连校园卡都不给你退。 3. 某某部 第一次去某某部，那时还没有放假，但等到9点半还没有上班；第二次去某某部，已经放假了，虽然前一个周二、五和后一个周二、五都有人值班，但是去的那个周五就是没人值班；第三次去某某部，我变聪明了，让同学先去打听一下他们上不上班，结果同学只问了保安，没看到通知，通知上写的是，8月6日以后必须得等到8月26日开学才开始值班。然后...我只能继续等。 4. 毕业推荐表 由于当时工作确定较早，使用的是2009年的毕业推荐表，把2009改成2010，然后戳一下。入职后公司说，新的推荐表格式都不一样了，最好要一张新的。然后我只能先跑到院系要一张新表盖戳，然后再找就业指导中心盖戳，他们暑假里都是某天才上班，而且这天还不固定。照片还只能要白底的，只好再照一张。 5. 成绩单 上头说成绩单上非百分制都要给出说明并盖戳，而我们的教务处说，已经放假，8月26日以后上班，暑假不值班。 6. 关于校区 最要命的是，我们有两个校区，一个在玉泉路，一个在中关村。所有和院系相关的证明、戳，我都得在中关村办；所有和学校相关的证明、戳，我都得在玉泉路办。所以我有时候得来回辗转多次，而这两个校区，相距15公里，距离我住的地方，也有10公里。 7. 关于学校 在母校读研期间，我深深地羡慕该校行政人员的舒适。校图书室的上班时间为：周一到周五9点到5点，中午休息两个小时，周五下午不上班，周末不上班；校园卡中心每天中午休息两个小时，周六下午上班，周日不上班，充电卡必须在规定的时间，否则即使有工作人员也不予受理；上班时间去找科研处的工作人员，打电话背景音是商场里。更别提放寒暑假时候了，虽然很多科研人员、研究僧们连个高温假都没有，行政仍然可以理直气壮地休假，连定期值班的人都没有。 虽然前面列举了遭遇到的种种困难，但值得说明的是也有我自己的问题在里面。由于母亲重病，我办完入职手续就请假回家陪护了，因此没有来得及在放暑假前把各种手续办完。 大家都没有错，学校行政人员有权利享受假期，国家行政机关有权利要求各种靠谱和离谱材料，只剩下的是我们这些小人物，埋头捡拾着新鲜出炉的一个又一个杯具。 您可能对这些感兴趣： 我要一所大房子，有很大的落地窗户 (6) - 我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一... 宅并低俗着 (11) - 其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，... 南京一樽牛排 (5) - 在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有... 又想念南京了 (6) - 今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心... 播客和其它 (8) - 每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人... 又是一年元宵时 (15) - [...]]]></description>
			<content:encoded><![CDATA[<p>这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村园区东小楼的台阶上，等待某人过来给我盖一个戳——如果能把这个行为称为被“戳”一下的话，我已经千疮百孔了。</p>
<p>1. 品行鉴定</p>
<p>今天这个戳，是要戳到“品行鉴定”上。我个人是相当不理解该文件存在的意义，但是为了这个戳，我已经是第二次跑过来了。最开始给院系总支的老师打电话，她说，嗯，我们已经放假了，你8月26号以后再来吧。幸运的是，我最后总算联系上一个非常好心的老师，他给我戳了一下。但没有料到的是，过了一个星期之后，该文件又回来了，意见是：落款不能用手写，必须机打。于是，我只能打电话找人，然后再跑来。</p>
<p>2. 离校手续单</p>
<p>拿到离校手续单的时候，我花了几天时间跑了一圈，我以为都办完了。然后才被告知，虽然我一次没踏入过机房，也一次没从学校财务借过钱，我仍然需要到两个相关部门去签字盖戳，否则离校手续就是没有办全，连校园卡都不给你退。</p>
<p>3. 某某部</p>
<p>第一次去某某部，那时还没有放假，但等到9点半还没有上班；第二次去某某部，已经放假了，虽然前一个周二、五和后一个周二、五都有人值班，但是去的那个周五就是没人值班；第三次去某某部，我变聪明了，让同学先去打听一下他们上不上班，结果同学只问了保安，没看到通知，通知上写的是，8月6日以后必须得等到8月26日开学才开始值班。然后...我只能继续等。</p>
<p>4. 毕业推荐表</p>
<p>由于当时工作确定较早，使用的是2009年的毕业推荐表，把2009改成2010，然后戳一下。入职后公司说，新的推荐表格式都不一样了，最好要一张新的。然后我只能先跑到院系要一张新表盖戳，然后再找就业指导中心盖戳，他们暑假里都是某天才上班，而且这天还不固定。照片还只能要白底的，只好再照一张。</p>
<p>5. 成绩单</p>
<p>上头说成绩单上非百分制都要给出说明并盖戳，而我们的教务处说，已经放假，8月26日以后上班，暑假不值班。</p>
<p>6. 关于校区</p>
<p>最要命的是，我们有两个校区，一个在玉泉路，一个在中关村。所有和院系相关的证明、戳，我都得在中关村办；所有和学校相关的证明、戳，我都得在玉泉路办。所以我有时候得来回辗转多次，而这两个校区，相距15公里，距离我住的地方，也有10公里。</p>
<p>7. 关于学校</p>
<p>在母校读研期间，我深深地羡慕该校行政人员的舒适。校图书室的上班时间为：周一到周五9点到5点，中午休息两个小时，周五下午不上班，周末不上班；校园卡中心每天中午休息两个小时，周六下午上班，周日不上班，充电卡必须在规定的时间，否则即使有工作人员也不予受理；上班时间去找科研处的工作人员，打电话背景音是商场里。更别提放寒暑假时候了，虽然很多科研人员、研究僧们连个高温假都没有，行政仍然可以理直气壮地休假，连定期值班的人都没有。</p>
<p>虽然前面列举了遭遇到的种种困难，但值得说明的是也有我自己的问题在里面。由于母亲重病，我办完入职手续就请假回家陪护了，因此没有来得及在放暑假前把各种手续办完。</p>
<p>大家都没有错，学校行政人员有权利享受假期，国家行政机关有权利要求各种靠谱和离谱材料，只剩下的是我们这些小人物，埋头捡拾着新鲜出炉的一个又一个杯具。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/i-wanna-a-big-house.html" title="我要一所大房子，有很大的落地窗户">我要一所大房子，有很大的落地窗户</a> <span class="count">(6)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html" title="宅并低俗着">宅并低俗着</a> <span class="count">(11)</span> - <small class="excerpt">其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...</small></li>
<li><a href="http://blog.solrex.org/articles/yizun-steak-nanjing.html" title="南京一樽牛排">南京一樽牛排</a> <span class="count">(5)</span> - <small class="excerpt">在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有...</small></li>
<li><a href="http://blog.solrex.org/articles/miss-nanjing-again.html" title="又想念南京了">又想念南京了</a> <span class="count">(6)</span> - <small class="excerpt">今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(15)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/sorry-i-am-busy.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>使用 screen 命令的一些小技巧</title>
		<link>http://blog.solrex.org/articles/gnu-screen-tips.html</link>
		<comments>http://blog.solrex.org/articles/gnu-screen-tips.html#comments</comments>
		<pubDate>Thu, 22 Jul 2010 11:45:43 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638854</guid>
		<description><![CDATA[由于工作环境的问题，最近越来越感觉到 screen 命令的可贵，下面总结一点使用 screen 命令的小技巧。 最常用的参数组合： screen -ls // 列出已有的 screen screen -D -R // 进入指定的 screen 名，如果没有，则以该名称创建 screen 由于很常用，我把这两个命令取了个 alias： alias sl=&#39;screen -ls&#39; alias sr=&#39;screen -D -R&#39; 除了命令之外，还有快捷键 Ctrl+ac 创建 screen；Ctrl+aa 在两个 screen 之间相互切换；Ctrl+ad 从 screen 中 detach；Ctrl+a数字，跳转到数字指代的 screen。 在 screen 最下方显示状态栏，状态栏包括已经打开的 screen 标签列表，当前的 screen 和时间。其中在 screen 标签处显示该 screen 所处的目录名。显示 screen 所处的目录名这一点实现起来要困难一些，首先得修改 .bashrc，加入 screen [...]]]></description>
			<content:encoded><![CDATA[<p>由于工作环境的问题，最近越来越感觉到 screen 命令的可贵，下面总结一点使用 screen 命令的小技巧。</p>
<p>最常用的参数组合：</p>
<blockquote><p>screen -ls    // 列出已有的 screen<br />
screen -D -R  // 进入指定的 screen 名，如果没有，则以该名称创建 screen</p></blockquote>
<p>由于很常用，我把这两个命令取了个 alias：</p>
<blockquote><p><span style="color: rgb(0, 0, 0); ">alias </span><span style="color: rgb(0, 0, 0); ">sl</span><span style="color: rgb(0, 0, 0); ">=</span><span style="color: rgb(0, 0, 255); ">&#39;screen -ls&#39;</span><br />
<span style="color: rgb(0, 0, 0); ">alias </span><span style="color: rgb(0, 0, 0); ">sr</span><span style="color: rgb(0, 0, 0); ">=</span><span style="color: rgb(0, 0, 255); ">&#39;screen -D -R&#39;</span></p></blockquote>
<p>除了命令之外，还有快捷键 Ctrl+ac 创建 screen；Ctrl+aa 在两个 screen 之间相互切换；Ctrl+ad 从 screen 中 detach；Ctrl+a数字，跳转到数字指代的 screen。</p>
<p>在 screen 最下方显示状态栏，状态栏包括已经打开的 screen 标签列表，当前的 screen 和时间。其中在 screen 标签处显示该 screen 所处的目录名。显示 screen 所处的目录名这一点实现起来要困难一些，首先得修改 .bashrc，加入 screen term 对应的信息</p>
<blockquote><p><span style="color: rgb(0, 0, 255); ">case</span> <span style="color: rgb(0, 0, 0); ">$TERM</span><span style="color: rgb(0, 0, 0); "> in</span><br />
<span style="color: rgb(0, 0, 0); ">&nbsp;&nbsp;&nbsp; screen*</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); "># This is the escape sequence ESC k \w ESC</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); "># Use current dir as the title</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 0); ">SCREENTITLE</span><span style="color: rgb(0, 0, 0); ">=</span><span style="color: rgb(163, 21, 21); ">&#39;\[\ek\W\e\\\]&#39;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 0); ">PS1</span><span style="color: rgb(0, 0, 0); ">=</span><span style="color: rgb(163, 21, 21); ">&quot;${SCREENTITLE}${PS1}&quot;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br />
<span style="color: rgb(0, 0, 0); ">&nbsp;&nbsp;&nbsp; *</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br />
<span style="color: rgb(0, 0, 255); ">esac</span></p></blockquote>
<p>然后 . 或者 source 一下，再修改 screen 的配置文件，添加状态栏，在 .screenrc 中添加：</p>
<blockquote><p><span style="color: rgb(0, 0, 0); ">caption always </span><span style="color: rgb(163, 21, 21); ">&#39;%{=b cw}%-w%{=rb db}%&gt;%n %t%{-}%+w%{-b}%&lt; %{= kG}%-=%D %c%{-}&#39;</span><br />
<span style="color: rgb(0, 0, 0); ">shelltitle </span><span style="color: rgb(163, 21, 21); ">&#39;$ |bash&#39;</span></p></blockquote>
<p>最终效果为：</p>
<p><img src="http://share.solrex.org/pictures/gnu_screen_caption.jpg" alt="GNU Screen 多标签状态栏" /></p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/15-minutes-of-fame.html" title="15 Minutes of Fame">15 Minutes of Fame</a> <span class="count">(9)</span> - <small class="excerpt">短暂的荣光——对 免费电子书《使用开源软件-自己动手写操作系统》 的一点点说明我前几日发布了免费电子...</small></li>
<li><a href="http://blog.solrex.org/articles/my-thought-of-piraterie.html" title="我的一些关于盗版的观点">我的一些关于盗版的观点</a> <span class="count">(8)</span> - <small class="excerpt">前段时间我写了篇 扔掉你 Windows 操作系统中的盗版软件吧 的博客文章，那是因为我不得不使用 ...</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>
<li><a href="http://blog.solrex.org/articles/songbird-music-player.html" title="跨平台音乐播放软件 Songbird">跨平台音乐播放软件 Songbird</a> <span class="count">(9)</span> - <small class="excerpt">Songbird 是一款开源音乐播放软件，目前可以支持在 Windows, Linux 和 Mac ...</small></li>
<li><a href="http://blog.solrex.org/articles/vimim.html" title="Vim 中文输入法插件 Vimim">Vim 中文输入法插件 Vimim</a> <span class="count">(9)</span> - <small class="excerpt">有位朋友在 TopLanguage 讨论组里向我推荐了一款非常 cool 的 vim 输入法插件：v...</small></li>
<li><a href="http://blog.solrex.org/articles/on-coolsip.html" title="谈谈 CoolSIP">谈谈 CoolSIP</a> <span class="count">(7)</span> - <small class="excerpt">说明：本文有一些内容是基于本人的合理猜测。如果您知道更多细节，请不吝指出，但最好请提供事实依据，而不...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/gnu-screen-tips.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>宅并低俗着</title>
		<link>http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html</link>
		<comments>http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html#comments</comments>
		<pubDate>Tue, 15 Jun 2010 09:16:11 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Love]]></category>
		<category><![CDATA[Society]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638846</guid>
		<description><![CDATA[其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，鞋子也是买亦可不买亦可的东西，带回北京反而比较累。 xixi 去改高考卷了，白天也没时间陪我。是我逼着她去的，因为我比较爱财，改卷子能赚不少钱呢，所以这是自作自受。不过等她离开了南大，这种机会也不会再有了。我忽然意识到今年江苏数学卷好像是传说中的“数学帝”出的，不过我不太相信，出高考卷子这种事，难道只赖一个人吗？ 起来以后就在网上闲逛，看了看《非诚勿扰》被整改的评论，小百合 BBS 上居然有不少人（可能甚至是大多数人）持赞同态度，让我心里着实郁闷了一把。其实韩寒对“69 圣战”的评论完全可以应用在此： “...不要以任何名义去驱逐任何一种文化，更不要想教训和消灭它的受众群体，无论是文化还是政治都不能排他，也不能代替别人做出选择，哪怕它很傻，哪怕它不合你的口味，只要它不反人类。” 有很多人担忧会污染青少年，天，我倒希望自己被早教会一点，而且，小孩子会喜欢看这类节目吗？还提到拜金主义、低俗、虚荣，我只能说，哈！大家都去看“做好事从不留名”的《雷锋的故事》吧。 然后，然后我就发现 Twitter 抽风了，扯淡都不能了，然后我就开始看一个叫做《泡沫之夏》的偶像剧，继续低俗。 因为我 fo 的人太少，忽然觉得可看的东西少了，于是就启用了 Buzz。在 Google Reader 看到订阅了很久的一个博主今天早上生了个姑娘，当爹的喜悦洋洋溢溢飘飘洒洒，连我都跟着高兴。不过想到这样一来他责任又重了几分，况且还要在北京把孩子抚养大，我又不知道该不该高兴了。 世界杯开始了。球赛我是爱看的，因为好歹我也踢过几年球，但因为关注得少，我总是记不住那些球星。我会为精彩的传球射门欢呼，也会为失去的机会遗憾，但我讲不出那漂亮的脚法是梅西还是贝利玩出来的，也记不住巴西还是法国上届世界杯进过多少球。所以我一般不讨论这个话题，也不掺和这类讨论。 南京这几天的天气还不错——至少在屋里感觉是这样。昨天下午我出了趟门，被淋得湿透，却还愤怒于找不到一个建设银行的提款机。易于愤怒是不成熟的表现，那么我认为至少在面对系统故障的时候，我是比较成熟了。当电脑诡异地当掉且手边没有任何工具盘时，我居然没有感觉气愤，而是想尽各种办法解决问题，事后还写了篇博客记录一番。 我的 D630 要给 xixi 了，然后把她的本要来给我妹，替换掉给她的那个台式机。这是为了资源的最优配置，最差的电脑给最不需要的人。我很惊奇于居然有博客的读者还记得我的笔记本型号，我想可能是与他用的型号相同吧。等入职后公司应该会配电脑，到时候如果能折腾的话，我还会继续写折腾的记录。 该吃饭了，先宅到这里吧。 您可能对这些感兴趣： 播客和其它 (8) - 每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人... 刻印记 (8) - 身为一个中国人，稍微对咱老祖宗的东西有那么点儿爱好的，怕都曾经念想过拥有一方刻着自己大名的篆书小印吧... 二零零八年五一 (5) - 上个月我居然发了 15 篇 blog，平均两天一篇，如此密集的发文，回顾一下真的堪比我当初郁闷那段日... 今天过生日 (0) - 今天19岁生日,心情很Happy我有预感我生命中这第20个年头应该是很幸运的一年所有的事情都在向好的... 我要一所大房子，有很大的落地窗户 [...]]]></description>
			<content:encoded><![CDATA[<p>其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，鞋子也是买亦可不买亦可的东西，带回北京反而比较累。</p>
<p>xixi 去改高考卷了，白天也没时间陪我。是我逼着她去的，因为我比较爱财，改卷子能赚不少钱呢，所以这是自作自受。不过等她离开了南大，这种机会也不会再有了。我忽然意识到今年江苏数学卷好像是传说中的“数学帝”出的，不过我不太相信，出高考卷子这种事，难道只赖一个人吗？</p>
<p>起来以后就在网上闲逛，看了看《非诚勿扰》被整改的评论，小百合 BBS 上居然有不少人（可能甚至是大多数人）持赞同态度，让我心里着实郁闷了一把。其实韩寒对“69 圣战”的评论完全可以应用在此：</p>
<blockquote><p>“...不要以任何名义去驱逐任何一种文化，更不要想教训和消灭它的受众群体，无论是文化还是政治都不能排他，也不能代替别人做出选择，哪怕它很傻，哪怕它不合你的口味，只要它不反人类。”</p></blockquote>
<p>有很多人担忧会污染青少年，天，我倒希望自己被早教会一点，而且，小孩子会喜欢看这类节目吗？还提到拜金主义、低俗、虚荣，我只能说，哈！大家都去看“做好事从不留名”的《雷锋的故事》吧。</p>
<p>然后，然后我就发现 Twitter 抽风了，扯淡都不能了，然后我就开始看一个叫做《泡沫之夏》的偶像剧，继续低俗。</p>
<p>因为我 fo 的人太少，忽然觉得可看的东西少了，于是就启用了 Buzz。在 Google Reader 看到订阅了很久的一个博主今天早上生了个姑娘，当爹的喜悦洋洋溢溢飘飘洒洒，连我都跟着高兴。不过想到这样一来他责任又重了几分，况且还要在北京把孩子抚养大，我又不知道该不该高兴了。</p>
<p>世界杯开始了。球赛我是爱看的，因为好歹我也踢过几年球，但因为关注得少，我总是记不住那些球星。我会为精彩的传球射门欢呼，也会为失去的机会遗憾，但我讲不出那漂亮的脚法是梅西还是贝利玩出来的，也记不住巴西还是法国上届世界杯进过多少球。所以我一般不讨论这个话题，也不掺和这类讨论。</p>
<p>南京这几天的天气还不错——至少在屋里感觉是这样。昨天下午我出了趟门，被淋得湿透，却还愤怒于找不到一个建设银行的提款机。易于愤怒是不成熟的表现，那么我认为至少在面对系统故障的时候，我是比较成熟了。当电脑诡异地当掉且手边没有任何工具盘时，我居然没有感觉气愤，而是想尽各种办法解决问题，事后还写了篇博客记录一番。</p>
<p>我的 D630 要给 xixi 了，然后把她的本要来给我妹，替换掉给她的那个台式机。这是为了资源的最优配置，最差的电脑给最不需要的人。我很惊奇于居然有博客的读者还记得我的笔记本型号，我想可能是与他用的型号相同吧。等入职后公司应该会配电脑，到时候如果能折腾的话，我还会继续写折腾的记录。</p>
<p>该吃饭了，先宅到这里吧。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</small></li>
<li><a href="http://blog.solrex.org/articles/chinese-stone-seal.html" title="刻印记">刻印记</a> <span class="count">(8)</span> - <small class="excerpt">身为一个中国人，稍微对咱老祖宗的东西有那么点儿爱好的，怕都曾经念想过拥有一方刻着自己大名的篆书小印吧...</small></li>
<li><a href="http://blog.solrex.org/articles/may-day-2008.html" title="二零零八年五一">二零零八年五一</a> <span class="count">(5)</span> - <small class="excerpt">上个月我居然发了 15 篇 blog，平均两天一篇，如此密集的发文，回顾一下真的堪比我当初郁闷那段日...</small></li>
<li><a href="http://blog.solrex.org/articles/today-is-my-birthday.html" title="今天过生日">今天过生日</a> <span class="count">(0)</span> - <small class="excerpt">今天19岁生日,心情很Happy我有预感我生命中这第20个年头应该是很幸运的一年所有的事情都在向好的...</small></li>
<li><a href="http://blog.solrex.org/articles/i-wanna-a-big-house.html" title="我要一所大房子，有很大的落地窗户">我要一所大房子，有很大的落地窗户</a> <span class="count">(6)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/sorry-i-am-busy.html" title="我为什么这么忙">我为什么这么忙</a> <span class="count">(16)</span> - <small class="excerpt">这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>删除 MBR 引发的诡异问题</title>
		<link>http://blog.solrex.org/articles/weird-mbr-problem.html</link>
		<comments>http://blog.solrex.org/articles/weird-mbr-problem.html#comments</comments>
		<pubDate>Mon, 14 Jun 2010 03:54:00 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[BCD]]></category>
		<category><![CDATA[MBR]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638841</guid>
		<description><![CDATA[我要跟女友交换一下笔记本电脑，她不常用 Linux，而我的 Ubuntu 分区占了好几十 G 空间，因此我想还是删了再给她吧。 我的电脑有两个系统：Windows Server 2008 和 Ubuntu 10.04。按照惯常的思维，删除 Ubuntu 只需要先格式化 MBR，然后删除 Ubuntu 分区即可。因为手头没有 DOS 启动盘，我想到一键恢复的硬盘版是带 DOS 工具的，就在 Windows 下装了个一键恢复硬盘版，然后进 DOS 命令行 “fdisk /mbr”。 可谁知道做完这些之后，MBR 是清掉了，但系统无法启动了，提示消息是这样的： Windows 未能将启动原因可能是最近更改了硬件或软件 文件：\Windows\system32\winload.exe 状态：0xc000000e 信息：无法加载所选项，因为应用程序丢失或损坏。 ... 然后我就傻眼了，从来没有遇到过这种情况呀！搜索了一番之后，才明白了这是什么意思。 Windows Vista 之后的系统，不再使用 boot.ini 保存启动菜单，而是使用一种叫做 BCD（Boot Configuration Data）机制来管理启动菜单，其默认的配置文件是活动分区（一般是 C:\）的 \Boot\BCD。简单的来说，可以将 \Boot\BCD 文件看成是 GRUB 的 menu.lst（grub.conf）文件，里面储存着系统装载程序的路径和参数等。 在我这里，出现上面问题的原因是 BCD 每项记录中的 device [...]]]></description>
			<content:encoded><![CDATA[<p>我要跟女友交换一下笔记本电脑，她不常用 Linux，而我的 Ubuntu 分区占了好几十 G 空间，因此我想还是删了再给她吧。</p>
<p>我的电脑有两个系统：Windows Server 2008 和 Ubuntu 10.04。按照惯常的思维，删除 Ubuntu 只需要先格式化 MBR，然后删除 Ubuntu 分区即可。因为手头没有 DOS 启动盘，我想到一键恢复的硬盘版是带 DOS 工具的，就在 Windows 下装了个一键恢复硬盘版，然后进 DOS 命令行 “fdisk /mbr”。</p>
<p>可谁知道做完这些之后，MBR 是清掉了，但系统无法启动了，提示消息是这样的：</p>
<blockquote><p>Windows 未能将启动原因可能是最近更改了硬件或软件<br />
文件：\Windows\system32\winload.exe<br />
状态：0xc000000e<br />
信息：无法加载所选项，因为应用程序丢失或损坏。<br />
...
</p></blockquote>
<p>然后我就傻眼了，从来没有遇到过这种情况呀！搜索了一番之后，才明白了这是什么意思。</p>
<p>Windows Vista 之后的系统，不再使用 boot.ini 保存启动菜单，而是使用一种叫做 BCD（Boot Configuration Data）机制来管理启动菜单，其默认的配置文件是活动分区（一般是 C:\）的 \Boot\BCD。简单的来说，可以将 \Boot\BCD 文件看成是 GRUB 的 menu.lst（grub.conf）文件，里面储存着系统装载程序的路径和参数等。</p>
<p>在我这里，出现上面问题的原因是 BCD 每项记录中的 device 选项被“一键恢复硬盘版”改成了 unknown，这样启动程序不知道到哪里去找系统的装载程序，自然也就无法启动了。使用 bcdedit /store C:\Boot\BCD 可以查看系统的 BCD 每项记录。（较为诡异的是，在没有删除 MBR 之前，我是如何进入到启动项里的？）</p>
<p>我用的解决方法是把所有默认启动项中的 unknown 改成了 boot。还得依靠工具，使用 WinPE U 盘（DOS 启动盘未尝试）启动，进入 C:\Windows\System32\，执行 bcdedit 命令：</p>
<blockquote><p>bcdedit /store C:\Boot\BCD /set {default} osdevice boot<br />
bcdedit /store C:\Boot\BCD /set {default} device boot<br />
bcdedit /store C:\Boot\BCD /set {default} detecthal 1</p></blockquote>
<p>然后就可以启动进入 Windows 了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/my-thought-of-piraterie.html" title="我的一些关于盗版的观点">我的一些关于盗版的观点</a> <span class="count">(8)</span> - <small class="excerpt">前段时间我写了篇 扔掉你 Windows 操作系统中的盗版软件吧 的博客文章，那是因为我不得不使用 ...</small></li>
<li><a href="http://blog.solrex.org/articles/on-coolsip.html" title="谈谈 CoolSIP">谈谈 CoolSIP</a> <span class="count">(7)</span> - <small class="excerpt">说明：本文有一些内容是基于本人的合理猜测。如果您知道更多细节，请不吝指出，但最好请提供事实依据，而不...</small></li>
<li><a href="http://blog.solrex.org/articles/a-chance-for-linux-and-freeware.html" title="A Chance For Linux and Freeware">A Chance For Linux and Freeware</a> <span class="count">(9)</span> - <small class="excerpt">连着忙了几天，今天闲话几句。关于微软正版验证我家希希说：“我要被黑屏了，怎么办呀？我要学 Linux...</small></li>
<li><a href="http://blog.solrex.org/articles/a-windows-sniffer-based-on-winpcap.html" title="基于 WinPcap 的一个嗅探器 Windows">基于 WinPcap 的一个嗅探器 Windows</a> <span class="count">(2)</span> - <small class="excerpt">这几天相当之忙，好多事情要做，每天都要熬很晚，觉得都有点儿在崩溃的边缘了。才写完一个大作业，Wind...</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>
<li><a href="http://blog.solrex.org/articles/go-on-study.html" title="要学习呵">要学习呵</a> <span class="count">(0)</span> - <small class="excerpt">写了两天论文，关于自行车的平衡原理问题，没想到一个小小的自行车居然还有那么多物理原理，而且更没想到的...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/weird-mbr-problem.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>南京一樽牛排</title>
		<link>http://blog.solrex.org/articles/yizun-steak-nanjing.html</link>
		<comments>http://blog.solrex.org/articles/yizun-steak-nanjing.html#comments</comments>
		<pubDate>Fri, 11 Jun 2010 14:28:47 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Status]]></category>
		<category><![CDATA[Steak]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638837</guid>
		<description><![CDATA[在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有更新博客。虽然也不是忙得没有空闲，但空闲时也没有心情来写字。体验过中国官僚制度的同学们应该都知道，跑手续是一件多么繁琐累人的事情。 到目前为止，琐事基本上告了一个段落，已经通过答辩，各项材料等都提交了上去。下面只需要办离校手续和等待发放毕业证和学位证。据说中科院的学位证一般是在七月中旬发放，唉，这样一来只能暂时拿大半个月的实习工资了。 我在西二旗的智学苑小区租了间房子，大部分东西已经搬了过去，我也准备定居在那里了。如果有朋友也同样住智学苑的，以后不妨结识一下 趁着入职前的这段空闲，我请了一周的假。 今天早上到的南京，中午女朋友带我去吃垂涎已久的一樽牛排。牛排的味道很不错，还搭配饮料、汤、面包等，加上自助水果，尤其是南大学生可以打六折，这样就让它显得超值了。而且，女朋友说我运气真好，这次的牛排、果汁、水果都是她吃过量最足的。 晚上蹭了一顿南大数学系研究生的毕业聚餐。 世界杯开始了。 您可能对这些感兴趣： 我要一所大房子，有很大的落地窗户 (6) - 我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一... 我为什么这么忙 (16) - 这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村... 宅并低俗着 (11) - 其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，... 又想念南京了 (6) - 今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心... 播客和其它 (8) - 每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人... 又是一年元宵时 (15) - 今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...]]></description>
			<content:encoded><![CDATA[<p>在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有更新博客。虽然也不是忙得没有空闲，但空闲时也没有心情来写字。体验过中国官僚制度的同学们应该都知道，跑手续是一件多么繁琐累人的事情。</p>
<p>到目前为止，琐事基本上告了一个段落，已经通过答辩，各项材料等都提交了上去。下面只需要办离校手续和等待发放毕业证和学位证。据说中科院的学位证一般是在七月中旬发放，唉，这样一来只能暂时拿大半个月的实习工资了。</p>
<p>我在西二旗的智学苑小区租了间房子，大部分东西已经搬了过去，我也准备定居在那里了。如果有朋友也同样住智学苑的，以后不妨结识一下 <img src='http://blog.solrex.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>趁着入职前的这段空闲，我请了一周的假。</p>
<p>今天早上到的南京，中午女朋友带我去吃垂涎已久的一樽牛排。牛排的味道很不错，还搭配饮料、汤、面包等，加上自助水果，尤其是南大学生可以打六折，这样就让它显得超值了。而且，女朋友说我运气真好，这次的牛排、果汁、水果都是她吃过量最足的。</p>
<p>晚上蹭了一顿南大数学系研究生的毕业聚餐。</p>
<p>世界杯开始了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/i-wanna-a-big-house.html" title="我要一所大房子，有很大的落地窗户">我要一所大房子，有很大的落地窗户</a> <span class="count">(6)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/sorry-i-am-busy.html" title="我为什么这么忙">我为什么这么忙</a> <span class="count">(16)</span> - <small class="excerpt">这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村...</small></li>
<li><a href="http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html" title="宅并低俗着">宅并低俗着</a> <span class="count">(11)</span> - <small class="excerpt">其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...</small></li>
<li><a href="http://blog.solrex.org/articles/miss-nanjing-again.html" title="又想念南京了">又想念南京了</a> <span class="count">(6)</span> - <small class="excerpt">今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(15)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/yizun-steak-nanjing.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>向费师兄家属捐款事宜</title>
		<link>http://blog.solrex.org/articles/donate-to-feis-family.html</link>
		<comments>http://blog.solrex.org/articles/donate-to-feis-family.html#comments</comments>
		<pubDate>Tue, 18 May 2010 15:10:26 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Social Responsibility]]></category>
		<category><![CDATA[Donation]]></category>
		<category><![CDATA[NJU]]></category>
		<category><![CDATA[Suicide]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638830</guid>
		<description><![CDATA[不了解此事件的，参见这个链接。 消息来源：南大数学 02 级原年级长博客 关于向费存林同学捐款的办法，国内，请发信至 dean1873@gmail.com 获鼎处了解账号的相关信息，为了安全起见，不公布账号。 北美的同学，请寄支票到我处 139 Running Farm LN Apt 104 Stanford CA 94305 支票寄出后，请给我电话确认。 捐款会在 6 月底结束。 本来我没想转发这个捐款的消息，但是我今天遇到一个和我联系的陌生朋友居然也认识费师兄。我想也许有一些有心想帮助费师兄家人的同学和朋友不能从 gookbaby 博客上了解这个信息，所以在这里我算尽一份自己的力量吧。 您可能对这些感兴趣： 南京大学学位论文 LaTeX 模板 (10) - 由于女朋友要写毕业论文，一些前人写的模板我不熟悉，并且摘要格式好像都不符合南京大学研究生院要求，所以... 惊闻一师兄轻生 (9) - 昨天下午我在忙着提交答辩申请书的时候，忽然听到有人说我们宿舍楼有一个师兄跳楼自杀了。当时惋惜了一会儿... 小百合帐号归隐江湖 (9) - 这是一个很有趣又疯狂的世界，比如说忽然有一天，你发现你经常浏览的网站不能访问了，忽然有一天，你发现很... 南京大学106岁生日 (4) - 今天是南京大学的 106 周年校庆纪念日，虽然我已经离开了南大，还是要写一篇小文祝福我的母校。翻出了... 晴朗的一天 (0) - 一会儿晴一会儿阴，怪怪的天气持续好几天了，不像秋冬时候的北京，几乎滴水不沾。据说南京也下了好大雨，校... 现在，外面在下雨 (0) - 这次要写点轻松的话题，人生总还是快乐点的好。今天算了一下今年的生日，居然阳历和阴历生日是同一天，很幸...]]></description>
			<content:encoded><![CDATA[<p>不了解此事件的，参见<a href="articles/suicide-shocked.html">这个链接</a>。</p>
<p>消息来源：<a href="http://gookbaby.spaces.live.com/Blog/cns!946A0011558DEAC4!1755.entry">南大数学 02 级原年级长博客</a></p>
<blockquote><p>关于向费存林同学捐款的办法，国内，请发信至 <a href="to:dean1873@gmail.com">dean1873@gmail.com</a> 获鼎处了解账号的相关信息，为了安全起见，不公布账号。</p>
<p>北美的同学，请寄支票到我处<br />
139 Running Farm LN<br />
Apt 104<br />
Stanford CA 94305</p>
<p>支票寄出后，请给我电话确认。</p></blockquote>
<p>捐款会在 6 月底结束。</p>
<p>本来我没想转发这个捐款的消息，但是我今天遇到一个和我联系的陌生朋友居然也认识费师兄。我想也许有一些有心想帮助费师兄家人的同学和朋友不能从 gookbaby 博客上了解这个信息，所以在这里我算尽一份自己的力量吧。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/latex-thesis-template-of-nanjing-university.html" title="南京大学学位论文 LaTeX 模板">南京大学学位论文 LaTeX 模板</a> <span class="count">(10)</span> - <small class="excerpt">由于女朋友要写毕业论文，一些前人写的模板我不熟悉，并且摘要格式好像都不符合南京大学研究生院要求，所以...</small></li>
<li><a href="http://blog.solrex.org/articles/suicide-shocked.html" title="惊闻一师兄轻生">惊闻一师兄轻生</a> <span class="count">(9)</span> - <small class="excerpt">昨天下午我在忙着提交答辩申请书的时候，忽然听到有人说我们宿舍楼有一个师兄跳楼自杀了。当时惋惜了一会儿...</small></li>
<li><a href="http://blog.solrex.org/articles/lilybbs-account-disabled.html" title="小百合帐号归隐江湖">小百合帐号归隐江湖</a> <span class="count">(9)</span> - <small class="excerpt">这是一个很有趣又疯狂的世界，比如说忽然有一天，你发现你经常浏览的网站不能访问了，忽然有一天，你发现很...</small></li>
<li><a href="http://blog.solrex.org/articles/106th-anniversary-of-nanjing-university.html" title="南京大学106岁生日">南京大学106岁生日</a> <span class="count">(4)</span> - <small class="excerpt">今天是南京大学的 106 周年校庆纪念日，虽然我已经离开了南大，还是要写一篇小文祝福我的母校。翻出了...</small></li>
<li><a href="http://blog.solrex.org/articles/a-sunny-day.html" title="晴朗的一天">晴朗的一天</a> <span class="count">(0)</span> - <small class="excerpt">一会儿晴一会儿阴，怪怪的天气持续好几天了，不像秋冬时候的北京，几乎滴水不沾。据说南京也下了好大雨，校...</small></li>
<li><a href="http://blog.solrex.org/articles/raining-outside.html" title="现在，外面在下雨">现在，外面在下雨</a> <span class="count">(0)</span> - <small class="excerpt">这次要写点轻松的话题，人生总还是快乐点的好。今天算了一下今年的生日，居然阳历和阴历生日是同一天，很幸...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/donate-to-feis-family.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>南京大学学位论文 LaTeX 模板</title>
		<link>http://blog.solrex.org/articles/latex-thesis-template-of-nanjing-university.html</link>
		<comments>http://blog.solrex.org/articles/latex-thesis-template-of-nanjing-university.html#comments</comments>
		<pubDate>Sun, 09 May 2010 13:26:35 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[NJU]]></category>
		<category><![CDATA[NJUthesis]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[Thesis]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638822</guid>
		<description><![CDATA[由于女朋友要写毕业论文，一些前人写的模板我不熟悉，并且摘要格式好像都不符合南京大学研究生院要求，所以我就在中科院学位论文模板的基础上给她改了一个南大研究生学位论文 LaTeX 模板。主要工作是将封面和摘要格式都改成符合南大研究生院给的样张格式，实话说，花了不少工夫。 既然模板都已经写好，后来我干脆又完善了一下，添加了博士毕业论文需要的国家图书馆论文封面。这样大概可以作为一个完整的，包含硕士和博士毕业论文格式的南大研究生学位论文 LaTeX 模板包，我将这个 LaTeX 模板释出在下面这个地址： http://share.solrex.org/njuthesis/，或者Google Code页：http://njuthesis.googlecode.com/ 下面是一个 flash 的预览： http://share.solrex.org/njuthesis/template-preview.swf。 有需要的同学可以去下载，最起码可以作为一个修改的基础，希望这些工作能够对别人有所助益。我会尽量地维护这个模板，所以如果有哪位校友觉得有不完善的地方，可以和我联系，我会修正相应的缺点。 您可能对这些感兴趣： 一些论文相关 LaTeX 技巧 (6) - 最近在写毕业论文，记录一下使用 LaTeX 排版时的一些笔记：1. 正文英文使用 Times * 字... 向费师兄家属捐款事宜 (1) - 不了解此事件的，参见这个链接。消息来源：南大数学 02 级原年级长博客关于向费存林同学捐款的办法，国... 字符串参数的模板函数推导问题（续） (0) - 前面一篇文章我们讨论了字符串作为参数的模板函数推导问题，下面我们看一下使用不同字符串参数类型对模板函... 字符串参数的模板函数推导问题 (1) - 国庆长假期间又翻了翻 《C++ Primer》，看到模板函数特化，就想起来以前遇到的一个问题。这个问... 小百合帐号归隐江湖 (9) - 这是一个很有趣又疯狂的世界，比如说忽然有一天，你发现你经常浏览的网站不能访问了，忽然有一天，你发现很... The Gold Old Tools: Pic and Chem [...]]]></description>
			<content:encoded><![CDATA[<p>由于女朋友要写毕业论文，一些前人写的模板我不熟悉，并且摘要格式好像都不符合南京大学研究生院要求，所以我就在中科院学位论文模板的基础上给她改了一个南大研究生学位论文 LaTeX 模板。主要工作是将封面和摘要格式都改成符合南大研究生院给的样张格式，实话说，花了不少工夫。</p>
<p>既然模板都已经写好，后来我干脆又完善了一下，添加了博士毕业论文需要的国家图书馆论文封面。这样大概可以作为一个完整的，包含硕士和博士毕业论文格式的南大研究生学位论文 LaTeX 模板包，我将这个 LaTeX 模板释出在下面这个地址：<br />
<a href="http://share.solrex.org/njuthesis/">http://share.solrex.org/njuthesis/</a>，或者Google Code页：<a href="http://njuthesis.googlecode.com/">http://njuthesis.googlecode.com/</a><br />
下面是一个 flash 的预览：<br />
<a href="http://share.solrex.org/njuthesis/template-preview.swf">http://share.solrex.org/njuthesis/template-preview.swf</a>。</p>
<p>有需要的同学可以去下载，最起码可以作为一个修改的基础，希望这些工作能够对别人有所助益。我会尽量地维护这个模板，所以如果有哪位校友觉得有不完善的地方，可以和我联系，我会修正相应的缺点。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/latex-tips-2010-04.html" title="一些论文相关 LaTeX 技巧">一些论文相关 LaTeX 技巧</a> <span class="count">(6)</span> - <small class="excerpt">最近在写毕业论文，记录一下使用 LaTeX 排版时的一些笔记：1. 正文英文使用 Times * 字...</small></li>
<li><a href="http://blog.solrex.org/articles/donate-to-feis-family.html" title="向费师兄家属捐款事宜">向费师兄家属捐款事宜</a> <span class="count">(1)</span> - <small class="excerpt">不了解此事件的，参见这个链接。消息来源：南大数学 02 级原年级长博客关于向费存林同学捐款的办法，国...</small></li>
<li><a href="http://blog.solrex.org/articles/string-literal-argument-and-template-function-deduction-ext.html" title="字符串参数的模板函数推导问题（续）">字符串参数的模板函数推导问题（续）</a> <span class="count">(0)</span> - <small class="excerpt">前面一篇文章我们讨论了字符串作为参数的模板函数推导问题，下面我们看一下使用不同字符串参数类型对模板函...</small></li>
<li><a href="http://blog.solrex.org/articles/string-literal-argument-and-template-function-deduction.html" title="字符串参数的模板函数推导问题">字符串参数的模板函数推导问题</a> <span class="count">(1)</span> - <small class="excerpt">国庆长假期间又翻了翻 《C++ Primer》，看到模板函数特化，就想起来以前遇到的一个问题。这个问...</small></li>
<li><a href="http://blog.solrex.org/articles/lilybbs-account-disabled.html" title="小百合帐号归隐江湖">小百合帐号归隐江湖</a> <span class="count">(9)</span> - <small class="excerpt">这是一个很有趣又疯狂的世界，比如说忽然有一天，你发现你经常浏览的网站不能访问了，忽然有一天，你发现很...</small></li>
<li><a href="http://blog.solrex.org/articles/the-gold-old-tools-pic-and-chem.html" title="The Gold Old Tools: Pic and Chem">The Gold Old Tools: Pic and Chem</a> <span class="count">(6)</span> - <small class="excerpt">我本来只想写一下 pic 这个小工具，因为很少有中文资料介绍其用法。但是写下来没想到一个小软件联系到...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/latex-thesis-template-of-nanjing-university.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>初次尝试网上冲印</title>
		<link>http://blog.solrex.org/articles/try-online-photo-printing.html</link>
		<comments>http://blog.solrex.org/articles/try-online-photo-printing.html#comments</comments>
		<pubDate>Fri, 23 Apr 2010 06:12:07 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[eCommercial]]></category>
		<category><![CDATA[Online]]></category>
		<category><![CDATA[Photo Printing]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638813</guid>
		<description><![CDATA[由于数码照片很普及，好久没有冲印照片的需求了。最近临近毕业，各种乱七八糟的申请表都需要一些证件照片，于是一寸照片就给用完了。 为图省事，我手头上有之前一张一寸照片的数码底板，而且觉得那张相片照得还不错，就想着再多冲洗几张算了。谁知道到附近的照相馆一问，一版一寸照片需要五块钱一张，而且还要第二天取，我怎么算都觉得不值。想起来惠普喀嚓鱼曾经有过免费洗照片的优惠，算上运费应该也不比这贵，于是就干脆回来网上冲印算了。 回来先上网调研了一下，网上冲印看起来比较靠谱的有两家：惠普喀嚓鱼和网易印象派。比较了一下价格：单张照片网易印象派要便宜一些，6寸的照片，富士相纸 0.45 元一张，柯达相纸 0.6 元一张；考虑到运费和促销，惠普喀嚓鱼要便宜一些，喀嚓鱼开头免费送 10 张（首页上常年挂的免费 20 张是骗人的），超过 30 张运费就是 5 块而印象派的运费都是 8 块。 由于以前在卓越买东西喀嚓鱼老给我发优惠券，虽然一张都没来得及用，我想还是先试试它家的服务吧。为了凑齐 30 张省 5 块钱运费，我就拾掇拾掇把以前拍的一些照片觉得好的也拿出来洗了，总共凑了 33 张，算上运费是 18.8 元，平均每张合到 0.57 元。 我是 2010 年 4 月 21 日晚上 10 点左右下的单，22 日下午 5 点多通知我处理完成，23 日也就是今天中午 12 点多收到的照片。38 个小时，从这个速度来看，是相当快的了。 照片的包装是铜板纸袋外面套一层塑料封套，里面除了照片之外还有两张广告。照片用的是富士相纸，当时可选光面和磨砂的，我选的是光面的。总的来看觉得冲洗的效果很不错，我想这种成天大批量冲洗的网站，师傅手艺应该不会比一般照相馆差。 总之这次尝试让我觉得挺满意，以后有数码照片不用再专门跑照相馆去洗了。由于网上冲印又便宜又方便，看来以后实体冲洗店免不了遭受和实体书店相同的冲击。 您可能对这些感兴趣： 我的京东换货经历 (3) - 在京东上也买过不少东西，这两天第一次体验了京东的售后客服，如实记录一下经历：2010 年 4 月 2...]]></description>
			<content:encoded><![CDATA[<p>由于数码照片很普及，好久没有冲印照片的需求了。最近临近毕业，各种乱七八糟的申请表都需要一些证件照片，于是一寸照片就给用完了。</p>
<p>为图省事，我手头上有之前一张一寸照片的数码底板，而且觉得那张相片照得还不错，就想着再多冲洗几张算了。谁知道到附近的照相馆一问，一版一寸照片需要五块钱一张，而且还要第二天取，我怎么算都觉得不值。想起来<a href="http://www.kachayu.com/">惠普喀嚓鱼</a>曾经有过免费洗照片的优惠，算上运费应该也不比这贵，于是就干脆回来网上冲印算了。</p>
<p>回来先上网调研了一下，网上冲印看起来比较靠谱的有两家：<a href="http://www.kachayu.com/">惠普喀嚓鱼</a>和<a href="http://yxp.163.com">网易印象派</a>。比较了一下价格：单张照片网易印象派要便宜一些，6寸的照片，富士相纸 0.45 元一张，柯达相纸 0.6 元一张；考虑到运费和促销，惠普喀嚓鱼要便宜一些，喀嚓鱼开头免费送 10 张（首页上常年挂的免费 20 张是骗人的），超过 30 张运费就是 5 块而印象派的运费都是 8 块。</p>
<p>由于以前在卓越买东西喀嚓鱼老给我发优惠券，虽然一张都没来得及用，我想还是先试试它家的服务吧。为了凑齐 30 张省 5 块钱运费，我就拾掇拾掇把以前拍的一些照片觉得好的也拿出来洗了，总共凑了 33 张，算上运费是 18.8 元，平均每张合到 0.57 元。</p>
<p>我是 2010 年 4 月 21 日晚上 10 点左右下的单，22 日下午 5 点多通知我处理完成，23 日也就是今天中午 12 点多收到的照片。38 个小时，从这个速度来看，是相当快的了。</p>
<p>照片的包装是铜板纸袋外面套一层塑料封套，里面除了照片之外还有两张广告。照片用的是富士相纸，当时可选光面和磨砂的，我选的是光面的。总的来看觉得冲洗的效果很不错，我想这种成天大批量冲洗的网站，师傅手艺应该不会比一般照相馆差。</p>
<p>总之这次尝试让我觉得挺满意，以后有数码照片不用再专门跑照相馆去洗了。由于网上冲印又便宜又方便，看来以后实体冲洗店免不了遭受和实体书店相同的冲击。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/warranty-service-of-360buy-com.html" title="我的京东换货经历">我的京东换货经历</a> <span class="count">(3)</span> - <small class="excerpt">在京东上也买过不少东西，这两天第一次体验了京东的售后客服，如实记录一下经历：2010 年 4 月 2...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/try-online-photo-printing.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>惊闻一师兄轻生</title>
		<link>http://blog.solrex.org/articles/suicide-shocked.html</link>
		<comments>http://blog.solrex.org/articles/suicide-shocked.html#comments</comments>
		<pubDate>Wed, 21 Apr 2010 09:22:18 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Memory]]></category>
		<category><![CDATA[Social Responsibility]]></category>
		<category><![CDATA[Death]]></category>
		<category><![CDATA[Suicide]]></category>
		<category><![CDATA[Terrible news]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638810</guid>
		<description><![CDATA[昨天下午我在忙着提交答辩申请书的时候，忽然听到有人说我们宿舍楼有一个师兄跳楼自杀了。当时惋惜了一会儿，心想恐怕又是哪个心理变态的导师给逼的。 今天去打篮球的路上，忽然接到获鼎师兄的电话，问我知道费存林师兄吗？我当时没反应过来，说见过一面但是对不上号。获鼎问我知道不知道昨天发生的事，我才忽然被震惊了——昨天自杀的师兄姓费！ 多方找人询问，了解到真的是在南大数学系时高我一届的师兄。我刚来中科院的时候，这上一届的师兄还一起请过我们吃饭，唉！ 其实我很能理解费师兄的压力，中科院这种地方就是惟科研至上的地方，你发不出论文，想不出 idea，在导师眼里你就是一无能的废物，而且不能正常毕业给他丢脸。在我没有论文的时候，天天都似有一块大石压在我的心头。最苦闷的时候我脑中也曾飘过轻生的想法，但幸好还有那么多关心我的人让我觉得这个世界还有很多温情，不像毕业条例那么冷酷。 费师兄才博士二年级，按理说不是最敏感的时候，毕竟还有一年。而且这里四年五年毕业的也不是没有，三年毕业反而显得有点儿反常。但是我想费师兄一定面临着我们想象不到的压力，才会做出这样的举动。 无论如何，我对师兄的离去表示哀悼，并祝福他在天堂安息！ 我将看看能否给他的家人提供什么力所能及的帮助。其实受损失最大的是他的亲人们，好好的一个孩子就这么没了，恐怕他们很难接受。 您可能对这些感兴趣： 向费师兄家属捐款事宜 (1) - 不了解此事件的，参见这个链接。消息来源：南大数学 02 级原年级长博客关于向费存林同学捐款的办法，国... 又是一年元宵时 (15) - 今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前... 为求职事谢诸君 (21) - 我没有料到我的求职之路会那么快地结束，但事实就是如此。虽然具体细节不能泄露，我想未来雇主的名字还是可... 长假之购物 (6) - 一般情况下，我攒了几篇技术文章之后，都会来篇生活相关的文章冲一冲，不然我生活中的朋友都不愿意来我的博... 毛毛生日 (0) - 认真地自习了一天，看数值和偏微，累得很。然后回来早了点，今天毛毛生日，太久不见面了，得打个电话。都忙... 夕阳 (0) - 这是一个匆忙的时代。成天忙忙碌碌，庸庸碌碌，却不知道在奔着什么。很少停下来想想，其实就算想了也未必能...]]></description>
			<content:encoded><![CDATA[<p>昨天下午我在忙着提交答辩申请书的时候，忽然听到有人说我们宿舍楼有一个师兄跳楼自杀了。当时惋惜了一会儿，心想恐怕又是哪个心理变态的导师给逼的。</p>
<p>今天去打篮球的路上，忽然接到获鼎师兄的电话，问我知道费存林师兄吗？我当时没反应过来，说见过一面但是对不上号。获鼎问我知道不知道昨天发生的事，我才忽然被震惊了——昨天自杀的师兄姓费！</p>
<p>多方找人询问，了解到真的是在南大数学系时高我一届的师兄。我刚来中科院的时候，这上一届的师兄还一起请过我们吃饭，唉！</p>
<p>其实我很能理解费师兄的压力，中科院这种地方就是惟科研至上的地方，你发不出论文，想不出 idea，在导师眼里你就是一无能的废物，而且不能正常毕业给他丢脸。在我没有论文的时候，天天都似有一块大石压在我的心头。最苦闷的时候我脑中也曾飘过轻生的想法，但幸好还有那么多关心我的人让我觉得这个世界还有很多温情，不像毕业条例那么冷酷。</p>
<p>费师兄才博士二年级，按理说不是最敏感的时候，毕竟还有一年。而且这里四年五年毕业的也不是没有，三年毕业反而显得有点儿反常。但是我想费师兄一定面临着我们想象不到的压力，才会做出这样的举动。</p>
<p>无论如何，我对师兄的离去表示哀悼，并祝福他在天堂安息！</p>
<p>我将看看能否给他的家人提供什么力所能及的帮助。其实受损失最大的是他的亲人们，好好的一个孩子就这么没了，恐怕他们很难接受。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/donate-to-feis-family.html" title="向费师兄家属捐款事宜">向费师兄家属捐款事宜</a> <span class="count">(1)</span> - <small class="excerpt">不了解此事件的，参见这个链接。消息来源：南大数学 02 级原年级长博客关于向费存林同学捐款的办法，国...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-shangyuanjie.html" title="又是一年元宵时">又是一年元宵时</a> <span class="count">(15)</span> - <small class="excerpt">今天早上，我做了个梦，梦见我爸爸躺在床上，瘦得皮包骨头。在我印象里，他这是从远方治病回来了。我走上前...</small></li>
<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/yujie-birthday.html" title="毛毛生日">毛毛生日</a> <span class="count">(0)</span> - <small class="excerpt">认真地自习了一天，看数值和偏微，累得很。然后回来早了点，今天毛毛生日，太久不见面了，得打个电话。都忙...</small></li>
<li><a href="http://blog.solrex.org/articles/the-setting-sun.html" title="夕阳">夕阳</a> <span class="count">(0)</span> - <small class="excerpt">这是一个匆忙的时代。成天忙忙碌碌，庸庸碌碌，却不知道在奔着什么。很少停下来想想，其实就算想了也未必能...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/suicide-shocked.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>支持多浏览器的网站变灰方法</title>
		<link>http://blog.solrex.org/articles/grayscale-method-for-firefox-chrome-and-ie.html</link>
		<comments>http://blog.solrex.org/articles/grayscale-method-for-firefox-chrome-and-ie.html#comments</comments>
		<pubDate>Tue, 20 Apr 2010 18:06:06 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Responsibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Grayscale]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638804</guid>
		<description><![CDATA[这篇文章中给出了针对 IE 浏览器的使网站变灰的方法，具体做法是在 CSS 文件的开头添加这样一行： html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); } 但是很遗憾这种方法并不能支持 Firefox 和 Chrome。这篇博客介绍一种支持各种浏览器的网站变灰方法，试验其支持 Firefox、Chrome 和 IE，据说可以支持 Opera（未测试），方法比较简单，就直接介绍步骤了。 1. 到这里下载 grayscale.js 文件到你网站的根目录（或者也可以不下载，直接引入该 js，未测试）。 2. 在网站的 footer 或者 header 等全局的文件中插入以下代码（注意，$() 和 .load handler需要 jquery.js 的支持，不使用 jquery 的同学可以自行搜索解决标签查找和 window onload 事件处理问题，例如这里和这里）： &#60;script type=&#34;text/javascript&#34; src=&#34;/grayscale.js&#34;&#62;&#60;/script&#62; &#60;script type=&#34;text/javascript&#34;&#62; $(window).load(function () { &#160; grayscale( $(&#39;body&#39;) ); }); &#60;/script&#62; 该方法的缺点是： 1. 页面加载完后才对整个页面进行变灰操作； [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eggone.net/national-mourning-day-and-the-wordpress-grayed-out-tutorial-site.html">这篇文章</a>中给出了针对 IE 浏览器的使网站变灰的方法，具体做法是在 CSS 文件的开头添加这样一行：</p>
<blockquote><p>html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }</p></blockquote>
<p>但是很遗憾这种方法并不能支持 Firefox 和 Chrome。这篇博客介绍一种支持各种浏览器的网站变灰方法，试验其支持 Firefox、Chrome 和 IE，据说可以支持 Opera（未测试），方法比较简单，就直接介绍步骤了。</p>
<p>1. 到<a href="http://james.padolsey.com/demos/grayscale/">这里</a>下载 <a href="http://james.padolsey.com/demos/grayscale/grayscale.js">grayscale.js</a> 文件到你网站的根目录（或者也可以不下载，直接引入该 js，未测试）。</p>
<p>2. 在网站的 footer 或者 header 等全局的文件中插入以下代码（注意，$() 和 .load handler需要 jquery.js 的支持，不使用 jquery 的同学可以自行搜索解决标签查找和 window onload 事件处理问题，例如<a href="https://developer.mozilla.org/En/DOM/Document.getElementsByTagName">这里</a>和<a href="http://scriptasylum.com/tutorials/pageevents.html">这里</a>）：</p>
<blockquote><p><span style="color: rgb(32, 32, 32); ">&lt;</span><span style="color: rgb(32, 32, 32); ">script</span> <span style="color: rgb(32, 32, 32); ">type</span><span style="color: rgb(32, 32, 32); ">=</span><span style="color: rgb(64, 112, 160); ">&quot;text/javascript&quot;</span> <span style="color: rgb(32, 32, 32); ">src</span><span style="color: rgb(32, 32, 32); ">=</span><span style="color: rgb(64, 112, 160); ">&quot;/grayscale.js&quot;</span><span style="color: rgb(32, 32, 32); ">&gt;&lt;</span><span style="color: rgb(32, 32, 32); ">/script&gt;</span><br />
<span style="color: rgb(32, 32, 32); ">&lt;</span><span style="color: rgb(32, 32, 32); ">script</span> <span style="color: rgb(32, 32, 32); ">type</span><span style="color: rgb(32, 32, 32); ">=</span><span style="color: rgb(64, 112, 160); ">&quot;text/javascript&quot;</span><span style="color: rgb(32, 32, 32); ">&gt;</span><br />
<span style="color: rgb(32, 32, 32); ">$</span>(<span style="color: rgb(76, 143, 47); font-weight: bold; ">window</span><span style="color: rgb(32, 32, 32); ">).</span><span style="color: rgb(32, 32, 32); ">load</span>(<span style="color: rgb(0, 112, 32); font-weight: bold; ">function</span> () <span style="color: rgb(32, 32, 32); ">{</span><br />
&nbsp; <span style="color: rgb(32, 32, 32); ">grayscale</span>( <span style="color: rgb(32, 32, 32); ">$</span>(<span style="color: rgb(64, 112, 160); ">&#39;body&#39;</span>) );<br />
<span style="color: rgb(32, 32, 32); ">});</span><br />
<span style="color: rgb(32, 32, 32); ">&lt;</span><span style="color: rgb(32, 32, 32); ">/script&gt;</span>
</p></blockquote>
<p>该方法的缺点是：</p>
<p>1. 页面加载完后才对整个页面进行变灰操作；<br />
2. 在非 IE 浏览器中不支持来自其它域名的网站图片的变灰；<br />
3. 造成非 IE 浏览器在加载完页面后进行大量 js 计算，该计算负担可以通过仅变灰 img, a 等标签而不是 body 来优化。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/remote-dns-lookup.html" title="关于 SOCKS 代理的远端 DNS 解析">关于 SOCKS 代理的远端 DNS 解析</a> <span class="count">(18)</span> - <small class="excerpt">经常使用 SOCKS 代理服务器的同志们会发现一种现象，即使 SOCKS 代理服务器设置正确，某些网...</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/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>
<li><a href="http://blog.solrex.org/articles/blogroll-and-blogad-powered-by-google-reader.html" title="用 Google Reader 生成 Blogroll(侧栏链接列表) 和博客推介广告">用 Google Reader 生成 Blogroll(侧栏链接列表) 和博客推介广告</a> <span class="count">(8)</span> - <small class="excerpt">我一直认为 Google Reader 是最好的在线博客阅读器，但是它的功能不仅仅是博客阅读器，下面...</small></li>
<li><a href="http://blog.solrex.org/articles/tor-anonymity-on-line.html" title="Tor &#8211; Anonymity on Line">Tor &#8211; Anonymity on Line</a> <span class="count">(2)</span> - <small class="excerpt">其实以前就见过 Baosheng 在博客里推荐 Tor 这个工具，据说可以访问 Wikipedia，...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/grayscale-method-for-firefox-chrome-and-ie.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一些论文相关 LaTeX 技巧</title>
		<link>http://blog.solrex.org/articles/latex-tips-2010-04.html</link>
		<comments>http://blog.solrex.org/articles/latex-tips-2010-04.html#comments</comments>
		<pubDate>Wed, 14 Apr 2010 09:14:40 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638737</guid>
		<description><![CDATA[最近在写毕业论文，记录一下使用 LaTeX 排版时的一些笔记： 1. 正文英文使用 Times * 字体： \usepackage{times} 2. 自定义列表样式 \usepackage{enumitem} % 例：缩略语列表，缩略语大写，全称左侧缩进对齐 \begin{description}[font=\textbf, labelindent=2em, leftmargin=6em, style=sameline] \item[CA] Central Authority. \end{description} % 例：列表标签使用 *) + 元素中段落首行缩进 \begin{enumerate}[label=\alph*)] \setlength{\parindent}{2em} \item 测试标签 测试段落 \end{enumerate} 3. 想使用列表但不希望列表中段落整体有缩进 % 自定义 minisection 命令，小标题，无编号 \newcommand\minisection[1]{\vspace{2ex}{\heiti #1}\vspace{1ex}} % 例 \minisection{1）测试小标题} 4. vim 中使用 gqap 命令对中文文本格式化 下载 vim 插件：http://info.sayya.org/~edt1023/vim/format.vim 5. 按行方向合并单元格 \usepackage{multirow} [...]]]></description>
			<content:encoded><![CDATA[<p>最近在写毕业论文，记录一下使用 LaTeX 排版时的一些笔记：</p>
<p>1. 正文英文使用 Times * 字体：</p>
<blockquote><p>\usepackage{times}</p></blockquote>
<p>2. 自定义列表样式</p>
<blockquote><p>\usepackage{enumitem}<br />
% 例：缩略语列表，缩略语大写，全称左侧缩进对齐<br />
\begin{description}[font=\textbf, labelindent=2em, leftmargin=6em, style=sameline]</p>
<p>\item[CA] Central Authority.</p>
<p>\end{description}</p>
<p>% 例：列表标签使用 *) + 元素中段落首行缩进<br />
\begin{enumerate}[label=\alph*)]<br />
\setlength{\parindent}{2em}</p>
<p>\item 测试标签</p>
<p>测试段落</p>
<p>\end{enumerate}
</p></blockquote>
<p>3. 想使用列表但不希望列表中段落整体有缩进</p>
<blockquote><p>% 自定义 minisection 命令，小标题，无编号<br />
\newcommand\minisection[1]{\vspace{2ex}{\heiti #1}\vspace{1ex}}<br />
% 例<br />
\minisection{1）测试小标题}</p></blockquote>
<p>4. vim 中使用 gqap 命令对中文文本格式化</p>
<p>下载 vim 插件：<a href="http://info.sayya.org/~edt1023/vim/format.vim">http://info.sayya.org/~edt1023/vim/format.vim</a></p>
<p>5. 按行方向合并单元格</p>
<blockquote><p>\usepackage{multirow} </p></blockquote>
<p>6. 拼凑中文生僻字</p>
<blockquote><p>\hbox{\scalebox{0.4}[1]{王}\scalebox{0.6}[1]{莹}}</p></blockquote>
<p>7. 为插图加框</p>
<blockquote><p>\fbox{\includegraphics[width=0.9\textwidth]{figname}}</p></blockquote>
<p>8. 设置 pdf 属性，设置参考文献链接和图片链接颜色为黑色</p>
<blockquote><p><span style="color: rgb(0, 0, 255);">\hypersetup</span>{linkcolor=black, <span style="color: rgb(0, 128, 0);">%</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; citecolor=black, <span style="color: rgb(0, 128, 0);">%</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pdftitle={Title}, <span style="color: rgb(0, 128, 0);">%</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pdfauthor={Name}, <span style="color: rgb(0, 128, 0);">%</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pdfsubject={Subject}, <span style="color: rgb(0, 128, 0);">%</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pdfkeywords={Key words}}</p></blockquote>
<p>9. 对某页分栏排版</p>
<blockquote><p>\usepackage{multicol}<br />
% 分两栏<br />
\begin{multicols}{2}</p>
<p>不可用于浮动环境。</p>
<p>\end{multicols}</p></blockquote>
<p>10. 中文 LaTeX 编译 Makefile（注意缩进应替换为制表符）</p>
<blockquote><p>ARTICLE=filename<br />
ARTICLE_SRC=<span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).bib CASthesis.cls CASthesis.cfg<br />
IMAGES=</p>
<p>all: article</p>
<p>article: <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).pdf</p>
<p><span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).pdf: <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE_SRC) <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>IMAGES)<br />
&nbsp;&nbsp;&nbsp; latex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex<br />
&nbsp;&nbsp;&nbsp; bibtex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE)<br />
&nbsp;&nbsp;&nbsp; latex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex<br />
&nbsp;&nbsp;&nbsp; gbk2uni <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE)<br />
&nbsp;&nbsp;&nbsp; latex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex<br />
&nbsp;&nbsp;&nbsp; dvipdfmx <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).dvi</p>
<p>clean:<br />
&nbsp;&nbsp;&nbsp; rm -f *.aux *.toc *.lon *.lor *.lof *.ilg *.idx *.ind *.out *.log *.exa<br />
&nbsp;&nbsp;&nbsp; rm -f *.nav *.snm *.bbl *.blg *.spl *.lot *.bak *~</p>
<p>distclean: clean<br />
&nbsp;&nbsp;&nbsp; rm -f *.pdf *.dvi *.ps</p></blockquote>
<p>11. IEEE 投稿 LaTeX 编译 Makefile，主要处理嵌入字体和 pdf 版本问题（注意缩进应替换为制表符）</p>
<blockquote><p>ARTICLE=filename<br />
ARTICLE_SRC=<span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex</p>
<p><span style="color: rgb(0, 136, 0);">#DVIFLAGS=-t [letter/a4]</span><br />
DVIFLAGS=<br />
<span style="color: rgb(0, 136, 0);"># To avoid fonts and pdfinfo problems with the pdf file.</span><br />
<span style="color: rgb(0, 136, 0);">#PS2PDFFLAGS=-sPAPERSIZE=letter -dCompatibilityLevel=1.4 \</span><br />
-dPDFSETTINGS=/prepress -dMaxSubsetPct=100 -dSubsetFonts=true <span style="color: rgb(0, 0, 255);">\</span><br />
-dEmbedAllFonts=true<br />
PS2PDFFLAGS=-dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress <span style="color: rgb(0, 0, 255);">\</span><br />
-dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true</p>
<p>all: article</p>
<p>article: <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).pdf</p>
<p><span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).pdf: <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE_SRC) <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>IMAGES)<br />
&nbsp;&nbsp;&nbsp; latex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex<br />
&nbsp;&nbsp;&nbsp; latex <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).tex<br />
&nbsp;&nbsp;&nbsp; dvips <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>DVIFLAGS) <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).dvi<br />
&nbsp;&nbsp;&nbsp; ps2pdf <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>PS2PDFFLAGS) <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).ps</p>
<p>test: <span style="color: rgb(0, 0, 128); font-weight: bold;">$(</span>ARTICLE).pdf<br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"****************************************************************************"</span><br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"** IMPORTANT: PDF version should be 1.4!!!&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> <br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"****************************************************************************"</span><br />
&nbsp;&nbsp;&nbsp; @pdfinfo $&lt;<br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"****************************************************************************"</span><br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"** IMPORTANT: All Type 1 and Type 1C fonts should be embeded!!!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **"</span><br />
&nbsp;&nbsp;&nbsp; @echo <span style="color: rgb(0, 0, 255);">"****************************************************************************"</span><br />
&nbsp;&nbsp;&nbsp; @pdffonts $&lt;</p>
<p>clean:<br />
&nbsp;&nbsp;&nbsp; rm -f *.aux *.toc *.lon *.lor *.lof *.ilg *.idx *.ind *.out *.log *.exa<br />
&nbsp;&nbsp;&nbsp; rm -f *.nav *.snm *.bbl *.blg</p>
<p>distclean: clean<br />
&nbsp;&nbsp;&nbsp; rm -f *.pdf *.dvi *~ *.ps</p></blockquote>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/latex-thesis-template-of-nanjing-university.html" title="南京大学学位论文 LaTeX 模板">南京大学学位论文 LaTeX 模板</a> <span class="count">(10)</span> - <small class="excerpt">由于女朋友要写毕业论文，一些前人写的模板我不熟悉，并且摘要格式好像都不符合南京大学研究生院要求，所以...</small></li>
<li><a href="http://blog.solrex.org/articles/gnu-screen-tips.html" title="使用 screen 命令的一些小技巧">使用 screen 命令的一些小技巧</a> <span class="count">(5)</span> - <small class="excerpt">由于工作环境的问题，最近越来越感觉到 screen 命令的可贵，下面总结一点使用 screen 命令...</small></li>
<li><a href="http://blog.solrex.org/articles/icc-paper-accepted.html" title="心中一块大石落地">心中一块大石落地</a> <span class="count">(14)</span> - <small class="excerpt">从找到工作以来，我就在忙论文，因为中科院的硕士毕业是要发表论文的。还有半年临近毕业，已经火烧眉毛了，...</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>
<li><a href="http://blog.solrex.org/articles/the-gold-old-tools-pic-and-chem.html" title="The Gold Old Tools: Pic and Chem">The Gold Old Tools: Pic and Chem</a> <span class="count">(6)</span> - <small class="excerpt">我本来只想写一下 pic 这个小工具，因为很少有中文资料介绍其用法。但是写下来没想到一个小软件联系到...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/latex-tips-2010-04.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>又想念南京了</title>
		<link>http://blog.solrex.org/articles/miss-nanjing-again.html</link>
		<comments>http://blog.solrex.org/articles/miss-nanjing-again.html#comments</comments>
		<pubDate>Wed, 07 Apr 2010 15:09:02 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Memory]]></category>
		<category><![CDATA[Beijing]]></category>
		<category><![CDATA[Boring]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Nanjing]]></category>
		<category><![CDATA[Shopping]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638733</guid>
		<description><![CDATA[今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心，但是要下到南京基层轮岗，还不知道什么时候能调回北京。我以后又不可避免地要在南北两京之间多走几回。 关于这两个城市，我记得我曾经说过，我比较喜欢北京的大气，相比起来南京小气很多。但是体会过才发现，大气有大气的苦，小气有小气的福! 南大老校区在南京的位置相当优越，生活还是很便利的。平时逛街买衣服，往北到湖南路，往南到新街口，都是散步就可以走到了。即使是稍远点儿的夫子庙，公交也不用花很长时间。我一般都是节假日过去买些打折的衣服。 在北京，无论是办事还是闲逛，出个门实在是太累了。拿购物来说，虽然商业圈不少，但从中关村，或者现在所在的玉泉路，都不可避免地要坐很长时间的公交或地铁，特别是要赶什么特卖，就要跑更远更偏的路。经历过北京交通的朋友，其中的苦，你懂的。 从到这里的生活来说，研究生院的生活要比大学枯燥无聊得多，压力也大。周围很多同学都有类似的抱怨，后悔来到了这个地方，那又有什么办法呢？我现在唯一的想法就是赶紧毕业，脱离这一团压抑的空气。 唉，写着写着又成抱怨了，其实两个城市个中好坏自己都有评价，要不然也不会找工作继续选择留在北京。只是不知道工作以后生活和心情会不会变得好些，能够更有趣快乐一些，只当是个期冀吧，为将来可能的幸福。 您可能对这些感兴趣： 写在一个电闪雷鸣的雪夜 (6) - 从窗口望出去，橙黄色路灯照射下堆满积雪的屋顶散发着苍白的光芒。远处已是昏暗不清，雾罩着，看不到是否藏... 窗外皓月当空 (5) - 睁开眼睛，发现屋内亮亮堂堂，不像是夜晚，抬头一看，原来今天是满月。在被窝里想学别人掐指一算，根据月相... 2008年10月之黄金周 (3) - 十一黄金周长假结束几天了，但回来之后时间一直安排得很满，没空更新博客。今天北京下了点小雨，羽毛球打不... 悲惨的日子 (9) - 看着早晨天上弥漫的沙尘，我本来期望着今天会有一场沙尘暴，来加深一下北京奥运这一年给我留下的美好回忆。... 黄金周之末日 (3) - 长假结束了，要乘今天晚上的 T66 回北京。唉，虽然基本算是哪里都没去，但还是好累，大概是因为住同学... 不能回家的长假 (0) - 作 者: isince2003时 间: Thu Sep 30 17:59:12 2004十一长假，好...]]></description>
			<content:encoded><![CDATA[<p>今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心，但是要下到南京基层轮岗，还不知道什么时候能调回北京。我以后又不可避免地要在南北两京之间多走几回。</p>
<p>关于这两个城市，我记得我曾经说过，我比较喜欢北京的大气，相比起来南京小气很多。但是体会过才发现，大气有大气的苦，小气有小气的福!</p>
<p>南大老校区在南京的位置相当优越，生活还是很便利的。平时逛街买衣服，往北到湖南路，往南到新街口，都是散步就可以走到了。即使是稍远点儿的夫子庙，公交也不用花很长时间。我一般都是节假日过去买些打折的衣服。</p>
<p>在北京，无论是办事还是闲逛，出个门实在是太累了。拿购物来说，虽然商业圈不少，但从中关村，或者现在所在的玉泉路，都不可避免地要坐很长时间的公交或地铁，特别是要赶什么特卖，就要跑更远更偏的路。经历过北京交通的朋友，其中的苦，你懂的。</p>
<p>从到这里的生活来说，研究生院的生活要比大学枯燥无聊得多，压力也大。周围很多同学都有类似的抱怨，后悔来到了这个地方，那又有什么办法呢？我现在唯一的想法就是赶紧毕业，脱离这一团压抑的空气。</p>
<p>唉，写着写着又成抱怨了，其实两个城市个中好坏自己都有评价，要不然也不会找工作继续选择留在北京。只是不知道工作以后生活和心情会不会变得好些，能够更有趣快乐一些，只当是个期冀吧，为将来可能的幸福。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<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/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/golden-week-200810.html" title="2008年10月之黄金周">2008年10月之黄金周</a> <span class="count">(3)</span> - <small class="excerpt">十一黄金周长假结束几天了，但回来之后时间一直安排得很满，没空更新博客。今天北京下了点小雨，羽毛球打不...</small></li>
<li><a href="http://blog.solrex.org/articles/miserable-days.html" title="悲惨的日子">悲惨的日子</a> <span class="count">(9)</span> - <small class="excerpt">看着早晨天上弥漫的沙尘，我本来期望着今天会有一场沙尘暴，来加深一下北京奥运这一年给我留下的美好回忆。...</small></li>
<li><a href="http://blog.solrex.org/articles/end-of-golden-week.html" title="黄金周之末日">黄金周之末日</a> <span class="count">(3)</span> - <small class="excerpt">长假结束了，要乘今天晚上的 T66 回北京。唉，虽然基本算是哪里都没去，但还是好累，大概是因为住同学...</small></li>
<li><a href="http://blog.solrex.org/articles/missing-home-in-golden-week.html" title="不能回家的长假">不能回家的长假</a> <span class="count">(0)</span> - <small class="excerpt">作 者: isince2003时 间: Thu Sep 30 17:59:12 2004十一长假，好...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/miss-nanjing-again.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>我的京东换货经历</title>
		<link>http://blog.solrex.org/articles/warranty-service-of-360buy-com.html</link>
		<comments>http://blog.solrex.org/articles/warranty-service-of-360buy-com.html#comments</comments>
		<pubDate>Sun, 04 Apr 2010 04:43:48 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Social Responsibility]]></category>
		<category><![CDATA[Online]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[Shopping]]></category>
		<category><![CDATA[Warranty]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638726</guid>
		<description><![CDATA[在京东上也买过不少东西，这两天第一次体验了京东的售后客服，如实记录一下经历： 2010 年 4 月 2 日 22:09，在京东下了买电熨斗的单； 2010 年 4 月 3 日 08:39，收到订单已到达自提点的手机短信通知； 2010 年 4 月 3 日 10:55，在石景山自提点付款提货（必须先付款才能检查物品），拿到货物检查发现有问题，电熨斗有明显使用过的痕迹。当场提出换货，被告知自提点只负责提货，不负责售后，需要自己回去与客服联系； 2010 年 4 月 3 日 11:44，由于网上订单仍然显示未完成，无法提交返修申请，于是拨打京东客服 400 电话询问了一下情况，客服小姐的回答仍是等订单显示完成后在网上提交返修单； 2010 年 4 月 3 日 15:56，网上订单显示已完成； 2010 年 4 月 3 日 16:26，提交返修单，返修类型：换货，问题描述：电熨斗被使用过： 1. 电熨斗水箱内有残留水珠； 2. 电熨斗尾部下方支撑脚有磨损和污迹； 3. 电熨斗中部塑料转盘有破损； 4. 电熨斗插头周围有污迹； 2010 年 [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://www.360buy.com/">京东</a>上也买过不少东西，这两天第一次体验了京东的售后客服，如实记录一下经历：</p>
<p>2010 年 4 月 2 日 22:09，在京东下了买电熨斗的单；</p>
<p>2010 年 4 月 3 日 08:39，收到订单已到达自提点的手机短信通知；</p>
<p>2010 年 4 月 3 日 10:55，在石景山自提点付款提货（必须先付款才能检查物品），拿到货物检查发现有问题，电熨斗有明显使用过的痕迹。当场提出换货，被告知自提点只负责提货，不负责售后，需要自己回去与客服联系；</p>
<p>2010 年 4 月 3 日 11:44，由于网上订单仍然显示未完成，无法提交返修申请，于是拨打京东客服 400 电话询问了一下情况，客服小姐的回答仍是等订单显示完成后在网上提交返修单；</p>
<p>2010 年 4 月 3 日 15:56，网上订单显示已完成；</p>
<p>2010 年 4 月 3 日 16:26，提交返修单，返修类型：换货，问题描述：电熨斗被使用过： 1. 电熨斗水箱内有残留水珠； 2. 电熨斗尾部下方支撑脚有磨损和污迹； 3. 电熨斗中部塑料转盘有破损； 4. 电熨斗插头周围有污迹； </p>
<p>2010 年 4 月 3 日 16:54，收到返修已生成换货新单的手机短信通知；</p>
<p>2010 年 4 月 4 日 09:46，接到快递电话，更换了新品。</p>
<p>说实话，事情顺利地挺出乎我意料的。因为从论坛上还有其它网站看到很多对京东售后的抱怨，本来有做好长期抗战的心理准备，没想到那么容易就把问题解决了，这件事情的处理我还是很满意的。当然，这只是个案，我只如实记录个人遭遇，不参与对京东客服整体质量的讨论。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/try-online-photo-printing.html" title="初次尝试网上冲印">初次尝试网上冲印</a> <span class="count">(8)</span> - <small class="excerpt">由于数码照片很普及，好久没有冲印照片的需求了。最近临近毕业，各种乱七八糟的申请表都需要一些证件照片，...</small></li>
<li><a href="http://blog.solrex.org/articles/miss-nanjing-again.html" title="又想念南京了">又想念南京了</a> <span class="count">(6)</span> - <small class="excerpt">今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心...</small></li>
<li><a href="http://blog.solrex.org/articles/amazon-cn-hard-disk-gate.html" title="亲历卓越“硬盘门”事件">亲历卓越“硬盘门”事件</a> <span class="count">(2)</span> - <small class="excerpt">前天晚上看到有人在推上讨论卓越超便宜的 118 元 320G 硬盘，过去一看居然是真的。其实经过“2...</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/warranty-service-of-360buy-com.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>使用无线自组网共享互联网接入</title>
		<link>http://blog.solrex.org/articles/share-internet-access-with-adhoc-network.html</link>
		<comments>http://blog.solrex.org/articles/share-internet-access-with-adhoc-network.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 08:04:44 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Wireless and Mobile]]></category>
		<category><![CDATA[Adhoc]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[ISP]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638714</guid>
		<description><![CDATA[在这个互联网已经渗透入每个角落的时代，GUCAS 的网络接入收费显得非常不合时宜：（二年级以上同学）每个月 25 元套餐，其中包括5G国内流量、2G 国际流量，国内流量超出部分按 10元/G 收费，国际超出部分按 1元/M 收费。幸好有了 IPv6 BT（IPv6 流量不计入收费流量），不然 GUCAS 的网络就是一个悲剧。 对于高年级同学来说稍微好一点的是，某些实验室会有免费的网络，还可稍解流量窘迫。但如果不下 BT、不看视频、不视频聊天的话，5G 每月也是用不完的，而且 25 元的价钱也并不便宜，所以很多高年级同学都是宿舍共用一个上网帐号。 共用上网帐号有几种方式：1> 使用路由器，这是比较简洁的方式，但是这样就无法使用 IPv6——目前的路由器一般不支持 IPv6 路由功能，因此需要使用特别的配置才能同时支持 IPv6；2> 使用代理，一台电脑作为主机，为另一台电脑开一个代理，这种方式可以使用 IPv6，但缺点是主机分配的 IP 可能变化，需要手动更新代理地址，而且部分软件并不能完美支持代理。 我这里尝试了另外一种方式，使用无线自组网共享互联网接入，只适用于两台都带无线网卡的电脑共享上网。简单点儿来说，就是让两台电脑无线网卡相连，其中一台（主机）将有线的互联网接入通过无线链路共享给另外一台（从机）。这种方案同样适用于那些家里有两台笔记本却只有一个网口的家庭，省了买路由器的钱。 注：下文使用操作系统平台为 Windows XP SP3。 首先，需要将主机的有线连接即“本地连接”设为可共享。具体方法是，在主机上右击“本地连接”，选择“属性”，进入“高级”选项卡，“选中 Internet 连接共享”中的两个复选框，即“允许其他网络用户通过此计算机的 Internet 连接来连接”和“允许其他网络用户控制或禁用共享的 Internet 连接”。 其次，将两台电脑进行无线自组网。无线自组网的建立方式根据网卡管理软件的不同可能有不同的方法，简单的来说就是建立一个两台笔记本之间的一个点到点的（不需要接入点的）无线连接。一个典型的配置是： 主机： Ethernet adapter 无线网络连接: Connection-specific DNS Suffix . : IP Address. . . [...]]]></description>
			<content:encoded><![CDATA[<p>在这个互联网已经渗透入每个角落的时代，GUCAS 的网络接入收费显得非常不合时宜：（二年级以上同学）每个月 25 元套餐，其中包括5G国内流量、2G 国际流量，国内流量超出部分按 10元/G 收费，国际超出部分按 1元/M 收费。幸好有了 IPv6 BT（IPv6 流量不计入收费流量），不然 GUCAS 的网络就是一个悲剧。</p>
<p>对于高年级同学来说稍微好一点的是，某些实验室会有免费的网络，还可稍解流量窘迫。但如果不下 BT、不看视频、不视频聊天的话，5G 每月也是用不完的，而且 25 元的价钱也并不便宜，所以很多高年级同学都是宿舍共用一个上网帐号。</p>
<p>共用上网帐号有几种方式：1> 使用路由器，这是比较简洁的方式，但是这样就无法使用 IPv6——目前的路由器一般不支持 IPv6 路由功能，因此需要<a href="http://www.iron-feet.com/it/the-trick-for-accessing-ipv6-network-via-a-old-router/">使用特别的配置</a>才能同时支持 IPv6；2> 使用代理，一台电脑作为主机，为另一台电脑开一个代理，这种方式可以使用 IPv6，但缺点是主机分配的 IP 可能变化，需要手动更新代理地址，而且部分软件并不能完美支持代理。</p>
<p>我这里尝试了另外一种方式，使用无线自组网共享互联网接入，只适用于两台都带无线网卡的电脑共享上网。简单点儿来说，就是让两台电脑无线网卡相连，其中一台（主机）将有线的互联网接入通过无线链路共享给另外一台（从机）。<strong>这种方案同样适用于那些家里有两台笔记本却只有一个网口的家庭，省了买路由器的钱。</strong></p>
<p>注：下文使用操作系统平台为 Windows XP SP3。</p>
<p><strong>首先，需要将主机的有线连接即“本地连接”设为可共享。</strong>具体方法是，在主机上右击“本地连接”，选择“属性”，进入“高级”选项卡，“选中 Internet 连接共享”中的两个复选框，即“允许其他网络用户通过此计算机的 Internet 连接来连接”和“允许其他网络用户控制或禁用共享的 Internet 连接”。</p>
<p><strong>其次，将两台电脑进行无线自组网。</strong>无线自组网的建立方式根据网卡管理软件的不同可能有不同的方法，简单的来说就是建立一个两台笔记本之间的一个点到点的（不需要接入点的）无线连接。一个典型的配置是：</p>
<pre>主机：
Ethernet adapter 无线网络连接:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.1
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :
从机：
Ethernet adapter 无线网络连接:

        Connection-specific DNS Suffix  . : mshome.net
        IP Address. . . . . . . . . . . . : 192.168.0.27
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1</pre>
<p>需要注意的一点是，两台电脑需要在同一个 Windows 工作组中，这里两台电脑的工作组都是 MSHOME。</p>
<p>如果对无线自组网不是很了解，以上两步可以通过软件来进行设定。联想有一款叫做“闪联任意通”的软件，配置起来相对简单好用，用它的“共享网络”功能即可做到以上两步。但是闪联任意通有一些BUG，会造成服务占用 CPU 过高。一旦配置成功之后，记住建立的点到点网络 SSID（一般以 PAN_ 开头），以后每次两台电脑都连接至该网络即可。不再需要闪联任意通的运行。</p>
<p><strong>最后，将从机有线接口的 IPv4 功能禁用，将从机无线接口的 IPv6 功能禁用。</strong>具体方法是，在从机上右击“本地连接”，选择“属性”，在“常规”选项卡中的“此连接使用下列项目”选择框中的“Internet 协议 (TCP/IP)”前的复选框去掉，确定退出；在从机上右击“无线网络连接”（也可能是其它名称），在类似于上面的位置找到“Microsoft TCP/IP 版本 6”，去掉前面的复选框。</p>
<p>经过上面三步之后，就可以保证从机的 IPv4 的流量会走无线接口，使用主机共享的 IPv4 互联网接入；而 IPv6 的流量会走有线接口，使用本地交换机提供的 IPv6 互联网接入。第二步建立的点到点网络会保存到无线网络配置中，两台电脑开机只要打开无线，一般就会自动连接到该点到点网络，无需再进行额外的手动修改。（即便是使用代理的同学，由于无线的 IP 不会变化，这样做也能带来不用修改代理地址的好处。）</p>
<p>综上，这种方式可以完美地实现共享 IPv4 接入而又不影响 IPv6 连接。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/access-internet-in-restrict-environment.html" title="几种不得已时的上网办法">几种不得已时的上网办法</a> <span class="count">(4)</span> - <small class="excerpt">由于小弟最近上网受到诸多限制，在校时帐号爆掉，回家又没有网络可上，所以尝试了各种上网方法，也许对大家...</small></li>
<li><a href="http://blog.solrex.org/articles/rtp-streams-analysis-with-wireshark.html" title="用 Wireshark 分析 RTP 流">用 Wireshark 分析 RTP 流</a> <span class="count">(14)</span> - <small class="excerpt">Wireshark 是一个强大的抓包及网络分析软件，可以用来嗅探和分析多种网络协议的数据包和流，RT...</small></li>
<li><a href="http://blog.solrex.org/articles/jperf-single-jar-with-udp-bw-unit-fixed.html" title="JPerf Single Jar with UDP BW Unit Fixed">JPerf Single Jar with UDP BW Unit Fixed</a> <span class="count">(0)</span> - <small class="excerpt">JPerf is the GUI frond-end of IPerf,  a TCP and UD...</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/networkmanager-a-long-way-to-go.html" title="NetworkManager 任重而道远">NetworkManager 任重而道远</a> <span class="count">(4)</span> - <small class="excerpt">Ubuntu 8.04 以前的 NetworkManager（nm-applet） 还差强人意，好歹...</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/share-internet-access-with-adhoc-network.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>注册 Google Voice 的曲折经历</title>
		<link>http://blog.solrex.org/articles/problems-with-google-voice-rigister.html</link>
		<comments>http://blog.solrex.org/articles/problems-with-google-voice-rigister.html#comments</comments>
		<pubDate>Sat, 27 Mar 2010 01:57:30 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Telephone]]></category>
		<category><![CDATA[Voice]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638712</guid>
		<description><![CDATA[昨天 iron-feet 同学给我讲了不少 Google Voice 的好处，搞得我也心痒痒的（技术男的通病），想去注册一个。但后来发现只有收到邀请才能注册，Google 官方的邀请可能要等很长时间，于是我就在 Twitter 上发推求邀请，非常感谢好心的 @liyong3 同学(blog)，马上就给我发了邀请。 前面是好运，下面就是悲剧的开始。在注册之前我也知道注册 Google Voice 的麻烦之处：不允许中国网络访问，要有出国代理或VPN；激活时不允许绑定非美国号码，要申请到一个虚拟的美国号码，并转发电话到自己的聊天软件。我就是在激活上出了问题。 在目前网上流传的几个可以申请美国号码的服务里：ipkall 注册时无论如何都会出现密码错误；Gizmo 已经被 Google 收购，目前不提供注册；Freedigits 早就不提供注册了。所以从我的体验来看，能用的就只剩下：http://www.virtualphoneline.com 和 http://www.groovytel.com 了。其实这两家网站的页面风格一模一样，很可能是一个公司的产品。 http://www.virtualphoneline.com 之所以流行跟谷奥那篇介绍注册 Google Voice 的文章有关，但是 virtualphoneline 注册的免费虚拟号码只能试用 24 天，不过能以更多的形式（10 种）转发来电；至少从声明上来看，http://www.groovytel.com 要好一些，免费号码能试用 3 年，但是转发形式少了（6种）些。不过还好他们都支持转发到 Gtalk。 我一开始就注册了这两个服务的号码，也设置了转发到 Gtalk。但在 Google Voice 里尝试打了几十次激活电话，也没收到一个来电。于是我就对网上流传的各种方案进行尝试，包括网上没有的方案。整整尝试了一下午，才收到了那么几次 virtualphoneline+nonoh 的电话，但是很悲剧，nonoh 的拨号盘不能配合 virtualphoneline 输入认证码。于是我只好无奈放弃了。 到了晚上 11 点多我看 Google Reader 的时候，心仍有些不甘。看了一个视频，发现别人 Gtalk [...]]]></description>
			<content:encoded><![CDATA[<p>昨天 <a href="http://www.iron-feet.com/">iron-feet</a> 同学给我讲了不少 Google Voice 的好处，搞得我也心痒痒的（技术男的通病），想去注册一个。但后来发现只有收到邀请才能注册，Google 官方的邀请可能要等很长时间，于是我就在 Twitter 上发推求邀请，非常感谢好心的 <a href="http://twitter.com/liyong03">@liyong3</a>  同学(<a href="http://www.lixiaoyong.net/blog/">blog</a>)，马上就给我发了邀请。</p>
<p>前面是好运，下面就是悲剧的开始。在注册之前我也知道注册 Google Voice 的麻烦之处：不允许中国网络访问，要有出国代理或VPN；激活时不允许绑定非美国号码，要申请到一个虚拟的美国号码，并转发电话到自己的聊天软件。我就是在激活上出了问题。</p>
<p>在目前网上流传的几个可以申请美国号码的服务里：ipkall 注册时无论如何都会出现密码错误；Gizmo 已经被 Google 收购，目前不提供注册；Freedigits 早就不提供注册了。所以从我的体验来看，能用的就只剩下：<a href="http://www.virtualphoneline.com">http://www.virtualphoneline.com</a> 和 <a href="http://www.groovytel.com">http://www.groovytel.com</a> 了。其实这两家网站的页面风格一模一样，很可能是一个公司的产品。</p>
<p><a href="http://www.virtualphoneline.com">http://www.virtualphoneline.com</a> 之所以流行跟谷奥那篇介绍注册 Google Voice 的文章有关，但是 virtualphoneline 注册的免费虚拟号码只能试用 24 天，不过能以更多的形式（10 种）转发来电；至少从声明上来看，<a href="http://www.groovytel.com">http://www.groovytel.com</a> 要好一些，免费号码能试用 3 年，但是转发形式少了（6种）些。不过还好他们都支持转发到 Gtalk。</p>
<p>我一开始就注册了这两个服务的号码，也设置了转发到 Gtalk。但在 Google Voice 里尝试打了几十次激活电话，也没收到一个来电。于是我就对网上流传的各种方案进行尝试，包括网上没有的方案。整整尝试了一下午，才收到了那么几次 virtualphoneline+nonoh 的电话，但是很悲剧，nonoh 的拨号盘不能配合 virtualphoneline 输入认证码。于是我只好无奈放弃了。</p>
<p>到了晚上 11 点多我看 Google Reader 的时候，心仍有些不甘。看了一个视频，发现别人 Gtalk 有个联系人叫做 service@gtalk2voip.com，我顺手也加上了。然后将 groovytel 改回转发到 Gtalk，看文章的时候一会儿过去打一下，一会儿过去打一下，没想到还真给我打通了。按照网上的方法，先输一个数字，回车，再输一个数字，回车，就通过了验证。</p>
<p>总结一下下午激活失败的可能原因：</p>
<p>1. 没有加 service@gtalk2voip.com 机器人为联系人。其实我不确定这个有没有用，反正加个机器人也不麻烦。</p>
<p>2. 可能在通话的高峰期打电话。从我看 groovytel 和 virtualphoneline 的通话记录，发现很多通话没应答只持续 5 秒钟。我不知道是不是意味着如果 5 秒钟没有接通 Gtalk 他们就放弃了连接。按说北京的下午在美国是凌晨呀，不应该是高峰的。</p>
<p>反正不管怎样，结果表明还是多尝试好，要有耐心，反正 Google Voice 貌似也没有限制可以尝试多少次，多次尝试打不通就换个时间打。我在 Twitter 上也碰到和我一样没能激活的好友，也许大家可以借鉴一下这里的经验。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<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">(17)</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/google-pinyin-to-vimim.html" title="Google 拼音词库转 Vimim 词库脚本">Google 拼音词库转 Vimim 词库脚本</a> <span class="count">(4)</span> - <small class="excerpt">我写了一个将 Google 拼音输入法词库转换为 Vimim 词库的脚本，贴在这里，希望对大家有用。...</small></li>
<li><a href="http://blog.solrex.org/articles/google-music-search.html" title="Google 音乐搜索">Google 音乐搜索</a> <span class="count">(14)</span> - <small class="excerpt">/* 这不是一篇商业软文——虽然我希望可以有钱赚 <img src='http://blog.solrex.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  */今天无意中溜到和菜头的博客，看到他对谷歌...</small></li>
<li><a href="http://blog.solrex.org/articles/patch-for-libjingle-with-gcc-424-on-ubuntu.html" title="Patch for Libjingle with GCC 4.2.4 on Ubuntu">Patch for Libjingle with GCC 4.2.4 on Ubuntu</a> <span class="count">(4)</span> - <small class="excerpt">It is a svn diff result, not a patch, actually.So,...</small></li>
<li><a href="http://blog.solrex.org/articles/playing-with-google-friend-connect.html" title="Google Friend Connect 挺好玩的">Google Friend Connect 挺好玩的</a> <span class="count">(0)</span> - <small class="excerpt">经常来我博客转转的朋友会发现，我最近挺享受右下角的 Google Friend Connect，尤其...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/problems-with-google-voice-rigister.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>有关 SVN、Cygwin 和 Notepad++</title>
		<link>http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html</link>
		<comments>http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html#comments</comments>
		<pubDate>Thu, 25 Mar 2010 08:18:10 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[Notepad++]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638708</guid>
		<description><![CDATA[1. svn 的访问控制 很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文件系统（即用 file:/// 而不是 svn:// 或其它）访问 svn 仓库，因为自己建立的文件系统不需要认证。 今天我又尝试琢磨了一下我 svn 仓库的设置，才发现之前没配置成功的原因：svn 对用户的权限默认是关闭的。因此当我设置了用户名密码，svn ls 时得到的提示信息仍然是： svn: Authorization failed 时，我就糊涂了，我的用户名密码没错呀，为啥还是Authorization failed？我还以为是密码设置有问题，没想到除了用户名以外，还得给用户配置访问列表（ACL），否则就什么都访问不了。说简单点儿就是 svn 用户访问控制是一个白名单机制，而我当成了黑名单机制。 知道了错误原因，就很简单了。到与 svnserve.conf 同目录下的 authz 为对应用户添加可以访问的项目就可以了。 2. cygwin 的启动速度 最近发现 cygwin 的启动速度大大变慢，一个终端起来至少要 30 秒。而且不仅仅是启动，所有程序的运行速度都变慢了，比如文件名补全竟然需要好几秒！我忍了很久，就差卸了重装它了，只是想到好不容易配好的各种环境，给忍耐了下来。 今天琢磨了一下 cygwin 的启动过程，发现可以在 bash 命令后加 -x 参数打印所有执行的命令。于是把启动 log 打印出来，查找到引起运行变慢的罪魁祸首：bash_completion。我之前装了一个名叫 bash_completion 的包所谓命令补全的增强包，好家伙，在 /etc/bash_completion.d/ 下面添加了 144 个文件。在启动的时候要一个个 source 这些脚本，怪不得慢呢！ [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1. svn 的访问控制</strong></p>
<p>很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文件系统（即用 file:/// 而不是 svn:// 或其它）访问 svn 仓库，因为自己建立的文件系统不需要认证。</p>
<p>今天我又尝试琢磨了一下我 svn 仓库的设置，才发现之前没配置成功的原因：svn 对用户的权限默认是关闭的。因此当我设置了用户名密码，svn ls 时得到的提示信息仍然是：</p>
<blockquote><p>svn: Authorization failed</p></blockquote>
<p>时，我就糊涂了，我的用户名密码没错呀，为啥还是Authorization failed？我还以为是密码设置有问题，没想到除了用户名以外，还得给用户配置访问列表（ACL），否则就什么都访问不了。说简单点儿就是 svn 用户访问控制是一个白名单机制，而我当成了黑名单机制。</p>
<p>知道了错误原因，就很简单了。到与 svnserve.conf 同目录下的 authz 为对应用户添加可以访问的项目就可以了。</p>
<p><strong>2. cygwin 的启动速度</strong></p>
<p>最近发现 cygwin 的启动速度大大变慢，一个终端起来至少要 30 秒。而且不仅仅是启动，所有程序的运行速度都变慢了，比如文件名补全竟然需要好几秒！我忍了很久，就差卸了重装它了，只是想到好不容易配好的各种环境，给忍耐了下来。</p>
<p>今天琢磨了一下 cygwin 的启动过程，发现可以在 bash 命令后加 -x 参数打印所有执行的命令。于是把启动 log 打印出来，查找到引起运行变慢的罪魁祸首：bash_completion。我之前装了一个名叫 bash_completion 的包所谓命令补全的增强包，好家伙，在 /etc/bash_completion.d/ 下面添加了 144 个文件。在启动的时候要一个个 source 这些脚本，怪不得慢呢！</p>
<p>卸载掉这个 bash_completion 包后，cygwin 的运行速度回到了原来的水平，敲命令的时候总算不用憋屈地等补全了。</p>
<p><strong>3. Notepad++ 的中文搜索</strong></p>
<p>使用 2.6.8 版本时，又发现无法搜索中文的 bug。我非常搞不懂 Notepad++ 的作者怎么维护软件质量的，这 bug 在我的印象里就反覆出现两次了。这样的bug都不写一个回归测试用例来检查，实在是有点儿不可思议。无奈之下只好退回到 2.6.7 版本了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/svn-tips-gui-diff-and-exe-property.html" title="SVN 技巧：GUI 版本比较和可执行属性">SVN 技巧：GUI 版本比较和可执行属性</a> <span class="count">(1)</span> - <small class="excerpt">我曾经在《使用 kdiff3 进行 svn 版本比较》中介绍了为什么以及如何使用 kdiff3 或者...</small></li>
<li><a href="http://blog.solrex.org/articles/svn-diff-with-kdiff3.html" title="使用 kdiff3 进行 svn 版本比较">使用 kdiff3 进行 svn 版本比较</a> <span class="count">(7)</span> - <small class="excerpt">svn diff 命令的效果总的来说还是不错的。因为它是基于行的比较，在比较格式规范的程序代码文件时...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(1)</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">(3)</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">(10)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>播客和其它</title>
		<link>http://blog.solrex.org/articles/podcast-and-other-stuff.html</link>
		<comments>http://blog.solrex.org/articles/podcast-and-other-stuff.html#comments</comments>
		<pubDate>Wed, 17 Mar 2010 11:27:49 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=638699</guid>
		<description><![CDATA[每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人网站，经常会发现一些有趣的人和事。今天逛到的博客提到了 Linux 下的 podcast 客户端，我忽然感了兴趣，然后就开始找一些有趣的 podcast 资源。 就客户端来讲，尝试了几个，发现 Windows 下的 podcast 客户端中，iTunes 还是最好的一个。当然，我的标准中有一条“支持代理服务器”，就刷掉了很多软件。而中文的稳定更新的 podcast 更没有多少，现在听的几个主要来自我爱 Podcast和阅微堂的两篇文章。 让我比较不习惯的一个，是锵锵三人行的 podcast。这个 podcast 是由毛豆工作室 制作的，他们为 podcast 设置了下载密码。只有捐款了的会员，才能有固定的下载密码；未捐款用户则只能使用10分钟左右变更一次的guest密码下载。更绝的是，guest 密码的获取方式非常奇特，你必须准确点击到在一个 Google 图片广告上迅速移动的链接，才能看到图片形式的密码；稍有不慎，就只是点开了 Google 的广告，而得不到密码。 虽然我认为费力制作并租用服务器发布 podcast，收费提供也无可厚非，但是使用如此之戏弄用户的把戏提供 guest 密码让我无法认同。破解这种把戏其实也很简单，找出图片的链接，然后请求图片时在 header 中加上到原页面的 referer，就可以直接 GET 到图片了。当然，为了方便，可以将提取图片的 php 脚本扔到自己的服务器上，用浏览器刷新就可以直接得到密码了。 关于 podcast，我还有一个想法：有没有人将安装系统或者使用软件的教程做成 podcast？我想这样做应该很有趣，比如我们要安装 Ubuntu，只需要挂着个 mp3，按照里面声音一步一步走：“哦，现在把光驱打开，把光盘放进去，按 F12 进入启动选择界面，……”。 除了捣鼓 podcast 之外，我前几天还把 WordPress 升级到了 2.9.2。之前 [...]]]></description>
			<content:encoded><![CDATA[<p>每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人网站，经常会发现一些有趣的人和事。今天逛到的博客提到了 Linux 下的 podcast 客户端，我忽然感了兴趣，然后就开始找一些有趣的 podcast 资源。</p>
<p>就客户端来讲，尝试了几个，发现 Windows 下的 podcast 客户端中，iTunes 还是最好的一个。当然，我的标准中有一条“支持代理服务器”，就刷掉了很多软件。而中文的稳定更新的 podcast 更没有多少，现在听的几个主要来自<a href="http://52podcast.com/chinese-podcasts-list.html ">我爱 Podcast</a>和<a href="http://zhiqiang.org/blog/resource/collect-chinese-podcast.html">阅微堂</a>的两篇文章。</p>
<p>让我比较不习惯的一个，是<a href="http://feed.feedsky.com/qiangqiang3">锵锵三人行的 podcast</a>。这个 podcast 是由<a href="http://drupal.overseakids.com/">毛豆工作室</a> 制作的，他们为 podcast 设置了下载密码。只有捐款了的会员，才能有固定的下载密码；未捐款用户则只能使用10分钟左右变更一次的guest密码下载。更绝的是，guest 密码的获取方式非常奇特，你必须准确点击到在一个 Google 图片广告上迅速移动的链接，才能看到图片形式的密码；稍有不慎，就只是点开了 Google 的广告，而得不到密码。</p>
<p>虽然我认为费力制作并租用服务器发布 podcast，收费提供也无可厚非，但是使用如此之戏弄用户的把戏提供 guest 密码让我无法认同。破解这种把戏其实也很简单，找出图片的链接，然后请求图片时在 header 中加上到原页面的 referer，就可以直接 GET 到图片了。当然，为了方便，可以将提取图片的 php 脚本扔到自己的服务器上，用浏览器刷新就可以直接得到密码了。</p>
<p>关于 podcast，我还有一个想法：有没有人将安装系统或者使用软件的教程做成 podcast？我想这样做应该很有趣，比如我们要安装 Ubuntu，只需要挂着个 mp3，按照里面声音一步一步走：“哦，现在把光驱打开，把光盘放进去，按 F12 进入启动选择界面，……”。</p>
<p>除了捣鼓 podcast 之外，我前几天还把 WordPress 升级到了 2.9.2。之前 2.7.1 用习惯了，尝试升级了几次都出问题，于是就一直停在了 2.7 版本。这次升级主要是考虑到安全问题，毕竟软件的时间越久越容易被人发现漏洞。升级仍然出现了一些小问题，主要的原因是 WP 运行时占用的内存超过了默认的 32M，在 wp-config.php 中加大内存就没事了。</p>
<p>在博客侧栏增加了来自阿里妈妈的广告，原因无它，只是为了尝试一下阿里妈妈的用户体验，钱估计是赚不到的。</p>
<p>上周五睡觉时，小腿脚踝上方不知不觉地被暖手宝烫出了一个滴溜溜圆的蚕豆状水泡。不能穿高帮的鞋子，只好两只脚穿不同的鞋。目前已经到医院上了三次药，在好转中。</p>
<p>宿舍原来空调风机功率太小，一直不暖和，2月下旬回来给敲掉了。期间下了两三场雪，供暖都快结束了，今天才装上新风机。只要开机就一股暖气片漆的味道，于是干脆放那不开它了，冷点儿也比吸化学毒气强。</p>
<p>我的 Facebook 帐号十几天前被关闭了，我发了封信申诉，一直没消息。昨天早上照常地清空了一下垃圾箱，在删除那一瞬间看见了 Facebook 的回信，真郁闷。不过虽然没看到回复，Facebook 是可以登录了，这是好事儿。</p>
<p>又薅移动的羊毛了，充 300 送 140 的公交卡。正好有张非学生卡，毕业了总是要用的，干脆充上得了。上个月是 50M 的流量，结果只用了不到 30M，这个月关了 5块 30M 的套餐，结果发现 20M 貌似又有点儿不够用了。</p>
<p>在 Twitter 上无意中发现一对可爱的恋人，经常连载一些类似博客的有趣的事，于是 fo 了，刚才发现那男孩儿把我 block 了，大概是不想被人关注吧。天晓得我怎么找到的这种 follower 和 following 都是 1 的用户。另外，看别人在 Twitter 上谈情说爱和吵架都是顶好玩的事情！<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html" title="宅并低俗着">宅并低俗着</a> <span class="count">(11)</span> - <small class="excerpt">其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...</small></li>
<li><a href="http://blog.solrex.org/articles/i-wanna-a-big-house.html" title="我要一所大房子，有很大的落地窗户">我要一所大房子，有很大的落地窗户</a> <span class="count">(6)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/sorry-i-am-busy.html" title="我为什么这么忙">我为什么这么忙</a> <span class="count">(16)</span> - <small class="excerpt">这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村...</small></li>
<li><a href="http://blog.solrex.org/articles/yizun-steak-nanjing.html" title="南京一樽牛排">南京一樽牛排</a> <span class="count">(5)</span> - <small class="excerpt">在这一个月里，我正在进行着一个人生阶段的重要跨越——从学生转型为程序员。最近在忙毕业的事情，很久没有...</small></li>
<li><a href="http://blog.solrex.org/articles/miss-nanjing-again.html" title="又想念南京了">又想念南京了</a> <span class="count">(6)</span> - <small class="excerpt">今天晚上把女友送上火车回南京了。她在北京年前年后花了两个月找工作，最终的结果不好不坏。签了某行卡中心...</small></li>
<li><a href="http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/podcast-and-other-stuff.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:888:1031::2]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp6.space.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:608:0:dff::2]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; time.buptnet.edu.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:da8:202:10::60]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; time.join.uni-muenster.de&nbsp;&nbsp;&nbsp; [2001:638:500:717:2e0:4bff:fe04:bc5f]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.sixxs.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:1291:2::b]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.eu.sixxs.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:808::66]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.us.sixxs.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:1291:2::b]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.rhrk.uni-kl.de&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:638:208:9::116]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.ipv6.uni-leipzig.de&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:638:902:1::10]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp.hexago.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:5c0:0:2::25]</span><br />
<span style="color: rgb(163, 21, 21);">&nbsp; ntp1.bit.nl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [2001:7b8:3:2c::123]</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">(3)</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/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(10)</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">(9)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</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>
		<slash:comments>1</slash:comments>
		</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; [...]]]></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">(1)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
<li><a href="http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(10)</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">(9)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/favorite-blackberry-apps.html" title="我喜欢的黑莓应用">我喜欢的黑莓应用</a> <span class="count">(13)</span> - <small class="excerpt">上次手机丢了之后，为图便宜，我换了一个黑莓 8700，黑莓大概是我能负担起的最便宜的智能手机系列。虽...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/python-htp-client-for-windows.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</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) - 一点多了，翻来覆去还是睡不着，又下来打开电脑，写点东西，心里可能会好受些。晚上回寝室的时候，春妹说博... 我要一所大房子，有很大的落地窗户 (6) - 我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一... 我为什么这么忙 (16) - 这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村... 宅并低俗着 (11) - 其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...]]></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/i-wanna-a-big-house.html" title="我要一所大房子，有很大的落地窗户">我要一所大房子，有很大的落地窗户</a> <span class="count">(6)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/sorry-i-am-busy.html" title="我为什么这么忙">我为什么这么忙</a> <span class="count">(16)</span> - <small class="excerpt">这里已经很长时间没有更新了，原因很简单，我很忙！敲下这几个字时，我正坐在母校中国科学院研究生院中关村...</small></li>
<li><a href="http://blog.solrex.org/articles/vulgar-life-of-an-otaku.html" title="宅并低俗着">宅并低俗着</a> <span class="count">(11)</span> - <small class="excerpt">其实我今天本来想出门的，但是睡到 11 点，吃了 xixi 昨晚买好的蛋糕之后，再也不想动了。算了，...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/2010-shangyuanjie.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</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 [...]]]></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/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">(6)</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">(3)</span> - <small class="excerpt">1. 应用程序打包技术之一（源代码篇）2. 应用程序打包技术之二（deb篇）3. 应用程序打包技术之...</small></li>
<li><a href="http://blog.solrex.org/articles/gnu-screen-tips.html" title="使用 screen 命令的一些小技巧">使用 screen 命令的一些小技巧</a> <span class="count">(5)</span> - <small class="excerpt">由于工作环境的问题，最近越来越感觉到 screen 命令的可贵，下面总结一点使用 screen 命令...</small></li>
<li><a href="http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(1)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/use-sikuli-to-start-2-dropboxes.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</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 [...]]]></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">(13)</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">(31)</span> - <small class="excerpt">免费电子书《使用开源软件-自己动手写操作系统》的主页在：http://share.solrex.or...</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">(4)</span> - <small class="excerpt">——Writing x86 PC Bootloader With Free Software本文内容...</small></li>
<li><a href="http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(1)</span> - <small class="excerpt">Python NTP library (ntplib)  offers a simple inter...</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>
		<slash:comments>9</slash:comments>
		</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. [...]]]></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>
<p>PS：在应用之外，还有一款软件不得不提，就是 <a href="http://mcpfx.com/news.php">BlackBerry Master Control Program</a>，简直是安装黑莓软件的神器呀，比黑莓原版的 Desktop Manager 要好太多了！</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">(9)</span> - <small class="excerpt">好多事情都是不做时觉得很难，做了才知道，哦，原来这么简单！给黑莓刷系统也是如此。本来我的 8700 ...</small></li>
<li><a href="http://blog.solrex.org/articles/about-svn-cygwin-and-notepad.html" title="有关 SVN、Cygwin 和 Notepad++">有关 SVN、Cygwin 和 Notepad++</a> <span class="count">(3)</span> - <small class="excerpt">1. svn 的访问控制很久以前我就自己配置过 svn 服务器，但总是不能访问成功。到最后还是使用文...</small></li>
<li><a href="http://blog.solrex.org/articles/podcast-and-other-stuff.html" title="播客和其它">播客和其它</a> <span class="count">(8)</span> - <small class="excerpt">每隔一段时间，我都会到 Google Analytics 里面检查我博客的引入链接，主要关注那些个人...</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">(1)</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">(3)</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">(10)</span> - <small class="excerpt">来自 MIT 的用图片编程的 Sikuli 语言最近着实火了一把，看着对岸的程序员 Vgod 开发出...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/favorite-blackberry-apps.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 6.614 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-02 19:19:24 -->
