Sunday, 24 December, 2006

The Future of the Desktop PC

In his article, The Open Source Desktop Myth, author David Chisnall points out correctly that Microsoft has already won the war.  That, although Apple's OS X is superior and you can build a Free Software desktop OS that's "better" than Windows, it would be very difficult to lessen Microsoft's hold on the desktop.  He then points out, also correctly, that it doesn't really matter.

His reasoning is simple:  computing is moving away from the desktop.  Apple sells more notebook PCs than it does desktops.  Other manufacturers also are seeing notebooks outsell or coming close to outselling desktops.  It's no surprise, really.  Notebook PCs are incredibly powerful these days--plenty powerful enough to do what most users want them to do.  They're more expensive than desktops, but when the price point is under $1,000, the convenience of having a notebook far outweighs the price premium over a desktop system.

But the notebook isn't significantly different from the desktop.  They have the same operating systems and the same user interface devices.  For most users (myself most definitely included), the notebook is just a portable desktop machine.  I don't use it any differently than I used my desktop machine two years ago except that I can carry it wherever I go.

Chisnall then goes on to point out that other devices are far more ubiquitous than desktop or notebook PCs.  You can get mobile telephone/computing devices today that are much more powerful than the desktop PCs of 10 years ago.  The user interface devices are quite different, of course, but with keyboard and monitor add-ons, it's possible now to do on a mobile device (that doubles as a telephone) all of what "normal" computer users do with a computer these days.  Surf the Web, check email, play a rousing game of Free Cell, manage a calendar and address book.  With Web-based email, calendar, and address book, there's no need for local storage.

What many people don't realize--even those who say, "the Web is the future"--is that the Web is the future!  All the technology is in place for the desktop PC to become almost completely irrelevant except as an appliance to get to the Web.  With systems like Ajax and (conspicuously missed by Chisnall) Flash, the browser-based desktop is possible.  Amazon's S3 and similar offerings from others provide secure and reliable storage for Web-based applications.  Ajax and Flash provide browser-based applications that, although slower than native applications today, they're still as fast or faster--and quite a bit more feature-rich--than similar applications from five years ago.  It's entirely possible to build a Microsoft Word or Excel equivalent in Ajax or Flash and have the data files stored on S3.

It's not much of a stretch at all to envision an integrated development environment, a collaboration system, or even an entire Web-based desktop that's designed to run in the browser, storing files somewhere "out there."  At that point (and I think that point will be very soon), the device becomes irrelevant.  I should be able to go up to any computer or mobile device that has a functioning Web browser and access my desktop.  All of my files are available to me instantly, from anywhere in the world on any computing device.  I don't have to carry a notebook computer or a memory card or anything else that saves state.  Any dumb browser device will do.

There are arguments against that idea, perhaps the biggest being bandwidth limitations and the perceived vulnerability of data stored on the Web.  Bandwidth is a problem in some cases, although for most it's not at all.  Web-based email actually uses less bandwidth than does a POP client, because you don't have to download messages that you don't read.  It requires bandwidth to pull down a document that you want to work on, but most of those documents are so small as to be irrelevant.  Even music files (at about one megabyte per recorded minute) come down at reasonable speed, so online editing of audio is well within the realm of possibility today.  Video editing still requires huge files--big bandwidth if stored online.  Few other applications have similar requirements.

I suspect that your data is actually safer on S3 than it is on the normal user's desktop that has an always-on connection.  Administrators of online storage providers are much more aware of security issues than the average user.  Whereas Joe Public's computers are continually infected with worms, viruses, Trojans, and all other manner of malware--most of which the user doesn't know about--commercially-operated storage sites are hardened against intrusion and are continually tested and updated to prevent security breaches.

I've heard people argue that users won't be willing to store their precious data online, but I dispute that.  Most of us have electronic access to our bank accounts or investment accounts (ETrade, etc.), credit card statements, PayPal, Amazon, eBay, and hundreds of other sites that store our precious personal and financial data.  Every once in a while you hear about security breaches, but nobody I know personally has ever been affected by one.  The public already trusts their data to the Web.  Implicitly.  The only difference in what I'm talking about is that users will all of a sudden be explicitly trusting their data to be stored "somewhere out there."  Some will grumble, but everybody will do it.

If the above happens--and I don't see any reason why it won't--Microsoft is in a tight spot.  Microsoft is married to the traditional way of doing business.  That is, packing functionality into the operating system and other installed software:  selling software as a product, one computer at a time.  Their business model cannot survive a move to the Web, with software provided as a service.  That is, the software is essentially free, and users pay for storage or back-end functionality.  Microsoft has some of the best developers in the business, and great thinkers who have seen this coming.  They've even made some half-hearted attempts at creating such Web-based applications, but doing so hurts their core business of installed software and upgrades.  If Microsoft throws its efforts behind a "software as a service" model, they will kill their cash cows.

The face of computing is going to change.  Not as quickly as I'd like to see it change, because there are plenty of Microsoft-like companies out there insist on creating buggy whips, hoping that if they don't embrace the new way of doing things, it won't happen.  Those companies who continue to operate with blinders on--milking their decreasing revenue streams as the new world of online applications passes them by--will soon find themselves unable to catch up when they finally come face to face with the new reality.

The next few years will be very interesting.

Thursday, 14 December, 2006

Creating Color Schemes

I've mentioned a time or two before that I don't understand how some web page designers pick their color schemes.  Red text on a black background--which I see distressingly often--is almost impossible to read.  Some people seem to take perverse enjoyment in selecting color combinations that are painful to the eye.  I, on the other hand, know that I'm terrible at picking colors, so I tend to stay with simple defaults like black text on a white background, with blue for highlighting.  I'm more about content, anyway, so as long as my site is readable, I don't need too much flashy stuff.

Except when I do.  If I'm building a site or an application that requires some visual appeal I find myself frustrated at my incompetence.  Picking from standard colors or trying to make my own is hair tearing and mind numbing work.  I usually throw up my hands in frustration and go try to steal somebody else's color scheme.

What surprises me is that there doesn't appear to be a program that will generate a good color scheme for you.  It seems like you should be able to give a program some basic information about preferred background and foreground colors, and it could generate colors for links, visited links, headings, text, and all the other things that normal web pages have.  It should even be able to generate text fonts and styles, colors for menu bars--everything.

The idea of such an application is not far-fetched.  Color matching is quantifiable.  We know how colors appear to the human eye and that certain ranges of colors clash with or complement others.  And there are countless visually appealing layouts from which to choose.  It should be almost trivial to provide a theme selector and a couple of sliders that would vary the different colors in unison and preventing the color scheme from straying too far into ugly land.  Of course, such a program would require some way for the user to set specific colors for individual items, but most users wouldn't need it.

I could envision a slightly smarter version of that program analyzing the colors in a company logo image and automatically generating a complete color scheme.  Why not?

Absent a program to generate colors for me, I've recently found that creating visually appealing color sets is much easier using Hue, Saturation, and Brightness (HSB) than with the old standby Red, Green, Blue (RGB).  The reason is simple:  HSB is much closer to the way that the human eye sees color.  RGB is very close to the way that computer hardware represents color.  With HSB, a slight change in any one of the values results in a slight change to our perception of the value.  This is not the case with RGB, where a small change to one value can have a very large and quite mystifying visual effect on the on the color.

If you're interested, check out John Shemitz's article, Color Theory for Developers, which is a brief but reasonably thorough introduction to the topic.

I might experiment a bit with creating such a program as I've described.  The required information is out there waiting for somebody to gather together.  I wouldn't get rich with it, but it'd be a nice thing to give away.  Perhaps it would save me some eye strain.

Sunday, 03 December, 2006

Pancakes and the scientific method

I often joke that there are only two things that I do well in the kitchen, and one of them is the dishes.  I usually let people assume that the "other" thing is unmentionable, but if they ask I'll tell them that I make beer.  It's not that I can't cook so much as that I don't particularly enjoy it and therefore don't spend the time necessary to get very good at it.  I can follow a simple recipe.  I've had some failures in the kitchen but usually my food is edible, if a bit on the simple side.

I like pancakes for breakfast on the weekends, and lately I've had the urge to make them myself.  Last weekend I used Bisquik mix, but then got to thinking about what goes into the mix.  So this morning I searched out some "made from scratch" pancake batters and mixed up a batch.  With a few minor variations, the scratch pancake mix contains:

1 cup flour
1 cup milk
2 tsp. baking powder
1/2 tsp. vanilla extract (optional?)
1 egg (optional)
1/2 tsp. salt (optional)
1 tbsp sugar (optional)

This wasn't much more difficult than the Bisquik recipe that called for mix, egg, and milk, and I wonder why people go to the extra expense of buying the pre-mixed powders.  But I digress.

I used the egg and the vanilla extract and dispensed with the salt and sugar this time around.  The pancakes came out okay, although they were a little heavier than I like.  Reviewing the recipe and my ingredients, I realized that I used baking soda rather than baking powder.  That happened because some of the recipes that I'd reviewed called for soda and, because I don't bake, I've never internalized the difference.

Baking soda is bicarbonate of soda, NaHCO3.  When combined with an acidic ingredient it releases carbon dioxide which makes bubbles in the batter.  When heated, these bubbles expand and lighten the final product.  Baking powder is just baking soda with the acidic ingredient already added in powdered form.  So if you're out of baking powder, you can approximate it by using baking soda and slightly increasing the amount of an acidic ingredient.  More info on this is available at Baking Soda vs. Baking Powder (among other places, I'm sure).

What I did was add the soda but no acidic ingredient to help it form bubbles.  The result was heavy pancakes.  This lends credence to the idea that baking powder makes things rise rather than spread, and baking soda does the opposite.  There is some dispute to the validity of that statement, however, as pointed out in Baking Soda vs. Baking Powder Redux.  However, if you read that experiment in light of the entry linked above, all it really shows is that the homemade combination of baking soda, cream of tartar, and cornstartch made things rise slightly more than the pre-packaged baking soda.

My results with the straight baking soda seem to contradict those experimental results.  It makes sense, really.  Without the acidic ingredient, the baking soda seems to do nothing.  A properly designed experiment would use three batches:  a control batch that has neither baking soda nor baking powder, one that has baking soda only, and one that has baking powder.  My suspicion is that the baking soda only batch would not be significantly different from the control batch, and the baking powder pancakes would be much fluffier.  If I get really ambitious, perhaps I'll try that experiment.