Category: software

  • UML Distilled, guida rapida al linguaggio di modellazione standard (terza edizione): la mia recensione

    Per rispolverare la mia preparazione in ingegneria del software, ho deciso di leggere la terza edizione di UML Distilled, scritta dall’autorevole Martin Fowler; in passato ho letto la seconda edizione, ma i libri di Fowler sono una lettura sempre piacevole e sopratutto utile. Il libro è condensato (solo 155 pagine) ma pregno di argomenti e tecniche utili. Innanzitutto, specifico subito che il libro si basa sulla specifica UML2 e in particolare presenta una descrizione chiara e concisa sulle tecniche fondamentali e utili a chi si occupa di progettazione del software. Le tecniche sono presentate in modo semplice e descrittivo, corredati da un paio di esempi per ogni tecnica. Inoltre, si illustrano i punti di forza e debolezza di ogni tecnica. Oltretutto, per ogni tecnica è presente una sezione che spiega quando è utile utilizzare una determinata tecnica piuttosto che un’altra. Ad esempio, i diagrammi di package sono utili nella progettazione di sistemi di grande scala per documentare le dipendenze tra i componenti più importanti. Al termine di ogni capitolo, Fowler introduce un repertorio di esercizi corredati di soluzione. A mio avviso, le tecniche più utili tra quelle presentate sono:

    • Diagrammi delle classi: consentono di descrivere le classi che compongono il progetto e le relazioni tra di esse;
    • Diagrammi dei package: descrive le relazioni tra i package che compongono il model;
    • Diagrammi di deployment: permette di definire come le componenti software saranno distribuite fra i vari nodi hardware a disposizione per il progetto;
    • Casi d’uso (use case): descrivono le funzioni e i servizi offerti dal progetto dal punto di vista di un attore esterno;
    • Diagrammi di attività: definisce una serie di attività per svolgere una determinata funzionalità. È simile ad un diagramma di flusso;
    • Diagrammi dei componenti: complementa i diagrammi di deployment ed indica i componenti software che compongono il sistema e le relazioni tra di essi;
    • Diagrammi di sequenza: esplora il comportamento dei componenti dal punto di vista temporale, e spiega l’evoluzione e la relazione dei componenti in relazione ai messaggi inviati e ricevuti agli altri componenti.

    Nel libro vengono anche presentate tecniche non strettamente UML, ma sicuramente utili come le schede CRC ed i design pattern. Il testo è pensato per un pubblico che già possiede conoscenze di OOP e che conosce qualche altra metodologia di progettazione standard. In definitiva, quindi, un libro da avere assolutamente nella propria collezione personale. Costo: 25€

  • AddressBookSync: sincronizzare i contatti Facebook con AddressBook (Rubrica Indirizzi) su OSX

    Dopo essere passato a OSX, lo strumento che utilizzo per la rubrica è AddressBook (Rubrica Indirizzi per chi ha OSX in italiano); è già preinstallato e integrato perfettamente con il sistema operativo (non per questo è stato sviluppato da Apple). Inoltre, grazie alla sincronizzazione con iTunes e Google Contacts, condivido i contatti anche su iPhone. In questo modo ho un’unica rubrica condivisa tra PC e iPhone, modificabile da entrambi i dispositivi.

    Come vi ho già detto in passato, ritengo la gestione dei contatti un’attività molto importante; infatti, dedico spesso del tempo per ordinare ed integrare i dettagli dei contatti della mia rubrica.

    Proprio per integrare le informazioni dei miei contatti, tempo fa vi avevo parlato di Fonebook, un applicativo per Windows per aggiornare i dati presenti in rubrica con quelli condivisi dai vostri contatti eventualmente presenti su Facebook. Fino ad ora sono stato alla ricerca di un degno sostituto per OSX/AddressBook… e finalmente l’ho trovato: AddressBookSync.

    L’applicazione permette di integrare i dettagli dei vostri contatti presenti in AddressBook con i dettagli condivisi dagli amici eventualmente presenti su Facebook, come ad esempio:

    • la foto profilo (utile nel caso in cui ci telefoni: all’arrivo della chiamata, iPhone visualizzerà il nome del contatto ed anche la sua foto, consentendoci di riconoscere a colpo d’occhio chi ci sta chiamando);
    • il compleanno (integrandosi con AddressBook e quindi con iCal, potremo ricordarci anniversari importanti).

    L’associazione tra il contatto presente in AddressBook e il relativo profilo Facebook è automatica (a patto che i nomi siano identici, quindi i contatti con “soprannomi” Facebook faticheranno ad essere identificati).

    Dopo aver utilizzato il prodotto per un paio di settimane, la sincronizzazione con AddressBook è semplicetrasparente: è sufficiente selezionare gli utenti che volete aggiornare, premere “Sync to Address Book” ed il gioco è fatto. Il processo è molto veloce (ma dipende dal numero di contatti che avete sia in rubrica che in Facebook, quindi YMMV).

    In conclusione, quindi, sicuramente da provare!

    AddressBookSync è scaricabile gratuitamente dall’indirizzo web dello sviluppatore.

  • Ordinare per nome i bookmark (segnalibri) su Google Chrome

    Recentemente sono passato a Chrome come browser principale su tutti i miei computer.

    Una delle funzionalità che mi manca di Firefox è quella dell’ordinamento dei bookmarks (il menu contestuale che si apre quando cliccate su una cartella di bookmark e scegliete “Ordina per nome”). Dopo aver cercato questa feature su Chrome, ho scoperto che la possibilità di ordinare per nome i segnalibri è possibile anche su Chrome, tuttavia la modalità di utilizzo è un po’ differente.

    Per ordinare i bookmark, apriamo il gestore dei bookmark (⌘+Alt+B su Mac) e apriamo la cartella con i bookmark che vogliamo ordinare.  Dal menu in alto, “Organizza”, scegliamo “Riordina per titolo”.

    I bookmark della cartella selezionata verranno cosìordinati per titolo della pagina web salvata come segnalibro.

  • Dropbox: come sincronizzare files e cartelle esterne alla cartella Dropbox

    Vi ho già parlato di Dropbox e delle sue utili funzionalità; dopo averlo utilizzato per un po’, mi sono accorto di un grosso limite: Dropbox sincronizza “solo” il contenuto della cartella Dropbox. Ho così avvertito la necessità di poter espandere la sincronizzazione anche alle cartelle non incluse nella cartella di riferimento.

    Per realizzare questo workaround ci vengono in aiuto i link simbolici. Come sapete, infatti, per OSX e per GNU/Linux esistono i cosiddetti link simbolici, ovvero degli speciali “rimandi” tra file e directory presenti sul file-system. L’idea è molto semplice: nella cartella Dropbox [cioè la cartella di sincronizzazione] inseriamo un link simbolico ad una cartella che vogliamo sincronizzare, come ad esempio ~/Wallpapers.

    In questo modo la cartella Dropbox contiene un link (e non una copia) alla cartella Wallpapers, ma come risultato anche la cartella Wallpapers verrà sincronizzata grazie a Dropbox!

    Per realizzare la sincronizzazione di files e cartelle esterne alla cartella di sincronizzazione, quindi, aprite un terminale (OSX e GNU/Linux) e digitate:

    • (per aggiungere la sincronizzazione di una directory, in questo caso Wallpapers): ln -s ~/Wallpapers ~/Dropbox/Wallpapers
    • (per aggiungere la sincronizzazione di un file, in questo caso myFile): ln -s ~/myFile ~/Dropbox/myFile

    Fatto! Il file o la directory che avete specificato continuerà a rimanere all’esterno della cartella Dropbox (e voi potrete usarlo come avete sempre fatto) e verrà anche sincronizzato sul vostro account Dropbox (ad ogni modifica!).

    Se utilizzate Windows, invece, l’idea di base è più o meno simile a quella presentata che utilizza i link simbolici, ma in questo caso si usano le junction di NTFS. Il procedimento è spiegato in questo articolo.

  • Dropbox: un hard disk sempre disponibile e sincronizzato automaticamente per tutti i tuoi computer

    Da un po’ di tempo ho iniziato ad usare Dropbox, un servizio gratuito che permette di sincronizzare automaticamente i propri files su più computer.

    Veniamo subito all’uso che ne faccio: l’ho installato sul desktop e sul notebook che porto sempre con me; anziché mettere su USB key i files che voglio sempre avere disponibili su entrambi i PC, uso Dropbox e i files vengono automaticamente sincronizzati tramite la connessione Internet.

    Usare Dropbox è molto semplice: una volta creato l’account, vi vengono allocati 2GB di spazio web (più che sufficienti per le mie necessità di sincronizzazione). Per iniziare ad usare effettivamente il vostro account avete due possibilità:

    1. usare il client web (da browser) per fare l’upload e il download manuale dei files a cui siete intessati [questo metodo è abbastanza macchinoso ed è utile solo in rari casi, come ad es. macchine condivise]
    2. scaricare ed installare il client per il vostro sistema operativo [preferibile]. Vi ricordo che Dropbox è disponibile per Windows, MacOSX e Linux.

    Una volta installato il client verrà creata una directory “Dropbox” nella vostra home (~/Dropbox per MacOSX e Linux, C:\Documents and Settings\<utente>\Dropbox per Windows XP, C:\Users\<utente>\Dropbox per Vista e 7). Ora, veniamo alla parte interessante: tutti i file che saranno nella directory Dropbox sono automaticamente sincronizzati tra tutti i (vostri) PC che hanno installato il client Dropbox; e potrete perfino accedervi da web.

    E non è finita: potete condividere una cartella specifica con un altro utente di Dropbox (utile se vogliamo collaborare ad un progetto con un amico, ad esempio); ogni utente ha a disposizione un’area pubblica (~/Dropbox/Public): tutti i files in questa directory sono pubblici e saranno accessibili a tutti (anche agli utenti che non sono registrati a Dropbox): questa feature è molto utile se volete condividere velocemente un contenuto e non potete usare l’email (perché, ad esempio, sono attivi dei limiti sulla dimensione degli allegati).

    Passiamo ora alla parte privacy: tutto quello che mettete nella vostra cartella Dropbox sarà accessibile soltanto a voi (a parte, come già detto, la cartella Public/, lo sharing e a patto che le vostre credenziali siano note soltanto a voi). Il trasferimento dei files avviene tramite SSL (quindi il traffico tra voi e Dropbox è cifrato); infine, tutto quello che caricate su Dropbox è cifrato tramite AES (e quindi soltanto voi, con le vostre credenziali, potrete decifrarlo e accedere ai contenuti). Ricordo che tutti questi meccanismi di sicurezza sono assolutamente trasparenti all’utente.

    Come già detto, lo spazio disponibile inizialmente agli utenti è 2GB. Potete aumentare lo spazio fino a 10GB invitando i vostri amici. Se avete bisogno di più spazio, potrete acquistare più spazio sul sito di Dropbox.

    Ricapitolando:

    • Gratis: da 2GB a 10GB (se ve ne serve di più, potete acquistarlo)
    • Accesso sicuro dai vostri computer e anche da mobile (iPhone, Android)
    • Possibilità di condividere selettivamente alcuni files/directory con altri utenti Dropbox
    • Possibilità di condividere selettivamente alcuni files/directory con tutti (anche non registrati a Dropbox)
    • Utilizzo principale: sincronizzazione di files tra computer diversi. Online potete trovare tante altre idee interessanti e spunti di utilizzo (come sincronizzare il vostro profilo Firefox su più computer tramite Dropbox).

    Detto fatto! Per iscrivervi vi basterà cliccare sul link sottostante.

  • Windows 7: generare un report dei consumi energetici

    Windows 7 permette di monitorare e creare un report dei consumi energetici del proprio computer: questo può essere utile sia per conoscere quali sono i dispositivi collegati al PC che consumano più energia, sia per diagnosticare perché la batteria del proprio notebook si consuma più velocemente quando colleghiamo una particolare periferica o lanciamo un determinato software.

    Per generare il report, apriamo un prompt dei comandi (in modalità amministratore) e digitiamo: powercfg –energy

    L’utilità raccoglierà i dati per i successivi 60 secondi, e genererà il file energy-report.html in C:\Windows\system32. Apriamo questo file con un browser e visualizziamo il rapporto, contenente i risultati dell’analisi, divisi in errori, avvisi e informazioni. Tutte queste informazioni sono molto utili per capire quali sono i dispositivi non power-friendly, che ad esempio non supportano il suspend e che quindi causano un continuo wakeup della CPU.

    Per maggiori informazioni sull’utitlità riguardante i consumi energetici, vi consiglio la visione di How Do I: Using PowerCfg in Windows 7.

  • Come mantenere attiva una sessione SSH (keepalive)

    Quando ci connettiamo tramite ssh ad un server remoto, nella maggior parte dei casi la connessione viene terminata dopo un periodo di inattività (idle), e siamo quindi costretti a riconnetterci al server.

    La disconnessione può essere dovuta ad una serie di ragioni; la più verosimile, nel caso di inattività, è quella che un nodo intermedio abbatta la connessione (trascorso un certo periodo di tempo il cui il traffico scambiato è nullo) per mantenere basso il numero di connessioni (e quindi risparmiare risorse). Questo comportamento è perfettamente legittimo (quasi tutti i dispositivi e i provider implementano questa funzionalità).

    Possiamo però evitare questo comportamento abilitando il keepalive di SSH. facendo in modo che SSH scambi del traffico “fittizio” quando la connessione non sta scambiando dati, in modo che la connessione non venga abbattuta. Nota: questa funzionalità è disabilitata di default da ssh.

    Abilitare questo comportamento è molto semplice, e può essere ottenuto in due modi:

    • Se vogliamo abilitare il keepalive per tutti gli utenti, dovremo avere accesso root alla macchina. Modifichiamo il file /etc/ssh/ssh_config e aggiungiamo queste righe:
      ClientAliveInterval 300
      ClientAliveCountMax 1000
    • Se vogliamo abilitare il keepalive solo per l’utente corrente, modifichiamo il file ~/.ssh/config e aggiungiamo queste righe:
      ClientAliveInterval 300
      ClientAliveCountMax 1000

    In questo modo, il server ssh invierà un messaggio di keep-alive nel caso in cui la connessione ssh non scambi dati per 5 minuti (300 secondi), e ripeterà l’invio per massimo 1000 volte.

  • Trenitalia e Viaggiatreno: come implementare un servizio “fai da te” per avere le informazioni dello stato di un treno via SMS

    Da quando sono diventato un pendolare (per lavoro), ho iniziato a (ri)frequentare assiduamente le stazioni ferroviarie e i treni di Trenitalia.

    station.

    Dopo un paio di settimane passate sui treni, mi sono accorto di un servizio interessante: il sito Viaggiatreno: il sito contiene le informazioni sui treni (informazioni in tempo reale sullo stato di un treno come ritardo o anticipo, ora prevista di arrivo e fermate già effettuate).

    Esigenza

    Dopo aver provato il disagio di un treno soppresso (e quindi essermi svegliato un’ora prima per stare un’ora ad aspettare in stazione), mi sono reso conto di poter, perlomeno, arginare il problema se si fosse presentato in futuro; conoscere lo stato del treno direttamente sul telefonino mi permetterebbe, la mattina, di poter scegliere un mezzo alternativo senza recarmi in stazione nel caso in cui il treno sia in ritardo o soppresso. Oppure, se il treno è in anticipo, di accelerare i tempi.

    Soluzioni esistenti

    • Potrei controllare il sito Viaggiatreno accedendo il computer, connettendomi a Internet e andando sul sito Viaggiatreno. Contro: il tempo richiesto è troppo (~ 5 minuti. E la mattina anche 5 minuti sono preziosissimi).
    • Potrei installare su iPhone l’applicazione ProntoTreno, un’applicazione che fornisce lo stato di tutti i treni in tempo reale. Contro: il mio access point WIFI non è sempre attivo; non ho a disposizione la connessione 3G. Inoltre, se dovessi cambiare telefono per passare ad un telefono senza WIFI/3G, questa soluzione non è più applicabile.

    L’idea

    Il mezzo da utilizzare è sicuramente il mobile. L’incognita era semplicemente trovare il modo per raggiungere i telefoni, ed è stato individuato negli SMS, supportati da tutti i telefoni.

    L’altro fattore da tenere in considerazione è: come ottenere i dati da Viaggiatreno? Il sito utilizza Flash, ed estrarre informazioni testuali e puntuali da Flash penso sia infattibile. La soluzione è presto trovata: fortunatamente, Viaggiatreno offre anche una versione mobile, realizzata in (X)HTML, per la gioia dei parser.

    La realizzazione

    Per la realizzazione del servizio abbiamo bisogno di:

    • Un server Linux attivo e connesso a Internet durante il lasso di tempo in cui vogliamo essere avvisati via SMS. Inoltre, il server Linux deve avere installato crontab, l’interprete python e alcuni pacchetti python che vedremo più avanti.
    • Un servizio per mandare SMS gratuitamente: io mi appoggio a virgilio.it, che mi permette di ricevere via sms tutte le email ricevute all’indirizzo indirizzo@sms.tin.it [per i più impazienti: in questo modo per ricevere SMS è sufficiente mandare una mail]. Se invece non potete usare virgilio.it, vi raccomando di utilizzare MoioSMS per l’invio gratuito di SMS.
    • Un account GMail da cui mandare la mail del punto sopra (se siete degli smanettoni, non avete bisogno di questo e potrete usare il vostro SMTP, a patto di sostituirlo nel codice).
    • Un telefono mobile abilitato alla ricezione di SMS e attivo (ovviamente!)
    • Il numero del treno di nostro interesse: per conoscere il numero del treno, è sufficiente andare su TreniItalia, immettere partenza e arrivo e annotarsi il numero del treno. Il numero del treno è unico e non cambia.
    • Lo script python seguente, che ho scritto in Python utilizzando le librerie python-mechanize e python-beautifulsoup (installatele seguendo la guida per la vostra distribuzione. Per Ubuntu/Debian ho usato apt-get install python-mechanize python-beautifulsoup). Il codice è ancora immaturo, ma funziona (vedi screenshot):
      “`
      #! /usr/bin/python

      import BeautifulSoup
      import mechanize
      import smtplib
      import time
      import datetime
      from email.MIMEMultipart import MIMEMultipart
      from email.MIMEBase import MIMEBase
      from email.MIMEText import MIMEText
      from email import Encoders
      import os
      import sys

      gmail_user = "gmail username"
      gmail_pwd = "gmail pass"

      def mail(to, subject, text):
      msg = MIMEMultipart()

      msg['From'] = gmail_user
      msg['To'] = to
      msg['Subject'] = subject

      msg.attach(MIMEText(text))

      mailServer = smtplib.SMTP("smtp.gmail.com", 587)
      mailServer.ehlo()
      mailServer.starttls()
      mailServer.ehlo()
      mailServer.login(gmail_user, gmail_pwd)
      mailServer.sendmail(gmail_user, to, msg.as_string())
      mailServer.close()

      numtreno = sys.argv[1]
      stazione = sys.argv[2]

      tobeparsed = mechanize.urlopen(str(str('https://mobile.viaggiatreno.it/viaggiatreno/mobile/scheda?numeroTreno=') + str(numtreno) + str('&tipoRicerca=numero&lang=IT')))
      f = BeautifulSoup.BeautifulSoup(tobeparsed)
      f = f.prettify()
      f = f[f.find('<!– SITUAZIONE –>'):]
      f = f[:f.find('</div>')]
      s1 = f[f.find('<strong>')+len('<strong>'):f.find('<br />')]
      s2 = f[f.rfind('–>')+len('–>'):f.find('</strong>')]
      s1 = s1.replace(''',"'")
      s1 = s1.split()
      s2 = s2.split()
      tobeparsed = mechanize.urlopen(str(str('https://mobile.viaggiatreno.it/viaggiatreno/mobile/scheda?dettaglio=visualizza&numeroTreno=') + str(numtreno) + str('&tipoRicerca=numero&lang=IT')))
      f = BeautifulSoup.BeautifulSoup(tobeparsed)
      f = f.prettify()
      f = f[f.find(stazione):]
      f = f[:f.find("</div>")]
      arr1 = f[f.find('')+len('<p>'):f.find('<br />')]
      or1 = f[f.find('<strong>')+len('<strong>'):f.find('</strong>')]
      arr = f[f.rfind('<p>'):f.rfind('</p>')]
      arr2 = arr[arr.find('<p>')+len('<p>'):arr.find('<br />')]
      or2 = arr[arr.find('<strong>')+len('<strong>'):arr.find('</strong>')]
      arr1 = arr1.split()
      or1 = or1.split()
      arr2 = arr2.split()
      or2 = or2.split()
      arr1.extend(or1)
      arr2.extend(or2)

      L = [s1, s2, arr2]
      for i in xrange(len(L)):
      L[i] = ' '.join(L[i])
      message = '\n'.join(L)

      mail("indirizzo@sms.tin.it",
      sys.argv[1],
      message,
      )
      “`

      Il codice estrae le informazioni di interesse da Viaggiatreno mobile (come detto, per fare il parsing occore usare il sito in versione mobile) come lo stato corrente del treno (posizione ed eventuali minuti di ritardo o anticipo) e l’orario di arrivo previsto e manda queste informazioni all’indirizzo mail “speciale” che gira il messaggio al mio numero di cellulare via SMS [per l’invio della mail il servizio usa GMail]. Come detto, potreste usare MoioSMS (via pipe o python import) semplicemente sostituiendo la parte di invio della mail.

    Come si utilizza?

    • Lo script accetta due parametri da command-line: il numero di treno a cui siete interessati e la stazione di cui volete conoscere l’orario di arrivo stimato (es. “LECCO MAGGIANICO”).
    • Modificate, nello script le variabili gmail_user e gmail_password con le credenziali del vostro account GMail che useremo per spedire la mail verso l’indirizzo speciale che girerà le mail in SMS. Sempre nel codice, sostituite appunto indirizzo@sms.tin.it con il vostro indirizzo “speciale” che tramuta il messaggio e-mail in SMS.
    • Usando crontab, inserite una entry del tipo:
      08 07 * * 1-5 python /home/mbologna/parser.py 5033 “LECCO MAGGIANICO”
      Per avere un aggiornamento via SMS alle 07:08 di tutti i giorni feriali del treno 5033 specificando che deve fornirci l’orario di arrivo previsto alla stazione di “LECCO MAGGIANICO”.

    Risultati

    La mattina, prima di recarmi in stazione, controllo sul mio telefono e automaticamente ricevo 3 SMS gratuiti diversi contenenti lo stato del treno man mano che si avvicina alla stazione in cui io salgo sul treno. In questo modo, ancora prima di uscire di casa, posso sapere se il treno è in ritardo o se è stato soppresso.

    Qui accanto, la testimonianza di 2 degli SMS che ricevo quotidianamente.

    Sviluppi futuri

    • Miglioramento del codice di download/parsing
    • Integrazione con MoioSMS

    Curiosità

  • La situazione della compatibilità con HTML5 dei browser più utilizzati

    HTML5 sta arrivando. Apple, Microsoft e Google stanno già sostenendo lo sviluppo e l’implementazione di questo nuovo standard; avendolo provato con mano quando lo utilizzo su YouTube HTML5 Beta per guardare i video senza il Flash Player di Adobe, ne sono già entusiasta [Nota: mi guardo bene, per ora, dal prendere posizioni a favore/a sfavore di Flash].

    Fatta questa premessa, il sito HTML5 test permette di valutare quanto è aderente alle specifiche il browser che stiamo utilizzando. Il sito è in continuo sviluppo ma è un buon mezzo per conoscere quanto il browser che utilizziamo è pronto al salto verso HTML5.

    Di conseguenza mi è venuta la curiosità di sapere quale fosse il browser (stabile) che raggiungesse il punteggio più alto in questa “competizione”, ed ho ottenuto questi risultati:

    • Windows Internet Explorer (rendering Trident) 8.0.7600.16385: 19/160
    • Mozilla Firefox (rendering Gecko) 3.6.3: 101/160
    • Apple Safari (rendering WebKit) 4.0.5 (6531.22.7): 113/160
    • Google Chrome (rendering WebKit) 4.1.249.1064 (45376): 118/160

    Conclusioni

    • Non ho testato Opera/Presto
    • Internet Explorer ottiene un punteggio molto basso rispetto ai suoi concorrenti, che tutto sommato ottengono un punteggio molto simile
    • Chrome ottiene il punteggio più alto: Google sta spingendo molto su HTML5 (una prova è YouTube in HTML5).
  • Shazam, AudioTag & Tunatic: come trovare il titolo di una canzone ascoltandola semplicemente (PC e smartphone)

    A volte mi capita di ascoltare [in radio, in tv o in metro] un pezzo musicale molto orecchiabile, Music To My Eyesvuoi perché sta diventando un tormentone, vuoi perché il ritmo mi attira e sfortunatamente di non conoscere il titolo per ascoltare di nuovo la canzone quando desidero.

    Per risolvere questo problema sono nati diversi servizi gratuiti, adatti a PC/Mac/Linux o disponibili per piattaforme mobile come Nokia Symbian, BlackBerry, Windows Mobile, Android e iPhone/iPad che permettono di identificare (= trovare titolo e artista) una canzone ascoltandola semplicemente (= la facciamo ascoltare al computer o al nostro smartphone). Vediamoli con ordine:

    • AudioTag (PC/Mac/Linux, online web-application):si tratta di un servizio online che permette di identificare una canzone sulla base di un file audio MP3 caricato dall’utente sul sito (oppure l’utente può fornire il link dove prelevare il file audio). Di conseguenza, è d’obbligo avere registrato preventivamente una porzione del brano che volete identificare. Una volta caricato il file audio, il sistema tenta di identificare la canzone e fornisce all’utente il titolo e l’artista della canzone.
    • Tunatic (PC/Mac, applicazione standalone): Tunatic è un’applicazione freeware desktop per PC e Mac; l’applicazione richiede che il computer sia dotato di microfono. Una volta scaricata e installata, è sufficiente “far ascoltare” al computer la canzone sconosciuta, e Tunatic si occuperà di identificare la canzone ascoltata.
    • Shazam (Nokia Symbian, BlackBerry, Windows Mobile, Android e iPhone/iPad): quest’applicazione è disponibile per tutti gli smartphone ed è quindi la più versatile da utilizzare. Inoltre, il microfono è già incluso nel dispositivo. Shazam è disponibile in trial per tutti i modelli, il che significa che potrete utilizzare la versione gratuita per qualche giorno, ma poi si dovrà acquistare l’applicazione (il costo è irrisorio, 5$ per iPhone). [Update: Giorgio mi fa notare, nei commenti, che la versione per Android è gratuita!]. Una volta installata sul proprio dispositivo, è sufficiente far ascoltare 15-20 secondi della canzone che vogliamo identificare e Shazam ci fornirà, oltre al titolo e all’artista, una serie di utiliti dettagli per approfondire la conoscenza dell’artista, date dei prossimi concerti, link per ascoltare la canzone su YouTube, etc.

    Più in generale, come funzionano questi servizi? Si basano sulla tecnica dell’acousting fingerprint, ovvero sull’”impronta digitale” che caratterizza ogni brano audio: la tecnica si basa sullo studio dello spettro e delle caratteristiche uniche di un brano audio rispetto agli altri. I servizi descritti mantengono un database di tutti i fingerprint dei brani audio conosciuti (o meglio, dei più conosciuti) e confrontano il fingerprint inviato dall’utente con il fingerprint del database locale. In caso di match (e la stragrande maggioranza dei casi ha un match) vengono mostrate le informazioni della canzone.

    Per finire, segnalo che ci sono anche altri servizi simili e molto promettenti, come ad esempio MusicBrainz.