三名学生通过 OpenMRS 和 Sahana Eden 跃入开源领域

目前还没有读者喜欢这个。
Open education and MIT OpenCourseWare

Opensource.com

Nicholas Folk 和 Scott Buchanan 共同撰写了这篇文章。

我们是 不列颠哥伦比亚大学 (UBC) 计算机科学学士学位 二学位课程的三名学生。由于我们每个人都有合作教育经验,随着我们临近毕业,我们的技术能力和贡献日益成为关注的焦点。我们在 UBC 过去的几年里产出了一些很棒的技术内容,但我们都发现我们的简历中明显缺少一个组成部分:开源贡献。虽然原因各不相同,但都源于这样一个事实,即做出贡献所涉及的一系列技能远远超出了课堂上甚至实习期间学到的任何技能。它要求一个人对外人要外向,要积极主动地寻找要解决的问题,并且要有有效的书面沟通能力。

虽然这些技能对我们来说并非完全陌生,但我们知道我们仍在发展这些技能。因此,我们对投身开源项目犹豫不决。直到我们发现一门旨在让学生参与开源开发的定向研究课程,我们才受到激励跃入其中。

具体来说,这门课程围绕着为一个“人道主义自由开源软件”(HFOSS) 项目做贡献,并与使其运作的人员和流程互动而构建。下面简要介绍一下我们参与的两个项目,以及我们为捕捉作为首次贡献者对 HFOSS 开发的反思而整理的一些问答。我们的目的是为可能对投身开源感到紧张的初出茅庐的开发者、可能没有任何开源开发经验的更有经验的开发者,以及可能在开源项目上工作并想知道新开发者加入各自团队时的体验的经验丰富的开发者提供见解。

项目 1:Sahana Eden

Sahana Eden 是一个开源人道主义平台,可用于为灾害管理、发展和环境管理部门提供解决方案。它是 Sahana 软件基金会 管理的项目之一,并在过去 几年 的多次救灾部署中发挥了关键作用。Scott 和 Matt 是这个项目的一部分。

项目 2:OpenMRS

OpenMRS 是一个医疗记录数据库,旨在为发展中国家的医护人员创建更便捷的患者数据访问途径。该项目始于 2004 年,此后发展壮大,在全球范围内得到应用,展示了其在对抗艾滋病毒/艾滋病和耐药性结核病等流行病方面的必要性,以及其在基本初级保健和肿瘤学方面的实用性。OpenMRS 项目的主要目标是创建一个易于使用且可扩展的医疗记录系统,用户可以对其进行修改以适应自己的需求。目前,发展中国家的许多医疗记录仍然以物理文件或存储在本地驱动器上的电子表格的形式保存。OpenMRS 致力于在远程服务器上创建一个统一的数据库,从而在更大的地理区域内实现更快、更可靠的患者信息访问。Nicholas 是这个项目的一部分。

初次接触

Scott Buchanan (SB)与 Sahana Eden 社区的初次接触过程很简单。他们有一个活跃的 邮件列表 和一个 IRC 频道,以方便社区内的沟通。通过邮件列表,Matt 和我介绍了我们自己以及我们与社区合作的目标。我们收到了一些积极的回复,参与其中似乎进展顺利。

Nicholas Folk (NF):OpenMRS 提供了多种工具来促进与社区的沟通。与 Sahana Eden 社区一样,OpenMRS 也有一个邮件列表和一个 IRC 频道,但也有一个 讨论论坛,鼓励新的开发者进行自我介绍并提出问题。还有一系列现场讨论,开发者可以通过在线视频会议加入,旨在讨论新想法并鼓励新手开发者快速了解项目的各个方面。由于时区差异,我很难参加这些讨论,但幸运的是,组织者录制了许多截屏视频并上传到他们的 YouTube 频道

虽然我在讨论论坛上向社区做了自我介绍,但当我直接给一些首席开发者发消息时,我得到了更多的帮助和指导。他们向我指出了新的开发者指南以及我可能感兴趣贡献的特定子项目。总的来说,我对每个人都愿意向新人提供的热情态度和帮助印象深刻。

搭建框架

Matthew MacLennan (MM):这个过程很简单。Sahana Eden 网站有一个 文档完善的部分,用于设置工作环境,包括在您的机器上配置库、设置版本控制以及启动并运行测试实例的说明。方便的是,有一个针对我当前操作系统 GNU/Linux 的特定指南。我无法评论为其他操作系统设置开发环境会是怎样的。对我来说,一个突出的资源是大量可用于预填充本地机器上的测试实例的测试数据。通过提供这些数据,可以很容易地了解 Eden 的不同部署的外观和工作方式。

SB:在课程开始之前,我担心的一个问题可能是开发环境设置的难度以及缺乏任何面对面的帮助。我有一些实习经历,在那里我花了数周时间才正确安装我的环境并获得所有必要的权限。幸运的是,Sahana Eden 的设置非常非常简单。我运行的是 OSX,所以我必须通过虚拟机完成所有操作,但这很直接并且文档完善。如果我没记错的话,我在几个小时内就完成了所有设置并运行了一个填充数据库。

NF:由于 OpenMRS Wiki 上的大量文档,以及他们全面的 新开发者指南,设置开发框架大部分都很简单。我确实遇到了一些小挫折,例如安装错误和版本兼容性问题,但遇到这些障碍的一个积极方面是我从社区收到的热情帮助。有一天下午,一位首席开发者花了他几个小时的时间(通过 IRC 频道)帮助我解决数据库安装错误。该错误是可重现且未记录的,因此我(一旦我自己完成了)在讨论论坛中写了关于问题以及重现和解决该问题的具体步骤。我收到了其他开发者的热情反馈,并启发了另一位首席开发者更新了设置 Wiki 的很大一部分。每个人都愿意花时间帮助他们甚至从未见过面的人,这真地展示了一种积极的氛围,我感到很受鼓舞想要加入。

由于 OpenMRS 支持数十个开源模块,因此兼容性成为大规模问题也就不足为奇了。高级开发者对设置过程进行更严格(可能每季度一次)的审查将对社区有极大的帮助。除此之外,但是,新的开发者不应该在设置过程中遇到太多麻烦。

首次贡献

MM:我最初的参与包括遵循 Sahana Eden 项目为新贡献者提供的 说明。它建议在错误报告数据库中查找小错误,或在代码库中查找小功能的待办事项。在错误报告数据库中,大多数错误都是几年前的,没有太多选项可供选择。我决定探索一些最新的报告错误。不幸的是,大多数错误都无法重现。这可能是因为代码库自错误报告编写以来发生了更改,或者错误报告者没有启动并运行项目的正确实例。我确保在我无法重现的错误上发表评论,以帮助其他人避免将时间浪费在它们身上。

最终,我找到了一个可以重现的错误。我想出了各种修复选项,并将它们传达给邮件列表,以了解社区认为哪个最合适。在收到一些反馈后,我修复了这个错误。但在与一位高级社区成员进一步讨论后,确定我正在修复一个错误,而我不知道的是,这个错误目前已被弃用。因此,我对该错误报告的修复没有合并到代码库中,但我仍然觉得这是一个很好的入门学习经验。

NF:OpenMRS 在其定制的 JIRA 问题跟踪器 的首页上提供了一系列入门级工单,旨在让新手更轻松地熟悉项目工作流程。这使得很容易找到我感觉自己有足够知识来执行任务的问题,并且作为奖励,可以更熟悉代码库。我选择了一项任务,该任务需要为前端系统管理管理工具添加删除功能。添加功能很简单,但由于我不熟悉 Spring 和 Hibernate 等特定库和框架,单元测试有点更具挑战性。

入门级工单使入职过程变得轻松而引人入胜。

重点和功能

MM:在我的初步经验之后,我想找到 Eden 项目中社区成员更关注的部分。我希望如果我找到其他人也在从事的项目,它可能会是一个更相关的贡献功能。在阅读了几天邮件列表和开发门户网站后,我发现了一个移动应用程序 EdenMobile,该应用程序正在积极开发中。另一位开发者启动了这个项目,希望创建一个跨平台的移动应用程序。该开发者正在使用我在学校学到的可识别的设计原则来推进开发,我觉得这将提供更丰富的开发过程。此外,移动应用程序还是一个相对独立的代码库,这意味着不必掌握 Eden 这个庞大的 Web 框架。

Scott 和我决定我们将着手解决 EdenMobile 的开发目标之一:SMS 通信。用例很简单:个人没有数据/WiFi 连接,因此,使用一系列 SMS 消息将数据更新发送到中央服务器。不幸的是,最初的开发者在我们课程需要取得进展的时候变得不可用。因此,Scott 和我不太确定负责人希望我们如何设计 SMS 通信功能并将其整合到主移动应用程序中。因此,Scott 和我决定创建一个库,以便原始开发者稍后可以集成。

SB:Matt 和我讨论了很多关于我们将参与 Eden 的哪个方面。正如 Matt 提到的,我们最大的担忧是 Eden 的规模以及我们为了开始思考如何做出贡献而需要学习的知识量。最终,我们希望从事一些具有非常明确的退出和入口点并且范围有限的项目,以便我们可以在几乎无需预热时间的情况下参与其中。Matt 最终找到了 Eden Mobile 存储库,这似乎非常合适。有文档记录的 待办事项,我们倾向于基于网络的 SMS 任务,因为我们最近刚刚完成了一些围绕分布式系统主题的课程。就难度级别和学习机会而言,这最终是一个绝佳的选择,因为我们能够将我们在课堂上学到的许多知识应用到现实场景中。

NF:我谨慎地预料到项目会失败、响应时间延迟以及其他障碍会阻止我对任何特定项目做出实质性贡献。我决定尝试从事三个不同的项目是明智之举,以防其中一个项目的学习曲线过于陡峭,或者(在一种情况下)如果一个正在萌芽的模块从未启动。此外,虽然期望团队成员花一两天时间回复问题是合理的,但我的课程的时间限制意味着我最好在等待此类回复时尝试进行多任务处理。

与大多数开源项目一样,几乎所有的 OpenMRS 模块都在 GitHub 上,我可以单独查看每个模块。我的选择基于诸如模块的活跃程度、开发者的沟通程度(彼此之间以及与模块的新贡献者之间),以及我对从事该模块的兴趣程度等标准。GitHub 使第一个问题很容易回答。GitHub 不仅明确显示了每个项目的提交历史记录,还提供了有用的图表和图表,用于比较不同模块的贡献。对于第二个问题,我使用了 JIRA 问题评论部分来衡量开发者对彼此沟通的关注程度,以及他们对我发送的电子邮件和消息的回复时间。前两个标准确实将我的范围缩小到少数几个模块。我选择了图表搜索模块、一个尚未开始开发的眼科模块和参考应用程序。

我对我的多元化方法感到满意,因为眼科模块尚未获得任何进展,并且我与参考应用程序团队遇到了一些沟通不畅(我开始处理一些团队成员推荐给我的问题,但这些问题已被弃用或已修复但未标记为已修复)。幸运的是,我仍然有图表搜索模块可以依靠,该项目的首席开发者非常乐于助人、回复消息速度快,并且非常了解该模块本身。我一直在帮助他重构用户界面的一部分,并将很快为搜索功能添加扩展。

获得的技能

MM:由于在行业环境中使用了 Python 一年,因此所需的大部分 Python 开发都没有让我接触到任何新事物。Sahana Eden 使用的 web2py Web 框架不是我以前使用过的,但它与我过去使用过的其他框架没有太大的不同。在转向 EdenMobile 后,绝对有很多新的概念和技术需要学习。我被介绍了 Cordova 开发框架,它是 JavaScriptCSSHTML 的组合,用于创建移动应用程序。JavaScript API 允许开发者使用相同的代码库开发跨平台应用程序,尽管我主要关注 Android 版本。

除了基本的开发框架外,我还花了很多时间研究 SMS。Scott 和我试图开发一种协议,以促进移动设备和服务器之间的数据交换。尝试设计一种容错消息传递协议是一项有趣的挑战,我们产品的当前状态绝对需要在投入生产环境之前进行更多测试。

SB:对我来说,主要的技术收获是我参与了 Twilio。当我们开始这个项目时,我知道在某个时候我们需要将 SMS 消息转换为常规 HTTP 调用,但我完全不知道这怎么可能。最终有人将我们链接到 Twilio,我开始探索他们提供的所有服务。这听起来有点像为他们做广告,但他们的产品非常易于使用且文档完善。当我意识到使用他们的技术可能实现的一切时,它立即激发了我对未来可能承担的个人项目的一些想法。

NF:虽然我在 Java 方面有相当多的经验,但我从未将其用于 Web 应用程序开发。因此,我熟悉的一些工具是 Spring MVC 框架和 JavaServer Pages (JSP),以及用于自动化构建的 Maven。我已经通过 EGit 插件在 Eclipse 中对 Git 有些熟悉,但我以前从事的项目没有托管在 GitHub 上。我对命令行中的 Git 获得了更强的直觉,并且更好地理解了 GitHub 固有的 fork-and-pull 工作流程。

见解

MM:我从这次经历中获得的主要收获是,为开源项目做贡献比人们想象的要困难得多。这是因为与您合作的同行通常有其他优先事项或职责放在首位。这使得在尝试实施新功能时很难获得帮助和反馈,特别是如果只有一两个社区成员精通该特定主题。另一方面,我确信花大量时间从事特定项目的人在做出贡献时效率很高,因为他们对特定项目有经验。

NF:虽然我不能代表所有开源项目发言,但 OpenMRS 拥有一个非常支持性的社区,欢迎并鼓励贡献者。我很紧张地加入其他全速运行的开发者,但令我惊喜的是,我从团队那里收到了如此积极的氛围。开源开发比我最初想象的更像是一种承诺。当我最初了解开源软件的概念时,我的印象是 fork 一个项目并做出贡献可以在一天甚至几个小时内完成。我现在知道,对于规模庞大的项目来说,这样做是不现实的。设置可能需要很长时间,并且很难找到一个开发者对完整的技术堆栈都有经验的项目,因此可能会有一个学习曲线。我今年夏天的经历让我对项目规划和时间管理有了更好的直觉。不仅如此,我还获得了加入新项目和更独立工作的信心,同时知道何时与社区协作。

让我印象深刻的是,尽管道路上有一些坎坷,但开源是有效的。OpenMRS 自 10 多年前开始以来一直在成功改进,这都归功于数百名志愿者贡献时间的工作。该软件已部署到全球各地,并在对抗流行病方面产生了重大影响。

与有偿工作相比

MM:大部分实际工作流程都是相同的,只是缺少每日站会和与同事的签到。对于 Eden,我仍然必须像在有偿工作岗位上一样,负责功能或错误、自行调查并提供修复。Eden 的一个不同之处是我可以在项目内的不同功能之间灵活切换。当我决定不想继续进行最初的错误修复时,我可以自由地寻找另一个功能来处理。当我在专业环境中工作时,由于截止日期和限制,我较少自由地放弃一项功能的工作并转向另一项功能。

NF:最大的差异是在加入项目的早期阶段。作为一名新的开发者,如果有人坐在我旁边的办公桌旁可以回答问题,那将非常有帮助。另一方面,在没有这种程度的扶持的情况下,我学会了更有效地独立研究问题解决方案的方法。当我需要精确而详尽地与社区分享我的问题时,我的技术书面沟通能力得到了提高(更不用说,弄清楚哪些问题需要通过社区解决,哪些问题需要我自己解决)。一旦我的环境设置好,并且我开始与一位可靠且善于沟通的团队成员一起处理图表搜索模块,它感觉就更像我在有偿职位上的工作了。

我喜欢从事开源项目的一件事是我在选择要处理的模块时拥有的自主权。在结构化公司中切换团队可能比在开源世界中更具挑战性,在开源世界中,您可以简单地 fork 一个新模块,将自己分配给与该模块关联的任务,并发出 pull 请求。虽然团队可能没有优先考虑您想要处理的问题,但他们非常乐意您自愿抽出时间来提供帮助。

我注意到的另一个不同之处是质量控制。在我的有偿职位上,几乎所有重要的项目提交都需要经过漫长的代码审查、跨团队验证和 QA 测试。例如,我在有偿职位上的大多数提交都经过了 5 到 20 次代码审查迭代才发送给 QA 团队。诚然,质量控制在我实习的公司中是高度优先事项,因此这可能不反映行业标准。相比之下,当我提交给 OpenMRS 时,我的更改在我的第一个 pull 请求后就被合并了。这并不是说 OpenMRS 没有代码审查(实际上,我被要求对 pull 请求进行更改),也不是说过度严格的质量检查必然更好。使用前一种技术可能会获得稍微更高质量的代码,但对于一群远程志愿者来说,这将是一种不切实际的工作流程,并且可能会阻碍开源世界的进步。

与过去的项目相比

SB:最大的不同是责任感。在个人项目中,您当然会尝试制作高效的软件并编写简洁的代码,但最终您只需要达到自己的期望即可。对于一个仍然是开发世界的新手的人来说,这通常意味着第一个有效的东西。然而,对于开源项目,您知道您的代码正在被审查,并且它必须符合社区的标准,否则它将不会被合并。结果是您不仅仅是尝试做第一个有效的事情,而是花费大量时间使事情尽可能做到最好。

NF:我不得不同意 Scott 的观点。对于个人项目,我有时倾向于为了方便而牺牲质量。对于开源项目,我的代码上有我的签名,并且向世界其他地方展示。我不仅倾向于追求更高的质量,而且代码审查过程确保了在合并到主分支之前纠正不良的设计选择或愚蠢的错误。

当您有问题时,有一个理解该软件的社区也很不错。对于个人项目,当我有问题时,我倾向于使用 Stack Overflow,但在没有项目范围的情况下,我的问题更容易受到 XY 问题 的影响,我陷入了询问特定问题 X 的困境,而我实际上应该询问更普遍的问题 Y。在从事 OpenMRS 工作时,我有一个乐于助人的社区,他们天生知道我面临的问题的潜在背景(因此,问题 Y),而且我看到了我解决问题的速度比我从事个人项目时快得多。

对项目的反馈

SB:这不一定直接针对社区,但我认为新的贡献者应该提交关于他们计划实施什么以及如何实施的详细计划。即使是像大错误修复这样简单的事情,也可能有很多不同的方法,并非所有方法都符合项目主要贡献者的特权。当然,pull 请求最终会处理很多这些问题,但对于不熟悉项目的人来说,预先确定一些细节可能是明智之举。

NF:首先也是最重要的,保持积极的氛围。我很害怕找到一个开源项目并加入经验丰富的团队,但 OpenMRS 社区非常热情友好。然而,正如之前提到的,我建议高级开发者审查设置过程和安装指南,以确保其保持无错误,并且所有核心模块仍然与第三方技术和彼此兼容(至少,当完全按照指南说明安装时)。我还建议清理旧的和过时的 Wiki 文档和 JIRA 问题,这些问题给我和其他几位开发者造成了困惑(基于讨论论坛和 Wiki 页面评论部分中的评论)。

参与进来

NF: Scott、Matt和我有一个独特的机会,在一个自 направленной 大学课程中从事我们各自的开源项目。对我来说,很高兴有一位导师可以帮助我设定目标和时间表,并跟踪我的进度。如果其他计算机科学专业的本科生有这个选择,我会推荐它。如果没有,也不要绝望。有很多方法可以寻找活跃的开源项目(我建议研究一下我们三个人所做的当前的HFOSS项目)。不要因为认为这太令人生畏或者你还没有准备好而气馁。总有一些项目拥有优秀的社区、有用的入门文档,以及大量的初学者任务,其目的正是为了让你熟悉代码库。

回到
学校

本文是回到学校系列文章的一部分,该系列文章侧重于面向各级学生的开源项目和工具。

标签
User profile image.
我是加拿大和美国的双重公民,虽然我目前居住在加拿大的西海岸。我拥有不列颠哥伦比亚大学的认知系统学位,并且我正在完成第二个计算机科学学位。我曾在专门从事AAA游戏的软件公司工作过一年。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.