Preventing Same Version Downgrades with WiX

So I farked up when I was building several MSI packages using the Microsoft Windows XML (WiX) Toolset. I broke a sacred covenant of MSI development and violated the component rules.

This would not normally be a huge concern since the members of the components, the files, are not going to change. However, I did run into an interesting issue. Because my company’s versioning scheme is MAJOR.MINOR.REVISION.BUILD where BUILD is a value auto-incremented by the build server, as far as MSI is concerned is the same version as And because our patch strategy is to simply release a hot-fixed MSI, we have to allow same-version upgrades.

Anyone familiar with MSI upgrades knows the dirty secret that allowing same version upgrades allows same version downgrades. Except these downgrades would result in files disappearing from the filesystem. After much research I determined the issue was because of my stupid decision to group multiple files into single Components. MSI was not applying the standard file versioning rules correctly, and thus during a downgrade the following steps were occurring:

  1. Version X is installed on a system and user attempts to install version X-1.
  2. The installer appears to calculate which Components need to be installed by version and date. It does not include the X-1’s Components because they are already on the system.
  3. The installer removes X’s Components from the file system.
  4. Finally, the installer chooses not to install X-1’s Components because the installer has already calculated that the Components on the filesystem, at version X, were newer.

I found myself in quite a pickle. How do I prevent same version downgrades when the only varying component of the version is the 4th component (which again, MSI ignores)?

Continue reading



Last fall I waited in eager anticipation for my Grove Bamboo case. Simply put, Grove makes these wonderful, beautiful, bamboo laser-cut iPhone cases. In fact, they are now making one for the iPad as well. However, I must warn possible purchasers of the Grove cases that even through everyday use, your work-of-art case will likely fail within six months. Here is a picture of the bottom half of mine now:

Broken Grove Bamboo iPhone4 Case

Broken Grove Bamboo iPhone4 Case

One cannot argue that the Grove made iPhone4 case is nothing less than perfect. I have received more comments on how amazing the case is then I can count. However, for $89, a case should not fall apart after taking the bottom half of it off an on on a regular basis just so you can dock it or plug it into a car charger. That said, I may buy another one eventually, if Grove has strengthened their manufacturing process (and glue that holds the black trim to the bamboo). For now I’ll probably invest in a Vapor case that is all aluminum. Should help block the attenuation issues with my phone anyway.

I Love Balsamiq Mockups

Let me just say right off the bat, that I hate, hate working on Functional Specifications, and the reason for my loads of loathing is the user interface (UI). Managers want specifications to include screenshots of the UI, but as I’ve tried to explain, it is a chicken-and-the-egg situation. Do you want a specification, or do you want me to work on the UI?

The answer to this problem is usually creating wireframe mockups of the eventual UI. However, I’ve yet to find a mockup tool that I like. I’ve tried tools like Visio and OmniGraffle which are good tools, but they focus more on diagraming and process flow than wireframe design. Not to mention the aforementioned applications share a particular trait with an almost standard for creating mockups — Axure — complexity. The barrier to entry for these applications for doing something as simple as creating mockups is relatively high. I have longed for something simple, powerful, and straight-forward.

And then I found Balsamiq Mockups.

Continue reading

i18n f4n

When designing EMC VSI 4.0, early on I made a decision that the entire core framework was going to be i18n compatible from the ground up. Unfortunately this led to colorful weekend. While this topic has been discussed time and time again, it’s so important that it bears repeating: just because your copy of Windows is set to use a different region’s locale doesn’t mean that you’re not still using good ‘ol en-US when it counts.

Continue reading

2010 in Review

The stats helper monkeys at mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:

Healthy blog!

The Blog-Health-o-Meter™ reads Wow.

Crunchy numbers

Featured image

The average container ship can carry about 4,500 containers. This blog was viewed about 21,000 times in 2010. If each view were a shipping container, your blog would have filled about 5 fully loaded ships.

In 2010, there were 18 new posts, growing the total archive of this blog to 62 posts. There were 30 pictures uploaded, taking up a total of 3mb. That’s about 3 pictures per month.

The busiest day of the year was March 10th with 767 views. The most popular post that day was SimDK.

Where did they come from?

The top referring sites in 2010 were,,,, and

Some visitors came searching, mostly for simdk, andrew kutz, backuppc archive, snow leopard ipfw rules example, and stylecopcmd.

Attractions in 2010

These are the posts and pages that got the most views in 2010.


SimDK March 2010


Software June 2008


Building a Better OS X Firewall (or How I solved the NAT problem for VirtualBox) August 2009


A SimDK Virtual Appliance March 2010


How To: vSphere Client to vCenter Using HTTP March 2010

Cataclysm Cannot Control Them

I finally broke down and resubscribed to World of Warcraft. The reviews of Cataclysm were too good to not give a go, so I rolled a Worgen druid and off I went. And I really enjoyed the first 10 levels or so; the ones with story. Then I got dumped in Darnassus and it was the same old grind of game all over again. The reviews failed to mention this part. But the part that has me really bummed, and thinking of quitting again already is the other players.

At the university where I used to work, my colleagues and I would joke that the university would be a great place to work if it weren’t for the students. Obviously we saw the irony, and it was more of a comment on the behaviors we did not care for that the younger undergraduates typically displayed. On that note, World of Warcraft would be a fun game if it weren’t for the other players.

Hey Blizzard, is there some way you can add an option so that I only have to interact with players who are older than 25, have a full time job, families, and don’t live with their mom? You could call it a maturity or politeness filter. C’est la guerre I suppose, but it really does stink that an otherwise interesting experience is still ruined by people who have no room for those of us just trying to have fun. I guess when your life is so bad in the real world, it’s much easier to take a game so seriously.