jueves, 4 de julio de 2024

Una optimización "mágica" para bibliotecas dinámicas en GNU/Linux

Tengo un proyecto con una batería de casos de prueba que tarda horas en completarse. Esta semana encontré una opción de compilación que con un mínimo esfuerzo me redujo el tiempo total de la prueba en 37% (muchísimo!). Y por supuesto que no es -O# (sería muy obvio), y tampoco es LTO (pero algo tiene que ver). Es algo un poco más escondido y menos obvio, que al menos yo no sabía, así que lo comparto.

viernes, 14 de junio de 2024

El trabajo de actualizar ZinjaI

Ya comenté lo que más tiempo me lleva cuando quiero publicar actualizaciones de PSeInt. Ahora voy a comentar qué es lo que me está tomando tanto con ZinjaI. Considerando que llevo años sin actualizarlo, pueden imaginarse que esto va a ser largo.

jueves, 1 de junio de 2023

¿Y ahora qué sigue?

Finalmente pude publicar una actualización de PSeInt después de tanto tiempo. Repasemos en qué situación quedó este proyecto y cuáles serían mis próximos pasos, tanto para PSeInt como para ZinjaI.

 

viernes, 28 de abril de 2023

"No me acuerdo" (a.k.a. "estudié por catálogo").

"No me acuerdo" es, en el 95% de los casos, una de las peores respuestas que me pueden dar mis alumnos. Y tiene que ver con la forma de encarar el estudio y un problema muy recurrente que vemos en las carreras de ingeniería: lo que voy a llamar "estudiar por catálogo".

martes, 18 de abril de 2023

Un pequeño y raro bug en PSeInt

La semana pasada corregí un bug de PSeInt de lo más curioso, por la forma en que se manifestaba, y la causa del mismo. Es un ejemplo de las "sutilezas" de programar orientado a eventos y la inversión del control, y de lo importante de la programación defensiva.

miércoles, 22 de marzo de 2023

El proceso de publicar una versión de PSeInt

Últimamente estuve escribiendo sobre los cambios internos de PSeInt. Todavía estoy muy lejos de donde quiero estar en este sentido, pero hice una pausa en un punto razonable como poder sacar una versión. Para actualizar los perfiles, publicar algunas correcciones a bugs u otras mejoras menores, actualizar las opciones de descarga, etc... El mantenimiento que vengo posponiendo hace más de un año.

Pero aún así, aunque el código nuevo anda, todavía no pude publicarlo. ¿Qué me está frenando?

viernes, 3 de febrero de 2023

Las palabras clave en los fuentes de PSeInt

Siguiendo con los cambios internos en PSeInt, me embarqué en uno de los más trabajosos, que tiene que ver con la posibilidad de variar las palabras claves del pseudocódigo. Veamos el problema, la parte resuelta, la parte que falta, y las ventajas que traerá cuando se complete.

martes, 17 de enero de 2023

Sobrecargando funciones según el tipo de retorno

En C++, la sobrecarga de funciones consiste en tener dos o más funciones con un mismo nombre pero diferentes parámetros (en tipo y/o en cantidad). Al hacer una llamada, el compilador analiza los argumentos y decide a cuál corresponde invocar. Notar que en esta definición no menciono al tipo/valor de retorno, y es porque no sirve para resolver la sobrecarga (¿qué haríamos por ej con cout<<foo()?). Pero a veces sería útil poder hacerlo. Me encontré con esta pseudo-necesidad en PSeInt, y vengo a comentar una solución que me funcionó muy bien.

 

martes, 10 de enero de 2023

Más avances en la reconstrucción de PSeInt

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.

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?

martes, 2 de agosto de 2022

¿Y por qué más silencio?

En mi post anterior daba un par de excusas para justificar por qué el blog parecía algo abandonado, y prometía tratar de retomar el ritmo. Sin embargo, desde entonces pasó todo lo contrario, y tanto el blog como los proyectos quedaron todavía más abandonados. Hubo una muy buena justificación para esto:

lunes, 17 de enero de 2022

¿Y por qué tanto silencio?

He llegado a la conclusión de que esto de "la nueva normalidad" tiene todo que ver con que últimamente escriba tan poco en el blog. Es obvio que trabajar desde casa le cambia a uno completamente la rutina. Y entre los efectos de este cambio, hay muchas cosas buenas y muchas malas. Para el blog, tocaron malas.

jueves, 10 de junio de 2021

El problema de los foros de PSeInt

No se qué hacer con los foros de PSeInt, pero tarde o temprano voy a tomar alguna decisión drástica.

Al principio de los tiempos, cuando recién empezaba con el proyecto, recibía con alegría cada mensaje individual que alguno de los pocos usuarios se tomaba el trabajo de enviar. Sin importar lo útil, o inútil que fuera el contenido, leía y respondía a cada uno, en cada foro.

Con el tiempo pasaron dos o tres cosas bastante malas que me llevaron al estado actual: casi no miro los foros, ignoro el 95% de los mensajes. ¿Qué pasó?