
在本文中,我将告诉您我如何尝试参与某个大型开源项目的开发,我讨厌自己,然后使例行程序自动化并学会了享受生活。 详细信息-下切。
为什么还要这样做?
通常,出于多种原因,开发人员希望加入开源社区。 以下是其中的一些(可能不是全部):
- 感谢有机会免费使用此程序和其他程序
- 获得新的经验
- 抽出简历
总是有机会学习新知识,吸收软件开发的最佳实践,这一直是我的主要兴趣所在,但是在此过程中,其他所有内容同样令人愉快。
好的,我在做生意,从哪里开始?
首先要做的是找到要处理的任务。 如果您需要根据工作需要修改一些库,那么您真是个幸运儿–启动任务,与所有者讨论并开始实施! 否则,您可以参考项目页面上未完成任务的列表,自己动手做一些事情。 找到合适的解决方案与其实现同样重要,而且在这里并不是那么简单。 即使您是一位经验丰富的工程师,也可能从更简单的任务开始,熟悉代码库,接受开发流程,然后再承担更大的功能。
如何为初学者找到任务?
不久前,github开始向初学者展示合适的任务。
有了这些“工具”,我的平常日子就开始像这样-我打开了要处理的项目列表(为方便起见,我用小星星标记了它们),转到了上面的部分,或者搜索了所需的搜索标签,同时进行了搜索在此特定项目中使用的那些。 不用说,大约40-60个存储库需要花费大量精力,并且很快让我感到无聊。 在此过程中,我变得烦躁,失去耐心并放弃了这东西。 在这些日子之一中,我意识到我可以使搜索过程自动化,并着手编写TOR。
要求条件
- 任务必须打开
- 任务未分配给任何人
- 该任务应标明对社区的简单性和开放性。
- 任务不应该太老
之后,我开始分析所使用标签的不同存储库。 原来,有很多不同的标签,其中某些标签是特定存储库/组织所独有的。 区分大小写,我整理了〜60个标签的列表
解决方案开发
作为一种工具,我决定使用我已经很熟悉的Kotlin,并实现了以下算法:浏览所有标有星号的存储库,获取所有符合要求的任务,按更改日期排序,丢弃过旧的任务并显示它们。 结果列表按时间戳划分-今天,昨天,过去一周,一个月以及其他所有内容-有了它,定期使用该程序变得更加方便。 我决定在第一阶段,该应用程序将是控制台实用程序,因此输出仅输出到stdout。
我将结果包装在docker映像中,期望一个人比JRE更可能安装docker。 该实用程序不存储任何状态,因此每次启动都将执行整个算法,并且可以将用完的容器安全地从系统中删除。
该程序的工作方式如下:

要求限制
调用第三方API是io密集型任务的经典示例,因此自然而然地决定将数据加载到多个流中。 通过反复试验,我达到了Github API的局限性。 首先,对于大量线程,在Github端进行了反滥用检查,默认情况下,我必须在10个线程处停止,并可以通过输入参数进行配置。
其次,请求数有限制-每小时的请求数不能超过5000。 有了这个限制,一切都变得更加复杂,因为当将多个标签传递给搜索查询时,Github在它们之间放置了一个逻辑“与”,并且,鉴于列表中标签的数量,它将几乎没有100%的概率找到任何东西。 面对对API的大量调用,我开始对项目中的所有标签提出额外的请求,将清单的交集和针对这些标签的逐项请求任务相提并论。 通过向每个存储库添加1个请求,我摆脱了针对存储库不存在的标签上的任务的50-55个额外请求(程序支持的标签越多,额外的请求就越多)。
但是,对于某些用户而言,这种优化可能还不够。 根据肤浅的评估,当前的解决方案允许您绕过1000个存储库(代码中也有严格的限制),期望每个存储库中平均有4个简单标签。 到目前为止,还没有人遇到过这样的限制,但是解决方案的想法是积压的。 这里的一切都很简单-存储状态,缓存响应(在特别困难的情况下)在后台缓慢地绕开。
如何找到存储库?
如果您还不是活跃的Github用户,或者您不使用stars功能,请参考以下提示,以找到合适的存储库:
- 浏览您在项目中使用的技术,也许其中一些会在Github上介绍
- 使用流行趋势部分
- 使用真棒列表存储库来查找您感兴趣的主题。
发射
首先,您需要:
其他设置(按语言过滤,并行度,存储库黑名单)可在项目页面上找到。 链接到项目 。
如果您在项目中缺少某些标签-创建PR或写信给我,我会添加。