For The Best Thing In The World

Work Hard to Enjoy Them. bloom energy

我的Google Summer Of Code经历

在大一寒假时,正好在知乎看到了谷歌编程之夏(GSoC)的含金量高吗?此问题,心向往之。 在浏览了一些答案后, 看到@larmbr宇 介绍了@洪谦(QianHong) 热心帮助学生参与GSoC,虽自知还是菜鸟一枚,但还是诚惶诚恐的私信了他,希望能够参与GSoC。相信各位在程序员的成长路上,肯定都会有参与开源项目的小目标,先不说5000美金,仅仅是有目标性的参与开源项目就吸引力满满了。 随后@larmbr宇就帮忙联系QianHong,并且给出了鼓励与建议;P

“勾搭”上QianHong后,当时看到wine-zh社区的中国开发者这么厉害,便稍有打退堂鼓,认为自己暂时还不适合参加,毕竟当时没有真正的使用linux,连github也没有用过。于是在之后便尽量些少的准备,学习相关的知识,订阅wine开发者邮件。 一段日子后,QianHong发来了邮件,问近况如何,以及一些参与GSoC以及Wine开发的建议,满满的一大篇,可见其用心程度。当时刚刚开始用邮件通讯以及gmail,一些邮件礼仪都不甚清楚,QianHong便耐心的建议以及一步一步的指导,着实让人感动,QianHong是我认识的最好的老师,没有之一。估计在以后的人生中,不会再有这么好的老师了T_T 第一次回复如下:

hi, 几个建议:
1. 邮件尽量用纯文本,除非必要不要用html格式/富文本格式,尤其是在英文技术列表中更要注意。
2. 订阅邮件列表不要订“摘要模式”,更万万不要回复摘要邮件。
3. 关于c/c++ runtime,现在就有个简单的任务:
先下载和编译Wine的源代码;
然后查看代码目录中的dlls/msvcp90
$ grep stub msvcp90.spec | grep complex
可以看到下面这样的函数:
@ stub -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@H@Z
@ stub -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@H@Z
@ stub -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@H@Z
@ stub -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@H@Z
@ stub -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@H@Z
@ stub -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@H@Z
@ stub -arch=win64 ?_Cm@?5???$log@M@std@@YA?AV?$complex@M@1@AEBV21@@Z@4MB
@ stub -arch=win64 ?_Cm@?5???$log@N@std@@YA?AV?$complex@N@1@AEBV21@@Z@4NB
所有这类以stub开头的东西都是Wine项目未实现的函数。
上 http://demangler.com/ ,可以把这些经过mangle的符号重新demangel为c++的语法:
例如这样的:class std::complex<float> __cdecl std::pow<float>(class
std::complex<float> const &,int)
然后就可以试试自己动手实现这些函数,参考dlls/msvcp90/math.c中同类函数的实现方法:
dlls/msvcp90$ grep pow *.c
(或者 dlls/msvcp90$ grep -A50 -B50 -w pow *.c )
这个任务的难度对你来说合适吗?

在随后的很多问题上, QianHong都是如此耐心详略的指导,大家感受一下(后来不小白了就没有这样面向小白的回复啦)。现在回看以前的邮件,还能学习良多,感觉能够被人如此指导就是撞大运了(好了,现在QianHong在其他领域也会给详尽的建议我)233 那段时间大致是我成长最快的一段时间吧,从自娱自乐写一些程序,到参与Wine这样一个有着10年历史与复杂架构的项目,从一个啥也不会的windows VS小白转到了linux vim开发。 从14年3月开始断断续续做了几个月,才把第一个补丁写出来,并且加上了测试,而补丁最终被接受已经是大二的9月了; 而后14年的GSoC已经来不及参加,于是便为此一直为Wine写关于实现VC++runtime模块的补丁,在此期间学习到了非常非常多的东西:P 最后终于成功参与了15年的GSoC,课题是实现tr2 filesystem库。 随后也可能是凭着此经历,得到了@肖祥全的内推(感谢!),幸运的获得了Google的面试,可惜算法不佳,在电面就挂了。

16年的GSoC,原来在寒假前打算尝试新项目,参与了R语言GSoC2016的准备,把GSoC Re2正则表达式库的要求准备全部都做完了,成功的作为candidate的时候,mentor发了我一封邮件

Dear YongHao,

We received another very strong application for
the RE2 project from Qin Wenfeng who
has already implemented a working prototype https://github.com/qinwf/re2r

It may be possible for you both to work on the RE2 project in GSOC,
if you write proposals to implement very different but complementary features. 
I would encourage you to write an email to Qin and start a discussion
about which different features you both could work on.

告知我已经有一位中国学生完成了re2项目的原型了@-@,囧死了。得知wenfeng是一位经验丰富的R user以及已经完成了prototype,项目量不够两个人合作,便放弃了此项目。我打算准备的另一个项目BOOST也刚好在这年拿不到GSoC的名额, 于是我又投回Wine的怀抱,此时挑战的是更难的项目: concurrency库,也因太难而选不上了,太难了mentor不会冒风险尝试。后来因为忙着找工作的事情,就没有继续填坑了,希望之后有机会继续填。

以上便是全部GSoC经历,也是我大学的一个重要组成部分了。

大学更为重要的部分是? 当然是女朋友啦 ;P