A[nother] brief argument against sIFR

In my previous rant about sIFR I discussed how regressive (and ironic?) I think it is that in an attempt to further rich type use on the web, designers are utilizing a technique which (in certain circumstances) destroys the very experience they are trying to enhance. Not only did I find other sources describing the same distaste for sIFR, but since it was published — almost three months ago — it has become the second most requested article of this blog, being found mostly through Google searches. Clearly my gripes with sIFR are not an isolated case.

Previously I wrote about how, for some reason which I have yet to pin down, when pages utilizing sIFR are viewed in Google’s Chrome browser the page will load properly, then after scolling an arbitrary distance will promptly cause the Adobe Flash plugin to crash — every time. I use Chrome as my primary browser, and because of this I've become accustomed to either skipping pages where I discover sIFR, or if I'm genuinely interested in the content, I will load the page in another browser (usually Safari) which is unaffected by this condition. It’s an unfortunate situation with an unfortunate remedy because, 1. I'm a savvy web surfer, and I believe most users will not go through the trouble I do, and 2. sIFR attracts a lot of great web designers who’s pages lose all of their luster when all of their rich type gets replaced by ugly black boxes with the 'broken plugin sad-face' graphic.

Google Chrome broken plugin 'sad puzzle piece' graphic

While browsing today I came across yet another situation in which sIFR broke my user experience. I'm a huge fan of the recent tabbed-browser trend because I like to open links in the document I'm reading inside new tabs, sometimes tens at a time, then visit those pages after I'm done with the initial document. In most browsers (and all common desktop operating systems) this can be done both by right-clicking a link and selecting "open in new tab" (or similar) in the pop-up menu, or by holding the Control key (or Option/Command, depending on OS) and clicking the link — a huge time saver.

sIFR context menu showing two options: 'Follow link' and 'Open link in new window'

Mike Davidson’s blog, showing sIFR context (right-click) menu.

sIFR attempts to emulate this functionality by providing a context menu which includes options for following a link (which could more easily be accomplished by simply clicking the sIFR block), and for opening the link in a new window. I don't want to open a bunch of new windows while I'm browsing, however. It defeats the purpose of having a browser with a streamlined tabbed interface. Technically, Chrome does have an option to open new windows in tabs instead (which I think is enabled by default), which makes this somewhat of a non-issue.

My real objection, however, is that control-clicking functionality (what I use 99% of the time) is broken by sIFR. Instead it follows the link in the current tab. Again, being an astute web surfer, I'm able to recognize and adapt to this, but I doubt the 'average' user is going to have any idea why his control-click didn't work properly, possibly leading to frustration, back-button use, retries, and further frustration.

I could nitpick the little things ad nauseum (it’s what I'm good at), but my opinion remains unchanged: sIFR (however cool and amazing it is) is bad for websites.

As a side note, Jason Santa Maria (an unfortunate target of my last gripe about sIFR) dropped scaleable Inman Flash Replacement on is website in favor of Typekit.

Custom image suffixes in WordPress

Please note: The following code was written specifically for WordPress version 2.8.6. It may apply to other versions (ie: 2.8.x), but is untested on versions other than 2.8.6.

I've been spending some time recently redesigning my WordPress powered blog (again!) in an attempt to evolve it into something more attractive, mature, and accessible. It’s an ongoing process which will likely never end, but at least I can say I'm learning in the process. I'm most definitely not a WordPress expert.

One of the things I dislike about the way WordPress works is how it names thumbnails of images which have been uploaded to the Media Library. Thankfully, by default WP stores the uploaded image under its original filename, however when automatically resizing and/or cropping the image to the Large, Medium, and Thumbnail sizes, it appends a suffix to the filename. By default, the suffix is "-{width}x{height}" (eg: MyUploadedImage-75x100.jpg).

I suppose this could be useful, as it’s an easy way to figure out what the size of each image is, however WP has built-in functions which put metadata for images in variables that are much easier to use directly, rather than parsing a filename string to determine the dimensions of the image. Rather, I find it much more useful to provide a more easily "human recognizable" indication of image size.

For my purposes, I wanted images to be named "MyImage-large.jpg", "MyImage-medium.jpg", and "MyImage-thumbnail.jpg" for Large, Medium, and Thumbnail images respectively, so I set out to find a way to do so. After a long session of Googling and digging through WP support websites, I did not find any solutions, which is surprising considering the number of people that use the software.

Knowing I'd have to come up with my own solution, I went digging through the WordPress code, courtesy of Joost de Valk. After some searching, I found the image_resize function, and the $suffix variable in the /wp-includes/media.php file. $suffix is normally defined like so:

if ( !$suffix )
  $suffix = "{$dst_w}x{$dst_h}";

By modifying the second line (the statement portion of the if construct), I could easily change the suffix to whatever I wanted. Unfortunately, though, the image_resize function doesn't hold a variable for which intermediate size it is creating, so I'd have to determine that.

In my installation, I've got automatic resizing set up a custom way, so that images are first resized to a maximum width (max height being zero), and then cropped (if necessary) to a maximum height. Due to this, I always know what my maximum width will be. Generally, this is the same for most WP installations, the max width and height being set in the Settings -> Media screen. So, to figure out which suffix to append to the image, all I have to do is determine the target size of the resulting image based on the $max_w variable (which is passed as an argument to image_resize:

if ( !$suffix )
{
  switch ($max_w) {
    case (intval(get_option('large_size_w'))):
      $suffix = 'large';
      break;
    case (intval(get_option('medium_size_w'))):
      $suffix = 'medium';
      break;
    case (intval(get_option('thumbnail_size_w'))):
      $suffix = 'thumbnail';
      break;
    default:
      $suffix = 'other';
  }
}

Here I'm using a switch construct to determine which case matches $max_w. In each case, I'm testing against a different user-setting for image sizes (the ones set in the WP Media options screen), which are retrieved using get_option( … ) and converted to integers with intval( … ). When a match is made, $suffix is then set to the appropriate value, and the break statement then exits the switch. Note that I'm also providing a default case, which is a sort of fall-back, in case any of the cases don't match. In theory, this shouldn't ever be used, but is helpful for troubleshooting, should I ever see a random "MyImage-other.jpg" file appear in my uploads directory.

I now have properly resized intermediary and thumbnail sized images with definite filenames for each of my uploads. I no longer have to search the uploads directory to figure out a filename; I can simply expect that it will be one of -large, -medium, or -thumbnail.

The one unfortunate downside of this modification is that it is a hack to the core WP files, as there are no hooks into image_resize which would allow me to create a plugin to do the same, meaning that it will have to be performed after every upgrade to the WP code.

Farewell old friend, GeoCities

How must it feel to have drastically changed the world, but no one recognizes your name? One could ask unsung heroes Nikola Tesla, Rosalind Franklin, or Jack Kilby and Robert Noyce. If websites could speak, you might also ask GeoCities.

[A] time before the blogs. A time when if you wanted to write about what you had for lunch actually meant you had to learn how to code.

GeoCities may have died today without much bang, but the service that aimed to give everyone their own personal homepage on the web certainly didn't spend its life sitting around waiting to die.

Well, maybe it did.

The website that in 1999 was sold to Yahoo! for over 3.5 billion dollars in stock never really made any money. BBC News has quoted ZDnet website editor Rupert Goodwins saying, I think GeoCities was the first proof that you could have something really popular and still not make any money on the internet.

GeoCities didn't just die, though. The service survived a good 14 years, which is pretty healthy considering the pace of the Internet. In that time it gave the average Joe a chance to make his mark on the Internet, a chance to learn a little something about the way the Internet works, a chance to showcase his skills to friends and family, and a chance to make an impression on complete strangers.

In the service’s formidable years, having a presence on the web was no simple task. Generally it involved very savvy people to assemble and operate the gear to serve data, or at least a deep enough pocket book to pay somebody else to do it for you. Giving this service away, free, in exchange for some ad-based revenue was GeoCities' modus operandi — Joe got to make a page about whatever he wanted, but GeoCities got to keep the income. That was how it was supposed to work.

I was a GeoCities customer; a "Homesteader" as we were called. I don't remember a damned thing about what I put on my 'Homesteads,' but I do remember I had a few. I also remember learning all about JavaScript, and how I could use it to hide those damned invasive advertisements that GeoCities kept injecting into my code. I also remember a separate service (the name of which I can not remember) that would register and let me use a domain name of my choice, in exchange for putting their ads on my page as well — I used JavaScript to try and get rid of those ads too.

Homesteading was for the layman, and so attracted laymen. GeoCities Homestead pages were ungodly ugly — cluttered with distracting backgrounds, terrible color schemes, and far too many animated GIF images. In that respect, GeoCities pages mirrored the general design of web pages of the Internet in its relative infancy. You need not look very far for an example of this today; MySpace is the GeoCities of the 2000s.

Times have changed, people moved on, and so must GeoCities. We must remember the past, in order to learn from it though, and so I present my own little tribute to the little-big site that was. This is the GeoCities homepage as of October 22, 1996, 13 years and 4 days ago, courtesy of the Internet Archive’s Way-Back Machine:

GeoCities homepage 2009-10-22

As mentioned previously, we must remember the past in order to learn from it. Web development has changed quite drastically over the years, and GeoCities is a great example of the way things were. For prosperity, I present the complete HTML code behind the screenshot above, complete with TABLE based layout (now considered extremely faux pas in the web design world):

<!-- NoBG NoHeader NoFooter --> 
<html> 
<head> 
<BASE HREF="http://www.geocities.com.wstub.archive.org/"> 
<title>Welcome to GeoCities Home Page</title> 
<meta name="keywords" 
content="free home pages free email accounts free homepages themed communities"> 
</head> 
<body background="/pictures/new/background.gif" link="0000d0"> 
</center> 
 
<table width=630 cellspacing=4 border=0> 
<tr> 
<td valign=top width=120 align=right> 
<img src="/pictures/new/home_sidebar1.gif" alt="Free Home Pages" border=0 usemap="#sidemap"> 
<map name="sidemap"> 
<Area shape="rect" coords="0, 0, 113, 255" href="/homestead/" target="_parent"> 
</map> 
</td> 
 
<td width=480 align=left valign=top> 
<!-- --><A HREF="/cgi-bin/click_through/http://www.techweb.com/wire;techwire4.gif" target="_top"> 
 <IMG SRC="/pictures/sponsor/techwire4.gif" ALT="Click Me!"><BR> </A> 
<p> 
<a href="/"> 
<img src="/pictures/new/home_bar1.gif" border=0></a> 
<img src="/pictures/new/home_mast2.jpg" alt="Home Mast Image – See footer for links" border=0> 
<map name="mastmap"> 
<Area shape="rect" coords="0,0,142,19" href="/homestead/" target="_parent"> 
<Area shape="rect" coords="17,24,141,38" href="/BHI/inform.html" target="_parent"> 
<Area shape="rect" coords="21,45,141,58" href="/homestead/homedir.html" target="_parent"> 
<Area shape="rect" coords="18,65,141,77" href="/BHI/new.html" target="_parent"> 
<Area shape="rect" coords="17,84,141,98" href="/homestead/homeday.html" target="_parent"> 
<Area shape="rect" coords="19,103,142,117" href="/BHI/about.html" target="_parent"> 
</map> 
<img src="/pictures/new/home_buttons.gif"  usemap="#mastmap" alt="Home Buttons – 
See footer for links" border=0> 
<br> 
<img src="/pictures/new/hbar_blk.gif"> 
 
<table width=100%> 
<tr valign=top align=center> 
<td width=300> 
<b>* <a href="/homestead/" target="_parent"> 
Free Home Pages & Free Member Email</b></a> 
</td><td width=180> 
<a href="/BHI/ad_info.html" target="_parent"><b>Advertiser Information</b></a><spacer size=8 type=horizontal> 
</td></tr> 
</table> 
</center> 
 
</td></tr> 
 
<tr valign=top> 
<td> 
<p> 
<a href="/cgi-bin/click_through/http:/www.planetdirect.com/?planetd1.gif" target="_parent"> 
<img src="/pictures/planetd1.gif" border=0 vspace=6></a><br> 
<a href="/cgi-bin/click_through/http://www.lycos.com/?lycos_new.gif" target="_parent"> 
<img src="/pictures/lycos_new.gif" border=0 vspace=6></a><br> 
 
        <!-- Netcarta Button 
 
<a href="/cgi-bin/click_through/http://www.netcarta.com/prod/?netcartadl.gif" target="_parent">
<img src="/pictures/netcartadl.gif" border=0 vspace=6></a><br>
--> 
 
<a href="/cgi-bin/click_through/http://www.freeloader.com/partners/geociti.htm?freeload_dl.gif" target="_parent"> 
<img src="/pictures/freeload_dl.gif" border=0 vspace=6></a><br> 
<a href="http://store.geocities.com/cgi-bin/geostore/vsc/geostore/product_main.html?E+mystore" target="_parent"> 
<img src="/pictures/new/geostore_sm.gif" border=0 vspace=6></a><br> 
<a href="/cgi-bin/click_through/http://www.geocities.com/geoworld/geoworld.html?blacksun_icon.gif" target="_parent"> 
<img src="/pictures/new/blacksun_icon2.gif" border=0 vspace=6></a><br> 
<a href="/cgi-bin/click_through/http://www.geocities.com/dialweb/dialweb_home.html?telet_logo.gif" target="_parent"> 
<img src="/pictures/telet_logo.gif" border=0 vspace=6></a><br> 
<a href="/cgi-bin/click_through/http://www.geocities.com/BHI/yellowpages.html?proxyellow.gif" target="_parent"> 
<img src="/pictures/proxyellow.gif" border=0 vspace=6></a><br> 
 
</td> 
<td> 
        <!-- Use these colors only:  blue – - #0000d0 ;  red – - #ff0000 ; --> 
 
<table border=0 width=100% cellspacing=5> 
<tr> 
<td align=left valign=top> 
<dl> 
<dt><b>Today’s Cool Homestead </b> 
<font size=-1><a href="http://www.tc.net/talk/5906/1.ram"> 
<img src="/pictures/dialwebAU.gif" hspace=4 align=middle 
border=0 alt="Audio Update">GeoCities Daily Audio Update</a></font> 
<dt> 
<font size=4> 
<a href="/HotSprings/1837/" target="_parent">HotSprings 1837</a></font><br> 
So you hit the snooze bar ten times every morning. You might be lazy. But then again, you might have a sleep
disorder. Find out here.
<p> 
 
<dt><font size=+1 color="red"><b>GeoCities News of the Day</b> -</font> 
<font size=+1 color="#0000d0"> 10/22/96 </font> 
<p> 
<dt><table width=100% border=4 cellpadding=4> 
<tr valign=top><td> 
<a href="/geoplus/"> 
<img src="/pictures/sponsor/geoplus_newlevel.gif" border=0></a> 
<b>Introducing GeoPlus!</b>  <br> 
Use up to 10MB for your site.  Earn double GeoPoints. Post live news feeds on your
home page.  Get a bundle of free software from McAfee Associates.  And more.
<a href="/geoplus/">Start today</a> with our pre-launch subscription offer!</td></tr> 
 
</table> 
<p> 
<dt><b>Is modern society getting you down?</b> 
<dd>Come meet Grogg, the Internet’s only Neanderthal advice columnist, this week 
on the <a href="/Heartland/show.html">GeoCities Mainstage</a>.
<p> 
<!--
<dt><b>Read our latest <a href="/newsletter/" target="_parent">newsletter</a></b>
<p>
--> 
<dt> 
<b>A new <a href="/SiliconValley/conference"> 
Microsoft conferencing tool</a> debuts in GeoCities!</b> 
<dd>SiliconValley hosts a brand new product that allows GeoCitizens 
to simultaneously chat and share a whiteboard using Microsoft NetMeeting.  
<p> 
 
<!--
<dt><b>Visit the new GeoCities 
<a href="/WallStreet/" target="_parent">Financial Center</a> in WallStreet</b>
<dd>Get the latest stock quotes, charts and market news.  Powered by <b>Quote.com</b>.
<p>
<dt><b>Give your site a sound bite!</b>
<dd>Greet visitors to your home page with an audio message in your voice.  
<a href="/dialweb/dialweb_home.html" target="_parent"> Try it for 30 days</a> 
<b><font color="red"> FREE</font></b>.  Brought to you by GeoCities and TELET Communications.
<p>
<dt><b> <a href="http://store.geocities.com" target="_parent">GeoStore</a> Grand Opening!</b>
<dd>Shop the GeoCities <a href="http://store.geocities.com" target="_parent">GeoStore</a>. 
Choose from the brand new line of Official GeoCities merchandise and make your homestead a showcase! 
Don't miss our <i>Grand Opening Specials.</I>
<p>
<dt><b>New <a href="/cgi-bin/bb/message/1?detail=description" target="_parent">Help Forum</a> for home page questions</b>
<dd>Stop by the new <a href="/cgi-bin/bb/message/1?detail=description" target="_parent">GeoCities Help Center</a> 
for quick answers to all your GeoCities questions.  Don't forget to visit the new 
<a href="/help/help.html" target="_parent">member help page</a> for a complete index to online help.
<p>
--> 
<dt><b>Float through <a href="/geoworld/geoworld.html">GeoWorld</a> with the new Black 
Sun Netscape Plug-in</b> 
<dd><a href="/geoworld/geoworld.html">Download</a> the plug-in and visit GeoWorld today. 
<p> 
<dt><b>Still haven't signed up for <a href="/georewards">GeoRewards</a>?</b> 
<dd>Then you're missing out on a chance to win some great prizes. We've just
announced September’s <a href="/georewards/winner.html">winners</a>, and
October’s prize is a great package from Quote.com.
<p> 
<!--
<dt><b>Want to draw more visitors to your site?</b>
<dd>GeoCities is pleased to announce a new addition to our family of banner exchange programs. 
<A href="http://geocities.linkexchange.com/geojoin/" target="_parent">Internet Link Exchange</a> 
joins our own <a href="/georewards/">GeoRewards</a> program as a new way to promote your site. 
<P>
--> 
 
<dt><b>GeoCities Job Listing </b> 
<p> 
<dd><a href="/BHI/joblist005.html">Advertising Traffic Manager wanted</a> 
 
        <!-- Live Help Chat Announcement
 
<dt><b>Do you need some personalized help with your home page?</b>
<dd>Join Mike in the <a href="/help/help.html" target="_parent">HelpChat Room</a> each weekday!
<p>
--> 
 
        <!-- Forms Announcement
 
<dd>GeoCities now supports <a href="/homestead/homeans.html#form" target="_parent">Forms</a>.
Read how to add them to your page, and then create surveys, feedback forms, or any 
other type that you'd like.  We also have two 
<a href="/homestead/homeans.html#form" target="_parent">samples</a> for you to view, and 
help you design your own. 
<p>
<dd>Check out the new GeoCities <a href="/BHI/proxmap.html" target="_parent">Your Town</a> 
viewer for the location and listing of every business in the country.  Feel free to add 
this technology to your GeoCities <a href="/BHI/freehp.html" target="_parent">home page</a>.
<p>
--> 
 
<p> 
</dl> 
</td> 
</tr> 
</table> 
</td></tr> 
<tr><td></td> 
<td> 
<hr> 
<center> 
<font size=-1> 
<a href="/homestead/homedir.html" target="_parent">[Neighborhoods]</a> 
<a href="/BHI/inform.html" target="_parent">[Information]</a> 
<a href="/BHI/new.html" target="_parent">[What's New?]</a> 
<a href="/homestead/homeday.html" target="_parent">[What's Cool?]</a> 
<a href="/Utilities/utilities.html" target="_parent">[Utilities]</a> 
<a href="/help/help.html" target="_parent">[Help]</a> 
<br> 
© 1995,1996 <A HREF="/BHI/about.html" target="_parent"> GeoCities.</A> 
<A HREF=/BHI/rights.html>All rights reserved</A> 
</font></center> 
</td></tr> 
</table> 
</noframes> 

</html>

Millions of people have used GeoCities to set up a presence on the web, and of those surely at least many tens (or hundreds) of thousands have later become further involved in development on the web. If GeoCities hadn't made it so easy to set up their first online presence, I'd wager that far fewer people would have gone into a web-related career or pursued web development as an interest. I don't think it’s too far gone to say that a handful of former-GeoCities Homesteaders have perhaps created one or more of the popular websites we use on the Internet today. Without GeoCities to lay the groundwork, the web might be a drastically different place than it is right now.

Farewell old friend.

Nesting rules in CSS style sheets

I seem to have a more and more things to complain about CSS lately. In my quest to create overly verbose style sheets, I can't help but to dream up better ways of formatting CSS rules.

CSS rules seem to be modeled after some common programming syntaxes, specifically that of C-influenced languages. These programming languages use 'braces' ('curly brackets,' ’squiggly braces,' and what have you) to define blocks of code (among other uses). In CSS the braces wrap the declaration (or sets of property-value pairs) associated with a selector, all of which combine to make a rule. For clarification’s sake, let’s have an example:

body p:hover { color: #ccc; font-size: 1.1em; }

Example 1: Standard CSS rule with selector, and declaration

In this example "color" and "font-size" are properties, and "#ccc" and "1.1em" are values. Combining them, such as "color: #ccc;", creates a property-value pair, of which, there are two in this example and together they make up the declaration. Finally, "body p:hover" is the selector. Put all these elements together as shown makes a CSS rule.

The important bit of the previous example, relative to this writing at least, are the braces. They wrap the complete declaration, signifying the beginning and end of the list of property-value pairs. Theoretically, had the CSS specification been written alternately, we could use the end of a line to delineate the end of the pairs, like so:

body p:hover color: #ccc; font-size: 1.1em;

Example 2: Hypothetical CSS syntax without delineating braces

If you're savvy, you'll notice that by removing the braces it becomes increasingly difficult to determine where the selector ends, and where the first pair begins. This is the beauty of the brace.

In CSS the brace only has one job — to encapsulate declarations — however it has the power to do so much more. It could easily be used to enclose just about any CSS information, naturally creating a hierarchy of rule blocks. Take this theoretical CSS structure, for example:

body {
    p:hover { color: #ccc; #font-size: 1.1em; }
}

Example 3: Theoretical CSS syntax which allows rule nesting

The CSS code above is functionally identical to that in Example 1. Why, then, is this format significant? In CSS a very important, but often overlooked concept is the specificity, or in simpler terms: the weight of a selector. Entire lectures, or whole books could no doubt be assembled on just the topic of specificity alone, but in short, specificity refers to how important a selector is. The more specific a selector, the more weight it has. Selectors with more weight affect elements over selectors with less weight.

In an effort to achieve more specificity, or to cause CSS rules to carry more weight, sometimes stylesheets start to look something like this:

html body div.navigation ul>li { color: red; border: 1px solid blue; }
html body div.navigation ul>li p { color: blue; border: 1px dotted green; }
html body div.navigation ul>li a { color: green; border: 1px dashed red; }

Example 4: A very specific, yet inefficient stylesheet

Combined with principles like DRY and the never-ending quest for smaller and quicker file transfers and page renders, it’s clear why this is far from ideal. Arguably there are many ways to remedy a situation like this, and most CSS gurus will probably suggest targeting an ID or class. If you need to target elements without class names or IDs, however, you're still going to end up repeating yourself. This is where nesting shows its power.

html body div.navigation ul>li {
    color: red; border: 1px solid blue;
    p { color: blue; border: 1px dotted green; }
    a { color: green; border: 1px dashed red; }
}

Example 5: Hypothetical CSS stylesheet with nested rules

The code in example 5 is functionally identical to that of example 4, each selector with the same specificity, but by nesting child elements (p, a) of the parent selector (ul>li) inside the parent’s declaration, all repetition is eliminated.

Admittedly, this solution isn't perfect. Just like in example 2, it has become more difficult to discern between properties and nested selectors. For example; is "p" the name of a property, to be followed by a value, or the start of a selector? Clever coding coding can easily make this distinction, but it’s yet one more thing the browser must worry about. It’s not all bad, though. In comparison to the previous, example 5 is lighter (smaller file size), more organized, and more readable. Unfortunately, it’s also not backward compatible.

He who moves not forward, goes backward

Johann Wolfgang von Goethe
Is Google getting creative?

Google’s homepage has always been a model of minimalist design. Even in earlier revisions, the Google homepage included only the most basic of elements — the logo, search query input box, the search and "Feel Lucky" buttons, and perhaps a few links. Occasionally elements would come and go, but the interface retained its simplicity. Google was meant for one thing, and the interface made that clear.

Visiting google.com this morning (in Chrome, of course), I noticed something that caught my eye. It was even more beautiful than the normal, minimalist layout. What I saw was nothing. Okay, almost nothing.

Google.com before content fade-in

I was so impressed, that I had to see it again. Upon initial page load, the only thing visible was the Google logo (in this case replaced with an image of a bar-code — celebrating the anniversary of the invention of the bar-code — as is tradition for Google to mark significant dates) and the search input box. This scarcity remained for as long as I kept my mouse out of the non-chrome area of the browser. As soon as my mouse pointer entered, the remainder of the page content faded into view.

Very cool.

All of this is arguably extraneous, as the design and function of the page is left unchanged, but it didn't fail to catch my eye, nonetheless. Even more than that, I noticed something else amiss. The [abnormally] large form-submit buttons, "Google Search" and "I'm Feeling Lucky" were absent from the page. Is this indication from the web giant themselves that internet users have finally become accustomed to pressing "Enter" to submit web-forms?

Also, very cool.

Update (2009.10.07 05:55):

Wouldn't ya know it, just as quickly as my excitement grew, this functionality seems to have disappeared. I wonder what was really going on; maybe it was just me…

Update (2009.10.31 02:24):

I knew I wasn't going crazy; I observed this behavior again, this morning. Google has recently changed the logo to reflect Halloween. I wonder how long it will last this time.

Google.com before content fade-in

Update (2009.12.03 23:00):

Thanks to a post on forgetfoo, I discovered that Google officially announced this as a redesign/feature yesterday.