I’m Parker Erway. I’ve been working with OpenMRS for the last couple months as part of Google Code-in 2014, a contest with the intent of encouraging kids ages 13-17 to contribute to open source organizations. I’d say it’s working!
OpenMRS itself has a wonderful mission statement:
The mission of OpenMRS is to improve health care delivery in resource-constrained environments by coordinating a global community that creates a robust, scalable, user-driven, open source medical record system platform.
I’ve had fun and learned a great deal contributing to OpenMRS. This is a summary of my work with OpenMRS:
- Develop an iOS client for OpenMRS. I love working with Apple technologies, they almost always simply work. This task, and it’s accompanying tasks (adding more features to the app, documenting it, and publishing it on the App Store) took nearly three weeks.I could have done them faster, but I wanted to incorporate every best practice I knew of. One of my favorite things to do is start a fresh new project and try to do everything perfectly. It was great seeing all that hard work (and learning!) pay off. You can download the app on the App Store now.
The app now has its own official JIRA project! It’s great to see that I’ve made a lasting contribution to the community. I plan to keep improving it even after the contest, including possibly transferring it to Swift (with its better nil-safety features, awesome for preventing crashes.I’d consider this my biggest contribution to the OpenMRS community. In only three weeks, I was able to build, document, test, and submit an application to the App Store. For comparison, see this infographic – average app build time is 18 weeks. I didn’t have to build the server side, but I still built the app more than twice as fast as a full development studio would. This was a blast!Thanks to harshadura for leading me through the development and marketing of the app. You’re awesome!
- Set up OpenMRS locally. For some reason, I’ve never been very good at setting up large projects for the first time, often resorting to trial-and-error. This installation went without a hitch. Kudos to the OpenMRS developers for making it easy for even me to install!
- Work on OpenMRS-ID’s UI. Spanning six tasks (1, 2, 3, 4, 5, 6), I worked on helping to overhaul openmrs-contrib-id‘s user interface in accordance with the new designs. I learned a lot from this set of tasks. I had never worked with Node before, and I learned a lot about how partials work, how the asset pipeline works, etc.I’d like to thank Elliott Williams for taking time out of his busy schedule to help me with these tasks!
- Create a logo and splash screen for the iOS client. I’m first and foremost a developer, but I like to try my hand at design now and then. I proposed several icons and splash screens for the iOS app. I use GIMP for all my artwork, mainly because I’m too cheap to go buy Photoshop (and too honest to go pirate it).
- Deploy OpenMRS to OpenShift. OpenShift is a Public PaaS (platform as a service) that you can run for free at its base tier. The low cost of this service makes it perfect for hospitals with low funding to run OpenMRS!I tested a guide document that another student had made for this, and suggested a couple improvements to it. I’m now confident that this guide will help make OpenMRS more accessible to medical institutions everywhere!
- Improve the Modulus search algorithm. I’ve never played with search beyond simple literal matching algorithms. I learned a lot about search optimizations, weighting, ordering, and sorting through this task, and proposed several improvements on the wiki page.
- Find and correct bad practices in code through Sonar. Sonar is an automated solution for ensuring code follows preset practices. This was the fist time I’d used it, and I think I will start using it in my future Java projects! I corrected several bad practices across the project and submitted my fixes as pull requests to the main repository.
- Find and report two bugs in the system. I like to break things, especially when I’m supposed to break them. I found two bugs in OpenMRS, one a simple date formatting issue and the other a more serious injection issue involving patient names. I learned a lot about HTML injections doing this!
- Identify UX improvements. I noticed some inconsistencies in one of the tables on OpenMRS and reported them on JIRA. One of them I was even able to fix with a little bit of CSS!
- Fix a Modulus scrolling bug. In this task, I fixed a scrolling bug in Modulus. A page would automatically scroll to the bottom on every load, when it should only scroll to the bottom when it’s in the editing state.I had never worked on an AngularJS project before, and Elliott Williams helped me a great deal throughout the project. After completing that task, I feel I have a much better understanding of how Angular works. Thank you, Elliott!
I’ve never contributed to a large open source organization before. Here’s some of the things I learned:
- It’s totally worth it. You meet amazing people doing amazing things, and you get to work with them and learn from them.
- You can actually get stuff done. Before working with OpenMRS, I had the impression that large organizations, even open source ones, tend to take forever to make changes and review work and such. Not so here – things happen quickly, even with the relatively large size.
- You have to add things to git before you commit. I.e., don’t go too fast. Do good work, not fast work. (See https://github.com/openmrs/openmrs-contrib-modulus-ui/pull/23#discussion_r23022640 for context)
And many more which aren’t covered here. If you’re reading this and you have any skill at all, go try contributing to an open source project. It’s worth it.
Overall, Google Code-In has been a great experience. OpenMRS has been extremely good to me as a student. I feel like a member of the community after less than two months. I’d like to thank each and every one of the mentors, specifically:
- Harsha Siriwardena, for walking me through every step of creating the iOS app and surrounding documentation
- Elliott Williams, for reviewing my OpenMRS ID and Modulus tasks. Also, for patiently giving me a crash course in Angular.
- Robby O’Connor, for hanging out in IRC with us students and helpfully answering our questions.
- Suranga Kasthurirathne, for helping me get OpenMRS set up at the beginning of the competition.
- Harsha Kumara, for helping out with the Sonar bug-squashing tasks.
I don’t believe I had the privilege of directly interacting with the rest of the mentors – but I’m sure I’ll get to work with them in the coming months as I continue in my involvement in the OpenMRS community!
About that raw task count…
I haven’t done as many tasks as I could. I could have a much higher raw number of tasks, but that’s not what’s important to me. What’s important to me is that every line of code I write is maintainable, solid, testable (ideally tested as soon as I write it), and in general, good. I want to do good work, not a large amount of mediocre work. Google Code-In has helped cement that concept in me.
There were a few times when I was ‘stuck’ waiting for a mentor to review a task. It means I didn’t get as much done as I’d like to – but I’m fine with that. Mentors are people too, and they have busy lives. I used the time when I was waiting for a task to be reviewed to install new modules in my OpenMRS installation and experiment. I also used it to interact with the community. I plan to continue contributing for years to come.
I believe that my most lasting contribution to OpenMRS will be the iOS app. It has an official JIRA project now. I’m looking forward to seeing the advancements the community as a whole can make in it!
There’s a development guide for the app on the OpenMRS wiki, and anyone can contribute. The next few years are going to be exciting as the community takes over the iOS app and makes improvements.
I also plan to continue contributing to OpenMRS myself, mostly through the iOS app and in working on various tickets for other projects.
I love how the OpenMRS community has handled Google Code-In, making every student feel welcome and a part of the community, and I hope some of them will stick around and continue contributing to the project. I know I will!