Top News



Del creador de NodeJS en 2009 ahora llega Deno una versión mejorada basado también en el engine V8 de Google.  Al proyecto Node  le ha costado adaptarse a los cambios del lenguaje, las promesas por ejemplo. Deno tiene una arquitectura más moderna, con mejor uso de estándares y un mejor manejo de dependencias (no usa npm).

Para aumentar la seguridad, el enlace alrededor del motor V8 está escrito en el lenguaje Rust, lo que evita muchas vulnerabilidades que surgen debido al trabajo de bajo nivel con la memoria, como acceder a un área de memoria después de que se libera, hacer referencia a punteros nulos y salir de los límites del búfer.

Además, DENO, a diferencia de Node, siempre muere por errores no detectados. Así se evita que la ejecución continúe provocando resultados no previsibles.

Para instalar Deno basta con ejecutar el siguiente script

Linux:

curl -fsSL https://deno.land/x/install/install.sh | sh

Windows

iwr https://deno.land/x/install/install.ps1 -useb | iex

Mas información sobre Deno en https://deno.land/

Autor: Erwin Lobos




Se han detectado ciertos paquetes maliciosos en el repositorio de módulos para Node NPM, estos paquetes al parecer son réplicas de paquetes famosos, pero con modificaciones para robar datos de variables de entorno de las aplicaciones en donde se implementen.

Este es un listado publicado de los paquetes encontrados por el momento, si se dan cuenta tienen nombres similares a los paquetes reales.

babelcli - v1.0.1 - Babel CLI for Nodejs
crossenv - v6.1.1 - Run scripts that set and use environment variables across platforms
cross-env.js - v5.0.1
d3.js - v1.0.1 - d3.js for Nodejs
fabric-js - v1.7.18 - Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
ffmepg - v0.0.1 - FFmpeg for Nodejs
gruntcli - v1.0.1 - Grunt CLI for Nodejs
http-proxy.js - v0.11.3 - Node.js proxy tools
jquery.js - v3.2.2-pre - jquery.js for Nodejs
mariadb - v2.13.0 - A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.
mongose - v4.11.3 - Mongoose MongoDB ODM
mssql.js - v4.0.5 - Microsoft SQL Server client for Node.js.
mssql-node - v4.0.5 - Microsoft SQL Server client for Node.js.
mysqljs - v2.13.0 - A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.
nodecaffe - v0.0.1 - caffe for Nodejs
nodefabric - v1.7.18 - Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
node-fabric - v1.7.18 - Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
nodeffmpeg - v0.0.1 - FFmpeg for Nodejs
nodemailer-js - v4.0.1 - Easy as cake e-mail sending from your Node.js applications
nodemailer.js - v4.0.1 - Easy as cake e-mail sending from your Node.js applications
nodemssql - v4.0.5 - Microsoft SQL Server client for Node.js.
node-opencv - v1.0.1 - OpenCV for Nodejs
node-opensl - v1.0.1 - OpenSSL for Nodejs
node-openssl - v1.0.1 - OpenSSL for Nodejs
noderequest - v2.81.0 - Simplified HTTP request client.
nodesass - v4.5.3 - Wrapper around libsass
nodesqlite - v2.8.1 - SQLite client for Node.js applications with SQL-based migrations API
node-sqlite - v2.8.1 - SQLite client for Node.js applications with SQL-based migrations API
node-tkinter - v1.0.1 - Tkinter for Nodejs
opencv.js - v1.0.1 - OpenCV for Nodejs
openssl.js - v1.0.1 - OpenSSL for Nodejs
proxy.js - v0.11.3 - Node.js proxy tools
shadowsock - v2.0.1 - A tunnel proxy that help you get through firewalls
smb - v1.5.1 - A Pure JavaScript SMB Server Implementation
sqlite.js - v2.8.1 - SQLite client for Node.js applications with SQL-based migrations API
sqliter - v2.8.1 - SQLite client for Node.js applications with SQL-based migrations API
sqlserver - v4.0.5 - Microsoft SQL Server client for Node.js.
tkinter - v1.0.1 - Tkinter for Nodejs
Para protegernos de estos paquetes, hay que investigar los módulos que integramos, revisemos la cantidad de instalaciones y la calificación que tienen, si a algo le vemos muy pocas instalaciones sospechemos, y veamos si no hay nombres similares.

Lamentablemente NPM no tiene algún mecanismo de seguridad para prevenir esto (por el momento) y tenemos que estar alertas.

Fuente

Linux Foundation realizó su encuesta anual para conocer el estado actual de las implementaciones de Node.js en el mundo. Con más de 8 millones de instancias de Node funcionando actualmente, 3 de cada 4 usuarios están pensando aumentar el uso de esta tecnología en sus empresas, muchos de ellos están aprendiendo.

La encuesta revela que la mayoría de developers están utilizando node para ambientes Full-Stack, y el 73% de ellos están construyendo backend (incluyendo APIs).

La mayoría de empresas están implementando sus aplicaciones Node en la nube de Amazon AWS para producción y on-premise para desarrollo.


Los beneficios que los usuarios le han visto a esta tecnología son: productividad, reducción de costos y tiempos de desarrollo, mejora de rendimiento de las aplicaciones.


Node encabeza la encuesta de popularidad realizada por Stack Overflow este año




Puedes ver la encuesta completa en el siguiente link


Una de las grandes bondades de Node es el Event Loop, el proceso que se encarga de recibir las peticiones, meterlas en una cola para su ejecución, mantener el control de los callbacks y despacharlas, esto ocupando un solo thread, de una manera muy eficiente.

El mejor ejemplo que he utilizado para explicar el event loop y la programación asíncrona, es el siguiente código:

console.log('Iniciando app');


setTimeout(() => {
console.log('Primer callback');
}, 2000);


setTimeout(() => {
console.log('Segundo callback');
}, 1000);


console.log('Fin');


En el código vemos 4 instrucciones, un log al iniciar la app, un log que se imprime después de dos segundos, otro log que se imprime después de un segundo y por último otro log final.

En la programación que estamos acostumbrados a utilizar el orden de la impresión de logs sería la siguiente:

Iniciando app
Primer callback (después de esperar 2 segundos)
Segundo callback (después de esperar 1 segundo)
Fin

Pero en Node el eventloop se va encargando de ir despachando los eventos que vayan terminando, por lo que la salida del log sería

Iniciando app
Fin
Segundo callback
Primer callback

Otro punto importante es que en una aplicación tradicional el tiempo completo de ejecución hubiera sido de 3.x segundos mientras que con Node.js el tiempo sería de 2.x segundos al ejecutarlo.

Tal como mencionabamos las aplicanciones Node se ejecutan sobre un único thread, en ese thread el Event Loop que es manejado por una librería llamada Libuv, crea por default un thread pool con 4 threads para manejar el trabajo asíncrono, pero los sistemas operativos proveen interfaces asíncronas para varios tipos de tareas de I/O, entonces cuando es posible utiliza esas interfaces para no usar el thread pool. El event loop es un proceso formado por un conjunto de fases con tareas especificas que son ejecutadas usando round-robin.



En este video, Bert Belder explica muy bien como funciona el Event Loop y todo lo que tenemos que saber al respecto



Más información


La nueva versión 8 de Node publicada a finales de mayo trae muchas mejoras y nuevos features, el performance ha mejorado significativamente.

Node.js 8 viene con la nueva versión 5.8 del motor de javascript V8, responsable del alto performance gracias al nuevo pipeline de compilación TurboFan + Ignition que mejora el consumo de memoria y acelera el inicio.

NPM version 5.0.0


NPM se actualiza para incluir funcionalidades que Yarn cubría mejor, mejorando el manejo de dependencias, consistencia entre ambientes creando un lockfile automáticamente y grabando automáticamente (--save). Las tareas comunies como instalación de paquetes y actualizaciones son hasta cinco veces más rápidas.

AsyncHooks API


Los AsyncHooks permiten a los developers monitorear y hacer tracking del state a traves de las operaciones asíncronas, permitiendo mejorar el diagnóstico de problemas.

N-API


La esperada Node.js API (N-API) ha sido agregada como experimental en esta versión, esto eliminará problemas en cambio de versiones con módulos nativos, actualmente cada vez que sale una nueva versión de Node los creadores de paquetes tienen que actualizar estas dependencias.

Zero-Filling Buffers


El constructor new bugger(num) ahora rellena con zeros por default para prevenir problemas de seguridad.

Manejo de errores


Node ahora asigna códigos a los errores generados para tipificación

Mejoras en soporte de Promesas


Node.Js ahora incluye una nueva APi util.promisify() que permite a los developers hacer wrap a callback APIs para retornar Promesas con poco overhead, usando una API estandar.

File System


La clase fs.SyncWriteStream ha sido deprecada
La interface fs.read() ha sido eliminada

HTTP


Soporte mejorado para Agentes userland
Los cookies de headers ahora son concatenados en un único string
httpResponse.writeHeader() ha sido deprecada
Nuevos métodos para acceder los headers HTTP han sido agregados al OutgoingMessage

Stream

Soporte para las apis final(), destroy() y _destroy()

TLS


La opción rejectUnauthorized será true por default

URL


Soporte para WHATWG URL parser

Más información


Vamos a empezar este blog explicando Qué es NodeJS? Para que se usa? Quién lo usa? y Porqué deberíamos aprender Node.JS?

Node.JS es un runtime environment basado en el motor V8 que Google creó para Chrome, que nos permite ejecutar código javascript en el servidor ya no solo en el navegador. Permite crear aplicaciones muy rápidas y eficientes, con un modelo de I/O sin bloqueos gracias a la programación asíncrona, orientada a eventos, liviano y muy escalable.

Node.JS se está convirtiendo en el lenguaje de programación favorito de los developers, es fácil de aprender, ya muchos developers están familiarizados con javascript. Las universidades están empezando a enseñar sus cursos empleando Node reemplazando a Java.

Cuenta con el respaldo de una gran comunidad de developers que contribuyen a mejorarlo cada día, su repositorio de módulos NPM tiene miles de paquetes reutilizables que facilitan y aceleran el desarrollo.