Thursday, December 30, 2010

Osirix XML-RPC

Found this screencast today which show how Osirix can be remote controlled through XML-RPC.

This should make it possible to do some interaction between GNUmed and Osirix. Since more and more hospitals hand Dicom CDs to doctors it might make sense to have GNUmed remote control Osirix to open and display the studies.

There even seems to be an XML-RPC test tool available at ClubPacs Western Michigan

Tuesday, December 28, 2010

GNUmed 0.8.5 for Mac OSX

Occasionally we have access to a Mac. Make that Mac OS 10.4 (quite dated). Turns out the work put in to make GNUmed 0.7.6 run on Mac was worth the effort. I was able to run an unaltered GNUmed 0.8.5 without any lock ups.

Expecting a user to run GNUmed from a tarball is not really state of the art. The last Mac bundle we have ships GNUmed 0.5 and does not really reflect the current feature set.

Meanwhile we have packaged GNUmed 0.8.5. Please download and report success or failure.

Another solution would be to work on the MacPorts port of GNUmed. I am not aware of any effort. Given the current state of affairs it would be safe to say that the quickest way to run GNUmed on a Mac would be to use the tarball and run this.

Any reports on success or failure are appreciated. You can use the bug tracker to send feedback.

Best regards,
GNUmed team

GNUmed server back online

Following up on the server outage we are now back up and running.

The server hardware has been replaced. No data was lost.

Go visit the GNUmed website at

Best regards,
GNUmed team

Sunday, December 19, 2010

GNUmed project offline - until new server is ready

Hi all,

The server hardware (not the harddrives) died on us. The server is hosted by Hetzner which has been kind enough to plug the harddrives in a new server and provide a rescue shell. We do have all data so no harm done. Sourcecode is hosted offsite so no loss there. The wiki and some downloads are hosted on the failed server. We are working hard to restore the site on a new server.


Sourcecode is at
Debian packages can be obtained via Debian servers
Ubuntu packages can be obtained via Ubuntu GNUmed PPA
Windows packages will be back after the server is back up

Best regards,
Sebastian Hilbert
GNUmed team

Monday, November 08, 2010

GNUmed deployment in Yei Sudan

Hi all,

Imagine my surprise when I was contacted just 4 days ago by someone who was
trying to deploy GNUmed in Yei Sudan.
This work is being done for Matthias Rossow, M.D.  and is one of your
(German) countrymen.  Matthias has done an unbelievable job putting together a
medical clinic, and is one of 3 physicians in Yei Sudan.  He has some
community health works that function nearly as physicians, and your EMR
(GNUmed) will allow him to monitor and communicate with these workers.  I
(Greg) can't take credit for the idea, but Matthias has asked me to set things

It would be better for his operation to be able to function via the server so
everyone can have access.  All of the Microsoft machines are laptops.

I'm impressed with what you have developed,and am going to install it in our
office when I get back to Texas.

This person was trying to set up a server on openSUSE 11.1 and clients on
Windows laptops.

The GNUmed log files have proven very valuable.

E-Mailing back and forth for 4 days led to a working deployment. Just a few
hours before the guy installing it had to head home to Texas we received the
following message.

We have it running.  Wish you were here, I would give you a cigar. Thank you
very much for all of your assistance!!!!

Here are just a few problems they face down there:

Internet speed is 300baud per second. there is just no way to download large
files. There is just no way to connect to a webbased server hosted in some
cloud in Europe or the US.

Electricity is shut show every night and available for a few hours during
the day

I wonder what the climate does to the hardware


Saturday, November 06, 2010

GNUmed 0.8.4 available for openSUSE and more

GNUmed 0.8.4 has been made available for openSUSE , CentOS, Fedora, Mandriva, RHEL, SLE.
Get it via openSUSE build service or from


Monday, September 27, 2010

GNUmed EMR available for Ubuntu

It has taken a while but now it is out. GNUmed 0.8 series is now available as Ubuntu packages. This has been made possible by the Debian med team. GNUmed 0.8 is a major feature update of the medical record application.

Head over to our wiki at and install it.

Sunday, September 12, 2010

GNUmed in Debian and Ubuntu - when software becomes critical to your health

Both Debian and Ubuntu are about to release now versions of their respective distributions. Both include GNUmed, an electronic medical record. Previous releases never really shiped a fitting candidate for people to try out. This time we opted to provide a well tested version. But it turns out that a bug was found that had the potential to cause some serious medical trouble such as allergic reactions.

At this point both distributions were frozen to be further stabilized and no updates are allowed during that period to avoid introducing new bugs. However because of the severity of the problem we asked both the Debian people and the Ubuntu people to make and exception and include a fixed version of GNUmed.

Both camps agreed that this was the best option and included an updated version of GNUmed into their software repositories. Well done.

Sebastian Hilbert, MD

Friday, August 27, 2010

Thera-Pi - Software für die Physiotherapiepraxis

Ich hatte ja schon einmal darüber berichtet. Thera-pi ist eine Open Source Software für Physiotherapiepraxen. Mehrfach wurde versucht das Projekt mittels Hackerangriffen zu stoppen. Aber nun ist es voll einsatzfähig.

Herzlichen Glückwunsch.

Schauen Sie sich Thera-Pi an unter

GNUmed 0.8.0 released

Hello GNUmed community !

I am pleased to announce the immediate availability of
GNUmed 0.8.0. This release comes with the following new

* Client *

NEW: Add button to lookup drug on to current substances
NEW: hook: "after_soap_modified"
NEW: placeholder: "current_meds_table::latex"
NEW: placeholder: "current_meds_notes::latex"
NEW: placeholder: "lab_table::latex"
NEW: placeholder: "latest_vaccs_table::latex"
NEW: score: Rome diagnostic criteria on obstipation
NEW: score: Cincinatti Stroke Scale (F.A.S.T.)
NEW: score: bacterial UTI algorithm
NEW: score: coronary artery disease in primary care
NEW: score: ABCDEF & Glasgow-7-points for identifying atypical moles
NEW: report: patients taking drug X
NEW: graphing of ranges of measurements (user-defined gnuplot scripts)
NEW: support emergency contact
NEW: support comment directly on identity
NEW: Add button to report ADR from within current substances plugin.
NEW: list view of database audit trail
NEW: management of vaccinations and vaccines
NEW: templates for writing a plugin [thanks S.Hilbert]
NEW: on Windows try to switch to "DejaVu Sans" font for improved
unicode display
NEW: demonstrable path to get up and running on Macintosh [thanks
NEW: useful error dialog when database connection lost
NEW: email log file on demand from menu
NEW: support Canadian MSVA format as external patient source

IMPROVED: GNUmed can now import the ARRIBA result as a document
IMPROVED: rename client/locale/ to client/po/ and adjust to that
IMPROVED: when enabling --debug during unhandled exception try harder
to log the exception in question
IMPROVED: more robust acquiring of data from image sources
IMPROVED: more medically-sound interval formatting
IMPROVED: another, more expected, way of calculating patient age
IMPROVED: edit non-name identity parts *directly* in demographics
plugin (no popup needed)
IMPROVED: show date-generated in patient picture tooltip
IMPROVED: much better icon [thanks J.Jaarsveld]
IMPROVED: show comment/emergency contact in patient search control
IMPROVED: re-add encounters to auditing
IMPROVED: show loinc info for test in test results EA
IMPROVED: much smarter result units phrasewheel
IMPROVED: DOB validity check when creating new person
IMPROVED: better layout of configuration listing
IMPROVED: medication formatting
IMPROVED: current medication patient handout [thanks C.Hilbert]
IMPROVED: pre-filter form template selection list based on purpose of
IMPROVED: default config file for running from tarball
IMPROVED: better support FreeDiams (0.4.2 now in Debian)
IMPROVED: EMR tree root note context menu
IMPROVED: generic lists can now have 3 extra buttons
IMPROVED: use substance rather than brand as allergene when creating
allergy from substance intake entry

* Database handling *

NEW: gm-set_gm-dbo_passowrd

FIX: during upgrade nullify empty clin.health_issue.laterality
FIX: properly use pg_dump: no more -d DATABASE [thanks S.Hilbert]

IMPROVED: bootstrapper now better detects utf8 ctype
IMPROVED: boostrap-latest: check for any previous version since all of
them would be dropped [thanks S.Hilbert]
IMPROVED: try to make su compatible with both MacOSX and Linux

Note that you *will* have to upgrade your database from v13
to v14 in order to use this release. This procedure is free
of risks for your existing v13 database and can be
re-attempted until successful as often as needed.

As usual, download your free copy from here:

Please report bugs.

GPG key ID E4071346 @
E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346

Sunday, July 25, 2010

GNUmed web client - demo available

The obligatory screenshots. Web client (rough draft) compared to the wxpython app.

Both clients are connected to the same database at the same time.
Both clients pull the documents from the document archive for the patient Kirk (primary key 12)
Both clients have identical security measures. The credentials are checked against the PG security configuration.
Both clients were coded in python (one in wxpython and one in pyjamas)

The difference is that pyjamas can compile its widgets into Javasscript. That way the user interface can be displayed in a webbrowser.

Why all this ?

You won't see wxpython on mobile devices anytime soon. If Google has its way (and they will) we will see the browser as the application platform on some sort of netbook or tablet
The current state is a good base for further development.

Best regards,

Monday, July 19, 2010

GNUmed electronic medical record - update for Ubuntu

The Ubuntu people are hard at work peparing the new Maverick release. Apparently Debian import freeze is in effect so the latest bugfix release (0.7.7) will not make it into Ubuntu.

I have filed a sync request at

Hopefully some kind soul will take the according action. GNUmed 0.7.7 is the seventh bugfix release in the 0.7 series and we think it is pretty stable. This version will make it into Debian stable that is expected to go into feature freeze soon.

While we are working on exciting new features for the soon to be released 0.8 series of the electronic medical record we are quite happy that a stable GNUmed release will make it into Debian and Ubuntu.

GNUmed web interface - demo available

For those of you who did not follow the discussion on the technical aspects of a web interface for GNUmed here is a short summary. I have looked at many web interfaces and learned quite a bit about existing web frameworks. It turned out that none of the existing frameworks fit our needs. This is due to the fact that the web is designed to fire and forget while GNUmed wants a persisten connection to the database. Second aspect was that we wanted database access done by Postgresql itself rather then duplicating that inside a database (which seems to be industry standard).

Long story short. Luke Leighton from pyjamas came to help us and invested a substantial amount of time to get things rolling. A first working version was recently referenced in this article. All of the code that makes it work has recently been merged into the main GNUmed code repository.

If makes use of pyjamas, cjson and multitaskhttpd.

Here is how you can try it out and start improving it. This guide assumes you have GNUmed running already.

1.) Get and install lovely-jsonrpc
* wget
* unpack it
* cd lovely-jsonrpc
* python install
2.) get and install cjson
* e.g. python-cjson on Debian
3.) get multitaskhttpd
* git clone git://
* cd multitaskhttpd
* python &
4.) get pyjamas
* git clone git://
* cd pyjamas
* python
* cd bin
* put pyjsbuild into the PATH or symlink into ProxiedWeb directory of GNUmed
5.) get GNUmed from git master as tgz or a git clone. Go to gitorious for instructions.

6.) compile the pyjamas application in the GNUmed source tree
* cd ProxiedWeb
* run (make sure pyjsbuild can be be found on your system)
7.) start GNUmed like this: ./ --ui=web

8.) open a webbrowser and go to http://localhost:8080/ProxiedWeb/jsonrpc/output/JSONRPCExample.html

If you want to hack on it have a look at It is a pyjamas application.

GNUmed 0.7.7 has been released

I am happy to announce the GNUmed 0.7.7 maintenance release:


        FIX: DOB could become today in certain corner cases when creating new person [thanks S.Reus]
        FIX: check_drug_interactions() failed with FreeDIAMS [thanks J.Busser]
        FIX: be more careful around changing CWD when creating document from LaTeX [thanks S.Hilbert]
        FIX: exception when save-all'ing multiple notelets [thanks S.Reus, J.Busser]
        FIX: exception when saving medication where is_long_term is true [thanks J.Busser]

                13.6 -> 13.7

        NEW: improved detection of unicode support in server encoding
        NEW: work around os.getcwd() permission problem on Mac
        FIX: even more robust unicode logging [thanks E.Kuznetsov]

This release does NOT require a database upgrade.

Download your copy (it's free !):

This is very close to what will end up in the next stable
Debian so please report bugs !

Thursday, July 15, 2010

GNUmed web interface - state of affairs

Back then there was the idea of a web interface for GNUmed. Back then there
was no clear idea of what that meant. I whipped together a few tutorial bits
of cherrpy and connected it to gmPG. This enabled us to log into the GNUmed
database and ran a few queries against the database to show there actually was
a connection. Little did I know that this was a beginning but nowhere near any
of what I wanted.

I wanted:
1.) a web client that could run concurrently to the wxpython client
2.) a web client that ran on top of gmPG2 instead of some framework's ORM
3.) role based security instead of database based security - no credentials in
a database table, period
4.) a web client that could fetch data from a backend
5.) not a web client that was no more then a number of server-side assembled
html pages.
6.) A nice looking web client without having to learn Javascript
7.) maybe more but I cannot remember

I checked loads of frameworks. But there was always a catch. The frameworks
wanted to do the work for me and they had a certain idea how to do it. Their
ideas did not neccessarly correlate with my ideas.

I ran my ideas by a couple of framework developers and Javascript toolkit
developers but none seems overly interested apart from their framework would
do what I wanted. Problems was I did not have enough skills and knowledge so
it was more a matter of trust then a fact based decision.

I always came across pyjamas. It seemed to partly fit the bill as it would let
em write python instead of Javascript. I ran my ideas by Luke Leighton after
seeing a message on python-announce mailing list.

That changes quite a few things. First he told me what I did not know about
the web. Most of the stuff was obvious for a web developer. I learned that the
web is stateless and unlike in a desktop application it is quite a bit of work
to make a client and a server process holding a unique persistent database
connection. Luke published quite a bit of code in easy to digest chunks so I
was able to follow along.

In the end here is what he solved for GNUmed.

The code:
1.) allows a browser (web client) to hold a persistent database connection to
the GNUmed backend even if the user closes the browser. The client will
reconnect to its unique connection when it is restarted.

2.) talks to the GNUmed database through the GNUmed middleware. No ORM or
stuff needed.

3.) demonstrated how two simultaneous connections (clients) talk to the
database without getting in each other's way or stealing each other's data
(which is common if you don't take care of it)

4.) provides a pyjamas application which will let a user log in and run
database queries.

5.) runs without interfering with other wxpython clients

6.) shows nicely how to use JSON-RPC to talk to client side frameworks. This
even lets Javascript framework warriors write their own client in Javascript
without having to do any database stuff.

The problems Luke solved were to do with turning HTTP connections,
which are ordinarily stateless, into permanent stateful connections.
He achieved this by:

* creating a special non-blocking HTTP proxy that does HTTP 1.1 with
"keep-alives", even if the browser does not.

* creating a modified version of python's SimpleHTTPServer that always
responds with "Connection: keep-alive", for GET and POST queries, even
on HTTP errors.

* inserting a session cookie into the HTTP stream, which the
non-blocking HTTP proxy looks out for, and uses to match the incoming
HTTP request with the corresponding outgoing connection.

in this way, browsers appear to be connected to the same persistent
back-end process, which is kept open and alive on behalf of the
browser, by the special proxy. as long as the back-end process
doesn't crash (or deliberately exit after a timeout) and as long as
the user does not clear the browser's cache, the user will always be
connected to the exact same back-end web server process.
What we have now is an excellent starting point to develop a web client for
GNUmed. Users have the option to run the wxpyton client or web client or both
at the same time. The big benefit of all client talking to the backend through
a common server side middleware is that in case of backend changes or
middleware changes all client continue to work without having to port all
changes to all clients.

Buyer beware: This is proof of concept code. It shows the concept works. Not
more. No less.

Rock on.


Wednesday, July 07, 2010

GNUmed plugin development - how to access the current patient

Chances are you want to access the data of the currently active patient in your plugin. There is an app for that (TM) . I mean there are some convenience functions for that. This is called middleware. No matter if the database ever changes. The way to access the data is abstracted and will remain stable.
from import gmPerson

pat = gmPerson.gmCurrentPatient()
text = patient['firstnames']
text = patient['lastnames']
text = patient['dob']
text = patient['gender']
This should be pretty self explainatory. For convenience use patient['dob'].isoformat() for a string representation of the datetime object.

To work with the patient's emr you can access it like this:

emr = pat.get_emr()
Let's say you want to get the current episode and if none create one.

                if episode is None:
                        all_epis = emr.get_episodes()
                        # FIXME: what to do here ? probably create dummy episode
                        if len(all_epis) == 0:
                                episode = emr.add_episode(episode_name = _('Cardiac echo exam'), is_open = False)
                                dlg = gmEMRStructWidgets.cEpisodeListSelectorDlg(parent = parent, id = -1, episodes = all_epis)
                                dlg.SetTitle(_('Select the episode under which to file the document ...'))
                                btn_pressed = dlg.ShowModal()
                                episode = dlg.get_selected_item_data(only_one = True)

                                if (btn_pressed == wx.ID_CANCEL) or (episode is None):
                                        if unlock_patient:
                                                pat.locked = False
                                        return None

Thursday, July 01, 2010

GNUmed plugin development - easy testing of plugin

Developing a plugin is no magic. We have received a report by a university student that he was able to get a plugin developed and running from the documentation we provide. He intentionally does not ask any questions but tries to dig through the documentation (blog, wiki, source code comments) to find out how everything plays together.

In one of the last articles it was demonstrated how to display a plugin. While it is nice to see your plugin in GNUmed often you don't want to start up all of GNUmed just to test your plugin.

Python comes with batteries included. Each client plugin can be started standalone through a helper called pywidgettester. This is implemented in the ExamplePlugin aleready.

Just start the plugin like this
cd ./client/wxpython/gui
It will ask for the server it should connect to, the database it should connect to, the username and the password. Once it has connected it lets you search for a patient. Then it will display this:

These lines in a plugin make this possible
if __name__ == '__main__':

        # GNUmed
        from import gmPerson
        from Gnumed.wxpython import gmPatSearchWidgets"starting template plugin...")

                # obtain patient
                patient = gmPerson.ask_for_patient()
                if patient is None:
                        print "None patient. Exiting gracefully..."

                # display the plugin standalone
                application = wx.wx.PyWidgetTester(size = (800,600))
                widgets = gmExamplePluginWidgets.cExamplePluginPnl(application.frame, -1)


Happy coding

Monday, June 28, 2010

GNUmed 0.7.6 on Mac - user report

Jim mailed in to show this screenshot of the freshly released
GNUmed on Mac OS 10.6.4 aka Snow Leopard

GNUmed web interface - wishlist

The following article show a) that I still know very little about web application development and b) that the person implementing this properly really needs to have a good skill set.

The person doing the web interface for GNUmed needs to have good skills in
- python
- Javascript
- object oriented coding
- MVC principles
- singlepage applications vs. multipage applications
- balancing client side workload with client side workload
- coding and running multiple instances of GNUmed web concurrently

Hardware is cheap. Internet tubes are congested and will be even more in the future. This means GNUmed web will need to

- transfer as little data and overhead (!) as possible
- cache heavily on the client side while ensuring data consistency (hard one)
- offload the user interface rendering to the client
- be capable of rendering user interface server side for incapable clients
- seperate data, ui layout (templates)
- have full i18n support
- handle 20 sessions on a off the shelf office server

It does not make sense to try to develop an interface that will fit small touch devices as well. Touch devices need a seperate interface.

When you attempt this please try to avoid code that makes an AJAX call for every keystroke in a phrasewheel or takes 30 seconds to load the login screen. If you think you have the skills it takes we sure would like to know.

GNUmed web interface - to framework or not to framework

Having read up quite a bit on the subject over the last few days a picture is forming. In short
there is no such thing as the optimal solution. Frameworks are all the hype nowadays. They have
helped to make Javascript usable for web application developers despite the fact that browser
incompatibilities are a pain in the rear.

Since browsers speak Javascript one needs to learn that language. Sure there is GWT which lets
web developers develop in JAVA (it will compile JAVA into Javascript). When reading up on GWT I
came across ZK which is yet another toolkit for JAVA developers.

Then a tiny little bit of information came up that is overlooked and ingnored by media. There is a
difference between client side frameworks and server side frameworks. Often one is tempted to look
only at the graphical user interface of the frameworks. Beauty is all too often associated with quality.

For all non web app wizzards the basics are like this. In a client side framework all the processing
is done in the browser on the client. If the app wants data it has to talk to the server to get it. On
other end there are the server centric frameworks that process all data and user interface on the
server and send html to the browser. The server centric way is often associated with a desktop
like developement. Both approaches have their share of pros and cons.

Some of the conclusions I have drawn so far:
  • framework is no well defined entity
some include features to render a user interface, some talk to databases, some to all of this
  • user interface frameworks
there are many, most are client side, some are server side and some are both
most are Javascript based, some are JAVA-based (GWT) or Python-based (pyjamas)
a bug in the framework might break the application
  • language considerations
many if not most web app developers are using Javascript
professionalism varies widely
supposedly going through a language-to-Javascript compiler
will fail badly in case of a bug
  • framework intercommunication
various techniques including Json and RPC exist but there is no consensus
or benchmarks 
  • designer applications
the widely used frameworks such as extJS and ZK have designer applications
available which would allow non-coders to produce pseudo code or mock ups.

Going back to the drawing board (with a little more info on frameworks)
here is what I am looking

  • code or a framework that lets me develop the user interface without it messing with the database itself (for now). This is the work of gmPG2 and friends.
  • a nice looking set of widgets that makes up a nice looking interface
  • a set of widgets that can be accessed through python (e.g. ToscaWidgets)
  • a framework that will be there for a few years and not being given up for the next best thing
  • solution that lets me seperate design (html, css, JS) and content through e.g templates
So far I have found nothing that fits the bill. In case of Pyjamas I am unsure about its
future and its set of widgets. I like that one could develop in python. It would mean that
Javascript coders are left out. GWT would mean learning JAVA. License is Apache License
v2.0. extJS or qooxdoo would mean learning Javascript and would leave the python coders
out. I like the idea that extJS and ZK have designers available.

As always feedback is highly appreciated.

Friday, June 25, 2010

GNUmed web interface - when easy is not so easy after all

There is two sorts of user interfaces for FOSS EMR. There are the fat client applications
and the web client applications.

GNUmed is a fat client application. It uses wxpython and has an interface like many
traditional software applications. That means it needs to be installed on a user's computer.
This has pros and cons. On the positive side developers need to code exactly one interface.
The actual redering is left to the operating system and underlying GUI toolkit. However
providing the underlying toolkit on many operating systems and window managers is no
easy task.

Then the internet era came along and brought the browser. There was one rendering
application (the browser) and one user interface language (html). It turned out that was
not reality. There are dozens of browsers and because html alone is limited along came
CSS and JavaScript. But there was one very important detail that makes the web attractive
for delivering applications. All you need is a browser. You do not need to install the application
on your computer and you don't need to mess with dependencies such as special libraries.
In the ideal world you make your application run on on computer (the server) and the clients
(the browser) will only display the output and collect input to feed back to the server.

Web clients have their own share of problems. Browsers are not fully standard compliant. For
security reasons you cannot access local peripheral devices such as scanners, printers, files
easily. That severly breaks a input-oriented application like an electronic medical record.

People came up with all sorts of clever solutions. Thin client are fat clients whose output is
displayed at a remote location. This does not sound too bad. However the data that needs
to be transfered is too much for today's internet lines and even broadband. VNC is only usable
when run in a highspeed local network of 100MBit/s or more. And people tried to solve that
problem as well. They came up with the NX protocol. Pretty much a heavily optimized remote
display solution. It works and it works well but the web is so prominent that it does not
penetrate the mass market.

NX solves the problems for the user. Well kind of. You still need to install a NX client on your
computer. Then NX married the solution with the browser. They built the nx browser plugin.
This is one solution to the problem. However the nx client needs to be available for every
platform and every device (ARM, x86, your favorite operating system here). It is not. But the
web is. Virtually every device that looks like an electronic device can run a browser. Even the
washing machine and the microwave oven have Android installed. Anywhere there is a browser
there is chance to deliver the application.

Does GNUmed need a webinterface. I don't think so. However people are made to believe that
the personal computer will go away in 2-5 years. Along with it there is a chance that fat clients
will go away. That would make the GNUmed client we have today go away. The doctor does not
care. She just wants it to work not matter what technology. Lets just say GNUmed needs a web
interface. Apart from the fact that then GNUmed team does not yet have anyone with the skills
needed to make this a success it is always a good idea to look at what others have done so

Web interface definition
There is two types of web interfaces. One is the traditional mix of HMTL pages maybe with a bit
of CSS for beatification and some Javascript to make it look. The other one is a so called RIA
(rich internet application). This is what Gmail and friends think a web application should work
and look like. Because the mix of browsers and OSs is such as PITA frameworks have been created.
Those frameworks try to abstract the pitfalls from the developer and try to offer a cross-browser
and cross-platform user interface developement solution. This has been benefical but developers
tend to push the boundries. This lead to countless approaches and frameworks. Many of those
target Javascript developers (extJS, dojo, qooxdoo, YUI, jQuery). Then Google came along and
brought GWT which let developers develop in JAVA instead of pure JavaScript. This however means
need to program in JAVA or at least php.

Choosing the right tools
Over the years it became evident that developers seldomly have design skills.
Application design was pushed down on the agenda and a few webpages were created to for
the EMR user interface. Pretty soon everyone noticed that those "applications" are a  nightmare
to develop, maintain, translate and debug. Users broke them all the time. Not because users
are stupid but because they are busy and impatient. The result is what openEMR, Oscar and
Freemed (up to 0.8.4) look like today. Design says little about how well an application works
but users tend to associate the quality of an application with its design.

Road to redesign
Nearly all projects I followed over the years have either done a complete user rewrite or plan to
do so. Freemed has been picked up but even the rewrite is under rewrite. They tried Dojo

but that did not work so they switched to GWT. The web application now works as a mix of
three languages (PHP, Javascript, JAVA). The interface looks promising and I hope they will
pull this off. OpenEMR is currently getting certified in the US. I wonder how long it takes before
the UI will be rewritten.

Back to GNUmed.
While the appearance of openEMR and Freemed might be lacking GNUmed
is not there yet. It has recently been demonstrated that the GNUmed backend and middleware
(connection to the database etc.) can be reused without much effort in a webbrowser. The
only thing missing it the graphical user interface. It is not as easy as it sounds. Careful
planning is indicated to avoid starting over a few months down the road. A python based
web application usually uses a python web framework anlong with some template manager.
For python there is at least pylons, django, turbogears, cherrypy. These frameworks try to
be complete solutions. They bring everything to the table including database access. But we
don't want that. So the question arises do we need a python framework ? Given my little
knowledge I am not sure about that. Next question is on the user interface framework. Do we
need a Javascript framework like extJS , GWT , qooxdoo and friends. I am starting to believe
we could use one of those although I am not sure how to marry this to our middleware. The
point is unless you have a very experienced web application developer in the team chances are
this gets screwed up and wastes time.

Pyjamas to the rescue.
A group of people thought what GWT is to JAVA GWT can be to Python as well. They came up
with pyjamas. The ideas is to develop in python and the python-to-javascript compiler will
translate this to well JavaScript. JavaScript is the only language browsers understand. There
is documentation on this and it is supposedly relatively compatible to GWT. I lack the insight
to judge how well this works. The potential benefit is a closer tie to the python middleware.
A potential drawback is that you need a python coder to do the job. This will leave out all
web developers which are only fluent in JavaScript. And those are the majority I would guess.

Performance considerations
While reading up a lot on web application development I noticed there are a number of ways
to solve the problem. There is no best of practice and depending on what you wanna do
opinions differ. It boils down to where to do the heavy lifting. One end of the rope is creating
all (x)HTML on the server and serving that to the client. The other end is letting the client to all
the HTML,JS,DOM work.  Since I know too little on this here is an article which talks about it.

Long story short
Doing a web interface is easy. Just start and learn along the way. The same attitude is inherent in
some of the FOSS EMR both with web clients and fat clients. While it works it certainly is a pain
if you ever want to hand over the code to another developer.

What are the options.
One could look into pyjamas and try to make the most of it. Or one could just learn JS and go for
extJS and friends. I guess no option would be to use pure GWT since there needs to be a bridge
between python and JAVA (Jython maybe?). One could also just do away with the RIA as a whole
and serve a few static or partly dynamic webpages.

I would really welcome some comments here. As I said I am totally new to this. However if this
is not properly planned it is better to leave this out. And who knows how the internet will develop.
There might just be wxwidgets to javascript mapping appearing.

Tuesday, June 22, 2010

How to share your GNUmed code via GIT (gitorious)

There may be different ways, better ways. Here is how you can share your code with the rest of the GNUmed community.

The GNUmed project use GIT as a way to host the source code and track changes. The GNUmed code can be found at gitorious. This so called repository has been created by Karsten Hilbert (ncq) and will host his changes to the GNUmed code. There is no such thing as the official GNUmed repository.

In order to share your code with the world through git you need to get yourself a gitorious account.

1.) Sign up with gitorious
2.) Start a new project (e.g. gnumed-yourshortname)
3.) Upload you plubic ssh key or create a new one if you have none

Once you have this you need to fill this with code. I assume you have a local git repository on your computer since you most likely created code by now. If you don't then start using GIT today.

Please see my previous article on GIT for GNUmed for information on how
to use git for your code.

Now it is time to upload your code. The repository you have on your local disk
is a full, standalone copy of Karsten's repository on gitorious. Other
than that it 'knows' about its origin there is no connection between the two.
There is an article on that and I will summarize it here.

To upload you code you need to tell git where to. The destination will be you
project on gitorious. For the beginning I have chosen to make a copy of the
git checkout on my computer. The checkout from ncq is in

~/sources/gnumed-head and the copy in ~/sources/gnumed-shilbert to reflect
which is my tree and what is ncq's (read-only) tree.

Now open ~/sources/gnumed-shilbert/.git and edit the file config. Before the
change it looks like this.
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git://
[branch "master"]
remote = origin
merge = refs/heads/master
Change the line url = foo to let foo reflect your tree at gitorious. You will get the url
from gitorious once you have created your project and logged in.

After the change mine looks like this.
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url =
[branch "master"]
remote = origin
merge = refs/heads/master
Now everything is configured to upload your local git tree to gitorious. Do it like
this to upload your newly created branch (template in my case).

git push origin template

The following output can be observed.
The authenticity of host ' (' can't be established.
RSA key fingerprint is 7e:af:8d:ec:f0:39:5e:ba:52:16:ce:19:fa:d4:b8:7d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ',' (RSA) to the list of known hosts.
Enter passphrase for key '/home/basti/.ssh/id_rsa':
Counting objects: 91837, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (18055/18055), done.
Writing objects: 100% (91837/91837), 37.85 MiB | 71 KiB/s, done.
Total 91837 (delta 63311), reused 89983 (delta 61565)
=> Syncing Gitorious... [OK]
* [new branch] template -> template
Then push your master branch which initially will be identical to the ncq's
master branch until you or ncq change the now individual master branches.
basti@thinkpad:~/Sources/gnumed-shilbert> git push origin master
Enter passphrase for key '/home/basti/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
=> Syncing Gitorious... [OK]
* [new branch] master -> master

You are almost done. You have to announce it to the world :-) You can e.g. send
an e-mail to the mailing-list at gnumed-devel at and point people to your
code. They will then look at it and maybe incorporate them into their own trees.

If you however decide that you do not want to use git you can always send files
and patches directly to the mailing-list for review.

Monday, June 21, 2010

How to lower the barrier - plugins and videos

Hi all,

Recently we were contacted off list by someone who was attempting to implement
a plugin for GNUmed. Like many before him he had missed almost all information
available at in Wiki. After some pointers like the little series on plugins in
our Wiki it looked like he was on track. However despite initial success he
hit a road block when attempting to create a plugin. He was offered to send us
the problematic files but never did. We don't know if it was too much a
hassle. Initially you would think that documenting stuff in the Wiki, offering
direct help and more should be sufficient.

It is not I believe. Many people are used to solving problems on their own
instead of using the ressources readily available. That stems from the closed
source world where you would reinvent everything over and over.

Not all is lost however. We are missing two ressources I believe to give the
beginner programmer a chance. First is a set of templates. Second is a set of
videos explaining some concepts behind GNUmed. I have tried to solve the first
problem and have come up with a template plugin everyone can start off with.

I have them in my git tree and am currently learning how to share this work
through gitorious. I guess this will be another blog post. I hope Karsten can
chip in some information.

So far I have set up an account on gitorious. What now. Clone gnumed
repository ? Let's establish how merge requests and stuff works. If it works
out there will be a branch called template.

I suggest we ship those files in master as well so people pulling the
developer source tarball will have it as well.

Then the content in the Wiki needs to be updated to reflect how to make use of
the templates. The template files should be heavily documented in the code
itself and maybe will see a plugin or two appear.

Another thing I would like to see is a set of movies showing what one can do
with GNUmed. Those can either be rough demos or if you want to make the most
of it write a little script so everyone can follow the script and submit

Thursday, June 17, 2010

GNUmed client 0.7.5 - call for testing

Hi all,

Please install and test GNUmed (its client and its server). The respective packages are gnumed-client and gnumed-server. The Personal Package Archive currently holds version 0.7.4. This is especially important for Ubuntu users since we are trying to get 0.7.5 into Lucid-proposed. I will try to upload 0.7.5 to the PPA today.

A Russian Ubuntu user (10.04) has reported a segfault when trying to start the client. We are not aware of any problems on the GNUmed side so any testing done by Russian Ubuntu users is very welcome.

We consider 0.7.5 a huge step forward compared to 0.6 which ships with Lucid. So your testing will directly make a difference for all current and future GNUmed users on Ubuntu.

More information is available at

Best regards,
Sebastian Hilbert
GNUmed Team

Tuesday, June 15, 2010

GNUmed 0.8 to be - in screenshots

Word of mouth has it that a release candidate of GNUmed 0.8 series is about to be released. From recent postings on the mailing list here are some bits we can expect:

In April 2010 arsten first mentioned vaccination handling and posted a screenshot:

Then on Apr 29th a pdf was posted showing of the improved current medication table in the LaTeX
format. This is now much more suitable for patients wondering how they should take their medication.

Beginning of May lab result plotting appeared:

Demographics editing was improved and a screenshot posted.

Still in May a more meaningful tooltip on the patient picture (it will show
the date the picture was generated) was announced.

Before the month was over this was announced :
This is the start of the third tab in the demographics
plugin, dubbed "Social Network", which is poised to become
the hub and spokes of the human network the patient is part

Note that you can link a person within this same database
but you don't have to. You can also just write a comment in
the field below and leave the top line empty.

If there is a link to another patient it can be activated
from there straight away.

Also note how this screenshot nicely shows the tabbing
together of possibly unrelated windows into one "tab group"
-- one could imagine to tab together a few instances of
GNUmed or some such.

After improvement of the tooltip:

Then two days later progress on vaccination handling was reported:
This is GNUmed showing the (only but) latest Tetanus
injection Kirk got, right in the EMR summary. Next to it a
listing of his vaccination history ordered reverse

The "latest shot" logic will work correctly across single-
and combi-indication vaccines.

Note the new icon John provided.

For reasons not fully understood still in May ...

It's the little things that count:

Observe the Sum sign behind the indication in the EMR
summary vaccination list. It shows the total number of
vaccinations for this indication the patient has received.

A poor man's vaccination plan ... ;-)

An then some days ago (June finally) this appeared:

In the attached screenshot observe how the patient search
field tooltip shows the emergency contact for the patient as
well as the comment on this person.

Below the listing of drugs also note the "UAW" (German for
ADR) button which takes you to a (configurable) website for
reporting an adverse drug reaction.

In June the vaccination user interface was discussed again and the latest version was this:

Looks like this will be a feature packed release for the clinician. There now is a solid foundation for vaccination handling, medication lists, emergency contact handling and much more.

From the discussion it seems that a few more interesting goodies are in the pipeline.

* GNUmed client and server have once again be tested and made to work on the Mac OS platform
* GNUmed on Windows now installs and runs without ever installing python, wxpython or friends
* GNUmed bootstraping now works without ever installing python or friends
* Lx-Office/sql-ledger and ledgersmb have been identified as candidates for billing interfaces
* Preliminary survey data suggests that ICD-coding and billing are the most wanted features.

Join us for a discussion. Head over to or leave your comment here.

Monday, June 14, 2010

GNUmed Mac version - hardware needed

Initial tests indicate that the upcoming 0.8 version of GNUmed and the corresponding server part run on Mac OSX. But these tests were only performed on Tiger which is supposedly outdated. The GNUmed project does not have any Mac hardware available for testing. If you are interested in GNUmed running on that platform you might want to consider donating/lending the development hardware it can use for testing and developing.

Thursday, June 10, 2010

GNUmed - job openings

This is not meant to be overly serious. However below is a bit of information what it would take to develop GNUmed from scratch. I encourage everyone to apply for one of these jobs. You will be reimbursed by the respect from your peers and the cosy feeling of having done the right thing.

GNUmed public relations manager

It will be your job to handle all kinds of communication with interested parties such as media, users, developers and either respond yourself or forward the issue to one or more people on the team that might handle the issue more profound. Furthermore it will be your job to research document and shape if neccessary the GNUmed project's visibility in media , search engines and user/developer communities. When new releases are made it part of the job to forward information or press releases to interested parties and parties that might have interest.

GNUmed wiki manager

It will be your job to document important information from all kinds of sources (e.g. design discussions on the mailing-list). You will be responsible for updating content as the need arises (e.g. new GNUmed release). It will be part of the job to work with the public relations manager and the IT-system administrator to keep the Wiki running and secure. This includes monitoring security related announcements. Furthermore it will be your job to initiate and work on improvements to the content and usability of the Wiki with regards to GNUmed users and developers.

GNUmed system admin

It will be your job to keep the infrastructure such as webserver, buildserver running. You will be responsible for security related issues and it is expected of you to initiate, plan and execute inprovements to the infrastructure.

GNUmed release manager

It will be your job to communicate with all parties regarding new releases of the GNUmed software. You will working with the PR manager and the system admin. It is your responsibility to ensure the availability of packages for all major platforms. You will be responsible for the creation and availability of demo media such as Live-CD, VMware images.

GNUmed webinterface developer

It will be your job to work with all other developers to develop a webbased interface for GNUmed. Preferred technologies are python based frameworks and a modern UI framework (e.g. AJAX, HTML5, no Flash). It is exprected that you have very good skills in python, Javascript, webframeworks or are willing to invest significant time into learning those skills in a reasonable timeframe. You will work with the interface designer to develop and deploy an interface that fits a physician's workflow.

GNUmed medical user interface designer

It will be your job to design medical user interfaces (web, fat client) that fits physician's workflow. You are expected to communicate with all developers including the webinterface developer and the core developers. You should have at least basic knowledge in python. It is expected of you that you have good skills or are willing to learn interface design and that you keep in mind industry standards.

GNUmed application developers

It will be your job to research , develop and deploy the GNUmed application. You will be responsible for creating , documenting and maintaining a solid database backend based on proved database technology (e.g. PostgreSQL). You will be writing code to abstract the user interface from the backend. It is essential for senior application developers to have excellent python, wxpython, SQL skills and a track record of active communication with all team members.

GNUmed application documentation manager

It will be your job to work with the developers and testing specialists to establish and keep up to date all programming information, guidelines, manuals. You will be working with users to find out what information is missing and you will be responsible for creating missing content. You will be responsible for setting up

GNUmed application testing specialist

It will be your job to establish a toolchain and testbed for continous testing of all aspects of the GNUmed application. You will be responsible for creating test routines and working with developers to turn test results into a better application.

GNUmed application support specialist

It will be your job to take care of the infrastructure to handle incoming support requests. You should furthermore have experience in triaging support requests and working with application developers and all other team members until an issue is resolved. It is part of the job to gather missing information and interact with the inquiring party until a solution has been found.

GNUmed translator

It will be your job to translate the user interface, the technical and user
manuals and the online content into a number of languages. It is part of the
job to work with users and developers to find the correct translation not only
literally but context-wise and language-specific

GNUmed on twitter and

In those days it seems to be horribly old-school to follow the GNUmed website
by visiting its website or subscribing to a news feed. Even a blog is not hip
anymore. Well folks that is why you can follow GNUmed on twitter and
Be there when a new release is announced. Be there when the GNUmed devs
talk about upcoming features. Can't wait for an announcement to be made ?
Talk to us in the Wiki Live Chat.

All your social networking at your fingertips.

A question to the community

Hi all,

Jim's pointing to a thread from 2006 got me thinking. Here are some questions I
would like to throw at the subscribers of this mailing list or any reader of the blog post.

What is the state of GNUmed ?
What is missing and what is the feature that needs to be added before you will use it in your office ?
How do you view the work since 2006?
How do you see the concepts of GNumed ?
Do you care about the concepts of GNUmed ?

They say listen to the users. Here we are.


Tuesday, June 08, 2010

Billing for GNUmed - ready for action

The following workflow has been documented and is therefore ready for someone to implement

let GNUmed search for a client in the ledger application
if it exists open a browser and jump to invoice creation page
if it does not exist create it in the datbase and open invoice creation page
if multiple matches for client search term exist open browser and let user select the one
let GNUmed open a browser and jump to the "unpaid invoices page"

All info is at

Now it is only a question of implementing this. IOW someone has to code it.
Most of this is pure python. That means apart from creating a few menu entries
in GNUmed there is not too much GNUmed code involved. If you are going to
attempt this and need help with e.g. getting the current patient in GNUmed
just yell and let us know.

While this sounds overly complicated it is not. Even for beginners this is a reasonable effort.

All the nifty details like clean code, documentation etc. can be worked on after a first implementation.

Now it is up to you when GNUmed will have billing features.

Happy coding,


Billing/invoicing for GNUmed

There is an ongoing effort to provide some basic invoicing for GNUmed. Looking around
it looks like the packages sql-ledger, lx-office and ledgersmb will be evaluated. This is largely
due to the fact that ledgersmb and lx-office are forks from sql-ledger.

All three packages are webbased and written in perl. It seems possible to call functions not only
via the web interface but from the commandline as well.

This makes it suitable for GNUmed which tries to avoid implementing its own invoicing solution
and rather makes use of existing software.

A rough guide on what is planned can be found in the wiki at

We need help with the implemenation. If you feel you could benefit from invoicing for GNUmed
please join the team.

We recommend you subscribe to mailing list and introduce youself.
Any help is appreciated.

Thursday, May 27, 2010

GNUmed electronic medical record 0.7.4 available for Ubuntu

GNUmed EMR 0.7.4 has released . This is a bug fix release. One of the issues
that are fixed is an issue that came during installation on Ubuntu Lucid server edition.

GNUmed 0.7.4 replaces the version that ships with Ubuntu Lucid. It is available from
the PPA.

Download and full instructions are available from the GNUmed wiki.

It is nice to see that so many Ubuntu users are reporting bugs which makes it easy
for us to release stable versions.

The next major release (0.8) will tackle handling of vaccinations as well as completing

There has been good progress with translations but we need ever helping hand we can
get. Translations are in launchpad and therefore it is easy to contribute to GNUmed.

Wednesday, May 19, 2010

GNUmed on Windows - what is in the box ? a Unicode font tale

Despite the fact that noone complained I recently found myself looking at boxes again. That means instead of nice Unicode symbols like a hand signing something the default installation of GNUmed on Windows XP will show you nothing but a box. Windows is pretty creative at showing boxes. It will simply show a box for every character it cannot display.

Who is to blame. Initially I thought python was to blame. I did everything to make the text aware of utf-8 encoding. Turns out it already is and nothing changed. I then thought the Windows codepage is to blame. I managed to set it to Unicode instead of CP850 but it would still show me a box. Then it (not the box) hit me. The font is to blame.

Default font on Windows XP is Arial and Tahona. Both do not have a character mapped to the unicode number for the signing hand. The solution is to change the font to a font that includes the signing hand.

Easier said then done. For a signing hand in the title of a Window you need to change the font via Windows system preferences in the Appearance section. For the signing hand in e.g. a lab measurement cell in GNUmed you need to tell wxpython and therefore GNUmed that you want another font.

Many hours later the real challenge was near. Which font to use ? Not many fonts that have all characters exist. Many look lets say special (ugly) and no user will activate it if the text looks ugly in GNUmed.

It boils down to:

MS Arial Unicode - almost complete, commercial ($99) font, ships with some MS Office versions, cannot be shared
Code 2000 - most complete one, Shareware, looks lets say ok, cannot be shared
DejaVu Sans - almost complete, ships with Windows , looks good.

Apparently the Linux version of DejaVu Sans is more complete then the Windows version. If this holds true and the Linux version runs in Windows I will optionally ship it in the installer.

A couple of changes to the GNUmed code are neccessary before you can finally enjoy GNUmed unboxed.

Take care,

Sunday, May 16, 2010

next stop: frozen boostrap, I mean frozen yogurt

Hi all,

Back in the days when GNUmed appeared for Windows. A number of user way smarter then me
managed to break it in unpredictable ways. Installation meant hit or miss. Later frozen binaries
came along. They have been a huge success. I decided that despite my careful cecking of installed
dependencies users would still find ways to break it. So for some time the only thing you can
download for MS Windows is a frozen client.

Gone are the days when someone mailed in that something went wrong during installation
of the dependencies. There simply are none anymore. One file to install. That is it.

Users have been happy so far and I have not heard of any complaints regarding the client
on MS Windows.

But every story has a dark side. Now that we did not have a way to keep users from trying
the client they started looking at local databases. Until now we have been hiding behind a
brick wall of depedencies for the boostraper. Users still managed to install GNUmed server
and bootstrap on Windows. A few releases back we started by catering for the Windows
users by not asking a single question. We would even supply the passwords for Postgresql.

What a horrible thing to do but noone complained. However one or the other smart user
still failed to cross our brick wall of python, mxtools and psycopg2 dependencies.

Those days are now officially over. From version 0.7.4 there is only one single dependency -
PostgreSQL. Thats is all. You want to bootstrap ? Go ahead. No more dependencies. After
installation of GNUmed-server you are ready to boostrap.

This is considered a great day for our users. I am afraid that now that client and server
installation is so dead easy nothing is holding you back from looking at the features of
GNUmed and letting us know what you think.

There are still a few things I would like to see implemented:
- handling of previously installed PostgreSQL during installation
- status icon for PostgreSQL
- a webbased configuration file editor

Take care,

Friday, May 14, 2010

GNUmed server on Ubuntu server 10.04

Someone from China recently tried GNUmed (electronic medical record) on Ubuntu. Actually
it was the GNUmed server on Ubuntu server AMD 64bit. He hit a strange problem we had not
seen before. During the post-install step there was an error regarding a missing group called

This led them to believe that the installation failed. That turned out not to be true. While
the root of this is yet to be examined here is the short guide on how to set up GNUmed
on Ubuntu server. There are a number of showstoppers so follow this guide to avoid them.

1.) In the default installation one cannot simply add a PPA to the server. The package
python-software-properties is missing from the default installation. It adds the command

Solve this by running:
sudo apt-get install python-software-properties

2.) Add the GNUmed PPA to your system since the version shiped with Ubuntu 10.04 is outdated.
sudo add-apt-repository ppa:gnumed/ppa

3.) Update your installation sources
sudo apt-get update

4.) there is problem with a missing group called gnumed. This seems to be the case only for Ubuntu server. For now add it with this command.
sudo addgroup gnumed

5.) Install the gnumed-server package
sudo apt-get install gnumed-server

6.) Create a GNUmed database with demo data (username/password: any-doc/any-doc)
sudo gm-boostrap_server

This will give you a working GNUmed database. However to be able to connect from other
clients on the network more configuration (for a secure setup) is neccessary.

This will get you started:

If you hit any problems don't hesitate to contact us (e.g. via the chat in the Wiki)

Friday, May 07, 2010

Billing / Invoicing applications for GNUmed

There is the ongoing quest to use GNUmed for billing. GNUmed is primarly used for documenting patient's healths or disease but a medical office is a small to medium business as well.

webbased, PostgreSQL (beta)
no interface we know of,
no Debian package,
project active
i18n capable

Amberdms billing system:
webbased, PHP, MySQL
no Debian package,
RPM package avaialble,
project active - run by webhosting company
i18n capable
press coverage

webbased, MySQL, PostgreSQL, Oracle
no Debian package,
project active - run by a company
i18n capable ?

webbased, MySQL, PostgreSQL ?
no interface we know of,
no Debian package,
project active

fat client, written in C, PostgreSQL , yeah
no API, however python-gnucash
Debian package,
project active
i18n capable
does online banking

not yet considered:
openbill - pre alpha,

Wednesday, May 05, 2010

GNUmed 0.7.2 on Ubuntu

A few days ago a person from Russia reported a problem concerning
GNUmed on Ubuntu Lucid.

We hope we have a fix for that.

GNUmed 0.7.2 has been released. It would be great if Ubuntu users could try it. There
are no Ubuntu packages yet. But I wonder if anyone would be willing to test if from the tarball we provide,

For the client there is a script called

Please run this as normal user.

in the subdirectory client. This will start the client 0.7.2. And in the
server tarball in the directory bootstrap there is a script called

which will now hopefully accept the Russian postgresql configuration. Please run this
as root.

Ubuntu packages will appear as soon as Debian packages come out. This can take
a couple of days.

Any help is appreciated.

GNUmed team

Tuesday, May 04, 2010

long distance GNUmed support via chat feature

It all about the end user.

The chat feature in the Wiki has been there for a while. I have not been

contacted that often but since Ubuntu released its new version 3 people

have showed up in the last 2 days.

There was a guy from Trinidad and two from Russia. The chat feature

helped to get one guy from Russia and the one from Trinidad on track.

Both had GNUmed running once I told them the secret password

for the public database :-)

The secret password for is:

user: any-doc

password: any-doc

The second guy from Russia hit a bug. He was very helpful by providing

log files and we should see a bugfix release soon. He worked we me on

this for over one hour which I appreciate. Turns out part of the problems

is there are virtually unlimited possiblities to get the whole UFT8. UTF-8,

uft8 and utf-8 thing for PostgreSQL wrong.

Judging by various sources I have people from all over the world are looking

at GNUmed. Indonesia, Russia, Argentina, Netherland, Austria, Germany,

Moldavia are just a few that looked at GNUmed during the last 24 hours.

Not all of them seem to be satisfied with what they find. A good number

of them are looking for billing solutions.

This could well be the beginning of a stable GNUmed community.


Sunday, May 02, 2010

GNUmed server packages (13.1) for Ubuntu in the make

GNUmed server packages (13.1) have been put on the Ubuntu build servers. There will be packages for Lucid, Karmic, Jaunty and Intrepid.

Go to to find out how to get GNUmed installed.

Friday, April 30, 2010

GNUmed on Ubuntu Intrepid no longer supported

Ubuntu Lucid (2010.04) has been released. This is a long term support edition and replaces Hardy Heron (2008.04). Regarding GNUmed we have no reports that anyone is using GNUmed actively on Intrepid Ibex (2008.10). Given their 6 months release cycle we are officially dopping support for Ubuntu Intrepid (2008.10). We will still fix security issues but as packaging gets harder and harder and not all features of GNUmed are supported on Intrepid it would eat up all our ressources to support Intrepid. There are some users which run GNUmed on Jaunty (2009.04) so we will do our best to support as many features as possible on that platform.

That means GNUmed client and server are now supported on:

Ubuntu Jaunty

Ubuntu Karmic

Ubuntu Lucid

Other distributions known to work are:

OpenSUSE 11.2 and Factory

Mandriva One 2010

Fedora 12

Sunday, April 25, 2010

GNUmed medical record software 0.7.1 for Ubuntu released

I am m pleased to announce Ubuntu packages for the release of version 0.7.1 of the GNUmed electronic medical client
and version 13.1 of the GNUmed EMR server.

The GNUmed project builds free, liberated open source Electronic Medical
Record software to assist and improve longitudinal care. It is made available
at no charge and is capable of running on GNU/Linux, Windows and Mac OS X. It
is developed by a handful of medical doctors and programmers from all over the
world. It can be useful to anyone documenting the health of patients
including, but not limited to, doctors, physical therapists, occupational
therapists ...

Ubuntu packages for Intrepid, Jaunty, Karmic and Lucid will appear shortly in the GNUmed PPA. The latest version that made it into Karmic (10.04) is version 0.6.2. We love feedback so give it a spin.

Stay tuned and be sure to check out

Sebastian Hilbert
for the GNUmed team

Thursday, April 22, 2010

GNUmed plugin development - how to share your work

In the last article I shared my work by posting a few screenshots and a tarball for everyone to grab. However the ultimate goal is to get this included onto GNUmed's main code repository.

A while back the GNUmed project announced it made the switch from CVS to GIT. That means that it moved from a centralized repository (CVS head) to a distributed repository architecture. In short. There is no longer an 'officical' or 'central' code repository to submit our plugin to.

However not all is lost. The most active coders share their so called GIT trees with the world so that is now the de facto standard. This is not carved into stone but since Karsten Hilbert has been making released based on his GIT tree this tree is the main tree for the time being.

What we need to do is ask him to merge our code into his tree so it will be part of the next releases. Same procedure is implemented for the Linux kernel where Linus Torvalds merges code from other developers and finally releases a new kernel.

There is one problem. I did not consider this when working on the plugin so I need to get my stuff straight and my hands dirty with GIT.

First I get a local copy of the 'main tree'. It is hosted at gitorious for everyone to grab. I grab a copy by cloning it. For that I create a subdirectory 'Sources' in my home directory and run the following command.
git clone git://
Now I have a copy of the main tree which can be kept up to date by running the following commands.
git checkout master
git fetch
This gives us the latest code in the master branch. For our plugin it makes sense to create our own branch. This is done by the following command.
git branch add-echo-xml
To list all available branches use:
git branch
It will output:
*  add-echo-xml                                                                                                                                                             
The branch with the asterisk is the currently active one.  To switch to the master tree (e.g. for updates) use:
git checkout master
To activate and develop in our own branch use this:
git checkout add-echo-xml
It will do some magic and track all change we make to the existing and new files. It will find out that we change existing files, delete files or add files. Now is the time to add our previously created files from the tarball I talked about in the last article. Just copy them into the corresponding directories. We have to tell git about them so it can track the changes to them. This is done by adding the file once and commiting after a change. In the wxGladeWidgets directory we run:
git add
In the wxg direcotory we run:
git add wxgCardiacEchoPnl.wxg
In the wxpython directory we run:
git add
In the wxpython/gui directory we run:
git add
Finally we commit all this by:
git commit
This will ask for a commit message which is a short message to keep track of your changes. Once done it will output:                                                                                                                                                                           
[add-echo-xml f0b2d35] - added new files for echo plugin                                                                                                                   
 4 files changed, 1196 insertions(+), 0 deletions(-)                                                                                                                       
 create mode 100755 gnumed/gnumed/client/wxGladeWidgets/                                                                                         
 create mode 100644 gnumed/gnumed/client/wxg/wxgCardiacEchoPnl.wxg
 create mode 100644 gnumed/gnumed/client/wxpython/
 create mode 100644 gnumed/gnumed/client/wxpython/gui/
Whenever we change files during developement we need to go through this (git branch add-echo-xml, git add, git commit) again. Next step will be to figure out how to offer these local changes for merging by the person doing releases.

Tuesday, April 20, 2010

GNUmed plugin development - part 1 reloaded

If you are just getting started with GNUmed, python and plugins I recommend you read over the series GNUmed plugin development for the basics.

GNUmed plugin develeopment reloaded

Back in the days I was about to develop a GNUmed plugin for pacemaker clinics. While doing this I came across a publication describing a dataset for cardiac echos so I started to develop a plugin for cardiac echocardiography.

A GNUmed plugin consists of three files. When all files are present it is picked up by GNUmed and can be activated/added for a specific workplace in the GNUmed database so it is loaded at startup. Part 4, 5 and 6 of my older series covered that aspect. This time around I am going to create the files from scratch.

Those three files are a foo.wxg file, a file that is generated from the wxg file and a wrapper file to tell GNUmed about the plugin. Optionally a fourth file can be used to seperate the widget from the rest of the code. This not neccessary however.

The four files can be downloaded here as one zip file. The directory layout of the zipped content is identical to where the files should go (e.g. 'client\wxg', 'client\wxpython').

To activate the plugin open GNUmed and go to 'GNUmed'>'Master data'>'Workplace profiles'. Select 'GNUmed Default' or whatever workplace you want to configure and press 'edit' Select 'all plugins you want' and save your selection.

Restart GNUmed and go to the 'Cardiac echo plugin'. Up to now it is little more then a user interface. It does not do much. Next step is to read all the input fields and write it to an XML file. This XML file will then be stored in the database.

Wednesday, April 14, 2010

GNUmed on Mac - maybe ; on the IPAD - never

Hi all,

What is the situation on the Mac ?
There is no reason why GNUmed would not run. We have not tested it for some time. I guess MacOSX is very much like Windows with regards to software management. Apple seems to care liitle if you have trouble managing software. So the best approach would be to go for frozen binaries just as we do on Windows and throw it all in a big fat dmg. For the server I guess macports can be used and gm-boostrap_server should work as well.

People seem to go crazy over the iPad despite its obvious limitations. Everyone is telling this fairy tale story that Apple is after the healthcare industry. The Oscar folks have been dreaming about it for some time.

So is GNUmed ever going to appear on the iPad ? I guess not anytime soon (TM). Apple has decided that python is not a first class citizen on their devices. The upcoming version 4 of their OS simply forbids anything but Objective-C, C and Javascript.

Primarly designed to keep out Adobe Flash it hits FOSS hard. Guess he will still manage to sell a good number of device. People simply love looking at it :-)

Unless proven to be vaporware the Wepad could turn out to be the alternative. Hardware specs are better (it is not as shiny and heavier) and runs a full fledged Linux. Ok, they managed to screw up by producing a Windows error during the press conference showing that it was a video in an endless loop :-)

If anyone wants to have a go at producing binaries for the Mac with e.g. pyinstaller let me no so I can can give you the pyinstaller setup script I use on MS Windows.

BTW I was looking for the prices of a used Mac but let me tell you unless they change their insane price/hardware ratio I am not going to get one myself anytome soon.


Tuesday, April 13, 2010

Spendenaufruf für ein KBV-Abrechnungsmodul

Sehr geehrter Kollegen,

Praxissoftware verursacht einen beträchlichen Teil der
laufenden Kosten einer Arztpraxis. Grund dafür ist neben
Wartungsgebühren für die Hardware vor allem die Gebühr für die
Aktualisierung der KV-Abrechungsfunktionalität.

Mit dem hier gesammelten Geld soll ein herstellerübergreifendes
Abrechnungsmodul neu geschaffen werden, dass allen Herstellern über eine
definierte Datenaustauschfunktion die Abrechnungsfunktionalität

Dadurch entsteht für die Hersteller ein geringerer
Softwarepflegeaufwand der entweder in geringere Wartungsgebühren mündet
oder in bessere medizinische Funktionalität. Wir als Ärzte profitieren
davon, dass wir freier in der Wahl des Praxisprogramms werden und damit
die Software nach medizinischer Funktionalität aussuchen können. Weiter
werden wir unabhängiger von der wirtschaftlichen Zukunft des
individuellen Praxisprogrammherstellers.

Die Entwicklung ist transparent für alle beteiligten Parteien (Ärzte,
Hersteller, Vertriebspartner, KBV) und wird in ein von der KBV
zertifiziertes Programm münden.

Alle Informationen finden sich zentral im Wiki zum Thema KBV-Abrechnungsmodul

Lassen Sie es uns gemeinsam anpacken damit Praxissoftware nur
Werkzeug bei und nicht Inhalt unserer ärztlichen Tätigkeit wird.

Click here to lend your support to: KBV-Abrechnungsmodul and make a donation at !

GNUmed - not ugly but not pretty either

Hi all,

Yet another non-programmer task for the good of GNUmed. Recently it was reported that GNUmed as it stands looks neither ugly nor pretty. Recent comments on other software packages makes me believe that users do care about the looks of a software. While there are countless opinions on this this warrants a proper analysis.

Please help us by starting GNUmed now. Have a good look at it and report the worst cases of design problems.

GNUmed has a built in screenshot feature. Please use that or install a software like shutter. It will allow you to annotate the screenshots.

If you have a problem report for us either send it here of file a wishlist bug with launchpad (

GNUmed needs your help. Get it running now.

For those not wanting to install GNUmed there are some screenshot available at Flickr (


Monday, April 12, 2010

Features for 0.8 - have your say

Just FYI, my tentative TODO for 0.8 is:

- allow nullifying street comment in demographics plugin

- FIX OOo access
- send msg to self (reminder-type)
- visual progress notes:
        - improved template/file selection
        - add popup menu to visual notes list double click:
                - edit
                - display
        - display per encounter in tree
- freediams 0.4.0
- labs/meds: tabular formatting / placeholder

- vaccination handling
- visualize lab results
        templates, type "gnuplot"
- patient tags

Not sure whether all of it will make it or not. We'll see.

People should feel free to speak up as to what they'd like
to help me with getting done (including items not on my
above list). For the record: the visual progress notes
feature made it for 0.7 because the user who asked for it
actively helped in getting it down into code ! (no
programming needed ...)

The major feature I am really interested in getting into 0.8
would be vaccination handling. It'll come with a somewhat
simplified functionality (but still clean implementation)
compared to what we already have (but not yet released).

GPG key ID E4071346 @
E167 67FD A291 2BEA 73BD  4537 78B9 A9F9 E407 1346

GNUmed 0.7 erschienen

Sehr geehrte Damen und Herren,

Hiermit kündigen wir die sofortige Verfügbarkeit von GNUmed 0.7.0 (Server v13) an.

Die Datenbank muss wie bei einem Update üblich auf die
Version v13 erneuert werden. Die vorhergende v12 bleibt dabei
unangetastet sodass im Falle eines Problems mit dem Update
die Vorversion weiterverwendet .

Die aktuelle Version bringt überaschend eine neue Funktion - graphische Verlaufsnotizen.
Das sind Vorlagen, die mit klinischen Informationen überlagert werden können und direkt
neben Texteinträgen in die Karteikarte eingegeben werden.

Übersetzungen der GNUmed-Oberfläche sind gut vorangekommen, besonders die
niederländische Version.

Mehere größere Unstimmigkeiten wurden beseitigt. Dazu gehören Probleme beim Wechsel
zwischen Patientenkontakten und ein schwer zu findendes Problem mit dem Layout.

Es folgt eine Liste der Änderungen:


- neu: Verwalten von Laboren
- neu: Verwalten des Sterbedatums eines Patienten
- neu: Verwalten abgesetzter Medikamente
- neu: Umwandeln einer Medikamenteneinnahme in einen Allergieeintrag
- neu: sogenannte Haken/Makros zur Programmoptimierung
- Aufhänger after_substance_intake_modified
- Aufhänger after_test_result_modified
- neu: graphische Verlaufsnotizen
- neu: Unterstützung für die Medikamentendatenbankoberfläche FreeDiams inklusive Installationsskript
- neu: Kommandozeilenparameter --ui=<web/wxp> mit Prototyp einer Weboberfläche
- neu: Übersicht über alle Konfigurationsparameter
- neu: konfigurierbare Internetverknüpfung für Labortests
- neu: Linux: optionale Shutdownskripte, die aus /usr/bin/gnumed aufgerufen werden können.
- neu: Centor/McIsaac-Score als Schlüsselwörter
- neu: Hilfeseiten für Backupskripte
- neu: partielle Übersetzung für Catalan

- verbessert: Login-Dialog:
- Info zur lokalen Datenbank bei Fehlern
- zeige das Passwort nicht ;-)
- verbessert: zeige Allergien im Medikamentenbereich
- verbessert: warne beim Anlegen leerer Passwörter für neue Nutzer
- verbessert: Standardeinstellung für die Region/Land beim Anlegen neuer Personen
- verbessert: zeige Laborname und Kontaktdetails als Tooltips bei den Laborwerten
- verbessert: neuer Dialog zum Anlegen neuer Personen
- verbessert: Platzhalter:
- name::*::*
- verbessert: eine Reihe von Tippfehlern
- verbessert: stürze nicht ab beim Hinzufügen von Dokumenten für die es keinen Betrachter gibt
- verbessert: schnellere Darstellung im Dokumentenarchiv
- verbessert: ARRIBA ist nun bei Version 2.0.4
- verbessert: nutze Git als Quellcodeverwaltungssystem
- verbessert: nun direkt im Verzeichnis client/
- vebesssert: Fenstergröße beim Start nun nie größer als der Desktop/nie kleiner als 100x100 pixel
- verbessert: Niederländische Übersetzung
- verbessert: filtere Dateitypen bei der Auswahl einer Vorlage