miércoles, 28 de mayo de 2008

Otro excelente ejemplo de uso de Scala

Esta vez viene de Camel un software de EAI Open Source del grupo Apache. Este software implementa varios patrones de integración comunes.

¡Es casi el paraíso! Reemplazaron un horrible archivo de configuración Spring-XML con un DSL implementado en Scala.

Ya me convencí a 200%:
  • Necesito conocer todos los detalles de Scala, es un lenguaje demasiado potente.
  • Ya se para que usar los DSL: reemplazar los archivos de configuración XML o properties que tanto amo.

martes, 27 de mayo de 2008

Buenos ejemplos en Scala

Cada vez me gusta más el lenguaje de programación Scala, pero es difícil encontrar buenos ejemplos. Los tutoriales en el sitio web son muy académicos y se pierde mucho tiempo a recordar o entender los algoritmos (a pesar que no es malo refrescarse la memoria de vez en cuando).

De todos los ejemplos más "de negocio" que encontré, este se destaca:
  • El blogger inventa un DSL para compra/venta de acciones.
  • En el primer blog, usa Scala para parsear mensajes o cualquier string externo a su programa.
  • Luego, en un segundo blog, incluye el código DSL dentro del código Scala.
Encuentro estos ejemplos muy buenos por varias razones:
  • Hasta ahora, había visto ejemplos de DSL en Ruby. No me puedo acostumbrar a los lenguajes dinámicos, así que me da mucho gusto poder usar para estos fines un lenguaje con "static typing" como Scala,
  • Es increíble lo fácil crear parseadores,
  • El blogger usa su DSL en reemplazo a mensajes en formato XML (otra razón para estar muy contento).
  • Obligan a entender varias facetas del lenguaje.

sábado, 24 de mayo de 2008

¿Las bases de datos relacionales tienen futuro?

Estoy sintiendo que estamos ad porta de grandes cambios. Algunas de mis publicaciones anteriores en este blog van en este sentido: fin de la moda SOA y fin de la era "ServerSide Enterprise Java es el único tema de interés". Este blog es para describir porque creo que las bases de datos SQL no van a estar ajenas a los vientos de cambio.


El ultimo gran cambio TI que nos ha tocado vivir, es evidentemente la web. Creo que este cambio fue bastante benéficioso para los grandes proveedores de bases de datos SQL, los cuales ni se queda sufrieron el impacto económico de las soluciones Open-Source como MySql y Posgres.

Las ventas no han bajado, pero ya no se usa sus motores como antes. En mi caso, no he programado un solo store-procedure o trigger desde el año 1997. Incluso, en uno de mis últimos proyectos JEE, ni se queda he ejecutado un comando SQL DDL (los comandos tipo create table, create sequence, etc): se creo el modelo con clases Java anotadas con JPA y TopLink se encargo de todo el resto. Tuve que ejecutar comandos DML (select, insert, delete, update) para hacer una carga inicial masiva dejando en pruebas unitarias las cargas de tablas de parámetros chicas. Entonces las aplicaciones que me ha tocado ver ya no dependen de un lenguaje de store-procedure como el PL-SQL de Oracle, T-SQL de Sybase, SQL-Server y "ni se queda conozco su nombre" en caso de DB2 (empecé a usar DB2 desde la época web, por eso no se como soporta los store-procedure).

Eso tiene un impacto radical para los proveedores de BD porque las aplicaciones de negocio ya no dependen de sus productos y es mucho más fácil para el cliente negociar rebajas sobre las licencias. Antes de la web, había que re-escribir una aplicación desde cero para mover de Sybase a Oracle. Ahora, el costo de migrar de un motor a otro es una fracción del costo de desarrollo de la aplicación y puede financiarse con ahorros en costos de licencias.

Cabe notar que mi experiencia es principalmente el mundo Java y JEE y que en el mundo .Net pasa algo un poco distinto. Si el cliente ya decidió amarrarse con .Net y MS, el argumento de poder migrar de SQL-Server ya no es tan valido. Entonces, es normal encontrarse con aplicaciones relativamente recientes hechas principalmente con T-SQL, lo que a mi me resulta curioso y me hace recordar los viejos tiempos de Sybase.

En resumen, en la época web la capa de negocio se fue del motor (donde estaba en store-procedure y trigger) hacia el servidor de aplicación y eso reduce la dependencia hacia el fabricante del motor, pero no ha puesto en duda el lenguaje SQL y todo lo relacionado, como el modelo relacional y el comportamiento ACID de las transacciones. Creo que eso esta por cambiar.

Un impacto sobre las aplicaciones TI que viene pronto es el crecimiento en volumen de datos y volumen de transacción a procesar. Eso se da por varias razones:
  • necesidad de procesar mucho más eventos de negocio. Por ejemplo un lector RFID genera 300 eventos por segundo: si un supermercado tiene 20 cajas con 2 lectores cada una, son 120.000 eventos por segundo en un solo supermercado. Y todos estos eventos deben ser filtrados y correlacionados entre si para generar otros eventos de negocio: este tipo de procesamiento se llama CEP. Para lograr eso, hay una nueva clase de arquitectura llamada EDA que es mucho más distribuida que la actualmente acceptada basada en capas
  • para aplicaciones web más común, las RIA aumentan drasticamente los HTTP hits Antiguamente, solamente una porción de una recarga de pagina usaba la base de datos y además había un tiempo de pensamiento del usuario antes de cargar otra pagina. Ahora, las paginas hacen auto refresh parciales y muy frecuentes, que requieren ir a la BD el 90% de su tiempo de ejecución.

Como respuesta a estas necesidades se observa que:
  • algunos cuestionan la arquitectura en 3 capas,
  • se elimina el uso del protocolo XA (2PC o Two Phase Commit).
  • se distribuye masivamente los datos en modalidad "share nothing",
  • una consecuencia de los 2 puntos anteriores, es que las transacciones cubren solamente actualizaciones a datos que están físicamente cercanos.
  • se usa caches distribuidos y grillas (como el producto Coherence comprado hace poco por Oracle) que evitan hacer hit a las bd,
  • se cuestiona el almacenamiento tradicional basado en filas y se propone almacenar basado en columnas.
Como ejemplo, la base de datos de Google App Engine soporta estos conceptos y no es relacional. ¿Tremendo cambio de paradigma no?

Entonces, desde la época web, los grandes proveedores de BD ya no dictan el mercado y nuevos actores pueden entrar como es el caso de Google con su GAE. Además, el aumento en el volumen esperado de transacciones obliga a revisar el modelo actual de las aplicaciones. Hay que esperar cambios en SQL y el modelo relacional.

¡Era tiempo! El estándar SQL debe tener 20 años sin actualización relevante.

lunes, 12 de mayo de 2008

Esta bastante de moda criticar a Sun

En el blog anterior, mencione 2 threads de TSS muy críticos de JavaOne 2008. Parace que es una moda, porque no son los únicos en hacer criticas y no voy a contababilizar todas las protestas contra Sun por su relación con el mundo OpenSource: no importa si Solaris es OSS, OpenOffice es OSS, Java es OSS, Netbeans es OSS, Glassfish es OSS, igual Sun queda con una imagen anti-OSS.

Por mi parte, tengo que reconocer que me costaría mucho estar enojado con Sun. Esta empresa tuvo un rol importante detrás de 3 de las tecnologías más entretenidas que use hasta ahora:
  • Unix: Solaris es una de las implementaciones de Unix que permitio su éxito comercial. Seguro no fue la única, pero creo que sin Solaris, Linux simplemente no existiría.
  • El lenguaje C y su ambiente de desarrollo. Evidentemente, eso esta relacionado con Unix.
  • Java y JEE: estos acabaron con un mundo donde lo propietario y lo fome era la ley: los lenguajes (VisualBasic, PowerBuilder, Transact-SQL, PL-SQL), las plataformas (Sybase, Oracle, DB2, MS MTS, Tuxedo, CICS).

MS-DOS y Windows fueron una vez entretenidos y eso no impidio que estuve una vez muy enojado con Microsoft. Los cambios entre la API C de Windows y las distintas versiones de la API C++ MFC fueron realmente traumático. Además, MS perdió su imagen de "buena onda" cuando llego la web, el mundo Open Source y no tuvo un comportamiento decente con su competencia (Sybase, Netscape, RealPlayer para nombrar algunos). MS se mereció el enojo de mucho gente incluyendo el mio.

Pero dudo que alguna vez me enoje de la misma forma con Sun.

sábado, 10 de mayo de 2008

¿El nivel de TSS es afectado por el fin de una era?

El foro de desarrollo TheServerSide se parece de vez en más a Slashdot.
  • Hay peleas interminables entre representantes de SpringSource (Rod Johnson) y jBoss (Bill Burke),
  • Hay peleas interminables sobre las ventajas de las licencias OpenSource. Por ejemplo, este anuncio de S2AP se transformo en una guerra campal contra la GPL, la cual es nada menos que la licencia de Linux. Como si fuera poco, TSS relanzo la guerra usando este blog de Billy Newport como excusa. Al final, leyendo estas conversaciones, estuve absolutamente incapaz de entender que es S2AP (el que supuestamente "Totally Rocks" según el titulo del primer hilo de conversación)

Creo que hay transformaciones que se están dando y que afectan el negocio mismo de TSS, o sea dar información sobre las tecnologías Java en el servidor:
  • JEE es maduro, solido, seguro, confiable pero dejo de ser sexy. Para muchos, es el nuevo COBOL y ya es aburrido.
  • Java, como lenguaje, llego a su apogeo y muchos opinan que no hay que cambiar su sintaxis. Critican la implementación de Generic en Java 5 y se preocupan por introducir aun más complejidad con closure y nuevas anotaciones.
  • Java y su plataforma es visto de una complejidad alta. Muchos buscan en Ruby On Rails algo más simple y refrescante. Los lenguajes dinámicos son vistos como más "orientado web" y compatible con metodologías ágiles.
  • La interfaz cliente vuelve con mucha fuerza gracias a las tecnologías web para el consumidor final como AJAX (gmail), Mashup (YouTube, Yahoo Pipes), Social Networking (facebook), RIA (Adobe AIR, MS Silverlight). Eso resta importancia al desarrollo en el servidor.
  • Los sistemas abiertos no son tan importantes. Apple iPhone es lejos el sistema computacional más cerrado de los últimos 10 años: ni se queda se podía desarrollar aplicaciones nuevas cuando salio y ahora la licencia deja fuera a Adobe Flash y la JVM de java. A pesar de eso, ha tenido éxito comercial.
  • Cloud Computing y SaaS van a afectar la computación empresarial y las primeras ofertas no usan Java. Por ejemplo, Google App Engine usa Python y una base de datos propietaria.

Creo que TSS debería seguir el ejemplo de InfoQ los cuales no se cerraron al mundo JEE y les permite informar sobre temas más novedosos y entretenidos.

viernes, 9 de mayo de 2008

OSGi es la última moda en Java

En todos los foros relacionados con Java y JEE que visito regularmente (TSS, InfoQ, Artima), OSGI es mencionado como un plus importante. Los grandes proveedores siguen la tendencia:

Hay implementaciones Open Source
Hay anuncios de productos que usan OSGi para tener una arquitectura modular:
  • El mismo Eclipse con su Equinox (obvio),
  • SpringSoure lanza su servidor de aplicación (ver anuncio en TSS)
  • Glassfish V3 de Sun
El anuncio de Sun es notable, porque hasta ahora, Sun soportaba otro estándar de modularización.

Para no quedar fuera de la moda, empecé a refrescarme un poco sobre el tema leyendo este tutorial en TSS.

Mi impresión preliminar es que OSGi tiene mucho valor para los que desarrollan plataformas, como un servidor de aplicación, un motor BPM o un IDE de desarrollo. Estas plataformas tienen que soportar add-ons, plug.ins y aplicaciones desarrolladas por los mismos clientes de la plataforma. Si estas plataformas están desarrolladas en forma modular y en base a un estándar, es claramente una ventaja.

No vi mucha ventaja de usar OSGi para el común del desarrollo de aplicaciones empresariales. Por ejemplo, las aplicaciones JEE ya tienen una forma de modularizar con los WAR, EAR, etc que, quizás no sean perfectos, pero son ampliamente entendidos y soportados por los IDE de desarrollo. No me queda claro entonces que aprender una nueva API y un nuevo método de despliegue como OSGi tenga un beneficio. Quizás, cuando todos los IDE usen OSGi por debajo y se preocupen del trabajo sucio, sea rentable usar esta tecnología.

martes, 6 de mayo de 2008

Sun relanza JavaFX a JavaOne

Como previsto, Sun aprovecho JavaOne para relanzar su JavaFX como competidor de Adobe AIR, Microsoft Silverlight y AJAX, Todo estas tecnologías compiten para el desarrollo de aplicaciones tipo RIA.

Tengo que admitir que le doy poca probabilidad de éxito a Sun y apuesto mucho más a Adobe por su historia con Flash. Pero me impresionan las siguientes cifras (leer articulo completo).

Sun is hoping to tap into 2.2 billion mobile devices and the vast majority of desktop PCs that are Java-enabled. JavaFX was shown running on Google's Android mobile platform. Green noted that 85 percent of cell phones, 91 percent of desktops, and 100 percent of all Blu-ray Disc players will run JavaFX.

¡No deja de ser una base interesante!