Qué es OpenLaszlo
Se autodefinen como «Plataforma XML de código abierto para el desarrollo de
aplicaciones valiosas por internet». Es decir, nos proporciona herramientas
para poder realizar páginas webs interactivas y en principio con el mínimo
esfuerzo por nuestra parte.
Cómo funciona
Primero necesitamos nuestro fichero fuente. Este es un XML que describe los
elementos visuales, enlaza dichos elementos con los eventos que vamos a
manejar. El lenguaje descriptivo es de bastante alto nivel (orientado a objeto)
y dispone de muchos elementos comunes ya predefinidos. Lo que nos permite hacer
tareas sin necesidad real de programar (sistemas de arrastrado de elementos,
creación de botones o ventanas, reproducción de animaciones, peliculas o
sonidos, acceso a bases de datos...). Aun así, en caso de necesitar mayor
control, se puede programar usando javascript.
Con dicho fichero fuente se puede trabajar en dos modos: «SOLO» y Servidor. En el modelo SOLO, lo que se hace es compilar nuestra aplicación antes de subirla al servidor web. En la segunda opción, tenemos instalado un interprete de OpenLaszlo en nuestro servidor web y cuando alguien solicita una de estas aplicaciones la sirve según se va solicitando (al igual que ocurre con perl, php o asp).
He hablado de compilar... ¿a qué? ¿a un exe ;-)? No, la plataforma fue
construida para que el fichero destino pudiese ser elegible. La primera opción
e implementada desde la primera versión es generar una aplicación en flash, que
puede ejecutarse directamente o incrustarse en una página estática. La novedad,
y que fue lo que me hizo interesarme (el flash no me atrae nada) es que
anuncian que ya tienen el generador de DHTML (HTML + Javascript).
Ejemplo
Ya sabeis que me gusta poner un poco de código en este tipo de entradas:
"show me the code!!!". En esta ocasión, voy a poner un ejemplo muy sencillo.
Quien quiera saltarselo, aviso que al final incluyo un enlace a una demostración más interesante que esto. Id hasta el final y dedicarle unos minutos...
Hace algún tiempo implementé una versión en perl con cgi de la bola 8. Dado que no se
programar en javascript, pero este programa tiene la lógica de ejecución muy
sencilla, pensé que era un buen candidato para implementar.
<canvas debug="false" fontsize="30">
El elemento principal de todo programa lzx (el lenguaje de descripción de
OpenLaszlo) es canvas. No he encontrado ningun elemento que requiera de
atributos obligatorios, todos tienen un valor por defecto. Mientras que he
estado programando, el valor de debug ha estado en "true", esto ha abierto una
ventana de depuración que me permite ver los mensajes que yo mismo me he dejado
para mí, modificar durante la ejecución el valor de los atributos, y otras
funcionalidades. Al terminar, en vez de borrarlo, pues lo he desactivado, para
recordarme que tengo insertado mensajes de debug. El fontsize, que supongo que
no es necesario explicar para que sirve se hereda en los elementos hijo. De
forma que no tenga que repetir el dato en los demás elementos. Ah, el compiladornecesita fuentes en utf8 o los caracteres acentuados se perderán en el limbo de los bits.
<simplelayout axis="y" spacing="10" />
Para simplificar, usamos una disposición en el que cada elemento está a continuación de otro y dejando un espacio vacio de 10 pixels. Tambien se pueden usar coordenadas y otros sistemas de empaquetamiento.
<text name="instrucciones" width="400" multiline="true">
Haz tu pregunta de forma que la respuesta pueda darse como
un sí o un no.<br/>
<font size="15">
(En caso de repetir una pregunta, se considerará que solicitas una
respuesta que analice más datos de los empleados en la respuesta
anterior y eso significa que la respuesta seguramente será distinta).
</font>
</text>
Los elementos text soportan etiquetado html. En este caso, he definido un
nombre identificador que me permitiría modificar en tiempo de ejecución dicho
texto (al final no lo he usado en ninguna parte).
<edittext id="pregunta" height="50" width="400">
Formula tu pregunta aquí
</edittext>
Un campo de texto, con un valor previamente definido.
<button onclick="generaRespuesta();">
Consultar la respuesta
</button>
<text name="respuesta" width="400" multiline="true"/>
Dos elementos más, un botón, que en vez de poner el código directamente que
ejecuta el evento prefiero definirlo aparte y así queda más claro la
estructura de los elementos. Hay un campo de texto vacío ya preparado, donde
irá nuestra respuesta.
<script>
var respuestas = new Array (20);
respuestas[0] = "Es mejor que no te lo diga ahora.";
respuestas[1] = "Los augurios no son muy buenos.";
respuestas[2] = "Sin duda.";
respuestas[3] = "Es una certeza.";
respuestas[4] = "Tal y como lo veo, si.";
respuestas[5] = "Definitivamente, Si.";
respuestas[6] = "Si.";
respuestas[7] = "Los signos apuntan que si.";
respuestas[8] = "Está decidido así.";
respuestas[9] = "Mi respuesta es no.";
respuestas[10]= "No puedo predecir ahora.";
respuestas[11]= "Mis fuentes dicen no.";
respuestas[12]= "Yo no contaría con eso.";
respuestas[13]= "Concentrate y pregunta de nuevo.";
respuestas[14]= "Puedes confiar en ello.";
respuestas[15]= "Buenos augurios.";
respuestas[16]= "Pregunta otra vez más tarde.";
respuestas[17]= "Es bastante probable.";
respuestas[18]= "Muy dudosamente.";
respuestas[19]= "La respuesta está borrosa, intentalo de nuevo.";
function generaRespuesta() {
var pregunta_hecha=pregunta.getText();
if (pregunta_hecha=="" || pregunta_hecha=="Formula tu pregunta aquí")
{
respuesta.setText("Por favor, formula una pregunta");
pregunta.setText("Formula tu pregunta aquí");
}
else
{
var respuesta_num=Math.round(Math.random()*20 -0.5 );
respuesta.setText(respuestas[respuesta_num]);
}
}
</script>
</canvas>
Y aquí está el javascript del programa. Un Array con las respuestas posibles, una función matemática de redondeo y otra de azar (para que haga truncamiento y no redondeo ha sido necesario restarle el 0.5).
Y se acabó. He colgado en una página con el flash incrustado.
Para aquellos que quieren ver algo más espectacular de OpenLaszlo, además de un par de demos que se acceden desde la página principal, les recomiendo que visiten el tutorial Laszlo en 10 minutos. Hecho en Laszlo (en este caso interpretado en el servidor) donde se muestran ejemplos muy interesantes, sencillos y te permite tocar el código de los ejemplos y ejecutar tus modificaciones.
Iba a poner una encuesta como comparativa de OpenLaszlo con otras tecnologías de uso similar. Pero la verdad es que no conozco casi nada (quizás prototype). Así que si alguien quiere comentar este prototype u otros frameworks, mejor que mejor.