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.

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.