<?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>Sun, 27 May 2012 14:27:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<meta name="generator" content="Obscure 2.0" />
		<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/donghugang-outing.html</link>
		<comments>http://blog.solrex.org/articles/donghugang-outing.html#comments</comments>
		<pubDate>Sun, 27 May 2012 14:19:38 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[旅行]]></category>
		<category><![CDATA[Beijing]]></category>
		<category><![CDATA[Outing]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Travaling]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=640060</guid>
		<description><![CDATA[说起来已经是两周前的事情了，所在大组春游地点选在了京郊房山的十渡。可能对京郊大家兴趣都不是很大，算上家属才有不到四十人报名。 第一天去的是十渡还是十五渡已经搞不清了，都是些山寨的旅游项目：漂流、卡丁车和竹筏。以前有漂流的经验，怕进水所以根本就没带相机，只是偶尔用手机拍几张。可惜的照片放在内置 SD 卡上，被刷机给刷掉了。刷机前应该检查一下照片有没有被即时上传的，sigh~~~ 晚上住的农家乐还可以，比去年春天去的农家乐好太多了。起码房间、被褥很干净，晚上睡觉不冷，吃的也还不错。 第二天去了一个比较正规的景点——东湖港，爬山。房山十渡一线的山和门头沟、怀柔的山区别比较大，别处的山远没有这里陡峭。东湖港整个上山的路虽然不算长，但都是陡峭的阶梯，而且很多地方是陡峭的栈道。从栈道上下，望见铁质楼梯缝下面就是空荡荡的绝壁，对胆识真的会有些考验。 上传几张同事拍的照片，留个纪念。 您可能对这些感兴趣： &#8230; <a href="http://blog.solrex.org/articles/donghugang-outing.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>说起来已经是两周前的事情了，所在大组春游地点选在了京郊房山的十渡。可能对京郊大家兴趣都不是很大，算上家属才有不到四十人报名。</p>
<p>第一天去的是十渡还是十五渡已经搞不清了，都是些山寨的旅游项目：漂流、卡丁车和竹筏。以前有漂流的经验，怕进水所以根本就没带相机，只是偶尔用手机拍几张。可惜的照片放在内置 SD 卡上，被刷机给刷掉了。刷机前应该检查一下照片有没有被即时上传的，sigh~~~</p>
<p>晚上住的农家乐还可以，比<a href="http://blog.solrex.org/articles/the-disappointing-western-suburbs-of-beijing.html" target="_blank">去年春天去的农家乐</a>好太多了。起码房间、被褥很干净，晚上睡觉不冷，吃的也还不错。</p>
<p>第二天去了一个比较正规的景点——东湖港，爬山。房山十渡一线的山和门头沟、怀柔的山区别比较大，别处的山远没有这里陡峭。东湖港整个上山的路虽然不算长，但都是陡峭的阶梯，而且很多地方是陡峭的栈道。从栈道上下，望见铁质楼梯缝下面就是空荡荡的绝壁，对胆识真的会有些考验。</p>
<p>上传几张同事拍的照片，留个纪念。</p>
<p>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3327' title='1. 去程的汽车上'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3327-200x133.jpg" class="attachment-thumbnail" alt="1. 去程的汽车上" title="1. 去程的汽车上" /></a>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3556' title='2. 划竹筏'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3556-200x133.jpg" class="attachment-thumbnail" alt="2. 划竹筏" title="2. 划竹筏" /></a>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3677' title='3. 还是在划竹筏'><img width="100" height="150" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3677-100x150.jpg" class="attachment-thumbnail" alt="3. 还是在划竹筏" title="3. 还是在划竹筏" /></a>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3754' title='4. 晚上的桌游-数字麻将'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3754-200x133.jpg" class="attachment-thumbnail" alt="4. 晚上的桌游-数字麻将" title="4. 晚上的桌游-数字麻将" /></a>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3796' title='5. 晚上的桌游-数字麻将'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3796-200x133.jpg" class="attachment-thumbnail" alt="5. 晚上的桌游-数字麻将" title="5. 晚上的桌游-数字麻将" /></a>
<a href='http://blog.solrex.org/articles/donghugang-outing.html/img_3812' title='6. 东湖港下合影'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/05/IMG_3812-200x133.jpg" class="attachment-thumbnail" alt="6. 东湖港下合影" title="6. 东湖港下合影" /></a>
<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/the-disappointing-western-suburbs-of-beijing.html" title="令人失望的帝都西郊">令人失望的帝都西郊</a> <span class="count">(2)</span> - <small class="excerpt">继续说北京西郊。我以前沿着 108 国道，去过潭柘寺和戒台寺，但印象都不是很好。其主要原因是觉得环境...</small></li>
<li><a href="http://blog.solrex.org/articles/cuan-di-xia-cun-complaint.html" title="吐槽爨底下村">吐槽爨底下村</a> <span class="count">(8)</span> - <small class="excerpt">在大家都在抱怨沙尘暴时，我表示很淡定。第一，我没有出门；第二，作为一个北方人，真没什么大惊小怪的。因...</small></li>
<li><a href="http://blog.solrex.org/articles/ju-da-bu-yi.html" title="居大不易，找由头聚聚">居大不易，找由头聚聚</a> <span class="count">(7)</span> - <small class="excerpt">现在有一大感慨：工作以后，想维持一个稳定的博客更新频率真不容易。按照“每周一篇”的愿景来看，这月我还...</small></li>
<li><a href="http://blog.solrex.org/articles/2011-nanshan-ski.html" title="再练滑雪之南山">再练滑雪之南山</a> <span class="count">(1)</span> - <small class="excerpt">这次部门 building 选择了南山滑雪，呃，其实我有些失望。我投的是泡温泉，主要是吸取了上次去坝...</small></li>
<li><a href="http://blog.solrex.org/articles/badaling-skiing-2010.html" title="去八达岭滑雪">去八达岭滑雪</a> <span class="count">(6)</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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/donghugang-outing.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>迁到丰台区</title>
		<link>http://blog.solrex.org/articles/relocate-to-fengtai.html</link>
		<comments>http://blog.solrex.org/articles/relocate-to-fengtai.html#comments</comments>
		<pubDate>Sun, 20 May 2012 03:50:55 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[Home]]></category>
		<category><![CDATA[House]]></category>
		<category><![CDATA[Rent]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=640039</guid>
		<description><![CDATA[来北京已近六年，大小搬家经历了七八次，家当却是一次比一次多。实习和读书期间一直在海淀区晃悠。毕业以后在西二旗智学苑小住了3月，就因老婆来京工作地点交通不便搬到了曾经的宣武区牛街西里（现在属西城），北向一居开间，2k/月，暖气自付。 都说牛街是穆斯林聚居区，美食众多。我虽在牛街住了一年半，老北京小吃却没尝到多少，比如说豆汁、焦圈就没有试过。其中大部分原因是懒得尝试，还有对太油太腻的食物不太热衷。最让我留恋的食物只有两样：一个是老城伊的羊蝎子，另一个是聚宝源的肉饼。大伙烤肉的牛肉面本来也颇合我口味，但自从涨价五块钱以后，就不甚满意了。 本来计划在牛街居住两年或更久，也习惯了在那里的生活。后来因房东的卖房而打断，很多朋友可能对这种情况都深有体会且深恶痛绝。但好歹我遇到了一位实诚的房东，不仅少收了我一个月的租金，还补偿了我一笔违约金，也算是好聚好散。当初这个房子是在豆瓣上找到的，这让我的很多同事都比较惊讶。他们不知道文艺青年聚集的豆瓣还能交换此类生活信息，但我想，关于豆瓣他们不知道的事情可能还有很多 :)。 再次找房，考虑到我们俩的公司位置，还是打算在牛街附近找。但是这次尝试了一个新的途径，在小区内部贴条找房。谁知本来目标是本小区的房子，却租到了一个本小区业主在其它小区的房子。房子在丰台区右安门附近，临着二环，还是一居开间，西向，2.1k/月，包暖气。实话说，都是回迁小区，小区内部环境却比牛街西里差很多。但考虑到租房开支在生活支出里占大头，这个价格在周边也算便宜了，不能挑剔太多。 因为重新装修过没几年，房子内部的大体状况还算可以。唯一不好的是卫浴管道、设施比较陈旧，不少问题，我还没来得及修理。这种活我从来不愿意麻烦房东，自己就能干，省时省事。新家也不尽是坏处，附近交通上反而比牛街方便一些，在立交桥边公交线路多，也没那么堵。小区周边的小饭馆和超市也比牛街西里更多更近，尤其到晚上，临街小摊如同五道口一样兴盛。 看看房子，愈发能明白北京的区域发展不平衡。在房租房价上，南城要差北城一个档次，北城尤以西北房租、房价最高。大致原因应该是一方面西北是海淀区教育资源好，另一方面高校吸引高科技企业聚集，居民平均收入更高。我倒庆幸能在南城找房子，虽然上班路上得花费一个半小时，但好歹我老婆不用那么辛苦，且房租支出能不那么肉疼些。 今天本想骑我那尘封已久的公爵 &#8230; <a href="http://blog.solrex.org/articles/relocate-to-fengtai.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>来北京已近六年，大小搬家经历了七八次，家当却是一次比一次多。实习和读书期间一直在海淀区晃悠。毕业以后在西二旗智学苑小住了3月，就因老婆来京工作地点交通不便搬到了曾经的宣武区牛街西里（现在属西城），北向一居开间，2k/月，暖气自付。</p>
<p>都说牛街是穆斯林聚居区，美食众多。我虽在牛街住了一年半，老北京小吃却没尝到多少，比如说豆汁、焦圈就没有试过。其中大部分原因是懒得尝试，还有对太油太腻的食物不太热衷。最让我留恋的食物只有两样：一个是老城伊的羊蝎子，另一个是聚宝源的肉饼。大伙烤肉的牛肉面本来也颇合我口味，但自从涨价五块钱以后，就不甚满意了。</p>
<p>本来计划在牛街居住两年或更久，也习惯了在那里的生活。后来因房东的卖房而打断，很多朋友可能对这种情况都深有体会且深恶痛绝。但好歹我遇到了一位实诚的房东，不仅少收了我一个月的租金，还补偿了我一笔违约金，也算是好聚好散。当初这个房子是在<a href="http://www.douban.com/search?q=%E5%8C%97%E4%BA%AC%E7%A7%9F%E6%88%BF&#038;cat=1019" target="_blank">豆瓣</a>上找到的，这让我的很多同事都比较惊讶。他们不知道文艺青年聚集的豆瓣还能交换此类生活信息，但我想，关于豆瓣他们不知道的事情可能还有很多 :)。</p>
<p>再次找房，考虑到我们俩的公司位置，还是打算在牛街附近找。但是这次尝试了一个新的途径，在小区内部贴条找房。谁知本来目标是本小区的房子，却租到了一个本小区业主在其它小区的房子。房子在丰台区右安门附近，临着二环，还是一居开间，西向，2.1k/月，包暖气。实话说，都是回迁小区，小区内部环境却比牛街西里差很多。但考虑到<a href="/articles/the-year-before-2012.html" target="_blank">租房开支在生活支出里占大头</a>，这个价格在周边也算便宜了，不能挑剔太多。</p>
<p>因为重新装修过没几年，房子内部的大体状况还算可以。唯一不好的是卫浴管道、设施比较陈旧，不少问题，我还没来得及修理。这种活我从来不愿意麻烦房东，自己就能干，省时省事。新家也不尽是坏处，附近交通上反而比牛街方便一些，在立交桥边公交线路多，也没那么堵。小区周边的小饭馆和超市也比牛街西里更多更近，尤其到晚上，临街小摊如同五道口一样兴盛。</p>
<p>看看房子，愈发能明白北京的区域发展不平衡。在房租房价上，南城要差北城一个档次，北城尤以西北房租、房价最高。大致原因应该是一方面西北是海淀区教育资源好，另一方面高校吸引高科技企业聚集，居民平均收入更高。我倒庆幸能在南城找房子，虽然上班路上得花费一个半小时，但好歹我老婆不用那么辛苦，且房租支出能不那么肉疼些。</p>
<p>今天本想骑我那尘封已久的公爵 600 出去转转来着，无奈天公不做美，只好补一补欠下来的近况。</p>
<p>PS: 今天是南京大学 110 年校庆，祝母校生日快乐！<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">(15)</span> - <small class="excerpt">我真的不曾想到工作了那么久我还会有那么的不安稳感。我是一个心里存不住事的人，一件烦心事于我就相当于一...</small></li>
<li><a href="http://blog.solrex.org/articles/some-household-affairs.html" title="家居二三事">家居二三事</a> <span class="count">(3)</span> - <small class="excerpt">以前曾经有过吐槽，租房住的一大缺憾就是没法按照自己的想法布置房子，即使看上了某样家具，也能负担得起，...</small></li>
<li><a href="http://blog.solrex.org/articles/about-cockroach.html" title="灭蟑记">灭蟑记</a> <span class="count">(2)</span> - <small class="excerpt">我从小在豫东平原上长大，原来家在乡下，耗子昆虫自然是少不了的。小时候耗子特别多，还使用过那种特别的老...</small></li>
<li><a href="http://blog.solrex.org/articles/jan-28th-train-1303-heading-home.html" title="1月28日，1303次回家">1月28日，1303次回家</a> <span class="count">(7)</span> - <small class="excerpt">致歉： 因为某个众所周知的原因，我的博客 http://blog.solrex.cn 的托管服务器在...</small></li>
<li><a href="http://blog.solrex.org/articles/the-year-before-2012.html" title="2012的前一年">2012的前一年</a> <span class="count">(4)</span> - <small class="excerpt">回顾了一下我的 2011 年，做了下面这幅图：</small></li>
<li><a href="http://blog.solrex.org/articles/five-days-in-qingdao.html" title="青岛行记">青岛行记</a> <span class="count">(4)</span> - <small class="excerpt">在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/relocate-to-fengtai.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Python JSON模块解码中文的BUG</title>
		<link>http://blog.solrex.org/articles/python-json-decode-chinese-bug.html</link>
		<comments>http://blog.solrex.org/articles/python-json-decode-chinese-bug.html#comments</comments>
		<pubDate>Wed, 16 May 2012 07:47:46 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Character]]></category>
		<category><![CDATA[Chinese]]></category>
		<category><![CDATA[GB18030]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=640019</guid>
		<description><![CDATA[很多语言或协议选择使用 ASCII 字符 “\”(backslash，0x5c) 作为字符串的转义符，包括 JSON 中的字符串。一般来说，使用 Python &#8230; <a href="http://blog.solrex.org/articles/python-json-decode-chinese-bug.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>很多语言或协议选择使用 ASCII 字符 “\”(backslash，0x5c) 作为字符串的转义符，包括 JSON 中的字符串。一般来说，使用 Python 中的 JSON 模块编码英文，不会存在转义符的问题。但如果使用 JSON 模块编解码中文，就可能面临着中文字符包含转义符带来的 bug。本篇文章给出了一个 badcase。</p>
<h2>中文解码错误</h2>
<p>测试用例文件里面包含繁体的“運動”二字，使用 GB18030 编码。使用 json 解码的错误如下：</p>
<pre>
$ cat decode.dat
{"a":"運動"}
$ python
>>> import json
>>> fp=open('decode.dat', 'r')
>>> json.load(fp, encoding='gb18030')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/yangwb/local/lib/python2.7/json/__init__.py", line 278, in load
    **kw)
  File "/home/yangwb/local/lib/python2.7/json/__init__.py", line 339, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/home/yangwb/local/lib/python2.7/json/decoder.py", line 360, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/home/yangwb/local/lib/python2.7/json/decoder.py", line 376, in raw_decode
    obj, end = self.scan_once(s, idx)
UnicodeDecodeError: 'gb18030' codec can't decode byte 0xdf in position 0: incomplete
multibyte sequence
</module></stdin></pre>
<p>发生这个问题的原因，就存在于“運”字的编码之中。“運”的 GB18030 编码是 0xdf5c，由于第二个字符与转义符 “\” 编码相同，所以剩下的这个 0xdf 就被认为是一个 incomplete multibyte sequence。</p>
<p>我本来认为，既然已经提供了编码，json 模块就能够区分汉字与转义符（所以我觉得这应该是 json 的一个 bug）。但从实验来看，并非如此。对于一些不需提供字符编码的 JSON 解码器来说，我们倒可以用一种比较 tricky 的方法绕过上面这个问题，即在“運”字后面加一个额外的转义符：</p>
<pre>
{"a":"運\動"}
</pre>
<p>遗憾的是，这种方法对 Python 的 json 模块不适用。我仍不知道该如何解决这个解码问题。</p>
<h2>中文编码——没错误！</h2>
<p>对于相同的 case，Python 倒是能够编码成功：</p>
<pre>
$ cat in.dat
運動
$ python
>>> import json
>>> in_str = open('in.dat', 'r').read()
>>> out_f = open('out.dat', 'w', 0)
>>> dump_str = json.dumps({'a': in_str}, ensure_ascii=False, encoding='gb18030')
>>> out_f.write(dump_str.encode('gb18030'))
$ cat out.dat
{"a": "運動"}
</pre>
<p>所以这件事情就把我给搞糊涂了，Python 的 json 模块不能解码自己编码的 json 串。所以我觉得这可能是一个 bug，或者至少是 2.7.1 版本的 bug。</p>
<h2>PS: 要仔细看文档</h2>
<p>20120516：经网友 <a href="http://weibo.com/treapdb">TreapDB</a> 提醒，加载字符串时自己做 Unicode 转换，貌似能够解决这个问题。</p>
<pre>
$ cat decode.dat
{"a":"運動"}
$ python
>>> import json
>>> in_str = open('decode.dat', 'r').read().decode('gb18030')
>>> json.loads(in_str)
</pre>
<p>回头仔细看了一下 <a href="http://docs.python.org/library/json.html">json 的文档</a>，其中有这么一段：</p>
<blockquote><p>
Encodings that are not ASCII based (such as UCS-2) are not allowed, and should be wrapped with codecs.getreader(encoding)(fp), or simply decoded to a unicode object and passed to loads().
</p></blockquote>
<p>已经注明了 encoding 不支持非 ASCII-based 编码的参数，所以应该使用 getreader 进行转码，而不是让 json 模块去转码。看来是我没读懂文档，大惊小怪了，回家面壁去！</p>
<pre>
>>> json.load(codecs.getreader('gb18030')(fp))
</pre>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/does-vasprintf-allocate-space-on-stack.html" title="vasprintf 会将空间分配到栈上吗？">vasprintf 会将空间分配到栈上吗？</a> <span class="count">(11)</span> - <small class="excerpt">由于提交过几次 Linux Fetion 的 bug 和 patch，Linux Fetion 的开...</small></li>
<li><a href="http://blog.solrex.org/articles/on-logging-performance.html" title="警惕程序日志对性能的影响">警惕程序日志对性能的影响</a> <span class="count">(2)</span> - <small class="excerpt">做后台系统比做客户端软件的辛苦的地方，就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试...</small></li>
<li><a href="http://blog.solrex.org/articles/exvim-dir-filter-reversed.html" title="修改exvim目录过滤逻辑为匹配拒绝">修改exvim目录过滤逻辑为匹配拒绝</a> <span class="count">(0)</span> - <small class="excerpt">exVim 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 ...</small></li>
<li><a href="http://blog.solrex.org/articles/using-functor-in-sort.html" title="std::sort 的仿函数参数">std::sort 的仿函数参数</a> <span class="count">(1)</span> - <small class="excerpt">因为习惯了 qsort 的函数指针参数，以前用 std::sort 的时候一般也是传函数指针而不是仿...</small></li>
<li><a href="http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html" title="Leveldb 编译错误背后的C++标准变化">Leveldb 编译错误背后的C++标准变化</a> <span class="count">(1)</span> - <small class="excerpt">在编译 Levedb 时，我遇到了这个错误：g++ -c -I. -I./include -fno-...</small></li>
<li><a href="http://blog.solrex.org/articles/road-test-passed.html" title="通过科目三路考">通过科目三路考</a> <span class="count">(2)</span> - <small class="excerpt">前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。想起来这半年也是折腾不断。我是 2 月底参加...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/python-json-decode-chinese-bug.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WP Super Cache插件带来的500错误</title>
		<link>http://blog.solrex.org/articles/wp-super-cache-500-error.html</link>
		<comments>http://blog.solrex.org/articles/wp-super-cache-500-error.html#comments</comments>
		<pubDate>Wed, 09 May 2012 12:35:49 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[应用软件]]></category>
		<category><![CDATA[500]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Internal]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=640016</guid>
		<description><![CDATA[今天博客服务器（Hostmonster 主机）全站从中午开始出现 500 错误，然后我登陆进 CPanel 各种查看日志、进程、数据库、PHP 状态，均未发现异常。后来又清理 php.ini、.htaccess，重启 &#8230; <a href="http://blog.solrex.org/articles/wp-super-cache-500-error.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今天博客服务器（<a href="http://hostmonster.com">Hostmonster</a> 主机）全站从中午开始出现 500 错误，然后我登陆进 CPanel 各种查看日志、进程、数据库、PHP 状态，均未发现异常。后来又清理 php.ini、.htaccess，重启 PHP，也没有任何改善。只好给客服投了个 Ticket，准备等待客服解决。</p>
<p>后来灵机一动，发现同一主机 host 的其它 WordPress，有的活得很好，有的也是挂掉了。于是用排除法清理 wp-config.php，最终确定是 wp-config.php 中的 WP_CACHE 配置项有问题，删掉之后访问就恢复正常。</p>
<pre>
define('WP_CACHE', true); //Added by WP-Cache Manager
</pre>
<p>但由于 WP_CACHE 配置项是 WP Super Cache 自动增加的，一旦登陆进后台，WP Super Cache 就会自动把它再加上，后台页面又会出现 500 错误。于是乎我只好将整个 WP Super Cache 插件干掉（包括 wp-content 下的 php 脚本），终于一切恢复了正常。印象里删掉的 WP Super Cache 的版本是 0.9.9.*。</p>
<pre>
rm advanced-cache.php backup-*  cache/  wp-cache-config.php plugins/wp-super-cache/ -rf
</pre>
<p>考虑到 WP Super Cache 还是对性能有一定改善，又看了一下最新版的 WP Super Cache 是 1.0 版，我怀疑是 WP Super Cache 版本较旧造成的问题。虽然该版本已经使用了很长时间，不明白为什么今天才会爆出来 500 错误（也许 Hostmonster 主机程序进行了升级？），我还是装上了最新版本 WP Super Cache 插件。期望它不要再出现类似问题，否则只能弃用了。</p>
<p>既然我的博客不是同一主机上的个例，我想可能在 Hostmonster 上的其它主机也可能会遇到此类问题，特记录下来供参考。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/wordpress-comments-merger.html" title="Wordpress博客评论合并工具">WordPress博客评论合并工具</a> <span class="count">(7)</span> - <small class="excerpt">接上篇，这里共享我写的一个用来合并 WordPress 博客评论的小工具。该工具可以将两个镜像 Wo...</small></li>
<li><a href="http://blog.solrex.org/articles/wordpress-28-and-281-beta1-sucks.html" title="Wordpress 2.8 和 2.8.1 beta1 毛病真多">WordPress 2.8 和 2.8.1 beta1 毛病真多</a> <span class="count">(9)</span> - <small class="excerpt">前两天我才在 Twitter 炫耀了一下我忍住没当小白的努力，没想到昨天晚上被哥们一忽悠，他说他没有...</small></li>
<li><a href="http://blog.solrex.org/articles/new-wordpress-theme.html" title="WP 换了个新主题">WP 换了个新主题</a> <span class="count">(6)</span> - <small class="excerpt">我也记不得从什么时候开始用 mg12 写的 iNove 主题了。当时选择它的主要原因是贴心，集成了很...</small></li>
<li><a href="http://blog.solrex.org/articles/tragically-msn-space.html" title="悲剧的 MSN Space">悲剧的 MSN Space</a> <span class="count">(4)</span> - <small class="excerpt">MSN Space 总算倒了，所有用户都要求被迁往 wordpress.com，或者下载备份文件。话...</small></li>
<li><a href="http://blog.solrex.org/articles/bye-bye-yo2cn.html" title="博客迁出 yo2.cn">博客迁出 yo2.cn</a> <span class="count">(5)</span> - <small class="excerpt">近两年以来我都是使用的 yo2.cn 提供的博客托管服务，就是说 yo2.cn 提供一个 Wordp...</small></li>
<li><a href="http://blog.solrex.org/articles/rin-wendy-com.html" title="惊艳 rin-wendy.com">惊艳 rin-wendy.com</a> <span class="count">(8)</span> - <small class="excerpt">这个网站的 WordPress 主题太——漂亮了！！！太可爱了！！！太喜欢了！！！http://ri...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/wp-super-cache-500-error.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>警惕程序日志对性能的影响</title>
		<link>http://blog.solrex.org/articles/on-logging-performance.html</link>
		<comments>http://blog.solrex.org/articles/on-logging-performance.html#comments</comments>
		<pubDate>Fri, 27 Apr 2012 13:58:18 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[Logging]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=640006</guid>
		<description><![CDATA[做后台系统比做客户端软件的辛苦的地方，就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试 bug，很多时候需要程序日志提供足够的信息，所以一个后台系统的程序员必须要明白该如何打日志（logging）。 很多语言都有自己现成的 logging 库，比如 Python 标准库中的 logging &#8230; <a href="http://blog.solrex.org/articles/on-logging-performance.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>做后台系统比做客户端软件的辛苦的地方，就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试 bug，很多时候需要程序日志提供足够的信息，所以一个后台系统的程序员必须要明白该如何打日志（logging）。</p>
<p>很多语言都有自己现成的 logging 库，比如 Python 标准库中的 <a href="http://docs.python.org/library/logging.html" target="_blank">logging</a> 模块，Apache 的 <a href="http://logging.apache.org/log4cxx/" target="_blank">log4cxx(C++)</a>, <a href="http://logging.apache.org/log4j/" target="_blank">log4j(Java)</a>。如果你愿意找，很容易能找到基本满足自己需求的日志程序库。当然，自己实现一个也不是很困难。难点不在于写这些库，而是如何去使用它们。</p>
<p>大部分情况下，我们关注的都是日志的级别和内容。即哪些情况下，该打哪个级别的日志，日志语句中，该怎么写。</p>
<p>在程序开发的过程中，我们需要很多的日志协助分析程序问题；但在生产环境中，我们没有那么多的空间存储丰富的日志，而且日志量太大对于问题排查反而是累赘。有些人使用预处理解决这个问题，在 debug 版本和 release 版本中编译进不同的日志语句。这样能够解决一些问题，但却使得在生产环境中无法轻易地打印更多的日志。大部分人更接受的做法是，使用配置（参数）控制日志的打印级别，在需要更多日志的时候，可以随时打开它们。为了实现日志“少但是足够”的目标，开发人员必须明白日志信息的价值，即哪些日志应该属于哪个级别。</p>
<p>日志的作用是提供信息，但不同的日志语句，提供的信息量却是不一样的。有的日志里会写“Failed to get sth..”，但却忘记加上失败调用的返回值。同程序一样，日志语句中有的是变量（某个变量内容），有的是常量（提示信息）。常量你总能从程序源代码中获得，但变量不行。所以在一条日志中，信息量最大的是变量，是函数返回值/字符串内容/错误码，因而变量应该尽量放在靠前的位置。常量也不是一点价值没有，写得好的提示语句，会使问题一目了然，可以免去你到代码中 grep，然后重读代码的麻烦。</p>
<p>上面这两点，几乎所有知道 logging 重要性的同学都会了解。但关于 logging 对性能的影响，很多人没有足够的警惕心。例如有人会在一个按行解析文件的函数中写下这样的日志：</p>
<pre>
int parseline(...)
{
log_trace("Enter parseline with ...");
DO_SOMETHING;
log_trace("Exit parseline with ...");
return 0;
}
</pre>
<p>乍一看，由于 log_trace 级别不高，在生产环境中肯定会关闭，那么这样做看起来对性能没太大影响。但实际上 log_trace 可能是这样实现的：</p>
<pre>
#define log_trace(fmt, arg...) \
    xx_log(LVL_TRACE, "[%s:%d][time:%uus]" fmt, __FILE__, __LINE__,\
           log_getussecond(), ## arg)
#endif
</pre>
<p>可以看到 log_trace 宏中自动添加了很多信息，值得注意的是时间参数 log_getussecond()。大家都知道统计时间需要系统调用，那么无论 log_getussecond() 函数是如何实现的，它的代价肯定是高于一般的简单函数。</p>
<p>我们本以为 log_trace 在 LVL_TRACE 级别被关闭的情况下，消耗的代价仅仅是一个函数调用和分支判断，却没有发现宏参数中还隐藏着一个需要调用系统调用的函数。当文件不大是还算能够忍受，但当这个文件是一个数据库，扫描每一行都要执行两次 log_trace() 时，它对系统性能的影响就绝不可忽视了。</p>
<p>所以，最佳的做法还是，在性能攸关的代码中，使用可被预处理掉的 logging 语句，仅仅在 debug 发布中才能见到这些日志，release 版本中不把它们编译进来。</p>
<p>此外，上面这个 log_trace，是一个糟糕的设计。logging 模块只应该干 logging 的事情，开发人员需要时间统计时会自己完成。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/logging-in-shell-script.html" title="在 shell 脚本里打日志">在 shell 脚本里打日志</a> <span class="count">(4)</span> - <small class="excerpt">今天小弟在重构代码中的一个脚本模块，其中涉及到日志功能。上午花了点儿时间想出了个在 shell 打日...</small></li>
<li><a href="http://blog.solrex.org/articles/python-json-decode-chinese-bug.html" title="Python JSON模块解码中文的BUG">Python JSON模块解码中文的BUG</a> <span class="count">(5)</span> - <small class="excerpt">很多语言或协议选择使用 ASCII 字符 “\”(backslash，0x5c) 作为字符串的转义符...</small></li>
<li><a href="http://blog.solrex.org/articles/exvim-dir-filter-reversed.html" title="修改exvim目录过滤逻辑为匹配拒绝">修改exvim目录过滤逻辑为匹配拒绝</a> <span class="count">(0)</span> - <small class="excerpt">exVim 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 ...</small></li>
<li><a href="http://blog.solrex.org/articles/using-functor-in-sort.html" title="std::sort 的仿函数参数">std::sort 的仿函数参数</a> <span class="count">(1)</span> - <small class="excerpt">因为习惯了 qsort 的函数指针参数，以前用 std::sort 的时候一般也是传函数指针而不是仿...</small></li>
<li><a href="http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html" title="Leveldb 编译错误背后的C++标准变化">Leveldb 编译错误背后的C++标准变化</a> <span class="count">(1)</span> - <small class="excerpt">在编译 Levedb 时，我遇到了这个错误：g++ -c -I. -I./include -fno-...</small></li>
<li><a href="http://blog.solrex.org/articles/road-test-passed.html" title="通过科目三路考">通过科目三路考</a> <span class="count">(2)</span> - <small class="excerpt">前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。想起来这半年也是折腾不断。我是 2 月底参加...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/on-logging-performance.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>64位Ubuntu上使用Network Connect</title>
		<link>http://blog.solrex.org/articles/juniper-network-connect-on-64bit-linux.html</link>
		<comments>http://blog.solrex.org/articles/juniper-network-connect-on-64bit-linux.html#comments</comments>
		<pubDate>Sun, 08 Apr 2012 08:50:23 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[应用软件]]></category>
		<category><![CDATA[64-bit]]></category>
		<category><![CDATA[Juniper]]></category>
		<category><![CDATA[Network Connect]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639986</guid>
		<description><![CDATA[Network Connect 是 Juniper 公司出品的配合其安全硬件 VPN 解决方案的软件包，很多公司使用这个 VPN &#8230; <a href="http://blog.solrex.org/articles/juniper-network-connect-on-64bit-linux.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Network Connect 是 Juniper 公司出品的配合其安全硬件 VPN 解决方案的软件包，很多公司使用这个 VPN 解决方案，一般需要使用 RSA Token 动态密码登录。Network Connect 支持 Windows 和 Linux 操作系统，但很遗憾的是，它只支持 32 位 Linux。下面以 Ubuntu 为例，介绍如何</p>
<h2>在 64 位 Linux  上安装并使用 Juniper Network Connect</h2>
<p>1. 安装浏览器 Java 插件（64位）；</p>
<pre>$ sudo apt-get install icedtea-plugin</pre>
<p>虽然看起来只安装了一个软件包，但实际上可能会下载依赖的 OpenJDK 的一系列软件包。这是为了在 Firefox 下能够正确启动 Network Connect 的安装过程。</p>
<p>2. 修改 root 密码；</p>
<pre>$ sudo passwd</pre>
<p>由于 Ubuntu 默认不使用 root 用户，下面自动安装 Network Connect 软件时候又必须提供 root 密码，所以这里必须先初始化 root 的密码。</p>
<p>3. 打开 Firefox，访问 VPN 网站。</p>
<p>像在 Windows 下那样，先登录进入 VPN 页面，再点击 start，启动 Network Connect 的自动安装过程。过程中会弹出一个很丑的终端，安装时需要输入 root 密码，但是最终必定是无法弹出 Network Connect 小图标，也连接不上。</p>
<p>4. 下载脚本 <a href="http://mad-scientist.net/junipernc">junipernc</a>[1]，并且安装到执行目录 /usr/bin 中；</p>
<pre>$ wget http://mad-scientist.net/junipernc -O junipernc
$ chmod 755 junipernc
$ sudo mv junipernc /usr/bin</pre>
<p>5. 安装 Network Connect 二进制程序依赖的 32 位动态链接库；</p>
<p>NC 具体的可执行程序是 ～/.juniper_networks/network_connect/ncsv ，是 32 位的可执行程序。如果不安装它依赖的 32 位动态链接库[2]，该程序是执行不了的。</p>
<pre>$ sudo apt-get install libc6-i386 lib32z1 lib32nss-mdns</pre>
<p>6. 执行 junipernc 脚本，会跳出各种对话框，对应填入各种参数；</p>
<pre>$ junipernc --nojava</pre>
<p>URL 就填入 VPN 网站的域名，USER 就是自己的用户名，REALM 比较麻烦，需要自己查看 VPN 网站登录页面的源代码，看对应 REALM 域实际表单提交的 value 是什么，填进去即可。</p>
<p>--nojava 的意思是，只执行 VPN 连接，不启动 Network Connect 小锁图标的 Java 程序。因为该 Java 程序要求 32 位 Java 环境。</p>
<p>连接失败会有提示；连接成功后，junipernc 会一直停在那里，终止连接可以使用 Ctrl-C 命令行，或者 sudo killall -9 ncsv。</p>
<p>6-1. 修改 junipernc 配置；</p>
<p>junipernc 有两个配置文件，一个是 ～/.vpn.default.cfg，保存着用户手工输入的配置；一个是 ~/.vpn.default.crt，这个是从网站上下载下来的证书。</p>
<p>这样，一般的 VPN 连接功能就实现了。如果希望启动 Network Connect 小锁图标并监控 VPN 的流量信息，就需要</p>
<h2>在 64 位 Ubuntu 上安装 32 位 Java 环境[3]</h2>
<p>如果不是特别需要，不建议折腾下面这套东西。</p>
<p>a. 到 Oracle 网站上下载 32位 Java 的 tar 包；</p>
<p>到这个地址：<a href="http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk" target="_blank">http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk</a>下载例如 jre-7u3-linux-i586.tar.gz 的 Linux JRE 包。重要的特征是那个 i586。</p>
<p>b. 解压并安装到 jvm 目录，调整默认 java 的链接到 32位 JRE。</p>
<pre>$ tar xzvf jre-7u3-linux-i586.tar.gz
$ sudo mv jre1.7.0_03 /usr/lib/jvm
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jre1.7.0_03/bin/
java 73
$ sudo update-alternatives --config java</pre>
<p>最后一个命令会给出一个 Java 的列表，如下所示，选择 jre1.7.0_03 对应的编号即可。</p>
<pre>There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                      Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
  1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
* 2            /usr/lib/jvm/jre1.7.0_03/bin/java          73        manual mode

Press enter to keep the current choice[*], or type selection number: <strong>2</strong>
</pre>
<p>c. 验证 java 可以执行且版本正确（其实依赖上面的第 5 步）；</p>
<pre>$ java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Server VM (build 22.1-b02, mixed mode)</pre>
<p>d. 安装 32位 JRE 可能依赖的 32位动态链接库。</p>
<pre>$ sudo apt-get install ia32-libs</pre>
<p>这个包会依赖非常多的 32位链接库，安装过程会比较漫长。</p>
<p>参考文章：</p>
<p>[1] <a href="http://mad-scientist.us/juniper.html" target="_blank">Using Juniper Network Connect on Ubuntu</a><br />
[2] <a href="http://blog.chinaunix.net/uid-20790666-id-313575.html"  target="_blank">Debian6(64位)搞掂Juniper VPN</a><br />
[3] <a href="http://askubuntu.com/questions/69257/installing-32-bit-java-now-that-ia32-sun-java6-bin-is-not-available" target="_blank">Installing 32 bit java now that ia32-sun-java6-bin is not available</a><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/jaunty-alpha-test.html" title="Ubuntu 9.04 安装手记">Ubuntu 9.04 安装手记</a> <span class="count">(8)</span> - <small class="excerpt">此次安装是在一台 Dell OptiPlex 740 台式机上进行，处理器 AMD Athlon 6...</small></li>
<li><a href="http://blog.solrex.org/articles/some-problems-with-ubuntu-710.html" title="Ubuntu 7.10 的一些小问题">Ubuntu 7.10 的一些小问题</a> <span class="count">(2)</span> - <small class="excerpt">这两天用 Ubuntu 7.10 和 Compiz-Fusion 遇到了几个小问题：1. Firef...</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/beryl-is-so-cool.html" title="Beryl is so cool">Beryl is so cool</a> <span class="count">(1)</span> - <small class="excerpt">以前看到 SUSE 10.1 带的 beryl 效果，觉得非常有意思，但肯定会吃资源，就没想过尝试。...</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/fix-black-screen-problem-of-ubuntu-9-10.html" title="Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630">Fix Black Screen After Boot Problem of Ubuntu 9.10 on D630</a> <span class="count">(6)</span> - <small class="excerpt">Platform: Dell Latitude D630, Nvidia NVS 135M, Int...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/juniper-network-connect-on-64bit-linux.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>修改exvim目录过滤逻辑为匹配拒绝</title>
		<link>http://blog.solrex.org/articles/exvim-dir-filter-reversed.html</link>
		<comments>http://blog.solrex.org/articles/exvim-dir-filter-reversed.html#comments</comments>
		<pubDate>Thu, 05 Apr 2012 09:23:27 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[应用软件]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[exVim]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639972</guid>
		<description><![CDATA[exVim 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 exVim 后，我基本没有再自定义 &#8230; <a href="http://blog.solrex.org/articles/exvim-dir-filter-reversed.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ex-dev.com/exvim/">exVim</a> 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 exVim 后，我基本没有再自定义 Vim 插件，完全依赖 exVim 打包的辅助功能。</p>
<p>最近让我略有不爽的使用问题是：exVim 默认的 file filter 和 dir filter 都是<strong>匹配通过</strong>的，即“匹配 filter 过滤条件的目录和文件被通过，列入项目目录、文件列表中”。</p>
<div id="attachment_639980" class="wp-caption aligncenter" style="width: 285px"><a href="http://blog.solrex.org/wp-content/uploads/2012/04/exvim-dir-filter.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/04/exvim-dir-filter.jpg" alt="" title="exVim 的 dir filter" width="275" height="72" class="size-full wp-image-639980" /></a><p class="wp-caption-text">exVim 的 dir filter</p></div>
<p>对于文件来说，设置匹配通过毫无问题。因为我也想要项目中仅包含 “.cpp,.c,.h,.py” 这样的源代码文件，选出来匹配这些模式的文件就是我希望的结果。</p>
<p>但是对于目录来说，设置匹配通过就与我通常的需求相悖了。一般情况下，项目目录下的所有目录都是程序需要的。但是一些专门存放测试程序、测试框架、输出文件的目录，我其实不希望显示在我的项目中。而且 exVim 中的目录过滤貌似仅限在项目顶层目录中，过滤的意义不大。</p>
<p>所以我修改了一下 exVim 的代码，将默认的 dir filter 含义修改为<strong>匹配拒绝</strong>，即：“匹配 dir filter 的目录被拒绝（被过滤掉），无论它在哪一级。"例如，我将 dir filter 设置为 “test,output”，那么我项目目录下所有叫做 test 或者 output 的子目录都不会显示到项目目录列表中，而不妨碍其它名称目录的通过。</p>
<p>可以想见两个 filter 采用不同的通过逻辑并不是 exVim 开发者希望看到的，所以我想这个修改也没必要提交给开发者。不过我仍然觉得这是很有用的一个修改，所以拿出来分享一下。修改的补丁文件见：<a href="http://share.solrex.org/ibuild/exvim-dir_filter-8.05_b2.patch">http://share.solrex.org/ibuild/exvim-dir_filter-8.05_b2.patch</a>。</p>
<p>PS: patch 文件中还有一个改动是将 quick_gen_project_PROJECT_autogen.sh 文件从项目目录下，移动到项目目录下的 .vimfiles.PROJECT/ 目录中，原因是看起来碍眼 :)<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html" title="代码行统计工具-CLOC">代码行统计工具-CLOC</a> <span class="count">(1)</span> - <small class="excerpt">在工作中有时会有需要统计代码的行数，一般会用 wc 给出一个大致的结果。只不过在源代码文件分布比较分...</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/install-kscope-on-ubuntu-9-04.html" title="在 Ubuntu 9.04 上安装 Kscope">在 Ubuntu 9.04 上安装 Kscope</a> <span class="count">(8)</span> - <small class="excerpt">Kscope 是我很喜欢的 Linux 平台上的代码查看工具，因为我不会用 Emacs，vim + ...</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/python-json-decode-chinese-bug.html" title="Python JSON模块解码中文的BUG">Python JSON模块解码中文的BUG</a> <span class="count">(5)</span> - <small class="excerpt">很多语言或协议选择使用 ASCII 字符 “\”(backslash，0x5c) 作为字符串的转义符...</small></li>
<li><a href="http://blog.solrex.org/articles/on-logging-performance.html" title="警惕程序日志对性能的影响">警惕程序日志对性能的影响</a> <span class="count">(2)</span> - <small class="excerpt">做后台系统比做客户端软件的辛苦的地方，就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/exvim-dir-filter-reversed.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>携友闲逛798</title>
		<link>http://blog.solrex.org/articles/the-saturday-in-798.html</link>
		<comments>http://blog.solrex.org/articles/the-saturday-in-798.html#comments</comments>
		<pubDate>Mon, 26 Mar 2012 15:39:29 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[摄影]]></category>
		<category><![CDATA[798]]></category>
		<category><![CDATA[Arts]]></category>
		<category><![CDATA[Photo]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[朋友]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639952</guid>
		<description><![CDATA[上周末正好有事到望京附近，顺便带老婆和朋友一起逛了逛 798 艺术中心，照了几张照片。我在里面逛得倒是依然自得，可惜同行的两位女同学兴致寥寥，于是没待太久就散了。 您可能对这些感兴趣： 第一次香山 (0) - 下午在电视上看了个《李献计历险记》，直接没把我脑壳看坏掉。之后七荤八素地躺在床上，在似睡似醒中迷瞪了... &#8230; <a href="http://blog.solrex.org/articles/the-saturday-in-798.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>上周末正好有事到望京附近，顺便带老婆和朋友一起逛了逛 798 艺术中心，照了几张照片。我在里面逛得倒是依然自得，可惜同行的两位女同学兴致寥寥，于是没待太久就散了。</p>
<p>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4552' title='希希'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4552-200x133.jpg" class="attachment-thumbnail" alt="美女在瞄谁那" title="希希" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4560' title='涂鸦'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4560-200x133.jpg" class="attachment-thumbnail" alt="随处可见的涂鸦" title="涂鸦" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4561' title='地砖'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4561-200x133.jpg" class="attachment-thumbnail" alt="不小心碰到快门，拍下了一地沧桑" title="地砖" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4563' title='小汪同学'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4563-200x133.jpg" class="attachment-thumbnail" alt="阳光灿烂的日子" title="小汪同学" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4569' title='厂房侧影'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4569-200x133.jpg" class="attachment-thumbnail" alt="红砖锈管灰窗棂" title="厂房侧影" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4573' title='厂房'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4573-200x133.jpg" class="attachment-thumbnail" alt="斑驳的屋檐" title="厂房" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4574' title='玫瑰之名'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4574-200x133.jpg" class="attachment-thumbnail" alt="红墙上的玫瑰" title="玫瑰之名" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4581' title='某小两口'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4581-200x133.jpg" class="attachment-thumbnail" alt="某小两口" title="某小两口" /></a>
<a href='http://blog.solrex.org/articles/the-saturday-in-798.html/img_4594' title='不孤独的ESPRITE'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/IMG_4594-200x133.jpg" class="attachment-thumbnail" alt="不孤独的ESPRITE" title="不孤独的ESPRITE" /></a>
<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/xiangshan-the-first-time.html" title="第一次香山">第一次香山</a> <span class="count">(0)</span> - <small class="excerpt">下午在电视上看了个《李献计历险记》，直接没把我脑壳看坏掉。之后七荤八素地躺在床上，在似睡似醒中迷瞪了...</small></li>
<li><a href="http://blog.solrex.org/articles/five-days-in-qingdao.html" title="青岛行记">青岛行记</a> <span class="count">(4)</span> - <small class="excerpt">在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店...</small></li>
<li><a href="http://blog.solrex.org/articles/ju-da-bu-yi.html" title="居大不易，找由头聚聚">居大不易，找由头聚聚</a> <span class="count">(7)</span> - <small class="excerpt">现在有一大感慨：工作以后，想维持一个稳定的博客更新频率真不容易。按照“每周一篇”的愿景来看，这月我还...</small></li>
<li><a href="http://blog.solrex.org/articles/nju-mathers-in-beijing.html" title="在北京的数学系的娃儿们">在北京的数学系的娃儿们</a> <span class="count">(5)</span> - <small class="excerpt">既然今天大家都无心工作，咳咳，那我就来更新篇博客吧。好久没有上传照片，今天来更新张图：中秋节前某 C...</small></li>
<li><a href="http://blog.solrex.org/articles/the-passed-weekends.html" title="逝去的周末">逝去的周末</a> <span class="count">(45)</span> - <small class="excerpt">我觉得我越来越向居家男人的特质靠近了。虽然咱公司实行的是弹性工作制，不强制要求上班时间，但是我早上要...</small></li>
<li><a href="http://blog.solrex.org/articles/it-birds-review.html" title="因为真实才宝贵">因为真实才宝贵</a> <span class="count">(15)</span> - <small class="excerpt">读大学时我很佩服一个老师。他教过我两门课，两门都是计算机类的课程，在数学系并不很受欢迎。他讲得不错，...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/the-saturday-in-798.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MIUI的贴心功能</title>
		<link>http://blog.solrex.org/articles/miui-pros.html</link>
		<comments>http://blog.solrex.org/articles/miui-pros.html#comments</comments>
		<pubDate>Fri, 09 Mar 2012 06:17:29 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[应用软件]]></category>
		<category><![CDATA[无线和移动]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Cell Phone]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[MIUI]]></category>
		<category><![CDATA[ROM]]></category>
		<category><![CDATA[SmartPhone]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639918</guid>
		<description><![CDATA[预先声明：这不是一篇软文，我真的是出于对 MIUI 系统的喜爱才写的。 我的手机型号是华为 U8800，联通定制机，自带的 ROM 里太多乱七八糟的软件，后来就刷了华为官版的海外 ROM。这个 &#8230; <a href="http://blog.solrex.org/articles/miui-pros.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>预先声明：这不是一篇软文，我真的是出于对 MIUI 系统的喜爱才写的。</p></blockquote>
<p>我的手机型号是华为 U8800，联通定制机，自带的 ROM 里太多乱七八糟的软件，后来就刷了华为官版的海外 ROM。这个 ROM 是比较干净的版本，但不知道为何老是黑屏重启，基本上每天会重启了一两次。毕竟追求的是性价比，这点儿缺陷我就忍了。</p>
<p>不过基于安卓用户的刷机习惯，后来我还是忍不住刷了<strong>修改的 MIUI ROM</strong>——因为我的手机型号不在 MIUI 的支持列表里。第一次刷的是 2011 光棍节版，前两天又更新到 2.3.2 版。MIUI 很多贴心改进让我爱不释手，下面我会列举一下。</p>
<ol>
<li>
<p>菜单键+音量- 执行屏幕截图，下面的图片有些是用这个功能截的。</p>
</li>
<li>
<p>拨号键盘使用 T9 拼音直接搜索联系人，支持模糊查询。<br />
<div id="attachment_639919" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_125452.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_125452.jpg" alt="" title="拨号键盘" width="240" height="400" class="size-full wp-image-639919" /></a><p class="wp-caption-text">拨号键盘</p></div></p>
</li>
<li>
<p>通知栏内置很多有用的功能快捷开关。<br />
<div id="attachment_639920" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1322.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1322.jpg" alt="" title="通知栏" width="240" height="400" class="size-full wp-image-639920" /></a><p class="wp-caption-text">通知栏</p></div></p>
</li>
<li>
<p>系统自带防打扰过滤器功能，可以按照规则过滤垃圾短信和电话。<br />
<div id="attachment_639923" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1330.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1330.jpg" alt="" title="防打扰" width="240" height="400" class="size-full wp-image-639923" /></a><p class="wp-caption-text">防打扰</p></div></p>
</li>
<li>
<p>可在联系人列表中直接查看到手机号码的归属地，这样当某些朋友有多个手机号码时，容易判断该打哪一个。</p>
<div id="attachment_639928" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1336.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1336.jpg" alt="" title="联系人" width="240" height="400" class="size-full wp-image-639928" /></a><p class="wp-caption-text">联系人</p></div>
</li>
<li>
<p>陌生人的未接电话可以显示号码归属地和响铃次数，而且第一声响铃静音。这对判断来电是否是垃圾电话非常有帮助。</p>
<div id="attachment_639930" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1352.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1352.jpg" alt="" title="陌生人来电" width="240" height="400" class="size-full wp-image-639930" /></a><p class="wp-caption-text">陌生人来电</p></div>
</li>
<li>
<p>内置流量监控和防火墙功能，可以为每个应用程序设置网络访问权限。</p>
<div id="attachment_639931" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1357.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1357.jpg" alt="" title="流量监控和防火墙" width="240" height="400" class="size-full wp-image-639931" /></a><p class="wp-caption-text">流量监控和防火墙</p></div>
</li>
<li>
<p>内置音乐播放器与百度合作，提供在线音乐功能。</p>
<div id="attachment_639932" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1359.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1359.jpg" alt="" title="音乐播放器" width="240" height="400" class="size-full wp-image-639932" /></a><p class="wp-caption-text">音乐播放器</p></div>
</li>
<li>
<p>内置手电筒功能，且在锁屏时可以长按 Home 键打开手电筒。这个功能实在是太有用了！</p>
<div id="attachment_639933" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1401.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1401.jpg" alt="" title="手电筒" width="240" height="400" class="size-full wp-image-639933" /></a><p class="wp-caption-text">手电筒</p></div>
</li>
<li>
<p>电话功能设置很多贴心小功能：自动录音、接通挂断时振动、来电挂断时提供短信回复、通话记录点击显示联系人信息等等。</p>
<div id="attachment_639934" class="wp-caption aligncenter" style="width: 250px"><a href="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1404.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/03/20120309_1404.jpg" alt="" title="电话设置" width="240" height="400" class="size-full wp-image-639934" /></a><p class="wp-caption-text">电话设置</p></div>
</li>
<p>最后值得一提的是，虽然不算个功能，但刷了 MIUI 之后，每天重启的现象居然没了！我完全没想到第三方修改的第三方 ROM 居然比官版 ROM 还稳定，这个出乎了我的意料。</ol>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/new-android-smartphone-huawei-u8800.html" title="入手国产安卓机华为U8800感受">入手国产安卓机华为U8800感受</a> <span class="count">(10)</span> - <small class="excerpt">我总算理解了为什么别人说安卓用户三大爱好是：刷机、重启、换电池！作为一个打拼在互联网界的民工，我不喜...</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/juniper-network-connect-on-64bit-linux.html" title="64位Ubuntu上使用Network Connect">64位Ubuntu上使用Network Connect</a> <span class="count">(4)</span> - <small class="excerpt">Network Connect 是 Juniper 公司出品的配合其安全硬件 VPN 解决方案的软件...</small></li>
<li><a href="http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html" title="代码行统计工具-CLOC">代码行统计工具-CLOC</a> <span class="count">(1)</span> - <small class="excerpt">在工作中有时会有需要统计代码的行数，一般会用 wc 给出一个大致的结果。只不过在源代码文件分布比较分...</small></li>
<li><a href="http://blog.solrex.org/articles/shell-tips-rsync-and-cron-variables.html" title="SHELL TIPS: rsync 和 crontab 变量">SHELL TIPS: rsync 和 crontab 变量</a> <span class="count">(4)</span> - <small class="excerpt">本周我遭遇了一个惨痛事件，远程开发机有两块硬盘同时损坏，整个分区数据完全丢失。这直接导致我在开发机上...</small></li>
<li><a href="http://blog.solrex.org/articles/raii-or-zombie-object.html" title="僵尸对象或 RAII">僵尸对象或 RAII</a> <span class="count">(7)</span> - <small class="excerpt">我最近在想这个问题，到底要不要在程序中使用异常？以前写的 C 代码比较多，即使写 C++，基本上也是...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/miui-pros.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>上海流水</title>
		<link>http://blog.solrex.org/articles/shanghai-2012.html</link>
		<comments>http://blog.solrex.org/articles/shanghai-2012.html#comments</comments>
		<pubDate>Fri, 02 Mar 2012 10:23:59 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[旅行]]></category>
		<category><![CDATA[Shanghai]]></category>
		<category><![CDATA[Trip]]></category>
		<category><![CDATA[Waitan]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639884</guid>
		<description><![CDATA[我上次去上海是 8 年前，记忆都已经模糊了，只剩下几个场景比较清晰。与吴诗涛坐在沪宁双层城际列车的楼梯间地板上享受列车空调，路过华东理工收费的小足球场和封闭的草坪足球场，以及在臭水沟边秦嘉诚宿舍里塞紧蚊帐捉蚊子。在豫园吃过什么已经忘了，只记得自动售货机的可乐很贵，地铁也很贵。逛南京路步行街的时候在下雨，走到外滩雨更大。在雨中仰望了一下金茂大厦和东方明珠电视塔，不记得那时有没有环球金融中心。 上周因公差有幸免费重游上海。之所以说有幸是因为互联网公司不比其它行业，即使是大公司，出差机会也很少。对于华为、宝洁这样的公司来说，恐怕不出差反而是有幸了。我也是第一次坐飞机——不要笑我。通过飞机相连，两个城市间的距离变得好小！ 这次到上海的第一印象是厚厚的云层，以及落地前虹桥机场附近的繁华，飞机就好像贴着闹市区的头顶飞过，宾馆饭店的霓虹灯广告牌都清楚可辨。出了航站楼，就闻到一股久违了的江南的潮湿空气，更重要的是，空气中没有煤烟味。经过北京漫长的冬天，这种感觉给人的冲击感太强烈了。 第一天是在张江工作，所以住在了锦江之星的张江店。我厂的上海研发中心跟安捷伦在同一幢楼里，很不起眼。室内装修跟大厦、奎科没有什么太大不同，哦，跟奎科没有什么太大不同。跟奎科一样，会议室也比较容易预定。开了一天会，不提。 由于次日是周末，所以当天晚上就坐地铁 2 &#8230; <a href="http://blog.solrex.org/articles/shanghai-2012.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我上次去上海是 8 年前，记忆都已经模糊了，只剩下几个场景比较清晰。与吴诗涛坐在沪宁双层城际列车的楼梯间地板上享受列车空调，路过华东理工收费的小足球场和封闭的草坪足球场，以及在臭水沟边秦嘉诚宿舍里塞紧蚊帐捉蚊子。在豫园吃过什么已经忘了，只记得自动售货机的可乐很贵，地铁也很贵。逛南京路步行街的时候在下雨，走到外滩雨更大。在雨中仰望了一下金茂大厦和东方明珠电视塔，不记得那时有没有环球金融中心。</p>
<p>上周因公差有幸免费重游上海。之所以说有幸是因为互联网公司不比其它行业，即使是大公司，出差机会也很少。对于华为、宝洁这样的公司来说，恐怕不出差反而是有幸了。我也是第一次坐飞机——不要笑我。通过飞机相连，两个城市间的距离变得好小！</p>
<p>这次到上海的第一印象是厚厚的云层，以及落地前虹桥机场附近的繁华，飞机就好像贴着闹市区的头顶飞过，宾馆饭店的霓虹灯广告牌都清楚可辨。出了航站楼，就闻到一股久违了的江南的潮湿空气，更重要的是，空气中没有煤烟味。经过北京漫长的冬天，这种感觉给人的冲击感太强烈了。</p>
<p>第一天是在张江工作，所以住在了锦江之星的张江店。我厂的上海研发中心跟安捷伦在同一幢楼里，很不起眼。室内装修跟大厦、奎科没有什么太大不同，哦，跟奎科没有什么太大不同。跟奎科一样，会议室也比较容易预定。开了一天会，不提。</p>
<p>由于次日是周末，所以当天晚上就坐地铁 2 号线进城住了，订的是汉庭南京西路店。地铁直达，通勤高峰期会比地面交通快一些。不得不说，2 号线人真多啊！跟北京的 1 号线类似，只要有很多人下的地方，总有很多人上，拥挤程度一路不见减轻。汉庭的大床房比锦江之星略好一些，当然价格也贵一些。</p>
<p>因为一个人吃晚饭无聊，约了三个朋友。一个是老同学翟效华，一个是学弟<a href="http://verypig.com/">王信文</a>，还有一个我内推入职的朋友<a href="http://moligaloo.is-programmer.com/">钟云龙</a>。地点是信文找的，在徐汇区的一个叫做厚味香辣馆的店，席间言谈尽欢，只怕是我说的太多，略显聒噪。</p>
<p>第二天本想早起逛逛，可起来发现外面淅淅沥沥的，只好放弃，等待中午与老同学的聚会。午饭是在宾馆附近的蝶园吃的，上海菜，味道还不错。桌上聊了聊各自的近况，还给余盈丰打了个电话。之后吴诗涛和谢成晟陪我逛了逛南京路，半路上老谢被夫人叫回家了，只剩阿涛这个单身贵族陪我逛到外滩，然后打车去机场。</p>
<p>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4336' title='T3 航站楼'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4336-200x133.jpg" class="attachment-thumbnail" alt="T3 航站楼" title="T3 航站楼" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4355' title='汉庭酒店南京西路店'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4355-200x133.jpg" class="attachment-thumbnail" alt="汉庭酒店南京西路店" title="汉庭酒店南京西路店" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4386' title='蝶园餐具'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4386-200x133.jpg" class="attachment-thumbnail" alt="蝶园餐具" title="蝶园餐具" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4387' title='吴诗涛'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4387-200x133.jpg" class="attachment-thumbnail" alt="吴诗涛" title="吴诗涛" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4388' title='易杰'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4388-200x133.jpg" class="attachment-thumbnail" alt="易杰" title="易杰" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4389' title='谢成晟'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4389-200x133.jpg" class="attachment-thumbnail" alt="谢成晟" title="谢成晟" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4390' title='红衣少女'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4390-200x133.jpg" class="attachment-thumbnail" alt="红衣少女" title="红衣少女" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4402' title='基友'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4402-200x133.jpg" class="attachment-thumbnail" alt="基友" title="基友" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4407' title='基友2'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4407-200x133.jpg" class="attachment-thumbnail" alt="基友2" title="基友2" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4443' title='到此一游'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4443-200x133.jpg" class="attachment-thumbnail" alt="到此一游" title="到此一游" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4447' title='阿涛'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4447-200x133.jpg" class="attachment-thumbnail" alt="阿涛" title="阿涛" /></a>
<a href='http://blog.solrex.org/articles/shanghai-2012.html/neo_img_img_4456' title='小萝莉'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2012/03/nEO_IMG_IMG_4456-200x133.jpg" class="attachment-thumbnail" alt="小萝莉" title="小萝莉" /></a>
<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/five-days-in-qingdao.html" title="青岛行记">青岛行记</a> <span class="count">(4)</span> - <small class="excerpt">在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店...</small></li>
<li><a href="http://blog.solrex.org/articles/two-days-in-chengde.html" title="承德行记">承德行记</a> <span class="count">(5)</span> - <small class="excerpt">来北京几年，周边去的地方也不多。今年大组 building 选择了承德，那么自然愿意去到彼一游了。由...</small></li>
<li><a href="http://blog.solrex.org/articles/baihuashan-caodian.html" title="百花山黄草甸">百花山黄草甸</a> <span class="count">(1)</span> - <small class="excerpt">上周六，组里一起去 bui 了一趟百花山。天气比较给力，阳光很灿烂，又有些山风，不热。行程是安排好的...</small></li>
<li><a href="http://blog.solrex.org/articles/the-disappointing-western-suburbs-of-beijing.html" title="令人失望的帝都西郊">令人失望的帝都西郊</a> <span class="count">(2)</span> - <small class="excerpt">继续说北京西郊。我以前沿着 108 国道，去过潭柘寺和戒台寺，但印象都不是很好。其主要原因是觉得环境...</small></li>
<li><a href="http://blog.solrex.org/articles/cuan-di-xia-cun-complaint.html" title="吐槽爨底下村">吐槽爨底下村</a> <span class="count">(8)</span> - <small class="excerpt">在大家都在抱怨沙尘暴时，我表示很淡定。第一，我没有出门；第二，作为一个北方人，真没什么大惊小怪的。因...</small></li>
<li><a href="http://blog.solrex.org/articles/the-passed-weekends.html" title="逝去的周末">逝去的周末</a> <span class="count">(45)</span> - <small class="excerpt">我觉得我越来越向居家男人的特质靠近了。虽然咱公司实行的是弹性工作制，不强制要求上班时间，但是我早上要...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/shanghai-2012.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>妄谈时间序列表格型大数据系统设计</title>
		<link>http://blog.solrex.org/articles/time-series-big-table-system-design-talk.html</link>
		<comments>http://blog.solrex.org/articles/time-series-big-table-system-design-talk.html#comments</comments>
		<pubDate>Thu, 16 Feb 2012 14:45:37 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[分布式系统]]></category>
		<category><![CDATA[Analytical Data]]></category>
		<category><![CDATA[Big Data]]></category>
		<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Time-series Data]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639866</guid>
		<description><![CDATA[一直在特定领域的分布式系统一线摸爬滚打，曾取得一些微不足道的成绩，也犯过一些相当低级的错误。回头一看，每一个成绩和错误都是醉人的一课，让我在兴奋和懊恼的沉迷中成长。自己是个幸运儿，作为一个 freshman 就能够有机会承担许多 old guy 才能够有的职责。战战兢兢、如履薄冰的同时，在一线的实作和思考也让我获得了一些珍贵的经验，却直至今日才够胆量写出来一晒。这篇文章标题前面是“妄谈”两字，所持观点未必被所有人认可，我姑妄言之，有心之人姑听之。若有些友好的讨论，亦我所愿也。 我做的虽然也是分布式系统，却不够胆去讨论通用分布式系统的设计原则。因而这篇文章的主题限定到一个特定领域的分布式系统设计，这样即使别人有疑惑，我也可以把 TA &#8230; <a href="http://blog.solrex.org/articles/time-series-big-table-system-design-talk.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>一直在特定领域的分布式系统一线摸爬滚打，曾取得一些微不足道的成绩，也犯过一些相当低级的错误。回头一看，每一个成绩和错误都是醉人的一课，让我在兴奋和懊恼的沉迷中成长。自己是个幸运儿，作为一个 freshman 就能够有机会承担许多 old guy 才能够有的职责。战战兢兢、如履薄冰的同时，在一线的实作和思考也让我获得了一些珍贵的经验，却直至今日才够胆量写出来一晒。这篇文章标题前面是“妄谈”两字，所持观点未必被所有人认可，我姑妄言之，有心之人姑听之。若有些友好的讨论，亦我所愿也。</p>
<p>我做的虽然也是分布式系统，却不够胆去讨论通用分布式系统的设计原则。因而这篇文章的主题限定到一个特定领域的分布式系统设计，这样即使别人有疑惑，我也可以把 TA 拖到我擅长的领域打败 TA :) </p>
<p>既然要限定，我们需要给这个系统下个定义，就有必要解释一下标题。</p>
<p><strong>大数据（Big Data）</strong>，这是由于分布式系统和云计算的风靡而变得很火的一个词。那么多大的规模才算大数据呢？目前没有定义，但要讨论这个问题，就必须给个确定的范围。在本文中，这个范围暂时定义为 10TB~1PB 的数据量。为什么是这个范围？我的理由是，小于 10TB 的数据规模有比较多的可选方案；大于 1PB 的数据规模，讨论的意义不大，下面会谈到。</p>
<p><strong>表格型数据</strong>，是指数据是有结构的，类似于关系型数据库中的表，但不是关系型，至少不是完整的关系型。在大数据的范围内，不能说完全没有关系型的需求，但这个需求实际上是很小的。因为关系操作的复杂性，使得其在大数据上的性能非常差，此类的需求往往使用数据冗余等其它方式来实现。是性能原因，而不仅是实现难度导致它不被需求。</p>
<p><strong>时间序列数据</strong>，是指数据是按照时间产生的，跟随时间而变化的分析型数据。其实分析型数据一般都是时间序列的。与操作型数据不同，在分析型数据中单单一条记录的信息是很小的，只有与其它数据进行对比、组合、分解，这条记录才会体现出其价值。</p>
<p>在这些限定词下，这个系统的用途就比较清楚了。它可以被用到很多地方：比如网站访问统计（Google Analytics 和百度统计）、APP 的数据统计、集群服务器状态收集、在线广告的展现和点击量等等。它是一个数据仓库，但庞大于一般的数据仓库，功能需求却少于一般的数据仓库，而且很强调性能。在这个级别上，我还没看到成熟的开放系统解决这个问题（也许我是孤陋寡闻），基本上每家都是自己实现，所以它也更值得讨论。</p>
<p>由于不知该如何系统地探讨，我下面只能把自己发散的思维整理为一条条简单的原则，可能会有很大的跳跃性。但是，谁在乎它连不连贯呢？</p>
<p><strong>latency 对你很重要时，不要采用分层设计，优化做得越底层越好</strong></p>
<p>事实上，对于有兴趣做这样一套系统的公司，latency 都很重要。因为 latency 不重要时它们完全可以使用 HBase。而且，当你有超过 1PB 数据时，你会发现其中很大一部分的 latency 不重要，那剥离出来这部分，用 HBase 吧。</p>
<p>在这个数据量上，必须采用分布式的实现方案。但不要为了系统逻辑的清晰而做存储层与应用层分离的实现，像 BigTable 那样。因为 locality 可以显著地降低 latency，做了存储层和应用层的分离，那你就放弃了很多可以优化的地方。否则你必须破坏分层的封装性，像 <a href="http://blog.solrex.org/articles/facebook-realtime-hadoop-system.html">Facebook 对 HBase 做的</a>那样。</p>
<p><strong>MySQL 不是一个选项，分布式 MySQL 也不是，分布式 KV 也不是，做自己的系统吧</strong></p>
<p>总会有人问这些问题：为什么数据库（分布式数据库、分布式 KV 存储）不能用于这样的场景？我只能说，原因关键是上面三个形容词：时间序列数据、表格型数据、大数据。此外可能还要加上性能、成本等其它因素。</p>
<p>问出上面这个问题的人，其实都可以去用数据库或者 KV 系统，大部分情况下他们的需求会被满足。因为实践过且不满足需求的人，不会问上面这个问题，所以自己找出为什么吧，更容易些。</p>
<p><strong>索引很重要，但要注意控制粒度</strong></p>
<p>上面说过，对于分析型数据而言，单条记录没那么重要，所以快速地获取一条记录不会成为此类系统的目标，而且索引会降低数据更新的性能。但是能不要索引吗？开玩笑，那你怎么查询！索引必须要有，但要考虑到业务场景，做到合适的粒度。所谓合适的粒度，就是能快速获得目标数据而又不至于影响数据更新的性能。</p>
<p><strong>内存很重要，能省则省，能用就用完</strong></p>
<p>内存的重要性大家都明白，但很少人能真正理解。能省则省——说的是不要用浪费空间的数据结构；能用就用完——说的是在保证服务器能正常工作的前提下，使用最多的内存。</p>
<p><strong>IO 很重要，做任何能减少 IO 次数和数据量的事，如果要折衷，选择优化次数</strong></p>
<p>对于分析型数据而言，CPU 向来不是瓶颈，IO 才是。做任何能减少 IO 次数和数据量的事，比如各种缓存（块缓存、索引缓存、请求结果缓存），比如数据压缩。如果在减少 IO 次数和减少数据量上做折衷，选择减少 IO 次数，除非这会导致数据量爆炸。</p>
<p><strong>即使没分层，也不要随机写</strong></p>
<p>即使能直接访问到本地文件系统，也不要使用随机写，不要向一个文件中插入内容，而是将更新与基准合并写入另一个文件。这样性能更高，真的。</p>
<p><strong>支持 CRUD？不，只支持 CRA，A for aggregate</strong></p>
<p>其实很多数据都可以表示成时间序列型数据，例如 MySQL 的数据表内容完全可以用时间序列的操作日志来表示，这也是 Twitter 首席工程师 Nathan Marz 提倡的，<a href="http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html">他说有 CR 就够了</a>。虽然我没有那么极端，但是朋友，我们处理的就是时间序列数据啊，所以我们完全不需要 UD。增加 A 的原因是，聚合会减少数据量，聚合会提升查询性能。</p>
<p><strong>一定要压缩数据，选择一个合适的压缩算法</strong></p>
<p>原因很简单，这能够减少 IO 数据量。但不要傻乎乎地压缩整个文件，跟 BigTable 学，分块压缩。考虑到对数据更新和读取的性能偏重不同，选择对自己合适的压缩算法。因为列存储的压缩比一般而言更高，所以</p>
<p><strong>如果能做列存储，就做吧</strong></p>
<p><strong>尽量分离更新和读取的压力</strong></p>
<p>如果数据需要做清洗，可以聚合，那么在导入系统前做这件事，而不是让承担查询压力的系统做这件事。</p>
<p><strong>实时性没那么重要，批量更新会让你更轻松</strong></p>
<p>如果能接受一天的延迟，就每天一批；能接受一个小时的延迟，就不做分钟级更新。更新次数越少，预聚合效果越好，数据量越小；更新次数越少，一致性越容易保证；更新次数越少，事故处理越从容。实时更新的话，很多事情会变得非常复杂，尤其是故障处理。</p>
<p><strong>用数据冗余实现关系型需求或者高性能需求</strong></p>
<p>如果有关系型运算需求，一定要逼 PM 改掉。实在改不掉，在导入系统前（或者过一段时间后）计算得到结果，直接导入到系统中。高性能需求也是这样，提前在系统外聚合好再导入，让系统做最少的事情它才能更快。</p>
<p><strong>分布式架构？不重要，重要的是可靠性</strong></p>
<p>至于采取什么样的分布式架构，其实不重要。只要它能实现 IO 的（大致）负载均衡，并且可靠就够了。另外，值得一提的是，如果想实现中心机，选举，分片自动分裂、合并、迁移等 fancy 分布式技术，首先想想自己公司是不是行业领导者。Perfect is the enemy of good. 对于很多人来说，Zookeeper 足够了。</p>
<p><strong>好的运维工具，比完美的设计更靠谱</strong><sub>[20110222]</sub></p>
<p>在完成一个大规模系统时，往往很难做到完美，尤其是当这个完美设计很复杂时。事实上 fancy 的功能也不是不能折中，例如可伸缩性通过运维工具而不是内建于系统中实现，其复杂度会大大下降，稳定性会大大提高。所以如果没有足够的能力或者时间去实现一个完美的系统，不如好好地去做一些简洁方便的运维工具。</p>
<p><strong>借鉴别人经验</strong></p>
<p>这个不用我解释了吧。找一切可利用的信息，和一些人讨论，自己做决定。 :)</p>
<p>(暂时写到这里，但我可能会更新这篇文章，当我想到更多时。)<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/infobright-data-warehouse.html" title="Infobright 数据仓库">Infobright 数据仓库</a> <span class="count">(1)</span> - <small class="excerpt">最近有部分工作涉及到了 Infobright 数据仓库，就浏览了一些相关的资料，感觉很受启发。下面写...</small></li>
<li><a href="http://blog.solrex.org/articles/on-automatic-splitting.html" title="关于自动分裂的思考">关于自动分裂的思考</a> <span class="count">(1)</span> - <small class="excerpt">自动分裂是分布式系统中的一项重要技术，通常与自动迁移和负载均衡一起考虑，提供了系统的可扩展性和良好的...</small></li>
<li><a href="http://blog.solrex.org/articles/facebook-realtime-hadoop-system.html" title="Facebook的实时Hadoop系统">Facebook的实时Hadoop系统</a> <span class="count">(4)</span> - <small class="excerpt">Facebook 在今年六月 SIGMOD 2011 上发表了一篇名为“Apache Hadoop ...</small></li>
<li><a href="http://blog.solrex.org/articles/freshman-year-in-baidu.html" title="在百度的第一年">在百度的第一年</a> <span class="count">(1)</span> - <small class="excerpt">半夜精神有些亢奋，混乱的思绪在脑袋里滚来滚去，没来由地忽然想起在百度这一年。想起这一年可以总结为：前...</small></li>
<li><a href="http://blog.solrex.org/articles/oceanbase-architecture-note.html" title="淘宝OceanBase架构笔记">淘宝OceanBase架构笔记</a> <span class="count">(1)</span> - <small class="excerpt">[caption id="attachment_639438" align="aligncenter...</small></li>
<li><a href="http://blog.solrex.org/articles/can-a-mobile-app-do-this.html" title="有没有这样一种手机应用?">有没有这样一种手机应用?</a> <span class="count">(8)</span> - <small class="excerpt">Google 的 Jeff Dean 在演讲中提过：对一套系统来说，每年典型的事故率会是这样的：1....</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/time-series-big-table-system-design-talk.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>灯泡接口</title>
		<link>http://blog.solrex.org/articles/bulb-caps.html</link>
		<comments>http://blog.solrex.org/articles/bulb-caps.html#comments</comments>
		<pubDate>Wed, 01 Feb 2012 10:00:24 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[社会]]></category>
		<category><![CDATA[B22]]></category>
		<category><![CDATA[B22d]]></category>
		<category><![CDATA[Bayonet]]></category>
		<category><![CDATA[Bulb]]></category>
		<category><![CDATA[Bulb Cap]]></category>
		<category><![CDATA[E10]]></category>
		<category><![CDATA[E14]]></category>
		<category><![CDATA[E27]]></category>
		<category><![CDATA[Edison Screw]]></category>
		<category><![CDATA[GU10]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639853</guid>
		<description><![CDATA[我以前是一个略具 geek 精神的人。现在不算了，写出来的好玩的计算机技术文章也没那么多了。虽然变无趣了，但我还有生活，所以我决定发掘一下其它的领域。生活中的琐事虽小，仔细琢磨下却有一些有趣的知识在里面。某些人从极小的时候就掌握的常识，对其他人来说可能到老都不明白。典型的例子有识别地图、指南针、手表或者分辨麦苗、韭菜等。 今天说的灯泡接口，也是类似。我从小到大，做过不少次爬上跳下换灯泡的活儿，本来觉得是一件很稀松平常的事情。但自食其力后才发现，原来也没那么简单，至少面临着一个复杂的问题：怎样选购正确的灯泡？ 在我老家那个落后的小城镇里，很多东西都是二元的。免费电视信号只有两个：县台和县教育台；（铁路）地下道只有两个：东地下道和西地下道；灯泡也只有两种：(螺)丝口或者挂口。这样购买的风险很低。白炽灯泡一元一个，实在不行的话，买两个不同接口的灯泡就完了。反正在我小的时候有过买错灯泡的经历，算不得难堪。 长大后忽然发现，这世界不再是二元的了。典型的例子就是普通灯泡接口不再是两种，灯泡商品也不再是两种，当然价钱也不再是一元。去年年初，我老婆从公司带回来一个小台灯。它有一个圆盘形的底座，底座中央是一个笔直的灯杆，看起来像是一个倒立的图钉。在图钉的钉尖儿上是灯泡的接口，有一个可爱的圆柱状塑料灯罩可以把灯泡罩起来。灯泡的接口很奇怪，看起来是丝口，但又比丝口细。包装盒上的文字介绍极少，少到几乎无法阅读。在这些几乎无法阅读的文字中，我找到一个神奇的代码：E14。凭着直觉，我认出这应该是灯泡接口的型号。 我用来认知灯泡世界的模型改变了，只好重新建立模型。然后我才知道，原来我平常说的丝口，学名应该叫做“爱迪生螺旋（Edison Screw）接口” &#8230; <a href="http://blog.solrex.org/articles/bulb-caps.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我以前是一个略具 geek 精神的人。现在不算了，写出来的好玩的计算机技术文章也没那么多了。虽然变无趣了，但我还有生活，所以我决定发掘一下其它的领域。生活中的琐事虽小，仔细琢磨下却有一些有趣的知识在里面。某些人从极小的时候就掌握的常识，对其他人来说可能到老都不明白。典型的例子有识别地图、指南针、手表或者分辨麦苗、韭菜等。</p>
<p>今天说的灯泡接口，也是类似。我从小到大，做过不少次爬上跳下换灯泡的活儿，本来觉得是一件很稀松平常的事情。但自食其力后才发现，原来也没那么简单，至少面临着一个复杂的问题：怎样选购正确的灯泡？</p>
<p>在我老家那个落后的小城镇里，很多东西都是二元的。免费电视信号只有两个：县台和县教育台；（铁路）地下道只有两个：东地下道和西地下道；灯泡也只有两种：(螺)丝口或者挂口。这样购买的风险很低。白炽灯泡一元一个，实在不行的话，买两个不同接口的灯泡就完了。反正在我小的时候有过买错灯泡的经历，算不得难堪。</p>
<p>长大后忽然发现，这世界不再是二元的了。典型的例子就是普通灯泡接口不再是两种，灯泡商品也不再是两种，当然价钱也不再是一元。去年年初，我老婆从公司带回来一个小台灯。它有一个圆盘形的底座，底座中央是一个笔直的灯杆，看起来像是一个倒立的图钉。在图钉的钉尖儿上是灯泡的接口，有一个可爱的圆柱状塑料灯罩可以把灯泡罩起来。灯泡的接口很奇怪，看起来是丝口，但又比丝口细。包装盒上的文字介绍极少，少到几乎无法阅读。在这些几乎无法阅读的文字中，我找到一个神奇的代码：E14。凭着直觉，我认出这应该是灯泡接口的型号。</p>
<p>我用来认知灯泡世界的模型改变了，只好重新建立模型。然后我才知道，原来我平常说的丝口，学名应该叫做“爱迪生螺旋（<a href="http://en.wikipedia.org/wiki/Edison_screw">Edison Screw</a>）接口”  ，更确切一些，应该叫做“中型爱迪生螺旋（Medium Edison Screw）” 或者“E27”接口，即直径为 27 毫米的爱迪生螺旋接口。显而易见，除了E27，肯定还有其它的 E* 接口，例如上文提到的“E14”。此外，原来旧式手电筒上常见的小灯泡接口，也属于这一家族：“E10”。</p>
<p>从螺旋接口的型号上来看，中国普遍使用的是欧制接口。我不知道标准是如何制定的，但从查到的信息来看，中国最早的电灯公司是1861年英国商人办的“汉口电灯公司”，采用欧制接口可能跟我国 19 世纪首先被欧洲入侵的这一段历史有一定的关系。</p>
<p>与螺旋接口类似，卡口（或挂口，<a href="http://en.wikipedia.org/wiki/Bayonet_mount#Bulb_bayonet_mounts">Bayonet Mount</a>）也是一个家族 。我们通常家庭使用的，应该是“B22d”接口，即直径为 22 毫米，带双（double）接触点的卡口。此外还有射灯常用的“GU5.3”或者“GU10”接口，即插脚式U型接口，也属于卡口的一种。</p>
<p>在我看来，卡口要比丝口更安全，因为其露出的金属部分是不带电的，无意中摸到内部带电的弹簧突起比较困难。但奇怪的是周围的卡口灯座越来越少，我对这个现象非常好奇，却不知道其原因。</p>
<p>当然，除了上面说的这两个系列之外，还有其它的系列接口，可以参考这篇文档《<a href="http://wenku.baidu.com/view/6f0dc814f18583d04964593a.html">灯头、灯座的型号命名方法及常用型号</a>》 。不过其中一些，例如预聚焦式、凹点式或者汽车用灯接口，一般就只有专业人士才用得着了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post"></ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/bulb-caps.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>裸婚</title>
		<link>http://blog.solrex.org/articles/get-married.html</link>
		<comments>http://blog.solrex.org/articles/get-married.html#comments</comments>
		<pubDate>Sat, 14 Jan 2012 04:24:22 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[爱情]]></category>
		<category><![CDATA[Marriage]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639849</guid>
		<description><![CDATA[您可能对这些感兴趣： 求婚 (20) - 这是一篇补发的日志，被我修改了时间到 2011 年 10 &#8230; <a href="http://blog.solrex.org/articles/get-married.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_639850" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2012/01/民政局黑白.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2012/01/民政局黑白-600x867.jpg" alt="裸婚" title="裸婚" width="600" height="867" class="size-medium wp-image-639850" /></a><p class="wp-caption-text">裸婚</p></div><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/engagement-day.html" title="求婚">求婚</a> <span class="count">(20)</span> - <small class="excerpt">这是一篇补发的日志，被我修改了时间到 2011 年 10 月 23 日。记录这一天，我向 xixi ...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-memo.html" title="2010年志">2010年志</a> <span class="count">(9)</span> - <small class="excerpt">邵小毛《现象 2009 》的旋律似乎还回响在耳边，恍惚间脚步却马上要踏出这个 2010 年了。时光如...</small></li>
<li><a href="http://blog.solrex.org/articles/new-moutain-bike.html" title="我的新玩具">我的新玩具</a> <span class="count">(14)</span> - <small class="excerpt">话说我平日里老是心里默默计划着周末要做啥做啥，仿佛一副上进好青年的模样。但是真的一到周末，做的事总是...</small></li>
<li><a href="http://blog.solrex.org/articles/a-little-romance.html" title="《情定日落桥》">《情定日落桥》</a> <span class="count">(1)</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/chinese-stone-seal.html" title="刻印记">刻印记</a> <span class="count">(10)</span> - <small class="excerpt">身为一个中国人，稍微对咱老祖宗的东西有那么点儿爱好的，怕都曾经念想过拥有一方刻着自己大名的篆书小印吧...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/get-married.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>2012的前一年</title>
		<link>http://blog.solrex.org/articles/the-year-before-2012.html</link>
		<comments>http://blog.solrex.org/articles/the-year-before-2012.html#comments</comments>
		<pubDate>Sat, 07 Jan 2012 16:35:11 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[回忆]]></category>
		<category><![CDATA[所谓文艺]]></category>
		<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639837</guid>
		<description><![CDATA[回顾了一下我的 2011 年，做了下面这幅图： 您可能对这些感兴趣： 迁到丰台区 (8) - 来北京已近六年，大小搬家经历了七八次，家当却是一次比一次多。实习和读书期间一直在海淀区晃悠。毕业以后... &#8230; <a href="http://blog.solrex.org/articles/the-year-before-2012.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>回顾了一下我的 2011 年，做了下面这幅图：</p>
<p><a href="http://blog.solrex.org/wp-content/uploads/2012/01/my_2011.png"><img src="http://blog.solrex.org/wp-content/uploads/2012/01/my_2011.png" alt="2012 的前一年" title="2012 的前一年" width="600" height="1380" class="alignnone size-full wp-image-639838" /></a><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/relocate-to-fengtai.html" title="迁到丰台区">迁到丰台区</a> <span class="count">(8)</span> - <small class="excerpt">来北京已近六年，大小搬家经历了七八次，家当却是一次比一次多。实习和读书期间一直在海淀区晃悠。毕业以后...</small></li>
<li><a href="http://blog.solrex.org/articles/five-days-in-qingdao.html" title="青岛行记">青岛行记</a> <span class="count">(4)</span> - <small class="excerpt">在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店...</small></li>
<li><a href="http://blog.solrex.org/articles/road-test-passed.html" title="通过科目三路考">通过科目三路考</a> <span class="count">(2)</span> - <small class="excerpt">前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。想起来这半年也是折腾不断。我是 2 月底参加...</small></li>
<li><a href="http://blog.solrex.org/articles/two-days-in-chengde.html" title="承德行记">承德行记</a> <span class="count">(5)</span> - <small class="excerpt">来北京几年，周边去的地方也不多。今年大组 building 选择了承德，那么自然愿意去到彼一游了。由...</small></li>
<li><a href="http://blog.solrex.org/articles/some-household-affairs.html" title="家居二三事">家居二三事</a> <span class="count">(3)</span> - <small class="excerpt">以前曾经有过吐槽，租房住的一大缺憾就是没法按照自己的想法布置房子，即使看上了某样家具，也能负担得起，...</small></li>
<li><a href="http://blog.solrex.org/articles/freshman-year-in-baidu.html" title="在百度的第一年">在百度的第一年</a> <span class="count">(1)</span> - <small class="excerpt">半夜精神有些亢奋，混乱的思绪在脑袋里滚来滚去，没来由地忽然想起在百度这一年。想起这一年可以总结为：前...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/the-year-before-2012.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>史蒂夫·乔布斯传</title>
		<link>http://blog.solrex.org/articles/steve-jobs.html</link>
		<comments>http://blog.solrex.org/articles/steve-jobs.html#comments</comments>
		<pubDate>Wed, 28 Dec 2011 17:18:56 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT杂谈]]></category>
		<category><![CDATA[读书]]></category>
		<category><![CDATA[Biography]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Steve Jobs]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639828</guid>
		<description><![CDATA[我一直羞于去崇拜某个人，死去的或者正在死去的。我总害怕他做了或者将要做一件我并不认同的事情，这就好比冬至吃饺子时吃到一块脏兮兮的硬币，不是每个人都能享受这种运气。所幸的是《史蒂夫·乔布斯传》的作者所持角度还算客观。读完这本书之后你不免去崇拜乔布斯，但又会有所保留。你会想：我真希望能达到他那样的成就，却不想成为他那样的人。 每个人做事都有自己的方法，但乔布斯采用的那种，恐怕要被归到异类中去。只有他那种天生的特质，结合独特的人生经历，还有过早成功的光环，才能造就那样强大的现实扭曲力场。跋扈如他那样，做一个打工仔的话，恐怕不出半月就要卷铺盖走人了。 在他的传奇一生中，有一股认真劲儿让人不能不佩服。包括他对事件策划、产品外观、字体、广告、包装，甚至于名片美学上的执念，无不让你觉得这家伙真倔，真难办。但当你转了一圈儿，看到那么多平庸的玩意儿时，你就会想：哦，这家伙还是有一定的道理的。 除了认真之外，他还有一点让我非常羡慕的，就是不屈于现实。软驱、吸入式光驱、玻璃屏幕、拉丝铝外框，到处都透着不妥协。但奇迹的是，那些硅谷工程师们居然办到了！这一点也被我归结为我们信息技术落后于硅谷的原因，奇思妙想得不到尊重，创新的阻力远大于推动力，有批判性，无建设性。 如果在这里赞扬他，能够列出的点还有很多。看完这本传记后，我甚至有去买苹果产品的冲动。但就像前面所说，我，一个平庸的家伙，对乔布斯的革命性的设计和产品，一直没有足够到转化为购买力的欣赏。创新是一样高投入的工作，必须有高回报的支持，而这依赖于掏腰包的人的欣赏和价值认可。对于某个产品来说是这样，对于一个公司来说，同样如此。可惜的是，很多公司的老板更像我，而不是乔布斯。 您可能对这些感兴趣： 《三体三部曲》赠书计划 (20) &#8230; <a href="http://blog.solrex.org/articles/steve-jobs.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我一直羞于去崇拜某个人，死去的或者正在死去的。我总害怕他做了或者将要做一件我并不认同的事情，这就好比冬至吃饺子时吃到一块脏兮兮的硬币，不是每个人都能享受这种运气。所幸的是《史蒂夫·乔布斯传》的作者所持角度还算客观。读完这本书之后你不免去崇拜乔布斯，但又会有所保留。你会想：我真希望能达到他那样的成就，却不想成为他那样的人。</p>
<p>每个人做事都有自己的方法，但乔布斯采用的那种，恐怕要被归到异类中去。只有他那种天生的特质，结合独特的人生经历，还有过早成功的光环，才能造就那样强大的现实扭曲力场。跋扈如他那样，做一个打工仔的话，恐怕不出半月就要卷铺盖走人了。</p>
<p>在他的传奇一生中，有一股认真劲儿让人不能不佩服。包括他对事件策划、产品外观、字体、广告、包装，甚至于名片美学上的执念，无不让你觉得这家伙真倔，真难办。但当你转了一圈儿，看到那么多平庸的玩意儿时，你就会想：哦，这家伙还是有一定的道理的。</p>
<p>除了认真之外，他还有一点让我非常羡慕的，就是不屈于现实。软驱、吸入式光驱、玻璃屏幕、拉丝铝外框，到处都透着不妥协。但奇迹的是，那些硅谷工程师们居然办到了！这一点也被我归结为我们信息技术落后于硅谷的原因，奇思妙想得不到尊重，创新的阻力远大于推动力，有批判性，无建设性。</p>
<p>如果在这里赞扬他，能够列出的点还有很多。看完这本传记后，我甚至有去买苹果产品的冲动。但就像前面所说，我，一个平庸的家伙，对乔布斯的革命性的设计和产品，一直没有足够到转化为购买力的欣赏。创新是一样高投入的工作，必须有高回报的支持，而这依赖于掏腰包的人的欣赏和价值认可。对于某个产品来说是这样，对于一个公司来说，同样如此。可惜的是，很多公司的老板更像我，而不是乔布斯。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/three-body-gift-book-giving.html" title="《三体三部曲》赠书计划">《三体三部曲》赠书计划</a> <span class="count">(20)</span> - <small class="excerpt">上周我又重读了一遍《三体》系列，在路上，用 Kindle。还记得原来《三体I》好像是在《科幻世界》上...</small></li>
<li><a href="http://blog.solrex.org/articles/it-birds-review.html" title="因为真实才宝贵">因为真实才宝贵</a> <span class="count">(15)</span> - <small class="excerpt">读大学时我很佩服一个老师。他教过我两门课，两门都是计算机类的课程，在数学系并不很受欢迎。他讲得不错，...</small></li>
<li><a href="http://blog.solrex.org/articles/lies-my-teacher-told-me.html" title="Lies My Teacher Told Me">Lies My Teacher Told Me</a> <span class="count">(11)</span> - <small class="excerpt">最早是从笑来的博客里看到这本书的信息，而目前从搜索结果来看，在中文世界里评论这本书的也只有笑来老师。...</small></li>
<li><a href="http://blog.solrex.org/articles/the-road-less-traveled-etc-5-books.html" title="新购《少有人走的路》等五本书">新购《少有人走的路》等五本书</a> <span class="count">(2)</span> - <small class="excerpt">其实本想只买《少有人走的路》一本书，但卓越网购书总价 49 元以上才给免配送费，于是就在卓越的特价店...</small></li>
<li><a href="http://blog.solrex.org/articles/book-legends-of-the-enigma.html" title="密码传奇">密码传奇</a> <span class="count">(1)</span> - <small class="excerpt">不想睡觉，就写一个小书评吧。《密码传奇》上次在国家科学图书馆借一本密码学教材的时候，碰巧看到了这本书...</small></li>
<li><a href="http://blog.solrex.org/articles/can-you-feel-the-pressure-frombooks.html" title="你能感到书本给你的压力吗">你能感到书本给你的压力吗</a> <span class="count">(9)</span> - <small class="excerpt">你能感到书本给你的压力吗？随着案头累积的书越来越多，我忽然想到这个问题，因为我发现我越来越为这个焦虑...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/steve-jobs.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>std::sort 的仿函数参数</title>
		<link>http://blog.solrex.org/articles/using-functor-in-sort.html</link>
		<comments>http://blog.solrex.org/articles/using-functor-in-sort.html#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:18:31 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[Compare]]></category>
		<category><![CDATA[Functor]]></category>
		<category><![CDATA[Quick Sort]]></category>
		<category><![CDATA[Sort]]></category>
		<category><![CDATA[STL]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639813</guid>
		<description><![CDATA[因为习惯了 qsort 的函数指针参数，以前用 std::sort 的时候一般也是传函数指针而不是仿函数（functor）。从很多示例程序来看，貌似没有什么大的不同。但是直到今天我才醒悟，原来是示例太简单了啊！ 具体来说，我今天遇到了一个问题：要对一个表进行排序，每个字段可能是升序，可能是降序，也有不同的类型，所以排序的时候需要根据这些信息进行比较。比较函数不能是类成员函数，但我又的确要用到类成员的信息，函数接口又不能变，着实发愁。愁了就只能 Google，发现原来仿函数可以轻松地搞定这件事情。 // &#8230; <a href="http://blog.solrex.org/articles/using-functor-in-sort.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>因为习惯了 qsort 的函数指针参数，以前用 std::sort 的时候一般也是传函数指针而不是仿函数（functor）。从很多示例程序来看，貌似没有什么大的不同。但是直到今天我才醒悟，原来是示例太简单了啊！</p>
<p>具体来说，我今天遇到了一个问题：要对一个表进行排序，每个字段可能是升序，可能是降序，也有不同的类型，所以排序的时候需要根据这些信息进行比较。比较函数不能是类成员函数，但我又的确要用到类成员的信息，函数接口又不能变，着实发愁。愁了就只能 Google，发现原来仿函数可以轻松地搞定这件事情。</p>
<blockquote><p>
<span style="color: rgb(0, 136, 0); ">// 来自 <a href="http://stackoverflow.com/a/1902360">http://stackoverflow.com/a/1902360</a></span><br />
<span style="color: rgb(0, 0, 128); font-weight: bold; ">class</span> MyClass{</p>
<p>&nbsp;&nbsp; <span style="color: rgb(0, 136, 0); ">// ...</span><br />
&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold; ">struct</span> doCompare<br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doCompare( <span style="color: rgb(0, 0, 128); font-weight: bold; ">const</span> MyClass&amp; info ) : m_info(info) { } <span style="color: rgb(0, 136, 0); ">// only if you really need the object state</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold; ">const</span> MyClass&amp; m_info;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 128); font-weight: bold; ">bool</span> <span style="color: rgb(0, 0, 128); font-weight: bold; ">operator</span>()( <span style="color: rgb(0, 0, 128); font-weight: bold; ">const</span> <span style="color: rgb(0, 0, 128); font-weight: bold; ">int</span> &amp; i1, <span style="color: rgb(0, 0, 128); font-weight: bold; ">const</span> <span style="color: rgb(0, 0, 128); font-weight: bold; ">int</span> &amp; i2&nbsp; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 136, 0); ">// comparison code using m_info</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp; doSort() <br />
&nbsp;&nbsp;&nbsp; { std::sort( arr, arr+someSize, doCompare(*<span style="color: rgb(0, 0, 128); font-weight: bold; ">this</span>) ); }<br />
};
</p></blockquote>
<p>简单点儿说，因为仿函数是个类，也可以有成员变量，构造的时候可以传参进去初始化，这样就能实现更灵活的比较方法。这么简单的道理，为什么之前我就是想不到呢？</p>
<p>此外值得一提的是，std::sort 要求比较的结果是 strict weak order，就是说要严格小于才返回 true。这就意味着，仅仅对比较结果取反，是无法实现逆序的。因为小于的取反不是大于，而是大于等于。</p>
<p>我们有过经验，如果相等的时候也返回 true，可能会导致某些标准库实现的 sort 函数指针越界，导致程序出错。所以要千万避免犯这个错误。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error-ext.html" title="Cygwin GCC qsort 函数错误（续）">Cygwin GCC qsort 函数错误（续）</a> <span class="count">(0)</span> - <small class="excerpt">上一篇文章中提到我在为 qsort 写 compare 函数时犯了一个愚蠢的错误：我脑袋陷入了一个错...</small></li>
<li><a href="http://blog.solrex.org/articles/python-json-decode-chinese-bug.html" title="Python JSON模块解码中文的BUG">Python JSON模块解码中文的BUG</a> <span class="count">(5)</span> - <small class="excerpt">很多语言或协议选择使用 ASCII 字符 “\”(backslash，0x5c) 作为字符串的转义符...</small></li>
<li><a href="http://blog.solrex.org/articles/on-logging-performance.html" title="警惕程序日志对性能的影响">警惕程序日志对性能的影响</a> <span class="count">(2)</span> - <small class="excerpt">做后台系统比做客户端软件的辛苦的地方，就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试...</small></li>
<li><a href="http://blog.solrex.org/articles/exvim-dir-filter-reversed.html" title="修改exvim目录过滤逻辑为匹配拒绝">修改exvim目录过滤逻辑为匹配拒绝</a> <span class="count">(0)</span> - <small class="excerpt">exVim 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 ...</small></li>
<li><a href="http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html" title="Leveldb 编译错误背后的C++标准变化">Leveldb 编译错误背后的C++标准变化</a> <span class="count">(1)</span> - <small class="excerpt">在编译 Levedb 时，我遇到了这个错误：g++ -c -I. -I./include -fno-...</small></li>
<li><a href="http://blog.solrex.org/articles/road-test-passed.html" title="通过科目三路考">通过科目三路考</a> <span class="count">(2)</span> - <small class="excerpt">前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。想起来这半年也是折腾不断。我是 2 月底参加...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/using-functor-in-sort.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第一次香山</title>
		<link>http://blog.solrex.org/articles/xiangshan-the-first-time.html</link>
		<comments>http://blog.solrex.org/articles/xiangshan-the-first-time.html#comments</comments>
		<pubDate>Sun, 13 Nov 2011 13:43:29 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[旅行]]></category>
		<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Photo]]></category>
		<category><![CDATA[Xiangshan]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639791</guid>
		<description><![CDATA[下午在电视上看了个《李献计历险记》，直接没把我脑壳看坏掉。之后七荤八素地躺在床上，在似睡似醒中迷瞪了一个小时，睁开眼忽然看到一幅奇怪的景象，从窗帘缝隙中透过的一点亮光在三四秒内以肉眼可见的速度暗了下去。直到现在我也不确定那是现实还是梦中，但可以确定的一点是，我随后陷入了白日梦后的各种恶心、难受和不适中。 周末就是这样，可能安排个一到两件事，其它时间睡也不是，坐也不是。徒留些无聊烦躁心情在那，如此一来就特别羡慕那些把日程排得满满的人。为了不让自己烦躁，我也在尝试找一些不那么无聊的事情去做，比如骑车爬香山。 这个念头由来已久，但付诸实施却只是昨天的事。有各种原因，懒惰，周末不愿意动弹；住的太靠里，出城太远；没有人一起玩，不认识路之类的。真正促使我成行的是微博上的一句话，做好一件事的最好方法，就是去做这件事。 在我很久很久以前拟定计划时，最大的困难就是不认识路。值得一提的是，这个困难一部分来自于没有好的地图，另一部分来自于一些所谓老鸟的行话。在香山路线中，出现频率最高的有以下几个：海二招、鬼笑石、果快、茶棚、马道等等。理解这几个名字费了我不少劲，比如海二招原来是海军第二招待所的简称，而不是海淀区第二招待所；果快原来不是地名，是果园和快活林的简称。不过，惭愧地是，我现在还是不知道这几个地方在哪儿。 有人可能觉得很习惯，但我真厌倦这些个装逼的词儿。就比如拿 5D Mark II &#8230; <a href="http://blog.solrex.org/articles/xiangshan-the-first-time.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>下午在电视上看了个《李献计历险记》，直接没把我脑壳看坏掉。之后七荤八素地躺在床上，在似睡似醒中迷瞪了一个小时，睁开眼忽然看到一幅奇怪的景象，从窗帘缝隙中透过的一点亮光在三四秒内以肉眼可见的速度暗了下去。直到现在我也不确定那是现实还是梦中，但可以确定的一点是，我随后陷入了白日梦后的各种恶心、难受和不适中。</p>
<p>周末就是这样，可能安排个一到两件事，其它时间睡也不是，坐也不是。徒留些无聊烦躁心情在那，如此一来就特别羡慕那些把日程排得满满的人。为了不让自己烦躁，我也在尝试找一些不那么无聊的事情去做，比如骑车爬香山。</p>
<p>这个念头由来已久，但付诸实施却只是昨天的事。有各种原因，懒惰，周末不愿意动弹；住的太靠里，出城太远；没有人一起玩，不认识路之类的。真正促使我成行的是微博上的一句话，做好一件事的最好方法，就是去做这件事。</p>
<p>在我很久很久以前拟定计划时，最大的困难就是不认识路。值得一提的是，这个困难一部分来自于没有好的地图，另一部分来自于一些所谓老鸟的行话。在香山路线中，出现频率最高的有以下几个：海二招、鬼笑石、果快、茶棚、马道等等。理解这几个名字费了我不少劲，比如海二招原来是海军第二招待所的简称，而不是海淀区第二招待所；果快原来不是地名，是果园和快活林的简称。不过，惭愧地是，我现在还是不知道这几个地方在哪儿。</p>
<p>有人可能觉得很习惯，但我真厌倦这些个装逼的词儿。就比如拿 5D Mark II 相机非得叫“无敌兔”，佳能 EF 50/1.8 镜头叫“小痰盂”，还有各种“小白、小小白、爱死小白”等。唉，难道就不能正正经经地说话？我以后可能慢慢地会理解这些词的含义，但我也会尽力地不去使用这些词。</p>
<p>再说回来，在我很久很久以前拟定计划时，是希望从珠联大酒楼-海军第二招待所-松鹤山庄那个香山入口进去，骑防火道熟悉一下香山的地形。以后有机会了再跟着别人走山地。但没成想到的是，因为什么森林公园养护完成开放之类，除正门外的其它门大多关闭不让走了。有一个老大爷在那拦各种车，行人如果不是当地居民也会被拦下。</p>
<p>无奈只能另想它法，有人给我说珠联大酒楼南面不远有一个山地入口。于是我就战战兢兢地从一个挂着军事禁区牌子的路口进去了，进去之后右转走到尽头有个看起来像部队的院子。大门右侧有条小路，我就很冒失地骑了进去。刚开始没有什么坡，还能骑。</p>
<div id="attachment_639800" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_130154.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_130154-600x450.jpg" alt="山路的开始阶段" title="山路的开始阶段" width="600" height="450" class="size-medium wp-image-639800" /></a><p class="wp-caption-text">山路的开始阶段</p></div>
<p>骑没多久就到了一个挺长的围墙边，从那儿开始就有些变态了。再加上从我家到香山路上已经花了 30 公里了，体力也跟不上，于是很多坡就是推过去的了。下面是一个特别变态的地方，下降约有一米，路外侧有个大石块，内侧小沟不到一尺宽，还拐个弯儿。我觉得如果不从大石头上飞过去，走内侧不倒也得磕牙盘，只好无奈地扛着车过去了。</p>
<div id="attachment_639801" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_132224.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_132224-600x450.jpg" alt="变态小坡" title="变态小坡" width="600" height="450" class="size-medium wp-image-639801" /></a><p class="wp-caption-text">变态小坡</p></div>
<p>实话说，走的这段山路我是又累又怕，我这种平原长大的孩子哪儿骑过这种路呀？左侧是石壁，右侧是山崖，掉下去即使有小树挡着，也好不到哪儿去。我是好不容易捱到了防火道的出口啊！这个出口外面应该是梅园。</p>
<div id="attachment_639803" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_133440.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_20111112_133440-600x450.jpg" alt="防火道-梅园" title="防火道-梅园" width="600" height="450" class="size-medium wp-image-639803" /></a><p class="wp-caption-text">防火道-梅园</p></div>
<p>回来后我回顾了一下这段上山线路，我估计我走的可能是果园的上山路线，但是后来可能走岔了，所以才从梅园上了防火道。中午到下午这段路上太阳不多，基本上都在阴影下，不会很热。虽然看到防火道很兴奋，但无奈地发现自己已经木有力气了，于是只稍往上爬了一点儿，就溜车下去了。</p>
<div id="attachment_639805" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_3688.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/11/IMG_3688-600x400.jpg" alt="不知名建筑" title="不知名建筑" width="600" height="400" class="size-medium wp-image-639805" /></a><p class="wp-caption-text">不知名建筑</p></div>
<p>唉，本来想继续写点儿的，被一个工作电话给弄烦了，罢了。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/the-saturday-in-798.html" title="携友闲逛798">携友闲逛798</a> <span class="count">(3)</span> - <small class="excerpt">上周末正好有事到望京附近，顺便带老婆和朋友一起逛了逛 798 艺术中心，照了几张照片。我在里面逛得倒...</small></li>
<li><a href="http://blog.solrex.org/articles/five-days-in-qingdao.html" title="青岛行记">青岛行记</a> <span class="count">(4)</span> - <small class="excerpt">在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/xiangshan-the-first-time.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TCP Fast Open by Google 浅析</title>
		<link>http://blog.solrex.org/articles/tcp-fast-open-by-google.html</link>
		<comments>http://blog.solrex.org/articles/tcp-fast-open-by-google.html#comments</comments>
		<pubDate>Thu, 10 Nov 2011 08:42:12 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[IT杂谈]]></category>
		<category><![CDATA[无线和移动]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[TCP]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639776</guid>
		<description><![CDATA[Google 将在今年 12 月的 ACM CoNEXT 会议上发表他们在改善 Web &#8230; <a href="http://blog.solrex.org/articles/tcp-fast-open-by-google.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Google 将在今年 12 月的 ACM CoNEXT 会议上发表他们在改善 Web 应用响应时延方面的一个工作，通过修改 TCP 协议利用三次握手时进行数据交换的“<a href="http://0-research.google.com.topcat.switchinc.org/pubs/pub37517.html">TCP Fast Open</a>”。虽然 paper 是两天前才释出，但相关的 <a href="http://tools.ietf.org/html/draft-cheng-tcpm-fastopen-00">RFC</a> 草案则早在 2011 年 3 月份就提交到了 IETF，并且在两周前进行了一次 <a href="http://tools.ietf.org/html/draft-cheng-tcpm-fastopen-01">UPDATE</a>，这里是 <a href="http://tools.ietf.org/rfcdiff?url2=draft-cheng-tcpm-fastopen-01.txt">DIFF</a>。</p>
<p>对于 TCP Fast Open 方案的内容，淘宝的一个朋友已经根据 RFC 草案进行了<a href="http://www.pagefault.info/?p=282">解读</a>。我就不再赘述，感兴趣的朋友可以去看 paper 或者 RFC。我这里只是想讨论一下这个东西的应用前景。</p>
<p>由于对背景并没有做深入了解，我相信已经有很多人尝试去做过类似的工作，但我想类似的工作应该没有得到过大规模的应用。对于已经成型很久很久的 TCP 协议，让人很难有修改它的欲望，因为改那么底层的东西意味着很多很多的麻烦。</p>
<p>但是是否愿意付出代价，有一个前提是有没有足够的好处。TFO 给出的好处是：在 RTT (Round Trip Time) 比较低时，客户端页面加载时间优化大约在 4%~5%；RTT 越长，好处越大，平均大约在 25%。</p>
<div id="attachment_639782" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/11/google-tfo.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/11/google-tfo-600x283.jpg" alt="Google TCP Fast Open Evaluation" title="Google TCP Fast Open Evaluation" width="600" height="283" class="size-medium wp-image-639782" /></a><p class="wp-caption-text">Google TCP Fast Open Evaluation</p></div>
<p>除了页面加载变快改善了用户体验之外，TFO 给服务器端也带来了一些好处。由于每个请求都节省了一个 RTT，相应地也减少了服务器端的 CPU 消耗。paper 中给出的数据是每秒事务数由 2876.4 上升到 3548.7。</p>
<p>虽然 paper 中大部分时间在强调 TFO 对 web 页面加载的显著加速作用，但我认为即使 TFO 能成为互联网标准，它目前的状态离成为标准还有很长一段距离，因而在短期内它是无法影响到主流互联网世界的。但这并不意味着它没有机会，依小弟的愚见，目前它的推广应用可能有两个方向：</p>
<p>1. 移动互联网。移动互联网的 RTT 目前远大于传统互联网(常理推测，需数据支撑)，因而一个 RTT 节省的效果无法被忽视；另外移动互联网终端操作系统多样化，不像桌面终端系统那么单一。 Google 自己就掌握着其中一个很重要的 android，百度也计划推出自己的“易平台”。这些互联网公司有动力去改善移动用户访问自身网站的用户体验。</p>
<p>2. 互联网企业数据中心。虽然数据中心内部访问时延很低，但对于典型的请求/响应的服务而言，减少一次 RTT 带来的好处还是有吸引力的，最起码能减少计算能力浪费和增加吞吐吧。再加上很多企业内部使用的都是定制的开源操作系统和定制的网络库，升级的代价并不是那么高。如果我是企业基础设施的负责人，我想我会很慎重地考虑这个方案的。</p>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/the-vision-of-an-engineer.html" title="技术人员的眼界">技术人员的眼界</a> <span class="count">(8)</span> - <small class="excerpt">意识到眼界的重要性，最初是在大学时学长的交流会上。南大数学系有一个传统，每年总有那么两三次组织高年级...</small></li>
<li><a href="http://blog.solrex.org/articles/epoll-event-epollrdhup.html" title="epoll 事件之 EPOLLRDHUP">epoll 事件之 EPOLLRDHUP</a> <span class="count">(2)</span> - <small class="excerpt">在对系统问题进行排查时，我发现了一个奇怪的现象：明明是对方断开请求，系统却报告一个查询失败的错误，但...</small></li>
<li><a href="http://blog.solrex.org/articles/wifi-channel-choosing.html" title="无线Wi-Fi路由器的信道选择">无线Wi-Fi路由器的信道选择</a> <span class="count">(4)</span> - <small class="excerpt">早上起来看到一个朋友抱怨 Kindle 无法连接无线路由器，我有感而发，写了下面这篇微博：很多人从来...</small></li>
<li><a href="http://blog.solrex.org/articles/share-internet-access-with-adhoc-network.html" title="使用无线自组网共享互联网接入">使用无线自组网共享互联网接入</a> <span class="count">(5)</span> - <small class="excerpt">在这个互联网已经渗透入每个角落的时代，GUCAS 的网络接入收费显得非常不合时宜：（二年级以上同学）...</small></li>
<li><a href="http://blog.solrex.org/articles/problems-with-google-voice-rigister.html" title="注册 Google Voice 的曲折经历">注册 Google Voice 的曲折经历</a> <span class="count">(18)</span> - <small class="excerpt">昨天 iron-feet 同学给我讲了不少 Google Voice 的好处，搞得我也心痒痒的（技术...</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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/tcp-fast-open-by-google.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>代码行统计工具-CLOC</title>
		<link>http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html</link>
		<comments>http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html#comments</comments>
		<pubDate>Sun, 06 Nov 2011 14:52:50 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[应用软件]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639768</guid>
		<description><![CDATA[在工作中有时会有需要统计代码的行数，一般会用 wc 给出一个大致的结果。只不过在源代码文件分布比较分散，且存在多种不同类型语言的源代码时，wc 就不是特别适合了。 在公司内部也见过一些同事实现类似功能的脚本，但我想这应该是一个通用的需求，于是就找到了这个工具 - CLOC。其实就是一个 perl &#8230; <a href="http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在工作中有时会有需要统计代码的行数，一般会用 wc 给出一个大致的结果。只不过在源代码文件分布比较分散，且存在多种不同类型语言的源代码时，wc 就不是特别适合了。</p>
<p>在公司内部也见过一些同事实现类似功能的脚本，但我想这应该是一个通用的需求，于是就找到了这个工具 - <a href="http://cloc.sourceforge.net">CLOC</a>。其实就是一个 perl 脚本，很好用，统计报告也很清晰。在这里推荐一下。下面是一个统计 leveldb 源代码行数的例子。</p>
<pre>$ cloc .
     128 text files.
     123 unique files.
     353 files ignored.

http://cloc.sourceforge.net v 1.55  T=0.5 s (238.0 files/s, 46718.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C++                             60           2012           1258          13124
C/C++ Header                    52            968           1458           2690
HTML                             3             84              0           1094
C                                1             33              7            255
make                             1             43             17            153
CSS                              1             10              1             78
Bourne Shell                     1              9             19             46
-------------------------------------------------------------------------------
SUM:                           119           3159           2760          17440
-------------------------------------------------------------------------------
</pre>
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/exvim-dir-filter-reversed.html" title="修改exvim目录过滤逻辑为匹配拒绝">修改exvim目录过滤逻辑为匹配拒绝</a> <span class="count">(0)</span> - <small class="excerpt">exVim 是一个非常优秀的 Vim 环境，通过它能够省去很多 Vim 插件的配置工作。自从使用上 ...</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">(2)</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">(4)</span> - <small class="excerpt">由于在 CERNET 内，我经常需要用代理上网，没办法直连到 NTP 服务器，因此不能使用 Wind...</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/install-kscope-on-ubuntu-9-04.html" title="在 Ubuntu 9.04 上安装 Kscope">在 Ubuntu 9.04 上安装 Kscope</a> <span class="count">(8)</span> - <small class="excerpt">Kscope 是我很喜欢的 Linux 平台上的代码查看工具，因为我不会用 Emacs，vim + ...</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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/cloc-source-lines-of-code-counter.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于自动分裂的思考</title>
		<link>http://blog.solrex.org/articles/on-automatic-splitting.html</link>
		<comments>http://blog.solrex.org/articles/on-automatic-splitting.html#comments</comments>
		<pubDate>Thu, 03 Nov 2011 16:43:36 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[分布式系统]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HBase]]></category>
		<category><![CDATA[Splitting]]></category>
		<category><![CDATA[Storage]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639751</guid>
		<description><![CDATA[自动分裂是分布式系统中的一项重要技术，通常与自动迁移和负载均衡一起考虑，提供了系统的可扩展性和良好的性能。例如 Google 的 BigTable 和 Yahoo 的 PNUTS &#8230; <a href="http://blog.solrex.org/articles/on-automatic-splitting.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>自动分裂是分布式系统中的一项重要技术，通常与自动迁移和负载均衡一起考虑，提供了系统的可扩展性和良好的性能。例如 Google 的 BigTable 和 Yahoo 的 PNUTS 都实现了类似的功能，我之前也认为这应该是一个好的分布式系统标配。</p>
<p>但<a href="/articles/facebook-realtime-hadoop-system.html">读了 Facebook 关于实时 Hadoop 的文章</a>后，结合我自己在工程上的实践，我开始反思这一想法，认识到了这个功能的一些局限性。</p>
<p>Facebook 在打造实时 HBase 系统时，放弃了 HBase 提供的自动分裂，而专门开发了手工分裂功能。对此， Facebook 的解释是：</p>
<ol>
<li>由于业务数据的均匀增长性，所有子表可能在相近的时间触发自动分裂，导致分裂风暴；合理安排的手工分裂可以避免这一情况，减少对生产环境的影响。</li>
<li>手工分裂时在某个时间，子表的数目是稳定的，有利于进行调试和调优；自动分裂时很难把握住系统中子表的变化。</li>
<li>在对日志文件问题进行后期处理时，子表没有分裂比有分裂要容易处理很多。因为应用日志到子表上时不用考虑是否已经分裂。</li>
</ol>
<p>Facebook 给出的三个原因是非常合理的，我也很赞同，但我想补充一下我对自动分裂局限性的两个考虑：</p>
<ol>
<li>较难进行事故影响评估。对于一个严肃服务来说，发生系统事故时不仅要求尽快恢复，更为紧迫的要求是迅速给出影响评估。手工分裂时运维人员对系统中子表的分布情况有着更好的了解，能够更快地做出评估（而且一般影响面也可控一些）。</li>
<li>较难进行数据恢复。当子表数据出现问题，或者数据源本身就有问题，要进行数据恢复时，手工分裂一方面能够准确地定位错误数据的位置，另一方面便于进行错误数据的处理（后台直接替换错误文件等，不单指 HBase）。而自动分裂时寻找错误数据位置本身就比较麻烦，由于子表可能一直在变动中，对错误数据进行处理也不容易。</li>
</ol>
<p>从上面列出的几点来看，使用、改造或者实现一个分布式系统时，不能仅仅考虑方案是否漂亮，还要考虑到该系统的具体应用场景。脱离了应用场景的系统实现，如同漂亮的水果，吃起来不一定甜。但令人感到讽刺的是，漂亮的水果一般比较贵。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/facebook-realtime-hadoop-system.html" title="Facebook的实时Hadoop系统">Facebook的实时Hadoop系统</a> <span class="count">(4)</span> - <small class="excerpt">Facebook 在今年六月 SIGMOD 2011 上发表了一篇名为“Apache Hadoop ...</small></li>
<li><a href="http://blog.solrex.org/articles/oceanbase-architecture-note.html" title="淘宝OceanBase架构笔记">淘宝OceanBase架构笔记</a> <span class="count">(1)</span> - <small class="excerpt">[caption id="attachment_639438" align="aligncenter...</small></li>
<li><a href="http://blog.solrex.org/articles/infobright-data-warehouse.html" title="Infobright 数据仓库">Infobright 数据仓库</a> <span class="count">(1)</span> - <small class="excerpt">最近有部分工作涉及到了 Infobright 数据仓库，就浏览了一些相关的资料，感觉很受启发。下面写...</small></li>
<li><a href="http://blog.solrex.org/articles/time-series-big-table-system-design-talk.html" title="妄谈时间序列表格型大数据系统设计">妄谈时间序列表格型大数据系统设计</a> <span class="count">(3)</span> - <small class="excerpt">一直在特定领域的分布式系统一线摸爬滚打，曾取得一些微不足道的成绩，也犯过一些相当低级的错误。回头一看...</small></li>
<li><a href="http://blog.solrex.org/articles/freshman-year-in-baidu.html" title="在百度的第一年">在百度的第一年</a> <span class="count">(1)</span> - <small class="excerpt">半夜精神有些亢奋，混乱的思绪在脑袋里滚来滚去，没来由地忽然想起在百度这一年。想起这一年可以总结为：前...</small></li>
<li><a href="http://blog.solrex.org/articles/can-a-mobile-app-do-this.html" title="有没有这样一种手机应用?">有没有这样一种手机应用?</a> <span class="count">(8)</span> - <small class="excerpt">Google 的 Jeff Dean 在演讲中提过：对一套系统来说，每年典型的事故率会是这样的：1....</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/on-automatic-splitting.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>青岛行记</title>
		<link>http://blog.solrex.org/articles/five-days-in-qingdao.html</link>
		<comments>http://blog.solrex.org/articles/five-days-in-qingdao.html#comments</comments>
		<pubDate>Thu, 27 Oct 2011 11:56:27 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[旅行]]></category>
		<category><![CDATA[爱情]]></category>
		<category><![CDATA[Photo]]></category>
		<category><![CDATA[Qingdao]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639711</guid>
		<description><![CDATA[在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店便宜点儿和玩的舒服点儿。玩的舒服点儿主要是指，十一我还得值班处理服务器告警，但十一之后别人都在上班，我就可以放心地玩了。 之所以选择去青岛，主要是因为某个人太懒，对爬山和走远路很抵触，只好到海边溜达。我在去哪儿上团购了个旅馆，一天才七十块，这样能够比较放心地多住几天。 在青岛的日子是比较闲适的，每天睡到中午才起床。起来后就背个小包去逛，逛到哪儿算哪儿。没有奢求逛完所有的地方，但是由于时间充裕，基本上有意思的地方也都去看了下，唯一没去的就是崂山... 上班以后，工作赚钱成了主要目的，即使是下班回到家，也时不时地要处理一些工作上的事情，因而平时感觉生活完全被工作给充斥了。真正抛开所有事情，手机调成静音，才回归到了比较简单的状态，心情畅快不少。 我从青岛回来之后，看了一个名为《硬汉2》的电影。整个故事是在青岛取景拍摄的，一开头就是青岛天主教堂，熟悉的画面让我感觉好生激动。想要休闲的话，在家里宅着也未尝不可。但到一个陌生的地方总是一个更优的选择。在那里，困扰你的不再是日常的琐碎小事，而是完全不同的问题域。除此之外，还有增长见闻的好处，这一点对我是颇有吸引力的。特别是在当地能够发生一些有趣的、甜蜜的、或者忧伤的故事，就再好不过了。 我不太善于描述旅行中的人和事，再加上到青岛玩纯粹是休息，没办法作为攻略分享。只好挑几张图片出来，随便看看吧。 您可能对这些感兴趣： 承德行记 &#8230; <a href="http://blog.solrex.org/articles/five-days-in-qingdao.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在种种客观、主观条件下，我和媳妇儿同时决定上周休假一周散散心。选在十一之后，主要是为了人少点儿、住店便宜点儿和玩的舒服点儿。玩的舒服点儿主要是指，十一我还得值班处理服务器告警，但十一之后别人都在上班，我就可以放心地玩了。</p>
<p>之所以选择去青岛，主要是因为某个人太懒，对爬山和走远路很抵触，只好到海边溜达。我在去哪儿上团购了个旅馆，一天才七十块，这样能够比较放心地多住几天。</p>
<p>在青岛的日子是比较闲适的，每天睡到中午才起床。起来后就背个小包去逛，逛到哪儿算哪儿。没有奢求逛完所有的地方，但是由于时间充裕，基本上有意思的地方也都去看了下，唯一没去的就是崂山...</p>
<p>上班以后，工作赚钱成了主要目的，即使是下班回到家，也时不时地要处理一些工作上的事情，因而平时感觉生活完全被工作给充斥了。真正抛开所有事情，手机调成静音，才回归到了比较简单的状态，心情畅快不少。</p>
<p>我从青岛回来之后，看了一个名为《硬汉2》的电影。整个故事是在青岛取景拍摄的，一开头就是青岛天主教堂，熟悉的画面让我感觉好生激动。想要休闲的话，在家里宅着也未尝不可。但到一个陌生的地方总是一个更优的选择。在那里，困扰你的不再是日常的琐碎小事，而是完全不同的问题域。除此之外，还有增长见闻的好处，这一点对我是颇有吸引力的。特别是在当地能够发生一些有趣的、甜蜜的、或者忧伤的故事，就再好不过了。</p>
<p>我不太善于描述旅行中的人和事，再加上到青岛玩纯粹是休息，没办法作为攻略分享。只好挑几张图片出来，随便看看吧。</p>
<p>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2274' title='栈桥'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2274-200x133.jpg" class="attachment-thumbnail" alt="栈桥" title="栈桥" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2199' title='青岛天主教堂'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2199-200x133.jpg" class="attachment-thumbnail" alt="青岛天主教堂" title="青岛天主教堂" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2321' title='极地海洋世界，企鹅'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2321-200x133.jpg" class="attachment-thumbnail" alt="极地海洋世界，企鹅" title="极地海洋世界，企鹅" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2381' title='极地海洋世界'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2381-200x133.jpg" class="attachment-thumbnail" alt="极地海洋世界" title="极地海洋世界" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2409' title='极地海洋世界，吃奶鱼'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2409-200x133.jpg" class="attachment-thumbnail" alt="极地海洋世界，吃奶鱼" title="极地海洋世界，吃奶鱼" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2457' title='极地海洋世界'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2457-200x133.jpg" class="attachment-thumbnail" alt="极地海洋世界" title="极地海洋世界" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2536' title='奥帆中心，时间线'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2536-200x133.jpg" class="attachment-thumbnail" alt="奥帆中心，时间线" title="奥帆中心，时间线" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2542' title='奥帆中心'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2542-200x133.jpg" class="attachment-thumbnail" alt="奥帆中心" title="奥帆中心" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2548' title='奥帆中心'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2548-200x133.jpg" class="attachment-thumbnail" alt="奥帆中心" title="奥帆中心" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2555' title='奥帆中心'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2555-200x133.jpg" class="attachment-thumbnail" alt="奥帆中心" title="奥帆中心" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2651' title='改建自天文台的青年旅社'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2651-200x133.jpg" class="attachment-thumbnail" alt="改建自天文台的青年旅社" title="改建自天文台的青年旅社" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2767' title='青岛基督教堂内景'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2767-200x133.jpg" class="attachment-thumbnail" alt="青岛基督教堂内景" title="青岛基督教堂内景" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2823' title='青岛基督教堂外景'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2823-200x133.jpg" class="attachment-thumbnail" alt="青岛基督教堂外景" title="青岛基督教堂外景" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_2923' title='我媳妇儿'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_2923-200x133.jpg" class="attachment-thumbnail" alt="我媳妇儿" title="我媳妇儿" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_3108' title='第二海水浴场'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_3108-200x133.jpg" class="attachment-thumbnail" alt="第二海水浴场" title="第二海水浴场" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_3217' title='海岛渔村'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_3217-200x133.jpg" class="attachment-thumbnail" alt="海岛渔村" title="海岛渔村" /></a>
<a href='http://blog.solrex.org/articles/five-days-in-qingdao.html/img_3222' title='无敌海景麦当劳'><img width="200" height="133" src="http://blog.solrex.org/wp-content/uploads/2011/10/IMG_3222-200x133.jpg" class="attachment-thumbnail" alt="无敌海景麦当劳" title="无敌海景麦当劳" /></a>
<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/two-days-in-chengde.html" title="承德行记">承德行记</a> <span class="count">(5)</span> - <small class="excerpt">来北京几年，周边去的地方也不多。今年大组 building 选择了承德，那么自然愿意去到彼一游了。由...</small></li>
<li><a href="http://blog.solrex.org/articles/the-passed-weekends.html" title="逝去的周末">逝去的周末</a> <span class="count">(45)</span> - <small class="excerpt">我觉得我越来越向居家男人的特质靠近了。虽然咱公司实行的是弹性工作制，不强制要求上班时间，但是我早上要...</small></li>
<li><a href="http://blog.solrex.org/articles/relocate-to-fengtai.html" title="迁到丰台区">迁到丰台区</a> <span class="count">(8)</span> - <small class="excerpt">来北京已近六年，大小搬家经历了七八次，家当却是一次比一次多。实习和读书期间一直在海淀区晃悠。毕业以后...</small></li>
<li><a href="http://blog.solrex.org/articles/the-saturday-in-798.html" title="携友闲逛798">携友闲逛798</a> <span class="count">(3)</span> - <small class="excerpt">上周末正好有事到望京附近，顺便带老婆和朋友一起逛了逛 798 艺术中心，照了几张照片。我在里面逛得倒...</small></li>
<li><a href="http://blog.solrex.org/articles/shanghai-2012.html" title="上海流水">上海流水</a> <span class="count">(0)</span> - <small class="excerpt">我上次去上海是 8 年前，记忆都已经模糊了，只剩下几个场景比较清晰。与吴诗涛坐在沪宁双层城际列车的楼...</small></li>
<li><a href="http://blog.solrex.org/articles/the-year-before-2012.html" title="2012的前一年">2012的前一年</a> <span class="count">(4)</span> - <small class="excerpt">回顾了一下我的 2011 年，做了下面这幅图：</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/five-days-in-qingdao.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>求婚</title>
		<link>http://blog.solrex.org/articles/engagement-day.html</link>
		<comments>http://blog.solrex.org/articles/engagement-day.html#comments</comments>
		<pubDate>Sun, 23 Oct 2011 04:45:21 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[爱情]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639741</guid>
		<description><![CDATA[这是一篇补发的日志，被我修改了时间到 2011 年 10 月 23 日。记录这一天，我向 xixi &#8230; <a href="http://blog.solrex.org/articles/engagement-day.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>这是一篇补发的日志，被我修改了时间到 2011 年 10 月 23 日。记录这一天，我向 xixi 求婚的日子。</p>
<p><div id="attachment_639743" class="wp-caption alignnone" style="width: 610px"><a href="http://blog.solrex.org/wp-content/uploads/2011/10/ring.jpg"><img src="http://blog.solrex.org/wp-content/uploads/2011/10/ring-600x450.jpg" alt="戒指" title="戒指" width="600" height="450" class="size-medium wp-image-639743" /></a><p class="wp-caption-text">戒指</p></div><br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/get-married.html" title="裸婚">裸婚</a> <span class="count">(19)</span> - <small class="excerpt">[caption id="attachment_639850" align="alignnone" ...</small></li>
<li><a href="http://blog.solrex.org/articles/2010-memo.html" title="2010年志">2010年志</a> <span class="count">(9)</span> - <small class="excerpt">邵小毛《现象 2009 》的旋律似乎还回响在耳边，恍惚间脚步却马上要踏出这个 2010 年了。时光如...</small></li>
<li><a href="http://blog.solrex.org/articles/new-moutain-bike.html" title="我的新玩具">我的新玩具</a> <span class="count">(14)</span> - <small class="excerpt">话说我平日里老是心里默默计划着周末要做啥做啥，仿佛一副上进好青年的模样。但是真的一到周末，做的事总是...</small></li>
<li><a href="http://blog.solrex.org/articles/a-little-romance.html" title="《情定日落桥》">《情定日落桥》</a> <span class="count">(1)</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/chinese-stone-seal.html" title="刻印记">刻印记</a> <span class="count">(10)</span> - <small class="excerpt">身为一个中国人，稍微对咱老祖宗的东西有那么点儿爱好的，怕都曾经念想过拥有一方刻着自己大名的篆书小印吧...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/engagement-day.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>《三体三部曲》赠书计划</title>
		<link>http://blog.solrex.org/articles/three-body-gift-book-giving.html</link>
		<comments>http://blog.solrex.org/articles/three-body-gift-book-giving.html#comments</comments>
		<pubDate>Sun, 25 Sep 2011 18:29:08 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[读书]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Liucixin]]></category>
		<category><![CDATA[Santi]]></category>
		<category><![CDATA[Science Fiction]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639698</guid>
		<description><![CDATA[上周我又重读了一遍《三体》系列，在路上，用 Kindle。 还记得原来《三体I》好像是在《科幻世界》上连载读完的；《三体Ⅱ》曾经买过一本书，不知道放哪里了；《三体Ⅲ》是读的 txt 电子版。这次重读，看的是网友精心排版过的三体系列 PDF 电子版。 第一次读时主要是跟着情节往前追，急切地想知道后面会发生什么，看重的是酣畅淋漓。这次重读，更注意细节和推理，故事情节发展的脉络，人物感情和心理的变化。虽然重读时对书中一些地方产生了疑惑，但我觉得和整个故事的图景来比瑕不掩瑜，况且还有可能是我没有想透呢？ &#8230; <a href="http://blog.solrex.org/articles/three-body-gift-book-giving.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>上周我又重读了一遍《三体》系列，在路上，用 Kindle。</p>
<p>还记得原来《<a href="http://book.douban.com/subject/2567698/">三体I</a>》好像是在《科幻世界》上连载读完的；《<a href="http://book.douban.com/subject/6009029/">三体Ⅱ</a>》曾经买过一本书，不知道放哪里了；《<a href="http://book.douban.com/subject/5363767/">三体Ⅲ</a>》是读的 txt 电子版。这次重读，看的是网友精心排版过的三体系列 PDF 电子版。</p>
<p>第一次读时主要是跟着情节往前追，急切地想知道后面会发生什么，看重的是酣畅淋漓。这次重读，更注意细节和推理，故事情节发展的脉络，人物感情和心理的变化。虽然重读时对书中一些地方产生了疑惑，但我觉得和整个故事的图景来比瑕不掩瑜，况且还有可能是我没有想透呢？</p>
<p>《三体》三部曲是一个好的科幻故事，好到当想到它描述的宇宙有可能是真实的时，忍不住会打个冷战。刘慈欣是一个非常杰出的科幻小说家。在我眼里，相信也是在很多科幻迷眼里，他代表了中国当代长篇科幻小说的最高水平。我很惭愧阅读电子版小说侵犯了大刘的权益，但我实在对收藏实体书无爱，书架已经够沉了。因而我想赠出一套《三体三部曲》给我的博客读者，一来我的良心能够稍觉安稳，二来希望对扩大国产科幻的影响力有所助益。</p>
<p>获得这套赠书的方法很简单，你只需要在评论中留言说明你想要这套书的理由：</p>
<blockquote><p>我想要《三体三部曲》，因为... </p></blockquote>
<p>我会选择喜欢的一个理由，然后根据你留下的电子信箱联系你，通过某个电商（卓越、京东之类）直接发货给你。这不是广告，不是福利，也不是读后感评比，没有任何客观性，一切都凭我的主观感觉，所以对于没拿到的同学我最后只能表示遗憾。</p>
<p>理由可以随便写，我相信应该不会有人为了这几十块钱的书而费劲脑筋来编故事。此外，我不会考虑认识的朋友，世界已经很小了，我们有必要把它搞得更小吗？还有，仅限大陆的朋友，不然运费都可以买好几套了...</p>
<p>考虑到我博客的影响力，应该不会有太多理由让我挑选，那么等待的时间就稍微长一点吧。最后的时间放到 2011 年 10 月 25 日，如果到时还没有我喜欢的理由出现，我就从已有的留言中随机挑选一个送出。</p>
<p>★★★★★<br />
书已经送给来自浙江杭州的 <a href="http://blog.solrex.org/articles/three-body-gift-book-giving.html#comment-12441">Arcthur 同学</a>。<br />
★★★★★<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/steve-jobs.html" title="史蒂夫·乔布斯传">史蒂夫·乔布斯传</a> <span class="count">(2)</span> - <small class="excerpt">我一直羞于去崇拜某个人，死去的或者正在死去的。我总害怕他做了或者将要做一件我并不认同的事情，这就好比...</small></li>
<li><a href="http://blog.solrex.org/articles/it-birds-review.html" title="因为真实才宝贵">因为真实才宝贵</a> <span class="count">(15)</span> - <small class="excerpt">读大学时我很佩服一个老师。他教过我两门课，两门都是计算机类的课程，在数学系并不很受欢迎。他讲得不错，...</small></li>
<li><a href="http://blog.solrex.org/articles/lies-my-teacher-told-me.html" title="Lies My Teacher Told Me">Lies My Teacher Told Me</a> <span class="count">(11)</span> - <small class="excerpt">最早是从笑来的博客里看到这本书的信息，而目前从搜索结果来看，在中文世界里评论这本书的也只有笑来老师。...</small></li>
<li><a href="http://blog.solrex.org/articles/the-road-less-traveled-etc-5-books.html" title="新购《少有人走的路》等五本书">新购《少有人走的路》等五本书</a> <span class="count">(2)</span> - <small class="excerpt">其实本想只买《少有人走的路》一本书，但卓越网购书总价 49 元以上才给免配送费，于是就在卓越的特价店...</small></li>
<li><a href="http://blog.solrex.org/articles/book-legends-of-the-enigma.html" title="密码传奇">密码传奇</a> <span class="count">(1)</span> - <small class="excerpt">不想睡觉，就写一个小书评吧。《密码传奇》上次在国家科学图书馆借一本密码学教材的时候，碰巧看到了这本书...</small></li>
<li><a href="http://blog.solrex.org/articles/can-you-feel-the-pressure-frombooks.html" title="你能感到书本给你的压力吗">你能感到书本给你的压力吗</a> <span class="count">(9)</span> - <small class="excerpt">你能感到书本给你的压力吗？随着案头累积的书越来越多，我忽然想到这个问题，因为我发现我越来越为这个焦虑...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/three-body-gift-book-giving.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Leveldb 编译错误背后的C++标准变化</title>
		<link>http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html</link>
		<comments>http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html#comments</comments>
		<pubDate>Fri, 23 Sep 2011 07:42:20 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[C Language]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Friendship]]></category>
		<category><![CDATA[Standard]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639674</guid>
		<description><![CDATA[在编译 Levedb 时，我遇到了这个错误： g++ -c -I. -I./include -fno-builtin-memcmp &#8230; <a href="http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在编译 Levedb 时，我遇到了这个错误：</p>
<blockquote><p>
g++ -c -I. -I./include -fno-builtin-memcmp -DLEVELDB_PLATFORM_POSIX -pthread -DOS_LINUX -O2 -DNDEBUG         db/version_set.cc -o db/version_set.o<br />
db/version_set.cc: In member function `void leveldb::VersionSet::Builder::Apply(leveldb::VersionEdit*)':<br />
./db/version_edit.h:100: error: `std::vector<std::pair <int, leveldb::InternalKey>, std::allocator</std::pair><std::pair <int, leveldb::InternalKey> > > leveldb::VersionEdit::compact_pointers_' is private<br />
db/version_set.cc:461: error: within this context<br />
...<br />
</std::pair></p></blockquote>
<p>在网上容易搜到<a href="http://code.google.com/p/leveldb/issues/detail?id=10">解决方案</a>，由于归根结底是访问控制问题，方法是把所有涉及到的的 private 变量或类型修改为 public。由于不是所有的编译器都会报错，我就很好奇产生这个错误的根本原因。</p>
<p>BTW: 一种不修改代码的 work around 方法是，在编译这个文件时加上 -fno-access-control 参数，这样 g++ 就不会进行访问控制检查，自然也就没问题了。这个参数同样可以用于对 private 成员函数进行单元测试。</p>
<p>简单地分析一下这个错误。发生错误的地方是在 VersionSet::Builder 这个类的成员函数中，而错误则是其成员函数无法访问 VersionEdit 和 Version 类的私有成员变量。VersionSet 是 VersionEdit 和 Version 类的友元类，Builder 是 VersionSet 的嵌套类。简化一下，代码如下所示：</p>
<blockquote><p><span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">VersionSet</span>;</p>
<p><span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">VersionEdit</span> {<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">friend</span> <span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">VersionSet</span>;<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">static</span> <span style="color: rgb(43, 145, 175); ">int</span> compact_pointers_;<br />
};</p>
<p><span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">VersionSet</span> {<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">Builder</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> foo()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">return</span> VersionEdit::compact_pointers_;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; };&nbsp; <br />
};</p></blockquote>
<p>把这段代码拿给编译器去编译，g++ 3.4.4/5 会报类似的 `int VersionEdit::compact_pointers_' is private 错误，但是 g++ 4.5.3 则能够编译通过。</p>
<p>由于 VersionSet 是 VersionEdit 的友元类，那么 VersionSet 是能够访问 VersionEdit 私有成员的，这样问题就集中在 Builder 是否能够获得与 VersionEdit 的友元关系。如果语法规定嵌套类 Builder 能够从 VersionSet “获得”友元关系，那么 Builder就能够访问 VersionEdit::compact_pointers_，反之就不能访问。</p>
<p>在 C++98 标准中，关于嵌套类的权限有如下描述：</p>
<blockquote><p>$11.8/1 [class.access.nest],</p>
<p>The members of a nested class have no special access to members of an enclosing class, nor to classes or functions that have granted friendship to an enclosing class; the usual access rules (clause 11) shall be obeyed. The members of an enclosing class have no special access to members of a nested class; the usual access rules (clause 11) shall be obeyed. </p>
<p>Example:</p>
<p><span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">E</span> {<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> x;<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">class</span> B { };<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">I</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// error: E::B is private</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">void</span> f(E* p, <span style="color: rgb(43, 145, 175); ">int</span> i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p-&gt;x = i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// error: E::x is private</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; };<br />
&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> g(I* p)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">return</span> p-&gt;y;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// error: I::y is private</span><br />
&nbsp;&nbsp; }<br />
};
</p></blockquote>
<p>但是在 C++11 中，这段描述变更为：</p>
<blockquote><p>$11.7/1 Nested classes [class.access.nest]</p>
<p>A nested class is a member and as such has the same access rights as any other member. The members of an enclosing class have no special access to members of a nested class; the usual access rules (Clause 11) shall be obeyed.</p>
<p>Example:</p>
<p><span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">E</span> { <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> x;<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">class</span> B { };<br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">class</span> <span style="color: rgb(43, 145, 175); ">I</span> { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// OK: E::I can access E::B</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">void</span> f(E* p, <span style="color: rgb(43, 145, 175); ">int</span> i) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p-&gt;x = i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// OK: E::I can access E::x</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; };&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="color: rgb(43, 145, 175); ">int</span> g(I* p) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 0, 255); ">return</span> p-&gt;y;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0, 128, 0); ">// error: I::y is private</span><br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
};
</p></blockquote>
<p>从上面的描述和示例代码对比中我们可以明显看出，在旧标准中嵌套类和“被嵌套类”没有什么特殊的关系，就像两个普通类一样；但是在新标准中嵌套类已经完全视为“被嵌套类”的成员，那么自然也获得了“被嵌套类”成员应该有的访问控制权限。这也就意味着“被嵌套类”的普通成员拥有的访问“被友元类”私有成员变量的权限，嵌套类也能够获得，那么 Leveldb 在新版本的编译器下能够编译通过也不足为奇了。</p>
<p>不过 gcc3.4 的编译错误问题还不能单单归究于标准的变化。因为 gcc3.4 已经能够支持嵌套类访问“被嵌套类”的私有成员（因为在很早以前这就被确认为<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45">一个缺陷</a>），只是不能够支持友元关系到嵌套类的传递。友元关系的传递可能是在 4.1 或者 4.2 版本中实现的，应该属于上述标准变化的衍生特性。<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/raii-or-zombie-object.html" title="僵尸对象或 RAII">僵尸对象或 RAII</a> <span class="count">(7)</span> - <small class="excerpt">我最近在想这个问题，到底要不要在程序中使用异常？以前写的 C 代码比较多，即使写 C++，基本上也是...</small></li>
<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">(8)</span> - <small class="excerpt">随便一本《近世代数》或者《抽象代数》书上在讲到置换群的时候，应该都会讲到这样一个定理：任何一个置换都...</small></li>
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error-ext.html" title="Cygwin GCC qsort 函数错误（续）">Cygwin GCC qsort 函数错误（续）</a> <span class="count">(0)</span> - <small class="excerpt">上一篇文章中提到我在为 qsort 写 compare 函数时犯了一个愚蠢的错误：我脑袋陷入了一个错...</small></li>
<li><a href="http://blog.solrex.org/articles/cygwin-gcc-qsort-error.html" title="Cygwin GCC qsort 函数错误">Cygwin GCC qsort 函数错误</a> <span class="count">(6)</span> - <small class="excerpt">我平时在 Windows 下写代码时，经常使用 Cygwin 的 gcc。但是今天我居然发现 Cyg...</small></li>
<li><a href="http://blog.solrex.org/articles/read-text-to-array-with-c.html" title="将文本文件读入数组-C语言实现">将文本文件读入数组-C语言实现</a> <span class="count">(8)</span> - <small class="excerpt">要求：使用 C 语言将文本文件的每一行读入为数组的一个元素，返回一个 char ** 指针。由于行长...</small></li>
<li><a href="http://blog.solrex.org/articles/does-vasprintf-allocate-space-on-stack.html" title="vasprintf 会将空间分配到栈上吗？">vasprintf 会将空间分配到栈上吗？</a> <span class="count">(11)</span> - <small class="excerpt">由于提交过几次 Linux Fetion 的 bug 和 patch，Linux Fetion 的开...</small></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/cxx11-changes-in-levedb-compiling-error.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>通过科目三路考</title>
		<link>http://blog.solrex.org/articles/road-test-passed.html</link>
		<comments>http://blog.solrex.org/articles/road-test-passed.html#comments</comments>
		<pubDate>Fri, 16 Sep 2011 09:17:51 +0000</pubDate>
		<dc:creator>Solrex Yang</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://blog.solrex.org/?p=639666</guid>
		<description><![CDATA[前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。 想起来这半年也是折腾不断。我是 2 月底参加水木团购版的东方时尚驾校报名团购，3 月中旬考科目一。之后因为懒得约模拟机，光模拟机 6 个小时花了三周时间才上完。后来从淘宝上买了个约车软件，专门用来约周末的散段，效率还挺高的，也就三周就把散段上完了。后来科目二考试也算挺顺利。只是5月该考科目三的时候忽然忙起来了，工作上各种事情，再加上天气热，就把科目三考试拖了下来，一直拖到 9 &#8230; <a href="http://blog.solrex.org/articles/road-test-passed.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>前天晚上通过科目三路考，我为期半年的驾校学习总算结束了。</p>
<p>想起来这半年也是折腾不断。我是 2 月底参加水木团购版的东方时尚驾校报名团购，3 月中旬考科目一。之后因为懒得约模拟机，光模拟机 6 个小时花了三周时间才上完。后来从淘宝上买了个约车软件，专门用来约周末的散段，效率还挺高的，也就三周就把散段上完了。后来科目二考试也算挺顺利。只是5月该考科目三的时候忽然忙起来了，工作上各种事情，再加上天气热，就把科目三考试拖了下来，一直拖到 9 月。</p>
<p>工作以后考驾照呢，我觉得主要还是得看执行力。执行力高的，两个月以内就能搞定，像我这样执行力差的，光拖就能拖四个月。我自己的一个特性是有压力的时候不希望分心。前段时间在做一个比较大的升级，对我个人的设计能力、架构把握和编码能力都是一个挑战。再加上合作半年的一个同事离职，新加入的同事也不太熟悉，我只好一个人吭哧吭哧把剩下的事情做完。</p>
<p>不过这个项目让我很有成就感！重构了一个 2 万多行的模块，精简到不到 1 万行；重整了 4 万多行代码，架构上进行了很大的调整，脉络上清晰很多。另外也加了些新功能。但是由于我负责的系统涉及产品线太多，平时工作中新需求、沟通、线上问题处理等日常事务占到一大半，很多时候只能加班写代码。这样大的工作量让人有些筋疲力尽。现在项目完成了，我也想休息休息调整一下，就把后续的编码工作让给同事去做，我下面这个月主要任务就是跟进测试和校园招聘的工作了。</p>
<p>算了，又跑题了，最后做个广告吧：如果 2012 应届生同学对百度提供的工作机会感兴趣的话，欢迎邮件简历给我！优秀的朋友我可以帮助内部推荐，相信你知道在哪里能找到我的邮箱地址 :)<br />
<h3>您可能对这些感兴趣：</h3>
<ul class="related_post">
<li><a href="http://blog.solrex.org/articles/freshman-year-in-baidu.html" title="在百度的第一年">在百度的第一年</a> <span class="count">(1)</span> - <small class="excerpt">半夜精神有些亢奋，混乱的思绪在脑袋里滚来滚去，没来由地忽然想起在百度这一年。想起这一年可以总结为：前...</small></li>
<li><a href="http://blog.solrex.org/articles/the-passed-weekends.html" title="逝去的周末">逝去的周末</a> <span class="count">(45)</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">(15)</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/baidu-open-day.html" title="百度新人开放日见闻">百度新人开放日见闻</a> <span class="count">(17)</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>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.solrex.org/articles/road-test-passed.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 2.966 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-30 13:58:45 -->

