Resistance is Futile

Maratón Nacional de Programación ACIS / REDIS

acis_logoLa Maraton Nacional de Programacion ACIS / REDIS es una maraton de programacion a nivel nacional que se lleva a cabo en el segundo semestre del año (tipicamente en los meses de septiembre y octubre), esta maraton esta organizada por la Asociacion Colombiana de Ingenieros de Sistemas y la Red de Decanos y Directores de Sistemas y sirve de clasificacion a la Competencia Internacional Inter Universidades de la ACM.

Para competir en esta maraton se deben tener encuenta varios requisitos :

  1. Ser estudiante universitario
  2. Tener una carga académica de medio tiempo o mas.
  3. Haber comenzado la carrera por lo menos en los 3 años anteriores
    (estudiantes de 1 a 6 semestre)
  4. Tener menos de 23 años al momento de la realización de la maratón
  5. No haber participado mas de cinco veces en la maratón
  6. Solo se puede participar por una institucion durante el año
  7. No haber pariticipado en dos maratones mundiales

Para participar se deben crear equipos de tres estudiantes que cumplan los requisitos anteriores, cada equipo tiene un entrenador (Coach) que es el encargado de la inscripcion de los estudiantes en el sistema de registro de la Maraton de ACM y es el representante del grupo ante la organizacion. El Coach generalmente es un docente de la universidad a la cual pertenecen los estudiantes y ademas de registrar los equipos, debe asegurarse que cumplen los requisitos para la participacion, acompañar al equipo en la prueba durante la cual el coach presentara su equipo completo para su registro, los acompañara durante el Calentamiento (Warm Up) y realizara los reclamos despues de finalizar la maraton si existen. Las universidades pueden registrar un maximo de tres equipos, los cuales pueden tener el mismo Coach y enviara a ACIS una carta en la que avala la participacion de los equipos, como tambien se compromete a pagar el costo de la inscripcion a la maraton antes de que esta se realice. Para la realizacion de la maraton la organizacion tiene varias sedes a nivel nacional, los equipos deben registrarse en la sede mas cercana geograficamente, tipicamente las sedes son : Bogota, Bucaramanga, Cali, Cartagena, Medellin y Manizales

El dia de la maraton el coach debe presentarse con su equipo a las 8am para su registro, la entrega de identificaciones y camisetas que el coach y los miembros del equipo deben traer durante el transcurso de la maraton. Despues del registro de todos los equipos se toma un refrigerio, para pasar al Warm Up durante el cual a los equipos se les asigna el puesto de trabajo donde previamente se han instalado los ambientes de desarrollo (C,C++,Java) y el cliente PC2 software que permite probar las soluciones a los problemas, enviar las soluciones al sistema para ser evaluadas, realizar consultas al jurado durante la prueba. Durante el calentamiento se entregan dos problemas que los equipos deben resolver, para identificar problemas con las herramientas de desarrollo y probar el correcto funcionamiento del software para enviar las soluciones (durante este calentamiento el Coach puede estar presente), al final del calentamiento se pasa a un almuerzo ligero antes de la competencia.

La competencia generalmente comienza a la 1 de la tarde y tiene una duracion de 5 horas, se entregan los enunciados de los problemas los cuales describen el problema que debe ser solucionado, los nombres de los archivos que se deben crear, las entradas suministradas y las salidas (estos enunciados estan en Ingles, por lo cual es importante que los integrantes del equipo tengan buen conocimiento del idioma), cada equipo es responsable de dar solucion a los problemas utilizando los ambientes de desarrollo, libros, codigo impreso y hojas (es recomendable llevar diccionario ingles para los que no manejan el idioma). La estrategia de solucion de los problemas es responsabilidad de cada equipo (se recomienda antes de ir a la maraton realizar simulacros en las universidades).

A medida que los equipos van solucionando un problema, se envia el archivo fuente al PC2el cual evaluara la solucion, verificando el programa con casos de prueba y verificara que la solucion pueda ser compilada, no tenga errores de sintaxis, se ejecute en menos del tiempo exigido y arroje los resultados esperados, despues de esta evaluacion se puede consultar el sistema que indicara si fue satisfactorio o sucedio algun error, si es satisfactorio se colocara un globo del color asignado al problema sobre el computador que tiene asignado el equipo, de esta forma los otros equipos pueden saber quienes y que problemas se han solucionado. Adicionalmente existe una pagina web que puede ser vista por los equipos que reporta el estado de todos los equipos a nivel nacional, con el numero de intentos, el tiempo y los problemas que se han desarrollado. Faltando una hora para terminar la maraton, la pagina no se actualiza mas y se deben esperar los resultados finales, unos dias despues (por lo menos tres dias) para ver las posiciones finales de los equipos. Al finalizar la maraton los equipos pueden de nuevo hablar con el Coach y transmitirles las quejas que se tengan, las cuales deben ser reportadas por el Coach al Jurado Local.

Por cada sede se selecciona una representacion que participara en la maraton nacional la cual funciona de la misma manera y se va clasificando de esta manera hasta llegar a la mundial.

Notas :

  • Los participantes no pueden comunicarse con equipos diferentes al suyo durante la competencia.
  • El Coach debe registrar los equipos antes de la maraton, suministrado el nombre del equipo y los nombres y correos de los integrantes.
  • El Coach no participa en el concurso, es el representante del grupo ante la organizacion.
  • No se pueden ingresar telefonos moviles, memorias, dispositivos de almacenamiento o equipos electronicos cuando se desarrolla la maraton.
  • Los equipos deben tratar de desarrollar programas que den soluciones a los enunciados de los problemas, de la manera mas rapida, teniendo en cuenta que el programa no se puede demorar mas de lo estipulado.
  • Se puede trabajar en lenguaje C,C++ o Java

Mas adelante estaremos hablando de los tipos de problemas que se deben resolver en esta maraton.

Enlaces :


Cliente XML-RPC en Mono para OpenSimulator

Una forma para realizar comunicación entre los prims internos de OpenSimulator o Second Life y el mundo externo es a través del uso de XML-RPC el cual permite enviar mensajes a un objeto dentro de una región, siempre y cuando este se haya registrado para recibir dicha comunicación.

Crear Script para Recibir Datos :

  • Abrir nuestro visor favorito y entrar al servidor de OpenSimulator o SecondLife
  • Crear un objeto
  • Adicionar un Script
  • Abrir el script
  • Colocar el siguiente codigo :
    default {
       state_entry()
       {
          llOpenRemoteDataChannel();
       }
    
       remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval) {
          if(type == REMOTE_DATA_CHANNEL) {
             llOwnerSay("Canal : " + (string) channel + "");
          }
          else if(type == REMOTE_DATA_REQUEST) {
             llRemoteDataReply(channel,NULL_KEY,"Exito",1221);
             llOwnerSay("Cadena : " + sval + "nNumero: " + (string) ival);
          }
          else {
             llOwnerSay("Error");
          }
       }
    }
  • Guardar
  • En este momento el servidor debe compilar el script y muestra en el chat :
    [11:54]  Compile successful
    [11:54]  Primitive: Canal : 61b5e9ca-9378-4254-af36-d78d6ed839de
  • La cadena : 61b5e9ca-9378-4254-af36-d78d6ed839de es el identificador del canal por el cual escucha el prim, es diferente para cada prim

Enviar Datos con C# :

Se utilizara la libreria XmlRpcCS para realizar la comunicación entre la aplicación y el objeto en OpenSimulator o SecondLife.

  • Abrir una consola
  • Crear el directorio para el cliente
    mkdir clientxmlrpc
  • Cambiar al directorio
    cd clientxmlrpc
  • Copiar la libreria al directorio actual
    cp ../XmlRpcCS/XmlRpcCS.dll .
  • Crear un archivo Client.cs y adicionamos el siguiente codigo :
    using System.Collections;
    using Nwc.XmlRpc;
     
    public class Client {
            public static void Main() {
                    // Informacion del Servidor de Second Life
                    // Canal por donde escucha el cliente
                    string server = "http://xmlrpc.secondlife.com/cgi-bin/xmlrpc.cgi";
                    string channel = "eafc58de-5d8a-364e-d6d8-4c4cab0129f4";
     
                    // Parametros
                    Hashtable args = new Hashtable();
                    args.Add("Channel",channel);
                    args.Add("IntValue",12345);
                    args.Add("StringValue","Hello World!"); 
     
                    // Cliente XMLRPC
                    XmlRpcRequest request = new XmlRpcRequest();
                    request.MethodName = "llRemoteData";
                    request.Params.Add(args);
     
                    // Invocacion y Resultado
                    Hashtable ret = (Hashtable) request.Invoke(server);
                    System.Console.WriteLine(ret["StringValue"]);
                    System.Console.WriteLine(ret["IntValue"]);
            }
    }
  • Compilamos el codigo :
    gmcs -lib:. -r:XmlRpcCS.dll Client.cs
  • Ejecutamos
    mono Client.exe
  • Debe mostrar en pantalla los valores enviados por el objeto
    Exito
    1221
  • Mienstras tanto en OpenSimulator debe aparecer en el chat la informacion enviada
    Hello World!!! 12345

Para usar el mismo codigo con OpenSimulator la cadena server debe tener la direccion de nuestro servidor : http://<ipServidor>:<puerto>/cgi-bin/xmlrpc.cgi

Enlaces :


Libreria XML-RPC para Mono

Actualmente algunos sistemas como OpenSimulator o Second Life utilizan servicios remotos basados en XML-RPC, por tal motivo es necesario utilizar una libreria para realizar los llamados a estos servicios, actualmente para Microsoft .NET podemos encontrar dos librerias :

Utilizaremos la libreria XmlRpcCS, la cual es utilizada por el proyecto OpenSimulator para implementar el servicio de XMLRPC que permite realizar llamados remotos a objetos en este mundo virtual.

Requerimientos :

  • Debemos instalar lo paquetes para compilar la libreria
    sudo apt-get install nant mono-2.0-devel libmono-winforms2.0-cil mono-1.0-devel

Construcción de la Libreria :

  • Abrir una consola
  • Descargar la ultima versión de la libreria
    http://sourceforge.net/project/platformdownload.php?group_id=123702
  • Por ejemplo la versión 1.10
    wget http://ufpr.dl.sourceforge.net/sourceforge/xmlrpccs/XmlRpcCS-1.10.zip
  • Descomprimir el archivo
    unzip XmlRpcCS-1.10.zip
  • Cambiar al directorio de la libreria
    cd XmlRpcCS
  • Compilar la libreria
    nant
  • El archivo XmlRpcCS.dll es creado

Enlaces :


MMetaverseSurface 0.1 y Second Life

Pruebas iniciales del desempeño y ejecucion de la version 0.1 de la aplicacion MMetaverseSurface que permite controlar un avatar a traves de una superficie. En esta primera prueba se utilizo la plataforma Windows, una camara Genius Slim 1322AF, Second Life y MMetaverseSurface 0.1

Evaluacion :

  • Para conectar el avatar a Second Life debe utilizarse el LoginURIy no el que se coloco en la documentacion :

    https://login.agni.lindenlab.com/cgi-bin/login.cgi

  • El avatar controlado se mostro como una macha blanca, lo que indica que no termino de descargar su apariencia. Se deben hacer mas pruebas para determinar el problema.
  • Al momento de mover el avatar dentro de Second Life, los edificios impiden que este se mueva libremente, se recomienda utilizar una region con pocos edificios para utilizar la superficie.
  • Adicionar la posibilidad de indicar las coordenadas de una zona de la region para que el avatar se mueva sobre esta y no sobre toda la superficie. Esto permitiria crear un espacio para utilizar la superficie.
  • A diferencia de OpenSimulator el avatar permanece quieto cuando el marcador esta quieto.
  • No se pudo probar el giro del avatar debido a que no se descargo la apariencia del cliente.

En terminos generales funciono como debia, solo se presento el problema inesperado de la apariencia del avatar. Las recomendaciones despues de la prueba se tendran en cuenta para la version 0.2 de la aplicacion.

Enlaces :


MMetaverseSurface 0.1

Siguiendo con los desarrollos para los metaversos, llega la primera version de la superficie para mundos virtuales MMetaverseSurface que permite controlar uno a mas avatars y objetos desde una superficie interactiva en la cual se colocan marcadores que representan dichos elementos.

Esta primera version es una prueba de concepto que busca identificar los elementos necesarios para crear este tipo de aplicaciones, por ejemplo para la creacion de la superficie se utilizara la aplicacion reacTIVision que permite capturar la posicion y angulo de marcadores, los cuales representaran los objetos y avatars; esta aplicacion utiliza una camara de video con soporte de firewire o una camara USB para capturar la imagen de la superficie e identificar cada uno de los marcadores, enviando la informacion de posicion y angulo de cada uno de estos. Para la comunicacion con los mundos virtuales se utiliza LibOpenMetaverse que permite interactuar con mundos virtuales como Second Life y OpenSimulator, esta libreria esta desarrollada en C# lo que hace necesario utilizar un cliente de reacTIVision para dicha plataforma, como tambien hacer el desarrollo de la aplicacion MMetaverseSurface es esta plataforma. Adicionalmente para el desarrollo se utiliza una plataforma Ubuntu Linux con la version de codigo abierto de la plataforma .NET llamada Mono y utilizando la herramienta NAnt para automatizar la construccion del software.

Actualmente la version 0.1 de la aplicacion permite controlar uno o mas avatars a los cuales se les ha asignado un marcador y que permite utilizando el simulador o el reacTIVision controlar el avatar dentro de la region en la que se encuentra, permitiendo cambiar la posicion y angulo en el que mira el avatar. Actualmente existen algunos problemas con el movimiento que hacen que el avatar no se quede estatico en una posicion, si no que opsilar entre dos posiciones.

Para las pruebas iniciales se utilizo como servidor OpenSimulator instalado en la misma maquina que la aplicacion lo que permite tener una respuesta muy rapida de los movimientos del avatar, tambien se utilizo el simulador de reacTIVision para tener el control preciso sobre la aplicacion.

Requerimientos :

  • Windows : Microsoft .NET Framework 2.0 (v2.0.50727 or later)
  • Linux : mono 1.9 - http://www.mono-project.com/

Instalacion :

  • Descargar el archivo con la distribucion de la aplicacion
  • Descomprimir
  • Editar el archivo mmetaversesurface/bin/MMetaverseSurface.exe.config y cambiar la url de autenticacion del mundo virtual.
    • Para Second Life utilice : https://login.agni.lindenlab.com
    • Para OpenSimulator utilice : http://192.168.1.4:9000 (cambiar la IP y el puerto a los de suservidor)
  • Editar el archivo mmetaversesurface/bin/avatars.txt
    Modificar la linea suministrando la informacion del avatar a controlar
    Id del Marcador, Nombre, Apellido, Clave
    El id del marcador es un numero que representa el marcador a utilizar dentro de reacTIVision

Ejecutar :

  • Ejecutar el TUIO Simulator o ejecutar la aplicacion reacTIVision
  • Ejecutar el MMetaverseSurface.exe
  • Conectarse al mundo virtual utilizando un avatar diferente al utilizado en la aplicacion
  • Teletransportarse a sitio donde se encuentra el avatar a ser controlado
  • Controlar el avatar utilizando los marcadores

Enlaces :


Page 1 of 212
Powered by WordPress | Designed by Elegant Themes