Visualizing Cluster of Tweets in London during the Royal Wedding

So the little storm has arrived! I am now the proud (and tired) father of little Benjamin, and for this reason blocked at home with little or no time for doing anything but changing nappies and cooking super-proteic food for Val. But somehow I found some time amuse myself with a little piece of Processing and wrote a simple code to visualize tweets on a map of London during the Royal Wedding. Easy enough to foresee, tweets during the day are creating nice clusters around Buckingham Palace, Westminster Abbey and the super posh hotel where the Middleton's used to stay.

Here is the result:

To display this data I reused the information stored during the first phase of my Flux of MEME project, fetched from twitter with the Streaming API implementation in its Java flavour twitter4j. Processing is reading the information in XML directly from the database, hence a little PHP backend is providing the XML descriptor for all the posts locations.

Top 5 Albums 2011

Here it goes, in no particular order:

Special mention:

Firenze-Londra, solo andata

tube

Sarà che siamo vicini al Natale e oggi abbiamo comprato l'albero, oppure che mancano poche settimane all'arrivo del piccolino, o magari che stiamo per firmare un mutuo di 25 anni per la nostra casa, o ancora che sto finalmente per chiudere la mia società in Italia... sarà forse l'insieme di tutto questo che mi sta portando oggi a fare qualche bilancio.

Parto dal giorno in cui, quasi 2 anni fa, presi quel biglietto solo andata per Londra, per lasciare quanto avevo costruito fino a quel momento e ricongiungermi finalmente con Valentina dopo 4 faticosi anni di commuting. Non ho memoria di un momento in particolare, ma ricordo perfettamente la sensazione: eccitazione, sconfitta, sollievo, paura. Lunghe settimane a mandare curricula: un lavoro a tempo pieno che non ammette la distrazione di una ricompensa alla fine di una giornata per non provare la sconfitta di gravare economicamente sul nuovo nucleo familiare.
Poi il tempo segue il suo corso, si apre uno spiraglio e si afferra l'opportunità, ci si inserisce nel meccanismo, iniziano arrivare i primi soldi e le prime bollette con il proprio nome stampato sopra (incredibile che tutt'ora mi faccia piacere ricevere il conto del gas, a testimonianza che veramente il mio indirizzo è quello che leggo), si fanno nuove amicizie e si impara a muoversi come dei veri cittadini.

Con una grande differenza: qua è possibile.
Ci ho messo un po' a capirlo, ma più passa il tempo e più mi convinco: in parte riguarda chiaramente essere in un paese che funziona, ma in massima parte riguarda il cambiamento di prospettiva. Non è importante essere per forza in una città di 12 milioni di abitanti dove qualsiasi cosa è possibile, ma il fatto veramente fondamentale è la possibilità di vedere il mondo da una prospettiva diversa, di uscire dall'acquario e abbracciare un sistema di valori diverso, capire veramente che il mondo è più vasto di come lo si percepiva da una singola posizione. Come un occhio solo non è in grado di percepire la profondità, forse anche la vita di un essere umano ha bisogno di un riferimento di valori diversi per poterne tarare l'effettiva importanza. Quindi diventa possibile seguire opportunità o abbracciare modelli di comportamento che prima non potevano nemmeno essere concepiti.

Penso agli amici con cui ho fatto l'università, quelli sui quali si sente sempre dire che lo stato italiano "ha investito", anche se di preciso non ho mai capito a cosa ci si riferisse e soprattutto se la pena di dover rimanere all'interno di un sistema chiuso non sia un compenso già troppo elevato per ripagare questo debito. Del gruppetto con il quale si studiava Calcolatori e Elettrotecnica, ecco cosa è successo: uno sta a Monaco a mettere su famiglia, uno a Los Angeles a scaldarsi al sole, uno a Portland a fare il ricercatore, uno sta a Roma a combattere contro l'apatia dei colleghi e un altro a Firenze, con l'azienda che fa le montagne russe e mi ha impressionato constatare l'assenza dell'usuale ottimismo che lo ha sempre contraddistinto. E uno purtroppo non c'è più.

Risultato: non penso che all'estero si facciano necessariamente mestieri più interessanti, ma penso che in media siano senz'altro più dignitosi, che l'etica del lavoro e la retribuzione ad esso associata siano più giusti. E che a prescindere da questo, chi esce dal proprio paese comincia più facilmente ad usare l'altro occhio e percepire la profondità, cosa altrimenti estremamente difficile da realizzare.

Non ho idea se torneremo mai, penso dipenda da quanto la bilancia delle cose che mancano riesca a pendere rispetto al lato di quelle che si acquisiscono, e sicuramente ciascuno ha le proprie. A me manca la possibilità di trovarsi in 10 minuti a cena insieme alla famiglia che ormai si vede poche volte in un anno, oppure la calma di prendere la moto e salire per le colline e fermarsi da qualche parte a riposarsi senza dover pensare alla settimana davanti, o quei pochi minuti necessari per trovarsi con gli amici di sempre a farsi un aperitivo.
Ma quando mi fermo a riflettere per verificare se sto facendo bene, mi capita spesso di riguardare un pezzetto de "La meglio gioventù" per ricordarmi quanto la bilancia stia ancora pendendo dalla parte di chi offre opportunità, piuttosto che lasciarle inaridire e spegnere.

httpv://www.youtube.com/watch?v=F6sWC1VmJkY

A few shots with my brand new Zuiko 25mm f2.8 "pancake"

Our XMas party with the friends @therumpusroom_ was great this year, and Santa brought me a super cool lens for my E-500, the tiny Zuiko 25mm f2.8 "pancake", you can read a review here.

We went for some shopping today, and took a few shots with London at its best, nice way of testing the new lens, good performances on low light conditions, really impressive contrast and colours (a bit tweaked here, but not too much, just a touch of saturation), below the results (and full set here).

london red sky

scarred sky

autumn in hanley rd

Configuring NGINX to serve multiple webapps from different directories

Few days ago I had to add a wordpress installation within the same environment where a Codeigniter app was already running happily and undisturbed. It took me a while to figure out how to keep separate folders on the filesystem, and serve the blog from a subfolder of the main domain: it ended up that the solution is super simple, but apparently I am not the only one who had similar problems. Symptoms of a bad installation usually result in "no input file specified" messages or, even worse, downloading the php source code with all your precious database passwords shown in clear.

So the premise being:

  • the webapps need to live in sibling folders to keep tidy our github repo, in the example below will be named as /home/ubuntu/repo/webapp (codeigniter) and /home/ubuntu/repo/blog (wordpress)
  • the main webapp needs to respond to all the requests, while wordpress needs to catch only requests starting with /blog

there might be better and more elegant solutions, but this is working for me, including pretty permalinks on wordpress:

server {
    server_name your.domain.com;

    access_log /home/ubuntu/repo/logs/access.log;
    error_log /home/ubuntu/repo/logs/error.log;

    # main root, used for codeigniter
    root /home/ubuntu/repo/webapp;
    index index.php index.html;

    # links to static files in the main app, mainly for dev purposes as this is
    # unlikely to be triggered when using a CDN with absolute URLs to assets
    location ~* ^/(css|img|js|flv|swf)/(.+)$ {
        root /home/ubuntu/repo/webapp/application/public;
    }

    # most generic (smaller) request
    # most of the times will redirect to named block @ci
    location / {
        try_files $uri $uri/ @ci;
    }

    # create the code igniter path and perform
    # internal redirect to php location block
    location @ci {
        if (!-e $request_filename)
        {
            rewrite ^/(.*)$ /index.php/$1 last;
            break;
        }
    }

    # now the meaty part, execute php scripts
    location ~ \.php {
        include /etc/nginx/fastcgi_params;

        # default path of our php script is the main webapp
        set $php_root /home/ubuntu/repo/webapp;

        # but we might have received a request for a blog address
        if ($request_uri ~ /blog/) {
            # ok, this line is a bit confusing, be aware
            # that path to /blog/ is already in the request
            # so adding a trailing /blog here will
            # give a "no input file" message
            set $php_root /home/ubuntu/repo;
        }

        # all the lines below are pretty standard
        # notice only the use of $php_root instead of $document_root
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;

        fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
        fastcgi_index index.php;
    }

    # now the blog, remember this lives in a sibling directory of the main app
    location ~ /blog/ {
        # again, this might look a bit weird,
        # but remember that root directive doesn't drop
        # the request prefix, so /blog is appended at the end
        root /home/ubuntu/repo;
        if (!-e $request_filename)
        {
            rewrite ^/(.*)$ /index.php/$1 last;
            break;
        }
    }
}

please feel free to add comments and suggestions, hope this helps.