<?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>梁剑的Blog &#187; 技术笔记</title>
	<atom:link href="http://icomes.net/category/%e6%8a%80%e6%9c%af%e7%ac%94%e8%ae%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://icomes.net</link>
	<description>做有趣的事，做有用的人</description>
	<lastBuildDate>Wed, 23 Jun 2010 16:04:55 +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>代码的熵</title>
		<link>http://icomes.net/2010/05/14/%e4%bb%a3%e7%a0%81%e7%9a%84%e7%86%b5/</link>
		<comments>http://icomes.net/2010/05/14/%e4%bb%a3%e7%a0%81%e7%9a%84%e7%86%b5/#comments</comments>
		<pubDate>Fri, 14 May 2010 15:56:22 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[技术笔记]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=490</guid>
		<description><![CDATA[三年前，我刚进腾讯，是在Qzone的商城组，职位是后台开发。
顾名思义，商城是卖东西的地方，涉及到的业务有装扮、购买、扣费等逻辑。
当时Team里没有专门的前端工程师，前端的工作都由后台工程师兼任。
从技术的角度看，就是从前端的JS、HTML、CSS，到中间的CGI，都后台的服务器，都有涉及。
其实这是一个挺好的职位，对增加技术的广度很有好处。
刚到Qzone的时候，我的导师Welkin，就对我说：
”现在的代码很烂，但也就这样了，到有人忍受不了的时候，自然会重写的“，而且说了不止一次。
他当时在做套装，可能改得比较苦闷吧。
当时我刚进去没几天，不太理解他的意思，而且也有点不以为然，心想：
”只要自己严谨一点，总不至于写出很烂的代码吧？“
后来我才知道，原来写代码和打篮球一样，也是团体运动，一个人是赢不了球的。
做完一个相对独立的小活动，赚了一百万之后（很夸张），开始真正接触商场的项目。
第一步当然是看已有的代码，当时只是觉得不太容易看懂，也并不算很烂。
到了后来，当我有一次要改购物车的代码时，才体会到Welkin当时的痛苦。
基本上是过程式的JS，存在不少全局变量，嵌套关系过于复杂。
以至于单纯看代码已经很难了解实际的运行流程，必须要用调试器来单步跟踪了。
显然，Welkin还能忍受这种代码，因为他做套装的时候，并没有重写这些代码。
必须承认，当时我也容忍了这些代码，只是修改了部分，以求完成功能。
当然我可以给自己借口：当时业务逻辑和前端技术都不太熟悉，想改也无从下手。
但是总之，我容忍了这种代码的存在。
再后来要对大头贴做改版，再次碰到了这种无从下手的代码。
从代码的风格可以看出，明显经过三个人以上的修改。
这次我把流程整理了一下，但也没有重写。
或者说，一定程度上，我又容忍了。
08年10月，我来到了邮箱，早期的主要工作是对阅读空间的CGI做重构。
经过几轮的重构之后，程序的流程变得比较让人满意，在这个基础上做新功能的速度也有了提升。
但是经过一段时间的开发之后，现在代码里的坏味慢慢开始散发出来。
所以我的结论是，代码也符合热力学定律，自然就处于熵增的状态，必然会慢慢变得腐烂。
而一个团队的代码质量，并不决定于你能写出多好的代码，而是决定于你能容忍多烂的代码。
]]></description>
			<content:encoded><![CDATA[<p>三年前，我刚进腾讯，是在Qzone的商城组，职位是后台开发。<br />
顾名思义，商城是卖东西的地方，涉及到的业务有装扮、购买、扣费等逻辑。<br />
当时Team里没有专门的前端工程师，前端的工作都由后台工程师兼任。<br />
从技术的角度看，就是从前端的JS、HTML、CSS，到中间的CGI，都后台的服务器，都有涉及。<br />
其实这是一个挺好的职位，对增加技术的广度很有好处。</p>
<p>刚到Qzone的时候，我的导师Welkin，就对我说：<br />
”现在的代码很烂，但也就这样了，到有人忍受不了的时候，自然会重写的“，而且说了不止一次。<br />
他当时在做套装，可能改得比较苦闷吧。</p>
<p>当时我刚进去没几天，不太理解他的意思，而且也有点不以为然，心想：<br />
”只要自己严谨一点，总不至于写出很烂的代码吧？“<br />
后来我才知道，原来写代码和打篮球一样，也是团体运动，一个人是赢不了球的。</p>
<p>做完一个相对独立的小活动，赚了一百万之后（很夸张），开始真正接触商场的项目。<br />
第一步当然是看已有的代码，当时只是觉得不太容易看懂，也并不算很烂。<br />
到了后来，当我有一次要改购物车的代码时，才体会到Welkin当时的痛苦。</p>
<p>基本上是过程式的JS，存在不少全局变量，嵌套关系过于复杂。<br />
以至于单纯看代码已经很难了解实际的运行流程，必须要用调试器来单步跟踪了。<br />
显然，Welkin还能忍受这种代码，因为他做套装的时候，并没有重写这些代码。<br />
必须承认，当时我也容忍了这些代码，只是修改了部分，以求完成功能。<br />
当然我可以给自己借口：当时业务逻辑和前端技术都不太熟悉，想改也无从下手。<br />
但是总之，我容忍了这种代码的存在。</p>
<p>再后来要对大头贴做改版，再次碰到了这种无从下手的代码。<br />
从代码的风格可以看出，明显经过三个人以上的修改。<br />
这次我把流程整理了一下，但也没有重写。<br />
或者说，一定程度上，我又容忍了。</p>
<p>08年10月，我来到了邮箱，早期的主要工作是对阅读空间的CGI做重构。<br />
经过几轮的重构之后，程序的流程变得比较让人满意，在这个基础上做新功能的速度也有了提升。<br />
但是经过一段时间的开发之后，现在代码里的坏味慢慢开始散发出来。</p>
<p>所以我的结论是，代码也符合热力学定律，自然就处于熵增的状态，必然会慢慢变得腐烂。<br />
而<strong>一个团队的代码质量，并不决定于你能写出多好的代码，而是决定于你能容忍多烂的代码。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2010/05/14/%e4%bb%a3%e7%a0%81%e7%9a%84%e7%86%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于互联网开发模式</title>
		<link>http://icomes.net/2010/04/18/%e5%85%b3%e4%ba%8e%e4%ba%92%e8%81%94%e7%bd%91%e5%bc%80%e5%8f%91%e6%a8%a1%e5%bc%8f/</link>
		<comments>http://icomes.net/2010/04/18/%e5%85%b3%e4%ba%8e%e4%ba%92%e8%81%94%e7%bd%91%e5%bc%80%e5%8f%91%e6%a8%a1%e5%bc%8f/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 14:09:15 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[敏捷]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=487</guid>
		<description><![CDATA[还是写点东西吧，不管有什么用，起码没有坏处。
&#8211; 写在最前面
在互联网这个快速变化的行业，要跟上每天都可能改变的需求，传统的瀑布开发模式显然不合适。
于是有“敏捷软件开发”这样的新开发模式被应用到互联网的日常开发当中，而这也是在腾讯内常用的模式。
根据《敏捷软件开发宣言》，四个最重要的价值观是：

人和交互重于过程和工具。
可以工作的软件重于求全责备的文档。
客户协作重于合同谈判。
随时应对变化重于循规蹈矩。

由以上的价值观所强调的部分，其实可以归纳出两个要点：人本身，以及人之间直接、快速、有效的沟通。
从人的角度考虑，最起码的要求是，需要整个开发过程中的每个角色都可以在其位，谋其事。
至于角色的划分，可能不同公司有不同的方法。在Web方面，根据我的理解，大致可以分为以下几种：
产品经理：
基本上是各个角色中和人打交道成份最高的一个，所以对沟通能力的要求会比较高；另外良好的策划能力也是必须的
负责产品的整体方向，收集用户需求（包括来自用户和老大的），协调各种资源⋯⋯
常用的工具是Word、PPT、各式各样的沟通工具（IM、Email、SMS、BBS、广播⋯⋯）
项目经理：
跟踪项目的开发进度，保证版本的准时交付
负责规划产品的整体开发，划分需求，分配任务⋯⋯，
常用的工具可是各种各样的协作平台（例如TAPD）
UI设计师：
最具艺术家气息的角色
打交道的对象是布局、色彩、字体等等UI相关的元素
用户对网站的第一印象主要源自于UI设计师对产品的设计和感觉
常用的工具是PhotoShop
页面设计师：
将UI设计师的设计图切分为浏览器可以解析的页面
打交道的对象是HTML、CSS
最麻烦之处在于要兼容页面在各种浏览器上的表现，尤以个性独特著称的IE为甚
常用的工具是Editplus、Notepad++等编辑器（我没见过有人用Dream Weaver或者FrontPage），IE Dev Tool、Firebug等调试工具
交互工程师：
处理页面上的动态效果，浏览器和HTTP Server之间的通信，以及浏览器上的业务逻辑
打交道的对象主要是JavaScript（VBScript极其少见）
最麻烦之处在于要兼容脚本在各种浏览器上的表现，尤是以个性独特著称的IE为甚
常用的工具是Aptana等IDE；调试会用Visual Studio脚本调试器，Firebug等，当然也不会禁用alert，虽然比printf更不优雅
前端工程师：
串联浏览器和后台服务间的数据传输，产品逻辑的主要控制者
打交道的对象是PHP、JSP、ASP、CGI等动态程序
这里的前端主要是指后台服务的前端，充当了表现和数据间的桥梁。
对应到MVC模型，属于Controll部分。相应的，前面提到的三个角色属于View
常用的工具是Eclipse、Visual Studio、Source Insight、TextMate等IDE（可能SI和TM不算IDE，因为本身没有编译功能，不过可以定制）
后台工程师：
实现后台服务，为网站的数据存储提供支持，是系统性能、可靠性的主要保障者
打交道对象是OS、API、网络、文件系统、MySQL等
MVC模型里的Model
常用的工具是VIM、Emacs
UI设计师、页面设计师、交互工程师、前端工程师、后台工程师之间的关系，有点类似于网络模型中的各个层次：使用下层提供的服务，并为上层提供服务。
用户可以直接感受到部分，大部分都是UI设计师、页面设计师和交互工程师完成的。
因为关乎用户体验，所以他们的工作需要处理非常多的细节效果，这许多细节的叠加，就构成了用户对网站的感觉，决定了用户是否会喜欢上我们的产品。
而前端工程师和后台工程师的工作很多是用户不能直接看到的，有点类似于海面下的冰山。虽然不能直接看到，但系统的速度和稳定性都依赖于两者的工作。
而产品经理和项目经理基本上和上面的五个角色都会打交道。
在实际的工程中，并不一定每个角色都有一个或多个人担任，往往是一个人身兼数职。例如，在项目的起步阶段，1经理、1设计师和1工程师就可以构架出基本的功能和服务。
看了上面这么多文字，如果让你想办法提升一个团队的产能，你会有什么建议？
在我看来，不外乎两个途径：提升个人能力，降低沟通成本。
先说提升个人能力。这和每个人的基本素质、学习欲望、工作态度等自身因素有关，也受公司的氛围、培训以及行业的状况等外部因素的影响。这些都不是朝夕之间可以改变的，所以如果希望短期看到成效，还是看看沟通方面可以做些什么。（当然，如果有充足的资金，人也不是问题）
关于降低沟通成本，我觉得有几个方法，效果从好到差分别是：
上策：将上述的各个角色都放到一个真实的Team里
这在小团队或者创业团队里比较容易实现，但是当人员日益增加，小组按照职能划分之后，就很难维持了。
中策：成立一个虚拟团队，并让他们坐在一起
如果不能保证组织架构上的整体性，其他保证名义上和空间上的吧。但如果人员来自不同的部门，这一条也很难实现。
下策：定期会议
其实很多无谓会议都是低效的根源，但如果没办法做到以上的两点，唯有牺牲一些个人工作的效率，来提升沟通的效率了。
上面的种种方法，终极目的都是“让每个人自始至终都参与其中”，有了归属感之后，自然就不会把实现产品仅仅当成是自己的工作了，其实这也是QQ邮箱能够做到敏捷的秘诀吧。
]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">还是写点东西吧，不管有什么用，起码没有坏处。<br />
&#8211; 写在最前面</p>
<p>在互联网这个快速变化的行业，要跟上每天都可能改变的需求，传统的瀑布开发模式显然不合适。<br />
于是有“敏捷软件开发”这样的新开发模式被应用到互联网的日常开发当中，而这也是在腾讯内常用的模式。</p>
<p>根据《敏捷软件开发宣言》，四个最重要的价值观是：</p>
<ul>
<li><strong>人和交互</strong>重于过程和工具。</li>
<li><strong>可以工作的软件</strong>重于求全责备的文档。</li>
<li><strong>客户协作</strong>重于合同谈判。</li>
<li><strong>随时应对变化</strong>重于循规蹈矩。</li>
</ul>
<p>由以上的价值观所强调的部分，其实可以归纳出两个要点：<strong>人本身，以及人之间直接、快速、有效的沟通</strong>。</p>
<p>从人的角度考虑，最起码的要求是，需要整个开发过程中的每个角色都可以在其位，谋其事。<br />
至于角色的划分，可能不同公司有不同的方法。在Web方面，根据我的理解，大致可以分为以下几种：</p>
<p>产品经理：</p>
<p style="padding-left: 30px;">基本上是各个角色中和人打交道成份最高的一个，所以对沟通能力的要求会比较高；另外良好的策划能力也是必须的<br />
负责产品的整体方向，收集用户需求（包括来自用户和老大的），协调各种资源⋯⋯<br />
常用的工具是Word、PPT、各式各样的沟通工具（IM、Email、SMS、BBS、广播⋯⋯）</p>
<p>项目经理：</p>
<p style="padding-left: 30px;">跟踪项目的开发进度，保证版本的准时交付<br />
负责规划产品的整体开发，划分需求，分配任务⋯⋯，<br />
常用的工具可是各种各样的协作平台（例如TAPD）</p>
<p>UI设计师：</p>
<p style="padding-left: 30px;">最具艺术家气息的角色<br />
打交道的对象是布局、色彩、字体等等UI相关的元素<br />
用户对网站的第一印象主要源自于UI设计师对产品的设计和感觉<br />
常用的工具是PhotoShop</p>
<p>页面设计师：</p>
<p style="padding-left: 30px;">将UI设计师的设计图切分为浏览器可以解析的页面<br />
打交道的对象是HTML、CSS<br />
最麻烦之处在于要兼容页面在各种浏览器上的表现，尤以个性独特著称的IE为甚<br />
常用的工具是Editplus、Notepad++等编辑器（我没见过有人用Dream Weaver或者FrontPage），IE Dev Tool、Firebug等调试工具</p>
<p>交互工程师：</p>
<p style="padding-left: 30px;">处理页面上的动态效果，浏览器和HTTP Server之间的通信，以及浏览器上的业务逻辑<br />
打交道的对象主要是JavaScript（VBScript极其少见）<br />
最麻烦之处在于要兼容脚本在各种浏览器上的表现，尤是以个性独特著称的IE为甚<br />
常用的工具是Aptana等IDE；调试会用Visual Studio脚本调试器，Firebug等，当然也不会禁用alert，虽然比printf更不优雅</p>
<p>前端工程师：</p>
<p style="padding-left: 30px;">串联浏览器和后台服务间的数据传输，产品逻辑的主要控制者<br />
打交道的对象是PHP、JSP、ASP、CGI等动态程序<br />
这里的前端主要是指后台服务的前端，充当了表现和数据间的桥梁。<br />
对应到MVC模型，属于Controll部分。相应的，前面提到的三个角色属于View<br />
常用的工具是Eclipse、Visual Studio、Source Insight、TextMate等IDE（可能SI和TM不算IDE，因为本身没有编译功能，不过可以定制）</p>
<p>后台工程师：</p>
<p style="padding-left: 30px;">实现后台服务，为网站的数据存储提供支持，是系统性能、可靠性的主要保障者<br />
打交道对象是OS、API、网络、文件系统、MySQL等<br />
MVC模型里的Model<br />
常用的工具是VIM、Emacs</p>
<p>UI设计师、页面设计师、交互工程师、前端工程师、后台工程师之间的关系，有点类似于网络模型中的各个层次：使用下层提供的服务，并为上层提供服务。<br />
用户可以直接感受到部分，大部分都是UI设计师、页面设计师和交互工程师完成的。<br />
因为关乎用户体验，所以他们的工作需要处理非常多的细节效果，这许多细节的叠加，就构成了用户对网站的感觉，决定了用户是否会喜欢上我们的产品。<br />
而前端工程师和后台工程师的工作很多是用户不能直接看到的，有点类似于海面下的冰山。虽然不能直接看到，但系统的速度和稳定性都依赖于两者的工作。</p>
<p>而产品经理和项目经理基本上和上面的五个角色都会打交道。</p>
<p>在实际的工程中，并不一定每个角色都有一个或多个人担任，往往是一个人身兼数职。例如，在项目的起步阶段，1经理、1设计师和1工程师就可以构架出基本的功能和服务。</p>
<p>看了上面这么多文字，如果让你想办法提升一个团队的产能，你会有什么建议？<br />
在我看来，不外乎两个途径：提升个人能力，降低沟通成本。</p>
<p>先说提升个人能力。这和每个人的基本素质、学习欲望、工作态度等自身因素有关，也受公司的氛围、培训以及行业的状况等外部因素的影响。这些都不是朝夕之间可以改变的，所以如果希望短期看到成效，还是看看沟通方面可以做些什么。（当然，如果有充足的资金，人也不是问题）</p>
<p>关于降低沟通成本，我觉得有几个方法，效果从好到差分别是：</p>
<p>上策：将上述的各个角色都放到一个真实的Team里</p>
<p style="padding-left: 30px;">这在小团队或者创业团队里比较容易实现，但是当人员日益增加，小组按照职能划分之后，就很难维持了。</p>
<p>中策：成立一个虚拟团队，并让他们坐在一起</p>
<p style="padding-left: 30px;">如果不能保证组织架构上的整体性，其他保证名义上和空间上的吧。但如果人员来自不同的部门，这一条也很难实现。</p>
<p>下策：定期会议</p>
<p style="padding-left: 30px;">其实很多无谓会议都是低效的根源，但如果没办法做到以上的两点，唯有牺牲一些个人工作的效率，来提升沟通的效率了。</p>
<p>上面的种种方法，终极目的都是“<strong>让每个人自始至终都参与其中</strong>”，有了归属感之后，自然就不会把实现产品仅仅当成是自己的工作了，其实这也是QQ邮箱能够做到敏捷的秘诀吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2010/04/18/%e5%85%b3%e4%ba%8e%e4%ba%92%e8%81%94%e7%bd%91%e5%bc%80%e5%8f%91%e6%a8%a1%e5%bc%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置Putty Window Title动态变化的方法</title>
		<link>http://icomes.net/2010/04/01/%e8%ae%be%e7%bd%aeputty-window-title%e7%9a%84%e6%96%b9%e6%b3%95/</link>
		<comments>http://icomes.net/2010/04/01/%e8%ae%be%e7%bd%aeputty-window-title%e7%9a%84%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 07:08:06 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=483</guid>
		<description><![CDATA[原以为在Putty里设置几个宏就行，
结果一个Hardcode的输入框和几个Disable的复选框之外，找不到其他有用的东西。
答案还是在Google里：）
需要在Server上设置一个环境变量，
现在的写法是：


PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"';


不单Putty，SecureCRT之类的终端应该也适用吧。
可以加到~/.profile，每次登陆自动生效。
]]></description>
			<content:encoded><![CDATA[<p>原以为在Putty里设置几个宏就行，<br />
结果一个Hardcode的输入框和几个Disable的复选框之外，找不到其他有用的东西。</p>
<p>答案还是在Google里：）<br />
需要在Server上设置一个环境变量，<br />
现在的写法是：</p>
<pre>
<code>
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"';
</code>
</pre>
<p>不单Putty，SecureCRT之类的终端应该也适用吧。<br />
可以加到~/.profile，每次登陆自动生效。</p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2010/04/01/%e8%ae%be%e7%bd%aeputty-window-title%e7%9a%84%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《iPhone开发基础教程》1－3章</title>
		<link>http://icomes.net/2009/12/30/iphone%e5%bc%80%e5%8f%91%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b1-3/</link>
		<comments>http://icomes.net/2009/12/30/iphone%e5%bc%80%e5%8f%91%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b1-3/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 17:27:12 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=478</guid>
		<description><![CDATA[第一章
     Xcode需要运行在基于Intel的Leopard之后的Mac OS之上
     Cocoa Touch使用Objective-C 2.0
     编写iPhone应用程序的特别之处
          只有一个正在运行的程序
          只有一个窗口
          访问受限     沙盒
          有限的响应时间     按下Home后5秒内没完成清理，将被强制退出
          有限的屏幕大小     480*320
          有限的系统资源     内存不足时，应用程序会收到通知。如果不能及时释放内存，可能被强制退出
          缺少Cocoa工具     不支持垃圾收集
          新属性     定位、摄像、图片库和加速计
     本书内容
          2 Interface Builder基础
          3 基础交互
          4 基本控件
          5 方向感应
          6 多视图
          7 工具栏
          8 TableView
          9 分层列表
          10 应用程序设置
          11 数据管理     SQLite
          12 绘图     Quartz和OpenGL ES
          13 多点触摸
          14 Core Location
          15 加速计
          16 摄像头和图片库
          17 I18n

第二章
     Project的目录结构，仅为逻辑结构
          Classes     存放大部分代码
          Other Sources     其他源代码
               .pch     预编译的头文件 precompiled header
               main.m     main函数，通常不需修改
          Resources     非代码文件，图标、图像、音频、视频文本
               .xib     Interface Builder用到的信息
               Info.plist     应用程序相关属性列表
               MainWindow.xib     主Interface Builder文件
          Frameworks     框架和库
          Products     编译生成的应用程序
     [...]]]></description>
			<content:encoded><![CDATA[<p><font size="4"><font size="4"><b>第一章</b></font></font>
<div>     Xcode需要运行在基于Intel的Leopard之后的Mac OS之上</div>
<div>     Cocoa Touch使用Objective-C 2.0</div>
<div>     编写iPhone应用程序的特别之处</div>
<div>          只有一个正在运行的程序</div>
<div>          只有一个窗口</div>
<div>          访问受限     沙盒</div>
<div>          有限的响应时间     按下Home后5秒内没完成清理，将被强制退出</div>
<div>          有限的屏幕大小     480*320</div>
<div>          有限的系统资源     内存不足时，应用程序会收到通知。如果不能及时释放内存，可能被强制退出</div>
<div>          缺少Cocoa工具     不支持垃圾收集</div>
<div>          新属性     定位、摄像、图片库和加速计</div>
<div>     本书内容</div>
<div>          2 Interface Builder基础</div>
<div>          3 基础交互</div>
<div>          4 基本控件</div>
<div>          5 方向感应</div>
<div>          6 多视图</div>
<div>          7 工具栏</div>
<div>          8 TableView</div>
<div>          9 分层列表</div>
<div>          10 应用程序设置</div>
<div>          11 数据管理     SQLite</div>
<div>          12 绘图     Quartz和OpenGL ES</div>
<div>          13 多点触摸</div>
<div>          14 Core Location</div>
<div>          15 加速计</div>
<div>          16 摄像头和图片库</div>
<div>          17 I18n</div>
<div><br/></div>
<div><font color="#000000" size="4"><font size="4"><b>第二章</b></font></font></div>
<div>     Project的目录结构，仅为逻辑结构</div>
<div>          Classes     存放大部分代码</div>
<div>          Other Sources     其他源代码</div>
<div>               .pch     预编译的头文件 precompiled header</div>
<div>               main.m     main函数，通常不需修改</div>
<div>          Resources     非代码文件，图标、图像、音频、视频文本</div>
<div>               .xib     Interface Builder用到的信息</div>
<div>               Info.plist     应用程序相关属性列表</div>
<div>               MainWindow.xib     主Interface Builder文件</div>
<div>          Frameworks     框架和库</div>
<div>          Products     编译生成的应用程序</div>
<div>     Interface Builder</div>
<div>          支持.nib（旧）和.xib（新）两种格式，统称nib或nib文件</div>
<div>     nib文件的构成</div>
<div>          File&#8217;s Owner     所有nib文件的第一个图标，表示加载nib文件的对象，<font color="#FF2A28">控制器类是与之同名的nib文件的Owner</font></div>
<div>          First Responder     用户当前正在与之交互的对象，随用户与界面的交互而变化</div>
<div>          其他图标表示将在nib文件加载时创建的对象实例</div>
<div>     图标</div>
<div>          png     57*57</div>
<div>          放到Resources文件夹中</div>
<div>          在Info.plist中设置</div>
<div>     仿真器</div>
<div>          删除~/Library/Application Support/iPhone Simulator以清空主屏幕图标</div>
<div><br/></div>
<div><font color="#000000" size="4"><font size="4"><b>第三章</b></font></font></div>
<div>     MVC模型</div>
<div>          M     Objective-C类</div>
<div>          V     Interface Builder</div>
<div>          C     NSObject，更多的是通用控制器类，如UIViewController</div>
<div>     控制器</div>
<div>          控制器类试用一种特殊的实例变量（输出口，outlet）来引用nib中的对象</div>
<div>          输出口可以看成是指向nib中的对象的指针</div>
<div>          可以通过绑定操作方法，设置nib文件的界面对象触发控制类中的特殊方法</div>
<div>     输出口</div>
<div>          IBOutlet     一个没有内容的宏，唯一作用是告诉Interface Builder此实例变量将被连接到nib中的对象</div>
<div>     操作</div>
<div>          IBAction     告诉Interface Builder，此方法是一个操作，且可以被某控件触发</div>
<div>          - (IBAction)doSomething:(id) sender;</div>
<div>     Outlet与Action的声明</div>
<div>          @property (retain, nonatomic) IBOutlet UILabel *statusText;</div>
<div>          retain 对象在内存中驻留</div>
<div>          nonatomic 无须支持多线程？</div>
<div>          myVar = [someObj foo] 等价于 myVar = someObj.foo</div>
<div>          someObj.foo = myVar 等价于 [someObj setFoo:myVar]</div>
<div>     Outlet与Action的实现</div>
<div>          @synthesize statusText</div>
<div>          [statusText release] in dealloc()，照应retain</div>
<div>     应用程序委托</div>
<div>          每个iPhone应用程序有且仅有一个UIApplication实例，负责应用程序的运行循环以及处理各种应用程序级功能</div>
<div>     连接输出口</div>
<div>          Control+拖动，从File‘s Owner到相应的控件对象</div>
<div>     指定操作</div>
<div>          Touch Up Inside</div>
<div>          拖动，从Event到File‘s Owner</div>
<div>          </div>
<div><br/></div>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/12/30/iphone%e5%bc%80%e5%8f%91%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b1-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从c++到Objective-C</title>
		<link>http://icomes.net/2009/12/27/%e4%bb%8ec%e5%88%b0objective-c/</link>
		<comments>http://icomes.net/2009/12/27/%e4%bb%8ec%e5%88%b0objective-c/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 14:53:06 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[ObjC]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=475</guid>
		<description><![CDATA[1. 头文件依然是.h
2. .cpp变成了.m
3. #import代替了#include，#import保证只会引用一次，相当于.h里的#ifndef #define #endif模式
4. 用@interface &#8230; @end来声明类，取代class ClassName{}
5. 用@implementation &#8230; @end来实现类
6. Data Members放在@interface ClassName : Parent{ &#8230; }中，默认权限为@protected，在ObjC里称为Instance Variables
7. Member Functions放在@interface ClassName: Parent{} &#8230; @end中，在ObjC里称为Instance Methods
8. Instance Methods的声明方式为：scope (returnType) methodName: (parameter1Type) parameter1Name;
9. scope分instance和class两种，分别用-和+表示
10. 调用method的方式是[object method]，相当于object-&#62;method()
11. 带参数调用method的方式是[object method: parameter]
12. 没有Object，只有Pointer to Object
13. 通常的构造方式： Object * obj = [[Object alloc] init]
14. 析构的方式：[obj release]15.多参数method的声明方式： scope (returnType) [...]]]></description>
			<content:encoded><![CDATA[<p>1. 头文件依然是.h<br />
2. .cpp变成了.m<br />
3. #import代替了#include，#import保证只会引用一次，相当于.h里的#ifndef #define #endif模式<br />
4. 用@interface &#8230; @end来声明类，取代class ClassName{}<br />
5. 用@implementation &#8230; @end来实现类<br />
6. Data Members放在@interface ClassName : Parent{ &#8230; }中，默认权限为@protected，在ObjC里称为Instance Variables<br />
7. Member Functions放在@interface ClassName: Parent{} &#8230; @end中，在ObjC里称为Instance Methods<br />
8. Instance Methods的声明方式为：scope (returnType) methodName: (parameter1Type) parameter1Name;<br />
9. scope分instance和class两种，分别用-和+表示<br />
10. 调用method的方式是[object method]，相当于object-&gt;method()<br />
11. 带参数调用method的方式是[object method: parameter]<br />
12. 没有Object，只有Pointer to Object<br />
13. 通常的构造方式： Object * obj = [[Object alloc] init]<br />
14. 析构的方式：[obj release]15.多参数method的声明方式： scope (returnType) methodName: (parameter1Type) parameter1Name label1Name: (parameter2Type) parameter2Name &#8230; ;<br />
16. labelName不是必须的<br />
17. 这种特别的语法源自SmallTalk<br />
18. private: [list of vars] protected: [list of vars] public: [list of vars] 改成了@private, @protected, @public<br />
19. Class Variable用static的方法实现⋯⋯<br />
20. +(void) initialize 会在构造的时候被调用<br />
21. ObjC通常用@符号表示语言的衍生部分<br />
22. ObjC用id来表示范型对象的指针<br />
23. 支持动态类型识别<br />
24. Categories机制可用于不继承已有class的前提下加入新功能<br />
25. Posing机制允许Child取代Parent<br />
26. Protocol相当于pure virtual class<br />
27. ObjC由两种内存管理的方法，1) retain and release，2) retain and release/autorelease<br />
28. Foundation相当于STL，NSArray对应vector，NSDictionary对应map<br />
29. ObjC不支持Namespace<br />
30. 不支持重载</p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/12/27/%e4%bb%8ec%e5%88%b0objective-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web实现服务器推的三种技术</title>
		<link>http://icomes.net/2009/10/24/web%e5%ae%9e%e7%8e%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%8e%a8%e7%9a%84%e4%b8%89%e7%a7%8d%e6%8a%80%e6%9c%af/</link>
		<comments>http://icomes.net/2009/10/24/web%e5%ae%9e%e7%8e%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%8e%a8%e7%9a%84%e4%b8%89%e7%a7%8d%e6%8a%80%e6%9c%af/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 07:07:00 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Server Push]]></category>
		<category><![CDATA[服务器推]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=468</guid>
		<description><![CDATA[1. Hidden iframe
将iframe的src指向一个url，server收到请求后，Keep-Alive。
数据直接以script的方式下发到Browser，Browser收到数据后直接执行。
只要不超时，链接会一直保留。
优：感觉这是真正的长连接，对stream也有完整的支持。
劣：Browser状态栏会一直处于“连接中”，ESC会导致链接断开，会有跨域问题
2. Script Tag
用JS创建一个script对象，将该对象的src指向一个url，Keep-Alive。
在一定时间内（超时前），如果sever有数据下发，则用script的方式发送到Browser。
Browser收到数据后直接执行，此时需要重建script对象，建立另一个链接。
优：没有Hidden iframe的缺点，也比较轻量
劣：不是真正的长链接，每收到一个新的下发数据，都需要重新建立链接
3 AJAX
用JS创建一个XHR对象，将该对象的src指向一个url，Keep-Alive。
在一定时间内（超时前），如果sever有数据下发，则通过已建立的链接发送到Browser。
Browser收到数据后直接执行，此时需要重建XHR对象，建立另一个链接。
优：没有Hidden iframe的缺点
劣：存在跨域问题，不是真正的长链接，每收到一个新的下发数据，都需要重新建立链接
2 和 3也可以叫做Long Polling
除了这三种方法，还可以用Flash，由Flash和Server通信，页面用过JS和Flash通信。
这可以实现真正的下发，甚至不需要维护长链接。
但也可能存在被防火墙屏蔽的问题。
三种方法都用php模拟了一下：
Hidden Iframe

&#60;html&#62;
&#60;head&#62;
&#60;script&#62;
function callback&#40;data&#41;
&#123;
	document.getElementById&#40;&#34;t&#34;&#41;.value = data + &#34;\n&#34; + document.getElementById&#40;&#34;t&#34;&#41;.value;
&#125;
&#160;
callback&#40;&#34;abc&#34;&#41;;
&#60;/script&#62;
&#60;/head&#62;
&#60;body&#62;
hello
&#60;textarea id=&#34;t&#34;&#62;&#60;/textarea&#62;
&#60;iframe src=&#34;/hiddeniframe.php&#34; width=&#34;0&#34; height=&#34;0&#34;&#62;&#60;/iframe&#62;
&#60;/body&#62;
&#60;/html&#62;


&#60;?php
	ob_end_flush&#40;&#41;;
	echo &#34;&#60;script&#62;&#34;;
	echo &#34;domain=serverpush&#34;;
	echo &#34;&#60;/script&#62;&#34;;
	for&#40; ; ; &#41;
	&#123;
		$t = time&#40;&#41;;
		echo &#34;&#60;script&#62;&#34;;
		echo &#34;parent.callback($t);&#34;;
		echo &#34;&#60;/script&#62;&#34;;
		flush&#40;&#41;;
		sleep&#40;1&#41;;
	&#125;
?&#62;

Script Tag

&#60;html&#62;
&#60;head&#62;
&#60;script&#62;
function callback&#40;data&#41;
&#123;
	document.getElementById&#40;&#34;t&#34;&#41;.value = data + &#34;\n&#34; + document.getElementById&#40;&#34;t&#34;&#41;.value;
&#125;
&#160;
function connect&#40;&#41;
&#123;
    var _script = document.createElement&#40;&#34;script&#34;&#41;;
    _script.setAttribute&#40;&#34;type&#34;, &#34;text/javascript&#34;&#41;;
 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1. Hidden iframe</strong></p>
<p>将iframe的src指向一个url，server收到请求后，Keep-Alive。<br />
数据直接以script的方式下发到Browser，Browser收到数据后直接执行。<br />
只要不超时，链接会一直保留。</p>
<p>优：感觉这是真正的长连接，对stream也有完整的支持。<br />
劣：Browser状态栏会一直处于“连接中”，ESC会导致链接断开，会有跨域问题</p>
<p><strong>2. Script Tag</strong></p>
<p>用JS创建一个script对象，将该对象的src指向一个url，Keep-Alive。<br />
在一定时间内（超时前），如果sever有数据下发，则用script的方式发送到Browser。<br />
Browser收到数据后直接执行，此时需要重建script对象，建立另一个链接。</p>
<p>优：没有Hidden iframe的缺点，也比较轻量<br />
劣：不是真正的长链接，每收到一个新的下发数据，都需要重新建立链接</p>
<p><strong>3 AJAX</strong></p>
<p>用JS创建一个XHR对象，将该对象的src指向一个url，Keep-Alive。<br />
在一定时间内（超时前），如果sever有数据下发，则通过已建立的链接发送到Browser。<br />
Browser收到数据后直接执行，此时需要重建XHR对象，建立另一个链接。</p>
<p>优：没有Hidden iframe的缺点<br />
劣：存在跨域问题，不是真正的长链接，每收到一个新的下发数据，都需要重新建立链接</p>
<p>2 和 3也可以叫做Long Polling</p>
<p>除了这三种方法，还可以用Flash，由Flash和Server通信，页面用过JS和Flash通信。<br />
这可以实现真正的下发，甚至不需要维护长链接。<br />
但也可能存在被防火墙屏蔽的问题。</p>
<p>三种方法都用php模拟了一下：</p>
<p>Hidden Iframe</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> callback<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> data <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">+</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
callback<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;abc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
hello
<span style="color: #339933;">&lt;</span>textarea id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;/</span>textarea<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>iframe src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/hiddeniframe.php&quot;</span> width<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;0&quot;</span> height<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;0&quot;</span><span style="color: #339933;">&gt;&lt;/</span>iframe<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #990000;">ob_end_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;script&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;domain=serverpush&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/script&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">;</span> <span style="color: #339933;">;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$t</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;script&gt;&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;parent.callback(<span style="color: #006699; font-weight: bold;">$t</span>);&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/script&gt;&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Script Tag</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> callback<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> data <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">+</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> _script <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;script&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    _script.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    _script.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;src&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;script.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;head&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>_script<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span>
&nbsp;
connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>textarea id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;/</span>textarea<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;callback(<span style="color: #006699; font-weight: bold;">$r</span>);&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;setTimeout(connect, 1000)&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>AJAX</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> callback<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> data <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">+</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> ajax <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #339933;">;</span>
	ajax.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;POST&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;ajax.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	ajax.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>       
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ajax.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>       
			<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ajax.<span style="color: #000066;">status</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span> 
			<span style="color: #009900;">&#123;</span>       
				callback<span style="color: #009900;">&#40;</span>ajax.<span style="color: #660066;">responseText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
				setTimeout<span style="color: #009900;">&#40;</span>connect<span style="color: #339933;">,</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>       
		<span style="color: #009900;">&#125;</span>       
	<span style="color: #009900;">&#125;</span>
	ajax.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>textarea id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;/</span>textarea<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #990000;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/10/24/web%e5%ae%9e%e7%8e%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%8e%a8%e7%9a%84%e4%b8%89%e7%a7%8d%e6%8a%80%e6%9c%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用visio画的UML图例</title>
		<link>http://icomes.net/2009/10/18/%e7%94%a8visio%e7%94%bb%e7%9a%84uml%e5%9b%be%e4%be%8b/</link>
		<comments>http://icomes.net/2009/10/18/%e7%94%a8visio%e7%94%bb%e7%9a%84uml%e5%9b%be%e4%be%8b/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 07:21:34 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[visio]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=462</guid>
		<description><![CDATA[昨晚看设计模式，顺便复习UML。
这里是一个比较好的图例说明，其中有些错误，于是用visio重画了一下。
美中不足的是，似乎visio不支持带箭头的Association，也可能是我不会用吧。

]]></description>
			<content:encoded><![CDATA[<p>昨晚看设计模式，顺便复习UML。<br />
<a title="http://www.cnblogs.com/yangfengming/archive/2008/08/14/1267495.html" href="http://" target="_blank">这里</a>是一个比较好的图例说明，其中有些错误，于是用visio重画了一下。<br />
美中不足的是，似乎visio不支持带箭头的Association，也可能是我不会用吧。</p>
<p><a href="http://icomes.net/wp-content/uploads/2009/10/UML1.jpg"><img class="alignnone size-full wp-image-466" title="UML" src="http://icomes.net/wp-content/uploads/2009/10/UML1.jpg" alt="UML" width="719" height="650" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/10/18/%e7%94%a8visio%e7%94%bb%e7%9a%84uml%e5%9b%be%e4%be%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>visio中“实现接口”三角箭头的画法</title>
		<link>http://icomes.net/2009/10/18/visio%e4%b8%ad%e2%80%9c%e5%ae%9e%e7%8e%b0%e6%8e%a5%e5%8f%a3%e2%80%9d%e4%b8%89%e8%a7%92%e7%ae%ad%e5%a4%b4%e7%9a%84%e7%94%bb%e6%b3%95/</link>
		<comments>http://icomes.net/2009/10/18/visio%e4%b8%ad%e2%80%9c%e5%ae%9e%e7%8e%b0%e6%8e%a5%e5%8f%a3%e2%80%9d%e4%b8%89%e8%a7%92%e7%ae%ad%e5%a4%b4%e7%9a%84%e7%94%bb%e6%b3%95/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 05:04:10 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[visio]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=460</guid>
		<description><![CDATA[Google到CSDN上的结果：
在Visio图形元素上，点击右键，选择“形状显示选项”，将“实现链接”选中，这个时候，类图形元素上会出现一个黄点，拖动这个黄点，连接到表示接口的图形元素上。实现类和接口之间的关系就自动出来了。
]]></description>
			<content:encoded><![CDATA[<p>Google到CSDN上的结果：</p>
<blockquote><p>在Visio图形元素上，点击右键，选择“形状显示选项”，将“实现链接”选中，这个时候，类图形元素上会出现一个黄点，拖动这个黄点，连接到表示接口的图形元素上。实现类和接口之间的关系就自动出来了。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/10/18/visio%e4%b8%ad%e2%80%9c%e5%ae%9e%e7%8e%b0%e6%8e%a5%e5%8f%a3%e2%80%9d%e4%b8%89%e8%a7%92%e7%ae%ad%e5%a4%b4%e7%9a%84%e7%94%bb%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RFC2616中关于HTTP Status Code的定义</title>
		<link>http://icomes.net/2009/10/12/rfc2616%e4%b8%ad%e5%85%b3%e4%ba%8ehttp-status-code%e7%9a%84%e5%ae%9a%e4%b9%89/</link>
		<comments>http://icomes.net/2009/10/12/rfc2616%e4%b8%ad%e5%85%b3%e4%ba%8ehttp-status-code%e7%9a%84%e5%ae%9a%e4%b9%89/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 14:09:02 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[Protocol]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[技术笔记]]></category>
		<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[rfc]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=450</guid>
		<description><![CDATA[花了半天时间，看了一次http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
下面是相关的笔记和理解，
感觉很多Status Code在实际的BS通信中都不常见，
更多像是为了定义完备的协议语义，
而这些语义现在已经部分由更上层的协议或者应用实现。
1xx     Informational
100     Continue
&#160;&#160;&#160;&#160;如果server可能拒绝request，则client只发送header部分，试探server的反应
&#160;&#160;&#160;&#160;如果server接受，则返回100，于是client再发送剩余的body部分
101     Switch Protocol
2xx     Successful
200     OK
201     Created
&#160;&#160;&#160;&#160;有资源因Request而产生
202     Accepted
&#160;&#160;&#160;&#160;Request要求的动作已经被记录，但真正的动作要等待若干时间才执行，而且不保证一定执行
203     Non-Authoritative Information
204     No Content
&#160;&#160;&#160;&#160;google.cn的web server会返回
205     [...]]]></description>
			<content:encoded><![CDATA[<p>花了半天时间，看了一次<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html" target="_blank">http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html</a></p>
<p>下面是相关的笔记和理解，<br />
感觉很多Status Code在实际的BS通信中都不常见，<br />
更多像是为了定义完备的协议语义，<br />
而这些语义现在已经部分由更上层的协议或者应用实现。</p>
<h3>1xx     Informational</h3>
<p><strong>100     Continue</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;如果server可能拒绝request，则client只发送header部分，试探server的反应<br />
&nbsp;&nbsp;&nbsp;&nbsp;如果server接受，则返回100，于是client再发送剩余的body部分<br />
<strong>101     Switch Protocol</strong></p>
<h3>2xx     Successful</h3>
<p><strong>200     OK<br />
201     Created</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;有资源因Request而产生<br />
<strong>202     Accepted</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;Request要求的动作已经被记录，但真正的动作要等待若干时间才执行，而且不保证一定执行<br />
<strong>203     Non-Authoritative Information<br />
204     No Content</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;google.cn的web server会返回<br />
<strong>205     Reset Content<br />
206     Partial Content</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;用于断点续传，起始位置由Range指定。（可以参考迅雷的输出）</p>
<h3>3xx     Redirection</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;User Agent需要处理循环的问题<br />
<strong>300     Multiple Choices</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;目标已变，有若干个替代品可供选择<br />
<strong>301     Moved Permanently</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;目标URI在Location里定义，除了HEAD和GET请求外，不能自动重定向<br />
&nbsp;&nbsp;&nbsp;&nbsp;对SEO不会有负面作用<br />
<strong>302     Found</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;临时重定向，是否用Moved Temporarily这个名字比较合适？<br />
&nbsp;&nbsp;&nbsp;&nbsp;目标URI在Location里定义，除了HEAD和GET请求外，不能自动重定向<br />
&nbsp;&nbsp;&nbsp;&nbsp;对SEO有负面作用<br />
<strong>303     See Other</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;和302类似，但期待User Agent用GET来请求Location里指定的URI<br />
<strong>304     Not Modified</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;通常Request会带If-Modified-Since<br />
&nbsp;&nbsp;&nbsp;&nbsp;不能带message-body<br />
<strong>305     Use Proxy</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;期待User Agent会使用Location中指定的Proxy地址，来访问数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;只能由origin server产生<br />
<strong>306     (not used)</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;之前的版本用过，已经废弃，作为保留字<br />
<strong>307     Temporary Redirect</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;没看出和302有什么不同<br />
&nbsp;&nbsp;&nbsp;&nbsp;只有HTTP/1.1支持</p>
<h3>4xx     Client Error</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在message-body中，可以自定义给User的提示<br />
<strong>400     Bad Request</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;server不能理解Request的格式<br />
&nbsp;&nbsp;&nbsp;&nbsp;用telnet可以很容易模拟<br />
<strong>401     Unauthorized</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;不能通过HTTP Authentication<br />
&nbsp;&nbsp;&nbsp;&nbsp;response header必须包含WWW-Authoricate，request header可能包含Authorization<br />
<strong>402     Payment Required</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;保留字<br />
<strong>403     Forbidden</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;如果不希望暴露过多的信息，可以用404代替<br />
<strong>404     Not Found</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;最常见的4字头Status Code，通常会自定义<br />
<strong>405     Method Not Allowed</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;response header需要包含Allow，列出支持的method<br />
<strong>406     Not Acceptable</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;response不被request header中的Accept做支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;除了HEAD，response会给出包含更多信息的entity<br />
&nbsp;&nbsp;&nbsp;&nbsp;entity format由request header中的Content-Type决定<br />
<strong>407     Proxy Authentication Required</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;与401类似<br />
&nbsp;&nbsp;&nbsp;&nbsp;Proxy的response header必须包含Proxy-Authenticate<br />
<strong>408     Request Timeout<br />
409     Conflict</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;需要User干预解决<br />
&nbsp;&nbsp;&nbsp;&nbsp;在PUT的时候可能遇到<br />
<strong>410     Gone</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;URI已经不存在，且不提供3xx来重定向<br />
&nbsp;&nbsp;&nbsp;&nbsp;如果server没有足够的信息来判断URI的不存在是temporary还是permanent，可以用404代替<br />
<strong>411     Length Required</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;request header中缺少Content-Length<br />
<strong>412     Precondition Failed<br />
413     Request Entity Too Large</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;如果只是temporary，可以包含Retry-After，指定重试的时间间隔<br />
<strong>414     Request-URI Too Long</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;有几种可能导致这个返回码的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;将POST当成了GET<br />
&nbsp;&nbsp;&nbsp;&nbsp;循环重定向，每次都append上当前URI<br />
&nbsp;&nbsp;&nbsp;&nbsp;攻击<br />
<strong>415     Unsupported Media Type<br />
&nbsp;&nbsp;&nbsp;&nbsp;416     Requested Range Not Satisfiable</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;参考206<br />
<strong>417     Expectation Failed</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;不能满足request header中的Expect，参考100</p>
<h3>5xx     Server Error</h3>
<p><strong>500     Internal Server Error</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;在server没有输出正确的response header的时候会出现<br />
<strong>501     Not Implemented<br />
502     Bad Gateway</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;由gateway或者proxy返回，表明上游server不能返回请求的URI<br />
<strong>503     Service Unavailable</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;server可能过载，或者正在维护<br />
&nbsp;&nbsp;&nbsp;&nbsp;可以返回Retry-After，如果没有，则视作500<br />
<strong>504     Gateway Timeout</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;上游server不能及时返回<br />
<strong>505     HTTP Version Not Supported</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/10/12/rfc2616%e4%b8%ad%e5%85%b3%e4%ba%8ehttp-status-code%e7%9a%84%e5%ae%9a%e4%b9%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个简单的进程池实现</title>
		<link>http://icomes.net/2009/10/11/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84%e8%bf%9b%e7%a8%8b%e6%b1%a0%e5%ae%9e%e7%8e%b0/</link>
		<comments>http://icomes.net/2009/10/11/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84%e8%bf%9b%e7%a8%8b%e6%b1%a0%e5%ae%9e%e7%8e%b0/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 10:43:49 +0000</pubDate>
		<dc:creator>梁剑</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术笔记]]></category>

		<guid isPermaLink="false">http://icomes.net/?p=448</guid>
		<description><![CDATA[实在很简陋，许多控制功能都没有实现：）
不过也能表现大致的框架吧。

/*
 * A simple process pool
 */
#include &#60;iostream&#62;
#include &#60;queue&#62;
#include &#60;vector&#62;
#include &#60;algorithm&#62;
&#160;
#include &#60;sys/wait.h&#62;
#include &#60;assert.h&#62;
#include &#60;stdlib.h&#62;
#include &#60;unistd.h&#62;
#include &#60;signal.h&#62;
&#160;
#include &#60;sys/mman.h&#62;
#include &#60;sys/select.h&#62;
&#160;
using namespace std;
&#160;
int iProcessCount = 0;
int *pDispatchCount;
&#160;
void InterruptHanler&#40;int iSigno&#41;
&#123;
	//ToDo: kill all children
	cerr &#60;&#60; &#34;Dispatch Count: &#34; &#60;&#60; endl;
	for&#40; unsigned int i = 0; i &#60; iProcessCount; i++ &#41;
	&#123;
		cerr &#60;&#60; i &#60;&#60; &#34;\t&#34; &#60;&#60; pDispatchCount&#91;i&#93; &#60;&#60; endl;
	&#125;
	exit&#40;0&#41;;
&#125;
&#160;
//ToDo: replace two [...]]]></description>
			<content:encoded><![CDATA[<p>实在很简陋，许多控制功能都没有实现：）<br />
不过也能表现大致的框架吧。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
 * A simple process pool
 */</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;queue&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;algorithm&gt;</span>
&nbsp;
<span style="color: #339900;">#include &lt;sys/wait.h&gt;</span>
<span style="color: #339900;">#include &lt;assert.h&gt;</span>
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339900;">#include &lt;unistd.h&gt;</span>
<span style="color: #339900;">#include &lt;signal.h&gt;</span>
&nbsp;
<span style="color: #339900;">#include &lt;sys/mman.h&gt;</span>
<span style="color: #339900;">#include &lt;sys/select.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> iProcessCount <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span>pDispatchCount<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> InterruptHanler<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> iSigno<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//ToDo: kill all children</span>
	<span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Dispatch Count: &quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> iProcessCount<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> i <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> <span style="color: #000080;">&lt;&lt;</span> pDispatchCount<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//ToDo: replace two pipes with socketpair</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span> <span style="color: #000040;">**</span>argv<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> argc <span style="color: #000080;">==</span> <span style="color: #0000dd;">2</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		iProcessCount <span style="color: #000080;">=</span> <span style="color: #0000dd;">atoi</span><span style="color: #008000;">&#40;</span>argv<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> iProcessCount <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span>
		iProcessCount <span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">int</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>iPipeFD<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#91;</span>iProcessCount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>iNotifyPipeFD<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#91;</span>iProcessCount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;;</span>
	pDispatchCount <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>mmap<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> iProcessCount, PROT_READ <span style="color: #000040;">|</span> PROT_WRITE, MAP_SHARED <span style="color: #000040;">|</span> MAP_ANONYMOUS, <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	queue<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> queIdle<span style="color: #008080;">;</span>
	vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> vecBusy<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> iProcessCount<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> pipe<span style="color: #008000;">&#40;</span>iPipeFD<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;pipe error&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>	
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> pipe<span style="color: #008000;">&#40;</span>iNotifyPipeFD<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;pipe error&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>	
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> iProcessCount<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		pid_t pid <span style="color: #000080;">=</span> fork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> pid <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;fork error&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> pid <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span>	<span style="color: #666666;">//child</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">int</span> iCount <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">char</span> sBuf<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
				read<span style="color: #008000;">&#40;</span> iPipeFD<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, sBuf, <span style="color: #0000dd;">15</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> i <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;: &quot;</span> <span style="color: #000080;">&lt;&lt;</span> getpid<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;, &quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #000040;">++</span>iCount <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> <span style="color: #000080;">&lt;&lt;</span> sBuf <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
				pDispatchCount<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
&nbsp;
				<span style="color: #666666;">//Do your work here</span>
				<span style="color: #0000ff;">int</span> iMax <span style="color: #000080;">=</span> <span style="color: #0000dd;">atoi</span><span style="color: #008000;">&#40;</span>sBuf<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				usleep<span style="color: #008000;">&#40;</span>iMax <span style="color: #000040;">%</span> <span style="color: #0000dd;">10000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
				write<span style="color: #008000;">&#40;</span> iNotifyPipeFD<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, <span style="color: #FF0000;">&quot;1&quot;</span>, <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		queIdle.<span style="color: #007788;">push</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">signal</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">SIGINT</span>, InterruptHanler <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">int</span> iCounter <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> queIdle.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #666666;">//Dispatch work</span>
			<span style="color: #0000ff;">char</span> sBuf<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">int</span> iRand <span style="color: #000080;">=</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000dd;">snprintf</span><span style="color: #008000;">&#40;</span>sBuf, <span style="color: #0000dd;">16</span>, <span style="color: #FF0000;">&quot;%d&quot;</span>, iRand<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
			<span style="color: #0000ff;">int</span> iIndex <span style="color: #000080;">=</span> queIdle.<span style="color: #007788;">front</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			queIdle.<span style="color: #007788;">pop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			write<span style="color: #008000;">&#40;</span> iPipeFD<span style="color: #008000;">&#91;</span>iIndex<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, sBuf, <span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span>sBuf<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;dispatch &quot;</span> <span style="color: #000080;">&lt;&lt;</span> sBuf <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; to &quot;</span> <span style="color: #000080;">&lt;&lt;</span> iIndex <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
			vecBusy.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>iIndex<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #000040;">++</span>iCounter <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>: queIdle.size = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> queIdle.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; vecBusy.size = &quot;</span> <span style="color: #000080;">&lt;&lt;</span> vecBusy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
		<span style="color: #666666;">//if( vecBusy.size() )</span>
		<span style="color: #008000;">&#123;</span>
			fd_set set<span style="color: #008080;">;</span>
			FD_ZERO<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>set<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
			<span style="color: #0000ff;">int</span> iMaxFD <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>	
			<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> vecBusy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> iIndex <span style="color: #000080;">=</span> vecBusy<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				FD_SET<span style="color: #008000;">&#40;</span> iNotifyPipeFD<span style="color: #008000;">&#91;</span>iIndex<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, <span style="color: #000040;">&amp;</span>set<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				iMaxFD <span style="color: #000080;">=</span> max<span style="color: #008000;">&#40;</span> iMaxFD, iNotifyPipeFD<span style="color: #008000;">&#91;</span>iIndex<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
&nbsp;
			<span style="color: #0000ff;">struct</span> timeval timeout<span style="color: #008080;">;</span>
			timeout.<span style="color: #007788;">tv_sec</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			timeout.<span style="color: #007788;">tv_usec</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			select<span style="color: #008000;">&#40;</span>iMaxFD <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span>, <span style="color: #000040;">&amp;</span>set, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #000040;">&amp;</span>timeout<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
			<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it <span style="color: #000080;">=</span> vecBusy.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> vecBusy.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000ff;">int</span> iIndex <span style="color: #000080;">=</span> <span style="color: #000040;">*</span>it<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">int</span> iReadFD <span style="color: #000080;">=</span> iNotifyPipeFD<span style="color: #008000;">&#91;</span>iIndex<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> FD_ISSET<span style="color: #008000;">&#40;</span> iReadFD, <span style="color: #000040;">&amp;</span>set <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					queIdle.<span style="color: #007788;">push</span><span style="color: #008000;">&#40;</span>iIndex<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					it <span style="color: #000080;">=</span> vecBusy.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>it<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
				<span style="color: #0000ff;">else</span>
				<span style="color: #008000;">&#123;</span>
					it<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://icomes.net/2009/10/11/%e4%b8%80%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84%e8%bf%9b%e7%a8%8b%e6%b1%a0%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
