我们知道VMware的硬盘镜像会随着空间利用的增加而自动增长, 但使用的空间变少时,硬盘镜像文件却不会随之减小。 幸好VMware提供了shrinkg工具可以将镜像瘦身到最小。 这时需要注意的一些事项总结如下:
- 分区:不要使用RedHat Enterprise Linux的默认分区方式,默认的LVM分区无法瘦身。
- Snapshot:分发之前不要做snapshot,有snapshot的系统无法瘦身。
- 安装软件:如果你不用图形界面,就不要安装英文之外的语言包,它会给你安装许多输入法的东西,而这些东西都是要依赖于图形界面的。 不要安装开发包,那会一股脑地装进许多根本用不到的开发包。
基本的步骤如下:
- 建立虚拟机。
- 安装Linux,注意用手动分区,别选LVM,别装图形界面别装X,别装开发工具,别装英文之外的语言。
- 装好Linux之后用rpm手动安装需要的软件包。
- 配置你的开发环境。
- 用rpm删掉用不着的软件包,像蓝牙红外线glib图形库等。一般可将Linux瘦身到1G左右。
- 安装VMwareTools。这个工具需要 xorg-x11-libs 软件包,别忘了装。
- 在别的Linux机器上开个X-server,然后启动虚拟机上的VMwareTools,用shrink工具给镜像瘦身。
关于Trac的介绍请参见前一篇文章。
这里我们要构建一个基于Trac的项目管理系统。代码管理使用subversion,项目管理使用Trac。所需要的软件包如下:
- Trac 0.10,Trac程序
- Apache 2.0.59,Web服务器
- subversion 1.4.3,代码版本管理工具
- Python 2.4.4,Python解释器
- mod_python,Python的Apache模块
- ClearSilver 0.9.4,Python的模版工具
- mxDateTime 2.0.3,Python必须库文件
- PostgreSQL 8.2.3,数据库服务器
- pyPgSQL 2.5.1,Python访问PostgreSQL数据库的模块
很遗憾subversion现在仍然不支持最新的Apache 2.2系列,因此我们只能使用Apache 2.0系列。 而pyPgSQL 2.5.1版和ClearSilver 0.9.4不支持Python 2.5,因此只能用 Python 2.4。
另外,虽然Trac支持SQLite,但SQLite支持的SQL语法有限,实际应用中会有诸多不便, 因此我们选择了PostgreSQL作为后台数据库。
阅读全文 »今天介绍一下Trac,一个基于Web的bug管理系统。
Trac拥有强大的bug管理功能,并集成了Wiki用于 文档管理。它还支持代码管理工具Subversion,这样可以在 bug管理和Wiki中方便地参考程序源代码。
bug管理
在Trac中,项目中出现的问题称为ticket。像bug、功能改进、 TODO等都可以写成一个ticket。
- 可设置ticket的优先级别。
- 可以设置ticket的里程碑,表明这个ticket应在何时完成,并能够通过条形图方式显示里程碑的完成度。
- 可以自定义条件生成bug报告,并可以通过SQL语句自定义报告的格式。
Subversion集成
通过Subversion集成,开发者可在Trac中以Web方式浏览代码库中各个版本的代码 和代码的修改历史,并可方便地比较各个版本间的差别。
Wiki
支持常用的Wiki语法。同时增加了许多bug管理的专用标记, 可以方便地创建到ticket、代码行甚至修改历史的链接。
Trac使用Python写成,后台使用SQLite或PostgreSQL数据库, 因此构筑一个完整的Trac系统需要安装以下软件:
- Apache
- Python
- Subversion
- PostgreSQL(可选)
下回继续介绍Trac的安装方法。
如何统计代码的修改规模?如果肯花钱,则能买到统计代码修改规模的专业工具。这里介绍一种利用subversion和grep组合的方法简单统计代码修改规模。下面假设程序代码中的注释有两种格式,一种以 // 开头,另一种是Javadoc格式,即
/**
* This is a function.
* @param {String} v str
*/
为清晰起见,下面的统计命令分成了几行来写。
svn diff -r4:320 # 获取rev4和rev320之间的差异
| sed -e 's/\r//g' # 删除行尾的换行符^M。Windows下必须
| grep "^+[^+]" # 取得修改部分
| grep -Ev "^+[[:space:]]*(\/\*)|(\*)|(\/\/)" # 删除注释
| grep -v "^+[[:space:]]*$" # 删除空行
| wc -l # 统计行数
这篇文章的思想来自于Michael Feathers的Offensive Coding。标题直译过来是“攻击性编程”,但是为了避免与攻击性代码混淆。
这篇文章说,与其被动地做参数检查,不如一开始就避免传递错误参数。我们在书写一个函数时习惯于下意识地检查参数的合法性,不合法则返回null呀-1等表示错误的值。这种“防御”式的代码通常会导致不必要的代码复杂度。换个角度思考,如果能通过某种方法确保使用者不会使用错误的参数进行调用,就可以省却函数内部的参数检查。当然不是说参数检查有什么不对,而是要避免不必要的检查。
阅读全文 »前一讲中我们制作了一个能够随机更换背景的Flash。本章我们将制作一个稍有些用处的Flash - 时钟。 为了降低美工难度,我们仅做一个黑底白字的电子钟。
阅读全文 »适用于日本的手机。
现在绝大部分的手机都支持Flash功能,对于我们这些喜欢自定义手机的人自然会想到自制Flash做手机桌面和菜单等。那么我们就来研究一下Flash的制作方法。
阅读全文 »从C FAQ上看到的一个程序,可以将C语言源文件变成难以识别的代码。文件从http://www.faqs.org/ftp/usenet/comp.sources.misc/packages/opqcp/下载得到。
从水木精华区看到的,作用是求比 x 大的最小的 2的幂的整数倍,其中 n 必须为2的幂。简单地说,这个宏是用来对齐的。比如 _ROUND_UP(7,4)=8, _ROUND_UP(7,8)=8 等。
#define _ROUND_UP(x, n) (((x)+(n)-1u ) & ~((n)-1u))
MinGW: Minimalist GNU for Windows,是GNU开发环境在Windows下的一个移植。而MSYS则是与MinGW配套的一个shell环境以及相关的工具程序。
阅读全文 »