miércoles, 25 de julio de 2007

GLUT y su eventual sustitución

Estas últimas semanas estaba tratando de recordar un poco como usar OpenGL y, a diferencia de lo que había hecho en ocasiones anteriores, probé utilizar algunas bibliotecas para facilitar el trabajo (algo se aprende al pasar los años :-)

Empecé utilizando GLUT, ya que tiene una enorme base de ejemplos desde los que partir. Pronto me encontré con un inconveniente: yo programo normalmente esta clase de aplicaciones en C++, pero GLUT fue diseñada para utilizarse con C y, por desgracia, algunas de sus callbacks tienen el prototipo void callBack(void). Esto me hacía imposible esconder a this y me obligaba a utilizar un punto de acceso central, probablemente un singleton (ahora que lo pienso mejor, podría haber implementado alguna clase de dispatcher pero, como verán, no era realmente necesario).

Al no encontrar dicha "solución" muy satisfactoria (años de propaganda anti-singleton rindiendo frutos), probé con varias adaptaciones o extensiones de GLUT para C++, siendo GLT la que atrajo más mi atención. Sin embargo, carecía notablemente de documentación e involucraba múltiples DLLs.

Me disponía a seguir probando con GLUT pero, al consultar algunos ejemplos de "procedural textures" de Sean O'Neil (lamentablemente su sitio ya no funciona, pero pude encontrar sus ejemplos en The Wayback Machine), me encontré con SDL. Ya había escuchado mencionarla, pero nunca pensé que fuera tan simple de utilizar; en unos minutos tenía corriendo mi primer ejemplo y, a partir de entonces, me convertí totalmente a SDL :-)

Sigue siendo C, pero su sistema de manejo de eventos, paradójicamente basado en un loop explícito al estilo Windows, es fácil de integrar con C++. Además gana en todas las otras áreas, ya que incorpora un control más directo de la resolución de la pantalla y la documentación, si bien breve, es la necesaria para empezar a utilizarla rápidamente.

Cuando siga con mi ejemplo de OpenGL, veré que tan satisfactoria resulta en general...

En otras áreas:
  • Tres blogs interesantes:

viernes, 20 de julio de 2007

Dia del Amigo y otras cosas

Breves comentarios:

Al ser hoy el Día del Amigo y, por lo tanto, aniversario de la llegada de la misión Apollo 11 a la Luna, estaba mirando el artículo de Wikipedia sobre el tema, seguro de que no podía decir nada que no conociera, ya que había leído bastante sobre el tema, me encontré con esto. Ciertamente tomaban en cuenta todas las posibilidades con antelación :-I

Otro tema que vi es la interesante máquina que juega al Ta-Te-Ti hecha con "Tinkertoys" (con pequeñas excepciones). Puede verse en forma libre un excelente y muy detallado artículo sobre ella.

Para despedirme, la épica pelea en Hockey entre canadienses y soviéticos (año 1987) en YouTube.

Juego de las damas resuelto!

El juego de las damas fue resuelto! (Como era de esperar el resultado del juego perfecto es empate.)

Es un resultado interesante porque es, por lejos, el juego más complejo que ha sido resuelto completamente. Aparentemente al ajedrez le queda bastante tiempo todavía, aunque la teoría de los finales de ajedrez ha sido modificada en formas importantes por las búsquedas exhaustivas realizadas por Ken Thompson (el mismo del Unix!), que indicaron, por ejemplo que ciertos finales de rey, dama y peón contra rey y dama (denominados KQPKQ) requerían más de 50 movidas para el mate.

jueves, 19 de julio de 2007

Descripción del tema de la tesis y otras cosas

Bueno, antes de seguir con los temas del día, voy a hablar un poco de cual es el tema de mi tesis. El tema es la "Utilización de estrategias de selección de población para el diseño de filtro analógicos pasivos utilizando programación genética", pero ¿qué significa?

Bueno empecemos con la programación genética (mucha más información sobre el tema, como siempre, puede encontrarse en Wikipedia o en Google). La programación genética es una técnica para resolver problemas de optimización que se basa en realizar una "evolución artificial" de una población de programas, con el objeto de seleccionar al que dé la solución más conveniente al problema planteado. Se diferencia de los algoritmos genéticos en que el genoma no se interpreta en forma estática, sino que se ejecuta con una máquina virtual (limitada, lógicamente, no es ni HotSpot ni CLR! :-) Voy a hablar más de este tema (uno de los más importantes en un sistema de programación genética) posteriormente, cuando esté implementando la mencionada VM.

Los filtros analógicos pasivos son circuitos electrónicos cuyo objetivo, tal cual lo indica el nombre, es "filtrar" una señal, eliminando ciertos componentes de la misma. Se denominan analógicos porque operan con una representación continua de la señal; esto los diferencia de los filtros digitales que lo hacen con una representación en tiempo discreto. Finalmente son pasivos porque solo utilizan tres clases de componentes: resistores, capacitores e inductores, ninguno de los cuales "entrega energía" a la señal (la definición estricta de pasividad es algo compleja). A pesar de que no figura en el nombre, estos filtros son lineales, lo que implica que la respuesta a la suma de dos señales es al suma de las respuestas que daría a cada señal por separado.

El realizar todas esas generaciones de evolución con poblaciones que pueden llegar a tamaños considerables es computacionalmente costoso. Si bien hoy día es en general ventajoso intercambiar tiempo del programador por tiempo de máquina, como lo muestra la gran popularidad de lenguajes tales como Python, una tarea suficientemente compleja puede vencer incluso al crecimiento exponencial del poder de cálculo. Por ello es importante tener métodos relativamente sofisticados para elegir a los circuitos de la población con mejores perspectivas de acercarnos a la solución. Más adelante hablaré sobre al naturaleza de estas estrategias.

Bueno ahora a los links del día:

Brian Beckman: The Physics in Games - Real-Time Simulation Explained

Photo Tourism: Exploring Photo Collections in 3D (funciona con Firefox)

En el próximo post: GLUT - arcaica o práctica :-D

miércoles, 18 de julio de 2007

Post inaugural

En este blog pienso desarrollar ideas relacionadas con el tema de mi tesis, de forma de obtener realimentación al respecto. También, lógicamente, tendrán su lugar las ideas no directamente relacionadas con la tesis.

Espero que no se convierta en un "sumidero de tiempo" :-)