初学者指南:为开源做贡献

简介: 当我刚开始做Rails开发者时,我认为所有的Rails gems都是魔法。一些聪明人正在制作这些牛逼的类库让我使用!我不知道这些类库有多少可以使用,我认为它们是好的。它们运行着,并做了我需要它们做的工作。它们好像如此深奥、被想出来,以致于我甚至不知道该如何为它们贡献力量,即使我想!

当我刚开始做Rails开发者时,我认为所有的Rails gems都是魔法。一些聪明人正在制作这些牛逼的类库让我使用!我不知道这些类库有多少可以使用,我认为它们是好的。它们运行着,并做了我需要它们做的工作。它们好像如此深奥、被想出来,以致于我甚至不知道该如何为它们贡献力量,即使我想!


时至今日,我仍然没有给Rails社区贡献任何开源代码。那是因为Rails社区在开源方面非常活跃,因此找到你要贡献的东西实际上是比较困难的!当然你能够翻阅问题并试着解决,但是,老实讲,它们通常太复杂了、令人望而生畏。有这些聪明人讨论问题,你能足够优秀地解决问题是难以想象的!


快进到Mobile Makers,那时候我刚接触iOS,我第一次给开源代码做了贡献!从那以后,我做了更多,我不再害怕向甚至更多的项目贡献代码!下面是我如何迈出这一步以及在这个过程中我学到了什么:


它不是魔法

走出Rails社区,我很快知道了,大家对开源类库事实上有某种不信任感。当我想一直使用所有的CocoaPods时(就像Rails!),团队的高级iOS工程师总是质疑外部类库的使用,如果可能,宁愿建立我们自己的类库。


在iOS项目,有很少的iOS类库可以一直使用的,大多数项目仅仅在开始的时候使用一些类库!由于CocoaPods的出现以及删除或升级依赖项是如何容易,情况正在发生着变化,但是它还达不到Rails的级别,你的大部分项目仍然由即插即用类库构成。


意识到这些外部类库不是魔法,我的心态改变了,也让我较以前产生了巨大的改变。懂得了编写类库的那个人是一个真实的人,他会犯错,或许不会写出最优的代码,他也不能一直考虑到所有的边界情况,这让我能够轻松发现我能够做贡献的小的(或大的)地方。


关注就是共享

有一些人鼓励积极寻找开源项目去贡献力量,而我发现我贡献的所有项目都是实际在我自己的代码中用到的。


真相是,我没有时间为了贡献而去主动搜寻github上的问题/类库。但是,当我在自己的项目中用到一个类库时,我希望它具备X功能或那个bug Y被解决了,搞定并反馈回去是明摆的事!事实上,自从我喜欢向开源贡献力量以后,当我发现这些机会时,我是超级激动的!


这把我带到了下一个论点……


它是这样一种美好的感觉……

向开源贡献力量真的容易上瘾!先前知道了如何编码,让计算机实现你的愿望是不可思议的,这让你觉得你像个魔法师。但是,当你能够把其他人的“有魔力的”代码变得更好、且他们认同你能够使代码变得更好(通过merge)时,这种感觉是无法用言语表达的。它就像你刚刚变成了10级的魔法师而不是1级。


小的开始

此外,我把开源贡献者看做是用魔棒来作彻底改变、改进一切的魔法师,但实际情况是大多数变化都很微小。他们只是根据每个人的基本方式累计增加,并最终改变和完善了整个类库。因此不要低估小改动的力量!

下面是个例子,我最近贡献力量的过程:


修改一个README

我可能想把Toast类库增加到我的iOS项目,但是他们在README没有提到有可用的CocoaPod。既然我只是想测试我项目中的类库,我想让它较为容易地移除掉。因此即使我以前使用过这个特定类库,也知道它好用,我开始为了另一个Toast类库而搜索CocoaPod


找了一些类库,我发现这个特定的Toast类库事实上就是CocoaPod!为了确保其他iOS开发者知道有可用的CocoaPod,我就CocoaPod安装说明提交了一个pull request到类库的README。小改动,但是希望对其他开发者有帮助!


增加额外相同的功能

在为CodePath最终项目构建Android app时,我的团队想尝试当前官方Android字体—Roboto。事实表明它在并入外部字体到Android时非常繁琐,因此,我们使用名叫RobotoViews的类库来解决。基本上,每个view不得不经过配置才能得到Roboto的typeface。


然而,有一个我们需要的类库而RobotoViews没有包括进来—较新的Switch view。添加Switch view只需按照其它views的方式大量地拷贝/粘贴,因此它的添加不是太难,但是另一个view可以作为RobotoViews使用!

换句话说,RobotoViews的作者已经做了所有艰难的工作使得只需要修改一些地方就可以添加一个新的view。

类似的,我通过给流行的iOS Foursquare client library添加原来没有的一个额外功能来贡献力量,只是因为有了作者抽象这个过程的工作,这非常容易添加。


重构

当我注意到带有少量变化的三个函数有着相同的代码时,我给ECSlidingViewController添加了一个非常小的修改,来确保在滑动菜单滑出去时键盘隐藏掉。因此我重构了代码,产生一个函数,让三个函数仅仅通过传入一个不同的参数来调用它,因此将来需要改动这个函数的人只需要修改一次。


正如你看到的,我的所有开源贡献都是非常微小、容易做的!当你坚持使用外部类库时,你会看到相似的机会。因此向前走,并作出小的改动——它们是有价值的!


怎么做

看看这个伟大的《RailsCast:一步一步教你如何为开源贡献力量》(它和非rails项目非常类似)。但是基本上,都有下面的几步:


Fork

在Github上找到你想贡献的类库,只需点击Fork按钮!

image.png


Clone

下一步,克隆你想fork的类库——它现在应该在你的名字下(比如:NatashaTheRobot/ECSlidingViewController),而不是原作者!

image.png


Branch, Change, Push

一旦你克隆了代码库,改变为代码库文件夹。接下来,用能够反映你将要做的修改的、有意义名字来checkout一份新的分支。作出修改,push这个分支到github。


当你去你的Github profile主页,你会看到一个大大的绿色“Compare and Pull Request”按钮。看一下你的文件,确认一切ok。然后确信你给原始分支发送一个pull request(不是你fork的那个分支)。当你做完pull request之后,应该看看是不是这样!再一次,确认你刚刚给原始作者的master分支的master做了一个pull!

image.png


Tweet

这一步当然是可选的,但是我喜欢给作者发送tweet,告知他们变化。他们可能没有打开github的通知功能,尤其是那些最近很少改动的、比较老的代码库,因此让他们知道并展开一次沟通是比较好的。


他们或许太忙而没有merge,因此当他们回复,并告知你,在他们有空的时候再去看。你知道你的pull request不会永远悬而不决了!


Enjoy!

真的,为开源贡献力量真的有意思,也是跟最好的人学习以及提高你自己技能的有效方法。希望这个向导能够减轻你对开源的惧怕!!!


如果你已经贡献了,请在评论里分享你的故事!

相关文章
|
数据库
ACN规则深度解密-全网最细的剖析
ACN规则深度解密-全网最细的剖析
|
Oracle 关系型数据库 数据库
已解决:idea 连接 oracle 数据库 避雷
已解决:idea 连接 oracle 数据库 避雷
317 2
|
存储 安全 Shell
【Shell 命令集合 系统管理 】Linux 显示系统中所有用户的登录记录 last命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示系统中所有用户的登录记录 last命令 使用指南
429 0
|
Windows
写一个批处理,压缩一个文件夹下的所有图片大小
【10月更文挑战第14天】在Windows环境下,使用批处理脚本可以方便地批量压缩图片。以下是一个示例脚本,用于压缩指定目录下的所有.jpg和.png文件,并将压缩后的图片保存到另一个目录中。
1089 3
|
SQL
Parameter ‘id‘ not found. Available parameters are [collection, list]
Parameter ‘id‘ not found. Available parameters are [collection, list]
669 0
|
人工智能 计算机视觉
AI计算机视觉笔记十五:编写检测的yolov5测试代码
该文为原创文章,如需转载,请注明出处。本文作者在成功运行 `detect.py` 后,因代码难以理解而编写了一个简易测试程序,用于加载YOLOv5模型并检测图像中的对象,特别是“人”类目标。代码实现了从摄像头或图片读取帧、进行颜色转换,并利用YOLOv5进行推理,最后将检测框和置信度绘制在输出图像上,并保存为 `result.jpg`。如果缺少某些模块,可使用 `pip install` 安装。如涉及版权问题或需获取完整代码,请联系作者。
|
机器学习/深度学习 人工智能 算法
人工智能伦理:当机器拥有道德判断力
随着人工智能技术的快速发展,AI已经从简单的任务执行者逐渐转变为具有决策能力的智能体。本文将探讨AI在伦理道德方面的挑战与机遇,分析AI如何通过算法模拟人类道德判断,以及这一进步可能给社会带来的深远影响。我们将深入讨论AI伦理决策的实现路径、面临的技术难题和未来发展趋势,同时评估其对法律、社会结构和个人隐私的潜在影响。文章旨在为读者提供一个关于AI伦理决策的全面视角,并引发对于科技发展与人类价值观之间关系的深思。
558 27
|
数据采集 网络协议 安全
|
监控 JavaScript 前端开发
Vue 项目性能优化指南:提升应用速度与效率
Vue 项目性能优化指南:提升应用速度与效率

热门文章

最新文章