12/02/06: SiFi
SiFi es un sistema de intercambio de ficheros ideado para entornos corporativos. Permite realizar búsquedas, descargas, o incluso subir ficheros a otros clientes del sistema, todo en un entorno absolutamente distribuído. Adicionalmente, permite la posibilidad de buscar y descargar ficheros desde fuera del sistema mediante el correo electrónico, o enviar ficheros por correo desde los propios clientes.
El sistema se compone de varios módulos que pueden localizarse en cualquier máquina de la red, gracias a las tecnologías Java RMI y CORBA de OpenORB. Es por ello que además los elementos del sistema son multiplataforma y pueden utilizarse mediante sencillas e intuitivas interfaces gráficas o web.
SiFi es la práctica de la asignatura Arquitecturas Distribuídas de Redes Heterogéneas de quinto curso de Ingeniería Informática, realizada junto con Álvaro Navarro.
8/10/05: jReversi
jReversi es una implementación del clásico juego del Otelo, también conocido como Reversi. En este caso concreto, se incluyen dos implementaciones distintas en el lenguaje Java, una versión con alto consumo de memoria y optimización de los cálculos, y otra que mantiene un consumo de memoria constante a costa de una pérdida manifiesta de rendimiento.
Las instrucciones para compilar y ejecutar ambas versiones se encuentran en los archivos README.txt incluídos. Por supuesto, será necesario al menos tener instalado el Java Runtime Environment para probar el juego.
Este desarrollo forma parte de las prácticas de la asignatura de Inteligencia artificial de cuarto curso de Ingeniería Informática, realizadas junto con Tomás Aguado y Ángel Jara.
17/07/05: Juego de la bolsa
Una colección de programas que permiten jugar a la bolsa de forma distribuída, utilizando multicast para ello. Cada módulo realiza unas funciones específicas dentro del juego, desde medir el tiempo de las rondas hasta realizar o aceptar ofertas. Cada uno incorpora su propio interfaz web a través del cual se puede consultar u operar el módulo correspondiente.
Todo ello forma parte de una práctica de programación para la asignatura de redes-II, programado en Ada95 y haciendo uso de la librería de comunicaciones Lower Layer. Ésta adolece de un bug que imposibilita compilar en sistemas modernos. Para solventarlo es necesario sustituir la versión de c_sockets.ads por la proporcionada.
19/07/04: Servidor web/proxy
Se trata de la práctica de la asignatura de de Redes de área local 2002/03. Más de 6.000 líneas de código en el lenguaje de programación C, utilizando las librerías y llamadas al sistema de Linux. El servidor implementa métodos GET, HEAD y POST tanto para protocolos HTTP/1.0 como HTTP/1.1, siguiendo al pie de la letra los RFC que definen ambos estándares. Algunas de las características más significativas del servidor son:
- Errores personalizados: el servidor permite utilizar páginas HTML predefinidas para enviarlas con los mensajes de error correspondientes.
- Sencilla configuración: mediante el fichero de configuración del servidor, con una sintaxis similar a la de un script de shell en el que se definen variables, es posible personalizar ciertos parámetros concretos del mismo.
- Soporte completo de CGI's: soporta el estándar actual de CGI de forma que es posible programar nuevos y sencillos CGI's que extiendan la funcionalidad del servidor. El acceso a los CGI's está protegido desde el punto de vista del servidor, y las respuestas de éstos son comprobadas por si incluyen cabeceras que se deban incluir en la respuesta.
- Soporte MIME: el servidor incluye un soporte básico del estándar MIME en sus respuestas predefinidas.
- Degradaciónde privilegios: el servidor puede ser utilizado con un usuario no privilegiado del sistema, al que cambiará nada más arrancar, y que puede ser definido tanto desde la línea de comandos como en el fichero de configuración.
- Servicio de proxy: el servidor permite un comportamiento de proxy anónimo.
- Web hosting: es posible alojar varias páginas de forma simultánea en el servidor, siendo éstas referenciadas mediante distintos nombres de dominio.
- Estadísticas de uso: implementa un módulo de estadísticas accesible desde la URL /stats en el que se informan de todas las peticiones locales válidas, remotas e inválidas que se han recibido en el servidor.
- Registro de actividad: el servidor guarda un fichero de log con todas las peticiones que recibe, e información relativa a la respuesta que han generado.
- Seguridad activa: el servidor ha sido programado teniendo en cuenta la seguridad en todo momento. Así, todas las peticiones son comprobadas de forma exhaustiva por si alguna de ellas es malintencionada, y se controlan las conexiones que se pueden realizar con el servidor, de forma que un atacante no pueda bloquearlo generando múltiples conexiones, o hacer que se sature. La multitarea del servidor se basa en hilos y mecanismos de concurrencia para evitar un manejo inadecuado del mismo.
26/06/04: Biblioteca Leonardo Da Vinci
Se trata de la práctica de la asignatura de libre elección informática documental. Es una aplicación web que permite a una biblioteca realizar todas sus operaciones en línea, como el alta de nuevos socios o la consulta de la base de datos. La aplicación está escrita en ASP con VBScript, y utiliza una base de datos Access para almacenar sus contenidos.
26/06/04: Prácticas de robótica
Estas son las prácticas correspondientes a la asignatura optativa de robótica. Se trata de tres prácticas de carácter obligatorio, todas ellas realizadas con un robot Lego Mindstorms y programadas en el lenguaje C para el sistema operativo BrickOS:
- Seguir una línea: una pequeña práctica introductoria que sirve para familiarizarse con el entorno de desarrollo. El objetivo de la práctica es que el robot sea capaz de seguir una línea negra pintada sobre un suelo blanco, sin perderla.
- El juego del pañuelo: en esta práctica se pretende que dos robots se enfrenten en el conocido juego del pañuelo. Ambos se situarán frente a frente, sobre una línea negra pintada sobre suelo blanco, con una lata de refresco lastrada en el medio de ambos. Los robots deben seguir la línea hasta llegar a la lata, cogerla, y llevársela a su extremo de la línea.
- Robot limpialatas: la práctica más elaborada consiste en un robot que debe recorrer un pequeño laberinto buscando latas en él, y operando con ellas en función del color de las mismas. Las latas negras han de apartarse, mientras que las latas blancas deberán llevarse a una zona delimitada como almacán. Así mismo, la posición de una de las latas es conocida de antemano, mientras que la otra lata que habrá en el laberinto se encuentra en una posición desconocida.
1/03/04: Prácticas de microprocesadores
Estas son las prácticas correspondientes a la asignatura optativa de microprocesadores. Concretamente son 4 prácticas realizadas con un microprocesador Intel 8051 y con un PIC, cuyo código fuente en ensamblador se incluye a continuación:
- Dado electrónico: una sencilla práctica introductoria a la programación en ensamblador con microcontroladores. Consiste en diseñar e implementar un pequeño circuito que se valga de un microcontrolador PIC para simular un dado electrónico pseudo-aleatorio.
- Reloj/cronómetro digital: este desarrollo sobre el procesador Intel 8051 consiste en un reloj y cronómetro digital. El modo de operación se define al arrancar el programa, momento en el que el usuario decide cuál de los dos utilizar. Si se selecciona modo reloj, el programa pedirá la hora actual y mostrará en el puerto serie la hora, incrementándola cada segundo. Si se selecciona modo cronómetro, se mostrará por el puerto serie la cuenta del mismo incluyendo las centésimas de segundo, hasta el momento en que se accione el pulsador externo. Una nueva pulsación provocará que el cronómetro se detenga en el instante en el que se ha pulsado, mostrando dicho tiempo por el serie. La tercera pulsación reseteará la rutina de crono.
- Reloj/cronómetro digital: misma aplicación que la anterior práctica, salvo la inclusión de un display de 8 segmentos en el que se muestran los mismos mensajes que por el puerto serie.
- Invernadero: un completo sistema de control de un invernadero, que incluye la posibilidad de consultar la temperatura, hora y estado de las luces y calefacción. Tanto las luces como la calefacción se encienden y apagan de forma automática a partir de unas horas y temperaturas máximas y mínimas indicadas por el usuario. El montaje incluye leds para comprobar el estado de luces y calefacción, así como un sensor de temperatura.
22/01/04: Escáner de puertos
cltps es un sencillo escáner de puertos para línea de comandos. Permite comprobar si hay puertos TCP en estado de escucha y aceptando conexiones desde la localización actual. Tanto la dirección IP a analizar como el rango de puertos a comprobar son perfectamente definibles como parámetros con los que invocar el comando. La gran ventaja es que este sencillo programa permite realizar escaneos de puertos de forma sencilla e iterativa, empotrando el comando dentro de scripts de shell más complejos. De este modo, es trivial realizar un script que, por ejemplo, compruebe que todas las máquinas con ciertas direcciones IP estén funcionando y ejecutando un servicio concreto. La sintaxis del comando es muy sencilla:
cltps dirección_IP puerto_comienzopuerto_fin
Donde dirección_IP es la dirección IP de la máquina a escanear, puerto_comienzo es el primero puerto que analizar, y puerto_fin es el último. Por supuesto, es perfectamente posible que puerto_comienzo y puerto_fin sean iguales.
El código fuente del programa está disponible para su descarga. Para compilarlo, necesitarás los archivos unp.h y lib/error.c del UNIX Network Programming, volumen 1 y UNIX Network Programming, volumen 2 respectivamente, de Richard Stevens.