====== Scratch su Debian Jessie ======
[[https://scratch.mit.edu/|Scratch]] è un ambiente di programmazione per bambini dagli otto anni in poi, sviluppato dal [[wpit>Massachusetts Institute of Technology]].
===== Installazione =====
In Debian 8 Jessie si trova il pacchetto installabile per la **versione 1.4.0.6**. La versione 2.0 invece risulta disponibile solo come applicativo web, ma richiede una connessione internet, il browser Chrome e Adobe Flash Player (vedere le [[https://scratch.mit.edu/info/faq|FAQ]]).
Per far funzionare i suoni bisogna installare il pacchetto **pulseaudio**.
===== Problema con immagini e suoni =====
Ci sono dei **problemi con alcuni formati** di immagini e audio, in particolare sembra che Scratch così come pacchettizzato in Debian Jessie non possa aprire i **Backgrounds** in **formato JPEG** e i suoni in **formato MP3**.
Una soluzione brutale è convertire gli esempi forniti nel formato PNG e WAV rispettivamente. Gli esempi sono nella directory **''/usr/share/scratch/Media/''**, per convertire i file MP3 si installano i pacchetti **sox** e **libsox-fmt-mp3**. Quindi si possono eseguire degli script del tipo:
find /usr/share/scratch/Media/Backgrounds -name '*.jpg' | while read FILE; do
NEW_FILE="$(echo "$FILE" | sed 's/\.jpg/.png/')"
convert "$FILE" "$NEW_FILE"
done
find /usr/share/scratch/Media/Backgrounds -name '*.gif' | while read FILE; do
NEW_FILE="$(echo "$FILE" | sed 's/\.gif/.png/')"
convert "$FILE" "$NEW_FILE"
done
Dopo aver convertito i file è necessario eliminare i file **scratchthumbs.db** (le anteprime) presenti nelle cartelle **Backgrounds** e consentire a Scratch di crearne di nuovi, eseguendo Scratch come root oppure dando i permessi opportuni alle cartelle per il tempo necessario.
Per convertire i suoni:
find /usr/share/scratch/Media/Sounds -name '*.mp3' | while read FILE; do
NEW_FILE="$(echo "$FILE" | sed 's/\.mp3/.wav/')"
sox "$FILE" -r 22050 -b 16 "$NEW_FILE"
rm "$FILE"
done
===== Problema con la trasparenza =====
Scratch può usare immagini GIF e PNG con sprite che abbiano lo **sfondo trasparente**, il programma ne fornisce alcuni come esempio. Tuttavia non si riesce a creare con Gimp un PNG con lo sfondo trasparente che venga correttamente riconosciuto da Scratch. FIXME Quale trucco usare?
===== Problema con la telecamera =====
Avendo selezionato il tab Costumi di uno sprite, se si clicca su WebCam si dovrebbe poter acquisire un'immagine dalla telecamera. Nel nostro caso purtroppo il programma crasha miseramente con un **Segmentation fault**.
====== Scratch 2, AIR and Adobe Flash Player on Debian Jessie ======
[[wp>Adobe AIR]] sucks! Do not use it, please migrate whatever you developed with this nasty thing to another technology! I had to face this terrible piece of software because I wish to use [[https://scratch.mit.edu/|Scratch]], a developing platform for children aged 8 and up.
Debian 8 Jessie include **Scratch 1.4.0.6**, che è abbastanza vecchio. Dal sito ufficiale si apprende che l'utilizzo consigliato delle nuove versioni è del tipo //software as a service//, cioè vi si accede tramite pagina web e tutto il software risiede sul server remoto. Per accedere al servizio è richiesto un **browser moderno** con una versione altrettanto moderna del **plugin Adobe Flash Player**.
Il sito di Scratch tuttavia offre anche l'opzione **Offline Editor**, cioè una versione scaricabile (qui l'archivio utilizzato da noi: **[[https://scratch.mit.edu/scratchr2/static/sa/Scratch-456.0.1.air|Scratch-456.0.1.air]]**) che è possibile eseguire nella piattaforma **[[wp>Adobe AIR]]**. Purtroppo tale piattaforma non è più supportata su GNU/Linux, l'ultima versione distribuita per il nostro sistema operativo è la **2.6 a 32 bit** (qui la [[https://helpx.adobe.com/air/kb/archived-air-sdk-version.html|pagina con le vecchie versioni]]). Alcune pagine riferiscono della possibilità di utilizzare tale software anche su un sistema Linux a 64 bit, tramite il supporto multiarch, vedere ad esempio [[https://gist.github.com/jiggneshhgohel/ade2c57d03c4ad895e82|Adobe Air 2.6 Installation Steps on Ubuntu 14.04 (64-bit)]].
La nostra esperienza ha avuto diverse difficoltà, qui di seguito gli appunti.
===== Adobe AIR nativo per Linux (non funziona) =====
**ATTENZIONE: Questa procedura non funziona!** FIXME
Si scarica il programma di installazione **[[http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin|AdobeAIRInstaller.bin]]** per GNU/Linux 32 bit (non più supportato da Adobe). Si tratta di un binario precompilato con archivio autoinstallante (una bella porcheria, sì!). Per poterlo eseguire è necessario abilitare il supporto **[[..:linux:sa:multiarch|multiarch]]** e installare le seguenti librerie i386 (elenco ricavato dagli errori di esecuzione tramite ''strace''):
apt-get install \
libasound2:i386 libgtk2.0-0:i386 libnss3:i386 libnspr4:i386 libnss-mdns:i386 \
libxslt1.1:i386 gtk2-engines-xfce:i386 libstdc++6:i386 libxt6:i386 libxml2:i386
Le librerie necessarie potrebbero essere diverse, ad esmpio nel nostro caso dipendono dall'ambiente grafico XFCE.
L'installer **AdobeAIRInstaller.bin** cerca di usare lo Gnome Keyring o il KDE KWallet, ma fallisce (sia come root che come utente normale) nonostante si siano installati i pacchetti:
apt-get install gnome-keyring libgnome-keyring0:i386
Si suppone che avrebbe dovuto installare in **''/opt/''**. Dopo il messaggio di fallimento, si troveranno i file scompattati in una directory del tipo **''/tmp/air.01104e/''**.
Il tentativo di procedere ad una **installazione manuale** è stato inutile: si sono **copiate le cartelle**:
cp -r "/tmp/air.01104e/build/opt/Adobe AIR" /opt
cp -r "/tmp/air.01104e/build/etc/opt/Adobe" /etc/opt
e si sono creati i **seguenti link** simbolici alle posizioni effettive delle rispettive librerie:
/usr/lib32/libnspr4.so
/usr/lib32/libnss3.so
/usr/lib32/libplc4.so
/usr/lib32/libplds4.so
/usr/lib32/libsmime3.so
/usr/lib32/libssl3.so
Quindi si esegue l'**app installer**:
"/opt/Adobe AIR/Versions/1.0/Adobe AIR Application Installer" $HOME/Scratch-456.0.1.air
compare la dialog box per l'accettazione della licenza e per la richiesta della directory destinazione, ma poi la procedura fallisce con il messaggio //Sorry, an error has occurred//.
===== Adobe AIR per Windows su Wine (non funziona) =====
**ATTENZIONE: Questa procedura non funziona!** FIXME
Seguendo le indicazioni della pagina [[http://jcward.com/Installing+AIR+Apps+On+Linux|Installing AIR Apps On Linux]], si è scaricato l'installer di AIR per Windows **[[https://airdownload.adobe.com/air/win/download/25.0/AdobeAIRInstaller.exe|AdobeAIRInstaller.exe]]**, quindi lo si esegue tramite l'emulatore **wine**:
wine $HOME/scratch/AdobeAIRInstaller.exe
L'installazione di AIR sembra andare a buon fine, ma poi l'**esecuzione dell'app installer fallisce**:
cd "$HOME/.wine/drive_c/Program Files/Common Files/Adobe AIR/Versions/1.0/Resources/"
wine airappinstaller.exe Z:\home\niccolo\scratch\Scratch-456.0.1.air
Questo il messaggio di errore:
Something went wrong trying to install this application.
Please install the latest version of Adobe AIR from
http://www.adobe.com/go/getair and try again.
===== Esecuzione dell'applicazione tramite SDK AIR =====
Questo metodo consiste nell'usare l'**ambiente SDK AIR** invece del runtime. L'applicazione Scratch non viene installata, ma eseguita direttamente dopo averla estratta dall'archivio air.
Si scarica l'archivio dell'SDK **[[https://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRSDK.tbz2|AdobeAIRSDK.tbz2]]** e lo si scompatta ad esempio in **''/opt/airsdk/''**. L'archivio **Scratch-456.0.1.air** è in realtà un file zip, va scompattato in una directory dell'utente perché l'applicativo ha necessità di scrivere in alcune sottodirectory, è possibile ad esempio creare una cartella **''$HOME/lib/scratch/''**.
Ovviamente si deve installare il supporto multiarch tutte le librerie di compatibilità i386 necessarie all'esecuzione del runtime AIR nativo Linux (vedi sopra). Per lanciare l'applicativo AIR si esegue da utente normale:
/opt/airsdk/bin/adl ~/lib/scratch/META-INF/AIR/application.xml ~/lib/scratch
**Attenzione alle dipendenze automatiche!** Con il sistema //multiarch// quando si installa una libreria i386 (ad esempio il pacchetto **gtk2-engines-xfce:i386**) viene automaticamente rimossa la versione amd64. Potrebbe capitare che qualche altra dipendenza reinstalli la versione amd64, rompendo il funzionamento di AIR. Questa ad esempio è stata la causa del non funzionamento dell'audio, che produceva un errore in Adobe AIR del tipo:
Si è verificato un errore ActionScript:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at soundedit::WaveformView/startPlaying()
at uiwidgets::IconButton/mouseDown()
===== Esecuzione nel browser Chromium con Pepper Flash Player =====
Per verificare l'installazione del plugin Flash, la versione e il suo corretto funzionamento è possibile puntare il browser al link **[[http://www.adobe.com/it/support/flashplayer/ts/documents/tn_15507.htm]]**. Il browser Chromium ha lo pseudo URL **%%chrome://plugins%%** per verificare i plugin installati.
Il **Player Pepper Flash** è mantenuto da Google ed è più aggiornato del **Flash Player di Adobe**, viene distribuito con Google Chrome e funziona anche con Chromium.
Seguendo le indicazioni di [[https://wiki.debian.org/PepperFlashPlayer|Debian Wiki]], sono necessari due pacchetti, disponibili **solo per architettura amd64**:
* **browser-plugin-freshplayer-pepperflash** dai //backports// per Jessie
* **pepperflashplugin-nonfree** dai //contrib// per Jessie
Il primo pacchetto è un plugin [[wpit>NPAPI]] (//Netscape Plugin API//, compatibile con i browser legacy tipo Firefox e Chromium) che consente di caricare i plugin [[wpit>NPAPI#PPAPI|PPAPI]] (//Pepper Plugin API// di nuova generazione).
Il secondo pacchetto dovrebbe scaricare Google Chrome (software proprietario), ed estrarre dall'archivio il plugin Player Pepper Flash **libpepflashplayer.so**. Tuttavia pare che il plugin non ci sia più nel file distribuito da Google, quindi la procedura fallisce con:
mv: cannot stat ‘unpackchrome/opt/google/chrome/PepperFlash/libpepflashplayer.so’:
No such file or directory
È sufficiente procurarsi l'archvio per altra via (ad esempio da una installazione di Google Chrome funzionante) e copiarla nella directory **''/usr/lib/pepperflashplugin-nonfree/''**.
Se si installa **solo il primo pacchetto** (cioè il layer di compatibilità NPAPI - PPAPI), nello pseudo URL **%%chrome://plugins%%** risulta installato **erroneamente** l'//Adobe Flash Player - Version: 11.2.999.999//, nel caso si visiti una pagina che richiede il Flash Player compare l'errore //Couldn't load plugin//. Se invece l'installazione è completa risulta //Adobe Flash Player - Version: 25.0.0.148//.
Il pacchetto **flashplugin-nonfree** (che scarica e installa il Flash Player di Adobe, plugin di tipo NPAPI) non funziona con Chromium.
===== Esecuzione nel browser Iceweasel/Firefox con Adobe Flash Player =====
Per verificare l'installazione del plugin Flash, la versione e il suo corretto funzionamento è possibile cercare uno dei vari checker on-line. Il browser Iceweasel/Firefox ha lo pseudo URL **%%about:plugins%%** per verificare i plugin installati.
Dal sito **[[https://get.adobe.com/it/flashplayer/]]** si scarica il plugin (tecnologia legacy **NPAPI**, architettura **amd64**). Attualmente è disponibile la **versione 25.0.0.148**. È sufficiente estrarre la libreria **libflashplayer.so** e linkarla nella directory **''/usr/lib/mozilla/plugins/''**.
Con **Firefox** >= **52** esiste una opzione di configurazione che deve essere impostata: puntare il browser allo pseudo indirizzo **%%about:config%%** e impostare l'opzione **plugin.load_flash_only**. Se il plugin non compare tra quelli attivi provare a cambiare da //true// a //false// o viceversa.