Blog

  • Configurare una VPN IPsec Cisco con il client integrato di OSX Snow Leopard e iPhone

    A volte mi capita di dovermi connettere a qualche rete che utilizza un concentratore enterprise VPN di Cisco usando il sistema operativo OSX (o da iPhone); in teoria dovrei utilizzare il client VPN di Cisco, ma da OSX Snow Leopard è presente un client integrato che permette di accedere alle reti VPN di Cisco che utilizzano IPsec, senza necessità di installare software aggiuntivo.

    In questo post vi spiegherò come fare il setup di una connessione VPN con Group Secret usando il client integrato di OSX. Nel caso utilizziate i certificati, il procedimento è ancora più semplice: basterà inserire il file dei certificati al posto del GroupName e del GroupSecret più avanti.

    Il requisito fondamentale di questo metodo è di avere a disposizione i parametri di connessione della VPN; in alternativa, è necessario avere a disposizione il file di configurazione (file che hanno estensione .pcf, di solito sono distribuiti dall’organizzazione che eroga il servizio VPN insieme al client VPN di Cisco).

    Procediamo passo-passo:

    1. Innanzitutto apriamo le impostazioni di sistema, poi andiamo su “Rete” e aggiungiamo una nuova connessione.
    2. Selezioniamo l’interfaccia VPN, il tipo Cisco IPsec e assegniamo un nome qualsiasi alla connessione e diamo OK.
    3. Apriamo con un editor (ad es. Textmate o Textedit) il file di configurazione con estensione pcf.
    4. Ora dovremo identificare nel file pcf i parametri che ci servono per la VPN:
      • Host=1.2.3.4. Indirizzo IP per la connessione (in questo caso 1.2.3.4). Inseriamolo nel primo campo, “Indirizzo del server remoto”
      • GroupName=mygroup. Il nome del gruppo VPN da inserire sotto “Impostazioni di autenticazione”
      • enc_GroupPwd=<stringa di caratteri>. Questa è il “Group secret”, ovvero la password condivisa del gruppo. La password è però cifrata, quindi avete due possibilità: richiedere la password in chiaro a chi fornisce il servizio VPN. Oppure, cercare su Internet un modo per decifrarla. Una volta ottenuta la password decifrata, inseritela nel campo “Group secret”, sempre sotto “Impostazioni di autenticazione”

      Riassumendo, nel caso di esempio siamo arrivati alla situazione descritta dalle figure a lato.

    5. Inseriamo username e password per la VPN, se necessario, e infine clicchiamo su Connect.

    La VPN sarà instaurata e potremo accedere alla rete protetta.

    Nel caso di iPhone il procedimento è simile: il menu di configurazione della VPN lo trovate sotto Impostazioni > Generale > VPN.

    Nel caso in cui riscontriate qualche problema, segnalatelo nei commenti!

  • 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.

  • MacOSX: come risolvere il problema dei fonts in Google Reader

    Da un po’ di tempo ho uno strano problema con Google Reader: la visualizzazione dei post in modalità “list view” ha problemi di visualizzazione, una sorta di sbavatura dei fonts che potete vedere nell’immagine a lato.

    Innanzitutto ho verificato che il problema risiedeva sul mio Mac:

    • Provando con Chrome e Firefox, il problema si ripresentava
    • Aumentando/diminuendo la dimensione dei fonts il problema scompariva

    Quindi mi sono messo alla ricerca di una soluzione online, e dopo spulciato forum e soluzioni alternative, riporto la soluzione che ha funzionato per il mio caso e che, di conseguenza, consiglio:

    • Aprite Font Book che si trova in /Applications (o usate Spotlight: ⌘+␣ e digitate “Font Book” );
    • Nella colonna “Collection”, selezionate tutti i fonts (⌘+A);
    • Dal menu “Edit”, selezionate “Resolv Duplicates”;
    • Riavviate OSX

    Con questo procedimento si resettano i font duplicati che creano una scorretta visualizzazione dell’aspetto di Google Reader. Una volta riavviato il sistema, riaprite Google Reader con il vostro browser preferito e finalmente non ci saranno più sbavature di fonts. Se invece il problema non si è risolto, lasciate pure un commento.

  • 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.

  • Ubuntu: come convertire il file-system ext3 in ext4 [non-root fs]

    Con l’uscita della nuova versione di Ubuntu ho deciso di convertire i file-system che (ahimé) avevo ancora in ext3 a ext4, per guadagnarne in performance ed affidabilità senza però formattare la partizione (e perdere i miei dati).

    [Una piccola nota: non sono un grande fan di ext*, infatti come sapete sono un grande sostenitore di XFS, ma la conversione ext3->XFS non è stata ancora implementata.]

    Vediamo la procedura per convertire da ext3 a ext4 un file-system non-root, ovvero su cui non risiede la root / del vostro filesystem. I dati nella partizione sono al sicuro e non verranno intaccati (in ogni caso consiglio sempre di avere un backup recente a portata di mouse).

    Andiamo con ordine:

    1. Identifichiamo la partizione non-root che vogliamo convertire, (nel mio caso /media/store e quindi /dev/sdb1): michele@cletus:~$ mount | grep ^/dev/
      /dev/sda2 on / type ext3 (rw,relatime,errors=remount-ro)
      /dev/sdb1 on /media/store type ext3 (rw)
    2. Facciamo un unmount della partizione che vogliamo convertire: unmount /media/store
    3. Lanciamo un controllo preventivo del file-system per prepararlo alla conversione: fsck.ext3 -pf /dev/sdb1 (ovviamente da qui in avanti sostituite la partizione che avete identificato al punto 1 a /dev/sdb1)
    4. Se il controllo è terminato senza problemi possiamo passare alla conversione vera e propria: tune2fs -O extents,uninit_bg,dir_index /dev/sdb1
    5. Rilanciamo un controllo del file-system, per controllare che tutto sia andato per il verso giusto: fsck -pf /dev/sdb1
    6. Apriamo il file /etc/fstab, modificando con “ext4” il tipo di file-system per la entry relativa a /media/store
    7. Possiamo rimontare la partizione: sudo mount /media/store

    L’operazione è assolutamente trasparente, nel senso che i dati non sono stati intaccati e la partizione viene ora riconosciuta come ext4:

    michele@cletus:~$ mount | grep ^/dev/
    /dev/sda2 on / type ext3 (rw,relatime,errors=remount-ro)
    /dev/sdb1 on /media/store type ext4 (rw)

    L’operazione è anche molto veloce: per convertire un volume da 500 GB (SATA) sono richiesti circa 40 minuti.

  • 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.

  • Creare un tunnel ssh dinamico con openssh (Linux, MacOSX, *BSD, UNIX-based OSes) e relativo use-case per Firefox

    Un po’ di tempo fa vi avevo spiegato come creare un tunnel ssh usando PuTTY, il client ssh per eccellenza su Windows.
    Ora, visto che ci siamo evoluti e siamo passati ad un sistema operativo che si basa su UNIX (come ad esempio Linux, MacOSX, Solaris, *BSD, o comunque una qualsiasi piattaforma che supporti openssh), vi spiegherò come creare un tunnel ssh usando questi sistemi operativi.

    Anche qui dobbiamo prima verificare due requisiti fondamentali:

    • di avere installato sulla macchina client (quella che deve usufruire del tunnel) openssh
    • di avere a disposizione una macchina server che metta a disposizione accesso ssh (openssh-server), che sia raggiungibile sulla porta 22/tcp (o se l’avete cambiata sapete anche su quale porta deve essere raggiungibile) e su cui abbiate utenza.

    Se avete bisogno di un tunnel ssh sono certo che sappiate come mettere in piedi queste due cose, e che sappiate già perché vi serve un tunnel ssh.

    Bene, continuiamo. Apriamo un terminale e digitiamo: ssh -D 31337 -f -C -q -N user@remoteserver

    dove user@remoteserver è il server che mette a disposizione l’accesso ssh e su cui abbiamo utenza con utente user. Vi sarà richiesto di inserire la password per l’utente user, inseritela e il tunnel verrà creato [se avete impostato l’accesso tramite chiavi asimmetriche, non dovrete digitare alcuna password].

    Veniamo alla spiegazione dei vari parametri, in modo che possiate customizzare il comportamento del tunnel:

    • -D 31337: imposta un tunnel che faccia il forward verso un indirizzo dinamico, impostato sulla porta specificata come argomento (in questo caso 31337/tcp)
    • -f: forza ssh ad andare in background dopo che abbiamo effettuato il login correttamente
    • -C: abilita la compressione
    • -q: disabilita gli warning dall’output
    • -N: non eseguire alcun comando remoto (visto che dobbiamo solo creare un tunnel)

    La creazione del tunnel è finita! Il vostro tunnel è attivo su localhost:31337 e se avete impostato tutto con criterio potete iniziare ad utilizzarlo.

    Un use-case interessante è configurare il browser Firefox per la navigazione facendo in modo che tutto il traffico sia routato attraverso il tunnel appena creato. Apriamo Firefox e digitiamo about:config nella barra dell’indirizzo. Digitate proxy nella barra del filtro, e vi comparirà la seguente schermata:

    Le voci a cui siamo interessati sono quelle marchiate da un bollino rosso, e dobbiamo modificarle a:

    • network.proxy.no_proxies_on : localhost, 127.0.0.1
    • network.proxy.socks : 127.0.0.1
    • network.proxy.socks_port : 31337. Questa opzione, come avete capito, specifica la porta su cui è attivo il tunnel
    • network.proxy.socks.remote_dns : true. Questa opzione è la più importante, perché permette di fare il forward delle richieste DNS all’host remoto. Consiglio di abilitarla.
    • network.proxy.socks_version : 5
    • network.proxy.type : 1. Questa opzione specifica se utilizzare le impostazioni appena definite per il tunnel (= 1) oppure no (= 0).

    Ora il test finale: usando Firefox controllate quale sia il vostro indirizzo IP. Se vi compare l’indirizzo del vostro server remoto, allora il tunnel funziona alla perfezione. Viceversa, c’è qualcosa di sbagliato nella vostra configurazione; ripartite dall’inizio e controllate che tutto sia configurato correttamente.