Tuesday, February 23, 2016

WiFi Channels 12 and 13 on Asus ZenPad S 8 and Sony Xperia S not visible

I bought my daughter a Asus ZenPad S 8.0 (Z580C). Wonderfull android tablet with Android 5.0, but one day her WiFi stopped working.
Actually the wifi worked fine, just my home networks were not visible.
Turned out the the ZenPad just did not work on channels 12 and 13.
I turned off channels 12 and 13 use on my WiFi router and the problem was solved.
I found no options on either the ZenPad or XperiaS to enable those channels as yet.

Wednesday, January 27, 2016

SparQL SnomedCT with Jena Fuseki

Above is what I tweeted ... and then people asked for the link... So I have to write the recipe in a blog. Hope this answers the questions.

The result is a Web User Interface (and REST) to do SPARQL on the SNOMED CT ontology.

The ingredients:
  1. SNOMED CT RF2 files - We have a license and receive the CD version.
  2. Java 8 <https://www.oracle.com/java/>
  3. Git <https://git-scm.com/downloads>
  4. Apache Maven <https://maven.apache.org/download.cgi>
  5. IHTSDO snomed-publish <https://github.com/IHTSDO/snomed-publish>
  6. Apache Jena & Fuseki <https://jena.apache.org/>
  7. Patience or fast machines ;-)
The machine:
  1. I used a VM 2.8Ghz / 4Gb - I guess 8Gb is better, but this worked for me
Directions:

1. Preparations
  1. Make sure you have Java 8 installed
  2. Get your hands on the RF2 files from SNOMED CT (I used the "snapshot" version)
    1. Delta contains SNOMED CT changes since the last release
    2. Full contains full history of SNOMED CT since 2002
    3. Snapshot contains the latest version of SNOMED CT
  3. Download and install Git
  4. I like the command line tools, but you could also go for the GUI version SourceTree <https://www.sourcetreeapp.com/>
  5. Download and install Maven
2. Build IHTSDO snomed-publish

The IHTSDO snomed-publish package contains a component called the rdfs-exporter that can convert the RF2 format into Tripples. The Triples file is needed to populate the Triple Store (TDB) that Fuseki uses.

Some background information:
https://github.com/IHTSDO/snomed-publish/blob/master/config/README.md
https://github.com/IHTSDO/snomed-publish/tree/master/client/rdfs-export-main

Some package don't compile, I don't know why. We only need rdfs-export-main, but it depends on some of the other components. Luckily Maven has the "-fn" option, that makes maven not stop when a component fails.

Open a cmd box and go to the snomed-publish folder and run:
> mvn clean install -fn
You will see a lot of output and some errors. Just ignore.
Now go to client/rdfs-export folder and run:
> mvn install 
The result will be the rdfs-export.jar file in the client/rdfs-export-main/target folder.

3. Now we need the RF2 files to convert into Triples

Go the the RF2 folder and run (fill in the jar ):
> java -Xms4000m -jar /rdfs-export.jar -c sct2_Concept_Snapshot_INT_20150731.txt –d sct2_Description_Snapshot_INT_20150731.txt -t sct2_Relationship_Snapshot_INT_20150731.txt -if RF2 -of N3 -o sct.n3

The output will look something like this:

4a.

Use N3 can be directly used bij jena tdbloader! ?? rdfparse still seems nessesary..
> rdfparse sct.n3 > sct-pure.n3

4b. Create the Triple Store

Create tripple database from SCT N3 file... 
> tbdloader –-loc=d:\work\TBD sct-pure.n3

5. Start Fuseki

> fuseki-server –-loc=d:\work\TDB /sct

N.B.
Default Shiro config of Fuseki stops Fuseki from showing any datasets when accessed not from localhost. Simpy edit run/shiro.ini and change “/$/** = localhostFilter” to “/$/** = anon” does the trick.


Now you can browse to localhost:3030 and you should see something like this:

Click on "query" and have fun sparql-ing SNOMED CT!

Some SPARXL examples:

Get properties and values of a specific class "Procedure (procedure)"

PREFIX sct:
PREFIX rdfs:
SELECT ?property ?obj
WHERE {
  sct:71388002 ?property ?obj .
}

Check if a class is a kind of "Procedure (procedure)" regardless of path length.

SELECT ?property ?obj
WHERE {
  sct:250404007 ?property ?obj .
    sct:250404007 rdfs:subClassOf+ sct:71388002 .
}

Wednesday, March 18, 2015

Get Outlook Web Premium on Linux with Chrome

I switched to Linux Mint and use Chrome as my preferred browser. No I ran into the "issue" that Outlook decided to switch to the Lite version. That is really annoying.
There is an easy fix for that! It is an Extension for Chrome called "User-Agent Spoofer for Chrome".
You can configure it to spoof the User-Agent only for the web outlook URL.
The User-Agent can be found in "chrome://version" page.
  1. Go to the menu and select "More tools / Extensions"
  2. Click "options"
  3. Select the "Permanent spoof list"
  4. Fill in your domain
  5. I selected "Android KitKat" as User-Agent and that seems to work just fine
... Hmm. That did not work. The trick is to first select IE10 and then you will get an ActiveX message. Ignore that and change the User-Agent to the Windows version. Something like this: 

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36

This is actually the same as for Linux except the "(Windows NT 6.1)" part.

Some functionality that is still not working :-(
  1. Attach files

Tuesday, October 29, 2013

X-Mouse or Focus-Follow-Mouse on Windows 7

I started using Windows 7 only because my Windows XP machine's harddisk was failing on me. My new machine came with Windows 7 installed. After some tweaking the settings I could not find a way to enable the Focus-Follow-Mouse-Without-Raising-Windows behaviour I was used to. On Windows XP I used Tweak UI to enable this, but that doesnot exist for Windows 7. Turned out the following C# Console Application does the trick!

For more info look at the SystemParametersInfo function documentation at MSDN.

using System.Runtime.InteropServices;

namespace SPI
{
    class Program
    {
        [DllImport("user32", CharSet = CharSet.Auto)]
        public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, bool pvParam, uint fuWinIni);

        /// Determines whether active window tracking (activating the window the mouse is on) is on or off. The pvParam parameter must point
        /// to a BOOL variable that receives TRUE for on, or FALSE for off.
        /// Windows NT, Windows 95:  This value is not supported.
        public const uint SPI_GETACTIVEWINDOWTRACKING = 0x1000;
        /// Sets active window tracking (activating the window the mouse is on) either on or off. Set pvParam to TRUE for on or FALSE for off.
        /// Windows NT, Windows 95:  This value is not supported.
        public const uint SPI_SETACTIVEWINDOWTRACKING = 0x1001;
        /// Determines whether windows activated through active window tracking will be brought to the top. The pvParam parameter must point
        /// to a BOOL variable that receives TRUE for on, or FALSE for off.
        /// Windows NT, Windows 95:  This value is not supported.
        public const uint SPI_GETACTIVEWNDTRKZORDER = 0x100C;
        /// Determines whether or not windows activated through active window tracking should be brought to the top. Set pvParam to TRUE
        /// for on or FALSE for off.
        /// Windows NT, Windows 95:  This value is not supported.
        public const uint SPI_SETACTIVEWNDTRKZORDER = 0x100D;

        static void Main(string[] args)
        {
            // set mouse to x-mouse behaviour, focus on window under mouse without raising the window to top
            bool enable = true;
            bool disable = false;
            SystemParametersInfo(SPI_SETACTIVEWINDOWTRACKING, 0, enable, 0);
            SystemParametersInfo(SPI_SETACTIVEWNDTRKZORDER, 0, disable, 0);
        }
    }
}

Thursday, October 3, 2013

Everybody does Detailed Clinical Models

... and they don't even know it ;-)

DCM is like a closet where you can organize your clothes, metadata about a Clinical Model in. It is not restrictive, just gives guidance on good practices and information you have (or should have).
Forms of Clinical Models that cover parts of that metadata are: IMH Clinical Elements, OpenEHR/13606 Archetypes, Clinical Content Models, HL7 v3 Templates, BioSHaRE, BRIDGE and even Spreadsheets (used often). Normally when implemented in an EHR or Clinical Research Applications there will also be some Standard Operating Procedure (SOP).
DCM is about organizing (documenting) all relevant metadata or references, e.g. SOP, data elements/structure, coding, use, mis-use, constraints/validation, business rules, derivation, etc. But it does not force you to document this.
There are multiple ways to document this. You could use a metadata tool, UML, spreadsheet, Mindmaps, EHR system, OpenClinica, Archetype Modeling Workbench, XML Editor, etc.
What the DCM Standard (ISO13972) and UML Styleguide do is give you guidance on how to use UML for Clinical Models. It tells you where to put the metadata such as author and status and which metadata should be registered with the model and which with a model repository were you store the model.

Archetype Modeling Language
Currently there is an initiative working toward an official OMG UML Profile for this called the Archetype Modeling Language (AML). Here we combine the efforts from OpenEHR, the DCM UML Styleguide, ISO11179 Metadata Registry, DoD/VA FHIM, Clinical Information Modeling Initiative and HL7 v3 in a form that can accommodate, but not replace, all.
The goal of AML is to be able to express Clinical Models in UML, and also to be able to generate downstream artifacts, such as ADL files. It will also enable other views of the model for specific stakeholders, e.g. mindmaps, spreadsheets, documents.
AML will also enable to import models defined in other forms, and the result will be a consistent view of those models, so that you can compare them.
Currently we are working on prototyping the profile in MDHT and Sparx Enterprise Architect. The OMG process is rigid (needs to be), and it is volunteer work, so work is slow :-(

Saturday, November 28, 2009

Code versus Id

Why is it so difficult to see the difference between code and id?
Even in standards they mix the two. RFC3881, a standard for Audit Messages in Healthcare Applications used in NEN7513 and IHE ATNA, uses it wrong. Specificaly on EventID were the attributes are CodeSystem, etc, so it should be called EventCode.
In the ISO Datatypes used in HL7 there are two datatypes, namely II (Instance Identifier) and CD (Concept Descriptor).
I think the distinction is clear. There are codes for kinds of animals, and each animal has its own id in the form of a name. So my cat(==code) her name(==id) is Michi.
That's all folks.

Monday, September 7, 2009

Livescribe Podcast Recorder

This pen also works great as a podcasts recorder! You can use the internal microphone or the 3D microphone/earphone.
The audio is in aac format and can be saved as wav from the sessions view in Livescribe Desktop or you can just search for the aac file and convert it.
Here is how using the aTunes 1.13.1 (== great audio player/manager) command line tools in the win_tools directory:
  • Convert the aac to a "audiodump.wav" file:
    mplayer c:\My Lifescribe\Library\...\Sessions\audio-#.aac -ao pcm:fast -vc null -vo null

  • Encode to mp3:
    lame audiodump.wav audiodump.mp3 --tl [album name] --tt [title] --ta [artist] --ty [year]

Et voila. You got the audio as a mp3 file ready for publishing and listening on your mp3 player!
On to my first Healthcare IT podcast ;-) Don't even know if anyone is interested in healthcare standards news as a podcast... but I sure want it. There is so much happening on and so little time to read all the news...

Wednesday, August 19, 2009

Livescribe Talking Pen First Contact


Finally, almost half a year of searching for a way to get the pen in the Netherlands further; I got it on my desk!
Installing the software was easy, but then came the message "There is an important firmware upgrade...". I decided to just install it at once. Waiting, waiting, waiting.... the pen reboots and.... nothing :-(
When I used the pen, it just said "install the software..." or something like that.
Now here is why: After installing the firmware "System file" you see the pen reboot, the Livescribe logo appears and after that the time is displayed. The Livescribe Desktop now emulates a remove/reinsert of the USB device and waits for a signal that never comes on my laptop/USBport. The fix is easy, just take the pen of the cradle and put it back on again. Then Livescribe Desktop will finish the upgrade!

Up to the next challanges: writing a penlet and creating my own paper!

Friday, August 14, 2009

Paperless EHR in 1961!

Great to see how far we have come. In almost 50 years of development we still want the same: "Paperless healthcare". And we still have miles and miles of paper archives... Something is very wrong here.

Wednesday, May 20, 2009

Services are brewing @ HL7 v3 2.0

During the last few HL7 Work Group Meetings I noticed something is brewing. Specifically there are a lot of discussions on the Services (SOA) paradigm. At the last WGM in Kyoto (may 2009) someone even said "Messaging is dead, long live messaging". Originally HL7 was focused on messages and documents. The current Service idea synapse was not firing yet. The current state of technology has changed enormously since then. Most of the current ISVs are moving toward Services, even in healthcare IT. But where is HL7 in this? HL7 v3 is a perfect Common Information Model for an SOA! But HL7 v3 needs to accept and embrace the WS-* standards. The Architecture Review Board Workgroup of HL7 is working on this. They are creating the Service Aware Enterprise Architecture Framework (SAEAF) which will take HL7 v3 into the Services era.

See also: Joint OMG/HL7 Project.

Wednesday, April 29, 2009

XMI, UML, EMF


I was trying to figure out the relationship between XMI, UML, EMF and Enterprise Architect (EA) XMI export. How was it possible that Eclipse was unable to read an EA UML XMI export. Now I know. EMF Ecore uses XMI to store the model. EA uses XMI to store the UML. The UML XMI is something completely different than Ecore XMI. The picture made it all clearer for me. If I want Eclipse to read the UML models from EA, I need the UML2 plugin from the Eclipse Modeling Framework. XMI and UML XMI are from OMG and Ecore is from Eclipse. UML2 is an implementation of UML XMI.

Monday, February 16, 2009

Clinician Desktop - New Software Paradigm?

I often ask myself the question if it is the time for a new kind of software for healthcare. America and others are investigating if Open Source software is an option for EHR Systems. I think the question should be different.
In the Netherlands hospitals are doubting if they should develop their own software or if they should buy a complete solution like McKesson Horizon, Alert, Epic, iSoft Lorenzo, Microsoft Amalga or Siemens Sorian.
They should not be looking for a complete EHR system in the commercial nor the open source space. They should ask/look for framework software that delivers all the basic functionality that healthcare providers need. They should not be forced in processes that happen to be implemented in the software. The software should support their own processes and way of work. The software should be flexible and help them.
I think you will always be developing your own solutions, so you need more than just a programming language or framework like Java or .Net. You will need a healthcare framework that understands the basis healthcare information concepts like Detailed Clinical Models, Care Pathways, Clinical Research Queries, etc.
It should be a Clinician Desktop.

Monday, February 2, 2009

Yes I Can ... CDA R2!


At the HL7 Work Group Meeting in Orlando, FL January 15, 2009 I did the CDA R2 exam and now I may call myself a "Certified CDA R2 Specialist" (the list)!
It is a confirmation that I know CDA R2. The Monday after the WGM I got a mail telling me I had passed the exam. And 2 weeks later, just as I was told, I received the certificate and the pin. I think HL7 does a good job on this.
Some may think a certificate is not saying much, but I really think the exam tests your knowledge to use the CDA R2 and not just that you can learn well. Furthermore it is not just a test of CDA, but also of the RIM and interpreting the DMIM diagrams.
Just to be sure I was prepared I also followed the excellent CDA Advanced tutorial by Bob Dolin and later the CCD tutorial. In my hospital I created a CDA Implementation Guide for archiving and sending clinical documents. At the moment we are working on a SemanticSOA which uses something similar to the CDA R3 Model as it's Common Information Model. See also this great blog entry about the future roadmap of CDA R3/CCD by Rene Spronk.

Sunday, December 21, 2008

HL7 Standaardisatiedag 10-12-2008 RIMBAA

Het was weer een mooie dag. Veel gepraat en veel herkenning. En natuurlijk liepen de presentaties weer allemaal uit ;-) Bij de pizza party achteraf weer hele goede discussies gehad over vooral Detailed Clinical Models. Daar gaan we meer over horen!
2008 12 10 HL7 RIMBAA
View SlideShare presentation or Upload your own.

Monday, December 8, 2008

ESB is NOT a product

The most common mistake with an Enterprise Service Bus is thinking it is a product. This, of cource, is not true. ESB is a pattern witch is a combination of capabilities. Some vendors do sell a product that has all the capabilities implemented. Like with an SOA... you cannot buy an ESB, you have to think ESB.
Also see the great presentation The Role of the Enterprise Service Bus by Mark Richards.

Monday, September 8, 2008

Access to Healthcare Records

I got the Microsoft Architecture Journal #16 in the post and found a great article in there about 'Federated Identity and Healthcare'. It also talks about the tight security Austria knows and the Netherlands is talking about.
I think they make it to much a hassle to get to the patients information. I personally don't care what healthcare professional accesses my health records. I just want them to make be better and I know that they need information about my medical history to do so.
The only restriction for me is that I want to see who did access my health records and when. Even in case of research they may use my health records as long as it is guaranteed to be anonymized.

Thursday, August 28, 2008

Preferred number in ISO II datatype

I was asking myself the question of how to indicate a preferred number (NL:voorkeursnummer) for de id values of a Patient. And of course there is an answer for that:
"II.displayable: Specifies if the identifier is intended for human display and data entry (displayable = true) as opposed to pure machine interoperation (displayable = false)."
-- Source: HL7 Implementation Guidance for Unique Object Identifiers (OIDs), Release 1

Monday, August 11, 2008

NHS Connecting for Health: NHS of the future


Great video about how we (IT) can help making healthcare better.

Monday, July 14, 2008

Top 10 SOA-Valkuilen


  1. Not invented here syndroom
  2. Security
  3. Incorrect Granularity of Services
  4. SOA does not solve complexity automatically
  5. Big Design Up Front (BDUF)
  6. Incorrectly applied Canonical Data Model (CDM)
  7. Missing skills
  8. Unclear ownership / Project based funding
  9. Ignoring culture when introducing SOA

Ad puntje 6: Ik zie liever het gebruik van Canonical Information Model (CIM). In de data zit informatie. Met alleen data heb je alleen een brij van getallen en letters. Met informatie staan er Nederlandse zinnen. In informatie zit de syntax en semantiek ook verwerkt. Het gaat in SSOA (Semantic SOA) juist om informatie!

Bron: Computable

Friday, July 11, 2008

HL7 UML Conventions for Derived Information Models

I received the Formal Namers documentation on the tooling hl7 mailinglist and there was a section on HL7 UML Notation and what it failes to illustratie. For most of the issues I found a solution or workaround using Enterprise Architect:
  • The associative function of the "arrow classes" > Cannot be fixed

  • The cardinality constraints imposed on attributes > Attributes / Details / Multiplicity

  • The appearance constraints (mandatory and required) imposed on attributes.. > Add '*' to attribute name

  • Vocabulary domain constraints applied to classCode, typeCode and moodCode values which establish the essential semantic meaning of each class > Initial value

  • The coding strength constraint applied to coded attributes > Include in attribute type