Building for real standards - slides and demo code
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
Building for real standards-notes.pdf
Building for real
Building for real standards.pdf
Building for real standards.ppt


This is a presentation on web standards and how to use them, specifically 
how to build predictable, clean and readable code in the HTML5 world 
without falling for the "shiny new and cool" trap. 

You can find the slides here:

Building for real standards-notes.pdf - Annotated version 
Building for real standards-notes.pdf - Plain version
Building for real - Keynote file (with notes)
Building for real standards.ppt - Powerpoint file (with notes)

The font uses is Open Sans available from Google - in case Powerpoint 
doesn't show it properly. 

In the presentation you'll find "demo time" slides followed by "Memo time"
slides repeating what we just learned. These mean you should show demo code
in between, which is available here:

HTML5 Basics Demo time:

magic.html - show that this file displays as a heading in the browser. Then 
             open the browser developer tools and show that the browser 
             automatically added a html, head and body element, the latter 
             around the h1 element. Explain that this is what HTML5 browsers 
             do - they have been built around the robustness principle that 
             end users should not suffer from developer mistakes and will 
             inject necessary elements for you. Also explain that this is a 
             safety precaution to make sure that bad old code on the web will
             still display in newer browsers and should not be used as an 
             excuse not to write these elements. Instead we should write code 
             that is valid and has all the elements to tell the browser what
             to do _and_ make things easy to understand for the next person 
             who works with your code. Move on to template.html.
template.html - this is a very basic template for HTML5 with all the needed 
                elements and explanations in comments why something is there.
                Remove the comments when you show the template or use 
                template-simple.html as your demo to show.
form.html - this is a simple form example showing that simply by adding a 
            required attribute you can prevent forms that have errors in them 
            being sent to the server. Explain that there is very much a need
            to validate form data on the server (as relying on client-side 
            validation means attackers could just directly call the script 
            in the action of your form). Also explain that in HTML5 browsers
            we don't need to write our own client-side validation as it comes 
            built-in. The other benefit of this approach is that the 
            validation rules are defined in the HTML (as seen at the age
            field) which means they don't get out of sync easily. As a bonus, 
            also explain that the labels in the form are very much needed 
            for accessibility.
video.html - a demo on how easy it is to use video in HTML5. Point out that
             all you need to do to make a video playable in an HTML5 browser
             is to add the controls attribute which creates all the player 
             UI in a keyboard accessible manner. Also point out that the 
             different formats are needed to support different browsers with 
             MP4 being for Safari/IE, WebM for Chrome/Firefox and OGV for 
             older, but still HTML5 compatible browsers. Also point out that 
             a link around an image as the fallback should video not be 
             supported is an OK solution and that offering a Flash fallback 
             could be overkill. You can also show as a great 
             example to convert videos in all the necessary formats or 
             Miro video encoder/MPEG Streamclip as fat client application 
             alternatives. Another way to convert is to host your videos on 
    which will create an MP4 and a WEBM from an OGG 
             video you upload.
broken.html - Show this as an example of how to use browser-only functionality
              and break the web. The file shows a button styled with a 
              gradient on Firefox. Open the same file in Opera, IE or any 
              webkit browser and you'll see that it is unusable as it is white
              text on white background. Show or edit the file live to
              resemble fixed.html to show the way around that.
fixed.html - the fixed version of broken.html - show that by adding a simple
             green background before the gradient one you have a working 
             fallback for non-Mozilla browsers. Then add all the other 
             browser prefixes to show how to have the gradient across the 
             browsers. Point out the annoyance of having to repeat all the 
             prefixes, but also point out that this allows for tweaking the 
             settings for different browsers as the results may vary or even 
             the syntax might be different. Repeat that anything with a 
             browser prefix is experimental! Mention SASS/LESS/Compass and 
             other pre-processors as a way to make this easier. 
Client side thumbnails? Demo time:

Show the demo in the /canvasthumber folder. Simply open the file in the 
browser and drag some images onto the "Drop images here" square and show 
that the browser generates thumbnails from them. If you want, explain the 
code - there is a detailed post on it on Mozilla hacks linked in the footer. 
It is more important though to point out that this is a great example showing 
that something that traditionally is only used to output data - HTML5 canvas -
can be used as an input device and that a hitherto pure server side task like
image generation (think GD library or imageMagick) can now be done on the client. 
It's important that in HTML5 we try to use all the things the client can 
do for us instead of relying on a server all the time as connections are 
flaky and it is annoying to have to reload a document on a mobile device. 

If you present this somewhere, why not tell me about it? All of this here 
is licensed with creative commons BY-SA. Go nuts!