Wednesday, December 30, 2009

Google Voice tips & tricks: Send free international text messages!

Just throwing this out there in case anybody wants it.

You can SMS an international number such as one from the UK to their UK number (+447xxx) using Google Voice, then once they reply you get a special Google Voice number(406-###-####) and once you get this you can SMS them as you would any number and it will relay through google voice at no cost to you!

Caveat: Calling this 406 number *WILL* cost you at the Google Voice rate for calling the UK (or whatever country you are SMS'ing to).

Happy texting!

Wednesday, August 19, 2009

Google Summer of Code 2009 wrap-up

Google Summer of Code 2009 officially ended on August 17, 2009 at 19:00 UTC (12:00 PDT). I had an amazing time this summer. While stressful at times, it was well worth it.

I would like to thank the following people for my success this summer:

My mentor Mike Seaton for helping me throughout various misunderstandings surrounding the project's requirements. I probably made him work more than he had to. I attribute the success this summer to that one factor. This man is quite brilliant and knows his stuff.

My backup mentor Darius Jazayeri, for stepping in and helping at times and providing guidance when necessary. He is truly a brilliant man.

Ben Wolfe for answering any questions I had. He didn't have to help, but he did. I am very grateful.

Paul Biondich and Burke Mamlin for believing in me and giving me a second chance this summer. Did I mention these guys are doctors? Burke, an internist and Paul a pediatrician. Sorry for clumping you guys together.

Finally, without Leslie Hawthorn, Cat Allman, and Ellen Ko from Google, this program would not exist. They deserve a huge thank you. These three women are amazing. Thank you so much!!

Monday, August 17, 2009

Facility Data Module User Guide

The Facility Data Module is a tool to collect non-patient centric aggregate data for reporting to external funding sources.

To download it use the svn version: do a checkout:
svn co

To create a report:

1) Create all your questions

2) Create all of your form sections

3) Finally add all the sections to your form schema

I'll go into detail how to do each:

Creating/Managing questions

From the admin screen: select "Manage Questions."

Now, once on the question management page you will see a list of existing questions. under the "Action" column is a garbage can image -- this deletes the question from the database and is irreversible.

Once created, a question's data type cannot be changed, this is due to the design.

Now, once on the "Add New Question" page there are several properties. Most of which are required.

1) name - required
2) question data type - required
3) aggregation method - required
4) description - optional

Question Data Types are as follows:

NumericQuestion - a question that has a numeric answer (optionally has a min/max value and whether or not to allow decimal values.) -- these fields show only if you select "NumericQuestion."

BooleanCodedQuestion - a coded question with 3 answers: "t","f","not applicable"

StockQuestion - a question that tracks stock of vaccines, supplies, etc. This is a special coded question with the following answers: "not_stocked_out", "stocked_out", "expired", "not_applicable" and the comments field used to track the numbers of days stocked out and reason.

To add more questions after you save a question -- click "Add New Question" link above the form box.

Creating/Managing Form Sections

Once you have created all of your questions -- it's time to organize them into sections. You can easily navigate to the "Manage Form Sections" page from the "Add New Question" page.

Now, once on the section management page -- you'll see a list of all sections saved and the associated schema. Next, you'll want to click "Add New Form Section"

Now, once on the add questions page: you'll enter:

1) Display Name - required
2) Description - optional
3) Form Schema -optional (can be deferred)

Mentioned seperately is questions you're adding to the section (these are referred to as form questions by the system).
1) Name
2) Question Number
3) Question
4) Description
To add a question: click "Add New Question" to remove a question, click the "Remove" button next to the button (see image after the one below).

The section below is a section that was defined programmatically in a mock schema that was designed and used throughout the summer.
As you can see, there is a "Remove" button next to each Form Question in the section.

Creating/Managing Form Schemas

From the Section creation page: click "Manage Form Schemas"

After clicking that link you will see the page below. It allows you to delete a schema, and information relevant to te form schema.

Now, after clicking the "Add New Form Schema" link you will see the page below. The following information is needed:
1) Display Name - required
2) Data Entry Frequency -required
3) Validity Period -optional
4) Description - optional
5) Sections specified in this form schema (and the ordering) -- just drag them into the left-side of the pane.

Now, for the shortcomings:

  • Ordering of questions cannot be changed once saved

  • Sections cannot be associated with two schemas at once.

Viewing and Entering Data

Will be completed at a later date.

Tuesday, August 4, 2009

Project Update

So we're in the home stretch folks! 13 days to go until the "Pencils Down" date! Hope everybody's project is going well. Here's how mine is going:
  • Reports can be saved and reloaded (with all relevant data filled out (fields etc -- reports can be viewed in editable or "view only" mode).
  • Each component of the report (Questions, Form Questions(allows a question to exist on multiple reports), and Sections can be created in isolation
  • A page to view the status of a report (complete, partially complete or incomplete) is done for reports that are to be entered daily in a monthly calendar view; monthly still needs to be completed.
Overall, i feel the project is progressing well -- I expect to finish either on time, or early. (Let's hope for early!)


Thursday, July 16, 2009

Midterm Progress Update

Progress has been slow and steady. I'm on track to finish however! What's done:

  • Reports can be entered, saved, and the values entered will be reloaded into the proper form fields. If edited and if the values have changed -- the old values are voided and new values are saved (retaining the old values in the database for auditing purposes).
What's left:
  • Management pages See this and this for what it will ultimately look like.
  • Still need to get the "View Only" pages working; in theory it should work. The "View Only" will be the answers but no form fields present.
  • The UI to create the report, questions, sections, etc.
Ultimately, I think this shouldn't be too bad.

Sunday, June 21, 2009

The overdue progress report

Apologies for not blogging as much as I should. I've focused on getting what needed to be done, done.

Tasks that have been completed thus far with a target milestone of using a mock Form, enable persistence of Questions and Values to the database:

  • Mock out a report form using the domain classes
  • Using the mocked up schema, generate a simple report form
  • Design the SQL Schema (for just FacilityDataValue and FacilityDataQuestion)
  • Write Hibernate Mapping files (for just FacilityDataValue and FacilityDataQuestion)
  • Write Data Access layer (for FacilityDataValue and FacilityDataQuestion)
  • Write Service layer (for FacilityDataValue and FacilityDataQuestion)
  • Refactor the rendering logic to use the JSP and write EL function(s) to check types using instanceof.
  • Allow a simple the mocked form from Week 1 to save the question answers.

Tasks that are are in progress, soon to be finished with a target milestone of removing the code used to mock up everything from the first few weeks; ability to use the saved schemas for rendering the report form:

  • Design SQL Schema for the rest of the domain classes
  • Write mappings for the rest of the domain classes
  • Support loading the previously saved values for a form/startdate/enddate/location into a page for viewing or editing
  • Write methods to save the rest of the domain classes in the data access layer
  • Write methods to save the rest of the domain in the service layer

Now that I have summarized work completed and in progress, let's explain the overall design:

  1. FacilityDataFormSchema serves as the overall representation of the report form in the system.
  2. FacilityDataFormSection is simply that, sections on the form, e.g., monitoring equipment status, stock status of vaccinations, number of people vaccinated, etc.
  3. FacilityDataFormQuestion holds metadata regarding a question.
  4. FacilityDataQuestion is the question itself; it specifies the datatype; it is subclassed for each question datatype; if not subclassed, then the question is considered to be "freetext" -- in other words: just simply a text-based question.
    1. CodedQuestion is a question that has a coded answer. This too is subclassed for each coded question datatype.
      1. StockQuestion is exactly as the name says, to track stock of items such as vaccinations. The coded answers are: "not_stocked_out","stocked_out","expired","not_applicable"
      2. BooleanCodedQuestion is a simple "yes","no","not applicable" type of thing; e.g., "Was there mobile clinic today?"
    2. NumericQuestion is a question which has a numeric answer, e.g., "Number of Adults Vaccinated."
  5. FacilityDataValue is what holds the values entered in the report forms for each question.
  6. FacilityDataReportFormData is a non-persisted class used for retrieving the answers for a specific report for a specified period.

Hopefully this makes up for my lack of updates.

Friday, June 12, 2009

The long overdue progress report

This is gonna be short, sweet and to the point:

Week 1:
  1. I wrote a mock report form with 10 questions (screenshots in a later post)
  2. I then wrote up some code to render it approriately for each question type.

Week 2 (still ongoing):
  1. Designed the SQL schema, and wrote the service/database layer classes for 2 of the classes.
  2. Wrote in the functionality to save the report data to the database.

Will explain the design at a later date.


Tuesday, April 21, 2009

Open Everything NYC Recap

I attended Open Everything NYC on Saturday. For those who do not know, Open Everything is an "un-conference" which is a conference where the participants run the show. There are several open sessions, and a few keynotes.

Some of the open session topics were on education, Open Source Software licensing, and even relationships! The Open Relationships talk was really interesting. I find it amusing how many people wind up creating alter egos to prevent employers from finding out things about them.

(Some of) the keynote speakers were amazing:

Schuyler Erle, a guy who wrote some code for UNICEF, utilized text messaging as a means to track distribution of Bed Nets to prevent malaria via a web application, among other things. If you want to research this it's all on the wiki.

Robert Steele, a former spy (yes a spy!) whose talk in my opinion was pretty much utterly useless! I saw diagrams which were well.. horrid. His talk had ZERO flow planning, it seemed to be a bunch of conspiracies, one after the other. Let alone the fact the guy is abrasive. After his talk, I went up to him to let him know that his site (which he linked in his talk), was down; his response was condescending and RUDE. I turned to some people behind me as I was leaving, and said that there was no way I could have summarized anything that guy said (I was writing notes for the wiki); they agreed. The consensus on Robert Steele was pretty universal: Conspiracy nutjob.

The final speaker, Leslie Hawthorne, a woman I have a lot of respect for gave a talk that was short, sweet, and to the point. She disussed how open source software development can be used in a common sense way to solve complex problems we face. OpenMRS, solving the problem of the HIV/AIDS crisis in the developing world; Sahana for the disaster relief management in areas devastated by floods and such. Amazing talk! Best part, she did not use any slides!

John Britton, the conference organizer gave the closing talk, and he took notes as to what should change next time. Longer open sessions etc came up. Additionally, we found out: it's possible to do this ongoing, I'd REALLY enjoy that. I met some freaking awesome people.

We were to screen RIP: "A REMIX MANIFESTO" at McFaddens Bar and Pub by the UN, but the owner didn't allow us to do it; which was stupid. We wound up sitting around half price drinks/appetizers and had some good conversations and fun.

Overall, I had fun and would do it again. I went into this not knowing what to expect.

Monday, April 20, 2009

Accepted into Google Summer of Code 2009

For the second year in a row, I was accepted into Google Summer of Code!!! I will be working with OpenMRS on the Facility Data Module.

My project will focus on developing tools for collecting and ultimately generating reports for aggregate data from external sources.

Sunday, February 8, 2009

Groovy Forms Module is NOT dead

Hey folks!

I'm still alive and not dead. The Groovy Forms Module is not a dead project, and WILL be finished. I plan on getting work started back up on it soonish. School is back in session for me. I'm sorry for the long delay.

That is all.