jueves, 28 de septiembre de 2017

Ejemplo 2017-09: Envio de comandos masivo.

Resumen: 
Envio de comandos SMS a dispositivos.

Descripción: 
Este es otro ejemplo de lo bien que resulta emplear el scripting de Groovy, para automatizar las tareas.

Considerar que es necesario tener un servidor de envíos de SMS. Los dispositivos pudieran ser celulares; pero dado que son comandos de ejecución, en este caso corresponden a dispositivos de posicionamiento global (GPS).

La lista de los números y los comandos, se recuperar de un archivo .csv . Para consumir este tipo de archivos, se tiene una muy buena librería: groovycsv (https://github.com/xlson/groovycsv)

@Grab('com.xlson.groovycsv:groovycsv:1.1')

Puesto que el servidor de mensajería, expone una página web; empleamos un cliente http para enviar los comandos.

Todo en un solo archivo.

Código Fuente.- 
https://github.com/edgargs/sendcommanddevice.git

Configuración: 
Groovy 2.4.8
Java 1.8

viernes, 25 de agosto de 2017

Encuesta reunión LimaGUG

A todos los interesados en conocer sobre Groovy, te invito a participar de esta encuesta para tener nuestra primera reunión como comunidad: Aquí


Ejemplo 2017-08: API fácil con Ratpack y Groovy.

Resumen: 
Crear un API de forma rápida y sencilla con Ratpack y Groovy (DSL).

Descripción: 
Ratpack es considerada una toolkit para crear aplicaciones HTTP. Ya había leído al respecto, pero no fue hasta hace poco que revisé algunos ejemplos. El claro uso que yo recomiendo: crear API-REST. Y es una alternativa a SpringBoot.

Este ejemplo, no es productivo. Quiero decir, nadie va a implementar este código para algún proyecto. Pero sí, nos dará un alcance de su facilidad.

Empleando DSL de Groovy; se específica las acciones (GET, POST, PUT, etc), el proceso a realizar y el resultado. También, notarán que podemos agruparlos con prefix.

Para ejecutarlo, basta con escribir:
        groovy easy-api.groovy

Desde la línea de comandos, hice estas pruebas:


Ahora bien, se puede construir aplicaciones más complejas, implementando las clases Handler y Module. Enrutar a otros manejadores o consultar a una base de datos.

Ideal para microservicios.

Bibliografía: 
https://ratpack.io/manual/current/quick-start.html

Configuración: 
Ratpack 1.5.0-rc-2
Groovy 2.4.8
Java 1.8

martes, 18 de julio de 2017

Ejemplo 2017-07: Ultimo registro.

Resumen.- 
Web muestra tiempo desde último registro.

Descripción.- 
Con motivo de tener un contador que mostrara el tiempo transcurrido desde el último registro de incidencia de nuestros servicios, se construyó está simple página en Grails. La meta es acumular el mayor tiempo, como objetivo del área.

Como desubrí, no es necesario descargar todo el sdk. Pueden obtener una skeleton desde start.grails.org . Los cambios que hice son sencillos. Agregar una clase para recuperar la informacion de la base de datos. Para luego enviar este dato, a la vista que inicializará el cronómetro.

El resultado se ve así:
Notarán que el código backend (modificaciones) es muy poco. A parte de los cambios en configuraciones.


Se agregaron dos clases (groovy): controlador y dominio.

Y la página que contiene el javascript. En la cual se recibe el parámetro lastTime.

Como pueden ver, muy simple.

Código Fuente.- 
https://github.com/edgargs/cerocaidas.git

Bibliografía.- 
http://guides.grails.org/creating-your-first-grails-app/guide/index.html
https://codepen.io/Romlonix/pen/Fwsza

Configuración.- 
Grails 3.3.0.RC1
Java 1.8

lunes, 12 de junio de 2017

Ejemplo 2017-06: Cliente Multihilos.

Resumen.- 
Implementar un cliente multihilos para pruebas.

Descripción.- 
Con la finalidad de realizar pruebas de esfuerzo a un servidor de transacciones, me pidieron modificar un programa en Python (2.7). Pero decidí, por cuenta propia, hacerlo en Groovy. De todas formas, el tiempo que me hiba a tomar entender el programa y modificarlo, no podría exceder el tiempo que hacerlo en un script.

Fue la decisión correcta, porque el luego me pidieron que lea y generé información de la BBDD. Pero en este ejemplo, solo mostraré cómo implementar un script para generar multiples hilos que ejecuten un procedimiento en concreto. Intenten hacerlo en Java y notarán la diferencia en líneas de código.

Entonces, el procedimiento lo definimos en myClosure: capturar el tiempo (epoch) y determinar una velocidad entre 0 y 80. Se imprime el resultado y luego espera cinco segundos. El tiempo es definido al principio.

Se van a crear la cantidad de hilos que defina el usuario. Por defecto será diez, en caso no se indique en el comando de ejecución. La variable cantHilos, se debe anotar con @Field para poder hacerlo global en el script.

Para ejecutarlo, nos ubicamos en la carpeta del script y en línea de comandos escribimos:
groovy MultiClient 100

PD: En esta ocasión usé el editor Brackets. Debo mencionar que el "sintaxis highlight" se comporta de forma correcta.

Código Fuente.- 
https://github.com/edgargs/MultiClientScript.git

Bibliografía.- 
http://www.tothenew.com/blog/how-to-use-thread-pooling-using-groovy/
https://stackoverflow.com/questions/6305910/how-do-i-create-and-access-the-global-variables-in-groovy

Configuración.- 
Groovy 2.4.8
Java 1.8
Brackets 1.9

miércoles, 17 de mayo de 2017

Ejemplo 2017-05: Reproducir posiciones.

Resumen.- 
Mostrar el historial de ruta (GMaps) como reproductor.

Descripción.- 
Javascript, es un lenguaje que gusta mucho. Debido a que puedes dar "vida" a una página web. Pero llevaba tiempo programando para entornos de escritorio, que lo dejé de lado. A modo de actualización, este ejemplo tiene uso de algunas de las nuevas características de la versión ES6.

De las que me han sido útiles al momento de escribir el código:
  • Función Arrow 
  • let y const 
  • Template Strings
También, la funcion forEach para iterar arreglos. Aunque, pertenece a otra version (anterior), desconocía su existencia.


La función loadSteps3, tiene el código donde recuperamos las posiciones y lo cargamos a un arreglo. La página web, tiene un botón (start!) para iniciar el recorrido y otro para detenerlo.

El resultado será este:



Otra implementación que he usado, es el componente FileReader (HTML5). Para cargar el archivo de las posiciones.

¿Cómo obtener mis posiciones?

Para ello debemos exportar el historial de posiciones. Desde Google Maps (maps.google.com), en el menú hay que seleccionar la opción "Tus Rutas". Recomiendo seleccionar un rango de tiempo específico, pues la información que se genera será menor.


Luego, en el icono de la tuerca, la opción "Descargar una copia de todos tus datos". Para obtener el archivo en formato JSON, basta con seguir los pasos que se indican. El sistema enviará un email cuando el proceso termine.



Código Fuente.- 
https://github.com/edgargs/ShowGMapsTimeline.git

Bibliografía.- 
https://carlosazaustre.es/blog/ecmascript-6-el-nuevo-estandar-de-javascript/
http://stackoverflow.com/questions/3146483/html5-file-api-read-as-text-and-binary
https://www.html5rocks.com/en/tutorials/file/dndfiles/
http://www.proglogic.com/code/javascript/time/chronometer.php

Configuración.- 
ES6
Google Maps API v3
Chrome 58.0.3029.110 (64-bit)

lunes, 24 de abril de 2017

Ejemplo 2017-04: Hello World Golang con Docker.

Resumen.- 
Prueba de Golang (Hello World) en un contenedor Docker.

Descripción.- 
Golang es un lenguaje que quiero aprender. Como todo lenguaje, lo primero que haremos será crear un ejemplo rápido y básico. Pero si no quieres instalar los binarios, existe la posibilidad de descargar un contenedor Docker oficial de Golang.

En este caso, tengo una máquina virtual con Ubuntu. Anteriormente, ya había instalado Docker. Cuando ejecute el contenedor (docker run -it golang), me di cuenta que no tiene un editor de texto (vi o nano). Este ejemplo no será práctica común, pero útil para conocer los primeros pasos de Golang y Docker.

Hello.go => Saluda el nombre asignado a la variable HELLO_GO_NAME.
Dockerfile => Construye un contenedor con el archivo Hello.go, que se compila y ejecuta. Se crea la variable de entorno HELLO_GO_NAME.
build-image.sh => Copia el archivo Hello.go y ejecuta el contenedor.


Código Fuente.- 
https://github.com/edgargs/MyHelloWorldGolang.git

Bibliografía.- 
https://www.digitalocean.com/community/tutorials/como-instalar-y-usar-docker-en-ubuntu-16-04-es#paso-3-—-uso-del-comando-docker
https://golang.org/doc/code.html#Workspaces


Configuración.- 
Docker 17.04
Golang 1.8.1