WaveMaker: crear aplicaciones web en modo visual

WaveMaker Visual Ajax Studio es una aplicación que nos permite desarrollar aplicaciones web de forma visual, mediante drag&grop. Podrás unir Ajax widgets, web services y bases de datos para crear aplicaciones de forma rápida y sencilla.
wavemaker.png
Esta aplicación reduce el tiempo y el costo de desarrollo de nuevas aplicaciones de negocio. Los desarrolladores mejorarán los tiempos hasta en un 67% del tiempo y el número de líneas en un 98%, ya que creará aplicaciones war de Java.
Entre las características nos encontramos con el drag&drop, sistema de layouts, deploy, SOAP, REST, RSS y servicios web.
WaveMaker Visual Ajax Studio
Vía / WebAppers

Capturar la tecla CONTROL mediante Javascript

A la hora de darle una funcionalidad más enfocada a aplicaciones de escritorio (por ejemplo con un editor WYSIWYG), suele ser necesario usar combinaciones de teclas CONTROL+tecla para ejecutar ciertas acciones.

Capturar la combinacion CTRL+tecla en javascript es muy sencillo:

var isCtrl = false;
document.onkeyup=function(e){
if(e.which == 17) isCtrl=false;
}
document.onkeydown=function(e){
if(e.which == 17) isCtrl=true;
if(e.which == 83 && isCtrl == true) {
// acción para CTRL+S y evitar que ejecute la acción propia del navegador
return false;
}
}/

La explicación es sencilla, cuando se pulsa CTRL+tecla se producen dos eventos de teclado, por lo que no es posible saber si se ha ejecutado en una sola llamada. Por ello primero comprobamos si se pulsa la tecla CTRL y se pone un flag a verdadero y luego dependiendo de la tecla que queramos, si se detecta que se pulsa y está el flag activo, se realiza la acción. Hay que devolver false para que el navegador no ejecute la acción que tiene por defecto. Cuando se deja de pulsar la tecla CTRL se pone el flag a false.

How to create Ctrl+Key shortcuts in Javascript

Cuando no hay que normalizar la base de datos

La normalización es el proceso por el cual se optimizan las tablas de una base de datos para que no haya datos redundantes, se optimice el espacio en disco y se evite errores en la actualización de datos. Ahora bien, aunque la normalización es el estado idóneo para la base de datos, eso no quiere decir que sea el más idóneo para nuestra aplicación.
Existen un caso perfecto cuando la normalización no es adecuada y es cuando la obtención de datos es lenta. Si normalizamos y eso implica que para obtener los datos tengamos que realizar varios joins, al haber muchos datos puede darse la situación de que las consultas sean lentas.
Algo parecido nos ha pasado en Bitacoras.com, ha sido necesario desnormalizar para mejorar la velocidad de respuesta. Imaginaros, teníamos que mostrar dentro de la Comunidad de los usuarios los posts de los usuarios a los que sigues y su actividad (tal sigue a cual).
Como se puede apreciar son datos totalmente distintos y lógicamente van en tablas diferentes, y a parte hay que obtener los datos de los usuarios a los que se sigue y usarlos para obtener sus posts (de todas sus bitácoras) y sus actividades y ordenarlos por fecha descendiente. Solo de leerlo ya me aparecen unos cuantos joins por la mente.
La solución ha sido crear una tabla de enlaces a ids de otras tablas. En la misma tabla tengo enlaces a los posts y a las actividades y a los ids de los usuarios. Es más rápido (unas 300 veces) debido a que existe paginación y es preferible obtener ids de dos tablas en una consulta sencilla y luego obtener n registros sencillos, que obtenerlo en una única consulta.
Otra cosa que he observado es que puede ser más rápido obtener una lista de IDs (sacadas de una consulta) y luego comparar haciendo un IN que hacer un join de dos tablas, cuando una de estas tablas se obtiene mediante una consulta.
Al final lo que nos queda es que la teoría no es siempre válida y que las situaciones en las que nos podemos encontrar hacen que la solución menos elegante sea la más efectiva

Maria: motor de almacenamiento derivado de MyISAM

Maria (curioso el nombre) es un motor de almacenamiento para MySQL derivado de MyISAM y que ofrece recuperación contra fallos (crash safe). Por ahora se descarga independientemente de MySQL 5.1, pero en un futuro formará parte de él.

A parte de ser crash safe también admite logs (incluyendo operaciones de CREATE, DROP, RENAME y TRUNCATE), todos los tipos de filas de MyISAM y el típo específico de Maria.

A parte de los ficheros de la base de datos y de los log, existe un fichero (maria_log_control) que contiene información sobre el estado actual del motor Maria.

Las diferencias con MyISAM son las siguientes:

  • Hay dos tipos de tablas: las que no son transaccionales (no crash safe), siendo guardados sus datos inmediatamente. Las tablas crash safe, que guardan los datos en los logs de Maria, una vez acabada la transacción los datos se guardarán en los ficheros de la base de datos.
  • Maria soporta recuperación automática en el caso de un fallo (crash).
  • Maria admite un único usuario que escriba y varios que lean. MyISAM solo admite sentencias INSERT y SELECT concurrentes.
  • Maria forece el nuevo formato de fila llamado PAGE.
  • Maria soporta operaciones crash-safe sobre varias sentencias mediante la agrupación de las sentencias usando LOCK TABLES y UNLOCK TABLES.

No he visto nada sobre el rendimiento de este motor de base de datos, ni sobre el origen del nombre, espero poder informarme de ello.

MySQL Maria Preview

links for 2008-02-27

Prefuse: herramienta de visualización Java

Prefuse es una aplicación que nos permite crear gráficas (visualizaciones) de datos. El origen es crear unas herramientas que provean un framework para ver datos mediante Java. Actualmente ofrece también herramientas para ActionScript y Adobe Flash Player.
prefuse.png
Ofrece una variedad de caracteristicas para el tratamiento de datos, su visualización e interacción. Provee estructuras optimizadas de datos para tablas, gráficas, árboles, animación, queries dinámicas, búsqueda integrada y conectividad de la base de datos.
Está escrito totalmente en Java, usando la libreria Java 2D y se puede integrar fácilmente en cualquier aplicación Swing o applet.
Prefuse
Vía / OpenSourceCommunity.org