Node.js la Anarquía Hecha negocio

Soy Karlos g Liberal

...también se me conoce como patxangas


Quienes somos


Interzonas es un paraguas donde se da cabida a proyectos y personas diversas


Distintos ritmos e implicaciones, como la vida misma

(Algunos no saben ni que son de Interzonas)


15 años desarrollando y gestionando proyectos web

Node.js


El objetivo de Node.js es proporcionar una manera fácil de construir programas de red escalables

Node.js

Node.js es inventado por Ryan Dahl en el verano del 2009 trabajando en Joyent. Ahora el proyecto lo lidera TJ 

Node.js


Runtime != Browser

Node.js

  • Node es el entorno de ejecución más librerías.
  • Basado en un conjunto de bibliotecas en C sobre el motor V8 de Google
  • Utiliza un ciclo de eventos en lugar de hilos nuevos por cada conexión (event loop).
  • Cada operación de I/O de node es asíncrona
  • Centrado en la eficiencia
  • Diseñado para la red. "Request" y "response", porque no hay nada más en la web
  • Puede manejar miles de conexiones simultáneas con una sobrecarga mínima (CPU / MEMORY) en un sólo proceso
  • Javascript del lado del servidor (SSJS)

La filosofía de Node.js

  • Experimentación
  • Kernel pequeño en funcionalidades ("small core" Do you remember XD?)
  • Componentes libremente acoplados (Loosely coupled components)


Stable is "stable" Untable moves fast

http://blog.nodejitsu.com/the-nodejs-philosophy

¿Por qué es Node.js cool? (y no hablo de rendimiento)

Interpretando libremente lo que dice Nelson Elhage en su artículo

El resultado es que la mayoría de bibliotecas Node.js funcionan con esta filosofía. Puedes elegir las bibliotecas Node.js arbitrarias y combinarlas en el mismo programa sin ni siquiera tener que preocuparte en lo que estás haciendo

http://blog.nelhage.com/2012/03/why-node-js-is-cool/


Los BENEFICIOS de node.js PARA EL NEGOCIO*





Alto Rendimiento

  • PayPal informó: el doble del número de solicitudes por segundo y reduce el tiempo de respuesta en un 35% o 200 milisegundos.
  • Viernes Negro de los servidores WalMart no pasaron más de utilización de la CPU 1% y el equipo hicieron un despliegue con 200 millones de usuarios en línea.
  • Del mismo modo Groupon re-implementado su sistema en Node.js que dio lugar a tiempos de carga que caen por la friolera de 50%.
  • Linkedin mudándose a Node.js de Rails, redujo servidores de  30-3 (reducción del 90%) y el nuevo sistema era hasta 20 veces más rápido. 

Rápida innovacion para la entrega




En un escenario competitivo,  una  respuesta a las necesidades del usuario, incorporando sus opiniones en la oferta y la entrega de actualizaciones y cambios con regularidad es esencial.

Fácil para atraer y retener el talento


Es cierto, se puede hacer cualquier cosa en Java! Pero también es cierto es que los mejores desarrolladores les gusta usar las tecnologías nuevas y más interesantes

"¿Por qué ir a Facebook y hacer PHP cuando se puede ir a PayPal y hacer Node.js" - Bill Scott - Dir UX PayPal

Fácil de modificar y mantener 


Con Node.js se desarrollan pequeños grupo de aplicaciones en lugar de una aplicación de gran tamaño, lo que permite cambios de forma más simple. 
Npm es en parte responsable de esto

Productividad


  • Node.js se programa utilizando JavaScript. Esto permite relacionar de forma más simple los equipos de frontend con los de backend, y esto se traduce en eficiencias significativas en el proceso de desarrollo.
  • PayPal midió un aumento de 2x en la productividad del desarrollador, donde se tomó la mitad del número de desarrolladores para ofrecer una aplicación en comparación con Java, y fue entregado en menos tiempo.

El futuro de Node.js es brillante

  • Eran Hammer anunció en NodeDay ( www.nodeday.com ) que Walmart planea utilizar Node.js en todos eCommerce a finales de 2014.
  • PayPal está lanzando Node.js través de su aplicación web completa y Node.js será utilizado en casi todas partes un plazo de 2 años.
  • Aunque Google no ha llegado a hablar públicamente sobre su uso de Node.js, una simple búsqueda en linkedin muestra casi 200 personas en google con Node.js en su perfi
  • Yahoo es un largo camino hacia Node.js  tienen 200 desarrolladores haciendo Node.js a tiempo completo con 800 módulos públicos y 500 privadas.

Para qué esperar pudiendo ser Asíncronos


// E/S Bloqueante
var urls = db.query("select * from urls"); //esperar
urls.each(function(url){
  var page = http.get(url); //esperar
  save(page); //esperar
});

// E/s No bloqueante, petición asincrona
db.query("slect * from urls", function(urls){
  url.each(function(url){
    http.get(url, function(page){
      save(page);  
    });  
  });  
});                

Node.js, javascript and the future

Imprescindible charla de Jeff Miccolis que con ejemplos explica por qué php y drupal es un infierno en según qué ciscunstancias y en node.js es fácil


OpenAtrium envío de notificaciones


Código php envío de correos


$addresses = array(
  'jeff@mapbox.com',
  'alex@mapbox.com',
  'eric@mapbox.com'
);
$message = 'I am writing to inform you of a...';
$count = 0;
foreach($addresses as $sucker) {
  if (mail($sucker, 'New opportunity', $message)) {
    $count++;
  };
}
echo "$count messages sent";
          

Código js envío de correos


var mail = require('mail');
var addresses = [
    'jeff@mapbox.com',
    'alex@mapbox.com',
    'eric@mapbox.com'
];
var message = 'I am writing to inform you of a...';
var count = 0;
addresses.forEach(function(sucker, i) {
    mail(sucker, 'New opportunity', message, function(err) {
        if (!err) { count++; }
        if (i == addresses.length - 1) {
            console.log(count +" messages sent");
        } 
    });
});
          

// Attempt to send email.
if (mail($sucker, 'New opportunity', $message)) {
  $count++ 
};
// Once email is sent, get the next address.
echo 'next';
          

// Attempt to send email.
mail(sucker, 'New opportunity', message, function(err) {
    if (!err) { count++; }
});
// Don't wait, get the next address NOW.
console.log('next');
          

100% asíncrono

Todo lo que sale de v8 devuelve "callback"

filesystem, network, stdio, timers, child processes


var fs = require('fs');
fs.readFile('/etc/passwd', function (err, data) {
  if (err) throw err;
  console.log(data);
});
          

var request = require('request');
request('http://example.com', function (err, resp, body) {
    if (!err && resp.statusCode == 200) {
        console.log(body);
    }
});
          

How-to: Este tweet va a sonar @ Summer of Labs (ZAWP - Bilbao) from Tabakalera on Vimeo.

Show me the code

https://github.com/karlosgliberal/tweetosc

var twitter = require('ntwitter');
    osc = require('omgosc');

var twit = new twitter({
  consumer_key: "",
  consumer_secret: "",
});
movida['broadcast'] = true; 
var sender = new osc.UdpSender('10.51.51.255', 7777, movida);
          

Show me the code

https://github.com/karlosgliberal/tweetosc

twit.stream('statuses/filter', {track:'mod8'}, function(stream) {
  stream.on('data', function (data) {
    var palabras = text.split("");
    for (var i = 0; i  palabras.length; i++) {
      var text = data.text;
      var palabras = text.split(" ")
        for (var i = 0 i  text.length i++) {
          sender.send("/osc_data", "s",  [text[i]]);
        };
        sender.send("/numero", "i",  [text.length]);
    };
  });
  stream.on("error", function (response) {
    console.log(response);
  });
});
          

NPM Node Packaged Modules



              npm install mundo
            

NPM


NPM


La importancia de NPM

Npm es la herramienta fundamental para el manejo de dependencias o módulos en Node.js


  • Publicar
  • Descubrir
  • Instalar
  • Desarrollar programas en Node.js

Relación de algunos comandos de npm

npm init //Mediante un asistente crea el fichero package.json
npm search  //busca en registro search.npmjs.org 
npm info  //obtener info del paquete 
npm outdated //busca si hay versiones instalados en el directorio actual 
npm help //Para el resto

Publicar paquete en el registro npm

Tu código tendrá que estar provisto del fichero package.json


{
  "author": "Dean McNamee ",
  "name": "omgosc",
  "version": "0.1.0",
  "repository": {
    "type": "git",
    "url": "git://github.com/deanm/omgosc.git"
  },
  "contributors": [
    {
      "name": "Oier Bravo Urtasun",
      "email": "oierbravo@gmail.com"
    }
  ],
  "main": "./omgosc"
}              
              

Publicar paquete en el registro npm


//Crear usuario
npm adduser username pass email
              

//Publicar paquete
npm publish
              
Paquetes totales: 64.682
8.235.185 descargados en el último día 
 33.419.745 descargados en la última semana

Alguna referencia

  • Express
  • request
  • socket.io
  • nodejs mongoose
  • coffee-script
  • mocha
  • ntweeter
  • backbone
  • grunt



¿Quién usa Node.js?

Nodejitsu


Cloud9


developmentseed


Yahoo


Microsoft


Linkedin





Proyectos que me miran con ojitos golosos ;)

Derby

MVC framework making it easy to write realtime, collaborative applications that run in both Node.js and browsers.


Express/KOA

Web application framework for node


Meteor

A better way to build apps


Flatiron

Build a collection of decoupled, unobtrusive tools that can operate as well in unison as they do independently. Promote code organization and sustainability by clearly separating development concerns.

Enlaces, referencias y agradecimientos

Los creadores en la sombra

La anarquía hecha negocio

By karlos g liberal

La anarquía hecha negocio

Una introducción general a nodejs, desde un punto de vista del negocio como desde aspectos más técnicos.

  • 9,765