2010年7月 归档
xapian索引的term处理
7月31日
Xapian 是一个用C++编写的全文检索程序,License是GPL,它的作用类似于Java的lucene。Xapian 的 官方网站是http://xapian.org/,采用trac作为项目管理软件。如果想要了解更多则可以查看xapian的文档。Xapian的索引不支持中文切词,不管是单字切词还是多元切词,中文是同英文一样的处理方式。下面就来分析Xapian怎样索引英文文档。
nVidia 显卡在 Debian sarge 最新 linux 内核中的驱动
7月30日
我的笔记本安装的是 Debian sarge,上次升级内核到 linux 2.6.32-5, nVidia 的驱动就一直没有跑起来,今天下班后,仔细研究了一下。
先说一下 nouveau 和 nVidia 驱动的历史
Linux 和 Windows 相比,让用户觉得上手比较难,一个很重要的原因就是驱动不易安装。
- Windows 本身内置了大量的设备驱动
- 因为 Windows 的普及,硬件厂商首选是开发针对 Windows 的设备驱动
- 再有一个就是 Windows 升级比较缓慢,Windows XP 的历史都快10年了,硬件厂商的支持难度要小
就 nVidia 显卡来说,其实 Linux 的支持也是满不错的:
- Linux 内置了 nv 驱动:xserver-xorg-video-nv 。对 2D 支持尚可,3D 则是完全的不支持
- nVidia 官方曾经发布过开源的驱动 nvidia-glx 但不久就宣布不再支持。现在 nVidia 提供非开源的 Linux 驱动,在官网提供下载链接: http://www.nvidia.com/object/unix.html
- 因为 nVidia 官方的驱动和 Linux 操作系统的开放版权向背,各个 Linux 发行版都没有将 nVidia 官方的驱动集成到发行版中,造成用户安装 Linux 不能像 Windows 那样下载拆包即装的硬件驱动,只能使用功能较弱的内置驱动。
为了发挥显卡的最大功效,使用 3D 桌面或者运行 Google Earth 之类软件,我是这样安装 nVidia 驱动的:
- 首先在 Linux 中要安装 gcc,g++ 等软件开发环境,因为编译硬件驱动需要。
- 下载 nVidia 驱动。见官方驱动下载网页:http://www.nvidia.com/object/unix.html
- 启动 Linux 到文本控制台。如果进入了 X Window,需要杀掉 X,进入控制台界面。
- 运行从 nVidia 下载的软件包,按照界面一步一步操作,即可编译出内核模组和 Xorg 的设备驱动
- 编辑 /etc/X11/xorg.conf 设置: Driver “nvidia”
- 如果 Linux 升级?需要重新执行上面的步骤。
是不是太繁琐了?谁让你频繁升级呢? :-D
好消息是 Nouveau 来了,你看其中有字母 n 和 v,猜出来了么?这是 nVidia 在 Linux 下新的开源驱动名称。Nouveau 是通过针对 nVidia 显卡驱动反向工程,实现的 nVidia 开源显卡驱动,目标是提供完全的 3D 驱动支持。较 Linux 之前提供的 nv 驱动大大的前进了,甚至有一天会盖过官方的驱动。
阅读全部内容 »
Gistore(基于 git 的数据备份软件)升级至 0.2.x
7月29日
在 10年1月份的一篇 Gistore 发布声明的博客中 ,我介绍了我们自己开发的一个用户数据备份的小工具 Gistore。
是什么原因让我们开发备份工具呢?这是因为:
- 我们公司的数据备份的需要
- 客户数据备份需要更好用的软件
- rdiff-backup 和 flexbackup 的备份方案不够好
实际上 rdiff-backup 用做数据备份,已经足够好了,你可以从我们公司的维基中看到 rdiff-backup 的使用方法:
但是 rdiff-backup 的解决方案的问题是:
- 命令难记,包括我自己在数据恢复的时候还要一遍一遍的查阅文档
- 之所以命令难记,实际上是因为备份工具本身的使用率很低,只有在灾难恢复时候会用到,所以命令不熟悉是一定的。
- 数据的异地镜像比较复杂,需要引入其它工具
为什么不用 Git 开发一款工具呢?
- Git 的命令天天在用,实在是太熟悉了
- Git 的数据同步太方便了,在同步过程能够实时查看进度
此次 Gistore 升级,解决了半年多的使用过程中积累问题,并且增加了易用性。
阅读全部内容 »
reST 输出文档中页眉和页脚的定制
7月28日
群英汇采用 reStructuredText(简称 reST)文本标记语言进行文档维护。在 cuirui 解决了 rst2pdf 对 reST 转换 PDF 的图片缩放问题之后,如何让生成的 PDF 更有表现力,下了一番功夫去研究。
- 页眉和页脚根据转换的格式(HTML,PDF),自动进行选择
- PDF 的页眉显示章节标题以及页码,而页脚则显示文档标题和公司名称及相关链接
- HTML 的页眉显示文档标题以及到官方文档的链接(公司网站该文档的安装位置),页脚显示网址
- 文档版本号和文档编译时间由 Debian 软件包配置文件中的 changelog 动态替换
阅读全部内容 »
rst2pdf图片处理(续)
7月26日
继在上一篇博客 《rst2pdf中图片的处理》 中提出问题,本文通过一个简单的实现,解决 rst 转换为 HTML 和 PDF 时图片显示不一致(尤其是PDF中不同格式图片忽大忽小)的问题。
图像分辨率是用于度量位图图像内数据量多少的一个参数。通常表示成ppi(每英寸像素 pixel per inch)和dpi(每英寸点 dot pre inch)。包含的数据越多,图形文件的长度就越大,也能表现更丰富的细节。但更大的文件也需要耗用更多的计算机资源,更多的内存,更大的硬盘空间等等。在另一方面,假如图像包含的数据不够充分(图形分辨率较低),就会显得相当粗糙,特别是把图像放大为一个较大尺寸观看的时候。Ppi和dpi经常都会出现混用现象。从技术角度说,”像素”(p)只存在于计算机显示领域,而”点”(d)只出现于打印或印刷领域。
群英汇redmine增强版ossxp-3.0成功上线
7月20日
经过三个多月努力,群英汇Redmine 增强版ossxp-3.0终于成功上线。
下面介绍一下 ossxp-3.0 版本的新特征:
- 上游版本库升级到Redmine官方的1.0.0版本. Redmine 1.0.0 引入的新特征:
- 支持子任务(subtask)
当发现起初的任务划分过于粗粒度,可以将起初的任务再划分成若干个子任务,每个子任务指派给某个成员。这样从另一方面实现了一个父任务指派给多人。 - 支持通过邮件提交问题时设置指派者和问题(issue)的起始日期
- 支持从POP3服务器读取邮件
redmine-1.0.0之前仅支持从IMAP服务器读取邮件。
关于redmine通过邮件提交问题,具体可以参考 http://redmine.ossxp.com/redmine/documents/4 - 增强了wiki功能
wiki底层库升级,使redmine的wiki更加稳定、健壮
- 支持子任务(subtask)
Git 服务器软件 gitosis 的改进
7月20日
群英汇内部的 Git 服务器使用 gitosis 软件架设,能够实现针对版本库的授权,以及基于公钥的安全的无口令的版本库访问。
在 Gitosis 的使用过程中,我们根据需要对其进行了改进,以满足我们对授权和版本库管理上的需求:
- 增加了管理员角色,只有管理员才能够创建版本库
- 原来的实现只有 readonly 和 writable 两种权限,其中 writable 可以创建版本库。
- 我们权限分为三级:read/write/admin。拥有管理员(admin)权限,可以创建版本库,并自动具有读(read)写(write)权限
- 拥有写(write)权限也包含读(read)的权限
- 如果没有设置权限,禁止范围版本库
- 版本库匹配支持通配符,这样在授权的时候,可以用通配符为某个目录下的所有代码库授权
- 原有的实现,在配置文件中必须写入完整的版本库名称(路径)
- 当我们增加了管理员的概念后,增加通配符,就可以为特定的命名空间进行授权,而无须因为某个管理员要建库,还要修改授权文件
- 有了通配符后,读写权限的设置也更为简单。
- 通配符支持?,* 和 **。问号匹配一个字符,* 匹配任意字符(路径/字符除外),两个星号匹配包括路径分割符在内所有字符
- 增加了版本库路径映射的可用性。版本库路径映射在代码库重构中非常有用
- 增加了正则表达式匹配路径和替换映射
- 在权限检查的路径命中之后也检查路径映射,可以减轻错误配置的可能性
- 创建版本库只有写操作才进行,读操作不创建版本库
- 原来的实现支持即时创建版本库,在读取一个不存在的版本库时自动创建
- 读操作创建库,这会导致很多因为版本库克隆时路径输入错误导致错误建库
- 我们更改后,只允许在写版本库时并且具有 admin 权限才初始化新的代码库
- 版本库名称中允许出现中文(UTF-8)
- 基本上版本库命名都用英文字符,不过有个客户提出来支持中文版本库,我们就添加了这个支持
下面,拿一个配置文件来说明:
Redmine关于敏捷Scrum的插件
7月19日
这几年来,敏捷开发风靡全球,尤其是Scrum这股风。那么Redmine作为优秀的项目管理工具,是否支持Scrum流程呢?Redmine Sprints 正是在这种呼吁中应运而生。
借助于Redmine Sprints 插件,可以有效地将Scrum流程包含进Redmine的管理流程:
- 产品负责人(Product Owner)可以登录Redmine,在Backlog页面向产品Backlog中添加用户故事(User Story),并根据功能的重要程度,设置适当的优先级。
- 在Scrum计划会议上,登录Redmine,进入Backlog页面,根据User Story的优先级来确定即将开始的Sprint要完成哪些User Story,并将这些User Story挪到这个Sprint的Backlog中。
- Scrum团队成员可以登录Redmine,进入任务板页面,根据具体情况,将Sprint中的User Story划分成一个个小的功能模块(即任务),各个成员根据自己的能力来领取这些小任务。
- 接下来Scrum团队的成员就可以集中精力完成自己领取的任务了。并且应该每天都要在任务面板里更新自己的任务状态,同时燃烧曲线(BurnDown)会自动根据任务的完成情况发生变化,从而真实反映项目的进展情况。
具体细节请参考 http://www.ossxp.com/doc/redmine-plugins/redmine-sprints/

为 TestLink 增加从 LDAP 同步用户的功能
7月19日
管理员在配置 TestLink 时,经常会问我们一个问题:用户管理平台(使用LDAP)中创建的用户,并没有出现在 testlink 的用户数据库中,如何为用户指派权限?
之前我们的实现是这样的:
- 用户帐号已经在 LDAP 中存在了
- 用户访问 testlink,点击“登录”则跳转到“单点登录系统”
- 在“单点登录系统”认证成功后,浏览器重定向,跳转到 TestLink
- TestLink 发现用户已经登录,但是内置帐号不存在,会自动从 LDAP 中查询登录用户的信息,自动为该用户创建 TestLink 内置帐号,并设置缺省权限(缺省是游客,管理员可配置)。
所以,我们之前会告诉客户:“先让用户登录一次 TestLink,再为他分配权限。” 就是因为这个原因。 :-P
最近 TestLink 上游发布新版本,在迁移我们的特性分支之时,重新考虑了这个问题,决定动手实现“LDAP用户同步功能”。
增加这个功能后,管理员就可以更加方便的为 TestLink 用户授权,而不用再要求用户在授权前先前登录系统。
实际上这个功能在我们支持的其它系统中也有类似实现。例如 Redmine 我们也实现了类似功能。比较一下 Redmine 和 Testlink 中增加同样功能的代码行,是一个很有意思的事情。
- TestLink 实现 “LDAP用户同步” 功能: 增加了 365 行
$ tg patch t/ldap_account_sync | grep "^+" | wc -l 365
- Redmine 实现同样功能,只用了不到一半的代码量:141 行
$ tg patch t/synchronization_account_from_ldap | grep "^+" | wc -l 141
Redmine 是用 ROR 框架开发的,而 TestLink 使用的是 PHP。PHP 也许在学习曲线上看比较容易上手,但是长远来看,代码的维护量和开发难度还是要大很多。
rst2pdf中图片的处理
7月19日
一般情况下,使用reStructuredText(ReST) 生成PDF 格式的文件需要先转化成LaTeX 格式。而rst2pdf 通过调用reportlab 工具包直接生成PDF 文件。



最新评论