eines per XMPP

A continuació adjunto una petita descripció d’algunes eines per comunicar-se amb una xarxa XMPP que poden ser molt útils:

Idavoll

Implementació del XEP-0060, o sigui, d’un servei de publish-subscribe (PubSub) esta escrit amb Python i Twisted. Bàsicament el que permet és que sobre un servidor XMPP estàndard hi podem connectar un servei basat en PubSub, o sigui, que nosaltres publiquem una serie d’informació que un seguit de clients consulten perquè hi estan subscrits. És un mètode basat en events (no-polling) molt adient per disfondre certs tipus d’informació.

Switchboard

A vegades programem shell scripts que necessiten enviar el seu resultat a la xarxa XMPP, per exemple, imagineu que volem comunicar la caiguda d’un servei a través de GTalk, doncs aquest toolkit ens simplifica moltíssim aquesta tasca. Esta programat en ruby i a part de poder-se usar des de la CLI també podem integrar-ho com a llibreria dins d’un codi en ruby.

XMPP Poetry CLI tools

El seu nom ja ho diu tot, són una col·lecció d’eines que via CLI ens permeten interactuar amb una xarxa XMPP, algunes de les seves funcions són:

  • disco: recull informació sobre serveis
  • pubsub-config: crea, configura i llança queries contra serveis pub-sub

Aquestes eines estan escrites amb Python, Twisted i Wokkel.

XMPPPHP

Llibreria de PHP5 amb suport de:

  • XMPP 1.0 (pot connectar a: GTalk, LJTalk, jabber.org, etc)
  • Suporta TLS
  • Processa diversos formats XML

Sembla força senzill d’usar, per exemple, programar un bot és tan fàcil com això:

<?php
include("xmpp.php");
$conn = new XMPP('talk.google.com', 5222, 'user', 'password', 'xmpphp', 'gmail.com', $printlog=True, $loglevel=LOGGING_INFO);
$conn->connect();
while(!$conn->disconnected) {
    $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start'));
    foreach($payloads as $event) {
        $pl = $event[1];
        switch($event[0]) {
            case 'message':
                print "---------------------------------------------------------------------------------\n";
                print "Message from: {$pl['from']}\n";
                if($pl['subject']) print "Subject: {$pl['subject']}\n";
                print $pl['body'] . "\n";
                print "---------------------------------------------------------------------------------\n";
                $conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);
                if($pl['body'] == 'quit') $conn->disconnect();
                if($pl['body'] == 'break') $conn->send("");
            break;
            case 'presence':
                print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
            break;
            case 'session_start':
                $conn->presence($status="Cheese!");
            break;
        }
    }
}
?>

Redirigit peticions webmail.* en un Plesk

L’objectiu és aconseguir que totes les peticions de l’estil: http://webmail.domini.tld es redirigeixin a: http://domini.tld/webmail amb un servidor amb Plesk.

Creem el fitxer de configuració d’apache: /etc/httpd/conf.d/webmail-redir.conf

<VirtualHost ip_publica_1:80 ip_publica_2:80 ... ip_publica_3:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^webmail.* [NC]
RewriteMap  hostname prg:/opt/scripts/hostname.sh
RewriteRule ^(.*) http://${hostname:%{HTTP_HOST}}/webmail [L,R]
</VirtualHost>

i creem l’script: /opt/scripts/hostname.sh (perms: 755)

#!/bin/sh

while read inputline
do
        domini=$(echo $inputline| cut -d "." -f 2)
        tld=$(echo $inputline|cut -d "." -f 3)
        echo $domini.$tld
done

En escència el que estem fent és aprofitar-nos del mod_rewrite d’apache2 per poder assignar a la funció de mapes un script que retalla el HTTP_HOST treient-li la paraula webmail de l’inici. Amb això obtenim el domini al que volem connectar i només li hem d’afegir la URI a la RewriteRule perquè ens redirigeixi cap on toca.

Generador de codis QR

He montat un generador de codis QR al servidor de casa i que és usable des d’internet. Si a algú li fa falta és tan senzill d’usar com:

  • URL:http://oriol.joor.net/tools/qrcode/qr_img.php?d=URL_CODIFICAR

per exemple:

  • http://oriol.joor.net/tools/qrcode/qr_img.php?d=http://oriolrius.cat

sortida:

Comencem la setmana amb CV actualitzat i portàtil:off

Ahir em va donar per actualitzar el meu CV, potser feia més de 2 anys que no ho feia, per no dir més. Però mira ahir em va picar fer-ho. Així doncs, si algú té curiositat el podeu consultar on sempre: CV. En gran part ho vaig fer perquè hi ha la resposta a la pregunta que hem fa molta gent de: “i tu ara què estàs fent?” cosa gens simple de contestar i vaig pensar, el millor lloc per contestar això potser és al CV i així ho vaig fer.

La mala notícia és que tot fent això es va morir el portàtil, el que sense quasi ni adornar-me’n portava quasi 3 anys fent-me costat (des de l’1 d’agost del 2007). Ja feia unes setmanes que tot d’una la pantalla es posava a parpadejar com una boja i segons com això anava acompanyat d’una penjada de tot el sistema. Doncs ahir al reiniciar varen començar a sortir unes ralles verticals de color blanc i malgrat el disc dur sembla que té activitat a la pantalla externa que hi connecto no arriba a sortir res i no sembla que acabi d’arrencar el sistema operatiu. Per tant, avui toca començar la odisea dels SAT, a veure què diu la gent de Dell. Tenint en compte l’edat del portàtil no descarto la compra d’un nou portàtil això si intentaré arreglar el que tinc ni que sigui via eBay, si la gent de Dell no em dona cap bona solució.

Per cert, ara mateix el que he fet per seguir treballant és treure el disc dur de 500GB i 2’5″ i montar-lo en una placa intel 945GCLF2 que tinc per aquí. De fet, el més important funciona sense problemes, però la diferència de la potència de la gràfica, la CPU i la RAM es noten molt. Però tampoc ens posem exigents ja que per treballar almenys ho puc fer en condicions cosa que hem feia pànic no poder fer.

CouchDB: bases de dades NoSQL

couchdb logo
couchdb logo

Abans de parlar de CouchDB, si no heu sentit a parlar mai de les bases de dades NoSQL, és important que sapigueu que no són bases de dades ralacionals, ni orientades a objectes. Sinó que es basen en un paradigme diferet, són orientades a documents.

Doncs bé, CouchDB és un projecte de la fundació Apache i és OpenSource, és clar. Algunes de les seves característiques són:

  • RESTful API
  • schema-less document store (document=JSON format w/binary support like attachments)
  • multi-version-concurrency-control model
  • user-defined query structured as map/reduce (javascript, python, C, etc)
  • incremental index update mechanism
  • multi-master replication
  • easily distributable
  • update validation
  • programat amb erlang
  • web based basic admin features
  • binding for python, C, .NET, PHP, Ruby, etc.
  • pros: retrieve information, cons: insert data

Actualment estic estudiant si usar aquest producte en un dels projectes que estic treballant. De fet, encara no tinc clar si aplica al 100% a les necessitats que tinc en el projecte però a priori s’ajusta prou bé. Perquè no penseu que això és una raresa que no coneix ningú informar-vos que Ubuntu One usa couchDB com a backend, pels que no conegueu el servei jo el vaig descobrir gràcies a l’article d’Ars Technica: Code tutorial: make your application sync with Ubuntu One.

Inicialment volia fer un manual de les funcions bàsiques de CouchDB però degut al munt de documentació que he trobat he pensat que era una tonteria re-inventar la roda, així doncs a continuació faré una ressenya de les fonts d’informació que he usat per coneixer aquesta base de dades:

  • CouchDB Implementation: descripció molt detallada i no massa extensa de com funciona per dintre aquest sistema de BBDD especialment dedicada al Pau. Destaco aquest paràgraf:
  • CouchDB is a “document-oriented” database where document is a JSON string (with an optional binary attachment). The underlying structure is composed of a “storage” as well as multiple “view indexes”. The “storage” is used to store the documents and the “view indexes” is used for query processing.

  • Serie d’articles del blog RVZ: una pequeña introducción I, II, III y IV.
  • Llibre: CouchDB: The Definitive Guide, consultable online en format HTML.
  • CouchDB.es, sobre CouchDB y NoSQL.

Enllaços orientats a les consultes:

Abans d’acabar comentar que personalmentel que més m’ha costat d’entendre de tot plegat és el tema map/reduce especialment la part de reduce, ja que no acabava de veure al 100% com funcionava i quina finalitat tenia. Potser l’error més gran que he comès és intentar buscar un paral·lelísme directe entre SQL i NoSQL. Sota el meu punt de vista no són tecnologies substitutories, més aviat complementaries ja que cada una s’ajusta a un tipus de solucions diferents. Per tant, abans que res recomano que confronteu la vostre problemàtica amb cada un dels paradigmes: orientat a objectes, bbdd relacionals i orientat a documents.

Turnkey Linux Virtual Appliances

Turnkey Linux logo
Turnkey Linux logo

Ahir comentava que el Carles hem va parlar de ClearOS, doncs bé, també em va comentar que hi havia un projecte opensource anomenat Turnkey Linux que bàsicament es dedica a fer software appliances amb els paquets de codi lliure més famosos, per exemple: LAMP, drupal, joombla, phpBB, dokuwiki, mediawiki, rails, tomcat, mysql, wordpress, etc. actualment diria que hi ha 56 paquets.

De fet, a part de per fer proves sobre certs paquets no trobo massa interessant aquestes software appliances. Però el que si que realment m’ha cridat l’atenció i he estat provant fa uns dies és el Turnkey Core, que en escència és la base del sistema que ells usen per montar les software appliances. Escencialment es tracta d’agafar una Ubuntu 8.04.3 LTS i donar-li suport de:

  • Target systems:
    • CD d’instal·lació optimitzat (instal·lació mínima) i ús com a liveCD
    • Màquines virtuals: VMDK HD i OVF (Xen, VMWare, Parallels, VirtualBox)
    • Amazon EC2 AMI
  • Configuration console (feta en python), permet configurar de forma senzilla funcions bàsiques:
    • xarxa
    • apagar
    • reiniciar
  • Ajax Web Shell (shellinabox): client SSH via web, realment va molt bé!
  • Web Management via Webmin
  • Regenera les claus dels certificats durant la instal·lació
    • SSL: webmin, apache2, lighttpd
    • SSH
  • Definir el password de root durant la instal·lació

Com podeu imaginar-vos la meva idea és agafar aquesta base de sistema per montar els meus propis servidors ja sigui a nivell privat o professional. De fet, estalvia prou feina i la instal·lació que fa Turnkey Core d’Ubuntu és prou petita com per fer una instal·lació a mida en cada cas. O sigui, que es poden intal·lar els paquets que volem sense haver de tenir coses innecessaries. Això si, pensant sempre en servidors.

Scroll to Top