2007/9

这词好美~

烟花三月

牵住你的手相别在黄鹤楼
波涛万里长江水送你下扬州
真情伴你走春色为你留
二十四桥明月夜牵挂在扬州
扬州城有没有我这样的好朋友
扬州城有没有人为你分担忧和愁
扬州城有没有我这样的知心人
扬州城有没有人和你风雨同舟
烟花三月是折不断的柳
梦里江南是喝不完的酒
等到那孤帆远影碧空尽
才知道思念总比那西湖瘦

I Try

Sung By “Macy Gray”

Games, changes and fears
When will they go from here
When will they stop
I belive that fate has brought us here
And we should be together babe
But we’re not
I play it off, but I’m dreaming of you
And I’ll try to keep my cool, but I’m feenin’

I try to say goodbye and I choke
Try to walk away and I stumble
Though I try to hide it, it’s clear
My world crumbles when you are not here

Goodbye and I choke
I try to walk away and I stumble
Though I try to hide it, it’s clear
My world crumbles when you are not here

I may appear to be free
But I’m just a prisoner of your love
And I may seem all right and smile when you leave
But my smiles are just a front
Just a front, hey
I play it off, but I’m dreaming of you
And I’ll try to keep my cool, but I’m feenin’

I try to say goodbye and I choke
Try to walk away and I stumble
Though I try to hide it, it’s clear
My world crumbles when you are not here
Goodbye and I choke
I try to walk away and I stumble
Though I try to hide it, it’s clear
My world crumbles when you are not here

Here is my confession
May I be your possession
Boy, I need your touch
Your love, kisses and such
With all my might I try
But this I can’t deny
Deny

I play it off, but I’m dreaming of you
(but I’m dreaming of you babe)
And I’ll keep my cool, but I’m feenin’

I try to say goodbye and I choke (yeah)
Try to walk away and I stumble
Though I try to hide, it’s clear
My world crumbles when you are not near
(when you are not near aahh)
Goodbye and I choke (yeah, yeah, yeah)
I try to walk away and I stumble (hey, hey, hey)
Though I try to hide it, it’s clear (say it Lord)
My world crumbles when you are not here

Goodbye and I choke (I’m choking)
I try to walk away and I stumbe
Though I try to hide it, it’s clear
My world crumbles when you are not near
(when you are not near, yeah, yeah yeah)
Yeah, yeah..

一道智力题引发的数学问题

林小峰同学在其博客上贴了一道智力题,我上次回复没仔细看题,还以为是老掉牙的称8个球的问题。刚才仔细一看原来不是,这题以前还真没见过。于是就仔细想了想,抱着“不走寻常路”的观念,花了15分钟本以为想出乐,结果发现其实不对。题目如下:

题目:有12个乒乓球特征相同,其中只有一个重量异常,现在要求用一部没有砝码的天平称三次,将那个重量异常的球找出来。 (尤其特别注意:是异常,但不知是轻了还是重了

对比网上的答案又看了一下,发现以下两个问题:

1. 其实分4组是不可能称出来的。

2. 三步其实最多能从13个球中称出。

网上流传甚广的解法如下:

把12个球编成1,2……12号,则可设计下面的称法:

左盘 右盘
第一次 1,5,6,12
2,3,7,11
第二次 2,4,6,10 1,3,8,12
第三次 3,4,5,11
1,2,9,10

此法的巧妙之处在于,通过合理的安排三次称重中球的位置,使得不同的结果能够得出不同的结论。这似乎涉及到信息论的知识(香农老先生好伟大啊……) 。

如果我们把它抽象成数学来看,大体如下:

用一个12bit的数表示称量状态,第N(1<=N<=12)bit表示第N个球被选中来进行称量。

首先,我们必须分三组来称量,直观上来看,是因为3^3=27刚好大于12x2=24,通过裁剪我们有可能把27削减到24。而如果分4组,3^4=81,削减到24的可能性很小。(谁能给出准确证明?)

其次,若分三组的话,我们如何通过合理设计把结果可能性削减到24?最基本的一个要求不能动:就是每个球必须放过,即:每一位都至少被置过一次1,这样才能保证不会出现三次称量都平衡的局面。这样也把27削减到了26。还有两种情况应该也能排除,那就是三次均为左或三次均为右的情况,这很简单,我们只要保证一个球不是三次都在左边或右边就行。

好了,我们把上面的要求转化成数学。先是每次放法的数学表示,可以用这样一个二维数组,里面有三组元素,代表三次称量,每组又有两个元素,第一个代表该次称量天平左边放入的球,第二个代表右边的球。上面的两个要求就变成了:

u12_t balls[3][2] ;

balls[0][0] | balls[0][1] | balls[1][0] | balls[1][1] | balls[2][0] | balls[2][1]==0xfff

balls[0][0] & balls[1][0] & balls[2][0] == 0

再往下走就是对这些数的筛选和判断了。筛选很简单,每个数必须是12位上的某4位置了1,其它8位均为0。这样的数共(12x11x10x9)/(4x3x2)=495个。我们每次要从里面挑6个,来进行判断,判断的方法是:对于上面说的24种情况,其中一半又是对称。这12种情况中每个情况下得出的结果必须是12位上只有一位置1的数,它就表示处于该位上的球是异常球,而且还不能重复。操作过程如下:

1. 对于每组元素,要么取其第一元素,要么取其第二个元素,要么取这两个元素的同或(至于为什么是同或,就留给您思考了)。

2. 把上面得到的三个结果进行按位与。

3. 遍历完这12种情况,把每次得到的结果或起来。若是0xfff,符合要求;否则淘汰。

这样,一个程序的雏形基本上就出来乐,如果不再进行优化的话,大概要进行237832111537020次计算。有兴趣的同学可以用Python来完成整个程序。(友情提示:Python里面的位操作和C里面的一样。)

写程序,过中秋

王小敏同学昨天给俺出了道题,还非得要求用C,结果差点儿没累死……换我们可爱的Python,结果一会儿就搞定了。题目是这样的:

“有一个3x3的矩阵,现在要往里面填9个不同的数字。唯一的要求是:相邻的数字相加不能为质数。注:数字的取值范围为:1~N。(N为一个>=10的数)请用程序解出尽可能多的符合要求的矩阵。”

俺穷举了一把,就得出结果乐~~我的程序如下:

! /usr/bin/env python

def Perm(items, n=None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in Perm(rest, n-1):
yield v + p

neighbors = [[1, 3], [2, 4], [5], [4, 6], [5, 7], [8], [7], [8]]

def IsPrime(x):
for i in range(2, x/2+2):
if (x%i == 0):
return False
return True

def WantIt(listobj):
for i in range(len(listobj)-1):
for j in neighbors[i]:
if(IsPrime(listobj[i]+listobj[j])):
return False
return True

enum = Perm(range(1, 11), 9)
for k in enum:
if(WantIt(k)):
print k

打住,这道题就到此为止吧。

接着说那令人心醉的patch。前几天做的一个patch提交了3次终于被Andrew给纳入-mm树了,呵,不容易啊!当中还正好赶上-mm树更新,不过quilt push一把居然没错!好险!要不今天也见不到akpm的确认邮件……说不定我还在那里痛苦地wiggle……

由于mm同学今天来不了,所以俺就闲得没事干了,又正好赶上-mm又更新,干脆又把内核编译一把。N个小时后,把我搜集的warnings打开一看,发了,N多。挑了其中两个好修复的,又提交了两个patch。欧也!

说patch不能不提我们的fmail,昨天一口气提交了N个patch,Carlos都给apply上了。我对Carlos的名字很感兴趣,其实他的全名是Carlos Daniel Ruvalcaba Valenzuela,太长了!貌似应该是俄罗斯人。

T-shirt候选图片

按照往年惯例,今年也准备自己去印个T-shirt。为了推陈出新,这次我拿出几个新颖的方案,希望大家各抒己见,多多发表自己的看法。

1. 冒充数学家

用此作为T-shirt图案最大的坏处就是怕被追问:“哥们,您这公式是啥意思?来,给你张纸,给俺证明一下吧?”……

2. 科幻派

啥都不说了,科幻粉丝都知道这是什么意思~

3. 实力派

(待定)因为没找到当初comp.lang.c上的那个很酷的签名,所以此方案暂时搁置……

如有其它更好的方案,还望不吝赐教!

这几天不爽

这几天没写博客的心情,不爽~!

大忙了一阵子,突然闲下来了,还不适应,不爽~!

虽然手头有N多活要做,可不知道该怎么下手好,不爽~!

做了几个小玩意儿(U盘上的Ubuntu,xylftp的rpm包),比意料中简单狠多,不爽~!

陷入读内核源代码的汪洋大海,没什么头绪,不爽~!

邀请某MM中秋节来我们这玩儿,人家来不了,不爽~!

以前见到的一个长得很酷的MM最近一直没见到,不爽~!

大周末的我还在这里闲得写这篇博客来列举我的不爽之处,不爽~!

总之,不爽~!

更换服务器

鉴于国内的河蟹已经“兵临城下”,决定把服务器搬至国外服务器。

感谢董溥同学提供空间。

BTW:根据某mm建议,更换主题。希望用IE的同学帮忙测试一下效果。

UNP卷一读书笔记(一)

1. inet_addr()是遗弃的函数,最好不要使用,因为它不能很好地处理错误。ping 255.255.255.255就是由此引发的问题,
因为inet_addr()会把255.255.255.255当成-1!

2. inet_ntoa()使用的是静态缓冲区,因此不是线程安全的函数。而且,inet_ntoa()使用一个结构体类型做参数,而不是指向该结构体的指针。这种情况很少见。

3. 系统调用被中断的一个例子:当父进程在等待accept()时,收到了子进程死亡的信号SIGCHLD,而转去处理这个信号。
此时如果不做处理,系统可能会自动重启这个系统调用,也可能会返回错误EINTR。

4. SIGKILL和SIGSTOP是不能被捕捉的,也不能被忽略。

5. UNIX文件中的change time和modification time不是一个概念。 如果我们使用chmod a-w myfile',这是一个change;如果我们用echo foo >> myfile’,那这是一个modification。change修改的是文件的inode;而modification修改的是文件本身的内容。 文件的modification time也被称为时间戳(timestamp)。只读取文件会改变文件的access time,但不会改变上面提到的两个时间。

6. POSIX规定,select的第5个参数应该是const的,但Linux并未这样实现。Linux会修改这个struct timeval,来反映没有睡眠的时间。

7. 收到FIN之后,进程仍然可以向该socket写数据,但会收到一个RST。如果一个进程在收到RST之后,仍然向此socket里写数据,它就会收到一个SIGPIPE信号。该信号的默认处理方式是终止这个进程。所以进程必须能够捕捉到这个信号来避免意外的终止。如果进程捕捉到该信号并返回,或者直接忽略这个信号,写操作会返回一个EPIPE。通过第一次写操作,而不是第二次,是不可能得到SIGPIPE信号的。

自由软件日活动顺利结束

这本该是昨天的文章,因为昨天拨号没拨上去,只能搁到今天了。

我们不是CCTV,CCTV整天报道得就像已经进入共产主义社会似的,会议没有不隆重的,闭幕没有不顺利的,领导没有不亲切的……

虽然两位嘉宾和老师们对这次活动评价都很好,但这里我就不说好的,专挑这次活动的几个不足之处说。毕竟我这是头一次组织这么大型的活动,没任何经验,总结一下不足,以备以后改进。

最大的不足,我认为,应该是我们对“自由软件”和“开源软件”的区别认识不够,基本上是混为一谈。听了徐继哲先生的讲话后才明白了些许。徐先生对这点表示遗憾,说要不是因为这他还可以把我们这次活动传到FSF上去。

其次就是发T-shirt,一是发T-shirt时现场过于火爆,场面稍稍失控,主要是低估了那些T-shirt对同学们的诱惑力;二是我们太大公无私了,最后连我们自己都基本上没拿到什么礼物。没事,我们自己做!“自己动手,丰衣足食!”哈哈!

最后一个不足,应该是王开源先生的演讲太过官方化,没把他在底下和我们讲时那种气氛弄出来,让不少人失望了,而刘洋兄更是乱了阵脚。

能举办这次活动要感谢很多很多人,抱歉,这里很难一一列举。我只想特别感谢的是杨爽老师,没她的鼎力协助不可能有这次活动!我也没想到她那么厉害,院里的几个领导她都可以帮忙说服,不愧是韩老师的得力助手。这让吾不得不佩服。

BTW1:我们邻班一个吴姓女生竟然拿到了一个Python的T-shirt,不过过后让我忽悠过来了,代价是让我请她和她男朋友吃顿饭…… 我估计这钱都够我买一件的了……

BTW2:董溥同学好幸运啊,晚上拜访徐继哲先生时,王开源先生一听说我们没拿到T-shirt竟然当场把自己穿的脱给了董溥同学……我当时都愣了……