Archive for the ‘Google’ Category

iGoogle Widget Fail

Thursday, August 6th, 2009

Maybe it’s because I’m a guy, but I am a big fan of the Fail Blog. The never-ending supply of stupidity and low-brow humor just makes me chuckle.

Recently I have noticed that my iGoogle weather widget has decided to display the wrong temperature at least once a day. I don’t know why. . . but I do know that if Fox Lake is at -10 degress in August then the next ice age must have started.

iGoogle Weather Widget Fail

Ironically, the Doppler Radar widget directly above it says Fox Lake is mostly sunny and 78 degrees.

Google: your engineers have failed.

Doppelgangers

Tuesday, July 28th, 2009

Have you ever tried to Google yourself?

As the Internet becomes larger and as we spend more of our time online, our virtual reputations become more and more important to maintain.  While personal privacy is one of the biggest concerns to have, our online reputations are constantly being researched by our family, friends, employers and (probably) Big Brother.

All of those things you said on Facebook, Twitter, MySpace, your blog or any message board have an enormous impact on what people think about you. It seems like I hear a new story every week about some John Doe who got fired because he had an inappropriate picture or comment posted online. Long story short, this isn’t something new. . . 

. . . but I’ve stumbled into something very interesting. I have not one, but several doppelgangers invading my search results.

DoppelgangerLet me take a step backwards for a moment. Wikipedia defines a doppelganger as some one’s double. With a variety of historical and fictional doppelgangers to use as examples, my personal favorite is the character from the Spiderman comics. In case you couldn’t figure it out, he’s the evil clone of Spiderman and does nothing positive for Peter Parker’s secret identity.

Searching for my name (Arthur Kay) on any search engine is  likely to give you a pretty large set of results (I was surprised by that!). Google, for example, finds roughly 1.5 million results. Although these people may not look like me, we do share the same name – but (like Spiderman and his Doppelganger) we do not have much else in common.

For starters, there are several quasi-famous people who share my name. Kay Arthur (the inversion of my first/last names) is an internationally known Bible teacher who has written a ton of books. I chuckle a little bit at the thought of sharing a name with this lady, mainly because I’m not the most religious person. I’m also not a woman. Nevertheless, search results for her dominate any search remotely related to my name.

Next on the list is a composer named Arthur Kay. He died about 40 years ago, and I wish I had known more about him before today. This search result is a bit interesting, as I was a Music major in college and have composed a few songs myself (available here). I’d be curious to know if I have any blood relation to this guy – but that’s something I’ll figure out another day.

Then there’s a band called Arthur Kay and the Originals located in the United Kingdom. I’m not really into Ska music, and I’m pretty sure I don’t have any family in the UK. I would pretend I’m his son if it would get me a nice inheritance, but I’m willing to bet he isn’t worth enough money for that ruse to be worth while.

There’s some guy in Houston, Texas too. I know absolutely nothing about him, because no other search results appear about him either. I could ask him to be my friend on Facebook. . . but that might just be werid. Then again, it would be kinda funny.

The bottom line is that there’s next to nothing about me, the real Arthur Kay. The lesson I’ve learned today is that I need to optimize some of my online profiles, my website and this blog to get some more credit for my identity. Lucky for me none of the search results for my name return shady individuals!

Parsing XML: jQuery vs. ExtJS

Thursday, June 18th, 2009

If you follow my blog, you’ve noticed that I constantly talk about ExtJS. I use it extensively at my office, and I know the API (for version 2.2.1) about as well as anyone not working for their company.

I recently came across a situation that has me frustrated because ExtJS doesn’t seem to have a built-in utility to solve my problem. Obviously, I can code something custom. . . but I’m frustrated because it’s more work than necessary and far from elegant.

The story begins about a year ago. My company (GFX International) has been working on an enterprise software solution for some time, and the developers wrote a method using jQuery (v1.2.6) to parse an XHTML server response returned during 500 errors. The idea is to create a popup window with the error message (one line of code), which is parsed from a rather long XHTML document (the default 500 error page returned by .NET).

The jQuery method is actually quite elegant and works perfectly.

getErrorText: function (response) {
    var errorCode = response.status;

    if (errorCode == 401 || errorCode == 403) {
        return 'You are not permitted to perform this action.';
    }

    //the custom error page has a DIV tag with this ID
    var errorMessage = $(response.responseText).find("div#errortext").html();

    if (!errorMessage) {
        //in DEBUG mode, we don't use custom error page.
        errorMessage = $(response.responseText).find("h2").html();
    }

    return errorMessage;
}

Over the past 9 months since I was hired as our Web Developer, I’ve redesigned the UI of this application so that it is built almost entirely on ExtJS widgets and extensions. The problem with the above method is that this now is the only place in the application where we use jQuery – meaning we have to include the jQuery library for only 2 lines of code.

My initial thought was: “I’ll just re-write this method using ExtJS and remove our dependency on jQuery!” Sounds easy enough, but in reality it’s actually a pain in the ass for several reasons.

First, the response variable returned during the 500 error is not a valid XML document. . . it’s not even valid HTML. The .NET framework generates a detailed error message contained within HTML tags, but after closing the final HTML tag is appends a stack of executed code lines leading up to the error. This section of appended data breaks the XML/HTML validity, essentially making it impossible for me to just throw the response variable into an DOMparser() object.

Second, ExtJS has no built-in utility for parsing a generic XML string for a specified value. In jQuery, every variable called by $(someVariable) is checked (1) to see if it’s a string, and if so (2) to see if it is HTML code (using a regular expression match). If jQuery believes your variable to be an HTML chunk, it runs it through a clean() method to convert the HTML string into DOM nodes (getting rid of any junk. . . *cough* .NET stack trace).

ExtJS does have a similar utility: Ext.query(selector, root). Unfortunately for me, this means that I can only parse an exisiting DOM node. Since my response variable isn’t part of the DOM (or even formatted as a proper DOM element) this method doesn’t really help me until I solve the first problem.

After posting this problem on the ExtJS message board, a member of their support team suggested that I simply build a regular expression to parse my response object. Obviously, this would solve my problem. However, it’s not an elegant solution; regular expressions are ugly at best (they are in fact my nemesis), and this solution fails to solve similar problems faced by other ExtJS users (I assume others have encountered this problem). The bottom line is that this type of utility would make a reasonable and very useful addition to the ExtJS library. . . so why isn’t one available?

Viral YouTube Marketing Example

Saturday, June 6th, 2009

I just saw this post on the YouTube Biz Blog.

A company named BooneOakley (BooneOakley.com) has done something very cool, using the YouTube annotations feature to present each “page” of their site as a YouTube video. It’s a very cool idea, though one I don’t really agree with entirely.

First of all, BooneOakley is a full-service ad agency. They have redirected their web domain to their YouTube channel, effectively piggybacking on YouTube’s bandwidth and syndication.

They’ve obviously done something right here, creating a viral web campaign to spread their name. I had never heard of them before (not that I know anything about ad agencies), but if YouTube is willing to blog about them then this viral campaign is a wild success. If I’m blogging about how YouTube blogged about them, it’s an even more startling success.

On the other hand, YouTube doesn’t give you the ability to build a broad SEO campaign. Sure you can optimize your videos within YouTube and Google video search, but that doesn’t mean customers are going to find you in MSN, Yahoo, YellowPages, etc. Maybe that’s a consideration BooneOakely decided wasn’t important for them (they’re targeting a specific market I know nothing about… very possible).

Nevertheless, I don’t understand why they didn’t simply build their flash videos and embed them within their own hosted domain – thereby allowing for organic SEO, landing page construction, and more control over every aspect of their web presence. They could still have their videos on YouTube (a great idea!), but I honestly think that redirecting their domain to YouTube was a missed opportunity for broad SEO growth.

My friends at Fathom SEO might very well disagree with me. . . but I guess I’m entitled to my opinion. Kudos needs to be given to BooneOakley for their viral campaign, but I’ll be curious to know how long it takes them to rethink the need for a static website.

Event tracking in Google Analytics

Thursday, May 14th, 2009

For the past week, I have been very frustrated with Google Analytics.

I had read in GA documentation about Event Tracking, and I really wanted to set it up on my sites. Unless I’m completely blind, I don’t think the documentation says anywhere that this feature is in beta testing and not fully available to the public.

Doing a quick Google search, I found a blog post details how to hack GA and see this data (assuming you’ve set it up). GA has been tracking the data – they just haven’t given you direct access to it.

I don’t know when Google plans on giving everyone access to this feature, but I’m hoping it’s sometime soon.