日志分类:python

不用算法的后果

2008-06-20,Friday | 分类:python, 个人 | 123 views

写了两个垃圾python程序,处理上万个素数队列。放在V480上跑了9个小时了,居然还没有出结果 -_-!

Solaris Cool Stack 1.3 release

2008-06-16,Monday | 分类:Sun & Solaris, python | 标签: | 111 views

Cool Stack 是一堆在Solaris (Solaris 10)上优化过的开源软件集合,使用这些软件可以享受到最好的性能优化。Cool Stack 上涵盖的软件范围目前主要面向web service,随着应用的需求变化,日后应该还会有所增加。

1.3 版本的Cool Stack已经可以下载,包含如下的新软件版本:

- Python 2.5.2
- nginx 0.6.31
- libxslt 1.1.22
- fontconfig 2.4.2
- mod_security apache 2.5.3
- mod_python 3.3.1
- mod_ruby 1.2.6
- mod_dtrace 0.3a
- memcache php extension 2.2.3
- xdebug php extension 2.0.3
- tcpwrap php extension 1.0
- perl Compress::Zlib
- mysql ruby gems 2.7
- postgres ruby gem 0.7.1

有兴趣尝试的人可以选择性下载。这些SVR4格式的软件包以CSK开头,安装方式与平时在Solaris OS上安装软件相同:

root@skywalker # pkgadd -d CSKpython_1.3RC1_sparc.pkg

Cool Stack 软件会安装到/opt/coolstack目录下,包含所需的library。

想到前几天曾经在公司的工作站上安装过python 2.5.1 ,还是从http://ww.sunfreeware.com 上下载的。于是就安装了此次1.3 version的Cool Stack Python 2.5.2 ,做了一下性能比较,但是效果并不理想。

下面的程序读取A.txt文件中的所有单词并将出现频率存入大Dictionary,并打印出现频率最高的30个单词。经过对比,当A.txt大到11M 的时候,coolstack 中的python 2.5.2所消耗的时间将比来自sunfreeware的python2.5.1长一倍,的确让人一头雾水。难道是python 2.5.2的问题?

测试环境:古董级的U10 (CPU 440Mhz UltraSPARC IIi, Mem 256M, Solaris 10 U1)
有兴趣且具备测试环境的可以帮忙测试一下。Cool Stack优化后的Python是否如此不堪。
Python 测试代码下载 code.tar

目标TXT文件如果一时找不到比较合适的,可以使用这个:

艾萨克·阿西莫夫 (Isaac Asimov)《基地系列》 (Foundation) TXT文档 英文版

Solaris 下的md5校验

2008-06-12,Thursday | 分类:Sun & Solaris, python | 标签: | 106 views

Solaris 下并未提供专门的md5校验工具。但是 solaris 10下的digest命令可以实现此功能:

root@skywalker # digest
digest: usage: digest -l | [-v] -a <algorithm> [file...]


root@skywalker # digest -v -a md5 sol-10-u5-ga-sparc-dvd.iso
md5 (sol-10-u5-ga-sparc-dvd.iso) = c984d8f5c439e1e73d13f2cefc095216

root@skywalker # digest -l
sha1
md5

digest 隶属于SUNWcsu软件包,在Solaris 9上没有此命令,Solaris 10就没什么问题了。当然也可以使用第三方的脚本来实现, 这里有一个用Python实现的md5校验程序md5sum.py,网上搜到的,可以解燃眉之急。不过默认情况在Solaris 下使用Python的hashlib程序库会出现如下报错:

ImportError: No module named _md5

解决办法就是安装openssl的高级版本,这个可以到sunfreeware.com上去下载。

效率上python的代码要比根红苗正的C程序慢一些,但是速度还在可以忍受的范围之内。

PS: VIM配合Calendar插件用来做工作记录还是比较好用,但是如果不上传到Google Calendar上,搜索内容则是很大的麻烦。今天写了一个粗糙的Python脚本,遍历diary目录下的所有文件,然后用grep来查找,觉得可以再完善一下,比单纯依赖网络服务的好。

又PS: Sam向我推荐KDE的Basket程序,用于做Notes。BasKet很Cool,很炫,记录条目可以自由拖放,颜色标记也很鲜明,而且可以导出成HTML文件!是个非常不错的工具。

DiaryVGC的一次修改

2008-05-23,Friday | 分类:python, 个人, 工具 | 标签: | 138 views

工作了,又开始使用Google Calendar来记录日常活动,重新翻出了DiaryVGC程序,用VIM配合Calendar插件来使用。之前有点懒,很多bug没有修,个别功能也不好用,这次修改了几个,算是大修了。

1, 原来的版本中,Diary内容全部同步到Google Calendar条目的title中,如果Diary内容较长的话,就十分的不方便: Google Calendar的条目title会自动删除各种换行符,挤在一起,完全无法阅读。而且在浏览条目的时候常常因为条目过大,很多选项按钮都被挤出了浏览器,无法点击。

这次修改将Diary内容放置到Google Calendar条目的Description中,也就是中文版本的“说明”,点击“修改活动详细信息 ” 就可以看到。进入Description中的Diary内容将会保留原有的格式,阅读方便。而title(显示在Google Calendar中的条目)中则存放的是Diary内容的摘要信息,也就是取Diary内容的前80个字符。

2, 使用codecs模块,防止目录下的cal文件编码混乱造成的问题。怀疑codecs的使用有些问题,也许是技术不到位吧,有时个别条目会无法正常辨别编码,从而无法上传到Google Calendar上。

3,  重新调整了Linux/Windows平台的兼容性。

4, VIM 的Calendar插件有时会在不小心点击的情况下,生成空文件,而calendar插件对此毫无办法。所以这次在脚本中添加了空文件的检测步骤,发现空文件就直接删除。

代码多了,BUG应该也多了,以后发现再说吧。

DiaryVGC.py加入了windows支持

2008-03-27,Thursday | 分类:Linux, python, 工具 | 标签: | 70 views

上传到Google Code上去了,这样保存的也许能长久一些。

DiaryVGC == Diary Vim Google Calendar

http://code.google.com/p/diaryvgc/downloads/list

下一步就看看怎么增加修改同步功能了。

VIM Calendar 插件 与 Google Calendar同步diary的脚本

2008-03-26,Wednesday | 分类:Linux, python, 工具 | 标签: | 130 views

不辞职不知道柴米贵,不编程不知道码字累

最近学习python,写了个脚本作为练习。

脚本用途:VIM Calendar 插件生成的Diary同步到Google Calendar

编写动机:一直以来我都用Google Calendar记录每日流水帐,记录每一天都做了什么。以前工作的时候,这个习惯非常好,尤其是在定期给客户写维护报告的时候。一些细节的琐碎事情都能借助Google Calendar的搜索功能准确定位时间。缺陷就是要联网的时候才能写,否则就要临时编辑个文件,时间久了,想要从这些乱七八糟的本地文件里面找到有用的信息真是痛苦。最近使用了VIM Calendar插件,发现可以写diary,记录流水帐再好不过。缺点就是检索和查看都比较困难,于是就萌生了同步diary到Google Calendar的想法。

运行平台:已经支持Linux/windows

脚本原理:
VIM Calendar插件会在用户目录下的diary目录中按照日期的目录结构生成日记文本,如:/home/money/diary/2008/3/21.cal,每一个文件代表一天的日记。脚本会扫描/home/money/diary目录下的文件,并生成/home/money/diary/vimlog.txt文件作为记录,随后依次上传每个文件的内容到Google Calendar。当然事先要有一个Google Calendar的帐号提供给脚本。为了不与Google Calendar默认的日历冲突(Primary),脚本会在自动创建一个Title为”VIM”的子日历,随后所有的操作都是在此子日历上起作用,比方说上传diary和删除diary。
上传diary的过程中使用的Google Gdata的python API。

脚本运行:
./diaryvgc.py - -user=username - -pw=password - -dir=/home/money/diary [-d] -h –help
–user 指定Google Calendar Account的用户名,不必加后面的@gmail.com后缀
–password 指定Google Calendar Account用户的密码,没必要加引号
–dir 指定diary存放的目录,因为就这一个参数,脚本就没有使用配置文件了。并且配置文件存放Google Account的密码也并不安全。
-d 这个是可选参数,如果不使用,则同步diary到Google Calendar。如果指定了-d 则将 Google Calendar的VIM子日历中条目全部删除。
-h 或 –help 打印usage

上传diary:
./diaryvgc.py –user=username –pw=password –dir=/home/money/diary
删除Google Calendar中 VIM子Calendar中的所有条目:
./diaryvgc.py –user=username –pw=password –dir=C:\diary -d

说明:
1.支持增量同步。第一次运行时将所有diary同步到Google Calendar,随后只检查新增的diary。这个功能依靠文件vimlog.txt中的记录实现。
2.需要Google Gdata Pytho API支持。现已经把脚本所需的package一起放到程序里面了。只要在Linux下有python(应该都有吧),就没问题了。
3.diary以’All Day’的形式加入到Google Calendar中。避免了Google Calendar自动分析diary,造成上传日记内容不完整的情况。
4.因未加入同步控制,所以启动后会将diary全部upload到Google Calendar。如果你的diary很多的话,要耐心,因为它的速度依赖于网络。

后期计划:
1, 增加windows平台支持(已经支持)
2, 增加Diary修改的检测,修改后的diary可以同步到Google Calendar。
3, 增加同步控制

脚本下载:

http://code.google.com/p/diaryvgc/downloads/list

相关资源:
VIM Calendar 插件下载: http://www.vim.org/scripts/script.php?script_id=52
Google Gdata API : http://code.google.com/apis/gdata/