[Trac]8个企业应用必备的Trac插件

这些插件都可以在 Trac Hacks 上下载到。 直接在首页搜索名字即可,因此本文就不再给出下载链接。

AdvancedTicketWorkflowPlugin

添加几种常用的ticket工作流动作,如转给上一个人、转给模块负责人、转给报告者、执行外部程序等。 如果你想要自己打造一个适合项目的工作流,这个插件肯定会派上用场。

BatchModify

批量修改ticket属性。

TracAccountManager

可以从后台管理Trac帐号,但更重要的是,它可以提供一个基于Web的登录页面。

TracAuthRequired

要求使用者必须登录才能查看Trac内容。在企业应用中,项目的资料一般都需要保密, 这个插件跟TracAccountManager配合使用,正好能满足要求。

TracReportManager

Trac可以自定义报告,但报告管理功能很弱,一不小心就会把辛辛苦苦写成的SQL语句删掉。 TracReportManager可以给ticket报告做备份,在修改报告之前先备份一下,就不用担心误删的问题了。

TracSectionEditPlugin

可以按照章节编辑wiki内容(就像WikiPedia那样)。一些手册页可能会很长很长,一次性编辑很不方便, 而单独编辑某一章节就比较容易了。

TracTicketTemplate

ticket模板,可以给不同类型的ticket做不同的模板,能节约输入ticket的时间,规范ticket的格式。

TracWikiRename

给wiki页面改名,在整理wiki时很有用。

(Read More)

[CakePHP]如何关闭API页面的调试信息

注:本文使用的CakePHP版本为 1.2.3.8166。

使用CakePHP开发时,免不了要将调试级别设置为2, 这样页面上会显示出执行的SQL语句及结果,很方便。 但在做API页面时就比较麻烦。一般API页面的输出结果是XML或者JSON格式, 如果后面多了些调试信息,客户端就无法正确解析了。

解决方法很简单,只要在API的action函数中改写调试等级即可:

function api_index() {
    ...
    Configure::write('debug', 0);
}

不过,每个action都要写这么一行,太麻烦了。能不能想个办法,自动地关闭所有API页面的调试信息?

(Read More)

使用Apache做负载均衡

第一次看到这个标题时我也很惊讶,Apache居然还能做负载均衡?真是太强大了。 经过一番调查后发现的确可以,而且功能一点都不差。 这都归功于 mod_proxy 这个模块。 不愧是强大的Apache啊。

废话少说,下面就来解释一下负载均衡的设置方法。

(Read More)

利用gettext做软件翻译

很多软件都支持gettext,比如WordPress、ZenPhoto等。那么要想做个语言包,就得用到gettext这个工具。以ZenPhoto为例,使用方法如下:

首先要找出所有需要翻译的文件:

$ cd zenphoto
$ find . -name "*.php" > filelist.txt

然后从所有需要翻译的文件中提取出英文字符串。

$ xgettext --from-code utf-8 -f filelist.txt -d zenphoto

这样,xgettext命令就会分析所有文件,找出其中需要翻译的字符串(即php中调用gettext所用的字符串)并输出到zenphoto.po中。–from-code参数指定源代码的编码格式。ZenPhoto的源代码中,gettext函数参数中含有一些UTF-8的字符(实际上应该没有),如果不指定这个参数,xgettext就无法正确识别这些UTF-8字符。-f 指定要分析的文件列表。-d指明输出文件的名称,扩展名为.po。

然后创建语言文件夹,把.po文件放进去。ZenPhoto的话,操作方法如下(当前目录为zenphoto根目录):

$ mkdir -p locale/zh-CN/LC_MESSAGES
$ mv zenphoto.po locale/zh-CN/LC_MESSAGES
$ cd locale/zh-CN/LC_MESSAGES

接下来翻译zenphoto.po文件就行了。

翻译完成后,执行如下命令将.po文件编译成.mo文件:

$ msgfmt -o zenphoto.mo zenphoto.po

然后重启httpd就能看到翻译的效果。

忘了说了,如果系统上没有xgettext和msgfmt命令,只需安装gettext包即可。

(Read More)

用摄像头+VirtualDub录制视频

今天想用摄像头录一段视频,上网找视频录制的软件,发现好用的都是收费的。 没办法,想起VirtualDub也能录制视频,于是尝试了一下,发现它的效果还是很不错的。 而且是免费的哦!

以下演示的版本是Virtual 1.5.10,摄像头是罗技的QuickCam系列。

(Read More)

[Java]查看Tocmat的运行状态

熟悉J2EE开发的人应该对此不屑一顾吧,俺是Java新手,没办法……做个笔记先。 Tomcat 5.5下测试通过。

首先要添加管理员用户。打开 conf/tomcat-users.xml,在其中加入这样一行:

<user username="manager" password="password" roles="standard,manager"/>

然后重启Tomcat。

之后访问以下地址:

http://localhost:8080/manager/status

输入刚才设置好的管理员用户名和密码,就能看到服务器状态的页面。 其中几个比较重要的数值:

  • Max threads: 150 最大线程数
  • Min spare threads: 25 最小空闲线程数
  • Max spare threads: 75 最大空闲线程数
  • Current thread count: 25 当前线程数
  • Current thread busy: 2 当前繁忙线程数

(Read More)

《创建高可用性的Web内容》勘误表

谢谢fcicq指出书中的一些错误。也请其他读者在发现错误后告诉我,如果这本书有幸重印,我会在重印时改正这些错误的。给大家阅读带来不便,真是对不起。

P3,倒数第2段第3行: 用户想把音量调低,但我却没有把它设置到一个较高的音量,以便用户能通过软件来控制它。 修改为: 音箱的音量太小了,我根本没想到应该把音量调大些,这样用户才能通过软件来控制音量。

P5,最后两行: 以及如何进行高可用性的开发。 修改为: 以及如何开始符合高可用性的开发。

P37,“试一试”的第一行: 什么沟通障碍可能会阻碍项目创建高可用性? 修改为: 什么样的沟通障碍可能会阻碍项目创建高可用性?

P57,第2段第4行 请习惯这个思维。 修改为: 拥有这种想法很重要。

(Read More)

UML中的联系、聚合与组合的区别

UML中的联系(association)、聚合(aggregation)和组合(composition)三个概念很相似,也很难理解。 今天看到这篇文章解释得很清楚,所以在这里转一下, 希望能对需要的人有所帮助。

(Read More)

Dell 1200笔记本安装Windows XP时盘符错乱

今天拿到了一台Dell Vostro 1200,准备安装Windows XP。没想到第一次安装就出了问题,安装程序进行到分区这一步,报告找不到硬盘(下面的分区列表中显示没有硬盘)。用Linux急救盘进去之后用fdisk删除了所有分区,再次安装Windows XP,结果故障依旧。后来问了技术支持的人说,这台笔记本的硬盘是SATA接口,必须要用集成了SATA驱动的Windows XP安装盘才能正常安装。晕,原来Windows XP安装盘还有各种不同的版本哪。

拿到集成了SATA的Windows XP安装盘后继续安装,这次倒是一切顺利,但装完之后进入系统一看,咦?怎么两个硬盘分区变成了 E: 和 F:,系统装到了 E: 上?而C:呢,却被读卡器占了位置。后来试图通过修改注册表的方式把系统改到C:盘上,可是失败了。上网查了查发现Dell的本子这个问题居然是人所皆知的,解决方法也简单,就是进入BIOS把所有板载的USB设备都关掉,再安装就没有问题了。

于是进入BIOS关掉所有USB设备,安装,这次顺利完成,没出任何毛病。

(Read More)

安装Visual Studio 2003时反复重启的问题

今天在安装Visual Studio 2003时,安装程序要求先重启计算机,重启之后再启动安装程序,依然要求重启计算机,如此一直反复下去。无奈Google了一下,发现这居然是个常见问题,解决方法是删除 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager 下的 PendingFileRenameOperations 键就可以了。

看了看我机器上的这个键的内容,好像是安装McAfee时遗留下来的。

ps.原来常见的那个“必须重启后才能完成安装”是这么回事儿啊。

(Read More)