app_android

Come si creano le app Android — Linux Day 2016

Il 22 ottobre si è svolto il Linux Day 2016 in tutta Italia. Come ormai faccio da anni, ho partecipato all’organizzazione di quello di Bassano del Grappa (VI) assieme a GrappaLUG.

Il Linux Day è un evento fantastico per vari motivi: è gratuito, si trova in decine di città in tutto il paese, e consente alle persone di avvicinarsi a Linux e conoscere varie tematiche relative al mondo del software libero.

Quest’anno ho deciso di proporre un talk basato essenzialmente sul mio lavoro, parlando dello sviluppo di app per Android, il quale è un sistema operativo basato su Linux, perciò eravamo pienamente in tema. 🙂

Di seguito potete vedere la registrazione del talk e le slide su SlideShare. Se volete scaricarle, le trovate sul sito del GrappaLUG. Naturalmente fatemi sapere se avete qualche domanda o dubbio. Buona visione!

Sbloccare i siti di streaming legale senza VPN con UnoTelly

Mi è stato proposto di provare UnoTelly, un servizio di SmartDNS e VPN commerciale. In particolare, questo articolo riporta la mia opinione obiettiva e imparziale sui due servizi. Mi sono focalizzato soprattutto sul servizio UnoDNS e un po’ meno su UnoVPN.

Accesso senza VPN con UnoDNS

UnoDNS è un servizio che permette di accedere ai siti web bypassando le restrizioni geografiche. Permette quindi di collegarsi a dei siti web di streaming legale specialmente in lingua inglese: Hulu, BBC iPlayer, CBS, e molti altri. A questi si aggiungono i siti di varie emittenti di varie nazioni, come ad esempio Italia, Francia, Germania, Danimarca, eccetera.

Essendo basato sugli SmartDNS, il servizio consente di sbloccare contemporaneamente tutti i siti supportati, indipendentemente dal paese per cui sono abilitati. I server DNS di UnoTelly si occupano di farci apparire come navigatori del paese più adeguato il minimo indispensabile per accedere al sito, mentre il resto del traffico non viene dirottato.

Hulu_UnoTelly
Accesso immediato ad Hulu.com tramite UnoDNS

Questo tipo di scelta ha due vantaggi rispetto alle “classiche” VPN. Il primo riguarda la velocità di navigazione: i servizi VPN non sempre sono efficienti e possono rallentare la velocità. Questo è un problema specialmente per i video. L’altro vantaggio riguarda il supporto a diversi dispositivi: qualsiasi apparecchio collegato a Internet consente di impostare dei server DNS, quindi non è necessario che supporti le VPN.

Impostando i DNS nel router, inoltre, si attivano automaticamente tutti i dispositivi della rete di casa. Questo significa sbloccare computer, smartphone, tablet, console, set-top box con Android e molto altro.

Una funzione particolare di UnoDNS è chiamata Dynamo: permette di scegliere quale nazione preferire per alcuni servizi. Un esempio molto conosciuto è Netflix, che è disponibile (con programmi diversi) in diverse nazioni. Dato che Netflix consente ai clienti di viaggiare usando lo stesso account, è possibile abbonarsi a Netflix con account USA e poi impostare Dynamo per sbloccare i programmi nel Regno Unito, cambiando la scelta ogni volta lo si desideri.

La mia valutazione

Ho provato UnoDNS con diversi siti. L’attivazione è molto semplice e il sito di UnoTelly contiene un wizard che spiega i semplici passi da eseguire. Si tratta solo di attivare i DNS e, se si ha un IP dinamico, periodicamente è necessario premere il pulsante Update IP sul sito di UnoTelly. È possibile anche configurare l’aggiornamento automatico dell’IP.

Ho verificato il perfetto funzionamento del servizio su Hulu, BBC iPlayer e CBS.

Poi ho testato un canale francese, France 3, e il risultato non è stato ugualmente soddisfacente. Il servizio infatti non è riuscito a consentire l’accesso, anche se il canale risulta tra gli oltre 350 siti supportati:

Errore di accesso sul sito di France 3
Errore di accesso sul sito di France 3

Va detto, per correttezza, che il sito contiene una sezione dedicata alla richiesta di aggiunta di nuovi canali e sicuramente è possibile segnalare questo tipo di problemi.

Complessivamente ho avuto comunque un’impressione molto positiva, specialmente per le caratteristiche del servizio DNS (velocità e compatibilità) e l’opzione Dynamo. Pertanto, considerando diversi fattori, si ottiene questo risultato:

  • Facilità d’uso: 9/10
  • Velocità: 10/10
  • Compatibilità con i dispositivi: 10/10
  • Supporto ai canali: 8/10
  • Totale: 9/10

Navigazione protetta con UnoVPN

UnoTelly propone anche un piano comprensivo sia di UnoDNS che di accesso VPN, ovviamente a un prezzo più alto. Le località VPN consentite sono: Stati Uniti, Regno Unito, Paesi Bassi, Canada e Germania.

Come ho già scritto in passato, le VPN sono un modo ormai “classico” e funzionale per accedere a siti web con restrizioni geografiche. Nella pratica, ci si collega a un server posizionato in un determinato paese e tutto il traffico web viene dirottato lì, “uscendo” su Internet con un indirizzo IP situato nella nazione in cui si trova il server.

Oltre al fatto di essere dirottato, il traffico viene anche criptato, diventando illeggibile a chi si trova tra il nostro computer e il server della VPN. Questo è leggermente meno comodo per vedere video su siti di diversi paesi, in quanto bisogna connettersi alla VPN giusta di volta in volta. Tuttavia ha un grande vantaggio in termini di privacy.

Con una buona VPN, è possibile navigare tranquillamente senza temere intercettazioni illegali o registrazioni del traffico da parte di malintenzionati o governi oppressivi. Questo vale anche in luoghi con un livello di sicurezza bassissimo, per esempio quando si usa il Wi-Fi gratuito all’interno di un locale pubblico.

Quando si sceglie un provider VPN, specialmente per questioni di privacy, è importante verificare quale sia la policy riguardo ai log (registrazioni) del traffico effettuato e la giurisdizione in cui si trova. Per motivi che sono noti a tutti, andrebbero evitati i provider basati negli Stati Uniti. UnoTelly è fornito da Unovation Inc., un’azienda che si trova in Canada e ha una privacy policy abbastanza buona.

Bisogna considerare anche i protocolli offerti. Le informazioni fornite su UnoVPN consigliano agli utenti di usare PPTP. Se lo scopo è avere più velocità per i video può anche andare, ma se l’obiettivo è la privacy non ci siamo. Molto meglio OpenVPN, il quale viene offerto ma in modalità “sperimentale”:

If our regular PPTP VPN works for you, please continue to use that instead. OpenVPN is still in BETA and we are still ironing out the wrinkles. PPTP VPN is also generally faster than OpenVPN.

La mia valutazione

A prima vista, ero convinto che anche il servizio UnoVPN fosse orientato a sbloccare l’accesso dei video online. Purtroppo però mi sono dovuto ricredere. Usando il server USA non sono riuscito a sbloccare neppure Hulu:

Malfunzionamento di Hulu con la VPN statunitense
Malfunzionamento di Hulu con la VPN statunitense

Per il resto, UnoVPN si comporta come molte altre VPN, senza meriti speciali. Ovviamente i fattori da considerare sono un po’ diversi rispetto ai DNS, e il risultato è:

  • Facilità d’uso: 8/10
  • Protocolli supportati: 4/10
  • Supporto canali e nazioni: 2/10
  • Giurisdizione canadese: 7/10
  • Totale: 5/10

Conclusione

I servizi di SmartDNS sono un valido strumento per accedere ai servizi di streaming legale, indipendentemente dalla nazione di provenienza. UnoDNS è un’ottima scelta sia per la facilità d’uso che per l’interessante funzione Dynamo. Ci sono problemi con qualche canale ma sono convinto che siano risolvibili.

Dato che i prezzi variano col tempo, non ho voluto entrare nei dettagli ma vi rimando al sito ufficiale. I piani di breve durata sono un pochino più costosi, mentre quelli annuali sono più convenienti. Ritengo comunque che sia un servizio assolutamente adeguato per chi ama film e serie TV e fa un uso intenso e regolare di questi siti.

Per gli utenti che hanno esigenze ridotte e poco frequenti, è possibile cavarsela anche con opzioni gratuite, come VPNGate, con le limitazioni del caso. In particolare la maggiore difficoltà ad attivare dispositivi “da salotto” come set-top box e smart TV.

Riguardo a UnoVPN, non ritengo che sia un servizio particolarmente utile per sbloccare i siti web che sono già attivati senza sforzo da UnoDNS. Come strumento per proteggere la privacy nelle reti poco sicure lo reputo sufficiente, senza troppi fronzoli. Ci sono comunque altri servizi che offrono un numero maggiore di nazioni.

Estrarre la rubrica da un BlackBerry con software danneggiato

Un’amica mi ha sottoposto un dispositivo BlackBerry 9780 per un’analisi. Lo scopo era quello di recuperare il contenuto integrale della rubrica contatti, in quanto il software di sistema era pesantemente danneggiato e il dispositivo faticava ad accendersi. Dopo alcuni minuti di inattività, crashava improvvisamente con un messaggio di tipo App Error.

La prima cosa da fare, in questo caso, è rimuovere la batteria e reinserirla, per effettuare un reset. Dopo diversi tentativi in cui il dispositivo sembrava bloccato all’avvio, ho verificato che effettivamente il sistema si avviava, mettendoci però 11 minuti. Alla fine del caricamento, comparivano numerosi messaggi di errore relativi al software basato su Java.

Schermata di caricamento ed errori del software
Schermata di caricamento ed errori del software

In questi casi è possibile premere ripetutamente OK per raggiungere il menu del telefono. Dopo aver effettuato questa operazione, sono iniziate le difficoltà reali:

  • la rubrica mostrava la lista dei contatti (nomi) ma non era possibile aprirli per visualizzare i numeri
  • le impostazioni di sistema non erano accessibili e facevano crashare il dispositivo
  • non si riusciva ad effettuare un accoppiamento via bluetooth
  • il programma BlackBerry Desktop Manager, oltre a essere solo per Windows o Mac, non riusciva a connettersi al dispositivo

Il fatto di non poter aprire le impostazioni di sistema significava non potersi collegare al Wi-Fi per tentare di esportare i contatti tramite qualche app. I problemi col bluetooth lasciavano il collegamento USB come unica speranza.

Il mio piano infatti era quello di effettuare un backup con il software ufficiale di BlackBerry e poi esportare la rubrica. Dopotutto è possibile usare Windows in macchina virtuale (come quelle fornite da Microsoft sul sito Modern.ie) oppure creare una USB avviabile tramite le varie Release Candidate per sviluppatori. Peccato solo per l’errore nefasto restituito da BlackBerry Desktop Manager per Windows:

BlackBerry® Desktop Manager non è in grado di comunicare con il dispositivo BlackBerry connesso. Se il dispositivo si sta riavviando oppure la batteria è completamente scarica, fare clic su Riprova per tentare di ristabilire la connessione una volta completato il riavvio. In caso contrario, per risolvere il problema potrebbe essere necessario aggiornare BlackBerry® Device Software.

Come spesso accade, mi sono reso poi conto che Linux poteva venire in aiuto e salvare la situazione. Per evitare di installare troppo software sul mio portatile, ho creato una chiavetta USB avviabile con Xubuntu 14.10, assicurandomi di attivare la persistenza per poter salvare i dati recuperati. Ad ogni modo, qualsiasi distribuzione dovrebbe andare bene.

Per evitare problemi, ho effettuato nuovamente il reset del BlackBerry. Nel frattempo ho fatto partire Xubuntu. Una volta avviato il sistema, ho installato Barry, un software open source per gestire i dispositivi BlackBerry:

sudo apt-get install barrydesktop

Ho collegato il BlackBerry col cavo USB e ho avviato il programma con i permessi di amministratore, per evitare errori di accesso negato:

sudo barrydesktop

Barry ha individuato il dispositivo senza batter ciglio e mi ha chiesto di dargli un nome. Ho cliccato su Config… e poi sul primo tasto Configure… (quello relativo al backup) per selezionare tutti i campi disponibili. In realtà era di fondamentale importanza recuperare soltanto la rubrica, ma ero curioso di vedere quanto si potesse effettivamente estrarre.

Selezione degli elementi da estrarre
Selezione degli elementi da estrarre

Dopo aver salvato le mie scelte, ho dovuto solo premere il tasto Backup nella finestra principale:

Barry durante l'operazione di backup
Barry durante l’operazione di backup

Il processo si è interrotto “brutalmente” al 42%, probabilmente a causa degli errori software. Barry ha mostrato un messaggio di errore indicando quali campi non erano stati estratti. Ha quindi provveduto a salvare quello che era stato recuperato, incluso il contenuto integrale della rubrica. Il BlackBerry è poi crashato nuovamente.

Dato che il processo era stato avviato come amministratore, è stato necessario copiare i file dalla cartella dei backup alla home dell’utente che stavo utilizzando:

sudo cp /root/.barry/backup ~
sudo chmod a+r ~/backup

L’obiettivo finale era esportare i contatti in un formato “universale” che si potesse agevolmente aprire e magari importare su Gmail. Dato che Barry effettua il backup in un formato proprietario, ho utilizzato un comodo script chiamato BlackBerry-Address-Book-to-CSV.

È sufficiente scaricare il file ZIP, estrarlo ed eseguirlo sul file di backup. Si tratta solo di dare pochi comandi:

wget https://github.com/mintern/BlackBerry-Address-Book-to-CSV/archive/master.zip
unzip master.zip
cd BlackBerry-Address-Book-to-CSV-master
./bbab2csv ~/backup/[PIN]/[NOME].tar.gz

Al posto di [PIN] e [NOME] vanno inseriti il PIN del dispositivo e il nome dell’archivio creato da Barry, che varia di volta in volta. L’output in formato CSV viene mostrato nel terminale, se volete salvarlo su un file potete ripetere l’ultimo comando ridirezionando l’output:

./bbab2csv ~/backup/[PIN]/[NOME].tar.gz > ~/contatti_BB.csv

Il file risultante si trova nella home e si può aprire tranquillamente con LibreOffice oppure importare in un account Gmail, per sincronizzarlo con un dispositivo Android. Ovviamente va salvato in un posto sicuro, specialmente se si sta usando Linux su una live USB.

Il procedimento di recupero con Linux, alla fine, è stato molto veloce. La maggior parte del tempo è stata persa nei vari riavvii del dispositivo e tentando di far funzionare il software ufficiale di BlackBerry, che non è stato di alcun aiuto per estrarre i dati.

Tuttavia, BlackBerry Desktop Manager si è rivelato utile perlomeno per far tornare funzionante il telefono. Una volta collegato il cavo USB e ricevuto il messaggio di errore, ho cliccato su Aggiorna. Alla proposta di fare un backup ho risposto di no (altrimenti si sarebbe bloccato di nuovo) e ho confermato di voler formattare il dispositivo.

Alla fine del processo, il BlackBerry era perfettamente funzionante e tristemente vuoto. Avviando di nuovo Linux, con Barry ho potuto ripristinare la rubrica di cui era stato fatto il backup in precedenza.

La morale che si può trarre da questa esperienza è che da un BlackBerry con software danneggiato a volte si possono recuperare dei dati. Inoltre, non sempre l’applicazione ufficiale è la scelta migliore. Anzi, Barry consente di accedere almeno a una parte delle informazioni in casi in cui BlackBerry Desktop Manager non è in grado di collegarsi al dispositivo, con l’ulteriore vantaggio di non essere costretti a usare Windows.

Ridurre l’alto consumo di CPU di Spotify

A molti utenti è capitato di riscontrare un massiccio consumo di CPU da parte di Spotify, la migliore applicazione per ascoltare musica in modo legale, anche in situazioni apparentemente “tranquille”. Per esempio, ecco come si comportava sul mio portatile con una canzone in pausa:

Massiccio consumo di risorse di due processi di Spotify
Massiccio consumo di risorse di due processi di Spotify

Il problema, almeno nel mio caso, deriva da alcuni elementi dell’interfaccia grafica che richiedono una considerevole potenza di calcolo per essere disegnati. L’interfaccia di Spotify è basata su Webkit, un componente che troviamo anche all’interno di alcuni browser (come Chromium), tuttavia non è molto performante.

Ho trovato la soluzione al problema ispirandomi a un messaggio trovato sul forum ufficiale. Si tratta solo di disattivare due opzioni. 🙂 Andate su Visualizza e togliete le spunte da Feed attività e Illustrazione grande brano in riproduzione. Ecco fatto!

Il risultato dopo la cura è il seguente:

Una situazione molto più tranquilla
Una situazione molto più tranquilla

Aggiornamento: poco dopo aver scritto questo post, ho notato che anche la pagina principale (intitolata Naviga) contribuisce ad appesantire la CPU. Pertanto vi consiglio di tenere aperta un’altra pagina, per esempio Album mentre ascoltate la musica. 😉

Ordinare script ed eseguibili su Linux con una comoda directory

I sistemi operativi Linux sono eccellenti e versatili. Hanno una lista talmente lunga di pregi e vantaggi che qualcuno ci ha addirittura fatto un sito web. Elencarli tutti risulterebbe impossibile, tuttavia uno dei miei preferiti è la capacità di personalizzazione.

Che si tratti di aggiungere temi, indicatori sulla barra di stato, software o anche piccoli comandi (script) per effettuare compiti ripetitivi, c’è solo l’imbarazzo della scelta. Il terminale fornisce una interfaccia a riga di comando che può tornare utile a principianti ed esperti. Ve ne avevo parlato in passato: alcuni comandi sono molto semplici e si imparano in fretta.

I programmi e gli script

La maggioranza dei programmi su Linux è disponibile in comodi pacchetti, scaricabili direttamente dal gestore pacchetti (o “centro software”, oppure altri nomi simili). Tuttavia esistono degli strumenti che vengono distribuiti come eseguibili da estrarre in una cartella e lanciare subito.

Alcuni sono software un po’ di nicchia, come ad esempio K2pdfopt. Si tratta di un eccellente programma open source in grado di reimpaginare completamente un PDF anche scannerizzato e ottimizzarlo per un lettore ebook o uno smartphone. Altri sono programmi molto più conosciuti e “grossi” come l’IDE Eclipse.

Esistono poi innumerevoli script sparsi in giro per il web. Queste vere e proprio gemme si trovano solitamente su siti e blog specializzati e possono essere sotto forma di script già pronti oppure di un elenco di comandi Linux. Nel secondo caso basta metterli in un file con estensione sh e renderli eseguibili per poterli richiamare ogni volta.

Per esempio, potreste essere interessati a un metodo per pulire le tracce di Wine. Cercando sul web trovate questo mio articolo e lanciate i 5 comandi. Per evitare di cercarli di nuovo e copiarli ogni volta, potete creare un semplice file chiamato cleanwine.sh con il seguente contenuto:

#!/bin/bash
rm -rf ~/.config/menus/applications-merged/wine-*
rm -rf ~/.local/share/applications/wine*
find ~/.local/share/icons/ -name "*wine*" | xargs rm -rf
rm -rf ~/.local/share/desktop-directories/wine-*
rm -rf ~/.wine*

In sintesi, dovete includere i comandi desiderati preceduti da una riga chiamata shebang, che specifica quale shell deve essere eseguita. Il file non ha ancora il permesso di essere eseguito. Ciò si può risolvere da terminale, dando:

chmod +x cleanwine.sh

Oppure cliccando col destro e accedendo alle proprietà del file, alla scheda permessi.

Questo lo potete fare con molti altri comandi che trovate in rete, per evitare di ricordare a memoria sequenze lunghissime e impossibili da ripetere senza errori. Esistono naturalmente anche esempi più complicati, come i comandi che richiedono parametri (se agiscono su file o altro). Il mio era solo un esempio, ci vorrebbe un altro articolo per trattare approfonditamente tutto ciò.

Lo stesso discorso vale per molti script in Python formati da un singolo file, come ad esempio il mio script per usare il servizio gratuito di VPNGate.

Lanciare i propri script o programmi

Quello che abbiamo visto finora è bello e interessante, sorge però un problema. Voi potete avere scaricato k2pdfopt o altri eseguibili, oppure potete aver scritto (o salvato dal web) qualche script come cleanwine.sh. Però il vostro sistema non sa che esistono. Intendo dire che, provando a lanciare un comando da terminale, otterrete un errore:

$ k2pdfopt
k2pdfopt: comando non trovato

Finché è uno solo, va bene anche richiamare il percorso completo, supponendo di aver dato i permessi di esecuzione:

/home/andrea/Scaricati/k2pdfopt # oppure ~/Scaricati/k2pdfopt

Questo però non è pulito. Immaginate di avere anche 4-5 script o eseguibili: intasereste qualche cartella adibita ad altro (per esempio Scaricati) e poi dovreste ricordare l’intero percorso ogni volta. Impraticabile.

La soluzione è creare una o più directory in cui mettere gli script e poi “informare” il vostro sistema della sua esistenza.

Organizzare tutto con una directory

Con questa guida intendo spiegarvi l’organizzazione che utilizzo io. Ovviamente potete variarla e adattarla alle vostre esigenze. Sul mio portatile, ho creato nella home una cartella chiamata bin, che contiene anche altre sottocartelle:

$ ls -1d ~/bin/*/
/home/andrea/bin/eclipse/
/home/andrea/bin/sage/
/home/andrea/bin/script/

In sintesi, ho una directory dove ho estratto l’ultima versione di Eclipse, una dove tengo installato Sage e una cartella dove tengo due dozzine di script di vario genere. Ho anche qualche altro software che non ho incluso nell’output, per evitare confusione.

L’idea di base è semplice: includere la maggior parte degli script (in Bash e in Python) dentro a script, alcuni eseguibili come k2pdfopt direttamente in bin e i programmi grossi nelle proprie directory. Qualunque eseguibile o script messo dentro a una di queste cartelle deve poter essere richiamato dal terminale scrivendone il nome.

Una volta organizzata la struttura di cartelle e inseriti i vari script o programmi, è il momento di rendere tutto ciò “visibile” dal terminale.

Aggiustare il PATH

La shell della vostra distribuzione Linux è in grado di riconoscere i comandi che digitate perché sa dove andarli a cercare. Per esempio, se digitate who e premete Invio, il sistema cercherà tutte le cartelle nel PATH fino a trovare un programma che si chiami esattamente così. Il programma (probabilmente /usr/bin/who) viene quindi eseguito.

Qui entra il gioco la personalizzazione: possiamo aggiungere le nostre directory e richiamare gli script e gli eseguibili scaricati. Per farlo, vi basta aprire il file .bashrc nella vostra cartella home.

Due cose a cui fare attenzione:

  • Sto supponendo che la vostra versione di Linux usi Bash come shell predefinita, se non siete sicuri al 99% è così. Gli utenti esperti possono modificare la propria shell e usarne una alternativa.
  • Il file da modificare è nascosto (inizia con un punto), perciò dovrete attivare la visualizzazione dei file nascosti per poterlo individuare. Su alcuni gestori di file, come quello di Ubuntu, si può fare anche premendo Ctrl+H mentre siete nella cartella home.
  • Queste modifiche valgono solo per il vostro utente. Gli altri utenti del sistema non noteranno differenze.

È necessario aggiungere alcune righe in fondo. Magari mettete anche un paio di righe bianche per separare il contenuto precedente da quello aggiunto da voi. In particolare sono una per directory:

# Percorsi aggiunti al PATH
export PATH=$PATH:~/bin
export PATH=$PATH:~/bin/script
export PATH=$PATH:~/bin/sage

Non ho aggiunto Eclipse perché non mi interessa richiamarlo da terminale, ma solo tenerlo in una cartella “in ordine”. Come potete vedere, stiamo ridefinendo il PATH aggiungendovi un separatore (due punti) e la directory desiderata. Ne mettiamo una alla volta per comodità.

Ricordate di modificare il mio esempio, non copiatelo così com’è. Un paio di osservazioni:

  • Se non usate Sage o se avete predisposto altre cartelle, adattate le righe di conseguenza.
  • La tilde serve a rappresentare il percorso della vostra cartella home.

Ora dovreste chiudere il terminale e riaprirlo. Qualsiasi script o eseguibile messo nella cartella bin o in un’altra di quelle che avete elencato potrà essere richiamato con il relativo nome.

Alcuni consigli

Aggiungendo altri programmi potrebbe capitarvi di creare altre sottodirectory, e queste non sono incluse nel PATH. Potete modificarlo ogni volta, oppure mettere un collegamento simbolico all’esegubile principale nella cartella bin: questo in genere funziona bene con i programmi in Java.

Un esempio è jPdf Tweak, un altro software per modificare i PDF. L’ho scaricato in questo percorso:

~/bin/jpdftweak-linux-x64-1.1

Poi però l’ho collegato nella directory principale, per evitare di dover modificare la mia configurazione:

cd ~/bin/
ln -s jpdftweak-linux-x64-1.1/jpdftweak.jar .

Ciò potrebbe non funzionare per alcuni software, provate caso per caso. Ecco come appare attualmente la mia directory per gli script e gli eseguibili:

Esempio di contenuto della directory predisposta
Esempio di contenuto della directory predisposta

Per quanto riguarda i programmi che hanno interfaccia grafica, può essere utile creare un’icona per il menu. Il lanciatore va inserito in:

~/.local/share/applications

Deve inoltre avere una estensione .desktop. Eccovi un esempio del contenuto del mio file jpdftweak.desktop:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=jPdf Tweak
Icon=/home/andrea/bin/jpdftweak-linux-x64-1.1/icons/icon256.png
Path=/home/andrea/bin/jpdftweak-linux-x64-1.1/
Exec=jpdftweak.jar

Ovviamente i campi vanno adattati al caso specifico.

Spero di aver fornito una spiegazione esauriente per creare una propria directory dove immagazzinare gli script e i file binari. Chiaramente queste istruzioni rispecchiano le mie personali preferenze, altri potrebbero usare metodi differenti.

Se avete dei suggerimenti a questo proposito o volete condividere la vostra organizzazione in questo ambito, lasciate un commento. 🙂

ShareLaTeX è diventato open source

LaTeX è una tecnologia libera e open source che consente di creare pubblicazioni di qualità professionale a qualsiasi livello, dai CV ai libri, passando per le tesi di laurea e le pubblicazioni scientifiche. In particolare, la stragrande maggioranza — probabilmente più del 90% — dei libri universitari di matematica e informatica vengono scritti usando questa tecnologia, che non ha eguali nel software commerciale, e permette di inserire formule matematiche in modo facile.

Trattandosi di un vero e proprio linguaggio di markup, che viene poi “compilato” per generare un documento finito (ad esempio un PDF), può risultare difficile ai principianti. Per questo esistono ottimi progetti come LyX, che permettono di usare un editor WYSIWYM (What you see is what you mean — quello che vedi è quello che intendi). Io personalmente ho usato quest’ultimo per la mia tesi di laurea, e il risultato è stato molto soddisfacente.

Per chi lavora in gruppo, è fondamentale riuscire a collaborare sullo stesso documento, anche contemporaneamente. Questo è il motivo per cui sono nati progetti come ShareLaTeX, che permettono di lavorare con lo stile a cui ci hanno abituato suite quali Google Documenti e simili: più persone scrivono insieme e l’anteprima del documento viene mostrata istantaneamente, tutto quanto dentro al browser.

Interfaccia di ShareLaTeX
Interfaccia di ShareLaTeX

Nella figura potete vedere un esempio di relazione di gruppo a cui ho lavorato quando studiavo al DTU. È notizia di circa un mese fa che tutta la parte principale dell’applicazione web è diventata open source, con un annuncio inviato via email a tutti gli iscritti:

We’re starting by open-sourcing the core parts of ShareLaTeX, including the editor, the project and document storage systems, and the backend LaTeX compiler that we use. This is only the beginning of our open-source journey though, and we will be open sourcing much more soon.

Ciò implica la possibilità per tutti quanti di poter leggere e scaricare il codice per conoscere, imparare, e perché no anche installarlo sul proprio server personale. 🙂 Molto interessanti sono anche le motivazioni:

As a small team, we’re constantly receiving feature requests that we’d love to implement but don’t have the time. We’ve also had a lot of offers from willing volunteers who we’ve had to turn away because we didn’t have a framework for people to contribute. We hope that by open-sourcing ShareLaTeX we can empower our brilliant community to help improve ShareLaTeX in the ways that you want, without having to wait for the two of us to work down our todo list.

A lot of people have asked to host ShareLaTeX internally due to company guidelines or data privacy concerns. We don’t have the resources to support licensed installs at the moment, but we also hate having to say no. With an open-source version of ShareLaTeX, now anyone who wants to run it locally can.

Il codice è disponibile su GitHub.

Come sempre, abbiamo un ulteriore esempio di come l’apertura del codice permetta possibilità impensabili con software proprietario. Complimenti pertanto al team di ShareLaTeX!

Vi segnalo inoltre un’interessante prodotto simile, sempre disponibile come applicazione web, ovvero writeLaTeX, ho utilizzato con soddisfazione anche questo. Voi come utilizzate gli editor collaborativi online? Che ne pensate della possibilità di lavorare in gruppo con LaTeX? 😉

Spotify rimuove il limite di 10 ore mensili e introduce la riproduzione casuale gratuita per cellulari

Spotify è uno dei maggiori servizi di streaming musicale legale e gratuito in circolazione, con in più la possibilità di pagare per alcune funzioni premium. Io personalmente ne sono diventato un avido utilizzatore fin da quando mi ero trasferito in Danimarca (dove è attivo da anni) per l’Erasmus, mentre in Italia è stato introdotto solamente a febbraio.

Spotify è utilizzabile gratuitamente — con saltuarie pubblicità — dal computer, inclusa la piattaforma Linux, ma fino a pochissimo tempo fa in tutti i paesi europei c’erano delle pesanti limitazioni per questo tipo di account: solo 10 ore al mese dopo i primi 6 mesi di utilizzo, e nessuna possibilità di usare l’app per cellulari.

Più fortunati gli utenti statunitensi: nessun tetto di ore e la possibilità di usare gratuitamente la modalità “radio” da mobile, meglio di nulla. Da mercoledì scorso, invece, è cambiato tutto! Spotify ha rimosso la barriera delle 10 ore mensili e ha attivato una nuova modalità di riproduzione casuale gratis per cellulari, in tutti i 55 paesi coperti dal servizio.

La nuova funzionalità gratuita è in evidenza sulla home page del servizio
La nuova funzionalità gratuita è in evidenza sulla home page del servizio

Anche se non ho trovato nessun annuncio ufficiale che confermasse la rimozione del limite delle 10 ore mensili, lo potete facilmente verificare e vi accorgerete che è così. Riguardo alla funzione di ascolto casuale per cellulari, il blog del servizio riporta:

Ecco quello che puoi fare con Spotify free sul tuo cellulare:

  • Puoi portare le tue playlist con te, ovunque.
  • Creare nuove playlist. Ascoltarle in modalità shuffle. Condividerle.
  • Cercare qualsiasi artista e ascoltare la sua raccolta in modalità shuffle
  • Scegliere una playlist già pronta che sia adatta al tuo stato d’animo.
  • Seguire artisti e amici.
  • Sintonizzarti sulla Spotify Radio.

Cosa vuol dire questo, in concreto? Vuol dire innanzitutto che non serve più usare una VPN per fare credere a Spotify che viviamo negli USA, con conseguente mancanza di certi brani di artisti italiani.

Significa anche non essere più costretti ad usare solo la radio sul cellulare in modo gratuito con un account americano. Vuol dire inoltre che possiamo scegliere una playlist dal telefono e farla partire, senza problemi.

Infine, la cosa che apprezzo di più del pulsante “riproduzione casuale”: se scegli l’album di un artista, lo riproduce tutto. L’unico “scotto” da pagare è l’inserimento di alcuni brani consigliati scelti da Spotify. Ma qui viene il bello!

I brani proposti infatti sono coerenti: quindi non ci toccherà più trovarci in situazioni imbarazzanti quali la riproduzione di canzoni di Miley Cyrus quando avevamo deciso di ascoltare Avril Lavigne. Ho idea che questa cosa metterà costantemente a rischio il GB mensile di navigazione Internet fornito dal mio operatore. 😀

Via Musica per tutti. Gratuita sul tuo cellulare. | Spotify Blog.

Più copie della stessa persona in una foto — Tutorial per Gimp e Hugin

Questo post è nato da un topic aperto su Gimp Italia da Francesco, uno degli utenti con un particolare interesse verso la fotografia, come potete vedere dal suo Flickr. Il topic aveva come oggetto un tutorial di MeetTheGimp per creare una foto della stessa scena in cui una persona compare in più copie.

Il tutorial nella sua forma originaria richiede che le foto vengano scattate con il cavalletto e che la fotocamera sia perfettamente immobile, per evitare disallineamenti. Il risultato di Francesco aveva alcuni problemi sotto questo punto di vista:

Ginny everywhere
Risultato ottenuto senza correzione dell’allineamento

Come lui stesso ha poi spiegato:

L’errore è stato quello di sopravvalutare la stabilità del cavalletto, in effetti la pressione del pulsante ha determinato dei disallineamenti.

Ho quindi proposto l’utilizzo di Hugin, un software normalmente usato per creare panorami, per effettuare l’allineamento preciso delle fotografie (anche dal punto di vista dell’esposizione) e poi Gimp per effettuarne l’unione vera e propria. La correzione dell’allineamento consente di lavorare persino con foto scattate “a mano libera”, a patto che il fotografo non si sposti troppo tra i vari scatti. Con ciò intendo che dovrebbe stare sempre in piedi nello stesso punto, per evitare problemi di prospettiva.

Francesco è stato così gentile da fornirmi le foto e quindi riporto qui la mia versione del tutorial. Il risultato ottenuto è mostrato qui di seguito. I colori sono diversi perché ho elaborato la foto finale in modo diverso.

Risultato finale del tutorial, con allineamento preciso delle foto
Risultato finale del tutorial, con allineamento preciso delle foto

Le istruzioni sono divise in due parti e richiedono che abbiate installato Hugin e Gimp.

Allineamento delle foto

Salvate in una cartella le foto che volete utilizzare, meglio se con un numero progressivo per evitare confusione. Nel seguito assumerò che la foto iniziale (numero 0) includa l’inquadratura corretta, mentre le altre foto saranno allineate in funzione della prima.

Aprite Hugin e controllate di avere l’interfaccia impostata nella modalità corretta. Per fare ciò, andate su Interfaccia » Avanzato. Fatto ciò, trascinate le fotografie nell’area bianca centrale della scheda Foto. Proseguite quindi aprendo la scheda Punti di controllo.

Vedrete visualizzate a sinistra e a destra la stessa immagine (numero 0). Sulla destra, dal menu a tendina, scegliete la foto numero 1.

La foto di riferimento (a sinistra) e la prima foto da allineare (a destra)
La foto di riferimento (a sinistra) e la prima foto da allineare (a destra)

A questo punto dovete cominciare a definire dei punti di controllo sull’immagine, vale a dire cliccare lo stesso punto in entrambe le foto. Facendo clic sulla foto a sinistra, aumenterà lo zoom. La visuale mostrerà un quadrato contenente un forte ingrandimento del punto che avete scelto, e vi permetterà di muoverlo cliccando di nuovo o trascinando il cursore.

Per il primo punto che cliccherete, dovrete fare clic anche a destra, in modo “approssimativo”. Ci penserà Hugin a trovare il punto giusto cercandolo vicino a dove avete cliccato!

Definizione del primo punto di controllo
Definizione del primo punto di controllo

Quando siete soddisfatti del risultato, cliccate col destro per tornare alla visuale delle due foto intere. Dovete quindi ripetere l’operazione, definendo altri punti di controllo: cliccate sulla foto numero 0 e rilasciate il clic quando vi siete posizionati nel punto desiderato. Nell’immagine a destra il punto verrà messo automaticamente.

Per ottenere dei buoni risultati seguite queste indicazioni:

  • scegliete solo spigoli o piccole macchie con caratteristiche chiare, non zone uniformi
  • non utilizzate punti dove in una o nell’altra foto c’è la persona che si sposta
  • predisponete come minimo 10-12 coppie di punti di controllo, mai meno di 8
  • molti punti migliorano il risultato, io ne ho usati 15-18 per ciascuna foto da unire
  • se un oggetto è stato leggermente spostato (es. il cuscino), non piazzateci sopra dei punti
  • se avete creato una coppia di punti errata, trovate il pulsante Cancella in basso

Una volta finito di lavorare sulla foto numero 1, vi troverete davanti a qualcosa di simile a questo:

Le coppie di punti di controllo usate per allineare l'immagine numero 1
Le coppie di punti di controllo usate per allineare l’immagine numero 1

A questo punto, dovete ripetere il processo aprendo l’immagine numero 2 a destra, e così via. Lasciate sempre la foto numero 0 a sinistra. Una volta finito, tornate alla scheda Foto e in basso troverete due pulsanti per ottimizzare il risultato:

Le funzioni di ottimizzazione
Le funzioni di ottimizzazione

Fate clic sul primo pulsante Calcola, confermando il risultato, e poi sul secondo, sempre applicando le modifiche proposte.

Ora è il momento di esportare le foto: aprite la scheda Assemblatore, impostate la proiezione Rettilineare e poi cliccate il pulsante Calcola dimensione ottimale. C’è da poi da selezionare la spunta soltanto per le immagini singole, come mostrato di seguito:

Opzioni per la finestra dell'assemblatore
Opzioni per la finestra dell’assemblatore

Infine premete il pulsante Assembla e il programma vi chiederà in quale cartella salvare il progetto e di conseguenza anche le immagini elaborate. Non resta altro che spostarsi su Gimp! 🙂

Fusione degli scatti

Hugin salva le immagini corrette in formato TIFF con trasparenza. Aprite quella di riferimento (la numero 0) con Gimp e poi fate File » Apri come livelli e scegliete l’immagine successiva. Ora invertite i colori del livello appena importato (cioè quello in alto) tramite il menu Colori » Inverti e sul pannello dei livelli impostate l’opacità al 50%. Otterrete una foto grigia in cui si vedono i bordi degli oggetti:

Evidenziazione delle differenze tra i due livelli
Evidenziazione delle differenze tra i due livelli

Questo trucco funziona in modo molto semplice: se io duplico una foto, e quindi la sovrappongo al 50% con l’inverso, ottengo un grigio completamente uniforme, in quanto i colori “si annullano” col proprio opposto.

Se però uso due foto abbastanza simili ma leggermente non allineate, ottengo un risultato grigio più o meno dappertutto, che però evidenzia i bordi e le differenze. Questa spiegazione è un po’ approssimativa però spero che renda l’idea. 😛

Una volta visualizzata la situazione, bisogna utilizzare lo strumento di spostamento per muovere il livello superiore fino a che i bordi sono più allineati possibile, con particolare attenzione alle aree vicine alla persona (altrove non è necessaria troppa precisione):

Allineamento dei bordi, con particolare attenzione alle aree vicine alla persona fotografata
Allineamento dei bordi, con particolare attenzione alle aree vicine alla persona fotografata

A questo punto è necessario usare una selezione abbastanza approssimativa intorno alla persona nella sua nuova posizione e anche agli oggetti che si sono mossi, come ad esempio il cuscino del divano che si è abbassato leggermente. Create questa selezione con lo strumento di selezione lazo, poi fate Ctrl+I per invertire la selezione e premete il tasto Canc:

Primo ritaglio approssimativo
Primo ritaglio approssimativo

Ora deselezionate (premendo Shift+Ctrl+A) e usate lo strumento gomma per “ammorbidire” il bordo. Dovrete scegliere un pennello sfumato e cancellare piano piano quanto basta per ottenere una fusione omogenea. Una volta rifinito il bordo con la gomma, otterrete qualcosa del genere:

Ritaglio rifinito e sfumato
Ritaglio rifinito e sfumato

Nel caso in cui ci siano delle sovrapposizioni tra le persone (in questo caso le ginocchia), selezionate la parte che deve rimanere visibile, aiutandovi con lo zoom:

Selezione delle zone di sovrapposizione
Selezione delle zone di sovrapposizione

Una volta selezionata la zona, ed eventualmente sfocata leggermente tramite Selezione » Sfumata (dipende da caso a caso), premete Canc e poi ripristinate l’opacità del livello superiore al 100%. Infine, invertite nuovamente i colori e otterrete il risultato della prima fusione:

Risultato della prima fusione
Risultato della prima fusione

Ora dovete ripetere il processo per le altre immagini, una alla volta. Alla fine, unite tutti i livelli selezionando Immagine » Appiattisci immagine e usate lo strumento taglierino per ritagliare le parti trasparenti di troppo sui bordi.

A questo punto avete finito! Poi volendo potete applicare tutti gli effetti che desiderate. Se siete curiosi, nel mio caso ho utilizzato G’MIC per accentuare un po’ i colori. Prima di tutto ho usato l’affilatura con Sharpen (inverse diffusion) e ho duplicato il livello. Sulla copia ho usato Local normalization, giocando un po’ coi parametri e infine ho ridotto l’opacità di quest’ultimo livello al 30%. Poi ne ho aumentato parecchio la saturazione e ho fuso il tutto.

Il risultato è quello che ho inserito all’inizio dell’articolo. Spero che questo tutorial mi abbia consentito di raccontarvi un utilizzo “poco convenzionale” di Hugin, fatemi sapere se avete applicato questo effetto e se vi è stato utile. Buon Gimp! 😉

Usare Sage per risparmiare sulla “bolletta” del telefonino

Se state pensando che Sage sia “solo” un software open source per fare matematica siete un pochino riduttivi. Certo, è un software — o meglio una distribuzione software con un’interfaccia Python unificata — progettato per dare del filo da torcere a strumenti commerciali come Mathematica e Matlab, tuttavia nulla vi dice che lo potete usare solo per studiare matematica o fare delle ricerche scientifiche.

Ho deciso di scrivere questo post tanto per mostrare un uso “simpatico” e insolito di questo software libero, ovvero quello di risparmiare nella scelta del piano telefonico. Di recente sono tornato dalla Danimarca, perciò era il momento di passare a TIM, dato che è l’unica ad avere offerte decenti per l’utilizzo che ne faccio io e più o meno l’80% delle persone tra i 16 e i 24 anni in Italia, in particolare parlo di TIM Young.

Il “problema” quando si sceglie un operatore è che molti, se non tutti, decidono (a parte le possibili opzioni) di usare il classico piano tariffario di base che costa un buon prezzo al minuto, ma ha lo scatto alla risposta e viene tariffato a scatti anticipati di 30 secondi. Tuttavia spesso esiste anche un piano senza scatto alla risposta e tariffato al secondo, anche se il prezzo al minuto è più alto. Nel caso di TIM i piani che ho valutato sono:

Piani base di TIM presi in considerazione
Piani base di TIM presi in considerazione

Ebbene, vi mostrerò come usare Sage per dimostrare che TIM ZeroScatti è più conveniente di TIM 12 e che gli operatori si fanno una valanga di soldi con lo scatto alla risposta.

Partiamo dal principio: per gli SMS si vede subito che costano meno, ma quello poco importa visto che TIM Young dà 1000 SMS al mese inclusi nel prezzo, quindi ci interessano le chiamate. La prima cosa da fare è definire due funzioni per rappresentare le tariffe. Sage ci permette di definire e rappresentare su un grafico funzioni completamente arbitrarie, ma non solo cose del tipo 3x^2+\sin(x), bensì vere e proprie funzioni programmate in Python (anzi, nel linguaggio esteso di Sage). Ecco il codice per i due piani:


def tim_12(s):
    s = floor(s)
    while (s % 30 != 0):
        s += 1
    return 18 + 12*(s/60)

def tim_zeroscatti(s):
    s = floor(s)
    return ceil(s*20/60)

La prima è più complicata perché oltre ad arrotondare i secondi a un numero intero, ovviamente, bisogna anche incrementarli fino ad un multiplo di 30, poi sommare lo scatto. A questo punto, è sufficiente usare le funzionalità grafiche di Sage per creare in pochi semplici comandi un grafico molto chiaro:


(
    plot(tim_12, (x, 0, 240), color='blue') +
    plot(tim_zeroscatti, (x, 0, 240), color='red')
).show(axes_labels=['secondi','costo (cent)'])

Risultato finale con in rosso la tariffa ZeroScatti
Risultato finale con in rosso la tariffa ZeroScatti

Il risultato finale è che possiamo vedere a colpo d’occhio com’è la situazione. Se anche voi come me siete persone che non stanno sempre 30 minuti al telefono ad ogni chiamata, ma anzi solitamente le vostre chiamate durano meno di 2 minuti e 40 secondi allora significa che vi conviene notevolmente usare un piano tariffario senza scatto.

Detto questo, ovviamente ci vogliono pochi minuti a cambiare il codice per adattarlo alle tariffe di altri operatori e fare diverse prove in modo da scegliere la migliore, l’importante è che prima di cambiare operatore conosciate tutti i piani tariffari che potete scegliere, perché al negozio solitamente evitano di dirveli adducendo scuse cretine (ho sentito di persona frasi come “ah sì ci sarebbe anche quello che dice, però sono 20 cent al minuto”). Se non volete installare subito Sage potete provare e modificare il mio codice direttamente online sul Sage Cell Server.

Buona portabilità!

OCR dei PDF con Linux [Wine]

L’Optical Character Recognition è il famoso processo per cui un software analizza una immagine di un testo (solitamente stampato) e tenta di effettuarne la conversione in un documento modificabile. Questo può essere sia un semplice file di testo che una pagina formattata, dipende dal software. Sotto piattaforma Linux esistono diversi strumenti molto validi per questo “lavoro”, a cui si aggiungono alcuni siti web che svolgono questo compito. Tuttavia, io desideravo in particolare effettuare una operazione che sta diventando sempre più popolare, ovvero il cosiddetto PDF sandwich. Ci possono essere due situazioni in cui potete trovarvi ad avere questa necessità:

  1. Possedete un PDF di pagine scansionate, magari a partire da immagini belle pulite e ottimizzate con ScanTailor.
  2. Avete un PDF di un articolo scientifico compilato con \LaTeX, quindi sembra che ci sia il “testo vero” ma in realtà se provate a fare copia incolla (o una ricerca) tutto quello che viene fuori sono caratteri apparentemente privi di senso. Un esempio è questo paper, tra quelli che devo leggere per la mia tesi.

In entrambi i casi, il vostro scopo è ottenere un documento il cui aspetto esteriore sia lo stesso (quindi mantenendo le immagini) ma che sia ricercabile. Ciò viene realizzato da software appositi che creano un livello trasparente con del “vero testo” usando le tecniche OCR. Il risultato non sempre è perfetto, ma sicuramente è molto meglio di avere documenti totalmente non ricercabili. Ci sono alcune guide e script in merito, nonché un live CD nato per fare solo questo.

Tuttavia sono tutte tecniche basate sullo stesso principio: usano Tesseract oppure Cuneiform per creare un file hocr e poi hocr2pdf per creare il risultato finale. Io ho provato personalmente numerosi tutorial e programmi ma il problema è sempre lo stesso: il testo sovraimposto è spesso di dimensioni sbagliate, un po’ a casaccio, e a volte è completamente spostato rispetto alle parole visualizzate. Insomma, il risultato è indegno.

La soluzione funzionante

Alla fine mi sono arreso e ho optato per un software per Windows tramite Wine, in particolare PDF-Xchange Viewer. È un programma che nella versione a pagamento fa un sacco di cose che a me non servono, ma la versione gratuita ha un motore OCR niente male che allinea il testo precisamente e riconosce le colonne abbastanza bene.

Finestra OCR del programma
Finestra OCR del programma

La finestra di riconoscimento è molto semplice da usare e consente di scegliere la lingua e il tipo di PDF. Se il vostro PDF contiene già immagini scegliete la prima voce, ovvero Preserva contenuto originale & aggiungi livello testo. Se invece è un PDF con “falso testo” l’altra opzione vi consente di convertirlo in immagini e poi effettuare il riconoscimento. Se lo fate, vi consiglio una risoluzione di 200, che va bene anche per la stampa. A mio avviso 300 è esagerato, e crea file molto grandi. Alla fine vi basta salvare il documento PDF.

Note di installazione

Il programma si installa molto facilmente con Wine e nelle preferenze è possibile impostarlo in italiano e disattivare le voci PRO dal menu. Per effettuare l’OCR in italiano vi servirà il pacchetto di lingua addizionale, che trovate in questa pagina. L’unico problema è che a volte, con alcune versioni di Wine e (pare) di più nei sistemi a 64bit, il programma crasha quando si salva (seppure di solito il file viene salvato lo stesso). Per questo io vi consiglio di provare a installarlo con PlayOnLinux, nel quale potete testare diverse versioni di Wine e trovare un setup che per voi sia perfetto, anche se comunque non è obbligatorio farlo.

Se il vostro sistema operativo è a 64bit, potete anche risparmiare tempo e scaricare questo file .polApp [62 MB] che ho creato esportandolo da PlayOnLinux. Potete importarlo dal menu del programma, alla voce Plugins » PlayOnLinux Vault » Avanti » Restore an application. Contiene il programma impostato in italiano, i dizionari europei per l’OCR e il tema wooden per un aspetto migliore. A me funziona senza crashare, avendo impostato una versione vecchia di Wine (1.5.28).

Se invece usate Linux a 32bit e sperimentate i crash, provate anche la versione portable, alcuni asseriscono che funzioni meglio. Fatemi sapere se vi funziona e che ne pensate del programma!