Documentando el código

04/17/2011

Me encuentro actualmente escribiendo comentarios con un formato especial en el código del proyecto para luego generar una documentación del código (no confundir con la Documentación del proyecto) en formato HTML u otros. Probablemente, cuando tenga la documentación del código terminada, la incorpore a la Documentación del proyecto.

La herramienta de generación de documentación de código que estoy usando es Epydoc.


Nueva versión de la Documentación disponible

04/16/2011

Acabo de liberar una nueva versión (la 4) de la Documentación del proyecto. Como siempre, está disponible en la sección Documentación en formato PDF.


Cliente web para el Club .NET de Sevilla

04/14/2011

Hace poco hice un cliente de Predesys de escritorio para la asociación Club .NET de Sevilla. Ahora, en la asociación, he creado e instalado un cliente web (una página web) en uno de sus servidores web que nos dice quién está en el aula de la asociación en cada momento.

La máquina donde está instalado tiene pocos recursos, por lo que se viene abajo muy fácilmente si se hacen muchas peticiones HTTP, pero para ilustrar que el proyecto funciona, está bastante bien. Para ser detectado en el aula de la asociación, tan sólo hay que estar registrado como usuario en el servidor de Predesys y conectarse con el ordenador a su red local, por cable o por WiFi.

Lo que tenemos montado en la asociación es un servidor de Predesys, el servicio de Predesys “People Presence” instalado en dicho servidor y un cliente web que ejecuta dicho servicio de Predesys. “People Presence” tan sólo devuelve una lista de nombres de persona, que es lo que finalmente se muestra en el cliente web (la página web).

Ésta es la página web donde se puede mirar qué personas están en el aula de la asociación:

http://dnc.eii.us.es:81/gente


Trabajando en la documentación

04/14/2011

Ahora que ya he hecho el Radar LAN, estoy dedicándome a añadir contenido a la documentación del proyecto. Mi objetivo es liberar dentro de unos días una nueva versión de la documentación, en formato PDF. Recuerde que siempre puede descargarse del repositorio la versión provisional actual en formato LaTeX, que es el formato de la fuente de la que se genera luego el documento PDF cuando se libera una versión.

También, voy a empezar a añadir comentarios en el código fuente, que, de momento, a penas tiene, para luego generar un documento con la documentación del código, es decir, con información sobre los distintos módulos, clases, funciones…


Mejorado el Radar LAN

04/13/2011

Hoy he descubierto los pings ARP, que son parecidos a los pings normales, pero tienen la ventaja de que se usan a nivel de la tarjeta de red y todas las tarjetas de red están obligadas a contestar a ellos, independientemente de la existencia de firewalls.

Ahora, en el reciente Radar LAN, en lugar de usar NMap y consultar la caché ARP, uso el comando arp-scan (que se basa en pings ARP), que devuelve el par IP-MAC de todos los equipos de una misma red local (cosa que hace de forma muy rápida). Esto significa una mejora en la eficiencia bastante grande y además evita los problemas derivados de los posibles firewalls que pueda haber en las redes.

He incluído esta mejora en una nueva versión del Radar LAN (0.2.0) que acabo de publicar. Como consecuencia de esto, también he publicado una nueva versión del servicio People Presence (0.1.2), con un cambio mínimo pero que mejora su eficiencia.

Ambas nuevas versiones están disponibles, como siempre, en la sección Descargar. Pueden descargarse en formato tarball o en formato paquete Debian.


Cómo colaborar con el proyecto

04/13/2011

Para colaborar con Predesys, una buena aportación puede ser la creación de algún servicio de Predesys.

Un servicio de Predesys no es más que un script de Python que debe implementar una función con unos parámetros de entrada y tipo de salida concretos. Esta función varía en función del tipo de servicio que quiera implementar (ver sección Arquitectura). Veamos cómo tiene que ser esta función en cada caso:

  • Para servicios automáticos y servicios de usuario sin autentificación:

    def run(args)

    Donde args es una lista (de cadenas de texto) de las direcciones MAC detectadas.

  • Para servicios de usuario con autentificación:

    def run(userId, args)

    Donde userId es el usuario que ha solicitado ejecutar el servicio (una cadena de texto) y args es una lista de (de cadenas de texto) las direcciones MAC detectadas

Todos los servicios tienen acceso a la API de Servicios de Predesys (un módulo de Python), que ofrece un acceso limitado al Núcleo del Servidor. Con esta API, se pueden obtener los usuarios registrados en el sistema, formatear un mensaje para que se envíe por bluetooth a alguno de los dispositivos detectados (si se tratan de dispositivos bluetooth detectados por el Radar Bluetooth), obtener las direcciones MAC que están registradas en el sistema… De momento, la API de Servicios ofrece muy poca funcionalidad, pero se le irán añadiendo nuevas características en el futuro.

Una vez terminado el servicio, para añadirlo al Servidor hay que ejecutar como administrador la siguiente orden:

  • “predesys-server services add -id <id-servicio> -v <versión> -tid <id-tipo-servicio> -a <autentificado> -e <habilitado> -p <ruta-script> -n <nombre-servicio> -au <autor>”

    Donde:

    -a -> 0 = Servicio sin autentificación del usuario, 1 = servicio con autentificación del usuario
    -e -> 0 = Servicio deshabilitado inicialmente, 1 = servicio habilitado inicialmente
    -v, -n, -au -> Opcionales

  • O bien, podemos ejecutar esta otra orden (también como administrador) e ir dando valores a las mismas propiedades según nos lo vaya pidiendo la interfaz de usuario de terminal:

    “predesys-server services add”


Predesys de nuevo implantado en la asociación Club .NET de Sevilla

04/12/2011

Predesys acaba de ser implantado de nuevo (de forma experimental) en la asociación universitaria Club .NET de Sevilla, esta vez usando el Radar LAN en lugar del Radar Bluetooth. De momento, sólo hay registrados 4 miembros de la asociación, pero iremos registrando cada vez a más personas para que se pueda saber quién está en el aula de la asociación en cada momento.

Si queréis descargaros el cliente que usamos en la asociación, lo podéis descargar desde la sección Descargar. Este cliente es una adaptación del cliente de Predesys de ejemplo People Presence Client, también disponible en la sección Descargar.


Radar LAN ya disponible y nuevas versiones de otros componentes

04/12/2011

Acabo de terminar definitivamente y de liberar la primera versión del Radar LAN, detector de dispositivos alternativo al Radar Bluetooth. Este nuevo Radar detecta las direcciones MAC de las tarjetas de red de todos los equipos que estén en la misma red local que alguna de las Estaciones, en lugar de las direcciones MAC de los dispositivos bluetooh que se encuentren cerca de alguna de las Estaciones.

Este nuevo Radar es mucho más efectivo que el de bluetooth, ya que el bluetooth es muy inestable en la detección de dispositivos. La única desventaja con respecto al de bluetooth es que, de momento, no es capaz de enviar mensajes a los dispositivos detectados (aunque tampoco es una prioridad para mí).

También he tenido que adaptar algunos de los otros componentes, con cambios mínimos, de los cuales he liberado nuevas versiones. Estos componentes son el Servidor (0.2.2), el Radar Bluetooth (0.1.1) y el servicio People Presence (0.1.1).

Tanto el nuevo Radar LAN como las nuevas versiones de los otros componentes están disponibles en la sección Descargar, tanto en formato tarball como paquete Debian.

Dentro de unos días actualizaré toda la documentación del proyecto para que refleje este nuevo componente y los cambios de los otros.


Añadidos scripts de instalación de dependencias y de construcción de paquetes

04/12/2011

He añadido al repositorio 2 scripts (en el directorio raíz). El primero, llamado install-dependencies.sh, instala todas las dependencias que el proyecto necesita (facilita no tener que instalar una por una cada una de ellas) y el segundo, llamado build.sh, construye todos los paquetes (tanto en formato tarball como en formato paquete Debian) del proyecto y los copia a una carpeta generada llamada OUTPUT en el directorio raíz (esto facilita el no tener que ir generando uno por uno cada uno de los paquetes).


Problemas con NMap, pero solucionados

04/12/2011

Parece ser que NMap no da los resultados que esperaba. Se suponía que debía darme las direcciones IP de cada uno de los equipos que estén en una red local, pero hay algunas IPs que no obtengo cuando sí debería. Creo que esto es debido a que NMap se basa únicamente en hacer ping a una máquina y, si ésta responde, entonces se da por presente a dicho equipo (aunque sólo es una suposición mía). El problema está en que no todos los equipos de una red tienen por qué responder a un ping.

El caso es que he intentado detectar con NMap un equipo concreto con Windows, el cual no respondía al ping y, sin embargo, sus direcciones IP y MAC aparecieron en mi caché ARP (lo cual, en condiciones normales, prueba su existencia). Es decir, por ARP se obtiene bien la dirección MAC de dicho equipo al intentar hacer el ping, pero no puedo basar la existencia de dicho equipo en una respuesta positiva al ping (que, en este caso, no ocurre); simplemente, debo intentar detectar los equipos por NMap (indenpendientemente de que respondan o no) y, a continuación, consultar la caché ARP.

Espero tener pronto listo el Radar LAN, una vez que termine su implementación y haya hecho unas cuantas pruebas.


Seguir

Get every new post delivered to your Inbox.