<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>后端技术@tjumicy</title>
	<atom:link href="http://micy.cn/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://micy.cn/blog</link>
	<description>for Web Developer</description>
	<lastBuildDate>Sun, 06 May 2012 05:17:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta4-20725</generator>
		<item>
		<title>MBTI实践、创业者、技术团队管理者</title>
		<link>http://micy.cn/blog/post/138</link>
		<comments>http://micy.cn/blog/post/138#comments</comments>
		<pubDate>Sun, 06 May 2012 05:07:02 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[心得]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=138</guid>
		<description><![CDATA[上次写blog还是2010年总结，至今过去16个月了。 这16个月，又经历了很多事情。回头审视一个更长的时间段，就会淡忘很多细节。 这里分享三个小主题 MBTI实践 MBTI简单说的话，是一套有几十年历史的性格分类的理论(wiki)，从4个维度，每个维度两种相反特征，把人分为16种性格。 2011年夏天，处于对了解人的好奇心，开始仔细研究MBTI，用于了解自己、家人、同事、朋友的性格特点、思维、做事方法。 现在大概做了这么几件事 知道自己是什么性格，优点缺点是什么 知道别人是什么性格，现在基本可以在交互中识别人的类型 梳理收获，写成PPT，期间给部门里的近100位同事做过一次公开的分享 每天会有1小时左右的时间，会思考和它有关的事情，目前持续大概300多小时。自己体验的结论是：收获很多。 用一万小时理论来看，修行还有很长的路。我希望在未来很多年中，把它做为一项技能去锻炼。 创业者 从07年离开百度，开始创业经历，快5年了。 在自己身边，有知乎、小米、街旁、豌豆夹等等和我们一样打拼的创业者。太平洋另一边，有 Instagram、Square、Pinterest、Path、Openstack 这些叫的上名字的，也有几百上千家叫不上名字的团队。现在互联网最热的就这么两个国家了，这是做为一个在互联网浪潮中的人幸运的地方。 创业时人的状态和心情起伏会很大，比正常人波动大一两个数量级。做个形象的比喻，就像 Tiny Wings 里面的小鸟一样： 有时候特顺，飞在云彩里面爽死了，还大喊着“yohoooooo~” 有时候特惨，卡在一个坎里面半天出不来 有时候无论再怎么努力往前飞，时间不等你，忽然天就黑了。 期望自己能分享一些感想出来，也能和更多的创业者交流。 技术团队管理者 美团的技术团队，从个位数增长到三位数，用了两年多。团队高速发展的过程，对自己的考验也非常多。 16个月前，我站在将来做技术专家(P线)，还是做技术管理者(M线)的路口，刚抬脚迈入M线。 现在，在M线走了一小段，有十几位可以一起向一个方向奔跑的伙伴。 工作节奏，和之前在百度的感受相比，大概要快3倍。直观一些，对一个team来说，大约一个月的事情在这里一个周做完。 好处是，在这里干一年，差不多能顶在别的地方锻炼两三年的经历。当然，这里忙一些。 每次仔细思考管理的方方面面，都觉得自己离做的优秀还差很远。它真是一件很容易做的平庸，想做到大师非常难的事。 对技术管理来说，对管理者要求更高一些，需要管理和技术一起修行。 一切还刚开始。]]></description>
			<content:encoded><![CDATA[<p>上次写blog还是2010年总结，至今过去16个月了。<br />
这16个月，又经历了很多事情。回头审视一个更长的时间段，就会淡忘很多细节。</p>
<p>这里分享三个小主题</p>
<p><strong>MBTI实践</strong></p>
<p>MBTI简单说的话，是一套有几十年历史的性格分类的理论(<a href="http://zh.wikipedia.org/wiki/%E9%82%81%E7%88%BE%E6%96%AF-%E5%B8%83%E9%87%8C%E6%A0%BC%E6%96%AF%E6%80%A7%E6%A0%BC%E5%88%86%E9%A1%9E%E6%B3%95" target="_blank">wiki</a>)，从4个维度，每个维度两种相反特征，把人分为16种性格。<br />
2011年夏天，处于对了解人的好奇心，开始仔细研究MBTI，用于了解自己、家人、同事、朋友的性格特点、思维、做事方法。</p>
<p>现在大概做了这么几件事</p>
<ol>
<li>知道自己是什么性格，优点缺点是什么</li>
<li>知道别人是什么性格，现在基本可以在交互中识别人的类型</li>
<li>梳理收获，写成PPT，期间给部门里的近100位同事做过一次公开的分享</li>
</ol>
<p>每天会有1小时左右的时间，会思考和它有关的事情，目前持续大概300多小时。自己体验的结论是：收获很多。<br />
用一万小时理论来看，修行还有很长的路。我希望在未来很多年中，把它做为一项技能去锻炼。</p>
<p><strong>创业者</strong></p>
<p>从07年离开百度，开始创业经历，快5年了。</p>
<p>在自己身边，有知乎、小米、街旁、豌豆夹等等和我们一样打拼的创业者。太平洋另一边，有 Instagram、Square、Pinterest、Path、Openstack 这些叫的上名字的，也有几百上千家叫不上名字的团队。现在互联网最热的就这么两个国家了，这是做为一个在互联网浪潮中的人幸运的地方。</p>
<p>创业时人的状态和心情起伏会很大，比正常人波动大一两个数量级。做个形象的比喻，就像 Tiny Wings 里面的小鸟一样：</p>
<ul>
<li>有时候特顺，飞在云彩里面爽死了，还大喊着“yohoooooo~”</li>
<li>有时候特惨，卡在一个坎里面半天出不来</li>
<li>有时候无论再怎么努力往前飞，时间不等你，忽然天就黑了。</li>
</ul>
<p>期望自己能分享一些感想出来，也能和更多的创业者交流。</p>
<p><strong>技术团队管理者</strong></p>
<p>美团的技术团队，从个位数增长到三位数，用了两年多。团队高速发展的过程，对自己的考验也非常多。</p>
<p>16个月前，我站在将来做技术专家(P线)，还是做技术管理者(M线)的路口，刚抬脚迈入M线。<br />
现在，在M线走了一小段，有十几位可以一起向一个方向奔跑的伙伴。</p>
<p>工作节奏，和之前在百度的感受相比，大概要快3倍。直观一些，对一个team来说，大约一个月的事情在这里一个周做完。<br />
好处是，在这里干一年，差不多能顶在别的地方锻炼两三年的经历。当然，这里忙一些。</p>
<p>每次仔细思考管理的方方面面，都觉得自己离做的优秀还差很远。它真是一件很容易做的平庸，想做到大师非常难的事。<br />
对技术管理来说，对管理者要求更高一些，需要管理和技术一起修行。</p>
<p>一切还刚开始。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/138/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>这个2010年</title>
		<link>http://micy.cn/blog/post/122</link>
		<comments>http://micy.cn/blog/post/122#comments</comments>
		<pubDate>Sun, 26 Dec 2010 17:06:48 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[心得]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=122</guid>
		<description><![CDATA[这个2010年我写了3篇blog，都在年初，而且和技术关系不大，几乎停滞。其实有接近10篇草稿，没有一个满意的，没有去润色到可发布。 这一年发生了很多事，我的大部分时间都在做美团，其它可以用来做点事情的时间很少。一年前的这个时候，2009年年底，在等待饭否被关站半年依然没有消息的时候，大家在华清嘉园那间房子的会议室，讨论了打算另起炉灶，做“团购”这样一个事。后来的故事就很多了，有各种报道，后来它还成了2010年中国互联网界最热闹的事，这个模式在它在中国诞生的第一年中，创造了上亿的销售额和数十万人的就业机会。 这一年，我所在的团队，从几个人变为一百多人，因为办公室面积始终不足，搬家两次。从四个工程师变为几十个工程师，每个人所经历的时间速度，是做其它事情的几倍，屡屡有“美团已经做了两三年”这样的感觉。这一年的每一天，如果做别的事，可能是三天或者五天，所以老得也很快。对，这类似传说中李献计的时差症。就算你忽然觉得生活变的平淡，但比起做其它事，你依然经历了更多。这很神奇。 这一年，我上班的地点又回到了中关村西区，离当初刚来北京的时候很近。差不多的写字楼，差不多的格子间，差不多的工作餐地点，让我去想这几年什么变了，而什么又没变。几天前Facebook的Mark来新浪的时候，@yuancheng凑巧在咖啡馆遇到了他，有合影为证。在街旁看到签到，在饭否看到照片的时候，我激动的想立刻冲过去，我好久好久没这么激动了。 这一年，饭否在各种努力下重新开放，老用户可以从 http://fanfou.com/login 登录，新用户只有用邀请链接才能注册。饭否对我的意义，无法言语表达，我因它经历了太多的起起落落。它对我来说，并不只是事业。 这一年，我回天津做了一次校园招聘，电话和当面面试过很多人。之后又认识了很多即将毕业，充满活力和潜力的应届生同学来公司实习。我喜欢把自己知道的都告诉他们，最好让他们能跑多快就跑多快。 生活上，也有很多变化。 这一年，经历了很多波折和平静之后，开始了一段新的感情，很投入，有一个很爱我的GF。前段时间，还去工作室拍了一组照片，放到SNS上激起了各种猜测。 这一年，自己在不多的休息日中挤了时间，考了驾照，成为每天北四环车流中的一员。车对于男人还是很有吸引力的，而且大大增加了一个人在北京这样的XXXL城市的活动半径，也给人更多的见闻和思考的机会。去年此时，谁能想到我怎么可能会去买一辆小车开呢？ 这一年，我搬了3次家，累积在北京租过的房子已经到了8个。今天从遥远的石景山回家的路上，路过万柳，还看到了在北京住过的第二个小区，一点都没变，让我回想起拖着一个箱子走进那间屋子时，房东两口子看到我惊讶的问：你的行李就一个箱子？ 房子和北京，对于我，慢慢变成只是一个暂时的存在。我们因理想来到北京，虽然这座城市并不怎么适合生活，但它也给了我们唯一的、令人难忘的前半个二十几岁的时光。 2009年，对于我是极其压抑的一年，这一年我失去了很多很多，而且只能忍着，我甚至没有在什么有人的地方发出过声音。记得年初我看《海盗电台》《Milk》《苹果往事》时，情绪失控，远远超出了自己的想像。 2010年，对于我是充满变化和经历的一年。甚至到现在，我也丝毫无法预知半年后的我自己、我周围的事，会变成什么样子，一切都变化的很快，就像《The Legend of 1900》里在邮船的大厅中随海浪起伏地演奏钢琴一般。享受好你的演奏，下一秒，你不知会移动到哪个方向。 这个2010年，我25岁。]]></description>
			<content:encoded><![CDATA[<p>这个2010年我写了3篇blog，都在年初，而且和技术关系不大，几乎停滞。其实有接近10篇草稿，没有一个满意的，没有去润色到可发布。</p>
<p>这一年发生了很多事，我的大部分时间都在做<a href="http://www.meituan.com/r/i24" target="_blank">美团</a>，其它可以用来做点事情的时间很少。一年前的这个时候，2009年年底，在等待饭否被关站半年依然没有消息的时候，大家在华清嘉园那间房子的会议室，讨论了打算另起炉灶，做“团购”这样一个事。后来的故事就很多了，有<a href="http://www.meituan.com/about/press" target="_blank">各种报道</a>，后来它还成了2010年中国互联网界最热闹的事，这个模式在它在中国诞生的第一年中，创造了上亿的销售额和数十万人的就业机会。</p>
<p>这一年，我所在的团队，从几个人变为一百多人，因为办公室面积始终不足，搬家两次。从四个工程师变为几十个工程师，每个人所经历的时间速度，是做其它事情的几倍，屡屡有“美团已经做了两三年”这样的感觉。这一年的每一天，如果做别的事，可能是三天或者五天，所以老得也很快。对，这类似传说中<a href="http://www.soku.com/search_video?q=李献计历险记" target="_blank">李献计的时差症</a>。就算你忽然觉得生活变的平淡，但比起做其它事，你依然经历了更多。这很神奇。</p>
<p>这一年，我上班的地点又回到了中关村西区，离当初刚来北京的时候很近。差不多的写字楼，差不多的格子间，差不多的工作餐地点，让我去想这几年什么变了，而什么又没变。几天前Facebook的Mark来新浪的时候，<a href="https://twitter.com/yuancheng" target="_blank">@yuancheng</a>凑巧在咖啡馆遇到了他，有合影为证。在<a href="http://www.jiepang.com/" target="_blank">街旁</a>看到签到，在饭否看到照片的时候，我激动的想立刻冲过去，我好久好久没这么激动了。</p>
<p>这一年，饭否在各种努力下重新开放，老用户可以从 <a href="http://fanfou.com/login" target="_blank">http://fanfou.com/login</a> 登录，新用户只有用邀请链接才能注册。饭否对我的意义，无法言语表达，我因它经历了太多的起起落落。它对我来说，并不只是事业。</p>
<p>这一年，我回天津做了一次校园招聘，电话和当面面试过很多人。之后又认识了很多即将毕业，充满活力和潜力的应届生同学来公司实习。我喜欢把自己知道的都告诉他们，最好让他们能跑多快就跑多快。<br />
<span id="more-122"></span></p>
<p><strong>生活上，也有很多变化。</strong></p>
<p>这一年，经历了很多波折和平静之后，开始了一段新的感情，很投入，有一个很爱我的GF。前段时间，还去工作室拍了一组照片，放到SNS上激起了各种猜测。</p>
<p>这一年，自己在不多的休息日中挤了时间，考了驾照，成为每天北四环车流中的一员。车对于男人还是很有吸引力的，而且大大增加了一个人在北京这样的XXXL城市的活动半径，也给人更多的见闻和思考的机会。去年此时，谁能想到我怎么可能会去买一辆小车开呢？</p>
<p>这一年，我搬了3次家，累积在北京租过的房子已经到了8个。今天从遥远的石景山回家的路上，路过万柳，还看到了在北京住过的第二个小区，一点都没变，让我回想起拖着一个箱子走进那间屋子时，房东两口子看到我惊讶的问：你的行李就一个箱子？<br />
房子和北京，对于我，慢慢变成只是一个暂时的存在。我们因理想来到北京，虽然这座城市并不怎么适合生活，但它也给了我们唯一的、令人难忘的前半个二十几岁的时光。</p>
<p>2009年，对于我是极其压抑的一年，这一年我失去了很多很多，而且只能忍着，我甚至没有在什么有人的地方发出过声音。记得年初我看<a href="http://movie.douban.com/subject/3007773/" target="_blank">《海盗电台》</a><a href="http://movie.douban.com/subject/2336737/" target="_blank">《Milk》</a><a href="http://book.douban.com/subject/4214837/" target="_blank">《苹果往事》</a>时，情绪失控，远远超出了自己的想像。</p>
<p>2010年，对于我是充满变化和经历的一年。甚至到现在，我也丝毫无法预知半年后的我自己、我周围的事，会变成什么样子，一切都变化的很快，就像<a href="http://movie.douban.com/subject/1292001/" target="_blank">《The Legend of 1900》</a>里在邮船的大厅中随海浪起伏地演奏钢琴一般。享受好你的演奏，下一秒，你不知会移动到哪个方向。</p>
<p>这个2010年，我25岁。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/122/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>linux/macOS下解压中文乱码的zip包</title>
		<link>http://micy.cn/blog/post/118</link>
		<comments>http://micy.cn/blog/post/118#comments</comments>
		<pubDate>Sun, 26 Dec 2010 15:34:45 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=118</guid>
		<description><![CDATA[从 windows 下压缩的zip包如果文件或者目录名有中文，在典型的 linux 环境（如ubuntu）和 macOS 下按照正常zip解压都会乱码。google一下搜到的答案有两种，一种是hack一下unzip的代码重新编译，还有一种是另外写一个解压的工具代替unzip。 其实这是一个困扰了linuxer很多年的老问题了，能搜到好多人问和答，但至少在半年前(6月份)我遇到的时候，没有让我满意的简单的解决通用的方案。 当时我是，遇到产品的同事给了一个做好的交互原型，输出一个zip包，而基本上公司里其它技术都是用linux或者macOS。参考了搜到的解决方案，用 php 的 zip 扩展来解压，并转换 GBK 为 UTF-8 即可。 存到自己home目录下的bin里面， 比如放到 ~/bin/punzip，然后 chmod +x ~/bin/punzip，以后就可以比较自由的直接调用 punzip foo.zip 来解压了。 依赖了 php 的 zip 扩展，如果执行时提示“php zip extension is needed.”（比如默认macOS就没有加载zip扩展，ubuntu有），需要修改 php.ini 添加 extension=zip.so，具体按照提示中的手册页面做就好。 &#60;?php/**&#160;*&#160;解压含有文件名为gbk编码的zip包，到当前目录&#160;*/if&#160;(!extension_loaded('zip'))&#160;{&#160;&#160;&#160;&#160;printf("php&#160;zip&#160;extension&#160;is&#160;needed.&#160;See&#160;http://www.php.net/manual/en/zip.installation.php\n",&#160;$argv[0]);&#160;&#160;&#160;&#160;die;}if&#160;(!isset($argv[1]))&#160;{&#160;&#160;&#160;&#160;printf("Usage:&#160;php&#160;%s&#160;filename\n\n",&#160;$argv[0]);&#160;&#160;&#160;&#160;die;}$f&#160;=&#160;zip_open($argv[1]);while&#160;($e&#160;=&#160;zip_read($f))&#160;{&#160;&#160;&#160;&#160;$filesize&#160;=&#160;zip_entry_filesize($e);&#160;&#160;&#160;&#160;$filename&#160;=&#160;iconv('GBK',&#160;'UTF-8',&#160;zip_entry_name($e));&#160;&#160;&#160;&#160;if&#160;(!$filesize)&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mkdir($filename);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;continue;&#160;&#160;&#160;&#160;}&#160;else&#160;if&#160;(!zip_entry_open($f,&#160;$e))&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;continue;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;file_put_contents($filename,&#160;zip_entry_read($e,&#160;$filesize));&#160;&#160;&#160;&#160;echo&#160;"$filesize\t$filename\n";&#160;&#160;&#160;&#160;&#160;zip_entry_close($e);}&#160;&#160;&#160;zip_close($f);]]></description>
			<content:encoded><![CDATA[<p>从 windows 下压缩的zip包如果文件或者目录名有中文，在典型的 linux 环境（如ubuntu）和 macOS 下按照正常zip解压都会乱码。google一下搜到的答案有两种，一种是hack一下unzip的代码重新编译，还有一种是另外写一个解压的工具代替unzip。</p>
<p>其实这是一个困扰了linuxer很多年的老问题了，能搜到好多人问和答，但至少在半年前(6月份)我遇到的时候，没有让我满意的简单的解决通用的方案。</p>
<p>当时我是，遇到产品的同事给了一个做好的交互原型，输出一个zip包，而基本上公司里其它技术都是用linux或者macOS。参考了<a href="http://hi.baidu.com/ichuan/blog/item/96a6a6f290f7e85b342acc47.html" target="_blank">搜到的解决方案</a>，用 php 的 zip 扩展来解压，并转换 GBK 为 UTF-8 即可。</p>
<p>存到自己home目录下的bin里面， 比如放到 ~/bin/punzip，然后 chmod +x ~/bin/punzip，以后就可以比较自由的直接调用 punzip foo.zip 来解压了。</p>
<p>依赖了 php 的 zip 扩展，如果执行时提示“php zip extension is needed.”（比如默认macOS就没有加载zip扩展，ubuntu有），需要修改 php.ini 添加 extension=zip.so，具体按照提示中的手册页面做就好。</p>
<p><code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;解压含有文件名为gbk编码的zip包，到当前目录<br />&nbsp;*/<br /></span><span style="color: #007700">if&nbsp;(!</span><span style="color: #0000BB">extension_loaded</span><span style="color: #007700">(</span><span style="color: #DD0000">'zip'</span><span style="color: #007700">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"php&nbsp;zip&nbsp;extension&nbsp;is&nbsp;needed.&nbsp;See&nbsp;http://www.php.net/manual/en/zip.installation.php\n"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;die;<br />}<br />if&nbsp;(!isset(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Usage:&nbsp;php&nbsp;%s&nbsp;filename\n\n"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;die;<br />}<br /></span><span style="color: #0000BB">$f&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">zip_open</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br />while&nbsp;(</span><span style="color: #0000BB">$e&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">zip_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$f</span><span style="color: #007700">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$filesize&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">zip_entry_filesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$filename&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">iconv</span><span style="color: #007700">(</span><span style="color: #DD0000">'GBK'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'UTF-8'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">zip_entry_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!</span><span style="color: #0000BB">$filesize</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">mkdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(!</span><span style="color: #0000BB">zip_entry_open</span><span style="color: #007700">(</span><span style="color: #0000BB">$f</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$e</span><span style="color: #007700">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">zip_entry_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$filesize</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">"$filesize\t$filename\n"</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">zip_entry_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">);<br />}&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000BB">zip_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$f</span><span style="color: #007700">);<br /></span><br />
</span><br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/118/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>程序员的优势和劣势</title>
		<link>http://micy.cn/blog/post/103</link>
		<comments>http://micy.cn/blog/post/103#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:34:34 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[心得]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=103</guid>
		<description><![CDATA[有段著名的对话： 男：我是程序员。 女：哦，程先生，你好。 男：哈，客气了，叫我序员就好。 现实中的程先生多种多样，如果不去考虑程序员、工程师、架构师等不同的title到底有什么区别，作为通过计算机语言与机器打交道的人群，至少有很多共同的特征。 程序员比其他行业有一个天然的优势，就是自己几乎可以随心所欲的创造出工具来帮助自己，从而大大提升工作效率。这一点在许多传统行业中是完全不可能的，比如：一名建筑工程师，他如果想随心所欲地马上着手创造一把符合他手头工作的锤子，则并不太容易。这种效率提升的前提，是可以将重复手动劳动的自动化。就像一个本来要挖20米深地基的工人，忽然变出10个机器人代替他挖，而他只需要在旁边小屋透过玻璃窗眯着眼睛喝咖啡一样。所以，利用好这个优势后，优秀的程序员可以将效率提升至少一个数量级。 程序员还有一个天然的优势，他的学习成本和创造成本都比较低。首先，技术水平的提升是不依赖复杂昂贵的专有设备和密集的人员的，他需要的只是电脑和网线。其次，创造成本中，除了时间之外，材料成本完全电子化，知识和创意通过代码体现在二进制中。而更不错的事情是：创造出的东西在世界范围内都是可以重用的，可以基于大量经过他人完善测试的库来避免自己的重复劳动。所以，利用好这个优势，在于勤于动手去尝试去做，整理好可以重用的通用库，然后在需要的时候毫不吝啬地将自己的想法实现。 不过，也有劣势 程序员的世界是理想化的，不存在非逻辑的干扰因素。如果已经设计出一套完美的逻辑去做一件事，无论做多少遍，也不会出现无法处理的僵局。所以程序员希望这个世界井然有序，每个实体像系统中的各个模块一样各司其职、准确而高效地交互。而现实中，绝大多数钱能解决的问题不是问题，绝大多数技术能解决的问题也不是问题。 阮一峰在翻译《More Joel on Software》时写的blog（鉴于他的blog内容太敢说真话，如果访问不了请自己想办法），也提到了原作中的一句话： 许许多多的人选择编程，首要的原因就是，他们宁愿将自己的时间花在一个公平有序的地方，一个严格的能者上庸者下的地方，一个只要你是对的就能赢得任何争论的地方。 是。有人会在旁边冷笑，并可能说出类似 “Too Simple, Sometimes Naive” 这样的江湖名句。某种意义上，我并不是个纯粹的理想主义者，但我还是有些偏执地要说：可编程的世界，就是程序员自己构架的理想国。]]></description>
			<content:encoded><![CDATA[<p>有段著名的对话：</p>
<blockquote><p>男：我是程序员。 女：哦，程先生，你好。 男：哈，客气了，叫我序员就好。</p></blockquote>
<p>现实中的程先生多种多样，如果不去考虑程序员、工程师、架构师等不同的title到底有什么区别，作为通过计算机语言与机器打交道的人群，至少有很多共同的特征。</p>
<p>程序员比其他行业有一个天然的优势，就是自己几乎可以随心所欲的创造出工具来帮助自己，从而大大提升工作效率。这一点在许多传统行业中是完全不可能的，比如：一名建筑工程师，他如果想随心所欲地马上着手创造一把符合他手头工作的锤子，则并不太容易。这种效率提升的前提，是可以将重复手动劳动的自动化。就像一个本来要挖20米深地基的工人，忽然变出10个机器人代替他挖，而他只需要在旁边小屋透过玻璃窗眯着眼睛喝咖啡一样。所以，利用好这个优势后，优秀的程序员可以将效率提升至少一个数量级。</p>
<p>程序员还有一个天然的优势，他的学习成本和创造成本都比较低。首先，技术水平的提升是不依赖复杂昂贵的专有设备和密集的人员的，他需要的只是电脑和网线。其次，创造成本中，除了时间之外，材料成本完全电子化，知识和创意通过代码体现在二进制中。而更不错的事情是：创造出的东西在世界范围内都是可以重用的，可以基于大量经过他人完善测试的库来避免自己的重复劳动。所以，利用好这个优势，在于勤于动手去尝试去做，整理好可以重用的通用库，然后在需要的时候毫不吝啬地将自己的想法实现。</p>
<p>不过，也有劣势</p>
<p>程序员的世界是理想化的，不存在非逻辑的干扰因素。如果已经设计出一套完美的逻辑去做一件事，无论做多少遍，也不会出现无法处理的僵局。所以程序员希望这个世界井然有序，每个实体像系统中的各个模块一样各司其职、准确而高效地交互。而现实中，绝大多数钱能解决的问题不是问题，绝大多数技术能解决的问题也不是问题。</p>
<p>阮一峰在翻译《More Joel on Software》时写的<a href="http://www.ruanyifeng.com/blog/2009/10/why_i_love_programming.html">blog</a>（鉴于他的blog内容太敢说真话，如果访问不了请自己想办法），也提到了原作中的一句话：</p>
<blockquote><p>许许多多的人选择编程，首要的原因就是，他们宁愿将自己的时间花在一个公平有序的地方，一个严格的能者上庸者下的地方，一个只要你是对的就能赢得任何争论的地方。</p></blockquote>
<p>是。有人会在旁边冷笑，并可能说出类似 “Too Simple, Sometimes Naive” 这样的江湖名句。某种意义上，我并不是个纯粹的理想主义者，但我还是有些偏执地要说：可编程的世界，就是程序员自己构架的理想国。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/103/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>表演类艺术与创作类艺术</title>
		<link>http://micy.cn/blog/post/78</link>
		<comments>http://micy.cn/blog/post/78#comments</comments>
		<pubDate>Fri, 22 Jan 2010 08:23:48 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[心得]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=78</guid>
		<description><![CDATA[最近半年有些事情，让我试图去探索和理解“表演”与“创作”这两类艺术类别的共同点和差异点。 或许这对一个以用计算机语言编写程序作为职业的人来说，有些生僻。但对一个喜欢古典音乐，从5岁开始练习小提琴，业余时间参加了10年交响乐排练和演出的业余小提琴手来说，这个问题在促使我去思考学生生涯那么多 年，这门作为表演类艺术的业余爱好，到底带给了我什么，并使我擅长做什么，布擅长做什么？ 于是我先考察了艺术(Art) 的具体定义。在我理解中是一个相对广义的概念，和传统意义上的美术来说，是一个更 general 的定义。参考 wikipedia上的艺术词条如下(适当翻译成简体中文习惯)： 艺术是由所有具有智能思考能力的动物，以通过各种 形式及工具用以表达其情感与意识形态，所产生的形态泛称。 为了让事情明朗一些，我列举了一些我能想到的典型的艺术活 动，并试图用表达载体来分类。举一些例子： 文字 文学创作 剧本 作词 声音 作曲 声乐 器乐演奏 图像 摄影 绘画 平面设计 物体 时装 雕塑、雕刻 建筑 室内装潢 影像 动画制作 电影导演 电影演员 舞台 舞蹈 相声 戏剧 指挥 看完之后，我发现大部分的艺术活动，都是和“创作”紧密相关的。而只有少数是和“表演”紧密相关的，比如： 声乐 舞蹈 相声 戏剧 指挥 电影演员 器乐演奏 我将他们分为表演类的标准是，通常这类活动有一个范本，有类似观众一样的表演受众。表演者在尊重范本的基础上，融合自己的理解产生某种艺术感染力， 通过再现范本来表达给受众。比如： 一位小提琴演奏家需要理解某部作品中作曲家的意思，按照乐谱演奏作品。 电影演员需要读懂剧本，扮演一个虚拟的角色。 再看看创作类的艺术活动。我理解为：在遵循一些公认创作原则的基础上，从无到有地表达创作者希望传达地内容，并无范本可以参照。通俗的说，我觉得这类艺术需要一种 sense，需要一种没有其他参照的巧妙的表达。比如： 王小波写一部小说 贝多芬写一首钢琴奏鸣曲 凡高画一幅抽象画 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://micy.cn/blog/wp-content/uploads/2010/01/transitional_violin.jpg"><img src="http://micy.cn/blog/wp-content/uploads/2010/01/transitional_violin.jpg" alt="" title="transitional_violin" width="301" height="300" class="alignnone" /></a>最近半年有些事情，让我试图去探索和理解“表演”与“创作”这两类艺术类别的共同点和差异点。</p>
<p>或许这对一个以用计算机语言编写程序作为职业的人来说，有些生僻。但对一个喜欢古典音乐，从5岁开始练习小提琴，业余时间参加了10年交响乐排练和演出的业余小提琴手来说，这个问题在促使我去思考学生生涯那么多 年，这门作为表演类艺术的业余爱好，到底带给了我什么，并使我擅长做什么，布擅长做什么？</p>
<p>于是我先考察了艺术(Art) 的具体定义。在我理解中是一个相对广义的概念，和传统意义上的美术来说，是一个更 general 的定义。参考 wikipedia上的<a title="艺术" href="http://zh.wikipedia.org/wiki/%E8%89%BA%E6%9C%AF" target="_blank">艺术词条</a>如下(适当翻译成简体中文习惯)：</p>
<blockquote><p>艺术是由所有具有智能思考能力的动物，以通过各种 形式及工具用以表达其情感与意识形态，所产生的形态泛称。</p></blockquote>
<p>为了让事情明朗一些，我列举了一些我能想到的典型的艺术活 动，并试图用表达载体来分类。举一些例子：</p>
<ul>
<li>文字
<ul>
<li>文学创作</li>
<li>剧本</li>
<li>作词</li>
</ul>
</li>
<li>声音
<ul>
<li>作曲</li>
<li>声乐</li>
<li>器乐演奏</li>
</ul>
</li>
<li>图像
<ul>
<li>摄影</li>
<li>绘画</li>
<li>平面设计</li>
</ul>
</li>
<li>物体
<ul>
<li>时装</li>
<li>雕塑、雕刻</li>
<li>建筑</li>
<li>室内装潢</li>
</ul>
</li>
<li>影像
<ul>
<li>动画制作</li>
<li>电影导演</li>
<li>电影演员</li>
</ul>
</li>
<li>舞台
<ul>
<li>舞蹈</li>
<li>相声</li>
<li>戏剧</li>
<li>指挥</li>
</ul>
</li>
</ul>
<p>看完之后，我发现大部分的艺术活动，都是和“创作”紧密相关的。而只有少数是和“表演”紧密相关的，比如：</p>
<ul>
<li>声乐</li>
<li>舞蹈</li>
<li>相声</li>
<li>戏剧</li>
<li>指挥</li>
<li>电影演员</li>
<li>器乐演奏</li>
</ul>
<p>我将他们分为表演类的标准是，通常这类活动有一个范本，有类似观众一样的表演受众。表演者在尊重范本的基础上，融合自己的理解产生某种艺术感染力， 通过再现范本来表达给受众。比如：</p>
<ul>
<li>一位小提琴演奏家需要理解某部作品中作曲家的意思，按照乐谱演奏作品。</li>
<li>电影演员需要读懂剧本，扮演一个虚拟的角色。</li>
</ul>
<p>再看看创作类的艺术活动。我理解为：在遵循一些公认创作原则的基础上，从无到有地表达创作者希望传达地内容，并无范本可以参照。通俗的说，我觉得这类艺术需要一种 sense，需要一种没有其他参照的巧妙的表达。比如：</p>
<ul>
<li>王小波写一部小说</li>
<li>贝多芬写一首钢琴奏鸣曲</li>
<li>凡高画一幅抽象画</li>
<li>乔布斯和他的团队带给大家 iPhone 出色的工业设计和用户界面设计</li>
</ul>
<p>好吧，现在我的问题是：</p>
<ul>
<li>一个从事表演类艺术的人，转而从事另一种表演类艺术时，是否更加容易？</li>
<li>而如果转而从事另一种创作类艺术时，是否变的困难？</li>
<li>或者本身如此分类和思考就不合适？</li>
</ul>
<p>思考这个问题的同时，我也对在比较 general 层次上艺术与设计的区别，也产生了兴趣。有机会可以继续写一写。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/78/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NASDAQ:BIDU</title>
		<link>http://micy.cn/blog/post/85</link>
		<comments>http://micy.cn/blog/post/85#comments</comments>
		<pubDate>Thu, 21 Jan 2010 06:56:45 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=85</guid>
		<description><![CDATA[iPod Touch上看股价走势很方便，事实上前几天这是我睡觉前的娱乐之一。因为转圈圈的loading图标消失前，你怎么也不会知道今天的走势是什么样子的。 最近两位搜索引擎老大的故事被大家说烂了，我还是补个图吧。这是百度同学 (NASDAQ:BIDU) 最近某段时间的股价走势 图上一共5天，第一天是百度的域名DNS事故导致跌破400刀。第二天是谷歌同学的声明。最后一天是谷歌同学的第二次声明。 第一天声明的时候，我还挺想去logo附近看看来着，走路十分钟就能到，可是天太冷了我退缩了。:-)]]></description>
			<content:encoded><![CDATA[<p>iPod Touch上看股价走势很方便，事实上前几天这是我睡觉前的娱乐之一。因为转圈圈的loading图标消失前，你怎么也不会知道今天的走势是什么样子的。</p>
<p>最近两位搜索引擎老大的故事被大家说烂了，我还是补个图吧。这是百度同学 (<a href="http://finance.yahoo.com/q/bc?s=BIDU" target="_blank">NASDAQ:BIDU</a>) 最近某段时间的股价走势</p>
<p><a href="http://micy.cn/blog/wp-content/uploads/2010/01/w.png"><img src="http://micy.cn/blog/wp-content/uploads/2010/01/w.png" alt="NASDAQ:BIDU" title="w" width="512" height="288" class="aligncenter size-full wp-image-86" /></a></p>
<p>图上一共5天，第一天是百度的域名DNS事故导致跌破400刀。第二天是谷歌同学的声明。最后一天是谷歌同学的第二次声明。</p>
<p>第一天声明的时候，我还挺想去logo附近看看来着，走路十分钟就能到，可是天太冷了我退缩了。:-) </p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/85/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>为wikipedia捐助</title>
		<link>http://micy.cn/blog/post/80</link>
		<comments>http://micy.cn/blog/post/80#comments</comments>
		<pubDate>Mon, 28 Dec 2009 11:51:56 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=80</guid>
		<description><![CDATA[踩着2009年的尾巴，跑到wikipedia的捐助页面，用信用卡刷了$20。这个想法由来已久，几个月前注意到开始这个捐助项目时，这个总金额750万美元的项目募集了不到三分之一，当时就动了捐助的念头。最近看到时已经到660万美元了，在这个不是太顺利的一年快要走完的时候，我希望完成这个心愿。 说到捐助的原因，其实很直接。维基百科是让我觉得对我帮助最大的几个网站之一。基于非盈利非商业的前提下，维持服务器、机房等费用的来源只有捐助。所以捐助一笔也是我应该做的回报方式。同时，维基百科在促进全世界信息知识的流通和共享方面发挥了不可替代的作用，而促进信息的流动分享，也是我一直以来的理想。 这个链接是维基百科创始人关于捐助的公开信。如果平日因为维基百科而受益，并且有意贡献，或者只是对这个事情感兴趣，请猛击： http://wikimediafoundation.org/wiki/Appeal2/zh-hant 捐助的支付方面，可以用信用卡 或者 Paypal。国内普通的双币信用卡，支付美元即可（我没有试过支付港币），我用的招行的。 ps. 支付的时候有一个页面可能是因为墙或者碰巧其他什么网络故障，结果页访问不到。于是我再提交了一次，最终捐助了两份$20（这倒不是个杯具）。大家捐助时遇到结果页无法访问的话，可以先等一等信用卡支付成功的短信，我这里大概延迟几分钟收到。]]></description>
			<content:encoded><![CDATA[<p><img alt="Wikimedia Foundation Logo" src="http://upload.wikimedia.org/wikipedia/foundation/9/9a/Wikimediafoundation-logo.png" title="Wikimedia Foundation" class="alignnone" />踩着2009年的尾巴，跑到wikipedia的捐助页面，用信用卡刷了$20。这个想法由来已久，几个月前注意到开始这个捐助项目时，这个总金额750万美元的项目募集了不到三分之一，当时就动了捐助的念头。最近看到时已经到660万美元了，在这个不是太顺利的一年快要走完的时候，我希望完成这个心愿。</p>
<p>说到捐助的原因，其实很直接。维基百科是让我觉得对我帮助最大的几个网站之一。基于非盈利非商业的前提下，维持服务器、机房等费用的来源只有捐助。所以捐助一笔也是我应该做的回报方式。同时，维基百科在促进全世界信息知识的流通和共享方面发挥了不可替代的作用，而促进信息的流动分享，也是我一直以来的理想。</p>
<p>这个链接是维基百科创始人关于捐助的公开信。如果平日因为维基百科而受益，并且有意贡献，或者只是对这个事情感兴趣，请猛击：<br />
<a href="http://wikimediafoundation.org/wiki/Appeal2/zh-hant">http://wikimediafoundation.org/wiki/Appeal2/zh-hant</a></p>
<p>捐助的支付方面，可以用信用卡 或者 Paypal。国内普通的双币信用卡，支付美元即可（我没有试过支付港币），我用的招行的。</p>
<p>ps. 支付的时候有一个页面可能是因为墙或者碰巧其他什么网络故障，结果页访问不到。于是我再提交了一次，最终捐助了两份$20（这倒不是个杯具）。大家捐助时遇到结果页无法访问的话，可以先等一等信用卡支付成功的短信，我这里大概延迟几分钟收到。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/80/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Thrift &#8211; 开源多语言RPC框架</title>
		<link>http://micy.cn/blog/post/35</link>
		<comments>http://micy.cn/blog/post/35#comments</comments>
		<pubDate>Sun, 27 Sep 2009 10:16:36 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=35</guid>
		<description><![CDATA[RPC (wiki) 在大规模的互联网应用后端技术中非常常见，我们熟悉的搜索引擎、门户、网游服务器等，后端实现中都有涉及。主要原理是基于内网 socket 解决多机多模块之间的数据通讯问题。或者可以简单理解为，将单机的进程间通讯 (IPC) (wiki)，扩展到多机通讯，解决可扩展性问题。 Thrift 是由 Facebook 开源的一个 RPC 框架，现在已经挂在 apache.org 下了。主要的几个好处： 支持非常多语言，包括在 WEB 开发中很常用的 PHP，以及最重要的 C++/Python/Java 等 WEB后端常用语言，当然，还包括很 cool 的 Ruby、Erlang。 完整的 RPC 框架实现，用脚本生成通讯相关的框架代码，开发者只需要集中精力处理好业务逻辑。比如搭建一个 Hello World Service 只需要几分钟。 拥有被 Facebook、Last.fm 等不少大规模互联网应用验证过的性能和可用性。 在 PRC 通讯方面，其实已经成熟多年。比如百度内部是自己定制的二进制协议，比如C++下使用较多的 ACE 框架。而 Thrift 在最近两年脱颖而出，也的确和其跨语言、方便的代码生成框架、以及适于目前高速发展的互联网应用而出名。另外许多人拿 Thrift 和 google 推动的 Protocol Buffer 比较，有不少文章可以参考。 国内从目前的状况看，Thrift 相关的讨论和应用还不太多，这也是我想写出来推荐的原因。 一方面国内的寡头大型互联网企业多数使用自己的协议，没有动力开源，也没有引入的需求。一方面小型互联网公司虽然不少，但规模较大的还很少，大部分公司的业务量，还不太需要 RPC 这类多模块多机的架构去支撑。 另一方面，Thrift [...]]]></description>
			<content:encoded><![CDATA[<p>RPC <a href="http://en.wikipedia.org/wiki/Remote_procedure_call" target="_blank">(wiki)</a> 在大规模的互联网应用后端技术中非常常见，我们熟悉的搜索引擎、门户、网游服务器等，后端实现中都有涉及。主要原理是基于内网 socket 解决多机多模块之间的数据通讯问题。或者可以简单理解为，将单机的进程间通讯 (<abbr title="Inter Process Communication">IPC</abbr>) <a href="http://en.wikipedia.org/wiki/Inter-process_communication" target="_blank">(wiki)</a>，扩展到多机通讯，解决可扩展性问题。</p>
<p><a href="http://incubator.apache.org/thrift/" target="_blank">Thrift</a> 是由 Facebook 开源的一个 <abbr title="Remote Procedure Call">RPC</abbr> 框架，现在已经挂在 apache.org 下了。主要的几个好处：</p>
<ol>
<li> 支持非常多语言，包括在 WEB 开发中很常用的 PHP，以及最重要的 C++/Python/Java 等 WEB后端常用语言，当然，还包括很 cool 的 Ruby、Erlang。</li>
<li> 完整的 RPC 框架实现，用脚本生成通讯相关的框架代码，开发者只需要集中精力处理好业务逻辑。比如搭建一个 Hello World Service 只需要几分钟。</li>
<li> 拥有被 Facebook、Last.fm 等不少大规模互联网应用验证过的性能和可用性。</li>
</ol>
<p>在 PRC 通讯方面，其实已经成熟多年。比如百度内部是自己定制的二进制协议，比如C++下使用较多的 ACE 框架。而 Thrift 在最近两年脱颖而出，也的确和其跨语言、方便的代码生成框架、以及适于目前高速发展的互联网应用而出名。另外许多人拿 Thrift 和 google 推动的 Protocol Buffer 比较，<a href="http://www.google.com/search?q=thrift+protocol+buffer+comparison" target="_blank">有不少文章可以参考</a>。</p>
<p>国内从目前的状况看，Thrift 相关的讨论和应用还不太多，这也是我想写出来推荐的原因。</p>
<p>一方面国内的寡头大型互联网企业多数使用自己的协议，没有动力开源，也没有引入的需求。一方面小型互联网公司虽然不少，但规模较大的还很少，大部分公司的业务量，还不太需要 RPC 这类多模块多机的架构去支撑。</p>
<p>另一方面，Thrift 的确系出名门，它的代码实现的很优秀，逻辑层次清楚，易于定制扩展。框架代码生成方便，节省很多通讯方面的开发和调试时间。</p>
<p>最近和几位同事一起，做了对 Thrift 协议传输方面的性能测试和调优，结果还是不错的，用起来也很方便。后面有机会可以把测试过程，以及遇到的一些问题拿出来分享。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/35/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>单机启动多个MySQL Server</title>
		<link>http://micy.cn/blog/post/37</link>
		<comments>http://micy.cn/blog/post/37#comments</comments>
		<pubDate>Wed, 23 Sep 2009 08:00:06 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=37</guid>
		<description><![CDATA[有时候我们需要在一台服务器启动多个 MySql Server。有一个方法是使用官方的多server管理工具 mysqld_multi ，适合多server运行时的管理，有专用的配置项方便日常管理维护。或者如果不想用 mysqld_multi，我们看看幕后都做了什么，简单的自己动手配置一下。 这篇来讲讲怎么通过自己配置，启动多个mysqld。 无论是发行版包管理工具安装的，还是自己编译安装的，都会默认读取 my.cnf 文件，位置一般是 /etc/my.cnf 、$MYSQL_HOME/my.cnf 等。发行版包管理工具一般只会安装在固定的位置，不方便同时装两个 mysql server。自己编译的话，也不方便临时再 install 到其他位置和读取另外的 my.cnf 文件。 参考 MySQL 官方手册的内容，使用现有的mysql系列可执行程序，在启动server和client时，指定 --defaults-file 参数，即刻达到效果。 1、编辑一个新的 my.cnf 文件用于新的server sudo cp /etc/my.cnf /etc/my.2.cnf sudo vim /etc/my.2.cnf 修改配置，防止和原有配置冲突。主要需要修改的有： 端口(port)、socket 文件路径 (socket)、数据文件路径 (datadir)； 如果用到 InnoDB（一般都会用到），则要修改 InnoDB 数据文件路径 (innodb_data_home_dir)、InnoDB 日志文件路径 (innodb_log_group_home_dir)； 如果用到replication时，还要修改server的唯一id (server-id)、下载到master的binlog的存放路径 (relay-log)等。其他配置修改，则根据具体情况自行调整。 这里注意 datadir 和 InnoDB 的几个dir，根据情况新建目录，并给 mysql [...]]]></description>
			<content:encoded><![CDATA[<p>有时候我们需要在一台服务器启动多个 MySql Server。有一个方法是使用官方的多server管理工具 <a href="http://dev.mysql.com/doc/refman/5.0/en/mysqld-multi.html" target="_blank">mysqld_multi</a> ，适合多server运行时的管理，有专用的配置项方便日常管理维护。或者如果不想用 mysqld_multi，我们看看幕后都做了什么，简单的自己动手配置一下。</p>
<p>这篇来讲讲怎么通过自己配置，启动多个mysqld。</p>
<p>无论是发行版包管理工具安装的，还是自己编译安装的，都会默认读取 my.cnf 文件，位置一般是 /etc/my.cnf 、$MYSQL_HOME/my.cnf 等。发行版包管理工具一般只会安装在固定的位置，不方便同时装两个 mysql server。自己编译的话，也不方便临时再 install 到其他位置和读取另外的 my.cnf 文件。</p>
<p>参考 <a href="http://dev.mysql.com/doc/refman/5.0/en/option-files.html" target="_blank">MySQL 官方手册的内容</a>，使用现有的mysql系列可执行程序，在启动server和client时，指定 <code>--defaults-file</code> 参数，即刻达到效果。</p>
<p><strong>1、编辑一个新的 my.cnf 文件用于新的server</strong></p>
<blockquote><p><code>sudo cp /etc/my.cnf /etc/my.2.cnf<br />
sudo vim /etc/my.2.cnf</code></p></blockquote>
<p>修改配置，防止和原有配置冲突。主要需要修改的有：</p>
<ul>
<li>端口(port)、socket 文件路径 (socket)、数据文件路径 (datadir)；</li>
<li>如果用到 InnoDB（一般都会用到），则要修改 InnoDB 数据文件路径 (innodb_data_home_dir)、InnoDB 日志文件路径 (innodb_log_group_home_dir)；</li>
<li>如果用到replication时，还要修改server的唯一id (server-id)、下载到master的binlog的存放路径 (relay-log)等。其他配置修改，则根据具体情况自行调整。</li>
</ul>
<p>这里注意 datadir 和 InnoDB 的几个dir，根据情况新建目录，并给 mysql 用户读写权限，否则无法启动正常。另外<strong>特别注意</strong>，需要确保这些路径不和 product 环境下对应配置的路径有冲突，除非你的确希望这样做，这可能会损坏对应路径下的数据文件。</p>
<p><strong>2、初始化DB</strong></p>
<blockquote><p><code>sudo /usr/bin/mysql_install_db --defaults-file=/etc/my.2.cnf<br />
sudo cd $datadir<br />
sudo chown mysql:mysql . -R</code></p></blockquote>
<p>这里 $datadir 是新配置的 my.cnf 的 datadir 项所配置的路径。注意需要对文件权限变更为 mysql，否则启动server时会出现文件无权限等错误。</p>
<p><strong>3、启动 mysqld</strong></p>
<blockquote><p><code>/usr/bin/mysqld_safe --defaults-file=/etc/my.2.cnf &amp;</code></p></blockquote>
<p>查看 $datadir/$host.err 观察是否启动成功。</p>
<p><strong>4、启动 client</strong></p>
<blockquote><p><code>/usr/bin/mysql --defaults-file=/etc/my.2.cnf -hlocalhost -uroot</code></p></blockquote>
<p>这些命令为了方便使用，可以写到shell脚本里。上述步骤只叙述了标题相关内容，在权限、性能等无关方面没有特别说明。另外注意 <code>--defaults-file</code> 的 <code>defaults</code> 有个 s，之前我自己写漏了，整个参数被忽律掉，总报错。:-) </ul>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/37/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linode的VPS主机</title>
		<link>http://micy.cn/blog/post/16</link>
		<comments>http://micy.cn/blog/post/16#comments</comments>
		<pubDate>Sat, 05 Sep 2009 09:44:39 +0000</pubDate>
		<dc:creator>Qin Yafei</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://micy.cn/blog/?p=16</guid>
		<description><![CDATA[这个blog是架在 VPS(wiki)主机商 linode.com那里的。 VPS基于虚拟机，相当于提供了完整的root ssh访问权限，和操作一台普通的Linux服务器没有区别，适合和我一样愿意折腾的同学们。 当初购买价格是360MB内存，$19.99/month。和朋友一起买的，一个人买有点贵。初步使用感觉主要还是内存有些不够用，尤其是平时用主流Web Server习惯了，很少考虑内存问题。但实际观察了一下，一个apache进程启动后占5MB，一旦有一次访问，加载了mod_php之后就跳到二三十MB。apache自己prefork几个进程，就吃掉一大块内存。至于硬盘和流量，暂时还不是瓶颈。 目前有口碑的两家VPS主机商是 linode.com 和 slicehost.com，当时买的时候比较了一下，slicehost单价更贵，于是选了linode。]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://www.linode.com/images/linode_logo_gray.png" title="linode.com logo" class="alignnone" width="288" height="65" />这个blog是架在 VPS(<a href="http://en.wikipedia.org/wiki/Virtual_private_server">wiki</a>)主机商 <a href="http://www.linode.com/">linode.com</a>那里的。</p>
<p>VPS基于虚拟机，相当于提供了完整的root ssh访问权限，和操作一台普通的Linux服务器没有区别，适合和我一样愿意折腾的同学们。</p>
<p>当初购买价格是360MB内存，$19.99/month。和朋友一起买的，一个人买有点贵。初步使用感觉主要还是内存有些不够用，尤其是平时用主流Web Server习惯了，很少考虑内存问题。但实际观察了一下，一个apache进程启动后占5MB，一旦有一次访问，加载了mod_php之后就跳到二三十MB。apache自己prefork几个进程，就吃掉一大块内存。至于硬盘和流量，暂时还不是瓶颈。</p>
<p>目前有口碑的两家VPS主机商是 <a href="http://www.linode.com">linode.com</a> 和 <a href="http://www.slicehost.com/">slicehost.com</a>，当时买的时候比较了一下，slicehost单价更贵，于是选了linode。</p>
]]></content:encoded>
			<wfw:commentRss>http://micy.cn/blog/post/16/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

