I am LAZY bones?
AN ancient AND boring SITE

python 跨平台运行笔记

最近在折腾gmbox,这个东东我设想是要让它跨平台运行的,原本想跨平台可能会比较麻烦,但是试了一下才知道,确实非常简单.这都得益于python本身的跨平台特性.
纯python程序要在win下运行,只要简单地下载并安装python运行环境,就会自动做好.py文件和python的关联,要运行一个python程序,只需简单地双击即可.
如果是用pygtk的图选界面程序的画,会稍微麻烦一点点,在如上安装了python运行环境以后,还需要分别安装GTK+库PyCairoPyGObjectPyGTK才行.安装路径最好都是用默认的.
另外,我还发现,如果是在vbox的虚拟XP里运行py程序,程序所在目录又是vbox分配的”数据空间”的话,在import自己写的模块的(也就是把.py转成.pyc)时候,就会产生

这样的错误…
再另外,对于中文的处理,在纯python下,只要在所有字符串常量前加u,表示是unicode字符串,就完全没有问题的.但是到了pygtk,就会有些麻烦,也许可以参考这里.还要再研究研究.

谷歌音乐下载器

之前有很多下载baidu mp3的程序,有bash的,java的,python的,其中也包括我这个.
但是baidu的歌曲都是用程序收集自网络的,所以排行榜的歌曲质量就没有保障了,下载下来的歌曲ID3信息可谓一塌糊涂,而且还可能下载到网友自己翻唱的歌或者其他杂七杂八的东西,严重影响我们的听觉神经.
而谷歌(不是google)最近推出了谷歌音乐搜索,联合top100,也推出了类似百度榜单的音乐排行榜.但不同于百度的是,谷歌里的歌曲都是收集整理过的,不会有死链,质量也很不错,而且,对于最终非商业用途的个人用户而言,是不存在版权问题的(但我不确定批量下载下来的有没有版权问题.请用户自行考虑.).
所以我顺势就推出了这个谷歌音乐下载器 .
目前程序还很简陋,没有图形界面,也没有很多可以设置的地方.运行程序只会把”华语新歌”这个榜单的100首歌下载到本地当前目录.所以仅供有兴趣尝鲜的同学测试使用.但是以后,我打算把这个程序做成有图形界面的,可以试听/下载/播放的一个整合工具,哈哈.请大家多多关注吧.

PS:有人说这类工具还是不要发布出来,小范围流传下比较好,因为发布出来以后,很可能遭到google的封杀.这说法其实也有些道理,但是我想想,如果谷歌真的因为这个来封杀我,我也够有面子的,嘿嘿.所以我还是按照Google的Project hosting页面所说的做了: Release early, release often

访问Vbox的guest系统的方法

相信很多linuxer都用过Vbox,拿来虚拟个win或者其他的系统,很方便,用着感觉也很不错,只是今天我遇到了一点点麻烦.
我想在host里访问guest的80端口,比如在guest里跑了个apache之类的.
我的host的IP是192.168.6.239,一看guest的IP是10.0.2.15,vbox里设置的连接方式是NAT,在guest里上局域网和公网都正常,但是在host里却ping不通guest的IP…也就是host和guest的通信是单向的…
后来查了下资料,才明白原因,要实现双向通信,需要在host里虚拟一个网络设备(也就是虚拟网卡),然后通过桥接的方式将host的虚拟网卡和guest的网卡相连,就像以前用的vmware的bridge模式一样,默认就给你生成几个虚拟网卡,但是vbox却不是这样做的,它需要自己添加.具体操作方法可以参见这里这里.
步骤还是比较繁琐的,所以我用的就不是这个办法,而是另一个比较快捷的办法,当然快方法也有坏处,就是只能访问guest的一个端口,刚好,我只需要它的80端口.
步骤:用文本编辑器打开 ~/.VirtualBox/Machines/机器名/机器名.xml
然后在ExtraData那节下面添加以下三行:

这3行,相当于吧guest的某个端口映射到了host的端口. 其中 guestweb 可以替换成想要的名字.第二行的value数字,就是guest的端口号,第三行的value数字就是host的端口号.
这样启动guest以后,就可以访问 http://localhost:50000 了,哈哈.
以上方法在Vbox 2.1.4 版本试验通过.

========090409 21:00 更新========
好吧,我承认我火星了一回,其实只要 modprobe vboxnetflt 以后,再在网络连接里选 host interface,就相当于vmware的桥接了.
这样guest就能得到和host一样的IP段,并且host也可以直接访问guest.
但其实这方法也是有缺陷的,比如我之前用的是host的eth0,把guest休眠了以后,到了家里,host改用wlan0了,结果guest就没有网络连接了….
哈哈,所以我那方法还是有一定的用处的.到底用哪种,就自己决定吧~

gentoo-users.org

刚在gentoo china的 mail list 里,看到的这个有趣的网站.想把所有gentoo用户的地理位置信息共享出来,于是也去注册了一个,我的信息在这里,貌似在浙大玉泉校区有个同仁,还有TX也在附近,哈哈.
记得以前也注册过一个linux user的,忘了在哪了….

python里强大的re模块

今天遇到一个小问题,用脚本把某web页面抓取下来时,里面的中文都是类似”帮助”这样的格式.这当然不是我想要的,我需要把它转化为可读的汉字.
为了解决这个问题,首先要用到内建函数unichr:
unichr(24110) 能得到”帮”字, unichr(21161) 能到”助”字,问题是我怎么批量吧html里面的所有 &#nnnnn; 替换掉呢?
干这类事情当然需要正则表达式了,于是,去翻re的文档,还真让我给找到了,方法如下:

运行这段示例代码就可以得到我想要的结果了,哈哈.
觉得python的这个re好强大,居然替换字符串还可以是个函数…太佩服这个设计了.

一个命令把几千张照片压缩了

数码相机拍的照片,已经积累了很多个G了,于是就都备份到光盘里保存了,但是怎么处理硬盘上的数据呢?rm之觉得可惜,毕竟光盘没有那么方便,不能随时查看,但是放着又太大太浪费硬盘空间了,现在的相机一张都有3~4M的.我能想到的最好的办法,就是把每张照片压缩以后,把小图片留在硬盘上,这样即可以快速查看,又不是很浪费硬盘空间,于是有了这个命令:
注意此命令会删除当前目录及子目录下的所有jpg文件,最好是理解以后,再执行

把当前目录及子目录下的所有 xx.jpg 压缩成横竖分辨率都为原尺寸的30%的 xx_.jpg 文件.对于我的相机来说,压缩后的大约800*600的大小对于屏幕浏览来说已经足够了,而每张300K左右的尺寸也很经济.
没有convert命令的同学需要检查是否装了 imagemagick 包.
PS:真庆幸自己没在用windows了,如果是win下,估计又得上网找所谓的”绿色版图像批处理软件”了,问题是:即使找到了,能完全合我的心意吗?称心了,要找注册码吗?找到注册码了,确定不含木马病毒吗…Orz

推荐:vim使用进阶

既然在linux下混,我觉得emacs和vim里,至少得会一样.
因为我比较懒,emacs这类神的编辑器,是不太会用了,所以只能用编辑器的神──vim了.
但是一直以来,自己的vim水平还是仅限于会hjkli之类的水平,所以我自己也快看不下去了.
刚好在这个时候,发现了这篇好教程:Easwy写的vim使用进阶.
只看了前面几章,就深知这是个能造福大家的好教程.内容翔实而不肤浅,描述细致而不累赘.相信看完之后,定能让读者举一反三,进化为vim老鸟~所以,在此推荐给大家.同时感谢一下Easwy的辛勤劳动.

转:lsof用法小结

lsof在我看来算是那类很少用到却功能强大的生僻命令.因为生僻,所以经常忘记参数,而且2~3千行的man页,也经常会让人发晕.所以,偶尔看到这用法小结,转载记录一下,以便日后查找.
原文链接

lsof是一个用来显示被打开的文件的强大而有用的工具。在Unix系统中,任何事物都是文件(everything is a file),pipe是文件,IP sockets是文件,unix sockets是文件,目录是文件,设备是文件,inodes是文件。
一些有用的例子:
当在lsof后边没有跟任何参数时,该命令将会列出当前系统中被所有进程打开的所有文件

下边这几个命令指出打开某文件的进程

下边将会打印出占用httpd可执行文件的进程的进程号(仅仅是进程号,在编写shell脚本是有用)

显示出那些文件被以k打头的进程名的进程打开,以bash打头,和以init打头:

显示出那些文件被以courier打头的进程打开,但是并不属于用户‘zahn’

显示被zahn和apache打开的文件

显示那些文件被pid为30297的进程打开:

显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列

显示所有打开的端口

显示所有打开80端口的进程

显示所有打开的端口和UNIX domain文件:

显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接:

—————————————————-
translated from @ www.akadia.com

thank 寂寞烈火 for the reason of http://bbs.chinaunix.net/viewthr … &extra=page%3D5
—————————————————–
lsof还有很多参数,如果能够熟练使用将会对日常的系统管理非常有用。希望大家把一些还知道得技巧加以补充

用上了2.6.29的内核,A卡驱动搞定

今天也体验了一把用gentoo来hack的乐趣,哈哈.
昨天(还是前天?)2.6.29的内核就已经进了gentoo的源,今天编译好,用上了,倒是能启动,但是却出了点小问题:我的A卡驱动坏了…编译内核模块的时候,由于内核源文件的修改,使得编译无法通过,无法生成内核模块了…结果我的compiz就罢工了…
于是,就google呗,搜到这个补丁,然后调用gentoo强大的hack功能,就给装上了,方法如下:
1.建一个自己的overlay,用gentoo的应该都有自己的overlay吧? 比如我的在 /usr/local/portage.
2.把 /usr/portage/x11-drivers/ati-drivers/ 复制到 /usr/local/portage 下面.
3.下载这个补丁到 /usr/local/portage/x11-drivers/ati-drivers/files 目录下.注意这个补丁和上面 phoronix 帖子里的不完全一样,用那个在我这里失败了,所以我稍微修改了下路径.如果你的内核源码也在 /usr/src/linux 的话,直接可以用.
4.修改 /usr/local/portage/x11-drivers/ati-drivers/ati-drivers-8.582.ebuild ,在src_unpack()里加一行

5.生成 Manifest 之类的以后,就可以emerge了.
完成,我的compiz又回来了,啊哈哈…

DELL A840上的ubuntu

前天MM公司善心突发,给她们每人配了台本本,于是MM到手一台基本上是DELL里面价位最低的A840,打开一看,预装的是ubuntu 8.04,哈哈,这下好玩了…
默认的系统东西装得也蛮全的了,而且硬件驱动自然是很完美.无线,compiz之类的都没问题.
于是把一堆不需要的语言包卸载以后,就开始升级,升到hardy的最新内核,问题却出现了: 无线用不了了,声音也有问题…
搜索一下,发现这个版本的内核好像对它的硬件支持不太好,后来也证实了这点,从8.04的光盘启动,居然会出现busybox,这还是预装ubuntu的电脑呢!唉.
然后说升级到8.10会好,于是就升级,也出现了一些小问题,是 xulrunner 需要的几个库文件不存在,看了一下,只是少几个符号链接,补上后,顺利升级成功了.发现声音好了,无线还是不行,搜索了无线网卡的型号: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter 发现要安装一个 linux-backports-modules-intrepid 的包,装上重启,无线也正常了,至此硬件驱动基本恢复到完美的水平…