My Google Code-In 2019 Experience

Ray Ma
6 min readJan 21, 2020

--

Introduction

Hi! I’m Ray, a student participant of Google Code-In 2019. Some of you might know me as PermissionError. I have created this blog post to talk about my amazing experiences during the contest.

Update (10 Feb 2020): I was pronounced a Grand Prize Winner by OpenMRS!

What is Google Code-In?

Long story short, Google Code-In is a contest for teenagers (13–17) on contributing to Open Source projects. There are 20+ organizations who apply to become mentoring organzations each year, and each organization provides hundreds of bite-sized tasks for the students to complete. Seriously, I’ve learned so much in this contest and have grown to absolutely love my organization of choice…

… OpenMRS.

OpenMRS is an Open Source Medical Record System — hence the name. It focuses on “improving health-care in resource-constrained environments”. OpenMRS is adapted by hundreds of healthcare facilities worldwide, and hosts conferences annually. The thing I love the most is the tagline — “Write Code, Save Lives.”. It is the most worthy cause of writing software, no doubts about it.

My Work

In the contest, I have completed 24 tasks for OpenMRS. Additionally, I have also tackled tickets in the downtime where my tasks were awaiting review. Contributions marked with 🔴 are not Google Code-In tasks. Without further ado, here is a list of my contributions and effort:

1. Replace size() == 0 with isEmpty() in openmrs-module-emrapi: This was a code quality improvement. See the PR here.

2. Readme in opennmrs-contrib-atlas: This was a minor documentation improvement, where some incorrect default credentials listed in the readme were corrected. See the PR here.

3. Write tests for ConceptServiceImpl.saveDrug: This was a quality assurance contribution. I have written 3 tests covering the saveDrug method. See the PR here.

4. Write tests for ConceptServiceImpl.saveConceptProposal: This was a quality assurance contribution. I have written 3 tests covering the saveConceptProposal method. See the PR here.

5–8. React 1–4: These 4 tasks were learning tasks where we got to create a simple app using React & Express.

9. Add fix for the form edit button in Android client Vitals page which is not working: This was a bug fix. I spent three days investigating this particular issue and finally found out that the bug only occurs when someone launches the application for the first time. See the PR here.

10. Check bad code practices through Findbugs or Sonar and fix those issues: This was a code quality contribution. I have contributed 2 PRs to fix 5 issues in total. See them here and here.

11. Design a HTML email template to congratulate GCI students: This was a design contribution for our GCI students this year. You can find the template hosted on GitHub Pages here.

My HTML Email template for GCI students

12. Suggest a new feature for OpenMRS: This was a feature request contribution. See my request here.

13. Executing a Test Case on Reference Application: This was a quality assurance task. See the test case here.

14. Poster for promoting Quality Assurance and Testing: This was a quality assurance contribution. See my poster here:

My Quality Assurance Poster

15. Review at least two pull requests in OpenMRS Repositories: This was a contribution on peer programming. I have reviewed 2 PRs, which you can see here and here.

16. Design a new homepage for the OpenMRS website: This was a design contribution. See my design here.

My OpenMRS Home page redesign

17. Design an Android app icon for OpenMRS: This was a design contribution. See my design here:

My Android App icon design

18. GoLang 1&2: These were learning tasks where we got to create a backend server which queries a PostgreSQL database and forwards the results in JSON.

19. Design the OpenMRS Reference Application User home page: This was a design contribution. See my design here.

My OpenMRS Reference Application Home page redesign — It looks like a number pad

20. Create wiki page for openmrs-esm-patient-chart: This was a documentation contribution. See the new wiki page here.

21. Participate in the OpenMRS OCL Sprint 24: This was a coding/infrastructure contribution. After investigation, I found out that my claimed issue (OCLOMRS-738) was obsolete, but there are no open issues left for me to take in the Sprint. But I resolved an issue in the sprint regardless.

22. 🔴AC-632: This was a bug fix. The OpenMRS Android Client had an issue where downloading patients would crash the app due to a null-check not being in place. I created a PR addressing that. It has now been merged into master. See the PR here.

23. 🔴GCI Quick-Start Guide: With Suthagar’s suggestion in mind, I have created a guide for all Google Code-In students to come. See the guide here.

24. 🔴Infrastructure tasks: There’s a section dedicated to those down below.

Community Involvement

I love OpenMRS. GCI contest or not, I will keep contributing to it. The community is super welcoming and I feel like I have integrated very well. During the contest, I have helped on OpenMRS Talk (our Discourse forum) and our Telegram group chat whenever possible. And most importantly — I joined the OpenMRS Infrastructure Team. Huge thanks to Cintia DR for her onboarding help, I couldn’t have done half of the things I did without her mentoring. Here’s a section dedicated to my Infrastructure Work:

🔴 Infrastructure Work

  1. 🔴ITSM-4194: 🎉This was the first Infrastructure issue I tackled!🎉 I have migrated our IRC <-> Telegram relay bot from ndu (a machine) to mokolo (a machine). Now, we no longer have any bills from Digital Ocean and all of our infrastructure is now running on Jetstream (our infrastructure service provider).
  2. 🔴ITSM-4203: I have migrated all services running on thika (one of our machines) to mokolo (another one of our machines).
  3. 🔴ITSM-4153: This is currently still ongoing. I have set up the new help desks for OpenMRS, since our current help desk service (desk.com) is going to shut down in March 2020. It will likely entirely replace the current help desk soon, after some more testing by the help desk staff.
  4. 🔴ITSM-3933: This is currently still being tested thoroughly. I have managed to upgrade our ansible (our automation software) to the latest version, fixing anything broken by the upgrade.
  5. 🔴ITSM-4172: This is related to ITSM-3933. While upgrading ansible, I upgraded docker along the way, and it seems to work great!
  6. 🔴ITSM-4244: Upon request by the OpenMRS community regarding OpenMRS Platform 2.3.0’s beta testing, I have created a User Acceptance Testing server for OpenMRS Platform. This ensures that the final 2.3.0 release will have less issues.
  7. 🔴ITSM-4219: This was an issue on removing the ability to login via email from OpenMRS ID (our identification service). Cintia did most of the work on this one, but I have helped her in testing the modifications and finding a couple of issues.

Conclusion

Google Code-In was an absolutely amazing experience, and I’m sure it was for all of the other students. I’m super glad that I chose OpenMRS to contribute to, as saving lives while you code is just too good to not choose. I have learned so much more about software testing, collaborative development, Java, JS, and GoLang. One thing I’d like to see in Google Code-In is the addition of Infrastructure tasks. Since it’s not a contest just for programmers but open source as a whole, perhaps aspiring junior system administrators can get some tasks of their own alongside the designers, documentation writers and researchers who have their own tasks already?

I cannot express my gratitude for the OpenMRS Community for being so welcoming. Seriously. Thank you so much. I will be around tackling (mainly infrastructure) tickets for as long as I’m wanted in the community.

Thank you, too, for reading this blog post. I hope you have an awesome 2020 ahead.

--

--