显示标签为“Python”的博文。显示所有博文
显示标签为“Python”的博文。显示所有博文

2008年11月19日星期三

有关WingIDE和非自由软件

我用Python写的程序往往都很短,其实我觉得多数Python程序都很短吧。所以我就是在Vim中编辑,在命令行下运行Python程序,调试就靠print。在写4digits的过程中,代码越来越长,调试工作量增大,我考虑要用一个IDE。

Python的IDE第一个看点就是代码补全。也试过一些(号称)有代码补全功能的IDE,但都不是拿来就立刻见到补全功能的。WingIDE的代码补全却很赞,随敲随出。

我在Python主页的维基上看到WingIDE有免费的开源许可,就是说如果只用来开发开源软件,那么就可以获得免费的许可码。我按照要求,把开源许可的申请下载、打印,用手签名,然后电邮给公司。之后,他们就给了我注册码。我申请的是双操作系统的许可,这样我在家的Ubuntu和我在办公室的Windows上都可以用WingIDE。而且如果我再签一份保密协议,甚至可以获得WingIDE的源代码,真是太慷慨了。

除了代码补全功能外,WingIDE用起来很方便的功能还有调试。设置断点调试,程序暂停后,用鼠标指到代码中的任意名字,都会用气球方式的提示显示出该名字的值,非常方便。在调试中,可以在Debug Probe窗口中介入暂停的程序,其实就是一个保持了程序暂停时的执行状态的shell。有内置的Python shell,可以进行方便的交互操作。另外光标所在处的变量的类型、文档等相关信息,都可以自动在相关窗口中显示。

先不说WingIDE的强大和方便。这个软件是商业软件,并不是自由软件。我只有在实在没有满意的自由软件时,才会用非自由软件。Python是自由软件,但是最好的(我认为最好的,但不少人就喜欢折腾Emacs)Python开发环境却不是自由软件。其实,自由软件和非自由软件,不可能有哪个可以完全取代另一个,它们会动态地共存。我的Ubuntu下面,除了WingIDE,还有一些商业软件,如Picasa(非常棒的照片管理和润色软件),Google Earth(好玩的地图),Skype(可以跨平台地语音聊天),Adobe Reader(备用的PDF查看软件),Opera(备用的浏览器),腾讯QQ(备用的QQ软件),微软的若干TTF字体(并不侵权)等。

有个叫vrms (Virtual Richard M. Stallman) 的程序,可以列出计算机中的非自由软件。我的目前是这样的结果(并不全):
tux@Paradise:~/docs $ vrms
Non-free packages installed on Paradise

autobook GNU Autoconf, Automake and Libtool Book
Reason: Modifications limited
cmap-adobe-cns1 CMaps for Adobe-CNS1
human-icon-theme Human Icon theme
latex2html LaTeX to HTML translator
linux-restricted-modules Generic Linux restricted modules.
linux-restricted-modules- Non-free Linux 2.6.27 modules helper script
linux-restricted-modules- Restricted Linux modules for generic kernels
opera The Opera Web Browser
picasa Image management application from Google
stardict-langdao-ce-gb langdao-ce-gb dictionary data files for StarDict2
stardict-langdao-ec-gb langdao-ec-gb dictionary data files for StarDict2
stardict-oxford-gb oxford-gb dictionary data files for StarDict2
sun-java6-bin Sun Java(TM) Runtime Environment (JRE) 6 (architecture
sun-java6-jre Sun Java(TM) Runtime Environment (JRE) 6 (architecture
sun-java6-plugin The Java(TM) Plug-in, Java SE 6
tangerine-icon-theme Tangerine Icon theme
tango-icon-theme Tango Icon theme
Reason: Creative Commons Attribution-ShareAlike 2.5 License
unrar Unarchiver for .rar files (non-free version)
Reason: Modifications problematic
wingide3.1 A commercial development environment for Python

Contrib packages installed on Paradise

dosemu The Linux DOS Emulator
msttcorefonts Installer for Microsoft TrueType core fonts

Contrib packages with status other than installed on Paradise

nvidia-kernel-common ( dei) NVIDIA binary kernel module common files

19 non-free packages, 1.0% of 1827 installed packages.
3 contrib packages, 0.2% of 1827 installed packages.
以前觉得安装这些软件会让计算机变得不够纯洁,现在已经没法避免它不纯洁了:D。

2008年11月5日星期三

Python中浮点数的输出

Python中可像在C中一样,借助格式串来控制浮点数的输出。共有e/E、f和g三种格式转换符控制浮点数的输出,f用小数形式输出,e用指数形式输出,用g的话当幂大于或等于6时用指数,否则用小数。e、f和g在小数位数方面有什么不同呢?我试验了一下(Python版本是3.0rc1+):
>>> f=1/70
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.429e-02 0.014 0.0143
对e/f/g都指定精度为3,结果e输出了4位有效数字(3位小数),f输出了3位小数,g输出了3位有效数字。再来一例:
>>> f=1200000
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.200e+06 1200000.000 1.2e+06
e和f依旧输出3位小数。但g只输出了两位有效数字,是因为再多的有效数字都是结尾的零,为了好看就没有输出。下例也证明了这个说法:
>>> f=1.2
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.200e+00 1.200 1.2
上面两例中,e和f都忠诚地输出了无用的零,但g却尽可能输出简洁的结果。

f这种输出固定小数位数的方式在某些地方是有用的,比如一系列代表权重的数字,我们希望它们的小数位数一样,这样加起来能够正好等于1。在类似场景中,e也同样适用。g可以给出最清晰的输出,但是不保证输出结果中有效数字位数或者小数位数等于指定的“精度”。

另外,既然格式串能够控制输出小数位数,在程序中就不需要round函数了,这样可以保证计算的精度。只需在输出的时候用格式串来控制小数位数。

上面提了有效数字,想搞清楚有效数字到底是啥含义,却发现维基百科上没有这个条目,顺手创建了有效数字的条目,结果发现我自己也说不清楚 = =。

2007年5月31日星期四

记谷歌开发者日


Guido van Rossum

今天我参加了谷歌2007开发者日。要不是水木的mirror怂恿,我大概就不会来的。因为我俩都喜欢Python语言,他让我去瞻仰Python的发明者Guido van Rossum日程安排在此处,同时进行的会总有两个,一个关于谷歌应用程序编程接口,另一个关于Linux和开源,我只感兴趣后者。Guido演讲的主题是Python语言的历史、现状和未来,内容都是关于Python的基本的东西,Guido的语气也比较平淡。

大家的提问很多,都写下来交上去的。最后一个问题是我的,念到我的问题时Guido露出了一点惊奇的微笑,我的问题是"I am sorry, but what's the official pronunciation of your name? |'gaidəu|, |'gidəu| or |'gwidəu|?",因为我听到主持人念作|'gwidəu|时觉得很别扭。他回答说,他父母叫他|'ridəu|,在荷兰语里面是这么发音的,也可以叫|'raidəu|,但是汉语里面没有|r|这个音;美国人一般叫他|'gwidəu|或者|'gaidəu|,不过他对什么样的发音都会答应。这里我用|r|表示他发的“喝”这个音,因为它和英语的|h|不同,倒是像法语的|r|。我不知道荷兰语里面他说的这个音怎么发,有谁知道告诉我一声。演讲后我发给他听,他表示认可。

Guido比我想象的要高,因为以在照片里看不出来身高。演讲之后我问他多高,他说是186cm,啧啧,比我高10cm啊。我和他照像时候他坐着我站着,照出来不好看,后来又照了一张,就是上面的,但因为没有打闪光灯,所以黑黑的,尤其是把Guido弄得比我黑,对不起啊。

我又问了两个问题。一个是python的交互外壳功能比较少,以后会不会用ipython作外壳。他说不会,因为ipython发布新版很快,而python发布较慢,而且要让核心语言尽可能小。另一个问题是会不会用wxPython或者PyGTK来替代Tk作为Python的默认图形界面工具包。他说不会,因为wxPython和PyGTK都没有Tk稳定,wxPython如何如何初始化会崩溃,而Tk很稳定,但由于基于网页的应用越来越重要,客户端软件就显得不那么重要了,以后有可能把Tk从Python中去掉,即默认的Python不包含图形界面工具包。

吃饭后我才发现我把发的T恤拉在二楼了,里面可放着Guido的签名呢。赶紧下去找,可惜早就被收拾掉了,真是对不起他:-(。晚饭中间,女主持让大家畅所欲言,发表感想。上去说话的都是国人,都讲中文。我看到Guido趴在桌子上休息,大概因为累了,而且听不懂中文,所以很没劲。后来上去一学生讲英语,Guido就起来了,最后竟然还鼓掌了。看到他这样子,偶像级别的人物开会时候也要应付,就觉得有意思。

其他人

在Linux和Open Source分会场第一个演讲的是Jon Trowbridge,语言和动作比较随和,演讲起来很有激情,以至有人问他“Why are you so exciting?"。第二个是Mike Schroepfer,介绍了Firefox开发相关的情况。他的幻灯片是在Mac下做的,深蓝底色上的白字,在会场的灯光下看起来很清楚,每页的字少所以足狗打,算是所有幻灯片里面做得最好的。下来就是Guido了。最后是苏哲,他的演讲稍有些偏技术,介绍编码系统、wchar, locale, gettext等,用了不少代码。我觉得听众比较多的时候,往往大家水平差异较大,这时讲通俗点效果更好。我问了苏哲两个问题。一个是scim何时能有按句输入功能,因为苏哲曾经说按句输入要比按词输入先进。他的回答是scim有这个功能,但是正确率很低,所以大家都不用,想用这个功能可以等待谷歌输入法的Linux版。另一个问题是智能拼音的繁体输入为什么没有词组,他说因为他没有繁体词库。

总结

今天见到Guido是我最开心的事情,另外能听到四场精采的演讲也很不错。这是一次成功的会议,Google和开源社区都会受益不少。

2007年4月4日星期三

选择:PyGTK

从我第一次接触电脑至今都有十年多了,可是一直没有学习图形界面编程。因为一是没有迫切的需求,二是后来已经习惯了GNU/Linux下的命令行程序。后来我老师看我写的都是命令行程序,他说没有“界面”怎么行。没办法,我得认真地学习图形界面编程了。

Linux下的图形界面编程有很多种库,对我可选的有GTK, PyGTK, wxWidgets, wxPython, Qt, PyQt等,甚至Java。因为我一直用的GNOME,而且喜欢GNOME胜过KDE,所以Qt和PyQt很快就被排除了。学过一点GTK编程,但是每次修改后要编译较费时间。而wxWidgets一点也没有接触,对那些语句比较陌生,所以排除了wxWidgets。Java程序比较慢,而且以前Java不是自由软件,所以我没有去学习,没有经验。Python倒是学过一些,希望能用在图形界面编程上,这样起步比较容易。下面就是二选一了:wxPython还是PyGTK呢?wxPython的程序在Linux下是GTK风格,在Windows和 Mac下的外观和操作系统风格一致,而PyGTK在哪都是GTK的外观。

尽管如此,我最终选择了PyGTK。因为我的操作系统是Linux,而且也不会用Windows和Mac(都不是自由软件),所以不必过于追求外观的跨平台一致性。

现在看来,我的选择没有让我后悔。

2007年3月12日星期一

Windows下安装PyGTK


因为我的老师喜欢图形界面程序,周末我又学PyGTK,写出了我的第二个图形界面程序。这个程序就是上次说的OpenCV摄像机标定程序的图形前端。虽然我平时不用Windows,但是为了给老师演示我写的程序的跨平台性,我打算在Windows下也运行一下这个程序,所以需要在Windows下安装PyGTK。

PyGTK的首页有一个某人做的多合一的安装包,下载安装,然后双击一个简单的文件选择对话框的Python文件,界面就出来了,非常的简单。我又双击我的标定程序,这次没有出来。进入命令行一看,原来没有找到gtk.glade模块。看来这个多合一安装包里面还没有python-glade。我找了一上午竟然没有找到,主要是不知道在哪个包里面。中午回来在Freenode的#python频道里面问到了。根据PyGTK FAQ上的指示,到gladewin32下载libglade-bin,把其中bin目录的内容释放到gtk安装目录的bin目录即可。下午趁师妹还没来(怕影响她用电脑),在她电脑上装好了。之后双击我的程序,图形界面就出来了。在Ubuntu下写的程序,一字未改就能在Windows下运行了。虽然这是我预想的,但是亲自动手实现,还是让我佩服了这些程序一把。这些自由/开源软件的跨平台性,可绝不是浪得虚名。我也又体会了一次小小的成就感。