Fotografie

Ci ho messo un bel po’, ma alla fine ho inaugurato la sezione fotografie del sito. Un assaggio… che per il momento non trovate in galleria!

Ipocisto, fotografato al parco naturale di Montioni
Ipocisto, fotografato al parco naturale di Montioni

Prove Arduino: prima bozza di Tris

Questo articolo descrive il secondo passo compiuto per la realizzazione “casalinga” di una scacchiera elettronica basata sul riconoscimento della posizione e del movimento dei pezzi tramite sensori a effetto di Hall posti sulla scacchiera e magneti posti all’interno dei pezzi.

Questo secondo passo è consistito nella realizzazione di una scacchiera 3×3. Facile da realizzare, questa mini scacchiera permetterà comunque di verificare la possibilità di discriminare le pedine presenti sulle case e di valutare eventuali condizioni di interferenza.

L’idea è di utilizzare la scacchiera  per giocare il Tris realizzando in Arduino, oltre che il software per riconoscere la posizione delle pedine, anche l’algoritmo per giocare, vista la semplicità dell’algoritmo stesso.

Per realizzare la scacchiera mi sono avvalso del fondamentale aiuto di un amico, grande tecnico elettronico nonché bravo artigiano del legno. Per questo passo a lui si deve la realizzazione della scacchiera e dello shield Arduino. Io mi sono limitato a mettere alcune delle idee e lo sviluppo del software.

Per oggi mi limito a presentare lo schema e alcune foto della realizzazione pratica.

Schema della scacchiera Tris con sensori ad effetto di Hall
Schema della scacchiera Tris con sensori ad effetto di Hall

I sensori ad effetto di Hall utilizzati sono gli A1120EUA già visti in un precedente articolo.

Invece di collegare i nove sensori a nove differenti IO digitali di Arduino si è preferito realizzare uno schema a tre righe e tre colonne in modo da ridurre il numero di IO necessari a 6. Questo sistema, se per il momento porta un vantaggio irrilevante, nella realizzazione finale della scacchiera 8×8 porterà vantaggi notevoli permettendo di ridurre il numero di linee di IO necessarie da 64 a soli 16.

Per leggere lo stato di tutti i sensori la soluzione software sarà quella di mandare in stato alto una sola linea tra quelle che alimentano le righe (D3, D4 e D5) e leggere le tre colonne (D0, D1 e D2). Iterando sulle tre righe si potrà leggere lo stato di tutti i sensori.

Poiché un output digitale di Arduino non è in grado di alimentare insieme tre sensori, su ogni riga si è utilizzato uno stadio driver con un transistor 2N3904.

A seguire potete vedere le foto del prodotto finito, scacchiera e shield. Per oggi basta, nella prossima puntata vedremo il software.

La scacchiera per il Tris, con Arduino Uno e relativo shield connesso
La scacchiera per il Tris, con Arduino Uno e relativo shield connesso

 

Lo shield utilizzato per l'acquisizione dello stato della scacchiera
Lo shield utilizzato per l’acquisizione dello stato della scacchiera

 

Posizionamento e collegamento dei sensori ad effetto di Hall sotto la scacchiera
Posizionamento e collegamento dei sensori ad effetto di Hall sotto la scacchiera

 

 

Prove Arduino: sensore ad effetto di Hall

Per un nuovo progetto casalingo su cui sto cominciando a lavorare ho realizzato un semplice circuito con due sensori ad effetto di Hall collegati a una scheda Arduino Uno.

Arduino: test con sensore ad effetto di Hall
Arduino: test con sensore ad effetto di Hall

Dal punto di vista circuitale è tutto molto semplice. Come sensore si è utilizzato il A1120EUA di Allegro Microsystems, connesso a una linea di I/O di Arduino secondo il seguente schema:

Schema di collegamento per un sensore a effetto di Hall A1120
Schema di collegamento per un sensore a effetto di Hall A1120

Vcc (5V) e GND sono connessi ai corrispondenti pin della scheda Arduino Uno, OUT viene connesso a un I/O digitale della scheda Arduino.

Se nessun magnete è prossimo al chip A1120, su OUT si leggerà un livello alto (5V), mentre se si avvicina un magnete si leggerà un livello basso (0V).

Per valutare eventuali problemi di interferenza tra vari sensori, il primo circuito realizzato ha già due sensori, ognuno collegato a una diversa linea di I/O. Nel loop principale  dello sketch Arduino vengono letti i due input e se almeno un magnete è rilevato viene acceso il led L presente sulla scheda connesso alla linea di I/O 13.

Inoltre sulla console seriale nella linea viene inviato un messaggio con lo stato degli I/O tutte le volte che c’è una variazione. A seguire lo sketch completo.

 

CREDITS: Come spunto per il circuito e lo sketch si è preso un articolo sul sito inglese hobbytronics.

Passeggiate d’inverno: Val D’Ultimo

Val D'Ultimo, vista da Greitwies
Val D’Ultimo, vista da Greitwies
Val D'ultimo, vista del lago di Zoccolo
Val D’ultimo, vista del lago di Zoccolo
Val D'ultimo, vista del lago di Zoccolo
Val D’ultimo, vista del lago di Zoccolo
Val D'ultimo, vista del lago di Zoccolo
Val D’ultimo, vista del lago di Zoccolo
Val D'ultimo, vista di Santa Valburga
Val D’ultimo, vista di Santa Valburga

Alcune foto della Val D’Ultimo, in Alto Adige, fatte durante passeggiate (e un ottimo pranzo) nei giorni intorno a Natale 2013.

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.