Estructura aplicaciones PyGTK

Quiero explicaros una de las cosas que veo menos en los tutoriales y es sobre las estructuras de directorios para aplicaciones Python. Sigue una estructura parecida a las de Unix (¿POSIX?). Esta es la que he seguido para mcm y estoy bastante satisfecho con ella, por lo que voy a utilizarla como ejemplo:

  • mcm
    • doc
      • INSTALL
      • CHANGELOG
      • BUGS
      • manpage
    • conf
    • logs
    • bin
      • mcm.sh
    • mcm
      • __init__.py
      • terminal
        • __init__.py
      • common
        • __init__.py
        • utils.py
        • models.py
        • controllers.py
        • exceptions.py
      • gtk
        • __init__.py
        • mcm-gtk.py
        • mcm.glade
        • mcm_icon.png
      • qt
        • __init__.py
        • mcm-qt.gtk
Una aplicación no es sólo el código fuente, por lo que el orden en la documentación, ficheros de configuración y otros, merecen un lugar donde desarrollarse de forma independiente al desarrollo de la aplicación misma.
Cada páquete o modulo de Python es definido por el fichero __ini__.py y serán estos los que podremos importar dentro de nuestros modulos y conseguir un empaquetado bien definido que nos permitira cumplir con facilidad el principio DRY.
De igual forma podemos ver que la misma estrúctura de directorios define un modelo MVC lo que facilita mucho el desarrollo para diferentes presentaciones. En mcm, reutilizamos las clases y métodos definidos para la aplicación CLI en las aplicaciones gráficas para GTK y Qt. Esto lo logramos, en el caso de GTK definiendo distintos eventos que utilizan a los controladores para crear y modificar nuestros modelos. Por ejemplo veamos como añadimos una conexión desde la vista GTK:

  • def add_event(self, widget):
  •     # Obtenemos de distintas formas los datos necesarios
  •     connection = connections.connections_factory(x, y, z, a, b, c, d)
  •     connections.append(connection)
  • def save_and_quit(self):
  •      dao = Dao()
  •      dao.save(connections)
Lo mejor es que esto mismo lo hacemos en la parte Qt y cualquier otra vista que se nos ocurra.

Diferentes configuraciones para vim y vimdiff

Vimdiff es una utilidad muy importante de vim. Nos muestra en colores las diferencias entre dos o más ficheros o directorios y además podemos utilizarla como herramienta de "merge".
Dado que vimdiff es sencillamente vim en modo diff, se carga el mismo fichero .vimrc. Asi que si deseamos definir distintas opciones según el modo que utilicemos os propongo ésta solución:

Crear una función como:
function Vimdiff()
    nmap <F7> [czz
    nmap <F8> ]czz
    nmap <F2> do
    nmap <F3> dp
endfunction

Y a continuación la magia, añadimos al final de nuestro .vimrc lo siguiente:
au FilterWritePre * if &diff | call Vimdiff() | endif

He definido que las teclas F7 y F8 vayan a la anterior y posterior diferencia y centren la pantalla en estas. Las teclas F2 y F3 mueven los cambios de un lado del buffer al otro.

Espero os sea útil.

Monocaffe Connections Manager 0.4

Nueva versión de mcm para lo cual he creado un nuevo sitio para mantener toda la información al respecto.

 Monocaffe Connections Manager

Esta nueva versión añade la posibilidad de importar un fichero CSV generado a partir de una hoja de cálculo y de exportar a un fichero HTML. Tambien he añadido conexiones HTTP para consolas de Jboss. Además he iniciado la creación de la aplicación en GTK, por lo cual he añadido la opción de grupos para facilitar la ordenación. Finalmente he mejorado la introducción de opciones para los distintos clientes, por lo que ahora se pueden definir incluso túneles SSH.

Descargad desde el sitio del proyecto.

Xbox Live Bridge

El siguiente es un sencillo script para crear un bridge y poder conectar una Xbox utilizando la wifi de un portátil. Si tienes la WiFi de la Xbox esto no hace falta.

Lo que hace es crear un bridge utilizando IPTables que enruta el tráfico entre las dos interfaces. Solo hay que cambiar en el script el nombre de las interfaces de red.

Descargad

Monocaffe Connections Manager 0.3

He terminado la versión 0.3 de MCM. Si tenemos "dialog" instalado, al ejecutar sin ningún argumento, nos mostrará un menú con los servidores y con pulsar ENTER sobre alguno, abrirá la conexión. También he cambiado el fichero .mcm donde se guardan los datos de las conexiones para utilizar XML y eliminar un pequeño bug que había. También he añadido conexiones FTP.

Podéis descargarlo desde aqui

This software is designed to ease the management of connections to several types of servers. Since I couldn't find any solution to handle all types of connections from a console, mcm was born. The idea is to avoid having to maintain a separate spreadsheet or wiki page with all the servers I usually connect to and keep that monster open during my work sessions.
There are other solutions, but each handled either ssh only connections, or graphical connections (like vnc). Also, this graphical connections managers were designed to have a GUI and a single command from the console is what I wanted.
My main objective is to provide a fast and reliable mean to store the information of this connections and be able to reach them fast and easily.

Click here to download version 0.3

Screenshot!