viernes, 23 de febrero de 2018

MinGW64 disponible como complemento para ZinjaI

Finalmente logré hacerme un poco de tiempo para completar la compilación de las bibliotecas de la sección complementos con mingw64, y empaquetar todo, también al mismísimo compilador. Dejó aquí instrucciones para instalar y usar esto, junto con algunas aclaraciones importantes para quienes no tengan del todo claro qué implica el cambio de compilador.

Nota obvia: Este post es solo para quienes utilizan ZinjaI en Windows; ya que en GNU/Linux el compilador no depende de ZinjaI, sino de la distribución de GNU/Linux que se use.

viernes, 9 de febrero de 2018

Release vs. Debug

He visto cosas que ustedes no creerían: programadores haciendo benchmarks de código sin optimizar, generando instaladores con ejecutables en modo debug, desdoblando loops a mano, haciendo inlining mediante copy-paste, distribuyendo los .o y olvidándose los dlls, rayos-C++ brillar en la oscuridad cerca de la puerta de Tannhäuser... Y hablo de alumnos avanzados de la carrera, hasta algunos egresados.

Pensaba en escribir un post sobre cómo distribuir un programa generado con ZinjaI (mayormente sobre qué va en el instalador), pero inmediatamente noté que un punto importante era de esto de compilar en modo "release"... y entonces me parece mejor aclarar ese punto antes de continuar, y dejar lo del instalador para la próxima.

lunes, 5 de febrero de 2018

Sobre los nuevos íconos y las pantallas HiDPI

Como habrán notado muchos usuarios, las últimas actualizaciones de ZinjaI y PSeInt presentan sets de íconos renovados. El cambio es simple pero se nota, y hasta he recibido buenas críticas al respecto. Además de buscar actualizar un poco el tema de íconos, este cambio viene de la mano de otro más funcional, que es el soporte para pantallas HiDPI.  Los que tengan notebooks con pantallas 1080p o más deberían haber notado, si usan Windows o Mac, que el texto se ve "mal/feo" (como pixelado, o con un anti-aliasing muy berreta), o, si usan GNU/Linux, que todo se ve muy pequeño. Lo segundo es más fácil de entender/imaginar, pero lo de Windows tiene sus aristas.

viernes, 27 de octubre de 2017

Sobre las advertencias al descargar ZinjaI

Si habitualmente me quejo de que tengo menos tiempo del que quisiera para dedicarle a ZinjaI y PSeInt, imagínense mi bronca después de perder tres fines de semana tratando de evitar que marquen erróneamente al instalador de ZinjaI como virus/malware. Mientras tanto, las malditas advertencias seguían (y algunas siguen) ahuyentando usuarios y generando mala imagen. El pequeño y mediano programador está completamente indefenso frente a la estúpida y desquiciada industria de los antivirus.

lunes, 2 de octubre de 2017

Mac OS vs. GDB

Desde hace ya bastante tiempo, las herramientas de desarrollo de Mac OS pasaron de usar gcc+gdb (compilador y depurador) a llvm/clang+lldb. El paso a llvm/clang como nuevo compilador no me generó demasiados problemas ya que la linea de comandos de clang es 99% compatible con la de gcc. Pero para el depurador es otra historia. Integrar lldb en ZinjaI como alternativa a gdb implica muchísimos cambios.

Así que por el momento tenemos que instalar gdb "manualmente" para que funcione correctamente la depuración. Pero esto, por motivos de seguridad (creo), es increíblemente complicado. Armé un script para automatizar todo lo que pude automatizar de este proceso, y una página de ayuda donde encontrar las instrucciones para el resto. En este post, un video mostrando el proceso completo, y algunas explicaciones al respecto.

martes, 12 de septiembre de 2017

Falsos positivos otra vez

Finalmente publiqué una actualización de ZinjaI con todos esos cambios que ya comenté en otros posts. Pero al subirlo me llevé una sorpresa que demoró las cosas unas 48hs. Otra vez estuve renegando con los falsos positivos de anti-virus y anti-malwares. Y esta vez quien lo detecto fue SourceForge, que ahora analiza por las dudas todo lo que publicamos. Y entonces, si lo dejaba como estaba, al querer descargarlo iban a ver un mensaje espanta-usuarios advirtiendo de la posible presencia de malware.

jueves, 31 de agosto de 2017

Más cambios (y más demoras en ZinjaI)

Hace ya al menos tres semanas que estoy "a punto de" publicar una nueva versión. Pero como últimamente cada vez que cambio algo refactorizo una buena parte para arreglar o esconder errores del pasado, siempre termino con mucho código nuevo por probar y un ZinjaI inestable. Entonces se demora la release, pero durante la demora agrego algo más, y se hace un círculo vicioso. Finalmente, decidí cortar. Falta testing, pero [creo que] no voy a agregar nada más. Hoy les cuento qué hay de nuevo y qué queda para después.

miércoles, 23 de agosto de 2017

Mini-mapas en ZinjaI

En los últimos tiempos he visto cómo se ha popularizado una funcionalidad entre los editores de texto modernos: el mini-mapa, una vista en miniatura del código fuente. Se supone que sirve para ir rápidamente a alguna parte del archivo. Hasta ahora pensaba que agregar eso en ZinjaI iba a ser muy complicado, pero hace unos días encontré una idea muy simple en un foro.

viernes, 28 de julio de 2017

Herencia de proyectos en ZinjaI

Tengo casi lista una nueva funcionalidad en ZinjaI que viene a aliviarme dos problemas en la gestión de proyectos, problemas que algunos de ustedes podrían compartir. Por un lado el problema de incluir el .zpr en un repositorio git (o cualquier VCS). El otro, el de compartir muchos archivos entre diferentes proyectos.

martes, 13 de junio de 2017

Nuevo evaluador de expresiones para PSeInt

Cuando empecé a pensar en reescribir el parser de PSeInt tenía planeado enfocarme en el tokenizado y las reglas sintácticas de cada instrucción. Pero había dos cosas que pensaba mantener del sistema viejo, al menos por ahora: la gestión de la memoria, y la evaluación de expresiones. Ahora resulta que de pronto me encuentro reescribiendo también al evaluador de expresiones.

martes, 16 de mayo de 2017

Volviendo a la normalidad

Habrán notado que en la primer parte del año estuve bastante "desaparecido". Desde febrero hay pocos posts, pocas releases de ZinjaI y PSeInt, poco movimiento en general... Resulta que me mudé de Santa Fe a Paraná, y eso fue resultado de un largo y agotador proceso que me dejó muy poco tiempo libre y lúcido a la vez. Ahora las cosas están volviendo a la normalidad, así que aprovecho para retomar la escritura y contarles qué paso en este tiempo con mis proyectos de software.

jueves, 27 de abril de 2017

El arte de nombrar (parte 2)

En la primera parte hice comentarios mayormente prácticos sobre problemas y sugerencias a la hora de dar nombres a variables, clases, funciones, etc. Ahora vengo a completar las ideas con otro punto de vista, pensando más en la elección de las palabras que en la forma de escribirlas o abreviarlas.

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)

En general, ponerle nombres a las cosas no suele ser tarea simple. En particular, hablando de programación, nombrar variables, clases, funciones, etc, no constituyen excepciones sino todo lo contrario. ¿Cuál es la verdadera importancia de un buen nombre en el código? ¿Qué haríamos sin "foo" y "bar"?

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.

jueves, 16 de marzo de 2017

¿Existe el programador 10x?

Acabo de leer un post en otro blog sobre el "mítico programador 10x". El artículo discute la existencia de tal criatura (más abajo definición y resumen) y es muy interensante por sí mismo, pero más aún si se complementa con la discusión que aparece en sus comentarios. En la primera lectura me generó un cierto conjunto de pensamientos, y luego se fueron transformaron al empezar a leer esos comentarios.

Nota: no hace falta que lean aquel post para entender este, pero igual lo recomiendo.

martes, 7 de marzo de 2017

Reescribiendo PSeInt (parte 2.c): complicaciones

Si estuviera haciendo un intérprete para un lenguaje propio y para un uso real, seguramente tendría cuidado de ajustar el lenguaje para que sea simple de parsear. Esto es bueno por mil razones, pero la directa es facilitarle la vida al intérprete y a todas las demás herramientas que surjan junto al lenguaje. Es la clase de cosas que hacen que en un lenguaje como C++ algo tan simple como renombrar un método sea una pesadilla, mientras que en otros lenguajes más nuevos como Java en verdad es simple. En fin, volviendo al pseudocódigo, el pseudolenguaje que usamos no es de los súper simples para este punto de vista, y eso complica un poquito el nuevo diseño del intérprete.