
Comandi arcade fai-da-te
In costruzione.
Utilizzo delle interfacce del controller
Molti cabinati arcade, tavolini da cocktail e banconi da bar, sia fai-da-te che preassemblati, utilizzano una scheda encoder/controller per collegare joystick e pulsanti al sistema che esegue Batocera (ad esempio, dispositivi Ultimarc I-PAC o schede JAMMASD). Queste schede spesso si presentano come una tastiera , il che significa che la pressione dei pulsanti genera eventi KEY_ da tastiera .
L'input da tastiera non è sempre ideale per l'emulazione, perché alcuni sistemi e configurazioni si aspettano un dispositivo gamepad/controller (ad esempio, dispositivi riconosciuti come joystick/gamepad anziché come tastiera). Alcune schede (come certi modelli Ultimarc) possono essere configurate per essere riconosciute come controller DInput/XInput , ma i cabinati spesso aggiungono un'ulteriore complicazione: possono includere pulsanti dedicati per funzioni specifiche del cabinato, come Menu , Esci e Pausa .
Normalmente, Batocera utilizza la combinazione HOTKEY+ ANOTHER BUTTONper attivare azioni come Menu, Esci o Pausa (vedi Scorciatoie da tastiera ). Con i pulsanti dedicati all'interno del mobile, richiedere una scorciatoia da tastiera aggiuntiva può risultare superfluo.
Dalla versione 41 di Batocera, due strumenti aiutano a soddisfare queste esigenze comuni dei mobili:
-
keyboardToPadsConverte specifici encoder in stile tastiera in uno o più dispositivi controller virtuali rimappando gli eventi di input (in modo che si comportino come controller standard negli emulatori). -
Hotkeygen: Ascolta specifici eventi KEY_/BTN_ dai dispositivi di input e attiva le azioni dei tasti di scelta rapida di Batocera (Menu/Esci/Pausa, ecc.) emettendo la sequenza di tasti configurata (o eseguendo un comando). Ciò consente ai pulsanti dedicati del mobile di funzionare senza la necessità di un pulsante di scelta rapida separato.
Questi strumenti possono essere utilizzati insieme: keyboardToPadspossono produrre input puliti in stile controller e hotkeygenpossono interpretare gli eventi dei pulsanti selezionati come azioni di tasti di scelta rapida.
Galleria
Qui di seguito sono riportate alcune immagini di controller arcade, sia preassemblati che realizzati su misura.
Rivenditori di cabinati arcade e conformità alle licenze
Alcuni fornitori di cabinati arcade preassemblati distribuiscono Batocera e software correlati senza rispettare chiaramente gli obblighi di licenza e di attribuzione.
Secondo quanto riportato, i seguenti rivenditori rispettano i requisiti di licenza:
Tasti di scelta rapida
Le scorciatoie da tastiera contestuali sono il modo in cui Batocera associa le scorciatoie da tastiera alle azioni negli emulatori. Per ogni emulatore, le scorciatoie da tastiera dell'emulatore vengono referenziate e mappate alle scorciatoie da tastiera di Batocera. Di seguito è riportato l'elenco delle scorciatoie da tastiera che possono essere utili durante la configurazione keyboardToPads:hotkeygen
Tasto di scelta rapida Batocera
tasto equivalente della tastiera
Uscita
CHIAVE_USCITA
coniare
CHIAVE_EURO
menu
MENU_CHIAVE
pausa
TASTO_PAUSA
reset
RIAVVIO CHIAVE
file
FILE_CHIAVE
salva_stato
SALVA CHIAVE
ripristinare_stato
INVIO TASTO
slot_successivo
CHIAVE_SUCCESSIVA
slot_precedente
CHIAVE_PRECEDENTE
riavvolgere
KEY_REWIND
avanzare velocemente
CHIAVE_AVANTI_VELOCE
disco_successivo
VIDEO CHIAVE_SUCCESSIVO
traduzione
SOTTOTITOLO_CHIAVE
lunette
KEY_FRONT
schermo di scambio
SCHERMATA_CHIAVE
layout_schermo
PRESENTAZIONE PRINCIPALE
screenshot
KEY_SYSRQ
aumentare il volume
TASTO_VOLUMEUP
abbassare il volume
TASTO_VOLUME_GIÙ
volume disattivato
TASTO_MUTE
ciclo di luminosità
CICLO_DI_LUMINOSITÀ_CHIAVE
Utilizzo e configurazione di Hotkeygen
Questa configurazione hotkeygenti permetterà di utilizzare i pulsanti dedicati del cabinato, come Menu, Esci o Pausa, senza doverli combinare con una scorciatoia da tastiera.
SUGGERIMENTO: L'utilizzo e la configurazione Hotkeygenpresuppongono keyboardToPadsche tu sappia come accedere a Batocera tramite terminale e come accedere e manipolare i file. Se non hai familiarità con queste procedure, consulta la guida "Accesso a Batocera tramite SSH".
Mentre EmulationStation è in esecuzione, il hotkeygen --listcomando restituirà qualcosa di simile a:
$ hotkeygen --list Contesto [emulationstation]: uscita------------> TASTO_ESC menu------------> TASTO_SPAZIO file-----------> TASTO_F1 # dispositivo /dev/input/event5 [Ultimarc I-PAC 4] (nessun file Ultimarc_IPAC_4-d209-430.mapping trovato) TASTO_PAUSA-------> pausa # dispositivo /dev/input/event3 [tastiera AT Translated Set 2] (nessun file AT_Translated_Set_2_keyboard-01-01.mapping trovato) TASTO_PAUSA-------> pausa # dispositivo /dev/input/event23 [Tasti di scelta rapida Xtension] (nessun file Xtension_hotkeys-00-00.mapping trovato) TASTO_USCITA--------> esci------------> TASTO_ESC TASTO_MENU--------> menu------------> TASTO_SPACE TASTO_PAUSA-------> pausa
La risposta di esempio qui sopra ti dice:
-
Il contesto attuale è
emulationstation -
Il tasto di scelta rapida “exit” invierà l’equivalente della tastiera
KEY_ESC(tasto Esc) -
Il tasto di scelta rapida “menu” invierà l’equivalente della
KEY_SPACEbarra spaziatrice della tastiera -
Il tasto di scelta rapida “files” invierà l’equivalente della tastiera
KEY_F1(tasto F1) -
Esistono 3 dispositivi in grado di generare questi eventi (tramite
KEY_EXIT,KEY_MENU, e così via) -
Non è stato trovato alcun file di mappatura personalizzato per nessuno dei 3 dispositivi. Verranno applicate le scorciatoie da tastiera standard.
Ecco un altro esempio di contesto durante l'esecuzione dell'emulatore PS Portable ( ppsspp):
$ hotkeygen --list Contesto [ppsspp]: uscita------------> ['KEY_LEFTALT', 'KEY_F4'] salva_stato------> TASTO_F3 ripristina_stato---> TASTO_F4 menu------------> TASTO_F9 pausa-----------> TASTO_F9 next_slot-------> TASTO_F6 precedente_slot---> TASTO_F5 $
È possibile simulare le scorciatoie da tastiera anche dalla riga di comando. In qualsiasi contesto, ad esempio, la scorciatoia "exit" chiuderà il gioco. Può essere avviata tramite il comando:
hotkeygen --end esci
E quando disponibile, il seguente comando metterà in pausa l'emulatore. Nella maggior parte degli emulatori, i tasti di scelta rapida menu e pausa svolgono la stessa funzione:
hotkeygen --invia pausa
Se aggiungi il parametro –debug, puoi ottenere maggiori dettagli. Ad esempio, il comando hotkeygen --list --debugti mostrerà i percorsi utilizzati per personalizzare i tuoi contesti.
Estendi la configurazione di hotkeygen
La configurazione predefinita di hotkeygen si trova in /etc/hotkeygen. I file common_context.conf e default_context.conf possono essere creati nella cartella /userdata/system/configs/hotkeygen. Se presenti, verranno uniti alla configurazione predefinita.
-
Il file common_context.conf viene utilizzato per definire tasti di scelta rapida sempre disponibili, indipendentemente dal contesto, come ad esempio per scattare una schermata.
-
Il file default_mapping.conf viene utilizzato per definire quali tasti attivano quale azione. In teoria, non è necessario personalizzare questo file.
È necessario riavviare il servizio hotkeygen affinché vengano applicati eventuali aggiornamenti a questi file.
Utilizzo di keyboardToPads per convertire i controller da tastiera in gamepad/controller
L'input da tastiera non è sempre ideale per l'emulazione, poiché alcuni sistemi e configurazioni si aspettano un dispositivo gamepad/controller. keyboardToPadsè possibile convertire questi encoder da tastiera in uno o più gamepad/controller virtuali.
Batocera è in grado di rilevare alcuni dei codificatori di tastiera più comuni e dispone di file di configurazione preconfigurati per essi.
Per verificare se esiste un file di configurazione precompilato per il tuo dispositivo, puoi eseguire il seguente comando: keyboardToPads --search. Di seguito è riportato un esempio di output:
$ keyboardToPads --search dispositivo /dev/input/event3 : "Ultimarc I-PAC 4" Nome del file di configurazione: UltimarcIPAC4.vd209.p0430.yml Configurazione di sistema trovata in /usr/share/keyboardToPads/inputs/UltimarcIPAC4.vd209.p0430.yml È possibile creare una configurazione personalizzata in /userdata/system/configs/keyboardToPads/inputs/UltimarcIPAC4.vd209.p0430.yml. Prendere come esempio i file in /usr/share/keyboardToPads/inputs.
Verranno visualizzati i pad, se presenti, e il file necessario per personalizzarli.
I file sono in formato YAML.
Ci sono alcuni esempi di file in /usr/share/keyboardToPads/inputs.
Ecco un esempio di controller Rec Room Masters Xtension 2 Player Plus:
# Xtension 2 Player Plus
dispositivi_di_destinazione:
- nome: Xtension 2P Player 1
tipo: joystick
mappatura:
"key:up": "abs:hat0y:-1"
"key:down": "abs:hat0y:1"
"key:left": "abs:hat0x:-1"
"key:right": "abs:hat0x:1"
"tasto:spostamento a sinistra" "pulsante:sud"
"tasto:invio": "pulsante:sud"
"key:z": "btn:east"
"tasto:Ctrl sinistro" "pulsante:ovest"
"tasto:alt sinistro": "pulsante:nord"
"tasto:spazio": "pulsante:tl"
"key:x": "btn:tr"
"tasto:c": "pulsante:start"
"key:1": "btn:start"
"key:v": "btn:select"
"key:5": "btn:select"
- nome: Xtension 2P Player 2
tipo: joystick
mappatura:
"key:r": "abs:hat0y:-1"
"key:f": "abs:hat0y:1"
"chiave:d": "abs:hat0x:-1"
"chiave:g": "abs:hat0x:1"
"key:w" "btn:south"
"key:i": "btn:east"
"key:a" "btn:west"
"key:s": "btn:north"
"key:q": "btn:tl"
"key:k": "btn:tr"
"key:j": "btn:start"
"tasto:2": "pulsante:avvio"
"key:1": "btn:select"
"key:6": "btn:select"
- nome: tasti di scelta rapida Xtension
tipo: tasti di scelta rapida
mappatura:
"tab": "tab": "menu"
"tasto:p": "tasto:pausa"
"tasto:esc" "tasto:exit"
["key:1", "key:v"]: "key:exit" # esci dalla combinazione player 1 select + player 2 select, richiede batocera 43
["tasto:c", "tasto:spazio"]: "tasto:1" # giocatore 2 seleziona dalla combinazione giocatore 1 start+tl, richiede batocera 43
Utilizzando l'esempio precedente, possiamo ricavare le seguenti informazioni:
-
Il controller è suddiviso in 3 dispositivi virtuali: 2 pad e 1 dispositivo per tasti di scelta rapida.
-
Il
namenome del primo pad virtuale èXtension 2P Player 1. Rinominare Xtension 2P Player 1 & 2 con il nome del controller. -
Si
typechiama "joystick". I tipi possibili sono "joystick" per i controller e "hotkeys" per i tasti di scelta rapida. -
mappingSi tratta di una tabella di associazione chiave-valore che converte ciascun tasto del dispositivo reale nel corrispondente tasto virtuale. È possibile assegnare due o più tasti fisici a un singolo pulsante del tastierino.
Attenzione, non inserire "PAC" nel nome dei tuoi account virtuali, altrimenti si verificherà un conflitto.
Tieni presente che, una volta creato questo file, è sufficiente scollegare e ricollegare il dispositivo affinché venga preso in considerazione.
Tieni presente che la denominazione e la mappatura del dispositivo creano un pad virtuale, ma dovrai configurarlo tramite EmulationStation come di consueto per qualsiasi controller, poiché non sarà ancora presente nel nostro database. ( Menu principale → IMPOSTAZIONI CONTROLLER E BLUETOOTH → MAPPATURA CONTROLLER ) Se non esegui questa operazione, non funzionerà nell'emulatore.
Il nome del primo pad virtuale è Xtension 2P Player 1. Rinominare Xtension 2P Player 1 & 2 con il nome del controller. Il suo tipo è "joystick". I tipi possibili sono "joystick" per i pad e "hotkeys" per i tasti di scelta rapida.
mappingSi tratta di una tabella di associazione chiave-valore che converte ciascun tasto del dispositivo reale nel corrispondente tasto virtuale. È possibile assegnare due o più tasti fisici a un singolo pulsante del tastierino.
È possibile utilizzare il seguente comando per trovare i tasti di input:
evsieve --input /dev/input/event3 --print
Potresti anche voler utilizzare i pulsanti btn:tl2e btn:tr2(secondo grilletto sinistro e destro) a seconda del contesto.
Risoluzione dei problemi della tastieraToPads
In caso di errore, puoi provare a eseguire questo comando (con il numero di evento corrispondente alla tua configurazione):
keyboardToPadsLauncher /dev/input/event3 run
Interfacce di controllo Ultimarc
Ultimarc è un marchio leader nel settore dei controller di interfaccia, tra cui I-PAC, J-PAC, A-PAC, Mini-PAC, Opti-PAC, U-HID e molti altri.
In breve : se il tuo encoder è un modello I-PAC o Mini-PAC e la tua configurazione non prevede pulsanti dedicati (ad esempio Menu, Esci, Pausa), tieni premuti i pulsanti corrispondenti [Start1]+[P1SW2]per dieci secondi. Se sei fortunato, il tuo controller ora è un controller USB plug-and-play che puoi configurare come qualsiasi altro controller in Batocera. Ecco fatto. Hai finito. Vai a giocare!
Se non succede nulla o se desideri saperne di più, continua a leggere.
La procedura descritta sopra funziona solo con gli encoder Ultimarc (che loro chiamano interfacce di controllo) prodotti dal 2015 in poi e dotati di firmware versione 50 o superiore. Puoi verificare la versione del tuo encoder utilizzando il software disponibile sul loro sito web . Questo è importante perché aggiornare un encoder precedente al 2015 con il nuovo firmware lo renderà inutilizzabile! Se la tua scheda è abbastanza recente, ma il firmware non lo è, puoi aggiornarlo con lo stesso strumento. Leggi le informazioni sulla pagina "Multi-Mode" per scoprire le diverse modalità e le loro funzionalità. Le istruzioni sopra riportate faranno funzionare il controller in Modalità 2, che dovrebbe essere sufficiente per la maggior parte degli utenti. Ciò significa che, invece di essere riconosciuto come una tastiera USB, il controller verrà riconosciuto come uno o più controller di gioco D-input e non sarà necessario eseguire nessuno dei passaggi successivi.
Se si utilizza Batocera 41 o versioni successive e l'encoder Ultimarc dispone di pulsanti dedicati (ad esempio Menu, Pausa, Esci), questa funzionalità non è disponibile oppure non si desidera aggiornare il firmware (vedere keyboardToPads ). I controller Rec Room Master descritti in quella sezione si basano su encoder Ultimarc. Se si imposta la modalità tastiera (`[Start1]+[P1SW1]`), è possibile configurare l'encoder nello stesso modo di un controller Rec Room Master. Potrebbe avere un nome diverso e richiedere un file di configurazione yml dedicato. È possibile utilizzare il comando `keyboardToPads –search` per scoprire il nome e il nome del file di configurazione richiesto, quindi seguire le istruzioni rimanenti.
Interfacce di controllo Ultimarc per Batocera v40 o versioni precedenti
Xarcade2jstick è stato aggiornato per supportare gli encoder da tastiera. Potrebbe essere necessario riconfigurare alcuni tasti del vostro encoder poiché, purtroppo, i dispositivi X-Arcade di x-gaming non venivano mappati come i normali controller MAME.
Non modificare la mappatura dei tasti del tuo I-PAC o Mini-PAC, in quanto non è necessario, ma la seguente procedura si applica solo se il tuo encoder è in modalità tastiera, che è la modalità predefinita quando escono dalla fabbrica.
Configurazione del codificatore della tastiera
Segui questi passaggi:
-
Accedi al tuo server Batocera localmente o tramite SSH
-
Trova il nome del dispositivo del tuo encoder con
ls /dev/input/by-id. Di solito, nel nome dell'evento è presente un kbd alla fine. Ad esempio:usb-Ultimarc_IPAC_2_Ultimarc_IPAC_2_9-if01-event-kbd
NOTA BENE: un singolo codificatore può avere più nomi possibili, quindi provali tutti. Ad esempio: usb-Cypress_I-PAC_Arcade_Control_Interface-event-kbd→ funziona usb-Cypress_I-PAC_Arcade_Control_Interface-if01-event-kbd→ non funziona
-
Ora rimonta / in modalità lettura/scrittura
mount -o remount,rw / -
Crea un file vuoto con lo stesso nome del dispositivo tastiera trovato 2 passaggi sopra
touch /usr/share/batocera/datainit/system/configs/xarcade2jstick/devicename. Con l'esempio precedente:touch /usr/share/batocera/datainit/system/configs/xarcade2jstick/usb-Ultimarc_IPAC_2_Ultimarc_IPAC_2_9-if01-event-kbd -
Modifica
batocera.confe impostacontrollers.xarcade.enabled=1(dovrebbe essere già impostato di default, ma controllalo) -
Salva le modifiche tramite SSH
batocera-save-overlay -
Riavviare digitando
reboot
Ora tutti i tasti dovrebbero essere utilizzabili, ovvero per ogni giocatore: joystick a 4 direzioni, select, start, hotkey, A, B, X, Y, L1 e R1. Per ora non è possibile attribuire altri pulsanti come L2, R2, L3 o R3.
Ora è necessario configurare entrambi i controller nel menu Configurazione controller e associare il controller corretto al giocatore 1 e al giocatore 2.
A partire dalla versione 34 di Batocera , Ultimarc è incluso. Per saperne di più, clicca qui.
JammASD
Questa guida ti aiuterà a utilizzare i comandi originali del tuo cabinato arcade (levette e pulsanti) con Batocera. Il modo più semplice, in realtà, è utilizzare un controller JammASD .
Al momento, questo controller (utilizzato per inviare il segnale VGA, l'audio e le informazioni di controllo al connettore JAMMA) non è riconosciuto da EmulationStation, ma alcuni suggerimenti possono aiutarti a utilizzare Batocera nel tuo cabinato originale.
JammASD e Emulation Station
In EmulationStation, i controlli di JammASD vengono considerati come una tastiera, e configurare i controller per due giocatori non è il modo più semplice.
Quindi, devi convertire i driver JammASD in driver X-Arcade per poter utilizzare tutte le funzionalità del tuo pannello arcade.
1. Connettiti a Batocera tramite SSH
2. Tipo:
ls /dev/input/by-id
Vedrai questa interfaccia: usb-ASD_JammASD_Interface_ASD275D-if01-event-kbd
touch /userdata/system/configs/xarcade2jstick/usb-ASD_JammASD_Interface_ASD275D-if01-event-kbd
3. Riavvia il tuo Batocera
Ora non ti resta che modificare i controlli nel menu di EmulationStation. A quel punto, il tuo pannello arcade verrà riconosciuto come Dispositivo Xarcade-to-Gamepad 1 e Dispositivo Xarcade-to-Gamepad 2.
Nota: con questo suggerimento, ora è possibile avere START P1 + A per accreditare i tuoi giochi arcade ^^
Risoluzione dei problemi
L'intero articolo è in fase di elaborazione, ma questa parte in particolare è ancora in fase di sviluppo.
Indice rapido:
-
Gli encoder di Dragonrise, giocatore 1 e giocatore 2, sono stati scambiati.
-
Ho una trackball e uno spinner e a volte smettono di funzionare
Problema 1: Gli encoder di Dragonrise Giocatore 1 e Giocatore 2 sono stati scambiati.
Sintomi: utilizzo encoder Dragonrise e gli input del giocatore 1 e del giocatore 2 sono invertiti
Causa: - <Cosa sta realmente accadendo>
Aggiustare:
Per Batocera 40 e versioni successive, la correzione non sembra più necessaria, ma si trattava di un problema presente nelle versioni precedenti.
Assicurati che siano tutti cablati esattamente allo stesso modo, con ogni pulsante collegato allo stesso encoder USB.
Se ciò non funziona o è impossibile da fare a causa dei requisiti della tua configurazione, è possibile aggirare il problema utilizzando un trucco USB. Aggiungi quanto segue alla fine della riga di avvio (nelle immagini Raspberry Pi, si trova in /boot/uEnv.txt, gli utenti x86_64 possono fare riferimento qui ):
usbhid.quirks=0×0079:0×0006:0×040
Si aggiunge alla fine della riga, non su una nuova riga. Ad esempio, la riga di avvio potrebbe apparire così:
APPEND=label=BATOCERA rootwait quiet loglevel=0 console=ttyAML0,115200n8 console=tty3 vt.global_cursor_default=0 usbhid.quirks=0×0079:0×0006:0×040
Note -
Problema 2: Ho una trackball e uno spinner e a volte smettono di funzionare
Sintomi: Quando sia la trackball che lo spinner sono collegati a Batocera, occasionalmente potrebbero essere letti con un numero diverso rispetto all'ultimo avvio del dispositivo e, di conseguenza, verrà loro assegnato un Indexnumero diverso e smetteranno di funzionare.
Causa:
Le trackball e gli spinner delle sale giochi vengono gestiti come dispositivi mouse.
Il problema deriva dal modo in cui le versioni più recenti di RetroArch riconoscono i dispositivi mouse, tramite ID anziché nome. L'ID che possono avere è quindi imprevedibile, con la conseguenza che le configurazioni (come retroarchConfig[‘input_player1_mouse_index’] = “Barcode Reader Mouse”) non funzionano più.
Aggiustare:
Per ora, è possibile aggirare il problema utilizzando uno script per registrare e modificare automaticamente l'ID in base alle necessità. Salvalo in /userdata/system/configs/emulationstation/scripts/game-start/mouse-fix.she contrassegnalo come eseguibile con chmod +x /userdata/system/configs/emulationstation/scripts/game-start/mouse-fix.sh:
- mouse-fix.sh
-
#!/bin/bash # NOME DELL'INPUT DEL MOUSE DESIDERATO # Può essere trovato tramite il file di log di RetroArch o eseguendo 'evtest' mouse_name = "Combined Analog Arcade Controls" # Il file di log di RetroArch deve essere abilitato affinché questo funzioni batocera-settings-set global.retroarch.log_dir "/userdata/system/logs/retroarch" batocera-settings-set global.retroarch.log_to_file true batocera-settings-set global.retroarch.log_to_file_timestamp false # Leggi i valori dell'indice del mouse dall'ultimo file di log di RetroArch # e aggiorna la configurazione per la prossima esecuzione di RetroArch # NOTA: Utilizzo di '~' come delimitatore sed poiché alcuni nomi di dispositivi includono il tradizionale delimitatore '/' # NOTA: Invia tramite pipe a 'head -1' per restituire l'indice del primo dispositivo corrispondente, poiché alcuni dispositivi espongono più input mouse_index =$ ( sed -En "s~.*Mouse.* #(.*): \" $mouse_name \" .*~\1~p" / userdata / system / logs / retroarch / retroarch.log | head - 1 ) if [ [ -z " $mouse_index " ] ] ; then mouse_index = 0 fi batocera-settings-set global.retroarch.input_player1_mouse_index $mouse_index
Potrebbe essere necessario avviare un gioco due volte affinché abbia effetto.
Rimanete aggiornati seguendo questo spazio: https://github.com/libretro/RetroArch/issues/7638 . Post originale sul forum che descrive questo problema e la relativa soluzione alternativa: https://forum.batocera.org/d/6652-being-able-to-use-trackball-and-spinner-using-per-mouse-index
Batocera potrebbe semplificare il processo di soluzione alternativa in futuro includendo evsieve.
MAME standalone ha un proprio meccanismo per abilitare spinner, trackball e altri dispositivi mouse. Nelle OPZIONI DI GIOCO AVANZATE , seleziona MAME come emulatore, quindi scegli ABILITA MOUSE > ABILITATO .
Trovato questo articolo interessante? Condividilo sulla tua rete di contatti in Twitter, sulla tua bacheca su Facebook, in Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!















0 commenti:
Posta un commento