EU home affairs chief secretly worked with US to undermine new privacy laws

September 28th, 2014

EU home affairs chief secretly worked with US to undermine new privacy laws, campaigners claim — Tech News and Analysis: “The digital rights group Access has revealed an email that suggests outgoing EU Home Affairs Commissioner Cecilia Malmström collaborated with the Americans in a successful attempt to water down Europe’s new privacy laws.”

Rethinking the Electronic Healthcare Record – The Book

September 23rd, 2014

My book “Rethinking the Electronic Healthcare Record” is now out. You can get it almost anywhere, but the best description is on the Amazon.com page.

The blurb:

9789198170603-Case-2 epub

Current electronic healthcare record (EHR) systems utterly fail to assist doctors and nurses in their work; designed without recognizing the actual needs of those users, but rather solving mostly administrative problems instead. This failure results in an ongoing lack of safety and efficiency in care delivery. We need to do much better. This book lays out how an effective EHR system should be built to deliver effective support for a doctor throughout the phases of her profession, from how a doctor learns her profession, to how she examines a patient, analyzes clinical findings, reaches conclusions, and finally applies therapy. The result is accurate, economic, safe, and consistent healthcare.

Scrivener, BibDesk, LaTeX, and symlinks

June 30th, 2014

Situation:

  • Writing in Scrivener on OSX
  • Using BibDesk for bibliography
  • Writing several different articles or books using the same BibDesk database
  • Getting the database into the local folder tree so that it is included in version control

Assume the database is at:

~/Documents/BibDesk/Database/References.bib

In Scrivener, use the following in the meta-data page, which is the first page in the manuscript:

Base Header Level: 1
Title: Rethinking the EHR
Author: Martin Wehlou, MD, CISSP
BibTeX: ../BibRef
mycopyright: 2014 Man in The Middle AB, Sweden.

Then, in the base folder of your book or article, create a symbolic link to the real BibDesk database file:

ln -s ~/Documents/BibDesk/Database/References.bib BibRef.bib

The “base folder” is the folder where your .scriv file is. Scrivener creates the .tex files in a subfolder, so that’s why you need the “..” before “BibRef” above. By the way, I called the link “BibRef” just to make it clearly different from the actual database name, but you can use anything you like. As long as it doesn’t contain blanks or strange symbols.

Now everything works and life is good.

Rethinking the Electronic Healthcare Record

June 24th, 2014

As mentioned before, I’m writing a book about how the EHR should be built and why. The latest, and possibly last, draft is available at:

http://wehlou.com/ehrbook/draft.pdf

This draft is significantly shorter and more focused than earlier drafts. I’ve also incorporated the “combinatorial matching” idea from L.L. Weed, and modified it to be more scalable. With that, I have a knowledge-based support and documentation system, with a complete flow from first patient contact to treatment. It goes way beyond what any current EHR systems do, and would be the help we need as doctors, instead of the drag of the current generation.

Any comments are welcome. My email can be found under the section “Draft Versions” in the manuscript. You can also comment on the blog itself, of course. At least during the first two weeks, then they’re closed (due to spam).

Swift, missing idea #1?

June 3rd, 2014

Going through “properties”, I’m not finding anything about private and public properties, or protected. I’m also not seeing anything about header files and class files, so at first blush it seems we can’t hide properties from other classes. How do we stop people from using the wrong properties?

That can’t be good. I must be missing something.

Swift, good idea #1

June 3rd, 2014

There’s a lot of good stuff in Swift, of course, but adopting Ruby’s block syntax seems a really nice idea. It’s called “trailing closures” in Swift, but it’s the same thing, as far as I can see. An example from the text:

let strings = numbers.map {
    (var number) -> String in
    var output = ""
    while number > 0 {
        output = digitNames[number % 10]! + output
        number /= 10
    }
    return output
}

Everything between braces is the block, um.., trailing closure.

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.

Swift, bad idea #3

June 3rd, 2014

Function types are declared like:

var mathFunction: (Int, Int) -> Int

In this example: mathFunction is a variable that can hold any function that takes two Int as parameters and returns one Int. Fine, so far.

Functions can take such functions as parameters and also return them. For instance, a function taking a function like the above as parameter would be declared as:

func printMathResult(mathFunction: (Int, Int) -> Int) 

A function returning a function taking a Bool as parameter and returning an Int could look like:

func chooseFunction(choice: Bool) -> (Int) -> Int

Notice how the two pointer operators (->) mean to entirely different things. The first indicates a return value, the second is part of the function signature of the returned value.

Let’s imagine what a function type would look like if it takes a function of an Int, returning an Int as parameters, and returns a similar function:

func confusingFunction(number: Int) -> (Int) -> (Int) -> Int

I may very well have written that wrong, but can you tell? This is totally different from old school C declaration of function prototypes, but I’m far from sure it’s any easier to understand. Maybe judicious use of “function types” (or “typedefs” as we used to call them 30 years ago…) could make this clearer.

Swift, bad idea #2

June 3rd, 2014

Function parameters now have distinct “internal” and “external” parameter names. The simplest form does away with named parameters when calling functions, that is, we can now do:

mysteriousFunction(15.2, "yeah, right", "only on a sunday", -1)

…just like in the good(?) old days of plain C/C++. Yes, you can force naming of parameters on the caller’s side, but it’s more work than the sloppy old way. Guess how often we’ll see that now? So, simple, inscrutable, and bug prone is the new default.

Swift, bad idea #1

June 3rd, 2014

Looking over the “Swift” language Apple presented during the WWDC keynote. First off, declarations using “var” and “let” made me think of Basic, and had to stifle a gag reflex.

I’m reading the iBooks book on Swift. When I got to closed and halfopen ranges on page 100, I thought this was a big mistake. It’s very hard to see at a glance which is which. We’ve been trained for so many years to see ranges in for loops as closed, and react immediately if that expected “-1″ as in “(0 to n-1)” or equivalent, is missing.

Sure enough, go to page 135 in the same book, and the example given is clearly wrong, where the author of the book confused the two. Two dots is a halfopen interval, three dots a closed interval, and the example is:

“shoppingList[4...6] = ["Bananas", "Apples"]”

(Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.)

This is not going to end well.

Update: I was wrong. See the comments.

Next draft

April 1st, 2014

I just uploaded the next draft (v10) of my book on EHR systems. I included a chapter on business cases, and expanded quite a bit on the document tree structure.

You can find a diff file for version 10 there as well, if you want to focus on the changes.

Update May 13, 2014: I stupidly linked to a particular draft in the above post. A much better link is this:

http://wehlou.com/ehrbook/draft.pdf

…which always points to the most recent draft. Currently I’m on draft 15 and will upload 16 later today.

Sorry about that piece of bad information.