SlideShare a Scribd company logo
1 of 153
Download to read offline
JS 2016ye.jutard@gmail.com
Intervenant
● Yves-Emmanuel JUTARD
● Senior Developer JS full stack
● @Le Monde via Omnilog http://www.omnilog.fr/
Prologue
How did we end up here ?
| | | | | | | | | | | | | | | | | | | | |
1990 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
early
web
Javascript
(netscape)
Apache
HTTP server
A history of the dynamic web
http://royal.pingdom.com/2007/12/07/a-history-of-the-dynamic-web/
CGI PHP
AJAX
(Microsoft) JSON
nginx
Ruby On
Rails
jQuery
Google Chrome
+ v8
AngularJS
node.js
Android
iPhone
websockets
ReactJS
dotcom
bubble
crash
JavaScript Developers: The New Kings of Software
http://thefullstack.xyz/javascript-developers/
Always bet on Javascript
http://brendaneich.github.io/ModernWeb.tw-2015/#74
ECMA2015
ES6
CommonJS
express.js
REST
Flash
asm.js
dockernpm
compile-to-Jsexpress.js
grunt
Real case example : Le Monde
Pitch
● accidentally brilliant !
● Functional programming, event loop, unicode…
● extremely capable
● Ubiquitous (browser !!)
JavaScript is the lingua franca of the web. Ignore it at your peril.
http://blog.codinghorror.com/javascript-the-lingua-franca-of-the-web/
Why JS Will Become The Dominant Programming Language Of The Enterprise
http://readwrite.com/2013/08/09/why-javascript-will-become-the-dominant-programming-language-of-the-enterprise
JavaScript Is Eating The World
http://arc.applause.com/2015/11/06/javascript-is-eating-the-world/
The JavaScript World Domination
https://medium.com/@slsoftworks/javascript-world-domination-af9ca2ee5070
Java is WORA
Javascript is WORA++
Show me the numbers
Language Trends on GitHub
https://github.com/blog/2047-language-trends-on-github
Stackoverflow 2015 Developer Survey - Most Popular Technologies
http://stackoverflow.com/research/developer-survey-2015#tech-lang
The RedMonk Programming Language Rankings: January 2016
http://redmonk.com/sogrady/2016/02/19/language-rankings-1-16/
References
● GAFA
● Netflix - Building With Node.js At Netflix
● PayPal - Building With Node.js at PayPal
● Medium - On Building With Node.js At Medium
● LinkedIn - Building With Node.js At LinkedIn
What companies in Silicon Valley are using Node.JS in production?
https://www.quora.com/What-companies-in-Silicon-Valley-are-using-Node-JS-in-production
What companies are using Node.js in production?
https://www.quora.com/What-companies-are-using-Node-js-in-production
Node.js and ES6 Instead of Java – A War Story
http://www.technology-ebay.de/the-teams/mobile-de/blog/nodejs-es6-war-story
A case on ubiquitous JS
● SPA
● APIs
● Native mobile apps
● Desktop apps
● Internet of things
● ...
Plan
1) Baseline JS dev
2) Not ridiculous in interview
3) MVP for your angels
How to Become a Better Node.js Developer in 2016
https://blog.risingstack.com/how-to-become-a-better-node-js-developer-in-2016/
A Baseline for Front-End [JS] Developers, 2015
http://rmurphey.com/blog/2015/03/23/a-baseline-for-front-end-developers-2015
10 Interview Questions Every JS Developer Should Know
https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95
The Two Pillars of JavaScript
https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3
Episode 1
Language : base
/* syntax demo
*/
let demoBool = true;
let demoNumber = 1;
let demoString = "hello";
let demoArray = [];
let demoObject = {};
// greet someone
function hello (name) {
if (!name)
console.log('hello, unknown!');
else if (name === 'internet')
console.log('Meeeooow!');
else
console.log('hello, ' + name + '!');
}
hello('John');
hello('internet');
« JavaScript is the first lambda language to go
mainstream. Deep down, JavaScript has more in
common with Lisp and Scheme than with Java. It is
Lisp in C’s clothing. This makes JavaScript a
remarkably powerful language. » (Douglas
Crockford)
Language : types
JavaScript data types and data structures
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
6 data types that are
primitives :
● Boolean
● Null
● Undefined
● Number
● String (immutable)
● Symbol (new ES2015)
And others who
are NOT :
● Object { }
● Function
● Array [ ]
● ... (later)
Unusual
● No Integer ==> only Number (double 64 bits)
● No Char ==> only String (UTF-16)
● String delimiters : 'hello' === "hello"
How to tame your function (1)
'ABCD'.toLowerCase()
--> 'abcd'
[ 1, 2 ].length
--> 2
[ 1, 2, 3, 4 ].slice(2, 3)
--> [3]
How to tame your function (2)
[ 'Hi', 'World' ].map(function(t) {
return t.toLowerCase();
});
--> [ 'hi', 'world' ]
[ 'Hi', 'World' ].map(
T => t.toLowerCase()
);
--> [ 'hi', 'world' ]
Hands on !
● Go to https://github.com/EpitaJS/js-class-2016
● Fork the repo
● Clone your fork
git clone ...
● Install dependencies
npm install
● Then...
npm start
● Google Chrome http://localhost:8000/
● /browser/lessons/index.html
Tools : Chrome Dev Tools
Ctrl + Shift + I --> "Console" tab
console.log(...)
console.info(...)
console.warn(...)
console.error(...)
Fend For Yourself !
http://devdocs.io/
● JavaScript
● Lodash
● Node.js
● MDN https://developer.mozilla.org/
Lesson 1
Basics
Modules
import "moduleX";
import <default> from "moduleX";
import _ from "lodash";
import * as name from "moduleX";
The ES6 import statement
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
export function tokenize(str) {
// ...
}
const defaultLogger = createFancyLogger();
defaultLogger.create = createFancyLogger;
export default defaultLogger;
export { createFancyLogger as create };
The ES6 export statement
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
Note about tests
● Mocha / chai
● context() / describe() / it()
● Make a phrase !
● .only / .skip
Demo : Chrome Dev Tools
● Display mode
● Esc
● Network
● Test responsive design
● Simulate low bandwith
Lesson 2
Chrome Dev Tools
+ LocalStorage API
+ "by reference"
● Uncomment the line //debugger;
● Set breakpoints in tests
Important concepts (1)
● ECMASCRIPT 2015
● Aka ES6
● Transpiling
● Module loader
Language : type, casts
typeof 0 // "number"
typeof true // "boolean"
typeof 'foo' // "string"
typeof {} // "object"
typeof undefined // "undefined"
typeof null // "object" <- official bug
typeof function(){} // "function" (object)
typeof NaN // "number" wat ?
typeof [] // "object"
typeof new String("lalala") // "object"
JavaScript tutorial : Type detection
http://javascript.info/tutorial/type-detection
Language : type, casts
{}.toString ------>
== !=
=== !==
+'10.1' -> 10.1
0.1 + 0.2 === 0.30000000000000004;
!!undefined -> false
'[object Array]'
'[object Boolean]'
'[object Date]'
'[object Function]'
...
Lesson 3
Type detection
Javascript : the BAD parts
● Type detection :-(
● Aggressive type casting + ++ :-(
● Var scoping, hoisting (ES5) for ... in ... :-(
● No native modules (until ES6) :-( :-( :-( :-(
● Automatic comma insertion
● 'use strict'; (ES5)
● ...
Semicolons in JavaScript are optional
http://mislav.net/2010/05/semicolons/
YourLanguageSucks
https://wiki.theory.org/YourLanguageSucks
Strangest language feature
http://stackoverflow.com/questions/1995113/strangest-language-feature
Solution (1) tooling !
● ESLINT
Lesson 3 bis
npm run lint
Solution (2) : lodash ;-)
● « A modern JavaScript utility library delivering
modularity, performance, & extras. »
● import _ from 'lodash';
● https://lodash.com/
● http://devdocs.io/
_.isBoolean(foo);
general culture (1)
"The JavaScript engine race"
● Chakra (Microsoft Edge)
● JavaScriptCore (Apple Safari)
● SpiderMonkey (Mozilla Firefox)
● V8 (Google Chrome)
http://arewefastyet.com/
Iphone ?
Language : objects
let duck = {
name: 'Bob',
weight: 1.5,
actions: {
eat: () => { duck.weight += 0.1 },
'search-food': () => { duck.weight -= 0.1 },
}
};
Language : functions
function hello(name) {
console.log('hello, ' + name + '!');
}
hello('John');
var greet = hello;
greet('John');
function greetMultiple(names, greetFn) {
names.forEach(greetFn);
}
greetMultiple([ 'Steve', 'Tony', 'Natasha' ], hello);
greetMultiple([ 'Steve', 'Tony', 'Natasha' ], function (name) {
console.log('Hi ' + name + '!');
});
« The quality of all code that
you'll ever write, in JavaScript,
relies upon the realization that
JavaScript is a functional
language. All functions, in
JavaScript, are first-class:
They can coexist with, and
can be treated like, any other
JavaScript object. » (John
Resig)
Language : closures
function createActor(name) {
return {
name,
say: text => console.log(name + ': ' + text)
};
}
const Alice = createActor('Alice');
const Bob = createActor('Bob');
Alice.say('I want to tell you a secret');
Bob.say('OK but please cipher');
How do JavaScript closures work?
http://stackoverflow.com/questions/111102/how-do-javascript-closures-work
Language : this
function createActor(name) {
return {
name,
say: function(text) {
console.log(name + ': ' + text, this)
}
};
}
Language : this (2)
function createActor(name) {
return {
name,
say: text => console.log(name + ': ' + text, this)
};
}
Language : this (3)
● Python guys here ?
● Default this = global
● Bind :
<function>.bind(this[, param1][, param2]...)
const AliceSay = Alice.say.bind(Alice);
AliceSay('I want to tell you a secret');
const BobSayXXX = Bob.say.bind(Alice);
BobSayXXX('OK but please cipher');
Language : apply / call
fun.call(thisArg[, arg1[, arg2[, ...]]])
fun.apply(thisArg, [argsArray])
The Power of Apply and Call
http://andyjmeyers.blogspot.fr/2015/01/the-power-of-apply-and-call.html
Lesson 4
Advanced functions
Now send me a PR !!!
Episode 2
REM
● JS = high-level, dynamic, untyped, interpreted
● Suitable for nearly everything
● Google dev tools !
● Functions !
New prerequisites :
http://bit.ly/jsc2-pre
Lesson 6
Wrapping up :-)
06 – Wrapping up
Important concepts (2)
● Bootstrap
● FOUC
06 – Wrapping up
● Jquery
let elements = sortedResults.map(entry => `
<tr>
<td>${entry.token}</td>
<td>${entry.occurrenceCount}</td>
</tr>`);
$('#results tbody').empty();
$('#results tbody:last-child').append( elements );
Debounce and Throttle: a visual explanation
http://drupalmotion.com/article/debounce-and-throttle-visual-explanation
Using jQuery for direct
DOM manipulation
Language : class
The Two Pillars of JavaScript – Pt 1
https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3
The Two Pillars of JavaScript – Pt 2
https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-functional-programming-a63aa53a41a4
Language : duck typing
When I see a bird that
● walks like a duck
● swims like a duck
● and quacks like a duck
I call that bird a duck.
James Whitcomb Riley
Language : event loop
● From UI history = accidental genius
Problems With Node.JS Event Loop
http://www.juhonkoti.net/2015/12/01/problems-with-node-js-event-loop
Hands on !
● Go to https://github.com/EpitaJS/js-class-2016-episode-2
● Fork the repo
● Clone your fork
git clone ...
● Install required node :
nvm install $(cat .nvmrc)
● Install dependencies
npm install
Node Exercise 1
Hello world
cd exercises/nodejs/01-hello_world
./index.js
Demos
● /demos/nodejs :
./index.js
● /demos/browser :
npm run puer
async intro : timeout
console.log('line 1');
setTimeout(function() {
console.log.bind(console, 'line 2'),
}, 1000);
console.log('line 3');
line 1
line 3
line 2
async intro : timeout (continued)
console.log('line 1');
setTimeout(function() {
console.log.bind(console, 'line 2'),
});
console.log('line 3');
line 1
line 3
line 2
async intro : node style
Async function(value, callback)...
"node style callback"
FetchPizza('4 fromages',
function (err, pizza) {
if (err) return console.log(err);
eat(pizza);
}
);
Console.log('Waiting for my pizza...');
Error Handling in Node.js
https://www.joyent.com/developers/node/design/errors
Modules
● ES6
import _from 'lodash'
Import {cloneDeep as clone} from 'lodash';
● Node.js = CommonJS
const _ = require('lodash');
const clone = require('lodash').cloneDeep;
Node.js Module API
https://nodejs.org/api/modules.html
Node Exercise 2
CLI app + async 1
cd ../02-interactive
./index.js
Node.js : 1st experience
● Async is key : built-in ! (vs. Python twisted)
● Paypal node.js app :
● Double the requests per second vs. the Java
application [even when] using a single core for the
node.js application compared to five cores in Java
● 35% decrease in the average response time for the
same page. This resulted in the pages being served
200ms faster
Twisted is an event-driven network programming framework written in Python
https://en.wikipedia.org/wiki/Twisted_%28software%29
Node.js at PayPal
https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
Promises
● "Callback hell"
doAsync1(function (err, res) {
doAsync2(function (err, res) {
doAsync3(function (err, res) {
throw new Error(...);
})
})
})
Managing Node.js Callback Hell
https://medium.com/@wavded/managing-node-js-callback-hell-1fe03ba8ba
Promises
let p = Promise.resolve(5);
p.then(data => console.log('Hello ' + data));
p.then(data => console.log('Bonjour ' + data));
p.then(data => data + 5)
.then(data => console.log('+5 gives :' + data))
.catch(err => console.error('something happened !'));
MDN Promise reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promises
let a = Promise.resolve(5);
a.then(() => {
// silly example, of course
return Promise.resolve('hello');
})
.then(msg => console.log(msg));
MDN Promise reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promises
let b = Promise.resolve(5);
b.then(() => {
// silly example, of course
throw new Error('Ouch !');
})
.then(msg => console.log(msg))
.catch(err => console.error(err.message));
MDN Promise reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promises
● Interactive demo
http://bit.ly/promisesDemoJSC2016
function getUrl () {
return new Promise((resolve, reject) => {
setTimeout(() => resolve("http://swapi.co/people/3"), 1500)
})
}
getUrl()
.then(function fetchData(url) {
return fetch(url)
.then(function onResponse(response) {
if(response.ok)
return response.json();
else
throw new Error('Network response was not ok.');
});
})
.then(function displayResults(data) {
console.log(data)
})
.catch(err => console.error(err));
We have a problem with promises
http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
Promise visualization playground for the adventurous
http://bevacqua.github.io/promisees/
Node Exercise 3
Promises
cd ../03-promise
./index.js
● Starwars API https://swapi.co/
● Fetch API : go doc yourself...
General Culture : JS Darwinism
The Darwinism of small modules
https://developer.atlassian.com/blog/2015/11/what-the-web-platform-can-learn-from-nodejs/
Darwinism : example for Promises
20152015
OfficialOfficial
Promise APIPromise API
20072007
Dojo.deferredDojo.deferred
20092009
Promise/A specPromise/A spec
19761976
« Promise » term« Promise » term
coinedcoined
20112011
When.jsWhen.js
20102010
kriskowal/qkriskowal/q
20132013
bluebirdbluebird
Libs
How to choose ??
Libs
How to choose the right JavaScript framework ?
http://www.commitstrip.com/en/2015/09/16/how-to-choose-the-right-javascript-framework/
Libs ?
Solid
● lodash
● moment
● mocha + chai
● async (if really needed)
Npm - most starred packages
https://www.npmjs.com/browse/star
Npm - most depended-upon packages
https://www.npmjs.com/browse/depended
Exit conditions
Npm = node packet manager
npm
Module Counts
http://www.modulecounts.com/
npm
● npm install
● npm install --save toto
● npm install --global jspm
● package.json
npm
https://www.npmjs.com/
npm as an automation tool
● Tasks
● package.json
● npm run xyz
"scripts": {
"start": "node index.js",
"puer": "puer --exclude 'node_modules'",
"lint": "eslint ."
},
"dependencies": {
"amdefine": "^1.0.0",
"async": "^1.5.2",
"body-parser": "^1.15.0",
"chalk": "^1.1.1",
Node http
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello world !');
});
server.listen(8080);
console.log('Listening on 8080...');
Time to early commit !!!
expressJS
const express = require('express');
// http://expressjs.com/4x/api.html
const app = express();
app.get('/', (req, res) => res.send('hello world'));
app.listen(8080);
console.log('Listening on 8080...');
express.js
http://expressjs.com/4x/api.html
Node Exercise 4
Express hello world
cd ../04-express_hello_world
./index.js
More ExpressJS
● Routing
● Middleware
app.use((req, res, next) => {
// set a custom header
res.header('x-received-at', Date.now());
next();
});
app.get('/', function(req, res) {
res.send('hello from app ! Try /meta /api');
});
Node Exercise 5
Express routing
cd ../05-express_routing
./index.js
Build a simple API
● Be creative !
● With CORS headers !
Access-Control-Allow-Origin ->
*
Access-Control-Allow-Headers ->
Origin, X-Requested-With, Content-Type, Accept
Time to early commit !!!
Deploy live at Heroku !!!
https://dashboard.heroku.com/apps
1)Select your app
2)Go to deploy tab
3)Connect to your GitHub fork
4)Deploy !!
Socket.io
Critical knowledge
No time, you'll have to read yourself about it :
● Security
● Cluster
● Domains
● ...
Be careful !
● Leaks
● Memory
● timeouts
Now send me a PR !!!
Homework
● http://brendaneich.github.io/ModernWeb.tw-20
15/
● Parcourir ces docs :
● https://lodash.com/docs
● https://github.com/caolan/async
● https://dev.windows.com/en-us/microsoft-edge/plat
form/status/?filter=f2f0000bf
●
Episode 3
REM : so far...
● JavaScript basics
● JavaScript browser with jQuery
● JavaScrip server with node.js
● CLI tool
● express app : API
Back to browser
● APIs web
● API support http://caniuse.com/
● Modules
● Module loaders
● Client frameworks
Hands on !
● Go to https://github.com/EpitaJS/js-class-2016-episode-3
● Fork the repo
● Clone your fork
git clone ...
● Install required node :
nvm install $(cat .nvmrc)
● Install dependencies
npm install
Démo
AngularJS SPA
npm run dev
Localhost:7000/
Advanced Server
● Templating
● Consolidate + dust
● Complex pipeline
● Auto-restart
● Livereload (Hot reload)
● ...
Advanced express pipeline
srcserverwebexpress-appindex.js
Assign UUID
// tag the requests with a unique id
app.use(middlewares.assign_uuid);
// identify requests rendering to a page
app.use(middlewares.identify_page_reques
app.use(middlewares.log_requests);
// activate compression
app.use(middlewares.compress_response_bo
// then static files which doesn't requi
// Typically this middleware will come v
// to avoid processing any other middlew
app.use('/', middlewares.se
app.use('/client', middlewares.se
app.use('/common', middlewares.se
app.use('/jspm_packages', middlewares.se
app.get('/config.js', (req, res) => res.
// now that we've passed static data whi
// add the X-Response-Time header to our
app.use(middlewares.add_response_time_he
// needed to read request params
app.use(middlewares.parse_request.json()
app.use(middlewares.parse_request.urlenc
// detect and pick the best locale
app.use(middlewares.detect_best_locale);
app.use(routes);
// fallback
// 'catch all' = default / 404 for a web
app.use(middlewares.handle_unmatched_wit
Identify page requests
Log
Activate compression
Serve static files
Add info header
Parse request
Detect best locale
Route...
Templating
● Dust
http://dejanglozic.com/2014/01/27/dust-js-such-templating/
<!DOCTYPE html>
<head>
<title>404 Not found</title>
</head>
<h1>Page not found.</h1>
<li>Check url in the adress bar
<li><a href="/">Go back to home</a>
<hr />
<pre>{url}</pre>
<pre>#{uuid}</pre>
Homework : go see the sources
● /src
● /client -> client should be reloaded on change
– /client/common/views
● /server -> server should be restarted on change
– /server/web/express-app
● /common -> both
Back to browser : client frameworks
(Debating on merits of frameworks vs. micro-libs)
https://www.reddit.com/r/javascript/comments/3v43qf/im_a_web_developer_who_uses_jquery_to_write_a/cxkl9d1
Which cat is your JavaScript framework ?
http://whichcatisyourjavascriptframework.com/
AngularJS
Angular demo 1
Hello word
npm run dev
Localhost:7000/demo-O1
Demo
<label>Name:</label>
<input type="text" ng-model="name">
<hr>
<h1>Hello {{name}}!</h1>
AngularJS
Angular demo 2
ng-repeat
npm run dev
Localhost:7000/demo-O1
ng-repeat
<h1 ng-repeat="name in $ctrl.names">
Hello {{name}}!
</h1>
« directive »
Two-way binding
View Controller
Nice stuff
● ng-if="..."
● ng-show="..." ng-hide="..."
● ng-click="list.addItem()"
● Ng-class="['todo', 'todo-active']"
● <a ng-href="foo/{{hash}}">link1</a>
<ANY ng-switch="name">
<ANY ng-switch-when="John">...</ANY>
<ANY ng-switch-when="Sam">...</ANY>
<ANY ng-switch-default>...</ANY>
</ANY>
$digest
● ???
$digest
The $digest :
● Is repeated until stabilization
● Is automatic as long as we stay in Angular
world
● Can be triggered manually :
$scope.$applyAsync(() => { .... });
Angular exercise 1
Fix the $digest !
npm run dev
Localhost:7000/exercise-01
???
Services
● $timeout
Angular world !
Properly triggers $digest
Some services :
● $log
● $q <-- promises
● $timeout
● $document
● $http $http.get() $http.post()
● ...
Angular concepts
import 'angular';
import 'angular-ui-router';
const appModule =
angular.module('app_module', [ 'ui.router' ]);
Here we create an Angular module
named « app_module »...
...depending on this
other module imported
before
Angular concepts
appModule.component('layout', {
template: '<div>Hello world !</div>'
});
Here we create a component
named « layout » inside previously
created module (appModule)
Angular concepts
appModule.controller('AppController',
['$scope', function ($scope) {
this.title = 'Demo 01';
$scope.$watch(function() {
console.count('$digest');
})
}]
);
Again, we create a « controller » named AppController
The controller loads
something
from currently loaded
modules
(dependency injection)
AngularJS
Trix
● Create one only module as a singleton and
forget about it
window._app.global_ng_module
.component('toolbar', {
templateUrl: 'toolbar.html'
});
Split an app
Toolbar
content
FAB
Split an app : components
window._app.global_ng_module
.component('toolbar', {
templateUrl: 'toolbar.html'
});
Toolbar.html :
<md-toolbar>
<div class="md-toolbar-tools">
<md-button class="md-icon-button" aria-label="Settings">
<i class="material-icons md-24 md-light">menu</i>
</md-button>
</div>
</md-toolbar>
Angular exercise 2
Using components
npm run dev
Localhost:7000/exercise-02
Module loading
Webpack comparison
https://webpack.github.io/docs/comparison.html
Important concepts (4)
● Polyfill
● Shim
Module loader
● Jspm
● Bootstraping angular
● Angular
● Angular material
● https://design.google.com/icons/
●
AngularJS links
Documentation :
● guides http://docs.angularjs.org/guide/
● API ref http://docs.angularjs.org/api/
● wiki github
https://github.com/angular/angular.js/wiki/_pa
ges
● cheatsheet
http://www.cheatography.com/proloser/cheat-s
heets/angularjs/
AngularJS Stack
● Angular-ui-router
● https://github.com/angular-ui/ui-router
● Angular Material
● https://material.angularjs.org/latest/
router
● Client routes
$scope
● isolated
directives
● transclude
Important concepts (5)
● Minification
● Bundle
The end
MISC
Dev Skill
The Difference Between Excellent, Good and Bad JavaScript Developers
http://thefullstack.xyz/excellent-javascript-developer/
5 Principles that will make you a SOLID JavaScript Developer
http://thefullstack.xyz/solid-javascript/
Career
What are the growth stages of a programmer ?
https://www.quora.com/What-are-the-growth-stages-of-a-programmer
[Startups] Reconsider
https://m.signalvnoise.com/reconsider-41adf356857f
What are the growth stages of a programmer ?
https://www.quora.com/What-are-the-growth-stages-of-a-programmer
What are the growth stages of a programmer ?
https://www.quora.com/What-are-the-growth-stages-of-a-programmer
Fun
Les joies du code
https://www.quora.com/What-are-the-growth-stages-of-a-programmer
Dilbert
http://dilbert.com/
Les joies du code
http://lesjoiesducode.fr/
CommitStrip
http://www.commitstrip.com/
DevOps reactions
http://devopsreactions.tumblr.com/
TOSORT
Lesson 9
Fetching a public API
Open APIs :
Hacker news https://www.npmjs.com/package/hack-news
Marvel API http://developer.marvel.com/
Starwars API https://swapi.co/
Instagram https://github.com/zzarcon/nodegram
Weather http://openweathermap.org/appid#get
Lesson 5
async (1) : timeouts
Async + exceptions
function find(filter, cb) {
let result;
// look in db.... (async)
if (result) return cb(null, result);
return cb(new Error('Not found !'));
}
Inheritance : prototypal !
const actor = {
say: function(text) {
console.log(this.name + ': ' + text);
}
};
function createActor(name) {
return Object.assign(Object.create(actor),
{ name });
}
const Alice = createActor('Alice');
const Bob = createActor('Bob');
Common Misconceptions About Inheritance in JavaScript
https://medium.com/javascript-scene/common-misconceptions-about-inheritance-in-javascript-d5d9bab29b0a
Inheritance : prototypal !
Inheritance ?
const actor = {
say: function(text) {
console.log(this.name + ': ' + text);
}
};
function createActor(name) {
return {
name,
say: actor.say
};
}
const Alice = createActor('Alice');
Composition
function say(named, text) {
console.log(named.name + ': ' + text);
}
const Alice = {name: 'Alice'};
const Bob = {name: 'Bob'};
say(Alice, 'I want to tell you a secret');
say(Bob, 'OK but please cipher');
pitch
● GAFA
● http://pennystocks.la/internet-in-real-time/
● http://pennystocks.la/battle-of-internet-giants/
●
Tooling
● http://javascriptplayground.com/blog/2016/02/
the-react-webpack-tooling-problem
Security
● http://blog.gemnasium.com/post/13174058521
0/security-one-issue-many-packages
●
Handy links
● DejaVu sans Mono powerline
https://github.com/powerline/fonts/tree/mas
ter/DejaVuSansMono
● Linux
● nvm https://github.com/creationix/nvm
● Windows :
● cmder http://cmder.net/
● nvm-windows
https://github.com/coreybutler/nvm-windows

More Related Content

What's hot

Performance, Games, and Distributed Testing in JavaScript
Performance, Games, and Distributed Testing in JavaScriptPerformance, Games, and Distributed Testing in JavaScript
Performance, Games, and Distributed Testing in JavaScriptjeresig
 
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...Ortus Solutions, Corp
 
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合Kyle Lin
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorialoscon2007
 
Javascript training sample
Javascript training sampleJavascript training sample
Javascript training sampleprahalad_das_in
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF SummitOrtus Solutions, Corp
 
Best practices for joomla extensions developers
Best practices for joomla extensions developersBest practices for joomla extensions developers
Best practices for joomla extensions developersFrancesco Abeni
 
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)Kyle Lin
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
 
Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)Ran Mizrahi
 
JavaScript Core fundamentals - Learn JavaScript Here
JavaScript Core fundamentals - Learn JavaScript HereJavaScript Core fundamentals - Learn JavaScript Here
JavaScript Core fundamentals - Learn JavaScript HereLaurence Svekis ✔
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Anton Arhipov
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGiRobert Munteanu
 
Testing frontends with nightwatch & saucelabs
Testing frontends with nightwatch & saucelabsTesting frontends with nightwatch & saucelabs
Testing frontends with nightwatch & saucelabsTudor Barbu
 
Java agents for fun and (not so much) profit
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profitRobert Munteanu
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 
Agile JavaScript Testing
Agile JavaScript TestingAgile JavaScript Testing
Agile JavaScript TestingScott Becker
 

What's hot (19)

Performance, Games, and Distributed Testing in JavaScript
Performance, Games, and Distributed Testing in JavaScriptPerformance, Games, and Distributed Testing in JavaScript
Performance, Games, and Distributed Testing in JavaScript
 
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
 
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorial
 
Javascript training sample
Javascript training sampleJavascript training sample
Javascript training sample
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
 
Best practices for joomla extensions developers
Best practices for joomla extensions developersBest practices for joomla extensions developers
Best practices for joomla extensions developers
 
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
 
Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)
 
JavaScript Core fundamentals - Learn JavaScript Here
JavaScript Core fundamentals - Learn JavaScript HereJavaScript Core fundamentals - Learn JavaScript Here
JavaScript Core fundamentals - Learn JavaScript Here
 
Flash it baby!
Flash it baby!Flash it baby!
Flash it baby!
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
 
Testing frontends with nightwatch & saucelabs
Testing frontends with nightwatch & saucelabsTesting frontends with nightwatch & saucelabs
Testing frontends with nightwatch & saucelabs
 
Java agents for fun and (not so much) profit
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profit
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
Agile JavaScript Testing
Agile JavaScript TestingAgile JavaScript Testing
Agile JavaScript Testing
 

Viewers also liked

Politische Ponerologie
Politische PonerologiePolitische Ponerologie
Politische PonerologieMCExorzist
 
Muammar al-Gaddafi - Das Grüne Buch
Muammar al-Gaddafi - Das Grüne BuchMuammar al-Gaddafi - Das Grüne Buch
Muammar al-Gaddafi - Das Grüne BuchMCExorzist
 
Real History - The Bad War (english 115s)
Real History - The Bad War (english 115s)Real History - The Bad War (english 115s)
Real History - The Bad War (english 115s)MCExorzist
 
Gerd Honsik - Freispruch für Hitler - 1988 - 233S
Gerd Honsik - Freispruch für Hitler - 1988 - 233SGerd Honsik - Freispruch für Hitler - 1988 - 233S
Gerd Honsik - Freispruch für Hitler - 1988 - 233SMCExorzist
 
Thomas Goodrich - Hellstorm The Death Of Nazi Germany
Thomas Goodrich - Hellstorm The Death Of Nazi GermanyThomas Goodrich - Hellstorm The Death Of Nazi Germany
Thomas Goodrich - Hellstorm The Death Of Nazi GermanyMCExorzist
 
JavaScript - The Universal Platform?
JavaScript - The Universal Platform?JavaScript - The Universal Platform?
JavaScript - The Universal Platform?Jonas Bandi
 
Angela Merkel - Doktorarbeit
Angela Merkel - DoktorarbeitAngela Merkel - Doktorarbeit
Angela Merkel - DoktorarbeitMCExorzist
 
From Drupal 7 to Drupal 8 - Drupal Intensive Course Overview
From Drupal 7 to Drupal 8 - Drupal Intensive Course OverviewFrom Drupal 7 to Drupal 8 - Drupal Intensive Course Overview
From Drupal 7 to Drupal 8 - Drupal Intensive Course OverviewItalo Mairo
 
Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)David Neal
 
Cross-Platform Desktop Apps with Electron (CodeStock Edition)
Cross-Platform Desktop Apps with Electron (CodeStock Edition)Cross-Platform Desktop Apps with Electron (CodeStock Edition)
Cross-Platform Desktop Apps with Electron (CodeStock Edition)David Neal
 
JavaScript and Desktop Apps - Introduction to Electron
JavaScript and Desktop Apps - Introduction to ElectronJavaScript and Desktop Apps - Introduction to Electron
JavaScript and Desktop Apps - Introduction to ElectronBrainhub
 
RESTful application with Drupal 8
RESTful application with Drupal 8RESTful application with Drupal 8
RESTful application with Drupal 8Patrick Morin
 
Drupal 8: frontend development
Drupal 8: frontend developmentDrupal 8: frontend development
Drupal 8: frontend developmentsparkfabrik
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularTodd Anglin
 
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017BookNet Canada
 
Electron - Build cross platform desktop apps
Electron - Build cross platform desktop appsElectron - Build cross platform desktop apps
Electron - Build cross platform desktop appsPriyaranjan Mohanty
 

Viewers also liked (20)

JS class slides (2016)
JS class slides (2016)JS class slides (2016)
JS class slides (2016)
 
Politische Ponerologie
Politische PonerologiePolitische Ponerologie
Politische Ponerologie
 
Muammar al-Gaddafi - Das Grüne Buch
Muammar al-Gaddafi - Das Grüne BuchMuammar al-Gaddafi - Das Grüne Buch
Muammar al-Gaddafi - Das Grüne Buch
 
Real History - The Bad War (english 115s)
Real History - The Bad War (english 115s)Real History - The Bad War (english 115s)
Real History - The Bad War (english 115s)
 
Gerd Honsik - Freispruch für Hitler - 1988 - 233S
Gerd Honsik - Freispruch für Hitler - 1988 - 233SGerd Honsik - Freispruch für Hitler - 1988 - 233S
Gerd Honsik - Freispruch für Hitler - 1988 - 233S
 
Thomas Goodrich - Hellstorm The Death Of Nazi Germany
Thomas Goodrich - Hellstorm The Death Of Nazi GermanyThomas Goodrich - Hellstorm The Death Of Nazi Germany
Thomas Goodrich - Hellstorm The Death Of Nazi Germany
 
JavaScript - The Universal Platform?
JavaScript - The Universal Platform?JavaScript - The Universal Platform?
JavaScript - The Universal Platform?
 
Angela Merkel - Doktorarbeit
Angela Merkel - DoktorarbeitAngela Merkel - Doktorarbeit
Angela Merkel - Doktorarbeit
 
From Drupal 7 to Drupal 8 - Drupal Intensive Course Overview
From Drupal 7 to Drupal 8 - Drupal Intensive Course OverviewFrom Drupal 7 to Drupal 8 - Drupal Intensive Course Overview
From Drupal 7 to Drupal 8 - Drupal Intensive Course Overview
 
Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)
 
Cross-Platform Desktop Apps with Electron (CodeStock Edition)
Cross-Platform Desktop Apps with Electron (CodeStock Edition)Cross-Platform Desktop Apps with Electron (CodeStock Edition)
Cross-Platform Desktop Apps with Electron (CodeStock Edition)
 
Electron
ElectronElectron
Electron
 
JavaScript and Desktop Apps - Introduction to Electron
JavaScript and Desktop Apps - Introduction to ElectronJavaScript and Desktop Apps - Introduction to Electron
JavaScript and Desktop Apps - Introduction to Electron
 
RESTful application with Drupal 8
RESTful application with Drupal 8RESTful application with Drupal 8
RESTful application with Drupal 8
 
Drupal 8: frontend development
Drupal 8: frontend developmentDrupal 8: frontend development
Drupal 8: frontend development
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017
Audiobooks and the Sound of Sales - Noah Genner - Tech Forum 2017
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
 
Electron - Build cross platform desktop apps
Electron - Build cross platform desktop appsElectron - Build cross platform desktop apps
Electron - Build cross platform desktop apps
 
VueJS: The Simple Revolution
VueJS: The Simple RevolutionVueJS: The Simple Revolution
VueJS: The Simple Revolution
 

Similar to A History of JavaScript and Its Rise to Dominance

What's new in Java EE 7? From HTML5 to JMS 2.0
What's new in Java EE 7? From HTML5 to JMS 2.0What's new in Java EE 7? From HTML5 to JMS 2.0
What's new in Java EE 7? From HTML5 to JMS 2.0Bruno Borges
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyDavid Padbury
 
Intro to node.js - Ran Mizrahi (27/8/2014)
Intro to node.js - Ran Mizrahi (27/8/2014)Intro to node.js - Ran Mizrahi (27/8/2014)
Intro to node.js - Ran Mizrahi (27/8/2014)Ran Mizrahi
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoiddmethvin
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...GITS Indonesia
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
Why Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyWhy Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyRaimonds Simanovskis
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
 
New Features Coming in Browsers (RIT '09)
New Features Coming in Browsers (RIT '09)New Features Coming in Browsers (RIT '09)
New Features Coming in Browsers (RIT '09)jeresig
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsMike Hagedorn
 
Developing cross platform desktop application with Ruby
Developing cross platform desktop application with RubyDeveloping cross platform desktop application with Ruby
Developing cross platform desktop application with RubyAnis Ahmad
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkBob German
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Yevgeniy Brikman
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSocketsGonzalo Ayuso
 
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.jsYoann Gotthilf
 
Introduction to Vert.x
Introduction to Vert.xIntroduction to Vert.x
Introduction to Vert.xYiguang Hu
 

Similar to A History of JavaScript and Its Rise to Dominance (20)

What's new in Java EE 7? From HTML5 to JMS 2.0
What's new in Java EE 7? From HTML5 to JMS 2.0What's new in Java EE 7? From HTML5 to JMS 2.0
What's new in Java EE 7? From HTML5 to JMS 2.0
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
Intro to node.js - Ran Mizrahi (27/8/2014)
Intro to node.js - Ran Mizrahi (27/8/2014)Intro to node.js - Ran Mizrahi (27/8/2014)
Intro to node.js - Ran Mizrahi (27/8/2014)
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoid
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
Fundamental Node.js (Workshop bersama Front-end Developer GITS Indonesia, War...
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
Why Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyWhy Every Tester Should Learn Ruby
Why Every Tester Should Learn Ruby
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015
 
New Features Coming in Browsers (RIT '09)
New Features Coming in Browsers (RIT '09)New Features Coming in Browsers (RIT '09)
New Features Coming in Browsers (RIT '09)
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.js
 
Developing cross platform desktop application with Ruby
Developing cross platform desktop application with RubyDeveloping cross platform desktop application with Ruby
Developing cross platform desktop application with Ruby
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
TypeScript and SharePoint Framework
TypeScript and SharePoint FrameworkTypeScript and SharePoint Framework
TypeScript and SharePoint Framework
 
JavaScript ES6
JavaScript ES6JavaScript ES6
JavaScript ES6
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
 
Introduction to REST API with Node.js
Introduction to REST API with Node.jsIntroduction to REST API with Node.js
Introduction to REST API with Node.js
 
Introduction to Vert.x
Introduction to Vert.xIntroduction to Vert.x
Introduction to Vert.x
 

Recently uploaded

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 

Recently uploaded (20)

Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 

A History of JavaScript and Its Rise to Dominance

  • 2. Intervenant ● Yves-Emmanuel JUTARD ● Senior Developer JS full stack ● @Le Monde via Omnilog http://www.omnilog.fr/
  • 4.
  • 5. How did we end up here ? | | | | | | | | | | | | | | | | | | | | | 1990 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 early web Javascript (netscape) Apache HTTP server A history of the dynamic web http://royal.pingdom.com/2007/12/07/a-history-of-the-dynamic-web/ CGI PHP AJAX (Microsoft) JSON nginx Ruby On Rails jQuery Google Chrome + v8 AngularJS node.js Android iPhone websockets ReactJS dotcom bubble crash JavaScript Developers: The New Kings of Software http://thefullstack.xyz/javascript-developers/ Always bet on Javascript http://brendaneich.github.io/ModernWeb.tw-2015/#74 ECMA2015 ES6 CommonJS express.js REST Flash asm.js dockernpm compile-to-Jsexpress.js grunt
  • 6. Real case example : Le Monde
  • 7.
  • 8. Pitch ● accidentally brilliant ! ● Functional programming, event loop, unicode… ● extremely capable ● Ubiquitous (browser !!) JavaScript is the lingua franca of the web. Ignore it at your peril. http://blog.codinghorror.com/javascript-the-lingua-franca-of-the-web/ Why JS Will Become The Dominant Programming Language Of The Enterprise http://readwrite.com/2013/08/09/why-javascript-will-become-the-dominant-programming-language-of-the-enterprise JavaScript Is Eating The World http://arc.applause.com/2015/11/06/javascript-is-eating-the-world/ The JavaScript World Domination https://medium.com/@slsoftworks/javascript-world-domination-af9ca2ee5070 Java is WORA Javascript is WORA++
  • 9. Show me the numbers Language Trends on GitHub https://github.com/blog/2047-language-trends-on-github Stackoverflow 2015 Developer Survey - Most Popular Technologies http://stackoverflow.com/research/developer-survey-2015#tech-lang The RedMonk Programming Language Rankings: January 2016 http://redmonk.com/sogrady/2016/02/19/language-rankings-1-16/
  • 10. References ● GAFA ● Netflix - Building With Node.js At Netflix ● PayPal - Building With Node.js at PayPal ● Medium - On Building With Node.js At Medium ● LinkedIn - Building With Node.js At LinkedIn What companies in Silicon Valley are using Node.JS in production? https://www.quora.com/What-companies-in-Silicon-Valley-are-using-Node-JS-in-production What companies are using Node.js in production? https://www.quora.com/What-companies-are-using-Node-js-in-production Node.js and ES6 Instead of Java – A War Story http://www.technology-ebay.de/the-teams/mobile-de/blog/nodejs-es6-war-story
  • 11. A case on ubiquitous JS ● SPA ● APIs ● Native mobile apps ● Desktop apps ● Internet of things ● ...
  • 12. Plan 1) Baseline JS dev 2) Not ridiculous in interview 3) MVP for your angels How to Become a Better Node.js Developer in 2016 https://blog.risingstack.com/how-to-become-a-better-node-js-developer-in-2016/ A Baseline for Front-End [JS] Developers, 2015 http://rmurphey.com/blog/2015/03/23/a-baseline-for-front-end-developers-2015 10 Interview Questions Every JS Developer Should Know https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95 The Two Pillars of JavaScript https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3
  • 13.
  • 15. Language : base /* syntax demo */ let demoBool = true; let demoNumber = 1; let demoString = "hello"; let demoArray = []; let demoObject = {}; // greet someone function hello (name) { if (!name) console.log('hello, unknown!'); else if (name === 'internet') console.log('Meeeooow!'); else console.log('hello, ' + name + '!'); } hello('John'); hello('internet'); « JavaScript is the first lambda language to go mainstream. Deep down, JavaScript has more in common with Lisp and Scheme than with Java. It is Lisp in C’s clothing. This makes JavaScript a remarkably powerful language. » (Douglas Crockford)
  • 16. Language : types JavaScript data types and data structures https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures 6 data types that are primitives : ● Boolean ● Null ● Undefined ● Number ● String (immutable) ● Symbol (new ES2015) And others who are NOT : ● Object { } ● Function ● Array [ ] ● ... (later)
  • 17. Unusual ● No Integer ==> only Number (double 64 bits) ● No Char ==> only String (UTF-16) ● String delimiters : 'hello' === "hello"
  • 18. How to tame your function (1) 'ABCD'.toLowerCase() --> 'abcd' [ 1, 2 ].length --> 2 [ 1, 2, 3, 4 ].slice(2, 3) --> [3]
  • 19. How to tame your function (2) [ 'Hi', 'World' ].map(function(t) { return t.toLowerCase(); }); --> [ 'hi', 'world' ] [ 'Hi', 'World' ].map( T => t.toLowerCase() ); --> [ 'hi', 'world' ]
  • 20. Hands on ! ● Go to https://github.com/EpitaJS/js-class-2016 ● Fork the repo ● Clone your fork git clone ... ● Install dependencies npm install ● Then... npm start
  • 21. ● Google Chrome http://localhost:8000/ ● /browser/lessons/index.html
  • 22. Tools : Chrome Dev Tools Ctrl + Shift + I --> "Console" tab console.log(...) console.info(...) console.warn(...) console.error(...)
  • 23. Fend For Yourself ! http://devdocs.io/ ● JavaScript ● Lodash ● Node.js ● MDN https://developer.mozilla.org/
  • 25. Modules import "moduleX"; import <default> from "moduleX"; import _ from "lodash"; import * as name from "moduleX"; The ES6 import statement https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import export function tokenize(str) { // ... } const defaultLogger = createFancyLogger(); defaultLogger.create = createFancyLogger; export default defaultLogger; export { createFancyLogger as create }; The ES6 export statement https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
  • 26. Note about tests ● Mocha / chai ● context() / describe() / it() ● Make a phrase ! ● .only / .skip
  • 27. Demo : Chrome Dev Tools ● Display mode ● Esc ● Network ● Test responsive design ● Simulate low bandwith
  • 28. Lesson 2 Chrome Dev Tools + LocalStorage API + "by reference" ● Uncomment the line //debugger; ● Set breakpoints in tests
  • 29. Important concepts (1) ● ECMASCRIPT 2015 ● Aka ES6 ● Transpiling ● Module loader
  • 30. Language : type, casts typeof 0 // "number" typeof true // "boolean" typeof 'foo' // "string" typeof {} // "object" typeof undefined // "undefined" typeof null // "object" <- official bug typeof function(){} // "function" (object) typeof NaN // "number" wat ? typeof [] // "object" typeof new String("lalala") // "object" JavaScript tutorial : Type detection http://javascript.info/tutorial/type-detection
  • 31. Language : type, casts {}.toString ------> == != === !== +'10.1' -> 10.1 0.1 + 0.2 === 0.30000000000000004; !!undefined -> false '[object Array]' '[object Boolean]' '[object Date]' '[object Function]' ...
  • 33. Javascript : the BAD parts ● Type detection :-( ● Aggressive type casting + ++ :-( ● Var scoping, hoisting (ES5) for ... in ... :-( ● No native modules (until ES6) :-( :-( :-( :-( ● Automatic comma insertion ● 'use strict'; (ES5) ● ... Semicolons in JavaScript are optional http://mislav.net/2010/05/semicolons/ YourLanguageSucks https://wiki.theory.org/YourLanguageSucks Strangest language feature http://stackoverflow.com/questions/1995113/strangest-language-feature
  • 34. Solution (1) tooling ! ● ESLINT
  • 35. Lesson 3 bis npm run lint
  • 36. Solution (2) : lodash ;-) ● « A modern JavaScript utility library delivering modularity, performance, & extras. » ● import _ from 'lodash'; ● https://lodash.com/ ● http://devdocs.io/ _.isBoolean(foo);
  • 37. general culture (1) "The JavaScript engine race" ● Chakra (Microsoft Edge) ● JavaScriptCore (Apple Safari) ● SpiderMonkey (Mozilla Firefox) ● V8 (Google Chrome) http://arewefastyet.com/ Iphone ?
  • 38. Language : objects let duck = { name: 'Bob', weight: 1.5, actions: { eat: () => { duck.weight += 0.1 }, 'search-food': () => { duck.weight -= 0.1 }, } };
  • 39. Language : functions function hello(name) { console.log('hello, ' + name + '!'); } hello('John'); var greet = hello; greet('John'); function greetMultiple(names, greetFn) { names.forEach(greetFn); } greetMultiple([ 'Steve', 'Tony', 'Natasha' ], hello); greetMultiple([ 'Steve', 'Tony', 'Natasha' ], function (name) { console.log('Hi ' + name + '!'); }); « The quality of all code that you'll ever write, in JavaScript, relies upon the realization that JavaScript is a functional language. All functions, in JavaScript, are first-class: They can coexist with, and can be treated like, any other JavaScript object. » (John Resig)
  • 40. Language : closures function createActor(name) { return { name, say: text => console.log(name + ': ' + text) }; } const Alice = createActor('Alice'); const Bob = createActor('Bob'); Alice.say('I want to tell you a secret'); Bob.say('OK but please cipher'); How do JavaScript closures work? http://stackoverflow.com/questions/111102/how-do-javascript-closures-work
  • 41. Language : this function createActor(name) { return { name, say: function(text) { console.log(name + ': ' + text, this) } }; }
  • 42. Language : this (2) function createActor(name) { return { name, say: text => console.log(name + ': ' + text, this) }; }
  • 43. Language : this (3) ● Python guys here ? ● Default this = global ● Bind : <function>.bind(this[, param1][, param2]...) const AliceSay = Alice.say.bind(Alice); AliceSay('I want to tell you a secret'); const BobSayXXX = Bob.say.bind(Alice); BobSayXXX('OK but please cipher');
  • 44. Language : apply / call fun.call(thisArg[, arg1[, arg2[, ...]]]) fun.apply(thisArg, [argsArray]) The Power of Apply and Call http://andyjmeyers.blogspot.fr/2015/01/the-power-of-apply-and-call.html
  • 46. Now send me a PR !!!
  • 48. REM ● JS = high-level, dynamic, untyped, interpreted ● Suitable for nearly everything ● Google dev tools ! ● Functions ! New prerequisites : http://bit.ly/jsc2-pre
  • 51. Important concepts (2) ● Bootstrap ● FOUC
  • 52. 06 – Wrapping up ● Jquery let elements = sortedResults.map(entry => ` <tr> <td>${entry.token}</td> <td>${entry.occurrenceCount}</td> </tr>`); $('#results tbody').empty(); $('#results tbody:last-child').append( elements ); Debounce and Throttle: a visual explanation http://drupalmotion.com/article/debounce-and-throttle-visual-explanation Using jQuery for direct DOM manipulation
  • 53. Language : class The Two Pillars of JavaScript – Pt 1 https://medium.com/javascript-scene/the-two-pillars-of-javascript-ee6f3281e7f3 The Two Pillars of JavaScript – Pt 2 https://medium.com/javascript-scene/the-two-pillars-of-javascript-pt-2-functional-programming-a63aa53a41a4
  • 54. Language : duck typing When I see a bird that ● walks like a duck ● swims like a duck ● and quacks like a duck I call that bird a duck. James Whitcomb Riley
  • 55. Language : event loop ● From UI history = accidental genius Problems With Node.JS Event Loop http://www.juhonkoti.net/2015/12/01/problems-with-node-js-event-loop
  • 56. Hands on ! ● Go to https://github.com/EpitaJS/js-class-2016-episode-2 ● Fork the repo ● Clone your fork git clone ... ● Install required node : nvm install $(cat .nvmrc) ● Install dependencies npm install
  • 57. Node Exercise 1 Hello world cd exercises/nodejs/01-hello_world ./index.js
  • 58. Demos ● /demos/nodejs : ./index.js ● /demos/browser : npm run puer
  • 59. async intro : timeout console.log('line 1'); setTimeout(function() { console.log.bind(console, 'line 2'), }, 1000); console.log('line 3'); line 1 line 3 line 2
  • 60. async intro : timeout (continued) console.log('line 1'); setTimeout(function() { console.log.bind(console, 'line 2'), }); console.log('line 3'); line 1 line 3 line 2
  • 61. async intro : node style Async function(value, callback)... "node style callback" FetchPizza('4 fromages', function (err, pizza) { if (err) return console.log(err); eat(pizza); } ); Console.log('Waiting for my pizza...'); Error Handling in Node.js https://www.joyent.com/developers/node/design/errors
  • 62. Modules ● ES6 import _from 'lodash' Import {cloneDeep as clone} from 'lodash'; ● Node.js = CommonJS const _ = require('lodash'); const clone = require('lodash').cloneDeep; Node.js Module API https://nodejs.org/api/modules.html
  • 63. Node Exercise 2 CLI app + async 1 cd ../02-interactive ./index.js
  • 64. Node.js : 1st experience ● Async is key : built-in ! (vs. Python twisted) ● Paypal node.js app : ● Double the requests per second vs. the Java application [even when] using a single core for the node.js application compared to five cores in Java ● 35% decrease in the average response time for the same page. This resulted in the pages being served 200ms faster Twisted is an event-driven network programming framework written in Python https://en.wikipedia.org/wiki/Twisted_%28software%29 Node.js at PayPal https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
  • 65. Promises ● "Callback hell" doAsync1(function (err, res) { doAsync2(function (err, res) { doAsync3(function (err, res) { throw new Error(...); }) }) }) Managing Node.js Callback Hell https://medium.com/@wavded/managing-node-js-callback-hell-1fe03ba8ba
  • 66. Promises let p = Promise.resolve(5); p.then(data => console.log('Hello ' + data)); p.then(data => console.log('Bonjour ' + data)); p.then(data => data + 5) .then(data => console.log('+5 gives :' + data)) .catch(err => console.error('something happened !')); MDN Promise reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
  • 67. Promises let a = Promise.resolve(5); a.then(() => { // silly example, of course return Promise.resolve('hello'); }) .then(msg => console.log(msg)); MDN Promise reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
  • 68. Promises let b = Promise.resolve(5); b.then(() => { // silly example, of course throw new Error('Ouch !'); }) .then(msg => console.log(msg)) .catch(err => console.error(err.message)); MDN Promise reference https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
  • 69. Promises ● Interactive demo http://bit.ly/promisesDemoJSC2016 function getUrl () { return new Promise((resolve, reject) => { setTimeout(() => resolve("http://swapi.co/people/3"), 1500) }) } getUrl() .then(function fetchData(url) { return fetch(url) .then(function onResponse(response) { if(response.ok) return response.json(); else throw new Error('Network response was not ok.'); }); }) .then(function displayResults(data) { console.log(data) }) .catch(err => console.error(err)); We have a problem with promises http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html Promise visualization playground for the adventurous http://bevacqua.github.io/promisees/
  • 70. Node Exercise 3 Promises cd ../03-promise ./index.js ● Starwars API https://swapi.co/ ● Fetch API : go doc yourself...
  • 71. General Culture : JS Darwinism The Darwinism of small modules https://developer.atlassian.com/blog/2015/11/what-the-web-platform-can-learn-from-nodejs/
  • 72. Darwinism : example for Promises 20152015 OfficialOfficial Promise APIPromise API 20072007 Dojo.deferredDojo.deferred 20092009 Promise/A specPromise/A spec 19761976 « Promise » term« Promise » term coinedcoined 20112011 When.jsWhen.js 20102010 kriskowal/qkriskowal/q 20132013 bluebirdbluebird
  • 74. Libs How to choose the right JavaScript framework ? http://www.commitstrip.com/en/2015/09/16/how-to-choose-the-right-javascript-framework/
  • 75. Libs ? Solid ● lodash ● moment ● mocha + chai ● async (if really needed) Npm - most starred packages https://www.npmjs.com/browse/star Npm - most depended-upon packages https://www.npmjs.com/browse/depended
  • 77. Npm = node packet manager
  • 79. npm ● npm install ● npm install --save toto ● npm install --global jspm ● package.json npm https://www.npmjs.com/
  • 80. npm as an automation tool ● Tasks ● package.json ● npm run xyz "scripts": { "start": "node index.js", "puer": "puer --exclude 'node_modules'", "lint": "eslint ." }, "dependencies": { "amdefine": "^1.0.0", "async": "^1.5.2", "body-parser": "^1.15.0", "chalk": "^1.1.1",
  • 81. Node http const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200); res.end('Hello world !'); }); server.listen(8080); console.log('Listening on 8080...');
  • 82. Time to early commit !!!
  • 83. expressJS const express = require('express'); // http://expressjs.com/4x/api.html const app = express(); app.get('/', (req, res) => res.send('hello world')); app.listen(8080); console.log('Listening on 8080...'); express.js http://expressjs.com/4x/api.html
  • 84. Node Exercise 4 Express hello world cd ../04-express_hello_world ./index.js
  • 85. More ExpressJS ● Routing ● Middleware app.use((req, res, next) => { // set a custom header res.header('x-received-at', Date.now()); next(); }); app.get('/', function(req, res) { res.send('hello from app ! Try /meta /api'); });
  • 86. Node Exercise 5 Express routing cd ../05-express_routing ./index.js
  • 87. Build a simple API ● Be creative ! ● With CORS headers ! Access-Control-Allow-Origin -> * Access-Control-Allow-Headers -> Origin, X-Requested-With, Content-Type, Accept
  • 88. Time to early commit !!!
  • 89. Deploy live at Heroku !!! https://dashboard.heroku.com/apps 1)Select your app 2)Go to deploy tab 3)Connect to your GitHub fork 4)Deploy !!
  • 91. Critical knowledge No time, you'll have to read yourself about it : ● Security ● Cluster ● Domains ● ...
  • 92. Be careful ! ● Leaks ● Memory ● timeouts
  • 93. Now send me a PR !!!
  • 94. Homework ● http://brendaneich.github.io/ModernWeb.tw-20 15/ ● Parcourir ces docs : ● https://lodash.com/docs ● https://github.com/caolan/async ● https://dev.windows.com/en-us/microsoft-edge/plat form/status/?filter=f2f0000bf ●
  • 96. REM : so far... ● JavaScript basics ● JavaScript browser with jQuery ● JavaScrip server with node.js ● CLI tool ● express app : API
  • 97. Back to browser ● APIs web ● API support http://caniuse.com/ ● Modules ● Module loaders ● Client frameworks
  • 98. Hands on ! ● Go to https://github.com/EpitaJS/js-class-2016-episode-3 ● Fork the repo ● Clone your fork git clone ... ● Install required node : nvm install $(cat .nvmrc) ● Install dependencies npm install
  • 99. Démo AngularJS SPA npm run dev Localhost:7000/
  • 100. Advanced Server ● Templating ● Consolidate + dust ● Complex pipeline ● Auto-restart ● Livereload (Hot reload) ● ...
  • 101. Advanced express pipeline srcserverwebexpress-appindex.js Assign UUID // tag the requests with a unique id app.use(middlewares.assign_uuid); // identify requests rendering to a page app.use(middlewares.identify_page_reques app.use(middlewares.log_requests); // activate compression app.use(middlewares.compress_response_bo // then static files which doesn't requi // Typically this middleware will come v // to avoid processing any other middlew app.use('/', middlewares.se app.use('/client', middlewares.se app.use('/common', middlewares.se app.use('/jspm_packages', middlewares.se app.get('/config.js', (req, res) => res. // now that we've passed static data whi // add the X-Response-Time header to our app.use(middlewares.add_response_time_he // needed to read request params app.use(middlewares.parse_request.json() app.use(middlewares.parse_request.urlenc // detect and pick the best locale app.use(middlewares.detect_best_locale); app.use(routes); // fallback // 'catch all' = default / 404 for a web app.use(middlewares.handle_unmatched_wit Identify page requests Log Activate compression Serve static files Add info header Parse request Detect best locale Route...
  • 102. Templating ● Dust http://dejanglozic.com/2014/01/27/dust-js-such-templating/ <!DOCTYPE html> <head> <title>404 Not found</title> </head> <h1>Page not found.</h1> <li>Check url in the adress bar <li><a href="/">Go back to home</a> <hr /> <pre>{url}</pre> <pre>#{uuid}</pre>
  • 103. Homework : go see the sources ● /src ● /client -> client should be reloaded on change – /client/common/views ● /server -> server should be restarted on change – /server/web/express-app ● /common -> both
  • 104. Back to browser : client frameworks (Debating on merits of frameworks vs. micro-libs) https://www.reddit.com/r/javascript/comments/3v43qf/im_a_web_developer_who_uses_jquery_to_write_a/cxkl9d1 Which cat is your JavaScript framework ? http://whichcatisyourjavascriptframework.com/
  • 106. Angular demo 1 Hello word npm run dev Localhost:7000/demo-O1
  • 109. Angular demo 2 ng-repeat npm run dev Localhost:7000/demo-O1
  • 110. ng-repeat <h1 ng-repeat="name in $ctrl.names"> Hello {{name}}! </h1> « directive »
  • 112. Nice stuff ● ng-if="..." ● ng-show="..." ng-hide="..." ● ng-click="list.addItem()" ● Ng-class="['todo', 'todo-active']" ● <a ng-href="foo/{{hash}}">link1</a> <ANY ng-switch="name"> <ANY ng-switch-when="John">...</ANY> <ANY ng-switch-when="Sam">...</ANY> <ANY ng-switch-default>...</ANY> </ANY>
  • 114. $digest The $digest : ● Is repeated until stabilization ● Is automatic as long as we stay in Angular world ● Can be triggered manually : $scope.$applyAsync(() => { .... });
  • 115. Angular exercise 1 Fix the $digest ! npm run dev Localhost:7000/exercise-01 ???
  • 117. Some services : ● $log ● $q <-- promises ● $timeout ● $document ● $http $http.get() $http.post() ● ...
  • 118. Angular concepts import 'angular'; import 'angular-ui-router'; const appModule = angular.module('app_module', [ 'ui.router' ]); Here we create an Angular module named « app_module »... ...depending on this other module imported before
  • 119. Angular concepts appModule.component('layout', { template: '<div>Hello world !</div>' }); Here we create a component named « layout » inside previously created module (appModule)
  • 120. Angular concepts appModule.controller('AppController', ['$scope', function ($scope) { this.title = 'Demo 01'; $scope.$watch(function() { console.count('$digest'); }) }] ); Again, we create a « controller » named AppController The controller loads something from currently loaded modules (dependency injection)
  • 122. Trix ● Create one only module as a singleton and forget about it window._app.global_ng_module .component('toolbar', { templateUrl: 'toolbar.html' });
  • 124. Split an app : components window._app.global_ng_module .component('toolbar', { templateUrl: 'toolbar.html' }); Toolbar.html : <md-toolbar> <div class="md-toolbar-tools"> <md-button class="md-icon-button" aria-label="Settings"> <i class="material-icons md-24 md-light">menu</i> </md-button> </div> </md-toolbar>
  • 125. Angular exercise 2 Using components npm run dev Localhost:7000/exercise-02
  • 127. Important concepts (4) ● Polyfill ● Shim
  • 128. Module loader ● Jspm ● Bootstraping angular ● Angular ● Angular material ● https://design.google.com/icons/ ●
  • 129. AngularJS links Documentation : ● guides http://docs.angularjs.org/guide/ ● API ref http://docs.angularjs.org/api/ ● wiki github https://github.com/angular/angular.js/wiki/_pa ges ● cheatsheet http://www.cheatography.com/proloser/cheat-s heets/angularjs/
  • 130. AngularJS Stack ● Angular-ui-router ● https://github.com/angular-ui/ui-router ● Angular Material ● https://material.angularjs.org/latest/
  • 134. Important concepts (5) ● Minification ● Bundle
  • 135.
  • 136.
  • 138. MISC
  • 139. Dev Skill The Difference Between Excellent, Good and Bad JavaScript Developers http://thefullstack.xyz/excellent-javascript-developer/ 5 Principles that will make you a SOLID JavaScript Developer http://thefullstack.xyz/solid-javascript/
  • 140. Career What are the growth stages of a programmer ? https://www.quora.com/What-are-the-growth-stages-of-a-programmer [Startups] Reconsider https://m.signalvnoise.com/reconsider-41adf356857f What are the growth stages of a programmer ? https://www.quora.com/What-are-the-growth-stages-of-a-programmer What are the growth stages of a programmer ? https://www.quora.com/What-are-the-growth-stages-of-a-programmer
  • 141. Fun Les joies du code https://www.quora.com/What-are-the-growth-stages-of-a-programmer Dilbert http://dilbert.com/ Les joies du code http://lesjoiesducode.fr/ CommitStrip http://www.commitstrip.com/ DevOps reactions http://devopsreactions.tumblr.com/
  • 142. TOSORT
  • 143. Lesson 9 Fetching a public API Open APIs : Hacker news https://www.npmjs.com/package/hack-news Marvel API http://developer.marvel.com/ Starwars API https://swapi.co/ Instagram https://github.com/zzarcon/nodegram Weather http://openweathermap.org/appid#get
  • 144. Lesson 5 async (1) : timeouts
  • 145. Async + exceptions function find(filter, cb) { let result; // look in db.... (async) if (result) return cb(null, result); return cb(new Error('Not found !')); }
  • 146. Inheritance : prototypal ! const actor = { say: function(text) { console.log(this.name + ': ' + text); } }; function createActor(name) { return Object.assign(Object.create(actor), { name }); } const Alice = createActor('Alice'); const Bob = createActor('Bob'); Common Misconceptions About Inheritance in JavaScript https://medium.com/javascript-scene/common-misconceptions-about-inheritance-in-javascript-d5d9bab29b0a
  • 148. Inheritance ? const actor = { say: function(text) { console.log(this.name + ': ' + text); } }; function createActor(name) { return { name, say: actor.say }; } const Alice = createActor('Alice');
  • 149. Composition function say(named, text) { console.log(named.name + ': ' + text); } const Alice = {name: 'Alice'}; const Bob = {name: 'Bob'}; say(Alice, 'I want to tell you a secret'); say(Bob, 'OK but please cipher');
  • 150. pitch ● GAFA ● http://pennystocks.la/internet-in-real-time/ ● http://pennystocks.la/battle-of-internet-giants/ ●
  • 153. Handy links ● DejaVu sans Mono powerline https://github.com/powerline/fonts/tree/mas ter/DejaVuSansMono ● Linux ● nvm https://github.com/creationix/nvm ● Windows : ● cmder http://cmder.net/ ● nvm-windows https://github.com/coreybutler/nvm-windows

Editor's Notes

  1. http://rmurphey.com/blog/2015/03/23/a-baseline-for-front-end-developers-2015 cette article à succès confirme notre plan général : syntaxe et un peu d&amp;apos;ES6 un framework de test (mocha / chai) un framework client (angular, react...) un peu de node au moins un gestionnaire de module (require...) un outil d&amp;apos;automatisation (grunt, npm...) un outil de linting
  2. https://www.reddit.com/r/javascript/comments/3rb88w/ten_questions_ive_been_asked_most_more_than_once/ https://blog.risingstack.com/history-of-node-js/ https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95 http://jstherightway.org/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript
  3. 1990 early web 1995 javascript (netscape) 1995 apache HTTP server 1996 PHP 1999 AJAX (microsoft) 2001 JSON 2004 nginx 2005 ruby on rails 2006 jQuery 2008 google chrome + v8 2009 AngularJS 28 Oct 2009 underscore 0.1.0 2009 node 25 May 2012 lodash 0.1.0 https://github.com/lodash/lodash/releases?after=0.3.0 https://en.wikipedia.org/wiki/Google_Maps#History https://en.wikipedia.org/wiki/History_of_Gmail
  4. https://www.reddit.com/r/javascript/comments/3rb88w/ten_questions_ive_been_asked_most_more_than_once/ https://blog.risingstack.com/history-of-node-js/ https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95 http://jstherightway.org/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript
  5. https://www.reddit.com/r/javascript/comments/3rb88w/ten_questions_ive_been_asked_most_more_than_once/ https://blog.risingstack.com/history-of-node-js/ https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95 http://jstherightway.org/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript
  6. https://github.com/rmurphey/js-assessment
  7. https://github.com/lodash/lodash/releases/tag/4.0.0