Arpeggione…. Chi era costui?

Questo sabato con ogni probabilità andrò ad ascoltare un concerto che si preannuncia molto interessante al Teatro della Pergola di Firenze per la stagione degli Amici della Musica.

I musicisti sono fantastici: Antonio Meneses al violoncello e soprattutto Maria João Pires al pianoforte.

Il programma è da leccarsi i baffi:

  • Sonata per violoncello e pianoforte in la minore D821 “Arpeggione” di Franz Schubert
  • Sonata in re minore op.31 n.2 “La tempesta” di Ludwig van Beethoven
  • Romanza senza parole per violoncello e pianoforte in re maggiore op.109 di Felix Mendelssohn
  • Sonata per violoncello e pianoforte n.1 in mi minore op.38 di Johannes Brahms

Venite al concerto se potete, oppure dotatevi di buone cuffie e ascoltateli almeno qui. Da notare la sonata di Beethoven interpretata proprio dalla Pires. Tanto per avere un’idea dei livelli di cui stiamo parlando…

Relativamente all’Arpeggione. Siete anche voi incuriositi come me da questa strana parola? Ebbene, l’arpeggione non è niente altro che uno strumento musicale, una specie di strano incrocio tra il violoncello e la chitarra.

Schubert scrisse questa sonata proprio per questo strumento. Lo strumento cadde quasi subito nell’oblio, per essere riscoperto in anni recenti grazie al lavoro fatto dal musicista belga Nicolas Deletaille che con il suo “Arpeggione Project” sta cercando di rilanciarlo.

Siete adesso, come me, giustamente curiosi di sentire come risulta la sonata di Schubert suonata con l’arpeggione. Eccovi serviti:

ChessX: Aggiungere un motore (Stockfish)

Dopo l’articolo in cui veniva spiegato come installare ChessX su un PC GNU/Linux, vediamo oggi come aggiungere un motore al programma in modo che si possano fare analisi di partite. Il motore scelto è Stockfish.

Per prima cosa occorre scaricare Stockfish e compilarlo sul sistema. Siccome è gestito su github, per scaricare i sorgenti sotto controllo di configurazione occorre avere git installato sul proprio PC. Se non presente, dare quindi il comando:

$ sudo apt-get install git

Una volta installato git scaricare i sorgenti di Stockfish con il comando:

user:~$ git clone https://github.com/mcostalba/Stockfish.git stockfish
Cloning into 'stockfish'...
...
user:~$ _

Se tutto è andato bene viene creata una directory stockfish con all’interno i sorgenti. Per compilare, entrare nella directory stockfish/src e dare il seguente comando:

user:src$ make profile-build ARCH=x86-64-modern

NOTA: l’uso dell’architettura x86-64-modern va bene se avete un PC nuovo basato sulle recenti architetture Intel, altrimenti potete provare con x86-32 per PC vecchi o anche x86-64 su architettture a 64 bit di cui non siete completamente sicuri della “modernità” (o se avete problemi con la modern).

Se tutto è andato bene all’interno della directory deve comparire un file eseguibile di nome stockfish. Copiatelo dove preferite e provate a lanciarlo. Se tutto va bene deve comparire un messaggio e il programma rimane in attesa:

pf:stockfish$ ./stockfish
Stockfish 211113 64 SSE4.2 by Tord Romstad, Marco Costalba and Joona Kiiski
_

Dare Ctrl-C per uscire dal programma.

Il secondo passo da compiere consiste nell’associare a Stockfish il suo database delle aperture. Scaricarlo dalla pagina dei download del sito, decomprimere l’archivio e copiare il file Book.bin nella directory dove si trova l’eseguibile di Stockfish creato in precedenza.

Passando a questo punto a ChessX, vediamo come agganciare il motore.

Andare nel menù Edit e scegliere “Preferences”, qui selezionare il tab “Engines” e cliccare sul pulsante “Add”. Cercare l’eseguibile di Stockfish e selezionarlo. Nella linea “Directory” selezionare la directory dove si trova l’eseguibile di Stockfish (e il file Book.bin).

Finestra Preferences/Engines dopo il setup di Stockfish
ChessX: Finestra Preferences/Engines dopo il setup di Stockfish

Come ultimo passo prima di chiudere la finestra delle preferenze, cliccare su “Options”. Si entra così nella finestra per il setup dei parametri UCI (Universal Chess Interface, il protocollo con cui la GUI comunica con il motore). Qui per il momento è importante solo impostare il nome del database delle aperture. Cambiare quindi il parametro “Book File” assegnandogli il valore “Book.bin“.

ChessX: finestra per le impostazioni delle opzioni UCI
ChessX: finestra per le impostazioni delle opzioni UCI

A questo punto per dimostrare che il motore funziona basta impostare una posizione (menù Edit -> Setup Position), aprire il pannello di Analisi (View -> Analysis) e cliccare sul pulsante “Analysis”. Io ho provato con il seguente matto in otto mosse tratto da “Strategia e tattica degli scacchi” di Georgij Lisitsyn:

Il bianco muove e da matto in 8 mosse
Il bianco muove e da matto in 8 mosse

Quello che mi piacerebbe molto fare a questo punto sarebbe utilizzare il motore per giocare una posizione contro di lui. Questa è una funzionalità molto utile per allenarsi per esempio nei finali. Purtroppo però questo allo stato di sviluppo attuale del programma non è possibile. L’unica cosa che si può fare è analizzare una partita, cosa che vedremo in una prossima puntata.

Per allenarsi a giocare posizioni contro un’engine la soluzione più economica consiste probabilmente nell’installare una GUI semplice come ad esempio XBoard. e associarci il motore Stockfish. Operazioni banali, sulle quali non starò a dilungarmi.

Manipolazione file audio da command line, alcuni esempi

Della serie “Il potere della Linea di Comando” o anche “May the force (of the Command Line) be with you” vediamo come manipolare file audio da linea di comando tramite le utility che si possono trovare sui sistemi GNU/Linux.

In particolare, i tool utilizzati oggi sono:

  • cuetools: “set of utilities for working with Cue Sheet (cue) and Table of Contents (toc) files“.
  • shntool: “multi-purpose tool for manipulating and analyzing WAV files”
  • vorbis-tools: comandi vari per la generazione e manipolazione di file OGG

Obiettivo: dato un album contenuto in un unico file in formato FLAC e indicizzato tramite un file CUE, generare un file OGG per ogni traccia.

L’operazione è composta da due fasi:

  • Dividere il file FLAC in tanti file, uno per traccia
  • Convertire i file ottenuti in OGG cercando di inserire anche qualche tag estratto dal CUE

Prima proposta di soluzione (semplice ma sbagliata)

Passo (1): Generazione di tanti file WAV uno per traccia dandogli come nome split-trackNN.wav dove NN è il numero della traccia.

$ cuebreakpoints cue_file.cue | shnsplit audio_file.flac

Passo (2): conversione in formato OGG.

$ oggenc *.wav

Per fare tutto con un unico comando è anche possibile dire a shnsplit di effettuare direttamente la conversione in OGG:

$ cuebreakpoints cue_file.cue | shnsplit -o 'cust ext=ogg oggenc - -o %f' audio_file.flac

con questo comando si creano direttamente i file split-trackNN.ogg.

Seconda soluzione (leggermente più complicata, ma migliore)

Un metodo alternativo per leggere il file CUE consiste nel farlo leggere direttamente al comando shnsplit tramite l’opzione -f. In questo modo il comando cuebreakpoints non è più necessario e soprattutto, come vedremo, sarà facile dare ai file generati un nome più significativo.

Il comando è:

$ shnsplit -o 'cust ext=ogg oggenc - -o %f' -f cue_file.cue audio_file.flac

NOTA: Un problema minore di questo modo di lavorare è che, almeno in alcuni casi, viene creato anche un file di indice 00 che contiene un “pre-gap”. Di fatto è un file molto breve senza audio. Non ho trovato un modo per evitare di generarlo, per cui se viene creato va semplicemente cancellato dopo la conversione.

Il grosso vantaggio dell’opzione -f è invece che leggendo il file CUE direttamente è possibile nominare i file che vengono creati in modo automatico utilizzando le informazioni di traccia presenti nel file CUE. L’opzione da utilizzare è -t.

Per esempio per creare i file nel formato NN_-_TrackTitle.ogg (NN = track number) si può utilizzare il seguente comando:

$ shnsplit -o 'cust ext=ogg oggenc - -o %f' -t "%n_-_%t" -f cue_file.cue audio_file.flac

Se si vuole, si può anche utilizzare l’opzione -m per evitare l’uso di caratteri speciali nei nomi di file. Per esempio, per utilizzare il carattere underscore al posto degli spazi si può dare il seguente comando:

$ shnsplit -o 'cust ext=ogg oggenc - -o %f' -t "%n_-_%t" -m \ _ -f cue_file.cue audio_file.flac

Come inserire i tag nei file OGG

Vediamo infine come inserire le informazioni di album e traccia (tag) nei file OGG generati. E’ tutto molto semplice, basta utilizzare il comando cuetag:

$ cuetag cue_file.cue *.ogg

N.B: per evitare di avere errori ricordarsi di cancellare il file pregap di indice 00 eventualmente creato da shnsplit.

Per controllare il valore dei tag inserito nei file OGG si può utilizzare il comando vorbiscomment.

$ vorbiscomment file_ogg.ogg

CREDITS: Siti consultati:

Manipolazione file PDF, altri esempi

Oggi un amico mi ha passato alcune pagine scannerizzate da una rivista in formato PDF (un file per pagina).

Primo esercizio unire le pagine. Come detto in un precedente post, per fare queste cose uso tool command line, in particolare anche qui si presta bene  pdftk. Per unire più file basta il comando:

user@host:~$ pdftk file1.pdf file2.pdf file2.pdf output output_file.pdf

E i tre file indicati vengono incollati insieme nel file output_file.pdf.

Secondo esercizio. Non ero soddistatto dalla dimensione a mio parere eccessiva del file risultante (dovuta alla dimensione dei file di partenza) e allora ho cercato un modo per ridurre la dimensione. A parte il fatto che sicuramente esisteranno altri metodi usando anche il solito pdftk, ho trovato una soluzione curiosa che consiste nel convertire il file PDF prima in formato Postscript poi indietro nuovamente in formato PDF. Il tutto utilizzando i tool command line che vengono con un altro programma, Ghostscript.

I comandi da dare sono i seguenti:

user@host:~$ pdf2ps output_file.pdf output_file.ps

user@host:~$ ps2pdf output_file.ps new_file.pdf

Il file intermedio, output_file.ps, essendo Postscript è ben più grosso del PDF originario, ma il PDF risultante dal secondo passo è (almeno nel mio caso) 5 volte più piccolo di quello di partenza, senza notare una perdita significativa nella qualità del risultato. Probabilmente il comando ps2pdf utilizza automaticamente un qualche algoritmo di compressione, fatto sta senza particolare fatica ho ottenuto il risultato richiesto.

I’m back

“Programming is like sex: It may give some concrete results, but that is not why we do it.” B. Stroustrup (with apologies to Richard Feynman)

OK, I’m back and, among other things,  I’m currently reading Stroustrup 4th ed.

OK, non lasciamoci prendere dal panico…

A quanto pare, suscitando non poco scalpore, Google ha annunciato di voler chiudere il primo luglio il servizio aggregatore di feed RSS Google Reader.

La notizia mi ha preso alla sprovvista e ancora di più mi ha preso alla sprovvista scoprire che Google avrebbe preso questa decisione per il fatto che la piattaforma sarebbe sempre meno utilizzata e che la logica che sta dietro alla chiusura sia quella di spingere gli utenti del servizio verso soluzione più social, tipo Google+.

Ora, probabilmente non ci ho capito niente io, ma la logica di assimilare Google Reader a un servizio tipo Social Network mi sfugge completamente.

Negli ultimi anni io sono diventato completamente dipendente da Google Reader per tenermi informato su praticamente tutto attraverso il web. Se trovo un sito che mi interessa seguire trovo il link al feed RSS (o similia) e lo aggiungo alla lista degli oltre 80 siti che seguo tramite Google Reader.

Quando voglio scoprire cosa c’è di nuovo nel mondo, apro Google Reader, guardo le nuove notizie pubblicate sui siti che seguo, leggo quelle che mi interessano, se mi interessano particolarmente con un semplice click vado sull’articolo, approfondisco, ecc. Un corollario di questo approccio e che se un sito non ha un feed RSS a cui agganciarsi per me non esiste. Non posso certo ricordarmi di andare a visitare il sito di tanto in tanto, ho troppe cose da fare.

C’è chi dice che la stessa cosa si può ottenere seguendo le notizie tramite le pagine facebook, i profili twitter o Google+, ma a me francamente non torna molto. Il bello di Reader è che la notizia nuova rimane li, come un messaggio di posta elettronica nella Inbox finché non sono io a dichiararla “letta”, che posso salvare le notizie in folder, che posso evidenziarle e eventualmente anche condividerle sui social network (cosa che del resto faccio regolarmente). Le notizie che passano sul flusso dei social network sono invece a rischio di perdita estremamente elevato. Intendiamoci, ultimamente seguo qualcosa e qualcuno anche su facebook e twitter ma il nocciolo duro dei siti che leggo e dei blog che seguo rimane su Reader.

Bene, ma adesso?

Adesso vedo che di soluzioni possibili ce ne sono parecchie a partire da programmi da installare su PC a soluzioni online (quelle che tendenzialmente preferisco) e soprattutto vedo che c’è molto movimento da parte di vari siti che stanno affrettandosi a cercare di colmare la lacuna che sicuramente Google lascerà.

Per il momento sto provando Feedly, vedremo come evolve la cosa, il tempo ancora c’è.

Una schermata di Google Reader
Una schermata di Google Reader

Venerdì, al Teatro Comunale di Firenze

Che bellezza, è due mesi che aspetto di andare al prossimo concerto dell’Orchestra del teatro del Maggio Musicale. Venerdì sta finalmente per arrivare.

Il bello della musica classica è che non necessita di parole per essere spiegata. Basta ascoltare. Perciò godetevi Brahms:

 

Letture interessanti, 6 febbraio 2013

Le letture interessanti di questi giorni riguardano tutte lo sviluppo software, attività che svolgo per lavoro ma ancora con una discreta dose di passione nonostante il numero di anni che sono passati da quando ho iniziato.

La prima lettura è “Functional Programming Basics. What’s It All About?” di Robert C. Martin sul numero di gennaio di PragPub. La lettura di questo articolo mi ha spinto a cercare qualche altra informazione sulla programmazione funzionale e mi ha fatto trovare la seconda lettura “Functional Programming For The Rest of Us” di Slava Akhmeche, un bell’articolo che cerca di far capire le potenzialità della programmazione funzionale ai programmatori tradizionali e un po’ arrugginiti come me.

Una conseguenza di queste letture è un’aggiornamento dei propositi per l’anno nuovo: oltre ai design pattern quest’anno dovrò provare a studiare anche un linguaggio funzionale. Pensavo ad Haskell.