emerge -av life

Ha pasado un buen rato, y la verdad que no ha pasado mucho en mi vida. Estoy bastante ocupado con boludeces de la facultad (trabajos, entregas, parciales, etc) y principalmente con mi tesis que dio un giro que no me esperaba :), se recorto por todos lados lo que yo tenía pensado hacer (o más bien lo que yo había entendido que tenía que hacer :D).

Resumido en un párrafo de un mail en la charla con uno de mis directores de Tesis :

Tal vez para resumir mi idea sobre el proyecto, lo que estarías haciendo es un “reificador de mensajes entre objetos”, configurable de forma que la reificación pueda encenderse y apagarse de forma dinámica por motivos de performance. Casi la palabra aspecto se puede suprimir 😀

En fin, parece tan simple, que complica. Para empezar estoy analizando diferentes weavers y como realizan su trabajo, para poder comprender los cambios que se necesitan en la VM.

Les dejo acá buen paper sobre el weaving en AspectJ.

En otro aspecto de la vida, mi hermana juró por su título hace un par de semanas, y ahora oficialmente soy el único miembro no-titulado de mi familia :), lo que suma una presión extra a completar mi carrera de grado. Tengo una foto que predice el futuro, donde estoy posando muy sonriente con el título de mi hermana (total enrollados todos son iguales!!), pero voy a tener que esperar a viajar a Cipolletti para obtener una copia :).

Antispam en el GForge

Ya hace un largo tiempo que los spammers nos estaban dando batalla en el GForge que tenemos en el LugFI. Este sábado, mientras me recuperaba decidí finalmente mirar el código y ver que se podía hacer.

Lo primero que me encontré es que el código apesta, y mucho :). No existe una forma simple o modular de extender la interfaz, así que recurrí a hackear directamente el código. Luego de un ratito le mande el diff a Des para que lo aplique.

El resultado : los reportes de bug/feature request/etc requieren ahora un campo más que es el antispam, así como también dejar comentarios en registros ya abiertos. El antispam no hace diferencia entre usuarios registrados y anónimos, así que espero que los users registradon no se ofendan :).

El parche en cuestión está acá a y aplica seguro sobre la versión 4.5.19 (yo use el orig.tar.gz que provee Debian para asegurarme que el patch aplicara en nuestro servidor). No puedo garantizar que aplique en otra versión.

NgSpice ha vuelto!

Luego de haber sido mutilado, el soporte de NgSpice para Oregano fue reescrito hoy. No está probado ni el 10% de todo lo que debería funcionar, pero ya me doy por satisfecho y es ahora de que me siente a esperar los reportes de los usuarios (Ping Tulku!!) con sus afamados problemas :-).

El parser nuevo, a diferencia del viejo estilo preprocesado en perl externamente al programa, utiliza el formato RAW que exporta NgSpice, haciendo mucho más simple la lectora de los valores de los análisis, sin tener que parsear texto.

El shot obligado :

ngspice.png
Con esto ya estarán dadas las condiciones para hacer un nuevo release, que supongo que será este fin de semana, aprovechando que sigo de vacaciones :-). Hay varias cosas que ameritan este release :
  • Nuevo esquema para los engines : Más flexible, más prolijo, más fácil de extender a nuevos engines, y sobre todo, anda. [1]
  • Scons cleanups
  • Instant-apply dialogs!
  • Nuevo log (colorsitos, ordenado, etc)
  • El ProgressDialog ahora muestra que operación se está realizando
  • Models y SubCKT
  • Menu cleanup
  • Mejora en la ventana de ploteo : los ejes son mas claros y se muestra la unidad actual en lugar de usar notacion cientifica.
  • Unos cuantos bugs de usabilidad y detalles reportados por Tulku!

[1] : Antes la salida de ngspice cambiaba segun detalles de la simulacion (db, no db, AC o Trans, etc) y el script en perl se colgaba mal 🙂

Oregano migra a GtkPrint!

Si señores, ya era hora de tener un motor de impresión como la gente :-). Luego de varias consultas por parte de mis beta-testers me decidí migrar el soporte de impresión a la nueva API de impresión de Gtk+.

La migración fue simple, por lo menos para dar un soporte básico. Lo primero que hice fue borrar print.[h|c] que tenían el código de soporte de GnomePrint. Luego portá las funciones de modelo a Cairo (en lugar de usar las viejas API de Art) y por último le agregué el código para que se abra el diálogo de impresión.

oreganoprint.png

No se ilusionen mucho que faltan bastantes cosas por hacer antes de que tenga alguna utilidad :-). Una ventaja de esta migración es que ya tengo el código en el modelo para poder exportar el esquemático a un PNG, PDF, PS, SVG o cualquier otro backend que soporte Cairo, cosa que creo que varios van a agradecer :-).

Por ahora no voy a subir los cambios al repositorio principal, ya que esto me obliga a depender de Gtk+ 2.10, recién salida del horno, por lo que voy a mantener un branch privado hasta completar el código.

Mi pequeño TODO :

  • Agregar Labels de los componentes y textos.
  • Impresión Color y B&W (Qué colores te gustarían???!!)
  • Rótulo y orientación default de la página. (El tamaño es configurable y el circuito se adapta a la página)
  • Si ves algo que debería soportar, y no está en esta lista, dejó un comentario 🙂

UPDATE:

Ya tengo funcionando el diálogo y la código para exportar el esquemático. Actualmente hay soporte (dependiendo si la versión de Cairo instalada lo soporta) para PDF, PS, PNG y SVG (el Inkscape no lo abre bien, pero otros programas si). El ónico que anda realmente bien es el de PNG, el resto tiene varios problemas que sospecho que son de Cairo (ya sean bugs o que me está faltando llamar alguna función).

Models y SubCkt

Una cosa que le venía faltando a Oregano era la posibilidad de utilizar modelos complejos para la simulación, y que por suerte ya quedó en el pasado ;).

Hoy luego de mucho leer sobre Spice, NgSpice y GnuCap logré entender un poco como se usan los modelos (a través del comando .model) y los subcircuitos (a través del comando .subckt). Esto sumado a la magia del .include hacen posible, por ejemplo, utilizar un componente “Diode Bridge” en lugar de tener que poner cuatro diodos :-).

La historia empieza modificando el componente “Diode Bridge” de la biblioteca default para que en lugar de usar el template que no andaba utilice : X_@refdes %1 %2 %3 %4 @model, siendo Mode = DiodeBridge. El X_ le dice al backend que es una llamada a un subcircuito y @refdes es completado con el nombre elegido.

El siguiente paso es crear un archivo DiodeBridge.model en el directorio data/models que contenga la descripción del circuito. El resto de la mágia está ya en el código de generación de la netlist.

El objetivo ahora es tratar de extender más aún este nuevo feature y para eso voy a empezar con los ejemplos que encontró acá. Un punto importante y que yo realmente desconozco, es qué componentes son sumamente necesarios y deberían funcionar out-of-the-box. Si fuera por mí con resistencias ideales me sobra :P, por lo que escucho ofertas!.
El screenshot obligado (perdón, la ventana de plot ocupa mucho lugar y me tapa el fondo :-))

oreganomodels.png

Life

Facultad

Hoy empezaron las clases, y a diferencia de otros cuatrimestres tengo ganas de cursar :-). Tendré algo que ver que me anote en materias copadas?, seguramente ;-).

Estoy haciendo principalmente Teoría de Algorirmos II y Teoría del Lenguaje, y planeo aprovechar que curso con mi directora de Tesis para ponerle pilas.

Evince

Ya hace tiempo vengo aportando algún que otro parche a Evince, el visor de documentos de GNOME. Desde que comencía cerrar bugs de GNOME Love, había uno que me tenía atraido, y es el de agregarEvince New soporte para los comandos DVI Specials al backend de DVI. No es una tarea fácil, ya que me costó encontrar documentación sobre los comandos, y entender el código que se encarga de leer el archivo DVI.

Este fin de semana finalmente mande la primer versión del parche, a la que ya le contré por lo menos dos bugs :-), y eso que solo agregaba soporte para el color del texto :-D.

Anoche en un ataque de furia arregle los problemas anteriores y sume soporte para el comando background para ver el color de fondo de las páginas. Todavía tengo que arreglar un par de problemas pero ya casi está listo.

Evince OldLuego de eso quedan dos retos interesantes. El primero es el soporte de HyperText, que ya estuve jugando en mi primer intento de arreglar este bug y tengo idea de como hacerlo. Me falta resolver un problema de coordenadas y nada más. El componente más dificil va a ser mostrar las imágenes, ya que no siempre están presentes y pueden estar en diversos formatos. Veremos si logro hacerlo antes de aburrirme :-).

O.L.E. screencast!

Para aquellos curiosos hice un pequeño screencast de editor de componentes. Lo nuevo respecto de mi último post es la habilidad de modificar los puntos de control de los elementos y darles nuevas y alocadas formas :).

Por razones de sueño, no pude completar los puntos de control de lo elipces, por lo que no lo muestro en el video.

El screencast lo hice, como siempre, con vnc2swf y está acá y pesa casi 3Mb.