Graphviz

En muchas ocasiones necesito dibujar un diagrama que ilustre alguna explicación. Estos diagramas suelen ser complejos y, en muchos casos, repetitivos. Por ejemplo, una tabla de páginas con sus correspondientes marcos de página físicos y flechas que los conecten. O una red compleja. En muchos casos hay un programa específico que lo puede hacer.

Yo suelo usar DIA o una extensión de Google Drive llamada Draw.io para los diagramas simples o que necesitan ser vistosos.

Pero, en ocasiones, echo de menos una manera de hacerlo automático. Para ello se puede usar un programa muy veterano llamado Graphviz. Este programa lleva más de 26 años funcionando y dibuja los diagramas interpretando el lenguage DOT. Es muy probable que el estilo nos resulte familiar, como el de los diagramas de los libros teóricos de la universidad.

Gracias a que DOT es un lenguaje relativamente fácil de generar con scripts, puedo crear diagramas complejos a partir de otros datos o inventados.

Por ejemplo, este código permite mostrar un diagrama de la red de contenedores LXD:

#!/bin/bash
echo 'digraph {
graph [pad="0.5", nodesep="0.5", ranksep="2", splines=ortho,];
node [shape=none]
rankdir=LR;'
bridges=($(brctl show | tail -n +2 |cut -f1 | tr "\n" " "))
for i in ${bridges[@]}
do
echo "$i [label=\"$i\" shape=box];"
done
containers=($(lxc list | egrep '(STOPPED|RUNNING)' | cut -d" " -f2 | tr "\n" " "))
xarxes="$(lxc list --format json | jq -r '.[] | {container: .name, dev: .expanded_devices[]} | [.container,.dev.name,.dev.parent,.dev.type] | @csv' | grep '"nic"$')"
relations=""
for i in ${containers[@]}
do
pc="$i [label=<<table border=\"0\" cellborder=\"1\" cellspacing=\"0\"><tr><td bgcolor=\"#CCCCCC\" >$i</td></tr>"
while read dev
do
nom=$(echo $dev | cut -d "," -f2 | tr -d '"')
switch=$(echo $dev | cut -d"," -f3 | tr -d '"')
pc=$pc"<tr><td port=\"$nom\">$nom</td></tr>"
#La IP
ip=$(lxc info $i | tr "\t" " " | grep "$nom: inet " | tr -s " " | cut -d" " -f4)
relations=$relations"$switch -> $i:$nom [dir=none headlabel=\"$ip\"] \n"

done <<< "$(echo "$xarxes" | grep "$i")"
pc=$pc"</table>>];"
echo $pc
done
echo -e "$relations"
echo '}'

Esto genera un fichero DOT como este:

digraph {
graph [pad="0.5", nodesep="0.5", ranksep="2", splines=ortho,];
node [shape=none]
rankdir=LR;
lxdbr0 [label="lxdbr0" shape=box];
switch1 [label="switch1" shape=box];
switch2 [label="switch2" shape=box];
dns1 [label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="#CCCCCC" >dns1</td></tr><tr><td port="eth1">eth1</td></tr></table>>];
dns2 [label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="#CCCCCC" >dns2</td></tr><tr><td port="eth1">eth1</td></tr></table>>];
firewall [label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="#CCCCCC" >firewall</td></tr><tr><td port="eth0">eth0</td></tr><tr><td port="eth1">eth1</td></tr></table>>];
pc1 [label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="#CCCCCC" >pc1</td></tr><tr><td port="eth1">eth1</td></tr></table>>];
pc2 [label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="#CCCCCC" >pc2</td></tr><tr><td port="eth1">eth1</td></tr></table>>];
switch1 -> dns1:eth1 [dir=none headlabel="10.20.30.100"]
switch1 -> dns2:eth1 [dir=none headlabel="10.20.30.200"]
lxdbr0 -> firewall:eth0 [dir=none headlabel="10.150.173.32"]
switch1 -> firewall:eth1 [dir=none headlabel="10.20.30.254"]
switch1 -> pc1:eth1 [dir=none headlabel=""]
switch1 -> pc2:eth1 [dir=none headlabel="10.20.30.2"]
}

El resultado sería algo así:

Para hacer el gráfico hago uso de jq i de la extension html-like de graphviz.

Sustituir moodle por google docs

Moodle es el más famoso de los entornos de aprendizaje virtuales en los centros educativos públicos de la Comunidad Valenciana. Se hacen cursos todos los años y muchos profesores de secundaria lo están usando continuamente. Tiene muchas ventajas, ya que te proporciona un lugar para centralizar materiales, entrega y evaluación de ejercicios e incluso exámenes y calificaciones.
No obstante, en mi opinión, tiene algunas desventajas muy graves para mi manera de trabajar: Es muy lento aunque tengas buen ordenador y conexión, el flujo de trabajo es muy intuitivo, pero muy farragoso cuando ya sabes cómo funciona. Editar o modificar actividades o cuestionarios requiere muchos clics. Me da la sensación de que no se actualiza al ritmo de otros CMS y siempre parece obsoleto (esto es muy subjetivo). En definitiva, no permite agilizar su gestión a usuarios «avanzados».
En muchos centros, el moodle está alojado en un hosting propio o proporcionado por conselleria. Esto quiere decir que no siempre va a estar actualizado o funcionar de forma rápida.
Hablando con un compañero que usa más y mejor el moodle que yo me dice que está de acuerdo en los problemas que le planteo pero que ha encontrado soluciones más o menos artesanales.
Por eso, estoy poniendo en marcha para el año que viene un curso «piloto» totalmente apoyado en mi wiki y en google docs. Ya he pasado todas mis diapositivas de libreoffice a google docs y los ejercicios. De esta manera los puedo modificar en directo y no necesitan ser descargados ni usar pen drives. Por otro lado, funcionan de maravilla en teléfonos móviles y demás.

Sigue leyendo

Presentaciones alternativas

Las presentaciones tradicionales tipo Power Point o las del Openoffice Impress provocan algunos problemas. Por ejemplo las incompatibilidades entre versiones, la necesidad de tener instalada una tipografía o lo feas y anticuadas que quedan.

He estado probando cosas nuevas para este curso que no sé si utilizaré al final, pero que son muy interesantes.

En primer lugar, buscaba algo similar al Keynote de los Mac pero para Linux. No he encontrado nada satisfactorio. Buscando eso encontré el famoso prezi que permite hacer presentaciones impresionantes, pero poco académicas en mi opinión.

Luego he visto la posibilidad de hacer presentaciones en HTML para poder ponerlas en la web: La propuesta de la w3c, Slideous y Deck.js (este último es el que más buena pinta tiene)

Otra opción es hacer presentaciones en PDF y luego animarlas con impressive, que permite hacer una presentación interesante de cualquier documento PDF sin necesidad de que tenga formato de diapositivas.