Últimamente el equipo de desarrollo (el activo) de Jaws (ion, imsck8, kad y yo) estabamos creando muchos widgets para Jaws. Sin embargo llegué a encontrar algunas cosas ‘fastidiosas’ en las herramientas que hemos creado para Jaws. Un ejemplo.. es eso: los widgets. Los JawsWidgets (los actuales) hacen maravillas, a un botón le agregan miles de cosas y te regresan widgets 100% xhtml…. pero… son inutiles si las quieres usar en otra aplicación, en mi caso he estado creando muchas herramientas de administración para el Tec usando gran parte de Jaws MVC (Model View Controller)y resulta fastidioso andar renombrando los archivos, cambiando el nombre de las clases…. etc..etc.. así que decidimos separar las cosas por proyectos: Un proyecto por separado que te permita hacer widgets con la misma facilidad que se hace en ASP.NET (o tratar de llegarle mas que nada).
Pues hemos creado un nuevo proyecto: piwi – Happy Widgets for Happy people.
La idea de piwi es como ya la mencionamos, crear widgets de manera fácil, ‘customizables’ y en un estilo de programar en C# y Gtk. La separación de los Widgets es muy parecida a Gtk, incluso me basé en Gtk para armar el diagrama de distribución de los Widgets, así como de los directorios. Hay tres tipos de Widgets:
- Bin: Widgets que pueden tener funciones de JavaScript y tienen interacción con el usuario (es decir, pueden ser ‘clickeados’).
- Containers: Los famosos ‘contenedores’. Van a ser aquellos widgets que pueden contener a otros: Cajas (Box: Hbox, Vbox), TreeView’s, ViewPort’s, Toolbars.
- Misc: Todos aquellos que practicamente ni al caso: Labels, Datagrids (no es ni contenedor ni bin), Forms (ni uno, ni otro), etc.
El tipo de Widgets de Bin pueden tener acciones, ¿Qué quiere decir?. Que se les pueden ‘pegar’ acciones de Javascript de la manera más fácil, veamos un ejemplo:
$button = new Button ("boton", "Boton"); $button->SetSubmit (); $button->SetStock (STOCK_CANCEL); $button->AddEvent (new JSEvent (ON_CLICK, "javascript:alert('Hola Mundo');")); $button->Show ();
Vamos, algo muy fácil: se crea un objeto, se le da la propiedad de ’submit’, sino se le da nignuna propiedad: reset o submit pues es un simple button. Luego se le declara un STOCK (piwi cuenta con 52 stocks), y la parte intersante viene: Eventos:
Se le va a agregar un Evento JS, es decir: un evento JavaScript, el cual es muy fácil de entenderle: va a ser ejecutado cuando se le de click: ON_CLICK y va a ejecutar esa acción. Cada widget (y los oficiales de piwi) van a contar con validadores de eventos, es decir: no se va a agregar un evento que no es soportado (de acuerdo a la spec de XHTML), como por ejemplo agregar un ON_CHANGE regresarí a un error ya que los botones no pueden tener ese atributo.
Otra ventaja de los Widgets es que pueden ser: multieventos de un mismo tipo. Es decir, yo puedo agregar el número de eventos que quiera a mi widget y todos pueden ser: ON_CLICK. Las pruebas que he hecho con 10 eventos de tipo ON_CLICK me regresan un botón 100% valido de XHTML.
Y así como creamos el botón pues va a ser igual para cualquier widget, y sea Entry, Combo (contamos con 3 tipos: Normal, con Imágenes y de Grupos), TextArea’s, etc.
Por ejemplo:
$entry = new Entry ("cajita", "Una cosa"); $entry->SetAutoStyle (); $entry->AddEvent (new JSEvent (ON_CHANGE, "javascript:alert(this.value)")); $entry->AddEvent (new JSEvent (ON_CHANGE, "javascript:alert(calcMD5(this.value));", "http://jaws.com.mx/templates/controlpanel/md5.js")); $entry->Show ();
Esto es más que obvio (aunque a muchas personas no les guste la: obviedad). Creamos un Entry, le agregamos un AutoStyle (que va a ser: piwi).. un dato curioso que se me olvidó: Los widgets son 100% customizables a CSS y el CSS que regresan es iguall 100% CSS. Y se le van a agregar dos eventos de tipo ON_CHANGE: El primero va a mostrar una alerta del contenido del valor y el siguiente va a hacer una alerta con el valor MD5 ejecutando la función calcMD5 que se encuentra en http://jaws.com.mx/templates/controlpanel/md5.js, ¿Qué nos regresa?.
<script type="text/javascript" language="JavaScript" src="http://jaws.com.mx/templates/controlpanel/md5.js"></script> <input type="text" name="cajita" id="cajita_20" value="Una cosa" class="piwi" onchange="javascript:alert(this.value); alert(calcMD5(this.value));" /> <select name="opciones" id="opciones_13">
Piwi va a hacer la magia de acoplar los multieventos, agregar los archivos externos de JavaScript en un lugar que no tenga conflictos con el XHTML.
Bien, otra de las ideas que tenemos en piwi no es el tratar de reinvertar el hilo negro. Actualmente nos estamos basando en las propiedades que tienen objetos de Gtk, así como en XUL. Es decir, que los usuarios puedan armar sus interfaces en XML y cargarlas (tener nuestros parsers) y arrogar 100% Xhtml. Hay dos lugares donde me ando basando: XAML (un XUL para Longhorn y Avalong, los drafts son excelentes) y XUL (diseño de GUI’s, pero opensource y desarrollado por la gente de Mozilla). Aunque vamos a tener nuestro propio archivos, vamos a poder convertir nuestro Widget (de objetos a XML) a XUL o Glade y viceversa. Posiblemente nos lleguemos a basar más en XUL, teniendo algo como:
<menubar> <menu name="File"> <menu name="New"> <menuitem name="Navigator" cmd="commandid:newnavigator" /> <menuitem name="Message" cmd="commandid:newmessage" /> <menuitem name="Blank Page" cmd="commandid:newblankpage" /> <separator/> <menuitem name="Blank Page From Template..." cmd="commandid:blankpagefromtemplate" /> </menu> ....
Que básicamente sirve para crear un MenuBar con sus menuitems y mil cosas. Lo más cansado va a ser el desarrollar el DTD y no por que vaya a ser complicado, sino porque es muy cansado… son muchas reglas a definir para tener un bonito DTD.
¿Cuál es la meta de Piwi?. El ofrecer una herramienta a los programadores de PHP para desarrollar interfaces 100% estándares y los programadores se olviden del tan cansado JavaScript y HTML al mismo tiempo: Tener la menta en PHP y hacer que el progamador traté de olvidarse de XHTML y CSS (bueno, a menos qu equiera agregarle un bonito CSS
).
Pensamos usar la herramienta de Glade para desarrollar interfaces en un futuro muy cercano. Por ejemplo, tener un: phoo.addalbum.xml que regresaría una interfaz para agregar un Album al gadget Phoo. Desarrollarla en Glade, pasarla al XML de Piwi (algun script con Perl nos ayudaría bastante) y guardarla y simplemente hacer:
$piwi = new XML2Widget ("phoo.addalbum.xml"); $piwi->Get ();
.
Nuestro triste México
Yo a diferencia que muchos Mexicanos me siento triste del México que vivimos en la política.. ahora el PRD toma la Cámara y hace sus cosas… los del PRD ahora dicen que el negociarlos por hacer su chiste tan estúpido es otro complot.. complots por aquí y complots por allá.
Muchos mexicanos ‘izquierditas’ o amantes de ‘La Jornada’ (que no es más que un blog del PRD) aseguran que eso es un complot.. el decirle a los estados: Cada quiens e paga lo suyo. Vaya, esos planes llevan desde el 94-95…. y ahora es ¿qué?.. un complot. La estúpida del PRD: Dolores Padierna se sube a la silla del Presidente de la Cámara a hacerse la chistosa… bah… yo no entiendo porque la gente le interesa tanto ese pinche partido que por cada propuesta que sacan dicen que no y que no y que no…
Muchos como son fanaticos de Obrador igual.. dicen que el gobierno Federal debe seguir pagando el dinero al DF por la educación y AMLO no quiere.. pues si, como el no hace nada y ese presupuesto lo hace para puentes estúpidos y otras cosas pues no le conviene porque dejaría a la mitad todas sus metas: Puentes.
En fin… hace rato pensaba: Ya que se chinguen a alguien del PRD o al partido. No quiero imaginarme en la que se metieron con sentarse y ocupar la Cámara y no solo insultar a los del PAN.. sino a la mafia de mafias: PRI… en fin.. mis deseos para que pierdan en el 2006.. y ya.. sea cual sea la manera…. si eso hacen sin tener todo el poder, teniendo el poder no me imagino… Pero en fin.. uno a fregarse la espalda para salir adelante, buscando apoyo en prd’istas no se llega a nada..
Ando escribiendo un artículo sobre la Cámara y las estupideces del PRD al estilo de: Elecciones al 2006, pienso terminarlo el Martes y publicarlo, va a tener una gran fuente de datos
.
Voy a tratar de dejar de escribir estúpideces sobre México, ya me hicieron el comentario: Parece más de lo mismo
.
El comentario solo fue de coraje y resentimientos con el único objetivo de insultar al PRD