标签 Python 下的文章

发掘Trac

使用何种工具做Feature或Defect或Task的跟踪一直是挺让我闹心的一件事。用Excel记录,但却不便于共享、统计和直观展示;Jira算是做的好的工具之一了,但无奈它是商业软件,咱没付那份儿钱,所以也就"无福享用";Mingle是著名的Thoughtworks公司的产品,虽说不到5个license是可以免费使用的,但它却是出了名的"内存杀手",无奈我的机器配置太差,运行起来实在太慢,遂没有坚持下去(我"眼冒金星"的渴望着更换一台无所不能的超级计算机^_^);甚至我曾经用过ONENOTE来做跟踪,可是条目多了后,就基本不可用了。寻觅依旧进行中,这不Trac这款软件进入了我的视线中。

网络让我知道了"Trac"。"Trac"这个名字,估计与Track"异曲同工"。至于Trac具体能做什么,你可以到其Demo站点去体验一下。简单的说,Trac = wiki + 问题处理工作流;Wiki可以用来做知识积累和管理;问题处理工作流恰是我需要的功能。但到底Trac做到啥子程度,那还需要用起来后才能知道。还有一件让我觉得很"幸福"的事,那就是Trac自带一个独立的web server程序Tracd,并且Trac可使用Python 2.5.x自带的SQLite,这样我可以不用安装和配置庞大的Apache和MySQL了。让用户能快速上手应该是Trac值得其他开源软件学习和参考的一个亮点,要知道一些庞大的开源软件繁复的安装和配置过程让很多使用者产生了"挫败感"而"另辟蹊径"了。

Trac是用Python开发的,可以跨平台使用。这里我以Windows上的Trac为例。Trac官方站上有详尽的文档可以指导你的安装、配置和使用。这里用中文做简单介绍吧,留下一个记录,也便于自己以后参考。安装不是最重要的,但是没有了安装却是万万不能的。

1、安装Python, 设置环境变量
对于Trac而言,其解释执行环境Python是必不可少的,虽然Python发布了最新版是3.0.x,但是在已存的Python代码中,Python 2.x版本还是占据绝大多数,过渡到Python 3.0还需要时间。我这里用的是Python 2.5版本。安装完Python后,别忘了将{Python_INSTALL_DIR}和{Python_INSTALL_DIR}/Scripts加入到你系统的环境变量(path变量)中去(一般Python_INSTALL_DIR为"C:\Python25")。

2、使用Windows installers安装Trac
比起手动安装(Manual Install),在Windows上使用Installer安装Trac更为简便。依次下载和安装:SetupToolsGenshiTrac 0.11。注意要下载对应Python 2.5版本的安装文件。如果你要用Trac与Subversion接口的话,建议你下载一份svn-python程序,使用其他svn客户端程序似乎不好用。另外Trac只支持连接本地svn repository,不支持远程svn repository。以上安装程序会把相应可执行程序或脚本放到Python相关目录下,所以不需重新设置环境变量。

3、初始化一个工程
完成以上两步,你就可以使用Trac了。Trac运行和管理的基本环境单位是一个工程(Project)。首先你要确定你的工程所在的目录,这里以D:\TracProjects\Foo为例,我们建立一个名为"Foo"的Trac工程。打开一个命令行窗口,执行:
trac-admin.exe D:\TracProjects\Foo initenv
这是个交互执行的过程,你需要填写一些工程的基本信息,比如工程名字、数据库连接字符串等,你大可一路默认下来就可以得到一个默认的工程环境。

4、启动Trac
一切就绪。我们现在就可以启动Trac了。到目前为止,一切都是那么简单,这也充分证明Trac入门简单。在命令行下执行如下命令启动Trac Web server:
tracd.exe -p 8000 D:\TracProjects\Foo
现在你打开浏览器,访问Url: http://localhost:8000,Trac的界面就会展现在你面前。界面上你只能看到"Available Projects"的列表,由于我们只是建立了一个Project,所以你只能看到Foo这一个超链接。点击Foo,进入Foo的工程页面。

5、为Trac Project添加用户
Ticket是Trac Project管理和操作的基本元素,但是在通过上面方式以匿名登录方式打开的页面上你只能"View Tickets",而无法"New Ticket";要想拥有"New ticket"的权限,你需要以一个Trac用户的身份登录。初始情况下,Trac没有建立任何用户。Trac创建用户是通过建立"Password file"的方式来完成的。Trac默认的密码文件格式与Apache的相同,都是.htdigest格式的。如果你的系统内没有安装Apache,你可以用Trac wiki上提供的trac-digest.py脚本来生成密码文件。你可以将trac-digest.py文件放到{Python_INSTALL_DIR}/Scripts下面。

# trac-digest.py
from optparse import OptionParser
# The md5 module is deprecated in Python 2.5
try:
    from hashlib import md5
except ImportError:
    from md5 import md5
realm = 'trac'

# build the options
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage)
parser.add_option("-u", "–username",action="store", dest="username", type = "string",
                  help="the username for whom to generate a password")
parser.add_option("-p", "–password",action="store", dest="password", type = "string",
                  help="the password to use")
parser.add_option("-r", "–realm",action="store", dest="realm", type = "string",
                  help="the realm in which to create the digest")
(options, args) = parser.parse_args()

# check options
if (options.username is None) or (options.password is None):
   parser.error("You must supply both the username and password")
if (options.realm is not None):
   realm = options.realm
  
# Generate the string to enter into the htdigest file
kd = lambda x: md5(':'.join(x)).hexdigest()
print ':'.join((options.username, realm, kd([options.username, realm, options.password])))

我们使用如下命令生成密码文件:
python trac-digest.py -u "foo" -p "foo123" >> d:\tracprojects\foo\conf\users.htdigest,
这里我们建立一个用户:用户名为foo,密码为foo123。

我们再次来启动Trac,这次由于带有了用户鉴权,启动命令行与前面略有不同。
tracd –port 8000 –auth=Foo,d:\tracprojects\foo\conf\users.htdigest,trac d:\trarojects\foo
启动后,我们点击login,Trac会提示我们输入用户名和密码,输入foo/foo123后,你就可以看到界面显示:logged in as foo,并且"New Ticket"菜单出现在页面上方。

6、Trac.ini
conf目录下的Trac.ini是针对Foo这个Trac Project的主配置文件。里面各个字段的含义说明在Trac官网都有说明。通过修改Trac.ini你可以很简单的在页面上添加你喜欢的Project Logo。

7、Ticket
Ticket是Trac的核心,默认情况下,Trac为Ticket设定了诸多属性,并且设定了围绕Ticket的默认工作流。对于Ticket的每个属性字段,我们都可以通过trad-admin工具对字段取值进行增删改,以适合你的需要。诸如:trac-admin d:\TracProjects\foo  component add Webms foo,这句的含义就是添加一个属于foo工程的名为"Webms"的组件值。Ticket没有类似"Deadline"的时间属性,我们可以用milestone和priority来约束解决Ticket的时间范围。在"View tickets"页面中,Trac内置了多种"Report",你同样也可以自定义搜索,但是目前用户尚不能在"View Tickets"中保存自定义搜索为固定的"Report",但是你可以将自定义搜索语句放到一个WIKI页面的链接选项中,这样你就可以方便的直接得到搜索结果了,无需每次都配置搜索条件。

8、WIKI
Trac内置WIKI引擎,你可以通过trac-admin d:\TracProjects\foo wiki list来查看当前Project的所有WIKI page名称。你也可以通过trac-admin d:\TracProjects\foo wiki import WIKI_PAGE_NAME new_WIKI_page.txt为Foo Project导入一个名为"WIKI_PAGE_NAME"新WIKI页,该页内容来自文件new_WIKI_page.txt。和所有其他Wiki一样,你可以任意定制你的Project中的任意Wiki页面。

从上面的8个步骤来看,Trac简单而且实用,我已经根据我自己的需要对Trac Project进行了初步定制,并导入了我要追踪的需求、任务和问题,更多的高级功能还需要一段时间去发掘,今天的发掘到此为止了。

VIM“重装上阵”

国内很多学习Python的人都喜欢看"A Byte of Python",这是一本由印度小伙儿Swaroop C H写的书,之所以受到大家关注和欢迎,想必其简单而实用的写作风格是其中的重要原因吧,作为入门书很适合。我的Laptop中就有一本中文翻译版,不过书中用的还是Python 2.3.4版本。本月3日(2008-12-3)Python 3.0 Release版祭出,Swaroop C H也在其站点上增加了A Byte of Python for 3.0版。在下载新版"A Byte of Python"的同时,我又发现了Swaroop C H的另外一部作品"A Byte of VIM"。

刚工作的时候,一直用原始的VI(非VIM)在Unix上写代码,之所以选择原始的VI是因为部门里的老同事都使用它,VIM用的人不多,刚出校门的我还十分不适应VI的操作(在VIsual Studio上用IDE惯了),形成VI习惯还是很痛苦的,学习过程似乎没有什么成就感。看着其他一起入司的同事使用VIM的各种"奇技淫巧"分割窗口、折叠代码、自动补齐、通过快捷键在代码文件间跳来跳去,我却仍没有一些想深入学习的感觉(也许当时将精力都投到Java上了吧^_^)。

今年一直在努力通过各种方法(双显示器分布式编译等)提高自己的工作效率,提升工作效率是大势所趋,随着工作责任的增多,工作任务相应的也要多起来,时间还是那些,这就需要你在短时间内高效的完成工作。我们能做的除了做好时间管理、理顺工作流程外,对于个体来说采用更高效的工具以及熟练掌握这些工具就是高效工作的一个突破口了。眼下对于我来说重要的就是让VIM"重装上阵"(工作多年了,还是用使用VI的方法去使用VIM这个强大的工具,有些说不过去了^_^)。

与VI相比,VIM显然更强大,让人惊异于网上的各种VIM的插件和辅助软件,将这些结合在一起后,似乎一个无所不能的IDE就这样诞生了,也许这就是Unix文化的魅力所在吧。Swaroop C H的"A Byte of VIM",特别是其中的"VIM, Programmer's Editor"一节中将一个程序员应该常用到的插件和辅助软件都集中在了一起,从头到尾读一遍,你就会能体会到VIM的强大。关于如何使用VIM高效编辑的最好的Guide类文档当属Vim的Founder Bram Moolenaar所写的"Seven habits of effective text editing"了,目前该文档已经进化到2.0了。Bram在文中的一句话我觉得对学习Vim则是很有指导意义:"Learning every feature of Vim might make you the great award of Vim, but it will not be very effective. And it will be impossible to make everything a habit." 在VIM纷繁芜杂的功能中找到符合自己的实用功能并形成编辑习惯才是最高效的。

部门服务器上的VIM依旧停留在6.3版本,很多我需要的VIM新功能都不支持。为了不影响大家使用,我还是决定在自己的用户目录下重新编译一个VIM,最新版7.2,这样自己可以按照自己的需求定制。在SunFreeWare网站下载Vim7.2 For SPRAC Solaris 9的源码包,解压后发现VIM的目录组织很清晰整洁,Configure & Make,编译过程很顺利也,甚至连一个Warning都没有,10分钟编译完毕。Make install到自己指定的目录(需要在Configure的时候使用–prefix参数),修改path。再一执行Vim,版本已经变成了7.2了。

Ctags一直在使用,不过发现系统里的Ctags版本较低,为了能更好的配合Vim 7.2,我还是下载了一个Ctags 5.7版本源码,重新编译了一个自己用的CTags。在测试项目顶层Ctags -R生成tags文件,测试了一把,一切OK。

Taglist以前一直没有用过,下载其最新版taglist_45.zip,在本地$VIM_INSTALL_HOME/share/vim/vim72解压,
  inflating: plugin/taglist.vim      
  inflating: doc/taglist.txt
在测试项目里打开一个源文件,命令栏下输入: TlistToggle,Vim打开一个新的窗口,显示你当前Vim Buffer里的宏、Typedef、Functions、Variables等。你可以使用"Ctrl+w, Ctrl+w"在两个窗口间切换,对于函数较多较长、size较大的源文件的编辑有很大效率提升,list窗口中的内容也是普通文本,可以用各种搜索功能定位函数或变量,然后回车跳转到主窗口的相应源码。

Ctags和Taglist都功能有限,CScope才是集大成于一身,Vim内置了8种CScope的查询操作,比如你可以查询到当前光标下的函数被哪些方法调用,这个功能相当实用。由于我们服务器上没有CScope,我下载了源码编译,结果很不顺利,总是报错,无法解决,无奈只能让管理员在主机上用已经做好的安装包安装一个了。然后下载
cscope_maps.vim,将之放入.vim/plugin下面,cscope_maps.vim将冗长的cscope命令映射为热键了,便于使用。安装好后打开Vim,使用热键,vim在状态栏中居然提示不支持cs命令。Help了一下CScope,发现Vim默认编译时是不支持CScope的,需要重新Configure,重新Make,这次configure就要加上–enable-cscope选项了。另外CScope单独执行时会用你默认的编辑器打开相应文件,你可以通过在shell里设置‘EDITOR’环境变量来指定编辑器。

有了CTags、Taglist和CScope,你的Vim将呈现出丰富多彩的界面。窗口多了,别晕了。

Vim新版支持了内置的补全功能,通过Ctrl+N or Ctrl+P可在补全列表中前后选择;内置的补全功能会在当前缓冲区、其它缓冲区,以及当前文件所包含的头文件中查找以光标前关键字开始的单词,也是平时用的最多的补全功能。

Snippets,看到这个单词也许使用TextMate的人最为熟悉不过了,通过敲击几个关键字符+TAB间即可帮助你展开一些最常用的代码,减少输入的重复工作,比如for, while, if以及C++等面向对象语言中的class结构,你只需要输入内容即可。Snippets同样是通过插件snippetsEmu的形式提供到Vim中的。只需要Vim网站下载两个文:snippy_bundles.vba和snippy_plugin.vba,千万不要别扩展名给蒙住了,这两个文件不是Windows上的那个VBA脚本文件,而估计是vimball文件,下载后分别用vim打开,然后执行"source %"即可。VIM会在.vim/下的after和plugin下放入若干文件,用以支持Snippets功能。你可以打开~/.vim/after/ftplugin/c_snippets.vim,看看它对C语言都有哪些Snippets,如果觉得不符合你的习惯可以修改之。随意打开一个C源文件,输入do+TAB,可以看到:
do
{
       
} while ();
光标停留在中央,待你输入内容;输入后,点击Tab,光标会跳到下一个中,待输入完内容,再TAB,则最后一个消失,输入完毕。是不是也很强大:)

Vim的Quickfix模式是我以前没用到的,Quickfix这个就好比Visual Studio的“输出窗口”,build过程出现的错误都会在里面列表显示,你在这个窗口里将光标切换,主窗口就会显示对应的错误位置。前提你要在Vim内执行Make,一般我会使用:cw打开quickfix窗口,用cn和cp在quickfix中的错误行中切换。

其实以上每一个新功能都很复杂,形成习惯需要一个过程,但是一旦形成了习惯,你的效率将会有大幅提高。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats