Today I got the coveted "Google Book" that all Google Summer of Code students have been talking about constantly! I've flipped through it, it's an amazing book! Want to know the name? Everybody knows it already, it's "Beautiful Code" by O'Reilly.
Thank you so much!!!!!
Google Summer of Code 2008 work officially begins today. I am planning to finish up the Tribe module early as possible. In the OpenMRS domain model the patient object has an association to a tribe object, probably because OpenMRS implemenations started out mainly from African countries. But not all OpenMRS implemenations need to identify the tribe of a patient. So the objective is to remove the tribe object and the related functionalities out of the core OpenMRS system and make it into a pluggable module. Then the tribe module can be plugged into the core OpenMRS system where it is needed.

I got the book yesterday, Google is sending for all the Google Summer of Code students. The book, Beautiful Code, is a collection of articles by leading programmers and designers. They talk about their experiences architecting and designing good code. It is an nice gift, well thought out by Google.
Computer related books go out of date so quickly, sometimes in 2 - 3 months. But this book will last for a long time, I guess.

I have run OpenMRS in a couple of machines in Linux as well as in Windows over the past month. Today I set it up in my desktop machine which I am planning to use these days. I have Kubuntu 8.04 with MySQL server 5.0, JDK 1.6, Apache Ant 1.7 and Apache Tomcat 6.
Checked out the source from http://svn.openmrs.org/openmrs/trunk
Added Tomcat user account with the manager role: <user username=”openmrs” password=”openmrs” roles=”admin,manager,tomcat”/>
Started Tomcat server.
Logged in to MySQL server as root.
Ran the SQL scripts, 1.3.0-createdb-from-scratch-with-demo-data.sql and update-to-latest-db.mysqldiff.sql, in that order.
Created the MySQL user account openmrs:
create user openmrs@localhost identified by ‘openmrs’; set password for openmrs@localhost=PASSWORD(’openmrs’);
grant ALL on openmrs.* to openmrs;
Created the .OpenMRS directory in the home directory and created the build and runtime properties files with the following contents.
openmrs-build.properties:
### name of generated war file
webapp.name=openmrs
webapp.display.name=OpenMRS
webapp.description=Open-Source EMR for Developing Countries
###Properties for running unit tests with tomcat###
tomcat.home=/home/upul/tomcat
tomcat.server=localhost
tomcat.port=8080
tomcat.manager.url=http://${tomcat.server}:${tomcat.port}/manager
tomcat.username=openmrs
tomcat.password=openmrs
openmrs-runtime.properties:
### Database connection properties
connection.username=openmrs
connection.password=openmrs
connection.url=jdbc:mysql://localhost:3306/openmrs?autoReconnect=true
Ran ant install in OpenMRS project directory.
That’s it. http://localhost:8080/openmrs/ (admin/test)
I started out by following the instructions at http://openmrs.org/wiki/BIRT_ODA_Plugin_User_Guide in an attempt to setup and test the ODA with the Logic Web Service module.
In the OpenMRS Administration interface, it indicates to change module.allow_web_admin to true in the runtime properties in order to upload modules. After a rebuild, it still wouldn't let me upload the module. I went to the "Module Properties" page and it indicated that I needed to have module.allow_upload set to true. I set this in the runtime properties and did another rebuild. This still didn't work for me, so I just dropped the module in C:\Application Data\OpenMRS\modules and restarted. The module showed up in the "Manage Module" section so it looks like it worked.
I dropped the ODA jars in my BIRT installation and setup a new OpenMRS data source. As my mentor, Justin, suspected, the plugin did not work with the current version of the Logic Web Service and it threw an "Expected API functions do not respond correctly" Exception .
I checked out the OpenMRS ODA plugin code and saw that the failure was happening in the canAccessAPI() method of the Connection class. I added some Exception handling to log some info if the problem was an IOException, built and deployed the modified OpenMRS ODA, and restarted Eclipse. This new Exception handling showed me that the failure was happening when trying to access http://localhost:8080/openmrs/moduleServlet/logicws/api/getFilters. Accessing this in my browser gave me a NoSuchMethodError for "org.openmrs.api.context.Context.getReportService()Lorg/openmrs/reporting/ReportService". Tracking this down in the LWS code seems to point to the getAllPatientFilters method. I am wondering if I need to install the ReportService with my OpenMRS deployment?
Based on my conversations with Justin, he was expecting problems like this. So, looks like one of the first steps for this project will be to get a mock web service working so that the ODA development can commence. I was pointed to the following resources for information on modifying/creating a new LWS module:
- http://svn.openmrs.org/openmrs-modules/logicws/web/src/org/openmrs/module/logicws/web/
- http://openmrs.org/wiki/Module
- http://openmrs.org/wiki/Creating_Your_First_OpenMRS_Module
We also plan on nailing down more of the requirements for this project this week.
I haven't really blogged since I last announced that I was accepted into Google Summer of Code. I have a phone meeting with my mentor to bang out a project plan, I more or less have a general idea of how I want things to go, and he does too. Overall, it should be a very successful summer.
I've been enjoying the Community Bonding period. I have made a lot of friends. My fellow summer of coders are amazing. I planned a potential meet-up for google soc'ers from NY, NJ and CT (to be announced formally when it is more concrete).
Now, onto the fun part, telling you all about my project and how I plan on doing it. I'm gonna break this down. There's a lot of things that need to happen. A lot of data needs to be passed between the front and back ends.
Firstly, Direct Web Remoting (DWR) will be used to grab all the information the users enter into the form and forwards it to the backend whose job it is to generate the form, and then relay it back to the user showing them the result, then saving it to the system. DWR will also be used to provide some AJAX magic.
Then, after I have the data, I need to use reflection on the Form Model and based on the data type, using a templating engine, such as Velocity generate HTML form components.
String, etc: text field or text area; Using some Groovy ExpandoMetaClass magic will aid in deciding if we use a text field or text area.
List: drop-select select box
Boolean: radio or checkbox with some Groovy ExpandoMetaClass magic, i'll add a property which will help aid in deciding which one to use.
After the form is generated, a controller will be generated with default checks that the fields are not empty. This will also be done using Velocity for templating.
Once I have everything generated, it will be saved on the file system someplace with an associated XML file containing all metadata(title,version, description,etc) which will be read in by the system when showing which forms are in the system.
One week ago I knew nothing about Android. But with some tutorials and going thoughs, I have achieved to become a Beginner in Android development and its framework. Currently working on the idea to start off my Android Application Development career :).
Leslie Hawthorne posted an interested thread to the Google Summer of Code Student's List regarding the Bus Factor and the related Single point of failure.It presents a large problem in FOSS development.
She posed the following questions:
1) Do you see the bus factor as a problem in Open Source in general?
How about for your project?
2) Do you think that the bottlenecks result from having too few people
involved in a project? How do those bottlenecks get resolved if it is
hard to bring on newcomers due to bottlenecks?
3) What parallels can you draw between the concept of the bus factor,
socially speaking, and reliability engineering?
The best example of how it is a problem in open source can be explained by the saga of Hans Reiser, whom everybody knows killed his wife. He is the lead developer on ReiserFS. Now with him in prison, there is a good chance that ReiserFS will now slowly die due to his incarceration.
Imagine for a moment if you will, that Linus Torvalds got hit by a bus or something related to that. What would happen to the Linux Kernel? Well, it would probably not die, but it would be a HUGE hit since he is the one who leads the development. Would it die? Probably not. The Bus Factor for linux is pretty low.
As for my Summer of Code project, the Bus Factor would be high. Since I am the primary developer.
Applying this socially, every organization is ultimately led by the vision of one person, and usually there are safeties in place to prevent the Bus Factor from even becoming an issue. So this really can't be applied socially in my opinion. BUT if Google were eliminated, Summer of Code would cease to exist. So I suppose it could be applied.
The success and potential failure is usually dependent on one person (or a select few in some cases). Again, referencing Hans Reiser, his project will now most likely fail, may not; but the probability is high. This is the same across all industries.
Now, does anybody else have answers regarding this topic?
OpenMRS Implementers Meeting - 17-20 June 2008 – Elangeni Hotel, Durban, South Africa.
On behalf of the OpenMRS community and our funders, the Canadian International Development Research Centre (IDRC), the Rockefeller Foundation, the World Health Organization, the Fogarty International Centre, National Institutes of Health, USA, and the South African Medical Research Council we invite you to the OpenMRS Implementers Meeting from 17-20 June 2008 at the Elangeni Hotel, Durban, South Africa. The Meeting will be held in association with the biannual Health Informatics in South Africa Conference (www.hisa.co.za) and the Open Source Healthcare Alliance (Africa Chapter).
Prospective attendees should complete the registration form on the HISA web site (http://hisa.airwave.co.za/?display=registration&heading=Registration). Please enter the word `OpenMRS’ in the space reserved for the SAHIA Membership Number.
A satellite meeting devoted to open source mobile (PDA, Cell phone) health application development and mobile health data collection, hosted by the OpenROSA consortium, will be held on Monday 16 June 2008 at the same venue. A limited number of places are available and prospective attendees should contact the organizer, Dr Chris Seebregts (chris.seebregts-at-mrc.ac.za) or the meeting administrator, Anthea van Blerk (anthea.van.blerk-at-mrc.ac.za), directly, providing details of the applicant, organization, contact details and reason for wanting to attend.
The Full Programme for both events is still being finalized. However, an interim version is available on the conference web site and updates are published from time to time. If you would like to present an existing OpenMRS implementation or a requirement at the meeting, please contact the organizer, Dr Chris Seebregts (chris.seebregts-at-mrc.ac.za).
The meeting will include many of the core developers of OpenMRS and representatives from the main implementation sites and is a great opportunity to share experiences of implementing OpenMRS and participate in the design of future applications of the technology. The meeting will have significant technical content including a developer codefest and interoperability workshop that will include other open source health software. There will be ample opportunity for existing implementers to advance their knowledge of OpenMRS and learn advanced techniques as well as for new implementers to get a jump start on implementing OpenMRS.
Key topics to be covered include:
- Implementation of OpenMRS and HIV patient and treatment management systems in African developing countries
- New technical developments including OpenMRS at the hospital and enterprise level, interoperability with other health information system applications and mobile data collection systems
- Design and development of mobile data collection applications using OpenMRS and open source form editors
- OpenMRS technology training (concept dictionary development, installation and deployment, forms development etc)
Who should attend
- Existing and new implementers of OpenMRS and electronic medical record systems
- Developers of health data collection applications
- Mangers of health facilities with a requirement for data collection
- Open source developers
A limited amount of funding is available to assist with the travel and accommodation costs of existing or prospective OpenMRS implementers from Africa or other developing countries who do not have institutional funding. Please send details of the applicant, organization, contact details and a motivation for why you want to attend this meeting including details of any existing or planned OpenMRS Implementation and e-mail to Anthea van Blerk (anthea.van.blerk@mrc.ac.za).
Contact details
Anthea van Blerk
E-mail: anthea.van.blerk-at-mrc.ac.za
Tel: 27 21 938 0851
Dr Chris Seebregts
E-mail : chris.seebregts-at-mrc.ac.za
Tel: 27 21 938 0318
Biomedical Informatics Research Division, e-Health Research and Innovation Platform, Medical Research Council, Cape Town, South Africa
OpenMRS 1.3.0 Release Candidate 1 has been released. This release adds a number of new features and a few bug fixes. See the the release notes for more information. Before this is turned into an official release there will be some changes and clean up to the underlying API.
It can be downloaded from http://download.openmrs.org.







