当前位置: 首页 > 工具软件 > OpenMRS > 使用案例 >

三名学生通过OpenMRS和Sahana Eden进入开源

卞安邦
2023-12-01

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

我们是不列颠哥伦比亚大学 (UBC) 计算机科学学士学位第二学位课程的三个学生。 由于我们每个人都有合作教育的经验,随着我们接近毕业,我们的技术能力和贡献日益成为关注的焦点。 我们在UBC的过去几年中使我们产生了一些很棒的技术知识,但是我们都发现自己的简历中明显缺少一个组成部分:开源贡献。 尽管这样做的原因多种多样,但它们全都源于以下事实:做出贡献涉及一系列技能,这些技能远远超出了课堂上讲授的甚至是实习期间学到的一切。 它要求一个人与完全陌生的人外向,要主动寻找解决的问题,并进行有效的书面交流。

尽管这些技能对我们来说并不完全陌生,但我们知道我们仍在开发它们。 结果,我们对进入开源项目犹豫不决。 直到我们发现了旨在使学生参与开放源代码开发的定向学习课程后,我们才得以积极参与。

具体来说,本课程围绕为人道主义免费开放源代码软件(HFOSS)项目做出贡献以及与使其工作的人员和流程进行交互而进行。 以下是我们参与的两个项目的简要介绍,然后是我们汇总的一些问题和答案,以捕捉对HFOSS作为首次贡献者的发展的思考。 我们的目的是向可能会紧张地尝试开放源代码的新兴开发人员,可能没有参与开放源代码开发的经验丰富的开发人员,以及可能从事开放源代码项目并且想要进行开发的经验丰富的开发人员提供洞察力。了解新开发人员加入各自团队时的体验。

项目1:Sahana Eden

Sahana Eden是一个开放源代码的人道主义平台,可用于为灾难管理,开发和环境管理部门提供解决方案。 它是由Sahana Software Foundation管理的项目之一,并且在过去几年中已参与了许多救灾部署。 Scott和Matt是这个项目的一部分。

项目2:OpenMRS

OpenMRS是一个医疗记录数据库,旨在为发展中国家的医护人员提供更轻松的对患者数据的访问。 该项目始于2004年,此后逐渐在全球范围内广泛使用,显示出它在抗击艾滋病毒/艾滋病和耐药性结核病等流行病方面的必要性,以及其在基本初级保健和肿瘤学方面的有用性。 OpenMRS项目的主要目标是创建一个易于使用且可扩展的病历系统,用户可以对其进行修改以满足自己的需求。 当前,发展中国家的许多医疗记录仍保存在本地驱动器上的物理文件或电子表格中。 OpenMRS努力在远程服务器上创建一个数据库,从而在更大的地理区域内更快,更可靠地访问患者信息。 尼古拉斯是该项目的一部分。

初次接触

斯科特· 布坎南(SB) 与Sahana Eden社区的首次接触是一个简单的过程。 他们有一个活跃的邮件列表和一个IRC频道,以促进社区内的交流。 通过邮件列表,Matt和我介绍了自己以及我们与社区合作的目标。 我们收到了一些积极的回应,并且参与度似乎很好。

Nicholas Folk(NF): OpenMRS提供了许多工具来促进与社区的交流。 像Sahana Eden社区一样,OpenMRS有一个邮件列表和一个IRC频道 ,而且还有一个讨论论坛 ,鼓励新的开发人员自我介绍和提出问题。 开发人员可以通过在线视频会议参加一系列现场讨论,目的是讨论新想法并鼓励新手开发人员加快项目的各个方面。 由于时区的差异,大多数讨论对我来说都很困难,但是幸运的是组织者录制了许多截屏并将其上载到他们的YouTube频道

虽然我确实在讨论论坛上向社区介绍了自己,但是当我直接向几个主要开发人员发送消息时,我得到了更多的帮助和指导。 他们为我指出了新的开发人员指南和我可能有兴趣参与的特定子项目。 总的来说,每个人都愿意给新来者的热情态度和协助给我留下了深刻的印象。

建立框架

Matthew MacLennan(MM):这个过程很简单。 Sahana Eden网站上有一个文档齐全的部分,用于设置工作环境,包括有关在计算机上配置库,设置版本控制以及启动和运行测试实例的说明。 方便地,有一个针对我当前操作系统GNU / Linux的特定指南。 我无法评论如何为其他操作系统设置开发环境。 对我而言突出的一项资源是可用于在本地计算机上预填充测试实例的测试数据量。 通过提供这些功能,可以轻松了解伊甸园不同部署的外观和工作方式。

SB:在上课之前,我担心的一个问题是开发环境的设置可能会遇到困难,并且缺少任何现场帮助。 我有一些实习经验,这花了我数周时间才能正确安装我的环境并获得所有必要的权限。 幸运的是,与Sahana Eden的合作非常简单。 我运行OSX,所以我必须通过虚拟机来做所有事情,但是它很简单并且有据可查。 如果我没记错的话,我可以在几个小时内用已填充的数据库启动并运行所有内容。

NF:由于OpenMRS Wiki上有大量文档,以及其全面的新开发人员指南 ,因此建立开发框架非常简单。 我确实遇到了一些小麻烦,例如安装错误和版本兼容性问题,但是遇到这些障碍的一个积极方面是我从社区中获得了热情的帮助。 有一个下午,首席开发人员花了几个小时的时间(通过IRC渠道)帮助我解决数据库安装错误。 该错误是可复制的且未记录,因此我在讨论论坛上写了有关该问题以及重现和解决此问题的具体步骤(一旦我自己这样做)。 我收到了其他开发人员的热情反馈,并启发了另一位主要开发人员来更新设置Wiki的很大一部分。 每个人都愿意花时间来帮助一个他们从未认识过的人,这确实表现出一种积极的气氛,我感到很鼓舞。

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

第一贡献

MM:我最初的参与是遵循Sahana Eden项目对新贡献者的指示 。 它建议在错误报告数据库中查找小错误,或在代码库中查找针对小功能的待办事项。 在错误报告数据库中,大多数错误都存在了两年之久,因此没有太多可供选择的选项。 我决定探索一些最新的报告错误。 不幸的是,大多数错误是不可复制的。 可能是由于自编写错误报告以来代码库已更改,或者错误报告程序没有启动并运行项目的正确实例。 我确保对无法复制的错误发表评论,以帮助其他人避免将时间浪费在这些错误上。

最终,我发现了一个可以复制的错误。 我找出了解决方案的各种选项,然后将其传达给邮件列表,以查看社区认为最合适的选项。 收到一些反馈后,我修复了该错误。 但是,在与社区资深成员进一步讨论之后,我确定我正在修复一个我目前不建议使用的错误。 结果,我针对该错误报告的修复程序未合并到代码库中,但是我仍然发现它是使自己精疲力尽的良好学习体验。

NF: OpenMRS在其定制的JIRA问题跟踪器的首页上提供介绍性的门票,这些跟踪器专为新手设计,以使他们对项目工作流程更加满意。 这使我很容易找到足以完成任务的知识,并且可以更好地熟悉代码库。 我选择了一项任务,需要在前端系统管理管理工具中添加删除功能。 添加功能很简单,但是由于我不熟悉Spring和Hibernate等特定的库和框架,因此单元测试更具挑战性。

入门票使入职过程变得轻松而有趣。

重点和特点

MM:根据我的初步经验,我想找到伊甸园项目的一部分,这是社区成员当前的重点。 我希望,如果我发现其他人也在做某事,那可能会是一个更相关的功能。 在阅读了邮件列表和开发门户的几天之后,我发现了一个正在积极开发的移动应用程序EdenMobile 。 另一位开发人员已启动此项目,希望创建一个跨平台的移动应用程序。 我在学校学到的可识别的设计原则使开发人员开始着手开发,我认为这将为开发提供更丰富的过程。 移动应用程序还有一个额外的好处,即它是一个完全独立的代码库,这意味着不必掌握Eden这样的大型Web框架。

我和Scott决定,我们将解决EdenMobile的发展目标之一:SMS通讯。 用例很简单:一个人没有数据/ WiFi连接,因此,它使用一系列SMS消息将数据更新发送到中央服务器。 不幸的是,在我们需要不断改进课程的时间内,最初的开发人员无法使用。 结果,我和斯科特(Scott)并不完全确定领导者是如何希望我们设计SMS通讯功能并将其整合到主要移动应用程序中的。 因此,Scott和我决定创建一个库,该库可以在以后由原始开发人员集成。

SB:马特和我就伊甸园的哪些方面进行了很多讨论。 正如马特(Matt)所说,对我们来说,最大的问题是伊甸园的规模以及我们甚至需要开始思考如何才能做出贡献所需要学习的数量。 最终,我们希望对具有明确定义的出口和入口点并且范围有限的东西进行工作,以便我们可以花很少甚至没有的时间就可以参与进来。 Matt最终找到了Eden Mobile仓库,这似乎很合适。 有记录的待办事项 ,由于我们最近完成了有关分布式系统主题的许多课程,因此我们倾向于基于网络的SMS任务。 最终,在难度级别和学习机会方面,这是一个不错的选择,因为我们能够将在课堂上学到的很多知识应用到现实生活中。

NF:我谨慎地预计项目会失败,响应时间延迟以及其他阻碍我无法为任何特定项目做出实质性贡献的障碍。 我认为最好尝试三个不同的项目,以防一个项目的学习曲线过于陡峭,或者(一个案例中)一个萌芽的模块从未落地。 同样,虽然可以合理地期望团队成员花一两天时间来回答问题,但是由于课程时间的限制,我最好在等待此类任务时尝试执行多任务。

像大多数开源项目一样,几乎所有的OpenMRS模块都位于GitHub上,我能够分别查看每个模块。 我的选择基于一些标准,例如模块的活跃程度,开发人员的沟通方式(彼此之间以及与模块的新贡献者之间的交流)以及对模块的兴趣。 GitHub使这些问题中的第一个很容易回答。 GitHub不仅显式显示每个项目的提交历史,而且在比较不同模块时还提供有用的图形和贡献图。 对于第二个问题,我使用JIRA问题注释部分来评估开发人员对彼此通信的关注程度,以及他们对我的电子邮件和消息的响应时间。 前两个标准确实将我的范围缩小到了少数模块。 我选择了图表搜索模块,尚未开始开发的眼科模块以及参考应用程序。

我对自己的多元化方法感到满意,因为眼科模块尚未获得任何关注,并且我与参考应用程序团队发生了一些沟通不畅的问题(我开始处理一些已弃用或已经建议使用的团队成员向我推荐的一些问题固定但未标记为此类)。 幸运的是,我仍然可以使用图表搜索模块,因为该项目的首席开发人员不仅乐于助人,还可以快速响应我的消息,并且非常了解模块本身。 我一直在帮助他重构用户界面的某些部分,不久将在搜索功能中添加扩展名。

获得的技能

MM:在行业环境中与Python一起工作了一年,大多数需要进行的Python开发并没有使我接触到任何新东西。 Sahana Eden使用的web2py Web框架不是我以前使用过的,但是与我过去使用的其他框架并没有太大的不同。 迁移到EdenMobile之后,肯定有很多新概念和技术需要学习。 向我介绍了Cordova开发框架,该框架是用于创建移动应用程序的JavaScriptCSSHTML的组合。 尽管我主要关注Android版本,但JavaScript API允许开发人员使用相同的代码库开发跨平台应用程序。

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

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

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

见解

MM:我从这种经验中得到的主要收获是,为一个开源项目做贡献比人们想象的要难得多。 这是因为与您一起工作的同伴通常具有其他优先事项或首要任务。 这使得在尝试实施新功能时很难获得帮助和反馈,特别是如果只有一个或两个社区成员精通该特定主题时。 另一方面,我敢肯定,由于在特定项目上的经验,花大量时间在特定项目上工作的人会很有效率。

NF:虽然我不能代表所有开放源代码项目发言,但OpenMRS拥有一个出色的支持社区,该社区欢迎并鼓励贡献者。 我很紧张地加入其他全速运行的开发人员的行列,但是收到团队如此积极的氛围令我感到惊喜。 开源开发比我最初想象的要多。 当我最初了解开源软件的概念时,给人的印象是,可以在一天甚至几小时内完成一个项目并做出贡献。 我现在知道,对于规模很大的项目,这样做是不现实的。 设置可能会花费很长时间,并且要找到一个开发人员具有完整技术栈经验的项目将具有挑战性,因此可能会有一条学习曲线。 今年夏天的经验使我对项目计划和时间管理有了更好的直觉。 不仅如此,我还获得了加入新项目并更加独立地工作的信心,同时也知道了何时与社区合作。

令我印象深刻的是,尽管道路上遇到了一些坎bump,但开源仍然有效。 自10年前成立以来,OpenMRS一直在成功地进行改进,这完全归功于数百名开发人员自愿提供的时间。 该软件已在全球范围内部署,对战胜流行病具有重大影响。

与付费演出

MM:大部分实际工作过程都是减去每天的混乱和与同事签到。 使用Eden,我仍然必须拥有功能或错误的所有权,自己进行调查,并提供修复程序,就像我在带薪工作岗位上所做的那样。 与Eden的不同之处在于,我可以灵活地在项目中的不同功能之间切换。 当我决定不想继续进行最初的错误修复时,我可以自由地找到要使用的其他功能。 在专业环境中工作时,由于截止日期和限制,我只能自由选择一项功能,而转到另一项功能。

NF:最大的差距是在加入项目的初期。 作为一名新开发人员,让有人坐在我旁边的办公桌旁回答问题非常有帮助。 另一方面,如果没有这种水平的掌握,我就会学到更有效的方法来独立研究我的问题。 与社区分享我的问题时,我的技术书面交流变得更加敏锐,因为我需要准确,透彻(更不用说,弄清楚哪些问题需要通过社区,哪些问题需要我自己解决)。 设置好环境并与可靠的沟通团队成员一起开始图表搜索模块工作后,感觉与我在带薪职位上的工作非常相似。

我喜欢在一个开源项目上工作的一件事是我在选择要处理的模块上的自治程度。 在开放结构的公司中更换团队要比在开源世界中更具挑战性,在开源世界中,您可以简单地创建一个新模块,将自己分配给与该模块相关的任务,然后发出拉动请求。 尽管团队可能没有优先考虑您要解决的问题,但他们很乐意您自愿付出时间来提供帮助。

我注意到差异的另一个方面是质量控制。 在我的带薪职位上,几乎所有重大项目提交都需要经过冗长的代码审查,跨团队验证和质量检查测试。 例如,在我的带薪职位上,我所做的大部分提交工作甚至需要五到20次代码审查迭代,然后才能发送给质量检查团队。 诚然,在我实习的公司中,质量控制是重中之重,因此这可能无法反映行业标准。 相比之下,当我承诺使用OpenMRS时,我的更改将在我的第一个请求请求之后合并。 这并不是说OpenMRS上没有代码审查(实际上,有人要求我对请求请求进行更改),也不是说进行严格的质量检查更好。 使用前一种技术,您可能会获得质量更高的代码,但是对于一组远程志愿者而言,这将是不现实的工作流程,并且可能会阻碍开源世界的进展。

与过去的项目

SB:最大的区别是责任。 当然,在个人项目中,您尝试制作高效的软件并编写简洁的代码,但最终您只需要辜负自己的期望即可。 作为对开发世界还很陌生的人,这通常意味着第一件事起作用。 但是,对于一个开源项目,您知道您的代码正在审阅中,并且必须符合社区的标准,否则将不被合并。 结果是,您不仅在尝试使第一件事起作用,还花费了大量时间使事情变得最好。

NF:我必须在这里同意Scott的观点。 对于个人项目,有时我会为了方便而牺牲质量。 在开放源代码项目中,我的代码上带有我的签名,并显示在世界其他地方。 我不仅会努力争取更高的质量,而且代码审查过程可确保在合并到主分支之前纠正不良的设计选择或愚蠢的错误。

有一个社区可以在您有问题时了解该软件,这也很好。 对于个人项目,当我有一个问题时,我倾向于使用Stack Overflow ,但如果没有项目范围,我的问题就更容易受到XY问题的困扰 ,因为当我真正要问的时候,我会被问到一个特定的问题X。关于更普遍的问题Y。在使用OpenMRS时,我有一个乐于助人的社区,该社区固有地了解我所面临的问题(因此也就是问题Y)的基础上下文,并且与我相比,我看到解决问题的速度要快得多。在我的个人项目上工作。

项目反馈

SB:这不一定直接面向社区,但是我认为新的贡献者应该就他们计划实施的内容和方式提交详细的计划。 即使只是简单的大修,也可以有很多不同的方法来完成某件事,并且并非所有方法都符合项目主要贡献者的特权。 当然,拉取请求最终要处理很多事情,但是为不熟悉该项目的人事先建立一些细节可能是明智的。

NF:首先,要保持积极的氛围。 我很害怕找到一个开源项目并加入一个经验丰富的团队,但是OpenMRS社区非常热情友好。 但是,如前所述,我建议高级开发人员仔细阅读安装过程和安装指南,以确保它没有错误,并且所有核心模块仍然与第三方技术以及彼此兼容(至少在完全按照指南中的说明进行安装)。 我还建议清理旧的和过时的Wiki文档以及JIRA问题,这些问题使我和其他一些开发人员感到困惑(基于讨论论坛和Wiki页面评论部分的评论)。

参与其中

NF: Scott,Matt和我有独特的机会从事各自的开放源代码项目,以开展自主学习的大学课程。 对我来说,很高兴有一位指导老师来帮助我设定目标和时间表,并跟踪我的进度。 如果另一个本科计算机科学专业的学生可以使用此选项,我会推荐它。 如果没有,请不要绝望。 寻找活跃的开源项目的方法有很多(我建议像我们三个人一样研究当前的HFOSS项目)。 不要因为它太过艰巨或您还没有准备好而被推迟。 总有一些项目具有很好的社区,有用的入门文档以及大量的初学者任务,其确切目的是使您熟悉代码库。

回到
学校

本文是“ 重返校园”系列的一部分,该系列侧重于面向所有级别学生的开源项目和工具。

翻译自: https://opensource.com/education/15/9/open-source-development-student

 类似资料: