在俄罗斯参加捐款工作坊


长期计划向Go发送补丁程序,但不断推迟吗? 面对困难,不知道从哪里开始? 在本文中,我将描述我们如何在喀山举办“围棋贡献”研讨会,讨论其结果以及组织者吸取的教训。


破坏者:计划在Go进入活动开发阶段(退出代码冻结状态)时重复此事件。 查看详细信息。


什么是围棋贡献研讨会?


有时,世界各地都会举行不同规模的Go程序员会议,其目的是研究Go的内部并将其变更发送给Go。 一切始于GopherCon


有人来帮助其他人弄清楚工作流程,找出问题并解决,然后进行检查,理想情况下,是补丁注入上游 。 其他人则是“首次贡献者”。


如果您对以下任一感兴趣,则可能有兴趣参加:


  • 将自己沉浸在Go工具链的低级细节中(编译器,链接器,汇编器等)。
  • 从标准库或运行时加速某些功能
  • 为所有软件包添加缺少的示例或测试。
  • 重构一些非常可怕的代码
  • 改善对稀有架构或操作系统(您具有硬件和/或操作系统)的支持
  • 与为Go贡献了很长时间的人聊天

列表不完整,每个人都可以在其中找到一些东西。


在俄罗斯的工作室


在某个时候,我决定要帮助组织这样的活动。 最重要的是,我想成为一群志趣相投的人。


初步计划大约需要6-10小时(最佳和最差情况)。 黑客马拉松看上去是最合适的形式,但当时找不到赞助商。 但是有机会为IWMI&KFU科学和实践平台进行选修课 ,每周一次,为时一个半小时。 明显的缺点:由于参与之间的间隔很长,您将不得不花费一些额外的时间。 而且没有披萨。 叹气


出乎意料的是,我竟然成为GolangShow播客(第119页)的客人 ,在那里让我溜走了为学生做类似的事情的想法。 不久后, Elena Grakhovats说俄语的社区Go中创建了#kfu-go-2018频道。 不仅KFU学生可以在那里交流,而且所有对远程参与感兴趣的人都可以交流。


之后,会议的细节在大学获得批准,具体日期已知。 他们没有参加黑客马拉松,而是参加了“ Go编程语言课程”。 这并没有太大的改变内容,目标保持不变,并且在公告中有明确描述。


接下来是对跟踪器的扫描,以搜索可以在事件框架内至少部分(甚至更好-完全)执行的任务。


第一课

实际上,事实证明,任务清单中包括那些是我感兴趣或我个人理解的任务。 列表的编制过程中也意识到了这一点,但是很难影响它。


如果此列表由具有不同个人资料和兴趣的几个人组成,可能会更好。


任何参与者都可以进入Go跟踪器并选择任何内容,但是对于列表中的任务,已经准备好了解释,并且其中有些是部分解决方案。


课程期间生成的大多数内容都可以在kfu-go-2018存储库中找到。 您也可以在此处找到task.org


第一次会议


来了以前没有在Go上写过文字的学生。 他们中的大多数甚至都没有听说过这种编程语言。


我们在第一堂课上花了一半的时间从源代码构建Go。 在不同的计算机上存在不同的问题,包括意外的问题。 不同的OS,系统编译器的版本(有人不打算使用Go 1.4)等等。 ./make.bash (对于Windows来说是make.bat./make.bash出现不同的错误。


当大多数人的Go语言都可以正常工作时,我们的第一个Hello World是在传递新标志时在go tool compile规范消息。


90分钟过去了:我们讨论了Go,将其与C ++进行了比较,编译了一个工具链,分解了引导过程,并组装了一个更新的编译器。

第二课

另外,值得一提的是Delus Farkhulin帮助了我。 经验表明,要带领四个以上的人是非常困难的。 当除导师之外的所有参与者都不知道Go时,情况就变得复杂了。 您必须执行许多其他步骤。 但是,如果我们只有四个人,那就容易多了(有15个学生)。


Go项目中的第一个补丁


第二课的目标是直接做出贡献:


  • 我们同意DanielMartí的意见 ,说它将在约定的时间提供并且能够进行审核(如果补丁不重要且正确,请加+2)。
  • Ilya Tokar建议使用一个临时存储库,在该存储库中发送第一个CL(更改列表)要容易得多。 使您可以在工作中尝试Gerrit ,而不会破坏某些东西。
  • 准备好贴纸,以交付给将补丁成功注入Go的用户。

我们很幸运:临时存储库已损坏。 有人将错误的代码发送到存储库,因此,尝试程序(CI测试)始终失败。 我准备的任务之一是修复导致生成错误的原因。


在课程结束时,已发送了6个补丁:
CL105415CL105395CL105356CL105416CL105355CL105375


每个人都得到了贴纸。



180分钟过去了:他们取消了Go开发过程, 所有人发布了Google CLA ,配置了Gerrit,发送了“ hello world”补丁,修复了临时存储库程序集,其中一名参与者设法将补丁发送给golang / go(合并在同一天)。

第三课

要获得“准时”的优质贴纸,您需要联系可信赖的供应商。 保存在不打印标签就可以打印的最近点不是一个好主意。 而且,您不能将gopher徽标与其他任何徽标结合使用:带有Intel签名的gopher违反了所有可能的粘贴法。


其余的课程则根据较宽松的计划举行。 我们来做我们的任务,交流经验并互相帮助。 几乎每次这样的会议都会发送几个补丁。


然后是代码冻结,整个过程理所当然地结束了。 此时,倒入了17个补丁 。 我们仍然在星期六聚会,并使用不同的Go实用程序...



“第二步”的难点


最简单的方法是迈出第一步。 对于不确定使用git的用户,临时存储库是一个不错的解决方案。


找到最小的任务并且不需要很大的上下文并不是很困难。 各种各样的棉短绒帮助了这里。 在gometalinter --enable-all的软件包上运行“ gometalinter --enable-all ”,然后选择要修复的内容。


更高一级的任务更加困难。 我很难提出这样的建议,但是他们很难选择。 同时,据了解,我们已经超过了对短绒棉警报的纠正(即,挑战消失了,为了进行富有成效的培训,有必要寻找新的任务类型)。


从理论上讲,一个很好的第二级任务是改进Go中的测试:增加覆盖率,添加或完善基准,修复不太正确或禁用的测试,检查回归测试等等。 这需要浸入测试包中,但是更改的范围将最小化,并且很容易检查结果。 但并非每个人都喜欢使用测试。


他们设法作为第二级任务的示例:


  1. 编码/ json:将完整路径添加到UnmarshalTypeError#22369 )中的字段
  2. time:优化time.Time.Sub和time.Since#17858
  3. cmd /编译:避免在x86上使用慢版本的LEA指令#21735

我们是从接近代码冻结开始的,因此我们没有时间完成代码冻结:有两个星期六持续90分钟,但这还不够。 此外,每个人都在完成自己的任务。 如果至少有两个人组成小组可能会更容易一些,例如,在issue21735的情况下,您可以并行检查不同的假设并并行研究编译器的不同部分,然后共享知识。


第4课

最重要的是,值得关注这一特定部分,不可避免的深化以及随之而来的问题。 我怀疑有些人对Go的所有方面都了解得如此之多,以至于可以选择支持,所以这里又一次归结为缺乏不同的专家。


工作坊v2


当更复杂的任务不需要在三周之内解决时,上述某些问题将通过另一种格式解决。 下次研讨会应以连续活动的形式举行,至少持续4-5小时,最好是休息一下并持续更长的时间。


通常,hackathon格式还意味着参与者在开始之前要做好一些准备,即任务的选择和解决方案的初步描述,团队的形成。 这也可以帮助增加成功的捐款数量。


我们需要更多的导师来帮助参与者实时选择和解决问题。


城市的选择取决于参与者的数量及其地理分布。 四个选项最接近我:莫斯科,Innopolis,喀山,下诺夫哥罗德。


总结


不必参加这类黑客马拉松就可以为Go做出贡献,例如,Marco的文章“ Go的新功能正在发挥什么作用”便是一个很有启发性的例子。 但是,在一个由相同兴趣的人组成的公司中,从开始到结束,要克服最初的不适和混乱会更容易。


如果您对这个主题无动于衷,请继续关注golang-ru.slack 。 Go的下一阶段积极开发于20188月开始:忘不掉它的路不远了,距离得不到准备的时间也不太远。


初学者的奖金材料



活动预告


Source: https://habr.com/ru/post/zh-CN413815/


All Articles