lunedì 27 febbraio 2017

Custom Arcade Desk: costruire una postazione da sala giochi in puro stile anni '80/'90


In questo post vi parlerò di un progetto che ho realizzato lo scorso anno e che ho battezzato “Custom Arcade Desk”, in pratica si tratta di una scrivania con doppia postazione da gioco per rivivere il fascino delle sale giochi degli anni '80/'90.



Come avrete intuito, se seguite questo blog, il computer al quale ho collegato la postazione da gioco è alimentato da una distribuzione GNU/Linux: Debian 8 (Jessie), recentemente aggiornato a Debian 9 (Stretch).
Comunque è possibile usare qualsiasi altra distribuzione GNU/Linux, incluso Raspbian per Raspberry Pi.

Custom Arcade Desk

Prima di iniziare la carrellata di foto, vediamo la lista dei materiali che ho utilizzato:

- due pannelli in OSB (Oriented Strand Board) da 25 mm di spessore, è un materiale composto da pezzi di legno incollati insieme, in modo simile al truciolato, ma con la caratteristica di essere più resistente;

- un pannello di plexiglas da 3mm di spessore;

- un adesivo permanente polimerico laminato opaco sul quale ho fatto stampare un'illustrazione del gioco Tastunoko vs Capcom;

- una scheda Ultimarc I-PAC 2, è il circuito che si occupa di tradurre i segnali dei pulsanti e del joystick in caratteri e li invia al computer tramite il cavo USB;

- due joystick Sanwa JLF-TP-8YT;

- sedici pulsanti Sanwa OBSF-30 da 30mm di larghezza;

- quattro pulsanti Sanwa OBSF-24 da 24mm di larghezza;

- cavo elettrico mono-polare;

- 20 terminali fastom da 2,8 mm;

- bordo per pannelli preincollato (si applica a caldo con un ferro da stiro);

- flatting per proteggere il legno;

- stucco francese;



Gli utensili necessari per realizzare questo progetto sono:

- un trapano con punte a tazza da 30mm e da 24mm;

- un seghetto alternativo con lame per legno e per metallo;

- una fresatrice per il legno;

- carta vetrata a grana media e fine;

- avvitatore;

- saldatore elettrico;


Una fonte preziosa di informazioni riguardanti i materiali da utilizzare, i diversi costruttori di joystick e pulsanti, nonché i vari schemi di disposizione dei tasti la potete trovare su questo sito.


 Questa era la mia piccola scrivania Ikea modello MICKE che utilizzavo per il computer. Notare come il piano si è era curvato al centro e mostrava segni di cedimento.

L'economica scrivania Ikea MICKE

Ho smontato il piano originale e tolto il cassetto.



Questo è un pannello in OSB da 25 mm, della stessa misura di quello originale, ma il materiale è più pesante e molto più resistente. Ho recuperato e montato gli agganci originali Ikea.

Agganci Ikea montati sul pannello in OSB


Il piano sostitutivo si monta alla perfezione come l'originale


Al posto del cassetto ho montato un altro piano che utilizzo per la tastiera ed il mouse, ho riutilizzato il meccanismo scorrevole per farlo a scomparsa.



Questo è un altro pannello in OSB da 25 mm di spessore, ma di dimensioni maggiori, che estende la scrivania. Sopra c'è un pannello in plexiglas da 3 mm.

Piano superiore con plexiglas e schemi di disposizione dei pulsanti e joystick


Lo schema della disposizione del joystick e dei pulsanti è quello standard utilizzato nelle sale giochi giapponesi.


Di seguito i fori da 30 mm realizzati con una punta a tazza.

Fori da 30mm e catena di fastom per il collegamento a terra dei pulsanti

I due fori da 24 mm per i tasti di servizio, per questi ho utilizzato una mecchia per il legno.

Fori da 24mm e mecchia per legno montata sul trapano

Fori per le due postazioni completati


Fresatura da 3 mm nell'area dove poggia la piastra del joystick.

Fresatura di 3mm di profondità
Il piano delle dimensioni di quello originale è montato su quello superiore di dimensioni maggiori, una fresatura profonda nella parte inferiore della scrivania facilita il montaggio dei pulsanti.

Parte inferiore della scrivania

Dopo aver carteggiato con cura tutta la parte inferiore, ho dato una mano di flatting per proteggere il legno.



Stuccatura del piano per renderlo il più liscio possibile e prepararlo all'applicazione dell'adesivo. Anche sul lato superiore, dopo aver carteggiato, ho passato una mano di flatting.

Il pannello in OSB non è perfettamente liscio e va stuccato

Applicazione del bordo bianco preincollato con il ferro da stiro.

Rifinitura con bordo per pannelli bianco
Questo è il cablaggio completato. Tutti i componenti sono collegati tramite terminali fastom da 2,8 mm, la scheda I-PAC 2 invece è dotata di morsetti a vite.

La scheda I-PAC 2 invia dei caratteri per ogni pulsante premuto o per ciascuna delle 4 direzioni del joystick, proprio come fosse una tastiera, quindi basta un text editor per verificare che tutto funzioni correttamente.

Test di funzionamento con gedit

Applicazione dell'adesivo permanente che ho fatto realizzare su misura, questo adesivo è stato laminato per essere resistente all'usura.

Con l'adesivo applicato l'aspetto è decisamente migliore

Ho montato il plexiglas ed i pulsanti. I joystick sono dei Sanwa con pallina e copri leva in alluminio colorato. I pulsanti sono Sanwa da 30mm e 24mm, la caratteristica forma convessa del tasto li rende ideali per i picchiaduro.

Scrivania completata

Vediamo ora la parte software ed il supporto per Linux.

La scheda I-PAC 2 viene riconosciuta dal sistema immediatamente e senza il bisogno di installare driver.
E'  preimpostata con la mappatura dei tasti del MAME (Multiple Arcade Machine Emulator), ma è possibile rimappare i controlli per mezzo di un apposito programma.
Ultimarc (la casa produttrice, vedi il sito) fornisce il programma per Windows, OS X e indirettamente anche per Linux. La libreria per configurare I-PAC 2 è infatti sviluppata da Katie Snow (vedi il sito) ed è scaricabile dal repository su github (link di github).


Iniziamo con l'installare il MAME inserendo i seguenti comandi come root

# apt update
# apt install mame mame-tools mame-extra

Per poter utilizzare il MAME ovviamente vi occorrono i file di dump delle rom dei videogiochi dell'epoca e questi non sono distribuiti con l'emulatore perché coperti dalle rigide regole del copyright.

Ora scaricate l'ultima versione della libreria Ultimarc dal repository di github (link download), è un archivio tar.gz. Decomprimete l'archivio con il comando:

tar -zxvf nome_file

Attualmente l'ultima versione è la seguente
$ tar -zxvf ultimarc-linux-1.1.update.tar.gz

Ora entrate nella directory con

$ cd ultimarc-linux-1.1

Nel file README ci sono le informazioni per la compilazione della libreria, in particolar modo ci serve sapere quali sono le librerie necessarie e sono le seguenti:

json-c (0.11), su Debian il pacchetto si chiama libjson-c-dev
libusb-dev, su Debian il pacchetto si chiama libusb-1.0-0-dev
libtool

Per finire vi serve il pacchetto build-essential per poter compilare, quindi installate tutto il necessario

# apt install build-essential libjson-c-dev libusb-1.0-0-dev libtool


Un'altra informazione importante che troverete nel file README è la necessità di copiare il file 21-ultimarc.rules nella directory di sistema /etc/udev/rules.d

# cp 21-ultimarc.rules /etc/udev/rules.d
Quindi procedete alla compilazione con
$ ./configure
$ make

Troverete l'eseguibile umtool all'interno della directory src/umtool, si invoca dal terminale e la sintassi è semplice

$ cd src/umtool
 
$ ./umtool ipac2.json

Dove ipac2.json è il nome del file di configurazione della scheda. All'interno della stessa directory ci sono vari file di configurazione di esempio, utilizzate solo i file ipac2 per la vostra scheda I-PAC2 e solo quelli denominati 2015 (la versione 2014 è per le schede più vecchie). Se non trovate i file .json dentro src/umtool allora scaricate da github il file source code e li troverete lì.
Potete aprire il file .json con un text editor e modificare a piacimento la mappatura dei tasti, è un operazione veramente semplice ed intuitiva.

Una volta preparato il file di configurazione basterà invocare il comando umtool per caricarlo sulla scheda. Vi consiglio comunque di conservare sempre una copia del file di configurazione di default.

Buon divertimento!

martedì 21 febbraio 2017

Come creare una RAM disk


Una RAM disk è una porzione della RAM di sistema che viene utilizzata come fosse un disco o un'unità di archiviazione.
Il grande vantaggio è la sua estrema velocità, di molto superiore anche al più veloce SSD in commercio. Il suo punto debole è invece la volatilità dei dati, se il computer si spegne o si riavvia, tutti i file contenuti in essa andranno persi.
Prima di creare una RAM disk, controlliamo la quantità di spazio disponibile in memoria con il comando free. Questo comando mostra il totale della memoria RAM a disposizione, lo spazio attualmente in uso e quello libero. Oltre alla RAM di sistema viene visualizzato anche lo spazio della partizione Swap se presente.

Il comando df invece mostra la quantità di spazio disponibile sulle unità di archiviazione montate.
Sul nostro sistema GNU/Linux abbiamo due diversi tipi di file system da utilizzare come RAM disk:
ramfs è il vecchio tipo di file system in memoria, ormai soppiantato da tmpfs, ed è lo stesso utilizzato da Linux come cache del file system. Ogni volta che avviene l'accesso ad un file sul disco, questo viene memorizzato in una cache in memoria così che, se dopo poco tempo viene richiesto di nuovo, sarà caricato velocemente dalla RAM.
La memoria utilizzata da ramfs è visualizzata dal comando free alla voce cached, mentre non viene visualizzato dal comando df. Inoltre non è possibile sapere la grandezza di ramfs, ne è possibile porre un limite massimo alla sua dimensione. ramfs continuerà a richiedere memoria fin quando il sistema si bloccherà a causa di un errore di out of memory.
tmpfs invece è un file system recente e risolve gran parte dei problemi di ramfs. E' possibile specificare la grandezza massima di tmpfs, se si tenta di occupare uno spazio maggiore otterremo un errore di disco esaurito, proprio come una partizione di un disco. Inoltre è possibile visualizzare tmpfs con il comando df insieme agli altri dischi e sapere quanto spazio c'è a disposizione. Questi vantaggi rendono tmpfs decisamente più gestibile di ramfs, ma c'è un unico lato negativo; se il sistema si trova a corto di RAM, i dati contenuti in tmpfs potrebbero essere scritti sulla partizione di Swap sul disco.

Creiamo una directory che utilizzeremo come punto di mount per la nostra RAM disk.

$ mkdir /mnt/ramdisk

Ora creiamo la RAM disk con il comando mount utilizzando la seguente sintassi:
mount -t [tipo] -o size=[dimensione] [tipo file system] [punto di mount]

Ad esempio creiamo una RAM disk di tipo tmpfs di 512 MB utilizzando come punto di mount la directory ramdisk posta in /mnt

# mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk

Ricordatevi che per usare il comando mount dovete avere i privilegi di amministratore, per farlo potete anteporre “sudo” o utilizzare il comando “su” per eseguire mount come super utente.

Se volete avere una RAM disk sempre disponibile ad ogni avvio del sistema potete aggiungere la sua creazione nel file fstab.

Aprite fstab con l'editor nano (o qualsiasi altro editor di vostro gradimento)

# nano /etc/fstab

Ora aggiungete una riga come questa

tmpfs /mnt/ramdisk tmpfs nodev,nosuid,noexec,nodiratime,size=512M 0 0

Salvate e riavviate e troverete la vostra RAM disk già montata e pronta per l'utilizzo.

Non dimenticate che ogni file al suo interno, al riavvio del sistema, andrà perso!

mercoledì 15 febbraio 2017

Liberacus v3.0 - il programma gestionale per sartorie ha un nuovo database SQLite

Ho rilasciato oggi la versione v3.0 di Liberacus, il software gestionale per sartorie.
La peculiarità di questo aggiornamento è la transizione della gestione dei dati dal formato XML ad un database SQLite 3.



Spendo due parole per spiegare cosa è cambiato per chi non conosce SQLite ed i database in generale.



Prima Liberacus caricava interamente i dati da alcuni file XML, lavorava sugli stessi mantenendoli in memoria per poi salvarli sul disco.
Questo metodo può essere valido per un piccolo numero di dati e comporta comunque il rischio di perdere i dati in memoria se qualcosa va storto, come ad esempio un blackout improvviso.
Un altro problema di questo approccio è che se il numero dei dati diventa elevato, il tempo di caricamento dai file e di salvataggio su disco diventa elevato.

Ora, utilizzando il database SQLite, Liberacus non ha più bisogno di caricare tutti i dati in memoria, ma prenderà dal database, di volta in volta, solo quelli che gli serviranno al momento.
Ad ogni modifica o inserimento di nuovi dati, questi verranno salvati direttamente sul database nel disco. Il rischio di perdere i dati a causa di un blackout è estremamente ridotto.
I tempi di caricamento e salvataggio sono praticamente azzerati anche in presenza di un numero elevato di dati.

Liberacus è un software libero ed open source, siete liberi di scaricarlo, installarlo ed utilizzarlo a piacimento.
Vi ricordo che Liberacus è sviluppato per girare su qualsiasi distribuzione GNU/Linux, non è multi-piattaforma, quindi non chiedetemi come installarlo su Windows o su Mac.

Potete scaricare l'ultima versione da questo link.