Slide 1

Slide 1 text

Node.js for mobile developers Bryan Irace

Slide 2

Slide 2 text

What is Node.js? A platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

Slide 3

Slide 3 text

Not a web framework or language

Slide 4

Slide 4 text

Components 4 V8 (Google's JavaScript engine) 4 libuv (platform Independent I/O bindings) 4 Core libraries (networking, modules, REPL, streams, logging) 4 OpenSSL, etc.

Slide 5

Slide 5 text

What's it good at? 4 I/O 4 Command line tools 4 Not CPU-bound work

Slide 6

Slide 6 text

Everything is asynchronous

Slide 7

Slide 7 text

JavaScript 4 Easy to learn 4 Powerful 4 Runs everywhere (you need to know it anyway...) 4 Always getting faster 4 Improving pretty rapidly 4 Lots of good libraries

Slide 8

Slide 8 text

NPM ~70K modules

Slide 9

Slide 9 text

package.json { "name": "lunchr", "version": "1.0.0", "dependencies": { "express": "3.4.3", "request": "2.27.0", "underscore": "1.6.0" } }

Slide 10

Slide 10 text

Importing var request = require('request'); var _ = require('underscore'); var qs = require('querystring'); var express = require('express');

Slide 11

Slide 11 text

Modules 4 jQuery 4 Underscore 4 Express 4 Async 4 Request

Slide 12

Slide 12 text

Express var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('Hello, world'); }); app.listen(3000);

Slide 13

Slide 13 text

Async async.parallel([ function (callback) { ywa('1519698779', 'BOOKMARK_10135', callback); }, function (callback) { play('com.tumblr', callback); } ], function (err, results) { if (err) { callback(err); } else { var ywa_data = results[0] , play_rating = results[1] // TODO } }

Slide 14

Slide 14 text

Request request({ url: 'https://rink.hockeyapp.net/api/2/apps/' + app_id + '/statistics', headers: { 'X-HockeyAppToken': '61c40d6b6fac43d880e97c0bd22b4903' } }, function (err, response, body) { if (err) { callback(err); } else { var versions = JSON.parse(body)['app_versions']; // TODO } }

Slide 15

Slide 15 text

jQuery $('tr.stathead').remove(); $('tr').removeAttr('align').removeAttr('class'); $('tr:first').find('td').replaceWith(function () { return $('') .html($(this).contents()) .attr('data-week', index_of($(this))); });

Slide 16

Slide 16 text

Underscore _.chain([1, 2, 3, 200]) .filter(function(num) { return num % 2 == 0; }) .map(function(num) { return num * num }) .value();

Slide 17

Slide 17 text

shell.js require('shelljs/global'); if (!which('git')) { echo('Sorry, this script requires git'); exit(1); } // Copy files to release dir mkdir('-p', 'out/Release'); cp('-R', 'stuff/*', 'out/Release'); // Replace macros in each .js file cd('lib'); ls('*.js').forEach(function(file) { sed('-i', 'BUILD_VERSION', 'v0.1.2', file); sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file); sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file); }); cd('..'); // Run external tool synchronously if (exec('git commit -am "Auto-commit"').code !== 0) { echo('Error: Git commit failed'); exit(1); }

Slide 18

Slide 18 text

Hosting 4 Easy to install 4 Windows 4 OS X (just a .dmg file) 4 Easy to host 4 Heroku 4 Windows Azure

Slide 19

Slide 19 text

Debugging 4 node-inspector