La 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 :
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 :
Mas adelante estaremos hablando de los tipos de problemas que se deben resolver en esta maraton.
Enlaces :
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 :
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"); } } }
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.
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"]); } }
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 :
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 :
Construcción de la Libreria :
Enlaces :
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 :
https://login.agni.lindenlab.com/cgi-bin/login.cgi
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 :
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 :
Instalacion :
Ejecutar :
Enlaces :