Alternativas a MySQL

Quien diría que Oracle se convertiría en el nuevo enemigo público del Open Source, luego de que Microsoft haya caído en la casi total irrelevancia. El día de hoy leyendo un artículo de Ars Technica titulado "Solaris todavía con un cierto tipo de libertad, pero la distribución OpenSolaris está muerta", me enteré de la última arremtida de Oracle contra el Open Source, que sumado a la demanda que interpuso contra Google por Android, ha originado que algunos hablen de una política empresarial por parte de Oracle, que tendría por objetivo destruir el Open Source.

Lo curioso es que algunos hablen en la disputa Oracle/Google a favor de Google, como si este fuera el defensor de la libertad, cuando justamente en estos días el trato entre Google y Verizon ha recibido una lluvia de críticas por parte de los defensores de la net neutrality. Y Oracle se está dando cuenta de que comprar Sun Microsystems, no fue un buen negocio después de todo y está rascando la olla a ver que saca.

Ante todo recordemos que en este juego no hay buenos y no hay malos, aunque si nos ponemos exquisitos podríamos hablar de los malos y los menos malos. Pero todo eso es una cuestion de perspectiva, esta es una batalla de megacorporaciones por el control de los negocios del futuro. Así que no se sorprendan si luego ven que Google y Oracle se unen para pelear contra Facebook y Microsoft.

Pero a lo que ibamos, que alternativas hay si Oracle decide que no le dará soporte a MySQL, o que comenzará a cobrar por el popular programa de base de datos. Pues bien tenemos varias alternativas, entre ellas:

Postgresql, algunos la llaman la verdadera base de datos libre, otros dicen que es el único rival serio que tiene Oracle. Fue la primera base datos Open Source que utilicé alla por 1998. Pero con su reducida y fragmentada comunidad está muy atras de MySQL, aunque para la gran mayoría de situaciones podría reemplazar fácilmente a MySQL.

mSQL, o miniSQL. Como su nombre lo indica claramente no tendrán todas las cosas que MySQL o PostgreSQL puede ofrecer, pero es mucho más rápida que MySQL y toda la información está contenida en un sólo archivo. Una ventaja es que PHP incluye soporte nativo para mSQL, con lo cual resulta fácil reemplazar a MySQL en aplicaciones que no demanden mucho tráfico.

Driezzle, es un MySQL a dieta y optimizado para volver a lo básico, es decir una base de datos veloz y orientada a aplicaciones web, que fue juztamente la razón por la cual MySQL se volvió popular, pero que son características que han quedado relegadas en las útlimas versiones. En este tutorial encontraran claramente explicado como compilar e instalar Driezzle, además de como activar el soporte PHP para esta veloz base de datos.

MariaDB, es un fork de MySQL luego de que se anunciara la adquisición de Sun por parte de Oracle y los miembros del equipo MySQL temieran lo peor. El líder del proyecto Michael "Monty"  Widenius, es el autor de la versión original de MySQL. En teoría MariaDB debería ser la "opción oficial", si Oracle decide matar a MySQL. En el website OurDelta, se puede encontrar versiones de MariaDB y MySQL-5.0,  listas para las distribuciones más importante de hoy día Debian, Ubuntu, RedHat/Centos.

Se acaban aquí las opciones a MySQL, pues no. Hay muchas más alternativas, pero he mencionado sólo estas para calmarle los nervios a todos aquellos que creen ver el final del LAMP si Oracle le baja el dedo a MySQL.

Probando AppInventor

Hace poco más de un mes bajo el título "Android tendrá su killing app", comentaba sobre AppInventor y lo ventajoso que sería para la plataforma Android este tipo de "aplicaciones que permiten crear aplicaciones" de forma muy sencilla.  Pero al parecer el mercado está moviendose en la dirección de Android realmente rápido, en el último informe de Gartner Group sobre el mercado de los smartphones a nivel mundial, las estadísticas muestran que Android ya ha sobrepasado a Apple como la tercera plataforma más popular de smartphones y está muy cerca de Research In Motion, los creadores del popular Blackberry, según se puede ver en el siguiente cuadro:

En el mismo informe Gartner nos indica también que ya en el mercado norteamericano, la plataforma Android ha superado en ventas a la plataforma BlackBerry.

Con esas cifras es fácil entender el interés existente por desarrollar aplicaciones para Android, siendo AppInventor una alternativa ultra sencilla, ya que se basa en una interface enteramente gráfica. Aunque fue anunciado el pasado 12 de julio, aún no está ampliamente disponible y sólo se puede acceder a él a través de invitación, afortunadamente para mi, el pasado miercoles 10 de agosto recibí mi invitación para poder usar AppInventor.

Ese mismo día en la noche hice una prueba con el famoso "Hello Purr", todo funcionó sin mayores problemas, aunque a las justas el miercoles pasado apenas tuve tiempo para avisar a mis followers en Google Buzz, de que había recibido la invitación.

Esta ha sido también una semana bastante ocupada, pero hoy me he querido dar un tiempo para probar un poco más AppInventor y hacer una aplicación un poco más "compleja". Así que seguí el tutorial "Paint Pot", para crear una aplicación de dibujo muy elemental.

Realmente me sorprendió lo fácil e intuitivo de la herramienta y sobre todo el hecho de que la aplicación que se genera puede ser descargada como paquete APK. Gracias a lo cual usando el navegador de cualquier smartphone Adroid, yendo a un URL que contenga el archivo dichas aplicaciones pueden ser intaladas. Como ejemplo les dejo este URL desde donde pueden descargar la aplicación que construí:

http://www.volkanrivera.com/esp/downloads/DibujoSimple.apk

Un detalle es que el ícono de la aplicación que generamos por defecto es el ícono de AppInventor, aunque no me he dado tiempo de investigar como se puede personalizar eso, es una de las cosas que explicaré en el tutorial que estoy preparando sobre como usar AppInventor. Por ejemplo en mi Nexus One, la aplicación "Dibujo Simple" la he puesto en mi escritorio, aquí una captura de pantalla:

 

Cuando se ejecuta la aplicación lo que veremos es algo como esto (el borde de la imagen es intencional, para mejor visualización aquí en el blog, pero no aparece en el celular):

Luego si nos ponemos a jugar un rato con las opciones de hacer punto o líneas podemos obtener algo como esto:

Como veran, esta no es una aplicación que pretenda hacer un trabajo real, pero ilustra lo que permite hacer AppInventor, sin escribir una sóla línea de código en Java. Un detalle interesante que descubrí es que si se utilizan acentos o eñes, dichos caracteres son reemplazados por signos de interrogación en fondo negro.

En cuanto termine el tutorial de AppInventor que estoy preparando lo notificaré por esta via.

Android tendrá su killing app

Se utiliza el término "killing app", para hacer referencia a un programa de computadora que justifica la compra de una determinada arquitectura de hardware/software. Por ejemplo VisiCalc (la primera hoja de cálculo) fue la killing app que convirtió a la Apple II en todo un éxito. Y fue sin duda el dBase III (la primera base de datos relacional de fácil uso) la que catapultó el IBM PC con DOS a ser todo un éxito de ventas en las empresas. Finalmente fue el VisualBASIC la aplicación que impulsó a Windows 3.1 como la plataforma de desarrollo por excelencia.

El día de ayer en el New York Times, Steve Lohr, bajo el título "Software de Google para aplicaciones hagalo Ud. mismo", nos presenta a App Inventor. Una aplicación que permite crear aplicaciones para la plataforma Android, que acaba de entrar a fase de beta cerrado (ya no agregaran más características y está en proceso de prueba) y que permite desarrollar aplicaciones de forma bastante visual en cualquier plataforma (Windows, OSX o Linux), con lo cuál tiene una sustancial ventaja con respecto a al iPhone SDK que sólo puede correr en Mac.

En teoría no es necesario que uno sepa programar en Java, todo se realiza desde una interfase gráfica que permite crear las apliaciones sencillamente uniendo bloques que representan acciones a realizar por el programa. Los comentarios sobre esta aplicación que aparecen en la blogósfera lo comparan con HyperCard, aunque no podría juzgar si eso es preciso o no ya que nunca utilicé esa aplicación.

La aplicación que fue desarrollada en Google Labs, bajo la dirección del profesor del MIT Harold Abelson, tiene por misión según su creador convertir a más personas en creadores de aplicaciones y no en simples consumidores, con lo que cuando esta aplicación llegue al mercado sencillamente multiplicará exponencialmente el número de aplicaciones disponibles para Android.

La semana pasada un post de Henry Blodget en AlleyInsiders, nos comentaba como el exponencial crecimiento de aplicaciones para la plataforma Android, podría parecer un déjà vu para los Apple Boys, ya que se repetiría la historia de la Mac y Windows. Pues parece ser que de no sacar algo similar Apple, el App Inventor podría ser el nuevo VisualBASIC que sepulte al hasta ahora líder de los smartphones, convirtiendolo en un producto de nicho y catapultando a Android como la úbicua plataforma del decenio que empieza.

Esperemos que todo esto se concrete y veremos como el mercado reacciona, pero esto es un indicio más que señalaría el final de la ascendente carrera de las acciones de Apple y el comienzo de su caída, recuerdan el post "Apple una gran oportunidad de negocio", en el cual comentaba que no me extrañaría ver las acciones de Apple de vuelta a $90 por acción en los próximos 6 a 12 meses. Pues esto es una señal más que indica que esto es un escenario muy probable.

Para aquellos que quieran saber como es App Inventor, Google nos ha preparado un video que trata de presentar que tan fácil sería crear aplicaciones para Android, aquí se los dejo:

 

 

China y los clones.

En China la falsificación de productos de marcas conocidas es un negocio ilegal pero muy rentable y que da trabajo a buena parte de la población. Pero también China es famosa por clonar tecnologías que son exitosas en occidente, y tratar de venderlas bajo su propia marca para su consumo interno mayormente, es así por ejemplo que existen clones de iPhones como el i9 que puede ser comprado por tan poco como $60, lógicamente aunque han copiado la forma y ciertas funcionalidades carece del API y iStore, además de ser incompatible con las aplicaciones existentes para el iPhone, lo cual hace que dicho producto no sea una competencia real para el iPhone.

Pero esa no es la única tecnología que han copiado los chinos, también tienen su propio Google llamado Baidu, aunque es el líder en China, no ofrece los APIs que ofrece Google y no produce los mismos resultados que Google debido a la sensura del gobierno chino que es su principal accionista, todo esto conspira contra su éxito fuera del mercado que controla por ley.

La cosa no queda alli, han aparecido clones de Youtube como por ejemplo 56.com, tudou.com, youku.com, todos controlados por el gobierno chino que es su principal accionista y en donde no hay videos que cuestionen las políticas del estado, pero donde pueden aparecer películas completas de reciente estreno.

Las redes sociales no han sido la excepción, hay clones de Facebook como son por ejemplo renren.com, kaixin001.com o 51.com, al igual que pasa con los otros clones sólo algunas funcionalidades están disponibles. Incluso Twitter demuestra que es una tecnología exitosa debido a que acaba de ser copiado también, los clones chinos de Tweeter son taotao.com y zuosa.com.

Pero a que vienen todos estos datos, pues la reflexión es la siguiente. Se comenta en ciertos circulos que China pronto será la potencia hegemónica y dominante a nivel mundial desplazando a Estados Unidos, para ello se pone como evidencia su espectacular crecimiento económico. Sin embargo si comparamos el USA de principios del siglo XX con la China de principios del siglo XXI notaremos muchas grandes diferencias. Mientras en USA de principios del siglo XX se construía el primer tren subterráneo del planeta antes que las potencias dominantes de la época como Inglaterra y Francia, se inventaba la bombilla incandescente, el avion, la máquina de escribir, los tubos de vacío, etc. China por el contrario sólo copia todo aquello que ya es exitoso en otro lado y muchas veces mutilando las mejores partes para poder seguir manteniendo el control absoluto de todo por parte del omniprescente estado.

Finalmente, una de las razones principales por la que USA emergió como la superpotencia que acutalmente es, fue que políticamente hizo todo lo contrario a lo que está haciendo China hoy. Sirviendo como refugió de todo aquel que se sentía amenazado por estados todopoderosos que querían controlar absoluto. La inventiva no se planea o se dicta por decreto, es el resultado de la libertad, quien no es libre no puede crear y es justamente por eso que China está condenada a seguir viviendo la sucesión de dinastías que su historia muestra, en la cual el Partido Comunista Chino no es más que la última de las dinastías del milenario Déjà vu chino.

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.