本文由SpiderFoot开源项目的作者撰写,分享了他从这个项目中获得的10个经验。InfoQ中文站翻译分享。
在过去的十年里,我开发了一个名为SpiderFoot的开源智能(OSINT)工具。这是一个OSINT工具,可以自动收集和分析攻击面管理和威胁信息。它是用Python写的,适用于Linux,*BSD和Windows系统。在功能上,我们可以通过SpiderFoot获得相关目标的各种信息,比如网站子域、邮箱地址、web服务器版本等等。此外,它还为用户提供了一个易于使用的GUI界面。
在这十年里,蜘蛛脚在我的生活中占据了很大的比重。我几乎每天早上和晚上都工作,我经常和我的妻子、孩子和朋友讨论蜘蛛脚。它给我带来了很多欢乐,但有时也会带来挫败感。
所以,我觉得是时候回去反思总结一下自己这些年所学所悟了。之所以这么做,一方面是出于个人兴趣,另一方面也是希望对自己开源项目中有类似经历的人有所帮助。
迄今为止的旅程2005年,我写了一个SpiderFoot的初步实现,作为学习C#的一种方法。在我发布第一个发行版之后,它在SourceForge的“0.1b版本”里呆了7年,直到2011年底,我开始用Python重写SpiderFoot。所以,如果考虑到这个时期,蜘蛛脚(至少是一个名字和概念)已经有近20年的历史了。
下面是C#版本的样子:
以下是用Python编写的基于web的CLI工具SpiderFoot的最新版本:
那么,为什么第一次发布的版本和Python重写的版本会有7年的差距呢?
原因是我的初衷是想学习用C#开发一个实用的工具并普及,我做到了。但当时我并没有什么长远的规划或者扩张计划,只是“完成了”。这在当时我是可以理解的。那时候我在工作中做了很多有趣的工程项目,所以我觉得没有必要在业余时间开发什么东西。
那些年我没有意识到的是,这个小小的一次性工具其实很受欢迎。SpiderFoot涉足书籍和培训课程,每周下载次数在500次左右。虽然不多,但也不是无足轻重——虽然这个工具的一些功能由于数据源的消失而不再起作用。
在正式工作中经历了几年不同的管理角色,终于回忆起当时作为蜘蛛脚的感觉,甚至觉得少了点什么。现在回想起来,我错过了创造性学习的机会,直到我所有的工作都被会议、PPT和电子邮件吞噬。
这让我思考我可以在业余时间做些什么。我知道我想学习Python,从事数据收集和分析,希望在安全方面有所建树,因为我在这个领域工作了20多年。
这样看来,蜘蛛脚还是符合以上所有要求的。于是,2011年底,我另起炉灶,学习了很多Python技术,然后继续向GitHub仓库推送一个又一个的投稿。直到2013年5月,我发布了蜘蛛脚2.0版本。
是的,我花了大约一年的时间提交它,直到我觉得足够舒服,可以发布一个新版本,然后将它公之于众。这是我学到的一个经验。
在第一次提交后的十年里,我一直在摸索,逐渐熟悉Python,将SpiderFoot从几个模块(用SpiderFoot的行话来说,是指用于收集或分析OSINT数据的组件)发展到200多个,吸收了很多社区(尤其是_bcoles)的重大贡献,最终实现了基于SpiderFoot的成功企业的建立。
下面是我积累的10条经验,希望对你有帮助。
经验一:编写开源软件可以在你无法预测的情况下获得巨大的回报编写开源软件不仅仅是把代码放在那里让别人使用。当然,本质上,这是背后的过程。用这个软件的人免费得到一些东西(希望有用)。以下是我从蜘蛛脚项目中获得的奖励清单:
此外,蜘蛛脚还带来一些个人或间接的好处:让自己更加自律,提高时间管理,找到增强精力和健康的方法,等等。
经验二:要长期坚持下去一个项目之所以成功,是因为它经得起时间的考验,优于其他项目。如果你不断尝试改进项目,那么它就会得到关注和利用,而不会像那些只是昙花一现的应用一样被淘汰。
没有人会要求你每天、每周或者每月提交,但是你要尽量保证当你的依赖发生变化时,你的软件仍然可以正常工作。还要注意报道的问题。如果这些问题涉及面广,就需要引起重视。
经验三:交付,并定期交付这十年来我一直有很多遗憾。例如,我应该从一开始就在单元测试、代码文档和代码质量方面投入更多的精力。但我也知道,如果我在将SpiderFoot推向公众之前花大量时间研究和实现它,我会把它变成一个好产品。然后,成千上万的人不会使用蜘蛛脚,他们不会得到他们所拥有的价值。因为在这期间,我可能会因为情绪低落或者心烦意乱而彻底放弃分娩。
记住第二课,不要着急,你会有更多的时间去完善它。只要你每周留出几天时间,就能静下心来,造出很棒的东西,保证你的产品能正常运行。你必须不时做出选择,以确保交付,而不是陷入追求完美的境地。
经验四:制定广泛的、开放的目标我的目标是掌握Python,这只是我在SpiderFoot工作的动机之一。我对蜘蛛脚的长远目标是:
请注意,这些目标不是一成不变的,而是广泛而开放的。这些目标我永远也完成不了,因为每一个都没有结束状态,每年都可以延长。
例如,我可能会在今年用React重写前端,或者实现一个新的测试框架来发展我的技能,然后在明年迁移到一个不同的后端数据库。此外,也许我希望蜘蛛脚HX的MTT(每月经常性收入)翻一番,或在今年实现其他类型的业务突破。
这些是指导原则,不是不可改变的目标,所以我会坚持下去,激励我日复一日地在蜘蛛足上努力。
经验五:只要你足够关心,就会挤出时间当人们知道我有一个妻子、三个孩子、一份全职工作,而且我还经营蜘蛛脚HX作为副业时,第一个问题总是“你是如何挤出时间的?”当然,我更愿意认为我有某种超级集中的能力(但我没有),或者我是一个不可思议的工程师(但我真的没有),但我想我可以总结成以下几个关键问题:
换句话说,人们真正关心的是你的软件是否能做到它所说的,并且做得非常好。
然而现实是,没有人(或者少数人)会因为你的代码缺乏单元测试或者代码混乱而回避你的项目。人们关心的是这些事情能不能正常工作,能不能顺利进行,有没有记录在案,能不能长期坚持工作(回忆经验2和经验3)。如何做到这一点,真的取决于你。
所以,不用担心代码质量,测试覆盖率等等。反正很多开源项目的开发者都不是专业的软件工程师,很多人因为害怕被人诟病而不敢发布自己认为可能是“坏代码”的东西,真的很可惜。代码可以重构!可以添加测试!如果您愿意,甚至可以用完全不同的编程语言重写代码。
你只需要想出一些有用的东西。当别人指出你的错误时,你要虚心接受,并从中吸取教训。有些蜘蛛脚代码写得很烂,但是在过去的十年里,我想我只看到过两个关于这个烂代码的评论。谁在乎呢。
请记住:这是你的项目,你有时间把它做得更好(见经验二)。
经验七:营销没有什么好丢人的在某个时候,当你的软件达到了预期的效果,在一个有意义的时期表现良好,别人就会开始为你推广。说了这么多,你还是需要在前期投入一些营销,早期的反馈对你很有帮助。
你需要了解你的用户和他们经常去的地方(Twitter、LinkedIn、抖音),并在那里与他们取得联系。联系你所在领域有影响力的人(比如时事通讯和博客作者),他们会发现你的软件非常有用,让他们尝试一下——你会惊讶地发现,他们能如此容易地接受开源开发者,因为他们欣赏你花这么多时间帮助别人。
专业建议:除了发布新闻,你还应该为你的项目准备一个漂亮的README.md,说明它的作用和工作方法,指出相关信息,甚至建立一个独立的网站。
经验八:和雇主说清楚与保护您在工作时间之外所做工作的知识产权相关的法律法规在不同的国家和雇主那里会有所不同。现在大部分技术和技术友好型的公司应该都有一个审批副业项目的流程。我不是律师,但是你要确定你之前做的工作,你入职后做的贡献都包括在内。
在你开始为雇主工作之前,在你开始项目之前,解决知识产权问题要容易得多。为了保证在可预见的未来能够得到保障,我甚至公布了自己终于想干却还不存在的项目。
如果你加入的公司在工作时间对你的开源项目有敌意,那么你应该问问自己这样的职位是否值得考虑。在你签合同之前,这是一个比较容易做出的决定。
经验九:培养社区这大概是我积累的最重要的经验,因为我意识到了它的重要性,但是真的需要很多时间。实际上,我确实从一开始就创建了文档,但我没有做任何其他事情。我以为这就够了。今天,情况可能并非如此。
我这里说的“培训”是为你的项目的用户创建论坛和资源,让他们有更深入的了解,接触他人,在需要的时候得到/给予帮助。
以下是一些例子:
也许这应该是第一次体验,因为它是一切的基础,但我把它放在最后,因为我希望它是你从这篇文章中得到的最新观点。
当你开始任何一个个人软件开发项目时,你需要立即放弃这个想法,即它总有一天会完成。即使你认为它的功能在某个时候已经完成了,随着依赖关系的变化或者你想重构某个东西,用户也会遇到一些问题,提出新的功能需求,甚至是“竞争”项目...会给你带来很大的压力。
一旦我接受了这个旅程,它将永远不会结束。除非我主动放弃,否则我的很多挫败感和紧迫感都会烟消云散。现在,我很少尝试在半夜疯狂地推出新功能,或者因为不断增加的开放问题或请求而感到压力,或者因为测试覆盖率没有提高而感到难过。
没有规定你必须结合每一个拉取请求,回答每一个问题,或者真的做任何你不想做的事情,不管你的理由是什么。强迫自己去做,只会让自己失去激情,有可能彻底毁掉这个项目,这绝对是个大问题!
因此,要经常问自己:你是出于自己的意愿去做手头的工作,还是你认为你必须去做?后一种情况,你可以先放一段时间,再去做别的事情,或者尝试调整任务的框架,否则就把它留在任务的积压里,一周内完成,不会有负罪感。
当然,除了上面提到的10条经验,这几年我还学习了很多Python等技能。当我想开始下一个项目时,我会用这些学到的经验,我希望你也能这样做。
作者简介:
《蜘蛛脚》(www.spiderfoot.net)的作者Steve Micallef是一个开源的OSINT自动化平台。
原文链接:
https://medium . com/@ mical lst/lessons-learn-from-my-10-a source-project-4a 4c 8 C2 B4 f 64