For those we lost, We will not forget 09/11/2001 “Our God given unalienable rights are given to us all as individuals. They tell us what we may do for ourselves, and they are the embodiment of liberty. The so-called rights that government gives to some of us are parcelled out to select groups as classes. They tell us what one class of people may require another to do for them, and they are the very essence of slavery.”
— Perri Nelson, February 9, 2010

A bheil Gàidhlig agaibh?

Stupid software tricks


Published Tue, Oct 20 2009 10:47 AM
Technorati Tags: Annoyances

Instant messaging software is handy to have to communicate with friends and associates. I use three different messaging clients and services, primarily Microsoft’s Windows Live Messenger. I also use AOL Instant Messenger and Skype, but I don’t use Yahoo’s messenger. I use these different versions of messenger to communicate with other people that use them, some for personal reasons, but mostly for business reasons of one sort or another. For example, I use Skype so that I can get personalized tutoring in Scottish Gaelic, including pronunciation help. I use Windows Live Messenger to communicate with former co-workers and my professional network. Some of my friends only use the AOL Instant Messenger service. All of my friends that use Yahoo’s service also use one of the other three, so I don’t need that one.

Microsoft recently updated its Windows Live Messenger service and client. Since I use that service, I decided to upgrade to the new client, hoping to pick up security patches and the like.  Generally, I install minimal feature sets for these programs, because I don’t really want the Windows Live Toolbar, or the Google Toolbar, or the AOL toolbar, or the Skype add-in so I can make an internet call to what looks like a phone number in my browser. I prefer lots of screen real-estate so I can view content and as few hooks into everything as possible so my system doesn’t get bogged down trying to see if I might want to use some obscure toy while I’m typing.

Like our federal government, software has gotten needlessly complicated over the years. More and  more we find programs including bits of code that have nothing to do with their actual functionality. The concept of “bloatware” isn’t really a new one, but it seems that every software release is a bit bigger, or has more “fluff” masquerading as “essential” features. If it’s not bigger with new non-essential features, the access points to the features it has are moved – menus are changed, hot-keys are re-assigned, things like that. It’s sort of like road maintenance – the point isn’t to fix the road, you just move the potholes so drivers can’t memorize where they are and avoid flat tires.

Part of the bloat in software comes from the use of frameworks for software development. These frameworks are intended to do several things. They standardize the look and feel of software. They allegedly make it easier for developers to design and write the application shell so that they can concentrate on new features and functionality. They also provide a common set of functionality that can be shared by many programs, resulting in smaller footprints for those programs – at least in theory.

There’s a benefit to some of this. If all of your software works in the same way learning how to use a new program should be relatively easy, because there are so many points in common with other programs. If it all shares the same basic interface, understanding how to use new programs should be intuitive once you’ve learned how to use one.

The problem with this though is that software is as much driven by marketing wonks as it is by customers. This is another cause of software bloat. Everyone that sells a software package wants you to buy it, and to recognize it. So standard window layouts change. That typical boxy windows frame around your application has to be changed to distinguish the product from another one. The operating environment’s implementation of title bars isn’t enough – after all, there’s a new operating environment with fancy semi-transparent title bars, and this one doesn’t offer that, so we’ve got to make this program look like it’s running on the next version.

If you want to make your Windows XP program look like it’s running on Windows Vista, you’ve got to include code in it to do what Windows Vista would do for it. That makes your code larger than it needs to be and introduces the possibility that you’ll get it subtly wrong. So if the same program actually runs on Windows Vista it might not look quite right – or it will have to disable that feature to rely on the operating environment instead. In the one case, your program loses that common look and feel that programs relying on the operating environment for common features have – in the other case your customer pays for code that he’ll never use. Often he pays twice – once to have your engineers develop that code, and again in disk space when he installs the program.

That’s how things work with Windows Live Messenger. When it’s running on Windows XP, it tries to look like it’s running on Windows Vista with the “Aero” shell. So it has the lovely curved window frame and the semi-transparent title bar with the glass-like minimize, maximize and close buttons on the top corner. But sometimes, it’s quirky. For example, if you don’t want it to run when your system starts and you click on the close button before it’s completely initialized (WHY, oh WHY does it take so long to start up a simple messaging application anyway?)  the old style Windows XP title frame and window border appear outside the original window. That looks bad and shows that the developers had to trick Windows XP into doing something with the application that it really wasn’t designed to do, just so the marketing wonks could sell Windows Vista. It’s a “feature” that I just don’t need.

Frameworks don’t always make it easier for developers to do their job well either. I recall the lovely layers of frameworks I had to use at Microsoft, including the time when Microsoft Sharepoint Portal Server became a part of Microsoft Office and we had to start using the Office team’s library of macros – layer upon layer of macros all to do something incredibly simple like allocating space for a string. There was a macro that was designed to provide a bit of memory for use as a string buffer. This macro took a couple of parameters, including the size of the buffer, and returned a typed pointer – the type being defined by another macro. The macro actually called another macro located in a different include file to allocate the memory. This second macro took a couple of parameters, in a different order, and returned a typed pointer – again with the type being defined by another macro. This went on for four layers until finally the Win32 LocalAlloc function was called.

Have you ever wondered why there are so many security updates for software products? I think it could be that programmers are so insulated from what their code is actually doing by all of these layers of frameworks that it’s hard to see where the security flaws actually are.

When your framework is built upon another framework things get interesting for your end users too. A couple of years ago I wrote some very simple programs for my own use. I used the .NET framework to build them. When some of my friends expressed interest in them, I built a setup package using the “one click deployment” method provided in Visual Studio so that they could install them on their own machines. That turned into a nightmare as they had to install the .NET framework before they could run the setup package. Then they had to install a different version of the .NET framework so they could actually run the software itself.

Three people tried setting up the application besides me. One was a software developer that had some of Microsoft’s development tools. He had no problem installing the software and running it. One took several days and a lot of product support calls to me before he and I finally got it working on his system. The other never got it working. It was because of this terrible experience that when I wrote my Electromechanical Computer Simulation that I refused to release it until I had re-written it without the .NET framework. What was the advantage of that? Well it will even install and run under Linux as long as there’s a Windows Emulator package like WINE running, and it doesn’t take a rocket scientist to install it.

Back to the upgrade. When I launched the new setup program it checked to see if it could run without having to reboot my computer. That was considerate of the developers. It checked to see if any of the features it needed to upgrade were already in use – and it found several. So it popped up a dialog box telling me that certain services needed to be shut down and some applications closed before it could continue. Courteously, the developers asked if I wanted the setup application to close them down for me, or if I wanted setup to continue with them running and reboot the system after setup had completed.

After this, I was thinking “Wow, Microsoft’s people finally got Steve Ballmer’s message of ‘Customer Love’ from 2002 after all these years.” So, I exited from Microsoft Outlook (thanks to one of those “features” that I could really do without – Who really needs to know that the address book contact you’re writing an e-mail message to is online right now anyway?) and let the setup application shut down the services to avoid the need for a reboot.

Guess what? That’s right, after setup completed it popped up that old familiar dialog telling me that my system has to be rebooted to complete the installation before I can use the new features. I guess the marketing wonks duped me there. Either that, or the engineers at Microsoft still haven’t learned how to build an application that exits cleanly. There was absolutely no point in my shutting down Outlook or letting setup shut down those services so I wouldn’t have to reboot. I still had to reboot. Even after I managed to get through 30 pages of the 1502 page “health care reform” bill. I guess I’ll have to re-start reading that too.

David Letterman, a comedian that in my younger days I liked but no longer can stand, used to have a segment on his show called “stupid human tricks.” I think I’ll file this under “stupid software tricks.” Oh, and I think I’ll file the “America’s Healthy Future Act of 2009” under “stupid congress tricks.” Talk about needless complexity, frameworks upon frameworks, and features we don’t need. That one’s federal bloatware. I guess Congress has been learning a thing or two from Bill Gates. How long will it be before the people decide we need to reboot our government?


Trackback URI for this post: http://perrinelson.com/track.aspx?postid=1377
Permalink URI for this post: http://perrinelson.com/2009/10/20/1377.aspx


Subscribe to this entry's comment feed. (Atom)

Stanford Matthews responded with:

Gravatar
Not a fan of instant messaging to the annoyance of some of those with whom I communicate.

Your commentary on software development presents another example of the lack of standards in IT. They may exist but few seem to use them. Proprietary considerations I suppose influence the situation.

As for the HC reform bill, I suspect you refer to S.1796, just got it a day ago and also read reports that such things are still being withheld from the public. I only began reading last night. So many bills on HC out there it is getting difficult to keep score.

An intended consequence I suspect.

David responded with:

Gravatar
"Well it will even install and run under Linux as long as there’s a Windows Emulator package like WINE running, and it doesn’t take a rocket scientist to install it."

Nailed me in one. :-)

I've stopped believing software installations that tell me I MUST reboot Windows for the installation to finish. Many times, it isn't necessary at all. Of course, well-designed software wouldn't need a reboot. I can't recall the time a software installation in Linux or BSD required a reboot.

Delicious Bookmark this on Delicious 

Comments to this entry are closed.

View Perri Nelson's profile on LinkedIn I'm a proud friend of Israel! Are you? Republican National Committee