Category Archives: 工作

月亮是方的

来美头半年一切都激动人心,对别人会感到Boring难以理解。之后三个月却也渐渐感觉乏味,从高处看自己发觉自己其实一直碌碌无为,诸事不顺,做什么也就渐渐没劲了。尤其四季轮回到刚来的时候的冬季,对环境的新鲜感也不再有了。

导师推荐我到一个不愁经费的导师那里寻求做博士后的资助,上周一顶着大风跑了一趟,没想到还要面试,题目主要是实现一个启发式装箱算法。

这不是我想象中的天上掉馅饼:尽管是导师主动反复提出要我做博士后,而且主动帮我拉资助,但还是要我纯粹为了面试而浪费不少时间,况且我博士毕业以后就不再碰算法了,算法向来是让我头大的事情,装箱算法更是从来没听过。心中不爽,但之前已经被导师吊足了胃口,到了这一步也舍不得往后退了。于是向导师隐隐抱怨一下后还是准备起来了。

这一周碰巧很多事情,都是很花时间的。忙里偷闲Google了一番装箱算法,总算弄清楚它是怎么一回事了。原来是一个很有趣的东西,而且各个领域都能用到,尤其搜到了这个导师的博士论文,粗读了一下发现原来和我在读博士期间带着同事做的东西很像,虽然我的博士论文没写这个,但当时凭自己的兴趣确实也做了不少工作而且实际在故校用起来了。只是他考虑了并发处理并且结合了一下这个算法,结果做得有声有色,让我豁然开朗:原来还可以从这个角度来做。

这个导师的面试题只是一个很粗的框架,周日中午我自己把细节补充进去Email给这个导师确认,然后开始考虑编程。编程总是让人很兴奋的事情,就像一个雕刻家面对一块石头要雕刻出自己理想中的物体。从一片茫然到逐步清晰地调理出每个细节,中间过程中不断产生新的灵感,感觉自己从研究的角度可以做这个、可以做那个,又不断想到以后回国上课时这个可是个经典的案例,从不同的角度出发,上课时可以这样讲、那样讲……

周一一天又有事情,只得周一晚上周二早上抓紧赶,临时决定给它加上个界面,还好经过一段曲折后终于调试通过了。周二中午,雨水很大。一身是水去给这个导师看代码做演示,途中想起硕士毕业找工作时冒着大雪到南邮面试路上的狼狈。不过对自己的代码还是很有信心的,因为里面会有很多让他眼睛一亮的东西。

演示效果很好,远超出了他的预期,让他发出几次惊叹,最后听到我实际编码只用了两天后更是惊讶。资助我一两年没有问题,剩下的就是他和我的导师讨论如何分享我的时间了。他毫不掩饰自己的高兴,对我而言,努力过了,努力又能得到认可,这是最开心的事情了。

周三下起了今冬的第一场雪,一早,导师发来邮件:我之前告诉过他你很棒(但他不相信),现在即使我对他说月亮是方的,他也准备相信了。

“破案”手记

TroubleShooting(故障排除)是我的老本行——不管是做网管还是做开发。TroubleShooting最引人入胜的地方在于就像破案,抓住各种线索、没有线索也要制造线索,一点一点地剥开真相。

导师交过来一个难破的案子,尽管我心里在说:“这不是我的份内之事”,但其实我这前半生又做过多少份内之事呢,还不是有啥事做啥事,这回就发扬一下国际主义精神吧。更重要的是,哥已经七八年不在江湖,江湖上早已没有了哥的传说。看看这案子似乎不难,重出江湖拿来过过瘾也不错啊。

首先要去案发现场。到处打听去案发现场的路,却发现这个案发现场是看不见摸不着的。原来是一个虚拟的机器,而且这个虚拟机寄宿在哪里也不知道。只通过邮件联系上一个学生,这个学生说硬盘坏了,正在将虚拟机迁移到另一台宿主机器。这台宿主机器在哪里、谁来管?没有人知道,都是远程操作。拖了很久,终于迁移好了,给我一个地址、一个账号和密码,于是可以通过SSH远程连上去了。

能看到现场是激动人心的,仿佛战士又来到了战场,但我所看到的其实都是幻象。这比阿凡达还要虚幻,纳美人尽管接触的是地球人的化身,起初对真正的地球人在哪里、长得什么样一无所知,但毕竟纳美人所看到的化身是具体的、可触摸的、真实可见的。而我所看到的虚拟机,存粹是我自己的电脑中显现的一个窗口。我只知道,地球的某个角落,有一台计算机假扮着各种不同的机器,模拟各种不同操作系统的响应,把一幅幅信息发给不同的人,让每个人都以为自己是在和一个真实的计算机打交道。这倒有点像人工智能中的图灵测试,只是现在这台计算机不是在模拟人的智能,而是在模拟另外一台电脑。

进了现场才发觉里面用的操作系统是Linux,不是我平时用的Windows。天!哥不用Solaris都n年了,linux更只是摸过几次。依稀记得cd, ls -al等几个简单的指令,找学生要了启动游戏的指令,就准备还原现场了。一个启动命令发过去,突然看到提示,Jess过期了。呵,原来这个案子这么简单。赶紧google,下载,上传。碰到问题了:怎么将我下载的新的Jess上传上去? 以前这可谓举手之劳,但这台电脑没有装FTP, 也无法运行浏览器。而且我的账号也没有权限安装。想到找个中间服务器倒一下,但离开故校多年,早就没有故校的FTP服务器的账号了,最后还好想到母校的服务器上有个账号支持FTP,终于把软件从我的机器中传到母校,再从母校下载到游戏服务器。搞定。

一切风平浪静,用了一段时间却突起波澜,游戏服务器又连不上了。急着要用,导师限时一天之内搞定。

这时真是后悔当初接了这个烫手山芋。破案最怕的就是限时,对我们一线的警察来说,不计时间和成本的话其实没有破不了的案子,只是时间和投入的多少问题。就像方玄昌遇袭的案子拖了很久也没破,但同一批人再袭击方舟子时,上头一下决心,很快就破案了。但如今一天之内就要搞定这么没有头绪的案子,确实有些天方夜谭。

再去现场,这一次的案子非常棘手,连游戏的第一关:网页都上不去。做网管最拿手的是重新启动,重启Web服务器,没有权限;重启整个操作系统,又没有权限。就像一个警察到了枪战现场却没有枪,空有力气使不出来啊。谁给我超级用户口令?幸好有网络,群发邮件,可惜学生都在上课,等到中午时分终于等到了口令。n年没有做过超级用户了,此时的我,就像电影中被缴了枪的警察又重新搞到了枪,再也没有能阻挡我的障碍了。有了超级用户,就可以说没有任何搞不定的事情了。真正的破案终于开始了。

重启、再重启,没有效果。查看日志,找不到蛛丝马迹。

当破案没有线索的时候,一种做法是走访目击证人,搜集线索。幸好现在是网络时代,不用自己去跑,只要继续群发邮件,等学生下课后看看大家做过什么就行了。不过对学生不报太大希望,因为问题的复杂性在于经过几届学生经手,每个学生都只知道其中一个非常局部的信息。

在等待大家的回音时继续创造条件制造线索,寻找犯罪嫌疑人。

大胆假设:Web服务器软件坏了。

小心求证:自己编一个最简单的Web服务器,结果仍旧连不上。

继续大胆假设:学校网管设置了防火墙把这台机器封了。

小心求证:学校的网管都不知道怎么联系,还是先从自己做起吧,查这台机器的防火墙设置。

没有图形界面,一切都靠命令行,仿佛回到了原始社会。搞不清这台机器用了什么防火墙,就从最常用的找起来吧。虽然n年前在路由器上配置防火墙的技能已经炉火纯青了,但如今除了基本的概念以外,实际的命令早就忘了,而且现在是在Linux上配置防火墙,连Linux本身都不怎么熟,对其防火墙就更是一头雾水了。万能的Google,终于让我搜索到Linux上常有防火墙的配置文件。虽然看不懂也理解不了其中的指令,但依靠胆大心细,照葫芦画瓢,比照着修改,终于把80号端口放行,可以通过浏览器能访问了。

满心欢喜地运行游戏客户端,结果却仍旧连不上服务器。

得看游戏的运行机制了,缺少文档,还好游戏有源代码,尽管时间紧急,但择要地读了一下代码还是看出了一些端倪。加上最原始的调试手段:加上打印语句进行跟踪。终于发现游戏服务器打开一个端口后就不再走下去了。

大胆假设:防火墙把游戏客户端和服务器通信的端口也封了。

小心求证:防火墙上放行后,果然可以连接了,但所有的游戏帐号都无法登录。

大胆假设:防火墙把服务器上数据库的端口也封了。

小心求证:,循着踪迹跟踪过去发现连接数据库时就出错。google查到MySQL默认端口,将其放行。

但仍旧无法登录,看来还有其他原因。

大胆假设:数据库配置有问题。

正要去google,走访目击证人搜集到一个重要线索:数据库root密码被改过。终于找到原因了,但密码保存在哪里呢?在浩瀚的文件里哪个里面有数据库密码?用password检索的话有很多文件都有这个词。最后根据出错提示猜测犯罪嫌疑人,这时候警擦的直觉就很派用场了。这个文件抓来以后一看,果然有个地方有密码。

终于进了游戏了,但游戏中间突然提示缺文件。全局搜索也没搜索到所缺的文件,继续根据出错提示猜测,原来还有另外一个文件也保存有数据库密码,得一起修改掉。看来这个游戏设计得有问题,密码明文保存在这么多不同的源代码里面。重新编译部署,游戏终于可以玩起来了。

夜深了,但人很兴奋,一个难缠的案子初步破掉了,这个案子要综合用到网管和编程的知识,涉及Linux系统、防火墙、DNS配置、SSH、Apache服务器、Jess引擎、Java编程、DarkStar,幸好我刚工作时同时做过网管和编程。尽管很多知识和技能都荒废多年了,但这些领域的基本的原理和基本概念并没有变化,在强大的google的帮助下竟然依靠七八年前的知识在半懂不懂的状况下自己动手破了这个案子,八年前自己编写的一些小工具也都还能派上用场。

做网管,其实挺幸福的。

与上帝立约

心怀上帝,在圣灵的指引下写了两篇论文,尽管问题多多,但圣灵还是指引我投了出去。上帝如果真是要显示神迹的话,应该事前可预测,这样我才能真的相信有神迹而不是心理因素或巧合。圣灵指引我与上帝事先立约如下:

1. 如果圣诞前2篇都被录用了,那是两个太阳从西边出来了,因为客观地看这两篇论文无论如何都不可能被录用。不过都录用的话最符合圣经的教义,因为一路走来圣灵的指示是如此的清晰,耶稣说:在人所不能的事,在神却能(路加福音18:27)。上帝也最喜欢在最不可能的地方显示他的神迹。都录用的话绝对是上帝明白无误地显示了他的大能和神迹,之前的经历就全部一环扣一环地通了,这时还犹豫什么呢,圣诞前后就去受洗吧,这等明确无误的神迹得多多宣扬,多多作见证分享。以后无需凭着神迹来坚定信心,单靠信心就可以信仰上帝、从此为上帝做工了。

2. 如果圣诞前1篇录用1篇被拒,那还是得感恩上帝,毕竟这是人所不能的事,还是能部分说明上帝的大能。如果是第二篇被拒,圣灵的解释还是能自圆其说的,那就维持现状吧。但如果第一篇被拒,之前圣灵的指引就实在难以解释了,只能说明我对圣灵的理解还大有问题、圣灵的一套理论并未能自圆其说,受洗之事就暂时搁置吧,等我真正想通了再说吧。

3. 如果两篇都被拒了,那实在是最符合常理了,但同时也证明了信仰纯粹只是一个心理作用。那就让上帝只存在于心里吧,永远做一个“党外的布尔什维克”吧。

 

半是立约,半是祷告。圣经说,不可试探主——你的神。又说:凡你们祷告祈求的,无论是什么,只要信是得着的,就必得着(马可 11:24))。以耶稣基督的名,阿门。

 

按期回国还是不归?凭直觉应该按期回国,但网友之中给我留言的竟然全部是叫我不归。圣灵目前指引我的是折衷方案:延期归。做选择历来是我最痛苦的事情,感谢上帝,如今我丝毫不感到痛苦,一切交给上帝,听上帝安排吧,无论哪种结果其实都有很多优点。为了便于自己聆听上帝的指示,按圣灵指引,与上帝立约如下:

1. 如果我坐在家中不作任何主观努力但一个年薪10万美元的工作自动找上门来,尽管这绝无可能,但如果上帝非要赐给我的话我为什么要拒绝呢? 真有这种事情的话那是上帝是明明白白地让我不归,或者是让我在美国多做几年有了资本再回去更好地报效祖国。哪怕做几年拿自己积累的薪水自己和自己签一份项目合同,也算是带着百万人民币的大项目回国了呢。

2. 如果这里的导师拿到百万千万美元的项目主动让我参与进去,那说明上帝是让我延期一年半载做做这个项目再归国。毕竟此生空怀绝技但在国内很难有机会在稍大的项目中哪怕做个螺丝钉,回国能有机会傍上大佬做个十几万人民币的项目都阿弥陀佛了,在美国如果不作主观努力就能在百万千万美元的项目中做个螺丝钉上的垫圈的话,更应该赞美上帝、三呼阿门啊。为美国人民服务也是为人民服务啊。

3. 如果既没有10万美元的稳定工作自动找上门来,也没有百万千万美元的大项目自动找来让我做垫圈,那说明上帝还是希望我早点回国传福音去,那就按期回国,看上帝让我回去做什么吧。