javisantana.com

Usa subversion por favor

Cuando llevas ya algún tiempo manejando código te das cuenta del caos que puede llegar a ser el no tener un control muy métodico del mismo e incluso teniendolo pueden surgir problemas que hagan que un trabajo de días se vaya a la mierda o que gastes horas en saber “como pichas va esto”. En mi caso me ha pasado muchísimas veces que tengo versiones de clases diferentes en cada PC y cada una de ellas con avances que la otra no tiene y que finalmente se pierden o me toca reprogramar.

No me había planteado el usar un sistema para gestionar mi código hasta que un día colson me comentó que él usaba subversion para mantener el código de su juego (the cursed wheel). Las ventajas que ofrecía eran muchísimas:

- unicidad de código: Solo hay una versión del código y esa está en el reprositorio, con esto evitas problemas de diferentes versiones en diferentes lugares, incluso dentro de la misma máquina. Por ejemplo, imaginemos que tenemos una librería para dibujar mallas que usamos en varios proyectos, sin usar un sistema gestor de código los cambios que hagamos, por ejemplo, en las cabeceras tendremos que copiarlo al resto de versiones. Personalmente me gusta tener una copia de cada clase dentro de la carpeta de proyecto y con subversion soluciono el problema de forma muy simple.

- salvavidas (I) : Estás tranquilamente programando una aplicación, haces unos cambios, compilas y pruebas con tan mala suerte que aparece un bug que antes no había. No problem, con subversion puedes ver los cambios de cada uno de los ficheros, comparas la versión actual con la última y así sabrás donde has podido meter la gamba. Este use es _extremandamente_ útil.

- salvavidas (y II): Estás tranquilamente programando con win2000 y vc++6.0 y se va la luz de tu casa. Te acuerdas de la madre de iberdrola y a continuación reinicias. Vuelves a arrancar vc++6.0 y te encuentras con que algunos .cpp están corruptos… GRRR… eso era antes, ahora rescatas última versión de ls archivos corruptos y a correr. Lo que sería ya rozar la perfección es tener el servidor en una máquina diferente por si las moscas, pero en caso contrario hacer backups es una tarea muy simple y que puede salvar muchas vidas. Luego pondré un pequeño script.

- más que código: subversion permite mantener versiones de cualquier fichero, ya sea texto o binario con lo cual todos los datos que maneje el programa podrán estar bajo un control de versión. En mi caso tengo bajo control los ficheros de proyecto de VC++, los ficheros de blender que uso para alguna que otra cosa, el propio código, la memoria del proyecto, etc.

- orden: aunque seas muy metódico a la hora de llevar un orden es muy posible que algo se descoloque o no vaya como debe, subversión te obliga, mejor dicho, te encauza para que tengas todo ordenao y perfectamente disponible sin realmente demasiado esfuerzo.

Dicho esto, procedo a dar los pasos para instalar y configurar un repositorio:

- bajarse subversion e instalarlo
- bajarse tortoiseSVN e instalarlo
- crear un directorio para el repositorio, p.ej c:\repos
- arrancar el server de subversion: svnserve -d -r c:\repos (aconsejable arrancarlo al inicio o tener un .bat)
- dentro de c:\repos crear una carpeta para cada código, p.ej c:\repos\proyecto1- pinchar en el segundo boton en esa carpeta: TortoiseSVN->create repository here (con esto le dices que ahí habrá un repositorio)
- importar los datos que contendrá ese repositorio, código, binarios, etc: Ir a la carpeta de proyecto1 originaria (donde tienes el código) y con el segundo botón TortoiseSVN->import… en la siguiente pantalla indicar la ruta del repositorio svn://localhost/proyecto1. Se importa todo y…. zasca, habrá problemas con el usuario. Ningún problema, dentro de c:\repos\proyecto1\conf hay dos archivos. Con passwd añades los siguiente:
“””
[users]
javi = mipass
“””
y en svnserve.conf pones:
“””
[general]
password-db = passwd
auth-access = write
“””

Ahora ya se puede entrar con el usuario y password que se han especificado en el fichero passwd.

- Ahora ya se puede “bajar” ese código a cualquier carpeta: p.ej en c:\proyectos_nuevos\proy1 pinchando en el segundo botón en SVNcheckout podrás bajar todo el código de cualquier repositorio.
- Cuando se modifique el código y quieres subir los cambios basta con pinchas en el segundo botón sobre c:\proyectos_nuevos\proy1 y pinchas en SVN commit.

Puede parecer un engorro al comienzo, pero es muy cómodo, útil y que sirve para cualquier cosa, por ejemplo para todos los ficheros se suelen tener de clase que siempre terminan perdidos, para la memoria del PFC, para el código de tus scripts de administración, etc, etc.

Por último un .bat que uso para hacer backups de todo mi proyecto fin de carrera que puede servir como ejemplo:

”””
svnadmin dump c:\repos\pfc_memoria –incremental > bak/pfc_memoria_bak
svnadmin dump c:\repos\pfc_main –incremental > bak/pfc_main_bak
svnadmin dump c:\repos\pfc_tools –incremental > bak/pfc_tools_bak
“””

Cálculo de ambient occlusion

Hace unos días link-aba a un artículo sobre ambient occlusion que explicaba de forma muy simple una forma de calcularlo llamada spherical armonics, procedimiento que también rgba usa en 195/95/256 del cual puse un post hace dos días (o tres).

Leyendo con más detenimiento ls artículos de iq leo (párrafos 5 y 6) la forma que tienen de calcularlo en la intro. En resumidas cuentas colocan la cámara (con un fov de 170º)en el vértice considerado mirando en dirección al vector normal y renderizan la escena, bueno, me parece haber leído que cada objeto tiene información de los objetos que debe renderizar para el cálculo del AO. El truco del asunto está en haber borrado el bit-buffer de blanco y dibujar todos los polígonos de negro, de forma que el resultado de esa escena es renderizado a una textura que es “descargada” en memoria de sistema y sobre la que se hace un cáculo de los puntos negros que hay. Como explica iq, la escena es renderizada en un viewport de 32x32 con el objetivo de minimizar el tiempo que se tarda en transferir la textura de la memoria de la gráfica a la de sistema. Una técnica la mar de simple, pero muy inteligente. La calidad del resultado salta a la vista.

Y ya que estamos con GLSL, gracias a pingüino, manual de referencia GLSL online referencia del API de GLSL y un tutorial desde 0.

EDIT: mientras cenaba me he dado cuenta que en este caso GLSL no es necesario para absolutamente nada, donde de verdad interesa es a la hora de renderizar la escena con AO.

tetris DS

Veo en vidaextra las primeras imágenes del tetris para nintendo DS lo cual no me sorprende en absoluto, es obvio que ninteno ni iba a dejar pasar un juego tan simple y tan divertido como tetris sin sacarle partido. Cada vez que veo un nuevo juego de DS tengo más claro que nintendo tiene una política muy diferente a las llevadas por sony y microsoft, nintendo innova con sus consolas, empezando por la DS con su pantalla táctil, sus dos pantallas, la posibilidad de jugar por wifi, etc, cosas que no serían muy significativas si no fuera por algunos de los juegos que presentan.

La posibilidad de jugar por wifi creo que es una de las mejores ideas de nintendo y que hace plantearme la compra de su consola (casi exclusivamente por el mario kart) y en el caso del tetris mucho más. Hace ya algún tiempo surgió tetriNET, un cliente de tetris multijugador cuyo protocolo va por encima del protocolo del IRC y que hacía que no fuera necesaria la existencia de servidores dedicados al juego, basta con que hubiera un servidor de IRC vivo. Yo llegué a jugar algunas veces y era muy divertido a pesar de la simplicidad en gran parte gracias a que podías competir con hasta 6 personas y por eso espero que el tetris DS esté como mínimo a la misma altura. Incluso en el enlace que he puesto de wikipedia hacen referencia a la similitud de ambos juegos.

Se puede criticar a nintendo por usar refritos de sus antiguos juegos, pero creo que se trata de todo lo contratio, está cogiendo lo más divertido de cada juego y lo está explotando al máximo, prueba de ello es el mario kart con el que muchos de nosotros hemos pasado horas jugando a multiplayer y ahora con un clon del tetrinet del cual bien demostrada queda su jugabilidad y diversión viendo la comunidad que hay detrás.

making of 195/95/256

Visitando la página personal de iq, componente de rgba he encontrado el making of de 195/95/256. Para el que no tenga ni pajolera idea de que estoy hablando, 195/95/256 es una intro fotorrealista presentada a la euskal del año pasado que trata de ser una versión en 64kb de una demo que originalmente ocupaba 19 Mb.

En el making of cuenta como se creó la geometría (generar una gemoetría tan detallada como la que genera no es fácil), la arquitectura del sistema, iluminación e incluso las optimizaciones usadas para la compilación. Hay algunos enlaces que aún no están completos, espero que iq los complete poco a poco.

Además del makingof de 195/95/256, también hay imágenes de la creación de paradise (video), otra intro de rgba bastante impresionante en la que en 64kb mete bosques, montañas icebergs, rinocerontes y animalillos varios. Para ilustrar una imágen de antes y depués del rinoceronte.


Todos los textos están llenos de imágenes del desarrollo que a los que estén interesandos en el tema les van a sorprender seguro.

Por último solo recomendar una vez más, si tienes una tarjeta gráfica decente, que te bajes las dos intros, y que si no la tienes, saques provecho a tu conexión de banda ancha y te bajes la versión en video de la página de descargas de la web personal de iq.

Videojuegos en Cuatro - O* -

Leo en meneame que cuatro, el canal que tv que suplantó a canal+, ha publicado un blog sobre videojuegos titulado plástico.tv. Se veían venir dos cosas referentes a este tema, primero: este tipo de ocio está muy presente en la sociedad y ya estaban tardando en meter en parrilla programas de videojuegos. Y segundo y más importante: las televisiones creo que se están empezando a dar cuenta de que con su poder es muy fácil obtener visitas a una web y tener ingresos por publidad, ya sea adsense u otro servicio.

En cuatro actualmente ya se habla de videojuegos, aunque no es la única, muchas televisiones tienen pequeños espacios relacionados con videojuegos. Yo tengo constancia de varios algunos programas exclusivos de videojuegos en la red, por ejemplo gameover que conocí a través de lost levels, que es un programa de una radio catalana que publica sus programas en internet. En donde yo trabajo hay un programa llamado crazypixels, que se emite a las 10:30 de los sábados y que se puede ver en todo castilla y león a través de los televisores, en las casas que tengan ono en el canal TVCYL (imagino que a nivel regional) o a través de internet .

Por cierto, para los nostálgicos, aquellos que recordamos al monstruo de la última pantalla, a pin y pon, a guillém caballé, a carlos ulloa (llegó a ser art manager en psygnosis en la época dorada), a manuel… game40 y si eres mucho más nostálgico: game4ever que es una recopliación de todo lo que aún queda de aquel maravilloso programa que marcó a una generación (sobrada), todo ello gracias a epidemia y otra gente.

EDIT: leo en un comentario de meneame lo siguiente:
“””
Veo en la nota de prensa original, que plastico.tv, no es una producción de Canal 4, sino una web independiente de los productores de uno de sus programas.
“””
Con lo cual se estrella toda mi teoría :/