lunes, 1 de octubre de 2012

Nuevo miniproyecto: wxTimeLineEditor

Hace un tiempo agregué en la página de PSeInt, en la parte de documentación, una "linea de tiempo" que resume los hitos más importantes para ese proyecto. Me pareció útil para ver rápidamente cómo evolucionó el proyecto en estos casi 9 años, porque creo que la historia de PSeInt tiene varios matices interesantes, dado que nació con pocas expectativas, y tiempo después el hecho publicarlo como software libre me generó unas cuantas gratas sorpresas, y con él fui aprendiendo muchas cosas. En fin, la linea de tiempo no era realmente un gráfico de una linea de tiempo, sino una simple tabla de fechas y acontecimientos porque en aquel momento no encontré un software que me permita generar el gráfico como yo quería. Lo que buscaba era algo sencillo, offline, y que permita exportar la imagen. Probé unos cuantos, algunos muy malos, otros innecesariamente complicados, otros solo para Windows, y algunos muy buenos pero que no se ajustaban a lo que yo quería, o que me daban errores varios al utilizarlos. Finalmente decidí programar algo yo, ya que tomando la experiencia que ya conté del graficador de diagramas de flujo, iba a ser trabajo de una tarde/noche o a lo sumo un fin de semana, al menos para las muy pocas funcionalidades que realmente necesitaba, "los extras vendrán después" pensé. A la noche tenía mi preciado grafiquito. Así es el poder que da aprender a programar, si no encuentro lo que quiero, tengo siempre la alternativa de hacerlo (o intentar, tampoco hago magia :). En fin, la noticia es que ahora registré el proyecto en SourceForge y si les sirve para algo ya pueden empezar a descargarlo.

El programa es bien simple, consta de una ventana con tres partes, una que tiene un tabla con los eventos, otra que tiene opciones para el dibujo (colores, tamaños, etc) y el dibujo mismo. Puede exportar ese dibujo a una imagen jpg, png o bmp. Los eventos pueden tener una fecha particular o extenderse en un rango, y el rango hasta puede tener los bordes difumados para indicar que es aproximado. Está disponible en Inglés y en Español (el idioma se toma automáticamente de la configuración del sistema operativo). El formato que elegí para el gráfico lo elegí porque me permite generar imágenes relativamente compactas si las descripciones de los eventos son mas o menos cortas, aunque tenga muchos eventos.


Tengo que advertir que planeo dedicar aproximadamente nada-nada de tiempo a este proyecto. Pero me tomé el trabajo de dejar el código muy prolijo y muy documentado, el diseño bien simple y organizado, la casa en orden, para que cuando alguien quiera alguna funcionalidad nueva en lugar de pedírmela pueda sentarse al teclado e implementarla. Lo mismo ocurre con las traducciones, es muy fácil y muy rápido agregar otros idiomas. A diferencia de los otros proyectos donde trabajo solo (no es que deba ser así, pero errores míos han hecho difícil colaboraciones externas), este está pensado para que cualquiera pueda aportar. Incluso generar otros estilos de dibujo no sería tan complicado con la infraestructura actual. No es que el código y el diseño sean una obra de arte, sino que es un proyecto bien simple y acotado, entonces con un mínimo de documentación todo se entiende. De paso, también puede servir de ejemplo para quienes quieran programar aplicaciones similares (ver cómo dibujar con wxWidgets, cómo exportar imágenes, cómo integrar wxFormBuilder en el proyecto, etc). La única aclaración, para quienes leyeron Sobre Dibujos y Bibliotecas, es que en este caso dibujé todo con wxWidgets, incluso en pantalla en lugar de usar OpenGL como había propuesto. Esto fue así para escribir menos código y porque  el dibujo era simple. Se sacrifica algo de rendimiento, pero como no hay animaciones ni nada raro creo que no molesta. Si de casualidad a alguien le gusta mucho esto y realmente se toma la molestia de aportar algún cambio o alguna traducción, cuenta con toda mi colaboración para el proceso, y si sale bien y así lo desea será publicado, con su debida mención en el cuadro de  "Acerca de". Pero mientras tanto, yo no aportaré muchas evoluciones, y por eso tampoco será uno de los tres grandes proyectos en que guían este blog, (aunque es probable que igual lo mencione de vez cuando.

Si a alguien le sirve, o le da curiosidad, http://wxtle.sourceforge.net

5 comentarios:

  1. Yo lo utilizaría para lo siguiente:

    En un proyecto se tiene varias versiones de un mismo archivo, entonces que bueno seria que al darle doble clic en una descripción (por ejemplo GUI_version0.c), abriera un determinado archivo en un editor especifico

    ResponderEliminar
    Respuestas
    1. No me queda del todo clara la sugerencia... Sería hacer que la descripción funcione como una especie de "hipervínculo" para abrir un programa/archivo/página? No sería complicado agregar eso.

      Por otro lado, en un proyecto donde se guardan todas las versiones se usa algún sistema tipo git/svn/etc, que tienen sus propias herramientas para explorar versiones y cambios, y que generalmente no guardan directamente los archivos de cada versión, sino una en algún punto de referencia y luego solo los cambios.

      Eliminar
  2. Si, la idea es como "hipervinculo", debajo del campo Descripción colocar el link para abrir un determinado archivo/programa etc

    ResponderEliminar
  3. Hola seria bueno que publiquees un libro sobre como hacer un lenguaje de programacion o como hacer un lenguaje como el pseint, seria excelente, de este tema hay muy poco en internet.

    ResponderEliminar
    Respuestas
    1. Por el momento podría escribir más sobre cómo no hacerlo. El enfoque inicial de PSeInt estaba bastante limitado y todavía arrastro de esos errores, aunque de afuera se ve bien y funciona. Por otro lado, vos sabrás más que yo de eso, Dennis.

      Hablando en serio, escribir un libro lleva un tiempo infinito, pero escribir un post puede llevar solo un rato, no hay reglas que seguir. Ya tengo una buena lista de temas pendientes para elegir, pero también esta bueno que sugieran ustedes temas que les interesen para tener en cuenta.

      Eliminar