Generando Certificados / Diplomas con Python + rst2pdf

Resulta que este 28 de Abril es la FLISoL 2012 y junto a otros integrantes de SanLuiX (el grupo de usuarios de software libre de San Luis) vamos a estar en la sede de Villa Mercedes de la Universidad Católica de Cuyo colaborando con la comunidad y llevando adelante el festival :-) . A que viene todo esto se preguntarán; viene a que para emitir certificados de asistencia a la FLISoL nos surgió la necesidad de contar con algún método para generar los certificados masivamente usando software libre, y aquí es donde entra en juego Python y rst2pdf.

Después de pensar un rato, terminé con la siguiente estructura de archivos:

  • filsol (directorio)
    • asistentes.csv
    • certificado.rst
    • escudo.png
    • generar_certificados.py
    • pdf (directorio)

Veamos uno por uno:

asistentes.csv

Es un archivo .csv con la información personal de los asistentes; para las pruebas que hice usé el siguiente contenido de ejemplo:

dni1,apellido1,nombre1
dni2,apellido2,nombre2
etc...

certificado.rst

Es la estrucutra del certificado a imprimir, con los campos a reemplazar enumerados entre {}. Usemos por ejemplo el siguiente:

===========
FLISOL 2012
===========

.. image:: escudo.png
 :scale: 70

----------------------------
Universidad Católica de Cuyo
----------------------------

Por la presente se deja constancia que **{1} {2}**, *D.N.I. {0}* ha participado del evento FLISol 2012 en calidad de asistente. Realizado en la sede Villa Mercedes de la Universidad Católica de Cuyo el día 28 de abril de 2012.

escudo.pg

Como su nombre lo indica, es el escudo de la universidad, podría ser el logo de la FLISol o cualquier imagen que quisieran. Vale aclarar que este archivo no es obligatorio y depende de lo que hayan hecho en su archivo rst como maqueta del certificado.

generar_certificados.py

Este es el script de Python que genera todos los certificados a partir del listado en csv de asistentes. El código creo que se explica por sí mismo, se los dejo a continuación:

#!/usr/bin/env python
#-*- encoding: utf-8 -*-

from csv import reader
import subprocess

print 'Abriendo listado...',
# Esto se puede poner feo...
listado = reader(open('asistentes.csv','r'))
total = len(list(listado))
listado = reader(open('asistentes.csv','r'))
print 'listo.'

print 'Abriendo certificado...',
certificado = open('certificado.rst').read()
print 'listo.'

print listado
print 'Encontrados', total, 'asistentes:'
for nro, asistente in enumerate(listado):
    dni = asistente[0]
    apellido = asistente[1]
    nombre = asistente[2]
    certificado_final = certificado.format(dni,apellido,nombre)

    print 'Generando certificado para', apellido.upper(), nombre + '...',

    p = subprocess.Popen(['rst2pdf',
                        '-s',
                        'freetype-serif,a4-landscape,twelvepoint',
                        '-o',
                        './pdf/' + dni + '-' + apellido + '-' + nombre + '.pdf'
                        ],
                        stdin=subprocess.PIPE
                        )
    p.stdin.write(certificado_final)
    p.communicate()
    print 'listo', str(nro+1), 'de', str(total) +'.'

Seguramente se puede mejorar (mucho) el código, pero como prueba de concepto resultó ser más que suficiente :-D . El script genera un pdf en la carpeta (adivinen…) pdf a partir del archivo rst por cada asistente, reemplazando el nombre y DNI que corresponde. Para ello utiliza el ejecutable de rst2pdf, seguramente se podría hacer llamando a la librería, pero la verdad no me puse a investigar cómo hacerlo.

Uso una PIPE de subprocess para alimentar a rst2pdf con el rst modificado con los datos del asistente directamente y no tener así que guardar un archivo rst distinto a disco por cada persona.

Creo que quedó bastante bien, en un puñado de líneas y nos vino al pelo! Cuando lo probemos bien les cuento cómo se portó.

Permisos insuficientes al clonar una PC con VMware Converter

VMWare Converter es una excelente herramienta que me presentó un amigo del trabajo, permite clonar máquinas físicas a imágenes de máquinas virtuales entre otras cosas, incluso haciéndolo remotamente a través de la red. Realmente impresionante y las ventajas de poder hacer algo así son ¡interminables!. Cualquiera que labure con servidores o administrando muchas PCs sabrá de lo que hablo.

Pero este post no es solo para recomendarles que prueben este maravilloso software, sino para contarles (y de paso de ayuda memoria mío) cómo solucionar el inconveniente que se nos presentó a nosotros.

A la hora de comenzar el clonado de la PC, no saltó un cartel de error diciendo:


Insufficient permissions to connect to '\ADMIN$'

A lo que nos quedamos helados… habíamos puesto las credenciales de administrador del sistema a clonar correctamente (después de varios intentos frustrados xD) pero no había caso. Luego de googlear un ratito encontramos acá que podría deberse a tener activado el “uso compartido simple de archivos”. Sin más vueltas lo desactivamos yendo a Herramientas -> Opciones de Carpeta -> Ver y Destildando la última opción de la lista que es la correspondiente a dicha característica:

Camputa Compartido Simple Archivos XP

Habiendo desactivado esta opción, todo siguió su curso normal y pudimos clonar una PC entera a una imágen de PC virtual en cuestión de minutos. La levantamos y, luego de instalar las VMware Tools, todo funcionaba exactamente igual que en la PC física. ¡Un golazo!

PD: Si les interesa un tutorial de como hacer para clonar una PC pidanló en los comentarios y lo armamos. Tenemos planeado hacer uno de cómo levantar un servidor con ESX para correr las máquinas virtuales sobre él.

[Fedora] Habilitar la selección del tema para gnome shell

Después de haber actualizado a Fedora 16, me encuentro con que al querer cambiar de tema para el shell, la opción se encuentra deshabilitada y tiene un signo de admiración amarillo con la leyenda: «Extensión del tema de usuario de GNOME-Shell no activada» Sigue leyendo

[Fedora] ERROR en el chequeo de la transacción vs resolución de dependencias: WTF?

Intentando actualizar Fedora hoy me encuentro con que por el administrador de paquetes fallaba la actualización con un cartel medio extraño. Inmediatamente me voy a una consola, tiro un yum update y me encuentro con este error:

ERROR en el chequeo de la transacción vs resolución de dependencias:
kernel-uname-r = 2.6.40.4-5.fc15.x86_64 is needed by kmod-wl-2.6.40.4-5.fc15.x86_64-5.60.48.36-2.fc15.8.x86_64
kernel-uname-r = 2.6.40.6-0.fc15.x86_64 is needed by kmod-wl-2.6.40.6-0.fc15.x86_64-5.60.48.36-2.fc15.9.x86_64
kernel-uname-r = 2.6.41.1-1.fc15.x86_64 is needed by kmod-wl-2.6.41.1-1.fc15.x86_64-5.100.82.38-1.fc15.2.x86_64
Por favor, informe este error en http://yum.baseurl.org/report

Recuerden que hice un preupgrade (es decir actualicé de Fedora 15 a 16 sin reinstalar), con lo que aparentemente tengo un quilombo importante de paquetes.. Luego de investigar un rato largo y probar un par de comandos pude actualizar haciendo lo siguiente:

  1. Ejecutar yum check
  2. Desinstalar todos los paquetes que lista el comando anterior con yum erase <nombre de paquete o listado de los nombres de los paquetes>
  3. Actualizar felizmente con yum update o con la interfaz gráfica (no probé esta última).
  4. Profit!

Espero que les sirva de ayuda!

Saludos!

Nuevo Theme

Sólo quería comentarles eso.. Cambié el theme del sitio por uno un poco más limpio y liviano, con colores claros. Me cansé del anterior con colores tan oscuros y pesados, creo que el nuevo tema ayuda a la lectura. :-D El tema que elegí se llama Reddle por si alguien se lo preguntaba ;-)

 

Saludos!

Cómo actualizar Fedora 15 a 16 sin dolor

Después de un tiempo de usar Ubuntu 11.10 bastante conforme, con la llegada de Unity me ví en la encrucijada (?) de decidir si seguir con Unity o irme para el lado de Gnome3. Con la salida de Fedora15 teniendo la mejor implementación de Gnome3 a la fecha, decidí volver a la distro que había dado tantas satisfacciones.

Estuve usando Fedora 15 sin mayores problemas prácticamente desde que salió, incluso la personalicé bastante y quedé muy conforme con el resultado. Particularmente el tema Faience (del creador de los íconos Faenza) sumado a Zukitwo hace una combinación espectacular!

#EsTodoRisasHastaQue salió Fedora16, dado que había personalizado bastante mi instalación de F15, me daba mucha fiaca tener que instalar de cero F16 y reinstalar todas las aplicaciones y personalizaciones que había hecho (ni hablar que ni siquiera recuerdo como hice la gran mayoría). Investigando un poco me encuentro con preupgrade, que resulta ser un método soportado oficialmente para hacer upgrades de versiones en Fedora! :-) Sigue leyendo

New Feature for QtQR 1.3

QtQR IconAs asked by an Italian friend that posted a review on his blog (link). I’ve implemented Drag&Drop decoding support for QR Codes images directly from a website in QtQR.

You can see this in action in the following video:

You can expect this feature to be available in the daily PPA or wait for the stable release.

EDIT: Just if you don’t know, you can drag&drop to a QtQR dekstop launcher like showed in the next video, in this manner you don’t even have to open QtQR previusly to decode a file.

Any thoughts, bugs or feature request are more than welcome!

How to install QtQR in Fedora

Dependencies

QtQR 1.0/1.1/1.2 has the following dependecies:

  • PyQt4
  • qrencode
  • python-imaging (PIL or Python Image Library)
  • python-zbar
Sadly, the last one of these is not available to install via the yum package manager, or maybe it is in some repo I don’t know about. If you know where to find it please tell in the comments.

Installation

For installing PyQt4, qrencode and PIL you can use yum like this (remember to login or run as root):

yum install pyqt4 qrencode python-imaging

Once you got them installed you can go on installing python-zbar using easy_install:

easy_install zbar

If you get an “error: Setup script exited with error: command ‘gcc’ failed with exit status 1″ error, you need to install the zbar-devel package first, like this:

yum install zbar-devel

And there you go.. now you can download the sourcecode from Launchpad, decompress and run QtQR with the following command:

cd <dir of qtqr sourcecode>
python qtqr.py

Summary

In summary, this are the commands you need to run (as root) to get QtQR working:

su
(enter root password)
yum install pyqt4 qrencode python-imaging zbar-devel
easy_install zbar

Tested in Fedora 15, but if you find any difficulties please let me know in the comments.. happy hacking! :-)

Minutas del Primer PyDay SL

Hace dos días pasaba el primer PyDay realizado en la provincia de San Luis; en evento distinto para lo que se acostumbra a tener por estos pagos, pero que no dejo de ser interesante, acercando la comunidad Python y dando a conocer este hermoso lenguaje que tanto nos apasiona a los interesados que se acercaron a las jornadas. Sigue leyendo

¡Se viene el 1° PyDay San Luis!

Este Sábado 20 de Agosto tendrá lugar el 1° PyDay San Luis, a realizarse en la Escuela de Negocios de la Universidad Católica de Cuyo sede San Luis situada en la calle Felipe Velázques n° 471 de la ciudad capital puntana.

Se van a dar charlas de:

A continuación el cronograma del evento:

Para asistir al evento debés inscribirte vía web en http://www.pyday.com.ar/sanluis2011/user/register. Es importante que te registres, HAY CUPOS LIMITADOS.

 

Les dejo un enlace al PDF con Invitación al evento. ¡¡Por favor Difundir!!  ¡¡Gracias!! :-D

 

Organiza:

PyArUCCuyoSLX