我的补丁第一次被正式接受

很高兴宣布我的补丁第一次被Linux kernel -mm tree接受,在此之前提交过三四个补丁,似乎都没有被正式接受。;-(

感谢Andrew Morton和德国IBM的Cornelia Huck,没有他们的帮助不可能有这个补丁,尤其是Cornelia Huck,他非常耐心地辅导我三次修改这个补丁。

Andrew已经把这个补丁归入-mm树,可惜我找不到mm-commit邮件列表的www链接,在这里只给出一个lkml上的相关链接:

http://lkml.org/lkml/2007/4/10/335

同时给那些对Linux内核感兴趣的人一个建议:坚持下去!这是任何一个内核开发者能给你的最好的建议了!2.6现在仍有不少东西需要去做,赶快动手吧!

呵呵,非常开心啊! ;-D

学习C++的一些心得

最近在看《Essential C++》 ,发现自己的C++学得很不及格!下面是学习的一些心得:

1. 重载<<或>>操作符时千万注意,它不能是成员函数,如果不不幸把它声明成了类foo的成员函数,那你得这样用它了:
foo<<cout<<’n’;
没有人阻止你这么做,但这几乎肯定不会是你想要的!

2. 函数对象是一个好东西,它有点像是C中的函数指针。它其实就是重载了()的类,没什么奇特的。

3. static类型的数据成员表示单一的实例,它被所有类的对象共享。static类型的函数和Java中一样,也是可以不通过实例就直接调用。

4. 虚函数要么在声明它的类中定义,要么就被定义成纯虚函数。带有纯虚函数的类是不能有实例的。

5. 基类的析构函数必须是虚函数。

6. 使用dynamic_cast而不是static_cast。

7. 模板中不是只能带类型,而且还能带变量,它能按照你指定的值去创建“带有”这些值的类,它的作用有点儿类似于“默认”。

总结

总结一下周末这两天做的事:

1. 把转换注释风格的Python脚本 写完了,越来越喜欢Python了。

2. 清理完了blog,进行了备案。

3. 把kerneltravel 的内容基本全部上传到新的服务器,但还缺一些东西。

4. 写了4页书,这基本上符合了我自己定的一天至少两页的要求。

未来几天要做的一些事:

1. 给自己这里制作网页。

  1. 继续学习Python和C++。

3. 继续写书,这是长期的活。

4. 完成xylftp客户端的设计。 ;-)

一道挺有意思的编程题

函数原形已经给出:int p(int i, int N);
功能:调用该函数,打印如下格式的输出,例p(1, 7);
1
2
3
4
5
6
7
6
5
4
3
2
1
即每行一个数字。(注意:N只打印一次)
要求:

1. 函数中唯一能够调用的函数就是printf
2.
不准使用如下的关键字:typedef, enum, do, while, for, switch, case, break, continue, goto, if
3.
不能使用逗号表达式和?:表达式。

4. 函数中只能有一条语句。

你会怎么做呢?请仔细想想,这道题不太容易想,但思考的过程非常有意思。我写的程序如下:

source code

这服务……

先说申通快递。前几天从网上买了本书,过了两天就接到申通的电话,说有我的包裹,看来书到了。不过得让我去骨科医院那边去取,因为不往我们这边送了!去就去吧,忍了。第二天去之前给那人打电话说好,但去了之后那人的电话死活都打不通了!!害我白白在那里等了半个多小时。下午的时候又打电话,他解释说他的小灵通有问题,让我再去一次,打另一个号码。最后经过电话那头那人的“指点”,终于在一个偏僻的小区找到了他们,这才把包裹拿到!

再说网通。最近网通网络很不稳定,前几天是掉线,或者干脆上不去。这几天有所好转,不过这网速嘛,慢得像马一样,发一封邮件发二十多分钟愣是还没发出去!无语……

咱国内的服务能不能也和国际接轨?

发布SPyFTP

今天终于把以前用Python写的程序发布到Google Code上了,起了个自我感觉不错的名字SPyFTP,它是Smart Python FTP的缩写。打算把它的功能一点一点完善,以后还准备添加图形界面,而且也准备用Python写一下服务器端。项目链接如下:

http://code.google.com/p/spyftp/

希望各位朋友能帮忙测试,编写文档,或者进行改进。

引用Google Code上的一句话作为结束:

Release early, release often.

搞定mutt

昨天总算是把mutt搞定了,不过昨天网通掉线,上不了网,今天补上这篇。

其实mutt设置挺简单的,照着网上的文章来没多大问题。我主要再说一下我遇到的一些问题。首先是编码问题,都统一为gb2312,如果有中文的话,因为终端就是gb2312。这还涉及到vi,因为我给mutt 设的编辑器就是vi,在.vimrc里加上下面这句:

set fileencoding=gb2312
.muttrc里有这么几句:

set charset="gb2312" set send_charset="us-ascii:gb2312:utf-8"

以前总以为charset里也要加utf-8之类的,其实不用,那只是指定终端编码。而且也没必要设置什么charset-hook,不过这可能是因为我还没遇到什么更奇怪的编码,呵呵~

还有就是排序的问题。鉴于我订阅了很多邮件列表,所以使用下面的一种排序方式,现在感觉很爽。

set sort=threads set sort_aux=reverse-last-date
再就是邮件列表问题,最好在muttrc里加上subcribe命令。在回复邮件列表时,使用g比r要好,因为g能把cc里的人也能照顾到。

最后就是mutt天生的一个问题,无法收邮件,只能靠别的程序。我用的是fetchmail,但我启用fetchmail的daemon功能,并且在fetchmailrc里设定set daemon 60,但还是没收到邮件!干脆,自己写个shell脚本去跑。代码很简单,如下:

#!/bin/sh

while true; do
        sleep 60
        if fetchmail -d0 ; then
                #cat XXX.wav &gt;/dev/dsp
                mutt
        else
                echo "No mail!."
        fi
done

PS. 你可以把上面的注释去了,弄个*.wav文件做你的铃声!;-p

mutt+fetchmail+procmail

今天试图搞定这三个东西,实在不容易。

从开学到现在还一直是在Opera里收发gmail邮件,人懒了就这样。今天向Andrew提交patch时猛然发现该正式换一下mutt发邮件了,浏览器里有很多不方便的地方,最大的问题就是回复mailing list时不会把这个thread中的人都cc到。于是决定重拾mutt。

首先解决的是编码问题。鉴于xterm用的是gb2312,而邮件有中文的也有英文的,所以决定文件采用utf-8编码,而muttrc设置成us-ascii:gb2312:utf-8。但仍有一个问题没解决,刘洋使用的是evolution,而且还是gb18130这种相对少见的编码,所以他的邮件到现在仍然是乱码!然后就是mbox的问题,~/Mail/目录下有三个文件:from,from_me,sent,mbox,对应muttrc中设置:

set mbox=~/Mail/mbox
set spoolfile=~/Mail/mbox
set record=~/Mail/sent

这弄了半天也终于弄好了。

mutt先到此为止,还有就是procmail和fetchmail的问题。fetchmail可以以daemon的形式运行,可以在fetchmailrc中指定:set daemon 60。不过我试了试 ,发现似乎过了1分钟也没收到什么新邮件。kill掉fetchmail后再fetchmail -d0就马上收到一封!很奇怪。另一种解决方案是用crontab,不过这也有问题,crontab似乎只发送一个通知,而并没有把邮件弄到mutt里,因为我一直没收到邮件。这似乎还牵扯到procmailrc。彻底被搞糊涂了……

书的目录

公布一下书的目录,不过不太详细,因为估计到以后还会有大的变化。同时列出一些解释,希望得到你宝贵的回复。

前言

(介绍本书的内容,面向读者。)

第0章 计算机编程应该是一门艺术

(既然书名是《C语言编程艺术》,开篇应该介绍一下为什么这是一门艺术。碰巧我写过这篇文章。)

第1章 过去与现在

(介绍C语言的历史和现状。)

第2章 关于C的思考

(深入分析关于C的一些细小问题。)

第3章 解读C语言标准

(很大的一章,详细分析C语言标准。估计内容会很多,考虑以后可以切成上下两章。)

第4章 三步曲──编译,链接,运行

(从编译器的角度去理解C语言,此章我现在写还有点难度。)

第5章 巧夺天工──内核编程艺术

(介绍C在内核中的一些精彩使用,主要是Linux内核,如果时间允许,可以考虑BSD内核。)

第6章 应用的艺术

(分析其它一些编写精彩的实例代码,打算介绍glibc。)

第7章 文化及其它

(关于C的一些其它有趣的东西,技术之外的。)

附录

1.C/C++预留标识符
2.GCC 4.1对C99的支持情况
3. GNU公用许可证
4. 参考资料

(考虑到参考资料列表很长,现在在考虑是否要把它切割到每个章节。)

请问您对上面的安排有什么好的建议 吗?您哪些东西不应该在此书出现?哪些东西又被我忽略了?非常期待您的回复!

谢谢!