Mid Station

Summer of Code 16

GSoCGSoC

关于夏天的故事,总是要从冬天说起。
记忆中的那年冬天很短暂,同时也很单调。即便在家里,我也装模作样地遵守着学校里面的作息时间,特地把手机上的日程表满满地填得和上下课时间一模一样,让手机没完没了地模仿熟悉的上课铃声。一天午睡起来,我拍拍沉重的脑袋艰难地爬到书桌,呆呆地望着上午剩下没做完的数学压轴题,它仿佛又在嘲笑我狼狈的样子。手指习惯性地摩挲者那支磨砂黑LAMY钢笔,却半天读不进一个字。心里突然有个声音说:那就不如想想自己想干的事情吧。我抖了抖了身子,从那堆厚厚的试卷底下抽出一张文稿纸,断断续续地把这些日子里思绪里那些闪闪发光的念头一一记录下来。其中有一些是想去完成但没时间的,一些是随时能做但是时间不对,还有一些是暂时还没有能力去完成的,GSoC就是其中之一。


浑浑噩噩的大一,我没有记起那张业已成灰的文稿纸上的很多事,就连那支磨砂黑的LAMY也弄丢了。
等我又过了一个冬天,才想起来,有一件事,一定要在毕业之前完成。转眼又到了——

按照能搜索到的前人经验,都说想要成功申请到GSoC,必须先混入开源社区内部和潜在的导师打好关系。
可是项目哪里找?哪些会入围GSoC?不是搞不清楚项目要做什么就是看不懂代码怎么办?怎样才能和社区里面的人搭上话?一些信誓旦旦必须完成的事,往往会感到无从下手。

翻遍了过去几年成功入围的组织,根据自己熟练掌握的编程语言可以筛掉一大批;因为自己对安全这块比较熟悉,那么目标就缩减到了5个以内了。再到github上看看代码,能看懂个大概而且恰好之前还用过的就只有这个了——Mitmproxy。这个项目本身就是通过GSoC发展起来的,参加GSoC时会挂靠在The Honey Net底下。

其实接触这个软件也有段时间了,代码的结构对于我这样的半桶水来说算得上是十分复杂,想要跟社区里的人混熟一点,不可能只靠有空在频道上say hi闲扯几句,搞不好还会引起反感。所以必须学会从作贡献开始。

还记得几个月前第一次给社区提交PR的情形,我从Issue list中挑了个看起来比较好弄的需求——是关于用快捷键重载自定义脚本的。然后强迫自己硬着头皮来来回回把相关代码读了几天,总算隐约看懂了其中的逻辑,再硬塞了一段代码到其中,跑了几遍没问题,就厚着脸皮地提了PR。项目领头人mhils很快作出了回复,说这个需求是解决了,不如我们再推进一把搞个自动重载,连快捷键都省了。我看有回复了,当然糊里糊涂地说好,再到自己写代码就懵了,自动重载不仅要用到一个叫watchdog的库,还得对现有的代码进行重构。接着又是盯着代码看了好几天,总算勉强实现了功能。对项目架构本身就不熟悉,加上很多东西都只是对照文档现学现用的,代码质量实在是不敢恭维,又跟mhils一来一回了改了几个回合,终于给Merge了。我再仔细一看,Merge的代码一大半都是mhils自己重新写的但功劳还是记到了我的头上了,还是挺不好意思的。

后来有空就给项目修一修小bug, 都是些小打小闹。自从社区里正式宣布项目入围GSoC后,Slack频道上热闹了不少。隔三差五地就有人加进来问想参加GSoC,可不可以先接些活干。管理员们也不厌其烦地回复让看FAQ,从Issue List上动手试试,但真正提交PR的人寥寥无几。

终于到了学生提交计划书的日子,我仔仔细细把要求读了一遍,到学院开好了在学证明,用蹩脚的英文写了一份还算详尽的计划书,早早就提交到了平台上。

接着就是一个月的等待,煎熬。

等来只是google发来一封Thank you for applying 打头的邮件,不用点开我也知道,挂了。

夏?

说实话知道结果还是挺失望的,毕竟有几天为了一篇proposal牵肠挂肚,早上睁开眼就抱着电脑往图书馆跑。还是总结一下经验吧:
首先是google本身给项目的名额就少,竞争就比较激烈了;项目一共给了两个idea,一个是开发者们一致认为比较迫切需要的,写一个前端界面;而我选的是另一个,完善软件内核方面的,不巧在社区最为积极踊跃的一位印度友人也是报的这个,我自然相形见绌。一是自己知识储备还不够,二是能力不足,若如打通了前后端且技艺精湛,就不会陷入如此被动局面了。

其次是时间的问题,国内学期结束一般较晚,等到考试结束整个GSoC流程也都已经过半了,准导师也是怕时间冲突,说交给毕业生或是学期结束较早的同学比较放心。如果出现时间冲突,无论如何都要让准导师相信你有能力兼顾好两边。

最后还是安慰一下自己了,有网友提到过一般成功申请到的都是大三大四的,虽然不能在大二就圆了这个心愿,也当是为来年做好准备了。