Notas publicadas en la categoría Programación

Hace unos días atrás, Claudio escribió acerca del tiempo que Eog toma en guardar el nombre de archivo de una imagen utilizada recientemente en el archivo ~/.recently-used.xbel. La razón: el archivo ~/.recently-used.xbel era demasiado grande. Si recuerdo bien, FileChooser solía tener el mismo problema.

Pasar de 5.8 MiB a 1.8 MiB, vía la eliminación de todos aquellos archivos que ya no existen en el sistema, pareceria una buena ganancia. Pero quise ir un poco más allá y me pregunté ¿Cuántos archivos recientes realmente necesita manejar una aplicación? (bueno, no fuí mucho más allá :-) No creo que más de 10, pero que alguien me corrija si me equivoco.

Así que escribí mi propia versión del programa de Claudio considerando este antecedente. Y mi archivo ~/.recently-used.xbel pasó de 1.2 MiB a 54 KiB. Antes de ir al script, muestro los números que obtuve en un computador con menos de dos meses de uso no intensivo:

gpoo@pendragon:~$ python clean-recently-used.py -v
Summary:
     1 Reproductor de películas Totem
     1 Glade
     4 GNU Image Manipulation Program
     4 Navegador web
     9 Visor de documentos Evince
     9 File Roller
    14 Web Browser
    15 Gnumeric Spreadsheet
    26 gedit
    34 Administrador de archivos
    36 Evince Document Viewer
    52 Totem Movie Player
   292 File Manager
  1151 Eye of GNOME Image Viewer

Si cargo Eog, éste sólo me muestra los últimos 5 archivos abiertos. ¿Por qué necesita almacenar 1146 archivos adicionales?

No importa. El script que escribí es simple. Borra los archivos que no existen (usando la misma estrategia que el programa de Claudio), pero también borra los archivos que no han sido utilizados tan recientemente. Y obtuve los siguientes números:

gpoo@pendragon:~$ python clean-recently-used.py -v
Summary:
     1 Glade
     3 GNU Image Manipulation Program
     4 Navegador web
     8 File Roller
     9 Visor de documentos Evince
    10 Totem Movie Player
    10 Eye of GNOME Image Viewer
    10 Web Browser
    10 Gnumeric Spreadsheet
    12 Evince Document Viewer
    13 Administrador de archivos
    14 gedit
    41 File Manager

Es posible colocar el script para ser ejecutado al inicio de la sesión o programarlo como una tarea en cron.

También se puede jugar con el script utilizando la opción -v, la cual sólo entregará un resumen del uso del gestor de archivos recientes.

Por cierto, es lento al borrar archivos (medido en segundos), pero es mucho mejor cuando ésto está bajo control.

Hoy di lo que fue mi primera charla del año. La charla fue sobre Python y ví un par de ejemplos de extensiones usando PyGTK. Pensé que tendría tiempo para preparar una, pero finalmente tomé una que di el año pasado. Por tiempo, no pude asistir a las charlas de la tarde. Espero que Javier continúe organizando charlas, más esporádicas y no necesariamente de todo el día.

Hay muchos alumnos interesados y eso que faltaron muchos otros que me consta que son amigos del pingüino. Se ve que hay ganas de realizar actividades y de participar, aunque por ahora hay mucha dispersión. Lamentablemente, ya no tengo ni el ánimo ni el humor para organizar nada que tenga que ver con la FACE o con la universidad; aunque no tengo problemas en dar charlas o consejos (siempre que no sean en la FACE).

Me llamó la atención una parte del comentario de Fernando Ruiz:

[...] me agredo conocer a [...] German Poo, que pa mi era como un mito urbano eso que trabajaba en la ubb[...]
«mito urbano», ¿qué tal? :-)

Por otro lado, anteriormente me habían invitado del Instituto Profesional Virginio Gómez de Los Angeles para la FLISOL, pero no pude ir.

Para el 30 de junio estoy invitado a dar 2 charlas en «Open Community», que se realizará en la Universidad de Ciencias de la Informática, en Santiago. Una será de Mercurial y la otra será de desarrollo en GNOME con PyGTK.

En general, los ambientes integrados de desarrollo (también conocidos como IDE) son similares en su concepción: están orientados al desarrollo de nuevos programas o aplicaciones. Y en las charlas de programación que he dado, siempre es una pregunta frecuente entre los interesados en un nuevo lenguaje o ambiente.

Por otro lado, todo libro de Ingeniería de software indica que el mayor esfuerzo se encuentra en la mantención del código; ya sea vía añadir una nueva funcionalidad o bien corregir algún un fallo. Pero los IDE no tienen una orientación hacia la mantención. Hay un estudio hecho en la Universidad de Carnegie Mellon, publicado en diciembre de 2006 en IEEE Transactions on Software Engineering, titulado «An Exploratory Study of How Developers Seek, Relate, and Collect Relevant Information during Software Maintenance Tasks» (disponible en la página del autor), que sirve para darse una idea del comportamiento de los programadores cuando deben mantener código ajeno.

Tal vez podría entenderse como un estudio de usabilidad de un IDE, en este caso: Eclipse. Se muestran los puntos débiles así como sugerencias para mejorar el entorno de cara a la mantención.

De forma particular, el artículo me llamó la atención porque precisamente mi incursión en el código de Postgresql para mi proyecto en Google. No es que el artículo me fuera ayudar mucho en términos prácticos, pero si para satisface mi curiosidad acerca de lo que se teje últimamente al respecto.

Uno de los aspectos relevantes es la falta de un buen apoyo en la navegación del código. Allí no mencionaron que existen otras herramientas para dicho proceso, que muchas veces pasan desapercibidas. Es el caso de CScope, que existe hace mucho tiempo en UNIX y que es libre desde el año 2000.

CScope es una herramienta para buscar y navegar a través del código. Para que la búsqueda sea rápida, CScope genera una base de datos de todos los símbolos de un proyecto. Y es realmente rápido. En los IDE existen algunos mecanismos de búsqueda, pero no tan cómodos y potentes.

Interfaz curses de CScope
Interfaz curses de CScope

Es muy útil, no sólo cuando se carece familiaridad con el código. Lo que desconocía es que nuestros vecinos de KDE disponen de una interfaz gráfica llamada KScope. Es fácil tener a la vista desde que archivos se hace referencia a un símbolo (sea función, variable, etc.) e incluso una gráfica personalizable. En cada caja es posible ver donde se define, que funciones llama, desde donde es utilizada, entre otras búsquedas.

Interfaz KDE de CScope

Lo mejor de todo, es que uno puede utilizar indistintamente cualquiera de éstas dos interfaces. La gracia de KScope es la persistencia de la sesión, así, la siguiente vez se inicia en el mismo punto que uno quedó en la última sesión.