Hernán,
que tal? super interesante el trabajo.
Casualmente en este momento estoy trabajando sobre un
proyecto en Seaside que se toca en muchos puntos con lo
SWT. En si hay dos cosas con las que estaba jugando:
1. Envío de mensajes al cliente. La idea es que viajen
en forma de commands o como eventos, pero que el
cliente tenga la posibilidad de hacer algo en base a un
cambio en el server. Claramente el objetivo de todo
esto es lograr un MVC como la gente, donde la página
web + browser cumplen el rol de V/C. El problema a usar
cosas como Comet es que, por lo que llegué a ver, no
escala muy bien que digamos en términos de la cantidad
de clientes, por estar obligado a mantener un caño
abierto en el server por cada cliente. Te hago una
pregunta: hicieron pruebas con N clientes al mismo
tiempo (con N medianamente grande :))?.
2. Envío de mensajes javascript desde St. Todo comenzó
con un port de la API de google maps para seaside y ahí
surgió la necesidad de enviar mensajes al mapa. Una
opción posible en Seaside es embeber código javascript,
pero eso me resultaba un moco. Por otro lado no quería
tener que traducir todo el código St a javascript,
porque en realidad mi objetivo es un poco la inversa,
esto es, dado un objeto que ya existe en javascipt,
poder mandarle mensajes "a la Smalltalk". Ejemplo:
channel:=(html messageChannel
callback: [self showBar
ifTrue: [self map
enableGoogleBar]
ifFalse:[self map
disableGoogleMap].
].
y:
html checkbox
...
value: (self map isEnabled: anItemName);
onChange: channel.
Lo que sucede en este caso es que, al interpretar el
bloque de callback uso un BlockContext modificado que
captura en envío de un mensaje y, si el receptor está
registrado como objeto javascrip [*], traduce el envío
del mensaje y lo interpreta en la página. Lo
interesante es que en el ejemplo que puse no se traduce
todo el código compilado en forma estática, sino sólo
lo que se evalúa. De hecho, en este caso habría tres
mensajes para evaluar (asumiendo la rama del ifTrue):
self showBar (self no es un objeto javascript =>
ejecución normal)
aBool ifTue:[] ifFalse:[] (idem al anterior)
self map enableGoogleBar (el mapa si es un objeto
javascript, luego, aparte de enviar el mensaje en st se
genera algo de la pinta de
'google_map_3619.enableGoogleBar();' Esto luego se pasa
al channel, que no es mas que un div con un id
determinado el cual al refrescarse reinterpreta el script).
Hasta el momento el approach me resultó cómodo, aunque
le encuentro tres (potenciales) problemas:
1. Viendo el código uno no puede discernir si el objeto
es javascript o no. Esto puede ser bueno a nivel de
transparencia, pero confuso a la hora de debuggear.
2. El mismo bloque, ejecutado fuera de un
messageChannel es código St común y corriente.
Nuevamente, esto puede llegar a ser confuso.
3. Es posible que se generen mensajes en javascript de
gusto; ejemplo:
self map isGoogleBarEnabled
ifTrue: [self map enableGoogleBar]
ifFalse:[self map disableGoogleMap].
el código resultante es (asumiendo la rama del ifTrue):
google_map_3619.isEnabled();
google_map_3619.enableGoogleBar();
En este caso el primer mensaje es de gusto, pero en
principio no hay forma de saberlo. Se podría taggear a
los mensajes como "idempotentes" en términos de los
cambios que producen para evitar generar código de mas,
pero me parece una cosa muy compleja si el costo no es
mucho.
Igual el trabajo esta verde todavía (lo arranqué hace
una semana). Cualquier comentario es bienvenido.
Saludos,
Andrés
Hernán Galante escribió:
> Estimados,
> Tengo el agrado de invitarlos a probar y ver un nuevo
> framework para desarrollo web llamado Smalltalk Web Toolkit. El padre del
> mismo es un amigo conocido por todos, Diego Gomez Deck.
>
> ¿Cuáles son las cualidades de este nuevo framework?
> SWT rompe con la asimetría del protocolo HTTP, es decir, a través del hack
> Comet, ahora el servidor puede enviar contenido a los clientes conectados.
> Esto hace que se quiebre la barrera impuesta por el protocolo HTTP y el
> servidor no solamente pueda enviar contenido solo con un pedido del cliente,
> sino que a través de esto, en cualquier evento que se produzca en el
> servidor pueden ser informados los clientes (o los navegadores).
>
> ¿Cuál es su arquitectura?
> SWT consta de una parte cliente y una servidora. Es decir, el comportamiento
> del cliente lo desarrollamos íntegramente sobre Smalltalk. Gracias a un
> framework que traduce de Smalltalk a Javascript contamos con un
> mini-ambiente Smalltalk del lado del navegador. A partir de este esquema, se
> puede contar con un MVC (Model-View-Controller) distribuido. Este MVC logra
> ciertas optimizaciones para presevar el recurso más limitado, la red.
>
> ¿De donde obtengo más información?
> En el blog ceibo.wordpress.com podrán encontrar información de cómo usarlo,
> ejemplos, links a downloads, tutoriales, etc.
> Ceibo es un proyecto de barajas 3D sobre la web que usará SWT como
> arquitectura.
>
> Gracias!
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "ClubSmalltalk" de
Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a [email protected]
Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/clubSmalltalk?hl=es.
-~----------~----~----~----~------~----~------~--~---