Durante las últimas dos semanas pude invertir una buena cantidad de horas en PSeInt, y seguir con la tan postergada reestructuración interna. De a poquito empieza a tomar forma y a verse una luz al final del túnel.
martes, 10 de enero de 2023
viernes, 25 de noviembre de 2022
Primeros cambios en el interior PSeInt (2da parte)
Repito el comienzo del último post: "hay tres grandes objetivos: unificar algoritmos repetidos, eliminar todo el estado global, y separar/independizar los más posible las etapas del proceso de análisis e interpretación". En aquel me centraba en el primero, en este cuento cómo van los otros dos.
jueves, 29 de septiembre de 2022
Primeros cambios en el interior PSeInt
Ya comenté que iba a ir refactorizando muy de a poco el horrible código de pseint. Se podría decir que hay tres grandes objetivos: unificar algoritmos repetidos, eliminar todo el estado global, y separar/independizar los más posible las etapas del proceso de análisis e interpretación. Veamos cómo y para qué.
viernes, 2 de septiembre de 2022
La metamorfosis interna de PSeInt
Siempre dije que internamente el intérprete está muy mal diseñado, y muchas veces amagué con rehacerlo completamente. Sin embargo ninguno de esos amagues se completó por falta de tiempo. Así que ahora voy a tomar el camino más largo porque... Claro, como me falta tiempo, mejor ir por el camino más largo, ¿no? ¿WTF?
miércoles, 29 de julio de 2020
Sin comentarios
miércoles, 14 de marzo de 2018
Organización de los archivos de un proyecto (parte 1)
Pero cuando los binarios empiezan a requerir archivos de datos/recursos, el proyecto crece y tenemos varias decenas de fuentes, la arquitectura se complejiza y empezamos a dividir en módulos o bibliotecas, etc; entonces esa organización se vuelve engorrosa, la carpeta del proyecto, una ensalada; y hay que hacer algo al respecto.
La mayoría de los alumnos no considera esto hasta que es demasiado tarde, simplemente por falta de experiencia (o al menos eso me pasó a mí y lo aprendí por las malas).
martes, 13 de junio de 2017
Nuevo evaluador de expresiones para PSeInt
jueves, 27 de abril de 2017
El arte de nombrar (parte 2)
Estas reflexiones tienen dos orígenes: por un lado la introducción del clásico libro de patrones de diseño de "la Pandilla de 4", por el otro una mini-frustración personal que me agarra a veces dando clases.
jueves, 6 de abril de 2017
El arte de nombrar (parte 1)
No cabe duda de que un nombre descriptivo es mejor que uno genérico. Obviamente "vel", "pos" y "acel" son mejores identificadores para una terna de variables que guardan el estado de un cuerpo rídigo que "a", "b" y "c". Pero... ¿alcanza? He aquí algunas consideraciones mayormente prácticas al respecto.
martes, 7 de marzo de 2017
Reescribiendo PSeInt (parte 2.c): complicaciones
miércoles, 22 de febrero de 2017
Reescribiendo PSeInt (parte 2.b): implementación
viernes, 17 de febrero de 2017
Reescribiendo PSeInt (parte 2.a): arquitectura
jueves, 28 de abril de 2016
Registros en PSeInt: Paso 0
miércoles, 16 de marzo de 2016
Describiendo los cuadros de diálogo de ZinjaI
jueves, 23 de julio de 2015
La escencia de la programación de computadores
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.
viernes, 5 de junio de 2015
std::function: Ya tengo mi (nuevo) martillo
Ahora, la funcionalidad de C++11 que se está tornando increíblemente "martillosa", es la aparición de las funciones lambda, y como yapa de la clase auxiliar std::function. Es decir, la posibilidad de crear funciones y clausuras "al vuelo", sin siquiera ponerles tipo ni nombre, y la facilidad que provee la clase std::function para apuntarle a esos pequeños monstruitos sin que nos importen ni preocupen sus especies. En MotoGT 2 están martillando cuanto clavo (y tornillo) se les cruza. Y el resultado es una delicia. Un buen motor puede dar muchas más libertades sin agregar ruido cuando hace uso de estas cosas, y permite al programador ser mucho más productivo.
domingo, 31 de mayo de 2015
Las bases de MotoGT 2: overview
Entonces, tengo que escribir un pequeño motor de juego. Lo suficientemente general como para que me provea esa flexibilidad. No tan general como para renegar con cosas que no necesito. Con una interfaz de alto nivel para no lidiar con detalles finos de implementación al concetrarme en la lógica del juego. Con capas o subsistemas desacoplados para que, por ejemplo, la biblioteca que use para gráficos y sonido no me condicione la forma de programar esa lógica del juego. Y más, como para que un imprevisto no tire abajo el proyecto.
martes, 26 de mayo de 2015
Constructores privados y std::shared_ptr
sábado, 6 de septiembre de 2014
Control de errores con C++
lunes, 5 de mayo de 2014
Interesante problema de Estructuras de Datos
Entonces, hace poco me armé un par de clases para representar dos contenedores que operen sobre los mismos elementos. Es decir, habrá un contenedor para el conjunto global, y otro para los subconjuntos parciales. A nivel algoritmos y estructuras de datos creo que es un ejercicio interesante, y por eso vengo a