软件评测

我目前首选的一些常用软件产品

类别软件热爱指数评价本站相关信息
电子邮件    Google Gmail*****    最接近完美1, 2
网页浏览FireFox*****超强1, 2
文档压缩WinRAR****简洁、稳定 
文档格式PDF****便捷1, 2
PDF阅读Adobe Acrobat****舒心1
mp3播放WinAMP****稳定、多功能    1
即时消息MSN Messenger****有序更多的...
Java编程JBuilder****超强 
Whoisdomaintools.com***超强 
虚拟光驱DAEMON Tools***小巧1
地图查找Google Map***易用,超强 
OCRABBYY***超强1, 2
文本编辑UltraEdit***过于强大1, 2
文本比较UltraCompare***超强 
看图软件ACDSee***超强 
烧盘软件Nero***超强 
杀毒软件Kaspersky***称职1, 2
RSS阅读bloglines.com***便捷1
VoIPSkype***高清晰音质1, 更多的
文件下载讯雷***下载超快 
文件更名Magic File Renamer    **够用1
系统配置超级兔子**易用 
操作系统Windows XP**傻瓜1
字典软件Babylon**凑合 
FTP软件LeapFTP**凑合 
屏幕截取HyperSnap**超强1
中文输入微软拼音**习惯了1, 2
BT下载Azureus*凑合1
硬盘搜索Google Desktop*超强1

标签:

类别:

PHP框架(framework)大观

我在TOM工作期间,曾考虑编制一个PHP框架,用于提高PHP开发效率。后来去掌通公司工作后,这个思路得以初步实现,并具体地运用在“NEC Dream”这个手机服务网站中。

随后,我便长时间地脱离PHP代码编写第一线。在随后的日子里,我有时像个品酒师,评测别人写的程序;有时候则像个小学生,从别人的程序中学习新方法、新思路、新观点。

最近,我打算动手用PHP做些东西,需要有一套省心的PHP框架。

显然,我不打算从头开始写起,写一套自己的PHP框架;我也不打算借用自己过去的一些程序,因为那些程序现在看来有各种不足。

因此,我打算找一个开源的PHP框架,或者借鉴某一成功PHP程序的框架,在此基础上开发自己需要的PHP系统。

照套某一成功PHP程序(例如Serendipity等)的框架是比较困难的。因为这些PHP程序的需求都是非常特定的,其框架欠缺足够的灵活性,不一定适合我的需要。

因此,比较可行的方法还是找一个现成的PHP框架。

这个PHP框架至少需要有如下几个鲜明特点:性能出色、使用模版引擎、支持Ajax、架构清晰、使用简单、较为完美的多编码支持等等。

我曾在《"Ruby on Rails"技术观后感 (2)》一文中列出了去年5个主要的"PHP on Rails"技术。1年后再看看文中提到的这几个PHP框架,Biscuit、TaniPHP的开发目前似乎陷于停滞状态,似乎只有PHP on TRAX、CakePHP、Symfony这三个还可以考虑。其中,CakePHP、Symfony受到的追捧明显高于别的框架。在明年第一季度,将各有一本分别针对这2个PHP框架的书出版。1

到底哪一个PHP框架对我最合适呢?

2006年3月,Dennis Pallett写了一篇文字《Taking a look at ten different PHP frameworks》(瞅瞅10个不同的PHP框架)。文中对10个PHP框架作了比较,并附了图表分析和个人评价,有相当的参考价值。Dennis认为,CakePHP没有明显的缺点;Symfony融合了好些别的开源项目,功能强大,但好些任务(例如分页)处理起来比较复杂;Seagull是另外一个功能强大的PHP框架,但欠缺官方的Ajax支持……

Fabien Potencier是CakePHP的爱好者。2006年5月,他写了一篇文字《Rails-inspired PHP frameworks》(源于Rails的PHP框架),对主流的一些“PHP on Rails”框架作了比较,并对每个框架都有他个人的点评,同样具有相当的参考价值。在他看来,CakePHP虽然没有官方的国际化支持,也没有发挥PHP5的全部潜力,但相当简单易用;Symfony功能过于强大,而且结构过于复杂;PHP on Trax特点不鲜明,基本上只是照本宣科复制Ruby on Rails的概念而已……

CodeScripts网站的“PHP Framework”网页提供了对各种PHP框架的打分。从中可以看出,CakePHP和Symfony分别得到6.6和6.5的高分,而且二者受到众多读者的关注,分别有172和103个读者对其打分。2

最终,我认为:CakePHP最符合我的需要。需要提醒的一点是:符合我目前胃口的东东不一定适合你。

[注1] 具体出版信息可从Amazon.com上查到。

[注2] 此处打分统计时间截止于2006-10-30 18:14:25。

标签:

类别:

去除PDF文件保护

PDF是我最喜欢的文件交流格式。

PDF文件有多种文件保护方式。最为常见的两种方式是:密码保护和数字证书保护。

密码保护是比较容易破解的,相信有众多的软件可以去除密码保护。我个人偶尔会使用“PDF Password Remover”等软件进行去除PDF文件密码保护的工作。

相对来讲,PDF文件的数字证书保护比较难以去除。

今天下午,由于想要去除某PDF文件的数字证书保护,于是在网上搜索、研究了一下,发现德国人Martin Backschat在2005年5月12日介绍了一个有效的方法

Martin所介绍的方法的思路是:使用perl程序执行一段perl语言脚本,去除PDF文件中数字证书相关字段。具体操作方法我就不多做介绍了,原文中有详细介绍。好些访客在原文后面评论说使用Martin的方法不能正常工作。我自己测试后,在原文后面做了如下评论(以下为中文翻译节选):

Martin提供的脚本能够在Windows上的Cygwin环境下正常工作,也能去除pdf v1.6的数字证书保护,但是……

(1). 如果使用Windows上安装的ActivePerl等程序运行该脚本,则不能正常工作;

(2). 该脚本不能在Linux/Solaris上正常工作。


本文只是提供一个技术信息,但并不鼓励、也不赞同恶意的破解行为。

本文谢绝细节讨论。

标签:

类别:

PHP创始人所欣赏的7套PHP产品

FLOSS Weekly是一个创办于今年4月的播客节目,每周播出。其主要内容是和一些媒介产品创始人、创造者(尤其是来自开源社区的人们)讨论媒介最新进展和趋势。

Rasmus Lerdorf是PHP语言的创始人。在2000年以前,他有相当部分的时间都在加拿大多伦多地区学习、工作。上周五他应邀参与了该节目。在节目中,他提到了他所欣赏的7套与PHP相关的产品。作为PHP语言的创始人,他对PHP产品的讨论自然应该受到重视:
  • Moodle: 一套面向教育界的课程管理系统。我没研究过,只是在昨天提到Packt出版社今年出版了一本关于Moodle使用方面的书籍。

  • Sahana(萨哈拉):一套灾难管理系统。这是一项曾获人道主义奖项、并获得过SourceForge“本月之星”(Project of the Month,此处意译)称号、相当受关注的产品,但我没关注过。

  • Gallery:一套照片库系统。本站使用了这套系统作为本站的照片库程序。我目前对这套产品唯一明显不满的地方在于:它的某些功能过于强大了,另外,语言编码支持方面仍有潜在的bug。

  • Serendipity:一套网志系统。本站使用了这套系统作为本站的网志程序。我目前对这套产品的使用手感是:非常满意。

  • Drupal:一套内容管理系统。我没仔细研究过。Apress出版社去年底出版过一本书《Building Online Communities With Drupal phpBB and WordPress》(使用Drupal、phpBB和WordPress搭建在线社区),Packt出版社今年4月份也出了一本关于Drupal的书,由此可见,这套内容管理系统还是有明显可取之处的,虽然不一定尽善尽美。

  • Fudforum:一套论坛系统。我没研究过。我一直对phpBB 3的开发进度感到失望,好在前天phpBB 3.0 Beta 2已经发布了,离phpBB 3正式发布的日期终于不远了(只是不知道其中文汉化部分是否已经有人做了)。

  • APC:一个关于缓存的PHP扩展。我没研究过。memcache是另外一个关于缓存的PHP扩展。

[补充说明1] 本文信息源从阅读昨天Garvin写的网志“Rasmus Lerdorf loves Serendipity”得到。

标签:

类别:

网志系统Serendipity评测 (2)

在跳票4个月1后,今天,Serendipity网志系统终于发布了Serendipity v1.0最终版。为此,我特地完成这篇草稿于1个多月前的网志2,以表心中高兴之情。

本文承接《网志系统Serendipity评测 (1)》一文,进一步讨论Serendipity的一些使用技巧和使用细节。本文的部分讨论内容同样适用于其它网志系统,例如WordPress等。

首先统一一下相关名词翻译。本文中“侧栏插件”指的是sidebar plugin,事件插件指的是“event plugin”。

下面开始正式讨论。

1. 不要使用不需要的插件,不要启用过多插件

现在,Serendipity提供的插件比较多,这为Serendipity网志系统提供了丰富多彩的功能。但是对于网志而言,并不是插件使用得越多越好。很明显,过多地使用插件是会(明显)影响网页性能的。

我的个人建议是:选择使用插件一定要慎重,尽量少装插件,以免影响性能(主要指网页打开速度)。

一些简单的使用插件的规则如下:

(a). 不要启用过多插件,尤其是功能花哨的插件。

(b). 插件如果不使用的话,尽量将其从“当前使用的插件列表”中删除,而不是将其隐藏。

(c). 能合并的(侧栏)插件,尽量合并。例如,你可能想在页面侧栏中显示重要提示、文章类别、友情连接、版权声明、Google站内搜索等等内容。Serendipity提供不同的插件实现这些功能,但我并不推荐你安装全部这些插件。由于这些插件所生成的HTML代码并不会经常被改动,因此我的建议是:使用某个nugget侧栏插件(文本块插件,例如Language-Specific HTML Nugget这个插件),将相关HTML代码写到这个文本块中,然后将其显示出来。通过这种手法,你只用一个文本块侧栏插件就能将其它几个侧栏插件想实现的功能(通过变通的方法)全部实现了。

2. 插件选择

哪些插件是必选的?哪些插件是可选的?哪些插件是不必选的?

很多时候,为大多数用户提供一个“必备插件列表”的行为是愚蠢的。因此,在这里我仅仅是为他人提供我对于插件选择的一些看法。我无法告诉你哪些插件是必选的、哪些是可选的、哪些是不必选的,我只能列出我认为是相当重要的一些插件,并描述我对它们的看法。

需要注意的是,这里列出的插件的中文名称并不一定是标准的中文翻译。

我认为比较重要的侧栏插件有:

(a). 文本块 (Language-Specific HTML Nugget): 我很推荐使用这个插件,具体原因可以参考本文相关说明。

(b). 保存文库 (Archives): 我很推荐使用这个插件,因为通过它用户可以方便地访问你的所有历史网志。

(c). Google 快速搜寻 (google Quick Search): 我很推荐使用这个插件,否则你很难实现中文网志的站内搜索。这个插件需要和事件插件“Google网站地图生成器”结合起来使用。我建议你不要安装这个插件,而把相应的功能集成到某个文本块插件中。

(d). “创作共用”授权条款 (Creative Commons): 我很推荐使用这个关于版权声明的插件。但我建议你不要安装这个插件,而把相应的功能集成到某个文本块插件中。

(e). 回响 (Comments): 我比较推荐使用这个插件。通过它,大家可以知道访客留下的最新评论。

(f). 最新网志 (Recent Entries): 我比较推荐使用这个插件。通过它,用户可以在任何页面轻松地访问你最新写下的网志。

(g). 显示标签 (Show tagged entries): 我比较推荐使用这个标签。通过它,用户可以知道你特别关注、特别感兴趣的话题,能够更好地和访客分享你的爱好、兴趣。

(h). 文章同步 (Syndication): 如果你想提供访客RSS订阅功能的话,这个插件非常重要。但是,我建议你把这个插件设为隐藏状态,然后在某个文本块插件中添加一个RSS订阅用的链接。

(i). 我的日历 (My Calendar): 我不倾向于使用日历插件,觉得它浪费网页显示速度。

我认为比较重要的事件插件有:

(a). 插件管理 (Spartacus): 我很推荐使用这个插件,具体原因参见《网志系统Serendipity评测 (1)》一文。

(b). 垃圾评论屏蔽 (Spamblock): 我很推荐使用这个插件,具体原因参见《网志系统Serendipity评测 (1)》一文。

(c). 系统备份 (Backup Interface): 我很推荐使用这个插件,具体原因可以参考本文相关说明。

(d). Google网站地图生成器 (Google sitemap): 我很推荐使用这个插件,否则你很难实现中文网志的站内搜索。这个插件需要和侧栏插件“Google 快速搜寻”结合起来使用。

(e). 网志标签 (Tagging of entries): 标签是网志系统中很重要的一个功能。如果你对网志中标签(tag)和trackback的含义不是很理解的话,建议你读读这篇文章。我比较推荐使用这个插件。

(f). Trackback控制 (Trackback-Control): 我比较推荐使用这个插件,否则你很难知道哪些人在网上引用了你的网志。

(g). 网志发布 (Announce entries): 这个插件用来向各大网志搜索引擎系统提交你新发布的网志。我比较推荐使用这个插件,但不建议你向所有的网志搜索引擎发布你的网志,因为那样子会导致你发布新网志时速度很慢;而且,这些搜索引擎都是英文的,你没有必要向所有的这些英文搜索引擎提交。我自己只选择向“technorati.com”和“Yahoo!”提交我新发表的网志内容。

(h). 起始类别 (Start Page Category): 我比较推荐使用这个插件,这样你可以通过某种方式隐藏某些你不想在网志上显示的内容。

(i). 另外,我强烈建议使用换行标记 (Markup: NL2BR)、浏览器兼容 (Browser Compatibility)、网志扩展属性 (Extended properties for entries)这三个有关网志内容编辑的事件插件。

其它未在本文提及的插件可以根据你的需要取舍。

3. 页面布景模版的选择

布景(theme)这个单词,也有人翻译为“样式”、“模版”、“外观”等等。总而言之,它表示的是你的页面的样式。本文中使用“模版”一词来表达“布景”这个意思。

Serendipity提供很多不同风格的模版。我大体统计了一下,目前在Serendipity的Spartacus自动更新系统中,提供了68个模版。

但这并不意味着每个模版都适合你。

对我而言,基本上我绝对不会选择“门”字形风格(页面两侧有侧栏)的模版,也不会选择侧栏放在页面左边的模版。实际上,我只会在侧栏放在页面右边的模版中进行选择,正如你现在在本站网志系统中看到的那样。

为什么要做这样的选择??因为页面布局是会影响页面显示速度的。

页面的主体是页面中间的正文。如果你把侧栏放在页面左边,侧栏显示的内容一般就应该在主体内容之前显示出来。但是万一你的侧栏某块被堵塞的话,那么主体内容将可能显示不出来,或者要花很长时间才能显示出来。

这种问题出现在很多中国网站上。当你访问某个网站的页面的时候,经常可以看到页面标题、顶部很早就显示了,但正文却迟迟打不开。这就是页面布局设计、HTMl代码设计有问题。

因此,为了避免这个问题,你应该尽量选择“侧栏放在页面右边的模版”,这点对那些带宽不充分的访客尤其重要。

换句话说,侧栏插件应该尽量放在页面右边,尤其是那些可能影响页面打开速度的侧栏插件。

4. 使用备份插件

受过感情伤害才知道真情的可贵,丢失了电脑数据才知道数据备份的重要。

数据备份是非常重要的一项工作。如果你还没有意识到要去注意电脑数据的备份工作,我也懒得再多强调备份的重要性了。

Serendipity通过一个备份插件提供了自动化的备份机制。可以备份整套程序、全部上传文件、全部数据库信息。你可以选择备份的内容、备份的周期,你还可以选择自动备份或者手动备份。

关于备份的进一步细节我就不详谈了。

5. 再谈“垃圾评论阻挡功能”

现在,网页垃圾广告非常泛滥。针对各种网志系统、BBS系统的垃圾广告攻击行为非常常见。因此,反垃圾功能是很多web系统的重要组成功能之一。

曾说过,“Serendipity的垃圾评论阻挡功能非常强劲”。但再强劲的系统也要善于使用。

这里提几点Serendipity中反垃圾评论、反垃圾trackback的通用技巧 (一般读者可以跳过此段,我写得比较随意、不够清晰,因此读起来有点晦涩):

(a). 启用发表评论时的Captchas图形验证码功能;启用发表评论时的时间间隔限制。

(b). Trackback必须经过验证才能发布。

(c). 严格限制评论中允许的网址数量。我的规则是:评论中含2个网址时需要管理员审核;含3个以上网址自动拒绝。如果可能的话,我会拒绝在评论中留下任何网址的行为。

(d). 必要的时候对评论中的关键字进行过滤。

(e). ……

在使用上述过滤机制的时候,你不必担心会过滤掉重要的、善意的访客评论。我曾为此担忧良久,最后认为这种担忧的确是多余的。事实证明的确如此。

6. 关于留言本插件

根据对网志的通俗定义,留言本不是网志系统的组成部分之一。但对于网志而言,一个留言本往往还是需要的,即使在网志有评论功能的情况下。

为此,Serendipity提供了一个留言本插件,但这个插件功能非常简单。例如,它没有回复功能,并且,它的页面样式过于简单。

我目前不推荐使用这个留言本插件。可惜的是,迄今为止,我尚未发现非常令我满意的、可以用来和Serendipity结合起来使用的留言本系统。

7. 中文字符集选择:GB2312还是UTF-8?

我曾写过两篇网志(1, 2)讲述我曾在Serendipity字符集选择时遇到的麻烦和解决方案。不过那2篇文章中的技术方案基本上可以认为已经过时了。

对于中文简体网页界面,Serendipity提供两种字符集供选择:一是Simplified Chinese (GB2312),一是Simplified Chinese (UTF-8)。最近2年,在网页编码中,UTF-8被越来越广泛地使用。就我目前的理解,从多个角度来讲,在绝大部分情况下,使用UTF-8将会比使用GB2312有明显优势,使用UTF-8更好。

8. 关于Serendipity中文版本

Serendipity v1.0 beta 3之前的中文翻译文件不够好(或者说马马虎虎)。一则相当部分没有翻译(尤其是大部分插件没有翻译),二则翻译的准确性也有待提高。

最近有一个叫Li, Aphonex的网友投入精力把Serendipity绝大部分语言文件(包括插件的语言文件)翻译了一遍。我曾简单地测试了一下他提供的文件,虽然还有一些瑕疵,但毕竟比之以前,要进步很多。

需要注意的一点是:汉化不完全等于翻译。翻译仅仅是汉化工作的一部分。好的汉化工作包括翻译、测试等几个必不可少的部分,缺一不可。

[注1] Serendipity v1.0原定于今年2月15日发布。

[注2] 本文最初草稿于2006-05-09 10:08:47。

[补充说明1] 由于本文过长、很可能存在错别字等,因此,不排除以后对个别错别字等作修正。

[补充说明2] 本文不大欢迎评论和提问。我已经投入比较多的精力来写这篇文章了,不想因为无益的讨论而额外浪费时间。

[补充说明3] 如欲浏览更多关于Serendipity的使用、维护信息,请参考《网志程序Serendipity中文维护个人文集》一文。2007-07-15 14:23:19

类别:

Winamp数据统计插件评测

** 综述
        本次评测将评测Winamp数据统计插件。Winamp是用来在电脑上播放mp3等格式歌曲的软件,其支持各种插件。Winamp数据统计插件用来记录、统计用户在Winamp中听过的歌曲。
        本次评测在Winamp官方网站插件专区针对“statistic”关键字搜索后,从10个搜索结果中选择4款该类插件进行评测。
        若非特别说明,所有评测都基于最新版的插件进行。
        本次评测在Winamp v5.23 (20060607)该版本上进行测试,评测过程比较粗略,但结果应该比较准确,有参考性。
        评测结论:推荐madStats Statistics Plugin。

** Statistic2 (不推荐)
        当前最新版本:
                Jul. 19, 2002 / 6,916 downloads
        缺点:
                中文处理能力差。
        优点:
                N/A
        其它:
                使用二进制文件存储信息。
        评测时间:
                2006-06-10 02:33左右

** madStats Statistics Plugin (推荐)
        当前最新版本:
                Feb. 26, 2003 / 6,258 downloads
        缺点:
                不能自行设定记录文件存储位置。
                不能自动按周、按月统计。
        优点:
                能正常记录中文字符。
        其它:
                使用微软Access文件记录信息。
        评测时间:
                2006-06-10 02:38左右

** TrayList 2005 (不推荐)
        当前最新版本:
                Feb. 7, 2004 / 311,919 downloads
        缺点:
                不能正常记录中文字符。
        优点:
                未具体研究。
        其它:
                付费软件,也是获奖软件。功能众多。
        评测时间:
                2006-06-10 02:45左右

** WinAmp TopList 2 (不推荐)
        当前最新版本:
                Jul. 11, 2001 / 6,843 downloads
        缺点:
                工作时(必须)显示一个面板,不方便。
        优点:
                可以按周、按月统计。
        其它:
                支持中文。文本方式保存数据。
                插件部分功能可能需要注册,但注册网站已失效。软件很久未再更新。
        评测时间:
                2006-06-10 02:56左右

标签:

类别:

网志系统Serendipity评测 (1)

使用Serendipity作为本站的网志(blog)系统已经有2个来月了。在这个过程中我越来越欣赏这款个人网志系统,因此把使用过程中相关的具体感受写下来,以便其它用户参考。

本文只会介绍/讨论Serendipity中几个让我眼睛发亮的优异功能。也许部分功能别的网志系统(例如WordPress)也有,但是我没有怎么用过别的网志系统,因此也就无从做出比较。我只能说,Serendipity所提供的这几个优异功能让我很开心。

1. 全站文字导入导出功能

好像这个功能看起来很普通,但在信息管理中这是一个极其重要的功能。当你准备做整个系统的迁移、切换的时候,这个功能很重要。Serendipity的这个功能使得用户使用Serendipity很轻松:想用就用,想走就走,切换容易;而不是像某些别的系统,一旦你采用了,想要切换到别的系统很困难。从这一点上来讲,Serendipity为用户考虑得还是很体贴的。

当然,如果你要导入、导出更详细的信息(例如访客评论信息等)的话,那么还是要费点功夫的。

2. 垃圾评论阻挡功能

Serendipity的垃圾评论阻挡功能非常强劲。最近(指2006年3月上旬)本站开始陆续收到来自同一源头的、具有较高智商的垃圾广告评论骚扰/攻击,但是我并不需要对垃圾评论做什么手工的删除操作等,Serendipity自动把这些垃圾评论挡住了,省了我很多事。

因此我对Serendipity的垃圾评论阻挡功能赞誉有加。想想吧,如果Serendipity不能有效地挡住这些垃圾评论的话,那么我每天都将要花一些时间去删除这些垃圾评论,那会多么烦人……

3. 模块/模版自动侦测功能 (Spartacus)

Senrendipity有一个插件叫做Spartacus: [S]erendipity [P]lugin [A]ccess [R]epository [T]ool [A]nd [C]ustomization/[U]nification [S]ystem (Serendipity插件自动获取、配置、协调系统),允许用户连接到在线插件库并下载、安装相关插件。插件库提供的插件包括插件(plugin,可理解为模块)和模版(theme)两种类型。这个功能是相当重要并且相当有利于用户使用的:让你能够比较轻松地从插件库中找到你所需要的插件,易于用户使用和维护插件。

4. Google站点地图模块

这是一个很实用、让人激动的模块。对于中小型信息发布类型的网站而言,如果没有自己的有效的站内搜索功能的话,那么采用Google站点地图功能来实现站内搜索是非常好的一个思想。这个模块能够在最短时间内把你的网站更新的内容通知Google,使得Google能够很快地将你网站的最新内容添加到其搜索引擎中。根据我的使用体验来看,顺利的话一篇文字发布后24小时到48小时内就能够出现在google的搜索引擎中。

5. 草稿模式

我写文字的方式是断断续续、涂涂改改,有时候一篇文字从雏形到写完需要好几天,甚至很久。以前我专门用一个文本文件来记录我正在写和已经写完的草稿文字,日积月累下来这个文件大约有6000行/段的文字了,操作起来比较繁琐;所以后来我又创建了第二个文本文件用来记录自己的草稿文字。

但现在,我改变了我的草稿文字书写的习惯。我正在写的草稿文字都以“草稿”的状态保存在Serendipity中,等到哪天我觉得写好了、改好了,我就把该文字从“草稿”的状态改成“公开”的状态发布出去。这样,我有什么零星想法的时候,都能及时地记录在Serendipity中,然后以后再不断地充实该文字,直到最后成文。我可以在家里写、可以在学校写、可以在外地写,可以在任何有网络的地方写我的零星感想。

“草稿模式”是一个很实用的功能,好些别的网志系统应该也有这个功能。

[补充说明1] 本文初次编写于2006-03-09 15:25,完成于今日。

[补充说明2] 如欲浏览更多关于Serendipity的使用、维护信息,请参考《网志程序Serendipity中文维护个人文集》一文。2007-07-15 14:23:19

类别:

内容管理软件XOOPS 2粗评

前两天答应给大温莎华人协会维护网站5后,初步考虑使用一款内容管理系统(CMS,content management system)来管理、维护整个网站。

几种著名的基于PHP的CMS中,php-nuke名头最响、最老牌了,但现在收费了,而且基础架构好像没有postnuke好;但postnuke这个后期之秀开发了几年了,好像还是没什么明显的突破;另一个CMS产品phpWebSite是美国Appalachian州立大学开发的,一直就像大学里的实验产品,虽然开发了N年,但总是让人用起来感觉不爽(我一直觉得这个产品让人期望之余很失望);tiki给人的感觉不是最恰当的选择,更像一个信息、数据管理中心;Exponent Content Management System是这几者中最年轻的,也曾在sf.net上火过一把,但此后好像也没什么再出彩的地方了。

这样子算下来,XOOPS似乎应该是比较好的选择了。XOOPS的模块很多,功能完善,能和大名鼎鼎的Blog系统WordPress结合起来,而且还有中文的技术支持网站,所以乍看起来,不选XOOPS都不行了。

于是中午就下载了一份XOOPS v2.2.3安装、测试了一下。测试的结果只能用生气、呕血来形容。我本来不愿意浪费时间来写这个评测的,但是为了让我以后能够清晰地记住这个软件如何让人生气、失望,我还是详细地写写我的感受。

首先,安装v2.2.3后我发现该版本的官方语言包比较少,大概10来个,没有中文。于是,我用了个v2.0的中文简体语言包。此后,别的小瑕疵不说,单说选择语言为中文简体后,就会出现很多个程序运行警告信息。切换回英文错误信息少了很多,但还是有好几个,而且是核心程序里面出现的错误信息。也就是说,这个官方最新(稳定)版还是有明显的bug的。

因此,这时候我考虑用CVS下载最新的更新程序,然后对应地覆盖出错文件。可惜这般改动后错误信息依旧出现。无奈之余我就打开出错的这4、5个文件,发现了几个近乎白痴级别的程序设计错误:

1. /kernel/block.php里,getByModule()、getAllByGroupModule()、getAdminBlocks()、assignBlocks()被重复定义了2次,估计是开发人员复制、粘贴时候出的错。但是这种错误一测试就可以发现了呀,难道XOOPS的开发人员程序修改了之后都不测试就更新到CVS服务器里面去了??呕血。

2. /modules/newbb/language/english/modinfo.php里,用define重复定义"_MI_TEXT",这也是一测试就能测试出来的错误。

3. /kernel/module.php里,重复定义变量$_msg两次,而且这2次紧挨着,又是一个一测试就能测试出来的错误。

4. /class/theme.php里,在函数loadGlobalVars()里,用“if ($xoopsUser != '') {”,这里$xoopsUser是一个对象(object)。正确写法应该是“if (!empty($xoopsUser)) {1

5. 在某文件中,在定义某call by reference的函数的时候,返回布尔值,“return false”。正确写法应该返回某变量2

待把这几个错误修正了之后,英文版的XOOP终于可以正常运行了。但是一但切换到中文,由于语言包兼容性等问题,仍然出现一大堆错误。XOOPS虽然的确支持多语言,但这方面做得并不很好,对语言处理过于生硬3。这直接导致的后果就是:我根本无法通过官方网站提供的资料使用中文版的XOOPS。

好在有国人搞了XOOPS中文版。但我对中国程序员改造后的程序向来感冒,看了中文版XOOPS网站的下载介绍后,我根本无意从那里下载中文版的XOOPS,因为我觉得如果使用了这个中文版,我就被这个“狭隘”的中文版套牢了,以后想要解套也许还要看那些中文版程序员的脸色行事,不妥。

其实当XOOPS设计成支持多语言后,那么所有的针对XOOPS某一特定语言的语言包的开发都应该归到XOOPS这一个旗号下,而不要脱裤子放屁——多此一举地另立一旗号出来(就像osCommerce日文版一样)。但问题是XOOPS的开发、管理、测试看起来在某些方面做得比较烂4,导致有些语言包根本无法在XOOPS下正常使用(这点也可以用来解释为什么XOOPS v2.2.3的官方语言包只有可怜的10来个)。在这种情况下,某些语言的开发者(例如中国的开发者)另立旗号也是可以理解的。

其实,XOOPS的确是个很好的产品。但一个团队中,良莠不齐也是很正常的事情,偏偏有几个菜鸟级的开发人员坏了XOOPS这锅鲜汤。无奈之余,XOOPS的fans们也只能静待下一版本(也许是v2.3)的XOOPS尽快出台了。

暂别XOOPS。

[注1] 这个错误在低版本的PHP中也许能够通过。我用的是PHP5。

[注2] 这个错误在低版本的PHP中也许能够通过。我用的是PHP5。

[注3] 举两个例子。首先,在XOOPS 2中,若某一语言文件缺失,则马上报错,但语言文件缺失在这种系统中是非常常见的一个现象。其次,在设置为中文简体后,页面标题是非正常显示的编码。

[注4] XOOPS中文版开发者曾就此抱怨过

[补充说明5] 这里实际上不是为大温莎华人协会维护网站,而是要为温莎的中国艺术学院(义务)做一个新网站,特此澄清。2006-02-23 19:55:45

类别:

网志程序:WordPress还是Serendipity?

最近两年网志(Blog)在互联网上成为一种热潮,最耳熟能详的就是微软提供的MSN空间了。不过我等好事者则喜欢自己动手搭建网志平台。这时候面临一个问题:选择什么样的网志程序?

在“2005岁末BLOG程序大评点”这篇文章中,作者列出了几十种网志程序以供选择,光PHP的可能就近30种(包括商业软件)。但就像季洪亮所说的,“太多的选择机会等于没有机会”,一般来讲我们只需要从中挑选一个最好的程序或比较好的程序来用,但谁没事会把这近30种程序一一测试、比较然后再挑选呢?我相信上述文章的作者自己都没有具体测试过文中所列的大多数程序。因此,这样的文章看起来好像提供了很多咨讯,但对很多人而言,其实这样的文章就像鸡肋一样:食之无味,弃之可惜。

我泛泛地浏览了这30来个PHP程序,权衡比较后挑出2个网志程序供选择1WordPressSerendipity。这两个都是现在很有名的网志程序,功能强大。WordPress的用户群很多,Serendipity据称是由几个PHP高手联手开发的,那么,二者到底孰优孰劣呢?

我用Serendipity已经搭建了2到3个Blog网站了(包括这个),而WordPress只是曾经短暂地测试了一下,就我的使用感受和综合网上的观点而言,我(强烈)推荐Serendipity。理由如下:

  1. 首先看看功能。在这个网址提供了一份详细的不同Blog系统/程序的比较,从中可以看出,WordPress和Serendipity都包含了网志所需的各项基本功能,各有千秋,综合来讲,WordPress功能略强一点点。

  2. 其次看看代码质量。在“XPress (WordPress For XOOPS) 升级到 2.0”这篇文章中,XPress的技术人员提到“看得出wordpress的代码在优化,开始考虑规模化的问题。给我的初步感觉像是打补丁,基础结构设计不好,将来要改进,太难了点”,这是很不好的一种情况。而如果去看看Senrendipity的代码(尤其是插件开发部分,后面会提到),是一种很舒服的感觉。就这一点而言,两套系统的水平高下已经可以初步被判定了。

  3. 再来看看插件开发的难易程度。开发人员都知道开发插件的时候首先要阅读相关文档、浏览代码,这些都比较繁琐,因此我很懒得去考虑开发插件、改插件这类事情,但Serendipity的插件设计却非常灵巧、规范、易懂。我没有看过Serendipity的开发文档,只是根据需要下载了几个插件安装、使用,并在此过程中看了几个插件的源代码,就已经理解了它的插件设计方法。2不夸张地讲,我现在直接动手写Senrendipity的插件都没问题,我也看过好些别的系统的代码,却没见过能够把插件开发方式规范得如此简单、直白易懂的的。WordPress的插件开发方式我没有看过,但我想它达不到Serendipity的设计境界。

  4. 再来看看插件数量。这点我估计WordPress的插件可能比Serendipity的多,毕竟WordPress的名气太大,而Serendipity的认知度还有限。不过不管数量多少,Serendipity的插件也还算够用就是了。

  5. Serendipity在多语言支持方面非常出色,用户完全不用担心它是否能够很好地支持中文。3

  6. 来看看页面模版。Serendipity目前提供大概10多个页面模版,不算太丰富,比如我就不得不采用默认的模版,因为用其他模版显示中文的话看起来不是太爽。好在近期Serendipity开发组搞了个“页面模版创作大赛”,相信会有更多的模版奉献出来。

    Serendipity具有外嵌功能(嵌入到别的网页界面中),我没有详细地测试这个功能,只是泛泛地看了一下相关开发文档,觉得好像不是很简洁、易用,所以大家看到,现在我的blog就没有嵌入到我以前网站的黄颜色页面里。

  7. 二者都具有较强劲的文章内容导入、导出功能。

总而言之,虽然Serendipity有着各种各样的小瑕疵,但是在我看来,它依然是最出色的PHP写的Blog程序。

最后顺带一句,一个月前,WordPress推出了最新版WordPress 2;10天后,Serendipity预计也将推出Serendipity 1,有兴趣的可以下载后试试。

[注1] 此处挑选不考虑、不选择商业软件。

[注2] 这也需要经验积累。

[注3] 当然,话虽这么说,Senrenditipy v0.8.x到v1.0 beta的几个语言支持方面的小瑕疵(有的不一定是Senrendipity的原因)我还是要提一下的。首先是trackback(引用)的JavaScript弹出框编码转换有问题(这是一个很小的bug,也很容易解决,一般用户根本觉察不到);其次是文章搜索功能对中文关键字搜索的支持比较差(可以不算是Serendipity的问题);再次就是部分中文界面翻译文档欠缺,只有自己手动翻译翻译了(这也可以不算是Serendipity的问题);最后就是,如果你的服务器没有装iconv这样的函数库的话,自然在极个别的地方会出现语言转码方面的小瑕疵(这也可以不算是Serendipity的问题)。

[补充说明1] 关于Serendipity的缺点:我感觉目前Serendipity的缺点之一在于静态页面生成方面的功能不够强大、完善。当前访客从URL中看到的静态页面URL (类似于“x.html”)实际上是通过URL重写(url_rewrite)等技术实现的,并非真的静态URL。但网志就像日记一样,写完后再更新的概率很低,因此颇适合使用静态页面以提高系统性能。Serendipity虽然使用了Smarty等模版引擎,但似乎在静态页面生成方面没有做多少明显的努力。 2006-02-07 04:16:03

[补充说明2] 如欲浏览更多关于Serendipity的使用、维护信息,请参考《网志程序Serendipity中文维护个人文集》一文。2007-07-15 14:23:19

类别:

粗评PHP写的留言本系统

上个星期在sf.net点击了人气最好的十几个PHP留言本系统,大致看了一下后挑出2个比较好的系统以备进一步的评测。这两个留言本系统,一个是Gbook MX,另外一个是YaBook

晚上打算评测一下这两个系统,于是稍微详细地看了看它们的介绍。从功能上来讲,Gbook MX明显功能要强大得多,于是我就先评测它了。但是安装完毕后我发现,就这么一个列举了丰富功能的留言本系统,居然没有做客户端数据校验。也就是说,用户在提交留言的时候万一出现email写错了或者其他问题的情况下,他的留言就会丢失,他必须重写他的留言!这是不可容忍的一种现象。就这一点缺陷,就足够让我舍弃Gbook MX了。

YaBook目前是基于PHP5开发的,暂未评测。

随后我又找了一个叫做Advanced Guestbook的小有名气的留言本程序测试了一下。这个留言本同样缺乏客户端数据校验,并且在模版化、易用性方面有待提高,代码质量也有待增强,因此不值得采用。

总之,今天未发现令人满意的PHP留言本系统。难道因为留言本系统的结构简单,专业人士们懒得写这样的系统,于是反而就没有好的留言本系统?

[补充说明] 前一阵为了完成334课程的项目,曾在网上搜索了一通JSP/Servlet写的中文留言本系统,结果没有发现一个提得上台面的中文留言本系统,相反,垃圾类型的留言本系统倒是看到了一堆又一堆。吐血。

[补充说明2] 我最近几个月一直打算测试“Signkorn Guestbook”。遗憾的是无法找到这款商业版本的留言本最新版(v1.4)的完整演示版本,于是只好放弃。2006-11-02 21:31:01

类别:

页面