安装Trac简单吗?看到Trac复杂的安装步骤,大多数人会感到迷失,不过当我这一次安装成功后发现,原来一切都那么自然,我甚至为没有看到那么多困难感到奇怪,好的不说废话了,看看我的安装步骤。
1,下载程序
经过这次安装,发现下载正确的程序就完成了工作的80%,因为很多安装都是完全自动的,而配置又非常的简单。本文的所有下载都是针对Subversion1.4.2,不要搞错阿,下面是要下载的程序:
Python: http://www.python.org/ftp/python/2.4.4/python-2.4.4.msiTrac: http://ftp.edgewall.com/pub/trac/trac-0.10.2.win32.exeClearsilver: http://www.clearsilver.net/downloads/win32/clearsilver-0.9.14.win32-py2.4.exePysqlite: http://initd.org/pub/software/pysqlite/releases/2.3/2.3.2/pysqlite-2.3.2.win32-py2.4.exesvn-python: http://subversion.tigris.org/downloads/svn-python-1.4.2.win32-py2.4.exe
Python是必须的运行环境,Trac自然要下载,Clearsilver是Trac需要的页面显示框架,Pysqlite是访问sqlite数据库的程序包,而svn-python是访问Subversion的程序包。
2, 安装程序
首先安装Python,然后其他几个安装程序能够自动识别Python的安装,从而只需要按照默认安装即可。
3,配置Trac
我的Python安装在“D:\Python24”,我们在D盘创建了一个目录trac,作为trac环境存放的目录,然后在“D:\Python24\Scripts”下运行(“>”后的为实际输入的内容,后面相同):
D:\Python24\Scripts>..\python.exe trac-admin d:\trac initenv
然后提示输入Project的名字,我们输入自己喜欢的名字,这里我输入tractest,回车;然后询问使用何种数据库,为了教程的简单,这里使用默认的sqlite数据库,直接回车即可,数据库会存放在环境存放的目录;然后会询问版本库的类型,默认即可;然后会询问版本库的路径,在这个例子里我输入的是“d:\svnroot\project2”,这个目录里就是我的一个版本库;然后提示使用何种模版,回车默认即可。最后回车,如果没有问题,trac配置环境就建立起来了,现在启动服务器即可,运行:
D:\Python24\Scripts>..\python.exe tracd --port 8000 d:\trac
然后在浏览器打开“http://localhost:8000/trac” ,如果看到有内容,应该就是安装成功了,恭喜!
提示:关于Trac中版本库中文显示的问题,我看了一下,Trac处理文件编码是通过D:\trac\conf(刚才设置trac环境目录的配置目录)中的trac.ini文件的default_charset实现的,例如下面的配置:
default_charset = UTF-8
则在版本库中的文本文件如果是UTF-8编码的,则其中的中文字显示非常正常,当然如果是GBK(其实就是ISO88591)的文件,显示的中文是乱码。要想完全解决这个问题,不是单纯Trac能解决的,需要考虑更全面的方式解决。
总结
大家如果还有什么其他需求,可以继续探索。其实Trac的安装过程并不复杂,只是因为同时要描述多种可能,所以让人摸不着头脑。在本文介绍的基础上,你还可以有很多选择,例如使用MySQL数据库(要安装MySQL和MySQL的Python库),或者使用Apache(需要安装Apache和对应的Python集成工具)。
本文转贴自:http://www.subversion.org.cn/index.php?option=com_content&task=view&id=99&Itemid=9
I'm a embedded software engineer! I'm now learning English. and i like photography. I also like Programming with Python, and learning the Turbo Gears! for Web Development!
Wednesday, May 16, 2007
想试用SVN,转帖一个帖子
SourceForge开始全面支持Subversion,这真是个好消息,这预示着CVS独霸天下的时代快要结束,SVN时代就要来临。
和CVS比起来,SVN的确很强大,这就像它的出现就是为了取代CVS一样,它的目标快要实现了。
具体的功能特性大家可以上Subversion官方网站查看,这里没必要给出那段生涩不好翻译的英语短句了。
官方中文网站在这儿,不过这个站的网络通讯太差劲了,一个礼拜5天都上不去:(
欣慰的是这里有个网站提供一本免费的、非常棒的SVN图书,可以选择在线查看或者下载PDF,有中文版哦,SVN使用者必读。
如果你对SVN还是表示怀疑可以在这里查看国外网友写的一篇各个版本控制系统功能比较的文章,相信看过后你不会再对SVN表示怀疑了。
英文看不懂?幸好,有网友将那篇生涩的英文SVN特性用生涩的中文表述出来了 ,中文英文对照着看,凑合着还行。
冲动的你这时已经手痒痒的想尝试下SVN的魅力,但苦于现在的项目已经建立在CVS上。别担心,这里正好有一篇文章介绍如何将CVS的Repository转换成SNV,转换方法来自这个程序http://cvs2svn.tigris.org/。
如何使用SVN我这里不再介绍,官方的那本书是最好的教程,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
1、SubVersion,从 http://subversion.tigris.org/ 下载,是实现服务系统的软件,必装的。
2、TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。
3、SVNService.exe,从 http://dark.clansoft.dk/~mbn/svnservice/ 下载,是专为 SubVersion 开发的一个用来作为 Win32 服务挂接的入口程序。
4、AnkhSVN,从http://ankhsvn.tigris.org/下载,这是一个专为Visual Studio提供SVN的插件。
5、Subversive,从http://www.polarion.org/p_subversive.php下载,这时一个为Eclipse提供SVN的插件,据说已经和Eclipse自带的CVS功能有一拼。
6、还有很多很多SVN相关的工具以及使用TIP介绍,大家可以上官方的相关链接页面中查看,地址:http://subversion.tigris.org/links.html
本文转贴自:http://www.duduwolf.com/post/subversion.asp
和CVS比起来,SVN的确很强大,这就像它的出现就是为了取代CVS一样,它的目标快要实现了。
具体的功能特性大家可以上Subversion官方网站查看,这里没必要给出那段生涩不好翻译的英语短句了。
官方中文网站在这儿,不过这个站的网络通讯太差劲了,一个礼拜5天都上不去:(
欣慰的是这里有个网站提供一本免费的、非常棒的SVN图书,可以选择在线查看或者下载PDF,有中文版哦,SVN使用者必读。
如果你对SVN还是表示怀疑可以在这里查看国外网友写的一篇各个版本控制系统功能比较的文章,相信看过后你不会再对SVN表示怀疑了。
英文看不懂?幸好,有网友将那篇生涩的英文SVN特性用生涩的中文表述出来了 ,中文英文对照着看,凑合着还行。
冲动的你这时已经手痒痒的想尝试下SVN的魅力,但苦于现在的项目已经建立在CVS上。别担心,这里正好有一篇文章介绍如何将CVS的Repository转换成SNV,转换方法来自这个程序http://cvs2svn.tigris.org/。
如何使用SVN我这里不再介绍,官方的那本书是最好的教程,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
1、SubVersion,从 http://subversion.tigris.org/ 下载,是实现服务系统的软件,必装的。
2、TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。
3、SVNService.exe,从 http://dark.clansoft.dk/~mbn/svnservice/ 下载,是专为 SubVersion 开发的一个用来作为 Win32 服务挂接的入口程序。
4、AnkhSVN,从http://ankhsvn.tigris.org/下载,这是一个专为Visual Studio提供SVN的插件。
5、Subversive,从http://www.polarion.org/p_subversive.php下载,这时一个为Eclipse提供SVN的插件,据说已经和Eclipse自带的CVS功能有一拼。
6、还有很多很多SVN相关的工具以及使用TIP介绍,大家可以上官方的相关链接页面中查看,地址:http://subversion.tigris.org/links.html
本文转贴自:http://www.duduwolf.com/post/subversion.asp
Tuesday, May 15, 2007
想买数码单反相机很久了
想买数码单反相机很久了,这两天有些时间,我便开始筹划新的购机行动。
我知道DSLR很烧米,所以我已经决定不去买新机。还是去物色二手的。
首先当然要上网看行情了。O记论坛肯定是要去看看的。因为一朋友推荐的E1很有诱惑力,现在在二手市场很是红火,因为Olympus已经停产E1很久了,而现在新的E3推出,很多大虾米都在出E1进E3。
可是看看O记上真正出E1的似乎也不多,其中一帖,一虾米想出E1,在问到底多少钱出合适,有虾米回复说花四五千元买一台500万像素的E1太不值得,另有虾米说可以E1和E3双修,“毕竟都是专业机”。想出E1的虾米最后决定还是留着自用了。
这一贴让我有同感,四五千元的机身,再加上镜头和配件,一万肯定要的。我现在可没有这么多闲米。我可是只想五六千元搞定一整套的,包括一机身、一基本镜头、一三脚架,再加一个包包。看看有没有其他的适合我的好东东呢?
闲逛,去蜂鸟看看有没有佳能的好二手东东。我对尼康没什么好感,首先不喜欢外形,然后听了各种传言,似乎尼康的入门级DSLR并不“物美”,“处境尴尬”。而索尼的东东我也不喜欢。所以除了Olympus,还可以看看的就只有Canon了。
可是蜂鸟上并不多见二手DSLR转让,反而是很多非数码的SLR相机。SLR显然太过时了。
此时另一贴让我有些恍然大悟之感。看到那么多虾米花了那么多钱,还在继续一直的折腾,我退缩了。弄个六七千元还只是“刚入门,拿不出手”,“烧钱”啊!而综合时间因素和工作学习因素,似乎我根本没有时间去折腾那些东西了。
所以看来我现在不是需要DSLR,而是需要机会。不放弃兴趣,但我也不强求。还是姐夫的那台富士S5000似乎更加简便有效。不过如果有机会,我还是希望踏入DSLR行列的。
我知道DSLR很烧米,所以我已经决定不去买新机。还是去物色二手的。
首先当然要上网看行情了。O记论坛肯定是要去看看的。因为一朋友推荐的E1很有诱惑力,现在在二手市场很是红火,因为Olympus已经停产E1很久了,而现在新的E3推出,很多大虾米都在出E1进E3。
可是看看O记上真正出E1的似乎也不多,其中一帖,一虾米想出E1,在问到底多少钱出合适,有虾米回复说花四五千元买一台500万像素的E1太不值得,另有虾米说可以E1和E3双修,“毕竟都是专业机”。想出E1的虾米最后决定还是留着自用了。
这一贴让我有同感,四五千元的机身,再加上镜头和配件,一万肯定要的。我现在可没有这么多闲米。我可是只想五六千元搞定一整套的,包括一机身、一基本镜头、一三脚架,再加一个包包。看看有没有其他的适合我的好东东呢?
闲逛,去蜂鸟看看有没有佳能的好二手东东。我对尼康没什么好感,首先不喜欢外形,然后听了各种传言,似乎尼康的入门级DSLR并不“物美”,“处境尴尬”。而索尼的东东我也不喜欢。所以除了Olympus,还可以看看的就只有Canon了。
可是蜂鸟上并不多见二手DSLR转让,反而是很多非数码的SLR相机。SLR显然太过时了。
此时另一贴让我有些恍然大悟之感。看到那么多虾米花了那么多钱,还在继续一直的折腾,我退缩了。弄个六七千元还只是“刚入门,拿不出手”,“烧钱”啊!而综合时间因素和工作学习因素,似乎我根本没有时间去折腾那些东西了。
所以看来我现在不是需要DSLR,而是需要机会。不放弃兴趣,但我也不强求。还是姐夫的那台富士S5000似乎更加简便有效。不过如果有机会,我还是希望踏入DSLR行列的。
Monday, May 07, 2007
技术的偏好
今天看到MVM的一篇文章(http://blog.joycode.com/mvm/archive/2006/09/09/82829.aspx),发现微软的MVM似乎对Google (作者指名Spreadsheet)有些不满,我感觉很奇怪。这两年来我对Google的好感确实与日俱增,它们的新软件一次次给我带来惊喜。现在,包括GMail,Google Calendar,Google Earth,还有Blogger,这其中大部分功能都可以通过同一个Google Account集成起来了,这让我感觉非常的舒服:我可以在Blogger中发布文章和照片,然后在Picasa Web中管理相册,同时我的GMail可以收到一份文章的备份。我相信不久之后所有的Google Service都可以在同一个帐号下统一管理了,或许往Google Earth上传照片也可以通过这个GMail来完成了。新推出不久的谷歌拼音也让我很喜欢,它比MSPY更易於同时输入中英文。而这两年,微软带给个人用户的东西似乎不多,就算现在Windows Vista推出来了,我仍然热衷于使用Windows 2000和Windows XP,虽然这也说明微软的东西做得不错,但是这都是以前。
而对於自己这个Programmer来说,回顾近三年的工作,因为现在做的是嵌入式开发,比起以前Windows上的开发工作来说,基本上是不和微软的开发方面的东西打交道了。但是平时的Programming方面的兴趣偏好一直有在,我经常会寻找新奇的开源软件去了解和使用,包括现在对Python的学习。以前在Windows上开发,我经常去找VC++、COM、ADO、MFC、.Net之类的技术资料,做了大概也有三年,到最后发现自己的思维被局限在狭小的空间之中,完全得不到发挥,自己犹如沉陷在狭隘的巷口,不敢转身后退,前行却让人失落。
三年前的跳槽改变了这个状况,现在回想起来,我并不是有意想要逃离Microsoft开发阵营,不过工作自然而然的改变了我。着三年我接触了嵌入式开发领域的许多东西,包括Embedded Linux、eCos、Rterms等等。我发现了Python,发现了SF(sourceforge.net)上许多的开源软件,就像夜空中的闪闪星光,它们就像一个个自由天使,让我体会到了Programming的快乐。我知道很多人都想"跟着微软混,十年不怕没饭碗",不过我庆幸自己逃离出来了。这或许是Microsoft Programmer"赎回自我"的一步?
不知道Google是不是很有心在开源方面努力,总之我感觉到了Google对于Python等新产品的好感,许多Google API也都通过Python发布。所以如果现在让我在这两家公司之间选择,我肯定选择Google。
不过我也在这里写出我找到的谷歌拼音的一个Bug:在打开谷歌拼音“中”输入的时候,在MSWord的Options-Security选项卡的"Password to open"和"Password to modify"输入框中无法进行输入,就连数字也不行。我上网找了谷歌拼音的Bug Report方式,却没有找到。我想这里的两个问题,Google今后应该会改进吧?
而对於自己这个Programmer来说,回顾近三年的工作,因为现在做的是嵌入式开发,比起以前Windows上的开发工作来说,基本上是不和微软的开发方面的东西打交道了。但是平时的Programming方面的兴趣偏好一直有在,我经常会寻找新奇的开源软件去了解和使用,包括现在对Python的学习。以前在Windows上开发,我经常去找VC++、COM、ADO、MFC、.Net之类的技术资料,做了大概也有三年,到最后发现自己的思维被局限在狭小的空间之中,完全得不到发挥,自己犹如沉陷在狭隘的巷口,不敢转身后退,前行却让人失落。
三年前的跳槽改变了这个状况,现在回想起来,我并不是有意想要逃离Microsoft开发阵营,不过工作自然而然的改变了我。着三年我接触了嵌入式开发领域的许多东西,包括Embedded Linux、eCos、Rterms等等。我发现了Python,发现了SF(sourceforge.net)上许多的开源软件,就像夜空中的闪闪星光,它们就像一个个自由天使,让我体会到了Programming的快乐。我知道很多人都想"跟着微软混,十年不怕没饭碗",不过我庆幸自己逃离出来了。这或许是Microsoft Programmer"赎回自我"的一步?
不知道Google是不是很有心在开源方面努力,总之我感觉到了Google对于Python等新产品的好感,许多Google API也都通过Python发布。所以如果现在让我在这两家公司之间选择,我肯定选择Google。
不过我也在这里写出我找到的谷歌拼音的一个Bug:在打开谷歌拼音“中”输入的时候,在MSWord的Options-Security选项卡的"Password to open"和"Password to modify"输入框中无法进行输入,就连数字也不行。我上网找了谷歌拼音的Bug Report方式,却没有找到。我想这里的两个问题,Google今后应该会改进吧?
Sunday, May 06, 2007
难忘的六和塔山水水墨画
因为要回复青翼的博客中的一篇文章,因为他的一幅美丽的照片!
那油菜花和青砖白墙,似乎是雪色中春天一般美丽!其中一个人评价说“远景少了层次感.天气不好呀.你应该等上1.2天的.”。我回想起那一天看见的六和塔的风景,深有同感,便写此回复!
“““
是啊,天气真的是摄影的大因素。记得五一前一个早上,七点多钟,骑行在滨江的六和路上,迎面看到江对面的六和塔和群山,竟是一幅完美的山水水墨画卷!山色苍茫,雾气缭绕,山体凹凸有致,气势磅礴,六和塔耸立其中,像是水墨画中活灵活现的浮雕一座!风景完美的让我震撼!我不禁舍不得这样的风景在车轮的滚动中失去,便骑行到江岸上,停下车,观望了许久——有了千米宽阔江水的衬托,又正好看到一艘沙船驶过,那风景更比在路上看的通彻完整!出现这样的风景,是由于前两天下了很大的雨,当天雨停了,空气十分的清爽,才会有这样的风景!这要归功于杭州这几年优秀的环境保护工作了!而我上班路过此处近有三年,其中不乏风景记忆,例如有一次的晚霞“落日长弓”,被我拍摄下来!但唯有这一次的风景,如此像画一般美丽!让我难以忘怀!而我那一天却没有带相机,便在记忆中深刻留影这一幕难忘的六和塔山水水墨画,却也不觉遗憾!正所谓“黄山归来不看岳”!看过这般水墨画,又何以复求方寸之间笔墨之下的画!
”””
那油菜花和青砖白墙,似乎是雪色中春天一般美丽!其中一个人评价说“远景少了层次感.天气不好呀.你应该等上1.2天的.”。我回想起那一天看见的六和塔的风景,深有同感,便写此回复!
“““
是啊,天气真的是摄影的大因素。记得五一前一个早上,七点多钟,骑行在滨江的六和路上,迎面看到江对面的六和塔和群山,竟是一幅完美的山水水墨画卷!山色苍茫,雾气缭绕,山体凹凸有致,气势磅礴,六和塔耸立其中,像是水墨画中活灵活现的浮雕一座!风景完美的让我震撼!我不禁舍不得这样的风景在车轮的滚动中失去,便骑行到江岸上,停下车,观望了许久——有了千米宽阔江水的衬托,又正好看到一艘沙船驶过,那风景更比在路上看的通彻完整!出现这样的风景,是由于前两天下了很大的雨,当天雨停了,空气十分的清爽,才会有这样的风景!这要归功于杭州这几年优秀的环境保护工作了!而我上班路过此处近有三年,其中不乏风景记忆,例如有一次的晚霞“落日长弓”,被我拍摄下来!但唯有这一次的风景,如此像画一般美丽!让我难以忘怀!而我那一天却没有带相机,便在记忆中深刻留影这一幕难忘的六和塔山水水墨画,却也不觉遗憾!正所谓“黄山归来不看岳”!看过这般水墨画,又何以复求方寸之间笔墨之下的画!
”””
附录:“落日长弓照片”
Friday, May 04, 2007
克隆惊情
谨以此文纪念刘翔在110米栏田径项目上的杰出成就!
以前没有时间完成这篇文章,现在,我要用我和妻子的爱情作为动力,继续这一篇章。
克隆惊情
第一篇 起跑线上的回忆
黄汉神色自然的走向起跑线,站定双脚,稍稍摆动一下臀部,弯下腰,做好了起跑的准备。
这是二零一三年,九月,美国拉斯维加斯著名的田径中心“拉斯全球竞技场”,第五十三届世界田径竞标赛赛场。
蓝色的河水静静的流过田径场的西边,西边的松树森林呈现出迷人的绿意。娇艳的阳光洒落大地,晒向田径场上,现场人心鼎沸,欢呼声此起彼伏。
赛场上运动员们的矫健身躯让观众们过足了眼瘾!那边撑杆跳高赛场上,一个帅的逼人的金发男运动员正在准备起跑。只见他迈出了修长的脚,
即将举行的就是最惊心动魄的男子100米短跑比赛的决赛。世界著名短跑名将都已经蹲在起跑线上,做好旗袍的姿势。第四道,是数届世锦赛冠军得主,美国选手约翰逊,第六道,是非洲锦标赛金牌获得者米拉。而第二、第五道,分别是奥运会冠军中国选手刘翔,和在今年中国全运会上战胜刘翔夺冠的中国选手黄汉。
在之前的预赛上,黄汉跑出了9.78秒的成绩名列第一,排在了最好的第五道上,而刘翔仅跑出了9.89秒名列第六,排在第二道。
黄汉是近两年中国体坛崭露头角的一颗新星,他在一百米短跑上并没有体现出惊人的天赋,但是近两年,他犹如猛虎下山一般,表现出惊人的速度,于是迅速的对刘翔形成冲击,而在三个月前参加的第十四届中国全运会上,更是以9.76秒夺得冠军,以0.01秒的优势战胜了他的好朋友,也是去年伦敦奥运会上以9.71秒刷新世界纪录的刘翔。
黄汉和刘翔,被称为中国田径的“双子星”,俨然成为最具商业价值的明星!风头之劲,连最著名的足球运动员布鲁斯南(前曼联著名球星贝克汉姆的儿子)也望尘莫及,两人合作拍摄的广告更是各大跨国公司最喜欢的广告方式。他们之间的友谊,也是近几年世人最津津乐道的事情。有的男同性恋者甚至把他们列为“二十一世纪一十年代最性感”的同性恋伴侣。
不过一年之前,刘翔却突然间改变了常规的训练日程,黄汉失去了与刘翔的联系,只是从教练的口中得知,刘翔希望能够封闭训练,为了次年的世锦赛上创造新的世界纪录。
三个月前黄汉终于在失去联系之后第一次见到了刘翔,而那一次,黄汉战胜了刘翔。当黄汉兴奋得跑向刘翔,像一个朋友一般用炮和表示友好时,却被刘翔冷漠的推开,而刘翔的脸上,更是透露出一种鄙夷的脸色,而最让黄汉吃惊的,是刘翔那陌生的眼神。那一天,夺冠后的黄汉受到了记者和观众的热烈追捧,在繁杂的麦克风和摄像头背后,黄汉看到刘翔迅速的被教练和保安护送着,走出了赛场。那天赛后,黄汉无法看到刘翔。刘翔就像一个影子一样,在他眼前叟然地显现,又叟然地消失了。
而今天,黄汉看到的,仍然是那个陌生的刘翔。隔着中间的三个运动员矫健的身躯,他看到了刘翔已经摆好了起跑的姿势,微微抬起头,冷漠的眼神默默地看着不远处的跑道。而矫健的身躯勾勒出的姿态,像一头将要爆发王者威严的雄狮一般!
黄汉转回头,摆好姿势,等待发令枪响起。现场突然间安静下来,现场观众都摒住气息,注视着跑道前的运动员。
现场气氛十分紧张,一触即发。
第二篇 八秒九二
“砰”一声,八个运动员箭一般冲出。现场观众欢呼声猛然炸响。
刘翔箭一般冲了出去!黄汉感觉到一股强大的气流向他卷来,心里顿时犹如被冷风刮过一般,冲出的脚步也有些踉跄。但是他很快调整过来,奋力向前冲刺!
而不仅是黄汉,所有的选手都感觉到了这一股排山倒海般的气流——除了刘翔!只见刘翔如一只猎豹一般向前跨越,一步又一步,夸张的步长,夸张的步频!——那股气流正是刘翔卷起来的!空气中仿佛被打上了一股股凝重的墨线——被刘翔拉在身后。
现场猛然又安静下来!观众们被惊呆了,发出阵阵的惊讶之声,有些人甚至长大了嘴巴,却发不出一点声音,只是瞪大了双眼,目光凝固在刘翔跑过的身后的虚影中,眼睛一刻也转动不得!记者们也都忘记了拍摄的任务,从摄像机后面伸出了脑袋,生怕错过这么刺激的几秒钟!
8秒92!这是一个新的世界纪录!这不仅仅是一个世界纪录,更是人类跨越极限的一次奇迹!科学家们研究得出的9秒57的人类短跑极限,就这样被生生证明为一个错误!
记者们已经忘了其他正在向终点冲刺的选手,一窝蜂一般涌向终点处的刘翔!看台上的观众们也都疯狂了,纷纷试图爬越障碍物和栏杆,冲进赛场!赛场内的大喇叭上,播音员一直在痴痴的说着“八秒九二,八秒九二,……”。
刘翔坐在跑道上,大口大口的喘着气,低着头,眼睛盯着双腿之间的地面,像一个哲学家一般静静的坐着,喘着气,丝毫不理会四周疯狂围拥的记者和无数个伸向他的麦克风。他的教练和保镖们试图拨开人群,挤到刘翔身边,可是一切的努力都是徒劳!
小敏正在人群中使劲地拥挤!她认识刘翔,她是黄汉和刘翔的好朋友了!可是在这样的人群中,小敏娇弱的身躯像一只羽毛一般,被疯狂的身躯肥大的其他记者们往外排挤着,始终无法挤到刘翔身边。终于,她放弃了。“这真是一群疯子!”,小敏懊恼得推开一个不小心冲到她身上的小孩,重新身上的照相机,娇美的脸庞上也滑落下一颗颗晶莹的汗珠,露出失望的神色。她抬起头朝外面看,看到了正在不远处看台下站着的黄汉——他的脸上充满了无数的无奈和疑惑。于是她正了正被挤得乱七八糟的衣服,快速的走向黄汉。
但是小敏并不甘心就此放弃那个创造纪录的刘翔。她回过头,看到了刘翔高大的身躯站了起来,试图推开前面的人群,向前走向休息区!
那是一张怎样的脸庞——充满愤怒,又充满了迷茫!那一刻,小敏看到了刘翔的侧面,刘翔像是一个雕塑一般,脸上的汗珠仿佛凝固了,在一个个闪光灯耀眼的照亮下,古铜色的皮肤透露出一股股摄人的杀气。小敏当然不会错过这一个难得的机会,迅速打开那台帮助她无数次拍摄到精彩新闻时刻瞬间的数码照相机——菜斯S20,连拍了十几张!她感觉到了刘翔脸上的杀气,心中陡然有了一种前所未有的恐惧。
刘翔用他的粗壮有力的双手,硬是把前面的人群生生推开,被推开的人似乎在那一刻体会到了一种压扁胸腔的窒息感!然后,在教练、保镖和十数个装甲护围的警察的组成的人墙之间,迅速的走进了看台下面的选手区。丝毫不理会旁边的人。
看着刘翔消失在看台下,小敏才缓过神来,仿佛从一个噩梦中醒来。她低头看了看那台相机,充满亲切的抚摸了一下,然后回过头,看到黄汉此时已经转过身,慢慢的走向赛道起点,身边没有记者,也没有任何观众。小敏拿起相机,拍下了这画面——和胜利者刘翔充满鲜明对比的一张照片。然后,小步向黄汉跑过去。
第三篇 落日余辉
“嗨,今天发挥得不错哦!”小敏走到黄汉身边,跟着黄汉走路的节奏,侧过脸,看着黄汉微笑。
“谢谢”,黄汉一改方才的疑惑神态,看了看跟在她身边的小敏,笑道“大记者,怎么到我这里来了?”黄汉的意思,是指刘翔,“今天可是他赢了!”。
“那边阿?!”,小敏回过头,望向刘翔走进看台的地方,有些气恼的说:“人都不见了”。停顿了一会儿,又说到,“我连刘翔的脸都没有看清楚!那些人都疯了!”,突然一脚踢开眼前的一个矿泉水瓶,“刘翔也疯了,跑得那么快,跑完了,这么快就又不知所踪”。
“你说呢?”,小敏看着黄汉问道。她感觉到身边的黄汉又沉静了下来,看了看,果然,黄汉正闷着头,默默地加快脚步往前走了。
黄汉显然又陷入刚才的巨大的疑惑中了。小敏赶紧也加快脚步,她试图跟上黄汉,希望能够从黄汉那里得到一些刘翔的信息,否则今天的新闻就无法交差了。想起那个光头老板肥肥的脑袋,对她说话时唾沫横飞的样子,小敏心中就一阵紧张。
小敏似乎也感觉到了黄汉心中重重的疑惑,她试图去明白黄汉正在想些什么,这样她才能够从黄汉那里得到她所需要的东西。便赶到黄汉面前,停下来问道:
“你不觉得这一场比赛很让人吃惊么?”
黄汉停顿一下,摇了摇头,继续快步向前走。
小敏急忙跟上去,继续说道“那可是八秒九二!”,“你跑了九秒七一,拿了银牌,可是又能怎样?没有人来注意这些,他们都被八秒九二勾去了魂魄!”
黄汉没有理会这句话,还是一直往前走着。显然这并不足以让他从沉沉的疑惑中解脱出来。
“刘翔这一年都在做什么?他受过了什么样的训练?”,小敏仍然紧紧跟着黄汉,在他身后说道,“难道你都不知道么?”
“他好像一直都没有露过面,好几次我想联系他,找到了张教练,可是他却一直说刘翔很忙,或者说刘翔很累需要休息”,看看黄汉没有说话,小敏继续紧追着说道。
黄汉已经走到了起点处放衣物的地方。几个同场比赛的运动员友好的走向黄汉表示祝贺,看到紧紧跟在黄汉身后的年轻漂亮的小敏,忙不停的打起招呼,“嘿,美女,什么时候给我做个采访?随时欢迎啊!”,一边瞅着黄汉看了看。
小敏此时便跳出来,装作吃奶的样子做起动作,握紧拳头,朝着那些运动员,哈哈大笑,大声说起“加油”。那个样子把大家都逗乐了,黄汉也不禁揭开眉头,咧开嘴笑了起来。
看到黄汉终于笑出来,小敏又有了主意。她想让黄汉能够带他去找到刘翔。
可是黄汉此时突然加快了速度,收拾完衣物,加快脚步往走进看台。小敏本来想拉黄汉去找刘翔的,可是猝不及防地,黄汉已经走了很远。
小敏赶紧追上去,终于赶上,已经气喘吁吁,她于是又气又恼得对着黄汉的背影大声叫道,“黄汉,你去哪里?”
“去找刘翔”,黄汉抛下一句话,更三步并作两步地往前冲去。
透过休息室内一层又一层的玻璃门,小敏看到刘翔正在教练保安等人的护送下,走出休息室,走上赛场建筑顶端,向一架停在上面的运动员专用停机场的直升机走去。此时,黄汉已经追到了那一行人的队伍五六米处,小敏分明地听到黄汉朝着刘翔用力的叫着“刘翔”。
叫了四五声,刘翔似乎才听到后面有人在不停地叫他,他想转过头朝后看,却被紧随其后的教练和保安的密实的脚步促拥着继续往前走,很快就走到了直升机下。直升机的螺旋桨早已经开动,发出巨大的轰鸣声。直到他和教练一起爬上直升机,转身坐下来,他才看到已经跑到直升机附近的黄汉。
他的目光和黄汉的目光飕然碰到了一起,黄汉的目光像两簇闪光一般射入他的眼睛,顿时,他感觉到黄汉的目光中的那股迫切和激动。他无法抵制这种刺眼的目光,赶紧眨了眨眼睛,把头转向另一边。
黄汉仍然继续叫着刘翔的名字。他努力走上前去,试图走到直升机门前,却被周围众多的保安牢牢拦住。他也看到了刘翔的目光,他想紧紧地盯住刘翔,他想让刘翔从目光中透露一些讯息给他。可是,刘翔迅速的避开了他的目光,他并没有从刘翔的目光中得到任何启示。然而,他感觉到了刘翔的冷漠和沧桑,他注意的看了看刘翔的侧影——似乎刘翔一年之间苍老了许多!他更似乎看到了一张极度夸张苍老的脸庞,和一双沧桑而又幽深神秘的眼睛——那真的是刘翔吗?
小敏此时才气喘吁吁的赶到黄汉身边,她也呼喊刘翔的名字,朝刘翔望去。可是她的目光却和刘翔的教练的目光碰到了一块,她似乎看到教练眼中一股重重的严峻而又冰冷的杀气,于是猛地打了一个冷颤,停了下来。
黄汉被小敏碰了一下,才从刚才的想象中清醒过来。
直升机很快便起飞,越来越高,越来越快,一转身,向西飞去了,越过深蓝宽阔的河面,飞过碧绿幽静、连绵不绝的森林上空,越来越远,慢慢的不见了。
赛场内观众的声音又传上来,赛场顶上,只剩下小敏和黄汉两个人的身影,朝着直升机远去的方向眺望。
西边的太阳已经快要下山了,远处的天空呈现出华丽的深紫色,连绵纤长的云彩周围呈现出一长条耀眼的金光,一丝一丝挂在太阳的左右。阳光照出两个人细长的影子,一直拉到很远很长的地方。小敏试图拍下这一幕魅力的景色,微微举起相机,可是却已经看不到任何直升机的影子,于是又放下相机,转过身,看到赛场内已经打开了耀眼的照明灯。
她看了看旁边的黄汉。
黄汉仍然面对西方,默默地看着静谧的流水。前几天的比赛他一直没有能够找到刘翔,这也算了,他想,只要等到比赛结束的时候能够和刘翔好好的见上一面。可是没有想到,今天,就这样近在咫尺,却远若天涯。
想到这里,黄汉一声不吭,突然起步走了。走过小敏眼前的时候,他用今天唯一的冷漠疑惑的眼神看了看小敏,欲言又止,快速的走下天台,走进了休息室。
“阿”,小敏根本不明白黄汉的行为,看到黄汉走进休息室,转眼就不见了。她气恼的跺了跺脚,使劲地“嗯”了一声。轮到她呆呆地站在那里,看着赛场内绿绿的草坪和惨白的灯光了……良久……2006-1-17 0:15/0:46
以前没有时间完成这篇文章,现在,我要用我和妻子的爱情作为动力,继续这一篇章。
克隆惊情
第一篇 起跑线上的回忆
黄汉神色自然的走向起跑线,站定双脚,稍稍摆动一下臀部,弯下腰,做好了起跑的准备。
这是二零一三年,九月,美国拉斯维加斯著名的田径中心“拉斯全球竞技场”,第五十三届世界田径竞标赛赛场。
蓝色的河水静静的流过田径场的西边,西边的松树森林呈现出迷人的绿意。娇艳的阳光洒落大地,晒向田径场上,现场人心鼎沸,欢呼声此起彼伏。
赛场上运动员们的矫健身躯让观众们过足了眼瘾!那边撑杆跳高赛场上,一个帅的逼人的金发男运动员正在准备起跑。只见他迈出了修长的脚,
即将举行的就是最惊心动魄的男子100米短跑比赛的决赛。世界著名短跑名将都已经蹲在起跑线上,做好旗袍的姿势。第四道,是数届世锦赛冠军得主,美国选手约翰逊,第六道,是非洲锦标赛金牌获得者米拉。而第二、第五道,分别是奥运会冠军中国选手刘翔,和在今年中国全运会上战胜刘翔夺冠的中国选手黄汉。
在之前的预赛上,黄汉跑出了9.78秒的成绩名列第一,排在了最好的第五道上,而刘翔仅跑出了9.89秒名列第六,排在第二道。
黄汉是近两年中国体坛崭露头角的一颗新星,他在一百米短跑上并没有体现出惊人的天赋,但是近两年,他犹如猛虎下山一般,表现出惊人的速度,于是迅速的对刘翔形成冲击,而在三个月前参加的第十四届中国全运会上,更是以9.76秒夺得冠军,以0.01秒的优势战胜了他的好朋友,也是去年伦敦奥运会上以9.71秒刷新世界纪录的刘翔。
黄汉和刘翔,被称为中国田径的“双子星”,俨然成为最具商业价值的明星!风头之劲,连最著名的足球运动员布鲁斯南(前曼联著名球星贝克汉姆的儿子)也望尘莫及,两人合作拍摄的广告更是各大跨国公司最喜欢的广告方式。他们之间的友谊,也是近几年世人最津津乐道的事情。有的男同性恋者甚至把他们列为“二十一世纪一十年代最性感”的同性恋伴侣。
不过一年之前,刘翔却突然间改变了常规的训练日程,黄汉失去了与刘翔的联系,只是从教练的口中得知,刘翔希望能够封闭训练,为了次年的世锦赛上创造新的世界纪录。
三个月前黄汉终于在失去联系之后第一次见到了刘翔,而那一次,黄汉战胜了刘翔。当黄汉兴奋得跑向刘翔,像一个朋友一般用炮和表示友好时,却被刘翔冷漠的推开,而刘翔的脸上,更是透露出一种鄙夷的脸色,而最让黄汉吃惊的,是刘翔那陌生的眼神。那一天,夺冠后的黄汉受到了记者和观众的热烈追捧,在繁杂的麦克风和摄像头背后,黄汉看到刘翔迅速的被教练和保安护送着,走出了赛场。那天赛后,黄汉无法看到刘翔。刘翔就像一个影子一样,在他眼前叟然地显现,又叟然地消失了。
而今天,黄汉看到的,仍然是那个陌生的刘翔。隔着中间的三个运动员矫健的身躯,他看到了刘翔已经摆好了起跑的姿势,微微抬起头,冷漠的眼神默默地看着不远处的跑道。而矫健的身躯勾勒出的姿态,像一头将要爆发王者威严的雄狮一般!
黄汉转回头,摆好姿势,等待发令枪响起。现场突然间安静下来,现场观众都摒住气息,注视着跑道前的运动员。
现场气氛十分紧张,一触即发。
第二篇 八秒九二
“砰”一声,八个运动员箭一般冲出。现场观众欢呼声猛然炸响。
刘翔箭一般冲了出去!黄汉感觉到一股强大的气流向他卷来,心里顿时犹如被冷风刮过一般,冲出的脚步也有些踉跄。但是他很快调整过来,奋力向前冲刺!
而不仅是黄汉,所有的选手都感觉到了这一股排山倒海般的气流——除了刘翔!只见刘翔如一只猎豹一般向前跨越,一步又一步,夸张的步长,夸张的步频!——那股气流正是刘翔卷起来的!空气中仿佛被打上了一股股凝重的墨线——被刘翔拉在身后。
现场猛然又安静下来!观众们被惊呆了,发出阵阵的惊讶之声,有些人甚至长大了嘴巴,却发不出一点声音,只是瞪大了双眼,目光凝固在刘翔跑过的身后的虚影中,眼睛一刻也转动不得!记者们也都忘记了拍摄的任务,从摄像机后面伸出了脑袋,生怕错过这么刺激的几秒钟!
8秒92!这是一个新的世界纪录!这不仅仅是一个世界纪录,更是人类跨越极限的一次奇迹!科学家们研究得出的9秒57的人类短跑极限,就这样被生生证明为一个错误!
记者们已经忘了其他正在向终点冲刺的选手,一窝蜂一般涌向终点处的刘翔!看台上的观众们也都疯狂了,纷纷试图爬越障碍物和栏杆,冲进赛场!赛场内的大喇叭上,播音员一直在痴痴的说着“八秒九二,八秒九二,……”。
刘翔坐在跑道上,大口大口的喘着气,低着头,眼睛盯着双腿之间的地面,像一个哲学家一般静静的坐着,喘着气,丝毫不理会四周疯狂围拥的记者和无数个伸向他的麦克风。他的教练和保镖们试图拨开人群,挤到刘翔身边,可是一切的努力都是徒劳!
小敏正在人群中使劲地拥挤!她认识刘翔,她是黄汉和刘翔的好朋友了!可是在这样的人群中,小敏娇弱的身躯像一只羽毛一般,被疯狂的身躯肥大的其他记者们往外排挤着,始终无法挤到刘翔身边。终于,她放弃了。“这真是一群疯子!”,小敏懊恼得推开一个不小心冲到她身上的小孩,重新身上的照相机,娇美的脸庞上也滑落下一颗颗晶莹的汗珠,露出失望的神色。她抬起头朝外面看,看到了正在不远处看台下站着的黄汉——他的脸上充满了无数的无奈和疑惑。于是她正了正被挤得乱七八糟的衣服,快速的走向黄汉。
但是小敏并不甘心就此放弃那个创造纪录的刘翔。她回过头,看到了刘翔高大的身躯站了起来,试图推开前面的人群,向前走向休息区!
那是一张怎样的脸庞——充满愤怒,又充满了迷茫!那一刻,小敏看到了刘翔的侧面,刘翔像是一个雕塑一般,脸上的汗珠仿佛凝固了,在一个个闪光灯耀眼的照亮下,古铜色的皮肤透露出一股股摄人的杀气。小敏当然不会错过这一个难得的机会,迅速打开那台帮助她无数次拍摄到精彩新闻时刻瞬间的数码照相机——菜斯S20,连拍了十几张!她感觉到了刘翔脸上的杀气,心中陡然有了一种前所未有的恐惧。
刘翔用他的粗壮有力的双手,硬是把前面的人群生生推开,被推开的人似乎在那一刻体会到了一种压扁胸腔的窒息感!然后,在教练、保镖和十数个装甲护围的警察的组成的人墙之间,迅速的走进了看台下面的选手区。丝毫不理会旁边的人。
看着刘翔消失在看台下,小敏才缓过神来,仿佛从一个噩梦中醒来。她低头看了看那台相机,充满亲切的抚摸了一下,然后回过头,看到黄汉此时已经转过身,慢慢的走向赛道起点,身边没有记者,也没有任何观众。小敏拿起相机,拍下了这画面——和胜利者刘翔充满鲜明对比的一张照片。然后,小步向黄汉跑过去。
第三篇 落日余辉
“嗨,今天发挥得不错哦!”小敏走到黄汉身边,跟着黄汉走路的节奏,侧过脸,看着黄汉微笑。
“谢谢”,黄汉一改方才的疑惑神态,看了看跟在她身边的小敏,笑道“大记者,怎么到我这里来了?”黄汉的意思,是指刘翔,“今天可是他赢了!”。
“那边阿?!”,小敏回过头,望向刘翔走进看台的地方,有些气恼的说:“人都不见了”。停顿了一会儿,又说到,“我连刘翔的脸都没有看清楚!那些人都疯了!”,突然一脚踢开眼前的一个矿泉水瓶,“刘翔也疯了,跑得那么快,跑完了,这么快就又不知所踪”。
“你说呢?”,小敏看着黄汉问道。她感觉到身边的黄汉又沉静了下来,看了看,果然,黄汉正闷着头,默默地加快脚步往前走了。
黄汉显然又陷入刚才的巨大的疑惑中了。小敏赶紧也加快脚步,她试图跟上黄汉,希望能够从黄汉那里得到一些刘翔的信息,否则今天的新闻就无法交差了。想起那个光头老板肥肥的脑袋,对她说话时唾沫横飞的样子,小敏心中就一阵紧张。
小敏似乎也感觉到了黄汉心中重重的疑惑,她试图去明白黄汉正在想些什么,这样她才能够从黄汉那里得到她所需要的东西。便赶到黄汉面前,停下来问道:
“你不觉得这一场比赛很让人吃惊么?”
黄汉停顿一下,摇了摇头,继续快步向前走。
小敏急忙跟上去,继续说道“那可是八秒九二!”,“你跑了九秒七一,拿了银牌,可是又能怎样?没有人来注意这些,他们都被八秒九二勾去了魂魄!”
黄汉没有理会这句话,还是一直往前走着。显然这并不足以让他从沉沉的疑惑中解脱出来。
“刘翔这一年都在做什么?他受过了什么样的训练?”,小敏仍然紧紧跟着黄汉,在他身后说道,“难道你都不知道么?”
“他好像一直都没有露过面,好几次我想联系他,找到了张教练,可是他却一直说刘翔很忙,或者说刘翔很累需要休息”,看看黄汉没有说话,小敏继续紧追着说道。
黄汉已经走到了起点处放衣物的地方。几个同场比赛的运动员友好的走向黄汉表示祝贺,看到紧紧跟在黄汉身后的年轻漂亮的小敏,忙不停的打起招呼,“嘿,美女,什么时候给我做个采访?随时欢迎啊!”,一边瞅着黄汉看了看。
小敏此时便跳出来,装作吃奶的样子做起动作,握紧拳头,朝着那些运动员,哈哈大笑,大声说起“加油”。那个样子把大家都逗乐了,黄汉也不禁揭开眉头,咧开嘴笑了起来。
看到黄汉终于笑出来,小敏又有了主意。她想让黄汉能够带他去找到刘翔。
可是黄汉此时突然加快了速度,收拾完衣物,加快脚步往走进看台。小敏本来想拉黄汉去找刘翔的,可是猝不及防地,黄汉已经走了很远。
小敏赶紧追上去,终于赶上,已经气喘吁吁,她于是又气又恼得对着黄汉的背影大声叫道,“黄汉,你去哪里?”
“去找刘翔”,黄汉抛下一句话,更三步并作两步地往前冲去。
透过休息室内一层又一层的玻璃门,小敏看到刘翔正在教练保安等人的护送下,走出休息室,走上赛场建筑顶端,向一架停在上面的运动员专用停机场的直升机走去。此时,黄汉已经追到了那一行人的队伍五六米处,小敏分明地听到黄汉朝着刘翔用力的叫着“刘翔”。
叫了四五声,刘翔似乎才听到后面有人在不停地叫他,他想转过头朝后看,却被紧随其后的教练和保安的密实的脚步促拥着继续往前走,很快就走到了直升机下。直升机的螺旋桨早已经开动,发出巨大的轰鸣声。直到他和教练一起爬上直升机,转身坐下来,他才看到已经跑到直升机附近的黄汉。
他的目光和黄汉的目光飕然碰到了一起,黄汉的目光像两簇闪光一般射入他的眼睛,顿时,他感觉到黄汉的目光中的那股迫切和激动。他无法抵制这种刺眼的目光,赶紧眨了眨眼睛,把头转向另一边。
黄汉仍然继续叫着刘翔的名字。他努力走上前去,试图走到直升机门前,却被周围众多的保安牢牢拦住。他也看到了刘翔的目光,他想紧紧地盯住刘翔,他想让刘翔从目光中透露一些讯息给他。可是,刘翔迅速的避开了他的目光,他并没有从刘翔的目光中得到任何启示。然而,他感觉到了刘翔的冷漠和沧桑,他注意的看了看刘翔的侧影——似乎刘翔一年之间苍老了许多!他更似乎看到了一张极度夸张苍老的脸庞,和一双沧桑而又幽深神秘的眼睛——那真的是刘翔吗?
小敏此时才气喘吁吁的赶到黄汉身边,她也呼喊刘翔的名字,朝刘翔望去。可是她的目光却和刘翔的教练的目光碰到了一块,她似乎看到教练眼中一股重重的严峻而又冰冷的杀气,于是猛地打了一个冷颤,停了下来。
黄汉被小敏碰了一下,才从刚才的想象中清醒过来。
直升机很快便起飞,越来越高,越来越快,一转身,向西飞去了,越过深蓝宽阔的河面,飞过碧绿幽静、连绵不绝的森林上空,越来越远,慢慢的不见了。
赛场内观众的声音又传上来,赛场顶上,只剩下小敏和黄汉两个人的身影,朝着直升机远去的方向眺望。
西边的太阳已经快要下山了,远处的天空呈现出华丽的深紫色,连绵纤长的云彩周围呈现出一长条耀眼的金光,一丝一丝挂在太阳的左右。阳光照出两个人细长的影子,一直拉到很远很长的地方。小敏试图拍下这一幕魅力的景色,微微举起相机,可是却已经看不到任何直升机的影子,于是又放下相机,转过身,看到赛场内已经打开了耀眼的照明灯。
她看了看旁边的黄汉。
黄汉仍然面对西方,默默地看着静谧的流水。前几天的比赛他一直没有能够找到刘翔,这也算了,他想,只要等到比赛结束的时候能够和刘翔好好的见上一面。可是没有想到,今天,就这样近在咫尺,却远若天涯。
想到这里,黄汉一声不吭,突然起步走了。走过小敏眼前的时候,他用今天唯一的冷漠疑惑的眼神看了看小敏,欲言又止,快速的走下天台,走进了休息室。
“阿”,小敏根本不明白黄汉的行为,看到黄汉走进休息室,转眼就不见了。她气恼的跺了跺脚,使劲地“嗯”了一声。轮到她呆呆地站在那里,看着赛场内绿绿的草坪和惨白的灯光了……良久……2006-1-17 0:15/0:46
the Young Aloe!
the Missing "u": Turbogears tg-admin Shell的unicode问题
利用tg-admin打开shell,
\simpleblog>tg-admin shell
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
(CustomShell)
>>> unistr = u"你好"
>>> unistr
u'\xc4\xe3\xba\xc3'
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
而直接在Python Command Line(Windows XP,利用Python安装快捷方式,或者Win Console中启动Python)中输入(same with Python2.4 and Python2.5),得到结果却和上面的不一样:
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> unistr = u"你好"
>>> unistr
u'\u4f60\u597d'
这其中的不同,让我昨天煞是苦恼了一整天:我想在tg-admin shell中输入中文,创建Post对象,用以发布中文Blog。我尝试过在tg-admin shell中进行各种转换,或者在KID的XML()中进行转换,甚至尝试过sys.setdefaultencoding()。可是不管怎么转换,都无法让网页正确的显示中文。
在tg-admin shell中输入u"你好",得到的不是u'\u4f60\u597d'这种真正的Unicode String Object,却是u'\xc4\xe3\xba\xc3'这样已经被UTF-16 Encoding过的String。后来偶然发现,原来tg-admin shell对我输入的中文进行了GB2312编码!此处Python的“u”字符串前缀失去作用了!而且,是GB2312,不是UTF-8!也不是UTF-16!所以我昨天本来尝试对u'\xc4\xe3\xba\xc3'进行UTF-8 Decoding,结果失败了!我怎么也没有想到GB2312,因为TurboGears quickstart生成的框架代码中用的都是UTF-8啊(包括KID的XML编码)!
况且,u'\xc4\xe3\xba\xc3'这一个String本身就是一个很矛盾的东西:外面的’u’说明是unicode字符串,而里面却放的是Byte Coding。
所以无法让tg-admin shell象普通Python Console那样输入。如果要输入Unicode中文,只能通过如下方式:
>>> utf8="你好"
>>> utf8
'\xc4\xe3\xba\xc3'
>>> uni = unicode(utf8, "utf-8")
Traceback (most recent call last):
File "", line 1, in
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid dat
a
>>> uni = unicode(utf8, "utf-16gb2312")
>>> uni
u'\ue3c4\uc3ba'
注意这里做了一个UTF-8转换的尝试,结果失败了——只能使用GB2312来Decoding。
一开始我还以为tg-admin shell默认做了UTF-16编码!可是没有想到,其实是GB2312!UTF-16确实兼容一些GB2312的编码,但是总归会出现问题的:
>>> utf16 = "这一次我知道了怎么在tg-admin shell中输入中文了"
>>> uni = unicode(utf16, "utf-16")
Traceback (most recent call last):
File "", line 1, in
File "D:\Python25\lib\encodings\utf_16.py", line 16, in decode
return codecs.utf_16_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode bytes in position 18-19: illegal
UTF-16 surrogate
>>> uni = unicode(utf16, "utf-8")
Traceback (most recent call last):
File "", line 1, in
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid dat
a
>>> uni = unicode(utf16, "gb2312")
>>> uni
u'\u8fd9\u4e00\u6b21\u6211\u77e5\u9053\u4e86\u600e\u4e48\u5728tg-admin shell\u4e
2d\u8f93\u5165\u4e2d\u6587\u4e86'
>>>
所以,GB2312才是其中默认的编码方式——这不正是我的电脑当前的编码设置嘛!
那么tg-admin shell中,为何Python的Unicode字符串前缀“u”会失去作用呢??我想我应该去看看tg-admin shell的源代码了。或者,可以从Windows OS的角度去考虑了?
\simpleblog>tg-admin shell
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
(CustomShell)
>>> unistr = u"你好"
>>> unistr
u'\xc4\xe3\xba\xc3'
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
而直接在Python Command Line(Windows XP,利用Python安装快捷方式,或者Win Console中启动Python)中输入(same with Python2.4 and Python2.5),得到结果却和上面的不一样:
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> unistr = u"你好"
>>> unistr
u'\u4f60\u597d'
这其中的不同,让我昨天煞是苦恼了一整天:我想在tg-admin shell中输入中文,创建Post对象,用以发布中文Blog。我尝试过在tg-admin shell中进行各种转换,或者在KID的XML()中进行转换,甚至尝试过sys.setdefaultencoding()。可是不管怎么转换,都无法让网页正确的显示中文。
在tg-admin shell中输入u"你好",得到的不是u'\u4f60\u597d'这种真正的Unicode String Object,却是u'\xc4\xe3\xba\xc3'这样已经被UTF-16 Encoding过的String。后来偶然发现,原来tg-admin shell对我输入的中文进行了GB2312编码!此处Python的“u”字符串前缀失去作用了!而且,是GB2312,不是UTF-8!也不是UTF-16!所以我昨天本来尝试对u'\xc4\xe3\xba\xc3'进行UTF-8 Decoding,结果失败了!我怎么也没有想到GB2312,因为TurboGears quickstart生成的框架代码中用的都是UTF-8啊(包括KID的XML编码)!
况且,u'\xc4\xe3\xba\xc3'这一个String本身就是一个很矛盾的东西:外面的’u’说明是unicode字符串,而里面却放的是Byte Coding。
所以无法让tg-admin shell象普通Python Console那样输入。如果要输入Unicode中文,只能通过如下方式:
>>> utf8="你好"
>>> utf8
'\xc4\xe3\xba\xc3'
>>> uni = unicode(utf8, "utf-8")
Traceback (most recent call last):
File "
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid dat
a
>>> uni = unicode(utf8, "utf-16gb2312")
>>> uni
u'\ue3c4\uc3ba'
注意这里做了一个UTF-8转换的尝试,结果失败了——只能使用GB2312来Decoding。
一开始我还以为tg-admin shell默认做了UTF-16编码!可是没有想到,其实是GB2312!UTF-16确实兼容一些GB2312的编码,但是总归会出现问题的:
>>> utf16 = "这一次我知道了怎么在tg-admin shell中输入中文了"
>>> uni = unicode(utf16, "utf-16")
Traceback (most recent call last):
File "
File "D:\Python25\lib\encodings\utf_16.py", line 16, in decode
return codecs.utf_16_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode bytes in position 18-19: illegal
UTF-16 surrogate
>>> uni = unicode(utf16, "utf-8")
Traceback (most recent call last):
File "
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid dat
a
>>> uni = unicode(utf16, "gb2312")
>>> uni
u'\u8fd9\u4e00\u6b21\u6211\u77e5\u9053\u4e86\u600e\u4e48\u5728tg-admin shell\u4e
2d\u8f93\u5165\u4e2d\u6587\u4e86'
>>>
所以,GB2312才是其中默认的编码方式——这不正是我的电脑当前的编码设置嘛!
那么tg-admin shell中,为何Python的Unicode字符串前缀“u”会失去作用呢??我想我应该去看看tg-admin shell的源代码了。或者,可以从Windows OS的角度去考虑了?
little about Python and Unicode
这里的内容摘录自“All about Python and Unicode”
In fact, you should forget all about bytes and think of Unicode strings as sets of symbols.
Unicode objects have no fixed computer representation.
看看下面的示例便知道,Unicode确实只是一种“符号表示”,真正的数据表示应该是'\xNN'这样的一个字节一个字节,所以说Codec做的工作就是这之间的这种转换。
>>> b = repr(uni2)
>>> b"u'\\x1a\\u0bc3\\u1451\\U0001d10c'"
>>> uni2.encode("utf-8")
'\x1a\xe0\xaf\x83\xe1\x91\x91\xf0\x9d\x84\x8c'
>>> print uni2.encode("utf-8")
喁冡憫饾剬
>>> print uni2
Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'gbk' codec can't encode character u'\u0bc3' in position 1:illegal multibyte sequence
In fact, you should forget all about bytes and think of Unicode strings as sets of symbols.
Unicode objects have no fixed computer representation.
看看下面的示例便知道,Unicode确实只是一种“符号表示”,真正的数据表示应该是'\xNN'这样的一个字节一个字节,所以说Codec做的工作就是这之间的这种转换。
>>> b = repr(uni2)
>>> b"u'\\x1a\\u0bc3\\u1451\\U0001d10c'"
>>> uni2.encode("utf-8")
'\x1a\xe0\xaf\x83\xe1\x91\x91\xf0\x9d\x84\x8c'
>>> print uni2.encode("utf-8")
喁冡憫饾剬
>>> print uni2
Traceback (most recent call last): File "
All about Python and Unicode
boodebr‘s All about Python and Unicode 写得非常好,INET6也对它进行了注解,可是我却还是遇到了麻烦。
>>> import sys
>>> sys.getdefaultencoding()'ascii'
>>> h = '哈囉'
>>> h
'\xb9\xfe\x87\xd3'
不知为何我得不到INET6的输出:'\xab\xa2\xc5o',或者是u'\u54c8\u56c9'?
我把系统编码改成big5仍然是一样:
>>> reload(sys)
>>> sys.setdefaultencoding("big5")
>>> h = '哈囉'
>>> h
'\xb9\xfe\x87\xd3'
>>> h = u'哈囉'
>>> h
u'\xb9\xfe\x87\xd3'
这个问题困扰了我昨天从下午一直到午夜一点钟。因为之前我学习simpleblog教程,使用tg-admin shell,希望输入中文的Post Content,可是一直失败。到最后才发现我应该采用u'\u54c8\u56c9'这样的值存储中文,而不是'\xb9\xfe\x87\xd3'这样的值。
但是发现这个原因之前,我尝试了很多办法,包括修改KID文件的XML()方法,以及修改sysdefaultencoding,但是都没有效果。
而我现在仍然不知道为何?只是我不想再停留在这里,五一的假期时间很宝贵,不应该被这个问题浪费。况且现在知道了规避的办法,我想可以先进行下一步了。
后来发现这是tg-admin shell的一个Bug,请参见后面的Blog:(http://jiangsy.blogspot.com/2007/05/all-about-python-and-unicode.html)。
>>> import sys
>>> sys.getdefaultencoding()'ascii'
>>> h = '哈囉'
>>> h
'\xb9\xfe\x87\xd3'
不知为何我得不到INET6的输出:'\xab\xa2\xc5o',或者是u'\u54c8\u56c9'?
我把系统编码改成big5仍然是一样:
>>> reload(sys)
>>> sys.setdefaultencoding("big5")
>>> h = '哈囉'
>>> h
'\xb9\xfe\x87\xd3'
>>> h = u'哈囉'
>>> h
u'\xb9\xfe\x87\xd3'
这个问题困扰了我昨天从下午一直到午夜一点钟。因为之前我学习simpleblog教程,使用tg-admin shell,希望输入中文的Post Content,可是一直失败。到最后才发现我应该采用u'\u54c8\u56c9'这样的值存储中文,而不是'\xb9\xfe\x87\xd3'这样的值。
但是发现这个原因之前,我尝试了很多办法,包括修改KID文件的XML()方法,以及修改sysdefaultencoding,但是都没有效果。
而我现在仍然不知道为何?只是我不想再停留在这里,五一的假期时间很宝贵,不应该被这个问题浪费。况且现在知道了规避的办法,我想可以先进行下一步了。
后来发现这是tg-admin shell的一个Bug,请参见后面的Blog:(http://jiangsy.blogspot.com/2007/05/all-about-python-and-unicode.html)。
Thursday, May 03, 2007
Collect all my blogs together one!
A sunshine morning! A good day!
Manytimes I wonder why I have so many interesting, and why I am so capricious that I created many blogs for different content publish. When I create them, I may thought that I can do things like the Beautiful Monkey King (Qi Tian Da Sheng 齐天大圣孙悟空,The monkey King who help the Tang Xuanzang West pilgrimage )that I can be multiple myself.
But day after day, I realize that I'm just a man of mould, manbe I should collect all my blogs together so that I can show the world who in deed I am!
I like photography, I like the World Music, I like programming in Python, and take a journey when I have time.
一直坐在电脑前面,迷茫得很,写什么东西都迷迷糊糊,一旦离开电脑,脑子忽然好像鲜活明亮起来,要很多话想明白了。
就连选择什么语言来写Blog,我也斟酌了好几年了。其实,送给倪老师的“临渊羡鱼,不如退而结网”这句话,不正是说给自己听的吗?正是告诉自己,做好自己该做的事情。
如果Blog中包含的不仅仅是流水帐(记得初中的时候老师评价我的日记就是这么说的,我记得很清楚),那么,大胆的(确实需要勇气)把所有的文章写在一个Blog中,不会需要太多的精力,也不会浪费自己的时间,在保证质量的前提下,自然一切都是精华。
做事情不一定什么事情都要亲力亲为,东西不在于多,而在于精!精辟了,自然会有深度的“渊”和许多可爱的“鱼”!会有让所有人(包括自己)羡慕! 如果自己写的东西有价值,别人自然会来翻译的,何须考虑用什么语言写!如果自己变得更Senior,思想更精辟,那么自然做的事情不会太Trivial,何须考虑那么多的Blog,人生何以会那么累?!
退一步海阔天空!
Manytimes I wonder why I have so many interesting, and why I am so capricious that I created many blogs for different content publish. When I create them, I may thought that I can do things like the Beautiful Monkey King (Qi Tian Da Sheng 齐天大圣孙悟空,The monkey King who help the Tang Xuanzang West pilgrimage )that I can be multiple myself.
But day after day, I realize that I'm just a man of mould, manbe I should collect all my blogs together so that I can show the world who in deed I am!
I like photography, I like the World Music, I like programming in Python, and take a journey when I have time.
一直坐在电脑前面,迷茫得很,写什么东西都迷迷糊糊,一旦离开电脑,脑子忽然好像鲜活明亮起来,要很多话想明白了。
就连选择什么语言来写Blog,我也斟酌了好几年了。其实,送给倪老师的“临渊羡鱼,不如退而结网”这句话,不正是说给自己听的吗?正是告诉自己,做好自己该做的事情。
如果Blog中包含的不仅仅是流水帐(记得初中的时候老师评价我的日记就是这么说的,我记得很清楚),那么,大胆的(确实需要勇气)把所有的文章写在一个Blog中,不会需要太多的精力,也不会浪费自己的时间,在保证质量的前提下,自然一切都是精华。
做事情不一定什么事情都要亲力亲为,东西不在于多,而在于精!精辟了,自然会有深度的“渊”和许多可爱的“鱼”!会有让所有人(包括自己)羡慕! 如果自己写的东西有价值,别人自然会来翻译的,何须考虑用什么语言写!如果自己变得更Senior,思想更精辟,那么自然做的事情不会太Trivial,何须考虑那么多的Blog,人生何以会那么累?!
退一步海阔天空!
Wednesday, May 02, 2007
Using SA directly with Turbogears, no Elixir!
when i was searching on Google to find some resolution for my "RiverSMS Error 1", I found the "Simpleblog Toturial of the Turbogears!". but I found another article about "TurboEntity version SimpleBlog ", I knew there are another way to use SA, and it is a easier way. the TurboEntity now is Elixir.
I know it is more advanced to use Elixir instead of using SA directly. But now for me, I think using SA directly is more stable and more easy. Since I'm worry about the 3rd party components will bring more other problems.
I know it is more advanced to use Elixir instead of using SA directly. But now for me, I think using SA directly is more stable and more easy. Since I'm worry about the 3rd party components will bring more other problems.
RiverSMS Error: Logger access references unknown handler
>start-riversms.py
Traceback (most recent call last):
File "E:\prvnts\packets{Riverleaf[R001]}\(20070425){WebSMSServer[R003]}\RiverSMS\start-riversms.py", line 19, in ? update_config(configfile="dev.cfg",modulename="riversms.config")
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 207, in update_config
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 146, in configure_loggers
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 98, in _get_loggersturbogears.config.ConfigError: Logger access references unknown handler access_out
I cannot resolve this error. I have tried to search by google to found the ask and answer, but no one really resolve this problem.
Now I installed Python 2.5.1, and the Turbogears 1.0.2.2 release just 2 days ago. and this error never exists with my new simpleblog created by quickstart:
tg-admin quickstart --sqlalchemy -i
the creating history is:
Enter project name: simpleblogEnter package name [simpleblog]:Selected and implied templates: turbogears#tgbase tg base template turbogears#turbogears web framework
Variables: egg: simpleblog identity: sqlalchemy package: simpleblog project: simpleblog sqlalchemy: TrueCreating template tgbaseCreating directory .\simpleblog Recursing into +einame+.egg-info Creating .\simpleblog\simpleblog.egg-info/ Copying PKG-INFO to .\simpleblog\simpleblog.egg-info\PKG-INFO Copying paster_plugins.txt to .\simpleblog\simpleblog.egg-info\paster_plugins.txt Copying sqlobject.txt_tmpl to .\simpleblog\simpleblog.egg-info\sqlobject.txt
Recursing into +package+ Creating .\simpleblog\simpleblog/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\__init__.py Copying release.py_tmpl to .\simpleblog\simpleblog\release.py Recursing into static Creating .\simpleblog\simpleblog\static/ Recursing into css Creating .\simpleblog\simpleblog\static\css/ Copying empty to .\simpleblog\simpleblog\static\css\empty Recursing into images Creating .\simpleblog\simpleblog\static\images/ Copying favicon.ico to .\simpleblog\simpleblog\static\images\favicon.ico
Copying tg_under_the_hood.png to .\simpleblog\simpleblog\static\images\tg_under_the_hood.png Copying under_the_hood_blue.png to .\simpleblog\simpleblog\static\images\under_the_hood_blue.png Recursing into javascript Creating .\simpleblog\simpleblog\static\javascript/ Copying empty to .\simpleblog\simpleblog\static\javascript\empty Recursing into templates Creating .\simpleblog\simpleblog\templates/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\templates\__init__.pyCreating template turbogears Recursing into +package+ Recursing into config Creating .\simpleblog\simpleblog\config/D:\Python25\lib\site-packages\cheetah-2.0rc8-py2.5-win32.egg\Cheetah\Compiler.py:1577: UserWarning: You supplied an empty string for the source! warnings.warn("You supplied an empty string for the source!", ) Copying __init__.py_tmpl to .\simpleblog\simpleblog\config\__init__.py Copying app.cfg_tmpl to .\simpleblog\simpleblog\config\app.cfg Copying log.cfg_tmpl to .\simpleblog\simpleblog\config\log.cfg Copying controllers.py_tmpl to .\simpleblog\simpleblog\controllers.py Copying json.py_tmpl to .\simpleblog\simpleblog\json.py Copying model.py_tmpl to .\simpleblog\simpleblog\model.py Recursing into sqlobject-history Creating .\simpleblog\simpleblog\sqlobject-history/ Copying empty to .\simpleblog\simpleblog\sqlobject-history\empty Recursing into static Recursing into css Copying style.css to .\simpleblog\simpleblog\static\css\style.css Recursing into images Copying header_inner.png to .\simpleblog\simpleblog\static\images\header_inner.png Copying info.png to .\simpleblog\simpleblog\static\images\info.png Copying ok.png to .\simpleblog\simpleblog\static\images\ok.png Recursing into templates Copying login.kid to .\simpleblog\simpleblog\templates\login.kid Copying master.kid to .\simpleblog\simpleblog\templates\master.kid Copying welcome.kid to .\simpleblog\simpleblog\templates\welcome.kid Recursing into tests Creating .\simpleblog\simpleblog\tests/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\tests\__init__.py Copying test_controllers.py_tmpl to .\simpleblog\simpleblog\tests\test_controllers.py Copying test_model.py_tmpl to .\simpleblog\simpleblog\tests\test_model.py Copying README.txt_tmpl to .\simpleblog\README.txt Copying dev.cfg_tmpl to .\simpleblog\dev.cfg Copying sample-prod.cfg_tmpl to .\simpleblog\sample-prod.cfg Copying setup.py_tmpl to .\simpleblog\setup.py Copying start-+package+.py_tmpl to .\simpleblog\start-simpleblog.py Copying test.cfg_tmpl to .\simpleblog\test.cfgRunning D:\Python25\python.exe setup.py egg_infoAdding TurboGears to paster_plugins.txtrunning egg_infowriting requirements to simpleblog.egg-info\requires.txtwriting simpleblog.egg-info\PKG-INFOwriting top-level names to simpleblog.egg-info\top_level.txtwriting dependency_links to simpleblog.egg-info\dependency_links.txtreading manifest file 'simpleblog.egg-info\SOURCES.txt'writing manifest file 'simpleblog.egg-info\SOURCES.txt'
Traceback (most recent call last):
File "E:\prvnts\packets{Riverleaf[R001]}\(20070425){WebSMSServer[R003]}\RiverSMS\start-riversms.py", line 19, in ? update_config(configfile="dev.cfg",modulename="riversms.config")
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 207, in update_config
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 146, in configure_loggers
File "d:\turbogears\turbogears-1.0.1-py2.4.egg\turbogears\config.py", line 98, in _get_loggersturbogears.config.ConfigError: Logger access references unknown handler access_out
I cannot resolve this error. I have tried to search by google to found the ask and answer, but no one really resolve this problem.
Now I installed Python 2.5.1, and the Turbogears 1.0.2.2 release just 2 days ago. and this error never exists with my new simpleblog created by quickstart:
tg-admin quickstart --sqlalchemy -i
the creating history is:
Enter project name: simpleblogEnter package name [simpleblog]:Selected and implied templates: turbogears#tgbase tg base template turbogears#turbogears web framework
Variables: egg: simpleblog identity: sqlalchemy package: simpleblog project: simpleblog sqlalchemy: TrueCreating template tgbaseCreating directory .\simpleblog Recursing into +einame+.egg-info Creating .\simpleblog\simpleblog.egg-info/ Copying PKG-INFO to .\simpleblog\simpleblog.egg-info\PKG-INFO Copying paster_plugins.txt to .\simpleblog\simpleblog.egg-info\paster_plugins.txt Copying sqlobject.txt_tmpl to .\simpleblog\simpleblog.egg-info\sqlobject.txt
Recursing into +package+ Creating .\simpleblog\simpleblog/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\__init__.py Copying release.py_tmpl to .\simpleblog\simpleblog\release.py Recursing into static Creating .\simpleblog\simpleblog\static/ Recursing into css Creating .\simpleblog\simpleblog\static\css/ Copying empty to .\simpleblog\simpleblog\static\css\empty Recursing into images Creating .\simpleblog\simpleblog\static\images/ Copying favicon.ico to .\simpleblog\simpleblog\static\images\favicon.ico
Copying tg_under_the_hood.png to .\simpleblog\simpleblog\static\images\tg_under_the_hood.png Copying under_the_hood_blue.png to .\simpleblog\simpleblog\static\images\under_the_hood_blue.png Recursing into javascript Creating .\simpleblog\simpleblog\static\javascript/ Copying empty to .\simpleblog\simpleblog\static\javascript\empty Recursing into templates Creating .\simpleblog\simpleblog\templates/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\templates\__init__.pyCreating template turbogears Recursing into +package+ Recursing into config Creating .\simpleblog\simpleblog\config/D:\Python25\lib\site-packages\cheetah-2.0rc8-py2.5-win32.egg\Cheetah\Compiler.py:1577: UserWarning: You supplied an empty string for the source! warnings.warn("You supplied an empty string for the source!", ) Copying __init__.py_tmpl to .\simpleblog\simpleblog\config\__init__.py Copying app.cfg_tmpl to .\simpleblog\simpleblog\config\app.cfg Copying log.cfg_tmpl to .\simpleblog\simpleblog\config\log.cfg Copying controllers.py_tmpl to .\simpleblog\simpleblog\controllers.py Copying json.py_tmpl to .\simpleblog\simpleblog\json.py Copying model.py_tmpl to .\simpleblog\simpleblog\model.py Recursing into sqlobject-history Creating .\simpleblog\simpleblog\sqlobject-history/ Copying empty to .\simpleblog\simpleblog\sqlobject-history\empty Recursing into static Recursing into css Copying style.css to .\simpleblog\simpleblog\static\css\style.css Recursing into images Copying header_inner.png to .\simpleblog\simpleblog\static\images\header_inner.png Copying info.png to .\simpleblog\simpleblog\static\images\info.png Copying ok.png to .\simpleblog\simpleblog\static\images\ok.png Recursing into templates Copying login.kid to .\simpleblog\simpleblog\templates\login.kid Copying master.kid to .\simpleblog\simpleblog\templates\master.kid Copying welcome.kid to .\simpleblog\simpleblog\templates\welcome.kid Recursing into tests Creating .\simpleblog\simpleblog\tests/ Copying __init__.py_tmpl to .\simpleblog\simpleblog\tests\__init__.py Copying test_controllers.py_tmpl to .\simpleblog\simpleblog\tests\test_controllers.py Copying test_model.py_tmpl to .\simpleblog\simpleblog\tests\test_model.py Copying README.txt_tmpl to .\simpleblog\README.txt Copying dev.cfg_tmpl to .\simpleblog\dev.cfg Copying sample-prod.cfg_tmpl to .\simpleblog\sample-prod.cfg Copying setup.py_tmpl to .\simpleblog\setup.py Copying start-+package+.py_tmpl to .\simpleblog\start-simpleblog.py Copying test.cfg_tmpl to .\simpleblog\test.cfgRunning D:\Python25\python.exe setup.py egg_infoAdding TurboGears to paster_plugins.txtrunning egg_infowriting requirements to simpleblog.egg-info\requires.txtwriting simpleblog.egg-info\PKG-INFOwriting top-level names to simpleblog.egg-info\top_level.txtwriting dependency_links to simpleblog.egg-info\dependency_links.txtreading manifest file 'simpleblog.egg-info\SOURCES.txt'writing manifest file 'simpleblog.egg-info\SOURCES.txt'
The Turbo Gears!
The Turbo Gears!
---- Riverleaf bible
1 The TurboGears!
TurboGears (超速齒輪)是個 python 風格(pythonic) 的網頁應用程式設計開發集成框架. 透過巧妙集成了許多 python 語言下的網頁程式相關開發工具, 提供了網頁程式開發者強大的支援.TurboGears 利用 CherryPy(網頁控制框架), Kid(樣板系統), Mochikit(Javascript 函式庫), SQLObject(資料庫物件模型)這幾個套件為主體, 朝著簡單易用又靈活的方向, 做到快速網頁應用程式開發的功能. 組成 TurboGears 的齒輪們都是開發多年的成熟套件, 在主要功能的穩定性上可以信任, 而且 TurboGears 還可搭配其他的 ORM 系統如SQLAlchemy, 其他的模板系統如 cheetah, Paste, Stan等, 延伸性極高.使用 TurboGears 可以順暢地利用 python 語言, 以簡單, 直覺, 易讀的方式來控制網站程式的運作(Business logic), 產生表單物件, 檢驗表單內容, 並使用視覺化的模板系統來編輯動態網站程式的外觀, 或運用AJAX來製作新一代的網頁應用程式.在多語言支援上, TurboGears 提供網頁介面的 il8n 翻譯協助工具, 讓網站多語言支援變得不再困難; 在牽涉到資料庫的進階設計中, TurboGears 提供 DataController 來達成自動生成對應資料庫欄位的網頁編輯介面 CRUD/scanfold 功能. 提供網頁介面的"資料表設計師(Database Designer)"工具, 可以視覺化地設計資料組織方式; 提供網頁介面的資料表管理工具"(CatWalk)", 管理後端的資料模型。
2 Python
2.1 The Zen of Python
2.1.1 英文原文版
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
2.1.2 python 禪學 (INET6整理版)
任何安裝好的 python 版本中都包含著 python 禪學(哲學),在任何 python 互動介面(如 IDLE)中輸入
>>> import this
則會出現如下的 python 禪學(哲學)
Python 禪學 (pythoon Zen)美觀的比醜陋的好 (Beautiful is better than ugly)直率的比含糊的好 (Explicit is better than implicit)簡單的比繁雜的好 (Simple is better than complex)繁雜的比晦澀的好 (Complex is better than complicated)平直的比巢雜的好 (Flat is better than nested)疏落有致的比櫛次鱗比的好 (Sparse is better than dense)可讀性應當被重視 (Readability counts)就算是特例, 也不能壞了規矩 (Special cases aren't special enough to break the rules)然而能解決問題仍然比維持單純重要 (Although practicality beats purity)錯誤不應該被默默地放過 (Errors should never pass silently)除非你是刻意為之 (Unless explicitly silenced)面對模稜兩可的情況, 要抗拒猜測的誘惑 (In the face of ambiguity, refuse the temptation to guess)應該會有一個--而且最好只有一個--適當的方式來實現(There should be one-- and preferably only one --obvious way to do it)雖然不是這個語言創造者的妳一開始可能看不出來(Although that way may not be obvious at first unless you're Dutch)現在動手比總是不動手的好 (Now is better than never)然而不動手可能還比沒有準備就動手的好(Although never is often better than *right* now)如果實作方式難以解釋, 那大概是個壞主意 (If the implementation is hard to explain, it's a bad idea)如果實作方式易於解釋, 那可能是個好主意 (If the implementation is easy to explain, it may be a good idea)名稱空間是一個很棒的主意 -- 我們就盡量用吧! (Namespaces are one honking great idea -- let's do more of those!)--Tim Peters (gasolin 翻譯)
2007/03/01 更新:參考 http://wiki.python.org.tw/The_Zen_Of_Python 其他人的理解修改
2.1.3 Python 之道 (POT 眾譯版)
Tim Peters 所提出的 PEP 20: The Zen of Python 是撰寫 Python 程式的精神指標。別懷疑,也別覺得太玄,每一句都是金玉良言。
這裡列出 The Zen of Python 的原文版以及本站 POT 眾人合力的翻譯版。如果想知道這中文翻譯版的實作過程,或是想逐條檢討翻譯,請至 The Zen Of Python CHT History 頁面。
美麗優於醜陋,明講好過暗諭。
簡潔者為上,複雜者次之,繁澀者為下。
平舖善於層疊,勻散勝過稠密;以致輕鬆易讀。
特例難免但不可打破原則,務求純淨卻不可不切實際。
斷勿使錯誤靜靜流逝,除非有意如此。
在模擬兩可之間,拒絕猜測的誘惑。
總會有一種明確的寫法,最好也只有一種,
但或須細想方可得。
凡事雖應三思後行,但坐而言不如起而行。
難以解釋的實作方式,必定是壞方法。
容易解釋的實作方式,可能是好主意。
命名空間讚,吾人多實用。
3 The Riverleaf and RiverSMS
RiverLeaf是一个目标,以Python为主要开发语言和开发环境的,起初面向Web开发。
RiverSMS是RiverLeaf的第一个Web开发项目,提供Web界面的基于SMS&Contacts&Calendar的系统。主要采用Turbogears作为开发框架。
4 Database
4.1 ORM
4.1.1 Active Record VS Data Mapping Mode
Active Record ORMs are too limited
– Poor performance
– One class, one table
– Don't play nice with triggers
● SQLAlchemy solves these problems
– But the docs are over 100 pages long (not
including generated API info)
● You probably know SQL already
– If you don't, you're going to need to eventually
4.2 SQLAlchemy
选择SQLAlchemy作为RiverSMS的ORM模块。
D:\Riverleaf-Python2.5package>easy_install -U SqlAlchemy
Searching for SqlAlchemy
Reading http://cheeseshop.python.org/pypi/SqlAlchemy/
Couldn't find index page for 'SqlAlchemy' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://cheeseshop.python.org/pypi/
Reading http://cheeseshop.python.org/pypi/SQLAlchemy/0.3.7
Reading http://www.sqlalchemy.org
Best match: SQLAlchemy 0.3.7
Downloading http://cheeseshop.python.org/packages/source/S/SQLAlchemy/SQLAlchemy
-0.3.7.tar.gz#md5=f3314698a270e8fc6a69fe95e98cf34e
Processing SQLAlchemy-0.3.7.tar.gz
Running SQLAlchemy-0.3.7\setup.py -q bdist_egg --dist-dir c:\docume~1\game\local
s~1\temp\easy_install-h9ootl\SQLAlchemy-0.3.7\egg-dist-tmp-ptk5fe
zip_safe flag not set; analyzing archive contents...
Adding sqlalchemy 0.3.7 to easy-install.pth file
Installed d:\python25\lib\site-packages\sqlalchemy-0.3.7-py2.5.egg
Processing dependencies for SqlAlchemy
4.2.1 Alchemy with MS Access?
搜索了Google,都搜不到Alchemy支持MS Access的任何踪迹。看来,我还是需要自己去写一个Alchemy with MS Access了。为什么放着Alchemy + SQLite或其他的现成支持不用呢?其实,还不是为了兼容GsmSMS系统?
4.3 SQLObject
虽然我选择SQLAlchemy作为RiverSMS的ORM模块,但是SQLObject仍然是需要安装的,因为Tg-admin.exe需要。
D:\Riverleaf-Python2.5package>easy_install -U SqlObject
Searching for SqlObject
Reading http://cheeseshop.python.org/pypi/SqlObject/
Couldn't find index page for 'SqlObject' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://cheeseshop.python.org/pypi/
Reading http://cheeseshop.python.org/pypi/SQLObject/0.7.6
Reading http://sqlobject.org
Reading http://cheeseshop.python.org/pypi/SQLObject/0.9.0b2
Reading http://sqlobject.org/devel/
Reading http://cheeseshop.python.org/pypi/SQLObject/
Reading http://cheeseshop.python.org/pypi/SQLObject/0.8.3
Reading http://sqlobject.org/
Best match: SQLObject 0.10dev
Downloading http://svn.colorstudy.com/SQLObject/trunk#egg=SQLObject-0.10dev
Doing subversion checkout from http://svn.colorstudy.com/SQLObject/trunk to c:\d
ocume~1\game\locals~1\temp\easy_install-zcdf9n\trunk
Processing trunk
Running setup.py -q bdist_egg --dist-dir c:\docume~1\game\locals~1\temp\easy_ins
tall-zcdf9n\trunk\egg-dist-tmp-qytrvr
warning: no files found matching 'examples\*.py'
warning: no files found matching '*.py' under directory 'tests'
zip_safe flag not set; analyzing archive contents...
sqlobject.classregistry: module references __file__
sqlobject.manager.command: module references __file__
Adding sqlobject 0.10dev-r2652 to easy-install.pth file
Installing sqlobject-admin script to D:\Python25\Scripts
Installed d:\python25\lib\site-packages\sqlobject-0.10dev_r2652-py2.5.egg
Processing dependencies for SqlObject
5 Version Control
5.1 Mercurial
软件的版本控制一定会慢慢的有需要。既然想要一直Pythonize下去,那么,我为什么不选用mercurial(水银)来做我的版本控制系统呢?[1]
5.2 SVN
不过SVN现在很流行,号称是“CVS的下一代”。
SVN被包含在Riverleaf-Python2.5package中。因为easy_install在线安装的时候,需要用到SVN下在某些模块的Dev版本。如:
Best match: SQLObject 0.10dev
Downloading http://svn.colorstudy.com/SQLObject/trunk#egg=SQLObject-0.10dev
Doing subversion checkout from http://svn.colorstudy.com/SQLObject/trunk to c:\docume~1\game\locals~1\temp\easy_install-zcdf9n\trunk
6 更新的技术!!!
6.1 Trac: Integrated SCM and Project Management
Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management. Our mission is to help developers write great software while staying out of the way. Trac should impose as little as possible on a team's established development process and policies.
6.2 Now running on Django trunk
http://seaaboveskybelow.org/weblog/2006/sep/09/now-running-on-django-trunk/
这两天把运行本站的代码升级到了trunk,重写工作大部分是丢弃代码;-} ,用新的特性,代码更简洁和清晰了。这次重构/升级很愉快,django社区往less magic as possible前进的工作进行的很好。随着自己渐渐变成个”老“pythoner,对Zen中的:
Explicit is better than implicit.[2]
There should be one-- and preferably only one --obvious way to do it.
也愈加会心。另外我用contrib中新添加的sitemap生成了本站的 google sitemap , 花了大概两分钟。原来用google的python脚本花了大概20分钟 ;-)
7 Creating Web Site: RiverSMS
7.1
this seems related to your logging configuration.
7.2
[1] 不过暂时没有时间考虑这个问题,所以只是先简单的记一笔。21:00 April 25, 2007
[2] 什么是Explicit?什么是Implicit?之前看到INET6的Blog上写了使用Python+Turbogears写的“书站”的例子,说“都是implicit的,更利于复用”,但这里为什么说“Explicit is better than implicit”?21:31 April 25, 2007.
---- Riverleaf bible
1 The TurboGears!
TurboGears (超速齒輪)是個 python 風格(pythonic) 的網頁應用程式設計開發集成框架. 透過巧妙集成了許多 python 語言下的網頁程式相關開發工具, 提供了網頁程式開發者強大的支援.TurboGears 利用 CherryPy(網頁控制框架), Kid(樣板系統), Mochikit(Javascript 函式庫), SQLObject(資料庫物件模型)這幾個套件為主體, 朝著簡單易用又靈活的方向, 做到快速網頁應用程式開發的功能. 組成 TurboGears 的齒輪們都是開發多年的成熟套件, 在主要功能的穩定性上可以信任, 而且 TurboGears 還可搭配其他的 ORM 系統如SQLAlchemy, 其他的模板系統如 cheetah, Paste, Stan等, 延伸性極高.使用 TurboGears 可以順暢地利用 python 語言, 以簡單, 直覺, 易讀的方式來控制網站程式的運作(Business logic), 產生表單物件, 檢驗表單內容, 並使用視覺化的模板系統來編輯動態網站程式的外觀, 或運用AJAX來製作新一代的網頁應用程式.在多語言支援上, TurboGears 提供網頁介面的 il8n 翻譯協助工具, 讓網站多語言支援變得不再困難; 在牽涉到資料庫的進階設計中, TurboGears 提供 DataController 來達成自動生成對應資料庫欄位的網頁編輯介面 CRUD/scanfold 功能. 提供網頁介面的"資料表設計師(Database Designer)"工具, 可以視覺化地設計資料組織方式; 提供網頁介面的資料表管理工具"(CatWalk)", 管理後端的資料模型。
2 Python
2.1 The Zen of Python
2.1.1 英文原文版
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
2.1.2 python 禪學 (INET6整理版)
任何安裝好的 python 版本中都包含著 python 禪學(哲學),在任何 python 互動介面(如 IDLE)中輸入
>>> import this
則會出現如下的 python 禪學(哲學)
Python 禪學 (pythoon Zen)美觀的比醜陋的好 (Beautiful is better than ugly)直率的比含糊的好 (Explicit is better than implicit)簡單的比繁雜的好 (Simple is better than complex)繁雜的比晦澀的好 (Complex is better than complicated)平直的比巢雜的好 (Flat is better than nested)疏落有致的比櫛次鱗比的好 (Sparse is better than dense)可讀性應當被重視 (Readability counts)就算是特例, 也不能壞了規矩 (Special cases aren't special enough to break the rules)然而能解決問題仍然比維持單純重要 (Although practicality beats purity)錯誤不應該被默默地放過 (Errors should never pass silently)除非你是刻意為之 (Unless explicitly silenced)面對模稜兩可的情況, 要抗拒猜測的誘惑 (In the face of ambiguity, refuse the temptation to guess)應該會有一個--而且最好只有一個--適當的方式來實現(There should be one-- and preferably only one --obvious way to do it)雖然不是這個語言創造者的妳一開始可能看不出來(Although that way may not be obvious at first unless you're Dutch)現在動手比總是不動手的好 (Now is better than never)然而不動手可能還比沒有準備就動手的好(Although never is often better than *right* now)如果實作方式難以解釋, 那大概是個壞主意 (If the implementation is hard to explain, it's a bad idea)如果實作方式易於解釋, 那可能是個好主意 (If the implementation is easy to explain, it may be a good idea)名稱空間是一個很棒的主意 -- 我們就盡量用吧! (Namespaces are one honking great idea -- let's do more of those!)--Tim Peters (gasolin 翻譯)
2007/03/01 更新:參考 http://wiki.python.org.tw/The_Zen_Of_Python 其他人的理解修改
2.1.3 Python 之道 (POT 眾譯版)
Tim Peters 所提出的 PEP 20: The Zen of Python 是撰寫 Python 程式的精神指標。別懷疑,也別覺得太玄,每一句都是金玉良言。
這裡列出 The Zen of Python 的原文版以及本站 POT 眾人合力的翻譯版。如果想知道這中文翻譯版的實作過程,或是想逐條檢討翻譯,請至 The Zen Of Python CHT History 頁面。
美麗優於醜陋,明講好過暗諭。
簡潔者為上,複雜者次之,繁澀者為下。
平舖善於層疊,勻散勝過稠密;以致輕鬆易讀。
特例難免但不可打破原則,務求純淨卻不可不切實際。
斷勿使錯誤靜靜流逝,除非有意如此。
在模擬兩可之間,拒絕猜測的誘惑。
總會有一種明確的寫法,最好也只有一種,
但或須細想方可得。
凡事雖應三思後行,但坐而言不如起而行。
難以解釋的實作方式,必定是壞方法。
容易解釋的實作方式,可能是好主意。
命名空間讚,吾人多實用。
3 The Riverleaf and RiverSMS
RiverLeaf是一个目标,以Python为主要开发语言和开发环境的,起初面向Web开发。
RiverSMS是RiverLeaf的第一个Web开发项目,提供Web界面的基于SMS&Contacts&Calendar的系统。主要采用Turbogears作为开发框架。
4 Database
4.1 ORM
4.1.1 Active Record VS Data Mapping Mode
Active Record ORMs are too limited
– Poor performance
– One class, one table
– Don't play nice with triggers
● SQLAlchemy solves these problems
– But the docs are over 100 pages long (not
including generated API info)
● You probably know SQL already
– If you don't, you're going to need to eventually
4.2 SQLAlchemy
选择SQLAlchemy作为RiverSMS的ORM模块。
D:\Riverleaf-Python2.5package>easy_install -U SqlAlchemy
Searching for SqlAlchemy
Reading http://cheeseshop.python.org/pypi/SqlAlchemy/
Couldn't find index page for 'SqlAlchemy' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://cheeseshop.python.org/pypi/
Reading http://cheeseshop.python.org/pypi/SQLAlchemy/0.3.7
Reading http://www.sqlalchemy.org
Best match: SQLAlchemy 0.3.7
Downloading http://cheeseshop.python.org/packages/source/S/SQLAlchemy/SQLAlchemy
-0.3.7.tar.gz#md5=f3314698a270e8fc6a69fe95e98cf34e
Processing SQLAlchemy-0.3.7.tar.gz
Running SQLAlchemy-0.3.7\setup.py -q bdist_egg --dist-dir c:\docume~1\game\local
s~1\temp\easy_install-h9ootl\SQLAlchemy-0.3.7\egg-dist-tmp-ptk5fe
zip_safe flag not set; analyzing archive contents...
Adding sqlalchemy 0.3.7 to easy-install.pth file
Installed d:\python25\lib\site-packages\sqlalchemy-0.3.7-py2.5.egg
Processing dependencies for SqlAlchemy
4.2.1 Alchemy with MS Access?
搜索了Google,都搜不到Alchemy支持MS Access的任何踪迹。看来,我还是需要自己去写一个Alchemy with MS Access了。为什么放着Alchemy + SQLite或其他的现成支持不用呢?其实,还不是为了兼容GsmSMS系统?
4.3 SQLObject
虽然我选择SQLAlchemy作为RiverSMS的ORM模块,但是SQLObject仍然是需要安装的,因为Tg-admin.exe需要。
D:\Riverleaf-Python2.5package>easy_install -U SqlObject
Searching for SqlObject
Reading http://cheeseshop.python.org/pypi/SqlObject/
Couldn't find index page for 'SqlObject' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://cheeseshop.python.org/pypi/
Reading http://cheeseshop.python.org/pypi/SQLObject/0.7.6
Reading http://sqlobject.org
Reading http://cheeseshop.python.org/pypi/SQLObject/0.9.0b2
Reading http://sqlobject.org/devel/
Reading http://cheeseshop.python.org/pypi/SQLObject/
Reading http://cheeseshop.python.org/pypi/SQLObject/0.8.3
Reading http://sqlobject.org/
Best match: SQLObject 0.10dev
Downloading http://svn.colorstudy.com/SQLObject/trunk#egg=SQLObject-0.10dev
Doing subversion checkout from http://svn.colorstudy.com/SQLObject/trunk to c:\d
ocume~1\game\locals~1\temp\easy_install-zcdf9n\trunk
Processing trunk
Running setup.py -q bdist_egg --dist-dir c:\docume~1\game\locals~1\temp\easy_ins
tall-zcdf9n\trunk\egg-dist-tmp-qytrvr
warning: no files found matching 'examples\*.py'
warning: no files found matching '*.py' under directory 'tests'
zip_safe flag not set; analyzing archive contents...
sqlobject.classregistry: module references __file__
sqlobject.manager.command: module references __file__
Adding sqlobject 0.10dev-r2652 to easy-install.pth file
Installing sqlobject-admin script to D:\Python25\Scripts
Installed d:\python25\lib\site-packages\sqlobject-0.10dev_r2652-py2.5.egg
Processing dependencies for SqlObject
5 Version Control
5.1 Mercurial
软件的版本控制一定会慢慢的有需要。既然想要一直Pythonize下去,那么,我为什么不选用mercurial(水银)来做我的版本控制系统呢?[1]
5.2 SVN
不过SVN现在很流行,号称是“CVS的下一代”。
SVN被包含在Riverleaf-Python2.5package中。因为easy_install在线安装的时候,需要用到SVN下在某些模块的Dev版本。如:
Best match: SQLObject 0.10dev
Downloading http://svn.colorstudy.com/SQLObject/trunk#egg=SQLObject-0.10dev
Doing subversion checkout from http://svn.colorstudy.com/SQLObject/trunk to c:\docume~1\game\locals~1\temp\easy_install-zcdf9n\trunk
6 更新的技术!!!
6.1 Trac: Integrated SCM and Project Management
Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management. Our mission is to help developers write great software while staying out of the way. Trac should impose as little as possible on a team's established development process and policies.
6.2 Now running on Django trunk
http://seaaboveskybelow.org/weblog/2006/sep/09/now-running-on-django-trunk/
这两天把运行本站的代码升级到了trunk,重写工作大部分是丢弃代码;-} ,用新的特性,代码更简洁和清晰了。这次重构/升级很愉快,django社区往less magic as possible前进的工作进行的很好。随着自己渐渐变成个”老“pythoner,对Zen中的:
Explicit is better than implicit.[2]
There should be one-- and preferably only one --obvious way to do it.
也愈加会心。另外我用contrib中新添加的sitemap生成了本站的 google sitemap , 花了大概两分钟。原来用google的python脚本花了大概20分钟 ;-)
7 Creating Web Site: RiverSMS
7.1
this seems related to your logging configuration.
7.2
[1] 不过暂时没有时间考虑这个问题,所以只是先简单的记一笔。21:00 April 25, 2007
[2] 什么是Explicit?什么是Implicit?之前看到INET6的Blog上写了使用Python+Turbogears写的“书站”的例子,说“都是implicit的,更利于复用”,但这里为什么说“Explicit is better than implicit”?21:31 April 25, 2007.
the Zen of Python
Tim Peters 所提出的 PEP 20: The Zen of Python 是撰寫 Python 程式的精神指標。別懷疑,也別覺得太玄,每一句都是金玉良言。
這裡列出 The Zen of Python 的原文版以及本站 POT 眾人合力的翻譯版。如果想知道這中文翻譯版的實作過程,或是想逐條檢討翻譯,請至 The Zen Of Python CHT History 頁面。
The Zen of Python (英文原文版)
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Python 之道 (POT 眾譯版)
美麗優於醜陋,明講好過暗諭。
簡潔者為上,複雜者次之,繁澀者為下。
平舖善於層疊,勻散勝過稠密;以致輕鬆易讀。
特例難免但不可打破原則,務求純淨卻不可不切實際。
斷勿使錯誤靜靜流逝,除非有意如此。
在模擬兩可之間,拒絕猜測的誘惑。
總會有一種明確的寫法,最好也只有一種,
但或須細想方可得。
凡事雖應三思後行,但坐而言不如起而行。
難以解釋的實作方式,必定是壞方法。
容易解釋的實作方式,可能是好主意。
命名空間讚,吾人多實用。
這裡列出 The Zen of Python 的原文版以及本站 POT 眾人合力的翻譯版。如果想知道這中文翻譯版的實作過程,或是想逐條檢討翻譯,請至 The Zen Of Python CHT History 頁面。
The Zen of Python (英文原文版)
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Python 之道 (POT 眾譯版)
美麗優於醜陋,明講好過暗諭。
簡潔者為上,複雜者次之,繁澀者為下。
平舖善於層疊,勻散勝過稠密;以致輕鬆易讀。
特例難免但不可打破原則,務求純淨卻不可不切實際。
斷勿使錯誤靜靜流逝,除非有意如此。
在模擬兩可之間,拒絕猜測的誘惑。
總會有一種明確的寫法,最好也只有一種,
但或須細想方可得。
凡事雖應三思後行,但坐而言不如起而行。
難以解釋的實作方式,必定是壞方法。
容易解釋的實作方式,可能是好主意。
命名空間讚,吾人多實用。
Subscribe to:
Posts (Atom)