Listening 25
Speaking 20
Writing 28
Toatal 101
ArmadilloCommander's Base 犰狳指挥基地
该离开的都走了,独自一人蒸馏着黑暗,直到让自己湮灭在无尽的黑暗中……
于是我打开autoindex模块的源代码,modules/generators/mod_autoindex.c,发现其中是这样判断编码的:
if (autoindex_conf->ctype) {
ctype = autoindex_conf->ctype;
}
if (autoindex_conf->charset) {
charset = autoindex_conf->charset;
}
else {
#if APR_HAS_UNICODE_FS
charset = "UTF-8";
#else
charset = "ISO-8859-1";
#endif
}
所以使用ISO-8859-1貌似是因为编译时预处理else中的判断结构出现了错误。那么APR_HAS_UNICODE_FS是个什么东西呢?查了一下,APR是Apache Portable
Runtime(Apache可移植运行库)的缩写,这是一个用来保证上层程序可以跨平台编译运行的中间层。APR_HAS_UNICODE_FS是在srclib/apr/include/apr.h中定义的,而这个apr.h则是在configure时由srclib/apr/include/apr.h.i生成的:在Windows下APR_HAS_UNICODE_FS=1,而在Linux及Unix下APR_HAS_UNICODE_FS=0,然后根据APR_HAS_UNICODE_FS的值,在编译autoindex模块时选择采用ISO-8859-1或者UTF-8编码。
这下问题就很明白了,这个http server系统是RHEL
5,locale是UTF-8,这样的话正好与mod_autoindex.c的初衷相违背:只要是在Linux系统下编译时,不管系统locale如何
设置都使用ISO-8859-1编码生成Index。
目前几乎所有主流Linux发行版的默认locale几乎清一色都是UTF-8,但是Apache中的autoindex_module非但不能判断locale采用相应的编码,反而不分青红皂白就用了ISO-8859-1编码。。。。这实在是。。。太汗了。
嗯,有时候Hacking一下软件还是很有意思的。
下面说说我个人的体会。因为从事一些研究工作,因此经常会用到一些科学软件,而这些软件绝大多数都是工作在*nix系统下,所以我有
机会比较多的接触到各种不同的操作系统(当然我不是专业人士,所以很多深入的开发工作没有作过,也不了解)。
首先说说Linux,这个东西对于Windows用户上手确实是个小小的挑战,但并不难,因为通过Google任何人都可以找到一些初级问题的答案。比如说,装完Debian(Debian是一个Linux发行版,包含大量自由软件)系统后无法播放mp3文件,只要通过google关键字“debianmp3”完全可以找到详细的解决方法。或者,去论坛发帖。Linux对我来说有很多优点,比如说,可定制性:Ubuntu默认使用Gnome桌面环境,但是其中包含一大堆我用不到的软件,而且体积庞大,对硬件要求较高。所以安装时我会选择一个更为轻量化的桌面环境,比如Fluxbox或者Openbox,经过一些简单的配置(同样,可以Google到很详细的教程),同样可以100%满足我的需求。Flux启动后只有一个状态栏和一个右键菜单,非常的简单。通过编辑菜单文件,我可以在其中任意放置各种常用的程序(比如将Firefox放在第一位,终端放在第二位,还有OpenOffice,等等);通过编辑快捷键文件,可以为不同的系统动作设定快捷键(比如,Ctrl+H是最小化,Ctrl+Q是退出等等),可定制性极高。但是这个时候如果我想要实现类似 Windows Sidebar或者Dashboard的Widget怎么办?Google一下,发现有几种软件可以实现这一效果,比如GoogleGadget和 Screenlets。前者只需要从Google下载源代码并编译(也许有人觉得这个工作高深莫测,其实去年我也是这样觉得的,但事实证明没有那么困难);而后者更简单──很多Linux发行版都提供了“软件仓库”,用户可以直接自动下载安装其中的软件。举例来说,在Ubuntu中,在终端中输入 sudo apt-get installscreenlets,系统就会自动下载安装这个软件(当然也有对应的图形界面程序完成这些工作,之所以选择命令行方式是因为熟悉之后这样做明显效率更高)。
通过这样一番配置,安装所有常用的工具和软件,我的Ubuntu系统只有800MB,开机时间23s,能够在Pentium/32MB内存级别的计算机上正常运行(当然有些大型软件会很慢)──同样能够满足我日常工作娱乐的几乎所有需求,为什么要用臃肿缓慢的Windows呢?这种可定制性是Windows远不能比的。当然Linux系统作为桌面系统的缺点也很明显,比如需要一些功夫去配置,用户需要学习一些新知识,硬件对Linux支持较差等等。
下面说说Windows。我用Windows最早是从Windows3.2时代,Windows95没怎么用过(那时候我认为这东西完全是个花瓶),Windows98/Me/2000/XP用了很长时间,Vista断断续续用过一些。Windows做得非常优秀的一点在于其兼容性,对于不同硬件、不同软件,如果你用过DOS,就应该知道在DOS下安装一块声卡有多么困难。 PnP(Plug and Play,即插即用)的确为业界提供了一个很好的标准 (虽然早期PnP一度被戏谑为即插即祈祷,Plug andPray),使得不同的硬件能够在一起完美的工作而不互相冲突。虽然内核几次更换,但是如今那些DOS/Windows98程序依然能够在WindowsVista下正常运行,想要做到这一点的确很不容易,但正因为如此,Windows平台才会涌现出无数优秀的应用软件和游戏(当然还有病毒)。但是伴随这种大而全的模式,很多问题也应运而生。举个例子,安装WindowsVista时会向用户硬盘上安装几个GB大小的硬件驱动程序用于兼容不同的硬件,但是其中99.99%的硬件可能我一辈子都不会用到,这样的话无端地浪费了很多磁盘空间;再比如,WindowsVista之前的系统缺乏相应的权限管理系统,导致用户滥用管理员权限,病毒横行,等等等等。当然与这些缺点同时存在的还有上述那些有点,这样的对比还有很多,难以列举。Windows的确满足了绝大多数人的绝大多数甚至全部需求,所以它赢得了数量庞大的用户。
最后来说说Mac。我用Mac时间并不长,一年而已,只是可能学习得比较多,所以大体上还是了解一些。对于Mac对于我来说,不单是一个优秀的操作系统,更是一个高度定制的软件与硬件的结合体。它同时具备Linux与Windows的一些优点,也有一些二者不具备的有点,当然还有很多缺点。这些优缺点大家可能了解得比我更多,这里就不多说了,着重谈谈我的个人经验。首先,Mac OSX是一个Unix系统,因此它天生与绝大多数开源软件有着极好的兼容性,我完全可以将实验室运行在Linux上的软件经过编译安装在Mac上运行,这样就可以将一部分工作转移到我的个人机器上来做。
其次,Mac上有一大堆优秀的软件,比如Papers(科学文献管理软件),iPhoto等,在日常使用中实在找不到更合适的替代品了。最后,由于喜欢做一些平面设计(完全业余,主要是海报、网站、Tee的设计,呵呵,专业人士请多多指教),Mac OS X对文字的独特渲染方式(相比Windows来说,Mac OS X基于Postscript的渲染引擎最大限度地保留了字体的外观特征,而不像Windows那样单纯追求文本的清晰度而牺牲了字体设计师希望表达的效果)以及很多优秀的设计软件。
以上只是一些个人使用中的经验之谈,鉴于本人才疏学浅,错误难免,希望各位能够不吝指正,感激不尽!
此外,再说两句题外话。希望大家能够自觉维护一种纯净的讨论氛围,求同存疑,不要发展到人身攻击的地步。争论的目的在于相互交流不同的观点,而不是说服对方或者挫败对方。希望大家能在争论中共同学习,共同提高,这个目的达不到,所有讨论都是徒劳的。