homepage
cluster
fun
GSoC 2020!
2020/5/8
GSoC 可算申请上了。

The 16th Google Summer of Code (GSoC) application period is complete and the results are in: 199 mentoring organizations reviewed 8,902 applications—submitted by 6,626 students from 121 countries—selecting 1,199 students from 66 countries they will now be working with over the next few months.

5月5号凌晨两点开奖的。02:05的时候,等睡着的我被闹钟的声音惊醒,手脚慌乱的打开电脑,在GSoC官网的 dash board 上看了又看,因为 dash board 上没有什么明显的标志表示通过与否,我还到 projects 列表又搜了一遍,确认有我的 project 之后超级开心。

知道 Google Summer of Code 的时候是大一,那时候 C 都还写不熟,自然是申请不上,但是当时和室友李神仙讨论了一下,觉得这个非常有意思,有一些想参加的念头。
大二,想起来申请 GSoC 的时候已经是5月中旬了,申请名单已经公布且都已经到 community bonding period 了,自然又错过了。
大三,也就是今年,是比较幸运的,在3月初,也就是还剩半个月学生申请截止的时候我想起来了。然后赶紧搜了一下 Rust 相关的 projects。因为之前写了不少 Rust 产生了莫名的自信,就想着看看有没有基于 Rust 的项目。不止 Mozilla 旗下,今年很多不同的项目也开始用起了 Rust。当时基本上把能找到的 Rust-related ideas 翻了一个遍,最后筛选出了两个项目,一个是 Ruma 的 proc-macro 重写的 idea,一个是 CCExtractor 的 FFmpeg Rust code builder。

Ruma

项目的 idea 是重写 Ruma related crates 里面的过程宏 (proc_macro)。当时先水了5个 PR,和 mentor 在 Matrix 上混熟了,mentor 都拒了好几个后来申请的学生。但是后来 CCExtractor 的 idea 更好玩,我就溜了(我好渣啊T.T,对不起)。还好溜得早,后来又有一个挺强的学生来做了,没有坑到 mentor。

CCExtractor

这个项目的 idea 显得就有挑战性很多。其实 idea 解释起来还挺无厘头的,他们要求是这样:

写出一个程序,对于任意合法的 FFmpeg 的命令行调用,譬如 ffmpeg -filter_complex 'color=c=red' -t 5 output.mkv,可以生成一套 Rust 程序源码,使用 FFmpeg 的内部libraries(libav*),编译之后不给任何参数运行,效果和前面的命令行调用的作用相同。并且要求 filter graph 部分得在生成的程序中 hard code。

是不是有 Currying 内味了(FP厨狂喜)。看到这个 idea 我当时就惊了:这个有什么用?然后跑去 Slack 上问他们,他们说这个东西本身没有什么卵用,但是要做到这个效果就得做两件事情:

  1. 实现 FFmpeg 的完整FFI bindings。
  2. 能够 hard code 所有种类的 FFmpeg 参数,并且能够在代码生成期计算出命令的 filter graph。

其实拆开来每一个步骤拿来做一个独立的 GSoC idea 都绰绰有余。但架不住我头铁。因为是idea,可行性值得深究,所以先过了一部分的 FFmpeg 源码,然后写了两个 project 分别测试了上面两个任务的可行性(这部分可以看我的 Proposal )。这些花费了一个星期的时间,好在结果发现基本是可行的。然后 Mentor 又布置了 qualification task,是用 Rust 手写一个关于 bayer 和 debayer 的图像处理库来填补 OpenCV bayer image processing 的缺失,顺便还得造 ffi 来给 Python 用。本来很快就写好了的,但是写完一版 mentor 又会要求更多的feature,又得继续写,来来回回花费了三四天。然后剩下时间都在肝 proposal,写完了会給 mentor review,好在 mentor 还比较欣赏我,proposal 一次就过了。后来结果出来他说我的 proposal 是 "One of the few we were able to add to the "must-accept" list on day 1",我还挺感动的(Google规定申请截至之后到结果出来之前是不能讨论proposal的)。

然后就是一个月的等待期,这段时间理论上可以继续贡献项目代码,但我怕没申请上就去干别的了,摸鱼,写作业和给 Rust compiler 提交几个 patch.

然后就到了申请结果公布的那一天,公布之后就收到邮件是关于注册 Payoneer 以收 Google stipend 的杂事(话说这两年 Google 越来越扣了,以前 中国地区 stipend 都有5k+刀这样,现在只剩3k刀的 baseline 了)。然后最近就是开始做一些前期的准备工作了,bitflags 在之前写proposal projects 的时候发现有一些问题,然后昨天把它修好并发了PR

GSoC
Rust
C