A Django site.
May 11, 2008

Kevin Peters
KevinPeters
Google Summer of Code 2008 is about »
» Getting Familiar with BIRT ODA

To really get familiar with an Eclipse ODA, I decided to go through the three part "ODA Extensions and BIRT" series by Scott Rosenbaum and Jason Weathersby. It is not publicly linked but can be accessed here by doing some registration. The tutorial is spread across three parts in volume 8, 9, and 14 of the Eclipse magazine.

The end result of the ODA is the ability to use Google Spreadsheets as a data source. This is particularly appropriate for me because I am wrapping up a big networking project where we have been storing the simulation results in a Google Spreadsheet. The project involves the effects of node density on packet delivery ratio for three different wireless routing protocols.

Going through this ODA guide exposed me to Eclipse plugin and ODA concepts and terminology which will be helpful for this project. With respect to ODA, a simple but important point seems to be that of separating design and runtime for the ODA. The first part of the article mainly focuses on the runtime, the second part with the design time (GUI), and the third part with adding logging, optimization, data types, and parameters.

I think the most valuable lesson I learned was with troubleshooting an ODA. Setting up the Logger for the ODA was crucial to solving a snag I ran into. I had the piece of the ODA working that identifies all the user's spreadsheets and then allows you to drill down and select an individual sheet for the query. However, the data preview kept failing with a CannotExecuteStatement error. Well, needless to say, this generic error didn't help identify where the root cause of the problem was. Looking into what the ODA was logging out showed it was throwing a com.google.gdata.util.ServiceException exception. A few alterations to the ODA and I could see the entire stack indicating it was throwing a com.google.gdata.util.InvalidEntryException exception (extends ServiceException) which typically indicates a bad or malformed request. The final step was to log out the actual query that was being made and I could see that the problem was that the filterClause data set parameter was defaulting to 'dummy default value'. Changing this to null allowed the data preview to work. See the image above that shows the node density and delivery ratio data from my project spreadsheet.

The next thing I am going to do is get, build, and become familiar with the OpenMRS ODA. I've also started adding links that are useful to this project to the right navigation area of this blog.

May 8, 2008
» Patient Matching, The Second Step


I had another discussion last Tuesday with Shaun Grannis and James Egg and we think the discussion went really well. This time I didn’t ask too much silly questions hehe … We clarify some more on what we want to do with my first project. There are couple of issues that we focus on, such as how to to propagate the u values from the random sampling result to the EM analysis process.

After doing some digging, I found out that the u value is saved in the MatchingConfigRow object  in the non-agreement property. At the end of the random sampling calculation, this non-agreement  property will be assigned with the result of the calculation. Now we already have the u values from the random sampling process. But how do we propagate this u value to the EM analysis process. Dig some more then …

Well, apparently the EM analysis also take MatchingConfig object as the parameter which contains all above MatchingConfigRow. So, now we need to tell the EM analysis process to use this value when the user want to pick to use random sampling. We need to put a switch then to let know the EM analysis which value to be used, some default value or the values from the random sampling process.

Another thing that we discuss in the phone was connecting this process to the Record Linker GUI. Arghhh, I’m not good at GUI programming. I just don’t have the sense of arts to create a good GUI. But, I have to give it a shot hehe …

Some term explanation:

  • Record Linker is the name of the program that I will work on. One of the capability of the program is to combine records from different sources using statistical analysis on those records.
  • MatchingConfig is an object that will store the parameter that will be used for analyzing those records. There are lots of parameters that need to be define, for example where to get the records, what fields can be found in the records etc
  • MatchingConfigRow is an object that will store the options to match each column in the records. These parameters for example, the algorithm that will be used for the matching process. MatchingConfig object contains series of MatchingConfigRow denoting that a single records will contains many columns in it.
  • The random sampling and EM analyzing process will take this MatchingConfig object as their process parameters. This MatchingConfig will be shared by the two process to propagate the result from random sampling to EM analyzing.

Some fact that I learn:

  • When the records are coming from file, there are a few step that need to be done before the file can be analyzed. The file are chopped to only include fields that will be used in the analysis process. After the file is chopped, the file is sorted using the operating system built-in sort function on the blocking fields.
  • Let’s keep some fact for the upcoming posts hehe …

Any question? I hope I didn’t miss anything …

May 6, 2008

Robby O'Connor
RobbyOConnor
Rob's Musings is about »
» Posting code made easier (for everybody else reading your blog!)

I've noticed something while reading my daily blogs, a lot of code is just unreadable because most blog systems (blogger looking at you), screw up indentation, unless you wrap it in a pre tag (opening and closing are both required. This makes it readable for your readers! I've left comments on the blogs that didn't know this, and now they do.

This message is primarily for the Google Summer of Code students, but is useful to the programming community as a whole. When you post code, wrap it in a pre tag and be sure to close them when your code example is complete.

May 5, 2008

Kevin Peters
KevinPeters
Google Summer of Code 2008 is about »
» OpenMRS Fired Up and Running on the Laptop

I finally have a little breathing room from my huge school project and wanted to setup OpenMRS on my laptop. I basically followed the steps from http://openmrs.org/wiki/Step-by-Step_Installation_for_Developers and got things up and running. Basic stuff about the versions of the various software I setup:

  • Fresh install of Eclipse 3.3.2 and setup Subclipse 1.2.4. Running Java 1.6.0_05-b13 but set compliance level to 1.5.
  • Installed MySQL 5.0.51b and configured as a multifunctional db with 20 concurrent connections. Decided to make UTF8 the default character set.
  • Installed the MySQL GUI tools so I could easily look at the db model if required.
  • ant 1.7.0
  • Tomcat 6.0.16

To make sure things were all working correctly, I made my self a patient in the system:

Alright, back to running network simulations for school. Only 10 more days!

May 1, 2008

Mohammad Shahiduzzaman
Shahid
Life of a Maverick(!?) II is about »
» Me, Google Summer of Code 2008 and OpenMRS














I have been accepted in Google Summer of Code 2008 program for working in a project of OpenMRS. This summer I will be working to create a Patient Note Writer module which will allow to add rich text observations in appropriate places/pages of the OpenMRS application. OpenMRS is an open source medical record system framework for developing countries. Its always nice to get accepted in programs like summer of code and its more nice to work for an Organization with a great cause. Another coincidence is that by profession I also work in software development related to the health care domain. So I am expecting an exciting summer with OpenMRS. I am also hoping to see OpenMRS deployed in Bangladesh in the future.

April 30, 2008
» Patient Matching, The First Step


My first phone discussion about my project with my mentor, Shaun Grannis and James Egg, went well. Shaun and James explain to me about the project in details and I think the project is really interesting. I made a couple of stupid questions that is not related to the project though, sorry for that Shaun and James hehe …

My first project is to implement a fully functional random sample analyzer that calculates the rate of random agreement among corresponding pairs of records between two data sources. This rate value will replace the u rate, field agreement rate among pairs that are truly non-matched, that come from the Expectation Maximization analyzer. To get a better overview about linkage process and rationale behind the process you should read this publication about record linkage. If you want to know more about the Expectation Maximization algorithm you can read the wiki or some other journals and publication.

The process for generating u value for each column are as follows:

  • Generate two arrays of Record with the desired size of maximum sampling size
  • Take one Record from each array at a time and do the following:
    • For each demographic data in the Record, match their value using selected String matching algorithm (Jaro-Winkler, Levenshtein, Longest Common Substring or Exact Match)
    • If the value from both Record match each other, then increment match rate of current demographic data.
  • Do over above process until all record have been paired and examined
  • Calculate the u value for each demographic data and set the new u value to the MatchConfig object.

I still need to dig more about the first process and see how each datasource is read and converted into Record object. What do you think about the above process? Did I miss anything?

April 29, 2008

Nzeyimana Antoine
Nzeyi
Nzeyi's Weblog is about »
» OPENMRS


Welcome everybody to my GSoC OpenMRS project Blog.

OPENMRS

Really , my application was accepted and I am going to code this summer for the GSoC OpenMRS project . I am happy to work on this because the OpenMrs Api is done in Java which is my preferred programming language. Before I apply , I got information that there was a kind of software implemented by PIH that was going to be deployed in the clinics across my country . I found it was openMRS and I tried to make my application through GoSoc .When the results were announced on the Google Summer of Code web page, I was much happy to experience my first open Source project . During the contacts I made with my mentors , Maros and Christian ,I explained them what I was able to do with Java,I gave them a link to an applet in which I implemented an old African game “Igisoro” or “Omweso” at http://www.nzeyi.890m.com/nzeyiIgisoro.php . I was assigned to implement the OpenMRS Synchronization Admin UI . I felt the project was much challenging for me because synchronization was the newest feature in the system , so I have to read more on the former implementation.The main problem I faced was download the source code with Subversion because I was behind proxy settings inside the campus . I thought subversion doesn’t support proxy settings, so i also tried Subclipse and TornoiseSVN but the results were the same .Finally I downloaded the trunk code on an office computer where connection is through a DHCP server.The connection  was too slow so that it take me the hall night to get the openmrs/trunk code .I followed the installation instructions but there was a 404 error that my Tomcat couldn’t find openmrs while my deployment with ant was done successfully.That was an other major problem but I resolved it a little bit later using the ant commands ant -k clean and ant update .Until now , there is almost any other error with my installation. By the next step , I am going to read more about the code, I am reading the Javadoc of the core api and I need another about the Synchronization (if there is any) because I want to get more familiar with the original designs of the system.During the next 3 weeks I have sem 1 exams so I should be a little bit busy , but I will continue to plan for my project. Thanks !

April 28, 2008
» Homepage of deployed OpenMRS in my system


After a lot of struggle I have successfully deployed OpenMRS in my computer with the help of Kayiwa Daniel!!!

Homepage of deployed OpenMRS in my system

It all started at 10 pm yesterday. I read the installation guide for developers in OpenMRS site. And prepared myself for the deployment as a Knight prepare himself for the battle. Yeah of course I am the Knight in the shining golden armor. I decided to download every prerequisites even though I have them in my system already. At around 11 pm I queued everything for download. The list follows

  • JDK
  • Eclipse for JEE developers
  • Mysql
  • Tomcat
  • Tortoise SVN

Huh… I woke up early in the morning at 9 am(thats too early for me).. I decided to install fresh os on my secondary hard drive (160 GB). Yep done os has been installed and I installed all the prerequisites successfully and started my mission of deployment. I was doing the stuffs and I saw Kayiwa Daniel online at around 12.30 pm, that was 10 am in Daniel’s place. Discussed with him about today’s plan and started continuing my work. While I was wondering how everything is going so smooth without any problems, an error occurred in sql. Error 1451: cannot delete or update parent row. I was scared and for Daniel’s help. He immediately asked whether I have run the scripts properly or not. I said yes and he said me to try it with Mysql Manager GUI and actually I had Mysql command line tool. As he suggested I was downloading Mysql manager and the meanwhile I was trying to get everything right with command line itself. I grant the permission to the user I could insert into rows but could not delete… I was like ‘What the hell is going on???’… I lost my hope and tried with Mysql Manager and immediately everything worked. After this only I realized the importance of a mentor. Though this is a silly thing this thing would have taken me a longer time but fortunately I done everything successfully. Then I came to deployment in eclipse. Again I got struck at installing the build.xml in the ant console. Then I realized my mistake, I installed both JDK and JRE somehow unknowingly. So I uninstalled JRE alone and it needed the system to be restarted. I restarted the system and again I tried installing the build.xml in the ant console and got connection error. Then I checked everything and noticed my Tomcat was not working because it was set to the JRE path while installing. So I changed the path and started the server and installed the build.xml. Gotcha it was working and finally the build was created successfully :-). At last at 6 pm the mission has been accomplished successfully. It had taken me around 8 hours to do that this includes so many short naps, lunch and breakfast. I think I should speed up myself. Thats all for today folks. ta ta.

» upul


OpenMRS project is an open-source electronic medical record system — a system which keeps track of patient records. Mainly the project can be divided into the following layers. They can be identified with the three-tier architecture: data, logic and presentation tiers.

  • A flexible data model which holds the medical records. OpenMRS supersedes the work of AMRS project led by Regenstrief Institute.
  • An Application Programming Interface (API) which encapsulates the data model.
  • A Web application which represents the user interface to the whole system. It accesses the data model through the API layer.

The base project can be extended using OpenMRS modules to satisfy specific requirements. These modules plug in to the base system in two ways.

  • Aspect Oriented Programming (AOP) provides access to the events of the API calls.
  • Extension points provide access to the user interface layer which is similar to the Eclipse plug in extension points.

April 25, 2008

Saptarshi Purkayastha
SaptarshiPurkayastha
Sunny Talks Tech is about »
» Summer With OpenMRS... & that Life is not FREE

I haven't blogged for a few days and I haven't been able to follow the tech news and follow-up on emails. But today, I feel a bit relaxed and probably have something to share. I haven't talked about myself on this blog, but today may be a little bit of philosophy and personal adventure will come through this post.

I had applied to the Google Summer of Code 2008 for a summer job and I will be working with OpenMRS. To all my students, now you have to believe I'm a student... and Moksh guys/gals I'm still your "MEAN" software architect ;-). Just that along with my services at Moksh, I'll also be contributing code to open-source, and consider this post to be an introduction to OpenMRS...

OpenMRS is a free, open-source, Medical Records System targeted towards developing countries and mainly implemented in HIV/AIDS health-care. You can read the Overview of OpenMRS and I think the OpenMRS community has already done a decent job at its own introduction. Instead, I will talk to you why I'm contributing to OpenMRS.

I realized pretty early in my life that "Humans fear death". Although death is the only sure thing about life, we often forget its quintessential for life. But probably its the fear for suffering that's more deathly than death itself. I wanted to be a doctor after I passed out of high-school, just for the sake of treating people and making them realize the beauty of life. I dropped out to prepare for the State Medical entrance exams and it was in this year of self-turmoil that I learnt from a spiritual guru that we can change lives only through what we loved in life. I realized then, that I've loved computers and programming all my life and that my karma couldn't have been more appropriate to hug my love for computers as tightly as I could. In the following years, I learnt new paradigms of programming, new languages and better ways to write code. I'm still learning and pray to God that the learning never ends...

With the same love, I hope to contribute code to OpenMRS, in a pursuit that it helps change lives. My summer job is to make a "General Registration Module" and you can read the details here. My mentor for this project is Brian McKown and hopefully I'll follow his guidelines and be useful to the OpenMRS community. And along with the fun of contributing, Google pays me $4500 + certificate + Google swag for the 3-months (i.e. if I complete the project successfully) and $500 to my mentor.

I don't think the project I'm doing at OpenMRS is a life-changing contribution by itself, but I hope its a beginning. If we all do our minuscule contribution to a social cause, it can really change lives. We have taken life and what life has given us so lightly that we don't respect it. Our skills may be completely different, but its the desire that can help. Although OpenMRS is FREE, life is not FREE. Give back something to the world, which has given you the skills.

I will be regularly writing about my OpenMRS Module and OpenMRS in general. Please look into the project, contribute and offer advice to me on the project.