Aunque dejé de trabajar en TVCYL el pasado 1 de abril, el próximo 13 de mayo iré con la unidad móvil a cubrir la gala de los micrófonos de oro 2006, unos premios que otorga la Federación de Asociaciones de Radio y Televisión a gente de los medios.
La verdad es que promete ser un evento bastante potente teniendo en cuenta la gente que va y también bastante jodido en cuento a montaje técnico y a presión. Somos la única TV que va a cubrir el evento y si la cagas la cagas _muy_ gorda, no por que el evento sea la reostia, si no por el dinero que hay ahí metido.
Si sale mal por lo menos podré traer un autógrafo de Bertín Osborne a mi abuela, una foto de Eva Hache a Diego Calleja, ver si Rossana es realmente tan tío como parece y si Maria Dolores Pradera sale tajada al escenario. Ya pondré fotos y video del evento, que promete prometer, como ya prometió la gala de nochebuena a pesar de fue gente más mindundi :).
Ayer seguí dándole vueltas al tema de las criaturas procedurales (se nota que es puente) y estuve siguiendo los links de la página de Karl sims y llegué a sodaplay. Sodaplay es un juego, creado en un applet de java, en el que construyes tu propia criatura (en 2D, eso sí) usando física de partículas muy simple. Comprender la mecánica de la creación es simple, pero controlar los movimientos de los palotes es bastante difícil.
Lo interesante es que hay carreras de criaturas en las que pasan por un terreno escarpado (imagino que generado proceduralmente), y no solo compiten criaturas creadas por la mano del hombre, también lo hacen criaturas generadas. En el foro hay un montón de ejemplos de estas.
Cabe destacar que desde sodaplay le hicieron una entrevista a Karl sims en la que habla de sus criaturas. Es gracioso como le tientan varias veces para que libere el código y como es reticente y da algunas excusas ciertamente extrañas… una pena.
NOTA: toda la web hace uso de java, no solo la parte del juego, también hay unos pequeños applets que muestran criaturas. Lo aviso porque a mi firefox se me clava cuando hay java de por medio.
Hace unos días estuve viendo el video de spore. En él Will Wright muestra algunos detalles técnicos del juego, así como una gran parte de su contenido jugable. Básicamente el juego trata de evolucionar con tus criaturas desde que eres un microorganismo hasta invadir otros planetas de galaxias lejanas. En el juego destaca la capacidad de creación de criaturas en base a partes del organismo que el juego te ofrece y a partir de ellas, proceduralmente, se generan las animaciones y demás. Es bastante impactante ver en el video como genera diferentes criaturas añadiendo patas a su columna vertebral, o picos y ojos a su cabeza (o cabezón). Además, como dice en el video, los escenarios están generados proceduralmente, esto es, no están previamente creados por un artista y almacenados en disco. El artista lo diseña y se guarda la información que permite generarlo posteriormente, no los datos ya generados. Esto permite un ahorro bestial de disco.
Me llamó poderosamente la atención el hecho de que las animaciones se generaran al vuelo, supuse que habrá algún tipo de directrices que permitan generarlas, de otra forma es imposible, aunque con lo que he visto de video no soy capaz de concluir nada. Me puse a buscar información al respecto y he encontrado un link del 1994 sorprendente.
Karl sims propone un algortimo genético en el cual a partir de unas funciones muy básicas (sumas, multiplicaciones…) y un grafo neuronal genera criaturas en base a cubos usando una física “muy básica”. Las crituras que crea tienen 3 propósitos, andar, salar y nadar. Lo que sorprende, sobretodo en las criaturas que nadan, es como la evolución hace que se parezcan a las criaturas que tenemos e la naturaleza. Si te interesa el tema no dejes de leer los dos papers: “Evolving Virtual Creatures” y “Evolving 3D Morphology and Behavior by Competition”. Explica sin demasiados tecnicismos como están creadas las criaturas y las puedes ver en movimiento bajándote el video de archive.org
La mayoría de aplicaciones que se basan en licencias utilizan algún sistema para fijar una licencia a un determinado dispositivo, de tal forma que esa licencia solo se puede usar para cierto dispositivo y no otros. Es lógico pensar que una de las opciones es usar el identificador único que la mayoría de máquinas tienen para fijar esta relación.
Hace no demasiado me he comprado un PocketPC que trae windows mobile 5 y una de las cosas que me hn llamado la atención es que al ejecutar algunas aplicaciones el sistema operativo me avisaba de que no estaba firmada y podría dañar mi equipo. Ya estamos acostumbrados a ver estos mensajes cuando instalamos un driver en windowsxp que no está firmado por alguna autoridad y por tanto he estado pasando de él.
En estos días estoy testeando la aplicación para asistencia al guiado para el agricultor en diferentes equipos y me han dejado un pocketpc con windows mobile 5 con un GPS con un refersco de 5Hz. Al arrancar la aplicación veo que la rutina que toma el identificador del dispositivo falla. Voy a internet y tras unos minutos encuentro lo siguiente: resulta que por cuestiones de seguridad microsoft ha optado por deshabilitar las llamadas al sistema que permitían obtener el identificador del dispositivo salvo para códigos “trusted”, esto es, de una fuente conocida. Para ser una fuente conocida tu aplicación debe tener un certificado que permite leer ese identificador y claro, para obtener esa certificación tienes que abonar la correspondiente suma.
Menos mal que han habilitado una función para recoger el ID, GetDeviceUniqueID, y cuyas cabaceras y librerías vienen en el SDK de windows mobile 5, que por otro lado no te puedes bajar si no posees una copia legal de windows. Como son 170 y pico megas y yo vengo de una saga de aventureros usuarios de modem de 56k decidí que pasaba de bajarme toda esa purrela para usar una simple función. Recordé mi época en la que todo era maravilloso y todo lo quería hacer modular dividiendo las aplicaciones en tropecientas DLL’s que, por cierto, casi nunca llegaban a ninguna parte, y me puse manos a la obra…. un poco de LoadLibrary, un poco de punteros a funciones y voila:
typedef HRESULT (*idfunc)(LPBYTE,DWORD,DWORD,LPBYTE,DWORD*);
inline BOOL GetDevideIDWindowsCE5(unsigned int *id)
{
idfunc GetDeviceUniqueID;
HINSTANCE h = LoadLibrary(_T(“coredll.dll”));
if(h)
{
GetDeviceUniqueID=(idfunc)GetProcAddress(h, _T(“GetDeviceUniqueID”));
if(GetDeviceUniqueID)
{
HRESULT hr = NOERROR;
BYTE rgDeviceId[DEVICE_ID_LENGTH];
DWORD cbDeviceId = sizeof(rgDeviceId);
#ifndef GETDEVICEUNIQUEID_V1
#define GETDEVICEUNIQUEID_V1 1
#endif
hr = GetDeviceUniqueID(reinterpret_cast(APPLICATION_DATA),
APPLICATION_DATA_LENGTH,
GETDEVICEUNIQUEID_V1,
rgDeviceId,
&cbDeviceId);
if(hr != NOERROR)
{
return FALSE;
}
BYTE* p =(BYTE*) rgDeviceId;
unsigned int k = 0;
for(int i=0; i< cbDeviceId; ++i)
{
k += *p;
}
*id = k;
return TRUE;
}
return FALSE;
}
return FALSE;
}
Visitando el blog de Jare he encontrado dos links batasnte interesantes.
Uno de ellos es a una galería con imágenes generadas proceduralmente. Lo interesante no son solo las imágenes, además el autor deja el código fuente de los applets que generan esas imágenes, que por cierto usan una librería/lenguaje llamado processing. Dos ejemplo: creación de una ciudad y node garden. No os perdais el código fuente que puedes ver en la misma página que el applet.
El segundo link es a una entrevista a Kenta Cho en la que habla de sus juegos, da algunos detalles de la programación, su inspiración y otras cosas. Merece ser leída.