31 ejemplos de arquitectura para DevOps y entrega continua.

En el blog de Sonatype, Derek Weeks ha anunciado esta estupenda presentación en la que se hace referencia a 31 arquitecturas de entrega continua (Continuous Delivery)

Cada ejemplo de arquitectura va acompañado de un enlace a la presentación original o blog en la que se presenta y explica.

Por hacer un poco de patria, indicaros que en esta recopilación se nombran dos empresas o productos nacionales.

  • En la diapositiva 19, hace referencia a una presentación de la empresa española atSistemas.
  • Y en la diapositiva 24, hace referencia a Clinker un Ecosistema de desarrollo de software desarrollado por la empresa sevillana klicap.

Aquí os dejo la presentación.

31 ejemplos de arquitectura para DevOps y entrega continua.

Integración continua en la nube.

Uno sale a dar una vuelta por la nube, a buscar un servicio de integración continua o entrega continua. Busca algo con Jenkins. Le suenan sobre todo 2 sitios.

Y se encuentra con todo esto.

Clinker Cloud http://clinkerhq.com/
CloudBees http://www.cloudbees.com/dev
Cloud Foundry http://www.cloudfoundry.com/
CircleCi https://circleci.com/
Semaphore https://semaphoreapp.com/
Travis https://travis-ci.com/
Codeship https://www.codeship.io/
Ship.io https://ship.io/
Drone.io https://drone.io/
tddium https://www.solanolabs.com/
Wercker http://wercker.com/
Shippable http://www.shippable.com/
hostedci https://hosted-ci.com/
Go-Ci http://www.thoughtworks.com/products/go-continuous-delivery
snap-ci http://snap-ci.com
appveyor http://www.appveyor.com/
Magnum CI magnum-ci.com

Aquí lo dejo por el momento y ya lo iré mirando con más tranquilidad.

Las fuentes principales para obtener estos datos han sido:

 

 

Integración continua en la nube.

MarkDown, Pandoc y generación de libros y artículos en múltiples formatos de forma sencilla

Cuando tengo que escribir me gusta utilizar herramientas en las que la escritura y la presentación  no deban gestionarse al mismo tiempo. Prefiero un entorno ligero, un editor de texto, que me permita escribir sin más distracciones. Y cuando posteriormente deba darle formato, sin tengo la opción, prefiero utilizar un lenguaje de marcado ligero.

Gracias a la plataforma LeanPub que nos permite ir publicando y compartiendo de forma progresiva nuestros libros, he conocido el lenguaje de marcado ligero MarkDown y las herramientas e implementaciones que existen a su alrededor. Y la verdad es que quedado gratamente sorprendido y sobre todo por una de ellas: la aplicación Pandoc.

Markdown es un lenguaje de marcado ligero creado originalmente por John Gruber  y Aaron Swartz  que trata de conseguir la máxima legibilidad y “publicabilidad” tanto en sus forma de entrada como de salida.

  • Se puede utilizar y esta implementado en múltiples lenguajes.
  • Existen múltiples conversores tanto de entrada como de salida.
  • Y su uso esta bastante extendido como lenguaje de edición en algunos gestores de contenidos (CMS).
La guía oficial de la sintaxis MarkDown
La guía oficial de la sintaxis MarkDown

Para profundizar en su sintaxis os recomiendo:

Estos son algunos ejemplos de su sintaxis, que supongo os sera muy familiar si en alguna ocasión habéis utilizado un Wiki.


# Esto es un H1
## Esto es un H2
### Esto es un H3

[Esto es un enlace](https://jbravomontero.wordpress.com)

**Esto es negrita**

_Esto también es cursiva_

Lista numerada (ordenada)

1. Este es el primer elemento
2. Este es el segundo elemento
3. Este es el tercer elemento

Lista de puntos (desordenada)

* Un elemento de la lista
* Otro elemento de la lista
* El tercer elemento de la lista

Imagenes

![Con titulo](pictures/avatar.png)

Tablas

| Elemento | Cantidad | Precio |
| :------- | :------: | -----: |
| Item 1   | 15       | 150    |
| Item 2   | 3250     | 23,65  |

Para Windows hay varios editores pero yo he encontrado uno que funciona estupendamente, es el MarkdownPad.

Editor Markdown para Windows.
Editor Markdown para Windows.

No es necesario, pero si queréis os permite ir escribiendo y de forma simultanea ir viendo en la derecha el resultado en formato HTML. Aunque evidentemente cuenta con la opción de no mostrar el visualizador HTML para evitar las distracciones durante el duro proceso de escribir un artículo, un libro, etc.

Pero yo buscaba algo que me permitiese:

  • Escribir con comodidad y una sintaxis ligera. Tengo mucha experiencia en XML y editores de XML pero no deja de ser farragoso.
  • Y en diferentes ficheros para luego permitir:
    • Combinar de forma fácil el resultado en un único documento de presentación.
    • La documentación colaborativa.
    • Obtener varios formatos de salida.

Y he encontrado todo esto y mucho más en esa maravilla de herramienta que se llama Pandoc que ha sido desarrollada por un filósofo de la Universidad de Berkeley llamado John MacFarlane. Y que es lo que hace Pandoc para ser tan estupendo.

  • Pues lo primero que funciona. Me ha funcionado todo a la primera.
  • Y lo segundo, pues que le pasas a Pandoc un archivo fuente cualquiera de los que soporta Markdown, reStructuredText, etc y lo puedes convertir a LaTex, HTML simple, PDF, DocBook, OpenDocument, docx, rtf, man, texto plano y hasta tres tipos diferentes de presentaciones en HTML; y mi lista se queda corta, cortísima. Aquí hay un diagrama ilustrando su poder:
Pandoc input output
Pandoc input output

Su instalación en Windows ha sido muy sencilla. Como me interesaba sobre todo el tema del PDF, mi instalación a consistido en 2 aplicacioens:

Para probarlo os he subido un zip que os podéis bajar con:


pandoc codigo_duplicado_muerto_java.md -o codigo_duplicado_muerto_java.pdf
pandoc codigo_duplicado_muerto_java.md -o codigo_duplicado_muerto_java.docx
pandoc codigo_duplicado_muerto_java.md -o codigo_duplicado_muerto_java.html
pandoc -s codigo_duplicado_muerto_java.md -o codigo_duplicado_muerto_java.tex
pandoc -s -S -w docbook codigo_duplicado_muerto_java.md -o codigo_duplicado_muerto_java.db

  • que permite de un sola vez varias realizar todas las transformaciones:
    • A PDF.
    • A Word.
    • A HTML
    • A Tex.
    • A Docbook.
    • etc.

NOTA: Tener cuidado de que las imágenes estén en la ruta adecuada.

Ejemplo de la transformación en formato Word.
Ejemplo de la transformación en formato Word.

El fichero, codigo_duplicado_muerto_java.md no lo he escrito directamente en este lenguaje, sino que lo he obtenido a partir del html original también utilizando Pandoc (aunque luego lo he tenido que modificar por las rutas de las imágenes):


pandoc -s -r html https://jbravomontero.wordpress.com/2012/12/28/reduciendo-el-tamano-del-codigo-de-un-proyecto-java/ -o codigo_duplicado_muerto_java.md

En resumen, dos herramientas estupendas y que funcionan a la perfección para escribir y transformar nuestros documentos.

Y también y ya termino me encanta porque se puede utilizar para la escritura colaborativa utilizando por ejemplo un control de versiones. Por ejemplo,  el famoso libro Pro Git

Pro -Git - Book

Esta escrito utilizando markdown, estando todo sus capítulos y traducciones organizados en Gitub, permitiendo por tanto escribirlo, mantenerlo y traducirlo de forma colaborativa. Eso si, desconozco el mecanismo por el cual terminan convirtiéndolo a los diferentes formatos de salida, aunque me parece que todos ellos serían posibles con Pandoc.

Un saludo.

MarkDown, Pandoc y generación de libros y artículos en múltiples formatos de forma sencilla

Ecosistemas de desarrollo de software: lineas de automatización.

Todo este tema de los Ecosistemas de Software y la Integración Continua me encantan y me fascinan.

Se por experiencia que la mayor parte de los problemas y retrasos que se producen en los proyectos actuales es por no poner cuidado y el suficiente cariño en estos temas. No se les da la importancia adecuada y luego pasa lo que pasa.

  • Se puede llegar a estar hasta varios días sin poder realizar el build del proyecto.
  • Los errores y problemas se detectan demasiado tarde, lo que multiplica exponencialmente el coste de su solución.
  • Las modificaciones y correcciones no producen más que nuevos errores que, como indico en el punto anterior, se detectan tarde.
  • Los programadores tardan horas en desarrollar sus tareas por trabajar en un entorno poco optimizado.
  • Los programadores se desmotivan, se van del proyecto, con la perdida de conocimiento que ello implica en algunos casos.
  • Se pierde una cantidad enorme de horas en procesos manuales facilemente automatizables.
  • Se produce un “proceso de involución en el proyecto” en el que parece que este empeora en lugar de mejorar. Digo “parece” porque realmente no solemos tener herramientas fiables y “sinceras” que nos proporcionen la situación del proyecto. He puesto la palabra “sincera” a propósito, porque en la mayor parte de las ocasiones, quien proporciona esta información es una persona que miente descaradamente.
  • El proyecto se llenan de auditores y “tecnocratas” que con sus Word, Excel y Projects intentan solucionarlo. Y entonces se pieder el norte, ya no se sabe si el objetivo es el proyecto, o todos los informes que debes pasar a estas personas… que cuestan un montón de horas y dinero.
  • Etc, etc, etc…

Y si,  estoy convencido que muchos de estos problemas se podrían evitar si se decidises invertir tiempo en estos temas:

Ecosistema de software

 Un ecosistema de desarrollo software es un espacio de trabajo en el que conviven una serie de herramientas que acompañadas de unas buenas prácticas permiten a un equipo de desarrollo modelar una metodología de trabajo.

Integración continua

La integración continua es una práctica en el desarrollo de software que consiste en poner en común todos los cambios que afecten al resultado final de nuestro proyecto de una forma frecuente con el objetivo de ver la evolución de sus efectos.

Automatización

Y en la automatización  de estas 5 líneas que se suelen recomendar para conseguir un nivel óptimo de madurez en el desarrollo de software:

  • Build (compilación, empaquetado y distribuibles)
  • Automatic Documentation Generation
  • Testing
  • Continuous Inspection
  • Continuous Deployment

De todo esto es de lo que nos habla Manuel Jesús Recena Soto en esta estupenda presentación que realizo el pasado 14 de Febrero como ponente invitado al Máster de Ingeniería y Tecnologías Informáticas que se imparte en la Universidad de Sevilla.

Ecosistemas de desarrollo de software: lineas de automatización.