geco

Hace poco escribí un artículo para la revista Novática, por ser un proyecto finalisata en la tercera edición del CUSL.
Ya se ha publicado la revista y aquí dejo el resultado final.El artículo puede leerse en la versión en papel en el número 203.

Ya están disponibles los paquetes debian de geco. Todo el proyecto está compuesto por un total de cuatro paquetes independientes:
- gecod: Servidor GECO, es el que tiene la base de datos y el que alamacena la contraseñas. Combinandolo con cualquier cliente tienes un gestor de contraseñas completo.
- python-gecoc: Módulo python que proporciona las funcionalidades necesarias para crear un cliente geco o para interactuar con un servidor geco desde python (de este dependen los clientes gtk-geco y web-geco). También incluye el script terminal-geco
- gtk-geco: La interfaz de escritorio. Es la interfaz más completa y usable. Ofrece toda la funcionalidad.
- web-geco: Interfaz web. Con esta interfaz puedes ofrecer un servicio de acceso a contraseñas remoto
Para usarlo como un gestor de contraseñas de escritorio es necesario instalar gecod, python-gecoc y gtk-geco. El servidor se lanzará por defecto, por lo que el cliente de escritorio deberás conectarlo a https://localhost:4343 que es tu servidor gecod, te registras, guardas tu configuración y a disfrutar.
Trucos para gtk-geco
Si pulsas con el botón derecho sobre una contraseña se copia la cuenta al portapapeles no la contraseña.
Si haces doble click sobre el icono aparecerá un dialogo de busqueda, para un acceso más rápido.
Pulsando con el botón derecho sobe el icono aparecen más opciones.
Si te dice que no ha encontrado el fichero de configuración y ya existe, es posible que hayas puesto mal la contraseña, pulsa en olvidar y luego en preferencias, volverá a pedirte la contraseña.
Otras cosas
Por otra parte he añadido nuevas funcionalidades al cliente de escritorio. Por ejemplo ya se puede cambiar la contraseña maestra desde la preferencias. Además de poder realizar busquedas con autocompletado y también es posible copiar la cuenta en lugar de la contraseña al portapapeles.
Ah, y he cambiado el desarrollo del proyecto a la forja de sugus, así que si te interesa participar, te falla algo o tienes alguna sugerencia, puedes crear una petición nueva.

Esta semana, los días 7 y 8 de Mayo ha tenido lugar la fase final de Concurso Universitario de Software Libre. Esta final, como las dos anteriores ha tenido lugar en la Escuela Técnica Superior de Ingeniería Informática de la Universidad de Sevilla. Y como en anteriores ediciones ha consistido en dos días completos de ponencias y charlas, incluyendo entre estas las presentaciones de los seis proyectos finalistas y la entrega de premios.
Este año además de como colaborador he asistido como finalista con el proyecto GECO. Además este año se ha celebrado la fase final en el salón de actos mientras que en años anteriores se hizo en el salón de grados. El salón de actos es realmente grande y separa muchísimo a los ponentes del público, algo que intimida al ponente y por otra parte hace que los asistentes tengan más complicado participar con preguntas.
Como en todo evento de este tipo lo más importante es relacionarse con ponentes y otros participantes, compartir ideas e impresiones, poner cara a gente que sólo conoces a través de internet y hacer amigos.
Yo por mi parte he aprendido mucho de los demás participantes y ponentes, me gustaría haber hablado más, pero por diferentes motivos al final hemos hablado poco, pero bueno, ha estado bastante bien.
El año que viene no creo que pueda participar, porque comenzaré con los estudios de doctorado, que quedan fuera del ámbito del concurso, pero me tocará colaborar, medio organizar y espero poder "tutorar" o ser el mentor de algún estudiante que necesite mi ayuda o guía para participar. Tengo varios proyectos para el que no tenga nada en mente y seguro que saldrán muchos más.
Premios
Premio innovación: eOPSOA
Finalista innovación: Cool Imaging
Premio comunidad: AVBOT
Finalista comunidad: Digital Coach
Premio ocio: Tucan
Finalista ocio: Geco
Los premiados se llevan 2000 euros y una subscripción a Linux Magazine y los finalistas 1000 euros y una subscripción digital.
Quiero decir que para los participantes el concurso no acaba aquí, en septiembre comienza de nuevo y podréis participar incluso mejorando el mismo proyecto, si os pasa como a mí que ya acabáis y demás siempre podéis seguir ligados al concurso colaborando a la difusión, impulsando a nuevos alumnos universitario a participar e incluso colaborando con los proyectos, porque no olvidemos que esto es software libre y que toda colaboración es bienvenida.

Para la presentación de GECO en la Fase Final del Concurso Universitario de Software Libre he preparado un pequeño comic en el que creo que se muestra de una manera más clara y amena el porqué de GECO.

El 28 de abril se dió a conocer la lista de finalistas del tercer concurso universitario de software libre (CUSL3) y resulta que GECO ha salido seleccionado.
Esto es una gran noticia después de que en el concurso local de Sevilla también recibiera un premio, así que parece ser que el tiempo y esfuerzo dedicado a este proyecto está dando sus frutos.
GECO no nació como un proyecto para ganar el concurso, tan solo era una necesidad personal que quería implementar y para la cual aproveché el concurso como medio de motivación y una oportunidad para aprender un poco más. Marcandome unos plazos e implementando la parte funcional primero he conseguido un proyecto que podría considerarse casi cerrado, hoy en día se podría decir que está en la versión 0.99, tan sólo falta por añadir una pequeña funcionalidad a los clientes, pero que gecolib ya contempla.
Muchas gracias a todos los que han hecho posible este concurso y a todos los participantes. Una idea que no se intenta llevar a cabo es una idea menos. Así que ningún desarrollo es en vano.

Cada vez que hago un desarrollo comienzo creando una carpeta y a partir de esa carpeta raíz del proyecto comienzo a generar todo lo necesario para que se pueda ejecutar. Hasta hace bien poco GECO estaba así y se podían ejecutar cada una de sus partes, tanto el servidor como el cliente de forma simple tan solo entrando en el directorio correspondiente y lanzando el script.
Pero cuando comienzas a utilizar un programa de manera más o menos habitual, no es cómodo el tener que entrar en el directorio correspondiente y lanzar el script, para un uso habitual es más conveniente el tener el programa instalado como uno más del sistema. Y esto es lo último que he realizado, un instalador sencillo que te deja todo donde "debe" estar para facilitar el uso.
Python ofrece una forma sencilla de hacer instaladores de módulos y programas, es el conocido módulo distutils. Normalmente los programas en python cuando te los descargas vienen con un fichero setup.py el cual hay que ejecutar para que se instale en el sistema, es una especie de make, pero para python.
¿Cómo crear un fichero setup.py?
El fichero setup.py no es más que un pequeño script en python en el cual tendremos que definir qué queremos que se instale, autor, descripción y otros datos.
Veamoslo con ejemplos:
# setup.py de gecoc from distutils.core import setup setup(name = 'gecoc', version = '1.0', description = 'geco client lib', author = 'Daniel Garcia Moreno', author_email = '<dani@danigm.net>', url = 'http://bzr.danigm.net/geco', license = 'GPLv3', scripts = ['terminal-geco'], packages = ['gecoc'] )
$sudo python setup.py install
Con este script se puede instalar la librería gecolib que está en el paquete gecoc y el script terminal-geco. La mayoría de las opciones se entienden perfectamente, son datos opcionales que dan información sobre el programa. Las partes importantes en este ejemplo son las opciones scripts y packages. Scripts instala la lista de scripts en /usr/bin y packages instala un paquete python (directorio con __init__.py) en /usr/lib/pythonX.X/site-packages/.
El directorio destino de la instalación se puede cambiar y poner otro en lugar de /usr/, por ejemplo /usr/local/
$sudo python setup.py install --prefix=/usr/local/
# setup.py de gtk-geco from distutils.core import setup import os datafiles = [] for i in os.listdir('glade'): datafiles.append(('share/gtk-geco/', ['glade/'+i])) datafiles.append(('share/pixmaps', ['geco.png'])) datafiles.append(('share/applications', ['gtkgeco.desktop'])) setup(name = 'gtk-geco', version = '1.0', description = 'gtk client for geco', author = 'Daniel Garcia Moreno', author_email = '<dani@danigm.net>', url = 'http://bzr.danigm.net/geco', license = 'GPLv3', data_files = datafiles, scripts = ['gtk-geco'], py_modules = ['gtkgeco'], packages = ['gecoc'] )
Este otro ejemplo es el instaldor de la aplicación de escritorio gtk-geco. En este caso además de instalar un script y el paquete gecoc se instala un módulo python, que es un simple fichero .py y una serie de datos, que se hace con data_files. Con datafiles se puede instalar cualquier tipo de archivo en cualquier ruta del sistema. Si la ruta es relativa se instala a partir de La ruta /usr (o la que se haya especificado), y si la ruta es absoluta se usa esa. La ruta define un directorio y la lista de ficheros siguiente serán los que se copien a dicha ruta.
Facilitando un poco más la instalación
Tengo el código dividido en dos carpetas dentro de src, gecod y gecoc y dentro de gecoc está gtk-geco y web-geco que son dos clientes diferentes. Para facilitar la instalación he creado un script en bash que se encarga de instalar el módulo que deseemos de manera sencilla:
#!/bin/bash function install_help(){ echo "Ayuda del instalador $(basename $0)" echo " Con este instalador puedes instalar:" echo " gecod" echo " gecoc" echo " gtk-geco" echo " web-geco" echo "" echo " Usalo pasando como argumento el nombre de lo que quieras instalar" echo " por ejemplo:" echo " sudo ./$(basename $0) gecod" } root=$PWD if [ "$#" -eq 0 ] then install_help exit 0 fi while [ "$#" -gt 0 ] do case $1 in -h | --help) install_help shift ;; gecod) cd $root cd src/gecod/ echo "instalando gecod" python setup.py install shift ;; gecoc) cd $root cd src/gecoc/ echo "instalando gecoc" python setup.py install shift ;; gtk-geco) cd $root cd src/gecoc/gtk-geco echo "instalando gtk-geco" python setup.py install shift ;; web-geco) cd $root cd src/gecoc/web-geco echo "instalando web-geco" python setup.py install shift ;; *) install_help shift ;; esac done
Y con este instalador instalar por ejemplo el cliente de escritorio es tan fácil como ejecutar:
$sudo ./install.sh gtk-geco



