2005年09月30日

 地址: http://oss.gucas.ac.cn

参赛方式

   * 参赛对象:中国科学院所有在读研究生、各研究所青年员工以及高校学生均可组队参加。参赛团队由一至四名成员组成。

   * 作品要求:见附录A

   * 报名时间:大赛于2005年9月15日启动,所有参赛团队必须在9月25日-12月18日之间提交报名表到大赛专用信箱。

   * 关于报名表:报名表在大赛主页上下载。团队负责人统一填写"开源软件设计大赛报名表",并将其发送到大赛专用信箱。大赛主页和大赛专用信箱见"大赛注意事项"。

   * 作品的提交: 2006年2月15日前提交参赛作品设计文档(设计文档要求见附录A)到大赛专用信箱中。
2月下旬举行初赛。组委会根据提交作品情况,提前通知提交作品的参赛团队是否有资格参与初赛。所有获得资格的参赛团队必须在承诺书上签字(见"竞赛章程"
第五节"知识产权问题")。之后分成几个组进行初赛答辩,参赛团队应携带参赛作品(准备好运行环境),详细设计文档,并准备好演示文稿。经过评审委员会的现场评审,评选出前10名进入决赛。
2月下旬,进入决赛的团队携带作品(准备好运行环境)及详细设计文档、演示文稿到指定地点参与决赛答辩。

此次比赛的流程与我的 NewEdit 参赛流程基本一致,只是主办方不同。有兴趣的参加啊。

参赛团队最多四人,没有作品的可以考虑赶紧写一个。

看到GTalk Club团队里介绍了.net下的一个转换GTalk聊天日志的程序,然后就拿Python实现了一个。原本以为挺复杂的,后来发现,GTalk保存日志信息就是将XML报文使用urlencode进行了编码,而且这个XML报文是使用utf-8编码的,因此只要反向转回来就行了。程序如下:

import sys
import os.path
filename = sys.argv[1]
fname, ext = os.path.splitext(filename)
fout = fname + ‘.txt’
import urllib
file(fout, ‘w’).write(urllib.unquote_plus(file(filename).read()))

将其保存到GTalk的日志存放目录。运行如下:

Python s.py xxx.log

s.py为保存的python程序名,xxx.log为想要转换的一个log文件名。需要在你的PATH中设置Python解释器的路径。执行后会生成一个xxx.txt的文件就是转换后的结果。

程序很简单,不想在图形界面上花费时间。

在以前我曾经写过一篇 blog 介绍使用 pyTTS 模块可以调用 Microsoft 的TTS(Text to Speech)库,可以阅读中文和英文,昨天我实现了一个简单的 NewEdit 插件版本,它可以对选中的文本或整个文本文件进行阅读,并可以根据中英文自动切换。大家下载最新的 NewEdit 源码(svn)就有了,但要设置一下插件。

但在正式使用之前你还需要安装 Microsoft 的 TTS开发库,我安装了两个文件:speechsdk51.exe(67.9M)和speechsdk51LangPack.exe(81.5M)。然后再下载 pyTTS 模块。

使用时,选择 Document->Start Read Document 开始朗读,选择 Document->Stop Read Document停止朗读。如果想调整阅读速度,调整 Preference->Document->TTS Speak Rate 的值。负数变慢,正数变快。

现在的问题就是还不知道如何设置英文阅读者的语音。因为我采用xml标记的文本处理方式,只指定了朗读的语言,但不知如何设定使用哪种语音。中文还好办,就一个男声。而英文却有三个,不知如何设置。但已经基本可以使用了。

NewEdit 的扩展分几种:

  • 简单的Script扩展,主要用于对文档数据的处理
  • Plugin扩展,使用与NewEdit核心开发相同的技术,但可以由用户选择装入,功能强

Plugin 目前是放在 NewEdit 的 plugins 目录下。在以前的处理中,插件都是放在这个目录下,基本上没有子目录的。插件少了还行,但插件一多维护和管理就是一件麻烦事。在开发 Wizard 这个插件过程中,用户的wizard功能就是以文件夹形式组织的,于是我把这个想法也在 plugin 中进行实现。那么现在 NewEdit 的插件在 plugins 目录下就是一个个的文件夹。每一个文件夹就是一个plugin,它们被组织成 Python 包的结构。因此每一个目录都有一个__init__.py文件。同时每个插件都有自已的配置文件,它们以.pin结束,文件主名不限定,你可以任意起。因此最小的一个插件就是一个__init__.py和一个.pin文件。

下面以一个比较小的 pythondoc 插件为例,它是用来在帮助菜单上增加一个菜单项,可以选择打开 Python 的帮助文件。它的目录结构目前为:

pythondoc\
     |
     `——__init__.py
     |
     `——pythondoc.pin

经过这样的调整管理维护 NewEdit 的plugins要容易多了。

2005年09月29日

NewEdit 新增了 Wizard 功能,它是与 EasyGui 功能结合的成果,但不限于只是使用EasyGui,你仍然可以在它无法满足你的需要时自已写Wizard处理,只要满足一定的要求,这个以后再提。下面演示一个最简单的 Wizard的生成过程。如果你想测试,请通过svn下载最新的源码。另外你还需要下载并安装 Meteor  模板系统。

什么是Wizard功能呢?

我是这样设想的:

  • 提供一个代码的模板或代码的框架
  • 提供一个录入用户可以更改数据的窗口
  • 将模板或框架与用户录入数据结合生成最终结果,这个结果可以直接插入到当前文档中,或打开新文件,或保存为一个指定文件并打开,或执行一系统的文件操作生成一个代码框架

目前 EasyGui 已经具备了上面的功能,除了与编辑器结合的部分。因此这个Wizard功能在NewEdit中就使用 EasyGui 来实现的。同时为了扩展,Wizard还可以直接满足Wizard接口的程序调用。

Hello例子

1. 存放你的wizard文件

直接的方式是放在NewEdit 的wizard目录下,如果不存在这个目录你可以手工创建。再有就是你可以在config.ini中设定除wizard以外的存放wizard的目录,格式为:

[wizard]
path = path[,path]

可以有多个目录,中间使用’,'号分隔。

一个wizard功能就是一个文件夹,因此我们先给这个文件夹起一个hellotest。这样目录结构为:

wizard\
    |
    `——–hellotest\

2. 生成wizard所需要的文件

一个wizard功能最少最要两个文件,一个是后缀为.wiz的配置文件,它用来定义这个wizard的一些配置和功能说明。这个文件只要后缀为.wiz即可,文件主名没有要求。另一个是 EasyGui 的资源文件。在本例中要实现模板替换,因此还需要一个模板,因此这个例子一共有三个文件。

  • hello.wiz (配置文件)
  • easyHello.py (EasyGui资源文件)
  • hello.py (模板文件)

hello.wiz 文件内容:

[options]
name = u"Hello 测试"
#’wizard’ or ‘program’
execute = wizard
file = easyHello.py

#how to output processed content
#’inline’ will insert content into current position of opened document
#’save’ open a dialog to save the file
#’newfile’ create a new file in Editor
output = save
encoding =

目前所有项都放在options节中。分关键字进行描述:

  • name 模板名字。如果有中文需要使用u""来表增,编码目前为操作系统编码。关于这一点有可能调整。建议使用英文名字
  • execute 执行方式,如果为wizard,则表示是一个EasyGui的资源,则会按照EasyGui的方式进行处理。如果为program则表示是一个扩展程序,信息录入,模板替换则完全由你来编码,只要按照约定来编写并返回结果即可。
  • file 对于EasyGui方式为资源文件名,对于扩展程序来说为执行模块,Wizard处理将导入它并执行。
  • output 输出模式。如果为inline表示结果将插入到当前文档的当前光标位置;如果为save表示显示一个文件对话框,指定保存文件然后将结果保存进文件,再打开;如果为newfile则创建一个新文件,将结果保存进文件中。
  • encoding 编码方式,指定EasyGui或扩展程序的编码输出。在NewEdit中都是使用unicode的。

easyHello.py 文件内容:

#coding=gb2312

title = ‘Hello, EasyGui’
dialog = [
    ('string', 'username', '', u'请输入用户名', None),
    ]
templatefile = ‘hello.py’

这是生成一个 EasyGui 的对话框资源,它将输入一个用户名,返回将是一个dict,键字为 ‘username’。它定义了一个templatefile,这表示输入结果将与这个模板文件相结合,生成最终的结果。

hello.py 文件内容:

#coding=gb2312

from meteor import *

var = T("Hello, <#username#>,你好!")

这是一个按 Meteor 格式定义的模板文件,而Meteor是用在 EasyGui 中的模板系统。它定义了一个模板变量 username与上面的资源文件中定义的变量是对应的。

安装Wizard插件

完成这些工作,你需要安装 Wizard 插件,如果是从 svn 上下载的最新的源码,则不必再下载了。然后进入 Tool->Plugins Manager下,选中wizard插件,点击确定后,并重启 NewEdit

运行Wizard

重启后你会发现在工具条上新增了一个Wizard按钮,在打开底部窗口按钮的左边或在窗口菜单中有一个Open Wizard Window菜单。点击后会显示出Wizard侧边栏。你应该可以看前面写好的wizard了。如果你做了修改,可以点击刷新按钮来动态刷新而不必重启。想运行,双击"Hello 测试"条目即可。

2005年09月28日

NewEdit 一直都在 tigris.org 上,但是平时使用时感觉cvs太慢,而且subversion用得多了还是感觉svn要好一些,特别是在 TortoiseSVN 的帮助下使用svn真是爽啊。以前在啄木鸟也建议了svn,但因为怕啄木鸟不稳定,而且希望引起国外的朋友关注,因此也一直没有换过。但我本人并没有大力宣传 NewEdit 这个编辑器,一个人做的精力有限啊,因此还是希望使用上更方便,花了些时间转到了svn上。访问地址:

http://cvs.woodpecker.org.cn/svn/woodpecker/newedit

而且这段时间正在进行 NewEdit 的升级中,包括可以设定图片为png格式。因此可以将整个NewEdit的小图标全部换掉,但是有一些图片找不到对应的(我不是直接将gif转为png格式,而且希望换一套图标),因此没有上传。

还有增加了 Wizard 功能(已经在svn中),因此你可以编写自已的模板程序,录入数据,然后生成结果。它是 EasyGui 项目与NewEdit的结合,也是我一直想做,基本上完成。它已经支持模板的多层嵌套,运行时刷新,可以将结果添加到当前文档中,或打开一个新文件,或执行一个框架的文件处理功能。而且你可以直接使用EasyGui来处理,也可以自已写代码,只要满足调用的要求(这块还没有仔细测试过)。

特别是我已经升级了我的ubuntu,安装了wxPython 2.5版本(找不到更高的,也不想自已去编译了),NewEdit 在ubuntu下需要改一些东西就可以运行起来了。

关于 Wizard 是一个很有趣的东西,我会另写文章来进行介绍。

2005年09月27日

随着使用 django 开发的网站越来越多(说的是国外,国内还没有听说哪个网站是基于Django开发的),于是有人设计了 "Powered by Django" 的徽章,可以放在主页上。地址在这里

下面拷贝了一些,大家有兴趣看一看:

还有一些,大家自已去看吧。

BTW,Django 教程的第4部分也出来了。

昨天在看计算机世界时,看到英语时文栏目介绍了 Python ,让我感到很高兴。仔细地读了读。今天就把这个消息写在这里,本来想找到最新的网上链接,但报纸昨天才出,本周的内容还不在网上,因此无法给出链接。

英语时文栏目我其实以前是非常感兴趣的,那时在学习PHP,当时翻译了许多文章。但有些术语什么的有时翻译得不了,而英语时文栏目每期都有计算机方式的英文介绍,而且它的翻译水平相当高,又是中英文对照,对于学习英语科技翻译的人来说是一个很好的参考。于是,在当时我将许多的翻译文章取下来进行了整理,并且制作了一个搜索功能放在那时我的PHP主页上。这样如果有不好翻译的单词可以先查找原文,然后对照着中文翻译。当时收集了很多,但后来不再搞PHP了,主页也没有了。我也很少翻译了。不过这个栏目带给我许多的知识。这次看到Python被介绍,真是高兴。

2005年09月26日

创建邮件列表的好处自言不必言说,大家如果对这个软件感兴趣可以去 http://groups.google.com/group/NewEdit 订阅。你对我这个软件有什么问题,有什么建议都可以提出来。甚至包括使用 NewEdit 技术,代码和思想来开发你自已的东西都是欢迎的。

王珢的行为对我们关心中国教育,中国的IT,以及喜欢和崇拜他的人都有很大的震动,CPUG(中国Python用户组)特别关注这一事件,在 Python.cn 邮件列表中进行了讨论,同时在门户 http://python.cn 上创建了对此事件的投票箱。如果你关注此事,可以去那里投票表明你的态度。