日常琐事
谈毕业 (7)——提案汇报
经过最近一周的努力,我终于在本周一凌晨准备完了汇报所需要的幻灯片。通常这种汇报需要30多到50多张幻灯片。但即使在忽略了几个想要讨论的地方后,我的初稿依然还有近150张幻灯片,其中主要是各类图片、动画,用来解释相关算法用的。我无法决定该去掉哪些幻灯片,于是打算让导师看了之后做最后的决定。
周一午后,导师看我演示了一遍所有的幻灯片,感到很满意,没有要求我增、删任何幻灯片。在此情况下,我只能暗自决定汇报的时候跳过好些幻灯片。
我的语言表述能力并不强,周一傍晚独自初次试讲的时候,结结巴巴的。所以今天提前去了教室,演练了1遍多,感觉能够比较顺利地讲完相关内容。
最终定稿的幻灯片有148张。
出席汇报的是答辩委员会的成员们,由三个人组成:我的导师Mukhopadhyay博士、系内评阅者Jaekel博士、系外评阅者Jagdish博士,都是印度人。列席汇报的还有印度同学Augustus。
整个汇报花了大概1小时20分钟,其中我汇报了大概1个小时,这可能是迄今为止我单独做汇报最长的一次了。剩下的20分钟就是问问题时间,其实是闲聊时间。两位评阅者都没什么问题好问的,因为两位评阅者对我所做的方向很不了解,而且他们知道我已经完成了我的硕士课题的研究。
我倒是挺想把我做的一些毕业论文方面的东西放到网上的,但是由于导师研究所需的原因,可能最近五年我都不会把毕业论文涉及到的相关具体内容放到网上。
总体而言,我比较开心(但还没到想大声宣泄的地步)。提案汇报是很重要的一项任务,如今我顺利地完成了它。我剩下要做的就是写一份合格的毕业论文出来了。
需要感谢那些曾关心、培养我的人,虽然同时也不会忘记某些不友好行为。爱憎分明,会恨才会爱;懂得忘记,但也要适时记住过去。
[补充说明1] 此PDF文件是系里转发的有关我提案汇报的系内通知。内容是由我草拟的、并经导师修改过的。
类别:
歌言志 (1)
最近几个月以来,我的MSN标语经常滚动显示当前我电脑上正在播放的mp3歌曲。前两天,有两位朋友在MSN上感谢我(通过MSN标语)“推荐”了Dido的歌曲《Life For Rent》,因为她们觉得那首歌非常好听。
这首歌是从某大学师妹的个人网站上看到的。我自己很欣赏的这首歌,也很推荐别人有空的时候听听这首歌。里面的英文不复杂,而且:有些音乐是超越国界、超越语言的。
2.
我比较喜欢以前的一些革命影片、革命歌曲,尤其是一些关于抗美援朝的。有些影片、歌曲都有(明显的)时代烙印,如果抛开这些烙印,更多地去体会其中所体现的各种精神、感情,可以发现这些影片、歌曲还是有可取之处的。
两个月前曾在文学城看到一篇文章:《一首激励了几代人的老歌》(指歌曲《我的祖国》),于是就下载了电影《上甘岭》的插曲、郭兰英演唱的《我的祖国》,并且把这首歌在电脑上单独循环播放来听。后来,有位亲戚在MSN上告诉我说,她“在线搜索了一下也听了,而且是电影中的原有版本,然后不知怎么的就想‘家’了……听着听着就想妈妈了……听了就流泪的……”。
生活总是有爱有恨、有喜有泪的。我对我喜欢听的歌曲能够得到别人认同而感到欣慰。
类别:
近日琐事
这台HP买来到现在也才1年半,但由于使用频繁,键盘上的两个凸起已经给我磨得差不多了,以至于最近已经很难靠凸起定位了,因此最近一阵用电脑常感觉不舒服。
凸起没了,事情虽小,但很恼人,就跟盲人用人民币的时候,发现人民币上没了盲文一样。HP的东西实在无法恭维。
2.
前两天跟导师小有摩擦。当然,从我的角度来看,肯定是导师有些事情处理得过分了。没办法,在人屋檐下,不得不低头。我誓言以后不去考虑读个什么博士之类的了,就连这种修论文的硕士也不考虑再读一个了。
不喜欢这些不合道理的剥削行为。
3.
最近事情很多很多,尤其是最近几天更是比较累,于是常想起来一句话,叫强弩之末。昨天夜里和今天早上写程序的时候,就有点跟梦游一样,大体思路都是明确的,但具体写的时候就只能凭感觉一行一行地敲下去了,没法分析得很透彻。好在程序框架以前都搭好了,因此写起来也大差不差,没太费力气。
于是有点盼望着,盼望着,盼望着……盼望着毕业后先好好歇歇。
众看官就不必提醒我注意休息、劳逸结合了,我还是挺注意的。
类别:
谈毕业 (6)——尝试新软件
LaTeX
这是一款文字排版工具,文字排版效果明显优于Microsoft Word。
学习使用这个工具颇耗费精力,因此不建议一般文字用户学习使用。
我很欣赏这个工具,也很高兴有机会学习使用这么好的工具,打算明年用它写书(写本自娱自乐的书是我明年的年度计划之一)。
WinEdt
这是一个编辑软件,是专门用来编写LaTeX文件用的,功能非常强大。我很喜欢这个软件。
这个软件的功能可以讲也是颇为复杂的。从中国人的角度来看,这些软件之所以复杂,有一点在于老外和中国人的思维方式等等是有差异的。
JDK 5.0
我毕业论文的全套程序都是用Java写的。由于新的JDK 5.0和老的JDK 1.4.2(及其以下版本)之间的兼容性比较差,因此本来我准备用JDK 1.4.2开发程序的。不过后来发现,使用JDK 5.0的动态参数功能(variable arity methods,这是JDK 5.0以上独有的功能)可以使我的程序更简洁、易懂,因此我就改用JDK 5.0了。
使用的过程中没感觉JDK 5.0和以往版本的Java相比有什么很特殊的地方。
SmartDraw/EDGE Diagrammer/Code Visual to Flowchart
这些都是画流程图的软件。SmartDraw和EDGE Diagrammer是我从网上搜集并测试过的,感觉不错。Code Visual to Flowchart是上次去加州的时候碰巧在某公司的员工电脑上看到的,当时顺手试用了一下,感觉还可以。
我本来准备用专业的流程图软件来画程序流程等图片的,后来改变主意了。从编写毕业论文、制作幻灯片的角度来讲,这三款软件虽好,但都没必要使用。一般来讲,功能超强的Microsoft PowerPoint足够应付流程图这种小事的;再不济的话,我们至少还有Microsoft Visio可以使用。
IPE
IPE是一款不错的、免费的动态演示效果制作软件,在制作动态演示用幻灯片上有独特之处。其设计思路明显有别于Microsoft PowerPoint,并且文件格式兼容LaTeX、PDF。
之所以测试这款软件是因为导师曾听过这款软件的大名,于是授命我去了解、测试它,并曾有意要我们在毕业答辩时使用该软件制作动态演示幻灯片。不过我后来具体评测后,认为该软件虽有特色和新意,但从功能和制作幻灯片的速度上来讲还是明显不能和Microsoft PowerPoint相比的,因此向导师陈述己见,将继续采用PowerPoint制作幻灯片。
JavaView/3D Object Converter/ParaView/PolyTrans
这些都是些3D图形演示、文件转换软件。JavaView是导师以前学生使用的,我基本上不用。后面三个软件都是我自己后来从网上发掘出来的,很符合我的需要。不过,PolyTrans虽好,但我却用不上,因此对它的研究也就很不深入了。
Maple
Maple是一款功能超强的数学分析软件,比较复杂。原先我毕业论文中的一部分内容(即所谓的“第二个问题”)是数学理论分析,因此需要使用Maple做相关数据分析。只是后来该部分内容中止了,也就没有继续使用Maple了。这个软件未来我将鲜有机会再次使用。
类别:
谈毕业 (5)
经过最近几天的奋战,今天下午,我终于成功地完成了这最为关键的一步:完成了“用Gotsman算法实现对四边形网格的压缩/解压缩”编程。这意味着,自7月3日开始毕业论文的编程以来,历时41天,我终于把阻碍我毕业的最大障碍(毕业论文所研究对象的结果)解决了。我剩下的要做的事情主要是优化程序、编写文档、编写幻灯片、编写毕业论文、答辩等边角料性质的琐事。
周二凌晨,我给导师发email,告诉他我已经成功完成了“用Gotsman算法具体实现对三角形网格连通性的压缩/解压缩”的程序编写,并顺便提到该安排我毕业论文的提案汇报(proposal)了。周三早上,导师来到实验室,观看我编写的“用Gotsman算法具体实现对三角形网格连通性的压缩/解压缩”实验效果,感到很满意,但并没有提到提案汇报(proposal)的事情。他只是顺便告诉我,我之前做的“用指定编码体系(encoding scheme)压缩编码”的程序运行效果非常好,其压缩后的文件无法再用通用文件压缩软件(例如winzip/gzip等)进一步有效压缩,因为再压缩只能导致压缩文件尺寸反而变大。
周四深夜,我给导师发email,告诉他我已经成功完成“用Gotsman算法具体实现对四边形网格连通性的压缩”的程序编写(事后发现需进一步改进)。周五早上,导师来到实验室,观看我编写的“用Gotsman算法具体实现对四边形网格连通性的压缩”实验效果,并让我安排在本月底进行提案汇报(proposal)。经过和答辩委员会其他老师联系后,预计会在2006年8月29日下午1:30到3:00做提案汇报(proposal),并在9月下旬答辩,结束学业。另外,经过导师认可,我毕业论文的标题可能是:《A Comparative Study of Quad Mesh Compression for Touma/Gotsman and Spirale Reversi Schemes》(用Touma/Gotsman编码和Spirale Reversi编码对四方体压缩的比较研究)。
下面是最近几天关于“用Gotsman算法实现对四边形网格的压缩/解压缩”编程工作的进展:
- 2006-08-10 12:56:56 六面四方体首次压缩成功。
- 2006-08-10 19:28:06 62顶点/60面四方体首次压缩成功。
- 2006-08-10 22:22:08 高亏格(torus)四方体首次压缩成功。
- 2006-08-11 20:45:17 六面四方体首次解压缩成功。
- 2006-08-11 23:31:32 62顶点/60面四方体首次解压缩成功。
- 2006-08-12 14:53:12 高亏格(torus)四方体首次解压缩成功。
- 2006-08-12 15:07:22 确认完成压缩/解压缩程序(仍需局部小规模完善),并在5个四方体模型上测试成功,包括2HandsTorus。至此可以认为我毕业论文关键内容都已解决。
后面的日子中,我将正常作息、正常生活、正常工作、正常处世。
类别:
为何用癞蛤蟆做我的MSN备用头像
最近几个月,美东地区白天的时候(国内晚上的时候),MSN上的朋友可以看到我的MSN头像往往不是我一直常用的“佛”字,而是一只癞蛤蟆。之所以如此,原因之一是我在用MSN头像来隐性地告诉MSN上的朋友们我当前所在的位置:头像是佛字的时候,表示我正在使用自己的笔记本电脑,很可能我在家;而头像是癞蛤蟆的时候,表示我正在使用的是实验室的电脑,那么我极可能正在实验室工作。
那为什么选择癞蛤蟆做候选头像呢?这里面有一个小典故。我曾提到Brian Tracy(你可以认为他是北美一位有名的成功学推广专家)出版过一份音频教程,叫做“21 Ways To Double Your Productivity”(21招提高效率)。其中他提到的一点是:在你每天早上开始工作的时候,把当前最重要的、最难的事情列出来,然后首先去解决它,而不要去管别的事情。这件最重要的、最难的事情对你的事业很重要,但你对它很可能感到畏惧、厌恶、推挡、拖拉,这会对你的事业、对你的心情、对你的信心造成不良影响。因此,你应该要做的是:把这件最重要的、最难的事情当成一个丑陋的癞蛤蟆,而你当天需要做的第一件事情就是:(强迫自己)吃掉这个丑陋的癞蛤蟆!当你吃掉了这个对你事业、生活很重要的癞蛤蟆后,你会明显感到自己心态的好转。
Brian Tracy在给一家公司员工做演讲的时候,讲到了这个故事。这家公司的领导人对这个故事非常感兴趣,在接下来的某个节日中,该公司给每位员工的办公桌上安放了一个小癞蛤蟆玩具,以此来激励员工。结果,在接下来的几年中,该公司的营业额成倍增长。
我在实验室(工作)的时候,使用癞蛤蟆做头像,目的之一也就是暗示性地告诉自己:我当前正在做的事情也许比较难,但我要把它完成,因为它对我很重要!
类别:
谈毕业 (4)
前一篇网志曾顺带提了一下我毕业论文将要解决的第二个主要问题的内容,也就是用Gotsman算法具体实现对三角形网格连通性的压缩/解压缩,并扩展到对四边形网格连通性的压缩/解压缩。
自上上个星期五领此命令以来,到今天已经10天了,期间虽然有一些杂事干扰,但终于顺利、圆满地编写完成了“用Gotsman算法对三角形网格连通性压缩/解压缩”的代码。相较于上次9天时间完成第一个问题“用Spirale Reversi算法压缩/解压缩四方形网格连通性”的代码来说,这次虽然多花了一天时间,但应该来讲,这次写得也很不错。因为:
1. 上次9天内完成的代码并没有实现对高亏格的处理(额外花了3天时间处理高亏格),这次实现了。
2. 上次写代码的时候没有杂事干扰,全心写程序;这次写代码期间有GA工作,还额外完成了一项编码程序的编写。
3. 上次体力储备好,而这次写代码之前已经连续不休息地奋战了将近一个月,身心俱惫。
相对而言,上次写代码的过程也有出色的地方:上次设计、编写了一些很重要的基础数据类、应用类,包括几何对象描述、文件格式转换、文件处理等方面的类。
上周是长周末(今天是市政日,Civic Day,所以连续放假三天),于是这三天,每天早上8点不到就起床,半夜累了就睡觉,基本上每天除了吃饭、睡觉、散步就是写程序了。每天半夜躺下的时候都还在想着程序的实现方法,只是已经没有力气爬起来继续测试、编写了(而且也不想疲劳作战),也终于有点理解别人所说的“呕血之作”的感受了(当然,我还没到那个境界和地步)。总之,其间在思考、编程方面消耗的力气比较大,尤其是今天下午,已经没有力气继续写四边形的压缩/解压缩程序了,就躺在地毯上休息。
这一整套程序都是用Java编写的。不管过程如何,就结果而言,这套程序我写得相当得意,也拿得出手,虽然Java不是我最拿手的。
下面是最近几天解决第二个问题过程中的一些进展。
- 2006-08-02 晚上 最简单模型“四面体”(tetrahedron)压缩成功。
- 2006-08-03 23:02:36 阅读Gotsman论文,使用Touma的程序测试数据,阅读相关文档,最终确认其编码(encoding scheme)实现机制。
- 2006-08-05 01:05:36 最简单模型“四面体”(tetrahedron)解压缩成功。
- 2006-08-06 11:19:13 首次处理模型icosahedron(压缩/解压缩)成功。
- 2006-08-06 13:01:29 对有42个顶点、80个三角形的模型处理(压缩/解压缩)成功。这标志着我的具体实现思路是成熟的,具体实现思路至此定型。
- 2006-08-07 00:02:37 高亏格模型(类似救生圈的模型)首次压缩成功。
- 2006-08-07 13:10:07 高亏格模型(类似救生圈的模型)首次解压缩成功,而且是非常成功。
目前全部编程工作,还剩下2个主要方面。一个是“用Gotsman算法实现对四边形网格的压缩/解压缩”,二是“用Huffman算法对压缩后的数据再次编码压缩”。相对而言,前一项最为关键,而后一项则只是一个消耗时间的工作而已。
预计本周内至少可以完成前一项编程任务。当我完成前一项的代码的时候,我就可以长叹一口气,宣告我离毕业已经很近了。
类别:
谈毕业 (3)
前两、三周,在大体解决了第一个问题后,我就开始全力着手准备解决第二个问题,并且不断在和导师的交流中向他暗示“我正在解决第二个问题”。但奇怪的是导师却从不跟我提解决第二个问题的事情,而是不断地和我继续讨论第一个问题,并时不时提到另外一个和我论文无关的Gotsman算法网格压缩问题。
对于导师用题外话打搅我毕业进度的“骚扰”,我虽听在耳里,但手中却继续抓紧解决第二个问题。和第一个问题截然不同的是,第二个问题几乎没什么编程的工作量,主要专注于如何构造一个N元方程组、设定该方程组的边界条件、解方程组。这其中,(我认为)最难的是如何设定该方程组的边界条件。另外,这个问题的解决需要一定的数学理论和数学技巧。
由于导师根本不和我讨论第二个问题,因此在解决第二个问题的过程中我碰到的问题和疑难都只能自己慢慢思忖。好在我在逐渐地接近最终结果,尤其是上周四。原先我一直奇怪,为什么我按照前人论文构造的方程组得到的结果值是离散的,直到上周四晚上在地毯上躺下睡觉的时候,我才忽然醒悟过来:我以前一直主观地把所构造的方程组理解成“多元1次方程组”,但实际上,这是一个“多元高次方程组”,因此解方程组的时候自然会离散地渐进几个不同的结果值。在醒悟了这一点后,我感到非常兴奋,感觉有相当的把握在上周末、甚至上周五就能把第二个问题大体解决掉!
出乎意外的是,上周五中午,导师造访实验室,又跟我讨论起第一个问题来。这次,他想要我做的是一个本不属于我论文份内的事情:编程实现用指定编码体系(encoding scheme)压缩编码的问题。接下来,他提到,我不要再继续研究第二个问题了,因为那个问题的理论基础(最近)发现有点问题,不大可靠,引起不少质疑!
此言一出,我顿时想到了几点:第一,导师迟迟不跟我讨论第二个问题,是因为这个问题目前是条死路,但我已经浪费了好些时间在解决它;第二,既然既定的第二个问题没法继续研究了,我必须找到新的问题才行,否则达不到导师的要求,无法顺利毕业。于是我问导师有没有新的问题我去研究,他说没有。于是我就想到他最近常常跟我提到的那个“和我论文无关的Gotsman算法网格压缩问题”。于是我说,那我就实现这个Gotsman算法网格压缩问题、同时实现刚才你提到的“用指定编码体系(encoding scheme)压缩编码”的问题,这样的话,够格毕业了吧?导师一听,颇为满意。
接下来,我们又讨论了我毕业的一些事情。导师最期望的是我最好再多读一个学期;退而求其次的话,他可以补偿我部分钱,然后我再读半个学期。而我则始终委婉而坚定地表示我将尽快解决和毕业论文相关的一切问题,尽早毕业。在这种情况下,导师最后首次提到将考虑为我组建答辩委员会。
在得到导师关于我毕业计划的初步认可后,上周五我快马加鞭,当天晚上便解决了那个“用指定编码体系(encoding scheme)压缩编码”问题的大部分工作。本周一和导师就相关细节沟通了之后,在周一下午便完成了该编程工作。但我当时并没有发email告诉导师这个消息,免得他认为我做事太快、随后可能会给我其它乱七八糟的工作去做。今天早上导师阅读了我写的“用指定编码体系(encoding scheme)压缩编码”问题的源代码、听取了我的解释后,感到非常满意,第二次主动跟我提到组建答辩委员会的事情。
下午导师临走的时候,告诉我他已经在具体组建答辩委员会,并且已经联系好一名系外专家。
所以,后面一阵还有很多很多的事情要做:写程序、测试数据、做演示用幻灯片、写论文、杂事等等。初步打算这个星期解决掉最最关键的问题:用Gotsman算法进行三角网格压缩并拓展到可对四边形网格压缩的程序。这个问题不解决,别的一切免谈。
导师有几个特点。第一,导师头脑里面有很多想法,会经常叫你做这做那,但很多事情你不做也没事。你要确定哪些事情是需要做的,哪些是不要做的,尽量只做需要做的事情。第二,导师是习惯信口开河的,答应你的事情,事后他很可能就忘了,或者改变主意了。第三,导师是不能被催的。你想叫导师做什么,最好旁敲侧击,不能把他逼急了。
类别:
今日琐事:GA工作纪录
早上08:30到10:30:答疑时间。来问问题的学生不多,很多时候我都在给程序写文档。
中午11:30到14:20:期中考试监考时间。
下午14:30到17:30:两节试验课,答疑兼评分。
我之所以特地把答疑时间选在一大早,倒不是因为那个时间来问问题的学生少,而是想叫自己必须习惯早起。
吃饭怎么解决?中午监考中途去了趟KFC(今天是Toonie Tuesday)。
昨天下午给程序写文档,写到晚上8:00过觉得很累,于是回家吃点晚饭不久就睡了,但耗了好些时间才睡着。
今天也是,要早睡,明天继续早起。
类别:
谈毕业 (2)
毕业论文涉及到的两个问题中的第一个问题(四方形网络连通性压缩问题),以前导师手下有两个学生做过。学生J使用S方法,没有做出结果,但积累了些宝贵经验;过了2年导师的另外一个学生A使用Z方法,做出了结果,而且处理效果有明显进步。
又1年多后,导师就要我使用学生J曾经研究过的S方法把那个问题解决掉。上周提到我在这个问题上已经取得了突破性进展。不过导师的要求还是蛮多的(这比较让我郁闷),他要求我的程序能达到学生A的某些功能(具体来讲就是能处理高内亏格(genus)的多面体)。
于是,最近三天(从周五到今天,也就是周日),我全身心地研究如何实现这个功能,差不多达到了废寝忘食的地步(此处使用了略有夸张的修辞手法),终于成功地在今天傍晚实现了这个功能,解决了这个问题。
实现这个功能过程中的一些重要时刻:
- 2006-07-21 晚上 优化结果、优化输出、优化流程。将输出文件数从4个减少为2个。从学生J的输出风格转向学生A的输出风格。(相对来讲,这些属于边角料的活)
- 2006-07-22 21:10:23 首次成功处理一高内亏格(genus)的多面体模型 (重大进展)。
- 2006-07-23 18:07:10 历时一天,成功修复一重要bug,程序开发主要问题到此可以认为都已解决。
问题所面向的对象是三维多面体,涉及的是多面体表面的处理过程。这些都只能凭空想象了,而且还要尽量能把细节想象出来。总之,相信我的想象力比之以往应该是略有进步了。
附三张最近三天画的图。
图一是研究该功能之初根据学生A的论文画的草图,用来理解实现相关功能的思路。
在实现该功能的编程过程中,使用了一个多面体模型作为典型样例。图二就是这个样例的草图,用来跟踪、分析、调试相关程序的时候用。这个图对昨天的首次成功处理有很大帮助。
在处理复杂样例时,由于有一个重要bug一直无法解决,也很难分析出来,于是,今天傍晚,根据从多面体压缩程序得到的数据绘制了一张多面体样例图(图三),用以分析。这张图很管用,画完这张图后很快我就意识到bug所在、并解决了这个bug。当然,画这张图比较花时间。
图一 | 图二 | 图三 |
解决问题的过程就像在走迷宫。有时候,你离结果已经非常近了,但偏偏有堵墙挡在你面前,让你看不清方向。