从前几天开始,spreadsheets.google.com 又无法访问了!!!
我每天要用 Google 文档的表格记录一些工作情况,就连这么点可怜的需求,都要遭到天朝衙门无情的封杀!
除了 Cao Ni Ma 我真不知道说什么!
勤奋 – 创新 – 矢志不渝 – 锲而不舍
从前几天开始,spreadsheets.google.com 又无法访问了!!!
我每天要用 Google 文档的表格记录一些工作情况,就连这么点可怜的需求,都要遭到天朝衙门无情的封杀!
除了 Cao Ni Ma 我真不知道说什么!
写一个处理 url 的 PHP 工具类,需要用到很多字符串相关的函数,比如 preg_match、preg_replace、strpos 之类的。
正则表达式和查找的 needle 字符,都是用字符加引号直接作为参数传递给上述函数,比如:
preg_match(“#^http[s]?://#i”, $strUrl);
用以匹配是否是 http 开头的 url。
记得以前看过过类常量与普通常量的性能对比,类常量快得多,在这个例子上,把字符串传给函数,是不是每次调用都是先把字符串转换成内部变量呢?如果预先定义类常量,然后以常量为参数传给函数,是不是能快一点?像下面这样:
const PREG_HTTP_URL = ‘#^http[s]?://#i’;
preg_match(self::PREG_HTTP_URL, $strUrl);
两种方式,性能肯定不一样,那种更快呢?
…
…
…
揭晓结果:
运行外层方法 50 万次各 3 次,取平均值
字符串:[31284.85]q/s [15.98]seconds
类常量:[29175.49]q/s [17.14]seconds
可以看到,用类常量的方式,性能不升反降!!
现在还不太理解为什么会这样。
我在Windows环境开发PHP,用XAMPP套件,今天追查程序,看源码搞不定,求助xdebug。
想来很简单,不就在php.ini开启几个选项么,奶奶的,折腾半天没搞定!
问题是:不管怎么设置,开启,就是不输出 profiler 文件!
在网上看人家配置xdebug咋就那么顺利呢,我咋就这么费劲呢?
用中文关键字搜不到,试试英文的吧。
然后找到这个:
http://www.apachefriends.org/f/viewtopic.php?f=16&t=37137
这个天杀的 Wiedmann 估计是 ApacheFriends 的开发人员,把跟我一样可怜的 th1alb 兄弟害得够惨,2 个小时啊!!!
一切的根源居然是 Wiedmann 这怂儿把错误的配置参数包含到了 php.ini ,并打包到 xampp-1.7.2 的版本中!!!
我只能问候你母亲文明用语了!!!
给出问题解决方法,简单得要死:
把
xdebug.profiler_output_name = “xdebug_profile.%R::%u”
替换为
xdebug.profiler_output_name = “cachegrind.out.%p”
其实跟文件名前面的部分没关系,关键是那个”::”,Windows 不允许文件名中出现 “:”,在Linux下居然可以用这个字符当文件名,怎一个强字了得!
我测了下,Windows下”%R”这个占位符无效,所以,我是这么改的:
xdebug.profiler_output_name = “xdebug_profile.%u”
哦了,但愿后来的同学们能早点搜到,别再浪费宝贵的时间了!
问题:用 xampp 套件的 php 测试程序,程序中用到了 memcache,xampp 中未编译这个 extension,因此无法运行。
如果为了 memcache,重新编译 Apache、PHP 和 MySQL,太费时间,没有收获,而且重要的是逃避了问题,没有解决。
这回找到了解决方法,可以用此方法编译其他 PECL 的 PHP Extension,使 xampp 的 PHP 有更多功能!
闲言少叙,直奔主题:给 xampp 套件的 PHP 安装 memcache 扩展。
流程:
下载 http://pecl.php.net/get/memcache-2.2.5.tgz,得到最新的 PHP memcache PECL extension。
解压后,是一些源码,不能直接 configure 和 make。
config9.m4 CREDITS memcache_consistent_hash.c memcache_queue.c memcache_standard_hash.c
config.m4 example.php memcache.dsp memcache_queue.h php_memcache.h
config.w32 memcache.c memcache.php memcache_session.c README
需要先用 phpize 配置一下,不过,我这次并不是平常的 phpize,因为我在 VMware 的 CentOS 上用的是 xampp 的集成环境,用这个环境下的 phpize 会提示缺少文件。
[leakon memcache-2.2.5]$ /opt/lampp/bin/phpize
grep: /opt/lampp/include/php/main/php.h: No such file or directory
grep: /opt/lampp/include/php/Zend/zend_modules.h: No such file or directory
grep: /opt/lampp/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
提示缺少 3 个文件,这些文件在 xampp 中都没有,因为 xampp 提供的是运行环境,不是开发环境。
这样的目录结构(include/php/*)只有在安装好的 php 目录中才有,其实如果从源码直接复制更容易,不过那不是好方法。
下一个新版 PHP 源码,本地编译安装。
下载 http://cn2.php.net/get/php-5.2.11.tar.gz/from/cn.php.net/mirror。
configure 的时候不必跟上很多参数,我们只是要一个目录结构,而且是目录里面的源码,扩展和模块什么的都无所谓,只要能编译即可。
编译完成后,找到安装路径 /home/leakon/local/php5,可以看到 include 目录及其下面的目录结构。
回到 lampp 目录,下面并没有 include 目录,那我们创建一个:
[leakon ~]$ cd /opt/lampp/
[leakon lampp]$ mkdir include && cd include
[leakon include]$ ln -s /home/leakon/local/php5/include/php php
这样,建立一个指向 php 安装目录的符号链接。
再回到 memcache-2.2.5 源码目录,重新配置:
[leakon memcache-2.2.5]$ /opt/lampp/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
然后可以 configure 了:
[leakon memcache-2.2.5]$ ./configure –prefix=/home/leakon/local/pecl-memcache –with-php-config=/opt/lampp/bin/php-config
完成后 make 就可以啦,再完成后,编译的 so 文件生成到了 memcache-2.2.5/modules 目录下,有 2 个:
memcache.la memcache.so
memcache.so 是我们要用的。
然后,修改 php.ini,添加 extension=leakon-modules/memcache.so
这个过程,还有点小波折。
本来我把 memcache.so 放到了 /home/leakon/modules/ 下,然后设置 extension=”/home/leakon/modules/memcache.so”
结果用 php -m 找不到 memcache 模块。
我的 php 报错输出到单独的文件中,tail 那个文件,看到:
PHP Startup: Unable to load dynamic library ‘/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613//home/leakon/modules/memcache.so’
原来是扩展的加载路径是相对的,不管你怎么设置,都在 /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/ 之下。
知道原因就好解决了,要么 cp memcache.so 到 no-debug-non-zts-20060613 目录下,要么做个 symbol link 链接到 /home/leakon/modules/,然后在 php.ini 修改正确的路径即可。
我记得很早写过一个编译 xdebug 的文章,刚才又看了一下,跟这回是一样的情况,也是在 xampp 的集成套件下编译 php extension。只是那次失败了,这次成功了。原文在这里:http://www.leakon.com/archives/44 。
搞了几个小时,总算时间没白费~~
使用 memcache 的过程中,遇到一个奇怪的问题,在 CentOS 环境下,PHP 的 memcache 扩展创建的客户端对象,在 delete 一个 key 的时候报错:
[25-Nov-2009 13:57:04] PHP Notice: Memcache::delete(): Server 192.168.10.131 (tcp 11211) failed with: CLIENT_ERROR bad command line format. Usage: delete <key> [noreply]
可是在 Windows 环境下,用的人家编译好的 php_memcache-cvs-20090703-5.3-VC6-x86.dll (20KB) 却没问题!
在 Google 上找了半天,终于在 PHP 官方手册的评论中发现了线索:
http://php.net/manual/en/function.memcache-delete.php
请看 10-Nov-2009 11:17 这条,简短翻译一下:
memcache 这个 PECL 扩展的 2.2.5 稳定版本有一个错误,导致在向 memcached 1.4.3 调用 delete 方法时返回 false。
用 -vvv 模式运行 memcached 将显示出为什么 delete 调用失败:
CLIENT_ERROR bad command line format. Usage: delete <key> [noreply]
简单修改一下,在这个 PECL 扩展的 memcache.c 这个文件的 1494 行的 mmc_delete() 函数中。把 command_len 修改为下面这样:
command_len = spprintf(&command, 0, “delete %s”, key);
去掉了弃用的第 3 个参数,然后 delete 就可以工作了。希望这个可以帮到你!
再提示一下改动前的代码:
// command_len = spprintf(&command, 0, “delete %s %d”, key, time);
修改完成后,重新编译出 memcache.so 即可。
遇到奇怪的问题,在 Windows 环境下,你猜 dirname(‘/’) 返回虾米?
string(1) “\”
Linux 下呢?
string(1) “/”
换个参数,dirname(‘/home/leakon/sofav.php’),如果你认为上面的不同,是因为 Windows 的目录分隔符是反斜线 “\”,那下面的结果如何解释?
Windows: string(12) “/home/leakon”
Linux: string(12) “/home/leakon”
再换参数,dirname(‘D:\Leakon\Code\sofav.php’)
Windows: string(14) “D:\Leakon\Code”
Linux: string(1) “.”
奇怪吧,为什么有这么大区别呢?
现在还不太清楚,提供一下我的测试环境:
Windows 下存在 D:\Leakon\Code\sofav.php 这个文件,Linux 下存在 /home/leakon/sofav.php。
等搞明白回来顶,看到的,用到的,留心记一下吧。
顺便说下,这个问题,是用单元测试发现的。
我知道很多开发者都懂单元测试,我也知道很多开发者并没有切身去实践单元测试。
今天我想说说中国E动网的VPS主机。
从 2008 年 4 月到现在,我用了一年多,感觉很不错,只有偶尔的几次临时性故障,断网几分钟后就恢复。
最近,我又升级到了 64 bit 的 Linux ,但配置 iptables 的时候遇到了一些问题,由于系统缺少一个内核模块,导致 “-m” 这个参数不能添加到 iptables 规则中。
因为是周末发现的,找了好多好多资料,解决办法只有重新编译内核模块,或者重新编译内核。
我在有问必答中提交了问题,问是否可以重新编译内核,对方很快回答说不能自行编译,让我等到周一技术经理上班后再问问他。
我自己已经没法解决了,只能等到周一。后来我觉得有些绝望了,因为按照以往惯例,所谓的客服,一般很难解决技术问题,更不会用心去解决。
抱着试试看的想法,我又提交了有问必答,陈述了原因,告知缺少内核模块导致 iptables 没法正常运行。
很快有了回应,找我要了 root 密码,然后他们去配置系统。开始我还以为是在我的主机上登录去改什么,后来才知道不是这么简单,看到答复是,他们重新在硬件节点上注册了模块,然后重启了 VPS,因此我需要的内核模块可以加载了,iptables 也能正常运行了。
真没想到这样的复杂的问题也能得到很快很好地解决。
也许对他们技术经理来说不是什么复杂问题,但对我来说,一提到编译内核还有内核模块这些词就头大,而且他们是要在运行着数台虚拟服务器的物理服务器上修改配置,再应用到虚拟服务器上,想必是个挺复杂的过程。
总的来说,E动网的有问必答真的可以解决问题,是个能解决问题的客服系统,是个可以快速响应的客服系统。
顺便再做做广告,大家可以看看E动VPS的配置和价格表,我感觉在国内来说算比较便宜的了,我还在用美橙互联的,同样的配置,要贵不少。
今天发现前几天装的 subversion 居然没法通过 http 协议访问版本库!
Subversion 出现 svn: Unrecognized URL scheme for ‘http://…..’ 这样的错误提示。
检查 svn 客户端是否支持 http 协议,只需查看版本号:
shell> svn –version
看看输出是否有如下输出:
* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
– handles ‘http’ scheme
– handles ‘https’ scheme
如果有,恭喜了,不用继续耽误您时间了。如果没有,后面告诉你怎么让它有。
我的 subversion 版本是 1.6.5,本来我看了 INSTALL 文件,预先编译了 neon,用的是最新的 0.29.0,然后指定了 neon 的路径。编译了 3 次,慢死了,结果还是没有,真邪门了。
后来 google 搜啊搜,注意到一个细节,说 configure 的时候,neon 配置出错,不会终止配置进程,只是给出几行提示信息,然后继续……
我重新 configure,看看 neon 的输出,居然看到下面几行:
checking neon library version… 0.29.0
You have neon version 0.29.0,
but Subversion needs neon 0.28.4.
An appropriate version of neon could not be found, so libsvn_ra_neon
will not be built. If you want to build libsvn_ra_neon, please either
install neon 0.28.4 on this system
or
get neon 0.28.4 from:
http://www.webdav.org/neon/neon-0.28.4.tar.gz
unpack the archive using tar/gunzip and rename the resulting
directory from ./neon-0.28.4/ to ./neon/
no suitable neon found
提示的意思是必须安装 0.28.4 版本的 neon,更高的版本都不行!
到此问题明朗,重新安装 0.28.4 版本的 neon ,然后重新编译 subversion 即可。
最后,我的 svn 也支持 http 和 https 协议啦!
这是我今早在 cnBeta 看到的转帖。
本来不想花时间写评论,不过稍微一想,觉得愤愤不平!
原文说投资需要 6 亿人民币,它运算一天要普通微机算 160 年,那我们做一个简单数学计算:
160 * 365 = 58400 天,也就是说一台普通微机要运算 58400 天。
换句话说,58400 台微机,并行计算,那么一天的计算量跟天河一号一样!
这些微机值多少钱呢?看过 Google 数据中心那些自攒的服务器就知道,成本极低!
以 3000 元的零售单价计算,58400 台服务器的总价是:
58400 * 3000 = 175,200,000 = 一亿七千五百二十万!
至于原文说的存储量,我就不置评论了,58400 * 1TB = 58400 TB,按 13 亿人计算,每人可以得到超过 44M 的存储空间。
我想问问,那剩余的 4亿多干点什么不好?
可见现在那帮院士们的眼光多么“原始”!拿着国家的钱,不干正事,造价 6 亿,其他的费用还没算呢,估计整个项目超过 10 亿!
我记得几年前刚听说分布式计算和并行计算的时候,就为国外先进的理念所折服。
之前,Sun 和 IBM 都标榜自己的服务器性能多么强劲,一台可以顶其他服务器的几台等等。
那会儿并行计算还没有得到广泛应用,单点计算的程序,改造成支持并行计算也比较复杂。
但 Google 给全世界的 IT 公司上了一课,让大家知道并行计算原来是如此可行,如此节省成本!
天朝真是奇异的社会,一帮人拿着纳税人辛辛苦苦赚的钱,干了一件一件无比 SB 的事儿,还在大书特书地标榜自己多么英明!
悲哀!
这几天买了一个 VPN 代理服务器,可以顺利穿墙,看看真正的互联网是什么样。
正在研究国外某网站的设计,可偏偏前一阵这网站被天朝局域网屏蔽,天朝的臣民们只能使用我党规定可使用的那几个网站了,我心急如焚,没法访问,我怎么研究啊!
直接谷歌 vpn proxy,找到了几个看上去不错的:
unblockvpn.com,价格不错,$4.99/月,可惜的是,信用卡付款要用一个国外的类似于支付宝的平台,那个平台可真安全,付款之前先要做身份验证,可惜人家不理会天朝身份证,只得作罢。
strongvpn.com,看着挺专业,就是有点贵,只买一个月还要 setup fee,买不起。
expressvpn.com,这个看上去也不错,贵!
买得起的没法买,有法买的买不起!
很早以前淘宝有卖 vpn 代理的,也搜过国内的提供 vpn 代理的网站,但他们都是强调购买的 vpn 只能用于网络游戏,不能用于浏览网站等其他用途,否则封账号不退款。
我就不明白了,一个个的费了半天劲弄个 vpn 就是为了玩游戏啊?
不过现在情况好多了,淘宝有好多 vpn 可以做各种用途,可以玩游戏,也可以访问网站。
价格也不贵,根据需要,有便宜的,也有贵的,贵的每个月 50 块钱吧,短期用还算能接受。
用途:
买完 vpn 后感觉心情一下好了很多,终于可以不在某组织的愚民政策下当白痴了,喔耶!!!