lunedì 30 luglio 2012

Disegnare grafi con GraphViz


Per concludere il mese di luglio, oggi parlerò di un altro programma che, probabilmente, servirà a un numero molto esiguo di persone, ma che è comunque interessante e degno di essere tenuto in considerazione per quelle rare occasioni in cui è necessario disegnare un grafo. Grafo è la traduzione, non particolarmente bella né faticosa, dell’inglese graph e indica uno schema di questo tipo:

In altri termini, un insieme di nodi (quelli a forma di ellisse) collegati tra loro da archi. Questo tipo di rappresentazione è utilizzato in diversi settori ed è dunque probabile che vi sia già capitato di vederne altri esemplari. Un pratico programma per disegnarli al computer è GraphViz ed è del suo funzionamento che parlerò oggi, per fornirne una breve presentazione.

GraphViz è un programma open source, disponibile in versioni per sistemi operativi Windows, Linux e Macintosh e scaricabile gratuitamente dal sito ufficiale. Il suo utilizzo non è forse dei più semplici, soprattutto perché è formato da vari componenti, utilizzabili in gran parte da linea di comando, oppure come librerie all’interno di programmi più ampi. Esiste però anche una interfaccia grafica piuttosto semplice, che permette di “disegnare” e creare grafi, ed è di quella che parlerò oggi, perché è anche la componente più utile per tutti i comuni mortali che vogliono soltanto disegnare un grafo e salvarlo come immagine, da inserire magari in tesi, tesine o qualsiasi altro tipo di elaborato.
L’interfaccia grafica di GraphViz si chiama gvedit: in un ambiente Windows, dopo aver installato il programma la troverete nel menu Start. Una volta avviata, si aprirà una finestra di questo tipo:
Ok, potrebbe non essere l’interfaccia grafica dei vostri sogni, soprattutto se vi aspettavate qualcosa per disegnare, oppure per trascinare e appiccicare insieme i vari pezzi di un grafo, , ma questo è ciò che passa il convento ed è anche ciò che serve per utilizzare GraphViz: uno spazio in cui descrivere il vostro grafo e osservare il modo in cui GraphViz lo disegnerà per voi. Il punto è proprio questo: voi descrivete il grafo e GraphViz lo disegna. Per descrivere il grafo che volete realizzare, dovrete utilizzare il cosiddetto “linguaggio DOT”, che è una forma molto blanda e specifica di linguaggio di programmazione. Niente su cui perdere il sonno, in ogni caso; a titolo di esempio, ecco il codice per disegnare il grafo che ho utilizzato in apertura di articolo:
digraph G {
  a -> b;
  a -> c;
  a -> d;
  b -> e;
  b -> f;
  c -> g;
  d -> h;
  d -> i;
}
Direi che non è particolarmente complicato, ma adesso vedremo in dettaglio da cosa sia composto.
La prima cosa da specificare, e da decidere, è se vogliamo un grafo diretto, oppure un grafo in cui non siano specificate le direzioni: per intenderci, in un grafo diretto gli archi hanno una freccia, che indica la direzione in cui devono essere percorsi (il grafo dell’esempio in alto), mentre in un grafo non diretto gli archi non hanno alcuna freccia e possono essere percorsi in entrambi i sensi. Per un grafo diretto, utilizzeremo il termine digraph; per un grafo non diretto, il termine graph.
Come secondo elemento, possiamo specificare un nome per il nostro grafo: nell'esempio qui sopra, io ho utilizzato un semplice G, ma potete utilizzare un nome a vostra scelta o anche non metterlo. Dopo il nome, comincia il grafo vero e proprio ed è racchiuso tra due parentesi graffe, { e }: tutto ciò che si trova tra queste parentesi è la descrizione di cosa e come dovrà essere disegnato da GraphViz.
Nella forma più semplice, utilizzando tutti gli attribuiti preimpostati sia come forma dei nodi, sia come colori, sia come font, tutto ciò che noi dobbiamo fare è scrivere un elenco dei vari nodi, indicando i collegamenti tra i vari nodi. In un grafo diretto, i collegamenti saranno espressi con un -> (digraph), mentre in un grafo non diretto saranno espressi con un -- (graph). Se vogliamo dunque dire che dal nodo a si arriva al nodo b, scriveremo a -> b; se vogliamo dire che a e b sono collegati, ma senza specificare il senso di percorrenza, scriveremo a -- b. Alla fine di ogni riga (che corrisponde a un collegamento nel grafo), è importante inserire sempre un punto e virgola.
Diciamo dunque che vogliamo disegnare un grafo non diretto. Avviamo gvedit, clicchiamo sulla icona a forma di foglio per creare un nuovo file, e scriviamo i collegamenti che vogliamo. Un esempio potrebbe essere questo:
graph Prova {
  a -- b;
  a -- c;
  a -- d;
  b -- e;
  c -- f;
  c -- g;
  g -- h ;
  d -- h;
}

Adesso che abbiamo descritto il nostro grafo, dovremo anche provare a disegnarlo. Dal menu in alto, selezioniamo “Graph” e “Settings”, oppure clicchiamo sulla seconda icona da sinistra (quella con l’omino che corre e una specie di quadrato blu davanti alle gambe): si aprirà questa finestra
Possiamo selezionare diverse opzioni, ma limitiamoci a quelle indispensabili per disegnare un grafo. Prima di tutto, dobbiamo scegliere il formato in cui vogliamo salvare l’immagine: in “Output file Type” abbiamo una scelta piuttosto ampia di formato, dal png (impostato di default), al jpg, al pdf, allo svg, eccetera. Per semplicità, scegliamo il jpg, ma potete utilizzar eil formato che preferite o che meglio si adatta al vostro lavoro.
Il passaggio successivo è la scelta del luogo in cui salvare il nostro grafo, nonché il nome. Lo possiamo fare alla voce “Output file Name”: clicchiamo sul pulsante “...”, spostiamoci nella cartella di nostro gradimento e poi inseriamo il nome che l’immagine dovrà avere. Fatto anche questo, diamo l’ok e torneremo alla finestra principale, dove ad accoglierci ci sarà il nostro grafo.
Come vedete, non è un programma difficile da utilizzare, dopotutto: dover scrivere a mano il grafo che volete disegnare potrebbe non essere di vostro gradimento, ma vi dà un grande potere sull'aspetto finale del grafo, che potrete determinare in molti modi diversi. Prima di cominciare con la lista di nodi, ma anche accanto al nome di ogni nodo, è possibile inserire diversi attributi, per specificarne l’aspetto in base ai nostri gusti. Per una lista completa di questi attributi vi rimando ai manuali che vi saranno installati assieme al programma, in particolare a dotguide.pdf, dove potrete trovare diversi esempi in proposito.

giovedì 26 luglio 2012

Scaricare foto da Facebook con PhotoGrabber


Esistono vari sistemi per scaricare sul nostro computer una foto che qualche amico ha caricato su Facebook. Il più artigianale, ma sempre efficace, è procedere col menu contestuale del tasto destro del mouse: ci permetterà sia di copiare l’indirizzo dell’immagine, sia di salvarla. Un metodo ancora più artigianale, ma molto smanettone, consiste nel visualizzare il codice sorgente della pagina in cui è contenuta la foto e frugare tra i link che troveremo, eventualmente copiando e modificando quello che ci interessa, fino a che non avremo ottenuto la giusta posizione della foto che vogliamo. Infine, ci possiamo accontentare della funzione “Scarica”, che Facebook ha introdotto di recente e che troveremo più o meno accanto a ogni foto, oppure all’interno del menu “Opzioni”, a seconda di come la stiamo visualizzando.
Per scaricare interi album in un colpo solo, invece, dovremo procedere con altri strumenti. Dopo la scomparsa di FacePAD/PhotoJacker, compianta estensione per Firefox che permetteva di scaricare album in modo rapido e comodo, altre estensioni hanno cercato di riempire il vuoto, come ad esempio Download Facebook Album, estensione per Google Chrome dall’avvio lento, ma che alla fine esegue il suo lavoro. Esistono poi anche programmi che non sono estensioni e che, quindi, possono essere utilizzati indipendentemente dal nostro browser: uno di questi, forse il più famoso in questo periodo, è PhotoGrabber.
PhotoGrabber è un programma di dimensioni contenute (5 MB circa la cartella scaricabile, che diventano 14 MB una volta estratto), disponibile sia per sistemi operativi Windows che per Macintosh (niente Linux, per adesso) e scaricabile gratuitamente dal suo sito. Ha un avvio piuttosto macchinoso e non è un fulmine di guerra, in fase di scaricamento, però funziona e offre molte più opzioni rispetto a una normale estensione per browser. A titolo informativo, PhotoGrabber è realizzato in Python, per questo vi ritroverete con un sacco di files dal nome strano e dall'estensione esotica, all’interno della cartella: PhotoGrabber non richiede installazione e questo significa, soprattutto per gli utenti Windows, che la cartella conterrà svariate librerie, indispensabili per farlo funzionare. A ogni modo, l’unico file che vi interesserà sarà pg.exe, ossia il file eseguibile: avviatelo con un doppio click e ignorate allegramente tutto il resto della cartella.
Una volta avviato PhotoGrabber, si aprirà una piccola finestra, questa:
Clicchiamo il pulsante “Login”, che occupa praticamente l’intera superficie della finestra. Sempre a titolo informativo, è indispensabile essere connessi, perché cliccare il pulsante “Login” ci aprirà una pagina di Facebook. Questa:
L’applicazione PhotoGrabber ci chiede l’autorizzazione per procedere. O meglio, ci chiede svariate autorizzazioni, che potete leggere nella pagina: più o meno le solite richieste di tutte le applicazioni di Facebook. per procedere con l’utilizzo è necessario accettare. Una volta accettato ed eseguito in automatico il login a Facebook, vedremo questo:
PhotoGravver ci ha fornito un codice, che ci servirà per accedere al programma vero e proprio. Il codice appare nel riquadro bianco, subito sotto la scritta “Copy and paste this code into PhotoGrabber to download your photos”. Selezionate il codice e copiatelo. Col nostro nuovo codice, ottenuto da PhotoGravver, possiamo abbandonare il browser e tornare alla finestrella del programma. Incolliamo il codice nella parte alta della finestra, dove troviamo la scritta “Paste your login toker here”, e il risultato sarà questo:
Nel riquadro sopra il pulsante “Begin download” (che nella immagine è bianco) troveremo una lista di tutti i nostri amici, le pagine d cui siamo fans e i gruppi di cui facciamo parte. A questo punto, possiamo selezionare l’amico da cui vogliamo scaricare le foto e poi dedicarci alla sezione successiva, ossia quella che si trova proprio sopra questo riquadro: la sezione “I want to download”.
Abbiamo quattro opzioni e ne possiamo selezionare quante vogliamo, da una sola a tutte e quattro: in teoria potremmo anche non selezionarne nessuna, ma in questo caso sarebbe piuttosto inutile, perché PhotoGrabber non potrebbe scaricare alcunché.
All tagged photos of the user ci permette di scaricare tutte le foto in cui l’amico selezionato è stato taggato: in pratica, tutte quelle foto che compaiono in una miscellanea sotto i suoi album.
Entire album if it contains a tagged photo è una versione più radicale della precedente opzione: ci permette di scaricare l’intero album a cui appartiene una foto in cui il nostro amico è stato taggato. Se è possibile scaricarlo, ovviamente: non scavalcherà eventuali limitazioni di privacy dell'album.
Albums uploaded by the user ci permette di scaricare tutti gli album creati dal nostro amico, in un colpo solo.
Comments and tagging information, infine, aggiungerà un file HTML in cui potrete vedere le foto accompagnate da commenti e altro.
Dopo aver selezionato l’amico da cui scaricare e il tipo di materiale che vogliamo scaricare, basterà cliccare “Begin download”: ci sarà richiesto di selezionare la cartella in cui salvare tutto il materiale, eventualmente creando una nuova cartella, e poi il download avrà inizio. Pian piano.
Il procedimento è alquanto macchinoso, come dicevo all’inizio, e lo dovrete ripetere a ogni avvio del programma, ma potreste ritenere che ne valga la pena, in cambio delle opzioni di scaricamento che vi offre. A voi la scelta.
Come ultima avvertenza, controllate bene il numero totale di foto che vi apprestate a scaricare: potrebbe essere un processo parecchio lungo.