Usando Google Spreadsheet como base de datos

Google ofrece un API para poder manipular directamente el contenido de sus hojas de cálculo en Google Docs, si reparamos en los detalles y la posibilidad de que pueden ser grabas, actualizadas, borradas y recuperadas filas específicas de una hoja de cálculo en particular, pues resulta evidente de que sería posible utilizar dicho API para usar las hojas de cálculo de Google Docs como un sencillo motor de base de datos.

Buscando encontré en el blog "farinspace web" una librería de PHP que permite manipular fácilmente hojas de cálculo de Google Docs, el nombre es Google_Spreadsheet, aunque no es muy imaginativo refleja claramente su finalidad. Luego se me ocurrió usarlo para una aplicación de ejemplo el clásico guessbook, pero eso requeriría la administración de login y perfiles, entonces se me ocurrió mezclarlo (hacer un mushup) con Facebook Connect. De esa forma la administración de la identidad se hace con el Facebook Connect y el registro de los comentarios se haría usando Google SpreadSheet. En pocas palabras lo único que se tiene localmente es el programa, todo los datos estarían en la red.

He preparado un pequeño server virtual con el ejemplo, que puede ser accedido en este URL. El código listo para desempaquetar y usar puede ser descargado desde este otro URL. Lo único que necesita hacer para probarlo es decargarlo en un server con soporte de PHP 5.2 o superior, tener una cuenta en Google Docs y registrar su aplicación en Facebook (más detalles sobre como registrar una aplicación en Facebook pueden ser contradas aquí). Con las credenciales del caso debe editar el archivo "config.php" de la siguiente manera:

<?

  $api_key  = "abcdefghijklmnopqrstuv0987654321"; <- API Key de Facebook
  $secret   = "1234567890abcdefghijklmnopqrstuv"; <- Secret word de FB
  $username = "user@gmail.com";             <- Usuario Google Docs
  $password = "123456";                      <- Password usuario Google Docs

?>

Con esos sencillos cambios debería de funcionar el script que pongo a disposición. Ojo esto es una prueba de concepto, no está cuidada la estética, y todo el código son dos scripts PHP monolíticos. Es decir este script tiene propósito educativo y no recomiendo su uso en entornos de producción.

Los detalles sobre Facebook Connect pueden ser revisados en la wiki de Facebook, por simplicidad en este post me limitaré a enfocarme en el uso de la librería Google Spreadsheet, en caso de que alguien esté interesado en un tutorial detallado sobre Facebook Connect, pues haganmelo saber en los comentarios, si veo que hay suficiente interés dedicaré un tiempo a escribir uno.

A revisar entonces el código de "index.php" que nos permite leer datos desde una hoja de cálculo de Google Docs.

En esta parte inicializamos el objeto $ss (spreadsheet), e indicamos que deseamos usar la hoja de cálculo "comentarios" y la página "Sheet1", es importante tener presente que los nombres son case-sensitive:

(…)
    $ss = new Google_Spreadsheet($username,$password);
    $ss->useSpreadsheet("comentarios");
    $ss->useWorksheet("Sheet1");

(…)

En esta parte asignamos a la variable $rows, todas las filas que tengan un campo "id" mayor que cero, dado que usaremos la función time() para general el campo "id", este es un número entero mayor que cero siempre. Luego con la función sizeof() obtenemos el número de filas que han sido leídas y usaremos la variable $start para acceder a ellos desde el último insertado:

(…)
    $rows = $ss->getRows("id>0");
    $size = sizeof($rows);
    $start = $size – 1;
    $count = 0;

(…)

Usamos el bucle while() para leer los diez últimos elementos del array que la función getRows() nos provee y los representamos a través de una tabla:

(…)
    echo '<hr>Diez &uacute;ltimos comentarios:<br /><br />';
    echo '<table>';
    while(($start>=0) && ($count<10)) {
         $row = $rows[$start];
        
         $nombre = $row[‘nombre’];
         $apellido = $row[‘apellido’];
         $avatar = $row[‘avatar’];
         $comment = $row[‘comment’];
         echo '<tr><td valign="top">' . '<img src="' . $avatar . '"><br />' . $nombre . '<br />' . $apellido . '<br /></td>';
         echo '<td valign="top" width="300">' . $comment . '</td></tr>';
          –$start;
          ++$count;
    }
    echo '</table>';

(…)

Como veran el algoritomo es bastante sencillo y sólo nos muestra los últimos 10 comentarios dejados en el guessbook. Ahora si queremos dejar comentarios debemos estar logueados, para ello se debe disponer de una cuenta válida en Facebook.

El script que agrega una fila a la hoja de cálculo de Facebook se llama "addrow.php" y para asegurarnos de que no puede ser usado directamente por alguien, lo primero que hace dicho script es ver si el usuario está logueado en Facebook, de estarlo lee los siguientes datos de su perfil: $nombre, $apellido, $avatar (la foto). Si no está logueado es redirigido a "index.php".

Finalmente si el usuario esta logueado y ha enviado un comentario, entonces el siguiente código se ejecuta:

(…)
      $ss = new Google_Spreadsheet($username,$password);
      $ss->useSpreadsheet("comentarios");
      $row = array (
                  "id" => time(),
                  "nombre" => $nombre,
                  "apellido" => $apellido,
                  "avatar" => $avatar,
                  "comment" => $comment
             );

      if ($ss->addRow($row)) {
         /* Si se puede agregar la fila exitosamente regresa a la pagina principal */
         $url = 'http://' . $_SERVER[‘SERVER_NAME’] . "/index.php";
         header("Location: $url") ;
      } else {
         /* Si se produce un error, nos alerta del mismo */
         echo "Error, lo sentimos pero su comentario no ha podido ser grabado.n";
      }     

(…)

Es decir creamos un objeto $ss, especificamos con que hoja de cálculo deseamos trabajar con la función userSpreadsheet() y con la función addRow() podemos escribir el contenido del array $row en la hoja de cálculo llamada "comentarios", de ser exitosa dicha operación somos redirigidos a "index.php", caso contrario se nos presenta un mensaje de error para darnos a saber de que por alguna razón el registro no pudo ser grabado en la hoja de cálculo.

Este tipo de solución es útil por ejemplo si deseamos utilizar Google App Engine con PHP. Como comenté el año pasado es posible usar PHP en App Engine a través del servlet Quercus. Sin embargo no se puede acceder directamente a BigTable desde una aplicación PHP implementada de esta manera, pero la libreria "Google SpreadSheet", debería de funcionar sin problemas en Quercus. Existen varias otros posibles escenarios en donde este tipo de soluciones serían utiles como por ejemplo hosting gratuitos o sencillamente formularios web que llenan directamente una hoja de cálculo que luego puede ser compartida por los empleados de la compañía.

Si alguien utiliza este tipo de solución en algún proyecto le agradecería que nos lo haga saber en los comentarios.

La guerra por la supremacía en la web

En las últimas semanas nos han querido vender la idea de una guerra entre Apple y Google, que el blog Gigaom resume en una infografía bastante interesante o la rivalidad entre Microsoft y Google por dominar el mercado de los buscadores, que también ha llenado las líneas de innumerables posts. Son las batallas que la gran mayoría piensa definirán al nuevo rey del sector TIC. Es sin embargo la furiosa rivalidad entre Google y Facebook, la que durante los próximos años, según mi criterio, cambiará el panorama de las TIC de manera irreversible.

Microsoft, Apple, Intel, Nokia o Motorola, son todas corporaciones preparadas para luchar en un entorno industrial, donde la idea es producir en grandes volúmenes. Sin embargo grandes volúmenes de producción requieren grandes volúmenes de consumo, de no ser así el dinero invertido en la producción no puede ser recuperado. Un fenómeno externo al sector TIC como lo ha sido el credit crunch de finales del 2008, ha transformado la mentalidad y ahora menos significa más. El éxito en ventas de las netbooks y de las laptops de menos de $500 son una expresión de que el mercado se ha vuelto bastante sensible al precio. Es esa la razón por la cual el Nexus One, no se ha vendido tan bien como el iPhone o el Droid, básicamente porque a $530 cada unidad sin contrato, está muy lejos del bolsillo del consumidor promedio americano en estos momentos.

En este nuevo mundo de escaso crédito, donde la maximización del poder de compra de cada dólar es la regla para sobrevivir, computadoras con múltiples núcleos o inmensas pantallas, son el equivalente a los SUV. Representan una elevada inversión incial y un alto costo de operación, para satisfacer una elemental necesidad de transporte. Pero cuando se trata de reducir costos, los CIO están ahora también evaluando no sólo el costo de los PCs en los escritorios, sino también los software que estos utilizan. Ya se cuestiona la necesidad de procesadores de texto, debido al hecho de que la mayor cantidad de veces se utilizan para producir documentos que son atachados a correos electrónicos, esto debido a las políticas de ahorro en suministros como papel y tinta para impresora.

El que viene será un mundo diferente al que conocemos, un lugar donde la busqueda de la eficiencia en cada eslabón de la cadena será un requisito para sobrevir, por lo tanto y como consecuencia de lo anterior, la tercerización de servicios jugará un rol central en las estrategias de reducción de costos. ¿Por qué Google y Facebook iniciaran una batalla para determinar quien se quedará con un mercado así?

En los últimos días una serie de noticias han removido las bases de lo que pensábamos eran las redes sociales, primero fue Facebook que anunció que crearía un servicio de correo eletrónico, luego Google presentó Buzz, que añadía capacidades sociales a Gmail, a costa se crear mucha ansieadad en sus usuarios respecto a la privacidad. Casi inmediatamente Google activó Webfinger para sus cuentas de gmail, que también son las cuentas que tienen Buzz. Webfinger es un protocolo que permite usar direcciones de correo para acceder a nuestros perfiles y servir de identidades digitales.

¿Por qué todo lo anterior es importante?, la respuesta es sencilla, aquel que controle las identidades digitales en la web será el nuevo rey del sector. Es por ello que Facebook ha firmado un acuerdo con AOL para permitir que los usuarios de Facebook y del mensajero instantáneo de AOL puedan chatear juntos. Es por ello que que Google está decididamente apoyando oAuth. En un mundo en donde todo servicio relacionado a las TIC se accederá a través de la web y de forma pay-as-you-go (pre-pago), la importancia de una identidad única e interoperatividad entre servicios será el factor clave. Es decir el proceso de login en todo servicio ofrecido en la web se volverá un commodity.

Permitanme explicarles el problema con un ejemplo, supongan que Uds. que son el CIO de una gran empresa con miles de PCs, ¿por qué sería complicado una migración a Google Docs?, pues si se consigue o se programa la herramienta para mover toda la "legacy data" de manera automática al nuevo servicio o se contrata a alguien para que haga eso, no debería revestir mayores inconvenientes. Sin embargo el gran problema de ese tipo de migraciones es la administración de contraseñas (identidades) a dicha escala. El otro problema es que una vez dentro de la red de Google, sería también otra inversión millonaria moverse hacia otra alternativa, digamos Zoho, y el costo estaría también en la administración de las contraseñas (identidades). Por el contrario, si los sysadmin no tienen que lidiar con la administración de las contraseñas y sólo necesitaran saber los "usernames", que se convertirian en las identidades digitales de los usuarios, el trabajo se simplificaría enormemente.

Es por ello que tanto Facebook y Google, desean ser su única solución para su identidad en línea, ya que cotrolando el punto de validación en la web, pueden controlar todo el mercado de SaaS (Software as a Service). Sólo el servir de intermediario de micro-pago reportaría miles de millones de dólares anuales sin tener que asumir casi ningún riesgo. El premio es muy jugoso como para no tomarlo en serio y las únicas dos empresas, por el momento, que están tratando de conseguir el control de ese estratégico punto son Facebook y Google.

Microsoft se ha vuelto irrelevante

Hace pocos días (4 de febrero) fue publicado en el The New York Times, un artíuclo de Dick Brass, en donde señalaba a la cultura de la destrucción de la creatividad al interior de Microsoft como la responsable de la lenta pero incuestionable caída del coloso de Redmond. Dicho artículo desató bastante ruido en la socialósfera (blogósfera, twitósfera, facebookosfera, etc.). Muchos bits han fluido a lo largo de estos últimos días, pero creo que la razón de la actual y notoria irrelavancia de Microsoft en el sector TIC, tiene su explicación en la aparición de un nuevo modelo de hacer negocios con las TIC y esto ha generado la emergencia de dos nuevas fuerzas dominantes en el sector Google y Facebook.

El mérito de Microsoft fue el de convertir lo intangible (el software) en un commodity, antes de Microsoft el software era producido bastante artesanalmente, los estándares eran una declaración de intención que muy pocos respetaban. Una prueba irrefutable de ello eran los Unix, que a pesar de en teoría todos provenir del mismo código fuente y seguían los mismos estándares algunos software eran específicamente programados para arquitecturas específicas.

En aquellos primeros años de la computación se hablaba de "arquitectura", pero en realidad era un eufemismo para hacer referencia a quien era el propietario de los derechos del hardware y el software, de aquel paradigma los dos únicos fósiles vivientes que existen actualmente son IBM con sus mainframes y Apple con su Mac. Con la introducción del IBM PC y su estándar abierto de hardware, la commoditización del hardware y el software comenzó.

Microsoft supo adaptarse a los tiempos, su mérito más importante fue permanecer como una empresa de software y no seguir el camino que siguió Apple. La idea de software como un commodity se extendió y fue abrazada por muchos, empresas como MicroPro, Borland, Corel, WordPerfect Corp., etc., florecieron en esos primeros años gracias a la aparición de un gran mercado para sus productos. Todas ellas son irrelevantes ahora, ¿por qué?

El gran cambio vino de la mano no del Open Source, sino de Internet. El tener acceso al código fuente es irrelevante sin la forma de compartirlo y mejorarlo en una comunidad bastante grande. Aquellos que usaron aquellas primeras versión de TurboPascal a principios de los ochentas, podrán recordar que el software venía con el código fuente de una rudimentaria hoja de cálculo. Sin embargo eso no generó un clon Open Source que amenazara la existencia de Lotus 123 o Quatro Pro.

Todos hablamos de las ventajas del paradigma Open Source ahora y hasta lunáticos como Richard Stallman quien convertir el Free Software en religión. Pero había una muy activa comunidad de lo que ahora llamamos Open Source a principios de los ochenta. La revista Byte como muchas otras también, incluía código fuente en BASIC o incluso Assambler para las primeras microcomputadoras de los ochenta.

Hay un mantra del Budismo Zen que dice: "¿Si un árbol cae en el bosque y nadie está lo suficientemente cerca para poder oirlo? ¿HACE RUIDO AL CAER?", es usado mucha veces para explicar fenómenos cuánticos, pero esta vez permitanme usarlo para explicar mi punto sobre el hecho de que es más importante la red de usuarios (networking) que el código. Pongamos el mantra en estos términos: Si alguien cambia el código de un programa, pero nadie más lo usa, es esa mejora buena o sólo es otra manera diferente de hacer las cosas. Sin los "usuarios" el paradigma Open Source no tendría viabilidad, pero ¿qué tantos usuarios?.

La famosa regla del 90-9-1 de Jakob Nielsen, nos dice que en toda comunidad de donde los usuarios generan el contenido existe una desigualdad implícita, ya que sólo 1% produce nuevo contenido, 9% proporciona un feedback o es participante activo y el 90% sólo consume de forma pasiva. Si llevamos esa regla al software veremos que se necesitan comunidades realmente grandes para que el paradigma Open Source pueda funcional, ya que no es lo mismo 1% de un salón de clases de Computer Science a 1% de los usuarios de Internet de todo el planeta. En conclusión, sin Internet no hubieramos tenido Linux, Apache, MySQL o PHP.

El factor Internet cambió las reglas de juego del antiguo paradigma del software como commodity, el primer cambio y más obvio fue el abaratamiento del software. Cuando algo se comoditiza, lo primero que ocurre es que la barrera de entrada de reduce y una gran cantidad de personas interesadas en hacer dinero entran al mercado. El incremento de la oferta inevitablemente lleva a la reducción del precio. El Open Source y las soluciones SaaS (Software as a Service) encajan en el reacomodo del modelo, pero no destruyen el modelo, sólo hacen que todos ganen menos, es decir lo degrada a través de una sobreexplotación de la demanda. En términos económicos es fácil ententer lo anterior, el número de nuevos usuarios crece más lentamente que la cantidad de oferta de nuevos productos, por lo tanto la única forma de atraer nuevos usuarios es reducir el precio, ya que no hay oferta más atractiva que gratis muchas nuevas compañías entran en la trampa del famoso freemium (servicio gratis a niver básico, y pagado para las características avanzadas).

Lamentablemente los ejecutivos de Microsoft no han entendido la naturaleza del cambio, por eso sólo siguen aquello que saben es el futuro, pero no entienden como funciona. Es por ello que produjeron XBox, Zune, CodePlex, Bing y ahora desean agregar fundionalidades de social networking a Outlook.

El problema con Microsoft no es que adentro de ella exista una cultura que promueva la destrucción de la creatividad y en consecuencia la innovación, es que todo el ecosistema ha cambiado, y en consecuencia su modelo de copiar al líder, ofrecer gratis o a muy bajo precio un producto equivalente para luego extender algunas funcionalidades haciendose incompatible y luego cerrar el mercado, ya no funciona más. Ese modelo parecido al de asimilación de los borgs alcanzó su cúspide con IE6 que llegó a dominar el 95% del marketshare.

Es como si un gran meteorito llamado social networking ha caído y alterado de manera irreversible el ecosistema en el cual gran Tiranosauro Microsoft goberno sin oposición por los últimos 10 años. El problema es que las redes sociales han cambiado el modelo por completo y es por eso que ahora las dos grandes fuerzas emergente son Facebook y Google. Cómo se desarrollará esta batalla y que implicaciones tendrá para nosotros los simples mortales lo dejaré para un próximo post.