A Django site.
August 10, 2007

Desmond Elliott
Personal Blog
is about »
» Unusual Crashlog

Let me think, I was running Debian testing inside VMWare Fusion, and I had Firefox running with GMail in one tab and listening to music on The Hype Machine (which uses a Flash Player). Apple Hardware Test didn’t show up anything unusual.

Machnhine-check capaabliiis 0 0×0000000000000800
0 00000000806:
6 err6r-repo e rorbrepsting banks
thre holdbhreaholdersoresratus ror tsenatus pMesetch
ne-cheMk stuchsne0check00atus 0000000000004
000machin-000c5
k inrprogesstMCAarrrot-rep ItPng vgisaers:
Model: iMac5,1, BootROM IM51.0090.B03, 2 processors, Intel Core 2 Duo, 2.16 GHz, 1 GB
Graphics: ATI Radeon X1600, ATY,RadeonX1600, PCIe, 256 MB
Memory Module: BANK 0/DIMM0, 512 MB, DDR2 SDRAM, 667 MHz
Memory Module: BANK 1/DIMM1, 512 MB, DDR2 SDRAM, 667 MHz
AirPort: spairport_wireless_card_type_airport_extreme (0×14E4, 0×87), Broadcom BCM43xx 1.0 (4.80.79.1)
Bluetooth: Version 1.9.0f8, 2 service, 1 devices, 1 incoming serial ports
Network Service: AirPort, AirPort, en1
Serial ATA Device: WDC WD2500JS-40TGB0, 232.89 GB
Parallel ATA Device: MATSHITADVD-R UJ-85J, 4.95 GB
USB Device: Built-in iSight, Micron, Up to 480 Mb/sec, 500 mA
USB Device: Bluetooth USB Host Controller, Apple, Inc., Up to 12 Mb/sec, 500 mA
USB Device: IR Receiver, Apple Computer, Inc., Up to 12 Mb/sec, 500 mA
USB Device: Hub in Apple Pro Keyboard, Mitsumi Electric, Up to 12 Mb/sec, 500 mA
USB Device: Apple Optical USB Mouse, Primax Electronics, Up to 1.5 Mb/sec, 100 mA
USB Device: Apple Pro Keyboard, Mitsumi Electric, Up to 12 Mb/sec, 250 mA

July 26, 2007

Desmond Elliott
Personal Blog
is about »
» OpenMRS Week 8: Campus Party

Hola!

I have been at Campus Party in Valencia, Spain this week to talk to Spanish students about the Google Summer of Code.

Google Espana

OpenMRS

I must confess that I have not made as much progress this week as I would have liked to. Darius and I agreed an ambitious schedule like we always do and I am working really hard to meet my goals for this week.

I have nearly finished the 3rd draft of the drug order entry tool. Darius and I have agreed on a set of features that will make the interface feature complete for the first iteration that will be part of OpenMRS. One of the great things - really - is that this project grows in complexity every week and we we need to choose carefully what I will implement for this project. Only the essentials are being worked on with all of the corner case prescriptions being dealt with in the future.

Campus Party

I delivered a presentation last night about my experiences on the Google Summer of Code Program. I think about 20 people attended and only a few of them had prior experience with developing open source software so everybody there would have learned a lot from what I had to say.

I spoke about my work with the Mozilla Foundation and OpenMRS. It was awesome to be able to tell people about my project this year and people seemed impressed that you could work on such philanthropic projects.

Delivering my Summer of Code presentation

We went swimming in the Mediterranean Sea last night at 2am. I am having a truly fantastic time and would love to come back next year to talk about Summer of Code when I will hopefully be a Mentor!

Bunoas Diaz!

July 14, 2007

Desmond Elliott
Personal Blog
is about »
» OpenMRS Midterm: Mid-term review, Draft 2, VMWare vs 2.6.21, Goals Week 7

Mid-term review

The mid-term review is always a stressful time for Summer of Code students.We don’t know for sure whether we have done enough to ensure that our mentors will tick Yes to “Do you think this student deserves to receive the 2000 USD payment?” This leads to a flurry of activity from the students and increases the workload for mentors and administrators.

The Google Summer of Code team have opened up the process here which makes it easier for a student to guess what their mentor is likely to say about them. I really appreciate that the process is more open than it was last year and I am sure that other students are too. This should help students determine - during the course of their project - whether their contributions and effort are around the standard that should be expected.

I do not know what has been said about me and there is no way for a student to find out, short of asking Hamish and Darius what they wrote on the survey. The conversations that I have had recently have not caused me any significant alarm but you never do know!

To sum up what I wrote in my review: I interact with both of my mentors regularly through Skype and IM; I blog whenever I feel I have something significant worth saying - sorry to those who expect us to blog more than once a week… I just feel that distracts from what I am trying to achieve; I feel that the quality of the interactions with my mentors are what I would expect; I love working with the OpenMRS community and feel quite comfortable with the other students and mentors; I was not working to the best of my ability for a period of time due to de-motivation but I feel that has now passed and I am now progressing as I would expect to.

Draft 2

I have been working on the second draft of the drug order entry tool. The aim for this draft was to include an auto-completing search box; auto-filling form fields for commonly prescribed drugs; and to experiment with coloured highlighting of information.

As a side-effect I have spent a lot of this week experimenting with different ways to identify unique or partially unique data in JavaScript. Using classes to identify partially unique data - for example, a group of rows in a table that have a certain property associated with them - appears to be efficient. I am not sure if it is the correct way to achieve this or whether I should be looking at using exact or partial attribute value selectors.

I am quite aware that my coding patterns and style is not yet ideal for JavaScript and HTML programming but I feel that I am learning more about the approaches that I should be using and their is a wealth of information available on the internet.

Autofilling and warning

The first image shows the JavaScript pop-up calendar that we have been using since draft 1. This is licensed under the GPL and it comes built in with a feature that autocompletes the end date field based on the entry in the start date field. A little bit of CSS hacking should result in a matching visual style with the rest of the system and a really flexible calendar.

The warning label which is only displayed if the drug is known to be harmful to the patient has been introduced. I am not sure about the placement or the strength of the colour so I will be experimenting with it.

Autocomplete search box

This image shows the Creative Commons 2.0 licensed auto-complete text box in use. The Prescription History table uses a DHTML animation to colour the rows in the table when the status of a prescription changes. I think it is a really good way of conveying information to a physician but I am also aware that relying on colour is not a good idea because it could make the tool less useful for colour-blind sufferers.

VMWare vs 2.6.21

I use VMWare Fusion which recently reached RC1. I have always been pleased with the product but I recently came across a major problem with trying to use the latest Linux kernel in Debian testing - 2.6.21-5. I cannot install the VMWare Tools due to a problem with the kernel header files I have supplied and the currently running kernel. Perhaps the most recent VMWare Tools - 50460 - are not compatible with 2.6.21.

None of the pre-built vmmemctl modules for VMware Tools is suitable for your
running kernel. Do you want this program to try to build the vmmemctl module
for your system (you need to have a C compiler installed on your system)?
[yes]

Using compiler “/usr/bin/gcc”. Use environment variable CC to override

What is the location of the directory of C header files that match your running
kernel? [/lib/modules/2.6.21-2-686/build/include] /usr/src/linux-headers-2.6.21-2-686/include

Extracting the sources of the vmmemctl module.

Building the vmmemctl module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmemctl-only’
make -C /usr/src/linux-headers-2.6.21-2-686/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.21-2-686′
CC [M] /tmp/vmware-config0/vmmemctl-only/os.o
SHIPPED /tmp/vmware-config0/vmmemctl-only/vmmemctl1.o
LD [M] /tmp/vmware-config0/vmmemctl-only/vmmemctl.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/vmware-config0/vmmemctl-only/vmmemctl.mod.o
LD [M] /tmp/vmware-config0/vmmemctl-only/vmmemctl.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.21-2-686′
cp -f vmmemctl.ko ./../vmmemctl.o
make: Leaving directory `/tmp/vmware-config0/vmmemctl-only’
sh: line 1: 16972 Segmentation fault ‘insmod’ -p ‘/tmp/vmware-config0/vmmemctl.o’ >/dev/null 2>&1
Unable to make a vmmemctl module that can be loaded in the running kernel:
There is probably a slight difference in the kernel configuration between the
set of C header files you specified and your running kernel. You may want to
rebuild a kernel based on that directory, or specify another directory.

The memory manager driver (vmmemctl module) is used by VMware host software to
efficiently reclaim memory from a virtual machine.
If the driver is not available, VMware host software may instead need to swap
guest memory to disk, which may reduce performance.
The rest of the software provided by VMware Tools is designed to work
independently of this feature.
If you want the memory management feature, you can install the driver by
running vmware-config-tools.pl again after making sure that gcc, binutils, make
and the kernel sources for your running kernel are installed on your machine.
These packages are available on your distribution’s installation CD.
[ Press Enter key to continue ]

Until I can find a workaround to this problem I can either use a VM running at my preferred resolution with drag and drop of files enabled but no mouse-wheel scrolling or I can use a VM running in a 1024 x 768 screen which is extremely painful! Answers on the back of a postcard to the comments, please!

Goals Week 7

  • Agree where to take the mock from here with Darius and Hamish - I am actually in the process of doing that today (yes, we are working on a Saturday!)
  • Learn how to use the Dojo tools to allow for integration into the OpenMRS system
  • Prepare my Google Summer of Code presentation for Campus Party in Valencia

July 3, 2007

Desmond Elliott
Personal Blog
is about »
» OpenMRS Week 3, 4, 5: Apologies, DebConf 7, Unrealistic Aims, Interesting Comparisons, Podcast, Draft 1, Campus Party, Goals for Week 6

I promise that this will be the longest title that I ever use for a post. What a disaster!

Apologies

I must start by apologising for not updating my blog on a weekly basis. Things have been rather hectic recently and I have not found the time to write. Furthermore, I like to make my posts worthwhile so I quite like collecting my thoughts over the period of a week.

DebConf 7

DebConf7 was held in Edinburgh this year and I was lucky enough to attend for 2 days. I attended Tom Marble’s OpenJDK Roadmap BoF and Andreas Tille’s Leading an Open Source Project BoF and really enjoyed both events. Tom spoke about Sun’s goal over the next 12 months and the hope that OpenJDK will become the de-facto Java provider in Debian. Andreas spoke about his experience with Debian-Med and held an open discussion about the best ways to get a community to focus on achieving a goal. I also attended the ceilidh and then went on to an unused University building with an organ. We were treated to some harrowing music accompanied by a violist and a flautist. It was one of the most surreal occasions that I have ever been a part of and I wish I had my camera with me.

Unrealistic Aims

As a newcomer to web development it became quite obvious that what I was attempting to achieve in implementing my mock was well beyond my technical ability. I re-assigned my priorities for the 1st draft of my work and felt more comfortable with what I wanted to achieve.

Interesting Comparisons

During the first half of Summer of Code I have been able to draw some interesting comparisons between my experience with Mozilla last year and my experience with OpenMRS this year.

OpenMRS is a young project and access to people who have deep knowledge in the topic that you want to talk about is difficult; Mozilla is a mature project and there are many people who have a considerable amount of experience who can help you. The great thing about Mozilla is that between most of the people who you find available you are almost bound to find somebody who knows how to solve your problem.

I had regular weekly meetings at the same time on the same day using the same communication medium with my mentor last year with Mozilla; my mentor meetings this year with OpenMRS seem a less predictable and I find it difficult to not know exactly when I will be reporting my progress and receiving feedback on what my mentor thinks is the best direction to take now. I am speculating that this is partly my fault and partly the fault of my mentors - we should both be pushing to have more definite times to communicate.

Podcast

Yes, it is true. I recorded a podcast with Miss Leslie Hawthorn at the Googleplex when I was out in California in May. I struggled to listen to it first time around because I was a bit taken aback by hearing my own voice. A few beers loosened me up and I quite enjoyed reminiscing about my day with Leslie et al. I owe her equally excellent hospitality the next time she makes her way to the UK.

Draft 1

I have finished and shared Draft 1 of my work with my mentor today.

Draft 1 Screenshot

I do not intend to post an interactive copy online at the moment because I am more than aware of the impact that negative feedback can have on unfinished work.

Campus Party

I have been invited to attend Campus Party in Valencia and deliver a presentation about Summer of Code. This will be the 3rd time that I have delivered a presentation about Summer of Code and I’m starting to think that I should have a rider or demand a fee or something ;-)

Goals for Week 6

  • Work with my mentor to refine the interaction usability of the Drug Order Entry Tool that I have been working on.
  • Document purchasing and consuming a deep-fried Mars Bar for the entertainment (horror?) of my fellow OpenMRS SoCers.
  • Prepare for the mid-term evaluation

June 13, 2007

Desmond Elliott
Personal Blog
is about »
» OpenMRS Week 2: Books, Glorious Books!; Different Development Environment; Storyboard Mocks and Design Principles; Goals For Week 3

This week has been particularly challenging for non-technical reasons.

Books, Glorious Books!

I’ve purchased JavaScript: The Definitive Guide (5th Edition), HTML and XHTML: The Definitive Guide (6th Edition), and CSS: The Definitive Guide (3rd Edition) to help me out when I run into a few problems. My HTML / CSS / JavaScript skills are certainly in need of a brushing up and I find having reference books works out much better than using online resources.

Different Development Environment

Debian Stable felt a little but sluggish in VMware Fusion and there was no scrollwheel support for my mouse. I decided to move to Ubuntu which is based on an extremely similar packaging system so the transition was painless. I am using Ubuntu 7.04 Fesity and the following command issued in a Terminal window installs almost everything required:

sudo apt-get install subversion eclipse sun-java5-jdk mysql-server

I have experienced problems with using the Debian and Ubuntu packaged Tomcat 5.5 Server which is a reported bug here and here. In the interim I am using Tomcat 5.5.23 “Core” as downloaded from The Apache Tomcat website. An interesting footnote is that /usr/bin/java points to the GNU java and /usr/bin/javac points to the Sun javac… how peculiar.

Storyboard Mocks and Design Principles

Hamish and Darius have sent a wealth of information for me to read over to get a feeling for prior work in this field and I have also been promised a few studies showing drug order entry systems that really did work and some that really didn’t work. I have tried to design the storyboard mockup of the interface that I want to implement based around the 3 fundamental principles of great design: learnability, flexibility, robustness.

If an interface is said to be learnable then it allows novice users to understand how to use the system and then how to attain a maximal level of performance. A flexible interface refers to the multiple ways in which the end-user and system can exchange information. A robust interface covers the features of an interface that support the successful achievement and assessment of user goals.

There are some fantastic books available to learn more about the academic and real-world context of how to undertake a design project. I have also pegged The Design of Everyday Things as a book that I need to get a copy of sooner rather than later.

When thinking about which principles are most important for the design of the drug order entry interface I need to consider who is the intended user of the system. The intended user of the system is a physician and as this book teaches us it is important to actually name the intended user so I am going to go for Hamish since he is my mentor and he is a physician. It is said to be important because it creates a real persona of the person who will be using the software instead of “the user”. When you are thinking about “the user” it can be too easy to slip back into thinking that your workflow is the same as the workflow of other people.

Hamish is a physician working in Lesotho at an OpenMRS onsite installation. There are about 48,000 patients who visit this clinic and there is a team of 5 physicians. Each of them see at least 48 patients per day and they work long hours. It doesn’t really matter that these numbers are not accurate — it helps us to build up a picture of who “the user” is. Hamish considers himself to be a relative expert at using computer systems — he always has the latest technology and he always uses the latest, bleeding-edge software. He loves tinkering with the hardware inside his computer and enjoys tweaking out every percent of performance. Darius - who is also a physician onsite - finds computers annoying and obtrusive and he just about manages to bear using the computer for e-mail, word processing, and internet access.

The interface needs to be easily learnable so that Darius’ productivity is not hampered. I should not make any assumptions about who is using the system and what their level of technical expertise is. A closer look at the Learnability principles reveals the following high-level requirements: Hamish needs to be able to determine the effect of a future action based on past interaction history; Hamish needs to be able to assess the effect of past actions on the current state of the interface; Hamish would like his real-world domain knowledge to apply to this interface.

Storyboard 1 - Initial View

 

Storyboard 3 - Using the commonly used order shortcut

 

Storyboard 2 - Using the Search function

I’ll speak more about the flexibility principles next week and the reasons that I am not adhering quite so much to what they suggest for this project.

Goals for Week 3

Continue to work on the storyboards with Hamish to provide an initial overview of what we hope the final result of this project will look like.

Start coding an independent interactive mock of the agreed storyboard to provide a real feel for how the drug order entry interface could work.

Confirm the ideal goals for the mid-term evaluation with Hamish and Darius.

June 6, 2007

Desmond Elliott
Personal Blog
is about »
» OpenMRS Week 1: About Partners In Health, About My Project, About My Build Environment, Goals For Week 2

I made contact with my mentors - Hamish and Darius through Skype last Tuesday and I believe this is the medium that we will be using for the duration of the project. I also spoke with some of the other key players in the team including somebody via satellite internet connection in Lesotho. Please accept my apologies for not remembering everybody’s name — there were quite a lot of you!

About Partners In Health

To save regurgitating all of what you can read on the Partners in Health website, the main goal of PiH is to help provide free health care and education for those who need it the most. The website provides a wealth of information about what PiH are doing at their different installations and a suggets a lot of recommended reading. I have chosen to borrow a copy of Health and Human Rights from my local library to help provide me with a well rounded knowledge base.

Hamish and Darius have sent me documents and storyboard mock-ups to help me get started with my project. I have been reading academic papers on the effectiveness of online order entry systems in Peru; a system that is in use in the Phillipines; and we are trying to arrange a vist to shadow-study what works and what doesn’t work in a commercial MRS in Edinburgh.

About My Project

I am working with OpenMRS on Drug Order Entry Tools this summer as part of the Google Summer of Code Program. A paper-and-pen based system for drug ordering requires the prescribing doctor to write down the prescrption which would then be passed onto a nurse who would then pass the prescription onto a pharmacist. This was - and still is - an error-prone process. The goal of this project is to refine the current drug order entry tool in OpenMRS to increase usability and flexibility. It should be easy for the doctor to select commonly used drug regimens and order sets to help minimize the intercation but it should also be possible for the doctor to really drill down into the details of every aspect of the drug order.

I am currently working on some of my own storyboard mockups based on what Hamish and Darius have provided me with and I am also working on a system architecture. I plan for these to be available by the end of this week for consultation by my mentors and people working in the field.

About My Build Environment

During my first developer’s conference call I asked what the specification were of the machines used on site. I was told that they are using “modern computers” so I have decided to use a VMWare virtualization setup to provide an instantly-recoverable and portable development environment.

I am using Debian stable with VMWare tools installed. I have installed the following packages for my setup: mysql-server5.0, sun-java-jdk (non-free), subversion 1.4.2, eclipse3.2, build-essential, linux-headers-2.6.18, and tomcat5.5 - which I subsequently removed because I could not figure out who to make the pre-packaged tomcat service work. Instead I am using the Tomcat 5.5 release from the website which I plan to run as a level 2 service.

Tomcat’s configuration files can be found in $CATALINA_HOME/conf, the Tomcat startup and shutdown scripts can be found in $CATALINA_HOME/bin/; JAVA_HOME needs to be bound to /usr/lib/jvm/java-1.5.0-sun-1.5.0.10/

I have decided to not go with using the “test” username and “test” password for my installation - just in the interests of good practice, and I don’t want to have a running tomcat server with that kind of authentication! You can edit these presets in properties.xml but be sure that your tomcat-users.conf stipulates that you expect this user to connect.

Executing ant install from inside my alpha directory successfully builds the OpenMRS application and I can access it by loading my favourite web-browser and directing it to http://localhost:8080/openmrs. I found out that there are 2 patients pre-loaded into the system under the names of “John Patient” and “Horatio Hornblower”

Goals For Week 2

Present some storyboards to Hamish and Darius to let them know what I am thinking about this project. I believe that they intend to show these to physicians.

Write a relatively detailed installation guide for the setup that I am using to help others who are interested in using Debian as a development / deployment environment.

Familiarise myself with the areas of the system that I will be working on and gain an understanding of how and where my project fits into the system architecture.

Buy some Javascript / AJAX books to help me along the way.