2008年11月26日星期三

百科全书

我想查查摇滚乐的含义,就首先在维基百科上查,但是维基百科上的条目太长,而且前面提示该条目有几处问题 (multiple issues),就没看。又在大英百科全书 (Britannica)上查,但是在线版不免费提供,每隔几秒就弹出一个要求注册的框,很是讨厌。还试了试另一个网站,但条目看起来对我没有吸引力。我想起了几年前看过的微软的百科全书Encarta。这个可以免费阅读。今天把Rock Music的条目读完了。虽然我不懂摇滚乐,但还没把这篇长文读完时,就觉得质量不是很好。终于看完了,文章后面一句话小小得雷到了我:
Contributed By:
Chris Waterman, B.Mus., M.A., Ph.D.
Professor and Chair, Department of World Arts and Cultures, University of California, Los Angeles. Author of Jùjú: A Social History and Ethnography of an African Popular Music and other publications.
敢情这摇滚乐的百科全书条目是一个人写的啊。最起码应该由若干专家共同完成。我对前面阅读过程中对其质量的不满意度也更加确信了。还有一点,这篇文章是从美国人的语气出发的,作为百科全书条目显得不够中性。

我想看看Encarta到底是啥水平。我就查Linux的条目(这往往是我在测试搜索引擎时首先用的词汇),更加让我失望了。Linux的条目只有七段文字,没有小标题。第一句话:
Linux, computer operating system using open source software.
这话把Linux定义为“使用开放源码软件的操作系统”,实在不太恰当。整篇文章多处表意不准确,将会误导不熟悉主题的人。另外,Encarta的网页中没有清晰的文章分类、参考文献,知识体系较分散,Linux这种快速发展的东西的条目更新也太少。

从今晚的阅读中,我得出的结论是:作为在线百科全书,维基百科比Britannica和Encarta都好。

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月8日星期六

一点点慈善

记得还在上大学时候,我在水木清华BBS的LinuxApp版面一个主题中发帖说,等我毕业工作后就向Debian捐款,JulyClyde回帖说,你那点工资,把自己养活了就不错了。他这么说是因为他知道我未来从事的职业。

2004年,我办了一张招商银行的信用卡,之后又在PayPal注册。当时是为了能在因特网上无国界地交易,但我忘了是不是为了给自由软件捐款。我注册了PayPal后,在账户得到认证前试了一下Send Money的功能,账户就被限制了。之后一只没有解限,直到今天依旧。这完全是他们愚蠢的系统造成的,而且还白白扣除了我1.95美元。

如果我的PayPal账户是好的,这几年我肯定兑现了我给Debian捐款的诺言,也就几百块了。时过境迁,如今我已是一个Ubuntu用户了,和Debian的关系也弱了,但我也没必要给Ubuntu这个用钱砸出来的发行版捐款。

这几天看到维基百科页面顶部有捐款的链接,那就给这个伟大的项目捐款吧,但是需要PayPal的。我刚注册了一个新的PayPal账户,本以为要经过若干认证之类的过程才能捐出去,没想到一注册好就把钱捐出去了,30美元。

我作为自由软件坚定而不乏理性的支持者,每每在内心会感谢我用过的那些方便、优雅、跨平台的自由软件,以及这些软件背后的人。我坚持使用自由软件,不时向不了解的人解释、介绍和宣传自由软件,开发自己的自由软件,就已经是对自由软件的支持了。但如果认为捐献了时间就不必要捐献金钱的话,那么这只是不舍得付出一点点的借口。

说到维基百科,比上传统百科全书最大的优点就是条目覆盖面广、条目释义丰富、更新频率高,但是文章质量良莠不齐,不正确、不准确、不一贯的条目很多。但这正是其特点,因为维基百科始终处于一个动态的发展过程中,永远不要指望它的条目都整齐划一。维基百科并不能取代普通百科,不同的场合选择不同的百科全书是个明智的选择。

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函数了,这样可以保证计算的精度。只需在输出的时候用格式串来控制小数位数。

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