几个很有用的TextMate bundle

TextMate的这几个bundle对我来说非常有用:

1. CTags
和vim中的类似,可以ctrl+] 可以快速列出和跳转到symbol所在的文件位置. 有点遗憾的是不能想vim那样返回.
适合多数的编程语言.

2. Devel::IntelliPerl
Perl的自动解析和语法提示,能够根据指定变量的上下文给出语法提示,主要是列出可以调用的方法. 很cool.
除了TextMate,还支持vim. 由于使用Moose进行反射分析,可以显示出继承的方法. 比单纯的正则分析
要准确的多.

3. Act
可以使用正则表达式快速搜索项目中的文件. 使用Perl编写, 是一个快速和强大的grep 替代品.
TextMate中的search in project可以休息了. 如果你用TextMate,就知道在大的项目中使用search in project是
一种煎熬. 我很多次不长记性的调用,看着高起的CPU和风扇声,被迫kill掉textmate. 使用Act可以省去find+grep
的诸多不便. 而且, 由于是Perl编写,你可以使用完整的PCRE, 而不是GNU的精简版, 甚至你可以只搜索某种
编程语言的.很不错的.

其他如project plus,git bundle这些都是标配了.

ProjectPlus无法显示git状态

更新了git后,projectplus就无法支持git状态显示了,svn则正常。之前是自己编译的git,这次更新则使用了Git for OSX installer。区别在于后者默认install到/usr/local/git,看了下ProjectPlus的Libraries,自带了svn的运行库,没有git。看来是直接使用系统的git路径了。于是,将git做了一个symbol link:

ln -s /usr/local/git/bin/git /usr/local/bin/git

返回TextMate, 正常了,看来ProjectPlus是使用了绝对路径。

Git for OSX installer

http://code.google.com/p/git-osx-installer/

以后不用自己编译了,省事.

OpenInGitGui还挺方便的,
虽然我一般在iTerm里用命令行,配合git complete脚本,也非常方便。

Google Quick Search Box for the Mac试用

Google Quick Search Box for the Mac(QSB)是google新发布的一个opensource的类似QuickSilver(QS)的小工具.

Google QuickSearch Box for mac

Google QuickSearch Box for mac

对比一下QS:

QuickSilver

QuickSilver

和QS一样,qsb可以快速搜索应用程序,书签,文档资料,联系人等等。
实际上qsb的开发者也是原QS的作者.

QS是mac上的万能工具,我每天都要用到.
对比QS,QSB在使用上有些小小的问题,那就是在输入字符稍许有些停滞,从体验上没有QS那样流畅。
不过QSB和Google自身的产品结合还是不错的,可以直接搜索web,搜索建议,google书签,docs,mac本机上的开发文档等等。通过设定
google帐号,还可以搜索gmail联系人等资料。

希望QSB能够有天能取代QS.

准备将wordpress迁移到MT4

现在的Wordpress是2.6。 自从07年对wordpress-mu做了开发后,对wordpress就一直很不满意。此外,wp无法在我优化后的PHP上运行,WP的性能也不敢恭维。至于它最引以为傲的plugin机制,更不是很感冒。尤其是调试的时候,简直要疯掉的。WP-MU的设计方案也是有点问题,为了保证和WP的最大兼容性,只能每个用户clone一套表,当用户激增的时候数据库就无法管理了。即便通过Hash方式可以分散到多个数据库,在统一管理上仍然有问题,尤其是在国内环境,经常需要和谐,后台的管理是一个课题。

MT从设计上要比Wordpress强上好几个档,毕竟wordpress最早就是几个PHP程序员写的玩具(当时的编码水平也很初级). MT作为商业级的产品,自然胜出。我记得2000年左右我假设的第一个MT,那时候感觉就非常好。
MT的没落其实是策略上的失败,背后隐藏着Perl的没落,PHP的兴起和盛大。
MT的安装也过于复杂,对于普通用户无法立即上手, 但是对于Perl开发人员,是可以好好学习的。

在迁移前,我需要解决一个大问题:
如何在Nginx上运行MT?

目前没有答案。可以考虑将其Dispatcher部分包装到一个FastCGI Engine.

没有想好,需要好好读读MT的代码,这又是个庞大的工程。

改进TextMate Perl bundle的语法检查

TextMate下Perl的语法检查对于单个perl包或module很好,但是在开发多个package的project时候,由于当前project目录没有在perl的@INC中,因此语法检查是无法通过的。
一种解决方法是将project源码所在的目录加入到perl的@INC中,或者使用use lib.
这2种不适合单个module的测试,会增加过多的use lib指令。

我是通过修改TextMate的perl bundle的perlcheckmate.pl来将当前project的目录加入语法检查include path中,
实现起来很简单,在
~/Library/Application Support/TextMate/Bundles/Perl.tmbundle/Support/perlcheckmate.pl

找到33 line, 修改如下:

my $inc_path = exists $ENV{TM_PERL_LIB_DIR}?$ENV{TM_PERL_LIB_DIR}:"$ENV{TM_PROJECT_DIRECTORY}/lib";
my @lines = `perl -I$inc_path -Tcw "$file" 2>&1`;

默认语法检查是当前项目下的lib目录添加到INC(符合大多数情况), 也可以通过给TextMate的当前Project添加一个TM_PERL_LIB_DIR变量来手动指定一个目录。

现在,ctrl+shif+V, no errors!

ProjectPlus:TextMate的Plugin

最近装了ProjectPlus 这个TextMate的插件,它是TextMate原来的Project Drawer的增强版:

* 支持SVN,Git的状态显示(支持多个icon主题)
* 支持类似Finder的颜色标签
* Drawer和编辑器的宽度比例可以调整
* QuickLook
* …

我觉得可以是TextMate的必备插件之一了. 同时支持SVN和Git比较让我惊喜,这样可以不再使用SVNMate,
我个人是用git进行版本管理,然后用git-svn提交到远程svn库,二者兼顾让我省很多事情.

BTW,传说中的TextMate2何时才能浮出水面呢,等的花都谢了….

Komodo也是我推荐的替代Eclipse的轻量级IDE,尤其是针对Perl/PHP/Python/Tcl.
很久没用Eclipse了…

2个小问题

1. 重新编译PHP,不使用mysqlnd,使用传统的mysql库,无法链接数据库, 错误:
Lost connection to MySQL server at ‘reading authorization packet’

原因: Mysql server默认链接超时是5秒 , 超过了则会报上述错误. 修改/etc/my.cnf将connect_timeout设置为60(和php
mysqli的值一样)

UPDATE: 不要修改,修改后产生了太多的链接!

MysqlND没有这个问题,从侧面说明,其连接池做的还不错.

2.编译DBD::mysql测试无法通过, 报错误无法载入mysqlclient.15.dylib
原因:
默认编译是动态编译,而其引用的mysql动态库的地址是错误的,默认是(/usr/local/mysql/lib/mysql)
在我的osx上,应该是/usr/local/mysql/lib
解决方案1: cp *dylib /usr/local/mysql/lib/mysql/
解决方案2:使用static link:

perl Makefile.PL –libs=”-L/usr/local/mysql/lib/mysql -lmysqlclient” –testuser=root
make
make test
sudo make install

开始使用git

配置管理工具用了不少,最初的CVS,后来切换成Subversion. 最近开始转换到git上.
Git是linus 为linux 内核写的一个分布式版本管理工具. 非常高效和灵活.
用subversion比较麻烦的一个是中央仓库服务器成为一个瓶颈.就我来说吧,白天在公司,
由于服务器在内部,速度还没有什么影响.晚上回家,当commit和update的时候就非常慢.
如果不commit,本地修改的东西就没有管理,有时候时间长了就麻烦, 尤其当你想作不同的尝试的时候,
需要创建一些branch.
Git则弥补了这些问题,作为一个分布式的版本管理,不依赖特定的中央仓库,任何一个节点完了都不影响
整体.

Git目前只有linux/unix版本,windows上可以用cygwin来安装. 对于那些迷恋GUI界面的人,GIT没有subversion
那么好的图形界面, Eclipse上的plugin也刚刚起步(不过基本功能都还全了).

不过git的命令都比较简单,用起来还是蛮顺手的.

我比较幸运,因为我用TextMate,TextMate作者似乎也比较喜欢git了,Textmate有一个比较好用的bundle,

安装很简单:

mkdir -p ~/Library/Application\ Support/TextMate/Bundles
cd !$
git clone git://gitorious.org/git-tmbundle/mainline.git Git.tmbundle
osascript -e 'tell app "TextMate" to reload bundles'

然后,在配置里增加一个TM_GIT的变量,指向你的git的所在.

git好用,不过其他的同事未必能够适应,所以我现在用git-svn配合.
把原来subversion的源码checkout出来形成本地的git仓库.
平时自己修改用git管理, 当需要合并的时候再提交到subvesion中形成新版本.

这里有一篇比较好的git中文教程.

DW上的教程:使用 Git 管理源代码(很初级)

Everyday GIT With 20 Commands Or So(很好很实用)

Icc10编译 Mysql5 x86_64

Intel发布了新版本的Icc编译器,针对新xeon 多核等提供了更好的优化。MysqlAB提供的编译版本比较老用的icc8.1,
我自己重新编译了,不过rpm版本的比较麻烦,最后决定不使用rpm编译了。
采用的静态链接,无法使用ipo,具体的脚本如下:


CC=icc \
CXX=icpc \
CFLAGS="-O3 -ip  -static -static-intel -no-gcc -no-prec-div  -mp -unroll2 -xT"  \
CXXFLAGS="-O3 -ip  -static -static-intel -no-gcc -no-prec-div -mp -unroll2 -xT"  \
LDFLAGS=' -static  -static-intel' \
LD=xild \
AR=xiar  \
./configure \
--prefix=/usr/local/mysql  \
--with-server-suffix='-chinavisual-icc10-compiled' \
--enable-assembler \
--enable-local-infile \
--with-readline \
--disable-shared  \
--with-extra-charsets=all \
--enable-thread-safe-client \
--without-embedded-server\
--with-ndbcluster \
--with-innodb \
--with-archive-storage-engine \
--with-blackhole-storage-engine \
--with-federated-storage-engine \
-with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-zlib-dir=bundled \
-with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static \
--with-big-tables
make clean
make install


另,由于是二进制版本,需要安装:


$ cat install_mysql.sh
#!/bin/bash
groupadd mysql
useradd -g mysql mysql
chown mysql.mysql -R .
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
/etc/init.d/mysql start

Next Page »