Christian Heilmann

Author Archive

What I did in 2011 – talk archive with slides, recordings and videos

Thursday, December 29th, 2011

The year is over (well, almost) and I thought it’d be fun to list the conferences I attended and spoke at. You can see the 2011 archive here or below:

All in all: 29 talks, 15 videos, 23 audio recordings, 37 conferences
Date Conference Location Title Slides Audio Video
01/28Heart and SolePortsmouth, EnglandTime to build a better webslides Vid.ly
02/04FOSSDEMBrussels, BelgiumMoving to the client – HTML5 is hereslides MP3 OGG
02/08London Ajax meetupLondon, EnglandUsing HTML5 sensibly and multimedia on the webslides MP3 OGG Skills matter
02/10MF Boat eventLondon, England
02/17London WebLondon, EnglandFinding harmony in web developmentslides MP3 OGG Vimeo
03/09ConFooMontreal, CanadaMoving from hacks to solutionsslides MP3 OGG YouTube, YouTube #2
03/18LoginVilnius, LithuaniaBuilding a better web with open, new technologiesslides YouTube
04/14Funkas TillgänglighetsdagarStockholm, SwedenAccessibility and web innovation (slides, audio and notes)slides MP3 OGG
04/16W3café accessibilitéParis, France
04/20JAXMainz, GermanyHTML5 Das Web und der Browser als Platformslides MP3 OGG Vimeo
04/20JAXMainz, GermanyWie JavaScript die Welt eroberteslides MP3 OGG
05/10Google IOSan Francisco, CA, USA
05/30WebinaleBerlin, GermanyHTML5, CSS3 und JavaScript fuer alleslides MP3 OGG YouTube
06/07Inspire ConferenceLondon, EnglandMentoring
06/17Web2DayNantes, FranceHTML5 and the web of tomorrowslides videointerview
06/25Converge SEColumbia, SC, USAWith the power of HTML5slides MP3 OGG
07/08Highland FlingEdinburgh, ScotlandModerator
07/16Open Web CampPalo Alto, CA, USAHTML5 battles still to be won (slides, audio)slides MP3 OGG
08/19Kings of CodeAmsterdam. NetherlandsHTML5 - time for some slicker appsslides MP3 OGG
08/20EncampmentLondon, England
09/30Evento LinuxLisbon, PortugalHTML5 and the new challenge of openslides MP3 OGG
10/01JSConf EUBerlin, GermanyCommunity JS reloaded – how to rock as a movementslides MP3 OGG
10/03Future of Web AppsLondon, EnglandGet excited and build things and browser panelslides MP3 OGG
10/05FronteersAmsterdam, The NetherlandsThe prestige of being a web developer slides MP3 OGG Vimeo
10/12Paypal X InnovateSan Francisco, CA, USAThe web and browsers as the platform – exciting opportunities in new web technologyslides MP3 OGG YouTube
10/19HTML5 liveLondon, EnglandRocking the boat and causing a rippleslides MP3 OGG
10/20FrontrowKrakow, PolandFail, Meh or Win? How do you want the web to be?slides
10/25Company brownbag at SabreKrakow, PolandHTML5 101 What it is, what it isn’t and where it might goslides MP3 OGG
10/25Company brownbag at SAPMunich, Germany (skype)HTML5 101 What it is, what it isn’t and where it might goslides MP3 OGG
10/27Velocity EuropeBerlin, GermanyAccelerating the overall web experienceslides MP3 OGG
11/01HTML5 live NYCNew York, NY, USArepeatslides
11/03Mozilla IgniteonlineA fast web for peopleslides
11/04Mozilla FestivalLondon, EnglandBrowserID mentoring
11/11Full FrontalBrighton, Englandmy notes
11/12MozCamp EuropeBerlin, GermanyHow to be a kick-ass speakerslides MP3 OGG
11/20Beyond TellerandCologne, GermanyMoving browsers and the web forwardslides MP3 OGG Vimeo
12/12London AjaxLondon, EnglandRethinking user registration with BrowserIDslides MP3 OGG Skills matter
12/21Smashing Magazine Meetup #3Stuttgart, GermanyStyle and Distance – Moving ahead in web development as a communityslides MP3 OGG Vimeo
12/21 Smashing Magazine Meetup #3 Stuttgart, Germany Working Draft Revision 53: At the Smashing Magazine meetup! youtube

It was a fun year, and I hope you can use some of the information here to get inspired to go out and bring good messages to people out there.

On single page apps

Wednesday, December 28th, 2011

TL;TR: Single page apps are coming and necessary for the web to be an apps platform. We have to battle two main issues: old conditioning of users and sloppy development for the sake of doing something “new”.

At the Smashing Mag meetup in Stuttgart Paul Irish got a question about single page apps and what he thinks of systems like backbone.js and client-side templating. He quoted somebody of Sencha who famously said that if he sees a web site with an empty body tag he is very happy (citation needed, help me). Paul explained that his first reaction to this was disbelief but he started thinking much more about it later on. He then proceeded to show the Google mail blog which is a single page app that has no real HTML source but instead is a small JSON object with client-side rendering to HTML using JavaScript.

All of this made me go “why” and “meh” mostly, but then again, I am old, seen a lot of things fail, had to fight for sensible use of Ajax without breaking conventions (without giving it yet another name like hijinks or something like that) and learned all I know about the web from a web of view-source and links that can be opened in multiple windows and tabs.

But I also am a very firm believer in the web as a media evolving and seeing how web usage patterns change with new consumption devices I am very much aware that there is a need for single page apps.

Why single page apps?

The benefits of single page apps are obvious:

  • The first load sends you the shell of the app and it stays in the browser – this means it can be a very quick experience
  • Subsequent data loading can be done by sending very small JSON objects containing content which is great for traffic-limited or slow connections (i.e. mobile environments)
  • Maintaining everything in JS means you don’t need to have several, specialised developers on the project
  • You replicate best practices of the backend and “higher languages” – especially MVC - on the client, thus making it easier for developers who are used to that to build web apps
  • The experience is sticky – you stay in one interface and load content into it which is what “real” apps do

In essence, all of this is about a snappy interface. You don’t send much data, and you don’t have a reload and interface refresh in the browser.

It is nothing that new

Paul reminisced about the web interface of Outlook which out of a sudden told him that there are new emails to be read without reloading (the birth of XHR which lead to Ajax). I had seen this before XHR in forums and boards by having a frameset and an HTTP meta refresh. Frames in general did a lot of what we are craving with single page apps: we loaded only chunks of data and kept the main interface static on the screen.

The old problems of single page apps

The drawbacks of single page apps are the same we had every time we intercepted the reload of the page starting with frames, then with Flash and later with Ajax. Most of them can be done with native APIs these days (history API is a life saver in this case) but the issue is that we are breaking conventions. People in the past have been conditioned to expect things on the web to work in a certain way:

  • We compete with a lot of useful browser features that we need to simulate:
    • History navigation
    • Preventing wrong loading by hitting the stop button or ESC
    • Loading indicators – is something happening?
    • Bookmarkability
    • Ability to open a link in another tab
    • State retention. When I reload the page I should get back to where I was and not the initial state of the app
    • Timeout detection (browsers tell me when something took too long)
    • Printability of pages (I just printed out a wikipedia entry for my mother)
  • If we don’t change the URL and keep the state of the page we break the web:
    • Sending a link to a friend should get them where we were (unless it is our data behind a login of course)
    • A search engine spider should be able to index the content
    • Conversion tools should be able to get the content and create more accessible versions
    • Slow connections should at least deliver a partial experience. When being on a bad connection (as I am now) I should be able to reload and get more content once I get stuck. I can use gmail even on the flakiest of connections as I can switch to an HTML view and hit ESC when it gets stuck

None of these are insurmountable issues, but it is very easy and tempting to forget about them. This is why we had headless players and redirection scripts in the case of Flash apps. We should be aware of these already solved problems and implement them as a base of our UX considerations.

A shift in the way we use the web

A lot of these interactions above are used by people who have been on the web for a long time. Endless scrolling seems odd to them, they want to see a scrollbar and know how far the page goes. People who started the web on a touch interface or a mobile device on the other hand are confused when they have to click buttons or see a pagination. The old folk of the web have an email client, a browser, maybe a picture viewer and a very sorted download folder. The new folk do all of that in Facebook in a browser and are very happy to never see the page reload or having any of that content on their hard drives.

So to a degree I think it is important that we understand that some of the practices of old are just that – old and possibly outdated. For new users a page reload is as much a confusion point as scrolling and not getting visual feedback that something is loading until it appears is for the old-schoolers.

The new problems of single page apps

That doesn’t mean though that there are no issues with single page apps and a web without reloads. There are quite a few things we have to consider even if we say we build for the new generation of web users exclusively or within a fixed environment.

The first thing is that we are promising a fast web of awesome that is always available and every button does something to the app you are in. This means we need to come up with UX patterns that work with a variety of users and environments. It is not easy to compete with native apps – if we take on that challenge we should excel in it and not do it half-baked.

The second issue is that the web as we have it now is full of bad code. This is especially the case when you rely on third party code without having access to what it does. Unless you run a paid-for app, you will show ads. This is how we work and it is a broken, outdated model. Ads count page views and clicks so you need to find a provider that is OK with you auto-refreshing an IFRAME or something similar. But I deviate from the main point: if the ad code throws an error your whole app could die with it.

It doesn’t even have to be third party code. I can see sloppy code without error detection and fallback being advertised as “teething pains” these days. This is not true. We went through the process on non-reloading interfaces a few times already. A lot of omission of simple condition checking and error messaging is either arrogance or inexperience. As Zach Leatherman put it yesterday arrogant statements like “All of my JavaScript code and 3rd party code won’t have errors, so I can ignore Progressive Enhancement” will come to haunt you as the screenshot of Klout shows:

Klout showing an empty page as there was a reference error in a JavaScript file

Gawker also had that issue and Mike Davies has quite some information as to why relying on JS for your links is an architectural nightmare.

In short – we will now once again face a time of New vs. Old and people building apps seeing their own setup and experiences as those of everyone on the web. We had this with Flash in the past and we had it with Ajax. Now we’ll repeat the long discussions, endless bickering and using technology and interface patterns for the sake of using them instead of where they are needed.

Case in point is the blog mentioned by Paul. I am sure it was used as a testing platform for the single app container of Google. Personally I think there is nothing dynamic in a blog that would really warrant it being an app. Not everything on the web needs to be a new Facebook, Google Reader or Google Mail.

Personally I am happy to load a page and read an article in another tab while it is loading and coming back when the tab tells me it is ready for me. I like my web multitasking. On a mobile device or tablet this is a different issue. But who says that this experience should also be forced upon me when I have lots of space, tabs and a browser that brings me the whole web instead of a single resource?

Beginner tutorials who don’t help beginners?

Tuesday, December 27th, 2011

Today Smashing Magazine will released an article I wrote yesterday about a “beginner tutorial” on the same magazine which showed developers how to build a Christmas wish list whilst opening up the server to a lot of attacks.

It annoyed me that these things still happen, which is why I talked to Vitaly about it (I am on the expert advisor panel of SM) and he asked me to write an article to talk about the tutorial.

The beginner tutorial loop of annoyance

In general my point is that we are flooding the web with a lot of beginner tutorials, and a lot of them are nothing of the kind. Instead, they aim to make beginners feel good about a certain topic but fail to deliver knowledge. Instead, they oversimplify and try to pad with a lot of content in one tutorial. The reactions to these kind of articles are predictable:

  • Seasoned developers will find issues with the code and claim that it should not be done that way
  • Other people will disagree and tell the old men to stop telling young kids to get off their lawn
  • Real beginners will chime in and say that they are very happy about the article and getting the feeling that things are not as complex as they seem to be
  • A lot of fanboys will mention technology XYZ that makes this much easier
  • The author will add more disclaimers about the nature of the code of the article in some edits and add warning messages about its viability in the wild – saying that this is just demo code

In short – a lot of back and forth and in the end the author will comply that the tutorial might be misleading and own up that the code should not be used in a live environment and explain. That doesn’t mean though that people will not do so, which is why I consider it very dangerous to cut corners when
writing beginner tutorials.

A call for real beginner tutorials

In the article I added a call for real beginner tutorials, as right now we keep falling into the same trap:

  • We assume that only quick successes will make people want to learn things
  • That’s why instead of explaining one thing we build a full solution with a beautiful interface, admin interfaces and a backend – omiting important features and warnings in each of them as we don’t want to overload people
  • We release code that is not safe for release or real production quality – as it is easier to explain – and warn people not to use it in the real world – assuming that people do read and follow these warnings

The big fallacy is that we try too hard to give beginners a quick way in instead of allowing them to find out things on their own terms – which includes trial and error.

jQuery is not that easy to repeat

A lot of this is trying to repeat the success of jQuery when it comes to getting new developers to hit the ground running. The problem is that the success of jQuery is only repeatable when you do the thing jQuery did – replace the original technology with a simpler syntax and richer API. This is why it is much simpler to write a tutorial on how to use an API or package to achieve a task than to teach people how to start from scratch – the final goal is much closer and success immediate.

Quick success = lots of hits

The really annoying part about this is that simple and quick tutorials with a beautiful example are incredibly successful. They get a lot of hits, happy comments from beginners who think they learned something they can repeat and because of that online magazines who need the traffic to show ads will always be happy to publish them and deliberately ask writers to add more and omit the “complex stuff”.

Use the web to link to resources for beginners

We should not teach bad practices that are hard to un-learn for the sake of a quick win and click numbers. The web is already full of great resources we can keep up-to-date (yes, the Mozilla Developer Network being the biggest) and link to instead of repeating the same mistakes and starting from scratch over and over again.

Faking a mesh ball with lots of rotated colourfull circles

Monday, December 26th, 2011

Happy holidays everyone, I just used the 3D tester and played around a bit as I was inspired by a christmas tree ornament:

The effect needs Firefox Aurora or Webkit as it uses CSS Animation and 3D transformation.

That /via nonsense (and putting text in images)

Friday, December 23rd, 2011

I just got a weird feeling that we are quite misusing the web at the moment to get eyeballs and clicks to our own personal blogs (I am not talking about company sites here).

Take this cool quote by Penn Jilette:

quote

There is no god and that’s the simple truth. If every trace of any single religion died out and nothing were passed on, it would never be created exactly that way again. There might be some other nonsense in its place, but not that exact nonsense. If all of science were wiped out, it would still be true and someone would find a way to figure it all out again.

This seems to originate on imgur. Probably in a post on 4chan or some other board. Instead of just quoting as text someone put it in an image as it is more appealing and probably people link to it more. Well, the really sensible thing would be to provide the text, too, cause then people can quote and search engines can find it. I am not going to have to explain again that people who can not see the image or for whom it doesn’t load should get the info, I hope.

So this happened:

It went on mlkshk posted by Maggie Nelson, then Kottke blogged it, giving it a transcription in HTML and the enticing title “exact nonsense”. Kottke also proved his worth as a good blogger by linking the quote to the book it came from and linking the book title to Google books for you to see (a lesser blogger would have linked it to Amazon with their affiliate ID). Then Gruber blogged exactly the same post with the same title and a “via” pointing to Kottke (ommiting the link to Google Books though). This is how I found it via a retweet of Gruber by Brandon Mitchell.

I like one thing about this: that the original message was converted to a more portable format and Kottke added even meta information.

I don’t like about this that the message then gets put almost verbatim on yet another blog and information (the link to the book) gets omitted again.

I like distribution on the web and if Kottke’s blog went down we’d still have Gruber to get at least the text. In “amazing world” the original image would have had the alternative text and be linked to the book. I wonder if we don’t just get too overboard with the ‘/via’ we put on the web now – if we don’t add value to the original content by putting it on our blog. There is a lot of duplication going on and a lot of unnecessary branding. You see this with images a lot. A funny image crops up and 2 months later you see it in 20 copies (in worse quality most of the time) with watermarks of “fun collections” domains on them.

Frankly I was just annoyed that I spent time chasing the /via links in this case as I thought the title “exact nonsense” was an article by Gruber on overzealous design or code practices. I find a blog something where you should add to the subject matter, not just copy and paste. Right?