26
Un vistazo al futuro NODE.js Semana de la Ingenieria 2012 Universidad Tecnológica Nacional - Facultad Regional Tucumán

Code Blast 2012 - Node.js

Embed Size (px)

DESCRIPTION

Node.jsCode Blast 2012 en el marco de charlas de por la Semana de la Ingeniería de la Universidad Tecnológica Nacional, Facultad Regional Tucumán. Juan Maria Martinez Arce compartió un poco de sus investigaciones en el uso de node.js para la creación de aplicaciones de red de alta concurrencia.

Citation preview

Page 1: Code Blast 2012 - Node.js

Un vistazo al futuro

NODE.jsSemana de la Ingenieria 2012

Universidad Tecnológica Nacional - Facultad Regional Tucumán

Page 2: Code Blast 2012 - Node.js

Todo sobre @jmma

Juan Maria Martinez ArcePartner en INSIGNIA  Software Developer con experiencia en: C/C++, Delphi, Genexus, PHP, Ruby, CSS, y Javascript. Especializado en el desarrollo de aplicaciones de alto tráfico construidas con Ruby on Rails. 

Indefinida y perdidamente enamorado de Ruby y todo su glamour. Cazador furtivo de tecnologías con las que se pueda jugar un rato.

Page 3: Code Blast 2012 - Node.js

Empecemos por el principio...

De todas las tecnologías que andan dando vuelta por Internet...  

Por qué NODE.js!?

Page 4: Code Blast 2012 - Node.js

Es un tema de gustosNo podría ser de otra manera  +1 Javascript tanto server-side como client-side. +1 Construido sobre V8 (Google). +1 Es muy rápido. +1 Tiempo real / Alta concurrencia. 

+1 Se puede lograr mucho con poco. 

Buenas preguntas, merecen respuestas simples

Page 5: Code Blast 2012 - Node.js

Hasta aquí no me dijiste nada...

Falta que me digas que NODE.jses relativo.

Page 6: Code Blast 2012 - Node.js

Nos pongamos técnicos...

Qué es NODE.js?

Page 7: Code Blast 2012 - Node.js

Fue construido sobre Javascript Runtime de Google (V8).  Utiliza un modelo I/O sin bloqueos guiado por eventos. Pensado para aplicaciones de consumo intensivo de datos en tiempo real. Eficiente consumo de memoria bajo sistemas de alta carga. Gran manejo de concurrencia y balanceo de carga. 

Un mix de características que vende. 

Page 8: Code Blast 2012 - Node.js

Es NODE.js la nueva bala de plata?

Estoy seguro que aquí algo anda mal...

Page 9: Code Blast 2012 - Node.js

NODE.js y su

Lado OSCURO

Page 10: Code Blast 2012 - Node.js

El problema de ser jovenComo en toda tecnología novedosa...  :( Muy poca documentación. :( Comunidad relativamente pequeña. :( Ambiente de producción poco amistoso. :( Hay que programar en Javascript. :( Hay que programar en Javascript.

Y, sí... Tenía que tener algo malo...

Page 11: Code Blast 2012 - Node.js

Este es el ejemplo más simple que se puede lograr en NODE.js. Un server que a cada petición responde: "Hello World".Pensado para aplicaciones de consumo intensivo de datos en tiempo real. Javascript es un lenguaje extremadamente potente.Fue elegido en la implementación de NODE.js porque su comportamiento en el browseres exactamente el comportamiento que NODE.js busca implementar.

 El gran pero: Javascript no es un lenguaje simple ni mucho menos natural.Require mucho tiempo de aprendizaje y paciencia (sobre todo con los errores).

Page 12: Code Blast 2012 - Node.js

Para dimensionar mejor el concepto: Necesitamos definir la clase PetPara que simplemente nos salude, diciéndonos su nombre. Todo ese código, al ejecutarlo, produce esto:    

  Nuevamente, Javascript no es un lenguaje simple ni mucho menos natural.Require mucho tiempo de aprendizaje y paciencia (sobre todo con los errores).

Page 13: Code Blast 2012 - Node.js

Basta de pálidas!

Node.js es una masa, les mostremos por qué!

Page 14: Code Blast 2012 - Node.js

Playtime!

caso Práctico

Page 15: Code Blast 2012 - Node.js

I'm Here!Una app para dejar tu huella en esta charla. Objetivos: - Un usuario debería poder hacer check-in dejando su nombre y un mensaje. - La app debería proveer un dashboard desde donde se listen todos los checkins. - Actualizar el dashboard en tiempo real a medida que los usuarios hagan checkin. - Testear el código de la App.

Qué queremos hacer...

Page 16: Code Blast 2012 - Node.js

Qué tenemos disponibleVeamos qué tecnologías nos pueden dar una mano - CoffeeScript. Para no sufrir con Javascript.- Jade. Para simplificar las vistas en HTML.- Redis.io. Para almacenar nuestros checkins.- Express.js. Framework para aplicaciones web.- Socket.io. Para la actualización en real-time.- Foundation. Para que la app quede presentable.- Mocha. Para testear nuestro código.- Node.js. Para hacer funcionar todo lo anterior.- npm.js. Para instalar todo lo anterior.- Mucha Fé. Para que todo funcione correctamente.- Cruzar los dedos. Para que la demo funcione.

Antes de empezar...

Page 17: Code Blast 2012 - Node.js

BootstrapingInstalemos los paquetes básicos que nos hacen falta - Node.js. http://nodejs.org/La manera más simple de instalar Node.js es descargar el instalador desde la página. El mismo instalará node.js y npm. - Express.js. http://expressjs.com/Se instala de manera muy sencilla con:npm install -g express - Redishttp://redis.io/La instalación varía mucho entre cada OS. En estos casos, es muy bueno preguntarle a google.

Page 18: Code Blast 2012 - Node.js

Modelo UserNecesitamos una clase para abstraer el almacenamiento de la información que manejará nuestra app. CoffeeScript nos permite escribir código Javascript a través de una sintaxis muy similar a la de Ruby.Mas info: http://coffeescript.org/ Redis. Nos provee de una DB simple (clave, valor) para almacenar la información del modelo y recuperarla.Mas info: http://redis.io/documentation - Entendiendo el Voodoo. Este modelo necesita generar un key en el que se almacenarán todos los usuarios, identificados por un ID basado en su nombre. 

Page 19: Code Blast 2012 - Node.js

Vistas requeridasNecesitamos un formulario para postear los datos del usuario y un listado de checkins para ser mostrado en el dashboard. Jade es un template engine que nos permite escribir código HTML a través de un markup muy simple y muy elegante.Mas info: http://jade-lang.com/ Algo muy positivo. La sintaxis de Jade y CoffeeScript son muy similares, esto ayuda mucho al momento de cambiar de contexto entre un código y el otro.

Page 20: Code Blast 2012 - Node.js

Express permite implementar pequeños routers de manera muy sencilla para manejar las URLs que necesitamos. Los conceptos más complicado de asimilar son:> En Javascript no hay scope mas que el scope de la función.> Cada función que se ejecute de manera asincrónica debe proporcionar un callback.

RoutingNuestra app necesita manejar 3 URLs. Una para mostrar el formulario, otra para postear estos datos y crear el checkin y una tercera para presentar el dashboard.  

Page 21: Code Blast 2012 - Node.js

Mocha provee un framework para escribir tests que verifiquen código producido en Javascript. Es muy versátil y extremadamente veloz.Mas info: http://visionmedia.github.com/mocha/ Lo más complicado: hacerse camino a través de los errores iniciales (que son poco descriptivos)

TestingEl desarrollo guiado por tests es una práctica a la que deberíamos ajustarnos siempre. Ahorra mucho esfuerzo al momento de realizar bugfixing o pruebas de integración.  

Page 22: Code Blast 2012 - Node.js

El DashboardEl core feature de nuestra app consiste en contar con un dashboard que se actualice a medida que los usuarios vayan haciendo check in, en tiempo real en todos los clientes conectados. Socket.io provee un mecanismo para implementar enlaces en tiempo real entre un server y sus clientes corriendo entre distintos dispositivos.Mas info: http://socket.io/#how-to-use Lo que hay que entender: la implementación de Socket.io en una app requiere de soporte tanto server-side como client-side. En el server, es necesario indicar qué evento se debe propagar entre los clientes conectados. En el cliente, se debe resolver qué hacer una vez que dicho evento ha sido transmitido. 

Page 23: Code Blast 2012 - Node.js

Qué debería pasar..?Si es que Murphy no hace de las suyas. Hacer checkin. Debería poder el formulario, poner mis datos, hacer submit y mis datos deberían ser listados en el dashboard. Actualización en Tiempo Real del Dashboard. Por cada checkin que se realice, el dashboard deberá actualizarse automáticamente en cada dispositivo conectado. A ver qué resultó de todo esto.   Atención: esto podría fallar.

La hora de la verdad...

Page 24: Code Blast 2012 - Node.js

Live Demo

A jugar con ImHere

Page 25: Code Blast 2012 - Node.js

Qué hacemos ahora?Les tiro un par de ideas... Consultar dudas. Y sí... Por ahí hablo rápido y digo incoherencias. Mejor quitarse la duda ahora. Agendan mis datos por cualquier cosa.@[email protected]://github.com/jmax Nos vamos. No si antes agradecer a la UTN-FRT por el espacio y el esfuerzo para que esta charla salga así de bien. 

Y llegamos al final.

Page 26: Code Blast 2012 - Node.js

Y bueh... nos tenemos que ir.

Gracias por venir y participar.

El código de la demo app se puede descargar en: https://github.com/jmax/imhereEsta presentación estará disponible muy pronto en: http://www.insignia4u-blog.com/Ningún ser viviente fue lastimado durante la preparación de esta presentación.Cualquier similitud con hechos de la vida real es mera coincidencia.