stackup new languages talk: ember is for everybody

26
Ember is for Everybody Cory Forsyth @bantic

Upload: cory-forsyth

Post on 01-Dec-2014

173 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Stackup New Languages Talk: Ember is for Everybody

Ember is for Everybody

Cory Forsyth @bantic

Page 2: Stackup New Languages Talk: Ember is for Everybody

201 Created

Matthew BealeCory Forsyth

http://201-created.com/

Page 3: Stackup New Languages Talk: Ember is for Everybody

Our Stack• Frontend: Ember.js,

Sass

• Editor: Vim

• Remote collab:tmux / tmate / screenhero

• Backend: Ruby, Node, Python

• Github Issues & PRs

• Test-Driven

• Communication: Slack

• Organization: Trello

• Deployment: Divshot, Heroku, S3, Azure

Page 4: Stackup New Languages Talk: Ember is for Everybody

Our Work• Single Page App Development

• Training

• Tune-Up / Rescue

• 0-100% Development

• Open Source Contributions

Page 5: Stackup New Languages Talk: Ember is for Everybody

Front-End Development in 2014

is growing up

Page 6: Stackup New Languages Talk: Ember is for Everybody

JavaScript in 2014is growing up

ecmascript 6 generators

PromisesBroccoli

TDD single-page apps

classes

import/export

JShintSystemjs

Page 7: Stackup New Languages Talk: Ember is for Everybody

CSS in 2014is growing up

transforms border-radius

CSS performance toolingSass/LESS

[attr$=val]

layout thrashing

web fonts

Page 8: Stackup New Languages Talk: Ember is for Everybody

Browsers in 2014are growing up

transforms developer tools

offline-firstHTML5 APIs

evergreen

Content Security Policy

mobile emulation

Page 9: Stackup New Languages Talk: Ember is for Everybody

JavaScript is eating the world

• Massive deployment base

• “Fast”

• Node

• Node-webkit

• Powerful Browser APIs

Page 10: Stackup New Languages Talk: Ember is for Everybody

Evolution of Front-End JavaScript

• onclick!

• “Sprinkles” of JS!

• “frameworks” (Prototype, MooTools, jQuery)!

• build systems, asset pipelines (multi-file js)!

• frameworks v2 (Backbone)!

• high-level frameworks (Ember, Angular…)

Page 11: Stackup New Languages Talk: Ember is for Everybody

JavaScript is Frontierland• Exciting new developments

• ES6: First new JavaScript version in…?

• Exciting new tools

• Grunt, AMD, require.js, jspm, Broccoli, transpiler

• Changing quickly

• proliferation of libraries

Page 12: Stackup New Languages Talk: Ember is for Everybody

Ember• Feels like

• “Mature” Development

• iOS App Development

• Everything has a place

• Holistic

Page 13: Stackup New Languages Talk: Ember is for Everybody

The Ember Trifecta

Ember + Ember Data

Ember-CLI Ember Inspector

Page 14: Stackup New Languages Talk: Ember is for Everybody

Ember-CLI• Command-line tool (like “rails”)

• 1-step to a new app (ember new my-app)

• Code generators (ember generate model User)

• Built-in Test Harness

• Rich, rapidly-growing plugin ecosystem

Page 15: Stackup New Languages Talk: Ember is for Everybody

Ember Inspector• Chrome Extension

• X-Ray Vision for

• Ember Views

• Ember Routes

• Ember Data

Page 16: Stackup New Languages Talk: Ember is for Everybody

Ember DemoData Binding

<p>!{{input value=name placeholder="Enter your name"}}!{{input type='checkbox' checked=showMany}}!</p>!!{{#if name}}!<p>! Your name is: {{name}}!</p>!{{/if}}!

template

Page 17: Stackup New Languages Talk: Ember is for Everybody

Ember DemoComputed Properties

<h2>Computed Properties</h2>!!<p>!{{input value=firstName}}!{{input value=lastName}}!</p>!!{{#if name}}!<p>! Your full name is: {{name}}!</p>!{{/if}}!

import Ember from 'ember';!!export default Ember.Controller.extend({! name: function(){! var first = this.get('firstName'),! last = this.get('lastName');! if (!first || !last) { return; }!! return first + ' ' + last;! }.property('firstName','lastName')!});!

template controller

Page 18: Stackup New Languages Talk: Ember is for Everybody

Ember DemoComputed Property Setters

controller

fullName: function(key, value){! if (arguments.length > 1) { // setter! var fullName = value,! names = fullName.split(' '),! firstName = names[0],! lastName = names[1];!! this.setProperties({! firstName: firstName,! lastName: lastName! });! }!! if (this.get('firstName') && this.get('lastName')) {! return this.get('firstName') + ' ' +! this.get('lastName');! }! }.property('firstName', 'lastName')!

Page 19: Stackup New Languages Talk: Ember is for Everybody

Ember DemoRoutes

• Manage Asynchrony

• Sub states: Loading, error

• Promises

Page 20: Stackup New Languages Talk: Ember is for Everybody

Ember DemoQuery Params

export default Ember.Controller.extend({! queryParams: ['page', 'count'],!! // defaults! page: 1,! count: 10!});!

Page 21: Stackup New Languages Talk: Ember is for Everybody

Ember DemoTests

test('visiting /', function() {! visit('/');!! andThen(function() {! var h1 = find('h1:contains(Ember Is For Everybody)');! equal(h1.length,! 1,! 'has title');!! equal(find('a[href="/data-binding"]').length,! 1,! 'has link to data-binding demo');!! equal(currentURL(), '/');! });!});!

Page 22: Stackup New Languages Talk: Ember is for Everybody

Ember Is For Everybody

Page 23: Stackup New Languages Talk: Ember is for Everybody

The Front-End Story

• Ember is Mainstream-ready

• Ember + Ember-CLI = 1st Class Dev Environment

• How do apps grow with us? What does a long-lived SPA look like?

Page 24: Stackup New Languages Talk: Ember is for Everybody

Other Ember Niceties

• ember addons

• ember data

• ember components

Page 25: Stackup New Languages Talk: Ember is for Everybody

Thank youCory Forsyth

@bantic

Photo credits ! ! ! Wild West Dragon-orb! ! Evolution Wikimedia! ! Everybody Wikipedia!

Page 26: Stackup New Languages Talk: Ember is for Everybody

Links

Cory Forsyth@bantic

Photo credits ! ! ! Wild West Dragon-orb! ! Evolution Wikimedia! ! Everybody Wikipedia!

Slides: http://bit.ly/ember-everybody

Example app: https://github.com/bantic/ember-is-for-everybody

http://emberjs.com

http://201-created.com/codethroughs

http://ember-cli.com