[bofhers] Ejemplo de bash script y Beamer

  • From: "Mia++" <mhiper3+list.bofhers@xxxxxxxxx>
  • To: "bofhers@xxxxxxxxxxxxx" <bofhers@xxxxxxxxxxxxx>
  • Date: Mon, 18 Mar 2013 00:23:06 -0400

Greetings, Earthlings!!

*TL;DR: *Adjunto va un script ejemplo de llamadas a gnuplot y uso de Beamer

Hace unos días hablando por twitter de los maravillosos poderes de awk y
grep se me ocurrió mencionar (nunca aprenderé) que yo tengo scripts que me
generan presentaciones automáticamente. En aproximadamente 2.1 segundos
alguien me tomó la palabra y exigió pruebas.

Así que, con retraso para buscar un ejemplo sencillito, aquí va un ejemplo.
En el tgz adjunto están  los ficheros "de usuario" necesarios para el
ejemplo:
  - Un access_log de apache "limpio" de IPs y contenido real (sólo vamos a
user el código HTTP y el tamaño de la respuesta).
  - Dos ficheros de latex que usaremos de cabecera y como contenido de la
presentación generado fuera del script.
  - Un fichero logo.png que usaremos como logo corporativo (obtenido de
http://meta.serverfault.com/questions/3368/bofh-gravatar-week-lets-keep-going
).
  - Un script the bash que nos generará la presentación.

El script está hecho y probado en CentOS 6.3. Aunque no lo he probado en
otras distros, los scripts "reales" que uso funcionan en Fedoras, Debians,
Archs y cygwins con ajustes mínimos.

*DISCLAIMER*: Esto es un ejemplo. Hay muchas cosas hechas de forma
ineficiente y sucia, y probablemente un mono borracho lo haría mejor. El
problema es que el último mono borracho que tuve me dejó por otro.

*VERSIÓN CORTA (para impacientes)*
*===========================*
  - Necesitaréis latex, Beamer y pdflatex
  - Ejecutando el script
    - Se crearán gráficas a partir del log de apache usando gnuplot.
    - Se generarán dos ficheros "dinámicos" de latex para incluir esas
gráficas en la presentación
    - Se creará la presentación final en PDF con el nombre main.pdf

*VERSIÓN LARGA:*
*==============*
  - Necesitaréis latex, Beamer y pdflatex
  - Ejecutando el script
    - Se crearán gráficas a partir del log de apache usando gnuplot.
    - Se generarán dos ficheros "dinámicos" de latex para incluir esas
gráficas en la presentación
    - Se creará la presentación final en PDF con el nombre main.pdf

No, en serio. El script no es complicado. Lo que hace es:
  - Parsear el log de apache para generar los ficheros de datos para
gnuplot.
  - Generar el fichero con los comandos de gnuplot de forma dinámica. Para
cosas rutinarias es más fácil crear el fichero a mano y simplemente
invocarlo. Si se van a tener rangos de ejes, etiquetas, títulos,etc...
dinámicos, aquí va un ejemplo de cómo hacerlo.
  - Genera un fichero de latex para cada imagen generada.
  - Genera un fichero de latex que invoca a los ficheros .tex estáticos que
van en el adjunto y los dinámicos que hemos generado.
  - Invoca a "pdflatex" para generar la presentación.


PREGUNTAS MÁS FRECUENTES
=========================
*  "He visto que al final de script....."*
      No, no es un error. Hay que llamar a pdflatex dos veces. Si usas
latex ya sabes por qué. Si no, te da igual.

*  "Esto es una mierda y no funciona en la realidad"*
      A lo primero no lo puedo poner remedio. En cuanto a lo de usarlo en
la realidad, totalmente de acuerdo. Para hacer un ejemplo autocontenido ha
habido que haber varias pirulas (como lo de generar los ficheros de gnuplot
dinámicamente (éso sólo lo uso cuando no sé cuántas imágenes voy a generar;
por ejemplo, cuando volcamos logs de aplicaciones a un servidor para
generar las gráficas y no sé de antemano cuántas hay).
      La otra cosa que cambia mucho del ejemplo a la realidad es cómo
generar el contenido "texto" de la presentación. El objetivo del script no
es evitarme poner el texto, sino el generar los ficheros de datos (csv o lo
que sean), pasarlos a un windows, generar las gráficas, pegarlas en
powerpoint, pegarme 2 horas con powerpoint porque las está colocando como
le da la gana y luego volver a pasar el ppt al servidor web y mandar el
correo a todo el mundo.
      Con eso claro, antes de lanzar el script edito a mano un fichero .tex
con el contenido de texto de cada sección y los pongo en un directorio.
También creo en otro directorio un fichero de texto por cada imagen con el
texto que irá en la diapositiva de la imagen correspondiente. El script lo
que realmente hace es generar un main.tex que carga la cabecera (siempre la
misma), carga todos los .tex que ya he creado, y pone las diapositivas con
las imágenes (y el texto correspondiente) en la sección que les toca.
Jugando con la nomenclatura de los ficheros (pista: el nombre del fichero
es la sección en la que va) es muy fácil.
      De esta forma una vez creo los .tex con el texto, sólo con ejecutar
el script me genera el PDF, lo sube al servidor y manda el correo de aviso
a todo el mundo.

*  "Esta presentación es una basura. No tiene efectos, ni animaciones ni
sonidos..."*
      Lo siento, Mario, pero tu princesa está en otro Sistema Operativo.


*  "Podías haber hecho todo el primer comando en el mismo awk" / "Con Latex
es mejor usar eps, no png" / "Tienes faltas de ortografía" / "Se escribe
LaTeX"*
      Sí, ¿y?

  "*Me da un error al ejecutar el script, con el comando XXX*"
      Es posible. Si dices qué error, se mirará a ver qué se puede hacer.

  "*Me da un error al ejecutar pdflatex*"
      La vida es dura. Y con Latex, aún más. Prueba  usando "latex" en vez
de pdflatex y mira a ver si el dvi resultante se ve bien. Si no, que $DEITY
tenga piedad de ti.

Hala, ya podéis ponerme a parir.


MIA++

Attachment: script_beamer.tgz
Description: GNU Zip compressed data

Other related posts: