Welcome to the OpenMRS Hackathon Germany!
Join us in supporting the OpenMRS mission in a one day hackathon with the main focus on paying back technical debt that has accumulated over time.
How To Join The Hackathon
Everyone is more than welcome to join us for the hackathon! You do not need to be a domain expert in healthcare. However since we want to solve code related OpenMRS issues you need to be familiar with the technologies OpenMRS is built on. We expect you to have experience with Java and tools/frameworks such as maven, JUnit, Spring, Hibernate, Mysql.
In order for the organizers to cope with the logistics please join the meetup group https://www.meetup.com/ThoughtWorks-Berlin/
and register for the OpenMRS hackathon event you want to attend.
Mandatory Pre-Hackathon TODOs
If you want to join us for the hackathon please follow the next sections with at least a few days, even better a few weeks in advance. We want to spend the hackathon with helping out the OpenMRS community and not with setting up laptops. If you are having any issue or questions please refer to the Need Help section.
Get An OpenMRS ID
In order for you to claim the issue you’ll be working on in the OpenMRS issue system https://issues.openmrs.org you need an OpenMRS ID. This login is also used to login in to the OpenMRS forum http://talk.openmrs.org/ which is what you’ll need to talk to the community.
To get your OpenMRS ID
- go to https://id.openmrs.org/ and follow the instructions
- once you have your OpenMRS ID go to https://help.openmrs.org/ and request JIRA access and mention your OpenMRS ID
Please do this as soon as you are sure you are going to participate as this can sometimes take a few days. The helpdesk is run by the community which are mostly volunteers so please keep that in mind!
Setup Your Development Environment
- Make sure you have setup your machine before the day of the hackathon by following instructions here Getting started with OpenMRS
- Install the Generate Test Case Plugin for IntelliJ or Eclipse to write unit tests according to the OpenMRS convention
- Clone the repositories you are going to work on. You'll definitely need: https://github.com/openmrs/openmrs-core
Make sure you have all you need ahead of your first hackathon by reviewing this quick Checklist for Hackathon
Read About OpenMRS Coding Conventions
- Coding Conventions
- Unit Tests
- Unit Testing Conventions
- Pull Request Tips - this one especially before making your first pull request on github
Optional Pre-Hackathon TODOs
Create Or Find Issues
You can help us in creating issues for the hackathon by getting familiar with the OpenMRS code base and especially by looking for
- critical or major code smells on the OpenMRS code quality tool - Sonar Cube
- untested code using either the Coveralls Code Coverage Site or OpenMRS code quality tool - Sonar Cube
- existing issues at https://issues.openmrs.org that are not labeled with 'hackathon-germany' but you think you can complete in a one day hackathon or you commit to complete soon after the hackathon
IMPORTANT NOTE: please involve the community in the ticket creation process, we do not want to drain community resources, the community should decide what is of importance. So be considerate, ask first at http://talk.openmrs.org/ or on IRC Chat if you are uncertain.
|April 22, 2017||OpenMRS Hackathon||9am - 8pm UTC+01:00||ThoughtWorks Werkstatt: Mülhauser Str. 6, 10405 Berlin; https://goo.gl/maps/95KSFxVCLT12||https://www.meetup.com/ThoughtWorks-Berlin/events/237696997/|
On the Day of Hackathon
What To Bring
Your laptop & your friends with laptop :)
What To Work On
Our goal is to complete as many issues as we can; the goal is not to claim as many issues as we can but to successfully complete them. Therefore please
- pair with someone if its your first time or if the issue seems more complex
- claim only issues as described in the section find tickets. These are tickets that the community pre-selected for this hackathon; please stick to those as the community put in time and effort in selecting issues it can use our help!
- furthermore if you have some ideas on how to improve the code which are not covered by the tickets please share them with the community.
Find a ticket to work on
Please claim one of these issues or join someone who has already claimed a ticket:
|TRUNK-5069||Add tests to PatientServiceImpl||2017-02-20||2017-02-26||Francesco Spampinato||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5068||Add tests to ProgramWorkflowService||2017-02-20||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5067||Add tests to MessageServiceImpl||2017-02-20||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5066||Add tests to ConceptServiceImpl||2017-02-20||2017-02-25||Sanatt Abrol||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5065||Add tests to AdministrationServiceImpl||2017-02-20||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5064||Add tests to PersonServiceImpl||2017-02-20||2017-02-22||Ira Lauer||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5063||Extract private method in ConceptServiceImpl.saveConcept||2017-02-17||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5062||Extract private method in EncounterServiceImpl.saveEncounter||2017-02-17||2017-02-23||Prabodh Kotasthane||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5061||Add test to FormServiceImpl.getForms||2017-02-17||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5060||globalPropertyChanged catches all exceptions||2017-02-17||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5059||Remove duplication in LocationService.getDefaultLocation||2017-02-17||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5057||Extract private methods in OrderServiceImpl.saveOrder||2017-02-17||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5055||Improve PersonServiceImpl.getPersonAttributeTypes||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5054||Extract private methods in PersonServiceImpl.savePerson||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5053||Refactor ProgramWorkflowServiceImpl.saveProgram||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5052||Extract methods from getVisitTypesToStop||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5051||Extract getVisitTypesToStop from VisitServiceImpl.stopVisits||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5050||Reduce nesting in VisitServiceImpl.stopVisits||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5049||Refactor VisitServiceImpl.stopVisits||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5048||Code in UserServiceImpl might not be reached||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5047||Replace duplication in UserServiceImpl by StringUtils||2017-02-16||2017-02-22||Prabodh Kotasthane||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5046||Remove commented out code||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5045||Extract private methods in PatientServiceImpl.savePatient||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5043||Remove unused temp variables||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5042||Possible null pointer dereference||2017-02-16||2017-02-24||Sanatt Abrol||Ivo Ulrich||In Progress||Unresolved|
|TRUNK-5041||Replace temp vars in Concept with streams||2017-02-16||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5040||Inefficient use of map||2017-02-15||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5037||Replace use of synchronized class Vector with ArrayList||2017-02-15||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5034||Merge collapsable if statements||2017-02-14||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5033||Public static fields should be final||2017-02-14||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5032||Remove unused private fields||2017-02-14||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-5031||UpgradeUtil may not close a stream||2017-02-14||2017-02-20||Unassigned||Ivo Ulrich||Ready for Work||Unresolved|
|TRUNK-3800||Refactor UserDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3799||Refactor TemplateDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3798||Refactor ProviderDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3797||Refactor ProgramWorkflowDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3796||Refactor PersonDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3795||Refactor PatientDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3794||Refactor OrderDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
|TRUNK-3793||Refactor ObsDAO||2012-11-10||2017-02-20||Unassigned||Lluis Martinez||Ready for Work||Unresolved|
These issues can also be found at https://issues.openmrs.org filtered by the label 'hackathon-germany'. If you cannot find a interesting ticket to work on here look at the introductory tickets and after introductory tickets here.