image

我的第一次开源贡献:参与jellyfin-vue项目的心得与体会

其实一直以来我都有想做开源的打算,做一个开源的笔记软件,做一个开源的音乐播放器,开源的bt下载器,但那是我第一次参与开源还是在jellyfin-vue​ 项目中,我觉得这才算是真正的开源,参与到一个大型的开源项目中虽然只提交一个 PR,不对,是两个,第一个是提交了一个bug 第二个是修复了它。

jellyfin-vue​ 项目目前应该是在 vue2 转向 vue3 的过程中产生了一系列的问题,所以需要有人修复它,但是他的代码贡献好像不是很多,因为我后续可能回使用这个项目,组建了一个 NAS 计划构建一个个人影视中心。

所以从我开始购入NAS的时候就已经计划向这个开源项目贡献代码,虽然公司项目很忙一直加班,最近年前闲下来了,时间不是很紧张,所以我开始第一个贡献。

我是看码农高天大佬的B站视频,看到了他逐渐投入开源项目并且成为 python 的核心开发者,虽然他是python的开发者,而我主要还是前端开发,但是我认为开源没有边界,我可以从他的经验中学习到一些开源经验,他是从 python 项目中做“修修补补”的贡献,逐渐成为了核心开发者,我是不是也可以这样,然后我就企图在jellyfin-vue​项目中找可以修修补补的bug,或者优化,每周提交几次,甚至之后每天提交几次,这样既可以提高自己的编码水平,又可以提高自己的价值,在面试中以及等等内容中增加自己的优势。当然本身参与开源也是一件很值得骄傲的事件,在第一次提交代码的时候通过审核的时候,很爽,真的很爽。

虽然在后续提交一个新的 PR 修复了自己的问题,但是还是希望在下次提交的时候不要出现问题,尤其是简单的问题,在开源项目中测试的角色很少,至少我参与的这个项目,可能项目负责人也没有时间测试,导致我没有仔细测试过的问题,被他同意到了master​ 分支,但是这本身是我自己的开发问题,就像这样,我可以在开源项目中提升自己,找到自己的问题,也可以学到一些内容,充实自己的生活,不要沉迷与游戏,我想我应该沉迷于开源,而不是游戏,虽然现在十分喜欢游戏。

我希望在2025年的 github 提交记录也变成一片绿,也希望更多的开发者参与到开源项目中。

参考文献

450天成为Python核心开发者-码农高天

本文介绍了在 Ubuntu 系统上安装 Rust 的步骤。首先,需要设置 Rust 的镜像源,以便于更快下载所需文件。通过配置环境变量 `RUSTUP_DIST_SERVER` 和 `RUSTUP_UPDATE_ROOT`,将下载地址指向国内的代理服务器。接着,通过运行一个 cURL 命令来执行 Rust 的安装脚本。最后,文章还提供了可选步骤,指导用户如何配置 crates.io 的镜像,这样可以在使用 Rust 包管理时更加高效,确保依赖库和索引的快速访问。
Read more »

本文介绍了如何在Ubuntu系统中将中文系统目录修改为英文目录。主要步骤包括切换系统语言到英文、启动配置界面以更新目录设置、手动修改用户目录配置文件,以及在必要时转移现有的目录和内容。最后,重启系统完成更改,确保目录名称已成功转换为英文。
Read more »

本文讨论了在权限判断逻辑中,如何优化判断两个数组是否存在交集的方法。首先介绍了双 For 循环的硬计算方法,时间复杂度为 O(n * m),在性能上较低效。接着,通过使用 `some` 和 `includes` 方法优化了代码,尽管时间复杂度未变,但可读性更好。进一步采用 `Set.has()` 替代 `includes` 提高了效率,因其时间复杂度更低。 此外,介绍了使用双指针算法进行极端优化的思路,但需要对数组进行排序,虽然可能在性能上更优,但开发时间较长。在实际开发时,应根据项目需求平衡开发时间与性能优化,选择合适的方法进行实现。最后,文章提及了参考文献,解释了 `Set.has()` 比 `Array.includes()` 更快的原因。
Read more »

本文探讨了数组的不同迭代方法及其在处理稀疏数组时的表现。稀疏数组中存在空槽,而不同的迭代方法对待这些空槽的方式各异。根据 MDN 的说明,旧的迭代方法如 `forEach` 不会访问空槽,而其他方法(如 `concat`、`copyWithin` 等)在复制时会保留这些空槽,因此最终数组仍为稀疏状态。相对地,新的迭代方法则将空槽视为包含 `undefined`。文章列举了处理空槽和不对空槽进行特殊处理的常用数组方法,并总结了各自的特性,强调了在使用迭代方法时需要了解其对稀疏数组的行为,以便做出合适的选择。
Read more »

这篇文章深入探讨了CSS选择器的优先级计算规则。作者首先介绍了W3C对CSS选择器特异性的定义,明确选择器可分为三个等级:A(ID选择器)、B(类选择器、属性选择器和伪类)和C(类型选择器和伪元素)。重点在于学习如何精确计算优先级。重复使用简单选择器会增加优先级,并且一些特殊选择器如`:is()`、`:not()`和`:where()`具有独特的优先级计算规则。 文章指出,不同选择器的优先级不是简单的求和,而是独立计算,强调权值不能进位。对于 `!important` 的使用则被建议要谨慎,优先考虑样式规则的优先级解决方案。在最后,文章列出了一些CSS优先规则,包括近祖先样式和直接样式的优先级,以及总结了选择器的优先级顺序。整体上,这篇文章对CSS优先级的理解及应用提供了全面而系统的指导。
Read more »

本文探讨了 JavaScript 中对象(Object)的顺序问题。虽然 ES3 标准强调对象是无序的,但自 ES6 以来,逐渐引入了属性顺序的概念。在不同浏览器中,对于 `for...in` 的处理和属性顺序的解析存在差异。一些浏览器遵循 ECMAScript 第五版规范,而另一些则遵循第三版规范,因此对于对象的排序并不统一。为了避免因不同浏览器导致的排序不一致,建议将对象转换为数组形式(如 `[{ key, value }]`)进行处理,尽管在某些情况下,对象的键值可能会按照特定规则排列。文章最后提供了一些参考文献,以便进一步了解 JavaScript 对象属性的顺序行为。
Read more »
0%