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.

martes, 29 de septiembre de 2015

El control del tiempo en MotoGT2 (parte 1)

La gestión de los FPS en un juego es mucho más compleja de lo que parece a primera vista. Para MotoGT 1 usé la técnica más simple y menos elegante: framerate constante. Para MotoGT 2 empezé tratando de independizar la velocidad de la física de la del rendering, usando para lo primero un velocidad constante, pero implementando el código de forma tal que esa constante pudiera ser ajustada luego. Pero ahora la cosa mutó, y resulta que al final el framerate ya no es constante, para ninguna de las dos. Hubo que resolver algunos conflictos, pero la inversión pagó, la diferencia se nota mucho más de lo que había imaginado.

miércoles, 16 de septiembre de 2015

Nuevos atajos en ZinjaI (parte 2/2)

En el post anterior les comentaba que la última release de ZinjaI traía algunas funcionalidades nuevas que no están tan a la vista pero que pueden ser muy útiles para acelerar nuestra codificación. Y les conté de lo nuevo en el menú "Generación de código" (si no lo leyeron, empiecen por ahí antes de seguir con este). Lo que quedó para la segunda parte son los cambios en los autocódigos y una nueva forma de edición múltiple.

jueves, 10 de septiembre de 2015

Nuevos atajos en ZinjaI (parte 1/2)

Las versiones de agosto de ZinjaI traen unas pocas novedades, pero creo que a pesar de ser pocas tendrán un gran impacto, ya que parecen muy útiles. Son algunos atajos para escribir más rápido. Por ahora están algo verdes, pero hay muchos escenarios en los que ya se pueden utilizar. Particularmente les vengo a comentar de tres cosas: las nuevas opciones en el submenú "Generación de código" del menú "Herramientas"; una mejora interesante en el mecanismo de autocódigos; y una nueva forma de editar varios lugares al mismo tiempo. La primera en este artículo, las otras dos quedarán para la segunda parte.

En lo personal, para mí son las tres cosas que no sabía que quería, pero que ahora que las probé las uso cada dos minutos y ya no puedo programar sin ellas. El objetivo de todo esto es como siempre escribir el código muy rápidamente. Y con acento en el "escribir". En un mundo ideal, el tiempo lo tenemos que invertir en "pensar" y no en "escribir". Entonces, mejor aprender a sacarle provecho a todo lo que el IDE nos ofrezca para el "escribir", para que consuma mucho tiempo menos que el "pensar". Sin más preámbulos, he aquí los nuevos trucos.

lunes, 7 de septiembre de 2015

And the winner is... (II)

Todas las semanas alguien del staff de SourceForge elige 10 proyectos para destacar, con algún criterio que no estoy seguro cual es, pero que por suerte le da iguales oportunidades a proyectos chicos y grandes. Luego, a fin de mes, de entre todos los destacados de ese mes, se elige un subgrupo de 9 o 10 proyectos y se somete a votación para determinar cual es el próximo "Community Choice Project Of The Month" (proyecto del mes (POTM) elegido por la comunidad). El ganador ostenta el título durante un mes. A veces, los editores eligen uno más como "Staff Choice POTM". Si entran al home de SF, lo primero que verán serán los proyectos destacados del mes, y lo segundo, los de la semana. Para cada proyecto destacado del mes, además, SF publica una entrevista con alguno de los desarrolladores en su blog. Pues bien, este mes (Septiembre 2015) el "Community Choice POTM" es nada más ni nada menos que PSeInt!!!

viernes, 28 de agosto de 2015

¿Dónde consigo un anti-antivirus?

Hoy planeaba a publicar otra cosa, pero necesito hacer catarsis. Ayer recibí dos quejas consecutivas sobre que el instalador del último ZinjaI parecía contener algo malicioso a ojos de algunos antivirus. Es muy poco probable que tal afirmación sea verdad, más abajo les cuento por qué. Y efectivamente no lo era, el antivirus estaba confundido. Pero me resultó muy alarmante descubrir dónde estaba la confusión. Y para colmo la experiencia de uso de un antivirus me pareció inverosímil. Como programador, entiendo el trabajo de locos que requieren y las concesiones que se deben hacer. Pero creo que pasaron la raya, y por mucho. Lo que vi no tiene justificación, prefiero mi PC llena de bichos antes que trabajar así. Ahora les cuento.

viernes, 21 de agosto de 2015

La zona del programador

Soy de esa clase de personas que les gusta mucho perder invertir tiempo buscaaando y probaaaando herramientas, o peor aún, haciéndose las propias. Y no es raro que se me valla más tiempo y esfuerzo en esa búsqueda o construcción, del que llevaría resolver el problema particular para cuya resolución quiero esa herramienta. Sin ir más lejos, hace muy poquito les conté sobre un error tonto que me llevó a programar dos nuevas funciones en ZinjaI, y que encima al final ni las necesitaba. Este tipo de cosas (el desviarme para buscar, hacer y/o automatizar herramientas y procesos) me ocurre todo el tiempo, y creo que es común en muchísimos programadores. El problema es que cuando uno desarrolla estas herramientas no-indispensables uno tiende a sentirse algo culpable por no trabajar directamente en la solución del problema, sino posponerla por una deformación profesional propia. Si esto también te pasa a vos, mi valioso lector, este post viene a darte algunas excusas para que dejes de sentirte culpable y valores ese trabajo.

lunes, 10 de agosto de 2015

Preguntas frecuentes sobre PSeInt

Hay tres preguntas acerca de las funcionalidades o el futuro de PSeInt que recibo periódicamente una y otra vez, ya sea en los foros, en mi correo, o a veces hasta en persona. Básicamente, sobre PSeInt para Android, sobre PSeInt en otros lenguajes, y sobre el uso de registros/structs en el pseudolenguaje. Les adelanto que son tres cosas que actualmente no están disponibles en PSeInt, pero si siguen leyendo les cuento mejor por qué no, y qué podemos puede hacer al respecto.

jueves, 30 de julio de 2015

ASM caliente para el alma del programador

Depurar programas paralelos es terriblemente complicado. Y cuando uno le suma a eso su propia idiotez el combo se torna mortal. Esta semana perdí dos días completos por culpa de un error de tipeo. Pero, como toda historia para que merezca ser contada debe tener algún lado bueno, en este caso, mis dos días de caza incluyeron el desarrollo de un par de funcionalidades nuevas en ZinjaI. Funcionalidades que al final de cuentas no necesitaba en absoluto para resolver ese problema, pero que en algún momento pensé que sí, y supongo que a futuro ya les daré mejor uso. Se trata de un par de paneles para inspeccionar el código de máquina generado por el compilador, y el estado de los registros internos del procesador durante la depuración. He aquí la anécdota completa y el resultado.

jueves, 23 de julio de 2015

La escencia de la programación de computadores

El gran Brian Kernighan escribió una vez, hace como mil años (circa 1976), la siguiente frase:

"Controlling complexity is the essence of computer programming."

Una posible traducción sería: "El control de la complejidad es la esencia de la programación de computadoras." Debo haber leído esta cita por primera vez hace al menos 10 años. En su momento me pareció una más. No eran palabras rimbombantes, ni conceptos extraños. Parecía más bien un punto de vista, una opinión, con algo de cierto, algo de exagerado, como tantas otras. Otras frases me impactaron/gustaron mucho más cuando las leí por primera vez. Sin embargo, con esta pasó algo muy especial. Con el tiempo, muuuy lentamente, a medida que cometía mis propios errores e iba aprendiendo con cada uno de ellos a programar un poquito mejor, me fui dando cuenta de que esa no es una frase más, sino una de las verdades más profundas e indiscutibles que podemos enunciar sobre la programación.