Herramientas para gestión de eventos

Mario García
TechWo
Published in
14 min readSep 19, 2017

7 años de FLISoL en Chiapas

He sido usuario de Software Libre por más de diez años. La primera distribución GNU/Linux que instalé fue Ubuntu, en diciembre de 2006, en un curso al que asistí, no recuerdo la versión exacta, 5.04 ó 5.10.

El 26 de abril de 2008 participé como conferencista por primera vez en el Festival Latinoamericano de Instalación de Software Libre [FLISoL], el mayor evento de difusión del Software Libre en la región, el cuál se realiza en más de doscientas ciudades. Estuve participando en la edición celebrada en mi ciudad ese año (Tapachula, Chiapas).

Logo de FLISoL — flisol.info

En 2011 empecé a organizar FLISoL en Chiapas y hoy después de siete años consecutivos, he ayudado a organizarlo en cuatro ciudades en el estado y hemos tenido nueve ediciones. Entre Abril y Mayo del presente año tuvimos dos sedes, en Tuxtla Gutiérrez (la primera edición internacional), en la Universidad Pablo Guardado Chávez y Tapachula, en el Instituto Universitario de México.

FLISoL 2017 en Tuxtla Gutiérrez
FLISoL 2017 en Tapachula

Organizar un evento de tecnología no es fácil, por todas las tareas que como organizador tienes que hacer, aún cuando cuentas con un equipo de trabajo. Actividades que van desde enviar invitaciones a conferencistas, crear la agenda del evento, confirmar la sede y contar con el material necesario durante el evento, y por último generar certificados de participación para ponentes y participantes, en caso de que se requiera.

En la edición de este año en Tuxtla Gutiérrez contamos con la participación de dieciséis conferencistas y cien participantes. En Tapachula tuvimos cuatro ponentes y poco más de ciento veinte asistentes.

A partir de la edición de 2016 se empezaron a enviar invitaciones a los conferencistas y a entregar certificados de participación, lo cuál no se hacía en los años anteriores. Los formatos de estos documentos están disponibles en flisol.info.

Mi experiencia con Python

Mi primer acercamiento a Python fue en 2009, escuché sobre este lenguaje de programación en el Festival Internacional de Software Libre, un evento que se realizó por tres años consecutivos en Tapachula. Después de esa conferencia busqué información en la web, visité el sitio oficial para saber dónde empezar.

Python es un lenguaje interpretado, era el primer lenguaje de este tipo en el que programaba, además, el intérprete viene preinstalado en algunas distribuciones GNU/Linux. En aquella ocasión estaba empezando a migrar a Arch Linux, una distribución minimalista y que sigue el principio KISS (no, no hablo del grupo de rock), es decir, el sistema se configura solamente con las herramientas que se necesitan.

El libro que me permitió aprender la sintaxis básica del lenguaje es Python para todos de Raúl González Duque. Fue durante el septimo semestre de la carrera, y empezar a aprender el lenguaje me ayudó a migrar de Ubuntu a Arch Linux.

Migrar a una distribución como Arch Linux no fue sencillo, pero aprendí mucho en el proceso. Después de instalar el sistema, escritorio y aplicaciones, no sabía qué network manager instalar, por lo que estaba sin acceso a Internet por WiFi. Por lo que se me ocurrió desarrollar un network manager con Python. El resultado fue un script que terminé en un par de días y que he mejorado un poco los últimos años y el código se puede ver en GitHub.

Network Manager en Python

Los meses siguientes desarrollé algunos scripts más, un programa que recibe una función matemática y devuelve la gráfica correspondiente, entre otros ejemplos. Durante un par de años dejé de programar en Python, ya que me involucré en otro tipo de proyectos y no lo retomé hasta hace dos años, que empecé a enseñar programación y el último año he trabajado en varios programas cuyo código está disponible en mi cuenta de GitHub.

Certificado e invitaciones

El formato de certificado de participación que se ha usado desde 2016 para las ediciones que se han celebrado de FLISoL en Chiapas, se encuentra disponible en la página del evento, el archivo original está en portugués, por lo que se tuvo que traducir parte del texto y modificar la fecha y sede, así como agregar datos de quienes firman los documentos.

Interfaz de Inkscape

El archivo está en formato SVG y se edita con Inkscape, una herramienta de diseño, alternativa a Corel Draw, pero es Software Libre. Se entrega certificado de participación a cada conferencista, por lo que se tiene que editar la imagen y colocar el nombre en donde dice <Nombre completo> y por último exportar a PDF para poder imprimir.

Formato de Certificado de Participación FLISoL

Lo anterior tiene que hacerse para cada certificado que hay que generar, y toma alrededor de minuto y medio (tiempo entre colocar el nombre y exportar a PDF). Tomando como ejemplo el número de ponentes que participaron en la edición de Tuxtla Gutiérrez este año, para dieciséis certificados el proceso tardaría 24 minutos.

Para las invitaciones se usó uno de los membretes disponibles en el material gráfico de este año, se redactó el texto que se lee en la siguiente imagen. El documento está en formato ODT, qué es el formato por defecto de Writer, la alternativa en LibreOffice a Word de la suite ofimática de Microsoft.

Formato de Invitación FLISoL

En el documento se modifican los datos del conferencista: nombre, organización; así como la fecha, sede y horario del evento. Se guardan los cambios y se exporta a PDF, para después enviar por correo la invitación, lo que toma dos minutos. El texto del correo es el que se ve en la siguiente imagen y solo se modifica la fecha, ciudad y sede.

Pensando en el ejemplo anterior, para enviar las dieciséis invitaciones de la sede de Tuxtla Gutiérrez, tardaría treinta y dos minutos en realizarlo. Por lo que debía busca una forma de solucionarlo y reducir el tiempo que toma hacer las invitaciones y enviarlas, y crear los certificados.

Solución en Python

Después de pensar un poco, buscar información en la web y leer documentación, la solución fue desarrollar algunos scripts en Python para generar las invitaciones y certificados de participación, y enviar la invitación por correo a cada conferencista.

Certificados de participación

El script que se encarga de crear los certificados de participación que se entregan a los conferencistas, realiza los siguientes pasos:

  • Lee una hoja de cálculo que contiene los siguientes datos de los conferencistas: Nombre, Apellido Paterno, Apellido Materno
  • Lee la imagen SVG del formato y modifica el texto <Nombre Completo> y coloca el nombre del ponente.
  • Genera una imagen nueva de cada certificado.
  • Exporta la imagen de cada certificado a PDF.
Certificado generado por el script

El script tarda 6 minutos en generar los dieciséis certificados, y únicamante se tiene que modificar la hoja de cálculo para cada evento y colocar los nombres de los conferencistas. Son 18 minutos menos del tiempo que tomaba antes crear manualmente los certificados.

El tiempo que tarda en ejecutarse el script depende de la cantidad de elementos que contenga la imagen, colores de fondo, tipo de letra, etc. SVG es un estándar web que corresponde a un lenguaje de marcado XML que se usa para describir gráficos vectoriales en dos dimensiones. Las imágenes creadas en este formato no pierden calidad si se hace zoom sobre ellas o se redimensionan, además, al abrir el archivo con un editor de texto se verá código como el siguiente:

<svg width=”100" height=”100">
<circle cx=”50" cy=”50" r=”40" stroke=”green” stroke-width=”4" fill=”yellow” />
</svg>

El archivo correspondiente al certificado tiene cerca de 20, 000 líneas de código, y es por eso que demora mucho tiempo en generar el archivo final, ya que usualmente hubiese tardado medio minuto, el tiempo que tardó en generar los certificados para el evento de Tapachula, cuyo formato tiene un diseño diferente.

Invitaciones

El script que genera las invitaciones lo desarrollé una semana después del evento en Tuxtla Gutiérrez y se usó para la edición de FLISoL en Tapachula, en la que se contó con la participación de cuatro conferencistas. El script realiza lo siguiente:

  • Lee una hoja de cálculo que contiene los siguientes datos: Nombre, Apellido Paterno, Apellido Materno, Organización y Correo.
  • Lee un archivo en formato ODT y modifica las siguientes palabras clave contenidas dentro del texto: Nombre Completo, Organización, Fecha, Sede, Horario.
  • Genera un nuevo archivo para cada invitación.
  • Exporta cada archivo a PDF.

Enviar correo

Las invitaciones son enviadas por correo, es por eso que en la hoja de cálculo también se agrega este dato. El script que se encarga de esta tarea, realiza lo siguiente:

  • Lee la hoja de cálculo para obtener el correo de cada conferencista.
  • En el código se define el emisor, receptor, asunto.
  • El cuerpo del correo se obtiene de un archivo que contiene el texto y la imagen en formato HTML.
  • Se adjunta el archivo de la invitación correspondiente.
  • Realiza conexión a Gmail.
  • Envía el correo.
  • Cierra la conexión.
Invitación enviada por el script

Librerías usadas

  • xlrd — Una librería para desarrolladores que permite extraer datos de una hoja de cálculo de Excel.
  • lxml — Una librería para procesar XML y HTML en Python. Usada para leer y generar las imágenes en formato SVG.
  • cairosvg — Una librería usada para convertir archivos SVG a PDF y PNG.
  • ezodf — Es una libería para Python usada para crear o abrir un archivo en formato ODF; extraer, agregar, modificar o eliminar contenido del documento.
  • zipfile — Módulo de Python que proporciona herramientas para crear, leer, escribir, agregar y listar archivo ZIP.
  • tempfile — Este módulo permite generar archivos y directorios temporales.
  • smptlib — Módulo de Python que define una sesión de un cliente SMTP que puede usarse para enviar correo. Conexión a Gmail.
  • email — Módulo de Python para manejar mensajes de correo. Definir el emisor, receptor, asunto, adjuntar archivos, etc.

Las librerías descritas anteriormente son las usadas en los scripts creados en Python y que permiten realizar cada una de las tareas indicadas en el código. Además, para poder enviar correo, se tiene que definir una contraseña de aplicación en Gmail, que servirá únicamente para ese script, y por seguridad no iniciar sesión con nuestra contraseña de usuario.

Los módulos descritos son parte del lenguaje, por lo que no se tienen que instalar, las librerías por otro lado, se pueden instalar con pip. La versión de Python usada es la 3.6.2, la última versión disponible.

Repositorios en GitHub

Aprendizaje

Antes de empezar a trabajar en estos scripts no sabía si acaso podía programarse la solución que se me había ocurrido, pero siempre he creido que al programar lo único que te limita es la imaginación y hasta dónde te puede llevar, así que había que intentarlo. Después de hacer una búsqueda por la web, revisar documentación, ejemplos, código en GitHub, leer posts en Stack Overflow, encontré como implementar los scripts que tenía en mente.

Lo siguiente fue empezar a escribir el código, hacer pruebas, fallar varias veces, dormir poco como casi siempre que empiezo un proyecto así, algo que pasa muy seguido. Finalmente en una semana (no contando los días que no trabajé en ello) los scripts estaban listos. Era momento de hacer las últimas pruebas, los primeros certificados ya se podían imprimir. Y las primeras invitaciones se habían enviado. A la fecha, estas herramientas se han ocupado para dos eventos, las dos ediciones de FLISoL que celebramos en Chiapas.

He aprendido mucho escribiendo el código de cada script. Antes de este proyecto no sabía que las librerías que ocupé se podían usar para lo que hacen estas herramientas. El código se puede mejorar y es parte de lo que he estado haciendo recientemente. Aún falta documentar y la idea es que cualquier comunidad tecnológica que organice eventos pueda usarlo.

Herramientas para TechWo

TechWo es una de las comunidades en las que colaboro actualmente, me sumé al proyecto el 8 de diciembre de 2016, tras el segundo meetup del capítulo de Tuxtla Gutiérrez, en Chiapas, estado donde vivo. Se trata de un proyecto en el que creo y al que aporto parte de mi experiencia.

8° Meetup de TechWo — Tuxtla Gutiérrez, 2 de Septiembre

La comunidad tiene reuniones (meetup) el primer sábado de cada mes, la última reunión fue el día 2 de septiembre. En cada meetup se presentan dos conferencias, los temas abordados en el último evento fueron A-Frame: La Realidad Virtual en la Web por parte de Yuliana Jiménez, Mozilla Tech Speaker, y Marines Méndez de CódigoFacilito con una charla sobre Desarrollo de apps para Android.

He participado un par de veces en las actividades de la comunidad, con una charla en el tercer meetup celebrado en Febrero y un taller en Abril. Actualmente estoy desarrollando un conjunto de herramientas que puedan ocupar para los eventos que organizan. La idea la tomé a partir de lo que ya había desarrollado para FLISoL.

En los últimos meses he realizado modificaciones al código, en especial al script que se encarga de enviar invitaciones, con tal de que el script les ayude a enviar invitaciones a los ponentes que participan en cada meetup. Con las modificaciones hechas hace dos meses, el script funciona de la siguiente manera:

  • Lee una hoja de cálculo que contiene los siguientes datos de los conferencistas: Nombre, Apellido Paterno, Apellido Materno, Organización, Correo.
  • Lee un archivo en formato DOCX y modifica las siguientes palabras clave contenidas dentro del texto: Nombre Completo, Organización.
  • Calcula la fecha del primer sábado de los próximos cuatro meses y lo agrega al documento.
  • Genera un nuevo archivo para cada invitación.
Invitación TechWo

Mientras hacía estas modificaciones, estaba aprendiendo a desarrollar bots para Telegram con la librería python-telegram-bot. Había creado varios ejemplos, un bot que grafica funciones matemáticas, otro que genera códigos QR y una calculadora de subredes. Por ello decidí crear un bot para la comunidad, para seguir aprendiendo y darles una herramienta más.

Telegram bot para TechWo — Primera versión

El bot recibe los datos del conferencista: nombre completo, organización; y devuelve la invitación, lista para descargar y enviar. Una última modificación hecha al bot permite que este se encargue de enviar la invitación al correo, por lo que también recibe este dato.

He pausado el desarrollo del bot, aunque el código se puede encontrar en mi cuenta de GitHub. Para los cambios hechos al script que genera las invitaciones, se han agregado y quitado las siguientes librerías:

Por el cambio de extensión del formato de la invitación, se usa la siguiente librería

  • python-docx — Es una libería para crear y actualizar archivos de Microsoft Word (.docx)

Las librerías que se usaban para editar el archivo ODT ya no son necesarias

  • ezodf — Es una libería para Python usada para crear o abrir un archivo en formato ODF; extraer, agregar, modificar o eliminar contenido del documento.
  • zipfile — Módulo de Python que proporciona herramientas para crear, leer, escribir, agregar y listar archivo ZIP.
  • tempfile — Este módulo permite generar archivos y directorios temporales.

Meetup Python Guatemala

Hace unas semanas empecé a trabajar en una nueva versión de los scripts que generan los certificados e invitaciones. Los formatos de estos documentos los he diseñado con Inkscape, por lo que ahora son imagenes SVG. Ahora se crea un solo archivo que contiene todos los certificados y he corregido algunos errores y he optimizado el código. Todo esto después de participar en el meetup de la comunidad de Python Guatemala el mes pasado.

Guatemala es uno de esos países a los que siempre había querido viajar para participar en algún evento y dar una charla. Siempre he dicho que tenemos mucho que aprender de lo que se está haciendo en la región en relación al Software Libre.

Tuve la oportunidad de estar en Huehuetenango, Guatemala del 25 al 27 de Agosto participando en algunos eventos de tecnología. El 26 de Agosto dí una charla en el meetup de la comunidad de Python Guatemala. Hablé sobre las herramientas que estoy desarrollando para TechWo.

En el meetup de Python Guatemala estuve hablando de estas herramientas y explicando el funcionamiento de cada una y los planes a futuro. Un evento muy productivo, ya que además de conocer los proyectos que se están desarrollando con Python en el país, me permitió obtener retroalimentación, ideas, sugerencias, preguntas para las que no tenía respuesta en ese momento, lo cuál hizo que pudiera hacer mejoras al código.

Meetup de Python Guatemala en Huehuetenango. [Fuente: Python Guatemala]

Ha sido uno de los mejores eventos en los que he participado, y para ser la primera vez dando conferencia en el país, ha sido una muy buena experiencia. De este viaje me quedo con mucho aprendizaje, nuevos amigos, muchas ideas y el deseo de volver pronto. Y estoy orgulloso de haber representado a Chiapas y a México, así como uno de los proyectos más importantes en los que he colaborado, TechWo.

Mira el video de mi participación en el meetup de Python Guatemala.

¿Qué sigue?

Hay una nueva versión disponible de los scripts que generan los certificados de participación e invitaciones, con nuevos diseños de los formatos que he creado con Inkscape y ahora son imágenes SVG, pensado para que el capítulo de Tuxtla Gutiérrez de TechWo pueda usar estas herramientas.

Formatos de Certificado de Participación e Invitación — TechWo Community

El script que genera los certificados es el mismo que se usó para FLISoL, al cual se han hecho modificaciones y optimización del código. En el caso del programa que genera las invitaciones, el código se ha modificado ya que ahora es una imagen SVG. Por lo que las librerías que se usan ahora son las siguientes:

  • xlrd — Una librería para desarrolladores que permite extraer datos de una hoja de cálculo de Excel.
  • lxml — Una librería para procesar XML y HTML en Python. Usada para leer y generar las imágenes en formato SVG.
  • cairosvg — Una librería usada para convertir archivos SVG a PDF y PNG.

En el caso de los certificados de participación para ponentes, además de generar archivos individuales, se crea un solo archivo en formato PDF que los contiene todos. Para ello se usa la siguiente libería:

  • PyPDF2 — Una libería de Python capaz de dividir, mezclar, cortar y transformar las páginas de archivos PDF.

El código puede encontrarse en mi cuenta de GitHub.

Próximos pasos

  • Documentar el código.
  • Crear un manual de usuario.
  • Agregar funcionalidades, como el envío automático de las invitaciones.
  • Desarrollar una aplicación web que todos los capítulos puedan usar.
  • Desarrollar un bot de Telegram.

Mozilla Open Leaders

Hace un mes apliqué para ser parte del programa Mozilla Open Leaders. Es un programa de Mozilla para personas que están desarrollando un proyecto abierto o quieran iniciar uno, proyectos que promuevan una Internet saludable.

El proyecto que propuse tiene que ver con lo que había desarrollado para FLISoL y lo que actualmente estoy haciendo para TechWo, solo que la idea del proyecto es tener una plataforma (una aplicación web) que cualquier comunidad tecnológica pueda usar y le permita gestionar tareas relacionadas a la organización de eventos, como el envío de invitaciones, generación de certificados de participación, administración de participantes, entre otras opciones.

El 6 de Septiembre recibí confirmación de que mi proyecto había sido aceptado en el programa. Tuvimos la primer videollamada el martes 12 de septiembre y estaré en el programa por las próximas doce semanas. Orgulloso de estar ahí y que un proyecto que empecé por aprender, ahora me permita formar parte del Round 4 de Mozilla Open Leaders. Espero aprender mucho y compartir en un próximo artículo como va evolucionando el proyecto.

Pueden ver información del proyecto en el siguiente enlace:

https://mozilla.github.io/leadership-training/round-4/projects/#community-event-platform

--

--

Mario García
TechWo
Writer for

Free Software Enthusiast, Speaker, #Mozillian, #Rustacean, #geek, #WebDeveloper