viernes, 27 de noviembre de 2009

Cassandra DB: ¿Qué tienen Facebook, Twitter y Digg en común?

Cassandra DB: ¿Qué tienen Facebook, Twitter y Digg en común?
Conferencia Rails 2009: Pablo Delgado

Probablemente a la charla a la que le he sacado mayor partido ha sido a la de Pablo Delgado sobre Cassandra, el motor de bases de datos key-value desarrollado por dos ingenieros de Facebook para gestionar su ingente cantidad de datos repartidos entre 140 servidores.

De entre la gran cantidad de cosas que ofrece podemos resaltar que almacena los registros de forma continua y ordenados en column families, de forma que se consigue aunar las ventajas de acceso del almacenamiento por filas con el de columnas.

Este modelo de datos te permite definir supercolumns, es decir, columnas de columnas, para guardar datos ordenados y simplificar búsquedas muy comunes, con un precio, eso sí, el de tener que saber a priori cual es esa búsqueda para poder almacenar los datos ordenados en base a las keys que nos interesen.

El balanceo entre consistencia y latencia es configurable según nos interese más integridad en nuestros datos o alto rendimiento en las peticiones, ¿qué quieres potenciar, rápidez o seguridad?

Pero lo que más me ha impresionado es su alta escalabilidad y la gestión distribuida de los datos entre servidores. Cassandra permite añadir nodos a la base de datos de forma horizontal, es decir, lo añado y se acopla, sin más, se añade un nodo al cluster y ya se encarga el sistema de replicar los datos y mantener la consistencia. Si pasa lo contrario, que quitamos o perdemos un nodo de un cluster también se recompone automáticamente para sostener la caída de ese servidor.

Consistent Hashing, así gestiona el uso de nodos para grabar u obtener datos y seleccionar el nodo que almacenará la información en primer lugar, para luego replicar los datos al resto de servidores. La idea consite en que se sitúan todos los nodos en el perímetro de una circunferencia en la que la posición la define un valor entre 0 y 1, y a partir del valor devuelto por una función que calcula valores en este rango, y que puede ser aleatoria o no, se decide que nodo va a atender la lectura o escritura solicitados. Una vez escrito el registro, el nodo se sincroniza con el siguiente, y éste a su vez con el siguiente, así hasta que todos han sido actualizados.

Si nos obsesiona la pérdida de datos en las escrituras podemos definir factores de replicación que indican el número de nodos que utilizaremos para grabar claves replicadas concurrentemente, esto nos permite sostener la caída de algún nodo que se ha modificado pero que no ha tenido tiempo de sincronizar sus actualizaciones con el siguiente, ya que existen otros que también almacenaron el dato que se evaporó con el servidor caído.

En esta línea también soporta autoreparado de datos inconsistentes tras una consulta. Esto es, devuelvo lo que me piden y aviso al resto para que me sincronicen, si el dato estaba mal se corrige, con lo que los datos más consultados siempre son consistentes.

En resumen, una herramienta poderosísima y OpenSource, no cabe duda de que hay que probarla.

Alternativas a Rails para sitios y servicios web ultraligeros

Alternativas a Rails para sitios y servicios web ultraligeros
Conferencia Rails 2009: Raúl Murciano


Muy interesante charla sobre herramientas alternativas a Rails para sitios y servicios ligeros.

Uno de los principales problemas de Rails es el alto consumo de memoria que tiene, por lo que no es apropiado para servicios rápidos o sitios de funcionalidad simple. Su sistema de dispatching es demasiado costoso, es el precio de la facilidad de desarrollo.

Como solución aparecen frameworks ligeros que actúan como filtros sobre el controlador de acciones de Rails para responder peticiones sin tener que pasar por él.

Para implementar filtros existe Rack, un componente de Rails que define un interfaz para que cualquier clase que la cumpla actue saltando el controlador del framework y devuelva directamente una respuesta a una petición, esto permite la creación de frameworks ligeros.

Existe una utilidad llamada Rails Metal para generar filtros basados en Rack.

Un ejemplo de framework ultraligero basado en Rack es Sinatra, pensado para aplicaciones pequeñas, casi de bolsillo, algunas incluso de un único fichero, lo que se busca es la velocidad de respuesta y mínimo consumo de recursos.

Como conclusión, no hay herramientas definitivas, cada necesidad tiene un forma óptima de solucionarse, usa la herramienta adecuada para cada cosa.

jueves, 26 de noviembre de 2009

Key Value Stores. Conviértete en Jedi Master

Key Value Stores. Conviértete en Jedi Master
Conferencia Rails 2009: Pablo Delgado, Antonio Garrote y Mauro Pompilio


Charla sobre bases de datos clave-valor, en las que podemos almacenar estructuras variables de datos, es decir, no se basa en registros definidos por campos estáticos, sino que nos permite almacenar lo que queramos en la forma clave y valor de la clave.

Existen varias herramientas que soportan este tipo de almacenamiento de datos, algunas son:

CouchDB: es un motor key-value orientado a almacenamiento de documentos y pensada para aplicaciones web. Soporta control de versiones entre documentos de varias instancias. Es simple de usar aunque tiene un problema serio de velocidad, provocado porque es mucho más que una base de datos, permite incluso definir aplicaciones sencillas.

Redis: Proyecto bastante reciente, aunque ya existe una versión disponible aún está en desarrollo. Funciona como memcache pero persistente en disco.

Cassandra: DB nacido en Facebook. Es un híbrido entre Dynamo (Amazon) y Bigtable (Google). Es un sistema todoterreno que ofrece un rendimiento muy aceptable para distintos tipos de situaciones.

Las bases de datos key-value no se plantean como sustitutos de las bases de datos relacionales, sino como alternativa a problemas que no solucinan estas últimas, como el almacenamiento de objetos con atributos variables dinámicamente. Lo que sí ofrecen es una solución a la replicación y distrubución de gran cantidad de datos.


Flying Robot: Vehículos Aéreos Autónomos hechos con Ruby y Arduino


Flying Robot: Vehículos Aéreos Autónomos hechos con Ruby y Arduino
Conferencia Rails 2009: Ron Evans

El espectáculo comenzó con un globo en forma de zeppelin con cámara incorporada dando vueltas por el salón de actos y controlado a distancia por Ron Evans desde su Mac, desde donde también mostraba las imágenes del recinto que enviaba el ingenio aéreo.


El globo está gobernado por un circuito de hardware libre conocido como Arduino y en el que reside una aplicación Ruby generada con Flying Robot, un framework de desarrollo de aplicaciones para vehículos aéreos autónomos.

Es tan sencillo de utilizar que Ron Evans generó una aplicación durante la exposición, la envió al circuito y mostró como podía gestionar el aparato con ella.

Muy fresca y amena charla sobre aplicaciones del software y hardware libre, en este caso a la gestión autónoma de vehiculos.





Rubyspec y el largo camino hacia Ruby 1.9

Rubyspec y el largo camino hacia Ruby 1.9
Conferencia Rails 2009: David Calavera

Rubyspec ha sido presentado por David Calavera. Es un formato para definir especificaciones basado en el framework para definición de especificaciones Mspec. Ha sido concebido para poder crear una especificación de la funcionalidad de Ruby, principalmente para saber que el lenguaje cumple efectivamente las especificaciones que se le definen, pero con el doble objetivo de mostrar claramente al programador qué hace Ruby en cada comando de cada versión. En definitiva se trata de evitar la ingeniería inversa para saber cómo funciona el lenguaje.

Aún queda mucho trabajo de especificación por hacer, así que si te apetece puedes animarte a hacerlo.

Respecto de la nueva funcionalidad que aporta Ruby 1.9 no voy a comentar mucho, básicamente porque no conozco Ruby ni en sus versiones anteriores. Resaltar simplemente, y porque lo resalta David, que el soporte de encoding está muy mejorado.


La herramienta de desarrollo definitiva

La herramienta de desarrollo definitiva
Conferencia Rails 2009: Javier Ramírez

Javier Ramírez plantea que Rails no es la herramienta definitiva para el desarrollo de proyectos, sino el programador y
su actitud y capacidad a la hora de encarar un proyecto, independientemente de la herramienta que se utilice, algo que
como desarrollador de PHP se agradece oir de alguien que usa Rails. Somos de la misma idea, un mono usando Rails
sigue siendo un mono, por muy cool que sea decir que lo usas, al igual que no dejaría de ser mono por usar PHP o Java.

Nos muestra como ha evolucionado la forma de abordar proyectos hasta llegar al Manifiesto Agil.

Javier comenta el problema del desfase entre la Universidad y las técnicas actuales de desarrollo que se usan en el día
a día. Además insiste en que no se enseña a interpretar si un código es bueno o malo, a ver qué y cómo hacen las cosas
otra gente, y solo se basan en las reglas para programar. El valor importantísimo del autoaprendizaje y el reciclaje
personal, el interés propio en ver que se cuece por ahí afuera.

Comparto su idea de especialización, en actualizarte continuamente en lo que seas bueno, en intentar llegar a un punto
en el que seas capaz de aportar valor, como programador, analista o cualquier perfil que tengas.

En cuanto a Rails, Javier lo ve como una herramienta que tiene un factor humano enorme porque su código es legible y
abordable, y ha aprendido de sus errores y facilita la contribución externa. Como curiosidad, de cada 7 personas en
la Conferencia Rails 2009 una ha contribuido a Rails, el framework es de los que lo usan.

Una exposición brillante, clara, directa y pedagógica tanto para la comunidad Rails como para cualquier desarrollador
sea cual sea la tecnología que use.

Rails 3

Rails 3
Conferencia Rails 2009: Yehuda Katz

Continuamos en la Conferencia Rails 2009, este segundo día, al igual que el tercero se compone de charlas de 45 minutos.

En la primera Yehuda Katz ha presentado un keynote sobre lo que será Rails 3. Esta nueva versión nace del reencuentro entre Merb y Rails, por lo que ambos vuelven a caminar juntos.

Como principal novedad nos presenta mucha más modularidad en cuanto a los distintos componentes del framework. Algo de lo que carecía Rails hasta ahora era la posiblidad de sustituir distintos componentes que venían integrados, esta nueva versión acaba con esa limitación, incluyendo un core básico al que se le pueden "enchufar" módulos según gustos, como por ejemplo el motor de persistencia que nos interese.

Otra mejora considerable está en el rendimiento de todos los actores: render, dispatch de acciones, querys y persistencia, en general todo ha experimentado una importante disminución en los tiempos de ejecución, lo que no queda claro es si también lo ha hecho en consumo de memoria, algo de lo que se quejan los desarrolladores que usan Rails.




miércoles, 25 de noviembre de 2009

Taller de testing sin escribir tests con Cucumber y MundoPepino

Taller de testing sin escribir test con Cucumber y MundoPepino
Conferencia Rails 2009: Raimond García y Fernando García Samblas









Último taller del día, y vamos cuatro, en este caso sobre testing, la verdad es que se agradece lo ameno que lo han hecho Raimond y Fernando, ambos García, curioso que cuatro de los cinco ponentes del día se apelliden García.

Cucumber es una herramienta de testing para Ruby, es decir, de generación de test para aplicaciones, o lo que es lo mismo scripts de prueba automática para aplicaciones. La idea es que sean legibles en lenguaje natural para facilitar la comprensión de lo que realmente hace el test.

El problema del testing es que existen múltiples formas de llamar a las accciones en lenguaje natural, o simplemente se dice de forma distinta en idiomas distintos, lo que hace muy tedioso la construcción de test. MundoPepino trata de solucionar el problema "acabando con la democracia", como dice Raimond, o lo que es lo mismo proporcionando una normalización y estandarización a partir de convenciones en la creación de test.

Muy buen taller, aunque en algún momento se ocupó mucho tiempo en crear el código de la aplicación a testear. Ha sido una estupenda iniciación al mundo del testing.

Taller de HAML y SASS

Taller de HAML y SASS
Conferencia Rails 2009: Pedro Villalba


Continuamos en los talleres de la Conferencia Rails 2009.

En la sesión de tarde hemos empezado con el taller del gestor de plantillas html HAML, el equivalente en Ruby a los gestores para PHP Smarty o HTML_Sigma.

Dispone de helpers, al estilo de los que se usan en los View Templates de CakePHP, que ofrecen funciones para generación de tags html. Facilita la legibilidad de las vistas html, bueno básicamente ofrece lo mismo que cualquier gestor de plantillas html pero para aplicaciones Ruby.

Como curiosidad comentar que existe una utilidad Html2Haml, que como su nombre indica convierte HTML a código HAML.



SASS es al CSS lo que HAML al HTML. Proporcionando nueva funcionalidad como la definición de variables o incorporación de código, por ejemplo, para cálculo dinámico de colores o tamaños.

Al igual que HAML hace con los ficheros html, SASS genera dinámicamente los ficheros css a partir de los ficheros con código SASS que hayamos definido.

También permite modularidad. Para evitar la duplicidad y redefinición de tags es posible definir para qué acción de qué página queremos aplicar un estilo.

Taller de Capistrano


Taller de Capistrano
Conferencia Rails 2009: Rafael García

El segundo taller del día es sobre Capistrano una herramienta que comentamos antes. Capistrano es un desplegador de aplicaciones con control de versiones.


Proporciona múltiples comandos para definir la estructura de nuestra aplicación y cómo queremos que se despliegue en la máquina host.

Soporta git y subversion por lo que nos permite volver a versiones anteriores del código en caso de catástrofe o simples bugs en nuestra aplicación. Una cosa, he dicho versiones anteriores del código, no piensen que lo aguanta todo, como bien apunta Alberto Perdomo, como hagas una actualización de la BBDD y luego reviertas el código prepara café porque la noche será larga. Así que tenemos que tomar algunas medidas preventivas antes de utilizar el rollback, y una de ellas es hacer copia de la base de datos si su envergadura lo permite, para poder restaurarla si necesitamos acudir a un release anterior de nuestra aplicación.

Hay quien lo usa para tareas de sistemas pero no está concebido para eso, ya existen otras herramientas como Puppet o Chef bastante más eficientes para esas tareas.

Taller de Chef

Taller de Chef: Administra sistemas como Ferrán Adriá cocina
Conferencia Rails 2009: Jacobo García

Comienza mi incursión en el mundo
Ruby On Rails con un taller sobre Chef, un framework para configuración y automatización de instalaciones de servidores Linux, al estilo Puppet, pero escrito en Ruby.

Ist1_11021441-chef-being-showered-with-flour

"Administra sistemas como Ferrán Adriá cocina", así de presuntuoso es el título de la charla, y la verdad es que puede serlo.

Imagínense 60 servidores cada uno con sus particularidades, unos compartiendo configuraciones de herramientas con otros, algunos con configuraciones exclusivas y otros exactamente iguales entre sí, pero todos administrados desde la misma herramienta, eso es Chef.

Chef tiene estructura cliente-servidor, como no, necesitamos instalar un servidor de Chef en el que definimos nuestras recetas de configuraciones de instalaciones, p.e., la receta para instalar PHP, MySQL, PostgreSQL, Apache o un servidor de correo. Estas recetas se agrupan en roles que podemos aplicar a nuestros clientes. De forma que desde nuestra máquina cliente en la que previamente hemos instalado un cliente Chef, solicitamos un rol al servidor y éste se aplica, instalando todas las recetas que definen el rol solicitado.

Una curiosidad que tiene es que el mismo cliente está incluido por defecto como recetas del servidor, por lo que se puede instalar solicitándoselo a éste último.

Una de las funcionalidades más reseñables de Chef es que él se encarga de identificar la máquina y la distribución de Linux que tengamos instaladas y selecciona los paquetes apropiados para cada herramienta que hayamos definido en las recetas.

Otra cosa a valorar es su integración con Capistrano, un desplegador de aplicaciones muy usado en el mundillo.

No soy administrador de sistemas, pero no dudaría un segundo en meterle el diente a Chef si tuviera que administrar máquinas virtuales con servidores personalizados según las necesidades de la aplicación o aplicaciones anfritionas.

Como siempre atomizar permite personalizar y, sobre todo, automatizar las tareas, en este caso de instalación de herramientas para servidores web.




jueves, 19 de noviembre de 2009

Conferencia Rails 2009

¿Qué es Rails?

Es un framework para la web escrito en el lenguaje de programación Ruby que permite realizar aplicaciones web de un modo ágil.

¿Conferencia Rails?

Reunión anual de los desarrolladores y empresas de habla hispana que trabajan con Ruby on Rails. El objetivo de la conferencia es difundir este framework y poner en contacto a profesionales del sector.

¿Cuándo se celebra?

La conferencia será los próximos días 26 y 27 de noviembre . El día 25 serán los talleres.

¿Dónde?

En el centro "El Madroño" en Vicálvaro (mapa). Los talleres en el centro Madrid On Rails (mapa). Puedes encontrar los detalles en nuestra página de FAQ.

Programa Festival de Publicidad Interactiva INSPIRATIONAL LIVE

Programa Festival de Publicidad Interactiva INSPIRATIONAL LIVE

miércoles, 18 de noviembre de 2009

viernes, 6 de noviembre de 2009