martes, 21 de febrero de 2017

NodeJS primer package.json

Comenzando un nuevo proyecto

Cuando comenzamos un nuevo proyecto usando node.js es necesario crear un archivo llamado package.json. Éste es una especie de manifiesto que a su vez contiene el listado de todas las dependencias que usará tu proyecto.

La mejor manera de gestionar los paquetes instalados localmente es crear un archivo package.json, esto nos permite:
  1. Documentar los paquetes que usa nuestro proyecto.
  2. Especificar la versión del paquete específica que usará nuestro proyecto.
  3. Permite compartir nuestras dependencias con otros desarrolladores.
 Los requisitos mínimos para crear un package.json deben ser como mínimo nombre (mínusculas y sin espacios) y versión.

Existen dos formas para iniciar un package.json:

1. Crear  uno nuevo [ npm init ]



2. Cargar uno ya existente en caso que lo haya [ npm init --yes ]
 

Una vez definido el archivo package.json, podrás agregar en él las dependencias y agregar una lista de todo lo que necesites:
"dependencies": {
  "express": "*",
  "grunt": "*",
  "bower": "*"
}
De este modo quedara:

 
Ahora procedemos a instalar los paquetes listados en package.json y sus dependencias
npm install
Se generara un directorio que contendra todos los modulos de las dependencias y paquetes "node_modules"


Tambien se puede instalar paquetes individualmente con el siguiente comando:
npm install –-save nombre_paquete_nuevo
De igual forma desisntalarlos y borrarlos del package.json:
npm uninstall –-save nombre_paquete
Si quieres instalar algo una versión especifica del paquete:
npm install algunpaquete@1.1.0
O en su defecto instalar directamente desde un repositorio en git
npm install git://github.com/blured/mipaquete.git
Otra forma de instalar paquetes es haciéndolo de forma global. Ésta es comúnmente usada para paquetes que proveen funcionalidad desde la línea de comando como son grunt, bower, yeoman, entre otros.

Tomemos como ejemplo el paquete JSHint, el cual es un analizador de código JavaScript que nos permite mostrar puntos en el que tu código no cumpla unas determinadas reglas establecidas de “código limpio“. Para instalar el mismo globalmente, ejecutamos el comando install agregando el atributo –g y con privilegio root.
sudo npm install -g jshint 


Para conocer la ruta donde se almacenan todas estas librerías con ámbito global, podemos hacer uso del comando prefix y del marcador global -g, de la siguiente manera:
sudo npm install -g jshint 
NPM permite gestionar las dependencias de tus proyectos y las versiones que necesitas. Como es sabido, los proyectos de código abierto se mueven activamente y cambian frecuentemente de versión. El package.json puede ser configurado para controlar este tipo de cambios.

Los números de versión normalmente contienen 3 elementos:
  • Versión principal cuando rompe con funcionalidades anteriores, por ejemplo: 2.0.0
  • Versión menor con nuevas características que no rompen las existentes, por ejemplo: 1.1.0
  • Lanzamiento del parche con correcciones de errores y otros cambios menores, por ejemplo 1.0.1
Si no está seguro qué versión utilizar, agregue el comodín * y ejecute el comando npm update –save, el cual veremos más adelante en este tutorial.
npm update --save
Para ver todos los paquetes instalados localmente, utilice el comando ls y añada el atributo –l para una descripción breve. Para visualizar los paquetes instalados globalmente agregue el atributo –g.
npm ls -l
Para chequear qué paquete puede ser actualizado local y globalmente, ejecute lo siguiente:
npm outdated
npm outdated -g --depth=0
 Para llevar localmente un paquete a una versión mayor a la actual, ejecute lo siguiente:
npm update
 Para realizarlo globalmente, agregue el atributo -g




lunes, 20 de febrero de 2017

Qué es NPN y como funciona

¿Qué es?

NPM (node package manager) es el gestor de paquetes javascript, es el manejador de paquetes por defecto de NodeJS por excelencia. Gracias a él, tenemos casi cualquier librería disponible a tan solo una linea de comando de distancia, permitiéndonos utilizarla en cuestión de segundos.

Desde la versión 0.6.3 de Node.js npm es instalado automáticamente con el entorno. npm se ejecuta desde la linea de comandos y maneja las dependencias para una aplicación. Escrito enteramente en JavaScript  permite a los usuarios instalar aplicaciones NodeJS que se encuentran en el repositorio.

En los ultimas años javascript ha tomado gran importancia, pasando de ser utilizado solamente para simples validaciones de formularios del lado del cliente, a ser el responsable de la puesta en marcha de servidores con NodeJS y demás.

¿Cómo funciona? 

Esta una herramienta de línea de comandos que permite gestionar todas las dependencias de una aplicación hecha en NodeJS.

Cuando usamos NodeJS rápidamente tenemos que instalar módulos nuevos (librerías) ya que Node al ser un sistema fuertemente modular viene prácticamente vacío. Así que para la mayoría de las operaciones deberemos instalar módulos adicionales. Esta operación se realiza de forma muy sencilla con la herramienta NPM.

Es un poco distinto a otros gestores de paquetes que podemos conocer, porque los instala localmente en los proyectos. Es decir, al descargarse un módulo, se agrega a un proyecto local, que es el que lo tendrá disponible para incluir. Aunque también existe la posibilidad de instalar los paquetes de manera global en nuestro sistema.


viernes, 17 de febrero de 2017

Introducción al NodeJS

Muy bien, aquí escribiendo después de algún tiempo y a petición de un viejo amigo que requeria un poco de NodeJS y como funcionaba ya que la distancia nos ha alejado le dije que retomaria el blog para ayudarle un poco con sus problemas además que mis primeros post del año. De momento les explicare ¿Qué es? ¿Cómo funciona? ¿Para qué sirve?

En el transcurso de los días iremos viendo temas con pequeños ejemplos.

¿Qué es?

NodeJS es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Node usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente esta tecnología es lo que permite trabajar con Javascript del lado del servidor. 

El ecosistema de paquetes NPM (node package manager) es el gestor de paquetes javascript de NodeJS por excelencia. (En la semana publicare una entrada de como funciona)

Node es un programa que puede hacer todo lo que hace Apache (con algunos módulos), pero que también puede hacer mucho más, al ser una plataforma JavaScript extensible desde la cual usted puede construir.

Tan importante como entender lo que Node es, tambien es importante entender lo que Node no es. Node no es simplemente un reemplazo de Apache que instantáneamente vaya a hacer más escalable su aplicación Web PHP. Eso no podría estar más lejos de la verdad. Node está creciendo extremadamente rápido, la comunidad se esta involucrando bastante y rapidamente tanto así que se está creando una gran cantidad de módulos y este crecimiento podría generar un amplio negocio muy pronto.

¿Cómo funciona?

El motor V8 de Javascript de Google está diseñado para correr en un navegador y ejecutar el código de Javascript de una forma extremadamente rápida esto permite ejecutar procesos desde el servidor abriendo un nuevo abanico de posibilidades en cuanto al mundo de desarrollo se refiere.


Node trabaja con un único hilo de ejecución que es el encargado de organizar todo el flujo de trabajo que se deba realizar. Node gestiona todas sus tareas de una forma asincrona para evitar que se pierda el número de tarea que va o si se bloquea por x o y razón no pierda el hilo.

Para poder trabajar de una forma óptima se delega todo el trabajo en un pool de threads. Este pool de threads esta construido con la librería libuv la cual dispone de su propio entorno multithread asíncrono. Por lo tanto Node.js envia todo el trabajo al pool.


Libuv realizará a través de alguno de sus threads el trabajo encomentado. Una vez que el trabajo haya sido completado libuv emitirá un evento que será recibido por Node.

Recibido el evento una función de callback se encargará de terminar de procesarlo. Por eso cuando trabajamos con Node practicamente toda la programación es asíncrona y se parece tanto a las clásicas llamadas AJAX.


A muchos programadores se les ha hecho creer que la programación orientada a objetos es el diseño perfecto de programación y que no deben usar nada más. Node utiliza lo que se conoce como modelo de programación orientado por eventos.

¿Para qué sirve?

Está extremadamente bien diseñado para situaciones en que usted esté esperando una gran cantidad de tráfico y donde la lógica del lado del servidor y el procesamiento requeridos, no sean necesariamente grandes antes de responder al cliente. 

Algunos ejemplos podrian ser:

Una API RESTful. Un servicio Web que proporcione una API RESTful toma algunos parámetros, los interpreta, arma una respuesta y descarga esa respuesta (usualmente una cantidad relativamente pequeña de texto) de vuelta al usuario. Esta es una situación ideal para Node, porque puede construirse para que maneje decenas de miles de conexiones. 
Tampoco requiere una gran cantidad de lógica y básicamente sólo busca valores de una base de datos y los reúne como una respuesta. Como la respuesta es una pequeña cantidad de texto y la solicitud entrante es una pequeña cantidad de texto, el volumen de tráfico no es alto, y una máquina probablemente puede manejar las demandas de API de incluso la API de la más ocupada de las empresas.

Fila de Twitter. Piense en una compañía como Twitter que recibe tweets y los escribe en una base de datos. Literalmente hay miles de tweets llegando cada segundo y la base de datos posiblemente no puede seguir el ritmo del número de escrituras necesarias durante los horarios pico de uso. Node se convierte en una pieza clave de la solución a este problema. 
Node puede manejar decenas de miles de tweets entrantes. Luego puede escribirlos rápida/fácilmente en un mecanismo de cola en memoria (memcached, por ejemplo), desde donde otro proceso separado puede escribirlos en la base de datos. El rol de Node en esto es reunir rápidamente el tweet y pasar esta información hacia otro proceso responsable de escribirlo.
Comparado con un servidor PHP normal que intente manejar escrituras en la base de datos misma, cada tweet podría causar una pequeña demora mientras se escribe en la base de datos, dado que el llamado de base de datos estaría bloqueando. Una máquina con este diseño sólo podría manejar 2.000 tweets entrantes por segundo, debido a la latencia de base de datos. A un millón de tweets por segundo, usted estaría hablando de 500 servidores. Node, en cambio, maneja cada conexión y no causa bloqueo, permitiéndole capturar tantos tweets como se le puedan arrojar. Una máquina nodo capaz de manejar 50.000 tweets por segundo, y usted estaría hablando de sólo 20 servidores. 

Estadísticas de videojuegos. Si usted alguna vez jugó un juego como Call of Duty on-line, algunas cosas le habrán llamado la atención inmediatamente cuando observó las estadísticas del juego, principalmente el hecho de que deben estar rastreando toneladas de información sobre el juego para poder producir tal nivel de estadísticas. Luego, multiplique esto por los millones de personas que lo juegan en cualquier momento, y tendrá una idea de la inmensa cantidad de información que se genera con bastante rapidez. Node es una buena solución para este escenario, porque puede capturar los datos que están generando los juegos, hacer un mínimo de consolidación con ellos y luego ponerlos en una fila para escribirlos en una base de datos. 
Parecería algo tonto dedicar todo un servidor a rastrear cuántas balas disparan las personas en los juegos, lo cual podría ser el límite útil si usted utilizara un servidor como Apache, pero parecería menos tonto si en lugar de ello usted pudiera dedicar un solo servidor a rastrear casi todas las estadísticas de un juego, como usted puede llegar a hacerlo con un servidor que ejecute Node.