Un sitio de Noticias, Discusiones, Software y miscelánea. ;-) enjoy.-

viernes, julio 21, 2006

Abstrayendo Yaks :: Yaks Server

Este Post se relaciona mucho con el anterior, si bien no es necesario leerlo para comprender los conceptos relacionados con el presente.

Resulta que para una materia del semestre anterior (7mo) se nos pidió trabajar sobre un simulador de robots llamado Yaks. A modo rápido, lo bueno de Yaks es que permite desarrollar y ejecutar agentes para el robot Khepera, en forma completamente gratuita, pero presenta dos limitaciones bastante importantes: 1) únicamente puede ser programado en C/C++ y 2) el código del simulador es mucho menos que prolijo.

Los principales problemas de estas limitaciones son:

El imponer el lenguaje fuerza a que los alumnos deban tener algún primer contacto con él, lo cual es bueno, pero en general esto no es bueno, especialmente tratándose de C/C++. Por desgracia me llevo el concepto de que mucha gente sintió que el lenguaje causaba más problemas de los que solucionaba.

Los problemas relacionados con tener que lidiar con código escrito por otra persona del otro lado del mundo, el cual es especialmente embrollado y prácticamente no tiene documentación alguna.

Fue a raíz de estos motivos que varias veces comentamos lo bueno que estaría desarrollar un tipo de interfaz que permitiera ocultar los detalles del simulador a los desarrolladores.

El resultado de esto es en lo que he estado trabajando en los últimos días: Yaks Server, básicamente una API desarrollada en C++ que permite abstraer los detalles del simulador a través de una interfaz de BSD Sockets. Yaks Server crea una capa de que “cubre” el simulador, simplificando la tarea de desarrollo.

La interfaz presenta 3 primitivas:

  • Conectar: permite conectar un número cualquiera de clientes, cada uno controlará un robot distinto.
  • Enviar Sensores: envía a cada cliente las percepciones actuales correspondientes a su robot.
  • Recibir Velocidades: recibe de cada cliente la velocidad a asignar a la rueda izquierda y derecha.

Desde el punto de vista de los clientes, la situación es muy similar, únicamente que el flujo de información es al revés, enviando velocidades y recibiendo percepciones.

Las grandes ventajas que el agregar esta capa de abstracción nos proveen se basan en que los desarrolladores no deberán previamente estudiar el código del simulador para poder trabajar con él y, además, la API del lado del cliente puede ser desarrollada en cualquier lenguaje (que sea capaz de hacer uso de las funciones de red), por lo cual los clientes pueden ser desarrollados en una gran variedad de lenguajes.

Si bien se podría alegar que esto es perjudicial, yo creo que a la larga termina siendo beneficioso. Pienso que los malos hábitos que uno genera cuando aprende a las apuradas son, en general, los más difíciles de corregir. En la línea del Post anterior: C/C++ no es un lenguaje que pueda aprenderse bien a las apuradas.

 
I am nerdier than 88% of all people. Are you nerdier? Click here to find out! The Stupid Quiz said I am "Pretty Smart!" How stupid are you? Click here to find out! My computer geek score is greater than 83% of all people in the world! How do you compare? Click here to find out!