EclipseCon

Este año me tocó ir a EclipseCon a dar soporte in-site ha estado interesante, los keynotes han sido buenos y el programa esta interesante, hay un poco de todo (y un mucho de Java). No he tenido oportunidad de ver todas las presentaciones que queria ver, pero no me quejo.

EclipseCon 2007

EclipseCon da todas sus presentaciones en una llave USB (512MB este año) y como mejora para 2007 hicimos unas charging stations para que todos pudieran mantener las presentaciones al día. Todo ha funcionado bien, dentro de lo que cabe pero ha habido algunos problemas, que con algo de suerte mejoraremos el siguiente año:

  1. Las llaves USB toman mucho tiempo en desconectarse.
  2. El mesnaje de "Tu llave está siendo desconectada" no se alcanza a mostrar ya que el FS se bloquea en lo que desmonta la llave.

Y hubo un par de problemas que resolvimos a tiempo:

  1. El ancho de banda para mantener sincronizadas las charging stations era demasiado, ya que no hubo mirror interno este año , por lo que tuvimos que implementar una nueva manera de sincronizar (Nuestro servidor se sincroniza con eclipsezilla.eclipsecon.org, y las stations se sincronizan - solo cambios - con nuestro servidor)
  2. Las llaves USB tenian nombres (label) con espacio, por lo que había problemas al escapar los caracteres
  3. FAT32 tiene reglas en contra de algunos caracteres, y tenemos que quitarlos
  4. Cuando un Presenter actualizaba su presentación y cambiaba su presentación de un archivo a varios en un zip, el sistema no podia crear el nuevo folder por que el archivo ya existía.

Y hay algunos problemas que no se pueden resolver (por lo menos no por nosotros ;):

  1. La gente no esperaba a que sus llaves USB fueran detectadas (10 segundos) o desmontadas (el tiempo depende de cuantos archivos hayan sido sincronizados)
  2. Las llaves se llenaron con las últimas presentaciones, al parecer 512MB no son suficientes para las presentaciones y los give-away de los patrocinadores (Klockwork y BusinessObjects), esperemos que para el próximo año se pongan las pilas y sean de 1GB ;)
  3. Algunas llaves salieron defectuosas.

Ahora, al lado técnico de este post. Nuestro software está hecho con PHP, sip PHP ;) ¿En qué más? Utilizamos PHP+GTK2, que está todavia en beta pero funciona muuuy bien y está muy facil de utilizar. El único problema es que no hay mucha documentación pero no es dificil encontrarla (en otros proyectos o en el manual).

El código empieza así:

PHP:
  1. class SyncWindow extends GtkWindow {
  2.  
  3. parent::__construct();
  4. $this->set_title('EclipseCon USB Sync');
  5. $this->connect_simple('destroy', array('gtk', 'main_quit'));
  6.  
  7. $this->mainBox      = new GtkVBox();
  8.  
  9. $this->legend = new GtkImage();
  10. $this->statusbar = new GtkLabel();
  11.  
  12. $this->progress = new GtkProgressBar();
  13. $this->progress->set_name('progress');
  14. $this->progress->set_orientation(Gtk::PROGRESS_LEFT_TO_RIGHT);
  15. $this->progress->set_pulse_step(0.25);
  16. $this->btnSync      = new GtkButton('_Sync!');
  17. ....
  18. $this->btnSync->set_image(GtkImage::new_from_stock(Gtk::STOCK_NETWORK, Gtk::ICON_SIZE_SMALL_TOOLBAR));
  19.  
  20. ....
  21.  
  22. $this->btnSync->connect_simple('clicked', array($this, 'sync'), false);
  23. $this->btnCheck->connect_simple('clicked', array($this, 'check'));
  24.  
  25. $this->btnSync->connect_simple('clicked', array($this, 'sync'), false);
  26.  
  27. ...
  28.  
  29. $this->fullscreen();
  30.  
  31. $this->add($this->mainBox);
  32. $this->show_all();
  33.  
  34. }

Los widgets son simples y fáciles de utilizar, hay muuchos para escojer. Yo utilizé una caja vertical GtkVBox para el layout, una imagen, un par de etiquetas, una barra de progreso y unos cuantos botones.

Puedes utilizar los iconos del sistema, por ejemplo Gtk::STOCK_NETWORK es el icono de red. Y conectar un evento es fácil, solo le pasas el nombre de la función que debe llamar (a.k.a. callback) y listo, en caso de que sea objeto el formato parece ser array(objeto, metodo) si es una funcion solamente pasas el nombre de la funcion.

Para el layout, llamas los metodos de la caja o contenedor que utilices y lo "empacas" con pack_start. Todos pueden adivinar que hace $this->fullscreen() y finalment, agregas los controles a la ventana y la muestras. ¡Listo! ya tienes tu aplicacion.

ec-station

Quizá lo mas dificil es instalar PHP-GTK, en Ubuntu necesitas instalar varios paquetes, en Gentoo casi todos los tienes instalados (por lo menos si usas GTK, osea tienes GNOME o XFCE). Después de eso es solo la mágia de PHP y nada mas. Fácil, Rápido y Poderoso.


About this entry