2006年08月31日

这里

这是一本由 Adrian Holovaty, Jacob Kaplan-Moss 合著的第一本关于 django 开发的书,不过还没有出版,只是可以订购。

2006年08月30日

今天早上阅读 django 邮件列表,突然一则主题吸引了我的目光:Integrating django and SQLAlchemy。真是一则重大新闻。邮件的线索在这里。Adrian发表了这番声明,我简单翻译如下:

这个决定是脱胎于最近关于Python Web Framework的伟大画卷的讨论,我们决定开始一个新的Django开发分支,使用 SQLAlchemy 作为底层的数据库支持库。

Robin Munn, 精彩的 SQLAlchemy 教程的作者,在几个月之前已经为 Django 贡献了许多,他已经同意成为这个分支的负责人。我确信他将在这个邮件列表中进行对问题或实现的讨论,如果你相要提供某种形式的帮助,s可以作一下自我介绍。

这里有几个关于实现的注意事项:

  • Django数据库API不会改变,并且SQLAlchemy后端将是可选的。SQLAlchemy后端的重点将是可以暴露出底层的SQLAlchemy API,如果你需要做一些确实复杂的事情,而不必掉进原始的SQL中。
  • 目前,Django 模型是从 django.db.models.Model 继承而来,习惯上是将 "from django.db import models" 放在你的 models.py 文件的最顶端。我想这样做将是最平滑的(并且真正很酷),如果人们可以切换到 "from django.contrib.sqlalchemy.db import models"并且不需要改变任何代码。换句话说,SQLAlchemy 模型应该是 django.contrib.sqlalchemy.db.models.Model 的实例而不是 django.db.models.Model 的实例。
  • 正如上面所暗示的,这将是一个可选的附加项,已经存在的模型机制仍将保留。也就是说,人们仍然可以没有SQLAlchemy来使用 Django,并且这样将是缺省的。我不想裁定在未来会向SQLAlchemy全面迁移(也就是使其成为缺省),但是在这一时刻我们宁愿不增加这个依赖。
  • 一个 model 对象的 "_meta" 属性应该被保留。(这是模型的元数据。) 尽管它是以一个下划线开始的,但已经有许多的代码使用它,并且把它作为事实上的数据库API标准的一部分。
  • 至于对现存的代码进行重构以便增加对SQLAlchemy的勾子处理,只要对于非 SQLAlchemy 用户不是太多的负担就行。
  • 这个分支在 Django SVN 仓库中将被称作 "sqlalchemy"。
2006年08月28日

UliPad 中实现了运行其它程序的功能,同时可以将输入输出重定向到 UliPad 的 Message 窗口中去。以前在处理 wxPython 时有一些问题,那就是只能处理 .pyw 的后缀。而为什么 .py 后缀的有问题呢?原因在于我考虑到输入输出重定向的问题时是针对 .py 程序的,而且没有在执行 wx.Execute() 时使用 wx.EXEC_NOHIDE 标志,因此对于以 .py 为后缀的 GUI 程序无法显示图形窗口。现在改为了全部加上 wx.EXEC_NOHIDE 标志。同时在命令行全部使用 Python ,而不再根据 .pyw 切换为 pythonw 了。

经过这番改造,你的 wxPython 程序无论是 .py 或是 .pyw 结尾的都可以比较好的在 UliPad 中运行了。

2006年08月24日

As you typing in a Python source file, it can popup a list window, and enable you choose the match identifier string. For example: type ‘r’, then it’ll popup a list containing ['return'], so you can choose from it.

How does UliPad enumerate the identifiers?

There are three source:

  1. from __builtin__ module, including all the built in functions
  2. from keyword module, also incuding ['as', 'self', 'True', 'False']
  3. dynamic analysis the current document, and extract the identifiers from the text

And I don’t deal with scopes, because I don’t have a well lexer module, and it’s very difficult I think.

How frequent does UliPad analysis the current document?

  1. As the file loading
  2. As you enter ‘=’

The dynamic parsing module is in modules/PyParse.py.

简单说,就是在输入 Python 程序时,可以自动弹出一个列表框,它里面都是标识符,它有三个来源:

  1. __builtin__ 模块中的内置函数
  2. keyword模块中的关键字,目前还包括了self, as, True, False
  3. 从当前文档动态分析而来

不过没有对作用域进行处理,因为找不到一个好的分析器模块。

那么 UliPad 何时进行动态分析呢,要知道动态分析是挺花时间的,因此我采用了线程进行处理。那么主要在两个地方进行处理:

  1. 当装入文件时
  2. 当你输入了 ‘=’ 时 当你按下任意键时

动态分析的模块在 modules/PyParse.py 。

Update:

对于处理又改进了一下,因为使用线程,因此改为在按下任意键即进行分析,而不是只有’='号了,同时修改了对于import ,from, def, class之类的处理被跳过的Bug.

2006年08月23日

既然 NewEdit 改名为 UliPad, 那么版本也发布新的吧。下面是更新的内容:

新增功能:

  1. 当运行 Python 出错时,在消息窗口中出错提示行双击可以跳转到源文件的出错行
  2. 在目录浏览窗口中增加:在Win平台上打开资源管理器,文件和目录的拷贝、剪切、粘贴,目录搜索等功能,同时支持Ctrl+C, Ctrl+V, Ctrl+X的快捷键
  3. 在Django目录下,可以启动测试服务器和打开Shell窗口
  4. 光标在某些样式中,如注释,字符串中时,禁止自动完成
  5. 重新打开一个文档时,光标停留在原来的位置
  6. DDE功能的Socket服务端口可重用
  7. 增强Python文件中.自动完成功能。在from和import中支持.的自动属性选择功能
  8. 增加列块拷贝的支持。在选择前先要按alt,就可以选对列块了
  9. 增加列模式,按Alt+C进行切换。在列模式下可以输入一个字符,自动在其它行出现
  10. 增加对Python文件的缩近拷贝的支持,可以在参数设置中关掉些功能
  11. 增加在自动检查需要装入文件时是否需要确认的选项
  12. 增强自动完成,可以支持控制字符组合了,不过菜单的组合键会先执行
  13. 增加对当前文档单独设置ACP文件的功能

新增插件:

  1. ruler 一个标尺

新增快捷键:

  1. Alt+C 切换列模式
  2. Ctrl+Del 可以删除当前位置之后的所以空白

修改:

  1. 在帮助对话框中显示链接,并可以点击
  2. 调整一些菜单的位置
  3. 括起菜单的快捷键为Ctrl+’,退出改为Ctrl+Q
  4. 消息窗口支持Wrap功能
  5. 对DjangoProj插件进行改进,可以动态修改settings.py
  6. 打开文件时进行Unicode转换时使用replace参数
  7. 修正判断Python文件编码不正确的Bug
  8. 修正语法配置文件读取时中文字体名未做转码的bug
  9. 修正正则表达式替换不精确的bug
  10. 修正自动检测缩近符不正确的bug
  11. 修正在编辑html的js代码时总有波浪线的bug
  12. 修正新打开文件时,光标停留与原来不太一致
  13. 修正当按回车时,如果移到可视区下面,则看不到的bug
  14. 转换项目中的Tab缩近全部改为4个空格缩近
  15. 去掉关于对话框中的版本revision号

这个名字是德国朋友给起的,还不错。不过改名字可不是件容易的事,因为许多地方都是相互关联的。象svn, wiki,源文件,还有许多的Blog。有些是很难改的,至少以前的Blog不会更改了。以后的内容尽量使用 UliPad 这个名字。希望尽快发布一个新版本 3.3吧。

对于运行来说,原来是 NewEdit.py或NewEdit.pyw现在改为 UliPad.py 或UliPad.pyw。如果你做了快捷方式请改一下属性。对于从原来的版本直接升为 UliPad 版本,你需要将newedit.ini改为ulipad.ini,如果在启动时出现问题,将newedit.ini删除,虽然以前的配置丢了,不过问题不大。

UliPad的Logo改了一下,图标也换掉了,不在使用M$的MSN Explorer的图标了。

邮件列表创建了一个新的      http://groups.google.com/group/ulipad,原来的还可以使用。svn以后考虑再换。

svn现在改为: http://cvs.woodpecker.org.cn/svn/woodpecker/ulipad/trunk

以后与 NewEdit 相关的Blog都会改成 UliPad。

Update:

关于UliPad的来源

Claudio Grondi said:

As we are on the way to make NewEdit THE programmer editor I think, that
a new unique name will help here much (NewEdit is just cheap…).

I suggest to use ‘UliPad’.

It has the shortcut of UnLImited.
It tells it is a plain text editor (Pad).
It tells something about the original author (LImodou).

But the most important advantage is:

 Google has no entry for ‘UliPad’ yet!

2006年08月22日

以前是每个文档都对应一种词法分析的名字,如 Python, html 等,因此自动补全文件也是针对词法分析的名字来的。但这样存在一些问题。比如象 reStructuredText 就没有一个标准的后缀,很难根据后缀指定它的词法分析名,因为它可以是.rst或.txt。因此现在开发了可以为某一文档选择你要使用的自动补全文件。

如果你要使用,先要下载最新的 NewEdit 的源码,或者从svn中同步。在文档菜单中有一个Apply Auto-complete Files的菜单,选中它就可以弹出一个对话框,其中静态文本表示缺省的自动补全文件,下面的列表框是已经选中或未选中的自定义补全文件。这样你可以方便地在编译一个.txt文件时指定它为某种特殊的格式,从而应用某种自动补全功能。

同时自动补全进行了增强,可以在自动补全文件中使用Ctrl, Alt, Shift, 功能键等的组合,要求必须放在匹配串的最后,用 % 号包括起来,如:

Test%ESC% = Test a line

这样当你输入完Test后,按下ESC时会执行后面的处理。关于具体自动补全功能的使用还请查阅以前的 Blog 。

NewEdit 可能要考虑改名了。这是德国朋友的建议,不过因为涉及许多要修改的地方,一时还没有动。等到有合适的机会改一下,换个新气象。

今天 Isomer(GoogleTalk Bot的首创者)告诉我一个链接:

http://en.wikipedia.org/wiki/Google_talk#Multi-user_conversation

从链接地址上可以看出是英文百科上的一个链接,不过很可惜我访问不了。于是我问他上面写得是什么东西,内容如下:

Multi-user conversation

There is also no official conference or chat room feature, meaning that users can talk to only one person at a time; however, a user-created Python script enables a chat room to be hosted by users with unused accounts.[11] Users can join multi-user chats on other servers that support them (like conference.ursine.ca) using a Jabber.org client capable of multi-user chat.

能够记录在英文百科上也很有趣。

原文

这篇文章主要列举了一些作者认为 django 不足的地方,我已经将其转发到 Django 的邮件列表中了,不知道会有什么样的反响,不过我想一个成熟的团队应该勇于接受别人的批评,只不过我不知道会对 Django 团队有多大的作用。其中几点,其实不光是作者也是许多其它不喜欢 Django 所想的,比如模块结合过于紧密,虽然是可替换,但代价是你无法再使用 Django 的一些功能了。而 Django 本身提供的一些功能,如ORM, Template还在功能上存在不足。

对于 ORM 我已经渐渐习惯,的确 Django 目前还没有连接池,而 SQLAlchemy 提供了。不过要让 Django 在 ORM上作改动可能很难,动作太大,可能的一点就是再改近 Django 的 ORM。不过至少 Django 的 ORM 的关系映射作得还算不错。

对于 Template 的确我认为有许多的不足,比如经常在邮件列表中看到需要动态计算和赋值的处理,而 Django 的模板是不支持的。我已经写过三个 Tag 放在了 Django 的 Wiki 上:expr, catch, call。我认为还是非常有用的,而且在这些问题的回答中我也经常把这些 Tag 的地址告诉他们。

特别是我很早对于 Django 的 settings 感到不满,特别是在邮件列表中发表将 settings.py 替换成文本的邮件和曾经提出不需要设置 DJANGO_SETTING_MODULE 的环境变量的请求,对于前者被广大的 django 开发者所拒绝,对于后者 django 后来增加了 manage.py 来解决(当然不是因为我的缘故),但仍然解决不了在其它非 Django 应用中方便使用的问题,特别是如果我希望在 NewEdit 中进行 Django 的辅助编程,在处理导入模块中这个问题特别严重。而且 django 自身与你自已的项目结合过于紧密,以至于 django 的核心部分与你的应用基本上是分不开的,因为导入 django 的一些模块时,也要自动导入 settings.py ,这样同时也就将你的项目中的 app 也进行了处理。

好象大家在看我发牢骚,其实不然,每个软件可能都有让你不满意的地方,首先是不满意才可以进行改进。Django 虽然有一些问题,但它的优点则更多,否则不会有这么多人使用。技术的东西光靠市场是没用的,Django还是不错的。随着它的发展,希望可以变得更好。至于上面提到的问题,也许可以解决,也许不会解决,项目不是你的,就会有这样的问题。NewEdit不也是这样。而且别人向我提出一些关于 NewEdit 的功能时,有些我认为好改就改了,有些不好改就先算了,永远无法让任何人都满意。因此我如果想你接受一件事物,就不要太挑剔,否则你什么都没有。

2006年08月21日

原文

这篇文章讲述了 Guido van Rossum 与 django 的关系,从一开始 Guido 想要了解一些框架开始,从哪时起 django 就已经映入他的眼帘了,只不过那时 Guido 使用的还是 0.91 magic 版本,许多地方可能不尽如人意。在后来随着 django 的不断发展,Guido 在最新一次的 FLOSS weekly 的采访中再次谈到了 Django 。就在最近召开的(8/17-8/18)SciPy 2006大会上 Guido 又强调了几点:

* Django is the web framework.
* It won’t be included in the standard library because of different development cycles, but will (should?) be as “standard” as PIL or NumPy
* He hopes that Django and TurboGears will converge

说明 Guido 对 Django 还是很重视的,而且 Django 团队也在 google 进行过交流。从宣传方面来说 Django 的势头很猛,我想一方面 Django 是一个完整的团队,另一方面它的人数比起其它的可能要多一些,也许有足够的精力去出席各种宣传活动吧。

当然 Guido 的看法是有影响的,但并不是用来左右你的想法,到底哪种web framework适合你,我想有许多的因素,每种框架有许多的特点,如设计哲学,特性,依赖条件等等,只有你的思维方式和习惯特点能够与框架相融合才会学起来轻松和有兴趣。

 

Technorati Profile