Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 183

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/lib/mtdb_base.php on line 36

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 258

Deprecated: Function ereg() is deprecated in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 258

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-random.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/archiveyear.zip/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/SimpleComments.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-cache.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/blackliststats.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/acronym.db/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/TinyTuring.pl.disabled/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/sql.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/technorati.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/validable.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/MTTemplate.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-linksmentioned.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/keyvalues.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/MTGrid.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/roundrobin.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/projecthoneypot.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-list.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/archiveyear.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/authors.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/SimpleComments.txt/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/ifempty.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/SimpleComments.pl.orig/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/CatEntries2.8.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-relatedentries.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/MTCloseComments.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/switch.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/acronym.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/regex.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/CheckLinks.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/beautifier.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/perlscript.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/macros.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/MTFastInclude.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/MTIncludePlus.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/category.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/plugins/mt-rssfeed.pl/php) is not within the allowed path(s): (/nfs:/tmp:/usr/local:/etc/apache2/gs-bin) in /nfs/c01/h16/mnt/4710/domains/joesapt.net/html/mt/php/mt.php on line 110
Joe's Apt.: September 2006 Archives

« August 2006 | Main | October 2006 »

22 September 2006

Google Goes To Web Standardsville, Part Two

The Google Search Appliance uses an XML-based stylesheet (an XSLT) to spin search data (XML) into web pages (HTML). This stylesheet has been revised and improved by Google countless times over the years and has its roots, of course, in Google.com.

I love that the GSA uses XSLT, but there’s one major gotcha lurking within: Content and presentation are commingled. For example, if you were to disable all style/CSS on a standard-issue Google search, advanced search, or results page, you’d find it looks mostly the same. That’s because aspects of the design are embedded within the page’s DNA. What you see truly is what you get.

Is that such a bad thing? Well … suppose you’re a Google Enterprise client with a business opportunity, but your search experience must support mobile web browsers, or you must provide a text-only UI. Perhaps you need to change things up for search printouts. Then there’s my personal favorite - you absolutely must apply that yearly corporate site design makeover. Every. Single. Year.

What are your options? You might a) do nothing and lose the opportunity, b) rework the Google XSLT, or c) write an entirely new XSLT. That goes for every Google Enterprise client in a similar quandary.

I’ve known many a company - big and small - to practice this “web redesign means rewrite pages from scratch” ritual on a yearly basis like it’s business as usual, even when using a Content Management System (which can end up managing web pages or fragments instead of actual content). So all that revised content and presentation ends up commingled yet again! It’s a vicious cycle that can waste time and money ad nauseam.

To be fair, Google is not alone when it comes to such mashups. In September 2005, Molly Holzschlag published a “comparative analysis of markup practices at several major search engines.”

… it’s curious to think that many search engines and portals, which tend to be highly trafficked, haven’t been exposed to the benefits of Web standards.

With a standards-based approach, you focus on organization first, putting “everything in its right place.” Markup (HTML) imbues content with meaning, while style (CSS) takes care of all presentation. They’re maintained separately, yet they still work famously together. It takes a lot more effort up front, but it also affords a whole lotta design (and bandwidth) leverage, not just the first time, but every time.

It’s with this in mind that I approached the folks at Google Enterprise and threw down the gauntlet: “Look, we know most search engines aren’t web standards friendly. What if I could help set an example using the Google Search Appliance?”

They took me up on the offer.

My first pass was a mobile-compatible stylesheet - the proverbial one trick pony.

That was just a warm-up. This time around, Google Enterprise customers are about to get some major exposure to web standards.

I’m very pleased to introduce the Google Search Appliance XHTML Stylesheet! <Insert Python-esque fanfare here.>

This XSLT defines a user interface for the Google Search Appliance that conforms to modern web standards including XHTML 1.0 Strict, XHTML Mobile Profile (XHTML-MP) and CSS 2.1. It generates well-formed, valid, semantically sane markup and is accessible in a variety of browsers and presentation modes.

Here’s a sampling of various pages and presentation media:

A style sampler.

One XSLT. One collection of XHTML. Any number of presentations.

Here are some notable features and benefits:

  • 12% size reduction from original XSLT
  • 28-68% reduction from original markup (using optional style library)
  • Generated XHTML is well formed, valid, and separate from presentation
  • Screen, print, and handheld media support for the most common presentation modes
  • Pages are readable and accessible even with style disabled
  • Numeric accesskey navigation of search results (optional)
  • Screen and handheld presentation consistent with existing Google design
  • Print style only displays content necessary for printing
  • Embedded search results style is minimized depending on presentation
  • Handheld-exclusive mode minimizes markup and style even further (optional)
  • Linked style library for improved bandwidth usage (optional)

It has also been road-tested and tire-kicked in a bunch of user agents including Camino, Firefox, Internet Explorer, JAWS, Lynx, Netscape, Opera, Opera Mini and Safari.

Now I realize not everyone has a Google Search Appliance at their disposal and can’t try the XSLT in real time, so I’ve included some extra features to help out. (Just like on a DVD - only different!) There are screenshots and example pages galore. To aid further study, the example markup has been pre-processed through HTML Tidy, plus there’s a CSS rosetta stone of sorts, defining each class/id and cross-referencing back to the XSLT.

All of this - topped off with an Apache open source license - means anyone so inclined can help make this revised XSLT and the resultant markup/style even better (hint-hint).

Constructive discussion and feedback are, as always, encouraged. Find a bug or have a wishlist request? Just enter a new issue over at Google Code.

Developing this second add-on has been, to put it mildly, intense - and I mean that in a good way. The number of steps and decision points in systematically taking apart a 3,200-plus line XSLT and putting it back together with bells on, hopefully better (and shorter) than one found it, is dizzying in hindsight. I’d also do it again in a heartbeat.

I expect some of the under-the-hood choices may be met with surprise - the “You did what? Are you nuts?!” variety. Believe me, there is method to the madness in every nook and cranny. If there’s sufficient interest, I would be happy to offer an in-depth look at the transformation from start to finish. (It wouldn’t be the first time.)

There’s plenty of opportunity for improvement when it comes to enterprise web site development, especially in Corporate America (where I hailed from until recently). Call it far fetched but I sincerely hope this can evolve to be a catalyst for change in how business sites are conceived and delivered.

For their generosity, advisement, and support, my thanks to the Google Enterprise team (Matt Glotzbach, Jeff Ragusa, Kristin Shevis, and Kevin Smith), Jesse Gardner, Roger Johansson, Vincent Murphy, The Web Standards Group Discussion List, and anyone who ever wrote a book or article about standards-based web development or accessibility. (You know who you are.)

Update - 26 September 2006: I can appreciate both sides of the ongoing XHTML-vs-HTML debate. (Really.) With that, I’m working toward the XSLT generating your choice of XHTML or HTML instead of just XHTML. Follow the link to monitor progress!

5 September 2006

Pip Pyle, Steve Irwin, RIP

Auugh! I just learned about Pip. At least I got to see him perform at NEARfest 2006.

While I’m on a YouTube kick (remember, it’s crack), here’s Pip performing with Hatfield and the North:

As for Steve Irwin, I obviously never saw him perform live but it’s not hard to appreciate what he accomplished either. Here’s Steve having a bit of alligator fun at his zoo in Queensland:

Watch Steve Irwin (YouTube).

4 September 2006

Plundering the Vaults

This evening, I was talking on the phone with my good friend Ray Ashley. Ray joined the high speed internet club a few days ago, and he recently discovered a form of crack known as YouTube. I was helping him cope with his newfound dependency.

As I reviewed his freshly-minted home page (which evokes the choicest markup of 1994, I kid you not) Ray asked if I had ever seen Sessions at West 54th.

“Many times. Joe Jackson’s concert was a keeper … and then there was Ben Folds Five. Now THAT was -“

“Hey man, I just finished watching the entire Ben Folds Five set on YouTube!”

<Pause. Blink.>

“It’s on YouTube?! Um, I have that on DVD. I could lend it to you if you want.”

“Actually, I should get it. Did you ever see Tori Amos?”

“I never did see her on Sessions, but there’s that one time I caught her in New York before she hit the big-time.”

“Say - you don’t suppose it’s … ?”

I tried to resist, I did, but remember - YouTube is crack. We said goodbye and I began searching for some Live Tori. In seconds I unearthed a blast from my past.

There I am at 3:04, in glasses and a sweater, applauding with what I recall as “delight and enthusiasm.”

It was a rather cold 11 February 1992 as I recall. The glasses were pre-LASIK. The sweater … hmm, I have no excuse for the sweater.

This was videotaped at The Bottom Line (RIP?) in New York City and aired several months later on “ABC In Concert.” Her Y Kant Tori Read past was fleeting (a shout out to Matt Sorum!) and her first TA solo effort “Little Earthquakes” was just beginning to raise eyebrows. That’s when I decided to go check this piano bench-straddling musician out.

Tori opened the concert with a then-new piece: “here. in my head.” … in which I also appear around 2:55 (far right - I know, why ruin the suspense - ooh, ahh).

Keep in mind, this was before the “tons of screaming Tori fans” era. It was a listening audience! I remember Ahmet Eretgun (Atlantic Records) was present, as were some of the crew for The Sugarcubes - before Bjork went solo.

Surely the last thing anyone expected was a cover of “Smells Like Teen Spirit” but, once Tori pulled that rabbit out of a hat toward the end, after the initial surprise and applause, you could - to use a tired cliche - hear a pin drop (hence the enthusiastic clapping at the end). Tori also managed to cover “Thank You” by Led Zeppelin but I can’t seem to find it online.

Anyway, if she meant to turn heads, mission accomplished.

While on line I met one Mike Yionoulis. Being fellow musicians we set about talking shop straight away, and before long we traded addresses. He sent me a demo tape, and I was rather intrigued by one song in particular. Alas, I never got around to following up with him, and I wish I had.

Perhaps I still can. Mike - If you (or someone you know) should manage to find this post, I still have that demo tape … and I hope you got “Flights Of Angels” produced, because I couldn’t stop playing “Hecuba Report.” Great stuff!

Of course, it’s 2006 and not 1992. (<tap-tap-tap> Ah-ha! It looks like he did.)