<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.9.2" -->
<rss version="0.92">
<channel>
	<title>Kim Chow Blog</title>
	<link>http://www.jianblog.com</link>
	<description>Unix C将是我主攻的语言，现在用PHP在FreeBSD/Centos下开发。</description>
	<lastBuildDate>Sat, 27 Feb 2010 04:41:08 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>在线查毒网站</title>
		<description><![CDATA[http://www.virustotal.com/zh-cn/
http://www.evilfingers.com/projects/NoVirusThanks.php
http://virusscan.jotti.org/
http://www.virscan.org/
http://scanner.virus.org/
记录一下，以便日后使用。
]]></description>
		<link>http://www.jianblog.com/2010/02/07/694/</link>
			</item>
	<item>
		<title>PHP之父评Facebook的HipHop:别当作银弹</title>
		<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>
		<link>http://www.jianblog.com/2010/02/07/691/</link>
			</item>
	<item>
		<title>Facebook性能大提升的秘密：HipHop</title>
		<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++的语句和表达式。
在开发过程中，还有一个副产品：HPHPi，是一个实验性的解释器。通过它，不编译PHP源代码也可以运行。它已经用于HipHop自身的调试中。
HipHop在保持了PHP优点的同时，也兼得了C++的性能优势。项目总共有30万行代码，5000多个单元测试。所有这些都将以PHP开源许可证形式发布到GitHub。
更多信息，可以申请加入HipHop的邮件列表：
http://groups.google.com/group/hiphop-php-dev
]]></description>
		<link>http://www.jianblog.com/2010/02/07/688/</link>
			</item>
	<item>
		<title>FreeBSD使用VPN</title>
		<description><![CDATA[互联网上使用VPN的资料，比较多。把网关结合好的，我发现不是很多。特意写个来记录一下

cd /usr/ports/net/pptpclient
make install clean
cat /etc/ppp/ppp.conf
hk:
&#160;set authname ****
&#160;set authkey ****
&#160;set timeout 1
&#160;set redial 10 1
&#160;set ifaddr 0 0
&#160;add! default HISADDR
&#160;alias enable yes
&#160;enable MPPE
&#160;accept MPPE
&#160;
cat /usr/local/etc/rc.d/pptp.sh
#!/bin/sh
&#160;
case &#34;$1&#34; in
start)
&#160;&#160; &#160; &#160; &#160;/usr/local/sbin/pptp XXX.XXX.XXX.XXX hk &#38;
&#160;&#160; &#160; &#160; &#160;;;
stop)
&#160;&#160; &#160; &#160; &#160;if [ -f /var/run/tun0.pid ]
&#160;&#160; &#160; &#160; &#160;then
&#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;kill -TERM `cat /var/run/tun0.pid`
&#160;&#160; [...]]]></description>
		<link>http://www.jianblog.com/2009/08/19/686/</link>
			</item>
	<item>
		<title>js鼠标准确定位</title>
		<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; &#160; &#160; &#160; &#160; {&#160;
&#160; &#160; [...]]]></description>
		<link>http://www.jianblog.com/2009/08/08/683/</link>
			</item>
	<item>
		<title>未来</title>
		<description><![CDATA[前几天，我刚结婚。新婚的日子是甜蜜的，快活的。
新婚之后，我要面对一大堆的问题也跑了出来。对于城市的选择，工作的选择，事业方向的选择等等一大堆问题都在烦着我。
我也不知道我到底想把什么东西写下来。只知道现在面临人生的一个十字路口。相对来说，刚毕业的时候也没有这样的感觉。或许，当时自己的目标很明确。为什么现在的目标会这么不明确呢？因为生活的压力还是什么呢？这些问题，我还是慢慢地想一下吧。
别人说从事互联网的，赚钱比较容易。我更认为是有好的想法以及成熟的技术平台可以赚钱。在新浪的时候，让我体会到一个好的技术平台才可以支持着一个项目的正常运营。要不然，投入再大的资金去做宣传也没用。服务器都因为负荷问题而Down机了，宣传会有效果吗？或许，我已经给那些大公司的思维给渲染了。只希望通过这段时间的休息可以更明确自己的人生目标，好好地看点经济学的书。尝试去转型吧，就算是做技术也要结合其他行业的专业知识才行。单一行业知识，我认为已经不适合现在的发展了。当然，自己专业的东西还是要不断地加强。只是接触点其他行业的信息，希望有突破口罢了。
]]></description>
		<link>http://www.jianblog.com/2009/06/30/680/</link>
			</item>
	<item>
		<title>phpMyAdmin超时设置</title>
		<description><![CDATA[phpMyAdmin默认是30分钟超时的，对于做开发的人来说那个时间太短了。经常给退出的感觉不好玩。其实，只要在配置文件里加入
$cfg['LoginCookieValidity'] = 18000;

这样就会有5小时的超时了。
]]></description>
		<link>http://www.jianblog.com/2009/06/09/674/</link>
			</item>
	<item>
		<title>硬件升级</title>
		<description><![CDATA[再次把我的爱机升级，也是迫于无奈地升级的。我以前7300的显卡爆了4颗电容。只好赶着找朋友帮忙拿了一张9800GT的显卡。太久没有接触硬件了，想不到现在的显卡一定要外接电源才可以正常工作的。为了这点，还要把电脑搬去电脑城给别人处理。别人接下电源线就搞掂了。只是他们死活说我的机箱太有问题了，一定要我换一个机箱才给我走。所以。。。非常地无奈地换了一个机箱。
]]></description>
		<link>http://www.jianblog.com/2009/06/08/672/</link>
			</item>
	<item>
		<title>javascript修改frameset的src方法</title>
		<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>
		<link>http://www.jianblog.com/2009/06/04/667/</link>
			</item>
	<item>
		<title>Varnish第二版配置</title>
		<description><![CDATA[之前有写过一个Varnish，用起来感觉怪怪的。准确地说是有人反应会出现时快时慢的感觉。这几天参考官方文档重新配置过了Varnish。现在的Varnish主要是跟Apache配合来使用。暂时还没有以独立的服务器来跑。因为个人的BLog没有什么流量。呵呵。。
FreeBSD安装软件就是简单
portmaster /usr/ports/www/varnish

vi /etc/sysctl.conf
kern.ipc.somaxconn=16384
kern.maxfiles=131072
kern.maxfilesperproc=104856
kern.threads.max_threads_per_proc=4096
&#160;
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
&#160;
net.inet.icmp.icmplim_output=0
vi /etc/rc.conf
varnishd_enable=&#34;YES&#34;
varnishd_listen=&#34;:80&#34;
将Apache监听的端口改为8080
vi /usr/local/etc/apache22/http.conf
#大概在第40行左右。使用:40可以直接到
Listen 8080
vi /usr/local/etc/varnish/default.vcl
#-e This is a basic VCL configuration file for varnish.&#160; See the vcl(7)
#man page for details on VCL syntax and semantics.
#
#Default backend definition.&#160; Set this to point to your content
#server.
#
backend default {
.host = &#34;127.0.0.1&#34;;
.port = &#34;8080&#34;;
}
#
#Below is a commented-out copy of the default VCL logic.&#160; If you
#redefine any of [...]]]></description>
		<link>http://www.jianblog.com/2009/06/04/664/</link>
			</item>
</channel>
</rss>
