I am LAZY bones? AN ancient AND boring SITE

修改了gentoo的组ID

由于我的/home分区是ubuntu和gentoo公用的,这样不管在哪个系统,都能很方便地公用程序的配置.但却又引发了一个小问题:
ubuntu下 我的用户是 uid=1000,gid=1000的,gentoo下,1000这个gid却被dhcp组占用了,生成的用户组id是1004.
这样就出现了一个怪现象,原来在ubuntu下,用户创建的文件,到了gentoo下,就被当初了dhcp组;gentoo下创建的文件在ubuntu下又是无法识别的组了.由于机器上只有一个用户,所以虽然此问题并没有给我带来什么麻烦,但总归是个隐患.于是想修正它,其实方法也很简单:
就是在ubuntu下,把gentoo根分区挂到 /mnt/gentoo ,然后
sudo vim /mnt/gentoo/etc/group
把里面的1004改成1000,1000改成1004,保存退出.
sudo vim /mnt/gentoo/etc/passwd
把里面的 lily:x:1000:1004::/home/lily:/bin/bash 改成 lily:x:1000:1000::/home/lily:/bin/bash
再执行:

sudo find /home/ -gid 1004 -exec chgrp -h 1000 {} \;
sudo find /mnt/gentoo -gid 1000 -exec chgrp -h 1004 {} \;

好了~万事大吉~~嘿嘿.

linux QQ 1.0 preview3

QQ for Linux 1.0 Preview3 发布了,下载地址: http://im.qq.com/qq/linux/download.shtml
这个版本最大的改进肯定是文件传送了~哈哈~
看来QQ还是一步一步在改进的哦,加油.
另外,我们还看到windows版的QQ也在悄然发生着变化:
QQ2008II Beta1安装文件大小25.2M ,但是 QQ2009 preview3 的安装文件却只有 13.8M .
而且2009版本里面的所有广告都消失了,包括聊天窗口的上下广告和弹出的mini首页等,而且风格和linux版本的也越来越像了.这些特性是不是会在正式版里面得以保留呢?是不是腾讯正在经历一个重要的转型呢?我们希望是,我们拭目以待…

PS: 刚参加了腾讯的10周年活动,就是登录 10.qq.com ,会告诉你你的QQ是什么时候注册的,发现自己的QQ注册于 2000年09月17日 QQ年龄: 8.1年 ….

搬家喽~

现在,本blog终于有顶级域名了,哈哈~~庆祝一下!!
之前的blog是在ubuntu-cn的服务器上的,得益于WP的强大,数据迁移比较顺利,而且oneleaf老大还热心得把我以前上传的附件打包了,就更方便了.
整了一天,主题和插件基本都是一样的,和老的站点,除了url不一样,应该感觉不出区别吧~而且lupa的空间,速度貌似不错哦~
建站之初,很多东西还要慢慢完善,大伙如果有什么建议,可千万别保留哦~谢谢大家!

python多处理器编程

由于上次做的那个一维随机游走程序,虽然简单,但是大数据的时候很费CPU,而且我注意到我的双核处理器始终只有一核是处于满负荷工作,另一个核的性能没有得到发挥.而且我也试过把同样的程序放到一个8核的服务器上运行,结果解题的速度也只是比我本本快那么一点点,估计也只是那服务器的CPU主频(2GHz)比我的1.86GHz略高而已,完全没有发挥出他8核的优势.
所以马上想到了python有没有多处理机的机制,上网google一下,发现由于python是解释型的语言,而Python解释器使用GIL(全局解释器锁)来在内部禁止并行执行,正是这个GIL限制你在多核处理器上同一时间也只能执行一条字节码指令.猜想这个GIL也是当初为了设计解释器方便而搞的吧.而且据说python 3.0 里面已经改进了,默认有了多处理器编程的库了.但是毕竟现在python3.0还没有流行起来,那么现在有没有变通的方法呢?
当然有~不然我就不会写这文章了嘛~
Parallel Python 这个库,正是为了解决我们的问题而设计的,而且它不仅可以多核处理器协同工作,还可以通过网络集群运行呢,嘿嘿.
下面的中文介绍来自这里:

1 简介

PP 是一个Python模块,提供了在SMP(多CPU或多核)和集群(通过网络连接的多台计算机)上并行执行Python代码的机制。轻量级,易于安装,并集成了其他软件。PP也是一个用纯Python代码实现的跨平台,开放源码模块。

2 功能

* 在SMP和集群上并行执行Python代码
* 易于理解和实现的基于工作的并行机制,便于把穿行应用转换成并行的
* 自动构造最佳配置(默认时工作进程数量等同于系统处理器数量)
* 动态处理器分配(允许运行时改变工作处理器数量)
* 函数的工作缓存(透明的缓存机制确保后续调用降低负载)
* 动态负载均衡(任务被动态的分配到各个处理器上)
* 基于SHA的连接加密认证
* 跨平台移植(Windows/Linux/Unix)
* 开放源代码

3 开发动机

现代Python程序已经广泛的应用在商业逻辑,数据分析和科学计算等方面。其中广泛应用着SMP(多处理器或多核)和集群(通过网络连接的多台计算机),市场需要并行的执行的Python代码。
在SMP计算机上编写并行程序最简单的方法是使用多线程。尽管如此,使用 ‘thread’ 和 ‘threading’ 模块仍然无法在字节码一级实现并行。因为Python解释器使用GIL(全局解释器锁)来在内部禁止并行执行。这个GIL限制你在SMP机器上同一时间也只能执行一条字节码指令。
PP 模块正是为了解决这个问题而来,提供简单的方式实现并行Python应用。 ppsmp 在内部使用 进程 和 IPC (进程间通信)来组织并行计算。并处理了所有内部的细节和复杂性,你的应用程序只需要提交工作任务并取回结果就可以了。这也是编写并行程序的最简单的方法。
为了更好的实现,所有使用 PP 的软件通过网络来连接和协作。跨平台和动态负载均衡使得 PP 可以轻松组织多平台、异构的集群计算环境。

4 安装

任何平台:下载模块压缩包,解压,运行setup脚本:
python setup.py install
Windows:下载和执行安装包。

另外,debian和ubuntu用户,也可以通过apt直接下载安装,包名是 python-pp ,但是由于版本比较老,是 1.5.4 版本的,而最新的是 1.5.6 ,所以官方页面上的示例代码可能运行不了,会出现以下错误提示:

Traceback (most recent call last):
File “testpp.py”, line 46, in
job_server = pp.Server(ppservers=ppservers)
File “/var/lib/python-support/python2.5/pp.py”, line 312, in __init__
raise ValueError(“secret must be set using command-line option or configuration file”)
ValueError: secret must be set using command-line option or configuration file

原因是代码的不兼容性,解决办法就是找到 pp.Server 那行,多加一个参数,如下:

job_server = pp.Server(ppservers=ppservers,secret="")

由于这个库,包装得不错,所以用起来也比较简单,基本上看了示例代码,就会了,使用方面也就不多介绍了,如果有可能的话,我倒是想写个gentoo的ebuild文件,嘿嘿.

模拟一唯随机游动

今天,无意中看到了这个blog里面的一篇有意思的文章.对里面的那个随机游动问题产生了一点兴趣:
原文中说: 1维和2维的随机游动是常返的,也就是说会无穷多次回到起点(但回来的平均时间期望是无穷的),而3维以上的随机游动是非常返的。因此对于2维的某个坐标,此物体会无穷多次经过,但是不会无穷多次经过原点。对一个完全没有方向感的人,在平面上不会迷路,但在宇宙中是会迷路的。
而且,还有个题目,说 一个物体从原点出发,每一秒以概率1/2向左走,1/2向右走,第一次回到原点的期望时间 比 一只猴子,每秒种随便按键盘上的一个键,第一次打出”Beijing Welcomes You”的期望时间 还要久,因为前者的期望是无穷大.
就有点奇怪了,顺手写了个程序验证一下,图方便,用了python,代码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import random
# Nmax 是样本数
Nmax=10000
# A这个字典用于存放每个结果的次数
A={}
for N in range(0,Nmax):
	r=0
	i=0
	while True:
		#为了使结果不都是偶数,也为了少一半循环,每次循环都random两遍.
		if random.random()<0.5:
			r=r-1
		else:
			r=r+1
		if random.random()<0.5:
			r=r-1
		else:
			r=r+1
		i=i+1
		if r==0: #如果r==0,就说明回到原点了,记下结果,结束这个样本
			if i in A:
				A[i]=A[i]+1
			else:
				A[i]=1
			break
#所有样本都算完以后,对结果进行排序输出,并计算平均值
k=A.keys()
k.sort()
T=0
for i in range(0,len(k)):
	print "%d\t = %d"%(k[i],A[k[i]])
	T=T+k[i]*A[k[i]]
print "avg=",T/Nmax

这个代码会输出Nmax个样本里面,一维随机游走问题的各个秒数次数.
在Nmax样本数为10000的时候,如果运气好的话,可以在3秒内跑完,但是如果运气不好的话,就难说了,我最多的一次跑了45分钟,最大的一个样本,用了1679075437个循环,才跳回来…嘿嘿.看来那个无穷的期望是真的…
这个试验也告诉我们,即使在没有作弊的情况下,赌博输掉的人想要回本,也许要等到下辈子的下辈子的下辈子…..

键盘快捷键问题

gentoo和ubuntu共用/home,又发现新问题了:在ubuntu下设置了音量大小和静音的快捷键以后,到了gentoo下就不能用了,同样,gentoo下设置好以后,ubuntu下也不能用.
仔细看了键盘快捷键的设置界面,发现ubuntu下设置的是类似 XF86AudioMute/XF86AudioRaiseVolume/XF86AudioLowerVolume 之类的字符串,而gentoo下则是 0x**的键值,很明显是gentoo没有给键值定义名称,于是用 xev把几个键的键值都记下以后,写了一个 /etc/X11/Xmodmap 文件,我的内容如下(不同型号的硬解应该不一样):

keycode 160 = XF86AudioMute
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume

然后重启X,就两边都正常了,娃哈哈…

升级了ubuntu后,gentoo的gnome启动不了问题

昨天,刚把ubuntu升级成了8.10,就一整天用的都是ubuntu,也觉得挺好的.
今天又想用gentoo了,把menu.lst恢复(一早就知道ubuntu会覆盖这文件的,所以早有准备)以后,启动到也正常.到了gdm,输完用户名和密码以后,傻住了,splash都没出来…
到tty1下面看了一下 .xsession-errors 文件,发现在启动什么seahorse组件的时候,报没有 libgail-gnome ,可能是ubuntu下的gnome更新以后,多启动的东西吧,但是这东西gentoo下还没安装,于是马上eix了一下,gentoo下也有现成的包,emerge了一个,就又正常了~
所以遇到问题,多看看日志输出,还是很有好处的…

升级到 ubuntu 8.10

大家都知道,ubuntu已经于上周发布了8.10的版本.
我刻意避开了这几天的升级高峰期,到今天才给我的ubuntu升级,因为以往的经验告诉我,在高峰期升级,源的速度基本上是不可忍受的,呵呵.
升级步骤也和以往一样,sed了一下源列表,然后就放那apt-get去了,这样边干活边处理一些偶尔的选项,2个小时也就搞定了,中间也出了一些小问题,但都比较容易搞定,呵呵.

至于这个版本的改进,相信很多网站上也都介绍了,我就不罗嗦了,反正细节上,舒服了不少,嘿嘿.
纳闷的是,之前听说OOo3.0是不会集成在这版本里面的啊,但是我这打开却赫然跳出3.0的字样,难道是CD上没用,源里这几天更新了?
还有一个纳闷的地方就是之前刚研究过的徽标问题,又和以前不一样了, certified 这个徽标,现在叫做 jockey-certified 了,图片也变成一朵小红花了,路径在 /usr/share/icons/hicolor/scalable/emblems/jockey-certified.svg ,要兼容以前的数据的话,又得自己建个符号链接了~~

谁启动了我的eth0

我的gentoo系统,之前一直存在着一个小问题: 系统启动的时候,都会去尝试启动eth0,然后尝试去DHCP,即使网口根本没插网线也是如此,于是乎这时候DHCP就肯定不成功了,每次都等个10多秒钟,超时了,才能继续后续步骤.结果启动过程就无缘无故地多了10多妙,嘿嘿.
也看过rc-update的结果,也没有多出什么东西来.那是谁启动了我的eth0呢?
后来在irc上问了wd老兄,终于知道了,这个是openrc启动的,而且貌似和udev有关系.
解决方法就是在 /etc/rc.conf 里面的rc_plug_services一项修改为:
rc_plug_services=”!net.eth* !net.wlan*”
这样就不在启动的时候初始化我的网络了,而是到了登录gnome以后,由我的NetworkManager来选择连到什么网络,哈哈,这才是我需要的.
另外, /etc/rc.conf 里面还有一项比较有意思的,就是 rc_parallel=”YES” 可以开启并行启动特性,理论上也可以提高一点启动速度.做完这些后,我的本本从grub到gdm可以输用户名,大概是25s.不是很快,内核里面应该还有一些可以优化的,呵呵.

使用SSL登录irc(注:仅支持OFTC)

SSL登录irc的好处:
1.对收发的数据进行加密.
2.可以不用密码自动identify.

可惜目前试了一下,似乎只有OFTC对SSL提供支持,而因为freenode不支持,可能很多人都用不了.
不管如何,先记下步骤,也许以后freenode会支持呢?但愿如此吧~
以我常用的xchat客户端为例(xchat2.8以上才支持):
1.创建指纹:
openssl req -nodes -newkey rsa:2048 -keyout nick.key -x509 -out nick.cer
chmod 400 nick.key (保护起来,非必要)
cat nick.cer nick.key > OFTC.pem
chmod 400 OFTC.pem (保护起来,非必要)
2.得到 OFTC.pem 以后,放入 ~/.xchat2 目录,然后打开xchat的网络列表,选中OFTC,点”编辑”,在打开的页面勾上”在本网络的所有服务器使用SSL”和”接受无效的SSL证书”.
3.重新连到OFTC,用密码identify了以后,执行 /msg nickserv cert add 就把你的指纹和服务器关联上了,退出,重新打开xchat,登录OFTC以后,你就可以看到,你没输密码,也已经identify了…whois自己也能看到 * [bones7456] is connected via SSL (secure link) 这样的提示了.
终于可以把明文保存在 /.xchat2/servlist_.conf 的密码删掉了,嘿嘿.

其他客户端的设置和更多信息参见OFTC的英文帮助页.