Welcome to my corner of the web, where I post my ponderings, pictures and pontifications.

Node Knockout 2010: In Response to John Resig

First, a bit of background.

When the Node Knockout competition was announced several months ago, I signed up immediately; it sounded like a helluvalotta fun and lit a fire for me to learn the ins and outs of Node as quickly as possible.  I recruited a couple of my buddies and the contest slipped off my radar and out of my mind.

Days before, though, I was reminded that it was fast approaching! Long story short, I had somehow screwed up our registration, but the gracious folks running the show set up a random-team-name account at the last minute, “Zenith-Workloom“.  We set to work right away.

I was the only participant who had experience with Node, but the guys were excited to try.  We even had a few geek friends show up when we started, just to see what we were doing and how we were going to do it.

All told, I stayed up for a 36 hour period, crushing against the GitHub, Twitter, Facebook and FourSquare APIs, fussing with relative dates, wrestling with MongoDB… really a lot of work.  We found ourselves cutting back on our features list with every passing hour, desperate to get things stable before time expired. There is quite a bit to discuss here, but I’ll save that for a blog post I plan to write later this week.

The Results

In the end, we ended up exhausted with relatively solid services and 20% of our desired feature set in the front-end.  I emphasize this because there is quite a bit of code running in Node that didn’t “bubble up” to our front-end effectively… for example, I couldn’t get GitHub check-ins to sort nicely with other events before “last call”.  This is merely a side-effect of a deadline fast-approaching.

There are some amazing entries in the Node Knockout contest… I mean, incredibly awesome.  Here are a few of my favorites:

  • Simulchart – http://awesometown.no.de/ – Real-time, embeddable data charting.
  • Drop Note – http://done-js.no.de/ – Drop a file into your browser and share it instantly.
  • Scrabb.ly – http://scrabb.ly/ – Real-time, addictive Scrabble game, (WOW!)
  • CloudQ – http://nko-team-discovery-channel.heroku.com/ – Sandboxed Unit Test runner for GitHub projects.
  • Serrano – http://starcraft2destroyedmymarrage.no.de/ – Share DOM events and other information with other users simultaneously.

These guys kicked our ass.  But here’s the thing that I take away: I watched folks from these teams on IRC, struggling through issues, getting help, providing it… I mean, the community was so f’ing powerful.

Halfway through I realized I was going to learn 1000% more just looking at winning teams’ source code than I was in the contest.  I got excited, and have remained so… and I’m still proud of what my team managed to accomplish, even though we’re not realistically in the running.

Along Comes John Resig

I took issue with the following tweet by Mr. Resig:

Disappointed in the entries to the Node.js Knockout; only a handful of the entries work in non-Chrome/Safari browsers.

Wow… really?  It prompted my reply:

Was jQuery coded in 2 days? RT @jresigDisappointed in the entries to the Node.js Knockout; few work in non-Chrome/Safari browsers. #nodeko

My point was fairly straightforward:  this wasn’t for production, this was for fun.  This was to test the limits of Node.js with stunning, whimsical or powerful ideas. Take away the pressure of “selling something” and just “do something”.

After some retweeting in the node.js hashtag, this reply from Mr. Resig crossed my TweetDeck:

@clintandrewhall Teams that made working, fully-functional, cross-browser applications in 48 hours deserve to win – and get my vote.

The more I’ve thought about it, the more upset his statements have made me.

In Defense of Node Knockout Teams

The Twitter medium is the worst place to debate these kinds of points; I mean, Mr. Resig certainly has more to say that 140 characters allows.  And his interpretation of a complete application is probably different than others.  But I have to take issue with his tweets on their face…

Look, my team’s entry is cross-browser compatible… but that was by the grace of a limited feature-set.  Mr. Resig was actually a judge for our entry, and leveled a very fair, honest critique of our missing features… points of view I share.  But I’m going to protest on behalf of those other teams who only supported a limited set.

There were people attempting very complicated, near-impossible feats under a very tight timeframe… and several succeeded!  For a judge to focus on the browser when the teams had been focusing on Node just seems so argumentative.

It’s one thing if the knockout had been for a week, or maybe if server code had been locked down early with additional time for front-end.  But we’re talking 48 hours here, starting from scratch.

But more importantly, Node Knockout entries are graded as follows, (from http://nodeknockout.com/judging):

Entries will be judged on a 1-5 scale across 4 dimensions:

  • Utility – Is the site offering a service you’d use again and again?
  • Design – How good does it look and feel to use?
  • Innovation – How original is the idea and execution?
  • Completeness – How “fully baked” is the site? Are there bugs or dead ends?

First, I concede that judges have every right to pet peeves, sticking points, etc… and we were told to keep the judges in mind when we were working. Still, I would hope that an entry would still be judged on its merits more so than those irritations.  And to be fair, where in the criteria above is browser compatibility even mentioned?

Perhaps “completeness” could include cross-browser compatibility… but in this context… should it?

Based on Mr. Resig’s logic from his tweet, had my team completed our feature set in our present level of compatibility, we’d have garnered a 5-star vote from him.  That’s great!  But is he saying that, of the entries I mentioned above, none deserve five star ratings simply because they don’t work in all browsers?  Is my team’s simple effort, to compile data feeds chronologically on one page, full orders of magnitude “better” than those ideas simply because our CSS happens to be cross-browser compatible?  I certainly don’t think so… my team didn’t even have JS in the front-end…

Look, I’m well-known for being a progressive-enhancement nazi, swinging the “gotta work everywhere” sword in wide archs… but I make an exception here.

This contest was about doing freakishly cool things in Node in 48 hours, not a browser.  Having participated first-hand, and seeing the absolutely amazing things that were done, I am in awe.  That’s not even to mention the inspiring, multi-continent community that was flash-created in a 48 hour period.  Even better, most teams have pledged to open source their code for all to see.

Absolutely incredible.

Yet… that someone, let alone one of the judges, would publicly minimize a team’s accomplishments by focusing on the tiniest, almost out-of-context point saddens me.

I don’t think anyone should be “disappointed” by these entries.

Go Explore and Vote

I encourage all of you reading this, if you haven’t yet, visit the Node Knockout entries page and comment and vote for your favorites.  Go and see for yourself what amazing things can be done with 48 hours, an idea and a ton of people willing to help.

Create Your Own Google Chrome “App”

I was reading LifeHacker and came across this post regarding how to enable Google Apps in Chrome.  Curious, I dug into the extensions and noticed… well, they’re pretty simple.  So I decided to create my own.
Read more »

Contact Form Experiment

Yesterday, I saw this tweet from Smashing Magazine:

Tweet from Smashing Magazine

Tweet from Smashing Magazine

I took a look at the form, and I must say I was impressed too.  Unfortunately, I was using TweetDeck on my iPhone… as a result, I didn’t see the contact form at all because the background image didn’t load very fast.  That prompted me to post this reply:

My reply on Twitter

My reply on Twitter

Being a social media junkie, this tweet was then cross-posted to my Facebook, prompting this reply from a web developer friend of mine:

...the resulting Facebook conversation.

...the resulting Facebook conversation.

As you can well imagine, I could not let this stand.  So I decided I would refactor the form to prove that, with a few tweaks to the CSS and markup, this form could avoid the problems I pointed out.

Read more »

New Window, No In-source Event

I was prompted by this Twitter post to cross-post an old blog entry of mine.

Having JavaScript events in-source binds you to whatever JavaScript method (and it’s signature) you’ve specified, not to mention breaking the tenets of Progressive Enhancement. When wishing to launch an anchor’s href into a new window while using a STRICT doctype, using window.popup is the only real option, (as the target attribute is invalid in this case). Looking at the W3C specification for anchors, the following could be a solution.
Read more »

Creating Elements in JavaScript, (any good?)

I’ve been playing around with a couple of ideas for JavaScript methods, thought I’d get some feedback.

The following link is a code snippet in PasteBin that shows the methods and a quick test:

http://pastebin.com/f7b68ab19

Basically, the two I wrote and that I’m evaluating are:

Create Element
This method caches a created element instance in an array. In some browsers, like Firefox, this method is marginally faster; I’m thinking the array access is hindering it from being even faster.
Create Element with Properties
This method basically allows you to set attributes using a JSON object. Nothing fancy, but the developers like it. I’m concerned about the speed of the loop, and developers have been asking about how to set the runtime style. Since element.style is, of course, not settable, I’d have to either expose a second parameter, or allow a more complex object and write more logic, (assuming I decide to support it).

I’d love some advice… here’s what I don’t want:

Just use jQuery / Prototype / my framework!

That kind of defeats the purpose of this exercise! :-)

Run Safari 3 and Safari 4 beta on the same Mac

I couldn’t find a blog post or comprehensive tutorial anywhere, but after a great deal of trial and error, I’ve managed to get Safari 3 and Safari 4 beta to run on my Macbook Pro at the same time. Most insisted you have to download WebKit… but you don’t.

It’s much easier than that, once you figure it all out… here’s how to do it!

Screenshot: Safari 3 and Safari 4 beta, side-by-side

Read more »

It’s BACK!

After a great deal of effort, blog is back… I’ve lost a number of posts, though, as well as my custom WordPress skin. I’ve also lost all of my non-database-stored work, (e.g. post images, whitepapers, etc). I’ll keep you posted as to when I’m back in business.

What a pain in the ass.

They let ANYONE drive these days…

This… guy… gave me a double-take as he was waiting at the Winstead’s on the Plaza.  Thankfully I had my camera and could stop laughing long enough to take several pictures:

IMG_1961

Read more »

An Open Letter to a Car Thief

CIMG0851 Dear Ignorant Ass,

So last night you scaled a six foot fence and broke into my car.  I suppose I could congratulate you on the extent of the bounty resulting from your daring raid, but the problem is… you probably don’t know how to use half the stuff you carted off.

Read more »

Introducing Shandy

I’m a sucker.

I was driving to work Friday morning, when I stopped to take a left turn at Gillham and Rockhill. A black puppy was romping around a the top of the hill near the park, and as I came to stop, she ran up to, and then beneath, my car.

To make sure I didn’t run her over as I pulled away, I opened my car door to look underneath…

… and she jumped in.

She was very dirty, smelled terrible and was shaking from head to toe. So there I was: driving a manual car with a confused, scared puppy, trying to determine what to do. I couldn’t just toss her out of my car; it was freezing out. At the same time, I couldn’t just take her home… she was a stray. So, I did what first occurred to me:

I called 411 for the nearest vet’s office.

Turned out she had been out for a couple of days, by the vet’s estimation. They gave her a bath, trimmed her nails and wormed her. She’s delightful, and takes well to discipline.  The name that has stuck is “Shandy,” one of my favorite Guinness drinks.

This is where I found her, and here are some fun pictures:

Shandy

Yet, no matter how adorable she is, and how much I may want to keep her, I’m posting flyers later today around the area… if she does have a home that misses her, I’m going to be returning a happy, healthy puppy to them.