2007/5

讲座

今天下午讲座还算可以,讲的时候发现竟然有一页ppt放错了,还好也没什么大碍。虽然讲走了很多人,但是在意料之中,毕竟具备条件的人不多。没办法,我总不能从Linux基础开始讲,那样我一天也讲不完。

非常感谢张老师,听不懂还一直在给我捧场,还是张老师最好(貌似张老师在读博士,很辛苦啊)。感谢王老师,有他参加才使得我这次没白讲,总算把自己的东西留给老师了(当然也就算是留给西邮了)。弱弱地谢一下韩老师,他把这弄得太隆重了,而且还给我安了个学术讲座的帽子。汗啊,这和学术有啥关系啊,明明是技术嘛。我可背不起玷污学术的黑锅呵呵~~感谢赵崇日同学和郭拓同学帮忙宣传,感谢金明洁同学帮我处理一些杂事。

错过这次讲座的同学不用担心,你们可以看小公子同学拍的DV,也可以在下下周的周一上午一二节去B228再听一次,我打算下次把班里讲得只剩下一个人──刘洋。;-)

P.S. 这次讲座的ppt可以在这里下载:
http://wangcong.org/down/kernel.ppt

(其实早就放上了,只是现在才对外公布而已。;-p)

Schedule

两次讲座的安排如下:

第一个讲座

时间:本周三的下午七八节

地点:新校区B108教室

题目:Hacking Linux Kernel

内容:这次不是讲内核源代码,也不是讲内核是如何工作的(我把这些内容留给陈老师),主要是讲Linux内核的实际开发流程,如何参与开发,如何提交补丁,和一些注意事项和常用的工具。欢迎各位都来听一下,有一定的Linux基础是有必要的,但必具备编程知识。

(如果你不小心错过了这次讲座,没关系,第13周周一还有一次一样的讲座,地点是在B228,时间是上午1,2节课。)

第二个讲座

时间:下下周的周三下午七八节(如有变动,另行通知)

地点:等申请好以后会及时公布

题目:The Art Of C Programming

内容:这个主要是讲C语言的一些高级技巧,C99标准,混乱C代码。如果你认为你的C学得很好了,那么请来听一听这个,它会让你知道你的C根本就是不及格。;)注意:这次是面向C语言基础很好的同学和老师,恕不照顾基础差的同学!

致谢

感谢杨爽老师,她一直都在帮助我处理系里的工作,没有她的帮助是不可能有这两次讲座!感谢韩俊刚老师,王忠民老师的支持!感谢牛晓晨老师,李育贤老师!

Debugging Day

今天下午审查我们这边的Java代码时捕捉到N个bug,收获颇多。在这里小总结一下。

1. 最难找的bug

这个bug困惑我们很久了,我们为了它 已经有好几天食不甘味了。bug的症状是这样的,在通过ls读取数据连接的数据时,总是停在最后那里。我们一直以为是read的原因,而且网上也有讨论说是靠read()的返回值并不可靠。于是我们都在研究read()……但今天孔建军突然报告说是close()出问题了,而且把FTPOutStream.close()去了问题就没有了!最后分析发现,应该是Java中的stdout不能关闭。

修补很简单,如果是标准输出跳过关闭就行了。


+if (!LocalFile.equals(“”)) //We can NOT close the stdout.

  • FTPOutStream.close();
    2. 最无奈的bug

我们ls/get某个文件总是出错,一开始还以为是编码问题,后来我才发现竟然是空格问题!

修补就是把多余的空格去了!

3. 最头疼的bug

FTPConnection.Status的值几乎总是不对,关键是处理异常后没有恢复原来的状态。因为它和异常处理缠绕在一起,所以不太好修复。

4. 处理最巧妙的bug

到最后,周晓炜发现一个问题,我们竟然无法区分close和quit,因为有控制连接时我们都把它翻译成了QUIT!在处理QUIT时无法对最初的输入进行判断。

我想到的修复办法比较巧妙,那就是在quit对应的QUIT后面再加一个QUIT。发送第一个QUIT命令后,可以通过检查后一个命令是否还是QUIT来判断是quit还是close。这样问题就解决了。

Java!!!

对Java比较无语。

先是调试器JDB,和GDB根本就没法比。JDB不能通过向上向下键来取历史命令,JDB不能简单地通过回车来执行上一条命令,最关键的是, 在调试交互输入的程序时,JDB根本就不让你插手。KAO啊,无语~

再说Input/Reader 里面的read*方法,貌似通过其返回值来判断是否读完很不可靠,总是读“不完”。这还不算完,我不用返回值来判断了还不行!新闻组上说最好在另一个thread中读,无语了。为了读个文件还得再弄一个thread……

无语中……

关于讲座

第一讲座大体定在下周三或周四下午,讲Linux内核开发,不涉及太深的技术问题,主要是关于内核开发的过程和常用的工具等内容,建议对Linux内核感兴趣的去听一下。有一些Linux基础知识是非常有必要的,但不必有太深的编程知识。地点现在还没确定,毕竟地方不好找,正在和系里商量。

第二个讲座大体定到下下下周的周三或周四,因为这个讲座涉及技术问题较多,需要多花一些时间仔细准备。这个讲座的内容主要有:C99标准,C语言编程技巧,混乱C代码等。 地点应该可以安排到和前一个一样的地方。

多谢韩老师的大力支持!

另一道编程题目

题目是这样的,已知set的定义文法如下:


Set ::= “{“ Elementlist “}”
Elementlist ::= <empty> | List
List ::= Element | Element “,” List
Element ::= Atom | Set
Atom ::= “{“ | “}” | “,”

要求,输入一个 字符串,判断它是否为一个set。如果我没理解错的话,原应该错了,因为按照这个定义”4”不应该是set。这道题感觉比上一道还简单,我的代码如下(注意,我这程序是用后面跟的参数做为输入,你应该清楚shell是怎样处理参数的,请确定这一点后再来谈我这程序。):

http://wangcong.org/src/set.cpp

五一总结

五一七天完成如下任务:

1. 向Linux内核提交补丁,其中两个被接受了,自以为还不错。

2. 完成XYLFTP客户端的大部分编码工作,并为以后作好计划。

3. 做了两道算法题,惭愧,没达到预期目标(7道)。

4. 写了6页书,而且还完成了“参考资料”的清理工作,目录发生大的改动(感谢董溥同学的建议!)。有兴趣的同学请发邮件索取最新的目录。

总体来说还算可以。下面是未来几周的计划:

1. 写书得加快进展了,争取一个半月收工。

2. 决定主攻Linux内存管理一块,仔细研究一下这一部分的代码。

3. 近几周准备在西邮做两个讲座:一个关于Linux内核开发,一个是关于C语言高级技巧。为什么要做这两个讲座呢?说来好笑,我们系统结构老师看我实在不顺眼:既然你对内核有研究,那就给我们都讲讲吧?我笑,当然是求之不得了,这不明摆着送“羊入虎口”么?而且,既然要讲,那还得正式点儿,我担心班里的年轻人们听不懂,把系里老师都叫来听听吧。不,还不够,在再附带一个C语言的,我也想看看咱们谁的C更牛X。这也算是造福西邮吧,何乐而不为呢?(不知道系统结构老师现在后悔了没有?)

如果你碰巧在西邮,请帮忙宣传一下关于我讲座 的消息,具体安排和系里商量好以后会及时公布,请细心留意!Thanks!

一道编程题目

题目大体上是这样的:

输入两个字符串,要求 输出如何从前一个变到后一个,允许的操作只有如下三种:

1. 替换,Ca2表示把第2个字符替换为a
2. 删除,Dc3表示删除第3个字符c
3. 插入,Id4表示在第4个字符处插入字符d

如果有多种可能,只输出一种即可。比如,输入abcde和bcgfe,一种可能的输出为:
Da1
Cg3
If4

这不难,请仔细想想再看我写的代码:
http://wangcong.org/src/str_ops.cpp

两首歌

貌似最近好歌不多,可能是把那几首新的都听腻了的缘故。

推荐一首歌,卓亚君的“洛丽塔”,这不是新歌,不过对我来说是。这歌非常不错,用“致爱丽丝”做伴乐,清新,轻盈,听起来非常舒服。

周杰伦的“菊花台” 其实也不错,歌词挺美,勾勒出的意境有一种凄凉之美。