Best of Vim Tips 中文版
vim__BEGIN__
------------------------------------------------------------------------------
# searching 查找
/joe/e : cursor set to End of match
把光标定位在匹配单词最后一个字母处
/joe/e+1 : cursor set to End of match plus 1
把光标定位在匹配单词最后一个字母的下一个字母处
/joe/s-2 : cursor set to Start of match minus 2
把光标定位在匹配单词第一个字母往前数两个字母的位置
coLinux
unix如果你还在为cygwin下build php失败或其他类似的问题而烦恼,向你隆重推荐很好用的coLinux,和vmware类似是虚拟机技术,而且是free的。我感觉非常稳定,速度也很快(比cygwin)。
这里有更好的教程
http://studftp.stut.edu.tw/~m9335203/colinux/colinux.html
我写的这个只是为了自己方便(每次安装都要读那么长的教程太痛苦了)总结了一个不用思考的step by step,基本上copy+paste每一行命令应该就应该能用了
预先准备
Be Lazy!
这是Rasmus教给我的最重要的东西。
那年Rasmus来北京参加DevCon,blah blah讲了不少。他那个presentation真够长的(不仅拿着它在全公司世界各地office巡演,我发现他又稍微改了一下就去参加linux conf au了,真是太不厚道了)
整个presentation的精义就在于两个字“Be Lazy”。
- 不要试图解决不存在的问题
许多人,虽然没有意识到,非常热衷于解决根本不存在的问题。比如:真的需要多国语言支持吗?真的需要完全用面向对象OOP吗?他们花了很多精力实现了这些美好的意愿,而是解决了根本不存在的问题!事实上,很多应用只需要用gb2312就足够了;而有些使用纯OOP的程序,除了降低效率以外,我也看不太出有任何意义。
最基本的cache
cache | 优化摘要:本文试图说服你使用不到10行代码的缓存提高你的web程序效率。
如果你已经写了一段时间的web应用,而且它们越来越大的时候,你就会注意到性能是个问题。当我们假设人工要比机器贵(在正规的公司,这通常是事实),作为工程师,我们就必须考虑到优化程序的效率。
在我的经历中,缓存(cache)往往比任何其他方式更能够轻易而有效地提高应用的性能。
当我们习惯把所有的数据放到数据库中的时候,我们通常假设数据库管理系统DBMS可以应对我们的要求。当你的应用因为访问量的不断增加而变得越来越迟缓的时候,90%的情况你会发现是因为数据库存在瓶颈。是的,MySQL非常的快,但这不是完全依赖它的很好的理由。你会发现,在脚本语言和数据库之间建立一个缓存机制是十分必要的。
Scanmus @ Paranoid Conference
安全因为一些原因没有去Paranoid Conference,Lucy回来告诉我,Rasmus在会议上就是拿中国的几个project做例子,其中居然就有我的大作,呜呜呜……看来这就是我轻视Scanmus(一个Rasmus闲来无事写得扫描XSS的工具)的恶果。
Security最基本的一些sense:
- escape!
- 尽量validate输入
- 类型:数字,email,url
- 范围:枚举,数字的范围,字符长度
- 内部应用间的api限制外网访问
不值得信赖的addslash()和mysql_real_escape_string()
php | 安全长久以来,我一直依赖mysql_real_escape_string()防范SQL injection。看起来它并不像我想象的那么值得信赖。
问题来自多字节编码。例如在GBK里,0xbf27并不是一个合法的双字节字符,因此addslash()会把它转义成0xbf5c27,碰巧0xbf5c是一个合法的双字节字符,由此可以注入一个0x27 (')。
addslash()无药可救。mysql_real_escape_string()可以根据字符集正确地转义,但是需要在建立数据库联接的时候指明“SET CHARACTER SET 'GBK'”。
由filter想到的一些
在公司的intranet翻文档的时候,突然发现Rasmus提及,filter其实是我们公司赠与PHP开源社区的。
想一想,PHP开发者主力就是Zend和Yahoo!。(想起Google前一段时间终于把Guido van Rossum给收了,而Rasmus和Andrei早就是我的同事了)Zend的不厚道出了名的,否则PHP不可能这么久一直没有一个内置的opcode cache,白白牺牲掉那些性能。(感谢上帝,PHP 6.0的发行包会含有APC,但是默认还是关闭的)我们公司是不是厚道,我不好说,但是起码在做show方便远不及“Don't be evil”的Google——Google Code,Goobutu,还有中国的黑板报。回到技术,关于我们公司使用PHP的情况,请仔细阅读Michael Radwin的这个Presentation,其中有一些细节我觉得对外面的人还是很有价值的。
APC bug
apc | pecl | php最近在做一个—呃,几个million的daily pv—的project。用APC做cache后发现有问题,不时地coredump。研究了一下才发现居然这些机器上装的还是2.x的APC,赶快升级到了3.0.8——问题消失。估计就是上次我跟Rasmus说的,用APC存取size大一点点的数组会有coredump的bug。想到这里,才发现最近和Rasmus失去联络了。
memcache 2.0.0
memcached | pecl | phpAntony终于推出了memcache 2.0.0。
支持多服务器load balance和failover。
感谢上帝,我终于不用去backtrace mcache的coredump了。这个世界太美好了。
(我是memcached的粉丝)
最近关注的php扩展
pecl | phpPDO
现在我见到的许多大一些的php应用都会使用数据库抽象层。PDO毕竟是扩展,比php写的DBAL效率会好很多。
DBAL是我大学时候的最爱。后来总觉得这种缥缈的完美主义实在影响性能,而且在99.99%的情况不能带来一点好处;更换DBMS千年难见一次,而DBAL确会在每次request上都带来overhead,所以我再也没有用过了。即便PDO的效率会搞很多,我怀疑自己真的会不会使用PDO。
