jueves, octubre 01, 2015

Como estirar campos de manera dinamica con el contenido en ur reporte de jasper

Ejemplo:


isStretchWithOverflow="true"
> stretchType="RelativeToTallestObject"
x="220" y="0" width="120" height="20" />


<![CDATA[ $F{referencia} ]]>


Basicamente si queremos que el campo (textField) se estire de acuerdo al tamaño del contenido usamos la propiedad:
isStretchWithOverflow="true"
>
Pero si solo queremos que se ajuste este elemento para estar a la par de la altura del elemento más alto en la banda usamos:
stretchType="RelativeToTallestObject"

viernes, agosto 28, 2015

Sobre meditación

Si realmente queremos aprender una habilidad importante, necesitamos perseverancia, paciencia y un ejercicio sistemático.

Vipassana "ver las cosas como realmente son".

La atención plena nos ayuda a desarrollar la quietud en medio de la actividad.

La atención plena nos enseña a estar más despiertos y presentes ante todo lo que nos encontremos.

Meditar significa contemplar de un modo amable y bondadoso nuestra vida y descubrir la manera de despertar y liberarnos. Todos albergamos numerosas ideas y creencias sobre nosotros mismos. Son muchas las historias que contamos acerca de quiénes somos, lo que queremos, nuestra inteligencia y nuestra amabilidad.

Pero éstas, con mucha frecuencia no son más que ideas limitadas y ajenas que acabamos asumiendo e interiorizando acríticamente como propias. Meditar es descubrir nuevas posibilidades y despertar la capacidad de vivir de un modo más sabio, amoroso, compasivo y pleno.

Si te gusta lo que estas leyendo intenta con:

Kornfield, Jack: Meditación para principiantes. Ver en Amazon

martes, agosto 18, 2015

Como generar un resumen de mensaje (hash) con openssl

Los message digest o resumen de mensaje o hash, como se los conoce comúnmente sobre una cadena de bytes nos permiten calcular un resumen sobre un mensaje el cual nos puede servir para validar la no modificación del mensaje, por ej. si bajamos un archivo de internet, que se haya descargado correctamente o que no haya sufrido una modificación.

Conociendo el tamaño del mensaje y su hash, es posible verificarlo, ya que los algoritmos para la generación del hash garantizan que es muy difícil generar otro mensaje del mismo tamaño y que al calcular el hash este sea el mismo del mensaje original.

Hay diferentes algoritmos para obtener el hash, entre los más conocidos: md5, sha1, sha256, sha512.

Mediante el uso de openssl podemos generar el hash para un mensaje o cadena de texto:

ejemplos:

echo -n "este es el mensaje" | openssl dgst -md5
273413cf8c45230add58d6f4ca0ab467

echo -n "este es el mensaje" | openssl dgst -sha256
ccf7dcbc6bac2e645f895440b9f0be1c6083ba9299ef352bc97514bb5988dd87

echo -n "este es el mensaje" | openssl dgst -sha512
10ffd258a8dfd95bd97cd6d8a336dc906d3401df6476fd211a55e89096f075a39c8e4cd42c5bd3151ba465194e2b13b918cd33057b0c346139e9d428113fedaa

Lo que se imprime es la representación hexadecimal de los bytes que forman el hash, pero si necesitamos guardar a un archivo el valor en binario de dicho resultado o pasarlo en binario a otro programa es posible hacerlo mediante el flag -binary

echo -n "este es el mensaje" | openssl dgst -sha256 -binary > sha256.bin

El comando anterior manda el hash al archivo sha256.bin, dado que 256 bits / 8 = 32 bytes, podemos comprobar que el archivo pesa 32 bytes

ls -lh sha256.bin
-rw-r--r-- 1 user user   32 2015-08-18 18:23 sha256.bin

De la misma forma podemos calcular el hash a un archivo, por ejemplo:

md5sum iprules.sh 
726c99a062d2dc23e8b836c2221ef25c  iprules.sh

cat iprules.sh | openssl dgst -md5
726c99a062d2dc23e8b836c2221ef25c

sábado, julio 18, 2015

Formas de mejorar tu productividad

  • Eliminar compromisos que tenemos por solo alimentar el ego. Por ejemplo si te tardas 30 minutos arreglando tu peinado o escogiendo tu ropa, es tiempo que puedes aprovechar más productivamente, a menos que tu trabajo este completamente basado en tu imagen.

  • No te enfoques en mejoras marginales que requieren un esfuerzo muy grande, por ejemplo si ya eres rápido escribiendo en el teclado, ya no gastes horas practicando para ser más rápido cuando ya aunque inviertas horas solo podrás obtener unos cuantos tipeos más, es decir cuando el rendimiento marginal es muy poco es mejor aprovechar mejor tu tiempo, ya no vas a lograr mucho extra y si vas a gastar mucho esfuerzo.

  • Utiliza la regla del 20-80, es decir por ejemplo si tienes que aprender una tecnología, aprende ese 20% que te permite realizar el 80% de las tareas.

  • Aprende a decir no, es decir no aceptes más trabajo del que puedes realizar en la jornada laboral, cualquiera puede tomar más trabajo pero esto significa sacrificar el tiempo personal para no quedar mal.

  • Establece bloques de tiempo para realizar una actividad, por instinto, cuando realizamos una actividad dejamos que tome todo el tiempo que sea necesario, pero hay actividades que pueden tomar todo el tiempo disponible y no terminarse, ya que son flujos casi ilimitados, por ejemplo revisar las novedades en la redes sociales, así que la mejor forma es definir una ventana de tiempo para dedicar a esta actividad, por ejemplo establece 15 minutos al día para dedicar a consultar las redes sociales y solo dedica ese tiempo, no hagas trampa.
En concreto fíjate ventanas de tiempo para realizar una actividad, si no se concluye en dicho tiempo, interrumpe y toma tiempo para revaluar prioridades y decidir si asignar más tiempo o descartar la conclusión.

  • Establece una rutina, por ejemplo dejar siempre las llaves y la cartera en el mismo lugar, preparar la ropa del día siguiente, desayunar y dirigirte a tu trabajo de manera estable y predecible te permite no generar estrés innecesario por ir con el tiempo medido.

  • Analiza que actividades te permiten generar ingresos, y dedica más tiempo a ellas, paga a otros para realizar las actividades que no te generan ingresos, así ellos pueden usar el dinero y tu el tiempo, por ejemplo paga alguien para que corte el pasto, lave los platos sucios, saque la basura o ponga la ropa sucia a lavar, o incluso haga la mecánica de tu coche.

  • Actividades pequeñas es mejor realizarlas de inmediato, por ejemplo agendar un evento o pagar la tarjeta de crédito, es mejor no postergar actividades que toman unos minutos pero que acumuladas generan inestabilidad mental.

  • Enfócate en una sola actividad a la vez, sobre todo cuando es compleja, el multitasking reduce la productividad ya que hay una pérdida de tiempo y energía para cambiar de contexto, es algo similar a como funciona el LASER, toda la energía se enfoca en la misma dirección aunque solo sea luz, pero la diferencia es que esta va en todas direcciones y no tiene el mismo efecto.


miércoles, julio 08, 2015

confusiones del lenguaje

ti nunca lleva acento

  • Compre un pastel para ti
  • Hoy por ti, mañana por mi
  • Muero por ti

tu ó tú

  • tu camisa
  • tu casa
  • Alguien como tú
  • Tú eres especial
  • Tienes que hacerlo tú

haz ó has

  • haz la tarea
  • haz lo que tengas que hacer
  • siempre has llegado tarde
  • a veces has llegado a tiempo
  • siempre has sido bueno programando
  • siempre has querido leer El Quijote

ves o vez

  • fijate, ¡que no ves!
  • miras y no ves
  • si ves bien por la ventana, encontrarás lo que buscas<1i>
  • esta es la última vez que te dejo entrar
  • se me llenan los ojos de lágrimas cada vez que la veo
  • érase una vez el hombre

jueves, julio 02, 2015

¿quieres saber a que velocidad puedes escribir?

Y ver tus resultados como en la imagen:

Prueba tu velocidad con el siguiente link

http://bit.ly/1GRhUb0

jueves, junio 25, 2015

Como diagnosticar problemas de red en linux

1. Verificar la conectividad FISICA, generalmente el router tiene un LED y la tarjeta de red de la máquina también, debemos verificar que se encuentren encendidos ambos. A veces hay dos LEDs uno naranja que indica están conectados y uno verde que se prende cuando se están transmitiendo datos.

2. Verificar la configuración de red, es decir tenemos que tener una dirección IP que nos ha sido asignada automaticamente por el router, para ello abrimos una linea de comandos ¿como abrir una línea de comandos? En la linea de comandos usamos el comando ifconfig para ver la configuración de red, puede que en algunos casos no encuentre el comando porque no este en el PATH pero podemos ejecutarlo dando toda la ruta completa /sbin/ifconfig.

A continuación un ejemplo de la salida del comando, lo ejecutamos con el parametro -a para que muestre todas las interfaces de red, aún cuando no estén en uso:

/sbin/ifconfig -a

A primera vista parece algo dificil de descifrar, pero no es así, primero antes que nada hay que entender como se llaman en linux las interfaces de red. Hay de varios tipos:

eth
Esto hace referencia a las tarjetas que se conectan por cable de red ethernet
wlan
Estas hacen referencia a las tarjetas de red inalambricas para conectarnos al wifi
lo
Esta es una interface de red simulada para cuando el sistema hace uso de la red pero se comunica dentro del mismo equipo, consigo mismo
tun
Estas son interfaces para hacer tuneles
tap
Estas son interfaces para hacer puentes

En todos los casos el identificador de la tarjeta esta dado por los nombres anteriores y un número, así la primera tarjeta ethernet es eth0 y la segunda eth1 y si tenemos una tercera eth2 y así sucesivamente.

La primera tarjeta de red inalambrica se llama wlan0

Luego la siguiente información nos muestra:

Como abrir una linea de comandos en linux

Existen varios métodos como los de menu que no voy a explicar ya que son visuales, aquí explico los métodos por teclado.

En primer lugar hay que saber que hay varios emuladores de terminal y que podemos usar cualquiera de ellos indistintamente, todo depende de tus gustos y preferencias, a final de cuenta estamos corriendo un interprete de comandos dentro de esa ventana, del cual también hay varios, pero por lo general estamos corriendo el famoso BASH

Para abrir el programa emulador de terminal en la mayoría de las distrubiciones mediante las teclas Alt+F2 nos muestra una mini linea de ordenes, como se muestra en la foto:

Dentro de las opciones que tenemos se encuentran las siguientes más utilizadas:

xterm
Esta es la más tradicional, fue de las primeras en existir, pero una ventaja es que es bastante ligera, aunque no hace monerias graficas como las más nuevas (fondo transparente o cambiar tipo de letra). Sin embargo si podemos ajustar el tamaño de la letra.
gnome-terminal
Esta es la que hicieron especificamente para el manejador de ventasas gnome, pero se puede usar con cualquier manejador de ventanas.
konsole
Esta se hizo para el manejador de ventanas KDE pero se puede usar en cualquiera
terminator
Esta tiene la particularidad de que podemos dividirla y tener más de un interprete de ordenes en la misma ventana, y mandar comandos a solo uno o varios, útil para cuando tenemos que ejecutar el mismo procedimiento en varios equipos, o para consultar la documentación en una mitad y dar comandos en la otra.

Una vez elegida una, escribimos el nombre y presionames ENTER o el boton EJECUTAR, (puede que no tengamos instaladas todas en nuestro sistema pero se pueden añadir facilmente mediante el gestor de paquetes de linux), podemos probar con cada una para saber cuales tenemos.

Por ejemplo les muestro a continuación una imagen del xterm, mi favorita

lunes, junio 22, 2015

Hide Bash command history

Como controlar el historial de comandos de bash.

Bash guarda la historia de comandos en el archivo .bash_history ubicado en nuestro $HOME, pero ese archivo se escribe hasta el exit del bash.

Es posible mandar a escribir prematuramente el archivo de history mediante

history -w

También es posible limpiar completamente el buffer de comandos en la sesión de bash actual:

history -c

Dentro de bash podemos consultar la historia mediante el comando history la cual incluye tanto los comandos del archivo como los que hemos dado en la sesion actual.

Como corolario de lo anterior si tenemos varias sesiones de bash abiertas la salida del comando history difiere entre ellas

La variable de entorno HISTFILE indica al bash en que archivo guardar el history al salir.

Una forma de evitar se guarden los comandos en el archivo history es cambiar la variable por ejemplo mandarlo al dispositivo nulo o eliminar la variable

HISTFILE=/dev/null

O eliminando la variable

unset HISTFILE

Esto también lo podemos usar cuando queremos realizar un procedimiento especifico y documentar todo lo que hemos hecho, si todo se realiza en una única sesión de bash, entonces podemos mandar los comandos ejecutados a un archivo de registro, esto funcionara bien siempre y cuanto lo hagamos antes del exit del bash:

HISTFILE=comandos_proceso_X

Si lo que deseamos es borrar un comando especifico del history, lo podemos hacer con el número con el que aparece en la salida del comando history por ejemplo borrar el comando 325

history -d 325

El número de lineas que el archivo de historia guarda esta determinado por la variable de entorno HISTFILESIZE

El número de lineas cargadas en el buffer del comando history esta determinado por la variable de entorno HISTSIZE

Para evitar que un comando ingrese en la historia basta con comenzar el comando dejando un caracter de espacio, esto funciona aún cuando la variable de control HISTIGNORE="" (el valor por default), por lo que si no deseamos que el comando se incluya en el history basta empezarlo dejando un espacio:

echo "in history"
 echo "not in history"

miércoles, junio 17, 2015

Monkey see monkey do ...

Cuenta la leyenda que habia un zapatero y su vecino tenía un changuito

y el changuito veia como hacia zapatos con la herramienta

y cuando se iba el zapatero a su casa, se metía el chango y hacia cortes en los zapatos con la herramienta, porque intentaba hacer lo que veia

el zapatero enojado le dijo al vecino que amarrara su chango

pero este le dijo que el chango lo hacía por sí solo, que el no tenía nada que ver

así que el zapatero como sabía que el chango hacía lo que miraba

se puso un cuero grueso en la panza y con la cuchilla se daba tajos sobre la panza como cortando

entonces lo que paso es que el chango, haciendo gala de sus habilidades de repetir lo que observaba, hizo lo mismo y se corto la panza, y se murió

cuando fue a reclamar el vecino al zapatero, este le dijo que el chango lo hizo el solo, por sí mismo, que el no tuvo nada que ver, que el le advirtio que lo amarrara

y tantán este cuento se ha acabado, espero te haya gustado!!!

lunes, junio 15, 2015

Reproducir video en modo texto


Se puede hacer usando mplayer, simplemente basta especificar un driver de salida que convierta la imagen en ascii art.




En escala de grises

mplayer -vo aa video.mp4

si se quiere usar la misma terminal en la que se pone el comando (cuando estamos en modo gráfico X)

mplayer -vo aa:driver=curses x.avi



En tonos de color

mplayer -vo caca video.mp4

y en la misma terminal (en X)

export CACA_DRIVER=curses
mplayer -vo caca video.mp4

jueves, junio 11, 2015

La gente que es la gente en tratar de entenderla ...

Si no eres servil resulta que tienes mala actitud.

Si eres más inteligente que el promedio resulta que te crees mucho.

Si eres honesto resulta que eres un grosero.

No cabe duda que en este mundo la gente esta acostumbrada a los disimulados e hipocritas.

miércoles, junio 10, 2015

Automatización de tareas repetitivas con teclado y mouse en linux

Si trabajas con computadoras seguramente te ha tocado el caso donde tienes que realizar una tarea repetitiva muchas veces, por ejemplo que tienes una hoja de excel donde las celdas vienen como dato textual pero son datos númericos (o sea empiezan con '123 por ejemplo) y al estar como texto, entonces no se puede sumar, en este caso el cambio del dato de texto a número se hace oprimiendo F2 para que la celda entre en modo de edición, seguido de la tecla Home para que el cursor se vaya al principio y luego la tecla supr para borrar el ', acto seguido presionar ENTER para que el cambio sea guardado como contenido de la celda, esto hace que el cursor de la celda se vaya a la celda de abajo.

Supongamos que tienes un documento donde tienes que hacer el procedimiento antes mencionado 500 veces, esto es suficiente para desesperar a personas que no soportan realizar tareas repetitivas (como es mi caso, ya que me genera mucho estrés), así que investigando rapidamente en google, hay alternativas de software para hacer este tipo de automatización, a saber dos principales.

1. Autokeys
2. xmacro

En este post voy a describir como lograr automatizar mediante xmacro y bash.

Antes que nada si no teneis instalado el software ya saben que en ubuntu y derivativos lo pueden hacer facilmente con la orden:

sudo apt-get install xmacro

Lo primero es escribir la secuencia de eventos de teclado y mouse en un archivo de texto, en el caso de lo que se desea hacer para convertir la celda de texto a número, teniendo como precondición tener la hoja de calculo abierta, con el foco, y posicionada en la celda de la columna a procesar:

macro1.txt


KeyStrPress F2
KeyStrRelease F2
KeyStrPress Home
KeyStrRelease Home
KeyStrPress Delete
KeyStrRelease Delete
KeyStrPress Return
KeyStrRelease Return


El macro anterior convierte una celda, para llamarlo un número determinado de veces por ejemplo 125, desde nuestra terminal bash podemos hacer un for que mande llamar 125 veces la macro, y antes de empezar esperar un tiempo para que nos de tiempo de posicionar el cursor sobre la hoja de cálculo y la celda donde se va a empezar.

sleep 3; for i in {1..125}; do cat macro1.txt | xmacroplay -d 1; done

En el ejemplo la opción -d es para indicar cuanto tiempo debe esperar el xmacroplay entre mandar un evento y otro, en este caso 1 milisegundo, lo que sería un superhumano tecleando muy rápido, maybe superman o flash, aunque para la computadora un milisegundo es mucho tiempo.

Otro ejemplo de macro, por ejemplo para abrir el cuadro de dialogo de ejecutar comando en linux y tener listo el comando para ejecutar una terminal, ya solo esperar el enter de confirmación del usuario sería:

macro2.txt

Delay 0
KeyStrPress Alt_L
KeyStrPress F2
KeyStrRelease F2
KeyStrRelease Alt_L
Delay 1
KeystrPress x
KeyStrRelease x
KeystrPress t
KeyStrRelease t
KeystrPress e
KeyStrRelease e
KeystrPress r
KeyStrRelease r
KeystrPress m
KeyStrRelease m


Queda pendiente el uso de eventos del mouse, pero si deseamos saber la sintaxis que va en la macro la podemos grabar con el comando:

xmacrorec2 > macroName.txt

Los eventos de mouse son por ejemplo:

MotionNotify 2730 596
ButtonPress 1
ButtonRelease 1
ButtonPress 3
ButtonRelease 3
ButtonPress 2
ButtonRelease 2

Siendo el boton izquierdo 1, el derecho 3 y el central 2.

Eso es todo por hoy, en otro post algún día hablaremos de Autokeys, que poseé características más sofisticadas y una GUI.

Happy automation!

sábado, mayo 23, 2015

XML explicado de forma sencilla

xml es un foramto donde describes las cosas mediante texto plano

usando etiquetas

<etiqueta>

que se abren y cierran

<etiqueta></etiqueta>

y dentro pones contenido

<empanada>mermelada</empanada>

contenido que pueden ser más etiquetas

<nombre> <paterno>Baqueiro</paterno> <materno>Bernal</materno> <nombre1>Alfonso</nombre1> <nombre2/> </nombre>

puenden estar vacias y abrir y cerrar en corto como en

<nombre2/>

a veces las etiquetas necesitan metadatos para describir las particularidades y esto se hace con atributos

<etiqueta atributo="valor"></etiqueta>

y puede llevar todos los que se necesiten y en cualquier orden

<etiqueta atributo="valor" atributo2="valor2" atributo1="valor1"></etiqueta> y eso es lo esencial ...

jueves, mayo 07, 2015

La gente siempre esta chingando ...

An interviewer said to a famous writer "How do you deal with the negative opinions recently held by some people about you?"

                                   The writer smiled and said "When I was in high school and spent most of my time reading and writing,people said that I should quit such 'ridiculous' hobbies and focus only on my studies.

When I studied literature in college, people said that I was 'stupid' to pick such a stream and would never earn a living. I didn't have enough money when I started out writing which required me to borrow money from my family or friends, so people called me 'cheap'.

I spent hours reading and writing at home, so I was called 'lazy' while my friends went out to party or watch a new movie.

                                     When I started doing somewhat better and no longer needed to borrow, people called me 'egoistic'.

When some of my articles got published in newspapers and magazines, people called me 'lucky'. Then my first book was published, I was paid enough to live a decent life,so people said that it was 'unfair since all I had was an in-born talent'.

When I finally started earning more than enough and giving donations,people called me a 'show-off'.

What I've learned from all of this is that there are two ways to live : you can either live like the way others want you to or you can live like the way you want to, work hard to achieve your dreams and care for only those who care for you."



miércoles, abril 08, 2015

Ligas de interes para pagar impuestos en México

Servicios ofrecidos por el SAT
  • Portal de trámites para el contribuyente https://www.siat.sat.gob.mx/PTSC/
  • Servicio web de Validación de RFC: https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/respuesta.faces
  • Recuperar facturas que me han emitido: http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/servicio_generacion_cfdi.aspx

jueves, marzo 19, 2015

IT Operations Acronyms

Some IT Operations Acronyms
  • application performance monitoring (APM)
  • Unified Monitoring (UnMon)
  • Network Performance Monitoring and Diagnostics (NPMD)
  • Infrastructure Performance Monitoring (IPM)
  • IT Operations Analytics (ITOA)

APM application performance monitoring

Hoy descubrí las siglas APM que han sido creadas para hablar de la monitorización del rendimiento de aplicaciones, dicho de otra forma para hacer referencia a aplicaciones o servicios que permiten monitorear el rendimiento de nuestras aplicaciones, servicios, servidores, etc.

Hoy en día están de moda, debido a la facilidad de uso, las aplicaciones basadas en la nube, que se clasificacan también como SaaS (Software as a Service), y dado que ando evaluando tecnologías para monitorizar, he encontrado dos SaaS en esta categoría.

Les dejo los links:

En particular estoy probando ruxit, el cual es monitoreo basado en agente, que no requiere configurar practicamente nada excepto instalar el agente, que al descargarlo ya viene configurado para nuestra cuenta de monitoreo, al parecer este tipo de servicios están basados en una visión holística del SaaS donde el usuario requiere saber y hacer lo mímino necesario y el sistema prove al usuario con la visión de que es lo que necesita y que requiere, permitiendo configurar a su gusto un subconjunto de lo que el sistema capta como necesario.

Si les interesa probar ruxit, saquen una cuenta e instalen el agente en algún equipo, puede ser el de uso diario, para que vean que datos ofrece el monitoreo.

Saludos y happy monitoring...

martes, marzo 03, 2015

Programación de ventanas GTK usando javascript


Al intentar correr un ejemplo que viene en este libro de introducción a javascript

Internacional México
Introducción a JavaScript: Cómo hacer programas sencillos con JavaScript y node.js (Spanish Edition) Introducción a JavaScript: Cómo hacer programas sencillos con JavaScript y node.js (Spanish Edition)


El cual documenta un ejemplo de un programa javascript para armar una GUI (interface gráfica de usuario) con un botón.

Para correrlo en ubuntu es necesario instalar el runner de javascript gjs, que se encuentra en el paquete gjs, por lo que instalamos dicho paquete

sudo apt-get install gjs

Sin embargo al tratar probar las primeras lineas del código, donde se hacen los imports, nos marca un error:

gjs gtk.js 
    JS ERROR: !!!   Exception was: Error: Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found
    JS ERROR: !!!     lineNumber = '0'
    JS ERROR: !!!     fileName = 'gjs_throw'
    JS ERROR: !!!     message = 'Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found'
    JS ERROR: !!!     stack = 'Error("Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found")@:0
("Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found")@gjs_throw:0
Error("Chained exception")@:0
("Chained exception")@gjs_throw:0
@gtk.js:1
'
Error: Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found

Esto se resuelve instalando las librerias:

sudo apt-get install gir1.0-gtk-2.0

Finalmente, después de unas modificaciones logramos correr una GUI escrita en javascript, lo cual es motivante, ya que hacer lo mismo con PHP nunca se ha podido por la complejidad para dar de alta el entorno.

El código resultante se los comparto mediante gitlab, aquí los links: