mercoledì 28 novembre 2012

RetroShare e la condivisione Friend-to-Friend

Oggi tornerò a parlare di condivisione files, dedicandomi a un programma dalla storia abbastanza curiosa: RetroShare. RetroShare è un programma open-source, disponibile per i principali sistemi operativi (Windows, Macintosh e diverse distribuzioni di Linux), che funziona come piattaforma decentralizzata per la comunicazione e lo scambio di files. Detta in altri termini, con RetroShare potete scambiare files, in modo simile a quanto avviene con eMule o Torrent, ma potete anche chattare con gli amici o costruire un forum di discussione. Il che non sarebbe niente di particolare, dato che si può fare in molti altri modi, anche più semplici; la particolarità sta nel fatto che tutte le comunicazioni sono criptate. Come si autodefinisce nel suo sito, RetroShare è progettato per offrire un Secure Social Network, cioè un ambiente in cui ciò che decidi di condividere coi tuoi amici sarà davvero condiviso soltanto coi tuoi amici e inaccessibile ad altri. Ma vediamo più in dettaglio.
La condivisione di files, in un sistema peer-to-peer (P2P), avviene in forma uguale tra un numero imprecisato di sconosciuti: io inserisco un file in una rete P2P, come eMule, e chiunque potrà raggiungere quel file e scaricarlo. Inoltre, se sono presenti più copie di uno stesso file, sarà possibile scaricarne frammenti da ogni copia disponibile, così da velocizzare l’operazione. E fin qui niente di nuovo, perché chiunque abbia mai usato eMule (o Torrent) ne conosce anche, almeno in forma approssimativa, il funzionamento. Questo sistema introduce vari problemi di sicurezza, perché è relativamente facile localizzare chi stia scaricando cosa: ogni utente è collegato in modo diretto alla fonte da cui scarica e questo rende possibile localizzare l’indirizzo IP dell’utente in questione.
RetroShare passa da un sistema peer-to-peer a un sistema friend-to-friend: i files non sono più condivisi indiscriminatamente con chiunque, ma solo con una ristretta cerchia di persone, ossia quelli che io ho scelto come “amici”. Nella sua forma più semplice, dunque, possono utilizzare RetroShare per creare una ristretta cerchia di amici e scambiare con loro il materiale che voglio, attraverso canali criptati: organizziamo la nostra piccola comunità, ci scambiamo files in modo sicuro e protetto e tanti saluti al resto del mondo.
Esiste però anche una forma più “sociale”, basata sugli “amici di amici”, che porta RetroShare molto più vicino a eMule e Torrent, pur mantenendo un sistema friend-to-friend. Per spiegare meglio questa forma sociale, vediamo come funziona la ricerca di un file. Quando cerco un file, per prima cosa RetroShare guarderà tra i miei amici: se uno di loro lo possiede e lo ha messo in condivisione, allora lo riceverò da lui e la ricerca è finita. Se non lo possiede, RetroShare guarderà tra tutti gli amici di quell'amico  poi guarderà tra gli amici degli amici dell’amico, e così via, fino a che il file non è stato trovato o, in caso di risultati negativi, fino a che la ricerca non si fermerà per essersi spinta oltre una certa distanza. Una volta localizzato il file, non sarà trasferito direttamente a me, ma mi arriverà “saltellando” da un amico all'altro  seguendo la catena di amici che porta da me al file: in questo modo, il “distributore” del file non vedrà il destinatario, ma solo il suo amico più diretto.
Esempio concreto. Pincopallino possiede il file che mi interessa, ma non è un mio amico diretto. Il file sarà quindi trasferito a Tizio, che è amico di Pincopallino; Tizio lo trasferirà al suo amico Caio; Caio lo trasferirà al suo amico Sempronio; Sempronio è un mio amico, così lo trasferirà direttamente a me. In tutto questo giro, io non vedrò mai Pincopallino e Pincopallino non vedrà mai me, proprio come non vedremo le varie tappe intermedie. Ogni scambio avverrà poi attraverso un tunnel criptato, che collega i due amici tra cui lo scambio si verifica. Come è facile da intuire, questo percorso è molto più lento rispetto al normale peer-to-peer, ma ha il vantaggio di essere molto più sicuro: sta dunque agli utenti decidere tra la velocità e la sicurezza.
Gli amici sono persone di cui ti fidi e sono stabiliti attraverso uno scambio di “certificati di identità”. Quando utilizziamo RetroShare per la prima volta, ci sarà richiesto di generare una nostra identità, che si accompagna a due chiavi, utilizzate per gestire le connessioni criptate: l’aggiunta di un amico avviene mandandogli il mio certificato, per identificarmi, e lui potrà accettarla inviandomi a sua volta il suo certificato. In questo modo, entrambi potremo verificare l’identità dell’altro. Una cosa da tenere presente è che i miei amici sapranno sempre chi sono, per cui è opportuno che gli amici siano davvero amici, cioè persone fidate: l’essenza di RetroShare è questa, uno scambio protetto tra persone fidate.
Quale sarebbe la curiosità della storia di RetroShare, cui accennavo all'inizio? RetroShare è in vita da diversi anni e finora è stato ignorato da tutti o quasi: il suo stesso sviluppo è ancora alla versione 0.5.4c, cioè ancora piuttosto lontano da una versione stabile e definitiva. Dall'inizio dell’anno in corso, però, pare che la gente si sia accorta della sua esistenza e il suo utilizzo è aumentato di parecchio nel giro di pochi mesi. Staremo a vedere i successivi sviluppi.

Rischi legali?

Come avviene per qualsiasi sistema di scambio protetto, anche RetroShare può essere utilizzato per scambiare materiale più o meno illegale. A questo proposito, è bene segnalare quanto avvenuto di recente ad Amburgo, dove una sentenza alquanto discutibile ha evidenziato i rischi legali che si possono correre, utilizzando questi programmi. Qui potete trovare la storia completa, coi link alle ingiunzioni del tribunale (in tedesco) e a dibattiti in merito alla legittimità dell’ingiunzione stessa (sempre in tedesco). Non essendo io un esperto di diritto, men che meno tedesco, lascerò ad altri il compito di valutare il tipo di impatto che potrà avere questa ingiunzione.

venerdì 23 novembre 2012

Chat di Facebook: bloccare le notifiche di lettura


Una delle nuove funzioni introdotte nella chat di Facebook, con le modifiche che si sono verificate quest’anno, è la notifica di avvenuta lettura, cioè quella simpatica scritta che compare nella parte bassa di una finestra della chat e ci avvisa che Tizio ha visualizzato il nostro messaggio alla tal ora. Una funzione più o meno apprezzata, a seconda dei punti di vista: c’è chi la considera comoda, perché permette di sapere se un messaggio sia stato letto o meno, c’è chi la considera invasiva della propria privacy, perché impedisce di ignorare persone importune, c’è chi semplicemente la ignora, e così via. qualunque sia la posizione a riguardo di questa funzione, un dato rimane comune: utilizzando solo le normali impostazioni di Facebook, non è possibile disattivarla. È possibile invece disattivarla, entro certi limiti e non senza effetti collaterali, utilizzando soluzioni alternative: vediamo quali.
Prima di tutto, uno sguardo a come funziona il meccanismo di notifica, cercando di utilizzare termini comprensibili anche a normali esseri umani e senza addentrarci troppo nelle complicazioni della struttura di una pagina web. Qualche passo su questa strada, però, lo dovremo compiere.
Quando noi “facciamo qualcosa” in una pagina web, come ad esempio cliccare un pulsante, passare il puntatore del mouse su una figura, oppure scrivere in un form, la pagina riceve un segnale che la avvisa della nostra azione. Questo segnale si chiama “evento”. Ogni azione genera un tipo di evento diverso: ad alcuni di questi eventi la pagina è programmata per rispondere in un determinato modo, mentre altri eventi saranno ignorati. Se clicchiamo un pulsante, ad esempio, di solito succederà qualcosa nella pagina (un video si avvia, si apre un pop-up, eseguiamo il login a un sito, eccetera), mentre solo in alcuni casi una immagine reagirà alla presenza del mouse (per esempio mostrando una didascalia). La risposta agli eventi, di solito, è controllata attraverso il JavaScript.
Come si applica tutto ciò al caso della chat di Facebook? Si applica in questo modo. Quando noi visualizziamo un nuovo messaggio, generiamo un evento. Questo evento è spedito al server, il quale provvederà a mostrare una notifica di avvenuta lettura nella chat del mittente. Se vogliamo impedire che la notifica sia inviata, dunque, ciò che dobbiamo fare è intercettare l’evento prima che sia spedito al server; in altri termini, dobbiamo bloccare la funzione che, nella nostra pagina, si attiva al nostro evento (lettura del messaggio) e lo spedisce al server.
Quando leggiamo un messaggio, la nostra pagina cerca di segnalare l’avvenuta lettura a quest’altra pagina:
facebook.com/ajax/mercury/change_read_status.php
Che cosa faccia questa pagina, potete capirlo da soli, leggendone il nome: “change_read_status”. Quando riceve una chiamata, la pagina cambia lo stato del messaggio da cui è partita la chiamata (ossia l’evento) e il messaggio passa da “non letto” a “letto”; di conseguenza, la persona che aveva spedito il messaggio riceverà a propria volta un avviso, che descrive l’avvenuto cambiamento, e nella parte bassa della sua chat una scritta lo avviserà che noi abbiamo letto il suo messaggio.
Siccome alla base di tutto c’è l’indirizzo che ho segnalato poco sopra, praticamente tutti i sistemi per bloccare le notifiche partono da quello. Una soluzione molto rudimentale consiste nel bloccare direttamente l’indirizzo facebook.com/ajax/mercury/change_read_status.php, per esempio inserendolo nella lista delle pagina da bloccare, se abbiamo installato un programma per bloccare le pubblicità, come AdBlock Plus e simili. Questa soluzione può funzionare con qualsiasi browser, a patto che ci sia un sistema per bloccare specifici indirizzi. Come effetto collaterale, però, tutti i nostri messaggi continueranno ad apparire come “non letti”, almeno fino a che non risponderemo; il che è normale, visto che abbiamo la pagina che ne cambia lo stato.
FB unseen è una estensione per Google Chrome, che fa praticamente la stessa cosa, ma in forma più elegante e con alcune opzioni supplementari, per cercare di limitare gli effetti collaterali. Quando però apriamo l’intera conversazione con una persona, i messaggi saranno segnati come “letti” e il mittente riceverà di conseguenza la notifica di lettura avvenuta. Per adesso. Lo sviluppatore di questa estensione ci ha lavorato più volte, anche per inseguire i cambiamenti che Facebook continua a fare, per non so quale sarà lo stato dell’estensione, quando la scaricherete: alcune falle potrebbero essere state tappate, altre si potrebbero essere aperte.
Per gli utenti di Firefox, che hanno installato l’estensione Greasemonkey, è disponibile un altro script, che fa sempre più o meno la stessa cosa: Facebook Stealth. In questo caso, a essere bloccati son sia gli eventi di avvenuta lettura, sia gli eventi di scrittura in corso. Almeno in teoria, perché poi rimane sempre l’eterna lotta degli sviluppatori contro Facebook, che cambia di continuo e rende difficile mantenere aggiornate tutte le funzioni di uno script. A ogni modo, finché funziona dovrebbe permettere di bloccare anche gli avvisi di “Tizio sta scrivendo”, tanto per abbondare.

venerdì 16 novembre 2012

Installare e utilizzare Node.js su Windows

Node.js è una nuova piattaforma per lo sviluppo di siti web e applicazioni web, utilizzando un solo linguaggio di programmazione sia per il lato cliente, ossia per sviluppare ciò che appare dentro le pagine e con cui gli utenti interagiranno, sia per il lato server, ossia per occuparsi delle comunicazioni col server (o della sua creazione), lo scambio di dati tra pagina e server, la creazione interattiva di contenuto, eccetera. In pratica, permette di utilizzare un unico linguaggio per entrambe le fasi, invece di appoggiarsi a PHP o ASP (o Java, o altri ancora) per gestire l’interazione col server. Rispetto ad approcci tradizionali, Node.js offre una maggiore efficienza, grazie a un sistema di comunicazione asincrono tra pagina e server. Dettagli ancora più “da nerd” li potete trovare, per esempio, su questa pagina in italiano, ma ve li risparmierò. In termini umani, possiamo dire che Node.js promette (e in parte mantiene, almeno finora) di realizzare pagine e applicazioni web più veloci e reattive, che non vi costringeranno ad attendere i comodi del server, per caricare qualcosa.
Oltre a questo, Node.js è anche uno strumento per eseguire JavaScript fuori da un browser: se avete mai sognato di lanciare programmi in JavaScript dalla linea di comando, ad esempio, Node.js vi permetterà di farlo. Costruito attorno al motore JavaScript di Google Chrome, che al momento è forse il più efficiente in circolazione, oltre a essere open-source, Node.js è a propria volta un progetto e programma open-source (e disponibile per i principali sistemi operativi), che cerca di portare il JavaScript fuori dal browser, per utilizzarlo... beh, più o meno per ciò che volete, anche se il suo primo obiettivo sono, per l’appunto, le applicazioni web costruite e gestite interamente in JavaScript. Una volta convinti che il JavaScript può essere indipendente dalla finestra del vostro browser, i limiti di quello che potrete farci saranno dati solo dalla vostra creatività (e competenza). Nel peggiore dei casi, potrete sempre utilizzare Node.js per giocherellare col JavaScript dalla linea di comando e usarlo come calcolatrice o altro. Anche questo è un uso lecito.
Node Package Manager (abbreviato in npm, cioè il comando utilizzato per avviarlo) è la fidata spalla di Node.js e serve ad aggiungere nuove funzioni, installando “pezzi” aggiuntivi (noti anche come pacchetti), occupandosi del loro aggiornamento e della loro reperibilità all'interno del computer, e così via. Se all'inizio vi servirà poco, ne scoprirete l’importanza non appena cercherete di sviluppare un programma più complesso del classico “Hello world”. Se non siete interessati a sviluppare applicazioni web, ma volete soltanto uno strumento per utilizzare il motore JavaScript di Google Chrome senza avete attorno Google Chrome, allora potete anche ignorare npm e vivere sereni lo stesso. Se invece lo utilizzerete, potete da subito imparare i sue comandi che vi serviranno più spesso: npm install nome-del-pacchetto –g (per installare globalmente un nuovo pacchetto; non se lo volete installare globalmente, togliere la –g) e npm link nome-del-pacchetto (per rendere accessibile il pacchetto da qualunque punto del vostro computer). Ne esistono molti altri, ma all'inizio vi basteranno questi due.
In precedenza, installare Node.js su un sistema operativo Windows poteva essere un procedimento piuttosto complicato, costringendo spesso gli utenti a passare attraverso Cygwin o analoghi simulatori di Linux, per portare a termine la missione. Fortunatamente, da qualche mese è però disponibile una soluzione molto più semplice, che in un colpo solo elimina tutte le complicazioni e ripristina una delle principali qualità di Windows, ossia una installazione a prova di incapace totale. Questa soluzione è l’installer per Windows.
Qualunque cosa troviate scritta su manuali e guide varie, a proposito dell’installazione su Windows di Node.js e npm, ignoratela pure: quasi sicuramente è stata scritta prima che arrivasse l’installer e vi spingerebbe verso soluzioni inutilmente complicate. Per installare Node.js, dunque, andate su http://nodejs.org/download/ e scaricate Windows Installer (al momento, il nome intero è node-v0.8.14-x86.msi, ma il numero della versione è destinato a cambiare in fretta, data la velocità con cui lo sviluppo è portato avanti): lanciate poi l’installazione con il solito doppio click e seguite le indicazioni sullo schermo. Alla fine, vi ritroverete con Node.js e npm installati a dovere e pronti a funzionare.
Una volta installato, nella lista programmi del menu start (quello che esce cliccando sul tasto start di Windows) dovreste trovare una nuova voce, ossia Node.js (x86), oppure (x64), a seconda del tipo di sistema che avete. La prima opzione che vi offre al suo interno è Node.js: cliccandola, aprirete una finestra che vi inserirà direttamente nel REPL di Node. Il REPL (Read-Eval-Print-Loop) è uno strumento per la programmazione interattiva, che permette di scrivere una operazione ed eseguirla immediatamente (premendo “Invio”, ovvio): un buon sistema per sperimentare subito qualcosa e “assaggiare” un nuovo linguaggio di programmazione, senza bisogno di scrivere programmi interi.
Come vedete dall'immagine sopra, non è molto affascinante, sul piano visivo: il REPL è uno spazio in cui voi scrivete il comando accanto alla >, per ricevere subito sotto il risultato dell’operazione, in un colore diverso. Se scegliete invece la seconda opzione, ossia Node.js command prompt, si aprirà una normale finestra della linea di comando: da qui potete eseguire programmi in JavaScript utilizzando Node, oppure potete entrare nel REPL. Per eseguire un programma, basta scrivere node nome_del_programma.js e premere “Invio”; per entrare nel REPL, scrivere solo node (e premete “Invio”).
Per uscire, infine, potete scrivere il comando .exit (il punto iniziale fa parte del comando): se avete aperto direttamente il REPL. La finestra si chiuderà; se invece siete partiti dalla linea di comando, ritornerete alla linea di comando.
Bene, adesso abbiamo installato Node.js e abbiamo verificato che tutto funziona: cosa possiamo farci? Svariate cose, se conosciamo il JavaScript, ma il suo uso principale è quello di strumento per realizzare applicazioni web in JavaScript, occupandosi sia del lato cliente (ossia quello che vedete sulla pagina e coi cui interagite normalmente), sia del lato server (ossia il motore che sta dietro a tutto, col quale non interagite direttamente). Un buon punto di partenza per le esplorazioni può essere la guida in italiano che potete trovare sul sito html.it e che, in quindici lezioni, vi accompagnerà in un giro turistico delle sue funzioni e del suo funzionamento. Nella seconda puntata della guida potete ignorare la parte relativa all'installazione di npm, perché quella l’avete già risolta utilizzando l’installer: per il resto, però, non dovrebbero esserci problemi.

domenica 11 novembre 2012

Sigil, gli errori più frequenti in un EPUB


Come abbiamo visto in più occasioni, Sigil presenta al suo interno un test di convalida per EPUB, il FlightCrew. Questo test è complementare (e non alternativo) al test di convalida ufficiale, lo EpubCheck, e proprio la volta scorsa abbiamo visto come e quando utilizzarli, in modo da ottenere da entrambi il miglior risultato: FlightCrew in fase di lavorazione, EpubCheck al termine dei lavori, appena prima di cominciare a distribuire il nostro e-book.
FlightCrew, tra le altre cose, nasce col proposito di correggere ciò che i suoi autori consideravano (e considerano tuttora) un difetto di EpubCheck, ossia la scarsa comprensibilità, agli occhi di un non iniziato, degli errori segnalati da EpubCheck. Il che, oggettivamente, è vero: EpubCheck utilizza spesso una terminologia che è solo leggermente più chiara rispetto a quella della Microsoft, quando si tratta di segnalare un errore. Inoltre, tende a farlo con un lessico e una sintassi ridotti all'osso  non molto lontani da “io Tarzan, tu Jane”. L’errore si capisce, se si ha esperienza nel settore, ma per chi si avventura per la prima volta nel magico mondo degli EPUB la comprensione può non essere così immediata.
FlightCrew propone dunque una forma più chiara e colloquiale nella segnalazione di errori, almeno per quanto sia possibile farlo; diviene così più semplice capire il messaggio di errore, ma ciò non significa automaticamente che si riuscirà anche a capire quale sia l’errore, dove sia e come poterlo correggerlo, soprattutto se la nostra conoscenza dell’inglese e della struttura interna di un EPUB è approssimativa (o assente). Vediamo dunque una breve lista degli errori più comuni, che ci saranno segnalati dal test di convalida FlightCrew all'interno di Sigil. Assieme all'errore, troverete anche due parole su come correggerlo.
Premessa generale, la forma in cui ci sono presentati gli errori da Sigil.  Ogni errore ci apparirà nella finestra “Risultati della validazione” con una struttura tripartita, cioè divisa in tre riquadri.
  1. File contiene il nome del file in cui l’errore è stato trovato.
  2. Riga contiene il numero della riga in cui l’errore è stato trovato, all'interno del file segnalato prima. Il numero corrisponde a quello che ci appare utilizzando la visuale “codice”, nel riquadro centrale di Sigil; in questa visuale, ogni riga di codice sarà numerata.
  3. Messaggio, infine, è una descrizione dell’errore, espressa in termini abbastanza comprensibili.

Detto questo, passiamo ai messaggi di errore più comuni.

This resource is present in the OPF <manifest>, but it's not reachable (it's unused).
Errore estremamente comune, in fase di lavorazione. Significa che il nostro EPUB contiene un file che noi non abbiamo usato, per esempio una immagine che all'inizio avevamo inserito in una pagina, ma poi abbiamo deciso di togliere: se abbiamo solo cancellato il riferimento all'interno della pagina, ma non abbiamo cancellato l’immagine dalla cartella “Images”, Sigil ci segnalerà che quel file non è usato nel nostro documento. In questi casi, possiamo cancellare il file non utilizzato, se davvero non ci serve, oppure dovremo provvedere a inserire da qualche parte nel nostro e-book un riferimento a esso, se intendiamo conservarlo.

This resource is reachable but not present in the OPF <manifest>. "Reachable" means that a reference of some kind that points to this resource exists in the epub.
È il gemello dell’errore precedente e si riferisce al problema opposto: nel nostro e-book è presente il riferimento a un qualche file, che però non esiste. Probabilmente, in questo caso, abbiamo cancellato il file, ma ci siamo dimenticati di cancellare anche i riferimenti a quel file, all'interno di una qualche pagina del nostro EPUB. Si può correggere reinserendo il file latitante, oppure cancellando anche il riferimento a quel file.

ID value 'heading_id_17' is not unique.
Il termine colorato in rosso cambierà a seconda dei casi. L’errore commesso stavolta è l’utilizzo di uno stesso nome, per due o più ID. Lo ID è una specie di targa, che possiamo applicare a un tag, per poterci poi riferire a esso in modo più semplice e diretto in un altro punto del codice; come ogni targa, è necessario che lo ID sia unico. Se assegniamo a due elementi una stessa targa, abbiamo un errore. In questo caso, basterà assegnare uno ID diverso a ogni elemento.

The "profile" attribute is not an allowed attribute of the <package> element.
Anche in questo caso, i nomi colorati in rosso saranno diversi a seconda dei casi. Questa classe di errori ci appare quando abbiamo assegnato a un particolare elemento (il secondo termine in rosso) un attributo (il primo termine in rosso) che non era permesso utilizzare in quel particolare punto. Molti tag possono infatti essere modificati, assegnando loro uno o più attributi, ma non tutti questi attributi sono accettati in uno EPUB: il colore, ad esempio, è bene attribuirlo usando il foglio di stile CSS, invece di appiccicarlo come elemento di un tag. In questo caso, dovremo eliminare l’attributo “illegale”.

attribute 'size' is not declared for element 'font'.
Errore gemello del precedente, i termini colorati in rosso sono quelli che possono cambiare a seconda dei casi. Stavolta abbiamo dimenticato di specificare un attributo (il primo termine in rosso) per un particolare elemento (il secondo termine in rosso), che richiedeva invece una precisazione sul modo in cui utilizzarlo. Per correggere, dovremo aggiungere l’attributo richiesto.

The <language> element is missing.
Come al solito il termine in rosso può cambiare a seconda dei casi. Stavolta l’errore si trova nel file content.opf e si riferisce a un metadato che avremo dovuto inserire, ma non abbiamo inserito: per esempio la lingua in cui è scritto il nostro EPUB (italiano, inglese, eccetera), oppure il titolo del nostro e-book, l’autore, eccetera. Possiamo correggerlo con l’editor dei metadati, aggiungendo gli attributi richiesti.

The <item> element's "media-type" attribute has value "font/truetype", but the file's media type is "application/x-font-ttf".
Questo  non è strettamente un errore, ma una richiesta di stile, o una proposta che non potrete rifiutare, per quanto riguarda il tipo di font che avete utilizzato. In materia di font, al momento non esiste uno standard ufficiale, per gli EPUB, ma di fatto il formato “application/x-font-ttf” agisce come se fosse uno standard; se e quando avremo una standardizzazione di questo elemento, è dunque altamente probabile che sarà scelto questo, dato che in ambito industriale ne fa già le veci. Di conseguenza, Sigil e FlightCrew vi invitano fin da adesso ad adattarvi al sistema.

element 'svg' is not allowed for content model.
A seguire, ci sarà poi una lista di tag abbastanza lunga, che ho tagliato per ragioni di spazio. In questo caso, avete inserito nel vostro EPUB un elemento SVG, che di solito consiste in una immagine vettoriale: una immagine, cioè, che si può allargare o restringere per adattarsi alla dimensione dello schermo, in teoria senza perdita di qualità. Ottima scelta per un e-book, soprattutto nel caso di un fumetto, ma con un problema: non potete utilizzare un elemento <svg> direttamente all'interno del tag <body> di un documento. O meglio, potete, ma vi sarà segnalato come errore, perché non è ammesso in questa posizione. Per risolvere, basterà racchiudere il tag <svg> in un altro elemento, come ad esempio <div>: in questo modo non sarà più attaccato direttamente a <body>, ma sarà diventato un discendente di <div>, e n questa forma non vi darà più problemi.

martedì 6 novembre 2012

EpubCheck e FlightCrew: come usarli


A piccoli passi e al ritmo di un nuovo aggiornamento ogni X mesi, EpubCheck, il test di convalida ufficiale per e-books in formato EPUB si avvicina alla versione stabile e (si spera) definitiva, per il formato dello EPUB 3. A più di un anno dalla presentazione del nuovo formato, ma sono dettagli secondari. Nel frattempo, dopo cinque versioni beta (cioè utilizzabili, ma non esenti da problemi di stabilità e altro, secondo la classificazione tradizionale dei programmi) siamo giunti alla RC1, ossia “release candidate 1”, la prima delle versioni quasi definitive: tradotto dal nerdese, significa che è quasi fatta, tutto dovrebbe funzionare bene, ma è possibile che ci siano ancora errori qui e là. Lo potete scaricare dal sito ufficiale del progetto, dove troverete le librerie Java da utilizzare direttamente (da linea di comando) o inserire in un vostro programma; in alternativa, se preferite una interfaccia grafica, potete scaricarvi il kit che ho preparato io e che comprende, oltre a tutte le librerie dello EpubCheck, anche una semplice interfaccia per eseguire il test in modo più abituale.
Sempre in questi giorni è uscita anche la nuova versione di Sigil, di cui ho già parlato altrove, che a propria volta contiene un altro strumento per testare gli EPUB, ossia il FlightCrew: per intenderci, è quella V verde che compare all'estremità destra nella prima riga delle barra degli strumenti (e che non sta per "Vendetta"). Come il suo fratello EpubCheck, anche FlightCrew serve a eseguire una scansione del file EPUB, in cerca di errori; per “errore”, è bene precisare, si intende una qualunque deviazione dallo standard del formato EPUB, così come è specificato dallo IDPF (la commissione internazionale che se ne occupa), ma anche qualsiasi deviazione dallo standard degli altri formati inclusi in uno EPUB, tipo lo XHTML o il CSS. Dal punto di vista di un utente normale, diciamo che verifica la presenza di “errori tecnici” nel codice delle pagine che abbiamo prodotto o che, più spesso, qualche programma ha generato in automatico per noi. La stessa cosa che fa EpubCheck, insomma.
Quale sarebbe dunque la differenza tra i due test? La prima differenza è il linguaggio di programmazione con cui sono stati realizzati: EpubCheck è in Java, FlightCrew è in C++. Questo dato può bastare a scatenare guerre di religione tra i sostenitori delle due fazioni, ma dal punto di vista di chi li utilizza la differenza è poca: chi trae piacere dai test di velocità, ad esempio, vi potrà dire che FlightCrew tende a essere leggermente più veloce di EpubCheck, ma la differenza si misura in frazioni di secondo e non credo che cambierà la vita di un utente normale (EpubCheck è lento al primo avvio, come qualsiasi altro programma in Java, ma una volta avviato non ha più problemi di velocità percepibili a occhio nudo).
Una differenza più sensata, invece, è il tipo di test che eseguono su un e-book: in linea generale, nel caso di FlightCrew c’è una maggiore attenzione alla raggiungibilità delle risorse, in un file EPUB, il che significa che, in aggiunta al normale test di convalida, si impegnerà in modo più approfondito per verificare che tutti gli elementi all'interno del blocco EPUB siano indicati correttamente nella lista, siano raggiungibili da qualche parte del file, siano disegnati in modo da rispettare le norme del loro formato di appartenenza, eccetera. Se avete aggiunto un file al vostro EPUB, come ad esempio una immagine, allora dovrete anche utilizzarlo in un qualche punto dello e-book; se lo avete aggiunto, ma poi non lo avete usato, allora ve lo segnalerà come errore. Allo stesso modo, se avete specificato la presenza di un file, ma poi vi siete dimenticati di inserirlo nello EPUB, vi sarà segnalato come errore. Inoltre, gli errori segnalati da FlightCrew cercano di essere un poco più comprensibili anche agli occhi di un profano, ossia di un essere umano non iniziato ai misteri dei vari formati di file coinvolti. Non sempre ci riescono, ma questo è un altro paio di maniche.
EpubCheck, invece, presta maggiore attenzione agli elementi di fallback, ossia agli elementi alternativi, da utilizzare se un particolare lettore non supporta un elemento scelto da noi; particolare che diventa molto importante, col formato EPUB 3 e l’aggiunta di file audio o video. Se un lettore non è in grado di riprodurre il video che abbiamo inserito nel nostro e-book, dovrà poter trovare una soluzione alternativa (anche solo una scritta del tipo “spiacente, ma il tuo dispositivo non supporta questo elemento”), ed è a questo che bada soprattutto EpubCheck (oltre ai test di routine). Come già detto, poi, ha anche la fama di essere particolarmente criptico nella segnalazione degli errori.
Altra differenza da tenere presente è che, almeno per adesso, FlightCrew non supporta il formato EPUB3, proprio come non lo supporta Sigil fino alla versione 0.6.0 inclusa: dopotutto, è lo stesso gruppo a occuparsi di entrambi. Se volete dunque testare la correttezza di un EPUB in quel formato, potete soltanto utilizzare EpubCheck.
Quale test utilizzare , dunque? La risposta corretta è entrambi. Per la sua struttura FlightCrew è molto utile in fase di lavorazione, come ci suggerisce anche la sua presenza all'interno di Sigil: è in questa fase che è più facile togliere o aggiungere files, senza segnalarli correttamente nella struttura di uno EPUB, ed è dunque in questa fase che FlightCrew raggiunge la sua massima utilità, permettendoci di intervenire subito e correggere gli errori mentre ancora stiamo lavorando. Una volta finito e rifinito il nostro EPUB, allora entra in gioco EpubCheck, soprattutto se abbiamo in programma di sottoporre il nostro e-book a una casa editrice: EpubCheck è il test di riferimento per il mondo editoriale e il vostro e-book deve averlo superato, per sperare nella pubblicazione. Dovrà anche essere un buon libro come contenuti, ovvio, ma questo non dipende dai test di convalida.
In sintesi, FlightCrew per la lavorazione, EpubCheck per la conclusione: così otterrete il meglio da entrambi.
Come nota finale, il superamento del test di convalida non assicura automaticamente che il vostro e-book funzionerà bene su qualsiasi tipo di lettore, soprattutto perché molti dispositivi di lettura hanno un approccio sbarazzino al rispetto degli standard. È meglio verificare sul campo se il lettore X è in grado di visualizzare correttamente il vostro EPUB. Inoltre, un e-book può essere perfetto sul piano formale, rispettando tutte le specifiche dello EPUB, e poi fare comunque schifo, se la grafica è più antiestetica di Bossi in canotta, ma anche per questo non esistono ancora test di convalida, se non l’occhio umano. La convalida è una condizione necessaria, ma non sufficiente a produrre un buon e-book: al resto dovrete pensare voi.

venerdì 2 novembre 2012

Sigil 0.6.0, le novità della versione

È uscita da una manciata di giorni la nuova versione di Sigil, la versione 0.6.0, e come era lecito aspettarsi, visto anche il tempo trascorso dalla versione 0.5, le novità sono parecchie, grafiche ma non solo. Procediamo dunque con una breve presentazione.
Prima di tutto, una novità non è stata introdotta, ossia il supporto per gli EPUB 3: se volete inserire file audio o video in un e-book, dunque, dovrete arrangiarvi “a mano”, senza alcun supporto da Sigil. Potrebbe anzi ostacolarvi, se non vi siete ricordati di disattivare prima il correttore automatico dello HTML, ossia la funzione Tidy, ma di questa parleremo più avanti. Sono però stati aggiunti alcuni comandi di cui si sentiva il bisogno, come quello per aggiungere link senza bisogno di andare a manipolare direttamente il codice, ed è già un bel passo avanti; la versione 0.7, magari, si occuperà del resto, tra un annetto circa.
Le novità, allora. Scarichiamo Sigil dal suo sito ufficiale, nella versione adatta al nostro sistema operativo (Windows, Linux, Macintosh), installiamolo e avviamolo; questa è la schermata che ci si presenterà:

Bella? Brutta? I giudizi estetici li lascio ad altri, ma la barra in alto (la barra degli strumenti) è parecchio cambiata, rispetto a quella che conoscevamo noi: cambiata nelle icone, ma anche nei comandi. Il resto della finestra, invece, sembra più o meno invariato, ma aprendo i vari menu troveremo altre sorprese. Partiamo dalla barra degli strumenti (ossia le due file di icone che troviamo in alto): passando il mouse su una icone, ci appariranno il suo nome e una breve descrizione in italiano, il che dovrebbe facilitarci il lavoro, ma per alcune di esse saranno necessarie due parole di spiegazione.
Le prime quattro icone, partendo dall'alto a sinistra, rappresentano altrettante  voci del menu “File” e non presentano difficoltà: Nuovo, Apri, Aggiungi e Salva. Aggiungi ci permette di inserire un file all'interno dello EPUB su cui stiamo lavorando e la corrispondente voce del menu (File -> Aggiungi) ci permette di selezionare il tipo di file (esistente, oppure vuoto), ma per il resto fa proprio ciò che ci si aspetta da lei, cioè aggiungere un nuovo file nella cartella selezionata.
Le icone successive sono in gran parte prese dal menu “Modifica” e non presentano alcuna difficoltà nella loro interpretazione: sono peraltro le stesse a cui siamo abituati e che abbiamo trovato anche nelle versioni precedenti di Sigil. L’icona Dividi al Cursore, che nell'immagine si trova esattamente sotto al menu “Aiuto”, è una novità sul piano grafico e corrisponde esattamente alla funzione che prima era rappresentata da un Ch: cliccandola, divideremo il file nel punto preciso in cui si trova il cursore. A seguire, troviamo prima l’icona per aggiungere immagini all'interno del testo e poi tre icone nuove, che rappresentano altrettante nuove funzioni introdotte in questa versione. Vediamole.
L’icona a forma di lettera omega maiuscola, Inserisci Carattere Speciale, ci permette di inserire nel nostro testo alcuni caratteri che non compaiono su tutte le tastiere, senza bisogno di scriverli con un qualche elaboratore di testo (tipo Word o Writer) e poi copiarli dove ci servono. Sistemiamo il cursore nel punto in cui vogliamo inserire un carattere particolare, poi clicchiamo questa icona e selezioniamo il carattere. L’icona a forma di ancora ci serve se vogliamo inserire link interni al nostro EPUB: cliccandola, possiamo assegnare una particolare “etichetta” a un punto del testo (il cosiddetto ID), a cui poi dirigeremo il nostro link. L’icona a forma di catena, infine, serve appunto a inserire un link nel testo: selezioniamo la parola (o le parole) che dovranno avere il link, poi clicchiamo questa icona e impostiamo il punto di arrivo. Se vogliamo un link interno, possiamo scegliere la destinazione dalla sezione “Obiettivi nel libro”; se vogliamo un link esterno, ossia a qualche sito internet, allora basterà copiare l’indirizzo del sito nello spazio “Obiettivo”, in fondo alla finestra.
Le ultime tre icone della prima riga, infine, sono un’altra novità, o almeno un cambiamento. La prima, con un libro e una i, è l’Editor dei Metadati, cioè quel comando che prima appariva soltanto nel menu (e che continuiamo a trovare nel menu, spostato adesso tra gli “Strumenti”): ci serve per specificare nome dell’autore, titolo, data di pubblicazione, ISBN e quant'altro per il nostro libro. La seconda icona non è più il correttore automatico dello HTML (che esiste ancora, ma è nascosto meglio), ma è un correttore ortografico, come quello fornito da un qualunque elaboratore di testi; non pare funzionare granché per l’italiano, almeno per adesso, ma è un altro paio di maniche. La terza icona, infine, è il solito test di convalida dello EPUB, utilizzando FlightCrew (test non ufficiale): utile per spulciare il nostro “prodotto”, alla ricerca di errori di formattazione e altro.
Scendendo alla seconda riga, troviamo una sfilza di icone che rappresentano varie funzioni di formattazione, impaginazione e altro: si occupano dell’aspetto grafico del testo, principalmente, e in linea di massima non dovrebbero presentare problemi. Da ricordare che la serie di icone con la H, da h1 a h6, servono a ordinare l’importanza dei vari titoli, dal più al meno importante: h1 va utilizzato per il titolo del libro, h2 per i titoli dei capitoli o, se ci sono, per le suddivisioni in “libro primo”, “libro secondo”, eccetera, e così via, dal titolo più importante al titolo meno importante.
Passando ai menu in alto, ci sono alcune cose da segnalare.
Nel menu Modifica troviamo la voce Impostazioni (che possiamo aprire premendo il tasto F5, per fare prima), a cui dobbiamo prestare molta attenzione. Ci aprirà infatti una finestra,dove possiamo modificare diverse opzioni di Sigil, e alcune di esse sono discretamente importanti. La sezione Aspetto riguarda solo il modo in cui il testo ci apparirà ed è quindi trascurabile, se non siamo interessati a cambiare il tipo di carattere, i colori, eccetera. Non è invece da trascurare la sezione Pulisci il Sorgente: è qui che si annida Tidy, scacciato dalla barra degli strumenti, ed è qui che possiamo decidere se attivarlo o disattivarlo. Se vogliamo realizzare un e-book con file audio o video, è meglio disattivarlo prima di cominciare il lavoro.
Scorciatoie da Tastiera è una lista di tutte le combinazioni di tasti che potete usare, per attivare più in fretta certe funzioni senza bisogno di ricorrere al mouse: a me piacciono molto, ma ad altri utenti potrebbero non interessare. Lingua, ovviamente, vi permette di selezionare la lingua da usare per l’interfaccia di Sigil, mentre Dizionari Ortografici vi permette di selezionare la lingua da usare per il correttore grammaticale: l’italiano non è tra le lingue di base, per cui dovrete eventualmente aggiungere un nuovo dizionario, se vi interessa.
Altre novità ce le offre il menu Strumenti. Alla voce Tavola dei Contenuti - Toc possiamo infatti generare due tipi diversi di indice: una tavola dei contenuti classica, come abbiamo fatto con le versioni precedenti di Sigil, oppure un indice in formato HTML, da aggiungere al nostro libro. La voce successiva, Indice, ne è in parte un duplicato, ma con differenze: la creazione di un TOC è automatica, in base alla nostra scelta dei titoli (i pulsanti da h1 a h6), mentre la creazione di un indice ci permette maggiori possibilità di modifica e personalizzazione.
Convalida i Fogli di Stile con W3C ci permette di sottoporre a un test di convalida anche il fogli di stile del nostro e-book (ossia il file CSS), utilizzando un servizio online: non è indispensabile, ma può essere utile se il vostro EPUB ha problemi di visualizzazione e non riuscite a capire quali siano. Per il resto, non dovrebbero esserci voci dal significato troppo astruso o alieno.
Avviso finale. il test di convalida utilizzato da Sigil va benissimo in fase di lavorazione, ma non basta se avete in progetto di pubblicare il vostro libro, soprattutto se state pensando di spedirlo a un editore o a un servizio di pubblicazione “in proprio”. Il test di convalida dal valore ufficiale, in questi casi, è lo EpubCheck, gestito dallo stesso comitato internazionale che si occupa del formato EPUB: se superate quello, non avrete problemi (in teoria, poi resta sempre l’incognita dei lettori). Anche lo EpubCheck per il formato EPUB 3 sta avendo una fase di gestazione piuttosto lunga, ma di questa parleremo in un’altra occasione.