Ferrara Linux Day 2011

    The tools of NodeJs
Evented I/O for V8 JavaScript.

Node's goal is to provide an easy way to build scalable
network programs.

Node is similar in design to and influenced by systems like
Ruby's Event Machine or Python's Twisted.

HTTP is a first class protocol in Node. Node's HTTP library has
grown out of the author's experiences developing and working
with web servers.
Event what???

Example:
var http = require('http');

setInterval(function(){
   console.log("Hello world");
}, 2000);

var host = '127.0.0.1';
var port = 12345;

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(port, host);
console.log('Server running at http://' + host + ':' + port + '/');
The first commit was:

"Autore: Ryan <ry@tinyclouds.org>   2009-02-16 01:02:00
Revisione creata da: Ryan <ry@tinyclouds.org> 2009-02-16 01:02:00
Figlio: 61890720c8a22a7f1577327b32a180a2d267d765 (add readme and initial code)
Ramo: master, remotes/origin/autoconf, remotes/origin/back_to_waf, remotes/origin/debugger,
remotes/origin/eventsource, remotes/origin/http_agent, remotes/origin/http_parser_refactor, remotes/origin/
many_listener_warning, remotes/origin/master, remotes/origin/pointer_bindings, remotes/origin/reload,
remotes/origin/v0.2, remotes/origin/v0.4, remotes/origin/writev, remotes/origin/writev2
Segue:
Precede: v0.0.1

  add dependencies"

the project is young!
Very influenced from Ruby :-)
How to install Node?

You can build https://github.com/joyent/node

Or use something like this:
- Nave https://github.com/isaacs/nave
- Nvm https://github.com/creationix/nvm
- N https://github.com/visionmedia/n
All three are bash script that manage different versions on
node in different dirs.
In node there is only one way to manage packages: npm.

There was a big change in the first version, and now npm
manages easily same packages with different versions in
different projects.

The main actor is package.json defined in the CommonJs
specifications.
{
  "author": "gpad",
  "name": "nodelinuxday2011",
  "description": "app example fo LinuxDay 2001",
  "version": "0.0.1",
  "homepage": "https://github.com/gpad/nodelinuxday2011",
  "repository": {
    "type": "git",
    "url": "git://github.com/gpad/nodelinuxday2011.git"
  },
    [...]
}
{
  [...]
   "main": "./server.js",
  "engines": {
    "node": "*"
  },
  "dependencies": {
    "formidable": "~1.0.6"
  },
  "devDependencies": {
    "nodeunit": "~0.5.5",
    "far": "~0.0.7"
  }
}
package.json How it works?

see example ... Cloud9Ide

• Create a file with info e dependencies
• Execute npm install

Install all the dependencies locally so don't conflicts with
others in other projects.

What about devDependencies?
package.json devDependencies How it works?

see example ... Cloud9Ide

npm install --production

install locally only the package necessary to deploy. The
packages listed in devDependencies are not  installed ...

Cloud9Ide on version 1.8.7 works in different way, if you execute npm
install install only "dependencies" if you execute npm install --dev
also install the devDependencies
What about testing? If you look this you will find a long list of
modules for Testing / Spec Frameworks, some examples:

Cucumber — The official JavaScript implementation of the well-
known BDD tool. Runs both on Node.js and browsers.
expresso — TDD framework by the author of JSpec
maryjane — Mock object library inspired by Mockito
node-qunit — QUnit port for nodejs. Very simple API, async testing,
good tested testing framework.
nodeunit — Simple syntax, powerful tools. Based on the assert
module. Available for node.js and the browser!
So we are at the end, how to deploy?

If you use Cloud9ide is very simple (is in beta now I can't :-)) ...,
you can deploy manually with Heroku tools in a very simple
way.

There is a new platform called Nodejitsu with all the tools
available on github.

Others use capistrano with this recipes
Other funny things??

• Jake - Similar to Rake
• Cluster - Node.JS multi-core server manager with plugins support 
• Express - High performance, high class web development for 
  Node.js
• Node-DbDeploy - A data migration tool inspired by dbdeploy
Thank YOU !!!

     Q&A

Ferrara Linux Day 2011

  • 1.
    Ferrara Linux Day2011 The tools of NodeJs
  • 2.
    Evented I/O forV8 JavaScript. Node's goal is to provide an easy way to build scalable network programs. Node is similar in design to and influenced by systems like Ruby's Event Machine or Python's Twisted. HTTP is a first class protocol in Node. Node's HTTP library has grown out of the author's experiences developing and working with web servers.
  • 3.
    Event what??? Example: var http= require('http'); setInterval(function(){ console.log("Hello world"); }, 2000); var host = '127.0.0.1'; var port = 12345; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Worldn'); }).listen(port, host); console.log('Server running at http://' + host + ':' + port + '/');
  • 4.
    The first commitwas: "Autore: Ryan <ry@tinyclouds.org> 2009-02-16 01:02:00 Revisione creata da: Ryan <ry@tinyclouds.org> 2009-02-16 01:02:00 Figlio: 61890720c8a22a7f1577327b32a180a2d267d765 (add readme and initial code) Ramo: master, remotes/origin/autoconf, remotes/origin/back_to_waf, remotes/origin/debugger, remotes/origin/eventsource, remotes/origin/http_agent, remotes/origin/http_parser_refactor, remotes/origin/ many_listener_warning, remotes/origin/master, remotes/origin/pointer_bindings, remotes/origin/reload, remotes/origin/v0.2, remotes/origin/v0.4, remotes/origin/writev, remotes/origin/writev2 Segue: Precede: v0.0.1 add dependencies" the project is young!
  • 5.
  • 6.
    How to installNode? You can build https://github.com/joyent/node Or use something like this: - Nave https://github.com/isaacs/nave - Nvm https://github.com/creationix/nvm - N https://github.com/visionmedia/n All three are bash script that manage different versions on node in different dirs.
  • 7.
    In node thereis only one way to manage packages: npm. There was a big change in the first version, and now npm manages easily same packages with different versions in different projects. The main actor is package.json defined in the CommonJs specifications.
  • 8.
    { "author":"gpad", "name": "nodelinuxday2011", "description": "app example fo LinuxDay 2001", "version": "0.0.1", "homepage": "https://github.com/gpad/nodelinuxday2011", "repository": { "type": "git", "url": "git://github.com/gpad/nodelinuxday2011.git" },     [...] }
  • 9.
    {   [...] "main": "./server.js", "engines": { "node": "*" }, "dependencies": { "formidable": "~1.0.6" }, "devDependencies": { "nodeunit": "~0.5.5", "far": "~0.0.7" } }
  • 10.
    package.json How itworks? see example ... Cloud9Ide • Create a file with info e dependencies • Execute npm install Install all the dependencies locally so don't conflicts with others in other projects. What about devDependencies?
  • 11.
    package.json devDependencies How itworks? see example ... Cloud9Ide npm install --production install locally only the package necessary to deploy. The packages listed in devDependencies are not  installed ... Cloud9Ide on version 1.8.7 works in different way, if you execute npm install install only "dependencies" if you execute npm install --dev also install the devDependencies
  • 12.
    What about testing?If you look this you will find a long list of modules for Testing / Spec Frameworks, some examples: Cucumber — The official JavaScript implementation of the well- known BDD tool. Runs both on Node.js and browsers. expresso — TDD framework by the author of JSpec maryjane — Mock object library inspired by Mockito node-qunit — QUnit port for nodejs. Very simple API, async testing, good tested testing framework. nodeunit — Simple syntax, powerful tools. Based on the assert module. Available for node.js and the browser!
  • 13.
    So we areat the end, how to deploy? If you use Cloud9ide is very simple (is in beta now I can't :-)) ..., you can deploy manually with Heroku tools in a very simple way. There is a new platform called Nodejitsu with all the tools available on github. Others use capistrano with this recipes
  • 14.
    Other funny things?? •Jake - Similar to Rake • Cluster - Node.JS multi-core server manager with plugins support  • Express - High performance, high class web development for  Node.js • Node-DbDeploy - A data migration tool inspired by dbdeploy
  • 15.