2004年07月29日

原文阅读

这篇文章乍一看,以为是告诉你如何选择合适的工具进行开发,其实不然,它是作者的一个报怨。此文的作者报怨说:他想要做一个叫Helium的项目,而且他认为使用 Python 是正确的工具。这个项目要用到web应用开发。当他相要找到一个合适的平台来做时,发现有太多的选择,无所适从。而且还有就是这些项目有些不成熟,并且不能保证今后还会有发展。并且没有他们所需的对象关系映射工具,而且Python的灵活性可能带来更多的不同意见。因此他们最终选择了Java来实现。尽管这样,作者还是希望以后的项目使用Python来做。

事情可能的确是这样,Java平台的架构已经成熟,而Python呢?仍然有多种选择,象上文的评论所列举的:Zope, Quixote,  webware, twisted等。但都没有强力的技术阵营进行支持与推动。

这篇Blog Web applications (again)提出了一些建议。

这是一篇介绍了现在新出的几种语言的Blog,阅读:

New programming languages

Goovy 是运行在Java下的动态语言,吸取了Python, Ruby, 和smalltalk的特性。又是一种类Python的语言。

Boo我以前的Blog已经介绍了。针对CLR,可以在dotnet和mono下运行的类Python动态语言。

Cw是C#的一种扩展,微软搞的,干什么用的,你自已看吧,我不清楚了。

你认识他吗?我是今天才知道。这都是看了Blog才知道的,象前面我介绍过 IronPython ,就是他的作品,他还做过什么你知道吗?这里是他的网站:http://hugunin.net/ 上面有介绍:

I build tools that let software developers express their intentions as simply and directly as possible. I’m the creator of JPython/Jython, the co-designer of the AspectJ language and chief architect for its compiler and related tools, and the creator of Numeric Python/NumPy. Each tool was developed in cooperation with an active user community and all three continue to be used extensively today.

看看吧,Jython的创始人, AspectJ(面向方面编程的Java实现语言)的共同设计人,NumPy的创始人。现在又搞了一个 IronPython ,牛人啊!

他已经去微软工作了,致力于在CLR平台上的动态语言方面的事情。

想了解Jython的历史去看看上面的链接吧。

boo 是一种类 Python 的新语言,主页在:http://boo.codehaus.org

请注意,它不是Python的实现,而是从Python获得灵感而来的新的语言,虽然与Python很象,但它是dotnet上的开发语言。我下载了一个,试了试例子。没有全试,有winForm的,还有别的。有些成功,有些还报了错,不知道是不是我的环境有问题。

根据主页上的说明是可以生成EXE的,我按照说明生成了一个,的确可以,是HelloForms.boo的,生成了两个文件:HelloForms.exe(2K)和HelloForms.pdb(11.5K)。不过运行HelloForms.exe却打开了一个命令行窗口,不知是为什么。

以后就没有再测试了,看看以后发展吧。

不过也说明,Python语言在国外受欢迎的程度,尽管国内还差许多。这样我已经知道两种可以在dotnet上运行的Python或类Python语言了: IronPython 和 Boo 。

IronPython 是什么,它是一个新的Python实现,它将运行在dotnet和mono平台上,现在已经公开发布了,可以去它的主页去下载:http://www.ironpython.com/ 。现在的版本为0.6,一个预览版。

这是一个它的介绍:

IronPython is a new implementation of the Python language targeting the Common Language Runtime (CLR). It compiles python programs into bytecode (IL) that will run on either Microsoft’s .NET or the Open Source Mono platform. IronPython includes an interactive interpreter and transparent on-the-fly compilation of source files just like standard Python.

详细信息请去它的主页看,我会经常关注IronPython。

今天看到Hans Nowak的一篇Blog,是关于 Python 中模糊不清的地方,但却有惊人的表现。点这里进行阅读:Dark corners

主要的意思就是说:某些情况下,在实例中对原来类中的特殊方法重载后,在实例中调用时,并未调用实例中的方法,而是仍然使用类中的方法。但有些情况,又是使用实例的方法,而不是类的方法。总之,这是一种不易觉查的情况。

2004年07月28日

现在国内的Blog不敢说稳定,三天两头的关,再有就是出问题。这不Donews也出现过,我有几张图片(虽然不多)但还是丢了,我也懒得去找了。于是就提出建议,是否可以自已做备份。大鱼儿说很快,但是多快,还说不准。想起一个叫webeditor的软件,以前用过,可以与donews连上,但现在不知怎么连不上了,它可以实现Blog的备份。曾经与forestsong讨论过自已写个备份程序,但。。。不过现在我终于写了一个小Python程序,可以实现备份了。

这个程序只能用在donews上,使用前要修改一些配置。下面是整个程序:

import xmlrpclib
import os.path
import os
import codecs
import traceback

name = ‘yourname’
password = ‘yourpassword’
dir = ‘./blogback’
url = ‘http://www.donews.net/<yourname>/services/metablogapi.aspx’
number = 9999
encoding = ‘cp936′

htmltemplate = “”"<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=%(encoding)s”/>
<title>%(title)s</title>
<style type=’text/css’>body {font-family:Verdana,Sans-serif; font-size:10pt;line-height:150%%;}</style>
</head>
<body>
<h2 align=”center”>%(title)s</h2>
<p align=”center”><a href=”%(link)s”>%(link)s</a> – %(date)s</p>
%(description)s
</body>
</html>”"”

def main():
    if not os.path.exists(dir):
        os.mkdir(dir)
           
    print ‘Connecting to server – %s\n’ % url
    server = xmlrpclib.Server(url)
       
    print ‘Getting posts number = %d\n’ % number
    result = server.metaWeblog.getRecentPosts(”, name, password, number)
    num = 0
       
    for v in result:
        filename = os.path.normpath(os.path.join(dir, formateFilename(v['title']+’.htm’)))
        v['date'] = getDateTime(v['dateCreated'])
        v['encoding'] = encoding
        print ’saving —- %s …’ % filename
        try:
            try:
                fp = file(filename, ‘wb’)
                writer = codecs.lookup(encoding)[3](fp)
                writer.write(htmltemplate % v)
            except:
                traceback.print_exc()
        finally:
            fp.close()
        num += 1
    print ‘\nFinished! Total %d posts be saved!’ % num

def getDateTime(d):
    a = str(d)
    return a[0:4]+’/'+a[4:6]+’/'+a[6:8]+’-'+a[9:]
       
def formateFilename(filename):
    s = r’/\<>?:*”|’
    f = ”
    for ch in filename:
        if ch in s:
            f += ‘%’ + oct(ord(ch))
        else:
            f += ch
    return f
       
if __name__ == ‘__main__’:
    main()

刚开始的几个变量,在运行前要进行修改:

name = ‘yourname’
password = ‘yourpassword’
dir = ‘./blogback’
url = ‘http://www.donews.net/<yourname>/services/metablogapi.aspx’
number = 9999
encoding = ‘cp936′

  • name是你的blog名字
  • password是你的blog管理口令
  • dir是你的blog要保存的路径,如果不存在,这个程序会进行创建
  • url是你的blog web services地址,因为是针对donews的,只要把替换成你在donews的用户名即可
  • number是要取的条数。它是从最新的记录开始向前取,我设为9999,就是想把全部的都取下来。以后再做备份,只有计算从上次取回后,还有多少条没取才可以。这里没有实现取指定条的功能,有兴趣自已改程序吧。
  • encoding是保存到本地文件时所用的编码。取回的数据缺省为unicode,因此要进行转码。cp936就是GBK码。

htmltemplate是一个HTML的模板。每个blog将保存为一个HTML文件,只包含内容。

本程序只是作备份,不能发新贴,编辑贴子。这些功能我没有试,而且donews使用的是codelphi改过的.text blog系统,加入了一些功能,不知道还能使用标准的metaWeblogApi来发贴吗?有时间试一试。或者谁试成功了,告诉本人一声,先谢谢了。

使用的技术是xmlrpc调用metaWeblogApi来实现的。xmlrpc可以使用python 2.2版以后所带的xmlrpclib模块,很简单,看一看程序应该就会了。metaWeblogApi是扩展了blogger的API,它是许多blog使用的web service的接口函数。webeidtor就是调用了这个接口实现的远程上传和下传。关于metaWeblogApi的详细说明可以看我前面的blog: [LINK]MetaWeblog API & 竹笋炒肉

下载地址:http://pyrecord.freezope.org/download/newedit_2.4r1.zip/down

新增:

1. 代码片段的导入和导出功能,可以导出或导入某个分类
2. 增加打印功能,支持HTML文档的打印
3. 增加psyco模块的加速支持,使用此功能要先安装psyco模块
4. 增加用户插件的管理功能
5. 在参数设置中可以设置新建文件缺省的语法高亮类型
6. 增加停止运行Python程序的菜单和工具条按钮
7. 运行Python程序时可以接收输入信息

修改:

1. DDE服务的端口可以在config.ini中指定
2. 修改打印帮助文件为全路径,且使用file:///协议
3. 修改在文件中查找时,双击结果文件行数跳转总多一行的问题
4. 修改当存在混合回车符时,保存文件出错的问题

有什么问题和建议,欢迎与我交流!

名字叫PyNSource,主页地址:http://www.atug.com/andypatterns/pynsource.htm

这是介绍:

A Python code scanner and UML modelling tool that generates

  •  UML diagram models that you can layout, arrange and print out.
  •  UML text diagrams, which you can paste into your source code for documentation purposes.
  •  Java or Delphi code (which can be subsequently imported into more sophisticated UML modelling tools, like Enterprise Architect or ESS-Model (free).)

Features

  •  Resilient: doesn’t import the python files, thus will never get “stuck” when syntax is wrong. 
  •  Fast
  •  Recognises inheritance and composition  relationships
  •  Detects the cardinality of associations e.g. one to one or 1..*  etc
  •  Optionally treat modules as classes – creating a pseudo class for each module – module variables and functions are  treated as attributes and methods of a class
  •  Has been developed using unit tests (supplied) so that you can trust it just that little bit more ;-)
  •  Free
  •  The significance of PyNSource (advocacy)…

一个演示图:

我下载了一个,但发现在wxPython 2.5上无法启动,在wxPython 2.4上没问题。不象我以前介绍过的pyUmlGraph,它是在运行时对类进行处理,得到的是整个应用的类图。但平时在设计中用得更多的是单个或相关模块的类图。用这个模块你可以不停的import新的模块,这样新的模块就可以与原来存在的模块并存,而不是一个新模块就是一个图。灵活性不错。同时它可以显示类的继承关系,对于在模块不存在的类,只有一个类名,不会去主动导入那个类来进行处理,这一点正是我想要的。因为我的关注焦点些时就是当前模块,而不是它的父类。

它提供命令行与图形界面,图形界面好象是用的OpenGL,不过无法保存。命令行生成的是ASCII格式的类图,不是图形的,多少有些不爽,希望这个模块越做越好。

2004年07月27日

MetaWeblog API是Blogger API的扩展,用来实现Blog的管理,如:发新贴、编辑、下载等功能。在竹笋炒肉上找到一篇关于它们的介绍,在此做一个记录:

http://hedong.3322.org/archives/000268.html

同时在Blog中得知竹笋炒肉因为单位内部的原因可能会关闭感到很可惜,希望这不是真的。

详情见:http://hedong.3322.org/newblog/archives/000081.html