Librería SSH para PHP

Para aquellos que quieran desarrollar una aplicación que tenga acceso mediante SSH, le vendrá bien esta librería, aunque con la limitación de que sólo admite SSH1. Esto puede ser un impedimento, pero la librería que hay para SSH2 es PECL, lo cual también puede ser un impedimento a la hora de instalar.

require_once ('ssh_in_php.php');

$host = "127.0.0.1";
$port = 22;
$user = "user";
$password = "pass";

try {
    $ssh = new SSH_in_PHP($host,$port);
    $ssh->connect($user,$password);

    $cycle = true;
    while ($cycle) {
        $data = $ssh->read();
        echo $data;
        if (ereg('\$',$data)) {
            $cycle = false;
        }
    }
    $ssh->write("ls -al\n");
    $cycle = true;
    while ($cycle) {
        $data = $ssh->read();
        echo $data;
        if (ereg('\$',$data)) {
            $cycle = false;
        }
    }

    $ssh->disconnect();

} catch (SSHException $e) {
    echo "An Exception Occured: {$e->getMessage()} ({$e->getCode()})\n";
    echo "Trace: \n";
    echo print_r($e->getTrace());
    echo "\n";
} 

SSH in PHP

Consejos para desarrollar en la nube

Aunque no soy muy fan de la moda del cloud computing, quizás porque se habla de ello muchas veces un tanto a la ligera, si que creo que desarrollar aplicaciones en arquitecturas basadas en la nube es algo que en el futuro tendremos que realizar (más basado en hosting que en servicios). Por ello estos consejos pueden ser interesantes:

  • Las máquinas son igualmente inseguros: es por ello que tampoco merece la pena gastar más medios en máquinas más críticas como la BD. Toda máquina falla, por lo que es mejor diseñar la arquitectura teniendo esto en mente para poder recuperarnos de una caída más facilmente.
  • Una aplicación en la nube depende absolutamente de la red y el IO, por lo que no es buena idea tenerlos “físicamente” muy lejos. Esto es uno de los motivos por los que yo, personalmente, no creo que tenga mucho éxito el concepto nube pensado como aplicación en Google y BD en Amazon (o parecido), algo que muchos se dedican a “vendernos”.
  • La red no es fiable, por lo que es conveniente tener sistemas de monitorización para saber qué ocurre en las máquinas y si tienen accesos unas a otras

El post original explica mejor cada punto y ofrece otros consejos más, que recomiendo leer.

Designing applications for cloud deployment

HyperGraphDB: otra base de datos de grafos

Si hace tiempo hablé de OQGraph, un plugin para MySQL para almacenar grafos, en este caso se trata de una BD diseñada específicamente para ello. HyperGraphDB es una base de datos orientada a inteligencia artificial y redes sociales que mediante el almacenamiento de grafos facilita aplicaciones de este estilo.

Se trata de una BDopen source realizada en Java que es extensible, portable, distribuida y incrustable. Y cuyas características principales son:

  • Un segmento puede apuntar a más de un nodo.
  • La unidad básica de almacenamiento se llama átomo y cada átomo tiene su tipo y puede apuntar a ninguno o más átomos.
  • Los tipos de datos se manejan mediante un sistema almacenado en una estructura hipergrafo. Los tipos son en sí átomos pero con un rol particular.
  • Es accesible por cualquier lenguaje de programación y el sistema de almacenamiento usado a bajo nivel se basa en BerkeleyDB.
  • Procesos distribuidos basados en P2P para replicación y particionamiento de datos.

Vamos, una joyita para implementar una red social, aunque estaría bien conocer pruebas de rendimiento.

HyperGraphDB

Vía / High Scalability

oEmbed: formato para URLs de contenido EMBED

Bueno, el título es algo difícil de entender, pero el concepto es fácil, oEmbed es un formato para devolver información sobre URLs que muestran contenido incrustable: imágenes, vídeos, …

Por ejemplo para Flickr sería:

http://www.flickr.com/services/oembed/?url=http%3A//www.flickr.com/photos/bees/2341623661/

Y el resultado en formato JSON sería:

{
  "version": "1.0",
  "type": "photo",
  "width": 240,
  "height": 160,
  "title": "ZB8T0193",
  "url": "http://farm4.static.flickr.com/3123/2341623661_7c99f48bbf_m.jpg",
  "author_name": "Bees",
  "author_url": "http://www.flickr.com/photos/bees/",
  "provider_name": "Flickr",
  "provider_url": "http://www.flickr.com/"
}

Existen librerías PHP y jQuery que funcionan con proxy para obtener la información.

Learning oEmbed: Convert Links Into Embedded Content

Stop Spam Referer PHP Script

Script PHP que nos facilita la tarea de luchar contra el SPAM. Se trata de un script sencillo de instalar y que podemos añadir a otras aplicaciones ya existentes. Entre las características que ofrece nos encontramos con:

  • Deniega acceso a referes de dominios
  • Deniega acceso por palabras
  • Ahorra ancho de banda
  • Black list para referes
  • White List para referes
  • White Listde palabras clave
  • Bloqueo por IP
  • Ligero
  • No necesita BD

Stop Spam Referer PHP Script

Crear un carrito de la compra con CodeIgniter

Sigo en mi evangelización de CodeIgniter, y en este caso se trata de un mini tutoria que explica cómo crear un carrito de la compra usando la librería Shopping Chart Class que ofrece CodeIgniter. Quizás sea mejor utilizar aplicaciones específicas para crear tiendas, pero en algunos casos no nos queda otra que implementarlo nosotros mismos.

Building a Shopping Cart using CodeIgniter’s Shopping Cart Class

Vía / PHPDeveloper.org

iJab: chat javascript usando XMPP/Jabber

iJab es una librería javascript que nos permite añadir chat en nuestras aplicaciones web, con la característica que usa XMPP/Jabber para realizar las comunicaciones.

Entre las características encontramos:

  • Basado en el protocolo XMPP: lo cual permite usar servidores basados en ese protocolo
  • Soporte para MSN y AIM, añadiendo transports al servidor XMPP
  • Totalmente Javascript
  • Compatible con Firefox, IE, Chrome y Safari
  • Themes
  • Modos de aplicación: stant-alone, web chat y live
  • Sin pop-ups
  • Notificaciones de nuevos mensajes
  • Sonido
  • Múltiples usuarios en el chat (MUC)
  • Búsqueda de usuarios
  • Administración: permite añadir y borrar usuarios y administrar grupos
  • Smileys

iJab

Vía / WebAppers