Mid Station

Summer of Code 17

条件太好,好到难以让人相信这是一份正经的实习工作。

去年?

对,我去年已经失败了一次了,今年还来申请,还是The Honeynet 的 mitmproxy 项目。大概是二月份左右,距离学生申请项目还有一个多月的时间,我又潜入到mitmproxy的Github项目,打算为申请GSoC铺好路。把项目代码库更新了以后,马上傻眼了,感觉这和我几个月前见到的那堆代码完全是两码事,面目全非啊。为了重新弄懂项目的结构,我用了一种貌似愚蠢实则可靠的方法,期间所作的努力详见:How to Read Source Code of Large Program

申请

根据The Honeynet官方博客上的消息,今年mitmproxy还是分成两个方向,一个是Mitmproxy内核方面,另一个是Web UI,Mitmweb。单从GitHub的Pull Requests和讨论的活跃程度来看,Mitmweb作为一个新的分支,明显没有主程序那么受关注,也就是说申请这个项目的竞争可能就相对较小了。唯一的挑战来自编程语言,毫无疑问写Web UI是要和JavaScript打交道了,而且是相对陌生的React.js。幸好项目用的是ES6+React.js,同时也有完善的Gulp工作流,只要弄懂了React.js和Redux.js的机制以后写起代码来还是比较舒服的。

Issue里面的bugs总是有限的,而且我能够修复的可能也就只有几个,为了多提PR混脸熟,我开始给Mitmweb的js代码写测试。这也算是去年GSoC落下的尾巴,Mitmweb能够工作得挺好,但是代码覆盖率真是少得可怜。

在正式开始申请之前,我就开始在Slack上面联系项目负责人Max,把可能要写进计划书的几个想法向他提了一提。然后就开始准备计划书了。到了开始申请的时候,计划书已经是基本成型,再到正式提交之前,基本上是每天都忍不住上Google Docs读一遍,然后改一改。最后出来的计划书和去年的再比较一下,才发现去年的计划书是如此不堪,也难怪没被选上了。

申请关闭之后,也就是导师挑选学生的时间段。这期间Max做了两件事,第一是给我布置了一个小任务,为Mitmweb的选项界面设计一个UI,因为之前Aldo老大实现了一个更加灵活的选项系统,那么好东西必须要迁移到Mitmweb让Web界面也用上。我用墨刀做了一个demo,然后就像平时交作业一样给他发了一份设计文档。第二件事,Max突然提出要来一次视频通话,还强调说英文水平方面不用担心,能够正常交流就可以,也不用特别准备什么。这不是面试,只是想对学生进行更深入的了解。然后我们约了个时间上Skype,我这边是北京时间晚上九点,德国那边是下午三点,Max是在机场用手机开的视频通话,他还说马上就要上飞机了。聊了十来分钟,多半都是寒暄,也没怎么谈到项目的事情。最后我忍不住问他,你估计今年Google能给Mitmproxy几个名额,意思就是问他我进的机会大吗?Max思考了一下摇头晃脑的说Google的事情我控制不了啊,他们也要求我们开源组织在学生名单正式公布之前千万不能提前和学生透露结果,不过既然我们都到了视频通话这个地步了,你懂的。

Congratulations

5月5号一早就收到了Google的邮件,这次是Congratulations开头的了。接着就是申请Payoneer信用卡准备好收钱,整个5月都是留给学生和开源社区联络感情的,但是对于我来说,因为六月份开头两周要准备学校的课程论文还有期末考试,只好提前开始写代码了,所以学生名单一公布出来,就马不停蹄地写test,争取早日把覆盖率拉上去,之后忙起来也不至于没有代码可交。

$$$

尽管我费尽口舌向父母大人解释GSoC到底是怎么一回事,以他们已有的世界观还是觉得这事情不可思议。一个在校大学生竟然可以找到平均1200美金一个月的实习项目,而且还是只用在家里工作,这不是传销骗局就是非法活动。直到他们向某些见多识广的亲戚朋友问清楚Google到底是一间多么财大气粗的公司,还有看到Payoneer寄过来带有Google Logo的那张金光闪闪的信用卡,他们才真的相信我真的走狗屎运了。

划重点

最后给有志参加Google Summer of Code的朋友们一点小小的建议吧

  1. 选个好项目,对新人比较友好的,竞争比较小的。
  2. 早日混入开源社区,多提PR混脸熟;英文水平要求其实不算高,能正常交流就行,聊起来语法啊单词拼写啊其实都不重要,关键是敢去尝试。
  3. 提前和潜在导师聊一聊计划书的事情,计划书用心写好,虽然正式开始以后不一定都按计划来走。
  4. 鉴于国内期末考试时间还没有和国际接轨,加上期末可能碰到的一堆乱七八糟的事情。时间一定要安排好,如果预见到之后比较忙就要提前开始工作,有个什么突发情况要消失两三天也最好和导师说一声。