Last Friday I headed down to Brighton for the annual Full Frontal conference. It was my first time there and I'm very glad I made the trip. The quality and breadth of the talks given far exceeded my expectations. Thanks to Remy Sharp for his organisational and timekeeping skills, and everyone else who made the day (and evening...) thoroughly enjoyable!

Jeremy Ashkenas - CoffeeScript

This talk was a bit of a wake up call for me, firstly because it was first thing in the morning, but mainly because I'd always been quite snobby about CoffeeScript. I'd first come across it on a hardware hacking site I follow and the article was very JavaScript-hating. Since then I'd always assumed that was the philosophy behind CoffeeScript, I was wrong...

The true philosophy that Jeremy introduced was that CoffeeScript allows you to write very tersely the JavaScript you yourself would have written. A key design decision is that it doesn't rely on a base library in order for the translated code to function. So instead of adding lots of language features, it seeks to rationalise what's there. Or quoting from the slides "Syntax + Semantics + Goodies".

Whilst I still can't see me using CoffeeScript for big projects, my take-home message from the talk was that, I don't think it was ever really meant for that. I think its niche for me will be in side projects, experiments or prototypes. Much like Perl or Bash scripts, sometimes they're the right tool for the job, and I can see CoffeeScript being an ideal way to express an idea quickly and concisely.

Phil Hawksworth - Excessive Enhancement

Phil, a.k.a Captain Killjoy, had a very philosophical point to make in his talk, best explained by this grab from his slides -

The serious point was that web developers have long sneered at Flash (RIP) / Silverlight (RIP) developers for creating web application lumps that break the nature of the web e.g. bookmark-able, history-navigable and accessible. However, in his opinion, that is exactly the way HTML5 is headed and as web developers we have an obligation either to stop sneering, or to do it right™.

Most of the HTML5 stuff I build / look at currently is a demo in one way or another, so I'm used to forgiving myself / the developer for not doing it right™; after all that's not the intention of the site. The stand-out point for me though, was that these sites will be taken as examples by developers new to the technology, whether that was the original intention of the demo or not. Therefore all developers making websites from demos up to full commercial sites should take this responsibility seriously, if for no other reason than to continue sneering at Flash!

Other interesting tit-bits from his talk which I hadn't seen before were the über doodle of the web, ajaxcrawling / shbang and the fact that HTML5 history API allows for full-URL updating not just hash changes.

Marijn Haverbeke - CodeMirror

Marijn is the primary developer behind CodeMirror, the browser-based code editor that powers jsFiddle amongst others. His talk was quite a technical peek behind the scenes of the editor and how it manages to keep performance in check. A sizable chunk of the talk was dedicated to the kinds of compromises he has to make between supporting expected interactions e.g. right-click->select all and overall performance. His big plea was for the browsers to allow web-apps to implement keyboard shortcuts that, with permission, could override the defaults and events which better indicate text selection / manipulation interactions especially on mobile devices.

Rik Arends - Cloud9 IDE

Rik gave a very confident talk about the Cloud9 IDE that his company has built / is building. It was something that I'd only scratched the surface of myself so it was really interesting to hear a lot more about it.

I think the concept of a web-based IDE is a very powerful one and I'd be surprised if Cloud9 were the only ones in the market in a year or two. With that said, they seem to have a very powerful Facebook-esque business model in mind, that of building and giving away a platform for free but then cashing in on 3rd party developers producing plug-ins for the platform.

Nicholas Zakas - Scalable JavaScript Application Architecture

Nicholas had the unenviable task of first slot after lunch, but nursing a food baby, I was still able to learn a lot about Yahoo's approach to architecting a large application without sacrificing testability and usability. He's given the talk a few times and it's available on YouTube.

One of the points made during the talk is that your DOM abstraction library (e.g. jQuery / YUI / DoJo) shouldn't propagate throughout your application code and should instead be restricted to your application controller. I really struggled to understand how this could be possible but one the questions at the end of his session (not in the video) helped explain. Basically it's unavoidable that library references will leak throughout your code because the trade-off is a lot of abstraction through the various layers of the application. However, if you find yourself doing lots of repetitive tasks in your modules then see if you can abstract those tasks back into the application controller. E.g. the application controller could automatically add a click handler to the root of the module when it starts a module, removing the need for most event handling references from the module code.

I also liked his quip - "What's the difference between Enterprise JavaScript Error Handling and JavaScript Error Handling? One gets accepted at conferences".

Glenn Jones - Drag / Drop and Web Intents

Glenn gave us an interesting insight into the current state of drag/drop in the browser. I was surprised at how far things had come but still disappointed in how clunky it all seemed. I have to wonder what the future holds for drag/drop with more devices sporting touch screens and more websites encouraging a full screen app feel.

The more interesting part of the talk for me was web intents. It's the Android OS intents concept but applied to the web, specifically it permits a user manageable service discovery mechanism. E.g. when a user clicks to shorten a URL the host website asks for a URL shortening service, the host site fires off the request and the user is prompted to select a service from one that could be running in a background tab or plug-in.

Brendan Dawes - Pencil / Paperclip Fanaticism

Brendan gave a very entertaining talk on novel interactions, or how to engage a potentially uninterested visitor by breaking the rules. At least I think that's what his talk was on, it could equally well have been on Altoids tins, his 3d printed contraptions or a brief history of pencils.

Either way this was my favourite and most inspiring talk of the day. Check out his company's homepage for an example of the kind of interface I'm talking about, and for a better idea of how random and varied the talk was check out his homepage.

Marcin Wichary - Google Doodles

Marcin is the man responsible for many of the interactive doodles that turn up on the Google homepage. Most notably the PAC-MAN Doodle from April 2010 which I remember stirring the competitive spirit in the office! It was a fascinating talk detailing the lengths he has to go to in order to add interactivity without sacrificing any of the speed or browser compatibility expected from the number 1 piece of web real estate.

He drew big parallels between his work juggling browser quirks and the kinds of creative solutions that were required in the days of the Atari. His big quote (or mis-quote I can't remember exactly how he phrased it!) was along the lines of "if your code doesn't feel a bit nasty, you're a bit behind" and he seemed to have a genuine appreciation for the balance of good code to code that gets the job done. His recommendation of the book Racing the Beam definitely makes it onto my Christmas list.

In Summary

Whilst no individual talk was on Node.js, the frequency it popped up in the talks and in conversation with fellow nerds, makes me think I've been missing a trick. Marcin's insane accelerometer > Chrome > web sockets > Node.js > web sockets > Safari "workaround" was the final straw, my next side-project will definitely make use of Node.js!