Apple最新的Leopard更新导致Perl无法正常使用
Apple这次做了一个很不专业的事情,在最新的Mac OS X Security Update 2009-001中,竟然使用了老的Perl IO XS bundle。安装更新后,运行cpan或者perl -MIO会得到以下错误信息:
IO object version 1.22 does not match bootstrap parameter 1.23 at /System/Library/Perl/5.8.8/darwin-thread-multi-2level/XSLoader.pm line 94.
Compilation failed in require at /System/Library/Perl/5.8.8/darwin-thread-multi-2level/IO/Handle.pm line 263.
看来,apple竟然将IO xs bundle回滚到1.22, 但是相应的IO.pm则仍然是1.23, 无语。
由于IO无法启用,cpan也break了。 只能手动下载 CPAN IO 1.2301,重新make install后才解决。
看来perl还是要自己编译才好,要想不出这种问题,可以考虑使用local::lib了。
PS:
彻底歇菜,看看这次更新了哪些bundle:
lsbom -f -s /Library/Receipts/boms/com.apple.pkg.update.security.2009.001.bom | grep -i perl
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE/config.h
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE/embed.h
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE/libperl.dylib
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE/patchlevel.h
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/CORE/proto.h
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/Config_heavy.pl
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/B/B.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/B/C/C.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/ByteLoader/ByteLoader.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Cwd/Cwd.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DB_File/DB_File.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Data/Dumper/Dumper.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Devel/DProf/DProf.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Devel/PPPort/PPPort.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Devel/Peek/Peek.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Digest/MD5/MD5.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DynaLoader/DynaLoader.a
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/Byte/Byte.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/CN/CN.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/EBCDIC/EBCDIC.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/Encode.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/JP/JP.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/KR/KR.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/Symbol/Symbol.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/TW/TW.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Encode/Unicode/Unicode.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Fcntl/Fcntl.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/File/Glob/Glob.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Filter/Util/Call/Call.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/I18N/Langinfo/Langinfo.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/IO/IO.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/IPC/SysV/SysV.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/List/Util/Util.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/MIME/Base64/Base64.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/NDBM_File/NDBM_File.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Opcode/Opcode.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/POSIX/POSIX.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/PerlIO/encoding/encoding.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/PerlIO/scalar/scalar.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/PerlIO/via/via.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/SDBM_File/SDBM_File.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Socket/Socket.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Storable/Storable.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Sys/Hostname/Hostname.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Sys/Syslog/Syslog.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Time/HiRes/HiRes.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Unicode/Normalize/Normalize.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/XS/APItest/APItest.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/XS/Typemap/Typemap.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/attrs/attrs.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/re/re.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/threads/shared/shared.bundle
./System/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/threads/threads.bundle
./System/Library/Perl/5.8.8/pods/perldiag.pod
./usr/bin/perl
./usr/bin/perl5.8.8
./usr/bin/perlbug
./usr/share/man/man1/find2perl.1.gz
./usr/share/man/man1/perlbug.1.gz
./usr/share/man/man1/perlcc.1.gz
./usr/share/man/man1/perldiag.1.gz
./usr/share/man/man1/perlivp.1.gz
修复:
1.重新下载IO安装
2.重新编译CPAN
3.Config::Auto
4.其他不正常的module
累人。
Qt 4.4中文乱码
QT4.4/4.5中,QString默认编码为latin-1,
因此直接使用中文string会出现乱码,通过设置TextCodec可以改变。
假设源文件使用utf-8编码,所有QString,tr都使用utf-8编码,在main.cpp
int main(int argc, char *argv[])
{
CDownApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName(”UTF-8″));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(”UTF-8″));
现在可以直接使用中文字符串,以及在tr中使用中文.
也可以QTextCodec::codecForLocal来设置Codec,不过在Mac/Linux/Windows上
产生的codec并不一致。
所以为了一致,使用UTF-8最佳。
Git for OSX installer
http://code.google.com/p/git-osx-installer/
以后不用自己编译了,省事.
OpenInGitGui还挺方便的,
虽然我一般在iTerm里用命令行,配合git complete脚本,也非常方便。
换鼠标
早上,mighty鼠标和往常一样滚珠失灵,没办法,沾了水,用于在纸上蹭,后来不知怎么的,竟然蹭出
一道道的痕,再试了一下,完了,滚珠向下的动作失灵了,往里按的中键也不起作用了,其实昨天晚上就有点
不灵了。
mighty鼠标是我认为购买的最失败的apple产品,还是去年lp送的礼物呢。
没有人体工学,滚珠动不动就失灵,还有移动的速度比较慢。。。。
最近右手从手掌到小臂一直隐隐作痛而且有加剧的趋势,我怀疑得了职业病或是鼠标手了,这次更换鼠标怎么也得买一个人体工学的了。
初步看中了罗技的v470蓝牙激光鼠,不大,适合我。淘宝售价大概340左右。
update:
入手v470,白色,for mac用户,用起来很舒适,不错。
警告:
切勿安装驱动盘中的罗技的驱动和Logitech Control Center,使用Leopard自带的鼠标即可。
如果不小心安装了驱动,会发现鼠标无法正常工作,滑动也滞后了。
最讨厌的是没有卸载程序(应用程序/实用工具/LCC Uninstaller),需要手动删除:
/Library/Application\ Support/Logitech/
/Library/PreferencePanes/Logitech Control Center.prefPane
/Applications/Utilities/LCC Update.app
~/Library/Preferences/com.Logitech.*
Reboot
QtCreator: OSX下最佳Qt IDE
QT的IDE有不少,不少都是跨平台的,不仅可以在Windows上使用,也可以运行在OSX上。
我所试用过的有:
1. QDevelop,MonkeyStudio,Eric4
前2个都是开发比较早的Qt IDE了。优点是功能比较齐备,且和QT集成的很不错。
缺点就是界面比较丑,和osx的native GUI不是很协调,此外速度比较慢,在操作上响应总有些滞后。
我不确定是否是OSX的问题,可能这些IDE开发者本身是在Linux或者Windows下,对于OSX的测试
不够完备吧。
因此,虽然功能看起来不错,但是没有给我留下太好的印象。
至于Eric4, 它本身是一个Python/Ruby的IDE,但由于其本身使用PyQt来开发的,因此对于PyQt的支持是非常好的,对于用PyQt来开发的用户倒是一个不错的选择。
2. Eclipse CDT+Qt for eclipse
由于Eclipse的跨平台,这个方案是可以代替VisualStudio了。
习惯Eclipse开发环境的,这是最佳选择。因为无须再开新的app了,都在这里了。
缺点:内存和资源占用比较大,eclipse老毛病了。
对策是不要导入太多的project,尤其是不同类型的,Java,Pel,PHP,用的时候再import进来,不用就关闭。
3.Parallels Desktop4 + Visual Studio 2008+Qt integrated+Visual AssitX
在虚拟机中使用Visual Studio2008并不那么困难,对于4G标配内存的新款MBP来说,真是“不差钱”,
但对于我那个只有2G内存的MBP,稍微有一点点吃紧。使用Coherence模式,和普通OSX App没有太大的区别。
Vmware Fusion在我的MBP上导致风扇的调度出现问题,否则也可以考虑vmware fusion。二者没有什么区别,
最新版的PD4稍稍胜出。
VS2008需要配合Qt commercial版本使用,无法使用mingw版本。
使用中,最好使用独立的QtDesinger来设计UI,不要使用集成的版本,这样可以避免出现一些小的问题。
VAX则是可以将Qt的source目录加入,这样代码提示会很不错。
4. QtCreator
最后一个也是我最后选择的是QtCreator。
QtCreator本身是一个轻量的IDE,专为Qt开发设计的,其设计理念是简单易用,尤其适合Qt的初入门者能够在最短时间内熟悉并投入Qt项目开发。最新的是RC1版本,预计09年3月和Qt4.5共同推出正式版。
QtCreator的开发者的开发环境也是在OSX下,因此其界面非常适合Mac用户的口味。界面导航和快捷键的设计
都是很方便,基本考虑到了Qt开发的常见任务。
我从beta版本开始使用,其中不断更新其snapshot版本一直到现在的rc,开发的进度还是很好。mailing list上的反馈也都不错。
从自己使用的感觉,就是比较清爽。也符合现在的一些开发者的习惯趋势,
比如其内置了git管理,这点是目前其他IDE所没有的。 Git也是我现在默认的版本管理工具,从这点让我感到欣喜,
现在很多opensource的项目也逐渐使用git取代svn。
另一个小东西就是FakeVim插件,可以在编辑器中激活仿真vim功能,这样可以使用常见的vim快捷键。
这个小插件真是太实用了,用起来很舒服。
还有从查找Symbol,Class,帮助,到切换窗口都配有快捷键,这样在写代码的时候配合fakevim,双手基本不用离开键盘就可以完成多项任务,真是非常高效。
缺点: 由于开发的时间不长,辅助性的功能不太多,虽然足以完成日常的工作,仍希望有更多人性的插件出现。beta版本中的bug不少,rc致命的bug少了一些。
总而言之,对于在Mac上的Qt开发者,尤其是Qt的初级开发者,QtCreator是最佳的选择。
- Welcome screen
- Quick navigate
- Integrated with Qt Desinger
- Fake vim mode in editor
vmware fusion导致的MBP风扇长时间高转问题
以前在试用vmware fusion和比较PD4时曾提到开启fusion后,风扇噪音增大,风扇转速在4500以上。
当时没有太在意,以至于我没有想到会那么糟糕。
进入冬天,家里的暖气很热,于是,发现mbp经常风扇全速运转,5000rpm以上。
此外,温度也明显升高,各个温度指示都在65以上,尤其是CPU和内存的温度都在75以上。
开始我怀疑是因为最近免费更换了电池造成的,为此去了apple三里屯店,结果什么也没查出来。
为了工作,年前买了一个moshi的散热器,发现还是不行。而且,由于散热器,温度并不高,但是风扇仍然
告诉运转。 在vmware的论坛里发现有人反应,也出现类似的问题。
既然不用vmware fusion,只能重新启用Parallels Desktop了,从PD的网站上下了最新一版(5180),试用了一下,
发现改进还不少,其中休眠恢复和启动的速度明显提高了。 稳定性也是没有问题了。
于是,卸载了vmware fusion,reboot.
这世界终于安静了。



