Buscar
Social
Ofertas laborales ES
domingo
may152011

James Gosling y la reinvención de la rueda

Leía el artículo aquí en JavaHispano sobre las últimas declaraciones de James Gosling y me llamaron mucho la atención tres cosas:

1) Que cualquier cosa, brillante o tontería como un piano, que diga James Gosling va a generar montones de rios de tinta electrónica.

2) Que la retrotecnología está de moda.

3) Que esta industria tiene un NULO sentido histórico, la frase de Newton "sobre hombros de gigantes" apenas se aplica, asusta leer como "nuevas" ideas tienen décadas de historia detrás.

El propósito de este artículo de opinión es el de reflexionar sobre los procesos de creación (y adopción) de tecnología, nuestro sector es uno de los pocos en los que podríamos hablar de que existe una, en mi opinión, inmadurez crónica, de otra manera es difícil de entender ciertas tendencias, tendencias que afortunadamente en algunos casos no duran mucho.

Y no, no estoy pensando en que NoSQL es una tendencia pasajera, al contrario, el que las bases relacionales sean la tecnología abrumadoramente mayoritaria hace pensar que el mundo IT es mucho menos innovador y rico de lo que parece.

Sin embargo en cierto modo algunas opciones del mundo NoSQL en mi opinión sufren de un síndrome de reinvención de la rueda brutal, y en esa reinvención tienen mucho que ver las palabras de Gosling sobre las bases de datos "en memoria", y esto lo digo por el comentario sobre Redis en el hilo de JavaHispano:

por defecto todo en memoria con snapshots cada segundo. Si se cae el servidor pierdes los datos generados en el último segundo. Con esta configuración tiene un rendimiento de 100.000 operaciones por segundo en una máquina normalita.

Alguien que leyera este comentario en los años 70 pensaría "es genial", en esos años los volúmenes de datos que manejamos hoy día no tenían nada que ver, los requisitos en transaccionalidad no son los de hoy en día etc etc, pero es que estamos hablando de 2011 en donde una tecnología pretende venderse como novedosa:

1) Intentando cargar todo en memoria

2) Guardando los cambios durante un periodo de tiempo de una vez

Es decir, podríamos hablar de una base de datos de los años 70, es decir:

1) No preparada para grandes cantidades de datos

2) Transaccionalidad dudosa (transacciones ya realizadas realmente no han sido guardadas).

Evidentemente alguien cercano a Redis matizará y dirá "se puede ajustar el tiempo de snapshot y sólo cargar parcialmente los datos en memoria", es decir, si buscamos transaccionalidad segura la unidad de registro persistente será de 1 operación, o al menos no volveremos de la llamada persistente hasta que haya seguridad de que se ha escrito en archivo, lo cual disminuirá mucho el rendimiento, y a su vez cobrará especial relevancia en procesado multihilo para no parar absurdamente el motor de la base de datos (pues algunas de estas bases de datos presumen de lo que yo llamo "mono-hilo mágico").

Por otra parte si sólo cargamos parcialmente la base de datos en memoria porque el archivo de datos es muy grande, entonces ya no hablamos de una base de datos en memoria sino más bien de una caché, y por tanto el rendimiento fabuloso disminuye drásticamente al ir a buscar datos de archivo.

Es decir al final poco a poco vamos creando de nuevo una base de datos más... convencional, es decir una rueda que se parece mucho a la rueda que queremos substituir...   

El comentario de supertorpe me parece magistral:

Lo que pasa con las Hashtables es que luego vas a querer transacciones y vas a tener que montar un sistema transaccional a mano. Después vas a querer persistencia para no perder los datos. Después vas a empezar a crear métodos para simplificar la creación de consultas a la hashtable, para devolver datos relacionados y vas a acabar creando un DSL para ello. Después vas a querer que varios usuarios accedan concurrentemente y vas a crear una arquitectura y unos protocolos de acceso por encima para soportarlo. Después... vas a acabar implementando un sistema de gestión de BBDD a mano, eso sí, con unas Hashtables en memoria en su núcleo :D :D :D 

¿Esto significa que las bases de datos NoSQL no aportan nada que merezca la pena?

NO, pero el aspecto diferencial está en el PARADIGMA, sólo se puede competir con las bases de datos relacionales a través de paradigmas diferentes, el paradigma relacional por ejemplo es MUY difícil de escalar porque requiere que todas las tablas estén "juntas", cuanto más escalas a base de partir la base de datos "menos relacional" es y más sentido cobran las alternativas.

Pero competir con el paradigma relacional sólo es posible aportando al menos similares resultados en rendimiento unido a fiabilidad unido a capacidad de gestionar ingentes cantidades de datos (ya que en flexibilidad es un terreno muy díficil), no en argumentos tipo "base de datos en memoria, snapshots cada segundo y proceso mono-hilo" que suenan a Oracle v0.1 pues por ejemplo ¿es que creemos que los de Oracle son idiotas y no tienen una enorme caché en memoria? 

Es en el terreno de la flexibilidad donde yo creo que las bases de datos NoSQL tienen un largo camino que recorrer, como dice janatic (peloteo mode-on) 

"la gente que lo hace es muy pragmatica y no reniega del SQL. De hecho están haciendo muchos esfuerzos para incluir en lo posible funcionalidades típicas de SQL"

Porque la escalabilidad y el rendimiento no lo es todo, también es importante la extracción de datos de mil combinaciones posibles y ahí quizás la rueda no esté inventada.

Volviendo a la reinvención de la rueda, leyendo las palábras de Gosling sobre "bases de datos en memoria", Gosling está hablando de un único nodo a la vez "cliente y servidor" haciendo operaciones él solito en memoria y archivo. Vale muchos ya han mostrado que eso es una tontería como un piano por mucho Gosling que lo diga... ¡O NO! cuando lo leí pensé "joder pero si eso bien hecho y de verdad ya está inventado desde hace más de 15 años ¡¡Y YO LO HE USADO!!", y estaba pensando en ObjectStore y su cache forward cuya idea básicamente es que el servidor envía de forma asíncrona una parte de la base de datos a la memoria del cliente (de los clientes) y que no es exclusiva de ObjectStore.

Pero claro estamos hablando de bases de datos orientadas a objetos

* que no son nuevas (no nuevo=no molo)

* que encajan exactamente en el modelo de datos orientado a objetos sin impedancia con la base de datos (¿para qué si hay bases de datos sin esquema y mis aplicaciones son tan dinámicas que no uso esquemas basados en clases?)  

* que son particionables automáticamente pues cada dato persistente puede saber donde está físicamente el relacionado incluso en un archivo diferente (¿para qué si hay trucos tan ingeniosos como los números hash?. 

* gestionadas por empresas propietarias que están felices y contentas con sus nichitos de mercado

Con esto no quiero decir que las bases de datos orientadas a objetos sean una "gran opción", las empresas que hay detrás (Progress, Versant) quizás no se lo merezcan dado su enorme desinterés es favorecer su propio mercado (no hay más que ver como dbObjects de Versant ha casi desaparecido del mapa).

Volviendo al tema Gosling, ahora que resulta que la "tontería" de Gosling no es tan tonta y resulta que es una técnica madura y que funciona (aunque ni mucho menos en la versión simplona del ejemplo de Gosling), es cuando merece la pena repensar en reinventar la rueda y empezar a superar el modelo de cliente tonto relacional JDBC mero "forwarder" de cadenas SQL en el que hemos vivido tantos años y quizás pensar en una nueva generación de bases de datos verdaderamente transparentes que residan parcialmente en el cliente en donde una simple Collection.size() no suponga cargar toda la colección como ocurre en los inevitablemente tontorrones Hibernate y JPAs... quizás el nuevo Hibernate vendrá por la via de DataNucleus JDO...

Aunque lo siento para llenar ese hueco siempre me vienen a la mente bases de datos orientadas a objetos... ¡joder qué fijación!

 

domingo
may152011

Martin Odersky, padre de Scala, crea una compañía en torno al lenguaje

Martin Odersky, el padre del lenguaje Scala, ha anunciado que ha creado una compañía para proporcionar servicios y soporte en torno a un stack basado en Scala para construir aplicaciones. La compañía se llama Typesafe y según Martin va a seguir un modelo de negocio muy similar al de Red Hat.


El stack soportado por Typesafe incluye además de a lenguaje Scala (la versión 2.9), Akka 1.1 (un framework para construir aplicaciones distribuidas altamente concurrentes y de alto rendimiento), Simple Build Tool (sbt, una herramienta para simplificar la compilación de proyectos que empleen código fuente Java y Scala), y Scala IDE for Eclipse. El stack puede correr sobre Mac OS X, Linux y Windows, y requiere Java 6.


Todos los componentes del stack son opensource; la compañía se limitará a proporcionar soporte y servicios de formación y consultoría sobre ellos.

 

Este movimiento tiene todo el sentido del mundo teniendo en cuenta en la actualidad no había ninguna compañía similar, y eso a pesar de la gran cantidad de compañías de alto perfil que están actualmente usando Scala. Aquí tenéis unas cuantas sacadas de la web de Typesafe

 

 


Le deseo lo mejor a Martin Odersky con este proyecto. Si la compañía tiene en sí que produce dinero, sin duda el ecosistema de Scala se beneficiará de ello.

 

 

domingo
may152011

Resumen de la reunión de JUGs y OUGs con Oracle en Praga

Como ya sabéis los que nos seguís en Twitter, la semana pasada javaHispano (representado por un servidor) estuvo presente en una reunión de grupos de usuarios de Java (JUGs) y grupos de usuarios de Oracle (OUGs) en Praga. Esta reunión es un mecanismo que Oracle tiene para hablar con las comunidades de sus tecnologías/productos en Europa, Oriente Medio y África.


Esta es la segunda reunión de este tipo a la cual estamos invitados los JUGs. La primera, a la cual se invitó a un número muy reducido de JUGs, fue en octubre del año pasado en Bruselas. Como resultado de aquella reunión, los cinco líderes de JUGs presentes en ella escribimos una carta para informar a la comunidad de JUGs de lo que se había hablado allí, así como de las condiciones que los JUGs "poníamos" a Oracle para seguir asistiendo a esas reuniones y, en general, para que los JUGs colaborasen con ellos (la principal condición era que la oferta de Oracle estuviese abierta a cualquier JUG, incluso si éste está formado en torno a Groovy, Scala, Android o cualquier otra tecnología no bendecida por Oracle).


Oracle básicamente aceptó las condiciones, y por segunda vez se nos invitó a grupo considerablemente mayor (unos 40 JUGS, de los que finalmente fueron unos 20) a asistir a la reunión. La propia dinámica de la reunión cambió radicalmente desde la anterior vez basada en nuestro feedback. Una de las cosas que le habíamos dicho Oracle es que nosotros no somos usuarios de sus productos, y que por tanto presentaciones sobre sus productos nos interesan bastante poco. Queríamos tiempo para hablar entre nosotros ("unconferences"), y queríamos definir nosotros mismos buena parte de la agenda ("lightning talks"). Y efectivamente esta vez Oracle nos lo dejó hacer:

 

 


El resultado final fue un evento mucho más interesante, al menos por la parte JUGS. Pudimos compartir ideas, iniciativas que cada uno hace en su país, explicar los unos a los otros cómo gestionamos nuestras comunidades, qué herramientas usamos, qué actividades realizamos... cosas en las que aquí no me extenderé porque entiendo que no son de interés para la mayor parte de vosotros.


Cosas que sí son de un interés más general son algunos mensajes que Oracle nos dio durante la conferencia. El que más me gustó es una transparencia donde se estaban analizando las amenazas para el futuro de la plataforma Java. Y una amenaza era la mala reputación que Oracle tiene entre la comunidad. Me encantó la transparencia. Al menos veo que son conscientes del problema. Ahora toca resolverlo. Pero ser consciente del problema es el primer paso para resolverlo.


Este y otros detalles que tuvieron son casi la primer impresión positiva que Oracle me ha causado desde que compró Sun. Parece que se han dado cuenta de que están haciendo algunas cosas mal. No sé si es una consecuencia directa de lo que ha pasado recientemente con OpenOffice y Hudson. Pero son conscientes de que tienen que cambiar la forma de hacer algunas cosas. Siendo una de las principales cosas que necesitan dejar de pensar en "productos" (al menos por la parte que Java le toca) y comenzar a pensar en "tecnologías y comunidades".


Otro mensaje que Oracle nos dio es que ellos están muy preocupados por el hecho de que hace mucho tiempo que no hay una nueva versión de Java SE. Consideran esto como un punto débil de la plataforma, algo que ha hecho que se pierda, al menos parcialmente, el interés y el "buzz" en general sobre Java. De ahí el interés que tienen en sacar Java SE 7 rápido, y que decidiesen recortar características ("el plan B") para poderlo lanzar este año.


Y respecto a Java SE 7, que por cierto se va a lanzar el 7 julio, tienen intención de hacer una fuerte promoción que incluirá múltiples charlas locales en todos los países. Mandarán ponentes de gira por todo el mundo impartiendo charlas. De hecho, han quedado en coordinarse con nosotros para ver qué día conviene más para cada país/ciudad. Con casi total seguridad, aquí en Madrid tendremos algún ponente de Oracle a lo largo del mes de julio que nos vendrá a explicar las novedades de Java SE 7.


Una cosa que hemos pedido para futuras ediciones es que Oracle nos permita grabar lo que se habla allí (al menos la mayor parte de las cosas que se dicen) para luego poderlas publicar (seguramente en Parleys) y que todos vosotros tengáis acceso directamente a lo que allí ha sucedido, y no sólo acceso indirecto a través de los resúmenes que cada uno de los "líderes" hacemos para nuestra comunidad. En este sentido, muchas gracias a todos los que habéis hecho un RT del mensaje


Oracle, please, let us record what hapens in #eouc meetings!! (RT if you agree)


A pesar de no poder grabar lo que sucedía, lo que sí hicimos los presentes (especialmente los líderes de los JUGS, quienes tuvimos que enseñar a usar twitter a los líderes de los OUGs) es twitear todo lo que se decía. Podéis ver los tweets buscando el hashtag  #EOUC.


Os dejo aquí una foto del grupo de todos los "líderes" que asistimos al evento. Y a lo largo de esta semana haré un post en el blog de javaHispano con algunos detalles más acerca de la reunión.

 

 

viernes
may132011

James Gosling prefiere Hash Tables a bases de datos SQL

Durante la JavaOne Gosling en una entrevista dijo que:


“I've never got it when it comes to SQL databases. It's like, why? Just give me a hash table and a sh*tload of RAM and I'm happy.”


Mucha gente en ese momento pensó que él estaba defendiendo el uso de Hash Tables para sistemas donde la concurrencia la consistencia no eran críticas, y donde fundamentalmente se iban a realizar muchas lecturas y muy pocas escrituras. Sin embargo, más recientemente en el TheServerSide Java Symposium Gosling ha dejado claro que su preferencia por los Hoas Tables sobre las bases de datos no se limita a estos escenarios:


“When I talk to people that have  high performance, highly transactional systems, there’s often this embarrassed pause when I ask how they are doing these many, many, many thousands of transactions per second. And all too often the answer is that it’s a hash table with a lot of RAM and a log file. And people tend to not think of RAM and Hash Tables as a database; but it is, and it works really, really well. And it’s not not embarrassing."


Según Gosling, si uno puede permitirse el cargar todos sus datos en RAM, puede simplificar enormemente la arquitectura empresarial, dejar de necesitar un montón de servidores y, en general, simplificar considerablemente la infraestructura tecnológica de la empresa.

 

Resumiendo, parece que el movimiento noSQL tiene un defensor de bastante peso. ¿Qué opinais sobre las declaraciones de Gosling? 

 

 

miércoles
may112011

Google I/O: Google Music, Android Open Accesory y GAE sale del beta

Ayer inició el Google I/O 2011 en San Francisco. En este primer día Android ha sido el rey del evento, se ve que Google apuesta mucho por los usuarios móviles. En el keynote se dieron unas cifras que hablan de la importancia actual de la plataforma:

 

  • 100 millones de dispositivos Android activados
  • 400,000 nuevos dispositivos Android activados cada día
  • 200,000 aplicaciones gratuitas y de pago en el Android Market
  • 4.5 mil millones de aplicaciones instaladas a través del Android Market
  • 310 modelos diferentes de dispositivos Android

 

La keynote, que pudo ser seguida en vivo en el sitio, tuvo como momento más impresionante las demostraciones del nuevo API de Android: Android Open Accesory, la inbtegración de Android con Arduino que facilita integrar hardware con los móviles mediante USB. Entre los demos, hubo uno donde el usuario usando una bicicleta fija, controlaba un juego en su Android y otro donde los acelerómetros del móvil servían para controlar un juego real. 

Esta iniciativa se inscribe dentro de Android@Home el esfuerzo de Google para llevar Android a la domótica: controlar todos los dispositivos que se tienen en casa a través del móvil.

Además de Android, se anunciaron otros proyectos interesantes. El primero de ellos es que Google AppEngine saldrá de Preview este mismo año y dentro de los próximos meses. Para ello, se ha agregado soporte a Google Go, el lenguaje de programación creado por la empresa. Por lo que ahora GAE soporta java, python y Go.

Además se anunciaron cambios en las condiciones de uso de GAE, no se han dado cifras oficiales pero ya se anunció que las cuotas para la versión gratuita disminuirán. Además se anunciaron 3 esquemas de precios:

 

  • Gratuito, como el de ahora pero con menores cuotas.
  • Pagado. Se paga USD $9 al mes por aplicación más las cuotas usadas.
  • Premium. Se paga por empresa y no por aplicación.

 

Otra noticia importante, la disponibilidad de Backends. Hasta ahora las aplicaciones GAE corren sobre instancias dinámicas controladas por Google, con Backends se le asignará al usuario un Backend: un servidor con los recursos que haya especificado (memoria, cpu, disco, etc) con una ip que no cambia. 

Por último, se anunció un nuevo servicio de Google:  Google Music. Un servicio que permite subir a la nube tu música para poder escucharla por streaming en cualquier ordenador o en tu móvil android.  Por ahora el servicio está en Beta solamente en Estados Unidos. 

Todas las sesiones se han grabado y las puedes ver en el canal de YouTube.