An Asian FOSS EHR – Hospital OS – the Thai experience

August 6, 2006

Hospital OS

Thailand has developed a FOSS based EMR system for the use in Rural Hopitals. Developed using Linux, PostgreSQL and Java technologies, it is now in version 3.0. It looks quite robust and comprehensive, and it should be a very interesting project for most developing countries to get involved in.

The client is based on Java and Java Virtual Machine and the client software has to be installed on all clients, a bit of a let down as a web based interface will allow anyone to access the system quite easily without any additional addition of software. But a specialised client adds speed and security sometimes.

Report generation seems to require MS Access, which is also something to work on. Why not the new Open Office Base?

The project is funded and supported by a few organizations based in Thailand, which is a plus point for a FOSS application.

Features curently available:

  • Registration and simple Electronic Medical Record system
  • Out-patient service
  • In-patient service
  • Investigation: X-ray, Laboratory request and result report
  • Pharmacy: dispensary and stock
  • Cashier
  • Management information system and Financial Information Management system

The value of ignorance

July 28, 2006

Ignorance should not be considered a negative quality. Indeed without it the world will be dull and without drive. Most of the greatest advances in the world came about because people with great minds understood their ignorance and went out looking for answers. When they did, sometimes they found answers that had little to do with the original question that set them going!

Our spiritual leaders also went out looking for the truth, because they were aware of their ignorance. Thus it is quite clear that searching for ignorance is as important as searching for the truth. Studying ignorance is as important as studying knowledge – the answers. Ignorance is explored by the clever questions – more importantly – the correct question. The wrong questions will only lead to more ignorance and waste our time.

Ignorance is the cause of all the problems we face, particularly spiritual ignorance.

Puppy 2

July 15, 2006

The new version of Puppy Linux, Puppy 2, is quite sensational!

Download it from the site. 71MB ISO, to your HDD. Burn the iso to a blank cdrw. Put it in the CDRW (You can do things even better if you have a DVD writer too ). Make sure your CDRW is set to bootable in the BIOS.

Boot with the CD. You will be in the Puppy Linux desktop pretty quick. You will be asked for the type of keyboard (azerty) mouse and if you have a wheel mouse just before that.

Once in the desktop right click on the desktop, go to the multimedia section and click on Graveman. Click on “Other Operations ” and choose erase CDRW and erase the CDRW.

Click on the drives icon on the top of the desktop and mount the partition on which the iso was downloaded, and click mount. You will see the directories/Folders on that drive.

Right click on the desktop, go to Multimedia, choose Burniso2cd.

Choose CD (not DVD), choose the mounted drive, choose the iso file (/mnt/downloads/puppyxxxx.iso for example) click OK.

Click on Multi-CD and OK.

The ISO will be written to the CDRW. Takes some time. Once done, restart PC. It will bootup with the multisession version of the Puppy2!

Choose azertry keyboard, mouse. scroll mouse etc as you bootup and choose xvesa for now or start XORG and hope for some luck 🙂

Let us assume you loaded with xvesa. In the desktiop, choose the video resolution and click OK.

To setup internet connection click setup icon on the desktop. If you have an ethernet connection, choose cable ethernet, Load driver – auto probe. Success! OK!. Click Save button. In Interfaces click eth0 and choose Auto DHCP.

Network Configuration of eth0 successful!! will be displayed. Save the configuration? Yes.

Click the Browse button and go to Google to see if things work.

To get your bookmarks from the HDD, on the browser menu, Tools – Import and find the Bookmarks. html file on the Hard disk and you will have your bookmarks available to you!

Grab some folders and iles from the HDD that you will like to have with you and paste them on your CDRW home folder. Include a mp3 or ogg vorbis music file to test sound.

When you log out all the changes will be saved to the CDRW itself!

The safest way to go on the internet!

Have fun!

Zope heads towards WSGI and Twisted integration

June 25, 2006

The latest zope 2.10.0-beta, includes experimental WSGI and Twisted integration. The Web Server Gateway Interface defines a simple and universal interface between web servers and web applications or frameworks for the Python Programming language. This will bring a universal interface for easier integration of web applications/frameworks and servers.

Twisted is an event-driven asynchronous networking framework written in Python and licensed under the Free Software MIT license. It supports TCP, UDP, multicast, SSL/TLS, serial communication and more.

Zope now has a WSGI interface for integration with other web-servers than ZServer. Most notably Twisted is supported. The WSGI application is ZPublisher.WSGIPublisher.publish_module

You can make ZServer use the twisted interface with the "use-wsgi on" keyword in the http-server section in zope.conf.

You can run Twisted by installing Twisted (2.1 recommended) and replacing the http-server section with a server section in zope.conf.

It is not possible to run a Twisted server together with a ZServer at the same time.



 There are also several changes towards Zope3 withseveral Zope 2 modules replaced with their sister implementation of Zope 3, and the ZPT (Zope Page Templates) is also based on Zope3.

Zope Page Templates (ZPT) are an HTML/XML generation tool.

The ZPT standards include: Tag Attribute Language (TAL), TAL Expression Syntax (TALES), and Macro Expansion TAL (METAL).

OIO Advanced Form Controls tutorial example

June 17, 2006

This is a really cool feature in OIO!

Let us go through an example tutorial. Let us make an advanced interactive web form which will allow us to record
1. date of operation
2. system – upper GI, Urinary, Lower limb etc. as a pickone list. Choosing one will open a list of operations, related only to that system, in the third field called
3. operation

Then we add a yes no field to note if there was a post operative complication, and if yes is chosen, a text box opens to write the details, right?

Start OIO and click the forms menu and then pick Add_a_new_form
Give the form a name Oplist (first letter is a capital letter)
Add a new question item called
system (field type is blank) and another called operation (type is blank too).
Archive it by clicking the now button, then click create a new version.
We have an archived form called Oplist_v0

Next create another new form called Operations (first letter capital)

click “add a new response type”
call it system (all simple letters)
form,question item=Oplist_v0,system

click “add item type” button.

Click “add a new response type” again.
From, question item=Oplist_v0, operation
click add item type button

Click “add a new response type” again.
choice=no, yes
click add item type button

You should be really careful about what you type, as any typing erors …er errors will cost you time!

Remember, if you are short of time, go slowly!!!

We have now added the necessary new response types, so let’s create the Operations form.

Add a new question item
item name= date
question prompt=Date of operation
click “add item”

Add a new question item
item name= system
question prompt=System
Response=system (choose this from the list)
click “add item”

Add a new question item
item name= operation
question prompt=Operation
click “add item”

Add a new question item
item name= complication
question prompt=Complication
click “add item”

Add a new question item
item name= description
question prompt=Describe complication
click “add item”

That’s it!

Let us test it out first.

Forms – myforms
click the Operations forms under the column “name”
click preview/test form

If some of the items in the eg:operation is in red letters and the box in front is missing – you have made a mistake – check response types to see if there are spelling mistakes when writing eg: Oplist_v0 where you have typed in the letter o instead of the number 0 for example 😉

Let us add some stuff.

Patients-my patients -add a patient called first name “abc” last name “formipig” – sort of like guninea pig ;-), choose this patient from the list and click “forms” and open the Oplist form

add these and click add each time

system=upper limb
operation=Carpal Tunnel Decompression

system=lower limb
operation= Total Knee Replacement

system=lower limb
operation=Total Hip Replacement

Go on, enjoy yourself!


Let us now try out our advanced form called Operations

from within a patient, choose the Operations_ v0

Pick one from the list in System and see how the operation in the next list is not selected but all that you typed in are sen in the list.

Choose from the list on the left, saying “archive” by default, advanced form controls and click “now”.

If SELECT is seen

if system constrains operation then use column system
(type things carefully no spelling mistakes or capitalization errors)

click SET

Now do this.

If complication equals yes (type this word in) then reveal describe
click SET
click COMMIT

Now under a patient, choose the form Operation and see how things work!

If you need to add more to the system and operations, open the form Oplist under patient “formipig” and start filling in!

Please keep your health record, yourself – use PING!

June 9, 2006

With the increasing use of IT in Healthcare, private information about patients are on “public” places. Electronic patient records are maintained in hospitals and other healthcare facilities, including General Practitioners. This is a medico-legal time-bomb. Security issues, fears of Big Brother State control, privacy, safety, legal action, insurance to cover these areas are some complex issues that will come up.

One way out of this situation is to allow patients to keep their own records and be responsible for them. This will also ensure their availability to the right people, determined by the owner of the records. These are issues of identity – knowing you and yours, them and theirs!

Personal Internetworked Notary and Guardian or PING, was started few years ago as an open source project, to find such a system and make it as secure as possible.

A project of Harvard Medical School, MIT, and Children’s Hospital Boston, it has come a long way.

“PING is the world’s first personally-controlled health record system. It enables a patient to own a complete, secure copy of her medical record, integrating health information across sites of care and over time. PING is built to public standards as an open-source application platform.”

” The security model is extremely strong with each record individually encrypted. Hence, even if a server or backup tapes are comandeered, the individual records cannot be opened.”

“PING record owners can subscribe to data updates from hospital information systems, practices, and regional health information organizations (RHIOs) also known as subnetwork organizations (SNOs). PING records can also be registered with regional record locator services making their data available to institutions within the RHIOs/SNOs”

Thus, Personally Controlled Health Records are born. The PING software is composed of three components, including a client side application. The software is covered by the LGPL

Installing OIO 1.1.0 in Ubuntu Linux – Breezy.

May 13, 2006

Installing zope on ubuntu took some time.

To do it with debs: Apt-get the following stuff – can use synaptic (system-administration-synaptic package manager):

  • build-essential
  • python2.3 and python2.3-dev
  • python2.3-xml
  • python2.3-imaging
  • postgresql server and client -use 8.0 version
  • postgresql common
  • postgresql-server-dev
  • libpq-dev
  • zope2.7-psycopgda
  • zope-parsedxml

parsedxml package may be downloaded and installed by simply unpacking it in the usr/lib/zope2.7/lib/python/Products directory


as superuser – sudo su
Create a zopeinstance for yourself.

As su

Give the directory – /home/yourname/oioinstance give the username and password

start the instance
/home/yourname/oioinstance/bin/zopectl fg Everything OK? Ctrl-C to shutdown

ZpsycopgDA in Ubuntu is in /usr/share/zope/Products

then from my INSTANCE_HOME of /home/yourname/oioinstance/Products as sudo

  • sudo ln -s /usr/share/zope/Products/ParsedXML

Start zope and see if these products are available in ZMI

look at
There is a zope.conf file.

Edit zope.conf

Look at this part
%define INSTANCE_NAME zope2.7instance
%define INSTANCE /home/yournamel/zope2.7instance %define ZOPE_NAME zope2.7
%define ZOPE /usr/lib/zope2.7
%define ZOPE_USER zope
%define HTTPPORT 9673

ZOPE_USER has to be postgres.

%define ZOPE_USER postgres
chown -R postgres:postgres /home/yourname/oioinstance and chown -R postgres:postgres var/log/zope2.7/oioinstance

start zope
sudo su postgres

/home/yourname/oioinstance/bin/ zopectl fg

log into the ZMI by opening the browser and localhost:9673/manage
Give the userid admin and the password you used, originally. Add a manager user for your use.


Postgresql 8.0 in Ubuntu can run at startup automatically.
To control postgresql via a GUI interface download pgadmin3 via apt or synaptic and start it by typing pgadmin3 at the prompt in a terminal.Postgresql commands are in


To initialize the database and run the postmaster server do this

sudo su postgres (give you Ubuntu password when asked)

cd /usr/lib/postgresql/8.0/bin

./initdb -D /var/lib/postgresql/data

there will be some happy messages of success!!

From now on to start the postmaster
as postgres
$ cd /usr/lib/postgresql/8.0/bin/
$ ./postmaster -D /var/lib/postgresql/data

You get

LOG: database system was shut down at 2006-04-07 07:56:38 MDT
LOG: checkpoint record is at 0/B68CB8
LOG: redo record is at 0/B68CB8; undo record is at 0/0; shutdown TRUE
LOG: next transaction ID: 1368; next OID: 17451
LOG: database system is ready
If you want to close it down do Ctrl-C at the terminal

Open another terminal, su to postgres user
cd space enter to go to the home directory of postgres
createdb local_text
createdb publicdb

Or just start pgadmin3
add server from file menu or right clickl on the “servers”
address= localhost
description = pgserver
inital db=template1
need password – clicked
password=type in password with great care 🙂

when it appears right click and click connect. Enter password when asked.
Now right click on it and add the databases

Now add OIO

Zope and postgresql are installed and both servers running.

Zope has to be started by postgres user.

Put the in the import directory
sudo su
cd to the import directory
chown -R postgres:postgres OIO
cd OIO

when asked for the zope directory give
when asked for the instance give

login to ZMI, open the acl_user folderadd user oio role as manager with password

close browser

run browser again and login to ZMI
In the root folder import tab and import oio.zexp -will say done!
(Sometimes in certain versions of zope In control panel Products import tab and import oio.zexp -will say done! Now get to the root directory and add an oio instance id=oio}

Refresh browser
click OIO folder in the left panel and get to Properties tab
my_database to publicdb

auto_his_assignments – change to no ( it is set as “yes” by default )

Correct the URL of the base_URL (at the bottom part of web form) as follows
Set the external base and forms URL to the same as above

Set the reports URL to
transaction_URL to
save changes NOW!

Refresh browser
click OIO folder in the left panel and get to
click on define_initial_tables on the right panel
click on the view tab
DONE! should appear.

Refresh browser

navigate to OIO/postgres/initialize/
Click on run_me on the right panel
click on view tab
Some succesfull messages will run with All Done! at the end, and you will be asked to
create first oio user =oio
Done! should appear.

All Done!

close browser

start browser as http://localhost:9673/OIO

Standards are important – sometimes. Interoperability – always.

April 29, 2006

The LSB 3.0 was released this month by the FSG. The Free Standards Group is an independent, nonprofit organization dedicated to accelerating the use of free and open source software by developing and promoting standards.

The Linux Standard Base (LSB) is a core standard for the Linux operating system that encourages interoperability between applications and the platform. It includes a written binary interface specification, a set of test suites for both distributions and applications writing to the standard, and a sample implementation for testing purposes.
The OpenI18N Standard (formerly Li18nux) is the internationalization standard for application developers writing for Linux and other platforms. The OpenI18N Workgroup has led the development of an open framework for internationalization and localization, including a written specification and test suite.

Many of the popular Linux distributions support the standards. The importance of standards is to allow software developer, vendors and users to easily develop/sell/use software, without too much worry as to how it will perform in a particular linux platform. There is also no need to develop the same software for different platfoms. This will save money and time for developers and Independent Software Vendors (ISV).

Much more important than all this is that, standards will allow interoperability to reallly work . This will give the freedom to exchange information between any two applications that are based on the standards. The restrictions imparted by standards provide the freedom to share!

It is also crucial for the free and easy distribution and use of middleware, such as ObjectWeb

But interoperability is the area where FOSS can really score, and thus standards are a must for FOSS to leap ahead.

zope catches up with python

March 22, 2006

The Zope 2.9 series uses Python 2.4. Until this time Zope 2 was using 2.3. This was not very pleasing as the many advances made to python upgrading from 2.3 were not been made use of. Since Zope is pythons’ killer application, it was sad for python too. I found that some python software could not be used in zope due to this.
There would have to be upgrades of most zope Products now, to work in this new envioroment. How is python 2.4 better than 2.3? It is faster! Read the highlights here:

Zope 3.2 the latest stable version of the Zope 3 also runs on python 2.4. One important change here is the change of the server from ZServer to Twisted server.The Twisted server supports all that the ZServer supporting as well as HTTP over SSL natively and SFTP (disabled for now because of error handling problems). Also in the future it brings a better chance of other non-HTTP related protocols from being implemented for Zope3, like SMTP-in and IMAP.

The 2.9 and 3.2 versions of Zope both use the new ZODB 3.6. The ZODB is a persistence system for Python objects. Persistent programming languages provide facilities that automatically write objects to disk and read them in again when they’re required by a running program. By installing the ZODB, you add such facilities to Python.

Though there will be some hiccoughs as the migration occurs this is a positive step!

Robotic Surgery

March 14, 2006

The use of Robots will rise in the future, and despite the evil reputation given to them by the film and game industry, the robots we see and use are quite the opposite. Robots used in surgery are completely controlled by surgeons, so do not worry . It is not a seven year old kid at the other end…….

Robots are used in surgery because they have certain advantages over humans.

  • More arms and hands and fingers and types of fingers
  • Hands and minds that do not tire even after hours of work
  • Ability to hold positions indefinitely
  • Precision
  • 3-D vision
  • Get closer to the area of surgery than the human vision will allow

They do have disadvantages like the lack of tactile sensation and inability to tell the surgeon if he is doing something wrong! They are liable to technical failures and depends on on a power supply. If doing remote surgery the communication system has to work well too. Since the patient is still operated by a surgeon sitting behind a console, the surgeon tiring will still be a limitation. However some of these these will be attended to in the future. The present day robots will be laughably simple in 10 years time.

The da Vinci Robotic Surgical System is the most widely used and known. It is used to perform Laparoscopic surgery as well as Cardiac and Neurosurgery. The whole system is controlled by a surgeon. The surgeon can be in the operating theatre, outside it or even in another hospital in another country. He sits at a control and handles the equipment stuck into the patient by moving his hands which are put into the controls which are something like gloves. He also uses his feet to press pedals like that of a car to handle the gears that move the instruments, like a clutch.

da Vinci

This is the da Vinci robotic surgical system. Teh surgeon is seated at the far left of the picture behind the console.
Other than the da Vinci, there are the ZEUS and AESOP (Automated Endoscopic System for Optimal Positioning ) robotic systems as well.

While these big systems are actually in use, there is another set of robots that are growing. These are tiny robots that will grow with the development of nano technology. These robots can get into the human body and work from within. They too will be controlled by surgeons but will elevate treatment of many conditions to a totally new level. They wil also play an important part in diagnosis.

Nanomedicine is a whole new field of medical science that is developing. Nanobots will be really tiny robots maybe the size of a human cell! They could get to sites in the body that we cannot imagine and deliver medicines, radiotherapy, chemotherapy, induce the immune system to be attracted to a site, repair genes and perform minutely precise surgery.

Imagine what these little robots can get ina and do under remote control? You could be on earth and “operate” on people in space! Far fetched? Read this: