UliPad 3.7是第一次在 code.google.com 上发布,以前都是在啄木鸟的wiki上。之所以转到 code.google.com 上去还是因为啄木鸟的域名到期,有段时间不能通过域名进行访问,所以转了过去,的确是有些匆忙。不过现在啄木鸟已经可以访问了。不过转了之后的确也有好处,至少下载可以看到下载量了。以前在wiki上是看不到的。发布了将尽一天时间了,下载量达到了600多,近700的样子,感觉还是不错。不过我发现windows的版本要多于源码版本的下载,的确很奇怪。我自已也主要是使用windows来开发,那别人呢?不明白为什么?是不是说明windows环境还是多于linux环境呢?不过看不到具体的下载的明细无法进行更深入的分析了。
这次发布间隔是比较长的,不过的确还有一些不好解决的问题存在,主要是在linux环境下。
New Features and Changes:
#. Add PEP8 sytle checking
#. Enhance calltip showing
#. Add a new option in Preference, which is used for when you toggle comment lines(Ctrl+/ or Ctrl+\) if it’ll popup a comment dialog. You can find it in Preference->Document->Show comment character dialog when adding comment.
#. Saving auto todo window status
#. Changing shortcut of quote dialog from Ctrl+Q to Ctrl+’
#. Changing the number of recent files to 20
#. Changing shortcut Ctrl+Alt+L to Alt+Z, Ctrl+Alt+B to Alt+X
#. Saving the status of Message window word wrap
#. Saving the snippets window position
#. The results of find in files can only show the filenames and you can copy them to clipboard
#. Add Spanish language translation and Traditional Chinese language translation
#. Using ZestyParser Module to parse the source code syntax
#. Improving input assistant functionality
#. Adding config.txt documentation
#. When saving files, automatically adding accordingly filename suffix
#. Adding mixin reload mechanism, it will be very useful when developing
#. Adding folder sort functionality when adding new folder to directory browser window
#. Adding template in input assistant, and you can press TAB key to jump to the next field. The template just like: ${1:something}.
#. Adding LUA syntax support
#. Adding mako(template module) support plugin
#. Adding batch filenames rename plugin
#. Enable ftp window be openned left or bottom pane according to the openning position
#. Adding Alt+R shortcut for open recently files
#. Merging new 1.20 version winpdb to UliPad
Bug fix:
#. Fix ctag support bug
#. Fix default style bug
#. Fix the wrong cursor jumping after undo operating
#. Fix xml lexer type bug
#. Fix copying bug when the text block has no indent
#. Fix openning multi-view bug from menu items
#. Fix the input focus losing bug when openning bottom pane or double-click on directory browser entries
#. Fix user can open multi find dialogs bug
#. Fix register functionality in windows
UliPad的主页已经开始转移到 code.google.com 上去了,地址在 http://code.google.com/p/ulipad/ 。所以相应的svn的地址也变化了,如果你使用svn版本,请相应的修改。
建议使用源码版本,因为执行码版本因为打包的问题,有些功能会有问题,象ReST的支持,调试等。
前一阵实在太忙,对于Django的关注也少了许多。不过现在慢慢开始恢复。这不就有一件事情吸引了我。事情的起因是这个样子的:
一位叫Tom Tobin的朋友在 django 的邮件列表发表了一个建议,说希望把模板功能做成独立的模块。其实这个提议老早就已经出现了,只不过没有象这次讨论得比较激烈。邮件线索可以访问这里。
对这件事的看法分为两派,很正常。一派以Malcolm Tredinnick 为首的,他们认为template因为是django的一部分,所以最好还是与django在一起,不应该被分离出去。他们不喜欢象turbogears那样的由多个模块组成的形式。他们不希望维护两个版本,而且目前的模板通过django.conf.config()还是可以方便地被独立程序使用。
而象Tom Tobin的想法还是比较简单,就是希望能够单独使用。其实我个人是倾向于简单的方式,所以独立出来也无不可。如果是我的项目,有人建议我独立出来,而且我认为功能的确相对独立或希望有更多的人使用,也可能会独立出来,哪怕是维护两个版本。
不过作为Django的核心成员Adrian Holovaty首先提了一些问题,象不希望维护两套版本等,并且他可能更关心如何让模板模块更好用,是否一定要分出来倒是不一定。后来他指出:是不是只要不需要再进行配置settings就足够了。我认为如果能做到这一点,我就已经满意了。
但对于Tom Tobin好象并不满意。他的确是希望是独立的模块,而不是django的一个子模块。特别是他后面说到自已的许多意见被shut down,他已经厌烦了争论,还是自已一个人走下去的话,让我深有同感!
从这里我们可出不同的哲学思想的冲击。对于完美派或保守派更多的是考虑整体,使用工作最简化。对于自由派或激进派更多的是关心方便性和扩展性。我个人的理解,django有些过于保守,当然这也是他的项目控制得比严格的地方,而且核心成员的思想非常鲜明,也算是一大特色了吧。
所以我现在更多的是象Tom Tobin一样,我做我的,你做你的,你的好我就用,不好我按我的方式来,可能也是因为哲学上还是有不少差异而不得已而为之。不过一个项目本来就无法让所有人满意,只有它可以扩展就行了。
今天徐继哲在邮件列表中通知Python T-Shirt已经开售了,明外还有部分人(包括本人)有赠送,这样我就有三件了,赶紧今天把钱汇了过去,等着收货了。大家也想要的就加快吧,可是限量啊,450件,其中包括预定的和赠送的,剩下的可就不多了,还有大概200多件可以抢购。一件59元。邮件内容转贴如下:
大家好,
之前策划的Python T恤已经上市发售,请登录http://www.zeuux.org/fashion/
fashion.cn.html#fashion-python购买。由于我们很难准确核对购买者和预定者,所以建议预定的朋友
断码等情况,影响你的购买。另外,这些照片是8月7日晚上拍摄的
我们原计划在8月15日发布Python T恤,经过努力,我们提前一周发布了,今天刚好是2007年8月
希望大家能够喜欢Python T恤,将Python发扬光大,创造更多的奇迹!
ZEUUX Project的主要目标是推动自由软件运动发展
Pythoner的讨论,向下面各位对Python在中国的发展
www.zeuux.org/fashion/fashion
# Z.Q
# 沈威
# Junyong Pan — 五年如一日的坚持 Zope/Plone 并独立壮大起来
# Limodou — 在Python 世界遨游,并不断留下成品的绝对第一行者!
# Robert Chen — 直入Python 源代码的行天者
# Glace — 中蟒的缔造者,不论评定如何,这是开天辟地的功底了
# 杜文山 — 从Zope手册到baow.com再到dohao.org 折腾了多少重量级的东西出来哪
# HD — 勇敢的在主流媒体公司竖立Python 大旗,给多少Pythoner 提供了饭碗哪…………感动!
# 阿北 — 独自使用Python 创业成功的神人
# Osmond Liang — DIPy 5.4 工程领导者,至今最大部头的社区中文翻译作品
# March.Liu — 系列官方教程中译版本的作者哪!至今最大部头的个人中文翻译系列
最后,如有不当之处,请大家海涵,有任何建议和意见,请与我联系
徐继哲
zeuux@billxu.com http://www.billxu.com
ZEUUX Project http://www.zeuux.org
最早知道jquery-ui项目是在jquery的1.1.3版本发布的声明上提到正在由Paul, Sean开发的一个ui方面的新项目,我想它的最终目的是形成一个与dojo, ext相类似的以界面为主的项目,它将替代现有的interface。于是我订阅了它的邮件列表,里面人到是不多,我也没有发过言,因为平时的精力不在javascript上。
今天看到John Resig打算发布ui项目了,他列出了一个发布计划:
Sunday August 10th: Feature list deadline.
Beyond this point, no more feature additions will be added to the list
of features in the jQuery UI release, anything past this point will
have to be held off until a future time. Only items that are claimed
by a dedicated author will be kept.
Sunday August 26th: Feature freeze
Any feature on the list that is not 100% complete, at this point, will
not be included in the jQuery UI release. (This also includes themes –
but they should also be fully usable and documented by this point.)
Friday August 31st: Documentation/Demo freeze
Any feature that does not have it’s full API documented, and demos
implemented and skinned, at this point will not be included in the
jQuery UI release.
Monday September 3rd: jQuery 1.2 & jQuery UI Release
This will be a simultaneous release, done together to best handle the
resulting press.
9月3日将与jQuery 1.2一起发布。从上面的发布要求来看,John对于文档的要求是非常高的,我想这一点可能是非常重要的,也是jQuery非常棒的一个原因。
而Paul很赞同这个决定,列出了最优化要固化的内容:
1.) Themeing
2.) UI Box
3.) Mouse interaction plugins (excluding Sortables, since no other widgets are based on Sortables)
4.) UI Core API (helper functions, structural functions)
的确有不错的功能,期待中。。。
今天定在下午两点半钟,在开会之前邮件列表中就已经有许多人表示要出席了,结果会课开始后陆陆续续地还有人进来,大概到了30多人,是历年来人数最多的一次,其中不乏漂亮的MM。本次会课主要有三个议题:
- 由我进行Django方面的交流
- 由Alex Dong介绍thumbpy项目
- 由Zoom.Quiet和博文视点的编辑方舟介绍《可爱的Python》一书的进度
我因为最近比较忙,Django弄得不多,所以准备不是很充分,不过一讲起来竟然也讲了2个小时左右,留给后面的时间就少多了。其间简单说明了一下我为什么选择了Django。主要是:
- Django出现得比TurboGears和PyLons早,有些先入为主
- Django的组织方式适合我的口味。所有东西只要一个下载,不用象TurboGears一样需要联上网,通过easy_install来安全十几个模块。
- Django的哲学也符合我的习惯。
后来,Zoom.Quiet发动张成介绍他们华美汉盛为什么选择Django。张成主要说:Django已经足够,另外它的哲学很实用,很符合他们的方式。
Alex Dong的thumbpy项目算是一个测试工具,特别是它可以做到代码覆盖检查。具体的工作原理,Alex Dong讲解得很详细,并且给出实际的操作示例。那么主要解决了2个问题:
- 如何计算每行执行的代码。这一点充分使用了sys.settrace和threading.settrace来捕获每条语句的执行,然后得到每行执行的代码的文件和行号。
- 分析源文件的每行代码,主要是为了去掉象注释,docstring,空行之类的无法执行的语句,从而使代码覆盖统计更准备。那么这块处理的难度主要是如何识别一行代码是不能执行的,通过paser模块得到一个ast树进行分析。
目前thumbpy可以使用python标准的unittest来进行测试,象doctest目前还不标准。而且也可以实现象nose一样的一个deamon的方式,即一旦启动,当你做了修改后,会自动进行测试。它还提供了一个-l参数,可以自动只测试最新修改的test代码,这样不必要每次全部再测试一遍,可以忽略掉没有修改的测试。
thumbpy目前是一个开源软件,已经放在code.google.com上了,而且Alex Dong欢迎所有感兴趣的人来完善它。他建议大家去试一试,用一用。
后面是广告时间。Alex Dong正在开发一个“好看簿”的网站,向大家征集两个网站设计的样式。在会上大家也各抒已见。一个设计是红色鲜艳的色彩,另一个是比较清淡的。我个人是偏向于清淡的,会上许多人也是如些建议。如果你也想看一看给出建议,可以访问这里。那么好看簿是一个什么定位的网站呢?它是一个上传图片,可以加入文字和声音,从而将一张或若干张图片变成一个故事。那么这次会课的“故事”就在这里。
另外Alex Dong的夫人也一同前来参加会课,并且Alex Dong的夫人做了一个非常棒的Firefox插件,可以进行根据内容的广告过滤。如果你想试一试可以到这里给zephyr.fang发邮件索取。
最后则是Zoom.Quiet的《可爱的Python》的进度介绍、写作目的和未来的设想。同时博文视点的编辑方舟也发表了关于出版社与社区合作出书的看法,说国外是一种趋势,国内还在探索之中,希望我们CPUG能做得最好。同时这本书还需要大量的人来配合,所以建议有精力,兴趣的pythoner尽量掺和,让这本书早日面市。
会课进行了将近4个小时,直到下午6点多才结束。最后大家一起合了影,故事都在好看簿上了。上面有链接大家可以看一看,参加会课的可以把自已的名字登记上。同时好看簿也是使用Django开发的。参加会课的人有些是冲着Django交流主题来的,看来web开发的火热,而且Django在中国也算是火了。
项目主页在: http://code.google.com/p/dict4ini/
增加了一个加密的特性,这是一个外国朋友提供的,使用一个叫p3.py的模块。这样可以使用dict4ini.py来保存加密后的内容了。在调用时只要:
d = DictIni(‘t.ini’, secretKey=’yourkey’)
这样在保存时就会自动加密,读出来时自动解密,使用secretKey的值。
Simple mako template support
==========================
Can add mako project and you should make mako filename suffix is ‘mko’.
batch filenames rename plugin
==========================
Only support simple case.
0. update from svn
1. Install batchfilenames_plugin
2. restart UliPad
3. tool->Batch Filenames Rename
Add files -> add the filenames which you want to rename
Remove files -> remove filenames from the list
Select All -> select all filenames in the list
Skip filename suffix -> don’t deal with the filename suffix
After you adding filename, you can input the pattern in the Pattern
input field, or double-click on one item, then the filename will be
displayed in the Pattern input field, then you can modify it. You can
use ‘???’ string for num creation, i.e.:
aaaaa????
There are four ‘?’ here, so the length of num pattern is 4, then you
can specify the Start Num, for example 1. And then select the
filenames which you want to deal with, you can just click Select All
checkbox to select all the items. Then click Create button, then the
result will be displayed in the Results column next to the Source
Filenames column. And at this time, you have still not apply the
results to the disk. If you want to apply the changes, you can click
the Apply button, then the selected filenames will be removed from the
list, and you can see these filenames have been renamed. And the
selected filenames with empty result will not be changed only be
simply unselected.
And you can see, the batchfilenames_plugin only support automatically
creation according to the number pattern. And I think it’s the most
simple case.
If you like it, you can try it now.
在Django中试验了简单的mako模板之后,运行是没有问题了,于是我想试一试中文如何处理,这一试才发现还有许多细节需要注意。在处理中文前建议先阅读一下mako文档中关于Unicode那部分。从这部分的内容我们可以了解到mako在模板内部全部使用unicode进行处理。涉及到模板处理的数据我想大概有三个地方:
- 模板文件
- 模板数据
- 模板中运算结果
让我们一个个来看如何正确使用。
模板文件
mako有一种全局性的处理,那就是在TemplateLookup中使用input_encoding参数,它指明了每个模板文件的缺省编码。另外,针对每个模板文件,你可以为每个模板声明一个模板所用的编码,正象python中所用的格式,如:
## -*- coding: utf-8 -*-
要注意在mako中支持两种注释方式,一种是单行的,它使用两个’#'符,这与python不同。上面一行要象python源程序一样放在最前面。而mako采用与PEP-0263相同的判断方式,因此它其实是一个正则表达式,表达式为:
#.*coding[:=]\s*([-\w.]+).*\n
因此你可以使用简化的方式:##coding=utf-8或##coding:utf-8
一旦你在某个页面设置了这个编码声明,它将覆盖全局性的编码设置。
感觉这个还是挺方便的。
模板数据
模板数据是将要传入模板中的变量,它在调用时是通过关键字参数来传的,因此你可以使用一个字典,如:a,然后使用template.render(**a)来传递。如果有中文那么你需要转为unicode,如果不转,mako会自动使用unicode()来进行转换,因为没有指定编码类型,再加上缺省编码如果不手工修改的话是ascii,所以相当于mako会按ascii编码来转换字符串,这一定会出错的。因此你要自已进行转换。
模板中运算结果
在mako模板中是可以直接写程序,表达式,调用外部模板进行处理的,因此有可能得到的结果不是unicode。因此你需要对计算结果进行转换,如${‘中文’},这样在模板中调用了一个中文字符串,但这样会出错,要这样写:${u’中文’}。不过每个表达式都这样处理真是很麻烦,因此mako提供了在TemplateLookup或Template创建时的一个default_filters参数,你可以指定对于每个表达式计算后使用哪些过滤器进行处理,因此可以指定一个decode.utf_8之类的进行处理。而这个decode是mako预定义。不过mako的过滤器目前好象不支持参数。使用这个过滤器后,当信息返回本身为unicode,则不会有问题,当为非unicode时会自动按utf-8进行转换。
为了将上述处理简化,我修改了mako_django.py文件(在zipbook项目中可以找到),增加了以下的处理:
- 将TemplateLookup类中的一些参数做成settings.py中的选项,这样用户可以通过修改settings.py的选项来控制模板的处理。主要有:
MAKO_FILESYSTEM_CHECKS 缺省值为settings.DEBUG,它主要用来控制是否自动监控文件的变化以重新生成模板的py模块。
MAKO_OUTPUT_ENCODING 缺省值为settings.DEFAULT_CHARSET,它用来控制模板输出时的编码。因为在整个模板处理时,内部是unicode,因此需要一个编码来转成字节字符串。
MAKO_INPUT_ENCODING 缺省值为settings.DEFAULT_CHARSET,它用来控制模板文件读取时使用的文件编码。
MAKO_DEFAULT_FILTERS 缺省值为['decode.' + settings.DEFAULT_CHARSET.replace('-', '_')]。可以看到使用了settings.DEFAULT_CHARSET编码。后面的replace是为了把"utf-8"转为"utf_8",不然在mako处理中会出错。 - 在使用TemplateLookup时使用了上述的参数
- 在得到一个template后进行渲染时,对于传入模板的字典对象进行扫描,将所有的字符串值(包括list, tuple,dict中的字符串)都转为了unicode。
经过上述的处理,只要保证模板,返回值,字符串都是统一的编码,如使用utf-8,那么使用中文应该不会有什么问题。


