Tuesday, July 24, 2007
让人疯狂的两首歌:comm,susser tod与hey,Jude
而hey,Jude则是伟大的beatles乐团中McCarthy写给Lennon儿子的一首歌曲。曲中歌词充满了鼓励,充满了积极向上。而让我感到惊奇的是,曲子尾部与上面介绍的歌曲惊人的相似,风格类似地,充满了华丽的乐器演奏以及和声、人声。
不知道是不是commn,susser tod的作者是hey,jude这首歌的狂热fans呢 ^_^
我可是呢!
Saturday, June 23, 2007
我对学校教学教务等方面下达通知的一点想法
1. 回复中不出现挑衅性字眼,不辱骂他人;
2. 粗言秽语是被禁止的;
3. 喜欢针对作者,认为作者是sb的,请勿继续阅读;
4. 大牛请移步,不要浪费您宝贵的时间在我幼稚的文章上。
-------------------------------------------------------------------------------------------------------------------------------------
今天在跟某大牛聊天时,说起通知下放的问题。我们的一致意见是,级级下放的通知会导致信息与重视程度的下降。
到了晚上,又听说了原来不久前有IBM奖学金的申请事宜等。我可郁闷了,自己一点风都没收到。一问才知道原来只是在QQ的班群上发了通知。
认识我的都知道,本人于2007年春季学期有幸参与了中山大学与香港科技大学交流的项目,在那边学习了一个学期。而在那边我还没见过有人用QQ。
本来我就对QQ没什么瘾,这一去就几乎没有登陆过了。这下可好,几乎所有重要的通知我都miss了。
回想起自己申请去科大的时候,也是无意中在班群上看到了通知才知道的(我不常登录QQ)。本来2006秋季就有一次机会的,但是那时我也是完全不知道有这回事。
个人感觉,用QQ来传达通知,实在太儿戏,简直就是一个笑话——如果世界上没有tencent这间公司,怎么办?
再说,使用QQ的群功能,我就从来没试过自己离线的时候能收到完整的对话记录——我总不可能一天24小时挂在那等通知吧?
口头通知的话,对于一个班这种比较小的集体还好办,但是假如是全校性通知呢?
于是我想,对于教学、教务通知,我们是不是可以做得更好一点,而不是依赖一个商业软件?
1. rss feed
对于rss feed,大家应该都不陌生。我想,在信息爆炸的今天,谁也不想浪费时间去自己逐个网页打开去检查有没有新的事件、通知;谁也不想把自己的时间浪费在中国特色的网速上,打开网页,并通过层层链接才找到自己所需信息;谁也不想强迫自己花时间去适应各个不同website的look & feel以及style,底色、字体、字号、布局等。rss feed从一定程度上解决了这类问题。可以利用它来构建iyge可定制的、风格同意的人机接口,让自己可以从容地进行有选择的阅读。于我而言,一个很小很简单的功能,就是在feed列表上显示一个feed有没有,有多少篇新文章。这样,我们就不用等待漫长的网页打开时间,却发出“oh...又没新通知”之类的抱怨了。
这里并不是推广这项技术。事实上,随着web2.0时代的到来,网站提供rss feed已经是一种趋势。那么,我们是不是也可以尝试一下呢?在科大有一门embedded sytem的课(在此致谢梅伯乐博士(Dr. Muppala),虽然没上过他的课,但是短短一小时的谈话了解到了他在计算机科学教学方面所做的一些尝试与创新),就有专门发布重要信息的feed,如考试通知、停课通知等。学生可以利用他喜爱的rss阅读器订阅内容,从而免去了逐个打开course的website来检查有无新通知之苦。(对于科大的 CS,每门课程均需维护一个website以供学生查看通知、资料等。如果选的课多了,每天要检查那么多个website也是一件很浪费时间的事)。
其实对于我们班级,也有不小的创新。这个学期我们班级有了自己的blog,作为信息发布平台,专门用于发布公示、实习通知、优秀讲座等。而现在绝大多数的 blog系统都提供rss feed的自动生成。这样我们就可以通过订阅他来达到快速检索的目的了。然而有所不足的是更新速度慢,资源少,也许这跟班干人数及力量有限,没有那么多课余时间来维护有关。
2. mailing list
似乎现在还没听说过在教学教务上使用到1中的方法,但mailing list的方法,却是一早就有了,并且到今天也还是长盛不衰。就拿科大来说,学校内所有事务,均是通过一个与学生帐户绑定的邮箱来进行通知的。我收得最多的邮件,包括电影播放通知(隔三差五就有老师组织观看电影,并进行讨论)、就业指导中心开展的企业宣讲会和就业指南讲座,以及各门课程作业、 project提交的通知。这有效地保障了个人的知情权。使用分级的方法,可以免去“收信人地狱”。如,发给staff的邮件可以定制一个staff list;发给全体本科生的邮件,可以用UG list。本科生分年级的话,又可以用UG1~UG4来分别表示。继续下去又可细分为UG2-CS-04-B。每个list之间的内容也是可以交叉的,如 jacky这个人属于UG3,但同时他也是校篮球队的一员,因此在basketball这个list里也有他的邮件。
我想,这也许就能解决之前所说的通知逐级下放而引发的信息与重视度流逝的问题了吧。负责人直接通过list发送mail到个体单位,则可有效地解决A->B->C...->Z->entity的过程中可能出现的误解/偏差。
(不难理解这种情况:当entity有问题想咨询时,会引起一个逐级向上的问题链。也许到第i个人时,他会认为,“oh!This question,naive,too simple!”,就自作主张地解答了,殊不知很可能自己造成了曲解。如果说为了万无一失而由最终的负责人来解释的话,为何不直接与负责人打交道呢?人力物力都可以节省许多了。
这个方法,应用到教学中也是很有帮助的。虽然不是每个course的website都有rss feed,但是重要的通知,还是会通过mail list来进行信息传达的。如comp341(一门课程的代号)的一个mail list是comp341stu,就代表所有选了这个课程的学生。
另外,也可采用邮件订阅的方法,来完成类似rss feed的功能。
两种方法的不足:
rss feed:
1.像QQ一样,也需要一个client。但现今大多数的rss reader都是功能单一、免费的。采取pull的方式,需要主动获取信息。
2.如果不是自己维护feed,而是采用一些service provider,如feed burner的服务,则有可能造成滞后,即unsynchronized
mail list"
1.需要学校提供server,并投入人力物力(但事实上,这已经解决了——我们每人都有my SYSU mail)
2.要养成勤check mail的习惯
3.添加附件一次性不能超过极限(但一般通知不可能有那么大附件,有大附件可以考虑给链接)
4.quota problem。学校用的邮箱,20M-100M属于正常幅度,如果纯文本信息,则不必太过担心。但附件一多,也是会用完的。
(一个解决方法:利用forward功能,forward到一些大的个人邮箱,如163等。也可利用gmail等的POP3 fetch功能,主动到各邮箱内取出邮件)
前景与展望:
对于技术因素,上述两方法都不成问题。
更难的是人的因素,毕竟现在应该很多人都不愿接受和尝试新事务。要所有人都学会使用上述工具,似乎是mission impossible。
而且事物都是两面的,也许两方法我觉得好,但是在他人眼中只是bullshit。
但不管怎么说,在信息爆炸的今天,如何有效、迅速地过滤与自己无关的垃圾信息,并于短时间内汲取所需信息,进行多快好省地有目的有效率地阅读,一直是我追求以及感兴趣的目标。
-------------------------------------------------------------------------------------------------------------------------------------
以上纯属个人一点不成熟的想法,欢迎讨论与赐教。
Wednesday, June 20, 2007
走在香港的大学之间(图片版)
(里面图片点击可以放大,enjoy~实景比照片好看~)
科大给我的感觉最深,毕竟自己在那里进行了4个月的交换学 习。无法忘记学习到12点,1点时回到seafront时吃上一碗热热的车仔面……科大坐落在九龙清水湾,依山靠海,是人们口中的“高尚住宅区”。很难相 信在香港这个弹丸之地能容纳下这么个美丽的校园。这里远离失去的喧嚣,是读书治学的圣地。“科大把最美的风景留给了学生”,他们就是这么说的。关于科大, 就写到这里吧,不然就跑题了,变成另外一篇文章……总的来说,科大给人的感觉就是海边的山上依山建起了一座现代化的校园。
中 大跟科大有点像,也是依山靠海。而中文大学与中山大学给我的感觉倒有一丝相似,里面都是绿树葱郁,美景怡人,有一点文化积淀的感觉。而中文大学(以下简称 中大)却没有中山大学那么拥挤与古朴。中大里面分为几个校区,或說书院。楼与楼之间间隔很远,走在校园里面就好像山行,你不知道什么时候会走到另外一座建 筑。一句话点评:建筑星星点点地分布在一座绿树葱葱的山上。达到山顶,则可以穷尽四周的海景。
理工大坐落在红磡某处的城市建筑中额角,交通非常方便,从红磡地铁站出来直接便可到,周围也有另外几个。理工大也是香港新兴的大学之一。建筑非常有特色,使用统一风格的红色瓦块,给人的感觉就像踏进一所未来世界的科技园中。
港 大位于中环,是以前殖民时代建设给英国人以及贵族的学校。进入中环,城市的风格就变了,这里才是真正的香港特色!进入港大后,则更多地体现出来了。各式各 样的英式建筑保留得很好,让人大开眼界。而且,里面的风格很舒适安逸,就像是贵族宫廷的庭院似的,建筑极尽英式古典风格,隔不远就有一些小广场,桌椅等给 人休憩。里面有个荷花池,一座中山先生像坐落之中,楼边一个巨大的横幅写着中山先生重游故地时发表的演说时的一句话“我有如游子归家”。依山而上,一直绕 到学生会楼前的广场,可以看到有一个艺术雕塑——XXXXX耻辱柱,按照上面的说法,该雕塑已经在多处展览,现在永久居于港大校园内。涉及到政治问题,我 还是不要继续说了。
城 大,不大了解它的名字的由来。但是感觉它的确是一座城市里的大学——从九龙塘地铁站出来进入又一城shoppingmall,从某个出口直通城大大门。城 大给我的感觉就是小,所有建筑都挤在了一起。广场旁的水池里有董建华写的“敬业乐群”四字的浮雕。由于地方太小,学生宿舍不得不跨过一条街而建在另一处。 在城大有认识人,因此上去看了看宿舍。感觉宿舍区倒还是挺大的。
浸 大与城大相距不远。浸大全称浸会大学,听说传理专业(不知有没写错)最牛,TVB有90%人都是那里的毕业生。浸大似乎跟宗教很大(不然怎么叫浸会大 学……),里面有座教堂的,这也是我第一次见到教堂(虽然广州也有)。里面给我印象最深的就是那个盆栽园,看样子是精心维护的。我想,如果我有女朋友,一 定会带她来这里,人约黄昏后,在这个花园里好好体会那浪漫的气氛的。
Thursday, May 31, 2007
叶振棠 - 一生爱打拼
一直没有发觉叶振棠是那么多脍炙人口的电视剧主题曲演唱者。
自己看过的不多,包括我来自潮州、苏乞儿、三国演义、太极张三丰、少年英雄方世玉、天蚕变。基本上都是小学、初中时看的,但是基本上都是经典……
看看这些歌曲,有谁共鸣。
01 胜利双手创 词:梁立人 曲:陈百潭 (亚洲电视剧《我来自潮州》主题曲)
02 忘尽心中情 词:黄沾 曲:顾嘉辉 (无线电视剧《苏乞儿》主题曲)
03 三国演义 词:Traditional 曲:陈光荣 (亚洲电视剧《三国演义》主题曲)
04 戏班小子 词:黄沾 曲:顾嘉辉 (无线电视剧《戏班小子》主题曲)
05 难为正邪定分界 词:郑国江 曲:顾嘉辉 (无线电视剧《飞越十八层》主题曲)
06 戏剧人生 词:卢国沾 曲:黎小田 (丽的电视剧《浮生六劫》插曲)
07 浮生六劫 词:卢国沾 曲:黎小田 (丽的电视剧《浮生六劫》主题曲)
08 大内群英 词:卢国沾 曲:黎小田 (丽的电视剧《大内群英》主题曲)
09 太极张三丰 (丽的电视剧《太极张三丰》主题曲)
10 大侠霍元甲 词:卢国沾 曲:黎小田 (丽的电视剧《大侠霍元甲》主题曲)
11 找不着藉口 词:卢国沾 曲:黎小田 (丽的电视剧《浴血太平山》插曲)
12 醉凡尘 词:杨绍鸿 曲:张兆鸿 (亚洲电视剧《少年英雄方世玉》主题曲)
13 一个信念 词:看源良 曲:张北鸿 (亚洲电视剧《南海十三郎》主题曲)
14 创世风云 词:蔡咏诗 曲:杨梓乐 (亚洲电视剧《创世风云》主题曲)
15 世界由我造 词:怡清 曲:陈宏 (亚洲电视剧《我来自广州》主题曲)
16 半生风云 - 叶振棠/李国祥 词:李紫昕 曲:李紫昕 (亚洲电视剧《电视风云》主题曲)
17 天蚕变 词:卢国沾 曲:黎小田 (丽的电视剧《天蚕变》主题曲)
18 醉红尘 词:郑国江 曲:顾嘉辉 (电视剧《英雄出少年》主题曲)
19 浴血太平山 词:卢国沾/潘伟源 曲:黎小田 (丽的电视剧《浴血太平山》主题曲)
20 情缘万世长 词:郑国江 曲:顾嘉辉 (亚洲电视剧《穆桂英》主题曲)
21 缘份是天意 - 叶振棠/田蕊妮 词:杨绍鸿 曲:叶振棠 (亚洲电视剧《我来自潮州》插曲)
22 我来自潮州 (自己人Fun版) 词:梁立人 曲:陈百潭
Saturday, May 26, 2007
在notebook上挂载sd卡
新买的laptop有5 in 1 card reader,插入SD卡,执行dmesg提示:
tifm_7xx1: sd card detected in socket 1
自动能检测到有SD卡插入,但未能自动挂载(GNOME提供的gnome-mount仅能自动挂载U盘和CD/DVD ROM)
但是在/dev里没有发现类似的文件,怎么办呢?
解决
上网查后,知道了必须挂载相应的读写模块才能进行读写.方法如下:
[root@DMH387 ~]# modprobe tifm_sd
挂载tifm_sd模块,用于SD卡读写.
此时在/dev中就多了 mmcblk0 和 mmcblk0p1.意思应该是SD/MMC card 0 以及其第一个分区吧.如果有开GNOME的自动挂载功能,应该能发现并自动挂载(另外,在gnome panel上的磁盘挂载者applet也相应出现(在面板上添加了,但是不出现,直到插入SD卡或其他需要挂载的设备))
如下:
[root@DMH387 dev]# mount | grep mmc
/dev/mmcblk0p1 on /media/disk type vfat (rw,noexec,nosuid,nodev,shortname=winnt,uid=500)
自动挂载
可以在/etc/modules文件里添加需要自动挂载的模块,如以上情况,则可以添加:
#auto mount sd card
tifm_sd
到该文件,以实现启动自动加载该模块
Friday, May 25, 2007
唉……Java……mid-term 67,final 69……
再者,Java考试的内容也未免太刁钻了……首先不定项就占了60分,答案多一个少一个都没分。而且,还很多是考得很细的。本来说像这次的java course,覆盖范围包括基本语法,多线程、网络、数据库、JSP、GUI programming已经很多了,偏偏出题还要出那么细……不过,既然人家能拿88,自己也没什么好说的了……
谨以此文哀悼自己大学生涯最烂的一科吧~同时也感谢instructor Liao Renlan小姐的慷慨大方,自己整个学期就上过4,5节课……还有两个TA,自己每次lab section都没有准备好,555……
Thursday, May 24, 2007
/etc/X11/prefdm : 更改自己喜欢的xdm
# Run preferred X display manager
preferred=gdm
通过修改为gdm/kdm等,可以改为gdm,kdm.
但是这个脚本是什么时候被执行的呢?
原来,在/etc/inittab里有这么一行:
# Run xdm in runlevel 5
x:5:once:/etc/X11/prefdm -nodaemon
当init执行到这行时,就执行了这个脚本来运行自己喜爱的xdm.
Linux系统服务学习心得——不断补完中
进入/etc目录,有一个叫做rc.d的文件夹,而且,还有rc[0-6].d的文件夹。但是,rc[0-6].d是到/etc/rc.d/rc[0-6].d的符号链接。
在/etc/rc.d目录里,有这么些文件:
init.d
rc
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.local
rc.sysinit
以下分别解释一下各个文件/目录的作用:
init.d
包含一组script. 基本上, 在启动时或进入另一个运行级别时, 每个服务(service)需要一个script来进行自启动. Services包括SSHD,sendmail, HTTPD等等.
rc[0-6].d
我们首先要知道"启动级别"的概念.
可以查看到里面有类似以下的内容:
# vi /etc/inittab
Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
意思是,系统可以看作一个状态机,启动后可以进入0-6这几个级别,但是如果启动后直接进入停机/重启级别就没意思了吧?因此应该进入1,2,3,5这几种级别之一,功能分别如注释里面所说.我们一般选择3--多用户全功能模式,或5--在3的基础上进入X.
进入不同的启动级别会启动对应级别的服务.这就是rc[0-6].d的作用.我们执行以下命令:
# cd /etc/rc.d/rc5.d
# ls -l
lrwxrwxrwx 1 root root 15 04-30 16:26 K01smolt -> ../init.d/smolt
lrwxrwxrwx 1 root root 24 02-05 01:22 K02avahi-dnsconfd -> ../init.d/avahi-dnsconfd
lrwxrwxrwx 1 root root 16 02-05 01:22 K02dhcdbd -> ../init.d/dhcdbd
lrwxrwxrwx 1 root root 24 02-14 20:06 K02NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx 1 root root 34 02-05 01:23 K02NetworkManagerDispatcher -> ../init.d/NetworkManagerDispatcher
lrwxrwxrwx 1 root root 19 02-05 01:22 K05saslauthd -> ../init.d/saslauthd
lrwxrwxrwx 1 root root 23 03-17 23:47 K08vmware -> /etc/rc.d/init.d/vmware
lrwxrwxrwx 1 root root 13 02-05 10:09 K09vdr -> ../init.d/vdr
lrwxrwxrwx 1 root root 19 02-05 01:29 K10dc_server -> ../init.d/dc_server
可以看到,在rc5.d里面,没有真实存在的文件!只有符号链接!
所以我们可以看出
系统所有具有自启动功能的服务,都必须拥有一个用于配置启动的脚本,这些脚本放在/etc/rc.d/init.d/里;而在rc[0-6].d里,则分别指明了对应的启动级别会启动的服务,因此,可以针对不同的启动级别设定要启动的服务!
这些连接的命名规则如下:
一个字母+一个数字+启动脚本
'S'是指启动这个特定的script, 'K'是指结束它,即kill。 数字是顺序,Init将根据顺序启动所有的services. 因此我们可以用一个两位数字和一个大写的'S'或'K'来启动或结束所需要service。
Init如何启动和结束service? 很简单. 每个script都写了一个接收参数用来'start' 和'stop'. 我们可以用命令行来执行这些script, 如:
/etc/rc.d/init.d/httpd stop #结束httpd服务器.
Init只需读文件名, 如果有'K', 它就用'stop'参数调用script. 如果有'S',则用'start'参数.
rc.sysinit
这是一个脚本,在系统启动时运行一次.这关系到系统启动流程:init读取inittab获得运行级别后将执行这个脚本进行系统初始化.关于这个步骤所进行的工作有很多,推荐鸟哥文章:
開機關機流程與 Loader
rc.local
在启动时或者修改运行级别时, 当所有的其他初始化完成后, 将执行文件/etc/rc.d/rc.local. 可以在这增加新的初始程序,我们自己所编写的程序建议加在该文件中。我们可以看到在rc*.d目录下启动顺序为99的链接文件名为S99local,是一个指向rc.local的链接.这说明在改运行级别所有服务都启动后,就执行rc.local脚本.比方说,我要开机后自动执行我自己编写的一个程序,就可以在该脚本里加入启动该程序的命令.更一般的做法是,编写自己相应的模块化的脚本,每个脚本只完成一项工作,然后把运行该脚本的命令放入rc.local里,就可以更好地管理了!
rc
这是一个脚本,作用是切换运行级别时start/stop相应运行级别的服务.
关于service命令
这个命令其实实际工作是,进入/etc/rc.d/init.d目录里搜寻作为参数传递进来的服务名,然后执行之.以下代码执行效果完全一样:
# 使用service 命令启动httpd
# service httpd start
# 直接执行启动脚本启动httpd
# /etc/rc.d/init.d/httpd start
事实上,service只是一个脚本文件,可以在/sbin下找到它并查看内容.
关于chkconfig命令
我们一般不手动更改rc*.d目录下的文件及结构,而是通过系统提供的实用程序来完成:
[root@localhost rc5.d]# whatis chkconfig
chkconfig (8) - updates and queries runlevel information for system services
chkconfig (rpm) - 用来维护 /etc/rc*.d 文件层次的系统工具。
keytouch终于配置成功了
其实keytouch我很早以前就装上了,但是由于没有已经配置好的键盘,于是只好随便找了个类似的ACER机子的映射文件来用,这样就基本上只有音量调节钮可以用。今天终于忍受不了了,于是上官方网站仔细看了看,发觉,原来有keytouch-editor这个好东东,这下子,就做到了所有键盘都支持了——我们可以专门使用它来为自己的键盘localization。
1.安装keytouch
http://keytouch.sourceforge.net
上官方网站下载keytouch-2.3.0的src(也可以直接下载RPM/DEB包,可惜没有FC下的,以前安装的keytouch-2.3.0-pre4配置得很好,插件很齐。但是在我的机子上好像有BUG).
解压后编译安装,这里要注意的是安装个官方安装手册说明,必须分别在keytouch-2.3.0,keytouch-2.3.0/keytouch-config,keytouch-2.3.0/keytouch-keyboard目录里进行configure,make,make install。
2.安装keytouch-editor
直接下载最新的RPM包或DEB包进行安装即可。
3.生成键盘配置
运行keytouch-editor进行配置.必须以root身份进行.
首先选择自己的键盘类型,按确定后,随便按一个特殊键进行操作.然后即可新建一个映射,按提示进行具体映射。(其实,所有键都可以映射!功能非常强大!因此,我把UP键左右两个没用的货币符号分别映射为audacious和smplayer,hoho)
我主要映射了这几个键,其他键我的FC6都原生支持。
E -- 启动我的wireless assitant
mail -- 启动revolution
WWW -- 启动firefox
P -- 启动keytouch
mute -- 静音
Volume Up/Down -- 调节音量
另外F1-F4上面几个,以后也许可以充分利用起来...hoho
所有键都映射好后,就可以保存文件并且在keytouch里导入了(是个XML格式的文件)。
4.配置keytouch
运行keytouch后,首先会提示选择键盘,这里import刚才创建的文件并选择之即可.导入后以后就可以方便地直接在keytouch里进行配置了!enjoy!!
Tuesday, May 22, 2007
让console与X剪贴板交互——xclip
今天终于给我知道了有xclip这么个utility...(不要BS我阿>_<)
$ uname -a | xclip #把uname -a的输出pipe到X的primary buffer,即XA_PRIMARY
具体可以查看man xclip。作者写了非常详细易懂的介绍,里面有一句话我很欣赏~
I hate man pages without examples!
呵呵,有example果然能很快上手。
我使用了
alias xcp="xclip -selection clip "
来定义了一个xcp命令,作用与xclip一样,不过默认使用XA_CLIPBOARD,这样就可以方便地使用C-v来进行粘贴了。这在贴程序的时候特别方便,比如
[iveney@localhost excersize]$ xcp combine.java
然后就可以……xixi
Friday, May 18, 2007
用awk处理从网页上copy出来的表格数据
从教务处复制下来的表格数据如下:
算法设计与应用 07上 05级 郭嵩山 3 选修
遗传优化方法 07上 05级 张军 3 选修
JAVA程序设计 07上 05级 张治国 2 选修 需要同时选择该门课程的实验课
JAVA程序设计实验 07上 05级 张治国 1 选修 作为“JAVA程序设计”的实验课
组合数学与数论 07上 05级 陈晓峰 2 选修
无线通信网络 07上 04级 蔡国扬 3 选修
J2EE架构及其程序设计 07上 04级 张治国 2 选修
网络系统结构 07上 04级 尹冬生 2 选修
XML及应用 07上 04级 叶小平 2 选修
工作流技术 07上 04级 余阳 2 选修
计算机游戏与动画 07上 04级 纪庆革 2 选修
并行与分布计算 07上 04级 林小拉 3 选修
高级数据库系统技术 07上 04级 汤庸 3 选修
多媒体技术 07上 05级 李才伟 3 选修
信息安全技术 07上 04级 王常吉 3 选修
函数式程序设计 07上 04级 乔海燕 2 选修
--
保存为course
使用
awk -F" " '{print $1}' course
输出第一栏内容为:
算法设计与应用
遗传优化方法
JAVA程序设计
JAVA程序设计实验
组合数学与数论
无线通信网络
J2EE架构及其程序设计
网络系统结构
XML及应用
工作流技术
计算机游戏与动画
并行与分布计算
高级数据库系统技术
多媒体技术
信息安全技术
函数式程序设计
Friday, May 11, 2007
我与老歌,怀念经典
家乡是个小地方,90年代初,卡拉OK风靡全国。那时我才多少岁,我已经记不大清楚。只是很记得,那段日子大人们都很流行去唱卡拉OK。一般是先吃饭,酒足饭饱后,再开始他们的旋律。
依旧记得,爸爸最喜欢唱的歌,是俄罗斯歌曲《三套车》,还有粤剧。有一首《万恶淫为首之乞食》,大人们都很喜欢唱。妈妈则最喜欢那英的《雾里看花》。
那时的自己很害羞,从来没有唱过一首。但是事实上,那些歌词,那些旋律,早已在心中留下了不能磨灭的印痕。
因此一直以来,无论歌坛如何变化,多么多的新歌手出现,成名,也有不少经典的歌曲。但是心中一直留恋着那时的老歌。当同学们争相购买某某某出的新专辑,哼着青春的旋律时,我却还是在那继续听我的旧歌。
《三套车》《喀秋莎》《莫斯科郊外的晚上》等俄罗斯民歌,一直是我的最爱。不少歌曲我都能用吉他弹唱;童安格的所有歌曲,如《把根留住》、《耶利亚女郎》等,一直是我平时精神的食粮。有一句话很能让人回想,那就是黑鸭子乐团《难忘的苏联时代》专辑的介绍,“白桦林的飞雪,伏尔加的波涛,莫斯科郊外的星月,纺织姑娘窗前的灯光,一段曲折而永续的友谊,一种在两个民族间广为传唱的旋律,岁月如歌之《难忘的苏联时代》将带你重温激情燃烧的岁月。 ”呵!岁月如歌,激情燃烧的岁月!那时一段多么让人难忘的时光呵!
对于香港歌曲,更是喜爱无比,毕竟,自己的母语是粤语。港台歌手近年来有很多偶像歌手,吸引了大批的青少年。但是我看到的,却是一代又一代的老歌手的陨落。张国荣梅艳芳的离去,是香港乐坛沉重的损失。四大天王早已不是现代的词语。草蜢、小虎队,现在又有多少人听过?
听着《狮子山下》,我很羡慕香港人。从这首歌曲里,能听到他们作为香港人那种同甘苦,共患难的骄傲与自豪。只可惜,现在香港的年轻人(其实,我也才21),有多少个喜欢这首歌?
Beyond是个奇迹,是个永远的传说,是迄今为止我所知道的唯一一个在全国盛久不衰的流行乐队。所认识的北方同学由于语言障碍,一般都很少喜欢听粤语歌,但是只有beyond能完完全全征服我们。我的三伯父已经50岁。我永远不能忘记,当我送了一张beyond的专辑给他时,脸上一瞬间流露出来的那一丝的年少,但更多的则是紧接着的沧桑。我看着他马上转身到房间,翻箱倒柜找出80年代的CD。当他拿出一张CD放入演唱机,紧接着听到年少的beyond声音时,我们眼里都涌现出了,泪光。第一次接触到beyond比较迟,还记得是小学五、六年级时,一群同学在高呼“A-ma-ni”的时候,觉得旋律很美,但是又不知道是什么歌曲。直到上了初中,经同桌指点,才知道,原来那是beyond。beyond从此成为了我精神的支柱。曾几何时,当自己学业不顺,感情受挫,心有郁结时,夜半时分,一个人在阳台上轻抚琴弦,低声吟唱,就能心情好起来,重新振作起来,第二天又是一个新的,饱满的自己。
六年级一部《精武门》风靡全级……-_-!!!永远无法忘记那时,男孩子们每天模仿着陈真的“我話比你地知,我地中國人,唔喺東亞病夫!”,每天必定要“聚众”合唱一曲主题曲《精武英雄》,"什么,东亚病汉","宁于猛火中,灭--亡!!"
还有好多,以后再写……
Monday, April 30, 2007
IBM PC的系统引导过程之我见
-------------------------------------------------------
首先介绍一下所谓的“引导”的历史。Bootstrapping一词来源于一个德国传说-_-!!!
一位叫Baron Münchhausen的大哥声称能抓着头发,自己把自己提起来……后来黑客们引用这个词语(后来简称为booting了)来比喻计算机启动过程——这是一个鸡与蛋的问题!究竟是先有鸡还是先有蛋?对,计算机的启动过程也是这样。大家都知道,计算机运行的是程序,而程序是装载在内存中的。计算机必须以操作系统为用户接口运行,计算机刚刚启动时,内存中没有任何操作系统,要把操作系统装入内存,本身就要有一个可以执行这个动作的程序阿……这就造成了paradox.
因此,人们想到,可以利用boot loader这样一种程序来加载OS。N年前,还是打孔机时代时,程序员通过手动输入程序到内存中来启动计算机……现在则好多了,使用boot loader可以完成这些任务。通过多级的引导,boot loader一级一级引导程序,最终引导操作系统。
事实上,操作系统(这里都是以IBM PC为例,不同架构可能不同,比如Apple)引导的过程是这样的。基于IBM PC架构的机器都会有BIOS,一个嵌入在主板中的芯片,使用CMOS存储某些程序与信息以完成开机后的“加电自检”,Power On Self Tesing,POST,作用是检测各功能部件,如内存,显卡等。然后,读入MBR——Master Boot Record。这是一个512字节的扇区,位于可引导存储介质的第一个扇区。这个扇区结构如下:

根据上表,可以看到,该512字节扇区的内部结构,其中也指定了一个磁盘只能有4个分区!因为只有64个字节分配给分区表,而每个分区表占了16字节,因此只有4个。
对于每个磁盘/软盘,或其他可引导存储介质。都必须有一个主引导扇区,因为BIOS加电自检后自动装载这个扇区。但是如果有很多磁盘或软盘或光驱呢?因此在BIOS里有一个启动有限选项可以选择。BIOS逐个检测这些启动介质,知道检测到合法的启动介质。观察512字节中的01FE和01FF字节,可以发现,这是所谓的MBR签名。固定的AA55H标识了这个是一个合法的引导扇区!这是一个段的最后两个字节,硬件就是靠它们来区别这个段是否为引导扇区。这就是所谓的“第一阶段引导”。如果没有操作系统怎么办?那么就会显示:Please Insert a bootable disc and press a key"这是引导扇区(boot sector)显示的,而不是机器的固件。 接下来,在4个主分区中,只有一个被标识为“活动分区”。BIOS通过检测4个分区表进入这个活动分区,读入这个活动分区的第一个扇区。此时控制权交给了该段扇区存储的程序。这个扇区也称为“分区引导记录”(partition boot record)。分区引导记录实际上是另一个“第一阶段引导程序”。但是它能够从这个分区装载一组代码,这些新代码称为“第二阶段引导程序”,然后进行“第二阶段的引导”。对于GRUB,它在MBR写入第一阶段引导程序(最多前446个字节),然后通过这个第一阶段引导程序跳入活动分区的第二阶段引导程序。此时,已经没有512字节限制了!这时再由第二阶段引导程序载入操作系统内核。对于DOS等老式OS,一般是自己载入自己,即loader本身就在操作系统里面。而对于windows,linux等,则由GRUB,LILO,NTLDR等经过几个阶段的引导再装入自己(kernel).
dd if=/dev/hda of=mbr.bin bs=512 count=1
来生成MBR的镜像。
-------------------------------------------------------
参考资料:
- Booting词条from wikipedia
- MBR词条from wikipedia
- From Power Up to Bash Prompt
- LPI 证书 101 考试准备: Linux 安装与包管理 from IBM developerWorks
硬盘,磁盘,存储。分区,主分区,拓展分区与逻辑分区。乱谈。
-------------------------------------------------------------------------------------
1.存储器的分类
哇靠……怎么从这里开始讲起了……不过我实在想输理、萃取以下以前组成原理所学过的东西……
当然,从本质上来分,就是RAM和ROM,或另一个基本相同的角度来说就是易失性与非易失性。RAM一般用于PC机上的内存,从以前的SRAM,DRAM,到SDRAM,再到今天的DDR-RAM,以及DDR2-RAM,已经有了质的飞跃。但是它还是非易失性的,只要关机了,数据就会丢失,这与物理特性相关。
- OS的待机与睡眠:待机时切断硬盘,显示器等电源,但内存仍然供电,因此可以快速恢复;而睡眠则把所有当前信息(或说context)保存在硬盘里,然后关机。当再次开机时,OS检测到上一次关闭时处于睡眠状态从而把context从硬盘中读取出来,快速恢复上一次休眠时的状态。
所谓的BIOS,即Basic Input Output System,则是用ROM做成的,一般固定于主板(Main board,Mother board)上,存储着用于引导计算机启动,完成一些routine的代码,程序,例程。BIOS这样东西可谓让人又爱又恨,爱在它对于计算机启动的不可缺少,恨在它功能的局限(我觉得这可能是由于IBM PC的架构所致……当时以为够用,谁能预料到PC这东西能发展如此迅速呢?)比如说里面限定了CHS(Cylinder,Head,Sector)大小等。总之,它与整套IBM PC的架构密不可分,磁盘驱动器,总线,CPU等都必须遵循某套必须符合BIOS的规范才能正常工作。(比如说磁盘驱动器的MBR)
而磁盘驱动器则是属于另外一种东西了……它使用磁介质——此处不表。
2.磁盘的MBR(Master Boot Record)
由于种种历史原因,磁盘的MBR位于CHS=001。这里存储了一些关于整块磁盘的元信息(meta data),最重要的,莫过于从018A-01B7的4个9字节的主分区表入口,从01BE-01FD有4个16字节的主分区表了!这也是为什么人们总说:一块硬盘只能有四个主分区的原因。
这是由PC机硬盘的这种通用分区结构所决定的,这种通用分区结构不管你的电脑中使用的是哪种操作系统:MSDOS、PCDOS、DRDOS、Windows95/98/ME、Windows NT/2000/XP、Linux、Unix、Novell等等,都不能改变这种分区结构。除非,你的PC不是IBM PC,或说你的PC不是x86/x86-64架构的。
但是,只有四个主分区,显然是不够的。因此,后来又有了拓展分区的概念。
自从1985年12月微软公司发布MS-DOS3.20版以后,上述PC硬盘的分区结构增加了扩展分区的功能,可以将上述4个主分区的其中一个主分区定义为“扩展分区”,在该扩展分区中,又可以建立许多个逻辑分区,因此,扩展分区中就必须有扩展分区表。要注意的是,拓展分区只是一个抽象的概念,即,实际上不存拓展分区这样东西。而只是组成拓展分区的所有逻辑分区,称为这个磁盘的拓展分区。事实上,拓展分区看作一个整体就是一个主分区。因此硬盘上常见的分区方法是,一个-三个主分区,剩下空间全部用来作为逻辑分区。
如下图所示:

- 操作系统必须装在主分区?听说Windows与FreeBSD是的……不过Linux绝对不是,因为我一直装在逻辑分区 :)
有三种分区类型:主分区、逻辑分区 和 扩展分区。分区表 在硬盘的主引导记录(master boot record,MBR)上。MBR 是硬盘上的第一个扇区,所以分区表不能在其中占据太大空间。这将一个硬盘上的主分区数限制为 4 个。如果需要超过 4 个分区(这种情况很常见),那么主分区之一必须变成扩展分区。一个硬盘只能包含一个扩展分区。 扩展分区 只是逻辑分区的容器。MS DOS 和 PC DOS 原来使用这种分区方案,这种方案允许 DOS、Windows 或 Linux 系统使用 PC 硬盘。在我的机器上执行fdisk -l的结果
Linux 将主分区或扩展分区编号为 1 到 4,dev hda 可以有四个主分区,即 /dev/hda1、/dev/hda2、/dev/hda3 和 /dev/hda4。也可以有一个主分区 /dev/hda1 和一个扩展分区 /dev/hda2。如果定义逻辑分区,它们的编号从 5 开始,所以 /dev/hda 上的第一个逻辑分区是 /dev/hda5,即使硬盘上没有主分区,只有一个扩展分区(/dev/hda1)。
[root@localhost ~]# fdisk -l
Disk /dev/hda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 892 7164958+ 12 Compaq diagnostics
/dev/hda2 * 893 4156 26218080 c W95 FAT32 (LBA)
/dev/hda3 4157 9371 41889456 c W95 FAT32 (LBA)
/dev/hda4 9372 14593 41945715 f W95 Ext'd (LBA)
/dev/hda5 9372 11982 20972826 b W95 FAT32
/dev/hda6 11983 11995 104391 83 Linux
/dev/hda7 11996 12256 2096451 82 Linux swap / Solaris
/dev/hda8 12257 14593 18771921 83 Linux
可以看到,我的硬盘大小为120GB,共有120034123776个字节,255个“磁头”(head,其实指一个碟片的一个面),63个扇区,14593个柱面,每个扇区大小为标准的512字节。
hda1(主分区1)被我的笔记本制造商用来做成诊断盘了……不表。hda2(主分区2)则是用于启动的分区(?),使用了LBA,可以看到hda3,hda4都是主分区。而hda4是一个拓展分区(可以计算得到,hda5-hda8的大小正好是:20972826+104391+2096451+18771921=41945589,为什么不一致?41945715-41945589=126,我猜想是用一些空间来保存拓展分区表信息的)
IBM PC发展至今,数据交换经历过一段历史。基本上数据总线由现在已经淘汰的ISA,到广泛使用的PCI(貌似也开始没落了),到AGP,再到PCI-E。而磁盘所使用的数据总线叫IBM-AT(Advanced Technology)。后来改名为ATA(AT Attachment),当串行总线出现后(S-ATA)又叫做(P-ATA,P stands for Parallel)。使用PATA的硬盘也叫做IDE硬盘(由于Western Digital公司某个规范所遗留的名称,Integrated Drive Electronics,我想这也是为什么SATA在机器上被认作SCSI硬盘的原因吧……)
关于主盘与从盘(Master / Slave)
相信很多人像我以前一样对主从盘有着错误的理解。其实主、从盘都不是主人……都是奴隶(slave)阿……
像上面提到的ATA cable,可以看到除了两端有一个40针的接口外,中间比较偏向某端的也有一个40针的接口。原来,这就是从盘的接口。
- 误解一:以为两条ATA cable接的两个硬盘有一个是主盘,有一个是从盘。其实,在同一条IDE线上连的两个硬盘才分主/从盘。这也是一个术语“跳线”所指的东西,如果两个硬盘接在两条cable上,根本不用跳线。跳线只是为了指定哪个是主盘,哪个是从盘。
- 误解二:主盘比从盘好。其实不然,这只不过是一个index的问题。两个连在一条ATA cable上的磁盘都受到同一个主板接口的限制,或说,都受到磁盘控制器的限制。它们其实并无主次之分。因此,无论是访问速度还是访问优先级,都是平等的。
- 误解三:两个盘会有共享介质冲突。由于已经使用了某些并行访问技术,使得可以错开始终周期进行磁盘读写,因此,一条cable上的两个盘完全独立!因此两个速度不同的磁盘不会出现所谓的瓶颈效应,也不会出现“同一时间只能读一个硬盘”的限制。
N年前,还是由于历史原因,BIOS对CHS有限制,即限制了最大的C,H,S。(具体没必要知道),因此造成了BIOS可以访问到的最大磁盘容量是137GB(好象是)。但是君不见现在的磁盘动辄上百G……因此有必要对这套scheme进行改进。这就引入了所谓的LBA(Logical Block Adressing).LBA把磁盘的地址重新编号,比如CHS=001,002编号为1,2,而OS等访问则可以不需知道CHS地址,而是知道LBA地址后通过磁盘控制器这个中间层进行访问。这样则可以使用逻辑地址访问,而不需直接使用物理地址了。下面摘抄一段:
LBA(Logical Block Addressing)逻辑块寻址模式。管理的硬盘空间可达 8.4GB。在 LBA 模式下,设置的柱面、磁头、扇区等参数并不是实际硬盘的物理参数。在访问硬盘时,由 IDE 控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的物理地址。在 LBA 模式下,可设置的最大磁头数为 255,其余参数与普通模式相同,由此可以计算出可访问的硬盘容量为:512x63x255x1025=8.4GB。不过现在新主板的 BIOS 对 INT13 进行了扩展,使得 LBA 能支持 100GB 以上的硬盘。4.IRQ
LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。
在这三种硬盘模式中,现在 LBA 模式使用最多。
在BIOS设置里,经常可以见到一些关于PCI设备的IRQ设置。不过我从99年接触PC以来好像还没有见过不是设置为Auto的。事实上,IRQ=Interrupt ReQuest。指的就是中断请求。 最初,每个设备都有自己的私有IRQ。比如说,IRQ5 通常用于声卡 或者 第二个 并行端口(打印机)。如果两个都要使用,那么不得不去寻找一个能够配置的卡(通常是通过硬件跳线设置)来使用另一个 IRQ,比如 IRQ15。(以上IRQ值基于标准IRQ建议)。而现在(我认为是所有的)PCI设备都是共享IRQ的了。即用了所谓的PnP(Plug and Play)技术(还记得以前开机没有splash screen时的右上角的Energy Star和Plug & Play徽标吗 ?),所以,当某个设备中断 CPU 时,会有一个中断处理程序检查它并判断那个中断是否为它所用的中断, 如果不是,则将它传递给链中的下一个处理程序。
5.IO端口
既然说到了IRQ,就要说说IO port了。
当 CPU 需要与某个外围设备通信时,它要通过一个 IO 端口来进行通信(事实上,这个IO端口具体在什么地方,是指什么呢……我现在还不知道 :)不过我猜可能是指系统数据总线的某个地址吧?)。当 CPU 需要向外围设备 发送数据或者控制信息时,它向某个端口写入数据。当设备为 CPU 准备好了数据或者状态,CPU 从某个端口去读取数据或状态。 大部分设备都拥有不止一个与之相关联的端口,通常是 2 的若干次幂(指数较小),比如 8、16 或者 32。数据传输通常是每次一个或 两个字节。设备不能共享端口,所以,如果有 ISA 卡,那么必须确保每个设备都有其分配到了自己的端口。以前,这需要通过设备卡 上的开关或者跳线来实现。现在完全没接触过ISA卡……我只知道,所有PCI卡都有PnP,都是自动分配端口的.
在Linux中输入cat /proc/ioports可以查看设备占用的IO端口。6.吹一吹Linux文件系统与Windows文件系统
网上关于这方面的文章已经好多了,我为什么还要写?
我也不知道,不过,UNIX文件系统给我的感觉是,越学习越能体会到其中之道。
先说说Windows。其实,Windows的文件系统,包括FAT16/32,NTFS,我现在看来都可以看作是一种与UNIX文件系统类似的树状结构——但是,它不止一棵树,而是可以有24可棵。每个逻辑的"盘"分配一个"盘符"——26个英文字母里的一个。但是由于A,B是默认分配给floppy的,所以只能从C-Z中选一个(不区分大小写)。而且由于C盘必须是主分区,因此只剩下D-Z作为逻辑分区了。每个盘就是一棵树,那么Windows文件系统就可以看作是一片森林了。
对于Win32,我一般采用如下的分区策略:
- C盘是系统盘(System)。只分配安装好系统后剩余几G的空间。除了系统以及必要的驱动程序外,什么也不安装。
- D盘是媒体盘(Media)。用来装图片,音乐,电影等多媒体资料。
- E盘是游戏盘(Game)。用来专门放游戏。
- F盘是工具盘(Tool)。用来安装工具。
- G盘是资料盘(Document)。用来放文档,电子书,以及ghost镜像。
Linux 文件系统包含了分配在磁盘或其他块存储设备备上的一些文件(以目录的形式)。与许多其他系统一样,Linux 系统上的目录可以包含其他目录,这称为 子目录。Microsoft® Windows® 等系统根据不同的盘符(A:,C:,等等)来分隔文件系统,但是 Linux 文件系统只是一个树型结构,它以 / 目录作为 根 目录。
您可能会奇怪,既然文件系统只是一个大的树型结构,那么硬盘布局为什么还重要呢。实际情况是,每个块设备(比如硬盘驱动器分区、CD-ROM 或软盘)上都有一个文件系统。通过将不同设备上的文件系统 挂装(mounting) 在树型结构中的某一个叫做挂装点(mount point) 的点上,就创建了文件系统的单一树型视图。
通 常,在挂装过程中,首先将某一硬盘分区上的文件系统挂装为 /。可以将其他硬盘分区挂装为 /boot、/tmp 或 /home。例如,可以将软盘驱动器上的文件系统挂装为 /mnt/floppy,将 CD-ROM 上的文件系统挂装为 /media/cdrom1。还可以使用连网的文件系统(比如 NFS),挂装来自其他系统的文件。还有其他文件挂装类型,但是您只要理解这个过程就行了。挂装过程实际上是挂装某一设备上的文件系统,但是常常说“挂装这个设备”,这就表示“挂装这个设备上的文件系统”。
现 在,假设您刚挂装了根文件系统(/),并想在挂装点 /media/cdrom 上挂装一个 IDE CD-ROM,/dev/hdd。在挂装这个 CD-ROM 之前,这个挂装点必须存在。在挂装 CD-ROM 时,CD-ROM 上的文件和子目录就变成了 /media/cdrom 之内和之下的文件和子目录。/media/cdrom 中原来已经存在的任何文件或子目录就不再可见了,尽管它们仍然存在于包含挂装点 /media/cdrom 的块设备上。如果卸载 CD-ROM,那么原来的文件和子目录重新可见。在打算作为挂装点使用的目录中,应该不放置任何文件,这样可以避免这个问题。
表 3 显示了 Filesystem Hierarchy Standard 要求在 / 中存在的目录(关于 FHS 的更多细节,请参阅 参考资料)。
| 目录 | 描述 |
|---|---|
| bin | 基本命令的二进制代码 |
| boot | 引导装载程序的静态文件 |
| dev | 设备文件 |
| etc | 主机特有的系统配置 |
| lib | 基本的共享库和内核模块 |
| media | 可移除介质的挂装点 |
| mnt | 临时挂装文件系统的挂装点 |
| opt | 附加的应用程序软件包 |
| sbin | 基本的系统二进制代码 |
| srv | 这个系统提供的服务的数据 |
| tmp | 临时文件 |
| usr | 次级层次结构 |
| var | 可变数据 |
以上内容摘自:IBM dw LPI 证书 101 考试准备: Linux 安装与包管理