Enlaces rápidos (05-03-2010)

Voy a tener que cambiar el título de estos posts por “Enlaces rápidos sobre NoSQL”, porque al final es sobre lo que más enlazo.

Traduce usando Google y PHP

Interesante librería que hace uso de Google Translator para traducir un texto en un idioma a otro. Aunque el API de Google está solo en Java o Javascript, el autor de la librería ha creado un wrapper para que esté disponible desde PHP.

require_once('googleTranslate.class.php');
 
/* Initialize the class translate class */
$gt = new GoogleTranslateWrapper();
$sampleText = "Bonjour de cette partie du monde";
 
/* translate(string, to_language, from_language) */
echo $gt->translate($sampleText , "en", "fr");

Google Translation PHP wrapper

Mostrar tu posición en Alexa mediante PHP

El ranking de Alexa es uno de los más famosos que hay, y es bastante utilizado a la hora de vender publicidad u otros aspectos comerciales. Dispone de un API que permite obtener el ranking de una web, por lo que podemos hacer una llamada y obtener los datos para poder mostrarlos en nuestra web.

La clase es muy sencilla:

class AlexaRank {
  public function getRequestUri($domain) {
    return 'http://data.alexa.com/data?cli=10&dat=s&url=' . $domain;
  }

  public function parse( $httpResponse ) {
    preg_match( '#<popularity url="(.*?)" text="([0-9]+){1,}">#si', $httpResponse, $p );
    $res = ( $p[2] ) ? number_format( intval($p[2]) ):0;
    return str_replace(',', '', $res);
  }
}

Php Class to Retrieve Alexa Rank

Vía / DZone

Krumo: alternativa a var_dump

Krumo es una librería que realiza lo mismo que var_dump, pero dándole un formato más amigable. Permite cambiarle el formato mediante skins.

krumo

Una alternativa a tener en cuenta, yo personalmente uso bastante var_dump y a veces es un poco lío seguir en debug de objetos grandes.

Krumo

Comparativa de Data Stores

Entendiendo por Data Stores los sistemas de almacenamiento tanto RDBMS o NoSQL, el PDF que referencio compara los distintos tipos de data stores que hay:

  • Almacenamientos clave-valor
  • Almacenamiento de documentos
  • Similares al BigTable de Google
  • BD relacionales escalables

De cada tipo de data store explica cuales son y que características tiene, y por último hace comparativa entre ellos. También nos dice posibles ejemplos de uso:

  • Sistemas clave-valor: útil cuando los datos almacenados se basan en el acceso de información mediante un ID (sin joins) y que se actualiza pocas veces o se actualiza siempre de la misma manera.
  • Almacenamiento de documentos: cuando la información almacenada depende de varios campos (por ejemplo un stock de vehículos).
  • Sistemas basados en BigTable: se puede tratar de aplicaciones similares a los almacenamientos documentales, pero con la diferencia de que es necesario un elevado número de registros.
  • RDBMS escalables: cuando nuestra aplicación necesita de relaciones entre distintos datos y nuestro servidor se queda corto para aguantar el volumen de datos o de transacciones.

Me gustaría destacar que entre estos data store, se encuentra Cassandra, proyecto open source de Facebook, que ahora es un proyecto de Apache y que Twitter va a usar para sustituir MySQL.

High Performance Scalable Data Stores

|

Escalar aplicaciones web usando HMVC

Hierarchical-Model-View-Controller (HMVC) es una variante del MVC que se forma mediante una colección de estos, siendo cada MVC independiente de los otros, y siendo un aspecto importante la reutilización de código, por lo que la localización física de los MVC no es importante. El HMVC es muy efectivo a la hora de testear módulos de la aplicación independientes, y una buena opción para escalar nuestra aplicación.

El tutorial nos muestra cómo usar Kohana para llevar a cabo una aplicación que implemente HMVC. Está claro que una aplicación así puede ser algo más difícil de diseñar y que no siempre puede que necesitemos este grado de escalabilidad.

Scaling Web Applications with HMVC

Drag & Drop de ficheros en Firefox

Esto puede dar mucho juego, pero tan solo funciona en Firefox 3.6+, por lo que no podemos depender de este script en nuestras aplicaciones. A partir de la versión 3.6, Firefox permite realizar drag&drop de ficheros en nuestra web y mediante Javascript poder obtener los ficheros o textos que se arrastren contra un elemento específico.

Su uso es muy sencillo:

dropzone.addEventListener("drop", function(event) {
  event.preventDefault();
  // Ready to do something with the dropped object
  var allTheFiles = event.dataTransfer.files;
  alert("You've just dropped " + allTheFiles.length + " files");
}, true);

Y dispone de una API tanto para el drag&drop como para los ficheros.

Recomiendo ver el código fuente de este ejemplo para tener una librería que te hace todo el trabajo.

file drag and drop in Firefox 3.6

Enlaces rápidos (16-02-2010)

Unos cuantos enlaces rápidos, con temática centrada en NoSQL

|

HTML 5 Web SQL Database

Está claro que el HTML5 nos ofrece muchas posibilidades, pero una de las opciones que más me ha gustado es la de tener bases de datos locales.

Para abrir una conexión deberíamos ejecutar lo siguiente:

db = openDatabase("ToDo", "0.1", "A list of to do items.", 200000);

Y para la ejecución de sentencias hay que echar mano de transacciones:

db.transaction(
  function(tx) {
     tx.executeSql("SELECT * FROM ToDo", [],
        function(tx, result) {
           for(var i = 0; i < result.rows.length; i++) {
             document.write('' + result.rows.item(i)['label'] + '
'); } }, null); } );

Bastante sencillo y ofrece muchas posibilidades en nuestras aplicaciones

HTML 5 Web SQL Database

Vía / DZone

Librería oEmbed para CodeIgniter

Si el otro día hablaba de oEmbed, hoy voy a hablar de una librería para CodeIgniter que nos puede ser útil para aquellos que desarrollamos usando este framework.

Por ahora detecta los siguientes servicios:

  • YouTube
  • Viddler
  • Qik
  • Revision3
  • Vimeo
  • Hulu

Se echa en falta alguno como Flickr, pero es un principio y nosotros mismos podemos ampliar la librería. Tampoco estaría mal que no fuera necesario indicar el servicio, sino únicamente la URL.

OEmbed-Library

Vía / @xoan