Celebrating the first American in orbit 45 years ago

Last week, NASA and the United States celebrated 45 years of Americans in orbit. On Feb. 20, 1962, an Atlas missile launched astronaut John H. Glenn Jr. into a cloudless sky on a trajectory that allowed his tiny Friendship 7 spacecraft to orbit the earth three times. The successful mission let the U.S. hold its head a little higher after the Soviets beat the United States into space yet again (i.e. Sputnik) when it launched Yuri Gagarin into orbit aboard Vostok 1 on April 12 the previous year. The flight also helped the world believe the United States might actually achieve what President Kennedy had proposed less than a year earlier: to land a man on the moon and return him safely to earth.

NASA photo of John Glenn leaving crew quarters prior to launch
John Glenn, in his pressure suit,
leaving crew quarters.
Prior to the Friendship 7 mission, the U.S. had launched two men only into short sub-orbital flights. The U.S.'s space program seemed years behind the Soviet's. During the weeks leading up to Glenn's space flight, the world witnessed the U.S. delaying the launch 10 times because of equipment problems and uncooperative weather.

NASA's web pages celebrating the 45th anniversary includes an interview with the astronaut-turned-senator, John Glenn, interviews with fellow Mercury astronauts Scott Carpenter and Walter Schirra, and a 360-degree tour of the Friendship 7 capsule, allowing you to zoom in on panel switches and indicators to know just what they say. The presentation allows you to see more capsule details than you would straining to peer inside the capsule in person at the National Air and Space Museum in Washington. (But by no means do you want to miss seeing the capsule in the museum's lobby when you visit D.C. You also can see Glenn's Mercury space suit, although make sure you read the label next to the suit to avoid leaving with the impression that John Glenn stood about 4-foot-10.)

Friendship 7 leaves the launch pad atop an Atlas-D rocket
Friendship 7 leaves the
launch pad atop an
Atlas rocket
NASA's Johnson Space Center also archives many press photos of the Friendship 7 mission. Well worth viewing if you're a space buff. A complete recording of the flight also is available from the Kennedy Space Center as a series of Real Audio files.

Listening to the audio of the entire flight is a good way to live through the event, rather than listening to edited versions of the flight. As an example, for a project I worked on 12 years ago commemorating the 25th anniversary of the Apollo 11 moon landing, I listened to some of the unedited NASA recordings. I remember thinking how slow everything occurred, from the descent of the lunar module to the hours that passed between touchdown ("Houston, Tranquility Base here, the Eagle has landed") and Neil Armstrong actually stepping out onto the surface ("That's one small step...") Whenever the moon landing is shown on television today, you'd think the landing took a couple of minutes and that the astronauts popped the hatch shortly after landing. Listening to the full recording of the 4 hour, 55 minute Friendship 7 flight gives a reminder to the many details that actually occur during a space flight.

If you'd like to hear highlights of the Friendship 7 flight, here are some edited audio files from my collection.
Launch (56 seconds)
Hitting zero G: "Zero-G and I feel fine" (55 secs.)
Firing retro rockets (21 secs.)
Main parachute deploy (40 secs.)

These recorded highlights are fun because you can hear Glenn describing the power of the retro rockets being fired while he was passing over California on his way toward his splashdown target in the Atlantic Ocean. Glenn radios, "Retros are firing. Are they ever. It feels like I'm going back toward Hawaii." You also can hear the excitement in Glenn's voice when he sees his main parachute deploy, which was probably the last major thing that could have gone wrong before splashdown. You hear Glenn's relief when he says "beautiful chute."

Photo of earth taken by astronaut John H. Glenn Jr. during his spaceflight
Photo of earth Glenn took during his space flight
Glenn had reason to be nervous during re-entry. Ground controllers had received telemetry indicating that the heat shield and landing airbag assembly (in case he needed to make a hard landing on the ground) might have prematurely detached from the capsule. If true, the only thing keeping the heat shield in place were straps attaching the retro-rocket assembly to the space craft. As a safety measure, flight controllers asked Glenn to keep the retro-rockets attached to the space capsule during re-entry. Normally, the rockets are jettisoned after firing. During re-entry, Glenn heard thumps and saw pieces of the retro rockets burning away from his craft.

You also hear in the recordings why NASA later suggested sending a poet into space in order to describe the experience (and thus gain more public support, and funding). It seems Glenn has one word for all the wonders he sees. Sunrises and sunsets? Beautiful. The site of the secondary engine falling away from his craft? Beautiful. Parachute? Beautiful. NASA was hoping the astronauts could provide more vivid descriptions to bring the experience to life.

If you start reading through some of the NASA links and want to learn more about Mercury, I recommend We Seven, a book from 1962 by the Mercury astronauts themselves, describing the program. I remember reading that book when I was about 11, getting me hooked on the excitement of science and exploration. The Wikipedia entry also is good.

Ajax Architecture with Stuart Halloway

When should you use Ajax? Whenever you want to create a rich client application with the universal reach of the Internet. Stuart Halloway, speaking Friday afternoon at this fall's Northern Virginia Software Symposium, predicts Ajax will be part of nearly all web applications within the next year. Stuart's first session of the day focused on the architectural issues involving Ajax, from technical features to selling Ajax to management. In 90 minutes he discussed:
  • the reasons to use Ajax
  • how to introduce Ajax at your company
  • the resistance you'll encounter when you do
  • the tools and libraries to use in Ajax development
  • the architectural decisions you'll need to make
  • how Ajax isn't a panacea for all applications
Stuart demonstrated Ajax in action by showing how to build several incarnations of a web form that, once you input a U.S. Zip code, the address's city and state fields fill in automatically from an asynchronous JavaScript server call. Low-tech stuff compared to Google Maps, but simple enough to demonstrate several ways to get the job done.

The interest in Ajax has been increasing over the last couple of years not because of a breakthrough in technology, Stuart said, but because of a breakthrough in how we look at using asynchronous JavaScript to make web forms more dynamic. Instead of having web user-interface developers deal with the vagaries of the different browser versions, different implementations of JavaScript, different implementations of Cascading Style Sheets, and different implementations of the web page document object model, they learned in February 2005 from
Jesse James Garrett photo
Jesse James Garrett
Jesse James Garrett to hide browser differences behind an adaptive interface provided by a library like Prototype or Dojo. Garrett coined the term Ajax in his seminal paper, "Ajax: A New Approach to Web Applications." Of course, it also helps, Stuart added, that the functionality provided by Internet Explorer and Firefox have converged over the years.

The reason to use Ajax in your web applications is to create a better experience for your users. Ajax allows your web page to communicate to the server in order to update the page "behind the user's back," making the application more responsive to the user's actions without having to reload the page.

The best way to introduce Ajax at your company, he said, is in non-core web applications. Depending on your company's culture, Stuart said, you can sell Ajax either as proven technology -- XML, HTTP requests, and JavaScript -- or by saying "Ajax is the revolution and we're all on board." When introducing Ajax, he said, stay "degradable." That is, ensure your web application still works if the user turns off JavaScript or uses a browser that doesn't support it. The fewer negative issues you create, the more the benefits will shine through and convince others to introduce Ajax into more web applications. If you want to be conservative, he said, wait until the web MVC frameworks, like JavaServer Faces, provide better support for Ajax in their page widgets.

Stuart mentioned several open source development tools and JavaScript libraries to use in your Ajax applications:
  • Firefox
    Consider the Firefox browser (with its extensions that follow) your development platform and Internet Explorer as your deployment platform, Stuart said.
  • JavaScript Shell
    a Firefox bookmarklet that allows you to dynamically run JavaScript statements against your current page in a debugging window. This tool is useful, Stuart said, "for poking around the page to figure out what's broken."
  • FireBug
    a Firefox add-on with debugging features to monitor your page's JavaScript, CSS, and HTML. One feature allows you to spy on all HTTP traffic JavaScript functions send to the server.
  • Web Developer
    a Firefox add-on toolbar that allows you to disable JavaScript, cookies, view and modify a page's CSS, view a page's generated source rather than the HTML originally loaded, and a host of other useful development tools.
  • Tamper Data
    a Firefox add-on that logs all web navigation. It not only allows you to see what requests and responses are traveling between the Ajax components and the server, but it allows you to modify them or completely stop the request and see how the application reacts.
Ajax Libraries

Stuart mentioned several Ajax libraries. Since JavaScript libraries generally don't trample on each other, he said, you can often use more than one in a web application.
  • Prototype
    A survey at an Ajaxian conference showed that more than half of the Ajax developers were using Prototype, Stuart said. Most of the rest were using Scriptaculous (next). Prototype allows you to register multiple event handlers to events (Event.observe()). You can register events outside of the HTML widget to allow you to separate concerns: your HTML page designer doesn't have to worry about coding the JavaScript events. Prototype also provides the Ajax.Request function that works as a factory to return the appropriate function that works with the user's browser version.
  • Scriptaculous
    A library built on Prototype to provide page effects (highlight, fade), drag and drop, auto-complete and other features.
  • Dojo
    This is a heavy-weight "kitchen sink" library, Stuart said, that provides almost everything you need for an Ajax application.
  • Google Web Toolkit
    This toolkit allows Java developers to build front-end components in Java. The toolkit converts the Java code to JavaScript and HTML.
  • Direct Web Remoting
    Stuart said DWR is No. 3 in popularity, behind Prototype and Scriptaculous. It's Java RMI like. You write JavaScript stubs that run in the browser and make RMI calls to the server. It assumes you have Java running on the server side.
Introducing Ajax into an application raises two key architectural questions, Stuart said. These are the questions to think about early and thoroughly because changing the answers later could undermine previous development work.
  1. What to send on the wire?
    When JavaScript calls to the server for updated information, does the server send back HTML, XML, JavaScript, or JSON? HTML is view centric, JavaScript is code-centric, and XML and JSON are model-centric. (See also this blog for a discussion.)

    Stuart said he believes 95% of all Ajax traffic soon will be HTML. It's developer-efficient (no parsing and XML creation) and the snippet of HTML can simply be rendered on the page. JSON will dominate applications that focus on data exchange because it is easier to parse than XML. XML will be the loser. Sending back JavaScript allows you to send back code that the browser would evaluate.

  2. What library to use?
    Choose a library that supports the features you need. The library should hide the browser differences in the XMLHttpRequest. Prototype does this and builds upon JavaScript to make it more like a regular programming language.

    Use Scriptaculous if you need to adds page effects and you'd like to use its widgets.

    Dojo is the library beloved by Java programmers, Stuart said. It's bigger than all the other libraries, but it does more. Its API provides fixes for Back-button issues, client-side data storage, and other features.

    Stuart dislikes Google Web Toolkit. "I think it's architecturally wrong," he said, but I think I zoned out when he described the reasons for his dislike.

Although Ajax is useful, it won't be a panacea for all applications, Stuart said. Learning to design with Ajax correctly will involve some of the same growing pains the development community learned in creating n-tier applications. Stuart likened the future growing pains in the Ajax world to the pains Java programmers suffered in implementing n-tier web applications using EJB. "We're going to make a ton of mistakes" implementing Ajax applications, he said. "Asynchronous is hard. Asynchronous is as hard as threads, except you don't have an API in front of you reminding you how hard it is."

Filling in my No Fluff dance card

Today begins the fall session of the Northern Virginia Software Symposium put on by No Fluff Just Stuff (Jay Zimmerman and crew). That means I have to decide which one of the six concurrent sessions to attend in each time slot. That means I have to decide which of five sessions to miss during each time period.

Today has three time slots in the afternoon, followed by an after-dinner keynote by pragprog co-founder Andy Hunt. For the 1:15 p.m. session, I'd like to attend Stuart Halloway's "Ajax Architecture" session, Brian Goetz's "Java Performance Myths" session, and Venkat Subramaniam's "Open Source Tools for Agile Development" session. I'm not a web UI designer, but knowing the browser's asynchronous JavaScript abilities would help on a current project. We want to add dynamic page updates to an existing web application. The design of the server code I'm working on will be affected by what services the client needs. Brian Goetz's session promises to show how common Java idioms we use, thinking it helps the Java compiler optimize our code, actually make it harder for the JIT compiler to figure out how to optimize. Venkat Subramaniam will recommend open source tools he finds most useful to develop code and improve its quality. The open source world changes so fast, it would be good to get these tips from the good doctor.

See how hard Jay makes it to decide which session to attend? I'm leaning toward Stuart's Ajax session just because it's the area I know the least about. I'd like to know what cool features Ajax libraries Prototype and Scriptaculous provide.

Later in the afternoon, Venkat has sessions on test-driven design for Spring applications and working with rules engines. But these sessions conflict with sessions on how Acegi supports JavaScript for better user authentication interaction, and a session on Jini (the technology whose coolness keeps it alive despite being almost wholly ignored for years). Decisions, decisions.

I plan to blog more this weekend on the sessions I attend and what I learn.

java.util.concurrent backport to Java 1.4

When I blogged in September about using the Java threading classes introduced in Java 1.5, I didn't know a similar library was available in Java 1.4. It is, courtesy of the backport-util-concurrent package maintained by Dawid Kurzyniec at Emory University.

The package provides versions of most of the java.util.concurrent classes, but converted to Java 1.4. The key feature missing is the ability to use generics. For example, using Java 1.4, you can't define a Callable anonymous inner class using syntax like:
void showSearch(final String target) throws InterruptedException {
Future<String> future = executor.submit(new Callable<String>() {
public String call() { return searcher.search(target); }
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
to specify the call method returns a string, as in the above code excerpted from the Java 1.5 API for the Future interface. And, of course, you can't define a Future of type string that would be returned from the ExecutorService's submit method, as shown above. Without generics, you're confined to returning Objects and casting them to the expected type. You don't get the compile-time validity checking provided by Java 1.5 generics, but most Java developers are used to using narrowing casts like this.

This backport of the concurrent package came in handy this week when I wanted to use its features on a project that had to run in Java 1.4. It seems a lot of code from Java 1.5 has been backported to earlier Java versions, like Java annotations. Thank you, Dawid and Emory, and thank you for releasing the code into the public domain so the code may be "may be freely reproduced, distributed, transmitted, used, modified, built upon, or otherwise exploited by anyone for any purpose, commercial or non-commercial."

UPDATE 7 hours later:

I should mention that some of the code for the backport, as well as much of Java 1.5's java.util.concurrent package, came from Doug Lea's util.concurrent package. I woke up this morning and realized I had neglected to mention where the initial ideas for the Java 1.5 concurrency classes came from. Professor Lea, from the State University of New York at Oswego, created most of the ideas and code behind the improved multi-threading techniques that made it into Java 1.5. He also is a co-author of Java Concurrency in Practice, which Stuart Halloway recommended in my September 27 blog as being a great source to learn the effective use of the Java 1.5 concurrency package (and thus the backported version).

The benefit of favoring the Emory University backport over Doug Lea's original code is that code using the backport allows a smooth transition to Java 1.5. The transition mostly would involve renaming your imports. The backport's class names and APIs are identical to what's in Java 1.5. Doug Lea favors using the Emory backport over his older util.concurrent package.

Legitimate businesses selling out to spammers

Like most tech geeks, I own multiple domain names and dozens of email addresses. I have configured many of my email servers with "catch-all" or wild-card forwards that allow mail sent to any address at a particular domain to be delivered to a particular inbox. One of my uses for this setup is to allow me to use unique email addresses when I give out my email address to online businesses. Doing so allows me to filter incoming email, immediately gauge the priority of email, and track if my email addresses leak beyond the online company with which I originally shared it.

With two notable exceptions, email addresses I have given out to companies end up being used by them only for legitimate business communications. The two recent exceptions: Addison-Wesley and Lands' End. Spam is making email less and less useful each passing month as hundreds or even thousands of spam messages flood my inboxes daily. I always thought of the people who sell or trade email addresses for spam use were faceless individuals operating from their living rooms, not major companies like Addison-Wesley and Lands' End or their affiliates.

With Addison-Wesley, I signed up for an email list several years ago for announcements of new technology titles. For a while, I received emails from Addison-Wesley every month or so announcing its latest technology books. The mailing list was low-volume and useful.

I no longer receive announcements of new books from Addison-Wesley. But the email address I gave them is now used by spammers several times a day to send me unsolicited commercial email messages. Here are some headers to a spam email I received tonight advertising "Cheap Vl x AG x RA"
Return-Path: <olmedaa@iskiv.net>
Received: from iskiv.net (lns-bzn-22-82-249-89-146.adsl.proxad.net [])
by [my email server] with SMTP id k9T7mmeJ029902
for <awbookalert@[my domain]>; Sun, 29 Oct 2006 07:48:54 GMT
Reply-To: "Romano Wischmeier" 
From: "Romano Wischmeier" 
To: awbookalert@[my domain]
Subject: Re: 693
Now, with an email address like "awbookalert," you figure no spammer stumbled onto this address by guessing. More likely, the spammer purchased the address from someone who stole it from Addison-Wesley's computers, or Addison-Wesley gave it away or sold my email address for use by spammers. I consider it unlikely this email address was stolen from my computers because I use several "alias" email addresses and have had a problem only with this one I gave to Addison-Wesley.

I checked Addison-Wesley's privacy policy to see if they protect email addresses as private information. You know what? They don't. Addison-Wesley treats as private "your name, address, phone number, date of birth, job, personal interests, and credit card information," but your email address is not covered by Addison-Wesley's privacy policy. Addison-Wesley, and parent company Pearson Education, should be ashamed to have a privacy policy like this where email addresses are not held in confidence.

Another company contributing to spam is Lands' End. My wife ordered clothing a few weeks ago online from Lands' End, again using an email address unique to this one transaction. Lands' End sent two emails to this address: an order confirmation and a shipping notice.

Last week, though, she received an email sent to this unique address from a company advertising self-confidence books. Her thought was Lands' End either suffered a computer security breach, and the thieves sold her email address to spammers, or this publishing company is affiliated with Lands' End. Lands' End's privacy policy acknowledges the company shares private information with business partners. My wife called Lands' End to find out how this publishing company obtained her email address.

The Lands' End customer-service representative my wife spoke with assured her the publishing company is not affiliated with Lands' End, and that Lands' End experienced no data security breach. The spam must have originated, she said, by someone breaking into her ISP's email server and stealing that address.

Yeah. Uh huh. Someone broke into an email server and stole a solitary email address. These thieves overlooked the dozens of other email aliases on her server and focused solely on this one email address she shared with Lands' End. (Her email server is different from mine, by the way, eliminating the possibility that a single server was the source for both these email addresses picked up by the spammers.)

If Lands' End's computers were not broken into, it seems likely one of its business partners is using email addresses in ways not sanctioned (or at least acknowledged) by Lands' End. A possible partner could be Coremetrics, a company that provides website analytics for Lands' End. Lands' End says they share website information with Coremetrics, but the "data that they collect for us [cannot be used] for any other purpose." Interestingly, the self-help publisher who sent my wife the spam also is a Coremetrics customer.

I don't want to cast aspersions on Coremetrics. They have many online retail customers. What I want to ask Lands' End is which is more likely:
  • Hackers broke into two of our ISP's email servers and stole one email address from each?
  • One of your business partners is violating the confidentiality of your customer information?
  • A hacker broke into your computer system and stole information?
I would think the likelihood of the latter two scenarios to be much higher, and a much higher concern to Lands' End.

If companies don't want to suffer black eyes when the public discovers how casually or carelessly they treat their customers' information, they need to start treating data privacy more seriously. The alternative, they will find, is that Congress will receive enough pressure from Americans so fed up with spam and identify theft that they will tighten data-privacy laws to make it a criminal offense when what should be private data leaks from their computer systems. When the first CEO goes to jail for contributing to spam or identity theft because the company treated customer data carelessly, perhaps that's when we'll see companies treat customer data with more seriousness and care.

U.S. Air Force Memorial Weekend

Air Force Memorial photo/Washington Post
photo by Michel Du Cille/The Washington Post
U.S. Air Force Memorial
The United States Air Force finally has a memorial in the nation's capital. The memorial was dedicated Saturday in a ceremony attended by President Bush and other dignitaries. The memorial honors those who have served and those serving in the Air Force. Its triple stainless steel spires soar to varying heights up to 270 feet in a "bomb burst" flaring-out pattern, "truly representative of flight and the flying spirit of the Air Force."

The memorial sits on a small hill between Arlington Cemetery and the Pentagon, and is visible from I-395 on the left as you approach Washington from Virginia. An approximate location is marked by this Google map. (If you view the map, the memorial is actually where Columbia Pike bends north toward Southgate Road.)

The weekend ceremonies were by invitation only, although the public was invited to view Saturday's ceremony remotely from big-screen TVs set up in the Pentagon South parking lot. The Washington Post has a video of the event.

Rather than watch from the parking lot, my wife and I viewed the airplane flyovers accompanying the event from the Mount Vernon Trail next to National Airport. Yes, they had to temporarily shutdown commercial air traffic for the event, as vintage and modern war planes flew overhead, capped off by a flyby from the Air Force's Thunderbirds. (Photos below.)
F16 missing man format photo
F-16s in 'missing man' formation

Ceremonies continued this morning with a memorial service. The service included a wreath-laying ceremony and a flyover (right) from four Air Force F-16s in a missing-man formation.

The memorial opens to the public on either Monday or Tuesday. (The Washington Post says Tuesday. The A.F. Memorial Foundation says Monday.)

Here are some of the other photos we took of the events.

Bicyclists on the Mount Vernon Trail look toward the memorial in the distance.

A Consolidated B-24 Liberator makes a flyby. Apparently, this is the only restored Liberator still flying.

A B-2 Spirit bomber made an approach from the east. My wife caught this picture just as it flew into the sun.

The B-2 banked right as it flew over the memorial. This is the first time I've seen a stealth bomber in flight. You can really see how the plane's thin profile helps foil radar echoes.

This photo from this morning shows the F-16 'missing man' formation as it flew over our apartment.

Updated at 10:50 p.m.: I earlier labeled the B-2 bomber as an F-117A. I'm pretty sure it's a B-2, thanks to Chris Nokleberg's comment.

Grady Booch: SOA sold as snake oil

If you have sat through the many sales pitches from companies selling SOA products, which you learn is defined as whatever their products used to be but now with a new, improved web services interface and UDDI registry, you'll probably enjoy reading Grady Booch's blog entry on Thursday.
Groody Booch mugshot
Grady Booch
In it, Grady laments how service-oriented architecture is being sold like snake-oil: the miracle elixir to cure all your enterprise ills. That part isn't breaking news. But it is nice to hear this message repeated from such an architectural luminary, and whose employer is big on SOA.

The best part of his snake-oil blog is a list of questions those who hype SOA fail to explore. These are the questions to put in front of your CTO when he or she is being wooed, wined and taken out to golf by the SOA salespeople. Here's a selection:
  • What distinguishes a good service from a bad one?
  • What should the granularity of a service be?
  • When should I offer up a stateless service versus a stateful one?
  • How do I express stateful service semantics, and how do I ensure their misuse doesn't corrupt my system?
  • How do I express the semantics of a society of services when only the most trivial services work in isolation?
  • How do I expose some services to some clients and hide them from others?
Grady points out he's a strong supporter of SOA. "However," he writes, "I tremble at the realization that the fundamental technical benefits as well as the costs and trade-offs of SOA are sometimes lost in the guise of Snake Oil-oriented Architecture."

What Google Did Right: Browser Sync

On Wednesday, I ragged on Google for four of its good-to-terrible services that all could be better. Today I want to play fair and congratulate Google on one service that is so handy and useful, it has saved me time nearly every day: Google Browser Sync.

Google Browser Sync Firefox toolbar button
Browser Sync's Firefox toolbar button
This handy Firefox plugin stores my browser bookmarks on a Google server, and then synchronizes the bookmarks to all of the four-to-six computers I use each week. If I save a bookmark while surfing at home, it's there on my work computer the next morning. I don't have to visit any special website or store my bookmarks on a "social networking" site like with the del.icio.us Firefox extension. I let Firefox manage my bookmarks, and let Google Browser Sync synchronize them between all my computers.

I have to say, I really like this service from Google. I don't have to do anything but occasionally re-confirm my Google password when Firefox launches. It just works.

Browser Sync also can synchronize Firefox's browser history, persistent cookies, and saved passwords. I don't use these services out of my general caution for leaking passwords and other sensitive information if Google's servers are ever hacked, but I can see perhaps one day using the cookie sync out of convenience.

Thank you, Google. With Browser Sync, you did good.

Why isn’t Google better?

After using Google search for many years and being impressed with its lightening speed, using Google Maps and being impressed with its spiffy Ajax features, and using Google Earth and being amazed at how easy it was to zoom around neighborhoods and find features like subway stations, I find myself more and more disappointed by Google's more recent services. Is googleplacency setting in at the Googleplex?

Here is why Google is more and more failing to impress me. First, as a shopping search engine, Froogle is next to useless. Second, as a calendar service, Google Calendar lacks a critical and obvious feature. Third, as an email reader, Gmail is no longer impressive (and it's still in beta after how many years?). Fourth, as a news/blog reader, Google Reader is pretty ho-hum compared with at least one competitor. With these service shortcomings I have to ask, why isn't Google -- with its billions of dollars of cash, its 8,000 top-notch employees cherry-picked from competitors, and with its cachet as one of the coolest places on the planet to work -- why isn't Google better at what it does?

My first, albeit minor disappointment with Google came years ago with the launch of Froogle. When I first saw Froogle, I thought, "Cool, with Google's search technology and the way they vacuum up and index most of the web, this will surely outperform all other shopping sites." I was wrong then, and every time I've used Froogle since, I continue to be wrong. And disappointed.

Why? Froogle, by default, sorts search returns by relevance. The result is the product I'm looking for tends to be at the top of the list. That's good. The problem is the cheapest relevant product isn't at the top of the list. That's what I'm using Froogle for in the first place. Here's part of a screen shot showing a search for M.S. OneNote 2003, with prices in an apparent random order.

Froogle sort by relevance screen shot
Froogle search for Microsoft OneNote 2003 sorted by relevance

With Froogle, I have to manually find the lowest price among pages of "relevant" results. Why can't Froogle automatically sort the "relevant" product results by price? If I want to sort by price, Froogle offers that as an option: select "Sort by price: low to high" from the drop-down box.

Froogle sort by price screen shot
Froogle search sorted by price low-to-high

Ah, and as you can see in the above screen shot, that's when all the irrelevant items show up at the top of the list, usually pages and pages and pages of related products, such as books and accessories. The problem frequently arises with software. The sort-by-relevance search won't easily find me the lowest price, and the sort-by-price search finds me the books written about the software, the various "OEM disk-only" solutions that seem a bit dodgy, and various other product near-misses. I was amazed when Search Engine Watch awarded Froogle Best US Shopping Search Engine in 2005.

Disappointed by Froogle, I've turned to BizRate, NexTag, and PriceGrabber as providing more useful price comparisons. I don't tend to like Yahoo! Shopping or msn Shopping because of their limited number of online stores they apparently track. DealTime and Shopping.com seem more hit-and-miss when searching for products. For instance, when searching for the best price for an Olympus voice recorder, model VN-2100PC, DealTime and Shopping.com were convinced I was shopping for RAM for my computer, or plumbing supplies. The other sites (including Froogle, to its credit) had no problem homing right in on the Olympus product.

But one disappointment wouldn't take the shiny gleam off of Google. No. They've done so many things right with other cool applications. But just in the past few months, I've found Froogle isn't the only place Google falls down. Google Calendar, which I began using a few months ago, Gmail, which I've been using off and on for more than a year, and Google Reader, which I started using this month, all lack in usability or expected features, especially when compared to competing web services.

Google Calendar probably is the biggest letdown of these three productivity applications. Google developers seem to have spent enormous effort building Calendar and the way-cool Calendar Data API to allow developers to access Google calendars remotely from other applications. But sorely missing is the simple, expected feature of being able to set how you are reminded of each approaching calendar event. Google Calendar does provide three notification options: a pop-up dialog box, an email message, or a pager/SMS message. However, the notification method you choose for your event reminder type is global for all events.

For instance, say I want to be notified of important events (flight departs in 2 hrs) by receiving a text message on my phone. Google can do. But once I configure Google Calendar to send one reminder to my phone, all reminders now go to the phone (dry cleaning ready for pick up). By allowing only one notification type for all events, I'm either frequently interrupted by my phone with low-priority reminders, or I have to accept high-priority reminders getting emailed or appearing only when I'm online.

How could the developers at Google leave out this ability to change notification type based on the event's importance? Come on, Google! Yahoo Calendar has this ability! You thought creating a Data API was more important than creating a usable calendar service in the first place? You're not going to win me over to your calendar as a developer unless you win me over to your calendar as a user! Or at least a calendar service I can recommend.

After being pushed into the arms of Yahoo for its online calendar, that's when I discovered Yahoo's updated Mail service. I remember trying Yahoo mail many years ago and abandoning it as the usual clunky web mail. But the Ajax-enabled beta email service is nice. It uses separate tabs to open messages. You can have several messages open at once in different tabs, rather than opening each message into the current window, as Google does. From the Yahoo Inbox, you can hit Enter to open the current email in a new tab, read the email, hit Esc to close the tab and return to the Inbox, then hit Del to delete it. Or, if you want to save the message, you can actually move it to a folder and drag messages into the folder for organization. Gmail instead insists on enforcing the Web 2.0 world view of tagging to organize email. I actually like being able to tag emails with several labels, but tagging is different than all other email programs I've used. For me, 99% of my mail only needs one tag, so Yahoo's more-familiar folder system works fine, and its user interface is superior. Just like Gmail, Yahoo mail supports other keyboard shortcuts, like hitting r to reply to the selected message. (However, Yahoo went with keyboard shortcuts Ctrl-. and Ctrl-, for up-down navigation rather than the more usual k and j that have been used in the Unix world for decades and that Google adopted.)

Yahoo Mail also integrates with Yahoo Calendar. When viewing email, the bottom of the window displays upcoming events from your Yahoo Calendar along a horizontal scroll pane. That's a nice feature I don't see in Gmail.

With Yahoo Mail besting Google's Gmail in functionality and usability, I'll turn my attention to one of Google's newer web services, its recently updated news reader, Google Reader. Google Reader was the first web-based news reader I tried. Previously, I had used Thunderbird's built-in news reader, but I wanted a web-based reader so I could read the same blogs and news sites from any of the half-dozen computers I use during a given week.

I have no real complaints about Google Reader's functionality. The problem is, it's just not impressive.

Google Reader screen shot
Google Reader screen shot after selecting Cedric Beust's feed

Google Reader does a good job of letting you see what's new in your subscribed feeds, and lets you click feeds in order to scroll through its entries to read. I like the fact that it has a full ("Expanded") view and a "List" view to read just the titles of the entries. My chief dissatisfaction with Google Reader is it just isn't cool and full of extra features that make using it a nice experience. As compared to? Well, after I started using Reader, I noticed almost as many visitors to my blog were coming from Netvibes as were coming from Google Reader. So I checked it out and started playing with it. What I discovered was a news reader with cool, even fun, features that make reading news and blogs faster and more efficient for me.

Netvibes organizes feeds/blogs into portlets, which can be re-arranged on screen, resized and minimized. (See the screen shots, below.) Here are some of the cool things Netvibes can do:
  • Organize your feeds into tabs. (Google Reader has folders you can open/close. Very similar)

  • Mouse over a feed's entry to read the beginning. (Google can't do this.)

    Netvibes showing popup quick-read of an entry
    Netvibes mouse-over behavior showing popup quick-read of an entry

  • Drag and drop feeds to rearrange them in the window (Google doesn't let you change order)

    Netvibes showing drag-and-drop
    Netvibes lets you drag a feed's box to re-order them

  • Read a feed's full entry, with an index of all entries in a left-hand column.

    Netvibes showing reading one entry
    Clicking on an entry opens the item for reading

    The above-pictured reader window acts like an Ajaxian widget. You can see an X in the upper right corner to close the window and return to the main feed window.

  • Open/close the items list for each feed.
    You can select how many item headlines for each feed you want to see in its portlet window when the feed's portlet folder is opened. (You see the title for all entries when you open a single entry, as mentioned and pictured above.)

  • Refresh an individual feed to see if it has been updated (Google doesn't allow this).

  • Drag and drop feeds onto different tabs as well as to re-order them on the page. (Google has no drag-drop of feeds.)

  • Quickly mark all items in a feed as already read by clicking on the item count. (Google Reader provides a "Mark all as read" link that operates slowly because it seems to reload the page.)
Until I saw the Netvibes referrers in my logs, I had never heard of it. Then, two days after first starting to use it, I picked up September's Business 2.0 magazine and saw Netvibes being mentioned as a "disrupter" of leading portal websites like Yahoo.

So, these are four Google's web applications that leave me wanting, and leave competitor services more impressive. My initial wow-I-didn't-know-you-could-do-that-in-a-web-page feeling I got years ago with Google Maps has been replaced by me wondering what's Google up to that it would allow its applications to become second-rate. I have two theories.

My first theory is the Google's complacency is a symptom of corporate maturity. Google doesn't have to be cool any more. It needs to answer to shareholders. Perhaps Google is directing its focus and energy to today's moneymakers: AdWords and AdSense.

My second theory is that Google is leaving services like Froogle, Calendar, Gmail and Reader to languish for now because it has bigger fish to fry, new services that Google will roll-out that will allow it to suck even more of the profit from its chief competitors -- Yahoo and Microsoft -- and place it into the hands of Google and its shareholders.

I don't follow the business intricacies at Google to pretend to know the details. But Google's recent You Tube purchase makes it clear Google wants to be a we-have-it-all portal service to make Yahoo less relevant, with Google reigning supreme in the search and web advertising business. And we all know Google has been working on its web-based version of office productivity applications to replace (or at least augment) Microsoft's Word and Excel (with Docs & Spreadsheets), Outlook (Gmail, Calendar), and the remaining Microsoft Office applications. Google's Apps for Your Domain is the first step in that direction until it adds the remaining Office applications to that suite.

So, instead of focusing on gee-whiz applications, I'm guessing most of Google's development and marketing resources are working on the web versions of Word, Excel, and probably an improved version of Gmail to replace Outlook for some users.

In the meantime, Google has failed at one of its 10 corporate philosophies: "Always deliver more than expected." Google, I expect more from you with Calendar, Gmail and Reader. Your competitors are doing more. But perhaps Google, when its web-based Office-killer applications take hold among businesses in the next year or two, will reprise a line from Pirates of Silicon Valley. I can see the day when Bill Gates or Yahoo's Jerry Yang confront Google CEO Eric Schmidt and tell him, "We're better than you are! We have better stuff." Schmidt will turn away and say over his shoulder, "You don't get it. That doesn't matter."

Anonymous fire in D.C. wafts smoke over Capitol

Here's something you don't see everyday: A black cloud of smoke wafting toward the U.S. Capitol.

Fire Over DC 2
Fire in Washington, D.C. Sunday about 1:50 p.m.

It was unusual enough for my wife to snap a couple of pictures of the fire from our apartment across the Potomac River in Arlington. We checked the Washington Post, Washington Times, and the websites for the local TV stations later Sunday and today. Not a peep.

Fire Over DC 1
Granted, the fire was a couple of miles north of the Capitol building, and no one apparently was hurt from the fire (because that would have made the news, right?) but the fire must have affected some residents of northwest D.C., even for the annoyance of the smoke. That's why we were a little surprised not to read anything about it in the news today. Hmmm. And to think, Sunday began this year's National Fire Prevention Week.