• Aug 11, 2018

    HL7 Programming using HAPI - Testing Conformance Profiles

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for a quick introduction to the HL7 2.x standard if you are just getting started on it. My article on “HL7 Programming using HAPI - Message Validation” provided an overview of why technical and semantic interoperability within healthcare systems is needed, and the various challenges that exist in this space. In that tutorial, we also looked at various approaches that are utilized in HL7 2.x systems to address these challenges and then looked at features available within the HAPI framework that enable message validation. This included "basic" as well as "custom" message validation functionality*. In this tutorial, we will dive a into a more advanced topic around message validation called Conformance Profiles (also known as Message Profiles in HL7 2.x) and see how this is supported in the HAPI framework.

  • Jul 22, 2018

    HL7 Programming using HAPI - Message Validation

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for a quick introduction to the HL7 2.x standard if you are just getting started on it. So far in this series of articles, we have looked at how to create, send, receive and parse HL7 messages using the HAPI HL7 library. However, the ultimate goal in any message exchange especially in healthcare environments is to ensure that the information is semantically understood to the highest degree possible by the various parties involved. This ensures that no erroneous misinterpretation of the data arises. In some situations, errors could even mean life or death for the patients involved. Achieving technical and semantic interoperability is not easy, especially in the HL7 2.x standard which has a lot of optionality built-in. However, this optionality is also the cause of many issues since a lot of data is either not sent when it should be, or the data is sent in a different part of the message than where the data is expected by the receiving party. Additional...

  • Jul 15, 2018

    HL7 Programming using HAPI - Using Tersers

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for a quick introduction to the HL7 2.x standard if you are just getting started on it. One of my earlier tutorials in this series titled "HL7 Programming using Java" gave you a foundational understanding of how to build a simple HL7 message processing client and server using Java alone. We then looked at a Java library called "HAPI" for building larger HL7 applications and explored how to create, transmit, receive as well as parse HL7 messages using this library. In this tutorial, we will look at another way to access HL7 message information using "tersers".

  • Jul 13, 2018

    HL7 Programming using HAPI - Parsing HL7 Messages

    This is part of my HL7 article series. If you are just getting started with the HL7 2.x standard, please have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for a quick introduction. One of my earlier tutorials in this series titled "HL7 Programming using Java" gave you a foundational understanding of how to build a simple HL7 message processing client and server using the Java programming language alone. We then looked at a Java library called "HAPI" for building larger HL7 applications and explored how to create, transmit and receive messages in my three articles namely "HL7 Programming using HAPI - Creating HL7 Messages", "HL7 Programming using HAPI - Sending HL7 Messages" and "HL7 Programming using HAPI - Receiving HL7 Messages". In this tutorial, we will explore the many ways in which you can extract HL7 message structures such as segment, fields, components, sub-components, etc using the HAPI framework.

  • Jul 7, 2018

    HL7 Programming using HAPI - Receiving HL7 Messages

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for a brief introduction to the HL7 2.x standard if you are just getting started on the HL7 2.x standard. One of my earlier tutorials in this series titled "HL7 Programming using Java" gave you a foundational understanding of how to build a simple HL7 message processing client and server using Java alone and hopefully helped you understand the building blocks on which message communications occur using this standard. Although one can in theory build a HL7 client or a server application using such an approach, it won't be sufficient when needing to scale the message processing capabilities and support numerous versions of the HL7 2.x standard and the hundreds of message types and trigger events that are part of each HL7 2.x standard. We looked at a Java library called "HAPI" that was built for such a purpose, and then learnt how to create and transmit messages to a remote HL7 listener in my two articles "HL7 Programming using HAPI -...

  • Jun 30, 2018

    HL7 Programming using HAPI - Sending HL7 Messages

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for quick introduction to the HL7 2.x standard. One of my earlier tutorials in this series titled "HL7 Programming using Java" gave you a foundational understanding of HL7 2.x message transmission, reception and message acknowledgement. I then introduced you to a Java library called "HAPI" and showed you an example of how a HL7 message can be easily created using the library in my tutorial titled "HL7 Programming using HAPI - Creating HL7 Messages". In this tutorial, we will build on the previous tutorial and look at how we can transmit a HL7 message once we have assembled one to a remote system using the HAPI library.

  • Jun 22, 2018

    DICOM Basics - Handling Transient Errors during Communications

    This is part of my series of articles on the DICOM standard that I am currently working on (a number of them have already been completed). If you are totally new to DICOM, please have a quick look at my earlier article titled "Introduction to the DICOM Standard" for a quick introduction to the standard. This tutorial assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++.

  • Jun 17, 2018

    HL7 Programming using HAPI - Creating HL7 Messages

    This is part of my HL7 article series. Before we get started on this tutorial, have a quick look at my earlier article titled “A Very Short Introduction to the HL7 2.x Standard” for quick introduction to the HL7 2.x standard. This tutorial assumes you know Java or any equivalent object-oriented language.

  • Mar 30, 2018

    Blockchain in Healthcare

    The goal of this article is to provide a quick introduction to the blockchain protocol that is being adopted multiple industries including healthcare and finance. The recent popularity of cryptocurrencies such as Bitcoin, Ethereum and Ripple have caught the public imagination. These cryptocurrencies are based on a decentralized and distributed protocol called “Blockchain”, which itself is built on cryptography and game theory. The protocol gets its name from the blocks of transactions that are built progressively on one another forming a tamper-proof chain or digital ledger. The ledger is replicated to all participants in the network, ensuring everyone has access to the ledger, and no single entity controls it.

  • Feb 10, 2018

    DICOM Basics - Orthanc DICOM Server for Testing

    This is the next installment in my series of articles on the DICOM standard in which I want to introduce you to a charming little DICOM server called Orthanc that is powerful enough and production-ready and yet is simple enough to use in the subsequent articles in this series. In this tutorial, we will learn to quickly install and configure Orthanc server and then quickly perform a DICOM echo/verification using PixelMed toolkit as well as a standalone DICOM command line testing tool to verify basic connectivity. In the subsequent tutorials, I will cover DICOM network-related operations such as C-Find, C-Move, C-Store, etc by using this server to server as the remote party which will help us understand what it feels like to connect to a remote PACS server and pull and push images to/from. Let's go.

  • Jun 11, 2016

    DICOM Basics - Query and Retrieve Operations - Part 1 of 2

    This is part of my series of articles on the DICOM standard that I am currently working on (a number of them have already been completed). If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. It might be useful to also look at my other tutorials that have been completed so far to get up to speed on a number of topics including DICOM Encoding, SOPs and IODs. My DICOM networking-related tutorials covering my series of articles on the DICOM standard including DICOM Verification as well as DICOM Associations will also be very useful to understanding the material that I will cover in this tutorial. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++. A basic understanding of networking will also be useful to have but is not mandatory.

  • Dec 25, 2015

    Why Testing is Important to Me

    This is a follow up to my earlier article on unit testing focused on why unit testing leads to better internal design especially when developing complex software. Recently, I had a conversation with a friend of mine (who is not a software developer) about why I love being a programmer, how I develop software, and why I use automated unit testing and especially the practice of Test Driven Development (TDD) (first popularized by Kent Beck) in any work that I undertake. During this discussion I also shared my frustrations with him that despite TDD (and automated unit testing) becoming a proven and well-established practice within many organizations that aim to develop high quality software, most programmers that I run into (and others who work with programmers closely) are not always enthusiastic about adopting it. The two main reasons I hear are: one, they don’t see the value of it because they have a dedicated QA team or end users who will catch any defects during formal testing phase to happen near the end of the project, and second, it supposedly takes twice as long to develop software as you now have to account for the time to write...

  • Oct 19, 2014

    DICOM Basics - Understanding Association/ Negotiations

    This is part of my series of articles on the DICOM standard that I am currently working on (a number of them have already been completed). If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. It might be useful to also look at my other tutorials that have been completed so far to get up to speed on a number of topics including DICOM Encoding, SOPs and IODs. My introductory tutorial covering DICOM Verification will also be very useful to understanding the material that I will cover in this tutorial. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++. A basic understanding of networking will also be useful to have but is not mandatory.

  • Oct 18, 2014

    DICOM Basics - Understanding DICOM Verification

    This is part of my series of articles on the DICOM standard. If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. It might be useful to also look at my other tutorials that have been completed so far to get up to speed on a number of topics including DICOM Encoding, SOPs and IODs. This should aid in the understanding of the material in this tutorial as they show you how DICOM information is transmitted. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++.

  • Oct 13, 2014

    DICOM Basics - Understanding DICOM Directory

    This is part of my series of articles on the DICOM standard. If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. It might be useful to also look at my other tutorials titled “DICOM Basics - Making Sense of the DICOM File” and “DICOM Basics - Creating a DICOM File” to understand the structure of a DICOM file as well as how it is created. This should aid in the understanding of the material in this tutorial as they show you how DICOM objects are encoded. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++.

  • Oct 8, 2014

    DICOM Basics - Viewing DICOM Images

    This is part of my series of articles on the DICOM standard. If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. It might be useful to also look at my other three tutorials listed below to understand what is inside a DICOM file:

  • Oct 6, 2014

    DICOM Basics - Extracting Image Data

    This is part of my series of articles on the DICOM standard. If you are totally new to DICOM, please have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a quick introduction to the standard. As this tutorial requires some understanding of the structure of the DICOM file and the encoding process used for embedding content within it, please also have a look at my previous tutorials “DICOM Basics - Making Sense of the DICOM File” and “DICOM Basics - Creating a DICOM File”. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++.

  • Sep 29, 2014

    DICOM Basics - Creating a DICOM File

    This is part of my series of articles on the DICOM standard. Before we get started on this tutorial, have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a short and quick introduction to the standard. As this tutorial requires some understanding of the structure of the DICOM file, please also have a look at my other tutorial titled “DICOM Basics - Making Sense of the DICOM File”. This tutorial also assumes that you know the basics of Java or any equivalent object-oriented language such as C# or C++.

  • Sep 28, 2014

    DICOM Basics - Making Sense of the DICOM File

    This is part of my series of articles on the DICOM standard. Before we get started on this tutorial, have a quick look at my earlier article titled “Introduction to the DICOM Standard” for a short and quick introduction to the standard. Please note that this tutorial assumes that you know Java (or any equivalent object-oriented language such as C# or C++).

  • Dec 4, 2011

    The Natural History of Love by Morton Hunt

    I bought this book at a used bookstore in Saskatoon nearly 5 years ago and didn’t read it until recently. Although I bought this book thinking that it would make a great gift for a friend of mine, I changed my mind and held on to it as I really liked what I saw in the first few pages. Unfortunately, this book would sit on my bookshelf for another four years while I was busy with other books. And when I finally did come around to reading it, I regretted not having got to it sooner.

  • Feb 10, 2010

    Unit Testing 101 For Non-Programmers

    Seeing the many challenges in the field in terms of adopting unit tests, I am totally convinced that a basic awareness of the inner workings of unit testing needs to exist even for the non-programmer who works closely with software delivery teams to ensure that teams use unit testing to help produce high quality software that is easy to enhance or modify. This article explains the fundamentals of automated unit testing as well as how to adopt automated unit testing within your organization.

  • Feb 10, 2010

    Automating PDF-related Structural Testing

    Please note that this tutorial assumes that you have at least a rudimentary knowledge of Windows PowerShell scripting. If not, there are plenty of tutorials on the web to get you started. No other prerequisites will be required to follow along. One more thing to note is that although PowerShell enables a programmer to write a compact script through the use of aliased commands, I will be using the longer form of many commands to make the script a little easier to understand for the beginner.

  • Feb 10, 2010

    Introduction to the DICOM Standard using OsiriX

    This is part of my series of articles on the DICOM standard. I decided to write an introductory tutorial on the DICOM standard as there were not many articles on the Internet that singularly cover all aspects of this very large standard through an example-based approach which helps the learner relate to the underlying concepts quickly by means of association. Many people I know who work with DICOM daily often deal only with a few aspects of this vast standard. So, my hope is that by providing a broad overview of all aspects of this standard, there is something useful to take in for everyone.

  • Oct 17, 2009

    People and Software Development

    Recently, I was a lucky recipient of a great book on software development titled “Domain Driven Design: Tackling Complexity in the Heart of Software” by Eric Evans. Many people in the field consider this book a classic, and I quickly found out why. Reading the book sparked my motivation to finally do something that I have been meaning to for some time; this was to capture (at least for my own benefit) a list of good practices for delivering great software.

  • Sep 21, 2009

    My Trip to Egypt

    Egypt had always been a place I wanted to visit for many reasons. Its influence on world history, specially in the areas of mathematics, astronomy, arts and religious thought has always fascinated me since childhood. During my previous trips with my wife to some countries along the Mediterranean coast, I was also able to witness these influences firsthand, especially in areas such as Mycenae and Crete. So, when I got an opportunity to travel to Egypt with my parents, I accepted without any hesitation.

  • Sep 21, 2009

    Ascent of Man by Jacob Bronowski

    After seeing this book repeatedly quoted and referred to in several other good books that I had read in the past (including Carl Sagan's), I finally found time to read it recently. I managed to read this in a week as I devoted almost all my leisure totally absorbed in what I consider as a must-read book for all humans.

  • Feb 26, 2009

    The Big Picture - Universe,Life,DNA and Other Things

    I was recently reading a news article about the collision that is expected to occur between the Andromeda galaxy and the Milky Way (our galaxy) roughly 5 billion years from now. After reading this article, I spent some time reflecting about the origins of the Universe, the Solar System, our planet and the origins of life on it. While doing this, I was humbled thinking about the events that occurred on a bewilderingly immense scale in the distant past that would eventually lead to life on Earth, and even to me sitting here in my study, contemplating and attempting to write my thoughts about it.

  • Feb 22, 2009

    On the Origins of Language

    A few weeks ago, I watched Mr. Barack Obama being sworn in as the forty-fourth president of the United States. At the end of his inauguration speech, I reflected on the events leading up to his election. For me, what stood out very clearly during his campaign was the show casing of his incredible oratorical powers, a skill that seemed to neutralize whatever strengths his opponents had, as well as down play any of his weaknesses. I was also very impressed by the communication skills displayed by his campaign committee through the media to help mobilize millions of Americans, especially their younger generation, to raise funds for his campaign, as well as inspire them to go and vote at both the party as well as presidential polls. The combined power of his speeches along with his campaign advertising galvanized people not only in the United States, but across the entire globe as well. I could not recall a single time in the last few decades when a politician spoke in such a inspirational manner, and rallied a people towards change. For me, his election also helped confirm that oratory skills are an asset to hone and develop even in...

  • Feb 21, 2009

    HL7 Programming using Java

    Building custom applications using the HL7 standard can be a very daunting task for a beginner. I have built a number of custom HL7 server applications over the years and couldn’t have done it without the help of others in the field through my many discussions with them over the Internet. As I got more proficient, I also received a number of emails from other developers/customers asking the same questions that I did when I was getting started on this standard. Therefore, in the spirit of sharing, I decided to put together an example/tutorial illustrating all the minimal basics any programmer dealing with the HL7 standard should know when getting started.

  • Feb 16, 2009

    A Very Short Introduction to the HL7 2.x Standard

    This is an introductory tutorial on the HL7 2.x standard. I just cover just enough basics to get you started. In the subsequent tutorials, we will dive into the details more when we look at it from a software development or configuration perspective.

  • Dec 27, 2008

    The Joy of Reading

    Recently, I found some leisure time to read two great books, namely, “Dragons of Eden: Speculations on the Evolution of Human Intelligence” written by the late Dr. Carl Sagan, and “A History of Knowledge: Past, Present and Future” written by Charles Van Doren. I was so thrilled by the experience that I had to blog my thoughts about one of my most favourite hobbies, namely, reading.

  • Sep 9, 2008

    On Gossiping...

    Recently, I ran into an old Turkish proverb that said: “Who gossips to you will gossip of you !!!”. This struck a chord with me, and I want to add my own thoughts around what I consider to be a deep insight provided by this excellent proverb.

  • Apr 7, 2006

    Our Trip to Greece

    The story of King Porus, and the valour he exhibits during his many battles with Alexander the Great and his Macedonian army is a popular story narrated to all kids who grow up in India. Although there is disagreement among world historians to this day regarding the historical accuracy of these battles, including the result, what is at least well known is that, after the battles, the two developed a lasting friendship that lasted their life times. Although Alexander’s began his campaigns in Asia mostly motivated by revenge, and for accumulation of wealth, he inadvertently also created a “cultural highway” between the west and east, and this helped spread many ideas on art, literature, science, mathematics and religion in both directions.

  • Apr 7, 2006

    Power of Forgiveness

    Recently, I witnessed some incidents in the lives of some friends which prompted me to write about the power of forgiveness and its many benefits. Although many people still view forgiving as a weakness, I think that there are many psychological and physiological benefits for both parties from the act. For the forgiving person, it helps prevent any resentment or bitterness from being carried forward into the future, which could otherwise become detrimental to their own long-term health and happiness. On the other hand, for the person receiving the it, the respect and admiration they have towards the forgiving person often grows many fold. Having benefited from forgiveness from strangers, friends, family and co-workers on numerous occasions myself, I also believe that by receiving forgiveness from others, we become very forgiving ourselves. And the goodwill generated from the act is passed onto the other members of the community with whom the affected individuals interact with frequently and helps foster peace and happiness for everyone.

  • Nov 18, 2005

    Our Trip to Turkey

    After reading so much about Turkey and its history during my childhood years,and spurred on even more by watching a number of historical documentaries about the Trojan Wars as well as on the history of the Ottoman Empire, I convinced my wife to go on a trip to Turkey. As we did not have any friends or family there, we decided to take a packaged tour from Trafalgar called “Best of Turkey 2005”. The tour was an absolutely delight. We were joined by other tourists from the United States, Australia, New Zealand, Saudi Arabia and Taiwan. The places we visited included the Gallipoli Peninsula, Cannakkale, Troy, Izmir (or Smyrna), Pamukkale, Hierapolis and Antalya, Konya, Cappadocia, Ankara, Gordion, Bursa and Istanbul.

  • Dec 18, 2004

    The Broken Windows Story

    Some days ago, I was reading an excellent book that was recommended by a colleague/mentor. The book was called "Pragmatic Programmer" (written by Andrew Hunt and Dave Thomas), and one story in the book really stood out for me. It was titled "Don’t live with Broken Windows". The story was based on a crime-related study that showed that when police tackled seemingly small crimes (such as broken windows, graffiti, etc.) more aggressively, the rate of big crimes also reduced as a result in those neighbourhoods. People living in those areas felt a heightened sense of pride in their neighbourhood as a result. The authors then draw an excellent analogy to the software industry and to the fact that when quality of software goes unaddressed, even seemingly small problems escalate to large problems eventually, and the team morale also begins to suffer.