A new year and new plans

I’ve been thinking a lot about how this site is organized, and though it’s worked well through the past couple of years, the time might be right for a refresh of the design. By far the majority of the visitors here are here for the HL7 software, but there’s no elegant way using this version of wordpress to make that the focus of the page without burying my rant-space and other things that I wish to make available for users of the site.

Starting soon, nule.org is going to be split into two different web sites. This part of nule.org will look much the same as it does now, but the software is going to be primarily hosted on the new domain. That site will be no-nonsense, hopefully easier to navigate and won’t contain nearly as much of my useless blather. Links to the software on this site will gently redirect the user to the new site pretty much as long as I’m maintaining these domains. The new domain is a .com, by the way, but that doesn’t represent a change of my personal policy in terms of licensing the software. If it’s open-source today it will remain open source.

I’m also working on scripts to even further simplify my build process. Moving to SVN and being able to make the source available pretty much in real time is a great help to those power users, but I’m sure there are those that would like to just be able to click a link and get a jar or get a zip. And no, I won’t use sourceforge.

Hopefully I’ll be able to take the wraps off the new site soon. Of course, I’ll update you here first.

More LHL updates

It’s a been a bit since an update, and you can blame my work. Talk about long hours. But we can thank them at least for needing an update for Light HL7 Library that allows any HL7 field (or component, subcomponent, etc.) to properly handle escape characters being encoded or decoded automatically. Other than that there’s not a whole lot to talk about regarding the utilities, but they are being worked on. Mostly I didn’t want an entire month to go by without an update (which, it may have depending upon your timezone).

The only other news is that I’ve been pretty slammed with spam, so the contact form is momentarily offline. There’s sufficient information there to figure out how to contact me if you have half a brain. If I missed a message from you due to the deluge, please resend it and hopefully I’ll see it this time.

By the way, I’ve noticed lately that a lot of the advertisers on the site are less than legitimate diet-supplement and pharmaceutical companies, and I’m working on eliminating those from showing up here.

Segment group support in Light HL7 Library

I’m well into the segment group support for LHL and you can try it out yourself now by building the latest SVN (revision 34). Basically what this does is let you take a message like the following:

MSH|^~\\&|NULEORG|LHL|||20081022120000||ACK||P|2.3||||NE|
PID|||12345678||SMITH^PAT|
OBR|NOTAVALIDRESULT|OBR1|
OBX|NOTAVALIDTEST|OBX1|
OBX|NOTAVALIDTEST|OBX2|
NTE|NOTAVALIDNOTE|NTE1|
OBR|NOTAVALIDRESULT|OBR2|
NTE|NOTAVALIDNOTE|NTE2|
NTE|NOTAVALIDNOTE|NTE3|
OBX|NOTAVALIDTEST|OBX3|
NTE|NOTAVALIDNOTE|NTE4|
OBX|NOTAVALIDTEST|OBX4|
NTE|NOTAVALIDNOTE|NTE5|
OBR|NOTAVALIDRESULT|OBR3|
OBX|NOTAVALIDTEST|OBX5|

Which is obviously invalid, but contains some common characteristics of more complex HL7 messages. With it, you can now say give me OBR group 2, OBX group 2, NTE 1 instead of saying give me the fifth NTE. In other words, you can address segments within their message context.

In code, previously you would have addressed that fifth NTE with a simple:

Hl7Segment seg = hl7.get("NTE", 5);

And that would have given you the segment but without any context for the hierarchy of the message. Now you have the option to say

Hl7Segment seg = hl7.getGroup("OBR", 2).getGroup("OBX", 2").get("NTE", 1);

Now that may look like more upfront work, but you no longer have to do any accounting yourself of which OBX an NTE may belong to. Additionally, I’m working on the support to add in new segments relative to the structure of the message where they now reside. So you could add a second NTE to the second OBX of the second OBR without knowing its absolute position inside of the entire HL7 message.

Pretty cool stuff, I think. At least if you’re like me and think of HL7 as a hierarchical structure of data and less as a standard to which you must adhere. There are valid points to both sides of that distinction, but as an integrator, you have to deal with the data you’re dealt, and it’s counterproductive to fight your libraries when you know how you want to address your own data. That’s what I want LHL to be – a programmers interface to HL7.

Also, I got a few more donations to the nule.org pool. Up to $50 – $45 of which went to the 2008 bill and the rest I’ll save for 2009. Thanks much for those who gave, and I’ll start up a tally page of donations soon. If you want credit for your donation in the future, say so in the paypal notes, otherwise I’ll list it as anonymous on that page. Thanks again.

Hey look, it's an update.

I’ve actually been busy working on stuff for nule.org, as well as stuff not as related, so I figured I should drop a note about what’s going on.

First off, my attempts at fund-raising for the site and my now due bandwidth bill failed immensely. Exactly one donor came forward (of the 2200 people that saw the dedicated banner ad during the two weeks I ran it, and not counting the 3000 or so unique monthly visitors that I get that always see the side-bar donate button). That donation is highly appreciated, but covers about 4% of one year of my hosting costs. If each of those 2000 or so people that saw that ad gave only one dollar (not counting paypal’s cut), that would cover my costs for almost four years, not including, of course, the hundreds of hours I put into developing the utilities.

I can’t say I’m surprised, really, or even disappointed, but I am going to make more of a point of it in the future. I will be placing donate buttons next to all of the “install” links, and future versions of the application will likely have donate links in the help or about menus, as they get updated. I do want to make clear that my costs of distributing the software are rising and aren’t covered by any sponsorship, but at the same time I’m not going to resort to annoying tactics like pop-ups or nag boxes in the apps. I also am not interested in moving hosting to sourceforge or any other free hosting, as I don’t feel those services offer the level of reliability that I currently can, or are lacking in features that have let me (hopefully) make the site easier to dig through for those that come to get the software or help for the software.

In other news three new things are in progress right now. First, the nule.org support BBS at http://thot.us/comm/index.php?c=3 has a new forum dedicated to posting useful code snippits. Hopefully that will keep them apart from other support queries, and can form a repository of BSH logic scripts, configurations, or java code that implements the various key functionality that the code here provides. Right now a demo implementation of a very simple ProcessorAgent has been posted there until I dig up other useful things to post (or someone else helps me out doing so).

Next, a new version of both the Light Hl7 Library and Integrate Client Library are coming. The IC library is getting beefed up javadoc (yay), and the LHL should be receiving rudimentary segment group support (finally). It’d be grand if someone wanted to help think up, or better yet – write – some test cases regarding segment groups, as I may not have accounted for every conceivable scenario (in fact, it’s safe to say I haven’t).

Lastly, HCM 0.2 is progressing well. I think the way I’ve decided to handle database connections required for both configuration and message queues are to make the administrator define two C3P0 connection pools and provide the libraries for the database within the Tomcat install. The engine will run without these, but you won’t be able to create message queues nor perform in-engine configurations. In other words, like the 0.1.x line you can run existing HL7 Comm configs, but only but not create new ones within your admin GUI (which is the ultimate intent of the GUI), including defining error notifications, nor use the planned message queue handlers. 0.2 should include an improved GUI as well as the ability to define the C3P0 data sources, though I’m not yet certain what they’ll be used for in this version. I think I’d like to get the admin configuration stuff working before concentration on message queues, as that functionality can currently be emulated using file-in/out client (which is less than ideal).