-- Leo's gemini proxy
-- Connecting to gmi.osiux.com:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini;lang=es_AR
AUTHOR: Osiris Alejandro Gomez
EMAIL: osiux@osiux.com
DATE: 2022-10-25 21:43
[1]
Hace un par de días, dí mi primer charla en *Nerdearla* ^1[2], `Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX?` ^2[3] y quería que tuviera *líneas de tiempo* animadas, y luego de buscar por la *web* algún *software* que las hiciera usando código, no encontré nada de mi agrado, asi que llegué a la conclusión de que tenía que ocuparme de crear un *script* que usara `/GraphViz/` ^3[4] y que luego lo llamaría `timeline2dot` ^4[5] 😎
El auto-requerimiento era generar una línea de tiempo simple, con fechas y etiquetas que muestre un rango de fechas y luego se vaya moviendo de derecha a izquierda mostrando más días con más etiquetas de eventos importantes.
Comencé a idear cómo mostrar una línea, segmentada en días y luego etiquetas que destaquen lo que sucedió en una fecha en particular.
*GraphViz* es fabuloso, básicamente cuenta con 2 elementos: `node` y `edge`, y es bastante difícil lograr posicionar los elementos donde te imaginas que deberían estar, esto es así porque debe resolver la posición de miles de objetos y entonces la potestad de dónde ubicarlos la tiene *GraphViz*.
Sólo podés indicarle preferencias de dónde deberían estar los elementos, un posible orden y el mismo se ve afectado por el mismo orden en que escribís el código en lenguaje `/DOT/` ^5[6], pero como llevo un par de años jugando con esto, algunas mañas ya se las conozco y siempre termino aprendiendo algo nuevo.
En este caso, se me ocurrió usar como `label` de los nodos un *pipe* `|` para usar como indicador de día y el carácter *UTF-8* para *rectángulo vertical negro* `█` (*BLACK VERTICAL RECTANGLE* como señalador de día importante, desde donde saldría la etiqueta a destacar.
De esta manera, desde el *nodo* del día destacado con `█` debía realizar una relación con el *nodo* de la etiqueta, por ejemplo `pass-utils/v0.0.2` que estaría dentro un rectángulo usando `"rect"` como tipo de *shape*.
Para balancear un poco y que no se superpongan 2 etiquetas de días contiguos, lo mejor fue, dibujar los *días pares por encima* de *la línea de tiempo* y los *días impares por debajo* de la misma.
Y como texto de la relación pondría la fecha de la etiqueta inicialmente en formato *ISO8601* ^6[7] (luego lo cambié a `MMM/DD`) y de esta manera obtengo una *línea de tiempo* completa y simple a la vez!
Teniendo un *template* de cómo se vería todo, ahora era hora de generar el *script* `timeline2dot` que se ocuparía de leer desde un archivo de texto `.tln` los siguientes campos: `YYYY-MM-DD group tag vM.N.P` por ejemplo:
2018-09-20 dev ansible v2.7.0rc3 New release v2.7.0rc3 2018-09-21 dev r_sudoers v2.0.20 Version 2.0.20 2018-09-25 dev drbl v2.28.4 Released as v2.28.4. 2018-09-26 dev drbl v2.28.5 Released as v2.28.5. 2018-09-27 dev ansible v2.5.10 New release v2.5.10 2018-09-28 dev ansible v2.6.5 New release v2.6.5 2018-09-29 dev drbl v2.28.6 Released as v2.28.6.
La idea era generar un archivo `timeline.tln` por cada repositorio, partiendo de la información de los *tags* de `git` ya que cuentan con una fecha de generación y una versión en formato `semver` ^7[8] (*Semantic Version*), además de una anotación extra que podría mostrar.
Asi que ahora en cualquier repositorio git, simplemente ejecuto `git-tag-timeline` ^8[9] y obtengo una *línea de tiempo* en forma de archivo `timeline.tln`
A los efectos de agrupar de alguna manera las diferentes etiquetas de los proyectos, resolví utilizar un *script* `date2stage` ^9[10] que se ocuparía de recibir una fecha y devolver el `stage` o `grupo` al cuál debería pertenecer, es decir si ingreso `2020-03-15` obtengo `dep`, porque desde el *2019-09-02 al 2020-08-31* estuvimos en la etapa de `deploy` del proyecto `Filiales GNU/Linux`
Para tener un mejor control de los días a visualizar, el *script* `timeline-days` se ocupa de completar los días faltantes entre el primero y el último definidos en `timeline.tln`
Si en el directorio actual existe un archivo `timeline.style`, se pueden re-definir los colores de cada componente, utilizando como prefijo de las variables, los nombres de los nodos, por ejemplo `ANSIBLE_EDGE_COLOR`, algunos ejemplos usados:
ALL_EDGE_COLOR='#16a085' ALL_EDGE_FONTCOLOR='#16a085' ALL_NODE_COLOR='#16a085' ALL_TAG_EDGE_COLOR='#16a085' ALL_TAG_SHAPE_FILL_COLOR='#16a085' ANSIBLE_EDGE_COLOR='#1abc9c' ANSIBLE_EDGE_FONTCOLOR='#1abc9c' ANSIBLE_NODE_COLOR='#1abc9c' ANSIBLE_TAG_EDGE_COLOR='#1abc9c' ANSIBLE_TAG_SHAPE_FILL_COLOR='#1abc9c' APT_EDGE_COLOR='#27ae60' APT_EDGE_FONTCOLOR='#27ae60' APT_NODE_COLOR='#27ae60' APT_TAG_EDGE_COLOR='#27ae60' APT_TAG_SHAPE_FILL_COLOR='#27ae60' AWX_EDGE_COLOR='#2980b9' AWX_EDGE_FONTCOLOR='#2980b9' AWX_NODE_COLOR='#2980b9' AWX_TAG_EDGE_COLOR='#2980b9' AWX_TAG_SHAPE_FILL_COLOR='#2980b9'
`timeline-series` se ocupa de generar los archivos `.dot` y `.png` con 1 día corrido en un período de 15 días para luego convertirlos a un video en formato `.mp4` usando `ffmpeg`.
Se genera una imagen por cada día, por ejemplo para el *stage* `dev`, una muestra de algunas imágenes generadas antes de convertirse en video!
[11]
[12]
[13]
[14]
[15]
[16]
<video id="video" controls autoplay loop background="#000000"> <source src="img/filiales-gnu-linux/filiales-dev.mp4" type="video/mp4"> </video>
imágenes mágicas | imagemagick[18]
Visualizando Grafos usando Graphviz[19]
redes abiertas versus redes cerradas[20]
Diagrama de secuencia de Tráfico de Red[21]
Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX[22]
Usar Graphviz para generar Slides[23]
`2022-11-15 09:59`[24] agregar KEYWORDS en=Cómo hacer una línea de tiempo con GraphViz=
`2022-11-15 09:42`[25] reemplazar imagen de OpenGraph en `Cómo hacer una línea de tiempo con GraphViz`
`2022-11-13 20:39`[26] agregar y actualizar tags OpenGraph
`2022-10-30 09:07`[27] agregar controles de video a `Cómo hacer una línea de tiempo con GraphViz`
`2022-10-26 17:07`[28] agregar `Cómo hacer una línea de tiempo con GraphViz`
-- Response ended
-- Page fetched on Fri May 17 05:41:18 2024