Wednesday, October 07, 2009

New Toy = NetBook EeePc 1005HA

Just got a new toy for our upcoming travels. I wanted something small to dump pictures onto, so I can label them while I still remember the details. I used to have a Fujitsu P2000 series that I used for this, but that poor Transmeta chip wasn't really holding up very well. So I bought a Asus EeePC 1005HA. The first one arrived with a busted wireless. Sent that back and am writing this post on its replacement.

Aside from spending all last night installing all the necessary updates (See previous post) I am rather liking the little blue beast. The keyboard is small, but usable. The screen is also small but usable. Google's Chrome browser appears to be a particularly good fit, at least with just a few tabs open.

I'm curious to try it out more. I've got a 2GB DIMM to install, which should help things. I've also tried Moblin a tiny bit. I'll report back more when I've had more time to play with the machine. I'm really rather excited about a machine that has enough batter for me to play around most of the evening without running out of juice. I just wish someone shipped a 10" screen with more pixels. 600 pixels tall is pretty damn small, especially if you are used to a laptop 900 pixels tall. Everything appears freakishly big on the netbook at first.

If only it supported the two-finger up/down scroll like my MacBook... I miss that every time I use a Windows laptop....

Dangerous Data Structures

We have been working on a particular component at work recently. The origins of this code go back to some of the very origins of the product. The code was written assuming a set of facts that no longer really holds true. My team has been patching it, trying to make it work with our new realities. We have come up with some pretty impressive hacks, but each fix has exposed new limitations of the code which we then need to try and patch.

What went wrong? Why was it so hard to fix the old code?

The problem was that the original code was using data-structures that didn't align with the new goals for the code. The core data-structure was of a rather neat design, but was also rather complicated. Both aspects deterred people from replacing it with something different. If the existing code was so complicated, the replacement (which must support more scenarios) must be more complicated, right?

I've seen this happen many times. Someone writes a neat bit of code, and later developers are nervous to replace it. Even though trying to retrofit new ideas on the old code is obviously painful, they would rather layer hack upon hack than rethink the original. This may not actually be true.

The worst cruft I have seen accumulate in 'legacy' code, happens when the original implementation used an inappropriate data-structure. Layer after layer of hack tries to pretend that the data is structured differently than it really is. This is one of those things that I think of when people talk about 'code smells'. This is one of the few times that a (partial) rewrite is in order.

It is critical that the data structures used are appropriate for the task at hand. Pick the wrong representation and now your code has to jump through hoops to do simple tasks. Pick the right data-structures and the code is clearer, and thus less buggy. With the right data-structure choice it is also easier to evolve the code, to add new features.

Just watch out for the day when those new features indicate that maybe you need to rethink your data-structures.

Tuesday, October 06, 2009

If Microsoft cared about Customer Experience

I'm planning some upcoming travel, so I thought I'd try out a netbook. The first think I do on a new computer is download the latest patches. There is something seriously wrong with the fact that it is taking ~1hr to download and update a brand new computer. I realize that means my experience is about a fresh XP install, but since netbooks account for a significant percentage of laptops purchased today, I think my argument still holds. If so many people are buying these machines, doesn't Microsoft want a good customer experience? Instead, I get an insane list of updates. Why can't they ship a version of the OS that includes all these updates? That I need to waste hours updating, just so that I don't get a virus the first time I navigate to a random site with unscrupulous advertisers, is crazy. It just makes me want to try Linux. Have you seen the latest Moblin release? Apple understands this. When I bought a new MacBook latop last fall, I was up and running with the latest updates in minutes. The few updates I had to install were fast to download and quick to install.

Microsoft really doesn't seem to act like a company that cares about the customer experience. They care about the corporate experience... maybe. Amazon only just started delivering new laptops with Vista this summer! They are not the only company that kept away from Vista until they had no choice.

Microsoft is seriously at risk of loosing market share if they don't give customers a reason to want their products. I don't want Windows; I use it because it is the only OS with the apps I need. Meaning, Windows is the only platform with a good Exchange client, aka Outlook... If OSX really does get a good port of Outlook, I'd prefer that in a heart-beat. For home computing I use a Mac. I bought my parents a Mac. I think Microsoft is a lot closer to loosing a chunk of consumer market than they realize. I think Windows 7 is the last gasp before the consumer marked becomes fully commodetized. Soon after that the OS will stop really mattering.

Microsoft is dangerously like the steel-mills and mini-computer manufacturers profiled in Innovator's Dilemma, yet Balmer pretends that it is 1999. Sigh.