HBR: Potential of Health Care APIs

Robert Huckman and Maya Uppaluru of HBR recently published an article titled The Untapped Potential of Health Care APIs. It strikes two chords I regularly discuss with my wife, a Primary Care resident:

  1. My strong desire for easier access to and sharing of healthcare data
  2. My strong dislike for regulated standards in healthcare

Give the article a read, and then continue on below.

I recently called my old dentist office, asking for my latest X-rays to share with my new dentist. The hygienist I spoke to me declined, informing me that she “can’t email them because they are electronic.” Pause for dramatic effect. I couldn’t access an online portal, she couldn’t email a jpeg or png – she could only share with my new dentist if they had the same system. It wasn’t a security or privacy concern – it was their archaic system that only worked one way.

Now, I spent some time working with EDI messaging and other healthcare integrations when I first started IT consulting. While data exchange formats sound great, I have yet to see it work in person. Each system has their own way of sharing data, and I am not sure the HIPAA standards set in place have done much good. In addition, the incentive structures in place for meaningful use have gotten us a short distance along the path to modernization in healthcare tech, but we have a much longer road to travel.

In thinking about this, however, is regulation needed in this space? There are so many barriers to patients when they want to leave a physician or network of physicians: immunization records, past and current prescriptions, procedures, diagnoses… The list goes on. Hell, I cringe knowing I need to establish a new PCP in Seattle, seeing how my medical records are spread across over 50 clinics, hospitals, and other entities.

Large healthcare networks (think Kaiser) have every incentive to hold on to every bit of data they gather on their patients for these reasons. Because of this, there are not many natural mechanisms to incentivize them to ask their technology providers (think Epic) for open APIs. So is this the best next step to tech modernization in healthcare tech?

If so, what should it look like? Should I have a Mint-like interface for my healthcare records? How can we make this attractive to large healthcare networks that fear losing their patients or one of their most expensive assets: their data?

How to Remove a Custom Component from the Global Assembly (GAC)

How to Remove a Custom Component from the Global Assembly (GAC)

Okay, so you might be laughing right now, as this seems simple and straight forward–and it is, really, once you know how to do it. But for the life of me, I could not find a single resource online to walk me through removing old custom functoids from the GAC. I have been rebuilding functoids that other developers have created, in order to add functionality. For example, the Improved Context Accessor functoid. (Also, my co-worker and I are developing a SQL executor functoid, so stay tuned) Over the course of development, I have added, removed, added, removed countless .dlls from the GAC.

Enter the difficulty. As most people know, you can GAC a .dll for a custom functoid by saving the .dll to C:\Program Files (86)\Microsoft BizTalk Server 2010\Developer Tools\Mapper Extensions, opening the Visual Studio Command Prompt, and using the command

gacutil -i "C:\Program Files (86)\Microsoft BizTalk Server 2010\Developer Tools\Mapper Extensions\functoidname.dll"

And to remove the  custom functoid, the code should be:

gacutil -u "functoidname.dll"

Or, so I thought. But this does not actually work, as the Visual Studio Command prompt will not be able to find that .dll. Most sites told me to look in the C:\Windows\assembly folder for a list of all the deployed assemblies. However, none of my functoids were there.

Solution

After more looking, I found that .Net Framework 4 applications deploy to a different location: C:\Windows\Microsoft.NET\assembly\GAC_MSIL If you look in that folder, you will see a list of all your custom functoids. Now, how do we uninstall one? You cannot right click on it and uninstall as you can in C:\Windows\assembly. You still have to use the Visual Studio Command prompt. Take the same of the folder your .dll is stored in, and perform the same code as above. This is what mine looked like:

gacutil -u "BizTalk.MapperExtensions.functoidname"

Notice, I am not using “functoidname.dll”, but “BizTalk.MapperExtensions.functoidname”, as that is how it appears int he GAC_MSIL folder. And that’s it! You will no longer see that tool in the assembly.

Note: If you have an updated functoid with the same name as one that is already deployed to the GAC, you will not need to un-deploy the old one before deploying the new one. The new will overwrite the old.

Improved Context Accessor Functoid

Improved Context Accessor Functoid

Remember the Context Accessor functoid I wrote about in this previous post? I ran into some limitations–namely, the fact that you cannot output the functoid to any other functoids, only a target field. Well, Chompers also found this issue to be frustrating, and found a workaround. He recommended making two changes in his post on the codeplex site. Since the Codeplex source code has not been updated with his recommended  change, I went ahead and downloaded the source code, made the changes, and rebuilt the code. Here it is:

http://dl.dropbox.com/u/18955972/ContextAccessorSourceCode.zip

You can find the DLL in /ContextAccessor/bin/Debug

Now, for those that don’t know how to use this functoid, there are two ways:

  1. Maps used in a Receive Port
  2. Maps used in an Orchestration

Maps used in a Receive Port

  1. Grab the .dll
  2. Save the .dll to \Microsoft BizTalk Server 2010\Developer Tools\Mapper Extensions
  3. Save the .dll to \Microsoft BizTalk Server 2010\Pipeline Components
  4. GAC both assemblies
  5. Add the functoids to your functoid Toolbox
    • Toolbox>Right Click>Choose Items…>BizTalk Mapper Functoids
  6. Drop the functoid into your map, and configure it
    MapCxA
  7. Add the ContextAccessorProvider pipeline component to your pipeline Toolbox
    • Toolbox>Right Click>Choose Items…>BizTalk Pipeline Components
  8. Drop the ContextAccessorProvider pipeline component into a pipeline at the ResolveParty stage
    PipelineCxA
  9. Build and deploy! Be sure to use your custom pipeline, and apply the map in the receive port

Maps used in an Orchestration

  1. Grab the .dll
  2. Save the .dll to \Microsoft BizTalk Server 2010\Developer Tools\Mapper Extensions
  3. GAC your assembly (if you already did this, you do not have to do this again)
  4. Add the functoids to your functoid Toolbox
    • Toolbox>Right Click>Choose Items…>BizTalk Mapper Functoids
  5. Drop the functoid into your map, and configure it
    Screen Shot 2013-02-20 at 11.05.35 AM

And that’s it! If you have any questions about using this, just post a comment, and I will get back to you. I want to make it clear that I did not write this code. I just made the modifications that Chompers recommended, and re-posted it so others could use it without having to get into re-building the functoid in visual studio. Thank you to Marvin Smit and Carlos Medina for creating these functoids to begin with.

Please leave a comment if you downloaded and used this functoid. I would love to see how it helped you out!

BizTalk Configuration Manager Won’t Load

BizTalk Configuration Manager Won’t Load

This is a response to this thread on the MSDN BizTalk forum.

This is going to be a short one. In summary: this must be a BTS error that has yet to be solved. Each time I tried to run the BizTalk Configuration Manager, I got an error saying another instance was running. I spent hours searching for running instances, repairing my BizTalk instance, restarting my computer. This continued when I tried to run normally, or as an administrator.

Solution?

Never found a simple one. I had to reinstall BizTalk (what a pain!), but even when I tried to uninstall, the configuration manager stopped the uninstall, saying another instance was running! So how did I uninstall? Microsoft Fix It. I had to use it to forcefully uninstall a few components of my BizTalk instance.

So, say goodbye to a productive work day, get your favorite drink, and try not to stress out while you wait through countless progress bars.

UPDATE

After some time on my fresh install of BizTalk, I started getting the same issue! But never fear, I found out how to overcome the issue this time — the solution is ridiculous and makes me want to yell at Microsoft. Here it is:

  1. Open BizTalk Server Configuration
  2. When the window pops up saying another instance is running, hit OK
  3. Open BizTalk Server Configuration
  4. When the window pops up saying another instance is running, hit OK
  5. Open BizTalk Server Configuration
  6. When the window pops up saying another instance is running, hit OK
  7. Continue to repeat steps 1 & 2 until BizTalk Server Configuration opens up

Why does this work? You tell me. But it does.

Raspberry Pi and Open Source Software to Change the World

Raspberry Pi and Open Source Software to Change the World

Frustration

I have been banging my head against my keyboard, trying to fix an unexpected BizTalk issue for the past few hours. Just like this, actually:

Bang Head Gif

Solution

To save my sanity, I decided to step back, take a break, and consider more hopeful topics like changing the world. Yes–sometimes I believe I can change the world before I can solve some BTS issues. To the point: I wanted to share some very exciting thoughts I’ve been bouncing off of my friends recently.

I introduce to you, the Raspberry Pi:

Raspberry Pi

This little guy is a computer. You heard me right: a computer. You can install a full OS onto this little guy, plug a monitor, mouse, and keyboard into it, and do everything you would normally do: browse the internet, check email, create documents/spreadsheets/presentations… and so much more. Let me give a bit of an outline to this post before I ramble:

  1. Getting Started (Hardware, Software, Costs)
  2. Raspberry Pi Possibilites
  3. RasPi and Education: Changing the World

Getting Started (Hardware,  Software, Costs)

Specs

This is where stuff gets exciting. As you will notice, all of the components are 1) universal, and 2) inexpensive. Its hard drive is an SD card, its power source is a micro USB, its video out can be either an RCA video or an HDMI, has an ethernet port for internet, and it has two USB ports for your mouse/keyboard/another USB hub. See where I’m going with this?

Now, take all of those inexpensive, easy-to-find parts, combine them with the RasPi price tag of $35, and you have one of the most inexpensive computers known to man. What about the operating system, you might ask? The Raspberry Pi foundation has a few free operating systems to choose from. Looking for specific software to run? It’s a Linux system, so it is practically synonymous with open source. In fact, people are so excited about the RasPi, there was an app store created just for RasPi users (for free and paid apps). Overall, this thing is inexpensive and universal.

Raspberry Pi Capabilities

Every day, I see new applications of the Raspberry Pi on their website. Here are the projects I’ve seen:

In general, these little guys are easy, inexpensive means to fun programming. I have a challenge for you. Think about the Raspi: how could you use one? I don’t know too much about the hardware/automation side of the RasPi, but I am brainstorming on how to turn a RasPi into one of the most inexpensive and impactful tools for education.

RasPi and Education: Changing the World

Back in 2010, I spent some time in Haiti with a fantastic organization called Mission of Hope Haiti. They are a Christian nonprofit that is having a huge impact on the island of Haiti. One of their initiatives is a technical school to teach “diesel mechanics, auto body, welding, and information technology.” Imagine for a minute the impact a computer lab of RasPis could have at Mission of Hope. Not only would it make for an inexpensive lab (well under $1000 for a 10-computer lab), but the RasPi would be a perfect playground for learning Python, SQL, and many other programming languages.

There are so many free online learning resources, that anyone with an internet connection and a bit of guidance could learn some very marketable skills. Just to mention a couple education resources:

Think of all the jobs Haitians could fill if they had this knowledge. Think of all the mouths that could be fed by their salaries. Think of how little projects like this could stimulate the entire country’s  economy. That is world change, people.

Free PDF Reader – Foxit

Free PDF Reader – Foxit

Okay, I don’t normally talk about miscellaneous office software, but I wanted to give a shot out to Foxit’s FREE PDF Viewer.

I have been using the free Adobe Reader X that came with my Windows 7 installation, and I absolutely hate it. Firstly, it has the most awful image quality I have seen in any PDF reader. The text is always so grainy, and images look like they were created at 50% zoom in MS Paint. Also, for some reason, I am unable to embed PDFs in Word documents when using Adobe Reader X.

With Foxit, my PDFs are very crisp, and much easier to read. It is day-and-night. Also, I am now able to insert my PDFs into Word documents again. Thank you Foxit! Also, thank you to makeuseof.com for their article that introduced me to Foxit.

 

The Context Accessor Functoid

The Context Accessor Functoid

First, I want to thank all the programmers in the world that blog, post to forums, comment on forum posts, and make my life easier. This is part of the reason I started this blog–to give back to the community that makes my job easier.

I present to you: the Context Accessor functoid

This little guy is a life saver. For my current project, we are joining two files (an EDI and a Rider) together based on the authorization number. However, it is possible to have multiple versions of an authorization come into the same batch of files–a problem that causes cross joining, and very large files that our target system cannot read. The reason is, a single authorization can come in as a Deny, Pend, or Approve, and each one of these authorizations has the same authorization number.

Question: If authorization number is not a good unique value to join on, what can we use?
Answer: Authorization number + original file name

Part of the original file name is a unique time stamp for each pair of EDI and Rider. With the authorization number + original file name, we are able to consistently join these two files without any cross joins/duplications.

Here’s how it works:

The Context Accessor functoid allows access to the file adapter properties within an orchestration. So, what normally would be unavailable within a map is now made available. I was able to add a node to our target schema, and map ReceivedFileName to it. Here’s what it looks like:

Screen Shot 2013-02-20 at 11.05.35 AM

Here’s how to do it:

  1. Grab the .dll from codeplex [[link]]
  2. Save the .dll to \Microsoft BizTalk Server 2006\Developer Tools\Mapper Extensions (Thanks rajwebjunky!)
    • If you do not have BTS 2006 installed, save the .dll to \Microsoft BizTalk Server 2010\Developer Tools\Mapper Extensions
  3. GAC your assembly
  4. Add the functoids to your functoid ToolBox
    • Toolbox>Right Click>Choose Items…>BizTalk Mapper Functoids
  5. Drag and drop the functoid into your map! (I needed the Orchestration Context Accessor, but you can also use the Receive Port Context Accessor functoid to access properties in receive ports)

Note: Be careful when using this in Dev. If you GAC your assembly on your dev box, you will also need to do the same in your test/prod box. To be safe, I created a new MSI for our solution, and deployed that instead of updated dlls to BizTalk.

Special thanks to Eliasen for having such a great post for me to start from!

UPDATE: See this Improved Context Accessor post for more functoinality.

Why I use a Mac MBPr for Work (and Play)

Why I use a Mac MBPr for Work (and Play)

PC to Macbook

For 18 years, I only used PCs. The year I went to college (2008), I purchased a secondhand macbook. Aside from one hard drive crash (caused by me closing my laptop quickly, throwing it in my bag, and slinging my bag over my shoulder every day), I never had a failure. In fact, it is February 2013, and it still runs like a champ! For a laptop, 6+ years of life is unheard of. Also, I still get an average of 4 hours of battery life while browsing, listening to music, and using Word. Love that computer.

Macbook to Macbook Pro retina

As much as I love my macbook, I needed something a bit stronger for work. My company provided me with a new Toshiba, but the wifi utility never seemed to work, booting up took at least 5 minutes, the screen hurt my eyes, and I never felt comfortable using it for personal tasks. Seeing as how I do 90% of my work on my laptop, and I travel Mon-Thu, I needed something that was powerful, reliable, and also my own.

So, I decided to integrate my work and home computers into one: the 2012 15-inch Macbook Pro with Retina display. With an i7 processor, 8GB RAM, a solid state hard drive (SDD), it is definitely enough to get the job done. I used Bootcamp to install Windows 7 on a 100GB partition, and I use Parallels to access my Windows machine to seamlessly switch back and forth between OS X and Windows 7. If I need extra power to run more demanding applications, I can boot directly into Windows, without using Parallels.

There you have it. One computer to rule them all. Fully Mac, with my favorite applications, stable architecture, and familiar interface; Fully PC, equipped to handle my line of work, and more. It is fully Mac and fully PC . To date, I have not found a single work function I am not able to accomplish with my computer. I have been able to use all of my Office Professional apps, SharePoint Designer, SQL Server Management Studio, various Citrix apps, and also all of my Steam games.

What more could I have asked for?

Pros:

-Fast
-Reliable
-Runs Windows better than any Toshiba or HP
-Great audio, immaculate video
-7 hours of battery life, consistently (except when dual booting)
-Parallels makes Windows apps run like they were Mac apps. Seamless integration
-Apple Care. It’s hands-down the best warranty ever

Cons:

-Cost (ouch!)
-Gets very hot while gaming
-Needs an adaptor for VGA and Ethernet
-No “End” or “Home” keys (I use command+left or command+right)

Well, that’s all for now. I have a plane to catch!

Disclaimer:

I do not hate PCs, and do not think Macs are the best. I prefer Macs for ease of use and stability.

SharePoint Online: Taking Small Business to the Next Level

SharePoint Online: Taking Small Business to the Next Level

Let’s take a break from BizTalk for a bit. I wanted to talk about why SharePoint Online is such a great offering for small businesses. Each year, my company does a 6-week pro bono project in order to:

1. Train new hires
2. Field test new project managers
3. Establish and maintain long-term relationships with non-profits

This past August, I was part of a team that did a SharePoint implementation for a nonprofit that was going national with their services. With their national expansion, they needed to centralize their strategy, document management, and communication. SharePoint Online was key to making this possible. Here’s why:

1. Minimal Startup Costs

http://www.microsoft.com/en-us/office365/sharepoint-online.aspx

SharePoint Online does not sit on your own servers, does not require an enterprise license, and does not require Client Access Licenses (CALs). The cost structure is simple: $4 per user, per month. The licensing costs for SharePoint Standard can run about $13,000, and that does not include the hardware needed. Also, if your company is a nonprofit, you might get a significant discount from your local office 365 partner. Think about that cost: 20 users, at $4 per user per month, comes out to $80 per month. $80 per month for SharePoint Standard? That is ridiculously inexpensive.

Now, it must be noted that there is a significant amount of development needed up-front. This is probably the greatest cost. For our client, we provided the development for free. For you, you may want to consider finding a good SharePoint developer to do all of the heavy lifting, or start learning it yourself! It took our team of 3 completely inexperienced developers about 20 days to finish implementation. Had we more experience with SharePoint, I imagine we could have done it in about three weeks.

2. (Relative) Ease of Deployment

As noted in the previous point, there is a significant amount of development needed up-front for your SharePoint implementation. However, anyone with basic HTML experience will be able to create and maintain pages. Those with CSS experience will be able to customize the entire site with colors and fonts. The key thing to note is there is no need to install and configure SharePoint like you would need to on your own server, if you did not use SharePoint Online. It comes pre-configured with a single site collection ready to go, out-of-the-box.

Note: The steepest learning curves arise when dealing with permissions, creating forms in InfoPath, workflow creation, and using SharePoint Designer.

3. Ease of Maintenance

Microsoft boasts a 99.9% uptime for your site. Bold claim? Perhaps–but so far, they have stayed true to their word. Our nonprofit client had no technical resources, save a single employee with HTML experience. SharePoint Online was the only option we were confident in to guarantee uptime for our client. If you have limited technical resources for server maintenance, this is a great option for you.

4. High Functionality

Some of the other solutions we considered for our client were Plone and Zoho Docs. Plone could have been a match for our needs, but required extensive knowledge of the tool, and most of functionality that comes out-of-the-box with SharePoint is an add-on for Plone. Zoho did not even come close with regard to functionality, as it was a glorified version of Google Docs. With SharePoint Online, the user can:

  • Create a custom site design, branding it with the company’s themes
  • Create custom forms using InfoPath for data entry
  • Create highly customizable workflows for process automation
  • Explore the great power of SharePoint Designer 2010 (MUCH better than SPD 2007!)
  • Integration with Office 365 (MS Office, Exchange, Lync, and more)

Summary

It has been just over 6 months since our project, and our client is still thrilled with their SharePoint site. They are leveraging it to achieve their national growth strategy, and it is working. And aside from a few hiccups in the days after our handoff, our nonprofit has had complete ownership of their SharePoint site. We have not had to step in a single time to fix or add to their solution.

I realize this post is a bit long, but it does not even come close to describing how pleased I am (and my client) with SharePoint Online’s offerings. If you want any more detail on any points, let me know, and I will give more information.