
Publicado: 2026-05-19
Etiquetas: Gimnasio Open Source, Inkscape, Software
Buenos días, tardes o noches:
Hace ya muchos meses que no publico aquí ningún ejercicio tipo Gimnasio Open Source y la cosa tiene que cambiar. Estos días he estado jugando con el servidor de bases de Postgres. Ya tengo hecho mi "Good morning, Vietnam!" y tonterías similares. Cuando haga algún ejercicio más lo contaré pero este artículo trata de Inkscape que fue mi víctima anterior.
Hace varios meses empecé una nuevo "entrenamiento" con Inkscape. El código de la aplicación está en C++ con GTK, hice algún pequeño cambio pero me aburrí enseguida y lo dejé. No me dio ni para un artículo corto para el blog. Pero me di cuenta de que el programa también incluye un montón de código Python. Todas las extensiones, programas para importar formatos y similares están en Python. Ya hacía tiempo que me apatecía tocar algo en este lenguaje pero no había encontrado ningún proyecto de software libre que me gustase así que lancé a por las extensiones. Hice el tutorial de extensiones y luego me puse a ojear el código.
Era una caso similar al de Busybox: cada extensión es un script independiente así que es posible centrarse en uno solo hasta entender bien cómo funciona. No hace falta ir saltando de ficheros salvo para ver las funciones que vienen de una pequeña librería común llamada Inkex. La mayoría de extensiones son bastante sencillas y hace una sola operación: invertir colores, quitar el azul, unir puntos... Es bastante accesible para una persona que está empezando con el lenguaje.
En un momento dado llegué a un trozo de código que tenía una variable no definida. Asignaban un valor a color pero en verdad debería haberse llamado colour. Faltaba una "u". En Python no hace falta declarar variables así que los errores de este tipo pueden pasar desapercibidos. Este fallo estaba en una extensión para cargar ficheros de un formato bastante raro llamado CGM (Computer Graphics Metafile) así que es posible que ese código nunca se hubiera ejecutado y nadie se hubiera percatado del problema.
Pasé una semana aprendiendo sobre el formato CGM y me di cuenta de que no lo usa prácticamente nadie. Solo fui capaz de encontrar en internet unos 10 ficheros en ese formato. Ninguno llegaba a ejecutar la línea de código con la variable no definida. Tengo en mi directorio de borradores un artículo escrito en marzo sobre esa aventura pero no me apetece revisarlo así que se va a quedar ahí de momento. Tras mis investigaciones, me convencí a mí mismo de que realmente faltaba una "u" en esa línea. Envié un parche a Inkscape añadiendo la letra. El proyecto usa Gitlab así que los cambios se llaman MRs. En menos de una hora ya me lo habían revisado y aprobado. Qué velocidad.
En abril mi empresa organizó el "mes del voluntariado" y nos animaban a colaborar con alguna organización sin ánimo de lucro. Yo decidí hacerlo con Inkscape. Me pasé una tarde abriendo extensiones e intentando ejecutarlas con distintos objetos para ver qué pasaba. Arreglé un error en una extensión que invertía colores y un cuelgue en otra para sustituir tipos de letras. Los dos MRs fueron aprobados rápido pero por alguna razón aún no los han integrado. Unos días después arreglé otro error en la propia librería Inkex pero aún no lo han revisado. Creo que están preparando una nueva versión de Inkscape para este mes así que quizá están en "code freeze".
Cuando integren los MRs que tengo abiertos seguramente envíe algún otro. Las extensiones de Inkscape funcionan bien pero fueron escritas a lo largo de los 20 últimos años y se pueden mejorar. A veces hay referencias a Python 2 que se podrían eliminar, estructuras que han aparecido en versiones de Python recientes y que harían el código algo más limpio, las funciones solo están parcialmente tipadas, faltan tests. No es culpa suya. Por lo que he visto son 2 personas y también se encargan del programa principal. En fin, si te apatece practicar un poco de Python a la vez que colaboras, en las extensiones de Inkscape hay mucho trabajo.