如何找到并快速上手一个开源项目

news/2024/7/7 20:43:39/文章来源:https://www.cnblogs.com/crossoverJie/p/18277447

以前有写过两篇文章来简单聊过如何做开源的事情,最近我自己组了一个社区里面也有不少朋友对开源感兴趣,于是我便根据自己的经验系统的梳理了一些关于开源的事情。

  • 新手如何快速参与开源项目
  • 手把手教你为开源项目贡献代码

有兴趣的可以先看看之前这两篇。

🔎如何找到自己感兴趣的开源项目

首先第一步先想清楚自己搞开源的目的是什么:

  • 参考社区大佬的代码,提升技术
  • 丰富个人履历,提高面试通过率
    • 更功利一点就是想成为某个项目的 Committer/PMC
  • 单纯喜欢分享,热爱开源,认可开源改变世界💪。

我人为前面三种都是一个目的,提升自己获得后续的好处;最后一种则是妥妥的纯热爱。

以我个人来说,我两者都沾一点;我相信大部分人都是前面三类的目的,到这里我可能要先浇点冷水。

往往一个开源项目从你熟悉它开始到提第一个 PR 然后到合并中间经历的时间可能是大大超出你的预期的。

特别是越大型越专业的项目(我相信你也是想加入这类有一定知名度的项目)。

因为开源社区大部分都是执行异步沟通,与即时通讯的快速反馈不同,甚至还有不少 reviewer 处于不同的时区。

所以一开始就想做好心理预期,不要指望着我给某个项目提交一个很牛逼的功能,然后他们快速 review 合并,然后给你 commit 权限。

而且有不少开源项目是由某一个公司主导的,比如(Pulsar、Golang、Kafka),他们可能对于外部社区来的新手并不那么上心,一个 PR 晾在那里几个月没人理都是很正常的。

所以我建议一开始选择的项目有以下几个筛选标准:

  • 尽量是自己日常在用,熟悉的项目。
  • 最近有在及时更新维护的项目。
  • 对社区新人的接纳程度是否足够包容。
    • 这点可以在 Github 里查找标签为 help want/contribution welcome 的 issue 或者是 PR。
    • 查看这些 issue/ PR 最近的活跃时间,贡献者是否为新人。
    • 往往一个包容度较高的项目以上信息都是很活跃的。
  • 项目主要维护者是否来着不同的公司,是否足够活跃。


推荐几个我认为比较符合我刚才提到的条件的项目:

  • https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7195
  • https://github.com/apache/pulsar-client-go/issues?q=is%3Aopen+label%3Atype%2Ffeature+sort%3Aupdated-desc
  • https://github.com/apache/hertzbeat/

🖐如何快速上手一个开源项目

如果找到了自己想贡献的项目,如果自己还不太熟悉的话,那就可以尝试以下步骤来快速上手它。

✅单元测试

首先第一个就是单元测试,单元测试是一个非常不错的方式来上手一个新的开源项目,但重点不是去看现有的单测,而是自己去写✍️

写过单元测试的小伙伴就知道,如果要达到 90% 以上的覆盖率时需要对自己写的每一行代码都得了解,甚至在写的过程中会发现部分代码是不是没有必要,从而再帮助自己梳理一遍业务。

所以写单测确实是快速熟悉某个项目的方法,但这针对于一些逻辑简单的项目;对于一些业务复杂的项目建议还是快速跑通官方推荐一个功能。

🌟以 Pulsar 为例

以 Apache Pulsar为例,那就先跑一个消息的生产者和消费者 demo;跑通了之后再尝试看看它客户端已有的单测代码,然后尝试改一些断言,此时就会发现预期值为什么会这么定义。
https://github.com/apache/pulsar/blob/631b13ad23d7e48c6e82d38f97c23d129062cb7c/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java#L1077

比如这里的一个 consumer 取消订阅两次时候就会抛出异常,此时我们就可以根据异常的地方找到源码里对连接状态的判断条件。

就可以得知:当客户端取消订阅时会修改连接状态。

💓HertzBeat

下面以 Apache HertzBeat为例来看看当时我是如何贡献单元测试的。


通过官方的架构图可以得知 HertzBeat 是通过一个 collector 去直连目标采集数据的。

比如通过 Redis 的客户端去获取监控数据,然后再存放到自己的时序数据库中进行展示。

所以这个采集的过程就是比较核心的逻辑,我们可以看看他的接口定义。


一共就三个接口,分别是:

  • collect采集接口:在 Metrics 中定义了采集的目标信息(地址、端口等)
    • 采集完后的数据写入到 Builder 供后续的写入存储
  • preCheck:提前做一些参数校验
  • supportProtocol:返回定义的协议类型,通过这个类型找到对应采集器

然后就交由不同的实现类去采集不同的指标。

这里我以 RedisCommonCollectImpl为例,主要的单测逻辑就是模拟 Redis 客户端的返回数据,然后在 Collect 的代码里查看不同的处理逻辑,其实就是要覆盖各种分支以及异常的情况。

最后再断言采集到的数据与预期是否匹配即可,贴一段核心逻辑:

至于应该返回什么预期结果,有些 collector 可能会在代码注释里写清楚,但这个 Redis 没有写。

不过也有办法,我们可以把代码在本地跑起来之后进入管理台查看内置的监控模版。


这里是用于定义会监控哪些字段的地方,这样我们就可以在代码预先生成好预期返回值了。

具体的单测代码请看这里:
https://github.com/apache/hertzbeat/blob/master/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java#L46

📝总结

参与一个成熟社区的开源有一点一定要记住,就是要仔细阅读贡献者文档。

里面往往会写清楚如何构建代码、代码规范、提交规范等信息,这些都捋清楚后提交的 PR 才更容易被社区接受。

后面会继续更新集成测试与 e2e 测试等内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/735646.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF在.NET9中的重大更新:Windows 11 主题

WPF在.NET9中的重大更新:Windows 11 主题在2023年的2月20日,在WPF的讨论区,WPF团队对路线的优先级发起了一次讨论。对三个事项发起了投票。 第一个是Windows 11 主题第二个是更新的控件第三个是可空性注释最终Windows 11 主题得票最高,WPF团队2023-2024的工作优先级就是Win…

配置 Swagger + 注释

打开Xml文件生成,右键项目进入属性设置: 取消未进行注释而进行提示的警告: 然后Program.cs增加代码: 代码:builder.Services.AddSwaggerGen(s => {//获取xml文件名称var xmlFileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";//包含注释,…

C#winform如何在窗体实现视频播放

1.在Form窗体设计中的左侧工具箱列表中右击鼠标,单击选择项。2.在弹出的对话框中点击COM组件,选择Windows Media Player,点击确定3.接着在工具箱选择Windows Media Player控件,将控件添加到窗体中,并且添加一个OpenFileDialog控件4.接着在工具箱的对话框中将OpenFileDialog…

AI引导学习前端开发

假设你是一位前端技术开发专家,我有几个JavaScript的问题想向你咨询 我想用JavaScript来做微信小程序开发,请以表格的方式输出知识要点 请叙述JavaScript操作浏览器对象的常用接口和方法 把上述表格按照访问对象归类 将上述文字制作一个表格来呈现,要求逻辑清晰描述信息简明…

Codeforces Round 894 (Div. 3) A-E cd 894 div3

A. Gift Carpet 每道题都是伸缩代码框有ac代码请不要漏掉 --------------------------题解----------------------------- 按先行便然后列再变循环 设置jud每满足一个条件就让jud++ 只有jud==相应值的时候才让其++点击查看代码 #include<bits/stdc++.h> using namespace …

网络隔离后 用这种安全U盘可实现数据安全传输

在网络隔离的环境下,尤其是物理隔离环境下,使用安全U盘进行数据传输可以被视为一种安全的方法。不过前提是要确保以下几点: 1、来源可信性:确保U盘的来源是可信的,没有被感染或篡改过的风险。最好使用自己的U盘,或者来自于安全可靠的来源。 2、扫描病毒:在使用U盘之前,…

AI引到学习前端开发

假设你是一位前端技术开发专家,我有几个JavaScript的问题想向你咨询 我想用JavaScript来做微信小程序开发,请以表格的方式输出知识要点 请叙述JavaScript操作浏览器对象的常用接口和方法 把上述表格按照访问对象归类 将上述文字制作一个表格来呈现,要求逻辑清晰描述信息简明…

U-KAN环境搭建推理测试

​引子 U-Net的鼎鼎大名,我觉得无需我多言了。图像分割和扩散概率模型的基石。作者探索了KANs在改进视觉任务 Backbone 网络方面的未开发潜力。作者研究、修改并重新设计已建立的U-Net Pipeline ,通过在标记化的中间表示上整合专用的KAN层,称之为U-KAN。严格的医学图像分割基…

飞驰云联Ftrans数据安全摆渡系统有哪些优点?

数据安全摆渡系统通常是指一种专门设计用来在网络隔离环境下,安全传输数据的系统或服务,通常被那些需要在不同系统、网络或地理位置之间安全传输敏感数据的企业和组织广泛使用。以下是一些主要应用数据安全摆渡系统的企业类型: 金融服务机构:银行、证券公司、保险公司等需要…

关于 VuePress 的主题

什么是主题?读者对主题这个单词应该不陌生,例如大部分 APP 都支持白天主题和夜晚主题等,使用者可以很轻松的切换主题等等。VuePress 中也有类似的概念。什么是主题?读者对主题这个单词应该不陌生,例如大部分 APP 都支持白天主题和夜晚主题等,使用者可以很轻松的切换主题等…

中台框架模块开发实践-用 Admin.Core 代码生成器生成通用代码生成器的模块代码

之前分享中台 Admin.Core 的模块代码生成器,陆续也结合群友们的反馈,完善了一些功能和模板上的优化,而本篇将基于此代码生成器生成一个通用代码生成器模块的基本代码 后续再在此代码的基础上进行完善,制作一个通用的代码生成器前言之前分享中台 Admin.Core 的模块代码生成器…

Java助力加固Excel文件,保障数据安全

前言 Excel文件保护是常用的一种功能,文件保护主要有三种:添加密码,如果没有密码不允许打开文件。 添加密码,如果没有密码,不能修改文件,但可以打开,只读以及另存文件。 只读推荐,通常推荐打开Excel文件的用户使用只读模式打开,这种方式仅是一种提示,并非强行保护文件…

AI Agent实战:智能检索在Kingbase数据库管理中的优势应用

虽然在开发过程中遇到了不少技术挑战,但最终我成功构建了一个针对金仓数据库的社区检索咨询助手。这个助手不仅解决了普通web搜索无法满足特定数据库问题的需求,还提高了我解决问题的效率和质量。在未来的工作中,我将继续优化这个助手,使其更加智能和强大。前言 在信息技术…

buck电路中的元件参数计算

目前市面上的电容种类繁多,在为我们的电源电路选择输入输出电容的时候难免会挑花了眼。本文就来浅析一下如何选择输入输出电容及其相关的计算。如有问题,欢迎指正。 1. 电源电路常见电容分类 以下罗列了几种电源电路中常见的电容种类及其特点,以供参考。image724610 26.3 KB…

Go:深入解析internal/race包,数据竞争检测的

Go:深入解析internal/race包,数据竞争检测的利器 原创 王义杰 AI学者王义杰 2024-05-17 21:14 广东 1人听过在 Go 语言中,internal/race 包是用于支持数据竞争检测的内部包。数据竞争(data race)是并发编程中常见且棘手的问题,通常发生在多个 goroutine 并发访问共享变量…

Gaming Dongle Feature Application Note

References:Gaming Dongle Feature Application Notedongle发送给headset的spp指令格式(PS:这部分指令的的接收可以在headset的app_dongle_spp_cback函数看到,但在dongle部分的发送指令源码似乎在sdk中看不到Σ(っ Д ;)っ) 功能实现函数 headset部分 // headset和dongle连接…

Notepad++无法设置中文简体

1、菜单栏点击“Settings”,在菜单中找到“Preferences”,然后点击。点击General选项,再在localization(界面语言) 选择中文简体。到这我们就可以将中文设置出来了。setting》》Preferences》》General》》localization》》选择中文简体 2、异常设置后无效。在Notepad++软件…

乌班图Ubuntu 24.04 SSH Server 修改默认端口重启无效

试用最新的乌班图版本,常规修改ssh端口,修改完毕后重启sshd提示没有找到service,然后尝试去掉d重启ssh后查看状态,端口仍然是默认的22,各种尝试都试了不行,重启服务器后倒是端口修改成功了,心想着不能每台机器都重启吧。百思不得其解后查看官网相关(机翻)意思就是22.1…

乌班图Ubuntu 24.04初始化MySQL报错error while loading shared libraries: libaio.so.1

由于乌班图24.04 LTS已经发布了,因此准备新业务逐步往这上面迁移,毕竟支持有效期比22.04更长 准备在24.04上进行MySQL的初始化,因为习惯自定义安装存储目录,所以使用mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz这个最新的二进制版本。按照22.04版本整理的安装笔记进行操作…