这篇博客是 https://im.daidr.me/blog/1086 的简中翻译版本。
原文地址:https://developer.chrome.com/blog/google-summer-of-code-and-chrome-extensions/
我是一名来自中国的大二学生,对Web开发非常感兴趣。在我大一的时候,我加入了一个技术社团(杭电助手),这可以说是让我接触编程和开源的一个起点。在杭电助手,我遇到了一群和我志同道合、对开发充满热情的同学,也正是在于他们交流的过程中,我在2023年初了解到了 Google Summer of Code。GSoC 是一个由 Google 组织的全球性项目,旨在建立学生与开源组织间的联系,并指导他们充分利用暑假去参加到开源活动之中。
抱着试试看的心态,我提交了我的申请。很幸运的是,我被选中了!在这个暑假,我给 Chrome Extension Samples 仓库做贡献的经历是令人难忘且珍贵的。当然,我也通过这次活动提升了自己高效沟通、编程、安排规划等重要技能。
目前 GSoC 2023已经接近尾声,是时候分享一些我在 GSoC 的经历了。这篇博客会通过我的视角简单介绍一下 GSoC 的总体流程,希望对你有所帮助!
作为 GSoC 贡献者的故事
我申请了 Chromium GSoC 2023 Project,主要工作是将现有的 Chrome 扩展示例升级以使其能够在 Manifest V3 正常工作,当然也包括一些相关工作流脚本和文档的开发。
一切的开始
当我在2023年2月份了解到 GSoC 时,我其实对申请这事还很踌躇,实话说,我有很多顾虑:
- 我是一个比较内向的人,而且英语并不是我的母语,与导师沟通对我来说可能是一个很大的挑战。
- GSoC 的社区来自世界各地,时区差异不能忽视。
- GSoC 是一个很有名的项目,有许多竞争者,留给我的机会可能不多。
不过现在,我可以很自信的说:上面这些都不是问题!
在我开始讲述我的故事之前,我想简单聊聊2022年初发生在我身上的一件事,这件事也是我参加 GSoC 的一个契机。在当时,我想将一个基于 Manifest V2 的浏览器扩展迁移到 Manifest V3,不过想要完成迁移并非一件易事,我需要参考文档并理解API的变更,为此我在网上寻找了与迁移相关的文章和示例代码,尽管如此,理解新的API和转移代码对我来说还是相当具有挑战性的。
所以当我浏览 GSoC 项目列表并找到与 MV3 相关的 idea 时十分兴奋,我渴望为改进 Manifest V3 的 samples 和文档做出贡献,为未来的开发者提供便利。
在今年三月份,我给负责这个 idea 的导师 Oliver 发了一份邮件,简要表述了我的意图:
The application to participate in the GSoC project
Hi,
I am a CS undergraduate student from China. I learned about the Chrome Extensions Samples related project at GSoC and I was interested in improving the Manifest V3 Samples. I don’t have much prior experience in working on API Samples, however, I have experience in web development and MV3 extension development (https://github.com/daidr/paimon-webext), which has made me realize the importance of MV3 api samples, so I would like both to learn and to contribute to it. Can I still apply for this project?
Thanks.
没过多久,我就收到了 Oliver 和 Ali 的回信。他们回答了我的问题,并提供了有关 GSoC 具体规则和时间线的详细信息。同时,他们也给了我许多有价值的参考资料。
这对我来说就像一剂强心剂,加强了我前进的决心。如果你也对未来的开源活动感兴趣,不论是 GSoC 2024还是国内的其他活动,迈出第一步至关重要,不要犹豫,勇敢尝试!
在申请之前,我看了看项目的代码并简单浏览了相关文档。尽管 GSoC 为学生贡献者提供了近一个月的社区融入期(Community bounding period)以熟悉社区,但是事先了解是很必要的,这能够让我写出更有针对性的 proposal.
我尝试解决了项目提供的一些 starter bugs,这些 issues 都比较基础,帮我很快地理解了项目。我很感谢我的导师 Oliver(尽管当时他还不是我的导师)。每当我遇到困难需要帮助时,他都能及时回复我的邮件,耐心解答我的问题。在撰写 proposal 遇到问题时,你也可以试试让导师过目,看看有没有什么需要改进的地方。
中选前
撰写 proposal 是申请前的最后一步,proposal 应该包含你的想法、目标和具体时间安排。部分组织可能会给你提供 proposal 模板,当然,网上也有很多现成的例子可供参考。
我将我的 proposal 草稿发给了导师,询问他的意见并根据意见做了一些修改,提交申请后,就是漫长的等待了。大概在五月初,我收到了我中选的通知。
写代码
在最初的磨合阶段,我首先处理了一些剩下的 starter bugs,和团队成员了解是否有我需要学习的技能。之后的时间我都花在了阅读文档上。
在和导师沟通后,为了使任务时间的分配更为合理,我调整了一些 proposal 中的目标。Oliver 还和我谈了谈 developer.chrome.com 中新页面的想法,这个新页面需要列出所有 API samples 并提供一个过滤器来帮助开发者快速找到自己所需的 samples。这对我来说还是个比较复杂的任务,我和导师在讨论项目细节和撰写产品需求文档(PRD)上花了很多的时间。
对于这样一个庞大的任务,我们认为 samples 仓库中需要有一个自动化工作流脚本,用来遍历仓库并生成包含扩展 samples 及其使用 API 的json文件。在 developer.chrome.com 的文档仓库中,再通过载入该文件来构建页面。
我最初考虑使用 Babel 来分析 samples 代码的抽象语法树(AST),找出其使用的所有API。在和 Oliver 讨论我的这个想法时,我发现他们曾经意见做过类似的项目了,证实了这种方法的可行性。当我完成大体的代码后,我的导师和其他的团体成员为我提供了宝贵的意见,帮助我规范函数封装、代码风格,完善了代码的注释。
在经历了大大小小的几次 review 之后,这些代码成功合并了。你可以在 GitHub 看到完整的讨论串,或者看看已经上线的文档页面(中国大陆可能没法正常访问)。
一点点总结
如果你问我 GSoC 为我带来了什么?首先,当然是学习并理解了和浏览器扩展API相关的知识,在高强度阅读文档,编写新的API示例之后,我对各种浏览器扩展API有了详细的了解。
而除此之外,我学到了许多参加 GSoC 之前很难接触到的技能:例如完整的代码审查流程、PRD的撰写等等。我也开始尝试使用 GitHub actions 自动化工作流,学习了如何使用 Babel 分析 AST 并遍历所有代码获取所使用的 API,首次了解了 Nunjucks 模板引擎。我也很高兴我能够学到这些重要的技能。
这个夏天给我留下了许多难忘的回忆,参与开源也让我感到非常满足。我遇到了耐心的导师,在他和团队成员的悉心指导下,我了解了许多感兴趣的知识,丰富了自己的开发经验。
计算机领域的知识日新月异无穷无尽,当我将自己与他人比较时,我意识到我对开源的理解只是冰山一角,不过千里之行始于足下,我相信 GSoC 时参与开源的一个极好的起点。
当然,我也希望我的经历能够为你参加未来的开源活动提供一些参考。
如果你也想参与到 GSoC 中,下面有一些我个人的建议:
- 选择一个适合自己的 idea:在我看来,寻找 idea 时,是否感兴趣应该是首先需要考虑的,其次才是技能。这样才能保证你在参与开源社区的过程中始终保持热情。
- 重质而非重量:你可以提交很多很多的 proposal 来增加被 GSoC 选中的机会。然而,我相信质量更为关键,人的精力是有限的,专注于两三个 idea 或许更有益处。(比如我只提交了一份 proposal😉)
- 不要畏惧新事物:不要怯于尝试你在项目中未曾接触过的技术,你会有整整一个月的社区融入期来熟悉这些陌生的技术,还有一整个夏天去实现你的想法,尽管去做!
- 提前熟悉项目:比如读读开发文档,看看以往的 commits 历史、issues 和过去的 pr。提前对项目有一个整体的了解才能让你写出更全面的 proposal。
- 时刻保持沟通:定期和导师沟通,不论是在申请前还是中选后遇到了问题,都不要怯于提问,大多数导师都很乐意帮助你解决问题,这还能够让他们了解你目前的进度。
感谢您的阅读!