Webada

Bien, tengo mucho que decir, poco tiempo para hacerlo ahora, así que lo haré después :-). Simplemente quiero publicar este simple script hecho en Perl que hice para pasar a animaciones GIF las secuencias de fotos que saca mi cámara.

Lo que hace es descomponer la foto en sus 16 cuadros y crear un GIF animado. Por ejemplo, esta foto pasa a ser esta animación (es pesadita, 1.5Mb) y por acá otro ejemplo. Tengo que agregarle algunas opciones para que sea más divertido usarlo, pero ya vendrán más adelante 🙂 Muchas gracias a mis amigos Luca y Mazzi de Mazziblog por servir de modelos para el experimento 😛

Necesitarán : Perl 5.8.x y libgd-gd2-perl (una versión >= 2.1 para tener soporte de GIF). Las veriones viejas de GD no traían soporte de GIF por el problemas de la patente del algorítmo de compresión, ya vencida.

Modo de uso : #>./animation.pl imagen_original salida.gif

GtkBarCode

Hace unos días estuve jugando con barcode, una aplicación de consola para crear códigos de barra, ya que debíamos hacer las tarjetas para marcar la entrada de los empleados en el trabajo. El programa soporta una gran cantidad de formatos, y los saca en Postscript.

Luego de eso recordé a un amigo que hizo un programa para generar códigos de barra para la imprenta del padre, por un requerimiento de la AFIP (si mal no recuerdo). La cosa es que este amigo vendió varias copias de su programa, pero esa no es la historia de este post 🙂 … El programa lo hizo en Delphi con un componente que bajo de internet. Busqué un poco en Google (muy poco realmente) y no pude encontrar algo parecido para Gtk+ (solo he encontrado el programa gLabels que lo utiliza en forma gráfica, también haciendo un hack medio extraño), así que decidí hacer uno 😉

Primer pantallazo !!!El resultado es GtkBarCode, un widget Gtk+ 2.x que dibuja el código de barra y lo puede exportar a PDF, PS, PNG y dibujarlo en pantalla, todo esto gracias a que adapté el algoritmo que hacía la salida en Postcript del programa original para que use Cairo, ya comentada y que cada día me gusta más.

El widget no está ni apenas el 10%, solo es un hack de 1 noche para ver que salía y si era viable, y como se puede ver en la imagen adjunta, lo es 🙂

Cosas que debo agregar ahora :

  • gtk_barcode_set_encoding : seleccionar el tipo de encoding a usar y refrescar el widget
  • gtk_barcode_set_text : cambiar el texto a encodear (por ahora solo muestra el texto con el cual fue creado
  • gtk_barcode_use_checksum : setear si se debe usar un dígito de checksun al final
  • gtk_barcode_export_to : o algo así para exportar a PNG, PS y PDF
  • Alguna otra cosa que ahora no se me ocurra 🙂

Los códigos soportados son :

  • EAN
  • UPC (12-digit ean)
  • ISBN (still EAN13)
  • Code 39
  • Code 128
  • Code 128C (compact form for digits)
  • Code 128B (full printable ascii)
  • Code I25 (interleaved 2 of 5 (only digits))
  • Code 128RAW (Raw code 128)
  • Code CBR
  • Code MSI
  • Plessey
  • Code 93

Cabe aclarar que la parte de la codificación no he hecho nada. Aparentemente el source estaba separado para generar una biblioteca dinámica, pero Debian no lo hace, y en el paquete original no está terminado, es por eso que decidí meter todo el código útil para el widget (aka, la parte de codificación), dentro de mi proyecto, sitando el respectivo autor y toda la movida.

No tengo apuro en terminarlo, y calculo que cuando tenga más o menos ordenado el código crearé el repositorio Darcs para que lo puedan bajar y probar.

Ubuntu@Work

Ayer y hoy estuve sin PC en el trabajo por culpa del micro que se quemó. Cuando tuve micro nuevo, tuve que cambiar el mother porque no lo soportaba, y con el nuevo mother algo falló y me quedé sin disco (solo lógicamente). Por lo que al tener que reinstalar, aproveché y migré a Ubuntu Linux.

La tarea fue muy dificil, no por la distro, sino porque luego de 4 horas de tratar de instalarlo (pasando por pruebas con Knoppix 2.4 y 3.6, y cambio de memoria), descubrí que el mother nuevo tiene problemas con el IDE0 y por eso fallaba. En fin, ya tengo cambie el que no andaba y terminó de instalar mi PC para poder retornar a mis tareas diarias.

GPuzzle

Leyendo este artículo de OsNews.com, me encontré con que nombraron a GPuzzle entre los programas desarrollados con Mono «menos conocidos» :-), claro, seguramente la editora tomó una lista de GnomeFiles.org y no ha tenido tiempo de probarlos todos :-P, porque GPuzzle apesta 🙂 (y lo dice quién lo programó). Una excusa para mejorarlo 😛

Gazpacho UI Editor

Hoy charlando en #gnome-hispano me enteré de Gazpacho, un editor de UI para Gtk+/Gnome que pretende reemplazar a Glade. Este último tiene serios problemas desde sus comienzos, muchas veces nos da más problemas que soluciones.

Gazpacho tiene la particularidad de ser, según recuerdo que me dijeron hoy, 90% compatible con libglade (por el momento), por lo que sería posible no tocar los programas. Lo que agrega, entre otras cosas, es soporte de Undo/Redo (y que funciona :-)), permitirá agregar CellRenderers, TreeColumns, etc a los widgets que los soportan; mejora la manera en que creamos los callbacks de los eventos. Se nota más cómodo de usar que Glade por lo que es un proyecto al que hay que estarle pendiente… La captura obligada :

Para obterlo : svn co svn://www.sicem.biz/gazpacho, necesitarán Python, Python-gtk (2.4.x), bueno, lean el README 🙂

Otra cosa que vi hoy, fue un pantallazo de Stetic, otro proyecto que pretende reemplazar a Glade, por parte de la gente del Mono (creo que esta hecho en C#, aunque no puedo confirarlo :-)), está muy verde, pero hay que darle tiempo.

Oregano on the Road …

En los últimos días he estado trabajando en los cambios grandes que vamos a realizar en Oregano para no perder el ritmo. El primer cambio, que va a estar disponible en el CVS pronto, es el cambio de las hojas por páginas en la edición del esquemático. La diferencia fundamental del cambio es que ahora el espacio de una hora es fijo y no puede cambiarse, de manera que si se necesita más lugar del que una página nos puede ofrecer, debemos agregar otra página y utilizar conectores de páginas para conectar 2 circuitos que están en distintas páginas. El resultado será algo como :

Mini

Quedan bastantes cosas todavía por terminar, sobre todo porque el último día me pase buscando un bug que resulto ser un typo en una de las clases :-/, y me costo encontrar el problema. Otra cosa por revisar (que lo hice a «ojimetro»), es en las relaciones mm <-> pixels y definir una escala para luego usarla en la impresión.

Socorro Electrónicos!!!

Hoy estuve peleándome a la tarde con Oregano para resolver un problema reportado por Marc Lorber, quién envió un parche para que se agreguen los .include de los modelos complejos, dentro de la netlist (como ser el ejemplo del Vacuum tube triode 12ax7a).

El parche funciona bien y fue aplicado (previa corrección de otro bug arrastrado desde el comienzo) y funciona de 10 con el ngSpice. Sin embargo, nuestro fiel intento de dar soporte a GNU Cap sigue fallando (y como siga así lo voy a mandar a pasear :-)). Para empezar, en el ejemplo de tubo de vacío, el primer problema es que la nomenclatura de pines no soporta letras , por lo que : .SUBCKT 12AX7A A G K debe ser traducido como .SUBCKT 12AX7A 1 2 3 y dentro del subckt todas las referencias a las letras AGK también deben ser modificadas.

Otro problema es que el nombre del modelo (12AX7A) no puede empezar con un número, pues lo toma como AX7A por lo que nunca lo encuentra por más que se haga el include 😦

Por último, al parecer GNU Cap no soporta los B* del modelo, lo cual ya es irritante para utilizar modelos.

Bien, si alguien sabe de modelos, netlist y se tiene ganas de leer la documentación del GNU Cap y darnos una mano, les invito a escribirme o dejar un comentario :-), ya que se necesita reescribir todos los modelos actuales para que anden con GNU Cap y luego modificar el código para que use uno u otro según el backend.

Ponele un TrayIcon a tu aplicación

Es realmente muy simple hacer que nuestra aplicación use el área de notificación de Gnome utilizando Mono y C#, gracias a que Todd Bermann hace ya unas semanas escribió el módulo Egg TrayIcon enteramente en C#, liberándonos de la tortura del código en C 🙂 … realmente se implementa en unos pocos minútos, veamos.

1) Primero bajamos el archivo TrayIcon.cs que Todd Bermann ha hecho.
2) Escribimos nuestra applicación de prueba, contará hacia adelante (hasta el overflow del int) :

// Namespaces que vamos a utilizar
using System;
using Gtk;
using Gnome;
using Egg; // Este namespace está definido en el archivo TrayIcon.cs

// Nuestra clase de ejemplo
class TrayTest {
  static int count = 0;
  static Label label;

  public static void Main(string[] args) 
  {
    EventBox eb;
    TrayIcon trayIcon;
    // Creamos un programa
    Program test = new Program ("Test", "0.0.1", Modules.UI, args);

    // Creamos la etiqueta
    label = new Label ("Hola Mundo");

    // No realmente necesario para este ejemplo, pero si deseamos agregar
    // menú contextual o tooltip es necesario
    eb = new EventBox ();
    eb.Add (label);

    // Creamos el tooltip
    trayIcon = new TrayIcon ("Test");
    trayIcon.Add (eb);
    trayIcon.ShowAll ();

    // Iniciamos el texto
    Count ();

    // Refresco cada 1 segundo
    GLib.Timeout.Add (1000, new GLib.TimeoutHandler (Count));

    // Done!, Corriendo!!!
    test.Run ();
  }

  public static bool Count ()
  {
    label.Text = String.Format ("Voy contando {0} veces ...", count);
    count++;
    return true;
  }
}

3) Compilamos nuestra aplicación :

 $ mcs -target:exe -out:TrayTest.exe -pkg:gtk-sharp -pkg:gnome-sharp *.cs
 Compilation succeeded

4) La ejecutamos :

 $ mono ./TrayIcon.exe    (en Debian con "./TrayIcon.exe" alcanza, no se si otras distros usan binfmt por defecto)

Si no tenemos área de notificación en nuestro panel de Gnome, lo agregamos antes para ver el resultado, y veríamos algo como :

Ejemplo de TrayIcon

Como se darán cuenta, muy simple y rápido …. Espero que lo disfruten!

mejorando ET Applet

He estado trabajando en mejorar el applet para el Enemy Territory, comenzando por poder almacenar múltiples servidores para cambiar el server a monitorear de manera más ágil. Si bien me está dando lucha (demasiados Model-View widgets :-)), la cosa progresa bien.

Un ejemplo de lo que va quedando :

Nueva ventana de propiedades Edici�n de servidores

Espero para el fin de semana poder completar estos diálogos y liberar una actualización del applet.

ET Server Applet – Primer versión!

Si amigos!! … ya está aquí la primer versión del applet para el Enemy Territory !!! la versión 0.0.1 es bastante estable y he logrado que este activa ya por unas cuantas horas, lo cual es todo un logro 🙂

Para compilar necesitan algunas bibliotecas relacionadas con Gnome, esta es una lista seguramente incompleta :

  • libgnome-applet2-dev >= 2.4
  • libglade2-dev >= 2.4
  • libxml2-dev
  • libgtk2-dev >= 2.4

Para anotar :