I am LAZY bones ? all linux

2009年 04月 的归档

又要回原始社会了

最近个人的事情比较多,明天又要回家了…
估计又得几天不能上网了.郁闷哦!

升级ubuntu至9.04

今天,已经是ubuntu 9.04发布的第三天,我照例在错开了下载高峰期的今天,对家里的两套ubuntu系统进线了升级.
先是升级了MM的ubuntu,修改sources.list以后,直接 apt-get update + dist-upgrade,下载了1G的deb包以后,又忽忽地安装了一段时间,居然啥错误都没有,重启进入新的系统也一起正常,无线网络/声音/compiz都正常.
这次升级平稳地有些匪夷所思.因为按以往的经验,安装的时候都会或多或少出现几个冲突的包或者子进程返回失败之类的错误,可这次却没有,心想MM的电脑用了才不久,安装的东西也不多,所以才没啥问题吧.
于是马上把 /var/cache/apt/archives/ 下24小时内的deb包都复制到自己的电脑上,也换开始了升级.由于已经有了那1G的deb包,我升级的时候,只需再下载300M多M的东西即可,然后也忽忽地安装了一段时间,照样没啥错误…心想,ubuntu真的进步了不少,哈哈.
但是重启的时候,却发现,这回没那么顺利了: 加载fglrx模块的时候报错,接着gdm出现了花屏…心想,那就先用vesa驱动跑着呗,于是 apt-get purge fglrx-kernel-source xorg-driver-fglrx 重启以后,发现gdm正常了,登录进去,发现分辨率什么的也正常,而且compiz居然也是好的…glxgears 也跑到 2368.680 FPS 真强!
看看我节选的glxinfo吧:

direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
client glx vendor string: SGI
client glx version string: 1.4
GLX version: 1.2
OpenGL vendor string: DRI R300 Project
OpenGL renderer string: Mesa DRI R300 20060815 x86/MMX/SSE2 TCL
OpenGL version string: 1.3 Mesa 7.4

就这么用着也很不错了,但愿以后都不用折腾驱动了,哈哈…

过了一周的原始社会生活

上周五约中午的时候,接到个电话,MM的爷爷去世了,于是马上关机走人.
都没来得及和大伙打声招呼,就回到了那个偏僻的小山村,接连这一周,我都生活在没有网络的原始社会里,呵呵,对于我这样网虫来说,还真是不习惯呢.
在我离开的这周里,SUN居然被收购了,呵呵,不过买家不是之前传说的IBM而是Oracle…这颗太阳就此落下,不知道以后JAVA/Vbox/MySQL会有什么样的结果,很是令人担忧啊.
另外,gmbox在我不在的这段时间里,发展并没有减缓或者滞后,真是值得欣慰.这令我又一次感觉到了开源的力量,也给了我更多的动力.
不管如何,今天我终于回来了.

在杭州机场免费上网滴办法

以下方法是我在杭州萧山机场发现的,不过可能在很多其他机场或酒店也适用,只要你那有ChinaNet的WIFI.
由于出差,昨晚在机场渡过了一段不算长也不算短的时间.想给ipod传点刚下载的歌曲,正好也带了本本,就顺手打开玩了会,一搜WIFI网络,发现有个ChinaNet信号特别强,也没有密码啥的,就加了进去,打开浏览器,一试google,发现居然真的可以上,哈哈.我还以为有免费的午餐了呢,于是就想打开自己的blog看看,却发现直接跳到了一个ct10000的网站,哈哈.这个显然是电信的收费WIFI,由于我没账号,所以打开页面都跳到登录界面了…不过电信还是比较厚道的,把google的站设置为免费了.也就是说google的域名解析和连接都是正常的免费的.
说到这里,有的朋友可能也想到了,我灵机一动,之前提过的GAppProxy不就是把google的服务器作为代理上网的,哈哈,于是打开GAppProxy,设置浏览器的代理为127.0.0.1:8000,搞定…

python 跨平台运行笔记

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

OverflowError: modification time overflows a 4 byte field

这样的错误…
再另外,对于中文的处理,在纯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那节下面添加以下三行:

      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/Protocol" value="TCP"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/GuestPort" value="80"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestweb/HostPort" value="50000"/>

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

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
 
str='<a href="/music/html/faq.html">&#24110;&#21161;</a>'
def unistr(m):
    return unichr(int(m.group(0)[2:-1]))
 
print re.sub(r'&#[0-9]{5};',unistr,str)

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