Red Dirt JS

110
REDDIRT .js The Future of HTML, CSS, & JavaScript http://reddirtjs.com Today :) November 3rd, 2011 @ Oklahoma City, OK

description

Slides from the opening keynote at Red Dirt JS conference.

Transcript of Red Dirt JS

Page 1: Red Dirt JS

REDDIRT.jsThe Future of HTML, CSS, & JavaScript—

http://reddirtjs.com

Today   :)  November 3rd, 2011 @ Oklahoma City, OK

Page 2: Red Dirt JS

#whoami ?

My name is Nathan. I doUX stuff at projekt202.

But most people know me as "the 960 guy" (that's ok).

http://sonspring.com | http://960.gs | http://projekt202.com

Page 3: Red Dirt JS

Download the slides & follow along:http://slidesha.re/nathansmith

Or, talk smack about me on Twitter:@nathansmith

Note: You don't have to take notes feverishly.

Page 4: Red Dirt JS

Today, I want to talk a bit aboutwhat the future of HTML, CSS,and JavaScript will look like.*

* My predictive powers are probably average (at best).

Page 5: Red Dirt JS

Difficult to see. Always in motion is the future.

Page 6: Red Dirt JS

In order to determine wherewe're heading, let's reflect

on where we've been...

Page 7: Red Dirt JS

Act IHow We Got Here

Page 9: Red Dirt JS

http://w3.org/People/Berners-Lee

1989: Tim Berners-Lee created HTML to link research docs.

Page 10: Red Dirt JS

"Storage of ASCII text, and display on [80x24] screens, is in the short term sufficient, and essential. Addition of graphics would be an optional extra with very much less penetration for the moment."

– Tim Berners-Lee

http://w3.org/History/1989/proposal.html

Page 11: Red Dirt JS

http://en.wikipedia.org/wiki/CERN

HTML was for serious work. Initially, no <img> tag.

Page 12: Red Dirt JS

Then everyonegot ahold of it:

Page 13: Red Dirt JS
Page 14: Red Dirt JS

But, I digress. We're getting a littleahead of ourselves.

(sorry)

Page 15: Red Dirt JS

http://en.wikipedia.org/wiki/Mosaic_(web_browser)

Marc L.Andreessen

Eric J. Bina

Page 16: Red Dirt JS

1993: Marc Andreessen proposed the <IMG> tag.

Mosaic later becomes Netscape, which then introduces JS, SSL, etc.

"Standardizing"  onbrowser  innovation.

Page 17: Red Dirt JS
Page 19: Red Dirt JS

"JS had to 'look like Java' only less so, be Java's dumb kid brother or boy-hostage sidekick. Plus, I had to be done in ten days or something worse than JS would have happened."

Brandon Eich created JS in 10 days.

http://en.wikipedia.org/wiki/Brendan_Eich

Page 20: Red Dirt JS

JS Java

It's not you, it's me. I'm all quirky andprototypical. You're just too classy.

Page 21: Red Dirt JS

With classical inheritance, if your mother breaks her leg, you go visit her in the hospital. With prototypical inheritance, your leg would also (instantly) break.

Object Inheritance #TLDR

#TLDR = "Too Long, Didn't Read" aka: Sum it up for me :)

Page 22: Red Dirt JS

http://en.wikipedia.org/wiki/Netscape_Navigator

1995: JavaScript debuted in Netscape Navigator 2.0.

Page 23: Red Dirt JS

The word "JavaScript" was chosen to tap into the brand name of the Java programming language.

Sun Microsystems (since acquired by Oracle) owned the trademarks for both Java™ and JavaScript™, and stewarded the development of Java (not JavaScript).

In 1997, JavaScript (the language) was standardized by the European Computer Manufacturers Association, and it was dubbed "ECMAScript."

http://en.wikipedia.org/wiki/JavaScript | http://en.wikipedia.org/wiki/ECMAScript

Um  -­  what?

Brief history of JS = Clear as mud...

Page 24: Red Dirt JS

Altogether different beasts: Both potentially delicious (or dangerous), but not actually derived from the same animal.

Similar in name: JavaScript is to Java as Hamburger is to Ham.

Page 25: Red Dirt JS

(With apologies to Jeremy Keith and Brad Colbow)

http://coding.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip

Page 26: Red Dirt JS

1996: IE 3.0 ships with "JScript" (for copyright purposes).

In 1995, MS begins to ship Internet Explorer with Windows 95. For Netscape, it was the beginning of the end. Microsoft also reverse-engineered JavaScript, as "JScript."

http://en.wikipedia.org/wiki/Internet_Explorer

Page 27: Red Dirt JS

Created atNetscape

"ECMA TC39"Committee responsible

for evolving the language

Who's responsible for JavaScript now?

{to namea few...

http://en.wikipedia.org/wiki/JavaScript | http://en.wikipedia.org/wiki/ECMAScript

TM of Oracle (via Sun)

Defines theECMAScript

DOM API

Page 28: Red Dirt JS

JS browser support is pretty good.

JavaScript (ECMAScript 3.0) is supported fairly consistently in all major browsers.

⇐ This is Wikipedia's compatibility table* for:

– Trident (IE) – Gecko (Firefox) – WebKit (Chrome & Safari) – Presto (Opera)

* I realize those are rendering engines, not specific JS engines(which change names more rapidly). It's how Wikipedia lists 'em.

http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(ECMAScript)

Page 29: Red Dirt JS

JavaScript is that friend in high school you secretly had a crush on, but was always hanging out with that sleazy boyfriend, DOM.

Nice  >

What  a  punk

http://w3.org/DOM

Page 30: Red Dirt JS

The Document Object Model (DOM) is what allows JS to interact with XML/HTML, ala:

window.document.getElementsByTagName('*');

The DOM is stewarded by a different group than governs JS. Browsers also implement it slightly differently. For instance, IE historically didn't treat whitespace as text nodes, even though the official DOM spec says it should.

http://w3.org/DOM

Page 31: Red Dirt JS

2005: Then there was jQuery...

Heck  yeah!

$('p.neat').addClass('ohmy').show('slow');

JavaScript that reads like CSS code!?

http://jquery.com

Page 32: Red Dirt JS

$(document).ready(function() {

// Many tutorials put all the code here.

});

But we treated it like CSS...

Um,  okay...  What's  the  big  deal?

Page 33: Red Dirt JS

Loosely  translated:

"You'd better lose yourself in the music, the moment. You own it, you better never let it go... You only get one shot, do not miss your chance to [load]."

(with apologies to Eminem)

window.onload

http://en.wikipedia.org/wiki/8_Mile_(film)

Page 34: Red Dirt JS

Really, it's not the fault of jQuery, nor of any other capable JavaScript libraries: Dojo, MooTools, Prototype, Sencha, YUI...

As is almost always the case with code, the problem is actually a human one. We've become complacent and forgotten (or never learned) how JavaScript works.

Beware the danger of abstraction & illiteracy.

http://ejohn.org/blog/javascript-language-abstractions

Page 36: Red Dirt JS

http://intercom.co.cr/www-archives/1994-q1/0648.html

1994: Marc Andreessen, on styling... "Sorry, you're screwed."

Page 37: Red Dirt JS

1994: Håkon Wium Lie proposed CSS.

Initially it was called CHSS, ("Cascading HTML Style Sheets"), but was later shortened to simply CSS.

1996: The first browser to support CSS was Internet Explorer 3.0, followed closely by Netscape Navigator version 4.0.

http://people.opera.com/howcome/2006/phd

Page 38: Red Dirt JS

CHSS had 100 levels of "!important"

h1.font.size = 24px 12% /* 12% importance */

h1.font.size = 16px 100% /* 100% importance */

h1.font.size = 12px 89% /* 89% importance */

h1 {font-size: 24px;} /* Applies globally (weak) */

h1.x {font-size: 16px;} /* More specific */

h1 {font-size: 12px;} /* Beats line 1, not line 2 */

Thankfully, CHSS was never implemented:

CSS has "last-in" wins, with specificity override.

http://www.w3.org/People/howcome/p/cascade.html

Page 39: Red Dirt JS

Brief history of the first "Browser War"

http://en.wikipedia.org/wiki/Browser_wars

Page 40: Red Dirt JS

1998: "Web Standards" advocacy begins.

http://w3.org/Style/LieBos2e/history/Overview.html

The box model isn't fixed until October 2006, release of IE7.

Page 41: Red Dirt JS

We made sites "best viewed in IE6,"and Netscape lost the browser war.

http://en.wikipedia.org/wiki/Netscape_Navigator

Page 42: Red Dirt JS

The "dark side" = developing for 1 browser.

Oh, what... Like you never photoshopped you vs. yourself with a lightsaber? C'mon!

http://flickr.com/photos/nathansmith/32757176

Page 43: Red Dirt JS

In 2001, IE had over 90% market share.

http://en.wikipedia.org/wiki/File:Browser_Wars.png

Page 44: Red Dirt JS

2004: Firefox arose from Netscape's ashes.

Thus began a new Browser War, still in progress.

Page 45: Red Dirt JS

Since then, IE has been in steady decline.

http://en.wikipedia.org/wiki/File:Usage_share_of_web_browsers_(Source_Net_Applications).svg

Page 46: Red Dirt JS

Chrome is gaining, at the expense of Firefox.

http://en.wikipedia.org/wiki/File:Usage_share_of_alternative_web_browsers_(Source_StatCounter).svg

Page 47: Red Dirt JS

"Those who cannot remember the past are condemned to repeat it."

– George Santayana

http://en.wikipedia.org/wiki/George_Santayana

"My 'pure CSS' demo only works in WebKit"

Page 48: Red Dirt JS

Act IIWhere We're Going

Page 50: Red Dirt JS

Realistically speaking, XHTML 2.0 would've been a very tough sell, from a practical standpoint. It was extremely rigid. A page simply would not render, if it wasn't perfectly formed from an XML structure standpoint.

Oh, and it would've done away with <img>.

Oh  noes!

Page 51: Red Dirt JS

There were differing schools of thought on HTML vs. XHTML.

In the field"make it work"

Academic"make it valid"

Page 52: Red Dirt JS

rapid  —>

iteration

http://whatwg.org/specs/web-apps/current-work/multipage

Page 53: Red Dirt JS

Ian Hickson, benevolent HTML5 specification dictator curator.

http://en.wikipedia.org/wiki/Ian_Hickson

Page 54: Red Dirt JS

Technically, "HTML5" is now a misnomer. (But, it's too late. Marketing already got ahold of it.) HTML is to be considered an ever-evolving "living standard".

The "WHATWG" — Web Hypertext Application Technology Working Group — will continue to work on HTML, and the W3C will "snapshot" feature sets periodically, and tag them with incremental version numbers: HTML5 (and presumably, HTML6, etc).

Thus, no more version numbers in DOCTYPE...

Page 55: Red Dirt JS

HTML5 "killed" XHTML. Good riddance, says I.

<!DOCTYPE html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Transitional//EN" "http://www.w3.org/TR/xhtml1/

DTD/xhtml1-transitional.dtd">

<—  Much  easier  to  remember!

As it turns out, "<!DOCTYPE html>" = minimum number of characters to trigger "standards" mode in older IE versions.

Page 56: Red Dirt JS

You don't have to type extra junk anymore.

<script>

alert('This is some inline JS.');

</script>

<script type="text/javascript" charset="utf-8">

/* <![CDATA[ */

alert('Are you kidding me?');

/* ]]> */

</script>

Page 57: Red Dirt JS

Have you ever used a non-CSS stylesheet?

<link rel="stylesheet" href="/path/file.css">

<link rel="stylesheet" href="/path/file.css"

type="text/css" media="all" />

Note: Media queries best defined via @media in a single stylesheet anyway, to avoid unnecessary HTTP requests.

(No?  Me  neither,  so  why  "type"  it?)

Page 58: Red Dirt JS

You can't do that! What about the validator?

Relax. It's valid. HTML5 is no longer a sub-set of SGML like all versions of HTML before it. Nor is it a spin on XML, like XHTML 1.x was. HTML is just HTML now. This is how browsers always treated (X)HTML anyway.

I know what you XHTML purists are thinking:

(phew!)http://en.wikipedia.org/wiki/HTML

Page 59: Red Dirt JS

HTML5 CSS3

http://w3.org/html/logo

What about JS? (Not stewarded by W3C)

Page 60: Red Dirt JS
Page 62: Red Dirt JS

Branding, FTW! So, what's next?

1. Get cool logo(s). [X]

2. Convince others. [X]

3. Profit! [X]

Page 63: Red Dirt JS

http://apple.com/html5

Apple likes HTML5.

Page 64: Red Dirt JS

http://html5rocks.com

Google likes HTML5.

Page 65: Red Dirt JS

Mozilla likes HTML5.

https://developer.mozilla.org/en/HTML/HTML5

Page 66: Red Dirt JS

Opera likes HTML5.

http://opera.com/docs/specs/presto25/html5

Page 67: Red Dirt JS

http://msdn.microsoft.com/en-us/ie/aa740476

Microsoft likes HTML5.

Page 68: Red Dirt JS

HTML5 <canvas> is gaining traction.

http://playbiolab.com

Page 69: Red Dirt JS

As of IE9, all browsers support <canvas>.

http://ie.microsoft.com/testdrive/performance/asteroidbelt/default.html

Page 70: Red Dirt JS

2011: IE9 supports SVG (proposed in 1999).

Examples ofDojo.js charts

To be fair, IE9 renders SVG very fast, via hardware acceleration.Konqueror (WebKit predecessor), was the first browser to have built-in SVG support, in 2004.

http://user.sitepen.com/~dwalsh/dojo-charting.html

Page 71: Red Dirt JS

SVG is like construction paper. Layers retaindistinct shapes. SVG files can live without JS.

http://flickr.com/photos/124330160/2127121118

And, each layercan respond tomouse events!

Page 72: Red Dirt JS

Canvas is like a whiteboard drawing, one layer.Note: Canvas only works in the browser via JS.

http://flickr.com/photos/azuriblue/3350954960

Page 73: Red Dirt JS

Quick CSS tip to fix IE9's SVG rendering:

svg { overflow: hidden;}

Page 74: Red Dirt JS

IE9, without the CSS fix for SVG:

http://host.sonspring.com/raph

Page 75: Red Dirt JS

IE9, with the CSS fix for SVG:

http://host.sonspring.com/raph

Page 76: Red Dirt JS

SVG in: Chrome, Firefox, Opera, & Safari.

http://host.sonspring.com/raph

Page 77: Red Dirt JS

I won't cover <svg> or <canvas> in detail during this talk, but two helpful JavaScript libraries are worth noting...

Raphaël (SVG) – Dmitry Baranovskiy Processing JS (Canvas) – John Resig

http://raphaeljs.com http://processingjs.org

Page 78: Red Dirt JS

More  Semantic  Richness!

New tagsin HTML5

http://html5doctor.com/element-index

Page 79: Red Dirt JS

<header role="banner">

<footer role="contentinfo">

<aside>

<nav role="navigation">

<div role="main">

<article>

<section>

<hgroup>

<section>

<dialog>

<p>

etc...

<figure>

<img />

<details>

<summary>

<p>

etc...

<figcaption>

Mixes  well  with  ARIA

Page 80: Red Dirt JS

The dawn of 3D browser graphics.aka: Can I play Farmville in IMAX!?

WebGL is going to be HUGE(eventually)  

http://en.wikipedia.org/wiki/WebGL

Page 83: Red Dirt JS

Metaprogramming

Haml => HTMLSass/Compass => CSSCoffeeScript => JS

Note: Yes, I'm sure there are many, many more examples in the wild. But my time is finite, and this is what I'm familiar with.

http://haml-lang.com | http://sass-lang.com | http://compass-style.org | http://coffeescript.org

Page 84: Red Dirt JS

Personal note: After giving 'em a try, I am becoming more a fan of meta languages that treat whitespace as significant.

Usual  disclaimers  apply:

"It depends." Your mileage may vary. No purchase necessary. Machine-wash only. Enter at own risk. Batteries not included. Void where prohibited, etc.

Page 85: Red Dirt JS

Example of Sass (with Compass).

@import compass/css3 // CSS3 helpers, etc.

// I write this Sass code:

.foobar

+background-image(linear-gradient(#fff, #ccc))

+border-top-right-radius(4px)

+box-shadow(rgba(#000, 0.5) 0 2px 5px 0)

&:hover

text-decoration: underline

Page 86: Red Dirt JS

Example of Sass (with Compass).

/* This CSS is generated... */

.foobar {

background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #cccccc));

background-image: -webkit-linear-gradient(#ffffff, #cccccc);

background-image: -moz-linear-gradient(#ffffff, #cccccc);

background-image: -o-linear-gradient(#ffffff, #cccccc);

background-image: -ms-linear-gradient(#ffffff, #cccccc);

background-image: linear-gradient(#ffffff, #cccccc);

-moz-border-radius-topright: 4px;

-webkit-border-top-right-radius: 4px;

-o-border-top-right-radius: 4px;

-ms-border-top-right-radius: 4px;

-khtml-border-top-right-radius: 4px;

border-top-right-radius: 4px;

-moz-box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px 0;

-webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px 0;

-o-box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px 0;

box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px 0;

}

.foobar:hover {

text-decoration: underline;

}

BLOAT?  Not  really.  You'dhave  to  type  all  this  to  make  it  work  cross-­browser  anyway.

Page 87: Red Dirt JS

Note: Don't indent unnecessarily with Sass.

// This looks innocent enough:

table.table-class

tbody

tr

td

a.link-class

color: orange

Page 88: Red Dirt JS

Note: Don't indent unnecessarily with Sass.

/* But it generates this... */

table.table-class tbody tr td a.link-class {

color: orange;

}

/* When you probably just meant... */

.table-class .link-class {

color: orange;

}

Page 89: Red Dirt JS

I could go on. ButI won't. (Sorry Jina)

Note: Don't steal another presenter's topic.

Note: Jina Bolton is presenting on Sass later today. Don't miss it!

Page 90: Red Dirt JS

Haml rocks, if you're in a Ruby project.

To me, Haml meansnever typing this again...

</div></div></div>

Page 91: Red Dirt JS

Haml can generate nicely formatted HTML.

Page 92: Red Dirt JS

I'm not an über-Ruby guy. Get your feet wet:

http://get-serve.com

Page 93: Red Dirt JS

Okay, so abstraction for HTML and CSS is fine. It saves keystrokes, and those languages are pretty #yawn anyway, right? I mean, they're declarative, so of course we should automate writing them. But this is a JS conference, right? Do not touch my JavaScript. I repeat...

Page 94: Red Dirt JS

get.your(coffee) { return 'off my lawn';}

Page 95: Red Dirt JS

Not everyone's a fan. Dustin Diaz, quoting Douglas Crockford:

Page 97: Red Dirt JS

http://nodejs.org

Page 98: Red Dirt JS

Can you spot the bug?

var joe = 1

sue = 2,

bob = 3;

var joe = 1,

sue = 2,

bob = 3;

Bugs like this can be laborious to find, which is why I write...

Page 99: Red Dirt JS

Nuthin' wrong with being overly clear.

var joe = 1;

var sue = 2;

var bob = 3;

Minifiers like Uglify JS can handle removing repeated var keywords. Put that burden on automation, not yourself.

https://github.com/mishoo/UglifyJS | http://marijnhaverbeke.nl/uglifyjs

Page 100: Red Dirt JS

I just tell JSLint: "Hey JSLint... Shut up."

Actually, JSLint.com is a great tool for checking for JavaScript errors. But validation is a means to an end, not the goal itself.

If you want to ensure JSLint compliance, there's CoffeeScript...

http://jslint.com

Page 101: Red Dirt JS

Recursion -> CoffeeScript is written in CoffeeScript.

https://plus.google.com/116264189418994838408/posts/CSXeyftovTJ

Page 102: Red Dirt JS

# CoffeeScript:

$('#foobar').click ->

# Do stuff.

// JavaScript:

$('#foobar').click(function() {

// Do stuff.

});

CoffeeScript -to- JavaScript...LOL  -­  That's  all?

Page 103: Red Dirt JS

# CoffeeScript:

is_between = 3 < my_value < 12

// JavaScript:

var is_between;

is_between = (3 < my_value && my_value < 12);

CoffeeScript = Syntactic Sugar...Oh,  I  see.

Page 104: Red Dirt JS

One last example... (Sorry Brandon)# CoffeeScript:

happy = true unless raining

// JavaScript:

var happy;

if (!raining) {

happy = true;

}

That's  hawt.

Note: Brandon Satrom is presenting on CoffeeScript later today. Don't miss it!

Page 105: Red Dirt JS

BRAVE NEW WORLDHTML, CSS, JS, & Flash:

Government canreach its citizensdirectly (1:1), viasocial media...

Page 106: Red Dirt JS

Ours is an era of technological marvels.

Page 107: Red Dirt JS

(Free) fonts used in this presentation.

Anonymous Prohttp://j.mp/font_anonymous-pro

Hand  of  Seanhttp://j.mp/font_hand-of-sean

Titillium Texthttp://j.mp/font_titillium-text

Lady Ice REDDIRT.js logo

http://j.mp/font_lady-ice

SteelFishhttp://j.mp/font_steelfish

(Listed in order of appearance)

Page 108: Red Dirt JS

Code "reddirtjs" = 50% off Cody Lindley's book. (I tech-edited)

http://javascriptenlightenment.com

Page 109: Red Dirt JS

Shameless plug: I'll be speaking on Sass & Drupal next year.

http://denver2012.drupal.org/program/sessions/using-sass-compass-drupal-theming

Page 110: Red Dirt JS

Enjoy Red Dirt JS! Get the slides:http://slidesha.re/nathansmith

Feel free to say hi on Twitter:@nathansmith

Questions? I may (not) know the answer.