RGSoC

在 2015 年夏季,我们有幸通过 Rails Girls Summer of Code (RGSoC) 为 CocoaPods 做出了贡献。GitHub 慷慨地为我们提供了接待和指导。您可能会问,两个新手开发者是如何开始从事开源工作的?

什么是 Rails Girls Summer of Code?

RGSoC 是一项全球性奖学金,为两名女性团队提供资金,让她们在三个月的时间内为开源项目做出贡献。在可供参与的项目中,我们发现 CocoaPods 最有趣,尽管它对我们的技能水平来说颇具挑战性。为了让申请获得考虑,我们需要找到愿意指导我们进行编码冒险的人,最好还能找到一个工作场所。我们联系了 GitHub,他们为我们提供了工作空间。五位工程师报名每周指导我们一小时。凭借这种配置,我们成为了 16 个被接受的团队之一。

我们如何结识团队

在利蒙举办的 Alt-Conf 前的周末,我们在一家秘鲁餐厅见到了 CocoaPods 团队。当我们的 CocoaPods 指导者之一 凯尔·富勒 向我们发送地址并邀请我们参加晚宴时,我以为我们只是去聚餐。我的第一个想法是,如果 CocoaPods 成员要举办一场晚宴,他们一定非常喜欢烹饪。CocoaPods 团队几乎占据了二楼的全部空间。虽然在见到别人时我不会紧张,但想到要见到一个团队,而且是选择我们的团队来从事他们的开源项目,这让我感到紧张。一开始,见到 14 个可能已经互相认识的人让我感到害怕。为了缓解焦虑,我记得我们已经见到了凯尔·富勒和 塞缪尔·吉丁斯,是在索马区的咖啡馆里,而且他们很友好。在利蒙,我们互相介绍,并倾听周围的谈话。我们通过 CocoaPods 的对话了解了更多有关依赖项管理器的知识。当我们对术语只有一点了解时就听到这些术语时,这并没有让我们望而却步,而是激发了我们求知欲的火焰。晚餐后,我们在米申区散步,最后来到了冰淇淋店 Xanath。在旧金山,我们与 CocoaPods 核心团队见面的那一周开启了许多其他很棒的首次体验,包括 AltConf

我们如何组织工作

师生比例与一般的学习环境相反。我们有 11 位专门的导师,他们愿意花时间在整个项目中帮助我们。我们与导师的大部分合作都是远程进行的,我们的许多团队成员都来自其他国家和时区。沟通通常从参与我们项目的组织的三个 Slack 频道之一开始。较长的会话和配对会提前计划。

为了安排与不同时区的导师和教练的会话,我们使用了 Google 日历、Slack 和文本的组合。对于屏幕共享,我们找到了 ScreenHero、Google 环聊、Blue Jeans 和 Skype 进行沟通。拥有屏幕共享备选方案是必要的,因为音频和屏幕共享延迟是不可避免的。就像工具不可预测一样,生活事件也是如此。灵活性是关键。睡眠不足、双重安排、会议和感冒都会发生。在某些事情发生变化时尽可能提前沟通,虔诚地使用日历并设置提醒以避免忘记会话和截止日期是可行的方法。

我们共同努力的事情

在项目期间,我们做了几件不同的事情。以下是我们为 CocoaPods 做的一些主要工作。

Boris Bügling 一起,我们配对创建了 cocoapods-label,这是一个用于 CocoaPods 的插件,它使用 Pod 描述注释 Podfile。这非常适合那些记忆力不佳且希望以有效方式记住不同 Pod 的作用的人。当 Boris 在 AltConf 期间访问旧金山时,我们开始着手这项工作,然后,我们在屏幕共享时继续远程开展这项工作。我们发现,由于时差 9 小时,在 Boris 的晚上(我们的早晨)工作是最好的时间。由 Boris 指导我们并向我们展示如何创建一个新插件真是太好了,我们将在项目中使用这些知识。

当我们申请在 CocoaPods 上工作时,我们选择通过创建插件来使 CocoaPods 更加模块化。在规划会议期间,我们挑选了我们感兴趣的问题来处理。

以下是 Emma 从事的工作

我选择处理一些不同的事情。从看似一项简单的任务开始,让 Pods 在 Xcode 中不区分大小写。我学到了很多关于排序的知识,也学到了如何找到代码库。让该 PR 合并让我感到自豪,并为承担下一项任务提供了动力。继续将 cocoapods-search 的源代码移到它自己的 gem 中,并从 CocoaPods 自身依赖它。有一个用于 创建 CocoaPods 插件 的脚手架,我使用它来设置文件和文件夹的主要结构。从那时起,它归结为找出负责搜索的代码并将该代码复制到新创建的 gem 中。我用 Rake 运行了我的本地更改,以确保一切按预期工作。测试也需要移到新的 gem 中,事实证明这比移动源代码更复杂,主要是因为它们需要 fixture 文件夹中的大量文件才能运行。将搜索提取到它自己的 gem 的目标之一是使其更容易、更安全地修改,而不会搞乱大型项目中的其他内容。在我完成提取后,其他贡献者继续进一步改进搜索代码,这表明提取确实产生了积极的影响,因为它更容易找到和理解。

搜索完成后,该项目还有几周的时间。我想更多地了解 Web 开发,并与 Orta 合作了一个名为 CocoaPods Stories 的新项目。这个想法是让 Pod 用户能够撰写有关他们使用哪些 Pod 以及如何使用 Pod 的故事。我们没有取得比规划和研究阶段更进一步的进展,我们不确定它是否仍然有用。如果您希望我们为这个想法做出贡献,请给我们发信息。

这些是 Karla 处理的事情

在与 Boris 和 Emma 合作处理 CocoaPods-label 之后,CocoaPods 问题 #3398“将 UI 模块提取到它自己的 gem 中”,标记为 d1:easy,似乎特别有吸引力。Samuel Giddins 设置了项目脚手架,我们通过将其分解为更小的步骤,概述了处理 #3398 的第一步。为了将用户界面模块 CLAide 提取到它自己的 gem 中,以便它独立于 CocoaPods 工作,我们必须摆脱所有 CocoaPods 特定的语言、依赖项和文档。最初很难发现 CocoaPods 语法。因此,与 GitHub 上的 Samuel 和 Kyle Fuller 配对至关重要。在清理 CLAide 并解除其 CP 依赖项后,下一步是为所有剩余的用户界面代码编写测试。

对于测试,我们使用了 Rubocop、CodeCov、Code Climate 和 Travis CI。在编写测试或更改测试后,我们不得不调试很多。调试感觉像一个永无止境的故事,但它很有趣。我们仍在处理 Cork,我期待在 2016 年夏季到来之前完成它。

另外,如果您对名称感到好奇,我们会发现将无 CocoaPods 用户界面库命名为 Cork 很合适,因为 Cork 与 CocoaPods 一样,也是树木中经常收获的部分。

结论

我们鼓励其他开源项目成为 明年 RGSoC 的一部分。教学和学习都是成为更善于吸收信息、学习如何处理和应用新概念的绝佳机会。更不用说,当您教授您所了解或认为自己了解的内容时,它会真正鼓励您检查自己对所教授概念的信念。作为该计划的参与者,学习如何保持谦逊是一个巨大的教训,而寻求澄清是最大的收获之一。

其他一些收获

  • 我们可以处理引起我们兴趣的任务。
  • 我们在生产项目中积累了工作经验
  • 向专业人士学习
  • 关注其他 RGSoC 团队在世界各地处理其他开源项目。
  • 比我们申请 RGSoC 时考虑参加的训练营更具成本效益。

一些障碍

  • 基于志愿者的教学意味着我们的导师优先考虑他们的工作,我们不能总是依赖在需要时获得帮助。
  • 在同一项目上与多个组织合作有时会给规划和达成共识带来挑战。

指导确实需要时间,但如果您将其视为吸引更多贡献者参与开源的投资,那么这是值得的。我们还鼓励其他开发人员抓住机会学习和为开源做出贡献。