Periplo por un entorno de trabajo para Ogre

Estos días he estado tratando de establecer un entorno de trabajo multiplataforma para trabajar en los ejemplos de IberOgre y en el propio Sion Tower. Lo ideal, para mí, era poder compilar con herramientas libres y sin tener que depender de ningún IDE. Al no ser la forma habitual de desarrollar de la comunidad de Ogre, la documentación era escasa y acertar ha sido sorprendentemente complicado. Les contaré mi periplo:

VisualStudio.png

Herramientas privativas

La wiki oficial de Ogre da mucho soporte a Microsoft Visual Studio pero al ser privativo no encajaba con la filosofía de IberOgre y lo descarté. No creo que utilizar herramientas no libres sea bueno en un proyecto que pretende ser accesible con facilidad. Suficientes trabas pone ya el hecho de tener que interiorizar conceptos complejos como para encontrarse en la necesidad de piratear software, violar licencias etc.

Cualquier desarrollador debería poder, siguiendo el manual de IberOgre, establecer un entorno de trabajo sin costes de ningún tipo y sin problemas con licencias. Ogre3D es software LGPL y creo que, en el marco en el que estamos moviéndonos, sería recomendable mantenerse en la línea.

cmake.png

CMake, el generador de makefiles

CMake es una herramienta multiplataforma y open source capaz de generar makefiles específicos para cada plataforma. Debemos crear un fichero CMakeLists.txt con las instrucciones pertinentes: código a compilar, librerías requeridas y demás dependencias. Parecía algo estupendo, con un solo fichero de CMake podría generar makefiles para compilar proyectos tanto en GNU/Linux (GCC) como en Windows (MinGW).

Finalmente, los inconvenientes de CMake me hicieron prescindir de él. Existe poca documentación y su curva de aprendizaje es alta. Además no crea objetivos “clean” que verdaderamente limpien los ficheros que se generan en la compilación. Estos inconvenientes no compensaban añadir una capa de abstracción más al proceso.

codeblocks-logo.png

Code::Blocks, el IDE libre

Code::Blocks es un entorno de desarrollo integrado libre con versiones para Linux y Windows. Además, cuenta con asistentes para la creación de proyectos de Ogre. Mi desesperación en ese momento era considerable y estaba dispuesto a usar un IDE si merecía la pena.

Todo no podía ser bueno y comencé a encontrarme con varios obstáculos. Los asistentes generaban proyectos que escribían en el directorio de instalación de Ogre y que precisaban de múltiples ajustes. Por si fuera poco el asistente de Windows no era compatible con la versión 1.7 del motor (la más reciente) y tuve que descargar la nueva versión del wizard desde aquí.

Code::Blocks utiliza el compilador GCC en Linux y, si lo deseas, MinGW en Windows. Era muy posible que internamente utilizase make (o algo parecido) para compilar sus proyectos. Si ese era el caso, seguramente existiera un exportador que tomara un proyecto de Code::Blocks y lo convirtiera en un makefile.

Makefile a partir de un proyecto de Code::Blocks

Al encontrar, cbp2mak, el deseado exportador vislumbré un rayo de esperanza. Quizás, finalmente pudiera utilizar un makefile para cada plataforma que se ajustara exactamente a mis necesidades. El proceso es muy sencillo, descargamos cbp2mak y ejecutamos las siguientes instrucciones:

unzip cbp2mak-0.2.zip
cd cbp2mak.zip
make

./cbp2mak -C ruta_al_proyecto proyecto.cbp

El makefile resultante es un poco extraño y complejo pero, utilizando ese como base he podido crear unos a mi medida. Un proyecto de Code::Blocks es un XML en el fondo, podemos abrirlo con un editor y ver qué flags utiliza para el compilador y el enlazador.

gnu.png

El resultado

En contra de todo pronóstico, el resultado ha sido excelente. A continuación, coloco un ejemplo de cómo sería una jerarquía de directorios para un proyecto básico en Ogre:

|- proyecto
|
|- src
|   |- ficheros.cpp
|
|- include
|   |- ficheros.h
|
|- plugins (en caso de ser necesarios)
|
|- makefile-linux
|- makefile-windows

Para compilar sólo tendríamos que hacer (según el sistema operativo):

make -f makefile-linux depend
make -f makefile-linux

mingw32-make -f makefile-windows depend
mingw32-make -f makefile-windows

Para personalizar el nombre del proyecto sólo tenemos que modificar el valor de una variable en cada makefile. Por supuesto, esto supone tener una serie de paquetes en el sistema y ciertas variables de entorno, todo el proceso de instalación acabará ampliamente detallado en IberOgre.

Ahora a seguir trabajando duro y llenar de contenido el wiki.

Guía de estilo para C++ de Google

Google_logo_png.png

Cuando se programa es de suma importancia que el estilo sea uniforme, máxime, si trabajamos en un equipo de varias personas. Por si no supusiera suficiente esfuerzo comprender código ajeno aunque éste cuente con comentarios, hacerlo cuando cada desarrollador sigue su propio criterio puede ser una pesadilla. Es ahí donde entran en juego las guías de estilo. Hay muchas y ninguna tiene por qué ser mejor que otra a priori, no obstante, es recomendable ceñirse a una.

Hace varias semanas me recomendaron la guía de estilo para C++ de Google. Sus directrices están perfectamente detalladas, no limitándose a plantear una simple lista sino que podemos descubrir decenas de buenas prácticas perfectamente justificadas. Se nos presenta el problema junto con las ventajas e inconvenientes de tomar una decisión concreta. Finalmente, de manera razonada, llegamos a una convención. Leyéndola he descubierto detalles sobre C++ y la programación en general que desconocía, la recomiendo encarecidamente aunque no esté completamente de acuerdo en todos sus puntos.

Acompañando a la guía se ofrece cpplint.py, un script en Python para validar nuestro código siguiendo el estilo de Google. Utilizarlo puede ser una buena manera de tratar ser disciplinado con nuestro propio trabajo. Funciona con ficheros .h y .cpp, para ejecutarlo nos situamos en el directorio donde se aloje el script y tecleamos la siguiente orden:

python cpplint.py fichero.cpp

He comprobado que ofrece resultados completos y claros por lo que voy a utilizarlo en mis proyectos actuales: IberOgre y Sion Tower. Sion Tower es un videojuego en el que trabajaré en solitario pero IberOgre, al ser una wiki colaborativa, cobra importancia mantener un estilo limpio y consistente.

Desarrollo de videojuegos en C++ con SDL para PSP en Wikilibros

portpsp.png

Mientras trabajamos en Granny’s Bloodbath se nos ocurrió la idea de hacer un port a PSP del juego. Fui el encargado de la tarea y, cuando me puse manos la obra, descubrí que la documentación era pobre y en la mayoría de casos errónea. Lo cierto es que fue toda una aventura descubrir cómo crear un juego para PSP en C++ usando SDL y otras librerías sin cambiar el código original.

Debido a la dificultad que me supuso, redacté una guía en PDF bajo Creative Commons y la publiqué en el repositorio del proyecto. Recibí consejos por parte de mis compañeros para publicarla en algún lugar donde pudiera tener más difusión, por ejemplo Wikilibros. Después de bastante tiempo les he hecho caso y, tras superar los entresijos de las reglas de nombrado de páginas, la guía ya está alojada allí. Podéis acceder a ella desde aquí.

Sería estupendo si le sirviera a alguien para crear algún proyecto en PSP.

Pencil Project, bocetos de interfaz

pencil-project-logo.png

A la hora de desarrollar software es muy importante diseñar correctamente la interfaz, no importa si es una web o una aplicación de escritorio. Antes de lanzarnos a programar como posesos, durante el análisis y el diseño es altamente recomendable realizar bocetos o esquemas de las pantallas con las que contará la aplicación así como la forma de interactuar con las mismas. Para ello nos podemos ayudar de alguna herramienta para crear bocetos de interfaces de usuario (mockups o sketching).

Pencil Project es la alternativa libre (GPL v2) y multiplataforma para realizar esta tarea. Es una simple extensión de Firefox pero cuenta con una potencia y flexibilidad considerables. Nos permite crear proyectos con varias pantallas, en las cuales es posible añadir cualquier elemento de una GUI típica (botones, tablas, cajas de activación, deslizadores…). No sólo será útil para aplicaciones de escritorio sino que cuenta con multitud de elementos web. Una de sus características más importantes es la capacidad de alinear objetos para que el conjunto quede ordenado.

pencil-project.png

Los proyectos se guardan en XML aunque podemos exportar nuestros diseños a otros formatos como: PNG, PDF, ODT o HTML eligiendo entre varias plantillas disponibles. La curva de aprendizaje es prácticamente nula y resulta completamente intuitivo. Se trabaja de manera rápida y ayuda mucho a despejar las ideas sobre la interfaz del software a desarrollar. Una excelente alternativa a herramientas privativas como Balsamiq Mockups.

Green Zone

Green-Zone.png

Green Zone es una película que, para mí, pasó desapercibida durante su proyección en salas pero finalmente me he decidido a verla. Basada en la novela “Vida imperial en la ciudad Esmeralda” con un guión escrito por Brian Helgeland y dirigida por Paul Greengrass. ¿Qué me ha impulsado a verla? Una tarde por delante y pocas ganas de digerir una película compleja. Finalmente es lo que, en cierto modo, he obtenido.

El oficial americano Roy Miller (Matt Damon) dirige a su unidad en misiones de búsqueda de las tan cacareadas armas de destrucción masiva en la guerra de Irak. Ninguna de las indicaciones que recibe de inteligencia da sus frutos hasta que se ve abordado por un civil que le ofrece información. Inicia así, la búsqueda de un general iraquí, Al-Rawi, sospechoso de conocer el paradero de dichas armas. Las teorías de la conspiración brotan de todas partes y Miller pronto empieza a cuestionar los fundamentos de la guerra en Irak.

No me extraña en absoluto que la película haya dividido a la crítica, sobre todo a la americana ya que muestra a los altos cargos del Gobierno desde el prisma de la corrupción. No pienso meterme en el barrizal que puede ser discutir sobre la guerra de Irak pero comprendo perfectamente que este largometraje levante ampollas. En cualquier caso, se está abordando un tema extremadamente reciente en favor de la espectacularidad. Lo correcto es aguardar cierto tiempo si se desea mostrar una perspectiva rigurosa, al menos eso es lo que diría cualquier historiador.

La película no deja de ser un intento de mezclar la acción de forma épica y espectacular con la crítica hacia el drama de Irak. Un cóctel que no acaba de funcionar acertadamente. Matt Damon es un actor correcto, ha funcionado bien en la trilogía Bourne. No obstante, desde mi punto de vista no consigue dotar al conjunto del dramatismo que se merece. El ritmo es correcto y logra entretener, que no es poco. Por lo demás tendremos tiroteos, asaltos y explosiones en la forma en la que estamos acostumbrados en el cine bélico palomitero.

Podéis imaginaros el resto.