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

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

2008年10月25日星期六

北京国际马拉松赛

如果一个人骑着自行车和参加马拉松的人一起比赛,谁先到达终点?今天我就给出这个问题的答案。

北京一年一度的马拉松赛,全程是42.195千 米,还设5千米的小马拉松,10千米马拉松和半程马拉松。我参加过三次,唯独没有跑过全程。我因膝伤在奥运期间宣布放弃参加今年的北京马拉松赛。之后不 久,国际著名田径运动员刘翔也因伤黯然退出了奥运会110米栏比赛。不过我在笔记本上大大得写下了我的目标:2009年10月18日,人生的第一个 42.195 km。

虽然今年因伤不能跑马拉松了,但我并不甘心被排斥在外,我今年要客串一把观众。狠心把闹钟定在了五点五十,晚上十点多就躺下了,可是快两点才睡下,真是“每临大事无静气”。尽管如此,19号早上还是按时起床,迅速收拾后就骑车向天安门广场出发了。

长安街的马路真宽,自行车道上都可以举办篮球赛了。天安门广场上隔几米就一个小武警。我在天安门广场绕了一圈,就在东边马路起点那等着了。往年都集中在广场里面,印象中人很多。这次我在广场外面,却看不到太多的人。

北京马拉松赛是在每年十月的第二个星期日举行。这时候北京清晨的天是挺冷了,而运动员穿着短袖会很冷的,不少人要披着雨披防寒。工作人员放开隆隆的电子乐, 有人带着大家随着音乐热身。节奏单调近乎噪音的音乐就在毛主席纪念堂边放肆地响着,站在街边的我内脏也跟着震动。在这中国最神圣的地方,响着最躁动最青春的音 乐,真是有意思的一幕。奥运前在朝阳的奥运会沙滩排球馆参观时,工作人员介绍说,国际奥委会曾经想把沙排比赛安排在天安门广场举行,但是中国方面没有同意。

八点整,男子专业选手就出发了。我也随后出发。我本想跟着专业选手一起“跑”,看看他们一路的速度分配,因为我有自行车码表,可以看 路程,速度和时间。可是沿途的交通管制很厉害,连自行车道都不让骑车,自行车只能在人行便道上骑。在便道上根本没法骑快,后来我就慢慢落后跑步的人了。一 路上很多路口都不允许通过,包括公交车在内的汽车排成长队。这半天的马拉松就给大家带来了这么多不便,肯定有人很抱怨,一个多月的奥运会期间民众付出的就更多了。

这天我背了个大相机,在天安门广场照了一些照片。过了十公里后就已经背不动了。我就在寻思能把包暂时放到哪里。右肩太酸痛了,我停下来照了几张运动员的照片稍事休息。路边有个清秀的女孩也在看比赛,我就小心地问她附近是否有超市可以把我的包存下。很感谢这位女孩。我跟着她去了花园 桥西边北洼路上一个叫华普的小超市。因为我推着自行车不方便,她拿着我的包帮存下了。不过是个小超市,存包就是放到架子上,不是带锁自己存的。

存 了包之后我一身轻松。看来有必要装一个货架,外出带东西多的时候就不用背着了,否则会很累。我就一路沿着线路骑,可惜多数时候还是要骑在便道上,而且西边的路线并不是干道,便道很窄,骑得很不爽。相机(不是我自己的)存在那个陌生的地方心里有些不放心,又加上还要去清华西门买装备,最后我决定骑到半程终点就结束。

我在路边看到了清华计算机系的水点,这可是专供本系运动员的。在终点,看到好几面清华的系旗。不过今年路上看到的清华的很少,只见到零星的几件紫衣服,361度赞助的,也许大家不都是紫衣服吧。我跑半程那年,所有运动员中有三分之一的都是清华的。

到半程终点后,我看了码表,时间是1小时28分,已经有运动员陆续到达终点了,就是说我骑车完成半程的速度还没有运动员跑步快。开头的问题得到回答了。

之后一路奔向清华西门。在西门顺如风买了头盔,车灯和水壶架。回去之后到那个超市拿包,完璧归赵,要感谢这个超市。不过回去后就感冒了,因为只穿着毛背心骑车迎风太多。感冒到今天都还没有好。毛衣穿外面一点都不防风,清晰地记得小学有一次就是穿着毛衣出去感冒了。

2008年9月29日星期一

入手勇士Pro




今天下午在美利达阜城门店买了08款勇士Pro,1398元,终于了结了我好几年的心愿。感谢rudey提供建议。最近过得比较累,码不动字了。

2008年9月27日星期六

我是一名运动员



奥运前,在CCTV音乐频道经常看这个公益广告。我很喜欢这个短片,每次看都让我热血沸腾,蠢蠢欲动。如果有低落消极的情绪,看过这个片子后,我也会好很多。

努力克服生活中的一切障碍和逆境,释放我们生命中的无尽潜力吧!