Friday, August 28, 2009

Two Cents on Healthcare, Part 3

My previous posts on this topic have met with some healthy and informative discussion. In this post I hope to address some of those comments and then bring my position back into focus.

I started with this:

“I fully support dramatic health care reform. I don’t know what the right solution is but what we’re doing now isn’t it.”

I really mean that last part: I don’t know what the ultimate solution should look like. I’m not an expert but then it doesn’t take an expert to see the writing on the wall: we’re trending in a dangerous direction.

After that, I railed a bit against our current system and posted references supporting my claim that we pay way to much for a system that is not the “best in the world”. This struck a chord with some readers. Paula Haren responded:

“Wow, pull a couple of various quotes and put them all together and your an expert! Considering I have spent lots of time as a nurse(>10yr) and a patient and a wife of someone with cancer and considerable medical debt depite excellent insurance....I must respectful disagree. Sorry Mike, but its just not that simple. And yes, the US does have the best health care in regards to inovation...Spend as much time at Cleveland Clinic as I have and you will see all these people who's socialized medicine has under or miss served (or did not serve at all) their medical needs. I think you would have to put down The New York Times and get in the trenches to appreciate what I am saying.
Just wanted to add my 2 cents!”

To healthcare providers: I meant no offense to you personally. Most of my medical care encounters have been excellent and I attribute that to having good insurance that affords me access to good doctors and nurses. Unfortunately far too many of us do not have access to good care or when they depend on it are hit with obscene debt; and systemic problems lead to poorer outcomes for us on so many levels it’s depressing. As an aside: how is it that you have “considerable medical debt despite excellent insurance”? That sounds like a contradiction to me.

imageAfter doing additional research, I’m sticking to my original claim: the United States is not a leader in health care (not even close). Here’s a nice assortment of numbers that don’t make us look so great. And a couple more from the CIA World Factbook (which is fun to browse, by the way):

With respect to Paula’s experience at the Cleveland Clinic, I’d say she probably does see a lot of good medicine but her highly ranked hospital—which is in the top ten in 11 categories—is hardly representative of the nation. In contrast, my hospital ranks in only two categories and gets an unimpressive #45 in each.

In addition to anecdotal counterclaims like that, I’m also seeing a lot of fear. This comment from Miki Hempleman is representative of what I’ve heard from several people:

“I totally understand your feelings Michael and were it all it is SAID to be, I might also swallow the "magic pill" ... but it's not. Read more in depth and you will see it is VERY scary a proposition and will NOT do what they say it will. And I for one am in no hurry to move into a system that will not work.

Nervous tho after hearing and talking to good friends that are both Canadians and Brits. It's not that great a deal all the way around. Your aunt?? I believe... whomever, had some very good insight as well.

Getting nervous, real nervous about where we are headed as a country. Man I hope we aren't going to take a ride down the slippery slope. It's SUCH a fine line for us to unravel.”

And it’s really no wonder. Every day interest groups, political action committees, corporations, concerned citizens, and politicians scoop buckets of muck out of the sewers to toss at each other through every medium. Absolutely absurd claims like Obama death panels would be frightening indeed if there was any truth to them.

This fear of change is something I simply do not understand. Maybe it’s just my engineer-wired brain: if something is broken, you fix it. I’m not so naive to believe that this problem is solvable overnight or that a first-pass fix will be perfect (so few things ever are). Instead, I’m pragmatic enough to realize that we’re not setting in stone the next year, decade, or century of healthcare-related policies. Positive change will happen just like everything else: one step at a time (and getting from zero to one is the hardest part).

Finally, I want to refocus my position on this issue:

  • Everyone should have health care coverage
  • Coverage should be similar to what I have (I’m middle class, I pay small $15-20 co-pays for office visits, and all the important stuff is covered)
  • Coverage should be mandatory
  • Coverage need not be free (but it must be affordable)
  • These steps are necessary for the fiscal stability of our nation as the status quo is unsustainable (thanks for the video, Steve!)

We could hypothetically do this with private insurance and some new legislation. I’m not opposed to that idea out right, I just don’t think it’s practically possible. In the health care equation between the patient, doctor, and insurance companies, only the insurance companies have a direct incentive to keep costs down and they’re doing a lousy job at it:


I’m afraid I’ve run out of time to cover all the specific points that Tiffany and Tim discussed. I think they did a fine job and I will likely come back to some of their discussion in the future. They have both clearly put a lot of thought into how specific reform could be implemented and I like the dialog.

Tuesday, August 25, 2009

Two Cents on Healthcare, Pre-Part 3

While I prepare part three of my healthcare series, I’d like to get some feedback on a question that’s come up more often than I expected:

Is access to comprehensive healthcare a right or a privilege (regardless of ability to pay)?

Let me know what you think.

Sunday, August 23, 2009

Two Cents on Healthcare, Part 2

image My friend Tiffany commented on part 1 of my healthcare posts on Facebook:

Please address how and/or why the US will remain on the cutting edge of health care without dissolving into the bowels of mediocrity. And, what motivates our most outstanding physicians to continue practicing in this capitalist society? I look forward to your thoughts and will end with a smiley face in order to maintain lightheartedness. :)

This received a very nice response from Tim:

Shouldn't the same motivations still apply?

The physicians are still going to be paid, they are still going to help people, and the plans I have heard would make compensation better for non specialists, like your family doctor.

As far as the cutting edge, I think that was the point of the link. The US is not on the cutting edge of health care now

We may spend the most money, but we don't get the best service, that's bad Capitalism.

I will also end with a smile :) this is just a friendly post. I look forward to reading more about it. Thanks for the link.

I appreciate the genuine friendliness with which Tif and Tim signed their comments though I predict that this will deteriorate soon. I guess we’ll see how long it lasts!

I completely agree with Tim. Our current system isn’t the world class health care giant we all like to believe it is even though we’re paying through the nose for it. While those numbers are dated, more recent analysis is grim, too:

image “It’s harder to keep deluding yourself or be complacent that we don’t have areas that need improvement,” said Karen Davis, president of the Commonwealth Fund.

The study, which assesses the United States on 37 health care measures, finds little improvement since the last report, as the cost of health care continues to rise steadily and more people — even those with insurance — struggle to pay their medical bills.

The central finding is that access has deteriorated,” Ms. Davis said.

…the United States, for example, has reduced the number of preventable deaths for people under the age of 75 to 110 deaths for every 100,000 people, compared with 115 deaths five years earlier, but other countries have made greater strides. As a result, the United States now ranks last in preventable mortality.

I really think we can simplify and sidestep most of the controversy with a little logical deduction.

Premise: no one will be denied essential health care.

This is a fact today. If uninsured deadbeat Joe Shmoe (no offense, Joe) comes down with cancer, he will receive complete treatment at a hospital, regardless of his ability to pay.

Today’s financial impact: We all hope he can pay but with the cost of an extended hospital visit (easily in the six figures), let’s not count on it. So Joe declares bankruptcy and society absorbs the cost of Joe’s treatment through higher health care costs. Everyone loses.

Consider the same scenario but now with Joe being a mostly responsible guy. Suppose instead of being a deadbeat, he had saved away $100,000 for retirement…but neglected to carry health insurance. We’re a little better off because he can apply $100k towards his medical bills, but Joe’s seriously screwed. He’s probably still looking at bankruptcy and his life savings has just vanished. Sure it’s his fault for letting his insurance lapse but it still seems unfair, especially when compared to the deadbeat version.

Proposed financial impact: we cover Joe and everyone else with universal health care (not necessarily free, but mandated, just like car insurance in Ohio and elsewhere). He gets sick and the system pays, just like before. Only now, we’re accounting for it properly and Joe’s finances are not left in ruins. The cost to you and me is the same either way.

It’s great that we’re a compassionate nation that hesitates to let the sick perish, but perhaps I’m too generous when I assume that the uninsured are so well received. Some stats suggest that many die in need of medical care that’s out of reach (via Powazek, via Blurbomat):

Here's what's actually happening. The US is the only major industrialised country that does not provide regular healthcare to all its citizens. Instead, they are required to provide for themselves – and 50 million people can't afford the insurance. As a result, 18,000 US citizens die every year needlessly, because they can't access the care they require. That's equivalent to six 9/11s, every year, year on year.

That’s embarrassingly sad.

Ruminations in Pictures (Briefly)

Just a few quickies I snapped recently. I noticed this Ben Franklin quote on a website (left) which appears to be attributed to a rather modern looking Ben.


I accidentally ended up at Bing recently and spent some time learning about Puffin chicks (and forgetting what I was going to search for). This factoid will surely make any new mother cry:


While heading home from a busy day Sarah and I were on the same course as this dushbag for a couple of minutes. It’s funny how applicable some stereotypes are:200908221557_112This guy had a Confederate Battle Flag license plate frame, some weird goatee thing, broken tail lights, spray painted and possibly suped up truck, rolled up sleeves, and was swerving and weaving like a true—pardon my language—douche bag. I shouldn’t be so surprised considering where I live.

And lastly, Maya and I came across this violent if not perverse Elmo toy:


You shake it and his head flops around as he giggles (seems similar to this NSFW product ad).

Two Cents on Healthcare

I’m not prepared to tackle the healthcare debate on this blog just yet. I have very strong feelings on the matter—so much so that I’m not sure where to start. I’m swirling from thought to thought unsure of how to begin writing. It’s a feeling similar to what I experience after a house move where I just walk around in circles unsure of how or what to start unpacking. So I’ll be brief.

I fully support dramatic health care reform. I don’t know what the right solution is but what we’re doing now isn’t it.

Feel free to post comment with questions, clarifications, etc. but please keep it civil. This is likely to be the first of many short blurbs on the topic.

Building a Windows Sidebar Gadget

I use Hudson CI to monitor software builds at work and thought it’d be nice to provide visibility of Hudson’s data through a sidebar gadget. Unfortunately, one didn’t exist so I took it upon myself to make one. It turned out to be very, very easy.

Here’s the end result:


The gadget is on the right side, the regular Hudson interface on the left. The top 11 projects are listed as links to their project pages within Hudson. The colored bullets indicate build status (green = good, red = bad). I experimented with shading, text color, etc. and concluded that just having colored bullets was clear, clean and consistent with the regular Hudson interface.

imageAnyway, the easiest way to get started with Gadget development seems to be starting with an existing gadget. I started with the unofficial flair gadget. A .gadget file is really just a zip file. 7zip seems to know this as it allowed me to unzip it without renaming it to .zip which was nice. After unzipping, I stripped out pretty much everything except the structure.

The gadget is remarkably simple—it’s just two web pages, main.html and settings.html. All the other files are just there for support: a few images, jquery (my favorite JS library), and json2 (brings JSON support to IE which is curiously missing on my Windows 7 machine). Obviously main.js/.css/.html go together as do settings.js/.css/.html.

Here’s what the main page looks like:

<html xmlns="">
  <title>Hudson Monitor</title>
  <link rel="stylesheet" href="styles/main.css" />
  <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
  <script type="text/javascript" src="scripts/main.js"></script>
  <script type="text/javascript">
    $().ready(function() {
<g:background src="images/bg.png">
    <ul id="jobs"></ul>

The HTML really boils down to a single element: <ul>. The real magic happens within main.js. Here’s the relevant section:

function FillMain() {
    // Get the url from the saved settings
    var url = System.Gadget.Settings.readString("hudsonUrl");

    if (url == null || url.length == 0) {
        $("#jobs").append("<li class='status-red'> \
            Whoa there! Check your options, pal</li>");

    $.getJSON(url+"/api/json/?jsonp=?", FillMainCallback);

    // Repeat every 20 minutes
    setTimeout("FillMain()", 20 * 60 * 1000);

function FillMainCallback(data) {

    // space is limited
    var items =, 11);
    // add each item to the list
    $.each(items, function(i, item) {
        var itemName =; 
        var itemClass = 'status-' + item.color;
        var itemUrl = item.url;

        $("#jobs").append("<li class='" + itemClass + "'><a href='" 
            + itemUrl + "'>" + itemName + "</a></li>");

I won’t talk about that too much except to say jQuery makes all of this so much easier:

  • $.getJSON(): contacts the Hudson build server and retrieves a terse list of build statuses. Hudson provides a straightforward, albeit limited API at http://hudson-url/api.
  • $.each(): iterates over each Hudson project returned by the server; for each one, adds it to the list (#jobs) as a new list item

With the data flowing nicely, all that was needed was a little light graphics work and some CSS and I called it a day. I borrows the pretty background image with the curvy, aero border from the Outlook gadget but replaced the Outlook icon with a Hudson logo.

This is a feature-poor gadget, I admit. I plan to add the ability to order the projects by other criteria (e.g. last-activity-date) and the ability to pick which projects are listed. I might try out some other UI designs, too. What I have is functional and clean but leaves a bit to be desired.

Friday, August 14, 2009

Enabling Dynamic HTTP Compression in IIS7 on Windows Server 2008

I’m not very familiar with the newer configuration screens in Windows Server 2008 so I pulled my hair out trying to update some settings. Apparently it’s just too obvious for Google to have been any help so I’m documenting it here for the next shmuck.

I wanted to enable dynamic http compression. I found the page to enable it but it wasn’t installed:

“The dynamic content compression module is not installed.” (but we won’t tell you how to install it)

It turns out that installing it is very easy and didn’t require a reboot (for me, at least):

Text only

Install it:

  1. Open server manager
  2. Roles > Web Server (IIS)
  3. Role Services (scroll down) > Add Role Services
  4. Add desired role (Web Server > Performance > Dynamic Content Compression)
  5. Next, Install, Wait…Done!

Enable it:

  1. Open server manager
  2. Roles > Web Server (IIS) > Internet Information Services (IIS) Manager
  3. Next pane: Sites > Default Web Site > Your Web Site
  4. Main pane: IIS > Compression

With perdy pictures

Install it:

  1. Open server manager
    0 start server manager
  2. Roles > Web Server (IIS)
  3. Role Services (scroll down) > Add Role Services
  4. Add desired role (Web Server > Performance > Dynamic Content Compression)
  5. Next, Install, Wait…Done!

Enable it:

  1. Open server manager
  2. Roles > Web Server (IIS) > Internet Information Services (IIS) Manager
  3. Next pane: Sites > Default Web Site > Your Web Site
  4. Main pane: IIS > Compression


You might be wondering why you’d want to compress content in the first place. This site has a nice analysis of the practice as well as detailed information regarding what compression level you should use (and how to set it).

Tuesday, August 11, 2009

First Look at Windows 7

When Windows 7 hit MSDN late last week, I took the plunge…and I’m loving it.


I’m not one to participate in the religious wars that operating systems seem to cultivate—I have three machines, each perfectly suited to its task: a Windows machine, a Mac, and a Linux box. I’d say I’m pretty well rounded. Interestingly, I have almost zero experience with Vista. I’ve used Server 2008 a bit and liked it but for many reasons was stuck on XP until just recently.

I don’t really believe the anti-hype that Vista is awful just like I don’t think MS is evil or Google is taking over the world (…or are they?). Instead, I think MS is just a popular company to hate, which is something Google has been extremely careful to avoid so far.

Anyway, back to Windows 7. It’s awesome. Compared to XP, it is elegant, quick and intuitive. They might have gone overboard just a bit with the transparency or dialog animation but I am thrilled. So much so that I think I worried Sarah a little when I raved about how much I liked it upon installation.

First some good things. The defaults seem to be much better this time around. I have found myself changing very little in the control panel. On my modest 1.6ghz dual-core laptop, it’s very snappy. The new Explorer is very nice to work with and actually provides helpful information as you go in the form of action buttons directly underneath the address bar:


Some of my apps are incompatible with either W7 or X64 but Microsoft has me covered with Windows 7 XP Mode. XP Mode is basically an entire install of XP virtualized to run within your current Windows 7 session. They do some nice tricks to make things blend in with W7 but it’s really just an app running in a VM. I used this for the Cisco VPN Client (which doesn’t support x64) and a weird corporate app. Once you install them inside the XP VM, they show up on your Windows 7 Start menu like so:


And then when you launch the app, it looks like a normal XP program (overtop a regular Windows 7 program for comparison):


It’s a little slow and perhaps overkill for some small incompatibilities but it is extremely effective and was a major selling point for me.

It’s not all shine, though. I have a few gripes—some big, some small. First, I regret going to x64. I thought at the time that x64 would allow me to use all of my 4gb of memory. This appears to be false as my computer’s hardware seems to be limited to 3.25gb, regardless of OS. I get all the hassle of x64 with only minor benefits. Very lame.

Next, my touchpad scroll area doesn’t work. I screwed around with all the Vista x64 drivers I could find but haven’t had any luck getting it to work. Driver issues like this were old hat back in Windows 98/XP days so I guess I should consider myself thrilled that I didn’t have to install a single driver to get sound, video, wireless, etc. So, no scrolling from the touch pad from an OS that’s not officially been launched yet? Not a big deal, it’s just annoying.

Third, some development tools require some extra effort or have reduced functionality. For example, Visual Studio 2005 reminds me each time it runs that it’ll run better if I run it as an administrator. Further, VS2008 informed me that it’s not too keen on Edit&Continue since I’m running x64.

Finally, I wish there had been a reasonable in-place upgrade option from Windows XP.  Back in high school, we used to format our machines every month or two—that’s what was required to keep Windows 98 running with all the crap we were putting it through. XP was pretty solid, though, when used primarily for work stuff so I haven’t done a clean format in years. But to get to Windows 7, I would have had to first go to Vista. Doing two major upgrades seemed worse than doing one clean format. The format/install was painless and I imaged my system first which made me confident I wouldn’t lose anything. Still, reinstalling every damn piece of software and copying over settings to obscure locations is tiresome.

Far and away, I’m loving Windows 7 and don’t regret the move at all. I just might do x86 if I had a do-over (though I might yet reap the benefits of x64 when I get a laptop upgrade in a year or two).

Tuesday, August 4, 2009

We’re going to the zoo--zoo--zoo…how about—what are you looking at?!


We went to the Cleveland Zoo today for World Breastfeeding Week. It was a beautiful day for it—sunny skies, but not too hot and we all seemed to be in surprisingly good spirits. Here are some highlights:

  • We spent the whole morning bribing Maya with Penguins we’d see at the zoo later. “Finish your cereal so we can see the penguins!” “Go downstairs with Mommy so we can see the penguins!” “Don’t fall asleep…” yadda yadda. We quickly learned that Cleveland Zoo doesn’t have penguins. We’ve been there several times this year. We’re members.  We have no excuse. (note: Akron zoo has an awesome penguin pool which we’ve been to many times)
  • We saw an awful lot of scary parenting. To paraphrase a friend (Tif, I’m gesturing in your direction): why would you bring your kids to the zoo if you don’t like them? One particular incident comes to mind. Just as we arrived we hit the bathrooms. While doing my business, a woman was standing in the door way shouting at her son to go into this stall, then that stall then, “ah jesus forget it cause you’re too slow and now we ain’t waitin for another one.” Aside from encroaching on the sanctity of the men's room, I became a target when she saw my surprised expression as I was leaving and decided to shout at me, “what you looking at?!” My next blog post, that’s what.
  • All the exhibits have a little plaque that shows where the animals live—coastal Australia, Central America, etc. None of these include Northeast Ohio which seems strange because that’s the only place I ever see zebras and wallabies.
  • A local WIC chapter had a booth showing 10 steps to successful breastfeeding. The severity of one of these surprised me: “Don’t smoke. Limit alcohol. Avoid medications and street drugs.” Avoid street drugs? That sounds more like a suggestion than a rule. (sorry for the blurrycam)



  • Raffles are really, really boring when you aren’t participating or interested in anything being raffled (it’s WBW week, after all)
  • Smokers are very annoying. Seriously: if a venue has designated smoking areas, please use them!
  • The zoo is exhausting but only kids are allowed to sleep (not fair!)


  • Maya can count (1, 2, 7, EIGHT!!!, 14, 1, 1, 1, 2, jump!)
  • If you ask Maya, all we saw today were birds. A duck, a goose, a zebra bird, a kangaroo bird, a doggie bird, a bird bird…

That’s all I have for zoo-related news today. Just to empty out the memory card, here’s a few unrelated ruminations:

  • I’m awesome at slicing bread. Like this is some sort of gift. You don’t believe me? This was sliced free-hand, I swear:


  • This tree (on Graham Rd in Stow) got screwed:


  • A single beehive can produce 100 pounds of honey each year, according to Sarah who heard it from a friend who has three such hives in her backyard. I guess we’re getting closer and closer to becoming hippies every day because I love honey…a lot…and now have to convince myself that I don’t want to take care of hundreds of stinging insects just to get it for cheap. I think we’ll just keep getting it from our honey-person (yes, we buy it direct from some cranky lady a few miles away…by the gallon, though soon we might get it from our hippie friend). Here’s how much I love honey—I have two honey bears which I refill from our gallon jug, but I also received this sweet dispenser as a gift last year:


  • And finally, after the zoo we found a this-end-up-fail on our doorstep:


Sunday, August 2, 2009

Apache Reverse Proxy Implemented

Note to off-site viewers: this post has pictures. If you don’t see them, come to the site for a better view!

This is a follow-up on my previous post about the server architecture I setup to support my company’s developers. This was the goal:


Or in words: users inside and outside of the company need access to a bunch of tools (the green arrows). The proposed way of doing that uses a single server as a gatekeeper and router to other servers (the black arrows).

This design offers many benefits which I won’t repeat here—head over to the original post to read up on them. Instead, this follow up serves to document how this design was implemented. In many ways it was easier than expected but we hit a few hurdles I didn’t expect.

The first hurdle was expected: getting the reverse proxy working. A teammate tried to get this going with IIS7 for a while without success. I took a stab at it with Apache—something I’m much more comfortable with—and got things working pretty quickly. While IIS required explicit rewrite rules with URLs, tags, etc., Apache seems better suited to the job and has a nice, clean configuration:

imageProxyPass /redmine/ http://rowlf/

<Location /redmine/>
        ProxyPassReverse /redmine/
          Order Deny,Allow
          Allow from all
          Satisfy Any

ProxyPass /svn/ http://scooter/svn/
<Location /svn/ >
        ProxyPassReverse /svn/
          Order Deny,Allow
          Allow from all
          Satisfy Any

ProxyPass /VaultService/ http://vincent/VaultService/
<Location /VaultService/ >
        ProxyPassReverse /VaultService/
          Order Deny,Allow
          Allow from all
          Satisfy Any

imageRedmine was pretty easy to get going at first but had a path-root problem. It wasn’t liking that I was serving it out of a directory (/redmine) on kermit but was actually hosting it on a rwolf’s root (/). It complained by building resource links for things like css and js with an incorrect path. This was quickly remedied by adding this line to Redmine’s environment.rb file (it’s a Ruby on Rails app) as noted here:

# added to end of file C:\redmine\config\environment.rb
ActionController::AbstractRequest.relative_url_root = "/redmine"

image SVN also took a little extra effort to realize it needed the extra verbs explicitly permitted with a <Limit> directive:


By the time I got those two running, another teammate got Vault running on Vincent so I wired that up easily, too.

imageI was most worried about Vault because it’s the only closed source system involved. I have nothing against closed-source software (it’s what I make every day), just that if SourceGear (Vault’s maker) didn’t plan or desire for Vault to work with a reverse proxy, I’d be pretty much SOL. But it worked most easily so props to SourceGear.

That’s it. Now I’ll just let it incubate for a week or two with a few people testing it occasionally to see that it holds up. When ready, I’ll just throw the switch and our existing users for svn and Redmine won’t even notice because their URLs won’t change. Vault users will need to use a new URL but hopefully for the last time…and maybe we can redirect the old URL to the new one transparently—I’ll need to look into that to see if the Vault client will follow a 301 redirect