从周五补丁破解到发布:对创建和发布开源项目的思考
这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。
这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些想法,我希望能够激励您做自己的项目
- 反思(此)
- 作为 Java 开发人员学习 Go 语言 (TODO)
- 开源健康和社区文件 (TODO)
- 开源安全 (TODO)
需求
这一切都始于几年前。我时不时地需要一些似乎总是涉及到由我或其他人重新创建相同的旧 Bash 脚本的东西。
总体要求很简单,因为它们通常都很高。
我们开发人员主要做的事情实际上只是将信息从 A 点转移到 B 点,对吧?
这里的目标是在 CLI 应用程序中将一堆 Git 存储库镜像到另一个 Git 提供程序、磁盘、存档格式。
我私下和工作中都需要这个。我见过人们很挣扎,投入大量时间手动完成这些事情,这让我很困扰。
然而,它似乎始终是一个简单的 Bash 脚本。很快就完成了,但一旦需要添加任何额外的东西 - 特殊情况、错误处理、模块化、打包等 - Bash 脚本无法支持更大的工具,正如我们大多数人所同意的。
所以我决定为其创建一个完整的 CLI 应用程序。
需要做出的预先决定
这样的工具已经存在吗?
首先要做的就是不要重新发明轮子。
有一些开源工具可以解决这个问题。至少有一个用 Go 编写的脚本,一些 Bash 脚本,如果算上 Gitea 中的导入函数的话。
我尝试了它们,但找不到任何能完全按照我想要的方式工作的。由于我对这个项目有其他想法,所以我决定不深入研究
开始对现有项目应用补丁。
也存在一些商业工具,但我觉得这个小工具也应该以开源形式存在。
结论:这个 CLI 工具在这个世界上有一席之地。
在工作黑客日或私人空闲时间进行黑客攻击?
我们在冲刺结束时和其他场合都有黑客时间。一种方法是在这些情况下随着时间的推移对其进行破解,将其制作成有用的东西。
我很快决定完全用我的私人业余时间来做这件事,原因如下:
- 工作中的黑客机会应该用于短期的学习和创造力,而不是长期雕刻一个完整的项目。
- 该解决方案不适合核心组织的业务 - 如果是这样,它总是很奇怪。
- 将它与工作联系起来会让我感觉更多的工作 - 我这样做是为了乐趣和学习 Go 等 - 这会给我带来压力。
- 在工作日做这件事会花费很长时间。几个小时,持续数周。
结论:我应该在闲暇时为了好玩而做。
技术栈的选择
这些年来我的大部分时间都花在了 Java/Kotlin 世界中,也参与了一些 JS/TS、Python/Ruby 项目,并且像每个高级开发人员一样,有时也会涉足其他领域。
但很长一段时间以来,我一直想真正学习 Go 和/或 Rust。所以这将是一个获得学习新语言动力的机会
我选择 Go 的原因是开源 DevOps 世界中相当多的 CLI 应用程序都是用 Go 编写的,而且我希望能够不时向第三方项目提交补丁。此外,用 Go 编写意味着一个二进制文件具有多个目标架构。
我可以用 Java 来完成此操作,例如使用 Pico CLI 和 GraalVM,自从之前的尝试以来,我对其中的印象很好,但我决定我真的想学习 Go。
结论:我应该用 Go 来做并从中学习。
其他学习目标
有了这个,我还想更深入地研究交付包装精美的开源项目的主题,遵循大多数安全实践 - 记分卡、SLSA、
并使用 GoRelease 等工具来创建各种类型的构建。
结论:抓住机会学习和深入研究您选择的主题。
保持范围
由于我计划进行很多实验,而且我对 Go 完全陌生,所以我知道我会做很多非结构化工作。
在这里设置范围很重要 - 什么时候对于 alpha 版本来说足够好?
我很早就决定了它应该具有什么功能,尽管坐下来进一步完善和扩展它是很诱人的,但这很好。
我可以坐这个很久。
结论:当你同样感到尴尬和自豪时,将项目发布为 alpha。
估计——有多难?
学习一门新语言只是学习该语言本身的一小部分,但更多的是学习它的生态系统及其习语。
使用了哪些库,如何使用它们,这样做或那样做的惯用方法是什么?
在这个项目中我必须花费大量的时间来学习和研究,也许50%的时间我都会
我只用我熟悉的语言和生态系统进行编码。
结论:在学习新的核心堆栈并进行实验时,将您的时间估计乘以三。语言语法将是小事。
创作过程
初始提交
基本实现在一天内完成 - 它没有构建、错误处理、文档、边缘情况、可维护性等。
这就是大多数周五黑客行为的结局,而且大多数都不会再进一步。
但正如所有高级开发人员所知,让某些东西发挥作用距离发布产品还有很长的路要走。
很快就完成了,嗯?不是真的。
寻找时间
有时真的很难找到时间来完成这个项目,尤其是因为我在春天工作得筋疲力尽。
您并不是每天晚上都想花 2 小时阅读一本有关特定内容的书,或者学习一项新技术。
或者花时间编写文档。我有孩子和房子,我不能让私人项目比其他爱好消耗更多的精力。
但总要付出一些代价 - 我最终观看的系列剧减少了,并且在此期间几乎不存在任何游戏。
话虽如此,虽然我希望我能在这个项目上花更多的时间,但它几乎总是能激励我——我有几个晚上睡得很少,编码或学习,
因为我很兴奋能走得更远。另外,当某件事有趣时,它就是有趣的,无论是举重、写书、开发等等。
我忘记的事
长期以来我已经习惯了团队合作。对于一个单独的项目,你必须管理更多的帽子,并且在每个部分都非常出色,但通常不是技术性的。
我花了很多时间来研究良好的 CLI 设计和惯用的选择。另一个领域是发布过程和为不同平台构建二进制文件。
遵循 SLSA 和其他开源标准也需要时间。我们想要良好的测试覆盖率,对吧?
在团队中工作,希望其他人能做你想要的标志,需要编写的文档。
独自工作,只有你一个人,否则就不会发生。
编写代码甚至还不到交付项目的 50%。剩下的就是了。
冒充者综合症来袭
冒充者综合症在我们以知识为基础的开发者世界中很常见。每个人都有不同的技能,在任何特定的时间,总会有人比你懂得更多。
在一个团队中,你有人可以讨论事情。
一个人,没那么多。
但是,这一切都在于接受人们有时会在代码中做一些愚蠢的事情。
而且,开源并不意味着完美。这是关于学习、解决和发布可能对其他人有用的东西。
磨砺
好吧,我能说什么——该做的就做完了。
有几个深夜的调试、重构,但也有无数心流和多巴胺的时刻。
对我来说,当我觉得项目中的整体架构不会发生根本性的变化时,发布时间就到了——我已经确定了接口,并且觉得它是可扩展的。
代码库没问题。
大多数基本功能都已具备,虽然一切都有待改进,但它仍然是一个基础。
后果和经验教训
尽早设定范围:决定在哪里停止。尽早设置项目结构、文档、版本、管道和社区指南。未来的你会感谢过去的你。
不要有压力,享受学习过程:完成了就完成了。
坚持不懈:开源是一场马拉松,而不是短跑。不要烧坏。这是一种爱好,而不是你的生活。不过一定要坚持。每天做一件小事。
学习,学习,学习:将一切视为学习和改进的机会,而不是问题。
编码是最简单的部分:主要代码会花费你最少的时间;其他一切,例如文档、测试等,都是花费时间的地方。
做额外的事情:它们和编码一样有趣。是的,即使是文档也可以节省您解释和重新解释的时间。如果让你感到无聊,那就让它变得有趣。文档即代码、vim-pong 等
休息一下:倦怠是真实的。当你需要的时候退后一步。就像其他创造性学习过程一样,分批进行。
使用系统:尽早在实践和现实世界中使用你自己的狗粮。更好的是,找到一个人/社区来提供反馈。
享受旅程:创造真是太棒了。
完成它:这个世界上有无数个半成品的项目。完成它。
使用人工智能作为帮助:我通过委派一些额外的工作来节省时间,例如要求代码改进、代码审查、文档结构、总结等。但是,不要永远盲目地相信它。回顾并批评答案。
好了,黑客快乐,现在去想想你下一步想要做什么!!
链接
项目:Git Provider Sync
以上是从周五黑客到发布:对创建和发布开源项目的思考的详细内容。更多信息请关注PHP中文网其他相关文章!

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

C 更适合需要直接控制硬件资源和高性能优化的场景,而Golang更适合需要快速开发和高并发处理的场景。1.C 的优势在于其接近硬件的特性和高度的优化能力,适合游戏开发等高性能需求。2.Golang的优势在于其简洁的语法和天然的并发支持,适合高并发服务开发。

Golang在实际应用中表现出色,以简洁、高效和并发性着称。 1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go语言的核心特性包括垃圾回收、静态链接和并发支持。1.Go语言的并发模型通过goroutine和channel实现高效并发编程。2.接口和多态性通过实现接口方法,使得不同类型可以统一处理。3.基本用法展示了函数定义和调用的高效性。4.高级用法中,切片提供了动态调整大小的强大功能。5.常见错误如竞态条件可以通过gotest-race检测并解决。6.性能优化通过sync.Pool重用对象,减少垃圾回收压力。

Go语言在构建高效且可扩展的系统中表现出色,其优势包括:1.高性能:编译成机器码,运行速度快;2.并发编程:通过goroutines和channels简化多任务处理;3.简洁性:语法简洁,降低学习和维护成本;4.跨平台:支持跨平台编译,方便部署。

关于SQL查询结果排序的疑惑学习SQL的过程中,常常会遇到一些令人困惑的问题。最近,笔者在阅读《MICK-SQL基础�...

golang ...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中