miércoles, 16 de marzo de 2016

Describiendo los cuadros de diálogo de ZinjaI

Tengo en ZinjaI muchísimos pequeños y no tan pequeños cuadros de configuración. Estos cuadros suelen representar un conjunto bastante lineal de "valores" configurables. En general estos "valores" se pueden reducir a tres o cuatro tipos básicos, y entonces todos los cuadros y paneles se pueden reducir a una lista ordenada de valores con sus tipos, más unas pocas indicaciones adicionales y opcionales sobre el estilo visual o pequeños agregados. Estuve rediseñando todo el código alrededor de la confección de estos cuadros de diálogo para que reorganizarlos, cambiar los estilos, o agregar y quitar elementos sea mucho más simple, rápido, y a prueba de errores.

domingo, 13 de marzo de 2016

ZinjaI en Windows: ¿Qué compilador elegir?

Existen muchos ports a Windows de GCC y de las demás herramientas/bibliotecas afines. En ZinjaI siempre usé MinGW. En su momento, hace unos años, era la opción por defecto casi sin pensarlo, pero la situación ha cambiado. Para empezar, MinGW ha quedado atado por definición a los 32 bits, mientras que la mayoría de las PCs modernas y sus sistemas operativos son de 64. Para seguir, el ritmo de actualización de MinGW se ha ralentizado bastante, o al menos eso parece en comparación con la velocidad a la que han avanzado las demás versiones. El problema es que las alternativas son muchas, hay nuevas decisiones que hacer para elegir una, y desde mi punto de vista no emerge una opción claramente ganadora de todo esto.

miércoles, 2 de marzo de 2016

El paso a wxWidgets 3.x

Como comenté hace poco, la actualización de la biblioteca wxWidgets (wx) es un cambio interno en ZinjaI y PSeInt que vengo esquivando hace rato. wx es conocida principalmente por permitir generar interfaces (GUIs) de forma portable (entre plataformas). Pero en realidad es un framework completo, que ofrece muchísimas otras abstracciones de distinta índole. Por ejemplo, gestiona el lanzamiento de procesos hijos y las tuberías de entrada/salida para controlarlos, ofrece una interfaz para conexiones TCP/IP, tiene sus propios threads, su propio manejo de cadenas, etc. En ZinjaI y PSeInt uso casi todo eso, lo que es de interfaz, y también lo que no.

martes, 23 de febrero de 2016

Arranca el 2016

El ritmo de desarrollo de ZinjaI y PSeInt empiezan de a poco a volver a la normalidad, después de unos cuantos meses demasiado quietos. En estos días publiqué las primeras versiones de 2016 de ambos proyectos. No hay cambios muy grandes, pero sí muchos detalles, especialmente en ZinjaI. En este post les resumo el estado de ambos y les adelanto algunos planes para 2016.

lunes, 15 de febrero de 2016

Lisp vs. C++ (fe de erratas)

Hace unos días publiqué un post comentando que había empezado a leer el SICP y que había tomado como ejercicio adicional armar mi propio intérprete de LISP para probar los ejemplos. Lo hice sin estudiar antes cual es la forma correcta de hacerlo, tratando de ir descubriéndola y corrigiéndola sobre la marcha, y pensando más en un código compacto y prolijo, que en un código eficiente. Como el resultado efectivamente salió rápido y fue conciso, en aquel post comenté a grandes rasgos las ideas principales y compartí el código. Pero resulta que tenía, como era de esperarse, errores importantes.

jueves, 28 de enero de 2016

<sin_titulo_1>

No se me ocurre un buen título para esto, porque ni siquiera se exactamente de qué trata. Acabo de leer un post de Scott Meyers donde anuncia su retiro. Esta noticia disparó un montón de recuerdos y reflexiones de dudosa relación entre sí, que vengo a contarles como para cortar el silencio que se formó en este blog por las vacaciones.

Hace unos pocos días llegué a otro post muchísimo más viejo, de un desconocido como yo, contando que cuando tenía 14 años le había escrito al mismísimo John Carmack para pedirle consejos sobre cómo iniciarse en el mundo de la programación, y John se había tomado el trabajo de responderle con detalle y a consciencia. Me acuerdo que cuando era chico con un amigo quisimos escribirle a Bill Gates (perdón), pero tuvimos problemas para encontrar una dirección adecuada para el envío. Todavía tengo en algún lado un txt con un mensaje preparado bastante tonto y muy mal traducido al Inglés. Si volviera el tiempo atrás, preferiría escribirle a John, o tal vez a Torvalds, o a Stallman, o tantos otros que o quien sabe.

miércoles, 6 de enero de 2016

LISP vs. C++

Uno de estos días necesitaba un intérprete de LISP para probar algunos procedimientos bastante simples. Pero resulta que mi conexión a Internet estaba en un mal momento, y por esto el gestor de paquetes decía que instalar el intérprete que tenía disponible iba a requerir más de 50 minutos de descarga. Fue ahí cuando pensé: "puedo escribir mi propio intérprete en menos de 50 minutos". Así que abrí el ZinjaI y lo intenté. 40 minutos y 160 lineas de código C++ después tenía un intérprete para lo mínimo necesario de LISP para los ejercicios que quería probar.

Este post no se trata de comparar las ventajas y desventajas de un lenguaje frente al otro (el título es engañoso). Se trata de responder a preguntas más razonables tales como: "¿cómo entra todo un lenguaje en solo 160 lineas?", "¿cómo se te ocurre ponerte a escribir algo así?", "¿no tenías nada mejor que hacer?", etc.

miércoles, 23 de diciembre de 2015

Sobre la GUI de ZinjaI (anexo)

Más novedades en este boletín... O más pequeñas mejoras en ZinjaI para esta próxima release. Siguiendo con el tema de la interfaz, hoy les cuento otro detalle que agregué, y lo aprovecho como excusa para asentar algunas explicaciones de cómo funciona el proceso mediante el cual la interfaz "evoluciona".

viernes, 11 de diciembre de 2015

Sobre la GUI de ZinjaI

Siempre digo que ZinjaI está pensado para dos tipos de usuarios muy diferentes: para el alumno que recién empieza y necesita algo simple; y para el programador avanzado que desarrolla un proyecto de tamaño considerable y necesita algo potente. Estos dos objetivos son a todas luces contradictorios e incompatibles entre sí... ¿o no? ¿Cómo es que sigo sosteniendo semejante contradicción? ¿cuál es la estrategia para justificarlo? He aquí algunos criterios y tips sobre porqué es cómo es, y cómo ajustarlo a gustos particulares.

lunes, 30 de noviembre de 2015

Cuando el backtrace no dice nada...

Una nueva versión de ZinjaI se aproxima. En realidad, las vacaciones se aproximan, y eso probablemente haga que se aproximen nuevas versiones de todo. Pero hoy les cuento de ZinjaI. No hay grandes super-novedades en esta versión. Al menos no hasta el momento. Sí hay un millón de pequeños cambios y correcciones que juntos suman. Pero entre lo poco destacable hay tres "pequeñas" mejoras en la interfaz de depuración que pueden ser muy útiles.

jueves, 12 de noviembre de 2015

ZinjaI y PSeInt "portables" (para llevar)

Pongo "portables" entre comillas porque me voy a referir a una definición de "portable" que no me gusta. En mis tiempos (como diría el abuelo Simpson) "portable" significaba que podía ejecutarse en diferentes plataformas (GNU/Linux, Windows, Mac OSX, Android, etc). En algún momento el mundo cambió y para cuando yo me di cuenta en Internet se hablaba de "portable" como sinónimo de "no tenés que instalarlo" o "te copias la carpeta en el pendrive y lo corrés desde ahí". Bien, les vengo a contar cómo conseguir esa "portabilidad" [trucha] para ZinjaI y PSeInt. No es mucho trabajo, pero hay un detalle que no estaba documentado y que viene muy bien para el caso. Por si alguno llegó pensando en la otra "portabilidad" (la buena :), de esa ya había hablado en este post.

lunes, 26 de octubre de 2015

...se encienden las ilusiones

Si realmente te gustan las carreras de motos, ya sabías cómo se iba a titular este segundo post. Se nos pone la piel de gallina cada vez que Martín Urruty pronuncia estas palabras un domingo a la mañana. Pero más allá del pequeño homenaje al relator (y extiendo mi simpatía también a su genial compañero Gustavo Morea), la idea es seguir hablando de cómo avanza MotoGT 2. En el post anterior comentaba que la escena principal (la carrera) ya empezaba a tomar forma, con varios cambios en el Game, y ya casi sin trabajo del lado del Engine y su Bridge. Sin embargo, sí hubo otro pequeño trabajo en el Engine, y queda por hacer uno más grande en el bridge. Hoy les cuento de qué se trata y de paso les traigo otro video.

martes, 20 de octubre de 2015

Se apaga el semáforo...

Hoy toca otra actualización del estado de MotoGT2 (video incluido!). Está avanzando relativamente rápido. El tiempo inicial invertido en el diseño del motor está pagando y con creces. La base ya está sólida, todo lo que tenga que ver con gestión de recursos, despliegue de gráficos, gestión de escenas, lógica interna del juego, y entradas ya está modelado y tiene al menos una primer implementación funcional. El único sistema grande en el cual aún no avancé nada es el de sonido, pero habiendo resuelto los otros, no es algo que me preocupe.

lunes, 12 de octubre de 2015

"Compilando" circuitos en MotoGT

Los que hayan jugado MotoGT sabrán que la primera vez corren en un circuito deben esperar buen rato hasta que cargue. Luego, las siguientes veces carga mucho mucho más rápido. Esto se debe a que cuando descargan MotoGT no descargan todas las imágenes que necesita para montar el circuito en pantalla. En su lugar, descargan otro conjunto de imágenes, a partir de las cuales se puede obtener el primero. Digamos que serían como los "fuentes" de los gráficos del circuito. Esto es así por varios motivos interesantes que vengo a comentar. Y como en estos días estuve reimplementando todo ese sistema para MotoGT2, también traigo novedades y algunas capturas para que vean cómo está mejorando el juego.

lunes, 5 de octubre de 2015

El control del tiempo en MotoGT2 (parte 2)

Hace unos días hablaba de qué es esto del "framerate" en un juego, cómo se puede relacionar con la física del mismo, y cuál era la solución simple que había usado en MotoGT 1. Si ya entendieron eso, ahora toca mostrar la solución un poco más complicada que estoy usando en MotoGT 2.