Se comenzó a preparar el ambiente de desarrollo web para Pulsar Project, en este caso se tomo la decisión de utilizar el lenguaje PHP como lenguaje de programación de una librería que permite la comunicación de los componentes de los mundos virtuales con el mundo exterior. Se escogió el lenguaje de programación PHP por su soporte en los servidores que típicamente se podrían encontrar en los ambientes educativos donde se implementara la solución, así como también la poca cantidad de recursos que consume el lenguaje.
Anteriormente se instalo un servidor Ubuntu Linux con LAMP, conjunto de herramientas para el desarrollo de aplicaciones web basadas en Linux, Apache, MySQL y PHP, la tarea ahora es crear el ambiente para el desarrollo de la libreria de comunicacion en PHP, para esto se habilitara el directorio web para usuarios y la ejecucion de scripts desde el mismo :
http://pulsarserver/~pulsar/
Actualmente y por políticas de seguridad se encuentra deshabilitado la ejecucion de scripts en PHP desde el directorio de usuario, procedemos a habilitar esa opcion :
Antes conocido como Second Inventory y debido a las politicas de derechos de autor de Second Life que no permite el uso de "Second" de los productos asociados a su mundo virtual, Stored Inventory es una aplicación para la plataforma Windows que permite realizar un copia local de los elementos (texturas, scripts, prims, objetos) creados en SecondLife, OpenSim o en alguno de los mundos virtuales compatibles con estas plataformas.
Caracteristicas :
Actualmente se cuenta con una licencia Multi Avatar la cual se adquirió hace un año y medio para realizar copias de seguridad del inventario de elementos creados en Second Life, ahora se utilizara esta aplicación para realizar copias de seguridad de los items desarrollados bajo OpenSimulator, como también exportar e importar contenidos de Second Life, permitiendo crear un inventario de herramientas igualmente disponibles en diferentes plataformas de los mundos virtuales.
El día de hoy tuvimos algunos problemas con la maquina host de nuestro proyecto, al momento de ejecutar VirtualBox el teclado y mouse no respondían de tal forma que no fue posible apagar la maquina de forma correcta si no a través del temido apagar y prender, tiempo despues se trato de ejecutar la maquina virtual de nuevo deshabilitando de nuevo el teclado y el mouse, afortunadamente esta vez se pudo conectar otro teclado USB a la maquina a lo cual respondio de nuevo habilitando el mouse y el teclado, pero desafortunadamente nuestra maquina virtual sufrio algunos percances, ademas de esto se trato de actualizar el software y se trato de chequear el archivo de sistemas, donde "accidentalmente" see borro un nodo del sistema de archivos por lo cual la maquina no volvio a arrancar, debido a la premura de tiempo se tomo la decisión de utilizar una copia del servidor base y reinstalar el OpenSimulator de nuevo, esta vez se utilizara la versión 0.7 RC2 que recién salio hoy 1 de Julio de 2010 (como decía un profesor de la universidad, Pandebono Caliente).
Prerequisitos :
El software se instalara inicialmente en el directorio home del usuario Pulsar
Instalación :
Instalacion del Software :
Con esto ya tenemos nuestro servidor de OpenSimulator listo para ser visitado por el dueño de la región.
Este es el primer desarrollo oficial del Pulsar Project, el Pulsar Status.Net HUD v0.1, este objeto permite actualizar el estado en un servidor basado en la plataforma de microblogging Status.Net, utilza el API compatible con Twitter para actualizar el mensaje de estado del sitio directamente desde el mundo virtual.
Instalación :
Configuración :
Uso :
Para la actualización de los sitios de microblogging basados en status.net desde los mundos virtuales basados en OpenSimulator y Second Life, se creara un HUD (Heads-Up Display), objeto que puede ser pegado directamente colocado dentro de la pantalla y no dentro del mundo como un objeto o un accesorio del avatar, de esta forma solo es visible dentro de la interface del usuario que lo esta utilizando.
El objeto contiene un script desarrollado en LSL (Linden Script Language) que escucha los mensajes enviados por el avatar dueño del objeto a traves del canal 5, de esta forma si el usuario quiere enviar un mensaje debe colocar en la ventana de chat /5 seguido por el mensaje a enviar.
// Listen all the messages and post to the microblogging site
listen(integer channel, string name, key id, string message) {
// Update the status using the message give by the user
PSNH_updateStatus(message);
}
El script toma el mensaje y lo envia a traves de una peticion HTTP al servidor, adicionando informacion de autenticacion y el nuevo estado.
// Update the estatus of the user in the microblogging site // @param message The message to use like status PSNH_updateStatus(string message) { // Construct the url to send the message // Something like this // http://username:password@server.com/api/statuses/update.xml string url = "http://" + psnh_username + ":" + psnh_password + "@" + psnh_serverName + psnh_serverPath + psnh_restPath; // Prepare request values, using post and send the message encoded string body = "status=" + message; list parameters = [ HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded; charset=UTF-8" ]; // Sen the request psnh_requestID = llHTTPRequest(url, parameters, body); }
La respuesta del servidor es capturada por el script y se visualiza un mensaje de error si el código retornado por el servidor es 200 (OK), si es otro código se escribe en la pantalla de chat simplemente el error y el contenido de la respuesta devuelta por el servidor.
// Check the reponse send by the server // @param request_id The identifier of the request // @param status The http reponse code send by the server // @param metadata Metadata associated with the request // @param body The response information send by the server PSNH_checkResponse(key request_id, integer status, list metadata, string body) { // If any problem with the server, show the page that send // The server response 200 if not problem if(status != 200) llOwnerSay(body); // Show a info message else llOwnerSay("Status Update!!!"); }
El script completo es colocado dentro del objeto, acompañado de otros archivos de documentación.
Enlaces :
Antes de comenzar el desarrollo de una herramienta a utilizar dentro del mundo virtual, que permita actualizar el estado del usuario en un servidor basado en status.net, debemos entender el uso del API de acceso a la plataforma.
Actualmente status.net es compatible con el API de twitter lo cual permite construir clientes que sean compatibles con las dos plataformas, debemos entonces primero consultar el API para identificar el metodo que nos permite actualizar el estado de un usuario.
Twitter API :
http://apiwiki.twitter.com/Twitter-API-Documentation
Se identifico statuses/update como el método a utilizar para la actualización del estado del usuario ya autenticado, se opto por usar una respuesta en el formato xml frente a json, por tal motivo la url de acceso a este servicio en twitter es http://api.twitter.com/1/statuses/update.xml, en el caso de status.net debemos suministrar una url de la siguiente forma http://<servidor>/<dir>/index.php/api/statuses/update.xml
Para realizar pruebas iniciales se creo una cuenta en el sitio de status,net con la siguiente direccion http://pulsarproject.status.net en la cual el api puede ser accedida a traves de la url http://pulsarproject.status.net/api/statuses/update.xml
Para actualizar el estado debemos autenticar el usuario antes de enviar el mensaje, actualmente status.net soporta autenticacion básica, lo que permite enviar el nombre de usuario y clave dentro de la url, mientras que twitter tiene planeado para el mes de Agosto quitar el soporte para este tipo de autenticacion y utilizar OAuth en su reemplazo.
Para simplificar el desarrollo se utilizara la autenticacion básica que aunque simple es insegura, adicionalmente se codificara el mensaje en formato application/x-www-form-urlencoded adicionando status=estado al mensaje enviado a través del método POST
Actualizacion del Estado :
http://usuario@clave:pulsarproject.status.net/api/statuses/update.xml