Permalink

0

Introducción a Fly JS

fly

En esta oportunidad vamos a introducir Fly JS, una nueva herramienta de automatización en la misma vena de gulp, Grunt, etc., es ES6 y una interfaz más moderna.

Fly fue diseñada desde el primer día con la misión de aprovechar las nuevas características de ES6 y ofrecer una alternativa fácil de aprender con una API para plugins más simple.

Fly soporta cualquier versión de node, pero necesita polyfills para promesas y generadores si tu node es inferior a 0.12. Fly corre en Windows, Linux y OS X.

Similar a gulp, Fly favorece código sobre configuración, y te permite expresar tareas metafóricamente como un flujo de datos que tiene un origen y un destino compuesto por filtros, pero la implementación esta basada en promesas.

Fly puede ejecutar tareas en serie o paralelo.

También puedes saltar al ScreenCast.

Para empezar, vamos a proceder a instalar Fly y ejecutar una tarea sencilla:

1. Primero creamos un directorio de ejemplo:

mkdir try_fly
cd try_fly/

2. Iniciar un nuevo proyecto de node e instalamos Fly:

npm init 
...
npm i fly

3. Comprobamos que la instalación ha sido un éxito:

fly -h

Si no tienes acceso al comando fly es debido a que node_modules/.bin no se halla en tu $PATH. Puedes entonces añadir en POSIX shell PATH=$PATH:node_modules/.bin o fish set PATH $PATH node_modules/.bin o simplemente instalar fly globalmente con npm i -g fly.

4. Procedemos a escribir una tarea sencilla, por ejemplo crear una copia de un directorio:

$EDITOR flyfile.js

Puedes escribir Flyfiles en ES5/6/7 así como otros derivados de JavaScript.

ES5

exports.default = function* () {
  yield this
    .source("secret")
    .target("backup")
}

ES6

export default function* () {
  yield this
    .source("secret")
    .target("backup")
}

5. No olvidemos crear el archivo secret que queremos copiar:

echo 42 > secret

6. Chequea que todo está en orden y Fly puede leer nuestras tareas correctamente:

fly -l

Available Tasks
  default

7. Corre Fly:

fly
[23:51:52] Flying with /Users/$USER/.../try_fly/Flyfile.babel.js...
[23:51:52] Starting "default"
[23:51:52] Finished "default" in 14 ms

8. Confirma que el archivo fue copiado al directorio backup:

cat backup/secret
42

9. Fin. Mira la documentación / wiki para aprender como escribir Flyfiles más complejos :)

En la próxima entrega, vamos a explorar Fly con más profundidad e introducir el API para plugins.

Acerca de Generadores y Tareas

Tareas en Fly se describen como generadores, de la forma function*. Igual que otras funciones, una función generador corre de arriba hacia abajo, pero se pueden pausar, ceder control a otra función y posteriormente continuar.

Esta cualidad es manipulada utilizando yield y el objeto iterator que cualquier generador retorna la primera vez que es ejecutado. De modo que en escencia, un generador es un constructor de iteradores.

En Fly no es necesario utilizar estos complejos objetos iteradores, pero si utilizamos yield para ceder control a Fly y asi ejecutar tareas asíncronas sin bloquear al node. La ventaja de utilizar esta sintaxis es que podemos escribir código que parece síncrono, pero en realidad es asíncrono y también nos permite escapar del llamado callback hell.

Screencast


Autor del articulo:

Jorge Bucaran

Permalink

1

Taller: Hacking con Node.js #nodejs

Hacking con Node.js es una serie de 3 videos que conforman el taller dictado en la comunidad gr2dest, el fin de estos fue integrar y enseñar a las personas a integrar node.js en su vida cotidiana mostrando lo fácil que es desarrollar programas de red escalable orientados a procesos y/o técnicas utilizadas comúnmente en el hacking, tales como escaneo de puertos, ataques DDoS, así como también desarrollo de servidores web, paginas web sobre node.js y hasta una APIRestFul. Talleres como este se pretenden ir dictando en distintas plataformas y comunidades para el entendimiento de node.js en toda la comunidad de habla hispana.



Autor del articulo:

Luis f. Betancourt U. Desarrollador Front-end y desarrollador especializado en Node.js. Entusiasta de la seguridad informática, Fundador de NodeVE, primera comunidad de node.js en Venezuela, programador de herramientas hacking, estudiante de bachillerato y todo esto con tan solo 14 años

Twitter: @goalkeeper112

Facebook: https://www.facebook.com/Barra.Frente.Guarenas

github: https://github.com/goalkeeper112

NodeVE: https://www.facebook.com/groups/398491103624287/

Permalink

0

SmartComments, genera comentarios automáticamente al código JavaScript

Captura de pantalla 2014-04-15 a la(s) 10.16.21

Resumen

SmartComments es un módulo de Node.JS que puede ser útil a la hora de automatizar el proceso de generación de documentación, ahorrándonos horas de esfuerzo, y permitiendo que nuestra documentación siempre esté actualizada con los últimos cambios en el código fuente.

Introducción

Según estudios realizados por una prestigiosa agencia más del 90% de los programadores prefieren documentar el código fuente a escribirlo. ¿Qué?

Mi primera reacción fue pensar, ¿Es posible que el mundo haya cambiado tan rápido sin que me haya dado cuenta? Le pregunté a otros programadores del equipo si creían que el misterioso titular fuera cierto, y muy serios asintieron. Me inquietaba lo tedioso que resultaba para mí, comentar el código fuente que había escrito, sobre todo aquellas funciones que con solo leer el nombre ya se sabía lo que hacían. Además de tener que actualizar la documentación cada vez que se realizaba algún cambio.

¿Por qué yo no lo disfrutaba y otras personas si? De ese dilema salí sólo tras las carcajadas de mis compañeros de equipo… Uff, menos mal que era una broma.

 

Desarrollo

Muchos utilizamos herramientas como YUIDocs, o JSDocs, entre otras para generar la documentación de nuestros proyectos. Estas necesitan una serie de parámetros de entrada que deben ser escritos de manera explícita, por los programadores como por ejemplo:

/**

 * Descripción

 * @method Nombre de la función

 * @param Parámetro A

 * @param Parámetro B

 * @return Valor que retorna

 */

Este proceso puede resultar algo tedioso, sobre todo si tenemos en cuenta que cuando ocurre un cambio en alguno de estos parámetros, como el nombre de la función por ejemplo, tenemos que actualizar la documentación correspondiente.

También muchas veces hay partes de la documentación que pueden ser redundantes e innecesarias, es obvio que la función getNombre() devuelve el atributo nombre de la clase que la implemente, por tomar un ejemplo.

Estos fenómenos toman proporciones significativas cuando nos tenemos que hacer cargo de proyectos bastante avanzados y que tienen una escasa documentación.

Según @evangoer en la conferencia “Thinking of Documentation as Code”, al documentar el código fuente es útil hacerse 3 preguntas:

  • ¿Qué es lo que hace el código?
  • ¿Cómo es que lo hace?
  • ¿Por qué lo hace?

SmartComments, es una herramienta de código abierto escrita en JavaScript y corre sobre Node.js mediante la que se puede automatizar y acelerar así considerablemente el proceso de generación de documentación. Sobre todo respondiendo las preguntas (¿Qué? y ¿Cómo?). En la siguiente imagen se muestran las partes del ejemplo anterior que pueden ser generadas por SmartComments.

/**

 * Descripción

 * [@method Nombre_de_la_función] ——- SmartComments

 * [@param Parámetro_A] —————– SmartComments

 * [@param Parámetro_B] —————– SmartComments

 * [@return Valor_que_retorna] ———- SmartComments

 */

Básicamente solo tendríamos que poner la descripción de nuestra función. O alguna otra explicación más detallada de ser necesario.

Algunas de las funcionalidades de SmartComments son:

  • Generar la meta información necesaria para la generación de documentación a ficheros completos, de manera individual, o que se encuentren dentro de una jerarquía de directorios determinada.
  • Plugin para (sublime text), que da acceso a las funciones de la aplicación a través de este editor y que además permite generar comentarios a una selección de texto, lo cual es una funcionalidad bastante útil.
  • Personalización mediante plantillas para la generación de documentación a eventos, clases, atributos, entre otros. Y en dependencia del estilo de codificación de nuestra empresa o framework.
  • Versión online a modo de demostración que puede ser utilizada para la generación de meta información si no se desea instalar la aplicación.

Un caso de uso interesante planteado por Mr. Rich Kilgore es la utilización de SmartComments es el siguente:

  1. Se comentan se forma explícita solamente las funciones que son relevantes y se realizan los commit al control de versiones de esa manera.
  2. Usando una tarea de Grunt Se copia todo el código fuente a una carpeta temporal, y se ejecuta SmartComments para generar la meta información de las funciones que tienen menos relevancia.
  3. Luego se ejecuta YUIDocs, para generar la documentación API.

Esto ocurre de forma automatizada cada vez que se construye y se despliega el proyecto. La ventaja de esta filosofía de trabajo es que siempre la documentación API estará actualizada con los últimos cambios del código fuente.

Hay que señalar que SmartComments es solo una herramienta, y como herramienta al fin solo puede hacer (por ahora) una parte del proceso. Siempre existen casos que necesitan de la intervención humana. Sobre todo a la hora de querer expresar la verdadera semántica de determinado código.

 

Conclusiones

SmartComments es de mucha utilidad a en el proceso de generación de documentación, ya que mediante el mismo podemos ahorrarnos horas de esfuerzo, y fomentamos que nuestra documentación siempre esté actualizada con las últimas modificaciones en el código fuente. Si quieres colaborar con este proyecto open source, puedes hacerlo mediante github.

Sobre el Autor

Dariel Noel, desarrollador FrontEnd. Co-fundador de aquinama.com, thincss.github.io, SmartComments. Colaborador de web2021.blogspot.com.

Twitter: @dariel_noel

Blog Personal: darielnoel.github.io

GitHub: https://github.com/darielnoel