Node.js
Code 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.
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
Code Blast 2012 - Node.js
1. Un vistazo al futuro
NODE.js
Semana de la Ingenieria 2012
Universidad Tecnológica Nacional - Facultad Regional Tucumán
2. Todo sobre @jmma
Juan Maria Martinez Arce
Partner 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.
3. Empecemos por el principio...
De todas las tecnologías que andan
dando vuelta por Internet...
Por qué NODE.js!?
4. Buenas preguntas, merecen respuestas simples
Es un tema de gustos
No 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.
5. Hasta aquí no me dijiste nada...
Falta que
me digas
que NODE.js
es relativo.
7. 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.
8. Es NODE.js la nueva bala de plata?
Estoy seguro
que aquí
algo anda
mal...
10. Y, sí... Tenía que tener algo malo...
El problema de ser joven
Como 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.
11. 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 browser
es 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).
12. Para dimensionar mejor el concepto:
Necesitamos definir la clase Pet
Para 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).
15. Qué queremos hacer...
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.
16. Antes de empezar...
Qué tenemos disponible
Veamos 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.
17. Bootstraping
Instalemos 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
- Redis
http://redis.io/
La instalación varía mucho entre cada OS. En estos
casos, es muy bueno preguntarle a google.
18. Modelo User
Necesitamos 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.
19. Vistas requeridas
Necesitamos 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.
20. Routing
Nuestra 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.
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.
21. Testing
El 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.
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)
22. El Dashboard
El 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.
23. La hora de la verdad...
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.
25. Y llegamos al final.
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.
@jmma
juan@insignia4u.com
www.insignia4u.com
http://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.
26. 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/imhere
Esta 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.