<?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>Sun, 29 Aug 2010 12:42:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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>
		<item>
		<title>phpMyAdmin超时设置</title>
		<link>http://www.jianblog.com/2009/06/09/674/</link>
		<comments>http://www.jianblog.com/2009/06/09/674/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:57:18 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=674</guid>
		<description><![CDATA[phpMyAdmin默认是30分钟超时的，对于做开发的人来说那个时间太短了。经常给退出的感觉不好玩。其实，只要在配置文件里加入 $cfg['LoginCookieValidity'] = 18000; 这样就会有5小时的超时了。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/09/674/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascript修改frameset的src方法</title>
		<link>http://www.jianblog.com/2009/06/04/667/</link>
		<comments>http://www.jianblog.com/2009/06/04/667/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 03:26:25 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=667</guid>
		<description><![CDATA[有些页面可能使用Frameset的方式来做会更方便快捷，如CRM的菜单。这样会更来一个新的问题，如果帐号给退出了转跳的URL是否是自己想要的位置呢？ 其实方法很简单的，我的思路为： &#60;script type=&#34;text/javascript&#34;&#62; &#160; &#160; &#160; &#160; if&#160;(window.parent.frames[&#34;$target&#34;]) { &#160; &#160; &#160; &#160; &#160; &#160; window.parent.frames[&#34;$target&#34;].location = &#34;$url&#34;; &#160; &#160; &#160; &#160; }&#160;else { &#160; &#160; &#160; &#160; &#160; &#160; window.parent.parent.frames[&#34;$target&#34;].location = &#34;$url&#34;; &#160; &#160; &#160; &#160; } &#60;/script&#62; 我的项目只用了二级Frameset，Js操作Frameset以当前的Frameset开始算位置的。而不是为窗体最外面开始算起的。只是做一下记录，我为这个小问题困扰了一个来小时。之前好象也遇过这样的问题。因为没有记录下来，只好重新花时间来学习处理咯。呵呵]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/04/667/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jquery内存占用问题</title>
		<link>http://www.jianblog.com/2009/06/04/661/</link>
		<comments>http://www.jianblog.com/2009/06/04/661/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 19:00:48 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[产品]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=661</guid>
		<description><![CDATA[最近使用PHP跟Jquery结合做一些小东西来研究，为以后做CRM之类的软件做一些资料准备。具体的产品方向是什么，暂时还没有下定论。只是先准备好一些软件以及架构上的东西先。 Jquery进行无刷更新页面的时候，我遇到内存会一直增加的问题。问过很多朋友都说没有这个问题。或许他们没有详细地测试过吧。一般要把页面挂在那里10分钟之后才会有感觉的。从当前页面跳转到其他页面会出现卡一下再转跳的情况。不少公司不重视这个问题的，如开发网，如果把一个页面挂在那里比较久的话，会出现再开其他页面会比较慢。 在GG搜了一把，主要是的原因是因为Javascript的内存泄露引起的。我也找到了一个解决的办法，拿来先顶着吧。对于复杂的JavaScript还是会出现内存泄露，或许那个页面的JavaScript需要我自己重新写过吧。 jQuery.fn.removeNode = function(){ var d; return function(){ if(this[0] &#38;&#38; this[0].tagName != 'BODY'){ d = d &#124;&#124; document.createElement('div'); d.appendChild(this[0]); d.innerHTML = ''; d.outerHTML = ''; } } }(); &#160; (function($) { $.fn.Disposable = function(cln) { return this.each(function() { var el = this; if (!el.dispose) { el.dispose = cleanup; // will be called by [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/04/661/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>preg_match对字符长度有限制？</title>
		<link>http://www.jianblog.com/2009/06/03/647/</link>
		<comments>http://www.jianblog.com/2009/06/03/647/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:14:29 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=647</guid>
		<description><![CDATA[今天在写采集程序的时候，使用到了preg_match，但是有几个页面始终采集不下来。反复看了N遍的正则，没有发现有问题。于是开始怀疑preg_match是否对匹配的字符串有长度限制。但是官方的文档里面没有说明这一点。 于是开始测试：将要匹配的字串不断缩短，直到缩为原来1/5的时候可以正常匹配了，所以更加确定了。 到google里一搜,终于找到了解决方案：在php.ini中加入（随便放到哪里，我是直接放第一行的） pcre.backtrack_limit=-1 再次使用preg_match函数测试一下，大概1300多行上万个字符的字符串也能够匹配了。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/06/03/647/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FreeBSD下以CGI模式运行PHP</title>
		<link>http://www.jianblog.com/2009/05/28/638/</link>
		<comments>http://www.jianblog.com/2009/05/28/638/#comments</comments>
		<pubDate>Wed, 27 May 2009 16:52:52 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[操作系统]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=638</guid>
		<description><![CDATA[一般情况下，很多人会选择把PHP以Apache的模块来运行。这样会导致静动态都由Apache的线程处理，并且PHP无法使用到Cache。Apache下跑PHP，应该是以CGI方式运行性能会更好。下面简单地记录，我使用FreeBSD安装以及配置以CGI模式运行PHP的经过。 1、安装Apache以Worker方式运行 cd /usr/ports/www/apache22 make WITH_MPM=worker install clean 2、安装PHP5 cd /usr/ports/ports-mgmt/portmaster make install clean rehash portmaster /usr/ports/lang/php5 /usr/ports/lang/php5-extensions/ 3、安装mod_fastcgi portmaster /usr/ports/www/mod_fastcgi 4、配置Worker vi /usr/local/etc/apache22/httpd.conf #把下面这行unmas 掉 LoadModule fastcgi_module&#160; &#160; &#160;libexec/apache22/mod_fastcgi.so #把下面这行 unmask掉 Include etc/apache22/extra/httpd-mpm.conf #在文件最后加入fastcgi文件的调用 Include etc/apache22/extra/fastcgi.conf &#160; &#160; vi /usr/local/etc/apache22/extra/httpd-mpm.conf #将Worker那段修改为以下内容，一般2G内存的机器建议在800以内。设多与少需要看应用程序的复杂程序，而不是随便设一个数就好。 &#160;&#160; &#160;ThreadLimit 512 &#160;&#160; &#160;StartServers 1 &#160;&#160; &#160;MaxClients 512 &#160;&#160; &#160;MinSpareThreads 1 &#160;&#160; [...]]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/05/28/638/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows7中文语言包</title>
		<link>http://www.jianblog.com/2009/05/27/636/</link>
		<comments>http://www.jianblog.com/2009/05/27/636/#comments</comments>
		<pubDate>Wed, 27 May 2009 04:51:16 +0000</pubDate>
		<dc:creator>Kim Chow</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://www.jianblog.com/?p=636</guid>
		<description><![CDATA[今天一开机，看到Windows7有几十个更新，仔细一看，原来已经有中文语言包了。 具体还有什么更新我慢慢研究一下先。呵呵。]]></description>
		<wfw:commentRss>http://www.jianblog.com/2009/05/27/636/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
