2007年4月24日星期二

毕业设计——BitTorrent客户端(一)

从苏州回来以后还是一直在写自己的毕业设计。题目是我自己选的,做一个BitTorrent客户端,并且在这个基本的客户端上加入我自己设想的独特功能,使这个客户端更加强大。从研究的角度讲,我认为这个题目还是比较合适的,对我个人来说,实现BitTorrent客户端绝对是一个合适的挑战;对计算机领域来说,如果我设想的独特功能被证明是有意义的,那也是有价值的。

当然,要实现“独特功能”,首先得把那个基本的、能够和现有别的客户端通讯的底层做出来,而这个才是难点所在。想一想,虽然一篇BitTorrent协议不算长(和IA-32、FAT这些比的话),但需要实现的东西还是挺多的:

按照协议的顺序,首先要实现bendcoding的解析器,这个在解析torrent文件和解析tracker服务器响应时都会用到。除了解析,还要提供接口,让外部访问者能获得结构化了的数据。

其次,要能和tracker服务器通讯。要充分考虑到tracker可能发生的各种情况,如连接失败,需要重定向,返回无效数据,返回错误,以及返回理想信息等。做到后面还要考虑多线程向多个tracker服务器发送请求,维持请求间隔时间,使用代理服务器访问等等。

再次,要能和各个peer通讯,传输数据。这部分其实就是在博弈,在你我都不知道对方规则的情况下各自制定一套规则,规则本身是由协议里面定义的消息元素来构造的,但是具体细节完全是由你我自己控制的。然后大家在一个对等的平台上,通过规则进行通讯,双方的目的都是在不违反对方规则的同时使自己获得最大的收益。比如,我可以一次向某个peer发送很多请求,但如果这个peer很忙,他就有可能choke我,一个可能更好的策略是,分散请求面,首先请求最稀少的数据块。自己获得最大利益并不意味着要损害对方,最好的结局是双赢,所有人都最终得到完整的数据。当然除了博弈这个算法的问题外,还有很多基础的网络问题要解决。

最后,还要把各个模块整合起来。比如在向tracker服务器发送请求时就要提供当前任务已经下载和上传了多少数据量。而这个数据量显然是要在和peer通讯时统计得到的。类与类之间肯定需要一个中间层来联系。像这种耦合在程序里实在不少,因此架构设计也是需要非常谨慎的。

原本打算还要把图形界面加上,做成一个完整的可发布软件,现在看起来一是时间不够,我实在是找不到能在短时间内实现像uTorrent那样界面的GUI解决方案,二是觉得作为毕业设计,界面确实不是最重要的,不能喧宾夺主嘛。所以界面的事可能得先缓一缓了。

下一篇里我会介绍一些我客户端的框架和一些实现细节,也算是为论文先打个草稿啦。

2007年4月15日星期日

Dvorak 键盘布局

突然对Dvorak键盘布局感兴趣了,想尝试一下这种比我们传统QWERTY布局更高效得多的打字方式。不管Dvorak是否对中文拼音输入有没有帮助,至少它应该可以提高我写代码、写注释的速度吧。



加上了这种布局后,刚开始确实很别扭,马上发现了两点问题:第一个,切换到搜狗拼音后,键位仍然是QWERTY的,这个应该是搜狗内置了键位的。不知道那种拼音输入法支持Dvorak。第二个,原来Ctrl+C, Ctrl+V的复制粘贴,现在变成了原来的Ctrl+I, Ctrl+.,这就不是习不习惯的问题了,因为一般都是右手握鼠标,左手进行这些键盘的快捷操作。用左手输Ctrl+I和Ctrl+.很痛苦啊。不知道Windows有没有机制可以保持这些快捷操作的键位不变。

下载了一个免费的打字练习软件KP Typing Tutor,开始慢慢练习。听说,原来的QWERTY打字者转到Dvorak键位后,一般能在一个月之内恢复原有打字速度,所有还是挺有信心学好Dvorak的 :)

另有一篇介绍Dvorak键位的文章,有兴趣的可以看看。

2007年4月1日星期日

我的留学美国申请经验(二)——Resume

准备材料。对于CS来说,申请材料一般就是个人陈述(Personal Statement,简称PS)和简历(Resume 或 CV)。这两个材料都非常重要,不是可以一蹴而就的,写的时候要多听取别人的意见,多修改。

先从简单一些的Resume开始吧。Resume之所以相对简单,是因为他的格式和内容相对固定,和PS相比,就像GRE的Argument和Issue一样。Resume的页面可以参考网上和同学之间关于求职简历的经验,但从内容上说毕竟还是会有不同。另外,并不是每个学校都要求提供Resume。

尽量把Resume控制在2页A4纸内。

以下是我的Resume的格式,大家参考吧:

1) 基本信息 (Personal Information)

包括姓名,性别,出生日期,e-Mail,国籍,联系地址和电话,最后还可以用一句话来简单描述一下自己打算申请的研究方向。

1. 关于姓名,一定要是名在前,姓在后。

2. e-Mail要写上以后会用来申请学校的邮箱,我用的是Gmail,很不错,从没有发生过寄丢邮件或者错误归到垃圾邮件的问题。

3. 联系地址当然是按地方的从小到大顺序写下来,包括国内邮编和国家。

4. 关于电话,固定电话的话可以使用 “+国码-地区码-电话号码” 的格式:对于中国,国码是86;地区码前面的0省略,如010只写10。举个例子,+86-10-12345678。移动电话可以使用 “+国码-4-3-4” 的格式,如 +86-1301-234-5678 。当然,这些格式只是我的推荐,不是硬性规定。

2) 教育背景 (Education and Qualification)

1. 本科信息包括就读学校和主修专业,开始和结束时间,所获学位,相关GPA和Ranking。对于一般还未毕业的申请者来说,应该在本科结束时间和所获学位前加上 Expected。GPA可以包括综合GPA和专业GPA,可以写上4.0分制和100分制。关于GPA我后面还会在Online Application里解释。原则是,如果某个不是必需的分数、排名对自己不利,情愿忽略掉也不要强求。

2. 中学信息可以写上去,注意学历信息要按就读的先后顺序从后往前写。不过中学以前的学历就不要写了。

3. TOEFL,TWE,GRE成绩及考试时间。可以注明TOEFL和GRE的类型,是iBT还是PBT,General还是Subject,后面写上分数。TOEFL可以只写总分,GRE最好写明每一类的分数,百分比。

4. 如果自己有业余爱好,或者在校的辅修等等和申请专业比较相关,也可以简单提及,格式和本科主修专业类似。

3) 奖项,荣誉 (Reward and Honor)

按照获得时间从后往前写。太小、太久的奖项都不要写,那些不重要。相反,和申请专业相关的奖项则很重要。一般来说,就写上大学时期的和专业比较相关的就行了。获奖证书不要寄到学校去,他们不认识中文的。

4) 专业能力 (Professional Skill)

简单描述一下自己在欲申请专业的相关能力。比如我是申请计算机的,所以就写上自己熟悉的语言,曾参与过项目中自己独立编写的代码行数等等。

5) 项目经验,研究经验 (Major Projects and Research Experience)

对每一个值得提及的、和申请专业相关的项目、实际经验进行简要描述。仍然是按照发生时间的先后顺序从后往前排。这部分一般是Resume的主要部分,能体现申请者的竞争力。

拿计算机来说,我的每一个项目有以下几个大点:
1. 概述该项目,主要能解决什么问题;2. 基于什么技术,一些出彩的技术细节;3. 有什么前瞻性的意义,自己的哪方面能力在项目中有所体现。

我认为,介绍项目最重要的不是项目本身怎么样,而是你自己怎么样。老美们当然不大会对你的项目感兴趣,他们更感兴趣的是你这个人怎么样,因此,如何通过介绍项目间接地来介绍自己才是这部分最需要考虑的。因为各个专业、项目细节都不一样,所以请各位自己仔细斟酌如何写好这部分吧。

6) 课外活动,社会实践 (Extracurricular Activities)

介绍一些和申请方向相关的课外活动,让教授们更全面地了解你。美国人都还是非常看重每个人的社会经验、人际关系这些的,这个地方就是展示自己一个小舞台。当然,不要写得太琐碎,捡重要的写,扼要地写,关键还是突出这些事情对自己在申请方向上的影响。对了,还是建议按事件发生的时间从后往前写。

大家可以参考一下我写的Resume。写得不算好,但大家去其糟粕,取其精华吧。:)

相关链接:

GPA 计算器 "GPA Wizard": http://offer.go3.icpcn.com/main/main.htm

My Resume: http://www.puzatech.com/kerenjin/

一些免费下载乐谱的网站

2008.12.19 更新:有些网站死掉了,更新一下列表。
2007.4.1 更新:偶然的机会找到了一个乐谱网站,竟提供 J.S. Bach 几乎所有乐谱的免费下载,不敢私藏,拿出来和广大巴赫爱好者共享。此网站除提供巴赫乐谱下载外,还提供 Mozart 部分的乐谱下载。
http://www.tobis-notenarchiv.de/ : Tobi's Notenarchiv。极好。提供 J.S. Bach 几乎所有乐谱的免费下载。midi 和 cap。cap 文件需用 capella 系列的软件打开。capella 的相关信息可以在 http://www.capella.de/ 找到。


昨天无意间找到一片帖子,上面列举了很多免费乐谱下载的网站,我把其中比较适合喜欢古典音乐的和有乐器特长的人的选了出来,写在下面,供爱乐者们借鉴。midi 格式的文件请用 Cakewalk 等软件打开。

格式:URL : 网站名。我的评价。介绍。乐谱格式。(备注。)

1) http://www.classicalarchives.com/main/ : Classical Music Archives。极好。提供几乎所有著名音乐家的著名作品,数量极多。midi。需免费注册或支付注册。

2) http://www.lysator.liu.se/~tuben/scores/ : Free Sheetmusic from Johan Tufvesson。好。主要提供早期音乐家的作品。pdf。

3) http://www.dlib.indiana.edu/variations/scores/ : VARIATIONS Prototype: Online Musical Scores。好。美国印第安纳大学图书馆提供的乐谱下载。网上浏览,当然你也可以下载到本地。

4) http://imslp.org/wiki/Main_Page:International Music Score Library Project。最好。这是一个收集了几乎你能想到的所有古典音乐家的乐谱的维基式网站,非赢利性质。这应该是目前最正规、最全、最稳定的乐谱资源网站了。它的维基介绍:http://en.wikipedia.org/wiki/International_Music_Score_Library_Project。pdf。

5) http://www.piano.ru/inter-e.html : Piano.ru。极好。一个俄国网站,提供了非常多音乐家的钢琴作品乐谱,只不过作品名都是俄文,看起来比较费劲。pdf。

6) http://www.sheetmusicarchive.net/ : Sheet Music Archive。好。收录了很多音乐家的著名作品,只是作品数量稍嫌少。pdf。

7) http://www.recmusic.org/lieder/:The Lied and Art Song Texts Page。很好。这里提供了非常多的歌词资料,康塔塔,歌剧,晚祷等等都有,有原文,也有各种翻译。不过此网站似乎很注重作曲家的数量,每个作曲家的作品都不是很全。不过考虑到其非赢利性质,已经很不错了。html。

8) http://www.tobis-notenarchiv.de/:Tobi´s Notenarchiv。极好。上文已有介绍。midi 和 cap。

9) http://icking-music-archive.org/scores/ : Werner Icking Music Archive。好。Werner Icking Music Archive 网站作品列表,音乐家数量多,作品也多,比较推荐。格式杂。

另外再介绍两个下载 SoundFont 的网站。这里提供的都是 SF2 格式,没有创新声卡的朋友可能需要自己转换一下。

1) http://hammersound.net/cgi-bin/soundlink.pl

2) http://www.homemusician.net/soundfonts.php

如果大家有什么好的音乐资源,欢迎大家一起交流分享。