jueves, 18 de octubre de 2018

**beep**ing Anti-Virus

Advertencia: Estoy muy muy enojado.

Este año tuve que dedicarle muchísimo más tiempo a combatir el problema de los falsos positivos por malware en los instaladores de ZinjaI y PSeInt, que a desarrollar nuevas funcionalidades o a corregir otros problemas más importantes. Y por falso positivo entiéndase un Anti Virus increíblemente estúpido (o sea, casi cualquiera) afirmando la presencia de malware donde NO LO HAY.

viernes, 3 de agosto de 2018

Sobre los problemas de PSeInt en Mac OS

Desde hace meses venía recibiendo reportes de usuarios de PSeInt en Mac advirtiendo que una vez iniciado el editor, no se abrían ni la ventana de ejecución, ni el editor de diagramas de flujo (o sea que era completamente inútil). Y era un problema que no podía reproducir yo mismo, así que me era muy difícil de analizar, mucho más de corregir. Finalmente la semana pude hacerlo, encontré una solución que publiqué hace unos pocos días. Pero esto destapó viejos problemas en mi modelo de desarrollo para Mac OS; problemas que ya conocía y sabía que eran un bomba de tiempo.

viernes, 20 de julio de 2018

Deshacer y rehacer con menos riesgos

Me pasa muchas veces, cuando estoy programando algo suficientemente complicado como para no tener claro de entrada cual es la mejor solución, que a lo largo de la sesión escribo y borro varias alternativas. Y muchas veces ocurre, que después de probar la enésima versión sin éxito me doy cuenta de que en realidad la mejor era la primera, la tercera, o alguna de las anteriores, para el caso da igual.

Sin embargo, como ninguna versión funcionaba lo suficientemente bien de entrada, ninguna fue commiteada al repo, así que probablemente ya no las tengo... ¿o si?

martes, 26 de junio de 2018

Combinando plantillas en ZinjaI

Muy lentamente, la variedad de complementos para ZinjaI va creciendo. La mayoría de ellos corresponden a bibliotecas como GLUT, wxWidgets, OpenCV, SFML, SQLite, etc. Entre otras cosas, lo principal que provee la biblioteca es una configuración de las opciones de compilación y enlazado lista para poner un proyecto en marcha en tres clicks. Esto sería probablemente lo más difícil de reemplazar para muchos usuarios. No me simpatiza, pero las consultas que recibo me demuestran que muy pocos se toman el tiempo de entender qué hacen realmente el compilador y el IDE por debajo; y se limitan a usar la configuración que viene con la plantilla como caja negra... mientras funcione.

jueves, 17 de mayo de 2018

ZinjaI+GIT y scripts de bash con interfaz gráfica

Iba a empezar describiendo lo maravilloso que es git, pero voy a dar eso por sentado e ir al grano: ¿cómo es que en ZinjaI no hay ninguna funcionalidad específica de integración con git? Antes de que se ilusionen, les adelanto que no, no estoy trabajando en eso. Peeeero... además de justificar mi no, en este post les cuento cómo integrar igual algunas acciones habituales.

miércoles, 11 de abril de 2018

Participando en el CodeJam con ZinjaI

El fin de semana pasado comenzó el Google Code Jam, ese contest online de programación que organiza Google. Pero este año cambiaron un poco las reglas de la mano de un cambio grande en el entorno sobre el cual se desarrolla. Eso hizo que sea un poquito más incómodo desarrollar las soluciones desde mi IDE preferido. Acá les cuento cómo acomodar ZinjaI para que el "workflow" durante el contest sea algo más fluido, dado que a partir de la 1er ronda la cosa es por tiempo, se pone ajustada, y cada segundo cuenta.

martes, 27 de marzo de 2018

Organización de los archivos de un proyecto (parte 2)

En en el post anterior comenté sobre los motivos para organizar los archivos de un proyecto de una forma más estructurada que la que ofrece ZinjaI al crear un proyecto, y sobre una estructura de subcarpetas más o menos habitual en proyectos medianos. Ahora toca ver cómo adaptar el proyecto de ZinjaI a esta nueva organización.

miércoles, 14 de marzo de 2018

Organización de los archivos de un proyecto (parte 1)

Casi todas las plantillas de proyecto de ZinjaI crean una única carpeta en la que los fuentes, el archivo de proyecto y eventuales extras van juntos, y solo se separan en una subcarpeta (debug/release) los archivos generados en la compilación. Esto es lo más directo para empezar, y funciona bien cuando es un proyecto pequeño.

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).


jueves, 1 de marzo de 2018

¿Qué va en el instalador?

Supongamos que hicimos una aplicación con ZinjaI, y ahora la queremos distribuir. No vamos a pretender que cualquier usuario que quiera usar la aplicación deba instalar ZinjaI, los complementos y conseguirse el código fuente, ¿no? ¿No? ¿Nooo? !NO! Lo razonable es armar un instalador que copie en el sistema del usuario el ejecutable de nuestra aplicación y cualquier otra cosa que esta necesite. De eso habla este post; de cómo generar ese ejecutable y cómo determinar qué más necesita.

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.