QtQR 1.4 Released

About QtQR 1.4

I’m glad to announce that since this morning, python-qrtools and QtQR are both available in their 1.4 version for download in the daily PPA (https://launchpad.net/~qr-tools-developers/+archive/daily)

The 1.4 version includes several bug fixes, support for saving the generated codes in several image formats besides PNG (with the collaboration of Joanthan Greig), no crashes when trying to decode from webcam and there is no webcam attached, support for “WiFi Networks” QR codes and a lot more!

What is coming next?

There won’t be anymore updates to the 1.4 version, don’t expect a QtQR 1.5. The next step is a complete rewrite of both the qrtools backend and, in consequence, of QtQR also. This will be the 2.0 version.-

Enjoy!

Qt Apps look like crap in elementaryOS

I’m running the beta1 of elementaryOS (http://elementaryos.org), so far I’m loving it! :D but, as you might know, I use Qt4 for my developments and I happen to like a lot of apps written with this framework, the problem is that eOS doesn’t have the qt4lib installed by default and when you install it and run any Qt app it looks like total crap. Like going back to Gnome 1.0. And you can get an error saying that “QGtkStyle was unable to detect the current GTK+ theme”.

You can solve this with this following command:

gconftool-2 --set --type string /desktop/gnome/interface/gtk_theme elementary

Yay! Now you can enjoy your Qt Apps in eOS :)

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!