Desarrollo de Monocaffe Connections Manager

Varias personas ya me han preguntado cómo he desarrollado MCM y ésta entrada va de ello, sobre las herramientas y tecnologías utilizadas y la justificación detrás de cada una de las razones y consecuencias. Aunque parezca una aplicación sencilla, utiliza muchas tecnologias creadas por muchas otras personas y que sin alguna de estas, quizás MCM no existiria.

Resumen
  • Python
    • PyGTK
    • VteTerminal
    • minidom
    • json
    • csv
    • urllib
    • optpars
  • VIM
    • exuberant-ctags
  • Glade
  • Bazaar
  • Dialog
Desarrollo

En su totalidad, MCM está escrito en Python y utilizando sólo las herramientas propias de Python y PyGTK. Esto me permite distribuir MCM sin que dependa de instalaciones complicadas o de cientos de paquetes ya que estos vienen por defecto con cualquier instalación de GNOME.

mcm + vim + exuberant-tags

Para escribir MCM, ninguna herramienta mejor que VIM. Exuberant-ctags permite mostrar una ventana dentro de VIM para navegar las clases y métodos de un fichero.

GUI

Para crear el GUI, se crea la mayoria de ventanas y dialogos utilizando Glade. Es un GUI para crear GUI's. Con una interfaz sencilla podemos crear todos estos widgets y configurar sus propiedades y señales. Para efectos dinamicos o widgets más complicados (como el breadcrumb) utilizamos PyGTK directamente. Despues de crear los widgets y sus señales, para manejarlas en código debemos leer el fichero que genera Glade (un XML):

gtk.glade.XML(glade_file)

Para interactuar desde el código con los objetos creados por libglade, debemos referenciarlos:

self.main_window = self.xml.get_widget("main_mcm")

Glade permite ahorrar una cantidad de trabajo y código gigante. Al ser XML los ficheros que genera, no es necesario utilizar Glade para realizar modificaciones sencillas (nombres de objetos, señales, etc.) y creo que cualquier lenguaje serio tiene una librería para leer estos ficheros y generar interfaces.


Con Glade hay que ir con cuidado porque de vez en cuando le da por no funcionar como debe, pero nada que no se arregle guardando a menudo y reiniciando.

Launchpad

En launchpad.net se nos ofrece para nuestro proyectos OSS todo lo necesario y a la ultima, como el gestor Bazaar que viene con una GUI muy sencilla. Bazaar es un sistema de versiones distribuido, lo que significa que no hace falta un repositorio central para utilizarle. Los merge se hacen de forma muy sencilla al igual que crear ramas. El sistema de gestión de bugs de Launchpad es muy sencillo y me gusta mucho la relación real que existe entre los fallos, los milestones y los releases. Tambien ofrecen una herramienta para ayudar en la traducción de proyectos, pero hace falta algo de trabajo para hacerla funcionar correctamente y espero conseguir tiempo en el futuro para esto.


¿Microsoft Windows?

Dado que GTK y Python funcionan perfectamente sobre Windows, me imagino que MCM también. No he llegado a probarlo por lo que si alguien se anima, que me comente sus resultados y si hay interés, se puede hacer una rama aparte para su desarrollo. El único problema que veo ahora mismo sería el modo en el que se generan las terminales utilizando VteTerminal y no estoy seguro de que estas funcionen correctamente en Windows.

2 comentarios:

  1. Esta elevada esta explicación. Lo haces ver bien fácil.

    Apenas he visto un poco de php, y apenas conozco el potencial de python.
    Creo que debo repasar mucha teoría: eso de la GUI me interesa, es básicamente todo lo que un IDE Microsoft hace...
    ¿Porque no con Java? ¿Filosofía de software o acaso es más funcional con Python? Lo que pasa es que quiero dar un paso definitivo en programación, hacia linux en forma gráfica, pero por ahora solo busco opiniones

    ResponderEliminar
  2. Java es mi herramienta diaria, por lo que quería algo nuevo y refrescante y Python lo es. Con Java seguro se podría haber logrado los mismos resultados aunque la gran ventaja de Python fue una libreria con la que se crea la consola (gtk.vte) que hace que todo sea más sencillo sin la necesidad de implementar una nueva terminal.
    Java es un gran lenguaje de programación al igual que Python ya que los dos son multiplataforma, libres y con una gran cantidad de librerias de apoyo.
    Sinceramente, aprende Java o .Net, la cantidad de trabajos que hay es impresionante. Para Python, no tanto.

    ResponderEliminar