<?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>idea&#039;s blog</title>
	<atom:link href="http://www.ideawu.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ideawu.net/blog</link>
	<description>PHP+MySQL Web开发, HTML+CSS+JavaScript, 高性能Web开发和架构设计, IT新技术和评论</description>
	<lastBuildDate>Wed, 28 Jul 2010 05:51:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>经典的&#8221;服务器最多65536个连接&#8221;误解</title>
		<link>http://www.ideawu.net/blog/archives/533.html</link>
		<comments>http://www.ideawu.net/blog/archives/533.html#comments</comments>
		<pubDate>Fri, 16 Jul 2010 08:44:50 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[C语言编程]]></category>
		<category><![CDATA[P2P/Network]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/533.html</guid>
		<description><![CDATA[<p>&#8220;因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接.&#8221; &#8211; 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.</p>
<p>要戳破这个错误结论, 可以从理论和实践两方面来.</p>
<h3>理论</h3>
<p>系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local ip, local port, remote ip, remote port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接. 如果不仅仅考虑TCP, 则是一个五元组, 加上协议号(TCP, UDP或者其它).<span id="more-533"></span></p>
<h3>实践</h3>
<p>服务器绑定一个ip:port, 然后accept连接, 所有accept的连接使用的本地地址也是同样的ip:port.</p>
<h3>扩展内容</h3>
<p>如果某个客户端向同一个TCP端点(ip:port)发起主动连接, 那么每一条连接都必须使用不同的本地TCP端点, 如果客户端只有一个IP则是使用不同的本地端口, 该端口的范围在*nix系统上的一个例子是32768到61000, 可以通过如下命令查看:</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000
</pre>
<p>也就是说, 一个客户端连接同一个服务器(比如进行压力测试), 最多可以发起30000个左右的连接.</p>
<p>TCP客户端(TCP的主动发起者)可以在同一ip:port上向不同的服务器发起主动连接, 只需在bind之前对socket设置SO_REUSEADDR选项.</p>
<p>系统支持的最大打开文件描述符数(包括socket连接):</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# cat /proc/sys/fs/file-max
580382
</pre>
<p>单个进程所能打开的最大文件描述符数:</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# ulimit -n
1024
</pre>
<h3>结论</h3>
<p>无论是对于服务器还是客户端, 认为&#8221;一台机器最多建立65536个TCP连接&#8221;是没有根据的, 理论上远远超过这个值.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/246.html' rel='bookmark' title='Permanent Link: 对P2P应用不友好的NAT'>对P2P应用不友好的NAT</a></li>
<li><a href='http://www.ideawu.net/blog/archives/516.html' rel='bookmark' title='Permanent Link: 连连看游戏开发实践(1) &#8211; 算法'>连连看游戏开发实践(1) &#8211; 算法</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/229.html' rel='bookmark' title='Permanent Link: P2P穿透NAT的思路'>P2P穿透NAT的思路</a></li>
<li><a href='http://www.ideawu.net/blog/archives/173.html' rel='bookmark' title='Permanent Link: 在Linux安装Eclipse'>在Linux安装Eclipse</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/533.html" title="经典的&#8221;服务器最多65536个连接&#8221;误解">经典的&#8221;服务器最多65536个连接&#8221;误解</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>&#8220;因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接.&#8221; &#8211; 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.</p>
<p>要戳破这个错误结论, 可以从理论和实践两方面来.</p>
<h3>理论</h3>
<p>系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local ip, local port, remote ip, remote port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接. 如果不仅仅考虑TCP, 则是一个五元组, 加上协议号(TCP, UDP或者其它).<span id="more-533"></span></p>
<h3>实践</h3>
<p>服务器绑定一个ip:port, 然后accept连接, 所有accept的连接使用的本地地址也是同样的ip:port.</p>
<h3>扩展内容</h3>
<p>如果某个客户端向同一个TCP端点(ip:port)发起主动连接, 那么每一条连接都必须使用不同的本地TCP端点, 如果客户端只有一个IP则是使用不同的本地端口, 该端口的范围在*nix系统上的一个例子是32768到61000, 可以通过如下命令查看:</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000
</pre>
<p>也就是说, 一个客户端连接同一个服务器(比如进行压力测试), 最多可以发起30000个左右的连接.</p>
<p>TCP客户端(TCP的主动发起者)可以在同一ip:port上向不同的服务器发起主动连接, 只需在bind之前对socket设置SO_REUSEADDR选项.</p>
<p>系统支持的最大打开文件描述符数(包括socket连接):</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# cat /proc/sys/fs/file-max
580382
</pre>
<p>单个进程所能打开的最大文件描述符数:</p>
<pre>
[root@<a href="http://www.benegg.com/">benegg.com</a> ~]# ulimit -n
1024
</pre>
<h3>结论</h3>
<p>无论是对于服务器还是客户端, 认为&#8221;一台机器最多建立65536个TCP连接&#8221;是没有根据的, 理论上远远超过这个值.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/246.html' rel='bookmark' title='Permanent Link: 对P2P应用不友好的NAT'>对P2P应用不友好的NAT</a></li>
<li><a href='http://www.ideawu.net/blog/archives/516.html' rel='bookmark' title='Permanent Link: 连连看游戏开发实践(1) &#8211; 算法'>连连看游戏开发实践(1) &#8211; 算法</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/229.html' rel='bookmark' title='Permanent Link: P2P穿透NAT的思路'>P2P穿透NAT的思路</a></li>
<li><a href='http://www.ideawu.net/blog/archives/173.html' rel='bookmark' title='Permanent Link: 在Linux安装Eclipse'>在Linux安装Eclipse</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/533.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>典型的中国俗小说</title>
		<link>http://www.ideawu.net/blog/archives/532.html</link>
		<comments>http://www.ideawu.net/blog/archives/532.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:08:48 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/532.html</guid>
		<description><![CDATA[<p>中国的当代小说, 最缺少的是西方戏剧的那种艺术元素, 即使和&#8221;红楼梦&#8221;"儒林外史&#8221;, 甚至是&#8221;诗经&#8221;中的故事相比, 也能一眼看出俗不可耐. 所以, 中国不缺少优秀小说, 中国人也不是无法写优秀的小说.</p>
<p>古人就认为文艺作品要雅俗共赏, 但当代的小说只有&#8221;俗&#8221;, 以至于俗得去模仿录影机. 现实人物说的话一字不差的照抄(或者模仿得一字不差). 这种所谓追求&#8221;真&#8221;的做法, 完全丢弃了艺术的&#8221;幻&#8221;.</p>
<p>现在, 我要拿一段某中国作家的代表其最高水平的小说的开头, 来和莫泊桑的一部小说中的开头来比较. 该中国作家事实上无法和莫泊桑相提并论, 本文仅仅是两段文字的比较.<br />
<span id="more-532"></span></p>
<blockquote><p>
火车慢慢停下。这又是一个全新的地方。</p>
<p>地方不似商品，全新总是不好。虽然中国每地各有不同，但是火车站是一样的乱。火车再往前，缓缓穿过一片棚户区。透过绿色玻璃，时间如同往回走。头上一架飞机飞过，硕大的国航标志在我眼前划过。国航还没有坠过机呢，我想，这真是信心保障。其实也不一定，坠机是一定会有的事情，未来已经安排好，只是还没有发生，所以每一批坐国航飞机的人只是在无限期地逼近这个时刻而已。</p>
<p>当务之急就是要找到组织。必须打一个公用电话。我绕火车站一圈，发现所有的公用电话亭都被摧毁。情况最好的也仅仅是亭在电话已不存，还不如把玻璃漆黑了改成公用厕所。迫不得已只好在路边找了一家杂货铺，铺里的电话旁边写着：</p>
<p>IP电话，长途电话三角一分钟。</p>
<p>我上去，说：“我不打长途，我打这城里的电话号码。”</p>
<p>老板利索地掏出一部移动电话，说：“用这个，这个是好灵通。”</p>
<p>我问：“好使不好使？”
</p></blockquote>
<p>可以看出, 这段文字描述的, 就是街头巷尾, 卖菜市场, 乡野村夫, 市井小民一天到晚所说所做的. 一个大人, 用小学生的词汇和小学生的笔法, 写了一段文字. 特别是第二段中的&#8221;地方不似商品, 全新总是不好&#8221;, 这种句式, 这个&#8221;总是&#8221;一词, 表现了典型的自我感觉良好的中国当代文人的经典俗气. 不仅胡言乱语, 乱扯作者随意想到的&#8221;感悟&#8221;, 而且稚气未脱.</p>
<p>而再看莫泊桑的文字:</p>
<blockquote><p>
雅娜打好行装，走到窗口张望，雨还是没有停。</p>
<p>大雨下了一整夜，敲打着玻璃窗和房顶。天空低沉，装满了雨水，仿佛涨破了，雨水倾泻到大地上；大地像糖一般溶化了，变成一片泥浆。不时刮过阵风，送来一股闷热。阴沟的水漫出来，哗哗流淌，灌满了行人绝迹的街道。临街的房舍海绵似的吸足了水分，从地窖到顶楼的墙壁都湿透了。</p>
<p>雅娜昨天出了修道院，这一生总算自由了，要及时享受她梦想已久的各种幸福。从清晨起，她就不厌其烦地观望天色，惟恐天气不放晴，父亲就不肯动身。雅娜忽然发现忘了把日历放进旅行包里，于是她从墙上摘下小小的月份牌。</p>
<p>月份牌的图案正中烫金印出一八一九这个年份，她拿起铅笔，划掉头四栏和每个圣徒日，一直划到五月二日，这正是她出修道院的日子。</p>
<p>&#8220;小雅娜!&#8221;门外有人叫她。</p>
<p>&#8220;进来，爸爸。&#8221;雅娜答应一声，只见她父亲走进房间。
</p></blockquote>
<p>中国近代和当作没有经典小说, 完全是由于作者太随性, 不重视思想和写作技法的修炼. 以为自己思想高人一等(实为半真半假的感情), 就用俗不可耐的词汇和语句表达出来, 像小学生作文, 没有经过艺术加工.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/532.html" title="典型的中国俗小说">典型的中国俗小说</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>中国的当代小说, 最缺少的是西方戏剧的那种艺术元素, 即使和&#8221;红楼梦&#8221;"儒林外史&#8221;, 甚至是&#8221;诗经&#8221;中的故事相比, 也能一眼看出俗不可耐. 所以, 中国不缺少优秀小说, 中国人也不是无法写优秀的小说.</p>
<p>古人就认为文艺作品要雅俗共赏, 但当代的小说只有&#8221;俗&#8221;, 以至于俗得去模仿录影机. 现实人物说的话一字不差的照抄(或者模仿得一字不差). 这种所谓追求&#8221;真&#8221;的做法, 完全丢弃了艺术的&#8221;幻&#8221;.</p>
<p>现在, 我要拿一段某中国作家的代表其最高水平的小说的开头, 来和莫泊桑的一部小说中的开头来比较. 该中国作家事实上无法和莫泊桑相提并论, 本文仅仅是两段文字的比较.<br />
<span id="more-532"></span></p>
<blockquote><p>
火车慢慢停下。这又是一个全新的地方。</p>
<p>地方不似商品，全新总是不好。虽然中国每地各有不同，但是火车站是一样的乱。火车再往前，缓缓穿过一片棚户区。透过绿色玻璃，时间如同往回走。头上一架飞机飞过，硕大的国航标志在我眼前划过。国航还没有坠过机呢，我想，这真是信心保障。其实也不一定，坠机是一定会有的事情，未来已经安排好，只是还没有发生，所以每一批坐国航飞机的人只是在无限期地逼近这个时刻而已。</p>
<p>当务之急就是要找到组织。必须打一个公用电话。我绕火车站一圈，发现所有的公用电话亭都被摧毁。情况最好的也仅仅是亭在电话已不存，还不如把玻璃漆黑了改成公用厕所。迫不得已只好在路边找了一家杂货铺，铺里的电话旁边写着：</p>
<p>IP电话，长途电话三角一分钟。</p>
<p>我上去，说：“我不打长途，我打这城里的电话号码。”</p>
<p>老板利索地掏出一部移动电话，说：“用这个，这个是好灵通。”</p>
<p>我问：“好使不好使？”
</p></blockquote>
<p>可以看出, 这段文字描述的, 就是街头巷尾, 卖菜市场, 乡野村夫, 市井小民一天到晚所说所做的. 一个大人, 用小学生的词汇和小学生的笔法, 写了一段文字. 特别是第二段中的&#8221;地方不似商品, 全新总是不好&#8221;, 这种句式, 这个&#8221;总是&#8221;一词, 表现了典型的自我感觉良好的中国当代文人的经典俗气. 不仅胡言乱语, 乱扯作者随意想到的&#8221;感悟&#8221;, 而且稚气未脱.</p>
<p>而再看莫泊桑的文字:</p>
<blockquote><p>
雅娜打好行装，走到窗口张望，雨还是没有停。</p>
<p>大雨下了一整夜，敲打着玻璃窗和房顶。天空低沉，装满了雨水，仿佛涨破了，雨水倾泻到大地上；大地像糖一般溶化了，变成一片泥浆。不时刮过阵风，送来一股闷热。阴沟的水漫出来，哗哗流淌，灌满了行人绝迹的街道。临街的房舍海绵似的吸足了水分，从地窖到顶楼的墙壁都湿透了。</p>
<p>雅娜昨天出了修道院，这一生总算自由了，要及时享受她梦想已久的各种幸福。从清晨起，她就不厌其烦地观望天色，惟恐天气不放晴，父亲就不肯动身。雅娜忽然发现忘了把日历放进旅行包里，于是她从墙上摘下小小的月份牌。</p>
<p>月份牌的图案正中烫金印出一八一九这个年份，她拿起铅笔，划掉头四栏和每个圣徒日，一直划到五月二日，这正是她出修道院的日子。</p>
<p>&#8220;小雅娜!&#8221;门外有人叫她。</p>
<p>&#8220;进来，爸爸。&#8221;雅娜答应一声，只见她父亲走进房间。
</p></blockquote>
<p>中国近代和当作没有经典小说, 完全是由于作者太随性, 不重视思想和写作技法的修炼. 以为自己思想高人一等(实为半真半假的感情), 就用俗不可耐的词汇和语句表达出来, 像小学生作文, 没有经过艺术加工.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/532.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>谈&#8221;独唱团&#8221;和韩寒的文学写作</title>
		<link>http://www.ideawu.net/blog/archives/531.html</link>
		<comments>http://www.ideawu.net/blog/archives/531.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 02:36:19 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/531.html</guid>
		<description><![CDATA[<p>文学来源于生活, 但它更是一种艺术. 如果一个作者的作品像生活一样冗余拖沓, 庸俗不堪, 那么他也只是一个低级的作家, 即使他自以为思想优越. 如果作者只是像录影机器一样流水帐式地记录, 他甚至配不上低级作家的称号.</p>
<p>假意地做偷鸡摸狗式的反对派(尤其对于中国), 是文艺青年自以为是优秀的资本. 这类作者属于梅里美所鄙弃的那种&#8221;为了愉悦公众, 剖析自己身上泛滥的半真半假的感情, 漫无节制地满足庸俗群众的低级的好奇趣味&#8221;之人.</p>
<p>高级的作者必须有超强的加工能力, 善于创造一个新世界, 这个世界超凡脱俗, 但每一个人都认为是真实的, 因为这个脱俗的世界可以在世俗世界中找到影子.</p>
<p>如何创造超凡脱俗的世界? 这便是作者的思想境界. 一本书无法超越其作者的思想, 是因为作者所创造的世界被局囿在其思想境界之内.</p>
<p>如何超凡脱俗? 只要作者有超凡脱俗的思想境界, 其作品便自然而然地具有一部分的超凡脱俗的特点, 但还需要写作技巧的补充. 空有思想, 但写作能力普通, 也无法写出优秀的作品. 写作技巧就是遣词造句能力. 首先要有丰富的词汇能力, 能从人类语言的众多词汇中找出一个简练精确地指代一个事物, 而不是像孩童和农夫那样不断地重复一两个词汇, 指手画脚, 咿呀学语, 急得满头大汗. 其次, 作者要有精练完整的造句能力, 避免庸俗的重复和排比.</p>
<p>简单地说, 如果人们评论一个作品时, 认为现实中人们不会使用像故事中的角色那样的语调, 词汇和句子来说话, 也不会像故事中角色那样做事情, 但他们相信那是真实的, 曾经存在或者将会发生, 那么这样的作品就是高级的超凡脱俗的. 相反, 如果人们评论一个作品时, 说&#8221;对, 和我邻居说的一模一样, 一字不差, 他做过这些事.&#8221;, 那么这件作品便是俗不可耐的低级作品.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/499.html' rel='bookmark' title='Permanent Link: PyPy &#8211; 吞下自己尾巴的小蟒蛇'>PyPy &#8211; 吞下自己尾巴的小蟒蛇</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/531.html" title="谈&#8221;独唱团&#8221;和韩寒的文学写作">谈&#8221;独唱团&#8221;和韩寒的文学写作</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>文学来源于生活, 但它更是一种艺术. 如果一个作者的作品像生活一样冗余拖沓, 庸俗不堪, 那么他也只是一个低级的作家, 即使他自以为思想优越. 如果作者只是像录影机器一样流水帐式地记录, 他甚至配不上低级作家的称号.</p>
<p>假意地做偷鸡摸狗式的反对派(尤其对于中国), 是文艺青年自以为是优秀的资本. 这类作者属于梅里美所鄙弃的那种&#8221;为了愉悦公众, 剖析自己身上泛滥的半真半假的感情, 漫无节制地满足庸俗群众的低级的好奇趣味&#8221;之人.</p>
<p>高级的作者必须有超强的加工能力, 善于创造一个新世界, 这个世界超凡脱俗, 但每一个人都认为是真实的, 因为这个脱俗的世界可以在世俗世界中找到影子.</p>
<p>如何创造超凡脱俗的世界? 这便是作者的思想境界. 一本书无法超越其作者的思想, 是因为作者所创造的世界被局囿在其思想境界之内.</p>
<p>如何超凡脱俗? 只要作者有超凡脱俗的思想境界, 其作品便自然而然地具有一部分的超凡脱俗的特点, 但还需要写作技巧的补充. 空有思想, 但写作能力普通, 也无法写出优秀的作品. 写作技巧就是遣词造句能力. 首先要有丰富的词汇能力, 能从人类语言的众多词汇中找出一个简练精确地指代一个事物, 而不是像孩童和农夫那样不断地重复一两个词汇, 指手画脚, 咿呀学语, 急得满头大汗. 其次, 作者要有精练完整的造句能力, 避免庸俗的重复和排比.</p>
<p>简单地说, 如果人们评论一个作品时, 认为现实中人们不会使用像故事中的角色那样的语调, 词汇和句子来说话, 也不会像故事中角色那样做事情, 但他们相信那是真实的, 曾经存在或者将会发生, 那么这样的作品就是高级的超凡脱俗的. 相反, 如果人们评论一个作品时, 说&#8221;对, 和我邻居说的一模一样, 一字不差, 他做过这些事.&#8221;, 那么这件作品便是俗不可耐的低级作品.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/499.html' rel='bookmark' title='Permanent Link: PyPy &#8211; 吞下自己尾巴的小蟒蛇'>PyPy &#8211; 吞下自己尾巴的小蟒蛇</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/531.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>TCP协议思想和技术的广泛应用</title>
		<link>http://www.ideawu.net/blog/archives/528.html</link>
		<comments>http://www.ideawu.net/blog/archives/528.html#comments</comments>
		<pubDate>Wed, 07 Jul 2010 04:16:47 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[P2P/Network]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/528.html</guid>
		<description><![CDATA[<p>TCP 协议是大量重要的网络和通讯的思想和技术的集合体. 这些思想和技术被应用在 TCP 身上, 另一方面, 学习 TCP 可以了解这些思想和技术. 通讯的思想和技术不仅仅可以应用狭义的数据通讯上, 也可以应用在广义的信息通讯上, 后者一般可以理解为应用层的交互协议, 例如即时通讯(IM)的聊天协议.</p>
<p>首先, TCP 协议是一种可靠的传输协议. 这种可靠性可以从两方面理解: 1. TCP 保证数据的有序性和无差错; 2. TCP 尽最大努力确保数据被接收.</p>
<p>有序和无差错可能比较好理解, 但&#8221;最大努力&#8221;则和我们一般理解的&#8221;可靠&#8221;有较大差别. 首先, TCP 尽最大努力传输数据, 一旦发送方无法保证数据传输到接收方, 它将通过断开连接(使连接失效)来声明这一点. 其次, TCP 可以明确地告诉一个数据分段已经被对方接收, 但无法准确的断定未被确认的数据没有被对方接收, 也就是说, 数据可能没有被对方接收, 也能已经被对方接收. 这种对传输失败的不确定性, 显然是对可靠性的一个重大打击. &#8220;<a href="http://en.wikipedia.org/wiki/Two_Generals'_Problem">两军队问题(Two Army Problem)</a>&#8220;说明了这一点, 事实上, 我们无法判断一个确认(ACK)是丢失了还是没有发出.</p>
<p><span id="more-528"></span>大部分可靠协议使用&#8221;带重传的正面确认(PAR, Positive Acknowledgment with Re-Transmission)&#8221;机制, TCP 协议也不例外. TCP 的如下特点可以在我们设计可靠传输协议时参考:</p>
<h3>1. 连接建立</h3>
<p>连接的建立是面向连接的协议所必须的. 连接建立的过程双方可进行某些变量的协商, 如序号. 更高层次的应用层协议还协商版本号, 处理速度等.</p>
<h3>2. 分段和序号</h3>
<p>分段也即是一般所说的&#8221;分包&#8221;, 也即消息和报文的概念. 序号是为了保证消息的有序性, 用于乱序重排.</p>
<p>分段方式有3种: 1. 固定长度; 2. 报文自声明长度; 3. 分隔符.</p>
<p>基于 TCP 这样可靠传输的协议而设计的上层协议往往不需要序号机制, 但分段大部分情况都是必须的. 序号也是确认和重传的基础. 基于 TCP 的 HTTP, FTP, SMTP 等协议, 没有序号概念. 这是因为, 底层的 TCP 已经保证了有序和数据不会丢失. 基于 TCP 设计的协议也可能需要序号机制, 使用 TCP 的协议需要序号机制的条件为: 1. 协议不依赖连接, 一次上层的会话可能经历 TCP 的断开和重连; 2. 协议不是停止等待式的&#8221;请求-响应&#8221;模式.</p>
<h3>3. 确认和重传</h3>
<p>确认和重传消息报文丢失影响的方法. 确认有立即确认和延时确认. 重传的触发时机不仅仅是超时, TCP 还设计了立即重传机制.</p>
<h3>4. 滑动窗口</h3>
<p>简单的停止等待机制是一种退化了的滑动窗口. TCP 的最大传输速度是 wnd_size/rtt, 因为 RTT 一般主要受物理条件影响, 所以通过增加窗口大小来提高 TCP 的速度.</p>
<p>发送方至少有 4 个变量: snd_una, snd_nxt, snd_max, snd_wnd.</p>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg" alt="" title="tcp接收窗口示意图" width="500" height="164" class="alignnone size-full wp-image-529" /></a></p>
<p>snd_una: 未被确认的第一个序号. TCP 的 ACK 确认的是已收到的最大序号+1.<br />
snd_nxt: 下一个要进行发送(包括重传)的序号, 如果不是重传, 则与 snd_max 相等.<br />
snd_max: 下一个要进行第一次发送的序号, 即已发送的最大序号+1.<br />
snd_wnd: 窗口大小.</p>
<p>接收方至少有 2 个变量: rcv_nxt, rcv_wnd.</p>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg" alt="" title="tcp接收窗口示意图" width="500" height="164" class="alignnone size-full wp-image-529" /></a></p>
<p>rcv_nxt: 下一个要接收的序号, 也即要发送(或已发送的 ACK).<br />
rcv_wnd: 窗口大小.</p>
<h3>5. 更多</h3>
<p>拥塞控制, 流量控制, 选择ACK, 序号回绕等等, 都是可以学习的东西.</p>
<h3>关于 IM 软件的一些问题</h3>
<p>IM 的聊天协议需要面向连接吗? 以腾讯 QQ 为例, 它并没有使用应用层的面向连接机制(即会话机制), 而是发送方确保发送到中转服务器, 中转服务器确保发送到接收方.</p>
<p>腾讯的 QQ 缺少序号机制, 无法保证有序性(可完全避免). 而且缺少完善的应用层的确认和重传机制, 常常出现发送方提示发送失败, 但接收方事实上已经收到了的现象(无法完全避免但可减少出现概率到极小).</p>
<p>我认为, QQ 应该解决消息的无序性问题, 并且完善确认和重传机制. 聊天消息应该实现这些状态: 发送中, 取消中, 发送成功, 未发送.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/245.html' rel='bookmark' title='Permanent Link: 滑动窗口机制简单理解'>滑动窗口机制简单理解</a></li>
<li><a href='http://www.ideawu.net/blog/archives/281.html' rel='bookmark' title='Permanent Link: 使用流水线来实现并发'>使用流水线来实现并发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/303.html' rel='bookmark' title='Permanent Link: TCP/IP 指数增长和线性增长的编程实现'>TCP/IP 指数增长和线性增长的编程实现</a></li>
<li><a href='http://www.ideawu.net/blog/archives/280.html' rel='bookmark' title='Permanent Link: 异步, 同步, 连接建立, 连接断开, 通信'>异步, 同步, 连接建立, 连接断开, 通信</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/528.html" title="TCP协议思想和技术的广泛应用">TCP协议思想和技术的广泛应用</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>TCP 协议是大量重要的网络和通讯的思想和技术的集合体. 这些思想和技术被应用在 TCP 身上, 另一方面, 学习 TCP 可以了解这些思想和技术. 通讯的思想和技术不仅仅可以应用狭义的数据通讯上, 也可以应用在广义的信息通讯上, 后者一般可以理解为应用层的交互协议, 例如即时通讯(IM)的聊天协议.</p>
<p>首先, TCP 协议是一种可靠的传输协议. 这种可靠性可以从两方面理解: 1. TCP 保证数据的有序性和无差错; 2. TCP 尽最大努力确保数据被接收.</p>
<p>有序和无差错可能比较好理解, 但&#8221;最大努力&#8221;则和我们一般理解的&#8221;可靠&#8221;有较大差别. 首先, TCP 尽最大努力传输数据, 一旦发送方无法保证数据传输到接收方, 它将通过断开连接(使连接失效)来声明这一点. 其次, TCP 可以明确地告诉一个数据分段已经被对方接收, 但无法准确的断定未被确认的数据没有被对方接收, 也就是说, 数据可能没有被对方接收, 也能已经被对方接收. 这种对传输失败的不确定性, 显然是对可靠性的一个重大打击. &#8220;<a href="http://en.wikipedia.org/wiki/Two_Generals'_Problem">两军队问题(Two Army Problem)</a>&#8220;说明了这一点, 事实上, 我们无法判断一个确认(ACK)是丢失了还是没有发出.</p>
<p><span id="more-528"></span>大部分可靠协议使用&#8221;带重传的正面确认(PAR, Positive Acknowledgment with Re-Transmission)&#8221;机制, TCP 协议也不例外. TCP 的如下特点可以在我们设计可靠传输协议时参考:</p>
<h3>1. 连接建立</h3>
<p>连接的建立是面向连接的协议所必须的. 连接建立的过程双方可进行某些变量的协商, 如序号. 更高层次的应用层协议还协商版本号, 处理速度等.</p>
<h3>2. 分段和序号</h3>
<p>分段也即是一般所说的&#8221;分包&#8221;, 也即消息和报文的概念. 序号是为了保证消息的有序性, 用于乱序重排.</p>
<p>分段方式有3种: 1. 固定长度; 2. 报文自声明长度; 3. 分隔符.</p>
<p>基于 TCP 这样可靠传输的协议而设计的上层协议往往不需要序号机制, 但分段大部分情况都是必须的. 序号也是确认和重传的基础. 基于 TCP 的 HTTP, FTP, SMTP 等协议, 没有序号概念. 这是因为, 底层的 TCP 已经保证了有序和数据不会丢失. 基于 TCP 设计的协议也可能需要序号机制, 使用 TCP 的协议需要序号机制的条件为: 1. 协议不依赖连接, 一次上层的会话可能经历 TCP 的断开和重连; 2. 协议不是停止等待式的&#8221;请求-响应&#8221;模式.</p>
<h3>3. 确认和重传</h3>
<p>确认和重传消息报文丢失影响的方法. 确认有立即确认和延时确认. 重传的触发时机不仅仅是超时, TCP 还设计了立即重传机制.</p>
<h3>4. 滑动窗口</h3>
<p>简单的停止等待机制是一种退化了的滑动窗口. TCP 的最大传输速度是 wnd_size/rtt, 因为 RTT 一般主要受物理条件影响, 所以通过增加窗口大小来提高 TCP 的速度.</p>
<p>发送方至少有 4 个变量: snd_una, snd_nxt, snd_max, snd_wnd.</p>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg" alt="" title="tcp接收窗口示意图" width="500" height="164" class="alignnone size-full wp-image-529" /></a></p>
<p>snd_una: 未被确认的第一个序号. TCP 的 ACK 确认的是已收到的最大序号+1.<br />
snd_nxt: 下一个要进行发送(包括重传)的序号, 如果不是重传, 则与 snd_max 相等.<br />
snd_max: 下一个要进行第一次发送的序号, 即已发送的最大序号+1.<br />
snd_wnd: 窗口大小.</p>
<p>接收方至少有 2 个变量: rcv_nxt, rcv_wnd.</p>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/07/tcp接收窗口示意图.jpg" alt="" title="tcp接收窗口示意图" width="500" height="164" class="alignnone size-full wp-image-529" /></a></p>
<p>rcv_nxt: 下一个要接收的序号, 也即要发送(或已发送的 ACK).<br />
rcv_wnd: 窗口大小.</p>
<h3>5. 更多</h3>
<p>拥塞控制, 流量控制, 选择ACK, 序号回绕等等, 都是可以学习的东西.</p>
<h3>关于 IM 软件的一些问题</h3>
<p>IM 的聊天协议需要面向连接吗? 以腾讯 QQ 为例, 它并没有使用应用层的面向连接机制(即会话机制), 而是发送方确保发送到中转服务器, 中转服务器确保发送到接收方.</p>
<p>腾讯的 QQ 缺少序号机制, 无法保证有序性(可完全避免). 而且缺少完善的应用层的确认和重传机制, 常常出现发送方提示发送失败, 但接收方事实上已经收到了的现象(无法完全避免但可减少出现概率到极小).</p>
<p>我认为, QQ 应该解决消息的无序性问题, 并且完善确认和重传机制. 聊天消息应该实现这些状态: 发送中, 取消中, 发送成功, 未发送.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/245.html' rel='bookmark' title='Permanent Link: 滑动窗口机制简单理解'>滑动窗口机制简单理解</a></li>
<li><a href='http://www.ideawu.net/blog/archives/281.html' rel='bookmark' title='Permanent Link: 使用流水线来实现并发'>使用流水线来实现并发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/303.html' rel='bookmark' title='Permanent Link: TCP/IP 指数增长和线性增长的编程实现'>TCP/IP 指数增长和线性增长的编程实现</a></li>
<li><a href='http://www.ideawu.net/blog/archives/280.html' rel='bookmark' title='Permanent Link: 异步, 同步, 连接建立, 连接断开, 通信'>异步, 同步, 连接建立, 连接断开, 通信</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/528.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于唐骏学历造假</title>
		<link>http://www.ideawu.net/blog/archives/527.html</link>
		<comments>http://www.ideawu.net/blog/archives/527.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 15:21:21 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/527.html</guid>
		<description><![CDATA[<p>关于&#8221;唐骏造假&#8221;这件事, 我们暂且不要太快下结论, 也不要过快&#8221;顿悟&#8221;, 并根据由此悟出的道理改变自己的人生规划. 虽然在这件事情上, 我们会感到震惊, 悲哀, 无奈, 幡然醒悟&#8230; 我们应该把这件事当作人生中要遇到的无数事情中的一件, 仔细观察, 从中学习.</p>
<p>唐骏曾经是一个与李开复齐名的成功人士, 是很多人的榜样. 榜样总是遥远的, 但很多事情并不像每一个人所想的和所看到的. 一千个读者就有一千个哈姆雷特, 即使是同一个普通人, 一千个认识他的人心中也有一千个他.</p>
<p>根据方舟子给出的信息和唐骏闪烁其词的回应, 我认为唐骏的学历确实造假, 而且曾经让人心潮澎湃的几项发明也是子虚乌有. 从唐骏的身家和他的身份来看, 他是成功的, 但他造假的行为必为自己带来苦果.</p>
<p>有人说:&#8221;既然唐骏是一个善钻研却名不副实的人, 为何其前几任乃至现任雇主都不揭穿他呢？这便是老板的苦恼了：要揭穿自己请的职业经理人有问题, 就否定了自己当初的选择, 自打嘴巴会很难堪；而且会让别的有缺陷的人才不敢给你打工, 也会让舆论觉得你没有涵养, 不给人活路, 所以只能哑巴吃黄连了.&#8221;</p>
<p>唐骏说:&#8221;我去盛大的时候, 陈天桥就跟他说, 盛大现在最需要人才, 微软是人才最多的地方, 你去挖4、5个. 我知道他本意一定是好的, 可我就是一个人都不带, 连秘书都不带. 他当时很不解——难道你不喜欢盛大, 为什么不愿意挖人来盛大？还是你挖不过人来？我说, 真的我们盛大不需要挖, 我们盛大很多优秀的人才, 完全可以利用盛大的人才走完事业发展的历程. &#8221; 有人觉得, 唐骏其实一个微软的人也不敢带, 因为微软的人已经知道他的底细了.</p>
<p>我们还能从&#8221;唐骏造假&#8221;事件中学到更多.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/523.html' rel='bookmark' title='Permanent Link: 他们为什么恨Twitter &#8211; Twitter四大原罪'>他们为什么恨Twitter &#8211; Twitter四大原罪</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
<li><a href='http://www.ideawu.net/blog/archives/294.html' rel='bookmark' title='Permanent Link: 今年IT相关的大学本科生就业形势非常好!'>今年IT相关的大学本科生就业形势非常好!</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/527.html" title="关于唐骏学历造假">关于唐骏学历造假</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>关于&#8221;唐骏造假&#8221;这件事, 我们暂且不要太快下结论, 也不要过快&#8221;顿悟&#8221;, 并根据由此悟出的道理改变自己的人生规划. 虽然在这件事情上, 我们会感到震惊, 悲哀, 无奈, 幡然醒悟&#8230; 我们应该把这件事当作人生中要遇到的无数事情中的一件, 仔细观察, 从中学习.</p>
<p>唐骏曾经是一个与李开复齐名的成功人士, 是很多人的榜样. 榜样总是遥远的, 但很多事情并不像每一个人所想的和所看到的. 一千个读者就有一千个哈姆雷特, 即使是同一个普通人, 一千个认识他的人心中也有一千个他.</p>
<p>根据方舟子给出的信息和唐骏闪烁其词的回应, 我认为唐骏的学历确实造假, 而且曾经让人心潮澎湃的几项发明也是子虚乌有. 从唐骏的身家和他的身份来看, 他是成功的, 但他造假的行为必为自己带来苦果.</p>
<p>有人说:&#8221;既然唐骏是一个善钻研却名不副实的人, 为何其前几任乃至现任雇主都不揭穿他呢？这便是老板的苦恼了：要揭穿自己请的职业经理人有问题, 就否定了自己当初的选择, 自打嘴巴会很难堪；而且会让别的有缺陷的人才不敢给你打工, 也会让舆论觉得你没有涵养, 不给人活路, 所以只能哑巴吃黄连了.&#8221;</p>
<p>唐骏说:&#8221;我去盛大的时候, 陈天桥就跟他说, 盛大现在最需要人才, 微软是人才最多的地方, 你去挖4、5个. 我知道他本意一定是好的, 可我就是一个人都不带, 连秘书都不带. 他当时很不解——难道你不喜欢盛大, 为什么不愿意挖人来盛大？还是你挖不过人来？我说, 真的我们盛大不需要挖, 我们盛大很多优秀的人才, 完全可以利用盛大的人才走完事业发展的历程. &#8221; 有人觉得, 唐骏其实一个微软的人也不敢带, 因为微软的人已经知道他的底细了.</p>
<p>我们还能从&#8221;唐骏造假&#8221;事件中学到更多.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/523.html' rel='bookmark' title='Permanent Link: 他们为什么恨Twitter &#8211; Twitter四大原罪'>他们为什么恨Twitter &#8211; Twitter四大原罪</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
<li><a href='http://www.ideawu.net/blog/archives/294.html' rel='bookmark' title='Permanent Link: 今年IT相关的大学本科生就业形势非常好!'>今年IT相关的大学本科生就业形势非常好!</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/527.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>以浏览器引擎为核心的软件架构</title>
		<link>http://www.ideawu.net/blog/archives/526.html</link>
		<comments>http://www.ideawu.net/blog/archives/526.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 02:34:22 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/526.html</guid>
		<description><![CDATA[<p>我在 <a href="http://www.ideawu.net/blog/archives/59.html">2006 年</a>的时候, 曾经提出过用 HTML/CSS 来做桌面应用程序的界面的想法, 但更早之前(2001年), 著名游戏开发者, 网易的游戏工程师<a href="http://blog.codingnow.com/">云风</a>便在其公司的&#8221;大话西游&#8221;网站游戏中应用了嵌入<a href="http://blog.codingnow.com/2008/05/passed_days_7.html">浏览器做界面</a>的方法.</p>
<p>Windows 控制面板里的&#8221;添加/删除应用程序&#8221;应该是较早的利用浏览器来做程序界面的一个程序, 当然, 微软肯定还有更早的程序. 后来的 Google Talk, 又是一个经典的利用浏览器做界面的一个软件.</p>
<p><span id="more-526"></span>通过分析, 可以发现 Google Talk(gtalk)的程序使用了 mshtml.dll 动态链接库, 这个库就是 IE 引擎. 而且, <a href="http://www.ideawu.net/blog/archives/299.html">gtalk 的界面的一部分就是纯 HTML</a>, 用户可以自己修改并生效.</p>
<p>所以说, 使用浏览器引擎作为软件的界面引擎和桌面软件整个架构的核心, 这种技术已经非常成熟了. 以浏览器引擎为核心, 其实是一种更为纯粹的 MVC, 或者说 C/S 模式. 软件界面和逻辑层的通信主要有如下几种:</p>
<h3>1. HTTP 网络通信</h3>
<p>这种方式, 不仅嵌入浏览器引擎, 而且还嵌入 Web 服务器(如果不做成单纯的 Web 应用的话). 软件界面这时成为一个重新包装了外壳的浏览器. 例如, 用户点击了&#8221;计算&#8221;按钮, 程序将向嵌入的 Web 服务器提交一个表单, 并读取服务器的计算结果显示出来.</p>
<p>这种方式并不常用, 应该它直接使用浏览器的 Web 应用没有太大区别. 网络延时会成为问题.</p>
<h3>2. 使用浏览器控件的 API</h3>
<p>浏览器控件(以 MSHTML 为例)提供了 API, 既可让浏览器中的代码(界面)调用宿主程序的代码(后端逻辑), 也可以反之. 这种接口一般就是一个函数, 比如宿主程序可能这样调用界面脚本中的 js_func 函数:</p>
<pre>
mshtml.InvokeScript('js_func', args);
</pre>
<p>而浏览器中的代码可能这样调用宿主程序中的 Add 函数:</p>
<pre>
window.external.Add(1, 2);
</pre>
<p>仅仅使用这个 API 还是太原始, 如果要做更复杂的程序, 应该自定义一套界面和逻辑的交互协议.</p>
<p>相关资料: <a href="http://cnbeta.com/articles/117703.htm">QQ腾讯2010SP1因嵌入浏览器引擎做界面导致严重漏洞</a>.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/299.html' rel='bookmark' title='Permanent Link: Google Talk 界面开发分析'>Google Talk 界面开发分析</a></li>
<li><a href='http://www.ideawu.net/blog/archives/301.html' rel='bookmark' title='Permanent Link: Google Talk Developer Home 中文翻译'>Google Talk Developer Home 中文翻译</a></li>
<li><a href='http://www.ideawu.net/blog/archives/144.html' rel='bookmark' title='Permanent Link: 使用Gaim连接Gtalk'>使用Gaim连接Gtalk</a></li>
<li><a href='http://www.ideawu.net/blog/archives/148.html' rel='bookmark' title='Permanent Link: 安装和使用Google Earth &#8211; Linux'>安装和使用Google Earth &#8211; Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/526.html" title="以浏览器引擎为核心的软件架构">以浏览器引擎为核心的软件架构</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>我在 <a href="http://www.ideawu.net/blog/archives/59.html">2006 年</a>的时候, 曾经提出过用 HTML/CSS 来做桌面应用程序的界面的想法, 但更早之前(2001年), 著名游戏开发者, 网易的游戏工程师<a href="http://blog.codingnow.com/">云风</a>便在其公司的&#8221;大话西游&#8221;网站游戏中应用了嵌入<a href="http://blog.codingnow.com/2008/05/passed_days_7.html">浏览器做界面</a>的方法.</p>
<p>Windows 控制面板里的&#8221;添加/删除应用程序&#8221;应该是较早的利用浏览器来做程序界面的一个程序, 当然, 微软肯定还有更早的程序. 后来的 Google Talk, 又是一个经典的利用浏览器做界面的一个软件.</p>
<p><span id="more-526"></span>通过分析, 可以发现 Google Talk(gtalk)的程序使用了 mshtml.dll 动态链接库, 这个库就是 IE 引擎. 而且, <a href="http://www.ideawu.net/blog/archives/299.html">gtalk 的界面的一部分就是纯 HTML</a>, 用户可以自己修改并生效.</p>
<p>所以说, 使用浏览器引擎作为软件的界面引擎和桌面软件整个架构的核心, 这种技术已经非常成熟了. 以浏览器引擎为核心, 其实是一种更为纯粹的 MVC, 或者说 C/S 模式. 软件界面和逻辑层的通信主要有如下几种:</p>
<h3>1. HTTP 网络通信</h3>
<p>这种方式, 不仅嵌入浏览器引擎, 而且还嵌入 Web 服务器(如果不做成单纯的 Web 应用的话). 软件界面这时成为一个重新包装了外壳的浏览器. 例如, 用户点击了&#8221;计算&#8221;按钮, 程序将向嵌入的 Web 服务器提交一个表单, 并读取服务器的计算结果显示出来.</p>
<p>这种方式并不常用, 应该它直接使用浏览器的 Web 应用没有太大区别. 网络延时会成为问题.</p>
<h3>2. 使用浏览器控件的 API</h3>
<p>浏览器控件(以 MSHTML 为例)提供了 API, 既可让浏览器中的代码(界面)调用宿主程序的代码(后端逻辑), 也可以反之. 这种接口一般就是一个函数, 比如宿主程序可能这样调用界面脚本中的 js_func 函数:</p>
<pre>
mshtml.InvokeScript('js_func', args);
</pre>
<p>而浏览器中的代码可能这样调用宿主程序中的 Add 函数:</p>
<pre>
window.external.Add(1, 2);
</pre>
<p>仅仅使用这个 API 还是太原始, 如果要做更复杂的程序, 应该自定义一套界面和逻辑的交互协议.</p>
<p>相关资料: <a href="http://cnbeta.com/articles/117703.htm">QQ腾讯2010SP1因嵌入浏览器引擎做界面导致严重漏洞</a>.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/299.html' rel='bookmark' title='Permanent Link: Google Talk 界面开发分析'>Google Talk 界面开发分析</a></li>
<li><a href='http://www.ideawu.net/blog/archives/301.html' rel='bookmark' title='Permanent Link: Google Talk Developer Home 中文翻译'>Google Talk Developer Home 中文翻译</a></li>
<li><a href='http://www.ideawu.net/blog/archives/144.html' rel='bookmark' title='Permanent Link: 使用Gaim连接Gtalk'>使用Gaim连接Gtalk</a></li>
<li><a href='http://www.ideawu.net/blog/archives/148.html' rel='bookmark' title='Permanent Link: 安装和使用Google Earth &#8211; Linux'>安装和使用Google Earth &#8211; Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/526.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>永恒的变化</title>
		<link>http://www.ideawu.net/blog/archives/525.html</link>
		<comments>http://www.ideawu.net/blog/archives/525.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 02:42:51 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/525.html</guid>
		<description><![CDATA[<p>当初, 奥巴马竞选美国总统时的口号是&#8221;Change&#8221;(变革), 我不以为然, 认为这口号太空泛, 你要改变什么? 现在, 我有一些新理解, 和大家分享.</p>
<p>社会是金字塔型的结构, 如果以金钱来划分, 有少数的亿万富翁, 稍微多一些的千万富翁和百万富翁, 剩下的绝大部分只是平庸的普通人. 对于千万富翁来说, 他们既希望变革, 又不希望变革. 他们希望变革, 是因为自己还不是最顶尖, 所以希望变为最顶尖的人. 他们不需要变革, 是因为他们希望能按当前的轨迹走下去, 而不是换一种社会方式.</p>
<p>而对于普通人来说, &#8220;Change&#8221;就是给他们一丝希望, 能向上升的一点希望. 虽然对于整体来说机会微乎其微, 但对个体, 一旦成功, 就是最大的机会. &#8220;Change&#8221;是一种希望, &#8220;Change&#8221;是一种必须, 一成不变和安于现状是最致命的.</p>
<p>这因为如此, 充满哲学矛盾的一句话&#8221;永远不变的东西是变化&#8221;是一个真正的真理.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/525.html" title="永恒的变化">永恒的变化</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>当初, 奥巴马竞选美国总统时的口号是&#8221;Change&#8221;(变革), 我不以为然, 认为这口号太空泛, 你要改变什么? 现在, 我有一些新理解, 和大家分享.</p>
<p>社会是金字塔型的结构, 如果以金钱来划分, 有少数的亿万富翁, 稍微多一些的千万富翁和百万富翁, 剩下的绝大部分只是平庸的普通人. 对于千万富翁来说, 他们既希望变革, 又不希望变革. 他们希望变革, 是因为自己还不是最顶尖, 所以希望变为最顶尖的人. 他们不需要变革, 是因为他们希望能按当前的轨迹走下去, 而不是换一种社会方式.</p>
<p>而对于普通人来说, &#8220;Change&#8221;就是给他们一丝希望, 能向上升的一点希望. 虽然对于整体来说机会微乎其微, 但对个体, 一旦成功, 就是最大的机会. &#8220;Change&#8221;是一种希望, &#8220;Change&#8221;是一种必须, 一成不变和安于现状是最致命的.</p>
<p>这因为如此, 充满哲学矛盾的一句话&#8221;永远不变的东西是变化&#8221;是一个真正的真理.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/310.html' rel='bookmark' title='Permanent Link: 吉他卖了'>吉他卖了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/172.html' rel='bookmark' title='Permanent Link: idea live from Shanghai'>idea live from Shanghai</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/525.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>他们为什么恨Twitter &#8211; Twitter四大原罪</title>
		<link>http://www.ideawu.net/blog/archives/523.html</link>
		<comments>http://www.ideawu.net/blog/archives/523.html#comments</comments>
		<pubDate>Wed, 23 Jun 2010 02:39:27 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/523.html</guid>
		<description><![CDATA[<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/ee_survey_twitter.gif"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/ee_survey_twitter-340x243.gif" alt="" title="ee_survey_twitter" width="300" class="alignright size-medium wp-image-522" /></a></p>
<p>在最近的一次 <a href="http://www.eetimes.com/showArticle.jhtml?articleID=225700747">EE Times 调查</a>中调查了 285 名工程师, 85% 的人表示他们根本不使用 Twitter. 超过一半的人表示&#8221;我才不关心你早餐吃了什么&#8221;, 这就是他们对 Twitter 的感觉 &#8211; Twitter 就是无聊语句的制造场所. 甚至有人把 Twitter 看作是&#8221;可笑的浪费时间和浪费电力的东西&#8221;, 或者只想对 Twitter 说&#8221;滚开&#8221;.</p>
<p>这次调查有 20% 的人明确表示, 他们极端讨厌 Twitter(HATE IT!).</p>
<p>根据<a href="http://blog.Twitter.com/2010/02/measuring-tweets.html"> Twitter 官方博客公布的信息</a>, Twitter 每日发推(信息)量已经达到了 5 千万条. 不过, 其中绝大部分是毫无意义的垃圾信息. Twitter 有四大原罪: 垃圾信息, 话痨, 自动同步, 4sq.<br />
<span id="more-523"></span></p>
<h3>1. 垃圾信息</h3>
<p>Twitter 绝对是最新最庞大的信息垃圾制造场, 它的主旨就是让你说说你在做什么. 很明显, 大部分的人都是普通人, 所有人做的大部分事都是无聊的事, 这就是 Twitter 产生大量垃圾信息的基础, 也是它的特点. 如果奥巴马说了一句&#8221;我今天早上吃了麦当劳&#8221;, 这肯定是一个新闻, 而且很可能是大新闻, 但是一个无名鼠辈说这样一句话, 对其它人来说, 除了少数几个最好的朋友, 这不是一条垃圾信息吗?</p>
<p>要想避免这样的垃圾信息, 一是要求用户不要生产垃圾(这不可能), 二是要求我们只关注我们最亲近的人(显示大部分我们关注的人都是我们意图从他/她那里获取有用信息) &#8211; 以致这些垃圾信息对我们是有用的.</p>
<h3>2. 话痨(制造大量垃圾信息者)</h3>
<p>制造垃圾信息不说, 有些用户在快速地制造大量垃圾信息! 他们不停地从嘴里连续不断地吐出垃圾. 当然, unfo 即可, 毕竟话痨只占总体用户的少数.</p>
<h3>3. 自动同步</h3>
<p>我们偶尔发现某个发了几条有意义的推, 于是关注他. 没想到, 过了没几天, 他就把他在 Google Reader Share, 新浪微博, 腾讯微博等等所有的信息全自动同步到 Twitter 上了. 这些自动同步的信息大致和机器自动产生的语句一样, 语句不通顺, 格式怪异, 带有重复的词语.</p>
<h3>4. iamat-4sq</h3>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/iamat-4sq.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/iamat-4sq.jpg" alt="" title="iamat-4sq" width="475" height="196" class="alignnone size-full wp-image-520" /></a></p>
<p>4sq 代表了新的一种趋势, 就是用户已经不愿意再制造垃圾了(仅仅对于手工制造), 他们已经开始委托给电子设备&#8221;自动地&#8221;制造垃圾了! 本来某个无名鼠辈路过西直门车站(北京每天有成百上千万人经过这个地方)是一件让人毫不关心的事情, 现在, 他们懒得告诉你这件无聊的事, 而是让设备自动的发出一条信息(可能需要他按一个按钮). 天啊! 连制造垃圾都偷懒的人, 你能指望他制造什么有用信息?!</p>
<p>如果是我们现实生活中的朋友发这种消息, 会怎么样? 你会觉得你不是在和你的朋友交流, 而是和他&#8221;派出的&#8221;自动机器人交流. 你愿意和 MSN 聊天机器人交谈吗? 对于这种在交流中的漠不关心(你和他说话, 他却转头像一边), 你会感到心里愤怒.</p>
<h3>总结</h3>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/twitter_whale.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/twitter_whale.jpg" alt="" title="twitter_whale" width="240" class="alignright size-full wp-image-521" /></a></p>
<p>让我来总结一下他们为什么讨厌 Twitter 的原因吧. 首先, Twitter 是用来制造大量垃圾信息的工具. 其次, 你试图从 Twitter 获取有用信息, 但不自爱的用户在制造有用信息的同时, 也制造大比例的垃圾信息. 除非 Twitter 制造出非常好用的垃圾过滤器(当然不是过滤用户的方式, 因为垃圾信息是个比例问题, 如果你过滤了所有的用户, 你就获取不到任何信息, 包括有用信息).</p>
<p>那么, 你不恨 Twitter 的方法只有你不使用它. 如果你还使用它, 你会恨它.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/370.html' rel='bookmark' title='Permanent Link: 开始使用Twitter'>开始使用Twitter</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/523.html" title="他们为什么恨Twitter &#8211; Twitter四大原罪">他们为什么恨Twitter &#8211; Twitter四大原罪</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/ee_survey_twitter.gif"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/ee_survey_twitter-340x243.gif" alt="" title="ee_survey_twitter" width="300" class="alignright size-medium wp-image-522" /></a></p>
<p>在最近的一次 <a href="http://www.eetimes.com/showArticle.jhtml?articleID=225700747">EE Times 调查</a>中调查了 285 名工程师, 85% 的人表示他们根本不使用 Twitter. 超过一半的人表示&#8221;我才不关心你早餐吃了什么&#8221;, 这就是他们对 Twitter 的感觉 &#8211; Twitter 就是无聊语句的制造场所. 甚至有人把 Twitter 看作是&#8221;可笑的浪费时间和浪费电力的东西&#8221;, 或者只想对 Twitter 说&#8221;滚开&#8221;.</p>
<p>这次调查有 20% 的人明确表示, 他们极端讨厌 Twitter(HATE IT!).</p>
<p>根据<a href="http://blog.Twitter.com/2010/02/measuring-tweets.html"> Twitter 官方博客公布的信息</a>, Twitter 每日发推(信息)量已经达到了 5 千万条. 不过, 其中绝大部分是毫无意义的垃圾信息. Twitter 有四大原罪: 垃圾信息, 话痨, 自动同步, 4sq.<br />
<span id="more-523"></span></p>
<h3>1. 垃圾信息</h3>
<p>Twitter 绝对是最新最庞大的信息垃圾制造场, 它的主旨就是让你说说你在做什么. 很明显, 大部分的人都是普通人, 所有人做的大部分事都是无聊的事, 这就是 Twitter 产生大量垃圾信息的基础, 也是它的特点. 如果奥巴马说了一句&#8221;我今天早上吃了麦当劳&#8221;, 这肯定是一个新闻, 而且很可能是大新闻, 但是一个无名鼠辈说这样一句话, 对其它人来说, 除了少数几个最好的朋友, 这不是一条垃圾信息吗?</p>
<p>要想避免这样的垃圾信息, 一是要求用户不要生产垃圾(这不可能), 二是要求我们只关注我们最亲近的人(显示大部分我们关注的人都是我们意图从他/她那里获取有用信息) &#8211; 以致这些垃圾信息对我们是有用的.</p>
<h3>2. 话痨(制造大量垃圾信息者)</h3>
<p>制造垃圾信息不说, 有些用户在快速地制造大量垃圾信息! 他们不停地从嘴里连续不断地吐出垃圾. 当然, unfo 即可, 毕竟话痨只占总体用户的少数.</p>
<h3>3. 自动同步</h3>
<p>我们偶尔发现某个发了几条有意义的推, 于是关注他. 没想到, 过了没几天, 他就把他在 Google Reader Share, 新浪微博, 腾讯微博等等所有的信息全自动同步到 Twitter 上了. 这些自动同步的信息大致和机器自动产生的语句一样, 语句不通顺, 格式怪异, 带有重复的词语.</p>
<h3>4. iamat-4sq</h3>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/iamat-4sq.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/iamat-4sq.jpg" alt="" title="iamat-4sq" width="475" height="196" class="alignnone size-full wp-image-520" /></a></p>
<p>4sq 代表了新的一种趋势, 就是用户已经不愿意再制造垃圾了(仅仅对于手工制造), 他们已经开始委托给电子设备&#8221;自动地&#8221;制造垃圾了! 本来某个无名鼠辈路过西直门车站(北京每天有成百上千万人经过这个地方)是一件让人毫不关心的事情, 现在, 他们懒得告诉你这件无聊的事, 而是让设备自动的发出一条信息(可能需要他按一个按钮). 天啊! 连制造垃圾都偷懒的人, 你能指望他制造什么有用信息?!</p>
<p>如果是我们现实生活中的朋友发这种消息, 会怎么样? 你会觉得你不是在和你的朋友交流, 而是和他&#8221;派出的&#8221;自动机器人交流. 你愿意和 MSN 聊天机器人交谈吗? 对于这种在交流中的漠不关心(你和他说话, 他却转头像一边), 你会感到心里愤怒.</p>
<h3>总结</h3>
<p><a href="http://www.ideawu.net/blog/wp-content/uploads/2010/06/twitter_whale.jpg"><img src="http://www.ideawu.net/blog/wp-content/uploads/2010/06/twitter_whale.jpg" alt="" title="twitter_whale" width="240" class="alignright size-full wp-image-521" /></a></p>
<p>让我来总结一下他们为什么讨厌 Twitter 的原因吧. 首先, Twitter 是用来制造大量垃圾信息的工具. 其次, 你试图从 Twitter 获取有用信息, 但不自爱的用户在制造有用信息的同时, 也制造大比例的垃圾信息. 除非 Twitter 制造出非常好用的垃圾过滤器(当然不是过滤用户的方式, 因为垃圾信息是个比例问题, 如果你过滤了所有的用户, 你就获取不到任何信息, 包括有用信息).</p>
<p>那么, 你不恨 Twitter 的方法只有你不使用它. 如果你还使用它, 你会恨它.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/370.html' rel='bookmark' title='Permanent Link: 开始使用Twitter'>开始使用Twitter</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/523.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress评论转义HTML标签</title>
		<link>http://www.ideawu.net/blog/archives/519.html</link>
		<comments>http://www.ideawu.net/blog/archives/519.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:54:47 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/519.html</guid>
		<description><![CDATA[<p>把这段代码放到 theme 里的 functions.php 文件:</p>
<pre>
function theme_pre_comment_post( $c) {
	$c['comment_content'] = htmlspecialchars($c['comment_content']);
	return $c;
}
add_filter( 'preprocess_comment', 'theme_pre_comment_post', '', 1);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/517.html' rel='bookmark' title='Permanent Link: HTTP POST using PHP cURL'>HTTP POST using PHP cURL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/219.html' rel='bookmark' title='Permanent Link: 用Javascript生成弹出窗口'>用Javascript生成弹出窗口</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/519.html" title="Wordpress评论转义HTML标签">Wordpress评论转义HTML标签</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>把这段代码放到 theme 里的 functions.php 文件:</p>
<pre>
function theme_pre_comment_post( $c) {
	$c['comment_content'] = htmlspecialchars($c['comment_content']);
	return $c;
}
add_filter( 'preprocess_comment', 'theme_pre_comment_post', '', 1);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/517.html' rel='bookmark' title='Permanent Link: HTTP POST using PHP cURL'>HTTP POST using PHP cURL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/219.html' rel='bookmark' title='Permanent Link: 用Javascript生成弹出窗口'>用Javascript生成弹出窗口</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/519.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>if-else对优化代码冗余度的反作用</title>
		<link>http://www.ideawu.net/blog/archives/518.html</link>
		<comments>http://www.ideawu.net/blog/archives/518.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 02:52:44 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/518.html</guid>
		<description><![CDATA[<p>有些程序员可能过于追求 if-else 对代码优化的效果, 却忽略了其带来的对代码清晰度的反作用. 假设这样一个功能, 根据用户的等级显示不同的页面. 如果用户的等级大于等于 5, 他能看到的东西和普通用户(等级小于5)不同, 代码如下:</p>
<pre>
echo "欢迎您, ";
if(level &gt; 5){
	echo "高级用户!";
}else{
	echo "用户!"
}
// ... 大段代码
echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
if(level &gt; 5){
	echo "审核文章!";
}else{
	echo "发表文章!"
}
echo "...";
</pre>
<p><span id="more-518"></span>我们看到, 随着功能的继续, 不断地出现 if-else, 可能是十几个. 虽然在 if-else 之外的代码得到了重用, 也即冗余度降低了, 但是, 充斥各处的判断不是也极大地影响了代码的清晰度吗?</p>
<p>如果我 copy-paste 一份公用代码(不可过于极端地反对复制粘贴), 就可以只使用一个 if-else:</p>
<pre>
if(level &gt; 5){
	echo "欢迎您, 高级用户!";
	// ... 大段代码
	echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
	echo "审核文章!";
	echo "...";
}else{
	echo "欢迎您, 用户!";
	// ... 大段代码
	echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
	echo "发表文章!";
	echo "...";
}
</pre>
<p>这样, 优化后全部的代码只有一个分支, 才是符合人思维的逻辑, 虽然代码量扩大了近一倍. 而且, &#8220;大段代码&#8221;可以封装成函数, 优化后的代码在行数和冗余度上不一定增加.</p>
<p>所以, 不要把冗余度作为代码优化的唯一条件, 更不要把 if-else 作为代码重用的唯一方法!</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/365.html' rel='bookmark' title='Permanent Link: C#环形缓冲'>C#环形缓冲</a></li>
<li><a href='http://www.ideawu.net/blog/archives/12.html' rel='bookmark' title='Permanent Link: DOS常用命令全攻略'>DOS常用命令全攻略</a></li>
<li><a href='http://www.ideawu.net/blog/archives/505.html' rel='bookmark' title='Permanent Link: PHP解析HTML和loadHTML乱码'>PHP解析HTML和loadHTML乱码</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/518.html" title="if-else对优化代码冗余度的反作用">if-else对优化代码冗余度的反作用</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>有些程序员可能过于追求 if-else 对代码优化的效果, 却忽略了其带来的对代码清晰度的反作用. 假设这样一个功能, 根据用户的等级显示不同的页面. 如果用户的等级大于等于 5, 他能看到的东西和普通用户(等级小于5)不同, 代码如下:</p>
<pre>
echo "欢迎您, ";
if(level &gt; 5){
	echo "高级用户!";
}else{
	echo "用户!"
}
// ... 大段代码
echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
if(level &gt; 5){
	echo "审核文章!";
}else{
	echo "发表文章!"
}
echo "...";
</pre>
<p><span id="more-518"></span>我们看到, 随着功能的继续, 不断地出现 if-else, 可能是十几个. 虽然在 if-else 之外的代码得到了重用, 也即冗余度降低了, 但是, 充斥各处的判断不是也极大地影响了代码的清晰度吗?</p>
<p>如果我 copy-paste 一份公用代码(不可过于极端地反对复制粘贴), 就可以只使用一个 if-else:</p>
<pre>
if(level &gt; 5){
	echo "欢迎您, 高级用户!";
	// ... 大段代码
	echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
	echo "审核文章!";
	echo "...";
}else{
	echo "欢迎您, 用户!";
	// ... 大段代码
	echo '&lt;a href="#"&gt;个人信息&lt;/a&gt;';
	echo "发表文章!";
	echo "...";
}
</pre>
<p>这样, 优化后全部的代码只有一个分支, 才是符合人思维的逻辑, 虽然代码量扩大了近一倍. 而且, &#8220;大段代码&#8221;可以封装成函数, 优化后的代码在行数和冗余度上不一定增加.</p>
<p>所以, 不要把冗余度作为代码优化的唯一条件, 更不要把 if-else 作为代码重用的唯一方法!</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/365.html' rel='bookmark' title='Permanent Link: C#环形缓冲'>C#环形缓冲</a></li>
<li><a href='http://www.ideawu.net/blog/archives/12.html' rel='bookmark' title='Permanent Link: DOS常用命令全攻略'>DOS常用命令全攻略</a></li>
<li><a href='http://www.ideawu.net/blog/archives/505.html' rel='bookmark' title='Permanent Link: PHP解析HTML和loadHTML乱码'>PHP解析HTML和loadHTML乱码</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/518.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>HTTP POST using PHP cURL</title>
		<link>http://www.ideawu.net/blog/archives/517.html</link>
		<comments>http://www.ideawu.net/blog/archives/517.html#comments</comments>
		<pubDate>Mon, 21 Jun 2010 06:44:40 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[HTTP]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/517.html</guid>
		<description><![CDATA[<pre>
function http_post($url, $data){
	$ch = curl_init($url) ;
	curl_setopt($ch, CURLOPT_POST, 1) ;
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
	$result = curl_exec($ch) ;
	curl_close($ch) ;

	return $result;
}
</pre>
<p>获取 HTTP 请求的首部:</p>
<pre>
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$result = curl_exec($ch) ;
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/264.html' rel='bookmark' title='Permanent Link: 通过 HTTP POST 发送二进制数据'>通过 HTTP POST 发送二进制数据</a></li>
<li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/517.html" title="HTTP POST using PHP cURL">HTTP POST using PHP cURL</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<pre>
function http_post($url, $data){
	$ch = curl_init($url) ;
	curl_setopt($ch, CURLOPT_POST, 1) ;
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
	$result = curl_exec($ch) ;
	curl_close($ch) ;

	return $result;
}
</pre>
<p>获取 HTTP 请求的首部:</p>
<pre>
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$result = curl_exec($ch) ;
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/264.html' rel='bookmark' title='Permanent Link: 通过 HTTP POST 发送二进制数据'>通过 HTTP POST 发送二进制数据</a></li>
<li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/517.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>连连看游戏开发实践(1) &#8211; 算法</title>
		<link>http://www.ideawu.net/blog/archives/516.html</link>
		<comments>http://www.ideawu.net/blog/archives/516.html#comments</comments>
		<pubDate>Fri, 11 Jun 2010 09:01:13 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[C语言编程]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/516.html</guid>
		<description><![CDATA[<p>从本篇文章开始, 我将写一序列游戏开发的文章, 讲述做一个连连看游戏的例子, 既锻炼自己, 也帮助别人. 最终, 游戏会加上网络功能.</p>
<h2>连连看算法</h2>
<p><a href="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b395.jpg"><img src="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b395-300x179.jpg" alt="" title="连连看算法" width="300" height="179" class="alignnone size-medium wp-image-35" /></a></p>
<p>如图, 为了找出A, B两点之间的连接路径, 首先过这两点作4条线段, 线段的两端便是地图边缘, 两条与横坐标轴平行, 另两条与纵坐标轴平行. 先考虑与横坐标轴平行的两条.</p>
<p>在两条线段上各取一点C和D, 此两点处在一条与纵坐标轴平行的直线上. 那么, ACDB这条路径便是一条可能的A, B两点的连通路径.</p>
<p><span id="more-516"></span>C, D两点在两条线段上移动, 直到找出一条有效的连通路径, 或者最终得出结论不存在这样的路径.</p>
<p>按同样的方式在与纵坐标轴平行的两条线段上查找.</p>
<h2>算法优化</h2>
<p>两点的连通路径应该是最短的, 所以, 查找从A, B所处的矩形的中线开始, 同时从上下左右4个方面查找, 可以找到看起来最短的连通路径.</p>
<p><a href="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b3952.jpg"><img src="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b3952-300x179.jpg" alt="" title="连连看算法图形演示" width="300" height="179" class="alignnone size-medium wp-image-36" /></a></p>
<h2>连连看算法的编程语言实现</h2>
<p>程序创建一个方形的格子地图, 并随机在格子上生成障碍. 用户输入想要连接的A, B两点, 然后系统输出两点的连通线(A, C, D, B).</p>
<p>算法作如下几个判断:</p>
<p>* A, B不是同一点.<br />
* A, B两点的图形相同.<br />
* AC, CD, DB 3条线段连通, 检查时不包括线段端点.<br />
* 如果C, D不是与A, B重合, C, D必须无障碍.</p>
<p>判断停止条件:</p>
<p>* C, D任意一点到达屏幕边界.</p>
<p>程序执行效果图:</p>
<pre>
    0  1  2  3  4
  +---------------+
0 | 1  1     3  2 | 0
1 | 3        1  1 | 1
2 | 3           3 | 2
3 | 3        1    | 3
4 |    1        1 | 4
  +---------------+
    0  1  2  3  4
input point(x1,y1 x2,y2): <b>3,0 0,3</b>
path: (3,0) - (3,2) - (0,2) - (0,3)
    0  1  2  3  4
  +---------------+
0 | 1  1  *  <b>@</b>  2 | 0
1 | 3     *  1  1 | 1
2 | 3     *     3 | 2
3 | <b>@</b>  *  *  1    | 3
4 |    1        1 | 4
  +---------------+
    0  1  2  3  4
</pre>
<p>本篇文章介绍了一个命令行下的连连看游戏程序, 下一篇文章将给连连看做一个图形外壳, 用鼠标来选择两点.</p>
<p>示例源码下载: <a href='http://www.benegg.com/game/wp-content/uploads/2009/05/llk.zip'>llk.zip: 命令行下的连连看游戏源码</a>, 包含Windows下的可执行程序.</p>
<p>原发在: <a href="http://www.benegg.com/game/archives/34.html">http://www.benegg.com/game/archives/34.html</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/116.html' rel='bookmark' title='Permanent Link: 告诉我应该选择哪一个Linux发行版'>告诉我应该选择哪一个Linux发行版</a></li>
<li><a href='http://www.ideawu.net/blog/archives/263.html' rel='bookmark' title='Permanent Link: PHP str_replace 函数的参数设计不合理之处'>PHP str_replace 函数的参数设计不合理之处</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/87.html' rel='bookmark' title='Permanent Link: Debian Linux 系统提速'>Debian Linux 系统提速</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/516.html" title="连连看游戏开发实践(1) &#8211; 算法">连连看游戏开发实践(1) &#8211; 算法</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>从本篇文章开始, 我将写一序列游戏开发的文章, 讲述做一个连连看游戏的例子, 既锻炼自己, 也帮助别人. 最终, 游戏会加上网络功能.</p>
<h2>连连看算法</h2>
<p><a href="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b395.jpg"><img src="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b395-300x179.jpg" alt="" title="连连看算法" width="300" height="179" class="alignnone size-medium wp-image-35" /></a></p>
<p>如图, 为了找出A, B两点之间的连接路径, 首先过这两点作4条线段, 线段的两端便是地图边缘, 两条与横坐标轴平行, 另两条与纵坐标轴平行. 先考虑与横坐标轴平行的两条.</p>
<p>在两条线段上各取一点C和D, 此两点处在一条与纵坐标轴平行的直线上. 那么, ACDB这条路径便是一条可能的A, B两点的连通路径.</p>
<p><span id="more-516"></span>C, D两点在两条线段上移动, 直到找出一条有效的连通路径, 或者最终得出结论不存在这样的路径.</p>
<p>按同样的方式在与纵坐标轴平行的两条线段上查找.</p>
<h2>算法优化</h2>
<p>两点的连通路径应该是最短的, 所以, 查找从A, B所处的矩形的中线开始, 同时从上下左右4个方面查找, 可以找到看起来最短的连通路径.</p>
<p><a href="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b3952.jpg"><img src="http://www.benegg.com/game/wp-content/uploads/2009/05/e8bf9ee8bf9ee79c8be7ae97e6b3952-300x179.jpg" alt="" title="连连看算法图形演示" width="300" height="179" class="alignnone size-medium wp-image-36" /></a></p>
<h2>连连看算法的编程语言实现</h2>
<p>程序创建一个方形的格子地图, 并随机在格子上生成障碍. 用户输入想要连接的A, B两点, 然后系统输出两点的连通线(A, C, D, B).</p>
<p>算法作如下几个判断:</p>
<p>* A, B不是同一点.<br />
* A, B两点的图形相同.<br />
* AC, CD, DB 3条线段连通, 检查时不包括线段端点.<br />
* 如果C, D不是与A, B重合, C, D必须无障碍.</p>
<p>判断停止条件:</p>
<p>* C, D任意一点到达屏幕边界.</p>
<p>程序执行效果图:</p>
<pre>
    0  1  2  3  4
  +---------------+
0 | 1  1     3  2 | 0
1 | 3        1  1 | 1
2 | 3           3 | 2
3 | 3        1    | 3
4 |    1        1 | 4
  +---------------+
    0  1  2  3  4
input point(x1,y1 x2,y2): <b>3,0 0,3</b>
path: (3,0) - (3,2) - (0,2) - (0,3)
    0  1  2  3  4
  +---------------+
0 | 1  1  *  <b>@</b>  2 | 0
1 | 3     *  1  1 | 1
2 | 3     *     3 | 2
3 | <b>@</b>  *  *  1    | 3
4 |    1        1 | 4
  +---------------+
    0  1  2  3  4
</pre>
<p>本篇文章介绍了一个命令行下的连连看游戏程序, 下一篇文章将给连连看做一个图形外壳, 用鼠标来选择两点.</p>
<p>示例源码下载: <a href='http://www.benegg.com/game/wp-content/uploads/2009/05/llk.zip'>llk.zip: 命令行下的连连看游戏源码</a>, 包含Windows下的可执行程序.</p>
<p>原发在: <a href="http://www.benegg.com/game/archives/34.html">http://www.benegg.com/game/archives/34.html</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/116.html' rel='bookmark' title='Permanent Link: 告诉我应该选择哪一个Linux发行版'>告诉我应该选择哪一个Linux发行版</a></li>
<li><a href='http://www.ideawu.net/blog/archives/263.html' rel='bookmark' title='Permanent Link: PHP str_replace 函数的参数设计不合理之处'>PHP str_replace 函数的参数设计不合理之处</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/87.html' rel='bookmark' title='Permanent Link: Debian Linux 系统提速'>Debian Linux 系统提速</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/516.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>重设计, 轻编码</title>
		<link>http://www.ideawu.net/blog/archives/515.html</link>
		<comments>http://www.ideawu.net/blog/archives/515.html#comments</comments>
		<pubDate>Tue, 08 Jun 2010 01:03:41 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/515.html</guid>
		<description><![CDATA[<p>软件项目的开发过程中, 要重设计, 轻编码. 这并不代表先设计, 后编码, 也不是要贬低程序员的地位. 即使是你一个人在负责一个项目的设计和编码工作, 你也应该重设计, 轻编码 &#8211; 当你设计的时候, 你会看低编码的你自己吗?</p>
<p>有些同学提到, &#8220;重设计, 轻编码&#8221;, 会使项目的完成时间遥遥无期, 因为设计往往想不到一些重要的细节. 不, 你犯了一个错误, 你把这句话看成了&#8221;先设计, 后编码&#8221;.</p>
<p>有些同学认为, &#8220;重设计, 轻编码&#8221;, 会使程序员变成没有创造力的机械人, 这不好. 且不说, 不是每一个项目都需要所有人的创造力, 事实上大部分人在大部分时间做的项目谈何创造? 而&#8221;使程序员变成没有创造力&#8221;这个想法无非是自卑的受迫害臆想狂症状.<br />
<span id="more-515"></span></p>
<h3>设计第一步: 需求分析</h3>
<p>需求分析的目的是把需求方的文档, 转换成程序员理解的文档. 需求方的文档可能一字也没有谈到程序, 但需求分析应该涉及到系统的可能样子, 包括大致界面, 用例. 需求分析和总体设计是同时进行的.</p>
<h3>设计第二步: 详细设计</h3>
<p>详细设计完全是给程序员看的, 越详细越好. 详细设计的最终目的是, 让最普通水平的程序员, 也能照着文档, 把文字翻译成代码. 当然, 实际开发中会遇到少数几个技术难题需要攻关. 除了理所当然的金字塔结构, 程序员也应该参与详细设计工作. 如果你不想当那个最普通水平的程序员, 你就应该参与进来. 塔尖的负责人也有义务提供这种机会.</p>
<h3>哪些项目不需要&#8221;重设计, 轻编码&#8221;?</h3>
<p>所有项目都应该遵循&#8221;重设计, 轻编码&#8221;原则, 即使是那些可能带来革命性效果的探索型项目. &#8220;重设计, 轻编码&#8221;既然不是&#8221;先设计, 后编码&#8221;, 所以也不是&#8221;一次设计, 一次编码&#8221;, 也可能是个迭代的过程.</p>
<p>即使是 Linux 内核早期这种几乎完全工程型的项目, 也是因为有了 Unix, Minix, 无法教材和原理分析所提供的设计基础. Linux 同样沾了别人设计的光, 多亏有了前人的设计.</p>
<p>如果你没有理解到&#8221;重设计&#8221;的极度重要性, 那么你只能是一个编码者.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/141.html' rel='bookmark' title='Permanent Link: Linux发行版的选择'>Linux发行版的选择</a></li>
<li><a href='http://www.ideawu.net/blog/archives/432.html' rel='bookmark' title='Permanent Link: 如何为Linux生成和打上patch'>如何为Linux生成和打上patch</a></li>
<li><a href='http://www.ideawu.net/blog/archives/174.html' rel='bookmark' title='Permanent Link: 安装和使用Skype for Linux'>安装和使用Skype for Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/231.html' rel='bookmark' title='Permanent Link: 转到 Windows 平台的事需要考虑'>转到 Windows 平台的事需要考虑</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/515.html" title="重设计, 轻编码">重设计, 轻编码</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>软件项目的开发过程中, 要重设计, 轻编码. 这并不代表先设计, 后编码, 也不是要贬低程序员的地位. 即使是你一个人在负责一个项目的设计和编码工作, 你也应该重设计, 轻编码 &#8211; 当你设计的时候, 你会看低编码的你自己吗?</p>
<p>有些同学提到, &#8220;重设计, 轻编码&#8221;, 会使项目的完成时间遥遥无期, 因为设计往往想不到一些重要的细节. 不, 你犯了一个错误, 你把这句话看成了&#8221;先设计, 后编码&#8221;.</p>
<p>有些同学认为, &#8220;重设计, 轻编码&#8221;, 会使程序员变成没有创造力的机械人, 这不好. 且不说, 不是每一个项目都需要所有人的创造力, 事实上大部分人在大部分时间做的项目谈何创造? 而&#8221;使程序员变成没有创造力&#8221;这个想法无非是自卑的受迫害臆想狂症状.<br />
<span id="more-515"></span></p>
<h3>设计第一步: 需求分析</h3>
<p>需求分析的目的是把需求方的文档, 转换成程序员理解的文档. 需求方的文档可能一字也没有谈到程序, 但需求分析应该涉及到系统的可能样子, 包括大致界面, 用例. 需求分析和总体设计是同时进行的.</p>
<h3>设计第二步: 详细设计</h3>
<p>详细设计完全是给程序员看的, 越详细越好. 详细设计的最终目的是, 让最普通水平的程序员, 也能照着文档, 把文字翻译成代码. 当然, 实际开发中会遇到少数几个技术难题需要攻关. 除了理所当然的金字塔结构, 程序员也应该参与详细设计工作. 如果你不想当那个最普通水平的程序员, 你就应该参与进来. 塔尖的负责人也有义务提供这种机会.</p>
<h3>哪些项目不需要&#8221;重设计, 轻编码&#8221;?</h3>
<p>所有项目都应该遵循&#8221;重设计, 轻编码&#8221;原则, 即使是那些可能带来革命性效果的探索型项目. &#8220;重设计, 轻编码&#8221;既然不是&#8221;先设计, 后编码&#8221;, 所以也不是&#8221;一次设计, 一次编码&#8221;, 也可能是个迭代的过程.</p>
<p>即使是 Linux 内核早期这种几乎完全工程型的项目, 也是因为有了 Unix, Minix, 无法教材和原理分析所提供的设计基础. Linux 同样沾了别人设计的光, 多亏有了前人的设计.</p>
<p>如果你没有理解到&#8221;重设计&#8221;的极度重要性, 那么你只能是一个编码者.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/230.html' rel='bookmark' title='Permanent Link: 我要转到 Windows 平台了'>我要转到 Windows 平台了</a></li>
<li><a href='http://www.ideawu.net/blog/archives/141.html' rel='bookmark' title='Permanent Link: Linux发行版的选择'>Linux发行版的选择</a></li>
<li><a href='http://www.ideawu.net/blog/archives/432.html' rel='bookmark' title='Permanent Link: 如何为Linux生成和打上patch'>如何为Linux生成和打上patch</a></li>
<li><a href='http://www.ideawu.net/blog/archives/174.html' rel='bookmark' title='Permanent Link: 安装和使用Skype for Linux'>安装和使用Skype for Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/231.html' rel='bookmark' title='Permanent Link: 转到 Windows 平台的事需要考虑'>转到 Windows 平台的事需要考虑</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/515.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>endlessssh &#8211; SSH 代理工具</title>
		<link>http://www.ideawu.net/blog/archives/514.html</link>
		<comments>http://www.ideawu.net/blog/archives/514.html#comments</comments>
		<pubDate>Sun, 06 Jun 2010 07:17:22 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[P2P/Network]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/514.html</guid>
		<description><![CDATA[<p>新建了一个开源项目 endlessssh, 用于 SSH 代理(不是 SSH 作为代理, 而是 SSH 使用代理), 放在 Google Project Hosting. 工具有两个特点:</p>
<p>1. Tunneling SSH over REAL HTTP(完善中)</p>
<p>让 SSH 工作在 HTTP 协议上, 从而穿越防火墙.</p>
<p>2. 持续的会话</p>
<p>即使 TCP 网络连接断开(这时, SSH 会话会失效), SSH 会话仍然保持, 直到网络重连后, 会话继续.</p>
<p>项目地址: <a href="http://code.google.com/p/endlessssh/">http://code.google.com/p/endlessssh/</a></p>
<p><strong>补充:</strong></p>
<p>谢谢评论中 Zealot 朋友的推荐.</p>
<p>大概看了下类似的一个 GNU 项目 httptunnel(http://www.nocrew.org/software/httptunnel.html). 这个项目所使用的交互过程更像是 HTTP 交互, 在一个 HTTP 报文中包含自己的多个报文. httptunnel 没有确认机制, 也没有会话保持机制. 不过, httptunnel 可以值得借鉴.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/301.html' rel='bookmark' title='Permanent Link: Google Talk Developer Home 中文翻译'>Google Talk Developer Home 中文翻译</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/357.html' rel='bookmark' title='Permanent Link: MySQL 查询使用 Group By 的注意点'>MySQL 查询使用 Group By 的注意点</a></li>
<li><a href='http://www.ideawu.net/blog/archives/299.html' rel='bookmark' title='Permanent Link: Google Talk 界面开发分析'>Google Talk 界面开发分析</a></li>
<li><a href='http://www.ideawu.net/blog/archives/148.html' rel='bookmark' title='Permanent Link: 安装和使用Google Earth &#8211; Linux'>安装和使用Google Earth &#8211; Linux</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/514.html" title="endlessssh &#8211; SSH 代理工具">endlessssh &#8211; SSH 代理工具</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>新建了一个开源项目 endlessssh, 用于 SSH 代理(不是 SSH 作为代理, 而是 SSH 使用代理), 放在 Google Project Hosting. 工具有两个特点:</p>
<p>1. Tunneling SSH over REAL HTTP(完善中)</p>
<p>让 SSH 工作在 HTTP 协议上, 从而穿越防火墙.</p>
<p>2. 持续的会话</p>
<p>即使 TCP 网络连接断开(这时, SSH 会话会失效), SSH 会话仍然保持, 直到网络重连后, 会话继续.</p>
<p>项目地址: <a href="http://code.google.com/p/endlessssh/">http://code.google.com/p/endlessssh/</a></p>
<p><strong>补充:</strong></p>
<p>谢谢评论中 Zealot 朋友的推荐.</p>
<p>大概看了下类似的一个 GNU 项目 httptunnel(http://www.nocrew.org/software/httptunnel.html). 这个项目所使用的交互过程更像是 HTTP 交互, 在一个 HTTP 报文中包含自己的多个报文. httptunnel 没有确认机制, 也没有会话保持机制. 不过, httptunnel 可以值得借鉴.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/301.html' rel='bookmark' title='Permanent Link: Google Talk Developer Home 中文翻译'>Google Talk Developer Home 中文翻译</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/357.html' rel='bookmark' title='Permanent Link: MySQL 查询使用 Group By 的注意点'>MySQL 查询使用 Group By 的注意点</a></li>
<li><a href='http://www.ideawu.net/blog/archives/299.html' rel='bookmark' title='Permanent Link: Google Talk 界面开发分析'>Google Talk 界面开发分析</a></li>
<li><a href='http://www.ideawu.net/blog/archives/148.html' rel='bookmark' title='Permanent Link: 安装和使用Google Earth &#8211; Linux'>安装和使用Google Earth &#8211; Linux</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/514.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>谈大学毕业找工作,兼谈读书无用论</title>
		<link>http://www.ideawu.net/blog/archives/513.html</link>
		<comments>http://www.ideawu.net/blog/archives/513.html#comments</comments>
		<pubDate>Sat, 05 Jun 2010 11:30:49 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/513.html</guid>
		<description><![CDATA[<p>现在正是大学本科毕业生找工作的紧张时刻, 事实上, 毕业找工作的结果现在几乎已经确定了, 几家欢乐几家愁. 有些同学寒窗苦读终得回报; 有些同学终于意识到早知今日何必当初. 但是, 大部分的人一头雾水: 我不求出人头地, 所以就没头悬梁锥刺骨凿壁偷光 &#8211; 这种生活方式无可指责 &#8211; 但我大学四年没少花功夫啊, 按时上课, 偶尔或者还常常去自习室, 为什么还找不到工作呢? 是读书无用?</p>
<p>大家四年非常短暂, 事实上只有两年! 在第一年, 你还是一个无知的大孩子, 脑中一团浆糊, 只是一具没有思想的行尸走肉 &#8211; 无法否认, 就是的. 而且, 大学也是基于这个事实从而决定对大学新生进行幼稚园式的管理. 我知道, 有许多全国排名前列大学的计算机专业, 禁止学生在第一年接触电脑. 甚至在第二年也有这种企图. 正因为大一新生多是没有思想的人, 所以才需要这种管理方式.</p>
<p><span id="more-513"></span>而大学找工作是从第四年(9月份)便开始的, 持续一年时间, 所以, 大学只有两年.</p>
<p>有些人计划读研究生. 你能否能读研究生, 在第三年便已确定. 目前的状况, 大部分的研究生名额是保送生(根据你的之前两三年的好成绩得到), 不要对考取研究生报太大希望. 你既然没得到保送的机会, 那么考试也不会有太大的希望.</p>
<p>有些同学认为是自己的学校或者专业太差了. 先不说上一个差的大学是你中学和小学12年的应得结果, 即使在三流大学或二流的专业, 也有一些工作找得好的人. 你有没有想过要替代他们呢?</p>
<p>其实, 从社会的总体来看, 我们的回报和我们的努力是不相符的. 这是因为, 我们的思想(从小被教育过于崇高)不适合这个社会(发展水平过于低级). 大部分的人从小被称作天之娇子, 毕业时焦头烂额, 最终得到一个当低级的流水线工人的工作, 这种&#8221;人才泡沫&#8221;是非常可怕的. 可以说, 读书无用论是有很大的正确性的. 准确地说, 现在这种读书方式对人无益.</p>
<p>既然现在这种读书无法给你带来任何用处, 为什么不换一种读书方式呢? 大学生不要只抱着自己的专业, 而应该通过广泛的阅读和学习提高自己. 比如说, 既然你已经读了十几年的中文, 现在应该多学点英语, 法语和其它外语了. 既然你已经读了十几年的中国人写的书, 现在应该多阅读外国人写的书了(可以是中文版). 甚至你可以决定, 我只看外国人的书. 当你阅读了一百万字的外国人的书箱, 再回头看中国的古代经典文学时, 你的收获会比你只阅读一千万字当代中国人写的书籍的收获更多.</p>
<p>无论对于文科还是理科, 文学, 音乐, 历史, 地理, 经济, 戏剧等, 都应该是你涉猎的领域. 某个知名演员说过, 你在学习这些知识的过程中, 可能没感受到它们给你带来的好处, 但是, 你会慢慢地在你身边建立一个场, 到了一定时刻, 便会产生巨大的质变.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/460.html' rel='bookmark' title='Permanent Link: 我为什么要放弃订阅转而做牛人博客聚合'>我为什么要放弃订阅转而做牛人博客聚合</a></li>
<li><a href='http://www.ideawu.net/blog/archives/65.html' rel='bookmark' title='Permanent Link: 操作系统为什么运行缓慢'>操作系统为什么运行缓慢</a></li>
<li><a href='http://www.ideawu.net/blog/archives/528.html' rel='bookmark' title='Permanent Link: TCP协议思想和技术的广泛应用'>TCP协议思想和技术的广泛应用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/513.html" title="谈大学毕业找工作,兼谈读书无用论">谈大学毕业找工作,兼谈读书无用论</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>现在正是大学本科毕业生找工作的紧张时刻, 事实上, 毕业找工作的结果现在几乎已经确定了, 几家欢乐几家愁. 有些同学寒窗苦读终得回报; 有些同学终于意识到早知今日何必当初. 但是, 大部分的人一头雾水: 我不求出人头地, 所以就没头悬梁锥刺骨凿壁偷光 &#8211; 这种生活方式无可指责 &#8211; 但我大学四年没少花功夫啊, 按时上课, 偶尔或者还常常去自习室, 为什么还找不到工作呢? 是读书无用?</p>
<p>大家四年非常短暂, 事实上只有两年! 在第一年, 你还是一个无知的大孩子, 脑中一团浆糊, 只是一具没有思想的行尸走肉 &#8211; 无法否认, 就是的. 而且, 大学也是基于这个事实从而决定对大学新生进行幼稚园式的管理. 我知道, 有许多全国排名前列大学的计算机专业, 禁止学生在第一年接触电脑. 甚至在第二年也有这种企图. 正因为大一新生多是没有思想的人, 所以才需要这种管理方式.</p>
<p><span id="more-513"></span>而大学找工作是从第四年(9月份)便开始的, 持续一年时间, 所以, 大学只有两年.</p>
<p>有些人计划读研究生. 你能否能读研究生, 在第三年便已确定. 目前的状况, 大部分的研究生名额是保送生(根据你的之前两三年的好成绩得到), 不要对考取研究生报太大希望. 你既然没得到保送的机会, 那么考试也不会有太大的希望.</p>
<p>有些同学认为是自己的学校或者专业太差了. 先不说上一个差的大学是你中学和小学12年的应得结果, 即使在三流大学或二流的专业, 也有一些工作找得好的人. 你有没有想过要替代他们呢?</p>
<p>其实, 从社会的总体来看, 我们的回报和我们的努力是不相符的. 这是因为, 我们的思想(从小被教育过于崇高)不适合这个社会(发展水平过于低级). 大部分的人从小被称作天之娇子, 毕业时焦头烂额, 最终得到一个当低级的流水线工人的工作, 这种&#8221;人才泡沫&#8221;是非常可怕的. 可以说, 读书无用论是有很大的正确性的. 准确地说, 现在这种读书方式对人无益.</p>
<p>既然现在这种读书无法给你带来任何用处, 为什么不换一种读书方式呢? 大学生不要只抱着自己的专业, 而应该通过广泛的阅读和学习提高自己. 比如说, 既然你已经读了十几年的中文, 现在应该多学点英语, 法语和其它外语了. 既然你已经读了十几年的中国人写的书, 现在应该多阅读外国人写的书了(可以是中文版). 甚至你可以决定, 我只看外国人的书. 当你阅读了一百万字的外国人的书箱, 再回头看中国的古代经典文学时, 你的收获会比你只阅读一千万字当代中国人写的书籍的收获更多.</p>
<p>无论对于文科还是理科, 文学, 音乐, 历史, 地理, 经济, 戏剧等, 都应该是你涉猎的领域. 某个知名演员说过, 你在学习这些知识的过程中, 可能没感受到它们给你带来的好处, 但是, 你会慢慢地在你身边建立一个场, 到了一定时刻, 便会产生巨大的质变.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/460.html' rel='bookmark' title='Permanent Link: 我为什么要放弃订阅转而做牛人博客聚合'>我为什么要放弃订阅转而做牛人博客聚合</a></li>
<li><a href='http://www.ideawu.net/blog/archives/65.html' rel='bookmark' title='Permanent Link: 操作系统为什么运行缓慢'>操作系统为什么运行缓慢</a></li>
<li><a href='http://www.ideawu.net/blog/archives/528.html' rel='bookmark' title='Permanent Link: TCP协议思想和技术的广泛应用'>TCP协议思想和技术的广泛应用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/513.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>screen 命令使用</title>
		<link>http://www.ideawu.net/blog/archives/512.html</link>
		<comments>http://www.ideawu.net/blog/archives/512.html#comments</comments>
		<pubDate>Fri, 04 Jun 2010 02:42:59 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/512.html</guid>
		<description><![CDATA[<p>创建会话:<br />
$ screen -dmS abc</p>
<p>会话列表:<br />
$ screen -list</p>
<p>连接/恢复会话:<br />
$ screen -r abc</p>
<p>暂时离开会话, 会话仍在后台运行:<br />
CTRL+a+d</p>
<p>停止会话(已连接的情况):<br />
$ exit</p>
<p>编辑 ~/.bashrc, 以后重新连接, 你都继续前一个会话:<br />
$ screen -r abc</p>
<p>但开户多个会话时, 会提示会话恢复失败.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/83.html' rel='bookmark' title='Permanent Link: Linux桌面小技巧 &#8212; GNOME tips'>Linux桌面小技巧 &#8212; GNOME tips</a></li>
<li><a href='http://www.ideawu.net/blog/archives/99.html' rel='bookmark' title='Permanent Link: 安装Linux的ATI显卡驱动，支持硬件3D加速'>安装Linux的ATI显卡驱动，支持硬件3D加速</a></li>
<li><a href='http://www.ideawu.net/blog/archives/42.html' rel='bookmark' title='Permanent Link: Linux不是Windows'>Linux不是Windows</a></li>
<li><a href='http://www.ideawu.net/blog/archives/313.html' rel='bookmark' title='Permanent Link: C# 版的 SimpleXML'>C# 版的 SimpleXML</a></li>
<li><a href='http://www.ideawu.net/blog/archives/84.html' rel='bookmark' title='Permanent Link: Debian Linux的小提示'>Debian Linux的小提示</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/512.html" title="screen 命令使用">screen 命令使用</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>创建会话:<br />
$ screen -dmS abc</p>
<p>会话列表:<br />
$ screen -list</p>
<p>连接/恢复会话:<br />
$ screen -r abc</p>
<p>暂时离开会话, 会话仍在后台运行:<br />
CTRL+a+d</p>
<p>停止会话(已连接的情况):<br />
$ exit</p>
<p>编辑 ~/.bashrc, 以后重新连接, 你都继续前一个会话:<br />
$ screen -r abc</p>
<p>但开户多个会话时, 会提示会话恢复失败.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/83.html' rel='bookmark' title='Permanent Link: Linux桌面小技巧 &#8212; GNOME tips'>Linux桌面小技巧 &#8212; GNOME tips</a></li>
<li><a href='http://www.ideawu.net/blog/archives/99.html' rel='bookmark' title='Permanent Link: 安装Linux的ATI显卡驱动，支持硬件3D加速'>安装Linux的ATI显卡驱动，支持硬件3D加速</a></li>
<li><a href='http://www.ideawu.net/blog/archives/42.html' rel='bookmark' title='Permanent Link: Linux不是Windows'>Linux不是Windows</a></li>
<li><a href='http://www.ideawu.net/blog/archives/313.html' rel='bookmark' title='Permanent Link: C# 版的 SimpleXML'>C# 版的 SimpleXML</a></li>
<li><a href='http://www.ideawu.net/blog/archives/84.html' rel='bookmark' title='Permanent Link: Debian Linux的小提示'>Debian Linux的小提示</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/512.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</title>
		<link>http://www.ideawu.net/blog/archives/511.html</link>
		<comments>http://www.ideawu.net/blog/archives/511.html#comments</comments>
		<pubDate>Thu, 03 Jun 2010 14:12:04 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[P2P/Network]]></category>
		<category><![CDATA[TCP]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/511.html</guid>
		<description><![CDATA[<p>TCP 是一种可靠连接的协议, 即使在恶劣的网络环境中(如丢包率高), 也能实现数据的可靠传输. 可以简单地和 UDP 对比. 使用 UDP 发出一份数据, 你无法通过 UDP 本身判断数据是否已经被对方收到. 但是使用 TCP, 你可以判断, 因为如果 TCP 无法保证对端收到数据, 连接便会使自己失败, 从而你得到一个通知.</p>
<p>TCP 会话依赖于 IP 和端口, 也就是说, 一旦双方的任意一方的 IP 和端口发生了改变, TCP 连接就失效了. 另外, 虽然 TCP 有重传机制, 但重传失效的次数和时限用户转难控制. 为解决这两个问题, 需要实现一种不依赖于 IP/Port, 适应极其恶劣(超过 TCP 的容忍范围)的网络环境的连接协议, 称为 endless_tcp.</p>
<p><span id="more-511"></span>为了避免实现&#8221;另一个 TCP&#8221;, 这个协议基于 TCP 协议, 主要的特点是隧道和会话恢复机制.</p>
<p>假设有这样的一个不稳定网络:</p>
<pre>
     |               |
Node | ~~ network ~~ | Node
     |               |
</pre>
<p>两个节点之间通过 TCP 进行连接, 但因为网络状况极差, 所以 TCP 连接经常断开, 应用程序频繁显示&#8221;Connection reset by peer&#8221;. 如果应用程序的会话依赖于一条持续的 TCP 连接, 那么这个程序的使用就非常糟糕了. 我们在使用 SSH 的时候就常遇到这个问题, 当我们的电脑从有线网络切换到无线网络, 或者从某个无线网络区域移动到了另一个无线网络区域, SSH 会话都会失效, 必须重连.</p>
<p>解决这个问题的一种考虑是使用一种不会话不依赖于连接的协议, 如 HTTP. 对于 HTTP, 当你的电脑从办公室移动到家里时, 你在网络的登录会话还是有效的. 对于 SSH, 改变协议不太现实. 解决的思路是实现更健壮的连接协议. 如何在 TCP 不稳定的网络中建立起稳定的连接, 而这种连接又是基于 TCP 的呢? 首先, 我们使用隧道技术, 把 SSH 的会话数据转到隧道中. 系统被改成下面的结构:</p>
<pre>
     |               |
Node |               | Node
 ||  |               |  ||
Proxy| ~~ tunnel ~~  |Proxy
     |               |
</pre>
<p>虽然网络不稳定, 但 Node 和 Proxy 之间的网络是非常稳定的, 比如两者在同一台机器上. Proxy 之间的会话不依赖连接, 所以可以基于 TCP 实现更健壮的连接.</p>
<p>对于 SSH, ProxyCommand 选项提供了非常简便的 SSH 客户端与隧道的接口, 使用该选项, SSH 客户端使用标准输入输出, 而不是 socket. 一个 Python 语言开发的程序, 证明了这种思路的正确性和可行性.</p>
<p>如果隧道使用了 HTTP 协议, 则可以穿越防火墙. 反过来, 建立于其上的 SSH, 也可以被用来进行加密通信.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/510.html' rel='bookmark' title='Permanent Link: SSH ProxyCommand及其思想'>SSH ProxyCommand及其思想</a></li>
<li><a href='http://www.ideawu.net/blog/archives/505.html' rel='bookmark' title='Permanent Link: PHP解析HTML和loadHTML乱码'>PHP解析HTML和loadHTML乱码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/313.html' rel='bookmark' title='Permanent Link: C# 版的 SimpleXML'>C# 版的 SimpleXML</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/528.html' rel='bookmark' title='Permanent Link: TCP协议思想和技术的广泛应用'>TCP协议思想和技术的广泛应用</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/511.html" title="endless_tcp &#8211; 一种适应极端网络环境的网络软件架构">endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>TCP 是一种可靠连接的协议, 即使在恶劣的网络环境中(如丢包率高), 也能实现数据的可靠传输. 可以简单地和 UDP 对比. 使用 UDP 发出一份数据, 你无法通过 UDP 本身判断数据是否已经被对方收到. 但是使用 TCP, 你可以判断, 因为如果 TCP 无法保证对端收到数据, 连接便会使自己失败, 从而你得到一个通知.</p>
<p>TCP 会话依赖于 IP 和端口, 也就是说, 一旦双方的任意一方的 IP 和端口发生了改变, TCP 连接就失效了. 另外, 虽然 TCP 有重传机制, 但重传失效的次数和时限用户转难控制. 为解决这两个问题, 需要实现一种不依赖于 IP/Port, 适应极其恶劣(超过 TCP 的容忍范围)的网络环境的连接协议, 称为 endless_tcp.</p>
<p><span id="more-511"></span>为了避免实现&#8221;另一个 TCP&#8221;, 这个协议基于 TCP 协议, 主要的特点是隧道和会话恢复机制.</p>
<p>假设有这样的一个不稳定网络:</p>
<pre>
     |               |
Node | ~~ network ~~ | Node
     |               |
</pre>
<p>两个节点之间通过 TCP 进行连接, 但因为网络状况极差, 所以 TCP 连接经常断开, 应用程序频繁显示&#8221;Connection reset by peer&#8221;. 如果应用程序的会话依赖于一条持续的 TCP 连接, 那么这个程序的使用就非常糟糕了. 我们在使用 SSH 的时候就常遇到这个问题, 当我们的电脑从有线网络切换到无线网络, 或者从某个无线网络区域移动到了另一个无线网络区域, SSH 会话都会失效, 必须重连.</p>
<p>解决这个问题的一种考虑是使用一种不会话不依赖于连接的协议, 如 HTTP. 对于 HTTP, 当你的电脑从办公室移动到家里时, 你在网络的登录会话还是有效的. 对于 SSH, 改变协议不太现实. 解决的思路是实现更健壮的连接协议. 如何在 TCP 不稳定的网络中建立起稳定的连接, 而这种连接又是基于 TCP 的呢? 首先, 我们使用隧道技术, 把 SSH 的会话数据转到隧道中. 系统被改成下面的结构:</p>
<pre>
     |               |
Node |               | Node
 ||  |               |  ||
Proxy| ~~ tunnel ~~  |Proxy
     |               |
</pre>
<p>虽然网络不稳定, 但 Node 和 Proxy 之间的网络是非常稳定的, 比如两者在同一台机器上. Proxy 之间的会话不依赖连接, 所以可以基于 TCP 实现更健壮的连接.</p>
<p>对于 SSH, ProxyCommand 选项提供了非常简便的 SSH 客户端与隧道的接口, 使用该选项, SSH 客户端使用标准输入输出, 而不是 socket. 一个 Python 语言开发的程序, 证明了这种思路的正确性和可行性.</p>
<p>如果隧道使用了 HTTP 协议, 则可以穿越防火墙. 反过来, 建立于其上的 SSH, 也可以被用来进行加密通信.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/510.html' rel='bookmark' title='Permanent Link: SSH ProxyCommand及其思想'>SSH ProxyCommand及其思想</a></li>
<li><a href='http://www.ideawu.net/blog/archives/505.html' rel='bookmark' title='Permanent Link: PHP解析HTML和loadHTML乱码'>PHP解析HTML和loadHTML乱码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/313.html' rel='bookmark' title='Permanent Link: C# 版的 SimpleXML'>C# 版的 SimpleXML</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/528.html' rel='bookmark' title='Permanent Link: TCP协议思想和技术的广泛应用'>TCP协议思想和技术的广泛应用</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/511.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH ProxyCommand及其思想</title>
		<link>http://www.ideawu.net/blog/archives/510.html</link>
		<comments>http://www.ideawu.net/blog/archives/510.html#comments</comments>
		<pubDate>Mon, 31 May 2010 16:47:42 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[P2P/Network]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/510.html</guid>
		<description><![CDATA[<p>OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling). 所谓的隧道技术, 也称代理技术, 是网络通信技术的一个普遍概念, 就是把一条信道建立于另外一条信道之上.</p>
<p>SSH 会话基于一个 TCP 连接. 如果我们把连接的两个端口各自的出口(也即入口)进行截获, 就可以用其它的信道来传输. 而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接.</p>
<p><span id="more-510"></span>ProxyCommand 指定一个命令(或程序, 称为 Proxy), SSH 客户端将通过标准输入输出和这个命令启动后的进程进行正常的 SSH 通信, 而 Proxy 连接着 SSH 服务器(一般是一个 Server Proxy, 再由该 Server Proxy 连接服务器). Proxy 和 Server Proxy 之间组成了一条隧道. 如果两者之间用 HTTP 协议进行通信, 则整个系统便称为&#8221;tunneling SSH over HTTP&#8221;, 当然也可以使用 UDP, TCP, IP 以及其它任意的可行的协议.</p>
<p>SSH ProxyCommand 相对于 SOCKS, HTTP 或者其它的 Proxy 技术, 更简单. 因为它工作在进程间的文件 IO 通信, 用任何支持 socket 的编程语言, 都能轻易地编写出一个可用的 Proxy. 复杂度只落在隧道本身. 想一想, 如果没有 ProxyCommand, 你需要改变或侵入操作系统的 TCP 子系统才能实现 SSH 隧道. ProxyCommand 提供了方便应用隧道的接口, 网络程序都应该提供这样的接口, 而不是完全依赖于 socket.</p>
<p>因为一个会话就会启动一个 ProxyCommand 进程, 所以, 只有在会话依赖于连接的协议上才能使用这种技术.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/511.html' rel='bookmark' title='Permanent Link: endless_tcp &#8211; 一种适应极端网络环境的网络软件架构'>endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</a></li>
<li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/462.html' rel='bookmark' title='Permanent Link: 使用dbproxy来处理高并发数据库请求'>使用dbproxy来处理高并发数据库请求</a></li>
<li><a href='http://www.ideawu.net/blog/archives/290.html' rel='bookmark' title='Permanent Link: Ideawu.P2P API 简介'>Ideawu.P2P API 简介</a></li>
<li><a href='http://www.ideawu.net/blog/archives/283.html' rel='bookmark' title='Permanent Link: 开发一个P2P库'>开发一个P2P库</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/510.html" title="SSH ProxyCommand及其思想">SSH ProxyCommand及其思想</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling). 所谓的隧道技术, 也称代理技术, 是网络通信技术的一个普遍概念, 就是把一条信道建立于另外一条信道之上.</p>
<p>SSH 会话基于一个 TCP 连接. 如果我们把连接的两个端口各自的出口(也即入口)进行截获, 就可以用其它的信道来传输. 而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接.</p>
<p><span id="more-510"></span>ProxyCommand 指定一个命令(或程序, 称为 Proxy), SSH 客户端将通过标准输入输出和这个命令启动后的进程进行正常的 SSH 通信, 而 Proxy 连接着 SSH 服务器(一般是一个 Server Proxy, 再由该 Server Proxy 连接服务器). Proxy 和 Server Proxy 之间组成了一条隧道. 如果两者之间用 HTTP 协议进行通信, 则整个系统便称为&#8221;tunneling SSH over HTTP&#8221;, 当然也可以使用 UDP, TCP, IP 以及其它任意的可行的协议.</p>
<p>SSH ProxyCommand 相对于 SOCKS, HTTP 或者其它的 Proxy 技术, 更简单. 因为它工作在进程间的文件 IO 通信, 用任何支持 socket 的编程语言, 都能轻易地编写出一个可用的 Proxy. 复杂度只落在隧道本身. 想一想, 如果没有 ProxyCommand, 你需要改变或侵入操作系统的 TCP 子系统才能实现 SSH 隧道. ProxyCommand 提供了方便应用隧道的接口, 网络程序都应该提供这样的接口, 而不是完全依赖于 socket.</p>
<p>因为一个会话就会启动一个 ProxyCommand 进程, 所以, 只有在会话依赖于连接的协议上才能使用这种技术.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/511.html' rel='bookmark' title='Permanent Link: endless_tcp &#8211; 一种适应极端网络环境的网络软件架构'>endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</a></li>
<li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/462.html' rel='bookmark' title='Permanent Link: 使用dbproxy来处理高并发数据库请求'>使用dbproxy来处理高并发数据库请求</a></li>
<li><a href='http://www.ideawu.net/blog/archives/290.html' rel='bookmark' title='Permanent Link: Ideawu.P2P API 简介'>Ideawu.P2P API 简介</a></li>
<li><a href='http://www.ideawu.net/blog/archives/283.html' rel='bookmark' title='Permanent Link: 开发一个P2P库'>开发一个P2P库</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/510.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Python select标准输入输出</title>
		<link>http://www.ideawu.net/blog/archives/508.html</link>
		<comments>http://www.ideawu.net/blog/archives/508.html#comments</comments>
		<pubDate>Sun, 30 May 2010 11:21:24 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[IO多路复用]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=508</guid>
		<description><![CDATA[<p>Windows 版本的 Python, select() 函数只能接受 socket, <a href="http://docs.python.org/library/select.html#select.select">不接受 File Object</a>, 所以不能 select 标准输入输出.</p>
<p>为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 <a href="http://docs.python.org/library/socket.html">socket</a> 作为 stdin/stdout 的代理. 结构示意如下:</p>
<pre>
stdin -&gt; stdin_sock -&gt; my_stdin
stdout &lt;- stdout_sock &lt;- my_stdout
</pre>
<p><span id="more-508"></span>my_stdin 和 my_stdout 是 socket, 所以它们的 fileno 就可以用于 select 了.</p>
<p>首先一个线程读取 stdin, 写入 stdin_sock:</p>
<pre>
while True:
	data = os.read(sys.stdin.fileno(), 1024)
	if not data:
		break
	stdin_sock.send(data)
</pre>
<p>另一个线程读取 stdout_sock, 写入 stdout:</p>
<pre>
fd = sys.stdout.fileno()
while True:
	data = my_stdout.recv(1024)
	if not data:
		break
	os.write(sys.stdout.fileno(), data)
</pre>
<p>win_stdio 的一个实际例子如下:</p>
<pre>
from stdio import stdio
stdio.write('hello world')
data = stdio.read()
print stdio.STDIN_FILENO
print stdio.STDOUT_FILENO
</pre>
<p>下载: <a href='http://www.ideawu.net/blog/wp-content/uploads/2010/05/win_stdio.zip'>win_stdio.zip</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/267.html' rel='bookmark' title='Permanent Link: 软件体系结构模式-层'>软件体系结构模式-层</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/329.html' rel='bookmark' title='Permanent Link: 一种有趣的编程模型'>一种有趣的编程模型</a></li>
<li><a href='http://www.ideawu.net/blog/archives/269.html' rel='bookmark' title='Permanent Link: 开始学习 Python'>开始学习 Python</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/508.html" title="Windows Python select标准输入输出">Windows Python select标准输入输出</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>Windows 版本的 Python, select() 函数只能接受 socket, <a href="http://docs.python.org/library/select.html#select.select">不接受 File Object</a>, 所以不能 select 标准输入输出.</p>
<p>为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 <a href="http://docs.python.org/library/socket.html">socket</a> 作为 stdin/stdout 的代理. 结构示意如下:</p>
<pre>
stdin -&gt; stdin_sock -&gt; my_stdin
stdout &lt;- stdout_sock &lt;- my_stdout
</pre>
<p><span id="more-508"></span>my_stdin 和 my_stdout 是 socket, 所以它们的 fileno 就可以用于 select 了.</p>
<p>首先一个线程读取 stdin, 写入 stdin_sock:</p>
<pre>
while True:
	data = os.read(sys.stdin.fileno(), 1024)
	if not data:
		break
	stdin_sock.send(data)
</pre>
<p>另一个线程读取 stdout_sock, 写入 stdout:</p>
<pre>
fd = sys.stdout.fileno()
while True:
	data = my_stdout.recv(1024)
	if not data:
		break
	os.write(sys.stdout.fileno(), data)
</pre>
<p>win_stdio 的一个实际例子如下:</p>
<pre>
from stdio import stdio
stdio.write('hello world')
data = stdio.read()
print stdio.STDIN_FILENO
print stdio.STDOUT_FILENO
</pre>
<p>下载: <a href='http://www.ideawu.net/blog/wp-content/uploads/2010/05/win_stdio.zip'>win_stdio.zip</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/267.html' rel='bookmark' title='Permanent Link: 软件体系结构模式-层'>软件体系结构模式-层</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/329.html' rel='bookmark' title='Permanent Link: 一种有趣的编程模型'>一种有趣的编程模型</a></li>
<li><a href='http://www.ideawu.net/blog/archives/269.html' rel='bookmark' title='Permanent Link: 开始学习 Python'>开始学习 Python</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/508.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>非常抱歉, 博客前几天中了木马</title>
		<link>http://www.ideawu.net/blog/archives/507.html</link>
		<comments>http://www.ideawu.net/blog/archives/507.html#comments</comments>
		<pubDate>Mon, 24 May 2010 17:00:49 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[etc]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/507.html</guid>
		<description><![CDATA[<p>Hi, 各位朋友:</p>
<p>直到今天, 我才收到 <a href="http://www.google.com/webmasters/tools/">Google Webmaster Tools</a> 发给我的邮件, 告知我的网站传播恶意软件. 我点击右键查看源码, 立即在末尾发现了异常的 JavaScript 代码. 然后查 Apache 日志, 发现是 5月20日 那天代码被攻击者修改的.</p>
<p>这让我非常惊恐, 因为前段时间升级了 WP, 又安装了几个插件, 难道是这个问题? 而且从日志看, 篡改者只用了一次登录尝试就成功登录 Wordpress 后台. 我的密码非常复杂, 而且足够长, 难道是泄漏了?</p>
<p>经过检查了所有的数据库备份才发现, 原来是某个不使用的账号的密码太简单了! 由于我的粗心, 当初在本机测试时使用了简单的密码, 部署到线上后, 新创建了一个用户, 便忘了这个账号. 如果前几天你使用 IE 浏览器访问我的网站, 请用杀毒软件检查一下你的电脑.</p>
<p>现在, 恶意代码已经清除, 漏洞也已修复. 非常抱歉!</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/396.html' rel='bookmark' title='Permanent Link: 博客防垃圾评论探讨'>博客防垃圾评论探讨</a></li>
<li><a href='http://www.ideawu.net/blog/archives/470.html' rel='bookmark' title='Permanent Link: Wordpress category widget  using new 2.8 API'>Wordpress category widget  using new 2.8 API</a></li>
<li><a href='http://www.ideawu.net/blog/archives/431.html' rel='bookmark' title='Permanent Link: 能力的分级'>能力的分级</a></li>
<li><a href='http://www.ideawu.net/blog/archives/196.html' rel='bookmark' title='Permanent Link: Firefox在Discuz论坛后台管理中出现的Bug'>Firefox在Discuz论坛后台管理中出现的Bug</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol><div><p>你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/507.html" title="非常抱歉, 博客前几天中了木马">非常抱歉, 博客前几天中了木马</a></p>
<div>
	<a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>Hi, 各位朋友:</p>
<p>直到今天, 我才收到 <a href="http://www.google.com/webmasters/tools/">Google Webmaster Tools</a> 发给我的邮件, 告知我的网站传播恶意软件. 我点击右键查看源码, 立即在末尾发现了异常的 JavaScript 代码. 然后查 Apache 日志, 发现是 5月20日 那天代码被攻击者修改的.</p>
<p>这让我非常惊恐, 因为前段时间升级了 WP, 又安装了几个插件, 难道是这个问题? 而且从日志看, 篡改者只用了一次登录尝试就成功登录 Wordpress 后台. 我的密码非常复杂, 而且足够长, 难道是泄漏了?</p>
<p>经过检查了所有的数据库备份才发现, 原来是某个不使用的账号的密码太简单了! 由于我的粗心, 当初在本机测试时使用了简单的密码, 部署到线上后, 新创建了一个用户, 便忘了这个账号. 如果前几天你使用 IE 浏览器访问我的网站, 请用杀毒软件检查一下你的电脑.</p>
<p>现在, 恶意代码已经清除, 漏洞也已修复. 非常抱歉!</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/396.html' rel='bookmark' title='Permanent Link: 博客防垃圾评论探讨'>博客防垃圾评论探讨</a></li>
<li><a href='http://www.ideawu.net/blog/archives/470.html' rel='bookmark' title='Permanent Link: Wordpress category widget  using new 2.8 API'>Wordpress category widget  using new 2.8 API</a></li>
<li><a href='http://www.ideawu.net/blog/archives/431.html' rel='bookmark' title='Permanent Link: 能力的分级'>能力的分级</a></li>
<li><a href='http://www.ideawu.net/blog/archives/196.html' rel='bookmark' title='Permanent Link: Firefox在Discuz论坛后台管理中出现的Bug'>Firefox在Discuz论坛后台管理中出现的Bug</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/507.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
