Currently Browsing

April, 2006

AJAX File Upload con JSF

Voy a describir el modo de hacer carga de ficheros mediante JSF utilizando AJAX. El método esta adaptado del que utiliza Martin Konicek en PHP.

Utilizaremos el componente FileUpload incluido en el Tomahawk de Apache Myfaces. En primer lugar creamos dos páginas web, una será la que contenga la imagen y otra el formulario. Incluimos la segunda en la primera mediante un iframe.

Configuramos la opción onChange del componente FileUpload para que ejecute un código javascript que cambia la imagen actual por otra imagen de carga (un indicador ajax por ejemplo). La forma de hacerlo es accediendo al documento padre y modificando el atributo src del img. A continuacion, se ejecutará un submit(). Esto establecerá el valor del UploadedFile del managed bean que da soporte al FileUpload. En el cuerpo del método setImage (o como se llame) del managed bean se guardará la imagen del modo que sea más adecuado (un fichero, una base de datos, en memoria, etc).

El iframe se recargará y se debe añadir un método en el onLoad del body. í‰ste método se encargará de modificar la imagen del documento padre para que apunte a la nueva imagen subida. Lo normal será pasarle como parámetro la localización de la nueva imagen, que habrá sido establecida por el setImage mencionado en el párrafo anterior.

Si todo es correcto, se verí­a el cambio de imagen :-)

Proyecto de fin de carrera: Interfaz Gráfica de Usuario

Después de algún tiempo sin reunirme con el tutor del proyecto, por fin logré tener un hueco y entrevistarme con él. Estuvimos hablando de dos cosas principalmente, el formato de los ficheros de salida y entrada de la aplicación y de la interfaz gráfica de usuario.

Con respecto a esta última, el enfoque que pretendí­a darle a la IGU no es el que realmente le interesa a los miembros del grupo de investigación. Mi planteamiento inicial, y ahora descartado, era el de crear una interfaz de ventanas clásico, posiblemente un programa Java usando Swing. Después de la entrevista, la conclusión a la que llegamos es que se necesita un interfaz tipo web.

¿Por qué una WUI (Web User Interface)? Pues porque uno de los objetivos es promocionar el código de cálculo y los algoritmos, permitiendo a investigadores de otros grupos a lo largo y ancho del mundo probar la aplicación. La mejor manera de hacerlo sin tener que estar distribuyendo código y ejecutables es mediante este sistema. De este modo todo el sistema esta centralizado en el cluster del grupo de investigación de modo que actualizar el software es trivial; además, podrán diseñarse polí­ticas de control de acceso al cluster y sus recursos de forma integrada con el servidor web.

Ahora mi pregunta es que tecnologí­a emplear para implementarlo. Estoy pensando en emplear PHP o J2EE. Quizá montar un sistema J2EE es un tanto excesivo para una aplicación web que no requiere de toda la arquitectura de servidores de aplicaciones y pools de conexiones a DBs entre otras cosas que si requiere una aplicación corporativa. Sin embargo, la ventaja serí­a que estoy acostumbrado a utilizar Java Server Faces y sus herramientas, implementar la interfaz serí­a poco más que un juego de niños.

PHP tiene una curva de aprendizaje más corta, y un mantenimiento más sencillo. Sin embargo no dispone de las caracterí­sticas de seguridad intrí­nsecas asociadas con un servidor J2EE.

Estas son mis desavenencias actuales, espero tomar la decisión en los próximos dí­as. Veremos como queda.

El comentario es correcto, el mantenimiento de una aplicación PHP grande es muy complejo debido a la falta de estructura intrí­nseca de esa tecnologí­a. Mi comentario se referí­a al software: servidor Apache, PHP y listo. J2EE requiere una configuración un poco más detallada.

AjaxWrite

Este post lo estoy escribiendo desde el ajaxwrite, un procesador de textos on-line. Se basa en la tecnologí­a ajax para permitir escribir textos en internet utilizando las herramientas clásicas de otros procesadores más ortodoxos como el Microsoft Office o el OpenOffice. Mi intención es hacer el comentario según pruebo las caracterí­sticas.

En principio, he tenido problemas para poner el link de más arriba (el que enlace a ajaxwrite) porque seguí­a escribiendo y no podí­a decirle al programa que el estilo de hiperenlace se habí­a acabado. Un punto negativo. Tal vez tenga esa capacidad, pero yo no la veo.

Las teclas de acceso funcionan bien, deshacer (ctrl+z), copiar (ctrl+c), etc. Puede leer muchos formatos, incluido el doc del MS Office. veo que los botones de insertar objetos e insertar imágenes están deshabilitados, con lo que no lo han implementado todaví­a. Tiene soporte para cambiar el tipo de letra y tamaño, pero no para controlar estilos de letra (cabecera, tí­tulo, párrafo normal, etc) que facilita mucho la edición, la maquetación y la creación de la tabla de contenidos automáticamente, cosa que tampoco tiene evidentamente.

Puede crear tablas, pero el control del ancho de las columnas es un complejo y no parece que permita mucha flexibilidad.

En definitiva, un procesador de textos sencillo, a la altura del Wordpad de Windows, esperemos que continúen desarrollándolo y llegue a ofrecer las mismas prestaciones que los procesaores comerciales offline.

log4tran: The Fortran logging system

Nada. No hay ningún sistema de logging open source para Fortran, o por lo menos no sale en las dos primeras páginas de resultados de búsqueda de Google. Asi que he decidido crear mi primer proyecto en Sourceforge e intentar implementar esta utilidad para Fortran, ¿lo conseguiré?

El proyecto surge de la necesidad de llevar un registro de ejecución del módulo de cálculo de mi proyecto de fin de carrera. Me parece útil tener un sistema de logging, ya que me facilitará la depuración y el seguimiento de la ejecución; y eso siempre es bueno.

Estoy a la espera de que me acepten el proyecto en Sourceforge. La verdad es que tengo hecho un pequeño esqueleto que funciona, aunque tengo graves problemas con la gestión de ristras, que en Fortran es horrible, como todo el mundo que lo haya intentado sabrá. Si tuviera las clásicas sprintf y printf, todo serí­a distinto :`(. Tanto que me estoy planteando hacer una librerí­a escrita en C y acceder desde Fortran.

Mi idea es ir implementando funciones según me hagan falta, cogiendo ideas del apache log4j (log for Java). Por el momento hay 4 niveles de importancia a la hora de escribir los logs, sólo se pueden escribir en un fichero (no por consola), y en cada log se imprime la fecha, la hora y el nivel de importania.

Pondré el link a la eb del proyecto en cuanto esté activo y haya algo para descargarse ;-)