@techmeetup edinburgh nodejs talk

18
 Tane Piper - @tanepiper An Introduction To http://nodejs.org

Upload: tane-piper

Post on 09-May-2015

2.148 views

Category:

Technology


0 download

DESCRIPTION

My nodejs presentation given on 10th November 2010

TRANSCRIPT

Page 1: @techmeetup Edinburgh nodejs talk

  

Tane Piper - @tanepiper

An Introduction To

http://nodejs.org

Page 2: @techmeetup Edinburgh nodejs talk

  

What Is Node?

nodejs (node) is a set of bindings to the V8 javascript VM. They allow developers to script

programs using asynchronous I/O in javascript.

Focused on performance and memory useage through an event loop – not threads.

Page 3: @techmeetup Edinburgh nodejs talk

  

Features of Node

Node is similar to Ruby's Event Machine Python's Twisted

Node takes the event model a bit further—it presents the event loop as a language construct instead of as a library.

Node simply enters the event loop after executing the input script. Node exits the event loop when there are no more callbacks to perform

Page 4: @techmeetup Edinburgh nodejs talk

  

Synchronous vs Asyncronous

$query="SELECT * FROM contacts";$result=mysql_query($query);

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

File file = new File("C:\\MyFile.txt");fis = new FileInputStream(file);fis.close();

Page 5: @techmeetup Edinburgh nodejs talk

  

What is the software doing?

Page 6: @techmeetup Edinburgh nodejs talk

  

x

http://www.flickr.com/photos/nationaalarchief/3675431410/

What is the software doing?

It's Waiting – Wasting cycles

Page 7: @techmeetup Edinburgh nodejs talk

  

Synchronous vs Asyncronous

db.query(”SELECT * FROM contacts”, function(err, rows) {rows.forEach(function(row) {

console.log(row);});

});

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

fs.readFile('techmeetup.txt', function(data) {console.log(data);

});

doSomethingElseWhileNotWaiting();

Page 8: @techmeetup Edinburgh nodejs talk

  

A HTTP Server in 4 lines

var http = require('http');

http.createServer(function (req, res) {  res.writeHead(200, {'Content­Type': 'text/plain'});  res.end('Hello World\n');}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

Page 9: @techmeetup Edinburgh nodejs talk

  

EventEmitter – The powerhouse of node

This should look familiar to most of you:

jQuery('.foo').click(function() {var foo = this.attr('rel');

});

Page 10: @techmeetup Edinburgh nodejs talk

  

EventEmitter – The powerhouse of node

var EventEmitter = require('events').EventEmitter;

var emitter = new EventEmitter;

emitter.on('name', function(data){    console.log(data + ' rocks');});

emitter.emit('name', 'nodejs');emitter.emit('name', 'techmeetup');

Page 11: @techmeetup Edinburgh nodejs talk

  

EventEmitter – A I/O Example

var spawn = require('child_process').spawn,    ls    = spawn('ls', ['­lh', '/usr']);

ls.stdout.on('data', function (data) {  console.log('stdout: ' + data);});

ls.stderr.on('data', function (data) {  console.log('stderr: ' + data);});

ls.on('exit', function (code) {  console.log('child proc exited with code ' + code);});

Page 12: @techmeetup Edinburgh nodejs talk

  

NPM – Node Package Manager

https://github.com/isaacs/npm

Used to install and publish your node programs.

JSON package format that It manages dependencies.

Integrates nicely with man pages

Page 13: @techmeetup Edinburgh nodejs talk

  

ExpressJS – Nodejs-powered framework

npm install express

Robust routingRedirection helpers

Dynamic view helpersApplication level view options

Content negotiationFocus on high performance

View rendering and partials supportEnvironment based configurationSession based flash notifications

Page 14: @techmeetup Edinburgh nodejs talk

  

ExpressJS - ExampleVar express = require('express');

var app = express.createServer();

app.get('/', function(req, res, next){    res.send('Hello World');});

app.post('/:name', function(req, res, next) {var name = req.params.name;

   If (!name) {     next(new Error('No name passed');   } else {     res.send(['Hello', name].join(' '));   }});

app.listen(3000);

Page 15: @techmeetup Edinburgh nodejs talk

  

Something new: node-canvas

var Canvas = require('canvas')  , canvas = new Canvas(200,200)  , ctx = canvas.getContext('2d');var fs = require('fs')  , out = fs.createWriteStream(__dirname + '/text.png')  , stream = canvas.createPNGStream();

ctx.font = '30px Droid Sans';ctx.rotate(.1);ctx.fillText("Yay Techmeet Edinburgh!", 50, 100);

stream.on('data', function(chunk){  out.write(chunk);});

stream.on('end', function(){  console.log('saved png');});

Page 16: @techmeetup Edinburgh nodejs talk

  

Something new: node-canvas

Page 17: @techmeetup Edinburgh nodejs talk

  

nodejs Community

Google Groups:nodejs – General Community

nodejs-dev – Low level development

https://github.com/ry/node/wiki/modules

Page 18: @techmeetup Edinburgh nodejs talk

  

Thank You

Any Questions?