Nautilus Renamer y Lecciones Aprendidas


En estos días me contactó una persona que buscaba un desarrollador python para dos o tres cositas. Como de costumbre lo primero que hice fue invertir 10 minutos en google para buscar quién era esta persona. Así me enteré que era un fotógrafo de la ciudad de córdoba que se había metido recientemente en el mundo de linux con Ubuntu. Ví que pasó por foros de ubuntu-es, foros de grulic(Grupo de Usuarios de Software Libre de Córdoba) y varios otros foros. Encontré su sitio web profesional, lo que me dió una idea de lo que esta persona buscaba. Me llamó mucho la atención que nadie le haya respondido en esos foros. Se me ocurrió probar si podía hacerlo y en caso negativo, derivar la solicitud a la lista de correo de Ing. en Computación de la UNC o Ing. en Sistemas de la UTN, donde seguro alguien iba a responderle. Me encontré con varios errores mios, que de otro modo , tal vez no hubiera notado.

Lo que me solicitaba no era algo del otro Mundo(para alguien que la tiene clara), pero si algo que suena más fácil de lo que es(para mi): un renombrador masivo de archivos que cumpla con varios requerimientos, entre los cuales estaba la integración con nautilus. Así que como mal programador que soy, empecé por el final.

Interfaz

Pasé por WxPython y varios otros, pero terminé con QTDesigner . La interfaz quedó bonita pero vacía, dado que no había nada de código por detrás.

Lenguaje

El requerimiento era python, pero pasé por crear una aplicación simple en C++ hasta que finalmente, luego de dos años de no usar C++, recordé que Python era muuuuuuuuuuuuuuuuuuuucho más fácil, entretenido y rápido. Así que volví a Python, pidiendole disculpas al lenguaje por haber osado traicionarlo.

Nautilus

Leí bastante sobre la integración con nautilus y descubrí que es bastante simple, así que me fui por las ramas armando scripts para el nautilus y probando las 4 variables que da, como si fueran 500. ¿Sabían que poniendo algo en la carpeta de scripts del Nautilus directamente aparece en el menú contextual?

Código

Despues de darle vueltas a la integración con nautilus, armé el primer código funcional en python que cumplía con algunos de los requerimientos. Después fue bastante fácil relacionar la interfaz que había armado con QTDesigner.

A la Basura

Mientras iba agregando de a poco funcionalidades y probando varias cosas, me encontré con otros proyectos similares, como el metamorphose . Pero no es exactamente lo que yo quería armar. Más allá de mis limitaciones por no ser experto en python, mi idea ,y creo que la idea del cliente, era algo mucho mas simplista que Metamorphose. Pero de todas formas me puse a investigar el código para ver cómo podía mejorar mi propio programa. Después de algunas horas me puse a armar un script de nautilus sumado a un pequeño programa en python hecho por mi para usar el metamorphose pero reduciendo la interfaz a algo mucho más simple.

Finalmente opté por terminar mi aplicación en python con todo lo que le había agregado, pero solo me faltaba una cosa básica: Verificar que no exista algo igual en internet. Me parecía inmoral y una pérdida de tiempo cobrar por algo que se solucionaba pasando un link. Y sorpresa!, me encontré con nautilus-renamer: Un script PARA nautilus hecho totalmente en python. Me asombré de ver que era exactamente lo que yo estaba armando, de hecho en una semana más mi idea era tener algo casi idéntico a eso. Pasó por mi cabeza por unos segundos revisar el código para ver cómo podía mejorar mi aplicación (que ya funcionaba relativamente bien, pero no era tan completa) y me dio algo de risa encontrarme con similitudes en todo el código, a esta altura me parecía rídiculo seguir mejorando lo que tenía armado si alguien ya había pensado casi exactamente en todo mi código , pero además con varias mejoras.

Traducción

Este programa no necesitaba muchos cambios para ser lo que el cliente me pedía, así que comencé por lo básico: Traducción. Vi que el autor había sido tan amable de integrar gettext en su código así como yo lo había hecho en el mío. Encontré una supuesta traducción al español en launchpad, pero para ser franco, no me gustaba porque tenía demasiados errores. Así que hice mi propia traducción. Ahora el programa estaba en Español.

Optimización

Revisando el código no encontré errores graves, lo cual era obvio dado que el autor ya había pasado por dos revisiones, pero sí me encontré con algunos fallos bastante extraños usando carpetas con símbolos extendidos, lo cual si me pareció muy raro porque fue lo primero que yo solucioné en mi aplicación. Después de revisar el código entero una y otra vez, no encontré el error puntual y noté que se daba en mi Ubuntu de VirtualBox, pero no se daba en mi Arch Linux nativo(asumí que tenía que ver con el idioma, pese a que no encontré mucho para debugearlo bien), así que cambié solo unas muy pocas lineas para evitar esto y listo.

Instalación

El cliente, el cual a este punto me parecía inmoral llamar “cliente”, me había pedido que todo esté en un .deb para evitar tener que usar la consola. Me pareció un pedido lógico y me identifiqué bastante: A todos nos costó un poco acostumbrarnos a la consola o descubrir los poderes de ésta y al fin y al cabo solo la comenzamos a usar porque queríamos aprender e investigar. Pero esta persona, por más que usar linux ya da una idea de que busca aprender cosas nuevas, necesitaba este sistema operativo por razones laborales y es más que entendible que merece tener las cosas un poco más faciles. No quiere tontear, no quiere dar vueltas, quiere trabajar.

Encontré que el nautilus-renamer viene con un script de instalación. Yo lo había instalado y desinstalado 40 veces por consola para probar cosas, así que solo agregué las pocas lines necesarias para poder darle doble click al archivo INSTALL y que se instale solo.

Resultado final

Se instala con doble click, está en español, cumple con varios requerimientos: es fácil de usar, no tiene funciones al pedo, y puede cumplir con renombrar archivos siguiente muchas opciones como:

  • Pasar todo a mayúsculas
  • Pasar todo a minúsculas
  • Sustituir cadenas de texto
  • Renombrar muchos archivos siguiendo un patrón numérico (de cantidad de cifras definidas), por fecha, por nombre de carpeta, por nombre de archivo, etc, etc (muchos muchos más)
  • Previsualización de los cambios
  • Cambiar nombres en subdirectorios seleccionados
  • Deshacer la última operación realizada en cada carpeta donde fue usado.
  • Otros

Lecciones aprendidas

¿Cuánto le cobro? No se, se me ocurrieron muchos números. Obviamente descarté las cifras iniciales porque el desarrollo real en python nunca fue entregado. No le estoy entregando un programa hecho por mi. Invertí bastante tiempo, pero creo que el error fue (como siempre en mis experiencias como programador) comenzar por el final. Lo primero que tendría que haber hecho es buscar programas similares, encontrar el nautilus-renamer, que es opensource, modificar la interfaz a pedido del cliente, optimizar un poco el código, traducirlo y entregarlo en el día, cobrando de forma correcta lo que corresponda. Pero no, perdí mucho tiempo y me frustré al encontrarme con que todo lo que había hecho era reinventar la rueda y por eso hasta me bloquié mentalmente y no tenía ni ganas de hacerle cambios gráficos al programa, porque por más que no es gráficamente lo solicitado, es similar e igual de sencillo. También fue frustrante chocar con la idea de que me falta mucha práctica en python y realmente tengo que volver a repasar muchisimos conceptos.

Después de no dormir el Sábado para poder terminar mi propio programa rápido, quedé un poco tonto y anoche entre borrar archivos, traducciones y cosas, aparentemente borré todo lo que había hecho en python que estaba en la imagen de Virtual Box. Este proyecto es algo que tal vez un profesional podría hacer en poco tiempo(horas), pero como me costó bastante, me decidí a dejarlo como está.

Le envié el nautilus-renamer modificado al cliente y un pequeño pdf indicando cómo usarlo. No invertí tanto tiempo en esto, y de hecho la mitad del tiempo que invertí fue por no manejar bien el proceso y por no saber algunas cosas de python (fiaca de leer el manual en su momento y de volver a practicar?), pero me sirvió para darme cuenta de muchas cosas.

Les dejo el programa en un ZIP y un muy breve pdf. Debo comentarles que lo que aparece en el pdf está pensado para la persona que me contactó y les recomiendo instalar y probar el script para ver realmente lo que puede hacer.

Nota mental: No reinventar la rueda, repasar python, repasar proceso de desarrollo, repasar proceso de marketing/desarrollo.

Saludos

Tom

 

4 pensamientos en “Nautilus Renamer y Lecciones Aprendidas”

    1. Muchas gracias por el dato, Rubén!!. Apenas pueda me pongo a revisar el código. Ahora estoy de vacaciones y lejos de mi computador(a), pero apenas vuelva intento instalarlo en algun Ubuntu para chequear esto.

  1. Hola:

    Hace tiempo instalé este script en ubuntu 10.04 tls y me funcionó sin problemas. Sin embargo ahora he querido instarlo en la misma versión y en el momento de abrir el archivo install y ejecutar en terminal se me abre rápidamente la terminal aparecen montos de textos que no consigo leer y con la misma se cierra la terminal.
    ¿Conoces alguna posible solución?

    Un saludo y gracias de antemano

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *