<?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>YY-zone</title>
	<atom:link href="http://blog.tunfan.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.tunfan.com</link>
	<description>yyZONE.记录游戏，记录生活，我们老了</description>
	<lastBuildDate>Tue, 31 Jan 2012 08:26:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>mysql性能监控指标</title>
		<link>http://blog.tunfan.com/fun/357.html</link>
		<comments>http://blog.tunfan.com/fun/357.html#comments</comments>
		<pubDate>Tue, 31 Jan 2012 08:26:55 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[趣闻]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=357</guid>
		<description><![CDATA[1.系统mysql的进程数 ps -ef &#124; grep “mysql” &#124; grep -v “grep” &#124; wc –l 2.Slave_running mysql &#62; show status like &#8216;Slave_running&#8217;; 如果系统有一个从复制服务器，这个值指明了从服务器的健康度 3.Threads_connected mysql &#62; show status like &#8216;Threads_connected&#8217;; 当前客户端已连接的数量。这个值会少于预设的值，但你也能监视到这个值较大，这可保证客户端是处在活跃状态。 4.Threads_running mysql &#62; show status like &#8216;Threads_running&#8217;; 如果数据库超负荷了，你将会得到一个正在（查询的语句持续）增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时， 要同时监视其他的一些值。 &#160; 5.Aborted_clients mysql &#62; show status like &#8216;Aborted_clients&#8217;; 客户端被异常中断的数值，即连接到mysql服务器的客户端没有正常地断开或关闭。对于一些应用程序是没有影响的，但对于另一些应用程序可能你要跟踪该值，因为异常中断连接可能表明了一些应用程序有问题。 6.Questions mysql&#62; show status like &#8216;Questions&#8217;; 每秒钟获得的查询数量，也可以是全部查询的数量，根据你输入不同的命令会得到你想要的不同的值。 7.Handler_* [...]]]></description>
			<content:encoded><![CDATA[<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_21752352">
<div id="blog_text">
<p><strong>1.</strong><strong>系统</strong><strong>mysql</strong><strong>的进程数</strong><strong></strong></p>
<p><strong>ps -ef | grep “mysql” | grep -v “grep” | wc –l</strong></p>
<p><strong>2.Slave_running</strong></p>
<p><strong>mysql &gt; show status like &#8216;Slave_running&#8217;;</strong></p>
<p>如果系统有一个从复制服务器，这个值指明了从服务器的健康度</p>
<p><strong>3.Threads_connected</strong></p>
<p><strong>mysql &gt; show status like &#8216;Threads_connected&#8217;;</strong></p>
<p>当前客户端已连接的数量。这个值会少于预设的值，但你也能监视到这个值较大，这可保证客户端是处在活跃状态。</p>
<p><strong>4.Threads_running</strong></p>
<p><strong>mysql &gt; show status like &#8216;Threads_running&#8217;;</strong></p>
<p>如果数据库超负荷了，你将会得到一个正在（查询的语句持续）增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时， 要同时监视其他的一些值。</p>
<p>&nbsp;</p>
<p><strong>5.Aborted_clients</strong></p>
<p><strong>mysql &gt; show status like &#8216;Aborted_clients&#8217;;</strong></p>
<p>客户端被异常中断的数值，即连接到mysql服务器的客户端没有正常地断开或关闭。对于一些应用程序是没有影响的，但对于另一些应用程序可能你要跟踪该值，因为异常中断连接可能表明了一些应用程序有问题。</p>
<p><strong>6.Questions</strong></p>
<p><strong>mysql&gt; show status like &#8216;Questions&#8217;;</strong></p>
<p>每秒钟获得的查询数量，也可以是全部查询的数量，根据你输入不同的命令会得到你想要的不同的值。</p>
<p><strong>7.Handler_*</strong></p>
<p><strong>mysql&gt; show status like &#8216;Handler_%&#8217;;</strong></p>
<p>如果你想监视底层（low-level）数据库负载，这些值是值得去跟踪的。</p>
<p>如果Handler_read_rnd_next值相对于你认为是正常值相差悬殊，可能会告诉你需要优化或索引出问题了。Handler_rollback表明事务被回滚的查询数量。你可能想调查一下原因。</p>
<p><strong>8.Opened_tables</strong></p>
<p><strong>mysql&gt; show status like &#8216;Opened_tables&#8217;;</strong></p>
<p>表缓存没有命中的数量。如果该值很大，你可能需要增加table_cache的数值。典型地，你可能想要这个值每秒打开的表数量少于1或2。</p>
<p><strong>9.Select_full_join</strong></p>
<p><strong>mysql&gt; show status like &#8216;Select_full_join&#8217;;</strong></p>
<p>没有主键（key）联合（Join）的执行。该值可能是零。这是捕获开发错误的好方法，因为一些这样的查询可能降低系统的性能。</p>
<p><strong>10.Select_scan</strong></p>
<p><strong>mysql&gt; show status like &#8216;Select_scan&#8217;;</strong></p>
<p>执行全表搜索查询的数量。在某些情况下是没问题的，但占总查询数量该比值应该是常量（即Select_scan/总查询数量商应该是常数）。如果你发现该值持续增长，说明需要优化，缺乏必要的索引或其他问题。</p>
<p><strong>11.Slow_queries</strong></p>
<p><strong>mysql&gt; show status like &#8216;Slow_queries&#8217;;</strong></p>
<p>超过该值（&#8211;long-query-time）的查询数量，或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长，表明系统有性能问题。</p>
<p><strong>12.Threads_created</strong></p>
<p><strong>mysql&gt; show status like &#8216;Threads_created&#8217;;</strong></p>
<p>该值应该是低的。较高的值可能意味着你需要增加thread_cache的数值，或你遇到了持续增加的连接，表明了潜在的问题。</p>
<p><strong>13.</strong><strong>客户端连接进程数</strong><strong></strong></p>
<p><strong>shell&gt; mysqladmin processlist</strong></p>
<p><strong>mysql&gt; show processlist;</strong></p>
<p>你可以通过使用其他的统计信息得到已连接线程数量和正在运行线程的数量，检查正在运行的查询花了多长时间是一个好主意。如果有一些长时间的查询，管理员可以被通知。你可能也想了解多少个查询是在”Locked”的状态—&#8212;该值作为正在运行的查询不被计算在内而是作为非活跃的。一个用户正在等待一个数据库响应。</p>
<p><strong>14.innodb</strong><strong>状态</strong><strong></strong></p>
<p><strong>mysql&gt; show innodb status;</strong></p>
<p>该语句产生很多信息，从中你可以得到你感兴趣的。首先你要检查的就是“从最近的XX秒计算出来的每秒的平均负载”。</p>
<p><strong>(1)Pending normal aio reads: </strong>该值是innodb io请求查询的大小（size）。如果该值大到超过了10—20，你可能有一些瓶颈。</p>
<p><strong>(2)reads/s, avg bytes/read, writes/s, fsyncs/s:</strong>这些值是io统计。对于reads/writes大值意味着io子系统正在被装载。适当的值取决于你系统的配置。</p>
<p><strong>(3)Buffer pool hit rate:</strong>这个命中率非常依赖于你的应用程序。当你觉得有问题时请检查你的命中率</p>
<p><strong>(4)inserts/s, updates/s, deletes/s, reads/s:</strong>有一些Innodb的底层操作。你可以用这些值检查你的负载情况查看是否是期待的数值范围。</p>
<p><strong>15.</strong><strong>主机性能状态</strong><strong></strong></p>
<p><strong>shell&gt; uptime</strong></p>
<p><strong>16.CPU</strong><strong>使用率</strong><strong></strong></p>
<p><strong>shell&gt; top</strong></p>
<p><strong>shell&gt; vmstat</strong></p>
<p><strong>17.</strong><strong>磁盘</strong><strong>IO</strong></p>
<p><strong>shell&gt; vmstat</strong></p>
<p><strong>shell&gt; iostat</strong></p>
<p><strong>18.swap</strong><strong>进出量</strong><strong>(</strong><strong>内存</strong><strong>)</strong></p>
<p><strong>shell&gt; free</strong></p>
<p><strong>19.MySQL</strong><strong>错误日志</strong><strong></strong></p>
<p>在服务器正常完成初始化后，什么都不会写到错误日志中，因此任何在该日志中的信息都要引起管理员的注意。<br />
<strong>20.InnoDB</strong><strong>表空间信息</strong></p>
<p>InnoDB仅有的危险情况就是表空间填满&#8212;-日志不会填满。检查的最好方式就是：show table status;你可以用任何InnoDB表来监视InnoDB表的剩余空间。</p>
<p><strong>21.QPS</strong><strong>每秒</strong><strong>Query</strong><strong>量</strong><strong></strong></p>
<p>QPS = Questions(or Queries) / seconds</p>
<p><strong>mysql &gt; show /* global */ status like &#8216;Question&#8217;;</strong></p>
<p><strong>22.TPS(</strong><strong>每秒事务量</strong><strong>)</strong></p>
<p>TPS = (Com_commit + Com_rollback) / seconds</p>
<p><strong>mysql &gt; show status like &#8216;Com_commit&#8217;;</strong></p>
<p><strong>mysql &gt; show status like &#8216;Com_rollback&#8217;;</strong></p>
<p><strong>23.key Buffer </strong><strong>命中率</strong><strong></strong></p>
<p>key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%</p>
<p>key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%</p>
<p><strong>mysql&gt; show status like &#8216;Key%&#8217;;</strong></p>
<p><strong>24.InnoDB Buffer</strong><strong>命中率</strong><strong></strong></p>
<p>Innodb_buffer_read_hits = (1 &#8211; innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%</p>
<p><strong>mysql&gt; show status like &#8216;innodb_buffer_pool_read%&#8217;;</strong></p>
<p><strong>25.Query Cache</strong><strong>命中率</strong><strong></strong></p>
<p>Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;</p>
<p><strong>mysql&gt; show status like &#8216;Qcache%&#8217;;</strong></p>
<p><strong>26.Table Cache</strong><strong>状态量</strong><strong></strong></p>
<p><strong>mysql&gt; show status like &#8216;open%&#8217;;</strong></p>
<p><strong>27.Thread Cache </strong><strong>命中率</strong><strong></strong></p>
<p>Thread_cache_hits = (1 &#8211; Threads_created / connections ) * 100%</p>
<p><strong>mysql&gt; show status like &#8216;Thread%&#8217;;</strong></p>
<p><strong>mysql&gt; show status like &#8216;Connections&#8217;;</strong></p>
<p><strong>28.</strong><strong>锁定状态</strong><strong></strong></p>
<p><strong>mysql&gt; show status like &#8216;%lock%&#8217;;</strong></p>
<p><strong>29.</strong><strong>复制延时量</strong><strong></strong></p>
<p><strong>mysql &gt; show slave status</strong></p>
<p><strong>30.Tmp Table</strong><strong>状况</strong><strong>(</strong><strong>临时表状况</strong><strong>)</strong></p>
<p><strong>mysql &gt; show status like &#8216;Create_tmp%&#8217;;</strong></p>
<p><strong>31.Binlog Cache</strong><strong>使用状况</strong><strong></strong></p>
<p><strong>mysql &gt; show status like &#8216;Binlog_cache%&#8217;;</strong></p>
<p><strong>32.Innodb_log_waits</strong><strong>量</strong><strong></strong></p>
<p><strong>mysql &gt; show status like &#8216;innodb_log_waits&#8217;;</strong></p>
</div>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/fun/357.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我心目中的编程高手(转载)</title>
		<link>http://blog.tunfan.com/fun/355.html</link>
		<comments>http://blog.tunfan.com/fun/355.html#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:31:53 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[趣闻]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=355</guid>
		<description><![CDATA[ Bill Joy  John Carmack  David Cutler  Donald E. Knuth  Ken Thompson  Rob Pike Rob Pike  Dennis M. Ritchie  Edsger Wybe Dijkstra  Anders Hejlsberg 引言 不管这篇文章是不是我写的. 但我看了以后感到很震撼,产生了共鸣.因此摘录如下. &#8211; Bill Joy MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, and why?”。我觉得挺有意思的，也来凑个热闹。排名不分先后。 Bill Joy Bill Joy, 前任Sun的首席科学家，当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然，Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统，就在三天里写了个自己的Unix, 也就是BSD的前身。当然是传说了，但足见他的功力。另一个传说是，1980年初的时候，DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了，拒绝把BBNTCP/IP加入BSD，因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了，端的是一箭封喉，很快就写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IPStack，谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在，还是相当散漫的哈)。只见BBN问：你怎么写出来的？而B伯伯答：简单，你读协议，然后编程就行了。最令偶晕倒的是，B伯伯硕士毕业后决定到工业界发展，于是就到了当时只有一间办公室的Sun, 然后他就把Sparc设计出来乐。。。象这种软硬通吃的牛人，想不佩服都不行的说。据Bill Joy的同事说，一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处，B伯伯发言，直切要害，提出漂亮的构想，让同事们彻底崩溃。对了，他还是Java Spec和JINI的主要作者之一。 &#160; [...]]]></description>
			<content:encoded><![CDATA[<dl>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-1">Bill Joy</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-2">John Carmack</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-3">David Cutler</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-4">Donald E. Knuth</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-5">Ken Thompson</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-6">Rob Pike Rob Pike</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-7">Dennis M. Ritchie</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-8">Edsger Wybe Dijkstra</a></dt>
<dt> <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/HeroInComputer.html#sec-9">Anders Hejlsberg</a></dt>
</dl>
<p><strong>引言</strong><br />
不管这篇文章是不是我写的. 但我看了以后感到很震撼,产生了共鸣.因此摘录如下.</p>
<p>&#8211; Bill Joy MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, and why?”。我觉得挺有意思的，也来凑个热闹。排名不分先后。</p>
<h2>Bill Joy</h2>
<p>Bill Joy, 前任Sun的首席科学家，当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然，Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统，就在三天里写了个自己的Unix, 也就是BSD的前身。当然是传说了，但足见他的功力。另一个传说是，1980年初的时候，DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了，拒绝把BBNTCP/IP加入BSD，因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了，端的是一箭封喉，很快就写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IPStack，谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在，还是相当散漫的哈)。只见BBN问：你怎么写出来的？而B伯伯答：简单，你读协议，然后编程就行了。最令偶晕倒的是，B伯伯硕士毕业后决定到工业界发展，于是就到了当时只有一间办公室的Sun, 然后他就把Sparc设计出来乐。。。象这种软硬通吃的牛人，想不佩服都不行的说。据Bill Joy的同事说，一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处，B伯伯发言，直切要害，提出漂亮的构想，让同事们彻底崩溃。对了，他还是Java Spec和JINI的主要作者之一。</p>
<p>&nbsp;</p>
<h2>John Carmack</h2>
<p>John Carmack，id Software的founder和Lead Programmer。上个月和一个搞图形的师兄聊天，他竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人惊叹一番的时候，J哥哥就推出了石破天惊的Castle Wolfstein, 然后再接再励，doom, doomII, Quake&#8230;每次都把3-D技术推到极致。J哥哥的简历上说自己的专长是”Exhaust 3-D technology”，真是牛人之言不我欺的说。做J哥哥这样的人是很幸福的，因为各大图形卡厂家一有了新产品就要向他“进贡” ，不然如果他的游戏不支持哪种卡，哪种卡基本就会夭折乐。当初MS的Direct3D也得听取他的意见，修改了不少API。当然，J哥哥在结婚前十数年如一日地每天编程14小时以上，也是偶们凡人望尘莫及的。对了，J哥哥高中肆业(？)，可以说是自学成才。不过呢，谁要用这个例子来为自己学习不好辩护，就大错特错了。那 Leonardo Da Vinci还是自学成才呢(人是私生子，不能上学)。普通人和天才还是有区别的。对了，其实偶们叫“达分奇”是相当不对的，因为Vinci是地名，而Da Vinci就是从Vinci来的人的意思。换句话说，Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da Vinci”就不知所谓乐。嗯，扯远了，打住。 More about Carmack <a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/JohnCarmack.html">Here</a></p>
<h2>David Cutler</h2>
<p>David Cutler，VMS和Windows NT的首席设计师，去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来，然后说：“who can&#8217;t write an OS in a week?”，也是牛气冲天的说。顺便说一句，D爷爷到NT3.5时，管理1500名开发员，自己还兼做设计和编程，不改coder本色啊。D爷爷天生脾气火爆，和人争论时喜欢双手猛击桌子以壮声势。:-) 日常交谈F-word不离口。他面试秘书时必问：”what do you think of the word &#8216;****&#8217;?” ，让无数美女刹羽而归。终于有一天，一个同样火爆的女面对这个问题脱口而出：”That&#8217;s my favorite word”。于是她被录取乐，为D爷爷工作到NT3.5发布。</p>
<h2>Donald E. Knuth</h2>
<p>Don Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿，学数学的不知道欧拉，学音乐的不知道莫扎特，学Delphi的不知到 Anders Hejlsberg，或者学Linux不知道Linus Torvalds一样，不可原谅啊。:-)为了让文章完整，就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别人时收一两千美元，那些公司拿了code，加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过，学者本色的说。想想那可是60年代初啊，高爷爷写编译器写多了，顺带就搞出了个Attribute Grammar和LR(k)，大大地造福后人啊。至于高爷爷在<a title="[GMCP] Compose a new mail to CalTech" href="mailto:liulikun@gmail.com" rel="noreferrer">CalTech</a>的编程比赛(有Alan Kay得众多高高手参加)总是第一，写的Tex到86年就code freeze，还附带2^n美分奖励等等都是耳熟能详，偶就不饶舌乐。顺便说一下，高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可谓字字铿锵，堪为前言的典范。他的技术文章也是一绝，文风细致，解释精当，而且没有学究气，不失轻快跳脱。记得几年前读Concrete Mathematics，时不时开怀大笑，让老妈极其郁闷，觉得我nerdy到家，不可救药。其实呢，子非鱼，安知鱼之乐，更不知那完全是高爷爷的功劳。说到写作高手，不能不提Stephen A. Cook。他的文章当年就被我们的写作老师极力推荐，号称典雅文风的样本。库爷爷一头银发，身材颀长，总是面带谦和的微笑，颇有仙风道骨，正好和他的仙文相配的说。高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走，但他捐献了好多作品，都可以在网上看到，比如著名的Mathematical Writing，MMIXWare，The Tex Book等，更不用说足以让他流芳百世的Tex乐。</p>
<p>&nbsp;</p>
<h2>Ken Thompson</h2>
<p>Ken Thompson，C语言前身B语言的作者，Unix的发明人之一(另一个是Dennis M. Riche老大，被尊为DMR)，Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan 9的主要作者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代，普通人都认为只有大型机才能运行通用的操作系统，小型机只有高山仰止的份儿。至于用高级语言来写操作系统，更是笑谈。Ken爷爷自然不是池中物，于是他和DMR怒了，在1969年到1970间用汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道，一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重写，于是C在随后20年成就了不知多少豪杰的梦想和光荣。Ken爷爷还有段佳话：装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户，获得最高权限。Bell Lab里的科学家都心比天高，当然被搞得郁闷无比。于是有高手怒了，跳出来分析了UNIX代码，找到后门，修改代码，然后重新编译了整个UNIX。就在大家都以为“这个世界清净了”的时候，他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限，百思不解后，只好继续郁闷。谁知道这一郁闷，就郁闷了14年，直到Ken爷爷道出个中缘由。原来，代码里的确有后门，但后门不在Unix代码里，而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码，就自动生成后门代码。而整个Bell Lab的人，都是用Ken爷爷的C编译器。</p>
<h2>Rob Pike Rob Pike</h2>
<p>Rob Pike Rob Pike, AT&amp;T Bell Lab前Member of Technical Staff ，现在google研究操作系统。罗伯伯是Unix的先驱，是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开发Unix的猛人，UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小脸，一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是，罗伯伯还是1980年奥运会射箭的银牌得主。他也是个颇为厉害的业余天文学家，设计的珈玛射线望远镜差点被NASA用在航天飞机上。他还是两本经典，The Unix Programming Environment 和 The Practice of Programming 的作者之一。如果初学者想在编程方面精益求精，实在该好好读读这两本书。它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统，并且是著名的blit 终端的作者。当然了，罗伯伯还是号称锐意革新的操作系统，Plan9，的主要作者。可惜的是，Plan9并没有引起多少人的注意。罗伯伯一怒之下，写出了振聋发聩的雄文 Systems Software Research is Irrelevant，痛斥当下系统开发不思进取，固步自封的弊病。虽然这篇文章是罗伯伯含忿出手，颇有偏激之词，但确实道出了系统开发的无奈：开发周期越来越长，代价越来越大，用户被统一到少数几个系统上，结果越来越多的活动是测量和修补，而真正的革新越来越少。就在罗伯伯郁闷之极的时候，google登门求贤来乐。如果说现在还有一家大众公司在不遗余力地把系统开发推向极致的话，也就是google 乐。随便看看google的成果就知道了。具有超强容错和负载平衡能力的分布式文件系统GFS (现在能够用100,000台廉价PC搭起一个巨型分布系统，并且高效便宜地进行管理的系统也不多哈)，大规模机器学习系统(拼写检查，广告匹配，拼音搜寻。。。哪个都很牛的说)，更不用说处理海量并行计算的各式google服务了。Rob在System Software Research is Irrelevant里萧瑟地说现在没有人再关心系统研究的前沿成果了。想不到他错了，因为google关心。google网络了大批功成名就的牛人，还有大量初生牛犊般博士做开发，显然不是没事耍酷，而是因为它们的开发总是试图吸取系统研究的最新成果。 想必Rob Pike在google很幸福。愿他做出更棒的系统。</p>
<h2>Dennis M. Ritchie</h2>
<p>Dennis M. Ritchie 既然Ken Thompson是我的偶像，新闻组上人称DMR的Dennis M. Ritchie自然也是，毕竟两人共同缔造了UNIX，而Dennis几乎独力把C搞大(当然，C的前身是B，而B是Ken Thompson一手做出来的)。J 两人1983年分享图灵奖，是有史以来少数几个因工程项目得奖的工程师(本来是唯一的一对儿，但Alan Kay才因为<a title="[GMCP] Compose a new mail to SmallTalk" href="mailto:liulikun@gmail.com" rel="noreferrer">SmallTalk</a>得奖，所以就成了唯二的乐) 。一个人一生能做出一个卓越的系统已经不易，DMR的C和UNIX长盛不衰近30年，至今生机勃勃，DMR此生可以无憾的说。D爷爷也算有家学渊源：他老爸在AT&amp;T贝尔实验室工作了一辈子，并在电路设计方面卓有成就，还出了本颇有影响的书The Design of Switching Circuits，据说在交换理论和逻辑设计方面有独到的论述。当然，D爷爷和他老爸是不同时代的人：他老爸的研究成形于晶体管发明之前，而D爷爷的工作离了晶体管就玩儿不转乐。:-D不要看D爷爷搞出了C，其实他最爱的编程语言是Alef，在Plan9上运行，支持并行编程。Alef的语法和C相似，但数据类型和执行方式都和C大大不同。说到语言，D爷爷对后来人有非常中肯的建议：抱着学习的目的来开发你自己的语言，不要冀望于它被众人接受。这个建议不光对语言开发有用，也适用于其它大型系统的开发。别的不说，DMR后来领导自己的团队在1995年和1996分别推出了Plan9和 Inferno操作系统，又用多少人知道呢？其实，D爷爷当初也没想过C会风行世界。他开发C的初衷和 Eric S. Raymond在Cathedral and Bazaar里阐述的一样，就是要消除自己对现有工具的不爽之处。谁知D爷爷无心插柳，C竟然受到众多程序员的狂热拥戴，连D爷爷自己都大惑不解。在一次采访中D爷爷说大概那是因为C的抽象程度碰巧既满足了程序员的要求, 又容易实现。当然C一度是Unix上的通用语言也是原因。但不管怎么说，D爷爷对编程语言出色的审美意识奠定了C广为流传的基础。最后八卦一下。D爷爷的业余爱好和NBA大牛Karl Malone一样：开卡车。不过D爷爷更喜欢开NASCAR，而KM独爱巨无霸。J D爷爷自称心中不供偶像，如果一定要说一个，那就是Ken Thompson了。现在Ken爷爷退休当飞机教练去了，而D爷爷当了贝尔实验室系统开发部的头，整日忙于开支票。他俩合作20年，屡屡创造历史。这段令人神往的佳话，也就长留你我心中乐。P.S., 很多人都以为Brian W. Kernighan是C的作者。其实BWK只是写了那本经典K&amp;R C。据D爷爷说，他，Ken, 和Kernighan三人中，Kernighan最能写文章，他次之，而Ken写得最少；但说到编程，Ken爷爷才是当之无愧的老大。</p>
<h2>Edsger Wybe Dijkstra</h2>
<p>Edsger Wybe Dijkstra 对，就是E.W. Dijkstra. 一提到EWD，很多人就会想起找最短路径的Dijkstra Algorithm，就好像一提到Sir. Tony Hoare，就想起Quick Sort一样。其实这些个算法不过是两个牛人在他们职业生涯中最琐碎的贡献。比如Dijkstra算法，无非是戴爷爷在1956年为了展示新计算机 ARMAC的计算能力，初试身手的成果，属于他的算法处女作。据戴爷爷自述，他搞出最短路径算法的时候连纸笔都没用。当时他和他老婆在阿姆斯特丹一家咖啡厅的阳台上晒太阳喝咖啡，突然就把这个算法想出来乐。而且当时的算法研究还比较原始，牛人们忙着用计算机搞数值计算，对离散算法不屑一顾。那时连一个象样的专注于离散算法的专业期刊都没有。戴爷爷于是推迟发表这个算法。直到1959年，他才把这个算法发表在Numerische Mathematik的创刊号上，权为捧场。:-) EWD在多个领域牛气冲天，端的是理论和编程两手硬的高手。只不过他的很多工作比较深刻，学校的老先生们觉得本科生接受不了，不给本科生讲而已。戴爷爷大概因为最短路径算法一战成名，于是有人请他参加另一台计算机X1的设计工作，并且把设计实时中断系统的任务派给了他。现在看来实时中断也许不算什么，但要知到，X1前根本就没有实时中断的概念。实现它简直就是一场豪赌。戴爷爷起初还不情愿，但经不住项目负责人Bram和Carel的轮番“吹捧”：我们知道实时中断让您工作变得非常困难，但象您这样的牛人肯定能做出来的说。结果戴爷爷被糖衣炮弹彻底击穿，接下了这个烫手山芋。两三年后，他不仅搞出了实时中断，还围绕这个写出了自己的博士论文，顺利戴上博士帽。让戴爷爷真正成名立万的还是在X1上开发的Algo60，最早的高级语言之一。戴爷爷没日没夜地工作了8个月，就搞出了Algo60，也因此获得了1972年的图灵奖。因为Algo60，戴爷爷发表了一篇石破天惊的文章：Recursive Programming，于是人们才知道，原来高级语言也可以高效地实现递归，原来从此以后，所有程序员都不可避免地和戴爷爷发明的一个词(应该说是概念)打交道：堆栈。而且Algo60还让戴爷爷深入地思考多道程序设计的问题，最终发明了每个系统程序员都绕不开的概念：semaphore。当然，戴爷爷总是把他发明的概念严格形式化，极具科学家本色的说。和这些成就想比，他提出的吃饭的哲学家问题，也就没什么好说的了。说来好笑，当时的大学(忘了哪所了)还是觉得戴爷爷没有受过正统的数学训练，也不是专门搞数值分析的，所以最后不太情愿地给了他一个教职。这种小挫折并不能妨碍象戴爷爷这样的牛人创造历史。他一边教数值分析(:-D) ，一边开始开发一个新的操作系统，并培养计算机科学家。几年后，THE Multiprogramming System横空出世。THE是第一个支持松散耦合，显式同步的进程并由此使得严格证明系统没有死锁变得容易的操作系统。可惜戴爷爷任职的系不识货，还强行解散了他的研究小组(1972年戴爷爷给他的系主任说他得了图灵奖，系主任的第一反应是你们搞计算机就喜欢乱发奖)。这让戴爷爷相当郁闷，得了抑郁症。在极度郁闷之中，戴爷爷决定用写作来治疗自己的抑郁症。于是经典就诞生乐：Notes on Structured Programming。戴爷爷从此被尊为结构化编程的奠基人，而且他的抑郁症也被治好乐。EWD太牛，结果他的故事也太多。先到这里吧。1973起，他的故事就在美国发生了。</p>
<h2>Anders Hejlsberg</h2>
<p>Anders Hejlsberg，微软.NET的首席架构师，编程语言设计和实现的顶尖高手。他一手做出了Turbo Pascal, 也是Delphi,J++(尤其是WFC)，C#,和.NET的主要作者。这些作品的名字足以为他立传。作为一个程序员，我在这样的大师面前实在无语。生子当如Anders的说。李维的&lt;&gt;里已详细讲述了Anders的传奇故事，我就不用费舌了：<a href="http://java.mblogger.cn/iexploiter/posts/1505.aspx">http://java.mblogger.cn/iexploiter/posts/1505.aspx</a> 。 Artima上有Anders谈C#的系列访谈 。MSDN上有一段Anders导游的录像 。有兴趣可以去看看牛人的丰采。<a href="http://grid.tsinghua.edu.cn/home/liulk/wiki/computer/BorlandLegend.html">BorlandLegend</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/fun/355.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>去西藏的火车上</title>
		<link>http://blog.tunfan.com/fun/128.html</link>
		<comments>http://blog.tunfan.com/fun/128.html#comments</comments>
		<pubDate>Thu, 29 Sep 2011 05:19:58 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[工作和生活]]></category>
		<category><![CDATA[趣闻]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=128</guid>
		<description><![CDATA[     一直想去个不一样的地方。西藏不是我的首选。神农架无人区才是。但一个人去不了，想找人一起，一直找不到。一直到年初陆陆续续有人介绍去西藏。。想想，这个地方一个人去，还是靠谱的。于是决定5月前后出发。        奔走相告，有人想和我一起去，前提是等两个月。78月的时候。。。我这个人不喜欢太热闹，但有个伴，在不算漫长的旅途上也是不错的。于是等啊等。。。结果是可想而知的。被放鸽子了。。。 就在6月底的时候 仍然有人想和我一起去，前提还是再等一二个月。。。泥马。。。这能等么？显然不能啊。明日复明日，明日何其多啊！必须7月走。一咬牙跺脚，果断请假啊，断了自己的后路。。请了两个星期，这车票是真心的难买，卧铺是根本窗口没有售的。主要日子也不巧，赶上西藏大庆了。。。。各种限制，让爸爸找人帮忙买了张卧铺。。哎，太丢人人了。（理想的状态应该是一个小青年在没买到票的情况下，冲破种种关卡，闯上了火车，在无票的情况下站到了西藏，电影上一般会这么放。。）         好歹等到出发的日子了。。当天一下班，吃完饭，去超市买了点巧克力，饼干、方便面，用来火车上吃。再买了两罐午餐肉、两袋榨菜，以备在西藏遇到点啥情况能延续点生命。。。。（我当时以为会是在荒无人烟的戈壁上走失迷路了。。后来没用上。。太遗憾了）买了5瓶大矿泉水。然后回家准备了3件衣服，一件冲锋衣，一条裤子，2条内裤，3双袜子。带上相机，一个小杯子（后来遗失了。。又是有点遗憾。）一双拖鞋（尼泊尔回来前扔了）。考虑到两周时间胡子会长的太长又加上了年代已久的电动剃须刀。。所有装备就这些了。。         本想是不是要带上什么防身的东西，听说某些地方不太稳定，很乱。刀不行，肯定上车就被查了，于是想带上那快锈了的双截棍,不过仔细想了想，外面武林高手一定很多，真要是拿我开刀，估计带枪都没用。最终放弃带什么道具了，空手打天下才是王道，英雄救美的时候也能加分。哈哈。。 都说感冒不能去西藏，可能已经各种准备好了，一点感冒我也烦不了了。死也要死在西藏。有决心活下来就行，背上包，坐地铁到了火车站。上车。。。 以下照片记录了火车上的一些XXX。。。。。]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">     一直想去个不一样的地方。西藏不是我的首选。神农架无人区才是。但一个人去不了，想找人一起，一直找不到。一直到年初陆陆续续有人介绍去西藏。。想想，这个地方一个人去，还是靠谱的。于是决定5月前后出发。</p>
<p style="text-align: left;">       奔走相告，有人想和我一起去，前提是等两个月。78月的时候。。。我这个人不喜欢太热闹，但有个伴，在不算漫长的旅途上也是不错的。于是等啊等。。。结果是可想而知的。被放鸽子了。。。<br />
就在6月底的时候 仍然有人想和我一起去，前提还是再等一二个月。。。泥马。。。这能等么？显然不能啊。明日复明日，明日何其多啊！必须7月走。一咬牙跺脚，果断请假啊，断了自己的后路。。请了两个星期，这车票是真心的难买，卧铺是根本窗口没有售的。主要日子也不巧，赶上西藏大庆了。。。。各种限制，让爸爸找人帮忙买了张卧铺。。哎，太丢人人了。（理想的状态应该是一个小青年在没买到票的情况下，冲破种种关卡，闯上了火车，在无票的情况下站到了西藏，电影上一般会这么放。。）</p>
<p>        好歹等到出发的日子了。。当天一下班，吃完饭，去超市买了点巧克力，饼干、方便面，用来火车上吃。再买了两罐午餐肉、两袋榨菜，以备在西藏遇到点啥情况能延续点生命。。。。（我当时以为会是在荒无人烟的戈壁上走失迷路了。。后来没用上。。太遗憾了）买了5瓶大矿泉水。然后回家准备了3件衣服，一件冲锋衣，一条裤子，2条内裤，3双袜子。带上相机，一个小杯子（后来遗失了。。又是有点遗憾。）一双拖鞋（尼泊尔回来前扔了）。考虑到两周时间胡子会长的太长又加上了年代已久的电动剃须刀。。所有装备就这些了。。</p>
<p style="text-align: left;">        本想是不是要带上什么防身的东西，听说某些地方不太稳定，很乱。刀不行，肯定上车就被查了，于是想带上那快锈了的双截棍,不过仔细想了想，外面武林高手一定很多，真要是拿我开刀，估计带枪都没用。最终放弃带什么道具了，空手打天下才是王道，英雄救美的时候也能加分。哈哈。。<br />
都说感冒不能去西藏，可能已经各种准备好了，一点感冒我也烦不了了。死也要死在西藏。有决心活下来就行，背上包，坐地铁到了火车站。上车。。。<br />
以下照片记录了火车上的一些XXX。。。。。<br />

<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0001' title='DSC_0001'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0001-150x150.jpg" class="attachment-thumbnail" alt="火车站台" title="DSC_0001" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0007' title='DSC_0007'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0007-150x150.jpg" class="attachment-thumbnail" alt="DSC_0007" title="DSC_0007" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0010' title='DSC_0010'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0010-150x150.jpg" class="attachment-thumbnail" alt="又一站" title="DSC_0010" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0012' title='DSC_0012'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0012-150x150.jpg" class="attachment-thumbnail" alt="DSC_0012" title="DSC_0012" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0013' title='DSC_0013'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0013-150x150.jpg" class="attachment-thumbnail" alt="DSC_0013" title="DSC_0013" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0014' title='DSC_0014'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0014-150x150.jpg" class="attachment-thumbnail" alt="DSC_0014" title="DSC_0014" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0018' title='DSC_0018'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0018-150x150.jpg" class="attachment-thumbnail" alt="DSC_0018" title="DSC_0018" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0021' title='DSC_0021'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0021-150x150.jpg" class="attachment-thumbnail" alt="雪山OR冰川" title="DSC_0021" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0022' title='DSC_0022'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0022-150x150.jpg" class="attachment-thumbnail" alt="雪山OR冰川" title="DSC_0022" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0025' title='DSC_0025'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0025-150x150.jpg" class="attachment-thumbnail" alt="DSC_0025" title="DSC_0025" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0026' title='DSC_0026'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0026-150x150.jpg" class="attachment-thumbnail" alt="DSC_0026" title="DSC_0026" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0029' title='DSC_0029'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0029-150x150.jpg" class="attachment-thumbnail" alt="DSC_0029" title="DSC_0029" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0032' title='DSC_0032'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0032-150x150.jpg" class="attachment-thumbnail" alt="DSC_0032" title="DSC_0032" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0034' title='DSC_0034'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0034-150x150.jpg" class="attachment-thumbnail" alt="DSC_0034" title="DSC_0034" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0035' title='DSC_0035'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0035-150x150.jpg" class="attachment-thumbnail" alt="DSC_0035" title="DSC_0035" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0036' title='DSC_0036'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0036-150x150.jpg" class="attachment-thumbnail" alt="海拔高度可以的" title="DSC_0036" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0039' title='DSC_0039'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0039-150x150.jpg" class="attachment-thumbnail" alt="车厢内" title="DSC_0039" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0040' title='DSC_0040'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0040-150x150.jpg" class="attachment-thumbnail" alt="DSC_0040" title="DSC_0040" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0041' title='DSC_0041'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0041-150x150.jpg" class="attachment-thumbnail" alt="DSC_0041" title="DSC_0041" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0050' title='DSC_0050'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0050-150x150.jpg" class="attachment-thumbnail" alt="DSC_0050" title="DSC_0050" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0051' title='DSC_0051'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0051-150x150.jpg" class="attachment-thumbnail" alt="拉萨站到了" title="DSC_0051" /></a>
<a href='http://blog.tunfan.com/fun/128.html/attachment/dsc_0056' title='DSC_0056'><img width="150" height="150" src="http://blog.tunfan.com/wp-content/uploads/DSC_0056-150x150.jpg" class="attachment-thumbnail" alt="拉萨站的武警，拍完就找我谈话了" title="DSC_0056" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/fun/128.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序猿装B指南</title>
		<link>http://blog.tunfan.com/life/319.html</link>
		<comments>http://blog.tunfan.com/life/319.html#comments</comments>
		<pubDate>Mon, 22 Aug 2011 01:41:07 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[工作和生活]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=319</guid>
		<description><![CDATA[一.准备工作 “工欲善其事必先利其器。” 1.电脑不一定要配置高，但是双屏是必须的，越大越好，能一个横屏一个竖屏更好。一个用来查资料，一个用来写代码。总之要显得信息量很大，效率很高。 2.椅子不一定要舒服，但是一定要可以半躺着。 3.大量的便签，各种的颜色的，用来记录每天要完成的事务，多多益善。沿着电脑屏幕的边框，尽量贴满，显出有很多事情的样子。 4.工具书，orelly的，机械工业，电子工业什么的都可以，能英文就英文，不行影印版的也可以，反正越厚越好，而且千万不要放在书架上，一定要堆在桌上，半打开状。 二.从进门开始 0..绝对不10点以前出现在公司. 1.着装！着装！不管你是去实验室，或者去公司的大楼，在或者是小公司的民宅，或是自己创业的 黑作坊；无论是春夏秋冬白天晚上刮风下雨电闪雷鸣台风龙卷风，一个装b的程序员都要十分在意自己着装！这里只提出参考建议。初级装：衬衣+牛仔裤+休闲 鞋。中级装：T恤+宽松短裤+拖鞋。高级装：背心+宽松大花裤衩+人字拖。 2.得体的举止。在走廊以及任何形式的过道里，一定要双手插兜，走得像个痞子，至少要看起来有点反社会，如若不行，可走文弱天才型geek路线。。 3.如果有女性在你背后指指点点，小声嘀咕说这一定是一个技术男的时候，应该先低头，然后保持低头状态，缓缓回头，坏坏地蔑笑但是不要出声，然后快步前行。 4.进门后，一定不要跟任何人打招呼，笔直走向自己的位置，最多路过打一杯咖啡，千万不要有多余的动作，显示出自己的专注与心无旁骛。 三.坐下就不要再动了 1.坐下以后，姿势需要略微后仰，能翘着二郎腿最好了，然后在后仰的情况下低着头，以便看到屏幕，然后千万就不要再动了。 2.粗暴地把电脑前的大堆书推开一个口，然后摘下电脑上的一个便签，看一眼，不过3秒，可以开始coding了。 3.能不用IDE就不要用，实在装不了，无论IDE是什么，一定要调成DOS那种黑色背景的。 4.如果写前台界面，就不停地调试后台代码；如果写java，就在里面混编C；如果写C，就在里面混编汇编。不光要coding，还要时不时的翻出一本什么英文的书翻一翻，看不懂就看看插图，然后扔到面前假装懂了继续coding。 5. 什么看起来高端就用什么，不要管实用不实用。例如对C++：switch统统重构成多态；如果有指针，统统改成智能的；C++一定要自己写 template；数字是全部要替换成宏的名字能起多长就起多长；struct就不要出现了，如果出现，也一定要用__attribute__修饰一下； 运算都是位操作的；操作符都是重载的；网络都是并发缓冲线程池的；int只用int32_t声明的;继承不用普通的，什么多继承虚继承 啊；helloworld也要写捕获异常的；后人一看代码，中间一堆关键字 extern,asm,auto,XXXXX_cast,volatile,explicit,register,template，让一般总在敲 int,if,else,for的小程序员顿时心生崇拜。 6.注释？算了吧。只有两个路线可以选：一，变量名起得巨长无比，看代码就和读英文文章一样顺畅，根本不需要加注释。 二，代码无比晦涩，加不加注释根本无影响。 7.千万不要用IM工具交流，千万不要问同事问题，显得自己没有水平，都是自己上网或者查书。 8.无论是同事间开玩笑或者发生任何群体性事件，不要抬头，更不要东张西望，即使地震火灾，也一定要先提交代码再行离开。 四.潇洒地离开 1.人走，主机是千万千万不能关的，至少要跑个daily build，实在不行正在svn提交也勉强算过关。 2.书应该已经又堆到屏幕前了，千万不要整理，明天再来推开。 3.不强求最后一个走，但一定要所有的非程序员，什么市场啊前台啊pm啊都走光了，才可以走。 4.走得时候一定要率性，千万不要收拾任何东西，站起来，出门，好的，就这样。 5.如果今天一定要说句话的话，找到那个最苦逼的程序员，跟他说，你进度太慢了啊，不要老让我等你。]]></description>
			<content:encoded><![CDATA[<p><strong>一.准备工作</strong><br />
<strong>“工欲善其事必先利其器。”</strong><br />
1.电脑不一定要配置高，但是双屏是必须的，越大越好，能一个横屏一个竖屏更好。一个用来查资料，一个用来写代码。总之要显得信息量很大，效率很高。<br />
2.椅子不一定要舒服，但是一定要可以半躺着。<br />
3.大量的便签，各种的颜色的，用来记录每天要完成的事务，多多益善。沿着电脑屏幕的边框，尽量贴满，显出有很多事情的样子。<br />
4.工具书，orelly的，机械工业，电子工业什么的都可以，能英文就英文，不行影印版的也可以，反正越厚越好，而且千万不要放在书架上，一定要堆在桌上，半打开状。</p>
<p><strong>二.从进门开始</strong><br />
0..绝对不10点以前出现在公司.<br />
1.着装！着装！不管你是去实验室，或者去公司的大楼，在或者是小公司的民宅，或是自己创业的 黑作坊；无论是春夏秋冬白天晚上刮风下雨电闪雷鸣台风龙卷风，一个装b的程序员都要十分在意自己着装！这里只提出参考建议。初级装：衬衣+牛仔裤+休闲 鞋。中级装：T恤+宽松短裤+拖鞋。高级装：背心+宽松大花裤衩+人字拖。<br />
2.得体的举止。在走廊以及任何形式的过道里，一定要双手插兜，走得像个痞子，至少要看起来有点反社会，如若不行，可走文弱天才型geek路线。。<br />
3.如果有女性在你背后指指点点，小声嘀咕说这一定是一个技术男的时候，应该先低头，然后保持低头状态，缓缓回头，坏坏地蔑笑但是不要出声，然后快步前行。<br />
4.进门后，一定不要跟任何人打招呼，笔直走向自己的位置，最多路过打一杯咖啡，千万不要有多余的动作，显示出自己的专注与心无旁骛。</p>
<p><strong>三.坐下就不要再动了</strong><br />
1.坐下以后，姿势需要略微后仰，能翘着二郎腿最好了，然后在后仰的情况下低着头，以便看到屏幕，然后千万就不要再动了。<br />
2.粗暴地把电脑前的大堆书推开一个口，然后摘下电脑上的一个便签，看一眼，不过3秒，可以开始coding了。<br />
3.能不用IDE就不要用，实在装不了，无论IDE是什么，一定要调成DOS那种黑色背景的。<br />
4.如果写前台界面，就不停地调试后台代码；如果写java，就在里面混编C；如果写C，就在里面混编汇编。不光要coding，还要时不时的翻出一本什么英文的书翻一翻，看不懂就看看插图，然后扔到面前假装懂了继续coding。<br />
5. 什么看起来高端就用什么，不要管实用不实用。例如对C++：switch统统重构成多态；如果有指针，统统改成智能的；C++一定要自己写 template；数字是全部要替换成宏的名字能起多长就起多长；struct就不要出现了，如果出现，也一定要用__attribute__修饰一下； 运算都是位操作的；操作符都是重载的；网络都是并发缓冲线程池的；int只用int32_t声明的;继承不用普通的，什么多继承虚继承 啊；helloworld也要写捕获异常的；后人一看代码，中间一堆关键字 extern,asm,auto,XXXXX_cast,volatile,explicit,register,template，让一般总在敲 int,if,else,for的小程序员顿时心生崇拜。<br />
6.注释？算了吧。只有两个路线可以选：一，变量名起得巨长无比，看代码就和读英文文章一样顺畅，根本不需要加注释。 二，代码无比晦涩，加不加注释根本无影响。<br />
7.千万不要用IM工具交流，千万不要问同事问题，显得自己没有水平，都是自己上网或者查书。<br />
8.无论是同事间开玩笑或者发生任何群体性事件，不要抬头，更不要东张西望，即使地震火灾，也一定要先提交代码再行离开。</p>
<p><strong>四.潇洒地离开</strong><br />
1.人走，主机是千万千万不能关的，至少要跑个daily build，实在不行正在svn提交也勉强算过关。<br />
2.书应该已经又堆到屏幕前了，千万不要整理，明天再来推开。<br />
3.不强求最后一个走，但一定要所有的非程序员，什么市场啊前台啊pm啊都走光了，才可以走。<br />
4.走得时候一定要率性，千万不要收拾任何东西，站起来，出门，好的，就这样。<br />
5.如果今天一定要说句话的话，找到那个最苦逼的程序员，跟他说，你进度太慢了啊，不要老让我等你。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/life/319.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大家能持久点么？</title>
		<link>http://blog.tunfan.com/life/91.html</link>
		<comments>http://blog.tunfan.com/life/91.html#comments</comments>
		<pubDate>Tue, 09 Aug 2011 08:13:05 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[工作和生活]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=91</guid>
		<description><![CDATA[我说！兄弟们。能不要太监么。。。 咱们能不要太监么？哪怕一次也好呢。。 从头到尾做完一件事就这么难么？完成一次能死么？ 不要太监下去了好不好啊。。。 这么大人了。咱丢不起啊！！！]]></description>
			<content:encoded><![CDATA[<p>我说！兄弟们。能不要太监么。。。<br />
咱们能不要太监么？哪怕一次也好呢。。<br />
从头到尾做完一件事就这么难么？完成一次能死么？</p>
<p>不要太监下去了好不好啊。。。</p>
<p>这么大人了。咱丢不起啊！！！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/life/91.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一个足够简单的网络应用通讯数据结构</title>
		<link>http://blog.tunfan.com/life/93.html</link>
		<comments>http://blog.tunfan.com/life/93.html#comments</comments>
		<pubDate>Mon, 18 Apr 2011 06:06:42 +0000</pubDate>
		<dc:creator>kadxmg</dc:creator>
				<category><![CDATA[工作和生活]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=93</guid>
		<description><![CDATA[再简单也要考虑很多东西，其实是很麻烦很麻烦的。 struct low_level_package { char szMagicWord[] = {“SPEP”}; unsigned int nVersion; // if the version number not correct, server/client will report a not the right version to each other unsigned int nLen; // it should be less than MAX_PACKAGE_SIZE + sizeof(unsigned int) *2 + sizeof(char[4]) unsigned int nCheckSum; // just include content filed char content[MAX_PACKAGE_SIZE]; [...]]]></description>
			<content:encoded><![CDATA[<p>再简单也要考虑很多东西，其实是很麻烦很麻烦的。</p>
<p>struct low_level_package<br />
{<br />
char szMagicWord[] = {“SPEP”};<br />
unsigned int nVersion; // if the version number not correct, server/client will report a not the right version to each other<br />
unsigned int nLen; // it should be less than MAX_PACKAGE_SIZE + sizeof(unsigned int) *2 + sizeof(char[4])<br />
unsigned int nCheckSum; // just include content filed<br />
char content[MAX_PACKAGE_SIZE]; // high_level_package in here<br />
}</p>
<p>enmu AppType<br />
{<br />
APP_TYPE_NONE = 0,<br />
APP_TYPE_SERVER , //  include the server  response code and any thing else<br />
APP_TYPE_CLIENT, // some comm cmd use for client<br />
APP_TYPE_QQ,<br />
APP_TYPE_USER,<br />
APP_TYPE_MSG,<br />
APP_TYPE_DESKTOP_GAME_A,<br />
APP_TYPE_DESKTOP_GAME_B,<br />
APP_TYPE_MAX<br />
}<br />
cnmu CmdType_SERVER<br />
{<br />
CMD_TYPE_NONE = 0,<br />
CMD_TYPE_ERROR, // Associated to struct Data_Struct_Command_Server<br />
CMD_TYPE_MAX,<br />
}<br />
enmu CmdType_USER<br />
{<br />
CMD_TYPE_NONE = 0,<br />
CMD_TYPE_LOGIN, // Associated to struct Data_Struct_Login<br />
CMD_TYPE_LOGOUT,<br />
CMD_TYPE_MAX<br />
}<br />
// we assert the hight_level_package data is correct<br />
struct high_level_package<br />
{<br />
unsigned int nAppType;<br />
unsigned int nCmdType;<br />
char[MAX_HIGH_LEVEL_PACKAGE_SIZE] content;<br />
}</p>
<p>enmu ERROR_TYPE_COMM_SERVER<br />
{<br />
ERROR_TYPE_COMM_SERVER_NONE = 0,<br />
ERROR_TYPE_COMM_SERVER_NOERROR, //没有错误<br />
ERROR_TYPE_COMM_SERVER_USER,//用户错误<br />
ERROR_TYPE_COMM_SERVER_PASSWORD, //密码错误<br />
ERROR_TYPE_COMM_SERVER_COMM,// 通讯错误<br />
ERROR_TYPE_COMM_SERVER_MAX,<br />
}</p>
<p>struct Data_Struct_Command_Server<br />
{<br />
int nError Code; // a error code return from Server<br />
char [MAX_ERROR] szError; // some error desc str<br />
}</p>
<p>struct Data_Struct_Login{<br />
//int nMask,  // if you need ,you can use a Mask to tell server which option you&#8217;re used. etc Authentication Code is used or not<br />
char[MAX_UID] szUid;<br />
char[MAX_PWD] szPwd;<br />
char[MAX_AUT] szAut; //Authentication code if needed<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/life/93.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>你猜不到的恶心错误-1</title>
		<link>http://blog.tunfan.com/life/88.html</link>
		<comments>http://blog.tunfan.com/life/88.html#comments</comments>
		<pubDate>Fri, 15 Apr 2011 09:01:03 +0000</pubDate>
		<dc:creator>kadxmg</dc:creator>
				<category><![CDATA[工作和生活]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=88</guid>
		<description><![CDATA[当编译的时候，发现这个u_char 就是不能被识别 /usr/include/event.h:727: error: expected specifier-qualifier-list before ‘u_char’ 而你又妥妥的在头文件里面看到它已经被定义了（sys/types.h） #ifdef    __USE_BSD # ifndef __u_char_defined typedef __u_char u_char; typedef __u_short u_short; typedef __u_int u_int; typedef __u_long u_long; typedef __quad_t quad_t; typedef __u_quad_t u_quad_t; typedef __fsid_t fsid_t; #  define __u_char_defined # endif #endif __u_char 在 bits/types.h 里面也有定义 /* Convenience types.  */ typedef unsigned char __u_char; 我抓狂了一个下午，终于找到了解决方法。但是我不想深究原因了（我只能大概推测一下），因为很忙阿，各种事情，要集中精力做最需要的事情。 大概的原因和那个该死的__BEGIN_DECLS [...]]]></description>
			<content:encoded><![CDATA[<p>当编译的时候，发现这个u_char 就是不能被识别</p>
<p>/usr/include/event.h:727: error: expected specifier-qualifier-list before ‘u_char’<br />
而你又妥妥的在头文件里面看到它已经被定义了（sys/types.h）</p>
<p>#ifdef    __USE_BSD<br />
# ifndef __u_char_defined<br />
typedef __u_char u_char;<br />
typedef __u_short u_short;<br />
typedef __u_int u_int;<br />
typedef __u_long u_long;<br />
typedef __quad_t quad_t;<br />
typedef __u_quad_t u_quad_t;<br />
typedef __fsid_t fsid_t;<br />
#  define __u_char_defined<br />
# endif<br />
#endif</p>
<p>__u_char 在 bits/types.h 里面也有定义</p>
<p>/* Convenience types.  */<br />
typedef unsigned char __u_char;<br />
我抓狂了一个下午，终于找到了解决方法。但是我不想深究原因了（我只能大概推测一下），因为很忙阿，各种事情，要集中精力做最需要的事情。</p>
<p>大概的原因和那个该死的__BEGIN_DECLS 有关系（实际上就是 extern C）</p>
<p>恶心的解决方法就是给GCC的参数从 -std=c99 改成 -std=gnu99</p>
<p>标准C什么都是浮云，GCC就是要抱GNU大腿才能活啊</p>
<p>有人要问，为什么要用c99，c90（默认值其实是这一个）也是可以过的。</p>
<p>原因就是，Geany的C语言模板开头有一堆看起来很酷的免责GPL说明，而这些很Cool的说明是用C++（C99规范）规范写的</p>
<p>C90规范中会对 // 格式的注释给于警告。但是我又很手贱的喜欢-pedantic-errors 选项（所有警告都当作错误处理），所以这尼玛的又花掉了我3个小时啊。</p>
<p>//      Copyright 2011 inc062276 &lt;inc062276@inc062276-laptop&gt;<br />
//<br />
//      This program is free software; you can redistribute it and/or modify<br />
//      it under the terms of the GNU General Public License as published by<br />
//      the Free Software Foundation; either version 2 of the License, or<br />
//      (at your option) any later version.<br />
//<br />
//      This program is distributed in the hope that it will be useful,<br />
//      but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br />
//      GNU General Public License for more details.<br />
//<br />
//      You should have received a copy of the GNU General Public License<br />
//      along with this program; if not, write to the Free Software<br />
//      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,<br />
//      MA 02110-1301, USA.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/life/88.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2B的梦想 Server 端代码构建</title>
		<link>http://blog.tunfan.com/life/84.html</link>
		<comments>http://blog.tunfan.com/life/84.html#comments</comments>
		<pubDate>Fri, 15 Apr 2011 08:44:38 +0000</pubDate>
		<dc:creator>kadxmg</dc:creator>
				<category><![CDATA[工作和生活]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=84</guid>
		<description><![CDATA[2B方说：我热了，我要做个桌面游戏，CS结构+Linux服务器 我说：不靠谱啊，妥妥的会灭 2B方说：一起2就不是2了 我想：那得加个B了。 &#160; Linux下面写代码，没试过。 第一次选了Geany，小巧，轻便，不过确实功能不够丰富，但是以目前的简单应用来说还是可以应付的。 网络库用了livevent，嗯，不错，挺好的。 下面要设计一下分层模块，然后封出所有的层次处理分支，然后套用一下数据结构的接口，基本就没我啥事了。 对了，数据库，我还没想好要怎么处理。 其实满多SQL的都要放到Server端，我好像有SQL厌烦症了。 公司不能访问https，不能用svn。我得把服务器装一下，因为服务器是可以用git的，也许可以改一下port让它也可以使用svn。 我现在是用笔记本玩的。看来还是有很多精力要花在和项目没有关系的事情上，人生啊，就是这样的不断浪费和挥霍。 目前的构架是 daemon 层 负责把自己作为一个守护进程需要的一些操作和维护 net 层 自己维护一个client池子，这是底层独立的，它负责所有的IP连接，它不关心数据的实际内容 dispatch 层负责分发包，解析包，它会从net层得到一些数据，然后将他们解析后丢给相应的模块 app 层  聊天，桌游之类等。如何和client对接我还没想好。应该是重客户端的模式吧，服务器端只做一些轻量级的数据维护。 这个需要项目构架师2B方同志想。我就不浪费脑细胞了。 &#160; 源代码文件夹结构还要重新划分一下才会比较好的样子，哼哼哼哼 现在的进度是，server端已经可以自己维护一个pool来应答所有connect的内容（目前只是echo回去而已） 如果为了迅速建立聊天室效果，只需要将所有connect client来的消息丢到其它的client里面群发就可以了，这个很简单，只需要大约1小时就可以改好。 不过这样做实在是和设计构架有些冲突（这写法太差了） 所以还是等构架师2B方同学先丢个Client模拟器来玩玩吧 对了，我现在用的是TCPUDPDbg工具来当Client端模拟调式的。这个工具还不错，可以同时模拟多个Client，可以指定端口，IP包类型，数据内容，还显示接受到的数据。]]></description>
			<content:encoded><![CDATA[<p>2B方说：我热了，我要做个桌面游戏，CS结构+Linux服务器</p>
<p>我说：不靠谱啊，妥妥的会灭</p>
<p>2B方说：一起2就不是2了</p>
<p>我想：那得加个B了。</p>
<p>&nbsp;</p>
<p>Linux下面写代码，没试过。</p>
<p>第一次选了Geany，小巧，轻便，不过确实功能不够丰富，但是以目前的简单应用来说还是可以应付的。</p>
<p>网络库用了livevent，嗯，不错，挺好的。</p>
<p>下面要设计一下分层模块，然后封出所有的层次处理分支，然后套用一下数据结构的接口，基本就没我啥事了。</p>
<p>对了，数据库，我还没想好要怎么处理。</p>
<p>其实满多SQL的都要放到Server端，我好像有SQL厌烦症了。</p>
<p>公司不能访问https，不能用svn。我得把服务器装一下，因为服务器是可以用git的，也许可以改一下port让它也可以使用svn。</p>
<p>我现在是用笔记本玩的。看来还是有很多精力要花在和项目没有关系的事情上，人生啊，就是这样的不断浪费和挥霍。</p>
<p>目前的构架是</p>
<p>daemon 层 负责把自己作为一个守护进程需要的一些操作和维护</p>
<p>net 层 自己维护一个client池子，这是底层独立的，它负责所有的IP连接，它不关心数据的实际内容</p>
<p>dispatch 层负责分发包，解析包，它会从net层得到一些数据，然后将他们解析后丢给相应的模块</p>
<p>app 层  聊天，桌游之类等。如何和client对接我还没想好。应该是重客户端的模式吧，服务器端只做一些轻量级的数据维护。</p>
<h1><span style="color: #ff0000;"><strong>这个需要项目构架师2B方同志想。我就不浪费脑细胞了。</strong></span></h1>
<p>&nbsp;</p>
<p>源代码文件夹结构还要重新划分一下才会比较好的样子，哼哼哼哼</p>
<p>现在的进度是，server端已经可以自己维护一个pool来应答所有connect的内容（目前只是echo回去而已）</p>
<p>如果为了迅速建立聊天室效果，只需要将所有connect client来的消息丢到其它的client里面群发就可以了，这个很简单，只需要大约1小时就可以改好。</p>
<p>不过这样做实在是和设计构架有些冲突（这写法太差了）</p>
<h1><span style="color: #ff0000;">所以还是<strong>等构架师2B方同学先丢个Client模拟器来玩玩吧</strong></span></h1>
<p>对了，我现在用的是TCPUDPDbg工具来当Client端模拟调式的。这个工具还不错，可以同时模拟多个Client，可以指定端口，IP包类型，数据内容，还显示接受到的数据。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/life/84.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>眼镜宅男斗胆翻唱Love the way you lie – Eminem ft. Rihanna</title>
		<link>http://blog.tunfan.com/fun/80.html</link>
		<comments>http://blog.tunfan.com/fun/80.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 12:01:32 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[趣闻]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=80</guid>
		<description><![CDATA[手链。笔。眼睛。不停翻动的书页。。淡定中略带兴奋的表情。时而看书时而注视的眼神。后期不经意间的举杯。这一切的亮点都是陪衬，对都是浮云，一切一切都被你不停张动的嘴所散发的能照亮宇宙的光芒和能穿透时间的发音所深深的掩盖，不的不说很牛B]]></description>
			<content:encoded><![CDATA[<p>手链。笔。眼睛。不停翻动的书页。。淡定中略带兴奋的表情。时而看书时而注视的眼神。后期不经意间的举杯。这一切的亮点都是陪衬，对都是浮云，一切一切都被你不停张动的嘴所散发的能照亮宇宙的光芒和能穿透时间的发音所深深的掩盖，不的不说很牛B</p>
<p><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.youku.com/player.php/sid/XMjUxODY3NTQ0/v.swf" quality="high" align="middle" allowscriptaccess="sameDomain"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/fun/80.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WoDotA原创-捣友集锦,听解说，不要看视频就够了。绝对的霸气侧漏</title>
		<link>http://blog.tunfan.com/fun/57.html</link>
		<comments>http://blog.tunfan.com/fun/57.html#comments</comments>
		<pubDate>Thu, 07 Apr 2011 14:03:58 +0000</pubDate>
		<dc:creator>crazyvv</dc:creator>
				<category><![CDATA[趣闻]]></category>

		<guid isPermaLink="false">http://blog.tunfan.com/?p=57</guid>
		<description><![CDATA[每次看都是听解说的，根本不看神马视频]]></description>
			<content:encoded><![CDATA[<p>每次看都是听解说的，根本不看神马视频</p>
<p><embed src="http://player.youku.com/player.php/sid/XMjUwNDY4NjIw/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tunfan.com/fun/57.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

