Buscar
Social
Ofertas laborales ES
lunes
ene102011

¿Sitios Web Single Page Interface Céntricos Servidor prácticamente sin estado? ¿Bromeas?

En TheServerSide.com he publicado un artículo sobre como es posible construir sitios web céntricos en el servidor que sean prácticamente sin estado.

Para facilitar su lectura lo escribo también en español.

El Single Page Interface (SPI) es un paradigma del diseño web que promueve que cualquier sitio web (o aplicación web) puede funcionar completamente en la misma página sin recarga, preservando el SEO, con soporte de botones atrás/adelante (navegación por la historia en general). SPI soluciona muchos problemas de la navegación basada páginas y proporciona una experiencia más rica del usuario, el paradigma de SPI es ya habitual para las aplicaciones web… ¿porqué no para los SITIOS WEB? El Manifiesto Single Page Interface muestra algunas ideas técnicas de cómo alcanzar este objetivo para sitios web.

Mucha gente piensa que SPI implica toneladas de código a medida de Javascript (es decir un enfoque cliente-céntrico), hay dos razones genéricas:

  1. RIA = Javascript
  2. Debido a que los enfoques céntricos en el servidor necesitan mucha memoria en el servidor pues el estado visual es gestionado en el servidor, asumible en aplicaciones web pero no en sitios web.

La primera declaración es parcialmente verdad, por supuesto RIA implica el uso extensivo de Javascript, pero RIA no implica cliente-céntrico.

RIA es:

  1. Un sitio web bonito: es decir HTML, CSS e imágenes bonitas, nada que ver con Javascript
  2. Cambios de la página parciales sin recarga de página: implica Javascript, pero el Javascript se puede servir desde el servidor
  3. Cambios bonitos en la representación visual conducidos por los movimientos del ratón y cambios visuales temporizados (generalmente movimientos y cambios de opacidad): apenas suponen cambios en los atributos class y style de los elementos. Ciertamente esta clase de efectos visuales no se pueden procesar en el servidor, una librería JavaScript adecuada para este fin puede ser muy útil, ¿pero estos efectos visuales implican necesariamente un enfoque cliente-céntrico del sitio web/aplicación?

La segunda razón, la necesidad de mucha memoria en el servidor en los enfoques server-centric, es mucho más difícil de refutar.

El manejo de un sitio web complejo SPI equivalente a centenares de páginas es extremadamente difícil con un enfoque cliente-céntrico, debido a la debilidad de Javascript, a problemas de seguridad, a la necesidad de puentes a medida de comunicación cliente-servidor, en el mejor de los casos será necesaria la colaboración del servidor. Todo podría ser más fácil si el sitio web se cargara completamente en memoria, pero como se puede suponer este acercamiento no es práctico y consume innecesariamente mucha memoria en el cliente y ancho de banda.

La alternativa es un enfoque céntrico en el servidor.

Los sitios web SPI es un tema muy nuevo y casi huérfano en tecnología web, más aun céntrico en el servidor, es muy difícil encontrar una tecnología capaz de proporcionar gran flexibilidad, amigable con los botones atrás y adelante y compatible SEO.

Es difícil pero no imposible, ItsNat desde hace tiempo se ha especializado en este paradigma emergente aplicado a sitios y aplicaciones web.

Cuando desarrollaba este sitio web SPI demostrativo tuve mucho cuidado con usar la menor memoria posible en el servidor, apliqué las mejores técnicas proporcionadas por ItsNat para este fin:

  1. Cacheado de zonas estáticas del HTML: si una zona es estática, es decir, no se requiere renderizar con datos dinámicos de ninguna clase, esta zona puede ser declarada como cacheable en plantillas (de tipo página o fragmentos), las zonas cacheadas están ausentes  en el servidor porque se comparten entre los usuarios como texto serializado (no DOM), ItsNat envía al cliente estas zonas cacheadas cuando se necesita.
  2. Uso de listeners/eventos definidos por el usuario globales para evitar que los elementos pulsables se reflejaran en el DOM servidor como alternativa a registrar mouse event listeners en cada uno ellos (el enfoque más simple y más puro serrvidor-céntrico de ItsNat).

A pesar de las técnicas anteriores, algunos estados consumían mucha memoria, por ejemplo la lista de televisiones LCD, esta lista se debe renderizar en el servidor con los datos extraídos de una base de datos (simulada). Como esta zona es renderizada con datos dinámicos no puede ser estática, aunque se hayan usado user events en los links que sirven para mostrar los detalles del producto.

Me di cuenta de que esta lista de modelos de TV no iba a ser utilizada más adelante tras su renderización en el servidor y envío al cliente, como mucho este sub-árbol DOM será substuido más adelante completamente cuando se cargue un nuevo estado de la página.

¿Qué pasa si eliminamos los subárboles DOM que ya no van a ser utilizados más pero sólo en el servidor para ahorrar memoria?

De la respuesta a esa pregunta nació la característica más interesante de ItsNat v1.1. Desde esta versión es posible eliminar manualmente sub-árboles DOM que se considera que ya no van a ser modificados (es decir pasan a ser estáticos) con una simple llamada. La misma zona en el cliente permanecerá intacta y podrá modificarse libremente sin el problema de la desincronización cliente-servidor.

La desconexión es reversible, simplemente añadiendo un nuevo nodo en el servidor al nodo padre de la zona desconectada y la zona correspondiente del cliente se sincronizará de nuevo con el servidor o bien a través de una llamada a este método.

Esta nueva característica fue aplicada a la demo, el sitio web resultante es fundamentalmente siin estado y al mismo tiempo céntrico en el servidor y Single Page Interface.


 

lunes
ene102011

Cassandra 0.7 publicado

Acaba de publicarse la versión 0.7 de la base de datos distribuida NoSQL Cassandra.

Cassandra es una base de datos cuya principal caracteristica es que puede crecer indefinidamente, ya que es totalmente distribuida, pudiendo incluir nuevos nodos en cualquier instante, y balanceando almacenamiento y consultas entre todas ellas. Su modelo de datos es a grandes rasgos un hash de un conjunto de atributos:valor.

Entre las principales mejoras de la versión 0.7 se encuentran:

 

  • El poder dar de alta Keyspace (Equivalente a esquemas) y ColumnFamily (El equivalente a nuevas tablas), dinámicamente. Hasta ahora, debían definirse en ficheros de configuración.
  • Permite definir en las ColumnFamily, las características de algunos atributos en concreto, como el tipo de datos. Por defecto los valores de cassandra son byte[].
  • Permite definir atributos en concreto para ser indexable. Hasta ahora solo se podía buscar por la clave hash de cada entrada.

 

 Estos cambios además se pueden trastear con la aplicacioncita de línea de comandos que trae, por lo que os podéis hacer una idea del modelo de datos que soporta.

Es interesante además seguir el desarrollo de dicho proyecto, por las funcionalidades que están pensando en el futuro. La más interesante a mi entender es que se están planteando un lenguaje de consulta para atacar a la base de datos, que ahora se hacer forma totalmente programática. 

 

Enlace al proyecto. 

lunes
ene102011

Amazon lanza el developer program su Android App Store "curada"

Tal y como habían anunciado en octubre del año pasado, Amazon se está preparando para lanzar su Android App Store "curada". Y el primer paso es atraer a desarrolladores a partir de su Amazon Appstore Developer Program, programa que acaba de anunciar.


A diferencia de la tienda de Google, Android Market, en la tienda de Amazon habrá un proceso de veto y revisión de aplicaciones. Actualmente en la tienda de Google cualquiera puede subir su aplicación sin ningún proceso de veto. Cuando hay quejas relativas a alguna aplicación a veces Google elimina la aplicación. Pero inicialmente no hay ningún tipo de filtro.


Esto tiene una doble desventaja. Por un lado, hay muchas aplicaciones de poca calidad en la tienda por tener una barrera muy baja de entrada; muchas aplicaciones de baja calidad hace más difícil encontrar las aplicaciones buenas. Por otro lado, nadie nos garantiza que las aplicaciones no se portan mal y, por ejemplo, nos espíen. La ventaja es que esa fricción cero para publicar contenido en la tienda fomenta la participación de los desarrolladores.

 


Amazon, sin embargo, está apostando por un modelo muy similar al de Apple. Habrá un proceso de revisión para las aplicaciones, y los desarrolladores tienen que pagar una tasa anual de 99 $, que les permite enviar un número ilimitado de aplicaciones a la tienda (ya no hay fricción cero). Las buenas noticias a este último respecto es que durante este primer año Amazon elimina esa tasa, siendo gratuito.


Se pueden publicar aplicaciones gratuitas y de pago; para estas últimas se realizará el típico reparto de dinero 70% para el desarrollador y 30% para Amazon. Por ahora no está claro cuáles son exactamente las guías que se aplicarán en la revisión de aplicaciones, pero aparte de buscar aplicaciones que comprometan la privacidad del usuario, todo el mundo espera que no permitan cosas como pornografía.

 

 


Esta tienda tiene un gran potencial. Por un lado, se trata de una tienda construida por una compañía que no es una teleoperadora y por lo tanto es completamente agnóstica respecto a las aplicaciones y a la red en la cual se encuentra el cliente. Por otro lado, Amazon.com tiene una cantidad brutal de tráfico. Poner un enlace en la portada de Amazon.com a esta tienda (algo que seguro harán en algún momento) dirigirá una cantidad enorme de tráfico hacia las aplicaciones de la tienda. Poner anuncios en la portada de Amazon.com es precisamente lo que hace que a día de hoy el Kindle sea el eReader más vendido.


¿Cuántos de vosotros habéis enviado alguna aplicación de Android al Market de Google? ¿Tenéis intención de enviar la también a la tienda de Amazon?

domingo
ene092011

ItsNat v1.1, Nodos desconectados en servidor, mayor a tolerancia a JavaScript cliente

ItsNat v1.1 ayuda aun más la construcción de la siguiente generación de sitios web "Server-Centric Single Page Interface", salvando más memoria en el servidor y aumentando la tolerancia a librerías externas y extensiones de navegadores basadas en JavaScript.

Esta versión introduce las siguientes mejoras:

* Nodos desconectados del cliente: esta característica, complementaria al cacheado de subárboles DOM estáticos proporcionado por los templates, permite eliminar nodos en el servidor pero no en el cliente ahorrando memoria en el servidor, pudiendo el subárbol DOM cliente ser modificado libremente. Esta técnica está pensada para cuando se necesita renderizar un subárbol DOM (por supuesto en el servidor) y no va a ser cambiado más (si acaso será reemplazado por otro). La desconexión es reversible (el cliente se sincroniza de nuevo con el servidor) llamando a un método o añadiendo un nodo hijo al nodo cuyo contenido fue desconectado. Esta característica junto con el uso de user events permite el desarrollo de sitios web server-centric Single Page Interface prácticamente sin estado visual en el servidor como demuestra este ejemplo. Por otra parte la libertad de utilizar el DOM cliente libremente en las zonas desconectadas otorga más opciones a la programación híbrida server-centric y client-centric.

  - Nuevos métodos relacionados:

   ItsNatDocument.disconnectChildNodesFromClient(Node)
   ItsNatDocument.reconnectChildNodesToClient(Node)
   ItsNatDocument.isDisconnectedChildNodesFromClient(Node)

  - Demo de esta nueva característica en el Feature Showcase.

*  Mayor tolerancia a nodos "intrusivos" insertados entre HEAD y BODY por parte de librerías JavaScript (normalmente extensiones de navegadores). En previas versiones de ItsNat estos nodos eran automáticamente eliminados (en esta versión son "tolerados").

* Mayor tolerancia a nodos "intrusivos" insertados en el final de HEAD y BODY por parte de librerías JavaScript y extensiones de navegadores. Estos lugares son los habituales en donde las librerías JavaScript insertan nodos auxiliares. En versiones previas de ItsNat sólo los elementos introducidos por FireBug eran tolerados.

* Aumento de la velocidad de proceso en el servidor detectando situaciones en donde innerHTML puede ser usado para una aumento de rendimiento y reducción de código JavaScript enviado.

* Soporte oficial del navegador de BlackBerry JDE 6.0 (Torch 9800) a pesar de que ya funcionaba en v1.0. Este navegador está basado en WebKit y es muy diferente (técnicamente) a las versiones anteriores.

* Soportado SVGWeb 2010-08-10 (Owlephant), versiones previas no son ya soportadas. ItsNat también resuelve un bug de SVGWeb: los listeners de eventos no son correctamente eliminados en removeEventListener.

* Resuelto el bug (regresión): los eventos en Batik SVG applet no funcionan.

* Solución a un bug de Chrome:  Event.timeStamp no es un entero en Chrome.

* Cambios en el Manual de Referencia:

   - Añadido "6.23 SAVING SERVER MEMORY: DISCONNECTED NODES".
   - Debido a la mejorada tolerancia a modificaciones DOM hechas en el cliente por código JavaScript no ItsNat, el capítulo "6.42 EXTERNAL JAVASCRIPT LIBRARIES AND BROWSER EXTENSIONS" ha sido re-escrito.

Release Notes

Web: http://www.itsnat.org
Online demo: http://www.innowhere.com:8080/itsnat/
GAE demo: http://itsnatfeatshow.appspot.com

 

jueves
ene062011

JBoss anuncia JBoss AS 6.0 GA

JBoss acaba de anunciar JBoss AS 6.0 GA. Esta versión del servidor de aplicaciones es la primera versión estable del servidor de aplicaciones que implementa el perfil web de Java EE 6, y es el segundo servidor de aplicaciones después de Glassfish en obtener la certificación oficial de Java EE 6. 


Entre las novedades se encuentran una mayor flexibilidad para elegir entre distintas implementaciones de JSF. Por defecto, el servidor viene con Mojarra 2.0, pero simplemente editando un descritor de despliegue podemos elegir otras implementaciones.


JBoss Cache ha sido reemplazado por Infinispan, y la versión de Hibernate ha sido actualizada a 3.6.0. JBoss 6 también incluye la librería de colecciones Google Guava, así como RESTEasy para la creación de servicios web. Por último, el servidor de aplicaciones es completamente compatible con IPv6, algo que resulta especialmente interesante teniendo en cuenta que se prevé que en torno verano de este año se termine completamente el espacio de direcciones IPv4.


¿Cuantos por aquí empleais JBoss?