<?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>Kim Chow Blog &#187; 编程</title>
	<atom:link href="http://www.jianblog.com/category/program/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jianblog.com</link>
	<description>Unix C将是我主攻的语言，现在用PHP在FreeBSD/Centos下开发。</description>
	<lastBuildDate>Fri, 23 Dec 2011 08:29:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>邀请注册免费ＣＤＮ</title>
		<link>http://www.jianblog.com/2011/12/23/745/</link>
		<comments>http://www.jianblog.com/2011/12/23/745/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 08:29:59 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=745</guid>
		<description><![CDATA[最近重新将一些服务器拿出来做ＣＤＮ，并且开放给大家用。暂订，每月免费1G流量。 106814 107685 114394 119188 129349 129693 141623 148493 151301 164858 169366 178782 184550 200714 201752 207540 207705 217586 221361 235002 244325 246203 257785 260958 280091 280193 290546 296944 299352 305720 312149 314228 325368 336965 346755 347503 355445 356515 380107 381243 406565 412790 418410 423037 432576 444322 446281 451068 476986 478577 483997 501043 501912 503794 [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/12/23/745/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于php的chroot</title>
		<link>http://www.jianblog.com/2011/09/05/736/</link>
		<comments>http://www.jianblog.com/2011/09/05/736/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 06:25:44 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=736</guid>
		<description><![CDATA[chroot可以比较简单地实现php程序的安全，有些lib如果没有复制给用户，会导致用户无法使用一些函数。详细的配置方面，迟点有空的时候再写了。现在只是简单地写个一个问题解决先。 主要是解决chroot之后,php程序无法使用网络相关的函数问题。 只要将/lib/libnss_dns.so.2 复制到chroot的lib目录下就可以解决网络访问问题了。当然了，还需要将/etc/resolve.conf复制到chroot的etc目录下才行。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/09/05/736/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpdoc支持utf8</title>
		<link>http://www.jianblog.com/2011/08/24/734/</link>
		<comments>http://www.jianblog.com/2011/08/24/734/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 10:02:43 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=734</guid>
		<description><![CDATA[现在使用phpdoc生成文档，已经是比较简单的事了。只是默认不支持utf8,以下的方法是修改 支持utf-8 cd /usr/share/pear/data/PhpDocumentor/phpDocumentor/Converters find ./ -name '*.tpl' &#124; xargs sed -i 's/iso-8859-1/utf-8/g']]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/08/24/734/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python3下使用distribute安装软件</title>
		<link>http://www.jianblog.com/2011/03/27/722/</link>
		<comments>http://www.jianblog.com/2011/03/27/722/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 06:56:37 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[Archlinux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=722</guid>
		<description><![CDATA[在这段时间在用Python去实现一些系统管理的东西。我现在把操作系统由Centos改为Archlinux，主要是Archlinux的软件包管理跟FreeBSD很象。我比较喜欢FreeBSD的包管理方式，当然他还是没有FreeBSD的Ports使用起来方便。 Python3已经慢慢地走进人们的视线，我也赶下潮流使用一下新版本的东西看是否可以接受。 pacman -S python-distribute distribute的使用跟Easy_install是一样的，在命令行下，运行 easy_install-3.2 URL 相关包的URL到http://pypi.python.org/pypi这里来搜索，Python有很多很优秀的库。往后，我会分享更多我这段时间在家静思的成果。当然，这段时间，我在家关注更多的还是技术相关的东西。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/03/27/722/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EDM</title>
		<link>http://www.jianblog.com/2011/03/05/706/</link>
		<comments>http://www.jianblog.com/2011/03/05/706/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 12:00:39 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=706</guid>
		<description><![CDATA[Godaddy的EDM做得这么厉害，我们是否可以从其中学得到一点东西，做类似的东西呢？ 发现一个关于这方面的网站 http://www.unsubscribe.cn/ 先占个位，迟点再将相关的信息发这个文章里。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/03/05/706/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20 Software Developing Best Practices</title>
		<link>http://www.jianblog.com/2011/02/28/707/</link>
		<comments>http://www.jianblog.com/2011/02/28/707/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 21:34:46 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=707</guid>
		<description><![CDATA[Below are a compilation of 20 software developing best practices: 1. Always use source control system even if the project has only one developer. By doing that, you don&#8217;t lose some or whole code immediately, can share same source file by multiple person and can take the whole advantage of coding histories. 2. Follow coding [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2011/02/28/707/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu安装thrift以及Eclipse</title>
		<link>http://www.jianblog.com/2010/03/19/698/</link>
		<comments>http://www.jianblog.com/2010/03/19/698/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 05:20:51 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=698</guid>
		<description><![CDATA[PHP对中层间那块比较弱，Facebook开放了他们在使用的Thrift比较好地解决这个问题。当然，没有上到一个量级的时候，使用这个东西不见得有什么效果。我主要是简单地记录一下怎样安装Thrift，以及Eclipse的java开发环境。 &#60;coolcode&#62; apt-get install libboost-dev automake libtool flex bison pkg-config g++ sudo apt-get install ant ivy libslf4j-java libcommons-lang-java liblog4j1.2-java &#60;/coolcode&#62; 到官网下载 http://incubator.apache.org/thrift/ 最新的Thrift。 编译安装Thrift &#60;coolcode&#62; ./configure &#8211;prefix=/opt/thrift make make install &#60;/coolcode&#62; 配置java环境 cat /etc/profile.d/jdk.sh &#60;coolcode&#62; JAVA_HOME=/usr/lib/jvm/java-6-sun export JAVA_HOME CLASSPATH=.:/usr/share/java/ export CLASSPATH &#60;/coolcode&#62; 安装eclipse的java开发环境 &#60;coolcode&#62; sudo apt-get install eclipse-jdt &#60;/coolcode&#62;]]></description>
		<wfw:commentRss>http://www.jianblog.com/2010/03/19/698/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP之父评Facebook的HipHop:别当作银弹</title>
		<link>http://www.jianblog.com/2010/02/07/691/</link>
		<comments>http://www.jianblog.com/2010/02/07/691/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:55:41 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[HipHop]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=691</guid>
		<description><![CDATA[据《纽约时报》网站报道，读写网记者与PHP的创造者Rasmus Lerdorf联系，询问他对Facebook刚刚开源的PHP优化项目HipHop有何看法。Lerdorf在邮件中说，这是一个很酷的项目，肯定会成为某些网站很好的选择。 　　但是，他接下来说，对于许多Web应用来说，执行速度并不是主要因素。即使将总请求成本中10%的代码的执行速度提高一倍，整体上也只提高了5%。如果每次请求都要访问memcache/PostgreSQL/MySQL 10次，在系统调用上耗费大量时间，难免不要指望HipHop会带来奇迹。 　　Lerdorf称HipHop代码转换程序为漂亮把戏(nifty trick)，并担心会有开发人员将它错误地看成网站性能的某种魔弹。对于新的运行库，Lerdorf说，更愿意大家进行基本的性能分析(profiling)，找到有用中成本最高的部分。与其加速系统中较快的部分，不如加速或者去除系统中较慢的部分。 　　他还说，PHP的执行速度往往不是问题最大的地方，应该好好分析系统的各个方面，找到元凶。工具方面，他推荐用Yahoo的YSlow和Google的Page Speed分析前端的问题，再用Valgrind的Callgrind分析低层的后端性能，用XDebug分析用户空间PHP的性能。此外，他还顺带手指出了读写网前端的性能问题。 　　当然，文章中也说到，Facebook的网站其他方面可能已经优化得很好，因此HipHop能够带来足够的效率。 　　总之还是那句话，没有防之四海而皆准的通用银弹，工程上，具体问题具体分析，选择最合适当前环境的工具最为重要。 在看上一篇文章的时候，是否有点感觉立刻要把自己的代码换一下环境呢？其实，最重要的优化是自己把业务逻辑优化好，分析清楚自己的程序压力到底在哪里才会有实质上提升。工具只是帮助我们去分析问题，问题分析清楚之后，还是需要我们动手去解决的。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2010/02/07/691/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook性能大提升的秘密：HipHop</title>
		<link>http://www.jianblog.com/2010/02/07/688/</link>
		<comments>http://www.jianblog.com/2010/02/07/688/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:48:08 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[HipHop]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=688</guid>
		<description><![CDATA[Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序，一个重新实现的PHP运行库，和许多常用PHP扩展的重写版本构成，目的是旨在加速和优化PHP。 用Facebook官方博客（无法直接访问）上项目负责人赵海平（北大1987届遗传与分子生物专业，普林斯顿计算机科学博士）的话说，HipHop项目对Facebook影响巨大。它目前已经支撑了Facebook 90%的Web流量。由于HipHop，Facebook Web服务器上的CPU使用平均减少了50%，从而大大减少了服务器的需求。为了让这一改进也惠及社区，他们决定将之开源，希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。 PHP和Facebook的问题 众所周知，Facebook的前端主要是用PHP写的。赵海平说，过去六年Facebook从PHP语言的进展上获益良多。PHP非常简单，易学易用，好读好调试，因此新工程师成长很快，有利地促进了Facebook的更快的创新。 PHP是一种脚本语言，其好处是编程效率高，能够支持产品的快速迭代。但是与传统的编译语言相比，脚本语言的CPU和内存使用效率不好。随着Ajax技术的广泛采用，加上SNS对动态要求较高，这些缺点更显得突出。对于每月超过4000亿次PV的Facebook来说，如何实现扩展，尤其具有挑战性。 常见的办法是直接用C++重写PHP应用中比较复杂的部分，作为PHP扩展。实际上，PHP就转变为一种胶水语言，连接前端HTML和C++应用逻辑。从技术角度讲这也没有问题，但是增加了技能需求，能够在整个应用上工作的工程师数量就大大减少了。学习C++只是编写PHP扩展的第一步，接下来还要理解Zend API。由于Facebook的工程团队较小，每个工程师要支持100万以上的用户。有些代码不是团队里每个人都能看懂，这对于Facebook是无法接受的。 Facebook网站本身的可伸缩性更具挑战性，因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览主页 时，系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果，然后还要显示评论、照片等等动态，这一切都需要在一秒内完 成。 自2007年以来，Facebook曾写过几种不同办法解决这些问题。其中包括用另 一种语言重写Facebook，但是由于开发的复杂性和速度等原因，未能实现。他们还重写了PHP的核心部分Zend引擎，并提交给了PHP项目，但最终还是没有获得所需的性能。最后，他们选择了HipHop，终于得偿所愿。 有了HipHop，工程师可以编写代码，用PHP编写组合最后页面的逻辑，并能够继续快速迭代，同时后端服务使用C++, Erlang, Java, Py thon编写，提供新闻提要、搜索、聊天和其他核心功能。 HipHop开发故事 赵海平透露，项目最初是来自几年前Facebook公司一次Hackathon活动（员工在一个晚上自由发挥，实验新的想法），他手工将PHP转换为C++代码，虽然语法上很类似，但是无论是CPU还是内存使用，转换后的C++代码都大大优于PHP。于是他想，如果构建一个系统，编程实现转换，会怎么样呢？ 在此之前，已经有了不少改善PHP性能的方法。Zend引擎在运行时转换PHP源代码为运行在Zend虚拟机上的opcode。开源项目APC和eAccelerator将输出缓存，为大多数PHP网站所使用。此外，还有Zend Server这样的商业产品，通过opcode优化和缓存，提高PHP速度。赵海平选择了另一条道路，将PHP直接转为C++，然后再变成本地机器码。当然，有许多开源项目也是同样的思路，Roadsend和phc编译为C，Quercus编译为Java，而Phalanger编译为.NET。 Hackathon之后8个月，赵海平拿出了原型，足以说明这条路可以走通，编译后的代码的确更快。不久，Iain Proctor和Minghui Yang加入进来。接下来又开发了10个月，在生产服务器上测试了6个月。然后正式上线部署，6个月之后，Facebook 90%以上的Web流量都使用了HipHop。 按赵海平的说法，凭借HipHop，Facebook Web服务器上的CPU使用平均减少了50%，从而大大减少了服务器的需求。项目对Facebook影响巨大。为了让这一改进也惠及社区，他们决定将之开源，希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。 HipHop的原理 HipHop将PHP代码转换为高度优化的C++代码，然后再用g++编译器编译。它可以保持语义等效地执行源代码，但为了提高性能，牺牲了一些很少用到的特性，比如eval()。 HipHop开发中的主要困难在于，在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性，但是大多数PHP代码还是非常简单的。if (&#8230;) {&#8230;} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时，还使用类型推演来选出变量最可能对应的某个类型，从而节省内存。 转换过程分三步： 1. 静态分析。收集声明关系和依赖关系等信息。 2. 类型推演。选择最合适的类型，是C++的标量？还是String, Array, classes, Object或者Variant。 3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。 [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2010/02/07/688/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>js鼠标准确定位</title>
		<link>http://www.jianblog.com/2009/08/08/683/</link>
		<comments>http://www.jianblog.com/2009/08/08/683/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 15:48:17 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=683</guid>
		<description><![CDATA[在XHTML页面做鼠标定位的时候，可能会出现第一屏鼠标定位准确，第二屏的时候，鼠标定位出现了偏移。下面一个简单的办法来解决这个问题。 if(e.pageX &#124;&#124; e.pageY){&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; _tips.style.left = e.pageX; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; _tips.style.top = e.pageY; &#160; &#160; &#160; &#160; &#160; &#160; }&#160;else { &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; if(document.documentElement &#38;&#38; document.documentElement.scrollLeft)&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/08/08/683/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

