<?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>Drupal Developer &#187; Project Manament</title>
	<atom:link href="http://blog.eood.cn/category/project-manament/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.eood.cn</link>
	<description>A decathlon Drupal developer &#38; programmer</description>
	<lastBuildDate>Thu, 29 Jul 2010 14:55:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>服务器端PHP多进程编程实战</title>
		<link>http://blog.eood.cn/server-side-php-progress-program-best-practice</link>
		<comments>http://blog.eood.cn/server-side-php-progress-program-best-practice#comments</comments>
		<pubDate>Fri, 02 Jul 2010 14:28:08 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Manament]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1164</guid>
		<description><![CDATA[最近比较PHP跟python, Erlang 的特性，发现PHP有很多人们不常用到的特性。用PHP CLI可以实现很多不错的应用。比如做爬虫, 长期运行的计算脚本, 完全可以取代其他语言来做 服务器的运维。这对于熟悉PHP的人来说如虎添翼。 为什么PHP多进程很好? 网游服务器大部分都使用多线程而不是多进程的原因也在于进程比线程更加稳定。而且多线程适合现在多核服务器的应用场景，更能发挥多核运算的能力。进程的维护可以用很多操作系统级别的工具。Message Queue解决了多大部分线程通信问题。所以PHP多进程很适合做服务器端的计算密集型的应用。 据一家越南IT公司介绍，他们成功的把PHP后台多进程用在法律文件的分发、处理银行账户的金额这样的企业级的应用上。 使用后台PHP 进程可以不影响服务器同时处理网页的请求。这种后台进程一旦发生失败很容易查处原因进行恢复或者补救,所以健壮性更高。不同的进程相互隔离，更加高效，可以统一调度各个服务进程。 PHP 是目前应用最广泛的WEB开发语言，所以用PHP来做服务器端的应用可以降低成本。可以用现有人员、现有配置、甚至做到代码重用。 什么样的场景更适合用PHP后台多进程呢？比如邮件的分发、远程服务的调用、数据的聚合、计划任务、计算结果的缓存这些不需要立即返回的地方。 PHP单进程在某些地方完全可以达到目的，而且更加容易实现，不用考虑进程的同步问题，不用考虑数据的共享问题。 PHP CLI (SAPI SERVER API)命令行接口可以用来做CRON计划任务, 图形界面程序 (使用GTK库)。 PHP CLI 例子: php -f test.php php -r &#8220;echo time();&#8221; php -R as python style PHP读取命令行参数: #!/usr/bin/php -q &#60;?php echo &#8220;Test Arguments:\n&#8221;; echo $_SERVER["argc"].&#8221;\n&#8221;; echo $_SERVER["argv"][0].&#8221;\n&#8221;; ?&#62; PHP命令行接口标准输入输出: #!/usr/bin/php -q &#60;?php [...]]]></description>
		<wfw:commentRss>http://blog.eood.cn/server-side-php-progress-program-best-practice/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>项目迭代:Erlang代码热替换以及Mnesia表结构修改</title>
		<link>http://blog.eood.cn/erlang_code_swap_mnesia_transform_table</link>
		<comments>http://blog.eood.cn/erlang_code_swap_mnesia_transform_table#comments</comments>
		<pubDate>Mon, 14 Jun 2010 03:49:16 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Mnesia]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1135</guid>
		<description><![CDATA[引言 项目进行中不可避免的两件事就是： 对代码的升级,修改 对存储结构的升级,修改 Erlang在设计之初就对此两件事进行了考虑,完全实现热升级。 Erlang的代码热替换特性 最近在做Live chat的项目, 基于Ejabberd开发。Ejabberd的模块管理显示了Erlang的代码热替换的特性。可以在不重启Ejabberd服务器的情况下进行模块级别代码的升级或者修改。并且Ejabberd管理界面提供了模块升级或修改的管理功能。假如需要升级某个模块，只需要将编译好的文件替换原来的文件,进入管理后台,进行升级操作。 对于PHP之类非编译类的语言,我们在需要修改代码的时候,可以直接将旧代码替换为新代码实现平滑升级,但是对于JAVA、C++之类的项目则需要停机更新。Erlang的这个特性是编译型语言的一大改进。 Mnesia如何修改现有的表结构 Mnesia是Erlang内置的分布式数据库。可以用内置函数进行数据库的操作或者用QLC进行数据CURD。我们都会经常遇到项目功能的升级,需求的增长,不可避免需要对原有的数据结构进行修改。 Mnesia提供了transform table的功能。假如不需要保留原有数据可以进行如下的数据库表的结构更新： 对于PHP/java 项目,一遍表结构都是自己设计,可以直接修改Mysql的表结构,同时对涉及代码进行更新。对于不同的PHP开发框架来说,有不同的流程,有些PHP开发框架内置了ORM特性,数据结构的修改很容易。假如没有类似特性则需要review所有的相关代码,进行修改。好在当今框架泛滥,找到合适的开发框架很简单。Python的Dojango框架由于受到Raise的影响对持续迭代开发做了很多考虑。 在此提及Drupal数据库表结构的更新,Drupal中一般用CCK做为字段管理工具。他有一个特性既是会自动的将多个相同类型的字段合并为一张新表, 但是假如此类型的字段只有一个则会存储在content表中。假如深入做Drupal开发,需要直接用SQL操作数据,不了解此特性会出很多错。]]></description>
		<wfw:commentRss>http://blog.eood.cn/erlang_code_swap_mnesia_transform_table/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何提高敏捷开发效率</title>
		<link>http://blog.eood.cn/promote_develop_efficiency</link>
		<comments>http://blog.eood.cn/promote_develop_efficiency#comments</comments>
		<pubDate>Sun, 18 Apr 2010 02:49:14 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Life & Work]]></category>
		<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[效率]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1033</guid>
		<description><![CDATA[1. 尽可能分离前端和服务。例如Drupal PHP来做前端，JAVA/PYTHON/&#8230;来做服务。 2. 准确的估计功能工作量，避免造成资源分配不合理，相互之间不理解。 3. 单元测试，性能测试，功能测试，稳定性测试分离。 4. 测试环境的速度改善。]]></description>
		<wfw:commentRss>http://blog.eood.cn/promote_develop_efficiency/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>近期总结及专注做不超过2件事</title>
		<link>http://blog.eood.cn/%e8%bf%91%e6%9c%9f%e6%80%bb%e7%bb%93%e5%8f%8a%e4%b8%93%e6%b3%a8%e5%81%9a%e4%b8%8d%e8%b6%85%e8%bf%872%e4%bb%b6%e4%ba%8b</link>
		<comments>http://blog.eood.cn/%e8%bf%91%e6%9c%9f%e6%80%bb%e7%bb%93%e5%8f%8a%e4%b8%93%e6%b3%a8%e5%81%9a%e4%b8%8d%e8%b6%85%e8%bf%872%e4%bb%b6%e4%ba%8b#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:24:33 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Life & Work]]></category>
		<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[效率]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=997</guid>
		<description><![CDATA[关于效率和习惯： 人的精力实在有限，发现自己同时做超过2件事便会降低效率。应该更加专注很少的事才能高效的完成。同时操作2个feature才可以高效的切换。 另外，沟通很重要，相互理解很重要。 看到别人的优点，学习别人的优点，经常性的换位思考。 尽早发现问题，不要犯Road map类的错误。 真正的好是：在现有资源下最高效的完成目标。 合理休息，时间不等于效率。 关于敏捷开发： 可扩展性和可维护性 敏捷开发过程中应该对未来的需求有所估计，考虑软件的可扩展性和可维护性。 留下足够的接口；代码中应该保持尽量多的注释说明。 可插拔的设计 从这点来看，Drupal是非常优秀的例子，从代码层级到项目层级。 关于开源产品 开源产品中的bug真的很多，必须在可能的情况下进行覆盖性测试。这样的技术堆栈确实有它的缺点，但是能很大的降低成本，包括学习成本，因为开源产品很多文档都很完善。 但是怎么才能比较精确的估算需求所用的开发时间呢？ 对不可能的估算做估算本身就是浪费时间，只能设置一个deadline，观察进度。迭代。 怎样权衡开发成本和产品质量之间的关系呢？ 我们需要快速推进，同时我们又需要非常稳定的产品，这两者之间如何权衡。效率优先还是质量优先？ 对于探索性的产品，需以效率优先。无人用的产品，即使投入大量的人力也是徒劳。对于最实用的产品应以质量优先。任何一个bug都会让客户丧失信心。 简单完善的产品还是复杂有缺点的产品？ 以前我会毫不犹豫的选择后者，但是现在我会选择前者。以手机为例，即使是Nokia这样以质量闻名的产品，经常死机，也会让人丧失对这个品牌的信任。对于做产品也是这样，Keep simple 很重要。 TODO: 自动化测试过程，完善文档，控制需求，抽象分离可经常重用代码，风险估算。]]></description>
		<wfw:commentRss>http://blog.eood.cn/%e8%bf%91%e6%9c%9f%e6%80%bb%e7%bb%93%e5%8f%8a%e4%b8%93%e6%b3%a8%e5%81%9a%e4%b8%8d%e8%b6%85%e8%bf%872%e4%bb%b6%e4%ba%8b/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>敏捷过程方法</title>
		<link>http://blog.eood.cn/%e6%95%8f%e6%8d%b7%e8%bf%87%e7%a8%8b%e6%96%b9%e6%b3%95</link>
		<comments>http://blog.eood.cn/%e6%95%8f%e6%8d%b7%e8%bf%87%e7%a8%8b%e6%96%b9%e6%b3%95#comments</comments>
		<pubDate>Fri, 05 Mar 2010 14:06:58 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[敏捷]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=891</guid>
		<description><![CDATA[1.Sometimes it&#8217;s worth spending time finding the best possible approach. Sometimes it&#8217;s enough to find an approach that works. 2.不要过度折腾性能 3.总结现代model和patten并且广泛使用 4.松散的技术堆栈进行强约束，紧凑的技术堆栈进行弱约束 5.所有的开源软件都有bug,必须重新测试]]></description>
		<wfw:commentRss>http://blog.eood.cn/%e6%95%8f%e6%8d%b7%e8%bf%87%e7%a8%8b%e6%96%b9%e6%b3%95/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Something about agility development</title>
		<link>http://blog.eood.cn/somethingaboutagilitydevelopment</link>
		<comments>http://blog.eood.cn/somethingaboutagilitydevelopment#comments</comments>
		<pubDate>Thu, 14 Jan 2010 19:17:16 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[agility development]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/articles/405</guid>
		<description><![CDATA[We will not publish new features before holiday or afternoon, because there is not enough time to do testing. Rodemap is very important, wrong rodemap may cause endless problems. We will not fare about bugs, find them and correct them but not conceal. Every thing has a reason. Focus to the current problem when do [...]]]></description>
		<wfw:commentRss>http://blog.eood.cn/somethingaboutagilitydevelopment/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Missing arrow symbol of XML (xml_parse_into_struct)</title>
		<link>http://blog.eood.cn/missingarrowsymbolofxml%28xml_parse_into_struct%29</link>
		<comments>http://blog.eood.cn/missingarrowsymbolofxml%28xml_parse_into_struct%29#comments</comments>
		<pubDate>Fri, 04 Dec 2009 01:14:56 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Project Manament]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/articles/379</guid>
		<description><![CDATA[When relate to the following codes: $p = xml_parser_create(); xml_parse_into_struct($p, $xml, $vals, $index); xml_parser_free($p); The arrow symbol are missing, this is Bug of libxml2 with php, when using PHP = 2.6.32. This is due to an intentional change in the behaviour of libxml2 after version 2.6.32. Some sites suggest reverting to libxml2-2.6.30 &#8211; while this [...]]]></description>
		<wfw:commentRss>http://blog.eood.cn/missingarrowsymbolofxml%28xml_parse_into_struct%29/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
