Planet

Repositorio Desdeslin

Para completar el proyecto he creado un repositorio de paquetes de Desdeslin en launchpad.
El url de launchpad para el mismo es:
https://launchpad.net/~adrian15/+archive/fai
Así mismo para explorar los paquete via web tenemos:
http://ppa.launchpad.net/adrian15/fai/ubuntu/
Y finalmente las lineas que se han de añadir en el sources.list son:
deb http://ppa.launchpad.net/adrian15/fai/ubuntu intrepid main
deb-src http://ppa.launchpad.net/adrian15/fai/ubuntu intrepid main
Si habéis seguido mi memoria comprendereis que esto implica dos cosas:

  • Que ya no se necesita hacer un repositorio local con los paquetes modificados proporcionados por Desdeslin.
  • Que las lineas del sources.list o bien de la configuración del apt-proxy que hacían referencia al repositorio local pueden ser substituidas por estas que propongo más arriba.

Por último comentaros que aún no he podido probar el repositorio así que cualquier comentario es bienvenido.
Adrián Gibanel

Entregada memoria del proyecto Sapiens

Ya se ha entregado la memoria del proyecto Sapiens, si alguien le gustaría verla que lo comunique la Administración del proyecto Sapiens y se le facilitará. Un saludo

Todos los bugs corregidos

Después de varios días solo corrigiendo bugs, por fin hemos conseguido hacer ping. Vale, esto que significa, pues que conectamos dos ordenadores a nivel de enlace, ya sea por cable o a través de wifi, y arrancamos meshias en ambos. Bien, ahora desde el ordenador A hacemos ping a la ip del ordenador B. Sabemos que esta justo al otro lado del cable o wifi pero esto no lo sabe el demonio así que capturas los ping y los va guardando en cola, mientras envía el paquete aodv RREQ (el de búsqueda de ruta). El ordenador B se da cuenta de que le ha llegado un petición de ruta para su IP y crea su respuesta correspondiente, o sea manda su RREP. Esto le llega al ordenador A, crea su entrada correspondiente en la tabla de rutas. Después de eso busca todos los paquetes que hemos ido guardando y lo enviamos sin que se pierda ni un solo paquete, es decir, responde a todas las peticiones de ping.
Además hemos comprado los dominios meshias.com y meshias.net . Ahora mismo hay colgado un wiki que iremos llenando de contenido. Desde aquí dar las gracias danigm (su blog es: http://www.danigm.net/) también participante del concurso, que nos ha cedido su servidor personal para nosotros. El wiki obviamente no va a reemplazar este blog. Cada uno tiene su función, aquí publicaremos nuestras noticias del avance que va alcanzando el proyecto. El wiki contendrá manuales, más o menos actualizados, de como usar el proyecto, posibilidades de configuración, y todo lo que tenga más forma de HOWTO que de noticia.
Pues un saludo y seguro que vendremos con noticias muy pronto.

Pequeñas modificaciones.

Durante la semana he realizado algunos cambios en el blog para facilitar su uso.

  • Se ha habilitado un foro y añadido un enlace a el en la columna de la izquierda.
  • Se ha insertado dos nuevas páginas accesibles desde el menú de navegación de arriba.

  • Se ha cambiado el formato de compresión de la librería por tar.gz ahora es más libre.
  • El blog está optimizado para su visualización en Firefox,que además es libre!

Si tenéis alguna sugerencia que pueda contribuir a mejorar, no dudéis, comentarla!

Manuales de instalación y uso

Una parte importante de todo proyecto es dotar al desarrollo de manuales. De esta forma se dota al desarrollador y/o usuario de una guía de orientación.Esto es precisamente lo que se ha desarrollado como última aportación al proyecto antes de la evaluación del concurso. Estos manuales ya están disponibles en la forja junto al resto de documentación.Esperamos sean de utilidad y sirvan de complemento al trabajo desarrollado.Saludos y, por supuesto, suerte a todos los grupos!!

Truco: flat style en formularios para JFace Viewers

Si te estás volviendo loco porque cuando en un formulario Eclipse añades un JFace Viewer y en Windows te sale sin bordes y en GNU/Linux si, y al añadir el estilo SWT.BORDER en Windows por fin aparecen, pero en GNU/Linux se ve como el culo porque no utiliza el flat style del resto del formulario...NO lo hagas así:TableViewer fooViewer = new TableViewer(composite, SWT.SINGLE);Table fooTable = viewer.getTable();...Tienes que hacer esto otro en su lugar:Table fooTable = toolkit.createTable(composite, SWT.SINGLE);TableViewer fooViewer = new TableViewer(fooTable);...De esta forma tu viewer tendrá bordes del tipo flat style, esté en la plataforma que esté ;-)

Terminada la documentación para la universidad

He terminado toda la documentación para la universidad y el viernes se publica Gesport 0.4 University Edition. Se puede descargar en la forja de desarrollo, en la seción documentación. También está listo el manual de usuario, que en el aspecto no variará nada respecto a la presentación que aquí se realiza.
Ya he mandado a impreta pues el día 15 tengo que tener hechas todas las tareas administrativas con mi universidad.
Esta semana empezaré a aprender a fondo Symfony 1.2 para poder hacer una migración temprana a la 2.0 con Doctrine, que representará un mejor tiempo de acceso a los datos y más simplicidad en el proceso de persistencai de datos.

IRC vs API

En la documentación anterior hemos comentado que el robot captura los cambios recientes en tiempo real a través de un canal de IRC. Esto no viene activado por defecto. El software MediaWiki permite habilitarlo en los ficheros de configuración, pero hay sitios web que utilizan MediaWiki y que por algún motivo no pueden o no desean usar un servidor de IRC para ello.La solución pasa por implementar la opción de capturar los cambios recientes a través de la API de MediaWiki. Esto me mantendrá ocupado los próximos días.

Ampliada la fecha de entrega de la memoria

Hola a todos! Debido a unos problemillas que han tenido los administradores del concurso con la forja se han visto obligados a ampliar la fecha de entrega de la memoria que estaba prevista para el 6 de Abril al 8 Abril.

Instalador, setup.py, usando distutils para instalar geco

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:

  1. # setup.py de gecoc
  2. from distutils.core import setup
  3.  
  4. setup(name = 'gecoc',
  5. version = '1.0',
  6. description = 'geco client lib',
  7. author = 'Daniel Garcia Moreno',
  8. author_email = '<dani@danigm.net>',
  9. url = 'http://bzr.danigm.net/geco',
  10. license = 'GPLv3',
  11. scripts = ['terminal-geco'],
  12. packages = ['gecoc']
  13. )

$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/

  1. # setup.py de gtk-geco
  2. from distutils.core import setup
  3. import os
  4.  
  5. datafiles = []
  6.  
  7. for i in os.listdir('glade'):
  8. datafiles.append(('share/gtk-geco/', ['glade/'+i]))
  9.  
  10. datafiles.append(('share/pixmaps', ['geco.png']))
  11. datafiles.append(('share/applications', ['gtkgeco.desktop']))
  12.  
  13. setup(name = 'gtk-geco',
  14. version = '1.0',
  15. description = 'gtk client for geco',
  16. author = 'Daniel Garcia Moreno',
  17. author_email = '<dani@danigm.net>',
  18. url = 'http://bzr.danigm.net/geco',
  19. license = 'GPLv3',
  20. data_files = datafiles,
  21. scripts = ['gtk-geco'],
  22. py_modules = ['gtkgeco'],
  23. packages = ['gecoc']
  24. )

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:

  1. #!/bin/bash
  2.  
  3. function install_help(){
  4. echo "Ayuda del instalador $(basename $0)"
  5. echo " Con este instalador puedes instalar:"
  6. echo " gecod"
  7. echo " gecoc"
  8. echo " gtk-geco"
  9. echo " web-geco"
  10. echo ""
  11. echo " Usalo pasando como argumento el nombre de lo que quieras instalar"
  12. echo " por ejemplo:"
  13. echo " sudo ./$(basename $0) gecod"
  14. }
  15.  
  16. root=$PWD
  17.  
  18. if [ "$#" -eq 0 ]
  19. then
  20. install_help
  21. exit 0
  22. fi
  23.  
  24. while [ "$#" -gt 0 ]
  25. do
  26. case $1 in
  27. -h | --help)
  28. install_help
  29. shift
  30. ;;
  31. gecod)
  32. cd $root
  33. cd src/gecod/
  34. echo "instalando gecod"
  35. python setup.py install
  36. shift
  37. ;;
  38. gecoc)
  39. cd $root
  40. cd src/gecoc/
  41. echo "instalando gecoc"
  42. python setup.py install
  43. shift
  44. ;;
  45. gtk-geco)
  46. cd $root
  47. cd src/gecoc/gtk-geco
  48. echo "instalando gtk-geco"
  49. python setup.py install
  50. shift
  51. ;;
  52. web-geco)
  53. cd $root
  54. cd src/gecoc/web-geco
  55. echo "instalando web-geco"
  56. python setup.py install
  57. shift
  58. ;;
  59. *)
  60. install_help
  61. shift
  62. ;;
  63. esac
  64. done

Y con este instalador instalar por ejemplo el cliente de escritorio es tan fácil como ejecutar:
$sudo ./install.sh gtk-geco

Distribuir contenido