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.

miércoles, 22 de febrero de 2017

Reescribiendo PSeInt (parte 2.b): implementación

En la parte 2.a expliqué la estructura general del proceso de parseo e interpretación, indicando cuales serán las cuatro etapas y sus responsabilidades. En esta entrega, algunos detalles más sobre cómo implemento esto a nivel de clases y patrones de diseño.

viernes, 17 de febrero de 2017

Reescribiendo PSeInt (parte 2.a): arquitectura

Ya introduje en el primer post de esta serie los problemas que busco resolver en esta travesía de reescribir desde cero la parte más crítica de PSeInt. Ahora toca hablar un poco más en detalle de la nueva arquitectura interna de esta "parte".

viernes, 10 de febrero de 2017

Rehaciendo PSeInt (parte 1): motivación

Hace no mucho comenté que quería empezar a reescribir el código relacionado al parseo interno que hace el intérprete dentro de PSeInt. Todavía falta mucho para que el nuevo código llegue a "producción", pero ya hay varias cosas hechas y por ahora el cambio tiene buen color.