Crear un sistema de notificación web con XMPP y PHP

Completísimo tutorial que nos explica como realizar un sistema de notificación web en tiempo real mediante XMPP y PHP. El tutorial nos explica cómo funciona el XMPP, cómo instalar Openfire (yo he usado ejabberd y este no le conozco, si alguien lo conoce que me comente que tal).

En el ejemplo hará uso de jQuery y Strophe para acceder al servidor XMPP.

Build a web-based notification tool with XMPP

Gracias Gerardo por el aviso

Tutorial y librería para caché fragmentado

El caché fragmentado se usa para dividir una página en partes y cachearlas independientemente para así poder reutilizarla en diferentes partes, por ejemplo si se trata de un módulo del sidebar que va en distintas páginas, se puede cachear independientemente y utilizarlo en cada uno de ellas.

La página que referencio explica muy bien el concepto de cache fragmentado y a su vez ofrece una librería que facilita su uso de este tipo de cache.

if (!FragmentCache::beginCache('all_available_products')) {
echo "content to be cached...";
FragmentCache::endCache();
}

Fragment Cache - an introduction / PHP

Vía / PHPDeveloper.org

Cómo autenticar usuarios con Facebook Connect usando PHP

Completo tutorial que nos explica paso a paso qué tenemos que hacer para que nuestros usuarios se puedan autenticar usando Facebook Connect (la nueva API de Facebook mucho más sencilla que la anterior).

El tutorial se divide en los siguientes pasos:

  • Crear la tabla MySQL para nuestra aplicación, esto lo tendremos que modificar según nuestra aplicación
  • Dar de alta la aplicación en Facebook
  • La petición de permiso
  • El registro y la autenticación
  • Extender los permisos que se solicita
  • Comprobar si se tiene permisos
  • Publicar en el muro

How to Authenticate Users With Facebook Connect

Vía / PHPDeveloper.org

Enviar SMS desde Movistar con PHP (desde España)

Movistar tiene una API para PHP muy sencillita que permite enviar SMS desde un número que tenga contrato con ellos de forma increíblmente sencilla.

Para poder enviar los SMS primero hay que darse de alta, para lo cual hay que mandar un SMS con texto ‘CLAVE’ al 22770, recibes otro SMS con una password y ya puedes enviar SMS desde tus aplicaciones, aunque eso sí, no son gratuitos y te costará lo mismo que tengas contratado.

include "APISMS.php";
$sms = new MensajeriaWeb();
$log = "6xxxxxxxx"; // Tu telefono
$pwd = "xxxxxx";	// password que te han mandado vía SMS
$dest = "6xxxxxxxx"; // telefono de destino
$msg = "texto+del+mensaje"; // Mensaje
$sms->EnviaMensaje($log, $pwd, $dest, $msg);

SMS Send

Usar Neo4j con PHP usando REST

neo4j es una base de datos de grafos que puede ser muy útil para aplicaciones tipo redes sociales. El problema para los que usamos PHP es que neo4j está en Java y para usarlo desde PHP o se una un bridge que conecte con Java o usar la versión REST de neo4j y acceder vía web.

Su uso es muy sencillo:

$graphDb = new GraphDatabaseService('http://localhost:9999/');
$node = $graphDb->createNode();
$node->message = "Hello, ";
$node->blah = "blah blah";
$node->save();

Se le puede añadir todas las propiedades que se quieran, que se transforman en un array de datos que luego se enviarán en json.

El único problema que tiene esta librería es que no genera índices, aunque es muy sencillo modificar, ya que tan solo es necesario añadir una llamada para generar el índice:

HTTPUtil::jsonPostRequest($this->_neo_db->getBaseUri().'index/node/clave/'.$this->_data['clave'], $this->_neo_db->getBaseUri().'node/'.$this->_id);

siendo ‘clave’ lo que queramos añadir como índice. También es necesario modificar HTTPUtil::jsonRequest para que cuando $data no sea un array no se codifique en JSON.

Neo4J REST PHP API client

Crear un provider de OAuth con PHP

Si normalmente escribo sobre clientes OAuth, hoy voy a referenciar un artículo sobre cómo crear un provider de OAuth, por si queremos que los usuarios se conecten a nuestra aplicación a OAuth.

Para ello primero hay que:

  • Ofrecer la clave de registro del consumer, aunque no me gusta el método que usa para obtener un número aleatorio
  • Token de autorización
  • Token de acceso
  • Modificaciones de las llamadas al API
  • Y lógicamente la lógica del provider de OAuth

Writing an OAuth Provider Service

Vía / PHPDeveloper.org

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

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