-- Leo's gemini proxy

-- Connecting to gmi.osiux.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es_AR

Usar Graphviz para generar Slides


AUTHOR: Osiris Alejandro Gomez

EMAIL: osiux@osiux.com

DATE: 2022-10-21 11:32


Hace años que utilizo *Graphviz* ^1[1] cada vez que puedo y ayer en *Nerdearla* ^2[2] generé videos e imágenes para la charla `Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX` ^3[3]


`dot2png`


En lugar de dibujar, se escribe código en lenguaje `DOT` ^4[4], lo básico sería dibujar 3 nodos y sus relaciones:


digraph lab {

ansible -> awx -> gitlab;

}

Y ejecutando `dot -Tpng lab-00.dot >lab-00.png` se obtiene el resultado!


[IMG]

[5]


La salida es muy cruda, pero se generó un grafo usando código!


Obviamente se le puede poner un poco de amor `<3`, especificando opciones de colores, tamaños de fuentes y hasta usar imágenes `.png` para los nodos!


digraph lab {

  rankdir=LR;
  resolution=75;
  nodesep=0.2
  ranksep=5.5
  graph [bgcolor="#000000"];
  node  [fontname=Inconsolata, fontsize=14, color=black];
  edge  [fontname=Inconsolata, fontsize=50, color=black, style="filled", penwidth="6", color="#000000"];

  ans [shape=plain width=0 height=0 margin=0 label=<
  <table border="0" cellborder="0" cellpadding="2" cellspacing="2" bgcolor="black" color="#286090">
    <tr><td><img src="icons/onprem/iac/ansible-white.png" /></td></tr>
    <tr><td><b><font color="white" face="Inconsolata, Bold" point-size="32">Ansible</font></b></td></tr>
  </table>
  >]

  git [shape=plain style=invis width=0 height=0 margin=0 label=<
  <table border="0" cellborder="0" cellpadding="2" cellspacing="2" bgcolor="black" color="#00b254">
    <tr><td><img src="icons/onprem/vcs/gitlab.png" /></td></tr>
    <tr><td><b><font color="white" face="Inconsolata, Bold" point-size="32">git</font></b></td></tr>
  </table>
  >]

  awx [shape=plain style=invis width=0 height=0 margin=0 label=<
  <table border="0" cellborder="0" cellpadding="2" cellspacing="2" bgcolor="black" color="#286090">
    <tr><td><img src="icons/onprem/iac/awx2.png" /></td></tr>
    <tr><td><b><font color="white" face="Inconsolata, Bold" point-size="32">AWX</font></b></td></tr>
  </table>
  >]

  {rank=same awx; vms; ads; }

  ans -> git -> awx;

}

Y ahora el resultado es mucho mas bonito!


[IMG]

[6]


`timeline2dot`[7]


Se puede generar todo tipo de gráficos, es cuestión de aprender a jugar y adaptar el código, con un poco de `BASH` pude hacer un generador de líneas de tiempo en base a los *tags* de un repositorio `git`


[IMG]

[8]


`dot2mp4`


Se itera sobre archivos `patron-??.dot` de manera ordenada, convierte cada `.dot` en `.png`, luego ajusta el tamaño a un alto definido, por ejemplo `800` *pixels* y centra y compone esta imagen con una imagen de fondo o *background* (por defecto `bg.png`) garantizando que todas las imágenes sean iguales. Luego se genera un archivo `.lst` con el nombre de cada imagen y una duración de *3 segundos* por defecto.


Luego de generar cada imagen, se genera un video `.mp4` con un *slideshow* de todas las imágenes!


Lo único a tener en cuenta es que hay que generar un `.dot` por cada *slide* y para ello es necesario ocultar los elementos que no se deben ver en un *slide*, para esto una estrategia es usar:


style=invis

y también es válido definir `color` o `fontcolor` en `black` (si el fondo es negro), asi de esta manera se garantiza que los objetos no se muevan y terminen generando otro gráfico.


<video id="video" autoplay loop background="#000000" preload>
  <source src="img/filiales-gnu-linux/awx-deploy-revision.mp4" type="video/mp4">
</video>

demasiados *pixels*


*Graphviz* suele generar imágenes extremadamente grandes, que luego muy pocos visores pueden mostrar sin colgarse.


Una estrategia es reducir la resolución definiendo:


digraph dot {
  resolution=72;
}

Pero si se estan dibujando miles de nodos y no estan superpuestos, la imagen fácilmente tendrá mas de *10 mil* *pixels*!


# identify awx-bccl.png
awx-bccl.png PNG 11016x11183 11016x11183+0+0 8-bit sRGB 82.4656MiB 0.000u 0:00.000

Un excelente visor es `geeqie` ^5[9], permite hacer *zoom* y soporta imágenes grandes sin colgarse.


*deep zoom* ^6[10]


En la búsqueda por no perder calidad y poder navegar el grafo de `Filiales GNU/Linux` ^7[11] me topé con algo genial, se llama `OpenSeaDragon` ^8[12] que es un visor basado en *JavaScript* para incrustar en sitios web imágenez `.dzi`.


Una imagen `dzi` esta compuesta de 2 partes:



un archivo `.dzi` (con estensión `.dzi` o `.xml`)


un subdirectorio de imagenes, cada directorio es nombrado con el nivel


de resolución. números altos corresponden a resoluciones altas, dentro de cada directorio hay una porción de la imagen que corresponde al nivel de resolución del directorio. Los números son consecutivos y están en columnas desde arriba a la izquierda hacia abajo a la derecha.


awx-bccl-v2.dzi
awx-bccl-v2_files
.
├── 0
├── 1
├── 10
├── 11
├── 12
├── 13
├── 14
├── 2
├── 3
├── 4
├── 5
├── 6
├── 7
├── 8
└── 9

Para generar la imagen `.dzi` usé `Python Deep Zoom Tools` ^9[13], un *script* *Python* que toma la imagen `.png` y la divide en partes.


También podés leer


<http://osiux.com/visualizando-grafos-graphviz.html>[14]

imágenes mágicas | imagemagick[15]

Visualizando Grafos usando Graphviz[16]

redes abiertas versus redes cerradas[17]

Diagrama de secuencia de Tráfico de Red[18]

Cómo migrar 6300 equipos a GNU/Linux usando Ansible y AWX[19]

Cómo hacer una línea de tiempo con GraphViz[20]


ChangeLog


`2024-02-27 09:00`[21] cambiar imagen OpenGraph en *Usar Graphviz para generar Slides*

`2023-05-05 15:33`[22] corregir DESCRIPTION en *Usar Graphviz para generar Slides*

`2023-05-05 13:47`[23] agregar DESCRIPTION y KEYWORDS en /Usar GraphViz para generar slides

`2022-11-13 20:39`[24] agregar y actualizar tags OpenGraph

`2022-10-26 17:35`[25] agregar `Usar Graphviz para generar Slides`


1: https://graphviz.gmi/

2: https://nerdear.la/

3: https://osiux.com/2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.html

4: http://www.graphviz.gmi/doc/info/lang.html

5: file:img/filiales-gnu-linux/lab-00.png

6: file:img/filiales-gnu-linux/lab-01.png

7: 2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.gmi

8: file:img/filiales-gnu-linux/tlns-filiales-dev-0299.png

9: https://www.geeqie.gmi/

10: https://en.wikipedia.gmi/wiki/Deep_Zoom

11: http://filiales-gnu-linux.g.coop.ar/prd.html

12: https://openseadragon.github.io/

13: https://github.com/openzoom/deepzoom.py

14: visualizando-grafos-graphviz.gmi

15: imagenes-magicas-imagemagick.gmi

16: visualizando-grafos-graphviz.gmi

17: 2012-03-05-redes-abiertas-versus-redes-cerradas.gmi

18: 2021-03-04-diagrama-de-secuencia-trafico-de-red

19: 2022-10-20-howto-migrate-6300-hosts-to-gnu-linux-using-ansible-and-awx.gmi

20: 2022-10-25-how-to-make-a-timeline-with-graphviz-using-timeline2dot.gmi

21: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/141f3eae3b054d18275f28d379215630333546d0

22: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/7b75f0a4ed2ec7548a280eb6aa90229ad3d06fe0

23: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/5dcc858ab3ec850740e5c2e046e51991b8783b6e

24: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/bf3a61526ad2a73cecb77a18995f1d63494e3664

25: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/67553bbb8d2ab8bf4f26f654e8a1cb1567cf2c74

-- Response ended

-- Page fetched on Fri May 17 02:55:11 2024