Slide 1

Slide 1 text

How To Be A Web UI Developer Casey West Wednesday, June 5, 13 * Welcome * WhiteHat - Hiring

Slide 2

Slide 2 text

This is a Crash Course @caseywest Wednesday, June 5, 13 * We'll Cover a Lot * We'll leave some things out. * Overview of projects to glue together

Slide 3

Slide 3 text

HTML5 Boilerplate html5boilerplate.com @caseywest Wednesday, June 5, 13 * http://www.initializr.com/ - Bootstrap capable * Starter HTML

Slide 4

Slide 4 text

Boilerplate Initializer www.initializr.com @caseywest Wednesday, June 5, 13 * http://www.initializr.com/ - Bootstrap capable * Starter HTML

Slide 5

Slide 5 text

@caseywest Wednesday, June 5, 13 I like Twitter's bootstrap: more later. Pick a style and Download it!

Slide 6

Slide 6 text

@caseywest Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 7

Slide 7 text

body { padding-top: 60px; padding-bottom: 40px; } @caseywest HTML Header Wednesday, June 5, 13 * Legacy IE support for CSS. * Responsive * Modernizr

Slide 8

Slide 8 text

Modernizr modernizr.com @caseywest Respond.js github.com/scottjehl/Respond Wednesday, June 5, 13 * Modernizr: JS that detects HTML5 and CSS3 features in Browser. Runs tests on browser * Respond.js: Fast polyfill for min/max-width media queries in browser. * Modernizr Polyfills: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

Slide 9

Slide 9 text

@caseywest Modernizr Classes Wednesday, June 5, 13 * Legacy IE support for CSS. * Responsive * Modernizr

Slide 10

Slide 10 text

@caseywest Navigation Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 11

Slide 11 text

  1. Try crit.do
@caseywest Content Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 12

Slide 12 text

window.jQuery || document.write('<script src="js/vendor/ jquery-1.9.1.min.js"><\/script>')

Slide 13

Slide 13 text

Mimosa @caseywest Wednesday, June 5, 13 * We'll Cover a Lot * We'll leave some things out. * Overview of projects to glue together

Slide 14

Slide 14 text

# Install node and npm if needed. shell> brew install npm shell> npm install -g mimosa shell> cd crit.do shell> mimosa config @caseywest Install Mimosa Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 15

Slide 15 text

exports.config = { watch: sourceDir: "src" compiledDir: "public" javascriptDir: "js" exclude: [ /[/\\](\.|~)[^/\\]+$/, /tests/ ] server: defaultServer: enabled: true onePager: true views: path: '.' } @caseywest mimosa-config.coffee Wednesday, June 5, 13 Mimosa config. Here's what we get for free from Mimosa: * Optimization and minification of JavaScript and CSS. * A webserver. * Live reload of the page for any changes to HTML, JavaScript, and CSS. * Compilers for meta languages like Jade (HTML), SASS and LESS (CSS), and CoffeeScript (JavaScript)

Slide 16

Slide 16 text

@caseywest Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 17

Slide 17 text

@caseywest Wednesday, June 5, 13 File Structure for mimosa

Slide 18

Slide 18 text

shell> mimosa watch --server \ --optimize --minify shell> open http://127.1:3000 @caseywest Run Mimosa Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 19

Slide 19 text

@caseywest Wednesday, June 5, 13 File Structure for mimosa

Slide 20

Slide 20 text

body { padding-top: 60px; padding-bottom: 40px; } @caseywest Refactor CSS Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 21

Slide 21 text

@import "bootstrap.min.css"; @import "bootstrap-responsive.min.css"; @media (min-width: 979px) { body { padding-top: 60px; padding-bottom: 40px; } } @caseywest Refactor CSS Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 22

Slide 22 text

Stylus learnboost.github.io/stylus @caseywest Wednesday, June 5, 13 Expressive, dynamic, robust CSS

Slide 23

Slide 23 text

@import "bootstrap.min.css" @import "bootstrap-responsive.min.css" @media (min-width: 979px) body padding-top 60px padding-bottom 40px @caseywest main.styl Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 24

Slide 24 text

jQuery jquery.com plugins.jquery.com jqueryui.com @caseywest Wednesday, June 5, 13 jQuery is a given. * http://plugins.jquery.com/ * AJAX * DOM Manipulation * UI Effects * Event Handling * Style Manipulation * JqueryUI * http://jqueryui.com/ * Drag/Drop, Sortables

Slide 25

Slide 25 text

Bower bower.io sindresorhus.com/ bower-components @caseywest Wednesday, June 5, 13 * We'll Cover a Lot * We'll leave some things out. * Overview of projects to glue together

Slide 26

Slide 26 text

shell> npm install -g bower shell> echo '{"directory": "src/js/vendor/bower"}' > .bowerrc shell> bower init shell> bower install requirejs @caseywest Install Bower Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 27

Slide 27 text

Require requirejs.org @caseywest Wednesday, June 5, 13 Module loading for JavaScript

Slide 28

Slide 28 text

window.jQuery || document.write('<script src="js/vendor/ jquery-1.9.1.min.js"><\/script>')

Slide 29

Slide 29 text

Slide 30

Slide 30 text

requirejs.config({ baseUrl: '/js', paths: { "jquery": "vendor/jquery-1.9.1.min", "bootstrap": "vendor/bootstrap.min" }, shim: { bootstrap: ["jquery"] }, enforceDefine: true }); requirejs( ['jquery', 'bootstrap'], function($, Bootstrap) { $(function() { // onLoad }) }); @caseywest main.js Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 31

Slide 31 text

CoffeeScript coffeescript.org @caseywest Wednesday, June 5, 13 Expressive, dynamic, robust CSS

Slide 32

Slide 32 text

requirejs.config baseUrl: '/js' paths: jquery: 'vendor/jquery-1.9.1.min' bootstrap: 'vendor/bootstrap.min' shim: bootstrap: ['jquery'] enforceDefine: true requirejs ['jquery', 'bootstrap'], ($, Bootstrap) -> $ -> console.log "loaded" @caseywest main.coffee Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 33

Slide 33 text

Backbone backbonejs.org @caseywest Wednesday, June 5, 13 * MVC(ollections) * Backbone.localStore * http://documentup.com/jeromegn/backbone.localStorage

Slide 34

Slide 34 text

shell> bower install underscore shell> bower install backbone shell> bower install backbone.localStorage @caseywest Install Backbone Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 35

Slide 35 text

requirejs.config baseUrl: '/js' paths: jquery: 'vendor/jquery-1.9.1.min' bootstrap: 'vendor/bootstrap.min' underscore: 'vendor/bower/underscore/underscore-min' backbone: 'vendor/bower/backbone/backbone-min' 'backbone.localstore': '.../backbone.localStorage-min' shim: bootstrap: ['jquery'] backbone: ['underscore', 'jquery'] enforceDefine: true @caseywest Backbone and Require Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 36

Slide 36 text

requirejs ['jquery', 'bootstrap', 'backbone', 'app/TodoRouter'], ($, Bootstrap, Backbone, TodoRouter) -> # TodoRouter handles itself. Backbone.history.start pushState: true @caseywest Backbone and Require Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 37

Slide 37 text

define ['backbone', 'app/TodoCollection', 'app/TodoListView'], (Backbone, TodoCollection, TodoListView) -> TodoRouter = Backbone.Router.extend routes: index: 'index' '.*': 'index' router = new TodoRouter router.on 'route:index', -> listView = new TodoListView collection: TodoCollection listView.render() router @caseywest TodoRouter.coffee Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

Slide 38

Slide 38 text

define ['backbone'], (Backbone) -> window.Backbone.View.extend el: '#todo-list' render: -> self = this this.collection.each (todo) -> self.$el.append "
  • #{todo.get 'content'}
  • " @caseywest TodoListView.coffee Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

    Slide 39

    Slide 39 text

    define ['backbone', 'backbone.localstore'], (Backbone) -> TodoCollection = Backbone.Collection.extend localStorage: new Backbone.LocalStorage "Todos" new TodoCollection @caseywest TodoCollection.coffee Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

    Slide 40

    Slide 40 text

    Underscore underscorejs.org @caseywest Wednesday, June 5, 13 Utility belt library that holds up Backbone.

    Slide 41

    Slide 41 text

    // JavaScript var width = _.reduce( $('.tabs').get(), 0, function(total,tab) { return $(tab).outerWidth(true) + total; } ); # CoffeeScript width = _.reduce $('.tabs').get(), 0, (total,tab)-> $(tab).outerWidth(true) + total @caseywest Powerful Wins Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

    Slide 42

    Slide 42 text

    var doubleYourMoney = _.map( [1.00, 2.00], function(money) { return money * 2 } ); @caseywest Powerful Wins Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

    Slide 43

    Slide 43 text

    this.collection.each (todo) -> self.$el.append "
  • #{todo.get 'content'}
  • " @caseywest Powerful Wins Wednesday, June 5, 13 File structure of downloaded HTML5 Boilerplate.

    Slide 44

    Slide 44 text

    Moment momentjs.com @caseywest Wednesday, June 5, 13 Date Manipulation in JS parsing, validating, manipulating, and formatting. Localized timeago()

    Slide 45

    Slide 45 text

    Bootstrap twitter.github.io/bootstrap @caseywest Wednesday, June 5, 13 * Simplified Style * Bootstrap Responsive * Style on any device

    Slide 46

    Slide 46 text

    Font-Awesome fortawesome.github.io/Font-Awesome @caseywest Wednesday, June 5, 13 Scalable vector icons that can be styled with CSS.

    Slide 47

    Slide 47 text

    Mocha visionmedia.github.io/mocha @caseywest Wednesday, June 5, 13 JS testing framework. BDD describe(), it(), before(), after(), etc.

    Slide 48

    Slide 48 text

    PhantomJS phantomjs.org @caseywest Wednesday, June 5, 13 headless browser for testing automation, screen capture, page automation, network monitorying

    Slide 49

    Slide 49 text

    Thank you. @caseywest Wednesday, June 5, 13 * We'll Cover a Lot * We'll leave some things out. * Overview of projects to glue together