Iterators en PHP

En PHP existen, a parte de los arrays, una serie de estructuras de datos que nos pueden facilitar la labor a la hora de trabajar. Normalmente no son muy necesarios y con los arrays nos sobra, pero nunca está del todo mal conocerlos y saber que por ejemplo su uso de memoria suele ser mejor (como se observa en los benchmarks del artículo).

  • Fixed Arrays (SplFixedArray): arrays de longitud fija, muy útiles cuando el tamaño del array es siempre el mismo y es necesario que tenga siempre todos los elementos aunque estén vacios.
  • Listas (SplDoublyLinkedList): listas de elementos que permite recorrerlas en ambos sentidos
  • Pilas (SplStack): el último que entra primero que sale (LIFO)
  • Colas (SplQueue): el primero que entra primero que sale (FIFO)
  • Heap (SplHeap): traducido como montículos, son árboles de conjuntos de datos ordenados en el que el padre tiene un valor superior a los hijos
  • Cola de prioridades (SplPriorityQueue): igual que las colas pero los elementos se ordenan según una prioridad (ej: la lista de espera de Urgencias)
  • Tablas hash (SplObjectStorage): muy similar a cómo funcionan los arrays en PHP.

Interesante ver los benchmarks que nos muestra al final del artículo

New SPL Features in PHP 5.3

Tutorial de Drag&Drop de capas con jQuery UI

Últimamente, algunas webs como la BBC han modificado su diseño para hacerlo modular y permitir que el usuario realice Drag&Drop de los módulos para colocarlos cómo más le guste, algo que Netvibes o iGoogle ya hacían hace bastante tiempo. Afortunadamente, ahora con jQuery UI se puede realizar de forma muy sencilla.

El tutorial que enlazo explica paso a paso cómo hacerlo haciendo uso de jQuery, jQuery UI mediante los sortables y jQuery Cookies para trabajar con cookies de forma facil (y poder recuperar la configuración cuando el usuario vuelva a conectarse).

$('#sidebar .sortable-list').sortable({
    axis: 'y',
    containment: 'parent',
    forceHelperSize: true,
    forcePlaceholderSize: true,
    handle: '.section-title',
    opacity: 0.8,
    placeholder: 'placeholder',
    update: function(){
        $.cookie('sidebar-cookie', getItems('sidebar'));
    }
});

jQuery: Customizable layout using drag and drop

Vía @kingsleyphls

|

Eliminar utm_source de la URL mediante htaccess

El otro día me preguntaba un amigo cómo quitar los parámetros que mete Google Reader en las URLs, ya que debido a ello algunos servicios que monitorizan referencias, consideraba las urls diferentes.

El truco es fácil, sólo hay que meter en el .htaccess lo siguiente:

RewriteCond %{QUERY_STRING} utm_source.*
RewriteRule (.*) $1? [R=301,L]

Extender métodos en PHP

Interesante método que se utiliza mucho en .NET, que permite extender los métodos de una clase usando la definición de métodos estáticos de una clase extendida de la primera. El proceso es sencillo, se utiliza el método __call y se obtiene una lista de clases definidas y se compara la clase actual por cada una de las definidas y si contiene el método y es derivada de ella, se ejecuta la llamada:

public function __call($functionName, $arguments = array()) {
  // Add an extra parameter
  array_unshift($arguments, $this);

  // Current reflected class
  $reflectedClass = new reflectionObject($this);

  // Find suitable class and function
  $availableClasses = get_declared_classes();
  foreach ($availableClasses as $class) {
    $classDefinition = new ReflectionClass($class);
    $availableMethods = $classDefinition->getMethods();
    foreach ($availableMethods as $method) {
      if ($method->isStatic() && $method->getName() == $functionName) {
        $availableParameters = $method->getParameters();
        if ($availableParameters[0]->getClass()->getName() == $reflectedClass->getName()) {
          $method->invokeArgs(null, $arguments);
        }
      }
    }
  }
}

Extension methods for PHP

Vía / PHPDeveloper.org

Extraer textos en PDF desde PHP

Interesante librería que nos permite extraer textos de ficheros PDF, ignora todo aquello que no esté como texto en una capa y soporta ASCIIHexDecode, ASCII85Decode, FlateDecode:

include('class.pdf2text.php');
$a = new PDF2Text();
$a->setFilename('test.pdf');
$a->decodePDF();
echo $a->output();

PDF Text Extractor

Rediska: librería PHP para trabajar con Redis

Porque no todo el NOSQL es Cassandra, es importante tener a mano cualquier librería que podamos usar en el caso de trabajar con NOSQL. Rediska es una librería que permite trabajar con Redis, la cual tiene las siguientes características:

  • Soporte para múltiples servidores
  • Hashing consistente, crc32 o algoritmo propio para distribución de claves
  • Trata las claves como objetos
  • Usa las Lists, Sets y Sorted como arrays de PHP
  • Integración con Zend Framework y Symfony
  • Buena documentación

Rediska