lunes, 31 de mayo de 2010

Key-value data stores

Estuve leyendo un poco sobre Redis, que es un "key-value store", o traducido al español, una base de datos no relacional que almacena pares de {clave, valor} de forma persistente.

Parece muy interesante, seguramente sea una muy buena alternativa a bases de datos relacionales para algunas aplicaciones particulares, una herramienta más a tener en cuenta al momento de diseñar una aplicación.

En la documentación definen lo que es un "key-value store" como
The essence of a key-value store is the ability to store some data, called value, inside a key. This data can later be retrieved only if we know the exact key used to store it. There is no way to search something by value.
Tienen un ejemplo, donde construyen un clon de Twitter usando solo Redis como base de datos y PHP como lenguaje. Está interesante, sobre todo para ver algunas cosas que cambian con respecto al diseño con bases de datos relacionales. Por ejemplo, cuando hay un nuevo "follower", guarda la relacioón "followed <-> follower" de forma redundante, para poder llegar por cualquiera de los dos lados, ya que no se puede buscar por valor.

Actualización, 11:20am: Me acabo de dar cuenta que este es el post número 200!

viernes, 7 de mayo de 2010

Sobre periodismo y desinformación

El otro día andaba circulando en las redes sociales un artículo de BBC Mundo sobre los impuestos en Uruguay.

El artículo cita algunos datos y números que seguramente sean ciertos, como por ejemplo que:
  • pagamos impuesto a la renta y tenemos un IVA del 22%, según dice uno de los más altos del mundo
  • el 49% del precio de los autos nuevos son impuestos
  • el impuesto a un inmueble de U$S100.000 en Montevideo es 6 veces más alto que en París.
Sobre el último punto en particular quería comentar. Cito textualmente:
Un estudio comparativo indicó que mientras que alguien que posee una vivienda valorada en US$100.000 paga el equivalente a US$200 por concepto de impuestos inmobiliarios en París, US$440 en Milán y US$551 en Madrid, en Montevideo la cifra asciende a US$1.200.
Lo que el artículo no dice, que creo que es fundamental, es qué se puede comprar por esa plata en Montevideo y en París. Para buscar un ejemplo, en realidad voy a usar otro valor: U$S140.000 que es aproximadamente €100.000.

En Montevideo, por ese monto, se puede conseguir por ejemplo, una casa de 3 dormitorios con 110m2 edificados en 500 de terreno, o un apartamento en Malvín (uno de los barrios más lindos de Montevideo) de 2 dormitorios de 70m2 o más. Fuente: buscandocasa.com

¿Qué se puede coneguir en París? Un estudio (monoambiente) de 15m2 , con suerte... Fuente: pap.fr.

Para conseguir un apartamento de 70m2 en París, hay que pagar €550.000. Fuente: pap.fr. Ni que hablar de una casa de 110m2, que vale más bien cerca del millón de euros.

Entonces no es cierto que en Montevideo se paguen 6 veces más. Y la omisión de esta información no es para nada despreciable. O el periodísta ignoraba este dato, con lo cual es peligroso, o lo conocía y lo omitió, con lo cual es muchísimo más peligroso (hasta podríamos decir que fue manipulador).

Conclusión: hay que tener cuidado con las cosas que se leen, que no por provenir de un medio "serio" quiere decir que sea toda la verdad.

miércoles, 5 de mayo de 2010

Resumen del CloudCamp Montevideo

En el día de ayer se llevó a cabo el CloudCamp Montevideo 2010, del cual intenté hacer un seguimiento en vivo. Pueden ver los comentarios en la nota anterior, o directamente en Google Wave. El wave sigue vivo, por lo que se pueden hacer comentarios ahí.

Lo que me faltó cubrir ayer fueron los open spaces. Del primero ya dije algo, después se comentaron también las distintas alternativas y en que categoría entra cada una (IaaS, PaaS o SaaS).



El segundo open space que estuve (hubo otro en paralelo sobre seguridad) se habló de bases de datos NoSQL. En realidad Dave Nielsen estuvo contando un poco la motivación, poniendo como ejemplo un sitio que tiene que escalar, entonces el primer paso es separar el código y la base de datos en distintos servidores para poder tener más instancias atendiendo pedidos de los clientes, y yendo todos a la misma DB. El tema se complica cuando hay que escalar la base de datos, se puede poner un servidor más grande, pero también tiene un límite. Entonces de ahí surgen las distintas ideas de como almacenar esos datos en repositorios que no son relacionales.


En el último open space la gente de Microsoft estuvo contando la arquitectura y los distintos componentes de Azure. Creo que lo mejor es que a quien le interese lo vaya a leer en el sitio de Azure, no vale la pena que lo explique yo que puedo haber entendido cualquier cosa.

Ahora algunos comentarios sobre el evento en sí, sin ningún orden particular.

Fue en la parte nueva de la Facultad de Ingeniería, el llamado (según dicen) "Aulario Faro". Nunca había entrado, y la verdad que está bueno. Todos los salones con PC y proyector colgado del techo, y sillas bastante más cómodas que las que había (o hay todavía) en el edificio central.



Tuve la oportunidad de conocer personalmente a leovernazza y gabouy, a quienes conocía a través de Twitter, y también tuve oportunidad de charlar con aaguiar. En realidad, a gabouy ya lo conocía, pero hasta que no me lo dijo y me dijo de donde, no tenía ni idea... mi memoria ya no es lo que era.

Por fin le encontré una utilidad a Google Wave: el seguimiento en vivo de eventos. En el iPhone funciona muy bien, hasta veía lo que estaban escribiendo las tres personas que estaban siguiendo el wave (y sí, no tuvo mucho éxito, pero algo es algo...). Lo único que no encontré como hacer es subir una foto, con eso quedaría bien completo.

El evento en sí estuvo muy bueno, todos temas interesantes. Habría unas 50 o 60 personas más o menos.

Buena parte de las conferencias se hizo en inglés, ya que Dave Nielsen no habla mucho español. Me llamaron la atención dos cosas:
  1. El buen nivel de inglés de todos los presentes (o capaz que alguno se fue sin entender nada, pero no se quejó). Es verdad que en el rubro de informática es casi un requisito, pero en 60 personas podría haber alguno que no entienda lo suficiente como para poder seguir una charla.
  2. Que muchas veces, gente que habla español, se preguntaba y contestaba en inglés, supongo que por inercia.
Siempre me llama la atención la participación de Microsoft en este tipo de eventos. Cuando hablan de algún tema, jamás mencionan a la competencia, y es como que ellos son los únicos que existen... En un momento, alguien de MS hizo un diagrama de una arquitectura con ASP.NET, WCF y SQL Server, y en el diagrama el cliente era un Internet Explorer... A ver como te lo explico: IE no se usa más (si, ya se que tiene como el 60% del mercado, pero los que saben que pueden elegir no lo usan).

En general me gustó mucho el evento, así que solo me queda felicitar a los organizadores, y esperar que se repita :)

martes, 4 de mayo de 2010

CloudCamp Montevideo 2010

Hoy en la tarde (4 de mayo, 17hs), se va a llevar a cabo el CloudCamp Montevideo 2010.

Yo voy a estar por ahí, y espero poder hacer un seguimiento en vivo del mismo mediante esta nota.

Para eso, voy a estar usando una funcionalidad nueva de Google Wave: Elements. Ya veremos que tal... Para verlo no debería ser necesario tener cuenta en Wave, para editar creo que sí.


sábado, 1 de mayo de 2010

Respuesta al problema de las tres puertas

El jueves escribi una nota sobre un problema, que gracias a al comentario de David ahora se que se conoce como el problema de Monty Hall.

Hubieron unos cuantos comentarios interesantes. David también dejó dos links a videos de YouTube donde se explica el problema y la solución. Los pueden ver acá y acá.

La respuesta es bastante poco intuitiva, o por lo menos así me pareció a mi.

El planteo del problema lo vi de casualidad en el programa Alterados por Pi, donde se daba también una solución que no me convenció. A los pocos días, volví a verlo en la película 21: Black Jack, donde se daba la misma solución.

Como no estaba convencido, es más, creía que daba lo mismo cambiar o no, decidí probarlo... así que como buen informático, hice un programa que hace la simulación...

Acá dejo el fuente (en C para que sea más rápido...):
#include <stdio.h>
#include <stdlib.h>

#define ITERACIONES 1000000
#define CANT_PUERTAS 3

int generarNumeroAleatorio() {
    return (arc4random() % CANT_PUERTAS);
}

void cargaPremio(int *contenido) {
    for (int i = 0; i < CANT_PUERTAS; i++) {
        contenido[i]=0;
    }
    int premio = generarNumeroAleatorio();
    contenido[premio] = 1;
}

int eligePuerta() {
    return generarNumeroAleatorio();
}

int abreOtraPuerta(int puertaElegida, int *contenido) {
    int otraPuerta = 0;
    int seguir = 1;
    while (seguir) {
        otraPuerta = generarNumeroAleatorio();
        if ((otraPuerta != puertaElegida) && (!contenido[otraPuerta]))
            seguir = 0;
    }
    return otraPuerta;
}

int main (int argc, const char * argv[]) {
    printf("Puertas\n");
    int contenido[CANT_PUERTAS];
    int puertaElegida;
    int puertaAbierta;
    int cantPremios = 0;
   
    for (int i = 0; i < ITERACIONES; i++) {
        cargaPremio(contenido);
        puertaElegida = eligePuerta();
        puertaAbierta = abreOtraPuerta(puertaElegida, contenido);
        cantPremios += contenido[puertaElegida];
    }
   
    double resultado = cantPremios * 100.0 / ITERACIONES;
    printf("%f1.2 ", resultado);

    return 0;
}
Nótese que ni siquiera se necesita correrlo para ver la solución. En cada iteración de la simulación (líneas pintadas de rojo), se hace lo siguiente:
  1. se sortea en que puerta está el premio
  2. se elige una puerta al azar
  3. se abre una puerta que no es la elegida ni tiene premio
  4. se acumula la cantidad de veces que acertó
El tema es que la puerta abierta por el conductor del programa no entra en juego para nada. La cantidad de veces que acierto (si me quedo con la puerta original) es la cantidad de veces que hubiera acertado con las tres puertas cerradas...

Por lo tanto, si tenemos que al no cambiar gano 1/3 de las veces, entonces si cambio debo ganar 2/3 de las veces.

Efectivamente al correr la simulación el resultado que se obtiene es que si no se cambia de puerta se gana solo el 33% de las veces.