Hecl
Transcript
Hecl
���������������������������� ���������������������� ��������������������������������������������������������������������������������������������������� ������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������������������� �������������������������������������������������� ��������������������������������������������������������������������������������������� ���������������������������������������������������������������������������� ������������������������������������������������������������������������������ ����������� ��������������� ����������� ��������������������� ������� �������������������������������������������� ����������� ������� �� ������� ������ ������������ ���� ��������� ����� ����������� ��� ������ ��� ���������������������������������������������������������������������� �������������������������������������������������������������������������� �������������������������������������������������� ����������������������������������������������������������������������������� ������������������������������������������������������������������������������� ����������������������� ������������������������������������������������������������������������������ ������������������������������������������������������������ ��������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������� ���������������������������������������������������������������� ���� ��� ������� ���������� �������������� ����� ����������� ���������� ���� ��� ������ ����������� ���� ��������� ���������� ������ ���� �������� �� �������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������� ������������������������������������������������������������ �������������������������������������������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������� �������� ������� ������� ������������ ���������� ���� ���� ����� ����������� ������ ���������� ���� �������� ��� ���� �� ������ ��������� ����� �� ���������� ����������� ������� ������������������������������� �� ����� ����������������������� ������� ���� ��� ��������� ��� ���������� ��� ������������ ���� ����� ���������������������������������������������������� www.infomedia.it BIMESTRALE - ANNO 12 - N.65 DIRETTORE RESPONSABILE MARIALETIZIA MARI ([email protected]) DIREZIONE EDITORIALE NATALE FINO ([email protected]) COLLABORATORI DAVID N. WELTON ANDREW MIN FA B I O R A M A C C I A N I GRUPPO EDITORIALE INFOMEDIA SRL V I A V A L D E R A P. 1 1 6 5 6 0 3 8 PO N S A C C O ( P I ) I T A L I A TE L 0 5 8 7 7 3 6 4 6 0 F A X 0587732232 E-MAIL [email protected] S I T O W E B W W W. I N F O M E D I A . I T DIREZIONE NATALE FINO ([email protected]) TE C H N I C A L B O O K L I S A VA N N I ([email protected]) MARKETING & ADVERTISING SEGRETERIA: 0587736441 M A R KE T I N G @ I N F O M E D I A . I T AMMINISTRAZIONE SARA MATTEI ([email protected]) SEGRETERIA ENRICA NASSI ([email protected]) GRAFICA PA O L O F R A N C O ([email protected]) STAMPA T I P O L I T O G R A F I A PE T R U Z Z I CITTÀ DI CASTELLO (PG) UFFICIO ABBONAMENTI TE L 0 5 8 7 7 3 6 4 6 0 FA X 0 5 8 7 7 3 2 2 3 2 [email protected] W W W. I N F O M E D I A . I T EDITORIALE Infomedia Green: informazione e sostenibilità Dal prossimo mese di Dicembre parte la nostra campagna contro lo spreco della carta e la deforestazione selvaggia delle foreste primarie. Abbiamo deciso di dare impulso a questa iniziativa prendendo atto della realtà diffusa in cui la carta è considerata una risorsa illimitata, a buon mercato e tuttora utilizzata per qualsiasi tipo di pubblicazione (compresi miliardi di volantini “usa e getta”, come quelli che lastricano le zone fieristiche all’ora di chiusura). Dati alla mano, ogni anno in Italia vengono sprecati solo … 50 miliardi di fogli di carta! Ossia 2.000.000 di alberi. Dal 1995 al 2020 la produzione internazionale della cellulosa e della carta per l’editoria sarà cresciuta del 77%, e circa il 75% del legname importato da Russia e Indonesia, e quindi della carta utilizzata per la stampa, proviene da alberi abbattuti illegalmente nelle foreste primarie. Tutti gli anelli che compongono la catena editoriale sono, a vario titolo, responsabili del consumo della carta ed ognuno, con un po’ di buona volontà, può (e prima o poi dovrà) correggere le storture di un processo editoriale disattento alla sostenibilità. Un esempio è la quantità esorbitante di carta utilizzata per gli atti dei parlamenti (nazionali ed europeo), magari per minute e testi di validità più che effimera; ulteriore esempio è il numero di copie tirate dai quotidiani, dai settimanali e dai periodici che è di gran lunga superiore (per via dei contributi statali) alle copie effettivamente vendute: in sintesi, si sa già in partenza che gran parte di quelle copie è destinata al macero. Punto. Questo scenario distorto, era tarato per una società in cui l’informazione veniva veicolata quasi esclusivamente su carta, ma oggigiorno non è più così: tra televisione, radio, Internet, telefoni cellulari e dispositivi vari, il cartaceo non è più “il principale supporto” di veicolazione. Invece attraversando i capannoni industriali capolinea della distribuzione editoriale, si nota che sono stracolmi di torri di rifiuti editoriali cartacei. Migliaia di tonnellate di prodotti destinati al macero ogni anno. Il progetto Infomedia Green è ambizioso e innovativo, per realizzarlo abbiamo necessità della collaborazione e della buona volontà di tutti i nostri lettori: perché ognuno, dalla sua scrivania, può iniziare a far molto per una migliore sostenibilità. Per mettere in atto questo progetto promuoveremo degli incentivi per promuovere un consumo più critico, prendendo atto dell’inevitabile sorpasso del digitale sul cartaceo: la qualità dei nostri contenuti resta immutata, ed è comunque possibile stampare i PDF degli articoli che più interessano. Non prevediamo l’eliminazione totale della stampa su carta, ma opteremo per una soluzione “on demand”: l’utente che non vuol rinunciare alla sua copia cartacea completa potrà comunque acquistarla in ogni momento, limitando al massimo lo spreco di carta. È una questione di sensibilità e anche di comodità, visto che già oggi trascorriamo più tempo a leggere informazioni tecniche dal video e sempre meno su carta. Natale Fino Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 3 SOMMARIO LOGIN n.65 - Luglio/Agosto/Settembre/ Ottobre 2007 Speciale Hecl un linguaggio di scripting per cellulari Cos’è Hecl e perché lo sto scrivendo di David N. Welton 8 Come funziona Hecl di David N. Welton 10 Creare una semplice applicazione con Hecl di David N. Welton 19 Solutions u InVetrina Dal driver al window manager: 49 installare Compiz Fusion di Andrew Min 26 Per contattare la Redazione di Login 43 Gruppo Editoriale Infomedia S.r.l. Via Valdera P. 116 - 56038 Ponsacco (PI) Tel. 0587/736460 (r.a.) - Fax 0587/732232 scrivete a: Tips & Tricks per GNU/Linux di Andrew Min e-mail: [email protected] - http://www.infomedia.it/Login I listati che corredano gli articoli sono liberamente scaricabili dagli indirizzi: http://www.infomedia.it/Riviste/Login Ftp://ftp.infomedia.it/pub/Login/listati Cutting edge iTV Format per la Televisione Digitale Terrestre di Fabio Ramacciani 33 Login Building The Information Highway è una rivista del Gruppo Editoriale Infomedia S.r.l. Direzione e amministrazione Via Valdera P. 116 - Ponsacco (PI) Registrazione n.18 del 25/11/99 - Contenuto pubblicitario inferiore al 45% speciale Hecl SPECIALE Cos’è Hecl e perché lo sto scrivendo Ü di David N. Welton Vi siete mai chiesti quanto sia piacevole creare un proprio linguaggio di programmazione? Questi articoli trattano della progettazione e, soprattutto, dell’implementazione del linguaggio di programmazione Hecl. Spiegano, in dettaglio, come si procede per estrarre del testo da un file e far sì che il computer esegua le istruzioni contenute. Poichè Hecl non è un linguaggio ricercato e complicato, ma è piuttosto un linguaggio compatto, semplice e modesto, dovrebbe essere abbastanza facile seguirne l’analisi. Se state scrivendo la vostra tesi di laurea in Informatica, probabilmente non troverete questo materiale interessante, perché presumibilmente ne sapete più di me sull’argomento. Ma per tutti gli altri spero di fornire un rapido sguardo su ciò che comporta la creazione di un linguaggio di programmazione. Come ho detto prima, Hecl è un linguaggio compatto e semplice. Ed è così per un motivo: prima di tutto perché volevo fosse pronto in tempi brevi ma, soprattutto, perché volevo qualcosa che potesse funzionare entro i vincoli di spazio del mio cellulare J2ME. Inoltre, nonostante sia un semplice progetto (o forse a causa di ciò), Hecl è abbastanza flessibile e estensibile, il che significa che può evolversi verso nicchie molto diverse. Naturalmente, ciò lo rende un buon soggetto per degli articoli piuttosto che la sua trattazione attraverso un libro, necessario invece per descrivere linguaggi più complicati. Ho iniziato a lavorare su Hecl quando sono 8 Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 accadute due cose: avevo acquistato una cellulare su cui girava J2ME e avevo deciso che probabilmente era il momento di apprendere qualcosa di Java. Si è trattato di una combinazione fortuita, poiché non sono molto portato ad apprendere qualcosa senza un progetto su cui operare come incentivo e il cellulare mi ha fornito lo spunto che mi serviva. Java non ha un grande fascino per me: ha alcuni aspetti interessanti, ma gran parte delle mie necessità di programmazione vengono soddisfatte o dai linguaggi dinamici come Tcl o Ruby, o dal linguaggio C per cose veloci e a basso livello. Tuttavia, J2ME è uno spazio molto interessante in cui muoversi, poiché è già in circolazione su milioni di telefoni e molti dei device che lo supportano non possono eseguire nient’altro. La piattaforma Symbian offre qualcosa in più: si può portare su di essa l’ordinario codice C, ma quando ho acquisto il mio telefono ciò era riservato ancora a modelli relativamente costosi. Sarà il tempo a sancire quale piattaforma sarà vincente, ma nel frattempo mi piaceva l’idea di scrivere qualcosa che funzionasse su milioni di dispositivi. E benché esistano altri linguaggi di scripting per Java, ce ne sono solo alcuni altri che possono girare sulla piattaforma J2ME, poiché ciò impone parecchi limiti su ciò che si può fare con Java. Ad esempio, la API per la reflection, pesantemente utilizzata da linguaggi come Groovy, non esiste. Con un obiettivo in mente e le dita intorpidite per aver iniziato a scrivere il codice, l’ul- speciale Hecl tima fermata è stata considerare il disegno complessivo del linguaggio. In realtà, non è stato così difficile. Mi piace molto il linguaggio di programmazione Tcl, particolarmente la sintassi, che deriva più dal Lisp di quanto molti si rendano conto o credano. Tcl è, a prima vista, un linguaggio abbastanza semplice, caratteristica che gli permette di essere incredibilmente flessibile. È possibile scrivere un sistema a oggetti (classi, ereditarietà e via dicendo) in Tcl stesso e anche aggiungere nuove strutture di controllo (come “if ” e “while”) scritte in Tcl! È anche un linguaggio facile da apprendere, una prerogativa a cui attribuisco un alto valore perché significa che il linguaggio è accessibile a molti, anche a chi non è un ottimo programmatore o non ha una laurea in informatica. Tcl non è perfetto, ma siccome non sto cercando di scrivere un clone di Tcl in Java, mi sento anche libero di ricalcare ciò che mi attira, di migliorare ciò che non gradisco e di essere creativo se necessario. Di nuovo, la decisione di abbandonare la compatibilità con Tcl è stata, in parte, guidata dalla necessità di mantenere le cose compatte e in parte per massimizzare il valore ludico del progetto: è più avvincente lavorare senza limiti prestabiliti. Esiste già una versione di Tcl scrit- ta in Java, si tratta di Jacl, ma è fin troppo mastodontica per la scarsa memoria del mio telefono. L’articolo successivo si occupa dei dettagli tecnici del linguaggio Hecl. Per chi fosse interessato ad esaminare esattamente come il codice descritto si adatta al resto del sistema, ne è possibile effettuare un’analisi online all’indirizzo [1], in particolare delle classi di base, che si trovano all’indirizzo [2]. Riferimenti [1] http://cvs.sourceforge.net/viewcvs.py/hecl/hecl/ [2] http://cvs.sourceforge.net/viewcvs.py/hecl/hecl/ core/org/hecl/ Note Biografiche David N. Welton vive e lavora a Padova come consulente specializzato in tecnologie open source (Linux, Apache, Tcl, Python, Ruby, C, ecc.) e fornisce servizi di programmazione, formazione e consulenza strategica. È membro attivo della comunità Tcl, ha fatto parte del progetto Debian sin dal 1997, ed è stato Vice Presidente (o capobanda?) di Apache Tcl con l’Apache Software Foundation fin dal 2001. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 9 speciale Hecl SPECIALE Come funziona Hecl Ü di David N. Welton Il parser Come fa il computer a riconoscere e ad agire su alcuni scarabocchi contenuti in un file? La prima cosa che Hecl deve fare è leggere il contenuto del file e convertirlo in piccoli blocchi a cui possa attribuire un significato. Questa parte di Hecl è il parser, definito nel file Parse.java. Come ho detto nell’articolo precedente, Hecl è un linguaggio semplice. Pertanto per poter discutere in modo più agevole cosa accade, diamo un’occhiata a un po’ di codice Hecl: set txt [getprop $tf text] if { ne $txt “” } { prende i caratteri backslash (“\”), gli a capo e qualsiasi altro carattere. • I doppi apici “” raggruppano tutto ciò che contengono in una parola, ma consentono la sostituzione, in modo che si possa scrivere: puts “La variabile a è uguale a $a” • Le parentesi quadre “[…]” valutano il comando contenuto e ne restituiscono il valore. Pertanto laddove in un linguaggio come il C, si scrive: # un commento stringitem label “Hai scritto:” text foo = bar() $txt puts “hello” ; puts “world” ; in Hecl, si scriverebbe: } Il parser di Hecl riconosce solo alcuni caratteri come caratteri speciali: “” [] {} $ # ; e il carattere “newline”. Il parser legge ciascuna riga di testo e la suddivide in blocchi in base a semplici regole: • Il simbolo dollaro “$” restituisce un riferimento al valore contenuto nella variabile denominata. • Un comando termina con un a capo (newline) o con un punto e virgola “;”. • Il carattere backslash “\” quota il carattere successivo. Ad esempio “foo\[bar” conterrà un simbolo letterale parentesi quadra aperta invece di cercare di valutare bar come comando, cosa che invece causerebbe una parentesi quadra non quotata. • Le parentesi graffe “{…}” raggruppano all’interno gli argomenti, che vengono passati al comando “così come sono”. Ciò com- • # è il carattere per la scrittura dei commenti. Tutto ciò che segue # su una riga viene ignorato. • I comandi e i relativi argomenti sono delimitati da spazi. 10 set foo [bar] Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 speciale Hecl FIGURA 1 La classe GroupThing È tutto! La sintassi di Hecl può essere descritta in solo 8 regole. Anche se può sembrare un po’ complessa, pensate a ciò che richiederebbe la descrizione della sintassi di un linguaggio come Ruby, Python o C (oppure Perl, per i veri masochisti!). Tenendo presente queste regole, diamo un’occhiata al precedente frammento di codice. La prima riga può essere suddivisa in questo modo: guaggi. In Hecl, if è un comando ordinario, come qualsiasi altro, mentre in C o in Python fa parte della sintassi, piuttosto che essere una funzione che gli utenti possono definire o modificare. Ad ogni modo, ciò che Hecl fa mentre legge il codice sorgente è creare una “rappresentazione interna” dei vari comandi e delle variabili che sta leggendo. Lo fa in modo da poter memorizzare il tutto e poi eseguirlo quando è pronto, invece di cercare di eseguirlo pezzo per pezzo. Ciò velocizza l’operatività quando il codice viene eseguito più volte (ad esempio, il codice in un ciclo while) poiché Hecl non deve rieseguire ogni volta il parsing di quel codice. Complessivamente considerato, il programma Hecl sottoposto al parsing può essere rappresentato come albero, con ciascun nodo che rappresenta una parte del programma, come verrà descritto in seguito in questo articolo. Le “cose” di Hecl • Un comando: set. • Un argomento di quel comando: txt • Un terzo argomento, un testo da valutare: [getprop $tf text]. Hecl tuttavia non lo valuta immediatamente, si limita a memorizzarlo e prendere nota che dovrà essere valutato. Il secondo frammento di codice, anch’esso un singolo comando, è simile: un comando if seguito da due argomenti, che contengono a loro volta dell’ulteriore codice Hecl: ne $txt “” # un commento stringitem label “Hai scritto:” text $txt puts “hello” ; puts “world” ; Si tratta di un aspetto importante da comprendere, poiché è molto differente da come operano molti lin- Quanto detto porta a una discussione su come Hecl memorizza i valori, da affrontare prima di proseguire la discussione sul parsing e sulla rappresentazione interna di Hecl. Siccome il termine “oggetto” è stato ampiamente utilizzato nel regno dell’Informatica, per Hecl ho deciso di ritornare a un termine altrettanto vago ma più anglosassone: “thing” (ossia, una “cosa”). Tutti i valori in Hecl vengono gestiti dalla classe Thing che internamente mantiene un altro valore in base al tipo del valore che sta memorizzando. Per tipi più o meno standard di thing, Hecl definisce le classi StringThings, IntThings, ListThings e HashThings, così come DoubleThing per le versioni di Hecl non-J2ME. Si tratta di tipi/strutture di dati abbastanza standard presenti in gran parte dei linguaggi di scripting. Hecl dispone anche di un ObjectThing, che può contenere qualsiasi oggetto Java, con l’avvertimento che se viene trasformato nella sua rappresentazione in stringa, perderà il riferimento all’oggetto che contiene. Il punto in cui le “cose” si fanno complicate è nei tipi interni, dove Hecl ha a disposizione CodeThing, Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 11 speciale Hecl GroupThing e SubstThing, che assieme alla classica StringThings gestiscono la rappresentazione interna del codice. Le SubstThing sono le più semplici. Quando il parser incontra una variabile il cui nome è preceduto da un carattere “$” o da un carattere “&”, crea una SubstThing da porre nella vista interna di Hecl dello script. Per comprendere come funziona questo caso, consideriamo il seguente script: set i 0 while { < $i 100 } { puts $i intercambiabile. L’implementazione di IntThing è un buon punto di partenza, poiché è abbastanza facile comprendere cosa è e cosa fa un IntThing. public class IntThing implements RealThing { private int val; Come si osserva, un IntThing contiene un valore di tipo int: il valore reale a cui siamo effettivamente interessati dopo tutti questi riferimenti indiretti! C’è un utile metodo in IntThing per la creazione di nuove Thing che rappresentano interi: incr $i } public static Thing create(int i) { return new Thing(new IntThing(i)); } Tale metodo viene utilizzato moltissimo in questo modo: Hecl è un linguaggio semplice, la sua sintassi può essere descritta in sole 8 regole Thing foo = IntThing.create(56); Tuttavia, in termini di importanza, ciò che rende i tipi Hecl dinamici sono due metodi: private static void setIntFromAny(Thing thing) throws HeclException { RealThing realthing = thing.val; if (!(realthing instanceof IntThing)) { Ovviamente, Hecl deve riesaminare il valore contenuto in i ogni volta durante lo script piuttosto che sostituirlo una tantum! SubstThing permette a Hecl di fare ciò, poiché sa di aver a che fare con qualcosa che in realtà rappresenta qualcos’altro: in questo caso $i si riferisce a un valore intero, ma che cambia ogni volta nell’esecuzione del ciclo e pertanto andrà sostituito ogni volta. Le cose sono un po’ più complesse, tuttavia, perché Hecl, come molti linguaggi di scripting, permette di utilizzare la cosiddetta “interpolazione di stringhe”. Consideriamo questo esempio: thing.setVal(new IntThing(thing. getStringRep())); } } public static int get(Thing thing) throws HeclException { setIntFromAny(thing); IntThing getint = (IntThing) thing.val; return getint.val; } Quando è necessario estrarre un int da un Thing, si invoca il metodo get in questo modo: puts “Il valore di ‘i’ è ancora $i e 1 + 1 è ancora [+ 1 1]” Per gestire questo caso utilizziamo la classe GroupThing. Come implica il nome, rappresenta un gruppo di altre thing, come è mostrato in Figura 1. GroupThing valuta i propri componenti quando Hecl ha necessità di conoscere cosa contiene il GroupThing stesso. Le classi Thing vengono implementate in Java in questo modo: una classe Thing contiene un tipo RealThing che rappresenta il valore effettivo Come si può vedere, questo codice esamina il valore interno di una Thing e nel caso non sia già un IntThing, lo trasforma in una stringa e cerca di eseguire il parsing di un intero. Naturalmente, il procedimento potrebbe fallire, perché se si cerca di ottenere un intero da una stringa “abc” … non può funzionare! Ecco perché entrambi i metodi sono in grado di generare una HeclException, di cui parleremo a breve. public class Thing { Valutazione del codice public RealThing val; CodeThing, GroupThing, StringThing e tutte le altre classi implementano l’interfaccia RealThing in modo che Hecl possa gestirle in modo più o meno 12 int foo = IntThing.get(foothing); Prima di comprendere come viene valutato il codice Hecl, torniamo per un momento alla discussione sul parsing. Ora che sappiamo come Hecl memorizza internamente gli oggetti Thing è facile comprendere ciò Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 speciale Hecl FIGURA 2 Le “stanze” in Hecl La valutazione effettiva avviene nelle stanze. Per Hecl, la prima stanza è qualcosa di simile a: StringThing (puts) SubstThing (i) che accade quando il codice Hecl viene sottoposto al parsing: viene trasformato in Thing. Per poter fare qualcosa con questa stanza, deve cercare “puts” come comando. La classe Interp contiene una tavola hash che mappa i nomi dei comandi, come puts, if, proc, +, list e via dicendo, nelle rispettive classi Java che implementano quel codice. Il comando puts è mappato sulla classe PutsCmd, che è semplicissima: class PutsCmd implements Command { puts “foo bar” -> StringThing (puts) e un GroupThing (foo bar). public void cmdCode(Interp interp,Thing[] argv) throws puts $i HeclException { -> StringThing (puts) e un SubstThing (i) System.out.println(argv[1].getStringRep()); } set i [+ $i 10] -> StringThing (set), StringThing (i), seguito da un CodeThing. Il CodeThing viene sottoposto al parsing in questo modo: + $i 10 -> StringThing (+), SubstThing (i), StringThing(10) Ci si potrà chiedere perché il precedente valore 10 è un StringThing quando è abbastanza ovvio che sia un numero e che si presume venga utilizzato come tale. La vostra intuizione è corretta, ma Hecl inizialmente esegue il parsing di qualsiasi cosa come stringhe e le trasforma in altri tipi di “cose” al momento della valutazione del codice. Per comprendere come Hecl viene effettivamente valutato dopo che abbiamo un rappresentazione memorizzata in memoria, dobbiamo esaminare CodeThing, che è il vero motore di Hecl. Probabilmente avrete dedotto dal nome che si tratta di una classe che contiene codice, il che è corretto. Gli oggetti CodeThing vengono suddivisi in “stanze”, che equivalgono a singoli comandi. Nella Figura 2, ad esempio, il codice effettivo verrebbe trasformato in un CodeThing con due stanze, puts $i e incr $i. Ogni volta che viene richiesta l’esecuzione di un CodeThing, questo itera sulle stanze e, a sua volta, ne invoca il metodo run. } Tutte le classi comando implementano l’interfaccia Command e perciò devono avere un metodo cmdCode. Ma non corriamo troppo... La stanza che contiene il comando puts ha anche qualcosa da passargli come argomento, in questo caso un SubstThing. Per ciascuno degli argomenti del comando nella stanza, Hecl verifica di che tipo è. Se è qualcosa di semplice come un IntThing o uno StringThing, viene passato al comando senza modifiche. SubstThing, GroupThing e altri CodeThing vengono invocati in modo ricorsivo per poter individuare quale valore rappresentano effettivamente, in modo che il comando effettivo possa essere chiamato in questo modo: puts 23 Gli argomenti (compreso il nome del comando) vengono passati al metodo cmdCode come array di Thing: Thing[] argv array Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 13 speciale Hecl FIGURA 2 Le “stanze” in Hecl when run, gives us: a è 0 in foo, a è 10 a è 0 Nel caso di PutsCmd, tutto ciò che fa è stampare la rappresentazione stringa del primo argomento. È così che funzionano tutti i comandi Hecl, anche if e while, che accettano codice come argomenti, lo valutano e agiscono di conseguenza. Questa semplice strategia non è veloce, ma è molto, molto flessibile. Si può sostituire il codice al volo, rinominare i comandi e fare ogni sorta di altri interessanti trucchi. Inoltre, è facile implementare questo sistema nel limitato ambiente J2ME. Variabili Gli osservatori più astuti avranno notato che prima, quando abbiamo trattato SubstThing, non abbiamo spiegato realmente come opera. Come fa Hecl a passare da un nome di variabile, ad esempio “foo”, ad un valore in essa contenuto, come 42? Hecl utilizza un semplice schema di ricerca basato su una tavola hash in cui ciascun “livello stack” ha una propria tavola hash che associa i nomi ai valori. Ciò significa che all’interno di una proc viene creata una nuova tavola hash per memorizzare i valori locali. Per vedere il tutto in azione, consideriamo questo codice: In termini di flusso del programma, si può vedere nella Figura 3 che, allo step 1, è in azione la tavola di ricerca delle variabili globali. Quando la valutazione del programma entra nella procedura foo, la tavola di ricerca globale viene sostituita da una nuova tavola della procedura in esecuzione. Allo step 3, quando la procedura termina, la tavola hash che è stata creata nell’interprete per contenere le sue variabili viene impostata a null ed è lasciata al garbage collector di Java perché rilasci la memoria occupata. Lo stack stesso viene implementato dalla comoda classe java.util.Stack. Le routine di ricerca delle variabili basata sulle tavole hash sono contenute nella classe Interp (unitamente alla tavola hash di ricerca dei comandi). Interprete Effettivamente, la classe Interp è la struttura dati centrale che tiene assieme il tutto. Contiene lo stato del programma in termini di variabili, di comandi e procedure esistenti, di eccezioni e via dicendo. Per gli sviluppatori Java che cercano di includere Hecl nel proprio codice, uno degli aspetti pratici di Interp è che si può disporre di più di una occorrenza per volta. Si immagini, ad esempio, un server che valuta del codice Hecl per dei client. Ciascun client autenticato potrà avere un suo interprete Hecl separato senza interferire con gli altri! I metodi più comunemente utilizzati in un interprete sono quelli che ne modificano lo stato. Creiamo un comando visibile a Hecl: set a 0 puts “a è $a” interp.commands.put(“nuovonomecomando”, new ClasseCheImplementaComando()); proc foo {} { set a 10 puts “in foo, a è $a” Creiamo e impostiamo una variabile: } foo interp.setVar(“temperatura”, new Thing(99)); puts “a is $a” valutiamo il codice: 14 Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 speciale Hecl set cmds “ codice da valutare “ interp.eval(new Thing(“puts {hello world}”)); catch $cmds result Impostiamo il risultato di un comando: Il interp.result = new Thing(“ok, bene, ha funzionato e vero motore di Hecl è CodeThing, classe suddivisa in “stanze” che equivalgono a singoli comandi via dicendo”); Errori e eccezioni Finora, abbiamo descritto come le cose dovrebbero funzionare. La vita, tuttavia, ha la caratteristica di non essere esattamente come l’avevamo pianificata e questo si applica anche ai programmi Hecl: abbiamo necessità di un modo per trattare gli errori. Java stesso dispone di un completo meccanismo di eccezioni, pertanto lo sfrutteremo in Hecl. Qualsiasi cosa che possa causare un errore in Hecl genera una HeclException, in modo che il codice contenuto in Stanza.java possa intercettarlo e gestirlo in modo appropriato: try { interp.result = new Thing(“”); tmpcommand.cmdCode(interp, newargv); Questo è il comando effettivo che viene eseguito. Ciò valuterà il codice in cmds e depositerà il risultato nella variabile risultato. Per programmi che non devono interrompersi, anche in caso di errori, catch offre al programmatore un mezzo con cui può tentare di gestire gli errori in modo elegante. Le eccezioni hanno un altro scopo, oltre a gestire gli errori. Consideriamo un ciclo while, che potrebbe essere simile a: } catch (HeclException e) { if (newargv[0] != null) { while { true } { e.where(newargv[0].getStringRep()); if { > $somevar 100 } { break } } do_other stuff throw e; incr $somevar Indichiamo all’eccezione in quale comando si è verificata, così da poter ottenere la catena dei comandi che hanno fallito. } catch (Exception e) { } Come funziona il comando break? Interrompe l’esecuzione del ciclo quando viene eseguito, ma non è un errore. Genera esso stesso una HeclException, contrassegnandola come “eccezione di break”: String msg; msg = e.getMessage(); throw new HeclException(HeclException.BREAK) if (msg == null) { msg = “(eccezione null di tipo “ + e.getClass() + “)”; } else { A questo punto, è compito dei comandi che implementano i cicli di intercettarla. Ecco come appare il comando while: msg = “Eccezione di tipo “ + e.getClass() + “: “ + msg; while (Thing.isTrue(interp.eval(argv[1]))) { } try { throw new HeclException(msg); interp.eval(argv[2]); } } catch (HeclException e) { Nel caso di un’ordinaria eccezione Java, la intercettiamo e creiamo una nuova HeclException, in modo che possa essere gestita in Hecl stesso. Hecl ha un comando, catch, che può essere utilizzato per intercettare le eccezioni e per gestirle da programma. Questo comando funziona valutando il codice che gli viene passato, intercettando qualsiasi eccezione che il codice può aver generato e restituendo semplicemente queste eccezioni al chiamante del comando sotto forma di variabile Hecl. In altri termini: if (e.code == HeclException.BREAK) { break; } else if (e.code == HeclException.CONTINUE) { } else { throw e; } } } Da non dimenticare che while è un comando con due argomenti: la condizione e il codice. Finché la condi- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 15 speciale Hecl zione è vera, il ciclo viene eseguito ed ogni volta il codice viene valutato. Tuttavia, stiamo attenti a rilevare anche le due speciali eccezioni e agiamo su queste. break fa sì che il ciclo termini, mentre continue fa sì che il ciclo venga cortocircuitato e salti nuovamente alla valutazione della condizione. Se, tuttavia, la HeclException non è di uno di questi tipi speciali, l’errore viene nuovamente generato e si propaga verso l’alto nello stack delle chiamate. new org.hecl.fp.HeclFloat().loadModule(interp); new org.hecl.load.HeclLoad().loadModule(interp); Vector argv = new Vector(); for (i = 0; i < args.length; i++) { argv.addElement(new Thing(args[i])); } interp.setVar(“argv”, ListThing.create(argv)); if (args.length > 0) { HeclFile.sourceFile(interp, args[0]); } else { Hecl.commandLine(interp); } Hecl non è concepito per sostituire Java ma per cooperare con esso: vi sono due modi per integrare Hecl e Java Combinare Hecl e Java Come ho discusso all’inizio dell’articolo, Hecl non è concepito come sostituto di Java, ma piuttosto per cooperare con Java. Al momento, è improbabile che un intero sistema software venga scritto interamente in Hecl (benché sia probabile che evolva in questa direzione); pertanto è importante discutere di integrazione tra Hecl e Java. Ci sono due modi per fare ciò: invocare Hecl da Java e creare estensioni Java per Hecl. } catch (Exception e) { e.printStackTrace(); } } Abbastanza semplice. Per prima cosa, viene creato l’interprete, vengono caricati alcuni moduli e vengono esaminati gli argomenti della riga di comando. Se è stato specificato un argomento della riga di comando, viene trattato come nome di un file che contiene il codice Hecl da valutare, cosa che avviene attraverso il metodo HeclFile.sourceFile. Se non ci sono argomenti della riga di comando, Hecl esegue il metodo commandLine, un cosiddetto “REPL”, ossia “read-eval-print loop”, leggendo i comandi Hecl dallo standard input, valutandoli, stampando il risultato e via dicendo. Anche questo codice è abbastanza semplice: while (true) { System.out.print(“hecl> “); System.out.flush(); line = buff.readLine(); /* Termina se EOF. */ if (line == null) { System.exit(0); } try { interp.eval(new Thing(line)); Invocare Hecl da Java Se si ha un programma scritto in Java e lo si vuole rendere “scriptable”, aggiungere ad esso un interprete Hecl è molto semplice. Sarebbe una strategia appropriata se si vuole permettere agli utenti di modificare delle variabili o per creare delle callback che vengono eseguite in certi punti del ciclo di vita del programma. Un semplice esempio potrebbe essere quello di un server Web che valuta script Hecl quando vengono richieste certi URL. Un esempio di questa tecnica è la riga di comando di Hecl stesso, nello specifico il file commandline/ Hecl.java. Ecco il metodo principale: if (interp.result != null && Compare.compareString(interp.result, new Thing(“”)) != 0) { System.out.println(interp.result); } } catch (HeclException he) { System.out.println(he); } } I punti chiave per utilizzare il codice Hecl da Java sono l’inizializzazione dell’interprete e poi la sua utilizzazione per valutare il codice. public static void main(String[] args) { try { int i; Interp interp = new Interp(); /* Aggiunge i pacchetti standard. */ new HeclFile().loadModule(interp); 16 Creazione di estensioni Java per Hecl L’altro modello è scrivere il proprio programma in Hecl e aggiungere delle estensioni Java per eseguire compiti specifici. Ad esempio, per creare i Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 speciale Hecl diagrammi riguardanti statistiche sulla diffusione di alcuni linguaggi di programmazione che utilizzo (http://www.dedasys.com/articles/language_ popularity.html) ho scritto il programma in Hecl e ho scritto un’estensione Hecl che fornisce un’interfaccia alla libreria JFreeChart. Questo modello è molto diffuso con linguaggi maturi come Tcl, Ruby e Python, in cui il linguaggio di scripting contiene tutte le funzionalità necessarie a scrivere un sistema completamente funzionante e le estensioni (di solito scritte in C) sono necessarie solo per interfacciarsi con specifiche librerie esterne o con specifici dispositivi. Ad ogni modo, è facile farlo con Hecl: la tecnica di base è scrivere una classe che implementa l’interfaccia org.hecl.modules.HeclModule in questo modo: public class JFreeChartHecl implements Command, HeclModule { public void cmdCode(Interp interp, Thing[] argv) throws HeclException { ... implementazione del comando ... } public void loadModule(Interp interp) throws HeclException { interp.commands.put(“barchart”, this); interp.commands.put(“savechart”, this); } public void unloadModule(Interp interp) throws Il futuro di Hecl Il mio scopo è mantenere Hecl sufficientemente semplice da poterlo eseguire sul maggior numero possibile di cellulari, il che significa che il nucleo stesso resterà il più piccolo possibile. Sono un forte sostenitore della strategia “farlo, farlo bene e farlo presto “ e stiamo ancora creando Hecl, pertanto c’è posto per chi voglia collaborare in termini di ulteriori caratteristiche e estensioni, dato che Hecl è in una fase ancora embrionale, anche per sperimentare con il linguaggio stesso. Creare un linguaggio di programmazione è stato uno sforzo molto impegnativo e creativo, chi è interessato a partecipare per plasmare il futuro di Hecl è il benvenuto. Conclusioni Come si è visto da questo tour su Hecl, un interprete è un complesso componente software che richiede molte decisioni. Ma è proprio ciò che lo rende avvincente: c’è spazio in abbondanza sia per ingegnose soluzioni tecniche, sia per un raffinato disegno, benché come si dice, “la bellezza è negli occhi di chi guarda!”. Ad ogni modo, Hecl è un linguaggio piccolo e abbastanza semplice, al punto che chiunque abbia un po’ di conoscenze Java dovrebbe essere in grado di utilizzarlo per i propri esperimenti. Il software, per inciso, è sotto licenza Apache Versione 2, che è molto flessibile, (può essere consultata all’indirizzo http: //www.apache.org/licenses/LICENSE-2.0), il che significa che si può anche inserirlo in offerte proprietarie e commerciali, pertanto lo si può certamente utilizzare nel proprio software. HeclException { interp.commands.remove(“barchart”); interp.commands.remove(“savechart”); Risorse } } In questo caso, il modulo implementa anche un comando: l’obiettivo di base di qualsiasi estensione a Hecl sarà di aggiungere uno o più comandi che forniscono l’accesso ad alcune librerie o risorse esterne. Il tutto può essere poi compilato in un file .jar ed essere quindi caricato in Hecl con il comando load: load JFreeChartHecl { /home/davidw/hecllib/build/jfreechart/ • Il codice sorgente del proprio linguaggio di scripting preferito. Il codice C di Tcl è ben scritto, ben commentato e molto piacevole da leggere. Anche Lua, Python e Ruby sono interessanti. • L’articolo del Dr. John Ousterhout sullo scripting (è datato, ma contiene alcuni buoni spunti): http: //home.pacbell.net/ouster/scripting.html. • Il libro “J2ME in a Nutshell” pubblicato da O’Reilly è un buon testo di riferimento su ciò che si può o non si può fare in J2ME. • Il sito Web del progetto: http://hecl.org. /home/davidw/downloads/jfreechart/lib/ jfreechart-1.0.0-rc1.jar /home/davidw/downloads/jfreechart/lib/jcommon1.0.0-rc1.jar } il quale cerca di caricare la classe indicata e le relative dipendenze dalla URL specificata, semplici file (locali) vengono trasformati in URL. Nel caso del precedente frammento, tenta di caricare JFreeChart, che si trova nella directory jfreechart/build di hecllib. Ciò richiede a sua volta il codice di jfreechart e di jcommon, che vengono caricati dai rispettivi file jar. Note Biografiche David N. Welton vive e lavora a Padova come consulente specializzato in tecnologie open source (Linux, Apache, Tcl, Python, Ruby, C, ecc.) e fornisce servizi di programmazione, formazione e consulenza strategica. È membro attivo della comunità Tcl, ha fatto parte del progetto Debian sin dal 1997, ed è stato Vice Presidente (o capobanda?) di Apache Tcl con l’Apache Software Foundation fin dal 2001. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 17 “Si fa presto a dire sito web” di Paolo Frattini Anno 2007 Pagg. 54 ISBN 9788881500222 solo 12,90 Eu ro Fai il make-up al tuo sito web con l’ultimo libro di Paolo Frattini li g i s n o c e i h c c u r t Scopri regole, net r e t n I a i v e r a c i n u per com “Si fa presto a dire sito web” Ordinalo su www.shopinfomedia.com speciale Hecl Creare una semplice applicazione con Hecl SPECIALE Un’introduzione a Hecl, un linguaggio di scripting per telefoni cellulari. Ü di David N. Welton Al giorno d’oggi quasi tutti hanno un telefono cellulare; i dispositivi mobili continuano a diventare più veloci, più intelligenti e più capaci, ma esistono ancora relativamente poche applicazioni. Il linguaggio di programmazione Hecl facilita la scrittura di applicazioni per il proprio device: con poche righe di codice, si possono creare applicazioni da portare con sé, ovunque. Facili applicazioni per cellulari con Hecl Mi sono appassionato ai computer quando i miei genitori mi comprarono un Commodore 64, un computer abbastanza bello per l’epoca. Grazie alla legge di Moore e all’incessante tasso di sviluppo, il cellulare medio è ora più potente di quella macchina di una ventina di anni fa. Mentre è comprensibile che molti vogliano solo effettuare telefonate, si pensi a tutti i programmi che attendono di essere scritti proprio in vista del fatto di avere quasi sempre con sé un cellulare. Credo che stia solo iniziando a scalfire la superficie di ciò che sarà possibile fare, specialmente man mano che i telefoni continuano a diventare più veloci e ad avere delle migliori connessioni a Internet. Ho iniziato a interessarmi alla scrittura di applicazioni per cellulari diversi anni fa, dopo un giorno piovoso in Italia sulle Dolomiti, vicino Cortina d’Ampezzo: il mio vecchio telefono finì in un pozza di fango e smise di funzionare, inducendomi ad acquistare un nuovo telefono con funzionalità J2ME (Java). La scrittura di applicazioni in Java andava bene, ma ho riflettuto che sarebbe stato un esperimento interessante provare e creare un linguaggio di scripting che sfrutta l’ambiente J2ME (ora noto come Java Micro Edition o Java ME). Quando ho creato Hecl, l’ho fatto con diversi obiettivi in mente: 1. Rendere ancora più facile e più veloce per i programmatori esperti creare applicazioni per cellulari. 2. Rendere possibile ai programmatori neofiti di creare applicazioni per cellulari senza l’onere di dover interagire con Java. Hecl ha anche altri vantaggi: sviluppare applicazioni è più veloce, poiché non è necessaria una ricompilazione dopo ciascuna modifica. Nelle mani di un bravo programmatore è anche possibile fare cose interessanti con Hecl grazie alla sua natura di linguaggio interpretato. Si può avviare un’applicazione sul proprio telefono e scaricare ulteriori parti di codice dal Web. Lo scopo di questo tutorial è di aiutarvi a creare applicazioni per cellulari, pertanto iniziamo subito. Prima sono necessarie alcune cose: • Java di Sun. Java sta puntando verso il software free. Se utilizzate Ubuntu, come me, si può ottenere Java con apt: apt-get install sun-java5-jdk se si sono aggiunti i repository “multiverse” al proprio file /etc/apt/sources.list: deb http://us.archive.ubuntu.com/ubuntu/ feisty multiverse Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 19 speciale Hecl FIGURA 1 Screenshot della demo di Hecl /opt/WTK2.5.1/bin/emulator -classpath build/ j2me/final/cldc1.1-midp2.0/Hecl.jar Hecl che dovrebbe far apparire una schermata come quella mostrata nella Figura 1 Si tratta della demo fornita con Hecl: il codice sorgente si trova in midp20/script.hcl ma prima di andare troppo avanti, facciamo un passo indietro e creiamo la classica applicazione “Hello World”, proprio per iniziare a vedere come si lavora con Hecl. L’applicazione “Hello World” per cellulari Per scrivere il primo programma in Hecl, bisogna aprire un editor di testo, digitare il seguente programma e salvare nel file hello.hcl: proc HelloEvents {cmd form} { [lcdui.alert -text “Hellllllllooooo, world!” timeout forever] setcurrent } set form [lcdui.form -title “Hello world” commandaction HelloEvents] set cmd [lcdui.command -label “Hello” -longlabel “Hello Command” -type screen] $form setcurrent $form addcommand $cmd $form append [lcdui.stringitem -label “Hello” text “World”] • Il toolkit WTK di Sun [1]. Benché non siano necessari i tool per compilare Hecl (a meno che non si voglia “smanettare” con il toolkit!), ciò che si vuole è l’emulatore, in modo da non dover caricare la propria applicazione sul proprio telefono ogni volta che si vuole testarla. E’ scaricabile al link http: //java.sun.com/products/sjwtoolkit/download.html 20 Non male: 8 righe, in gran parte abbastanza chiare dalla semplice lettura del codice. Tuttavia, andiamo ad analizzarle riga per riga, in modo che possiate comprendere esattamente cosa accade. 1. Il primo frammento di codice, che inizia con proc HelloEvents, definisce una “procedura”: in altri termini una funzione denominta HelloEvents. Quando viene invocata questa funzione, crea un “alert” (una sorta di messaggio popup che indica qualcosa • Hecl, ovviamente. Si può scaricare dalla pagina di download di Sourceforge. NOTA Il WTK di Sun richiede un’installazione: si può effettuare, ad esempio, nella directory /opt, in modo che non si mescoli con il resto del proprio sistema. Il processo di installazione è molto semplice: basta rispondere “sì” a poche domande ed è fatta. Hecl non richiedere installazione: tutto ciò che è necessario è già pronto nella distribuzione. Per verificare se tutto è ok, si può provare a lanciare l’emulatore con l’applicazione d’esempio: Hecl è in effetti fornito in diverse versioni, con comandi GUI leggermente differenti: MIDP1.0 (telefoni più vecchi), che ha meno comandi e non fa un granché, e MIDP2.0, per telefoni più recenti, che ha molte più funzionalità. Questo tutorial utilizza i comandi MIDP2.0, poiché è quella su cui si basano i telefoni attuali. I concetti descritti sono molto simili per i comandi MIDP1.0, ma i comandi sono leggermente differenti. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 speciale Hecl di importante). -timeout forever indica al messaggio di rimenare sullo schermo finché l’utente non lo chiude. FIGURA 2 Screenshot di “Hello World” in Hecl 2. Il secondo comando definisce un form, con il comando lcdui.form, dal titolo “Hello World”, connesso alla procedura HelloEvents. Il significato di questa connessione è che quando un comando associato al form viene attivato dall’utente, viene invocata la relativa procedura per gestirlo. Il codice set form memorizza l’oggetto form nella variabile form, in modo che possa essere referenziato in seguito. 3. La riga seguente crea un comando che può essere attivato dall’utente. Ha come etichetta “Hello” ed è memorizzato nella variabile cmd. Per il comando utilizzo il tipo screen, che viene utilizzato per comandi definiti dall’utente. Ci sono alcuni tipi predefiniti come “exit” e “back”. 4. $form setcurrent referenzia il form precedentemente creato e indica a Hecl di visualizzarlo sullo schermo. 5. Il sottocomando addcommand (considerabile come una sorta di “metodo”, come in un linguaggio a oggetti) connette il comando che ho creato prima al form. Ciò rende il comando visibile nel form. 6. Infine, visualizzo una stringa sul form con il comando lcdui.stringitem. Su gran parte dei telefoni, il testo -label viene visualizzato in grassetto e il testo -text viene visualizzato accanto ad esso. È tutto! Ora, per trasformare il codice in un’applicazione per cellulare, bisogna eseguire un comando: java -jar jars/JarHack.jar jars/cldc1.1-midp2.0/ Hecl.jar ~/ Hello hello.hcl Ecco tutto ciò che richiede: questo comando prende il file esistente Hecl.jar, sostituisce lo script Hecl interno con quello che abbiamo appena creato in hello.hcl e crea il file risultante Hello.jar nella propria directory home (referenziata come ~/ nel comando precedente). Ora, si può eseguire il codice nell’emulatore per vedere l’applicazione (Figura 2). In evidenza, dall’alto, il titolo del form (-title), l’elemento stringitem e, nell’angolo in basso a destra, il comando con l’etichetta “Hello”. Se si preme il pulsante “Hello”, viene eseguito il codice in HelloEvents e appare un “alert” sullo schermo che resta lì finché non si preme il pulsante “Done”. Installazione del codice sul telefono Benché la creazione di un’applicazione sia molto facile, sfortunatamente, installarla su un telefono non lo è; non c’è molto che Hecl possa fare per facilitare questo processo, che è differente per ciascun telefono. Su Linux, per il mio telefono Nokia, utilizzo il programma gammu per trasferire i programmi sul telefono, in questo modo: gammu nothing --nokiaaddfile Application Hecl Un ulteriore metodo che può funzionare meglio con device differenti è utilizzare il browser del telefono stesso per scaricare e installare l’applicazione, ponendo i file .jar e .jad su un server Web pubblico e accedendo al file .jad. Si tenga presente, però, che questo procedimento probabilmente avrà un costo di connessione! Passi successivi: l’applicazione “lista della spesa” Fin qui tutto bene. A questo punto, creerò una piccola applicazione con cui poter interagire per fare qualcosa di utile. Si tratta di una versione semplificata di un’applicazione “lista della spesa” (Figura 3) disponibile all’indirizzo [3]. L’operatività di questa applicazione è semplice: digitare una lista della spesa Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 21 speciale Hecl do FIGURA 3 Pagina web per caricare la ShopList -type numeric Hecl rende ancora più facile e veloce creare applicazioni per cellulari per i programmatori esperti su un telefono cellulare è abbastanza irritante; molto meglio eseguire l’inserimento dei dati attraverso una pagina Web e poi caricare l’elenco con l’applicazione sul cellulare. Per questo tutorial, ho creato un semplice elenco sul sito ShopList, identificandolo con un codice PIN. Potete liberamente creare una vostra lista della spesa: l’utilizzo del sito è gratuito. L’applicazione per il cellulare funziona in questo modo: inserendo il PIN, scarica l’elenco degli articoli e li visualizza sullo schermo del telefono con una serie di controlli checkbox. Il codice per fare ciò è riportato nel Listato 1. È certamente più complesso del primo esempio, ma il modello generale è lo stesso: vengono creati gli elementi della schermata e gli articoli, visualizzati sul display e invocate le procedure per gestire i comandi. Come ho già detto, i comandi relativi a specifici compiti predefiniti hanno dei propri tipi, come si può vedere per i comandi back e exit, che sono, rispettivamente, di tipo “back” e “exit”. Dopo aver definito i due comandi, ho creato un form e ho aggiunto ad esso un campo di testo. Specifican22 per il campo di testo, ho indicato che può accettare solo numeri (né lettere né simboli). Dopo la creazione del comando Fetch, ho accodato il campo di testo al form (altrimenti non sarebbe visibile), ho aggiunto i due comandi al form e poi, con setcurrent, ho reso il form visibile. L’ultima riga di codice configura il form per utilizzare la procedura ShopFormEvents per gestire gli eventi. L’elenco degli argomenti merita una ulteriore spiegazione: Hecl, come molti linguaggi di programmazione, ha un comando global che può essere utilizzato nelle varie procedure che utilizzano i comandi back e exit: si può dire semplicemente global backcmd e la variabile $backcmd sarebbe disponibile in questa procedura. Tuttavia, un utilizzo eccessivo delle variabili globali è controproducente, pertanto provvedo a passare tutto ciò di cui la procedura può aver bisogno, e lo faccio creando un elenco: ShopFormEvents $backcmd $exitcmd $pinfield $fetchcmd Si può vedere che questo corrisponde agli argomenti che la procedura accetta: proc ShopFormEvents { backcmd exitcmd pinfield fetchcmd cmd shopform } eccetto gli ultimi due, che Hecl passa automaticamente: • cmd è il comando che è stato effettivamente invocato; • shopform è naturalmente il form con cui è stata invocata la procedura. Confrontando $cmd con i vari comandi disponibili, è possibile determinare quale comando ha invocato la procedura, e agire di conseguenza. A questo punto non resta che eseguire il build e avviare l’applicazione. java -jar jars/JarHack.jar jars/cldc1.1-midp2.0/ Hecl.jar ~/ ShopList shoplist.hcl /opt/WTK2.5.1/bin/emulator -classpath ShopList.jar Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 Hecl speciale Hecl LISTATO 1 # Processa gli eventi associati alla schermata dell’elenco della spesa. proc ShopListEvents {exitcmd backcmd cmd shoplist} { if { eq $cmd $exitcmd } { midlet.exit } elseif { eq $cmd $backcmd } { global shopform $shopform setcurrent } } # Crea una nuova schermata dell’elenco della spesa e la carica. proc MakeList {exitcmd backcmd pin} { set url “http://shoplist.dedasys.com/ list/fetch/${pin}” # Fetch the data, and retrieve the data field from the results hash. set data [hget [http.geturl $url] data] if { eq $data “PIN NOT FOUND” } { [lcdui.alert -type warning \ -title “Pin Not Found” \ -timeout forever\ -text “The PIN $pin was not found on shoplist.dedasys.com”] setcurrent return } set shoplist [lcdui.list -title “Shopping List” \ -type multiple] foreach e [split $data \n] { $shoplist append $e } $shoplist addcommand $exitcmd $shoplist addcommand $backcmd $shoplist setcurrent $shoplist configure -commandaction \ [list ShopListEvents $exitcmd $backcmd] } # Processa gli eventi associati al form principale. proc ShopFormEvents {backcmd exitcmd pinfield fetchcmd cmd shopform} { if { eq $cmd $exitcmd } { midlet.exit } elseif { eq $fetchcmd $cmd } { MakeList $exitcmd $backcmd \ [$pinfield cget -text] } } # L’azione parte qui ... # Crea un generico comando “back”. set backcmd [lcdui.command \ -label Back \ -longlabel Back -type back -priority 1] # Crea un comando exit. set exitcmd [lcdui.command \ -label Exit \ -longlabel Exit -type exit -priority 2] # Crea il form. set shopform [lcdui.form -title “Shopping List”] set pinfield [lcdui.textfield \ -label “shoplist.dedasys.com PIN:” \ -type numeric] set fetchcmd [lcdui.command -label “Fetch” \ -longlabel “Fetch Shopping List” \ -type screen -priority 1] $shopform $shopform $shopform $shopform append $pinfield addcommand $exitcmd addcommand $fetchcmd setcurrent $shopform configure -commandaction \ [list ShopFormEvents $backcmd $exitcmd $pinfield $fetchcmd] A questo punto, si inserisce il numero PIN e si preme il pulsante “Fetch”. Questo comando esegue il codice di MakeList. La prima cosa che fa è tentare di caricare i dati dal sito shoplist, utilizzando il comando http.geturl Poiché questo comando restituisce una tabella hash, per poter risalire ai dati restituiti, utilizzo il comando hget per accedere all’elemento “data”. Se il PIN non è disponibile sul server, viene restituito un messaggio d’errore e all’utente viene restituita la prima schermata. Altrimenti, viene creato un elenco di checkbox con lcdui.list specificando “multiple” come tipo. Poiché la lista della spesa viene inviata “via cavo” (si fa per dire...) come elenco di righe, tutto ciò che devo fare per aggiungerla al display è suddividerla per righe con il comando split e poi iterare su questo elenco con foreach. Il risultato è simile a quello visualizzato nella Figura 5. Ed ecco pronta una lista della spesa via rete in meno di 100 righe di codice. Naturalmente, c’è spazio per possibili miglioramenti. Ad esempio, la versione di produzione di questa applicazione, RecordStore (in Hecl, i comandi rms.* rendono disponibile questa funzionalità) viene utilizzata per salvare la lista e il relativo stato tra successive invocazioni del programma, in modo che si possa lasciare l’applicazione, eseguirla nuovamente e trovare la lista come la si è lasciata. Anche il supporto per liste multiple può essere pratico. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 23 speciale Hecl FIGURA 4 Form iniziale della ShopList Naturalmente, questo tutorial non puà andare a fondo nel trattare gli argomenti. Hecl ha diversi altri comandi GUI ed è un completo linguaggio di programmazione che può fare alcune cose interessanti e dinamiche. Se si è curiosi, il miglior modo per saperne di più è dare un’occhiata al sito Web di Hecl [4] e iscriversi alla mailing list su Hecl su SourceForge [5]. Riferimenti [1] http://java.sun.com/products/sjwtoolkit/ download-2_5_1.html [2] http://sourceforge.net/project/ showfiles.php?group_id=122383 [3] http://shoplist.dedasys.com/ [4] Sito Web Hecl - http://www.hecl.org/ [5] Mailing list Hecl - http://lists.sourceforge.net/ lists/listinfo/hecl-devel 24 FIGURA 5 La lista della spesa Risorse Java Micro Edition http://java.sun.com/javame/index.jsp Disegno e implementazione di Hecl http:// www.welton.it/articles/hecl_implementation.html Versione italiana pubblicata su licenza di The Open Mind Company Note Biografiche David N. Welton vive e lavora a Padova come consulente specializzato in tecnologie open source (Linux, Apache, Tcl, Python, Ruby, C, ecc.) e fornisce servizi di programmazione, formazione e consulenza strategica. È membro attivo della comunità Tcl, ha fatto parte del progetto Debian sin dal 1997, ed è stato Vice Presidente (o capobanda?) di Apache Tcl con l’Apache Software Foundation fin dal 2001. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 solutions Dal driver al window manager: installare Compiz Fusion Una guida passo passo all’installazione di ATI/NVIDIA, Xgl/AIGLX e Compiz Fusion per Ubuntu, Kubuntu e Xubuntu. Ü di Andrew MIn Il mondo 3D è diventato molto più luminoso con la nascita di Compiz Fusion, un potente window manager composito per i sistemi operativi GNU/Linux. In origine esisteva un unico progetto, Compiz, che si è biforcato in Compiz e nella diramazione non stabile e non ufficiale di Compiz nota come Beryl. Ora i due progetti sono stati riuniti in un sorprendente window manager composito. In sintesi, aggiunge effetti al proprio desktop come finestre “oscillanti” (le finestre oscillano effettivamente quando vegono spostate), un nuovo manager di desktop virtuali attraverso un cubo e molto altro ancora. Come prova di quanto sia “cool”, basta fare una ricerca su Google Video o YouTube di “compiz fusion”. Sfortunatamente, Compiz Fusion ha una documentazione scarsa o quasi nulla. Quel poco che c’è è concepito per veri esperti che è previsto conoscano cosa rappresentano comandi oscuri e non intuitivi come “git”. E non viene neanche spiegato come installare un manager composito o un driver per la scheda video (entrambi necessari perché Compiz Fusion funzioni opportunamente). Ancor peggio, molta della documentazione disponibile funzionerà solo per un tipo di scheda video (i tutorial NVIDIA non funzioneranno con schede ATI e viceversa). E, 26 Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 ancor peggio, praticamente tutti i tutorial disponibili sono per Ubuntu e non funzioneranno per Kubuntu o per Xubuntu. Perciò, questa guida è stata creato come una sorta di guida complessiva per tutti gli utenti delle principali distribuzioni Ubuntu e delle principali schede video. Attenzione: gran parte, se non tutto, questo software (compreso Compiz Fusion stesso) è in versione alfa. Dovrebbe comunque funzionare, ma c’è la possibilità che non funzioni. Perciò, non andrà utilizzato su macchine di produzione. Siete avvisati. Schede video ATI Il driver La prima cosa da fare è ottenere il driver della scheda video. Sono disponibili due moderni driver ATI per gli utenti Ubuntu: il software free non ufficiale driver Radeon e il driver ufficiale ATI (e proprietario) fglrx. fglrx è disponibile per utenti Radeon 9000+ e utenti della serie X (ad es. Radeon X3000), tuttavia può funzionare anche con altre schede ATI. Sfortunatamente, Radeon è estremamente lento nell’eseguire Compiz Fusion (abba- solutions FIGURA 1 Restricted manager per ATI noti che dbus è necessario per il login GNOME): #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:pbuffer -accel glx:pbuffer & DISPLAY=:1 dbus-launch --exit-with-session gnome-session Gli utenti Kubuntu (KDE), invece, dovranno inserire: #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:pbuffer - accel glx:pbuffer & DISPLAY=:1 exec startkde E infine, gli utenti Xubuntu (Xfce) scriveranno: stanza da renderlo inutilizzabile). Pertanto, abbiamo dovuto procedere con il driver proprietario fglrx. Per prima cosa, bisogna aggiornare il proprio sistema utilizzando il proprio manager di pacchetti preferito. Quindi, bisogna assicurarsi che siano installati i pacchetti • linux-restricted-modules-generic • restricted-manager A questo punto selezionare System/Administration/ Restricted Drivers Manager (in Kubuntu scegliere Settings/Restricted Drivers Manager) o eseguire come root restricted-manager, digitando da una finestra terminale sudo restricted-manager #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:pbuffer -accel glx:pbuffer & DISPLAY=:1 exec xfce4-session A questo punto salvare e chiudere il file. Per renderlo eseguibile basta eseguire da terminale il comando: sudo chmod +x /usr/bin/startxgl.sh A questo punto, create un nuovo file (sempre come utente root) in questa posizione: /usr/share/xsessions/xgl.desktop E in esso inserite quanto segue: Dopo aver fornito la password, si vedrà un’opzione [Desktop Entry] per “ATI accelerated graphics driver”. ControllaEncoding=UTF-8 re che sia abilitata. Per ulteriori informazioni, si legga la pagina [1] del Wiki di Ubuntu realtiva ai FIGURA 2 Restricted manager per NVIDIA driver ATI. X server La recente versione di X.Org comprende AIGLX, che fornisce le funzionalità di rendering GLX richieste da Compiz Fusion. Sfortunatamente, AIGLX richiede l’utilizzo del driver Radeon, che è troppo lento per l’esecuzione con Compiz Fusion. Perciò, dobbiamo utilizzare un nuovo X server il cui nome è Xgl. Per prima cosa, installiamo il pacchetto xserver-xgl nel repository universe. Poi creiamo un file di testo (come utente root) nella posizione /usr/bin/startxgl.sh Il contenuto del file di testo dipende da quale ambiente desktop utilizzerete. Gli utenti Ubuntu (GNOME) inseriranno nel file quanto segue (si Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 27 solutions FIGURA 3 Compiz Fusion in GNOME Name=Xgl Comment=Start an Xgl Session Exec=/usr/bin/startxgl.sh Icon= Type=Application Salvare ed effettuare il logout della sessione. Quando appare il login manager, scegliere Xgl come tipo di sessione. Ed è tutto! A questo punto gli utenti di schede ATI possono passare al paragrafo “Compiz Fusion”. Schede video NVIDIA Il driver Come accade per gli utenti ATI, sono disponibili diverse opzioni anche per i possessori di schede NVIDIA. Il driver più diffuso è il software free nv. Ma come accade per gli utenti ATI, le migliori prestazioni per Compiz Fusion sembra si ottengano con il driver proprietario di NVIDIA (opportunamente chiamato nvidia). Per prima cosa, aggiornare il proprio sistema. Quindi, accertarsi che siano installati i pacchetti linux-restricted-modules-generic e restricted-manager. Selezionare System/Administration/Restricted Drivers Manager (in Kubuntu Settings/Restricted Drivers Manager), o eseguire restricted-manager come root (da terminale eseguire sudo restricted-manager). Dopo aver fornito la password, abilitare l’opzione NVIDIA. A questo pun28 to si starà utilizzando il driver NVIDIA. Ulteriori informazioni sono disponibili nella pagina Wiki di Ubuntu [2]. X server Gli utenti NVIDIA sono molto più fortunati degli utenti ATI: per il proprio X server possono scegliere tra Xgl e AIGLX. La cosa gradevole di AIGLX è che è implementato in X.Org 7.1, pertanto si può abilitarlo senza dover installare nulla. Inoltre, non si deve creare una session separata per effettuare il login. La sola cosa necessaria da fare è modificare alcuni file di configurazione. Infine, AIGLX non richiede una sessione separata, a differenza di Xgl. Xgl è meno stabile e richiede il pacchetto xgl-server (e per gli utenti GNOME, l’installazione del pacchetto DBUS), ma richiede una minore configurazione. AIGLX Per utilizzare AIGLX, aprire in un editor di testo il file: /etc/X11/xorg.conf Assicurarsi che nella sezione «Module» si abbia quanto segue: Load “dri” Load “dbe” Load “glx” e che nella sezione “Device” si abbia: Option “XAANoOffscreenPixmaps” Può essere necessario aggiungere quanto segue alla sezione “Device”: Option “AddARGBGLXVisuals” “True” Infine, accertarsi che sia abilitato quanto segue (probabilmente alla fine del file): Section “DRI” Mode 0666 EndSection Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 solutions FIGURA 4 Finestre oscillanti mentre si gioca a Klondike glx:pbuffer & DISPLAY=:1 exec startkde E infine, gli utenti Xubuntu (Xfce) dovranno scrivere: #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:fbo -accel glx:pbuffer & DISPLAY=:1 exec xfce4-session A questo punto salvare e chiudere il file. Renderlo eseguibile (da terminale sudo chmod +x /usr/bin/ startxgl.sh). Ora create un nuovo file (sempre come root) nella posizione /usr/share/xsessions/ xgl.desktop. E in esso inserite quanto segue: [Desktop Entry] Section “Extensions” Encoding=UTF-8 Option “Composite” “Enable” Name=Xgl EndSection Comment=Start an Xgl Session Exec=/usr/bin/startxgl.sh Con ciò AIGLX è così configurato. Icon= Xgl Non ve la sentite di modificare tutte quelle opzioni di configurazione? Preferite un approccio più sanguigno? Xgl è la risposta per voi. Per prima cosa, installate il pacchetto xserver-xgl nel repository universe. Quindi, create un file di testo (come root) nella posizione Type=Application Salvare ed effettuare il logout della sessione. Dal login manager, scegliere Xgl come tipo di sessione. È tutto! E ora passiamo a Compiz Fusion. FIGURA 5 Massimizzazione di KPat /usr/bin/startxgl.sh Il contenuto del file dipende da quale ambiente desktop utilizzerete. Gli utenti Ubuntu (GNOME) scriveranno (al solito, DBUS è necessario per il login GNOME): #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:fbo -accel glx:pbuffer & DISPLAY=:1 dbus-launch --exit-with-session gnomesession Mentre gli utenti Kubuntu (KDE) inseriranno: #!/bin/sh Xgl :1 -fullscreen -ac -accel xv:fbo -accel Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 29 solutions FIGURA 6 Il magico effetto Aladdin gpg --export --armor 81836EBF | sudo apt-key add - Ora aggiornate il sistema. Installazione di Compiz Fusion È infine il momento di installare Compiz Fusion! Gli utenti Ubuntu (GNOME) e Xubuntu (Xfce) dovranno installare i seguenti pacchetti: • compiz • compiz-gnome • compizconfig-settings-manager • compiz-fusion-plugins-extra • compiz-fusion-plugins-unofficial • libcompizconfig-backend-gconf Mentre gli utenti Kubuntu (KDE) dovranno installare: • compiz • compiz-kde • compizconfig-settings-manager • compiz-fusion-plugins-extra • compiz-fusion-plugins-unofficial • libcompizconfig-backend-kconfig Compiz Fusion Prerequisiti di installazione Per prima cosa, accertatevi che siano disinstallati i pacchetti • compiz-core • desktop-effects (il pacchetto ubuntu-desktop può essere rimosso). Quindi, aggiungete i nuovi repository nel file /etc/apt/ sources.list: # Treviño’s Ubuntu feisty EyeCandy Repository # (GPG key: 81836EBF - DD800CD9) # Many eyecandy 3D apps like Beryl, Compiz, # Fusion and kiba-dock snapshots Assicuratevi di trovarvi in una sessione Xgl (o che sia abilitato AIGLX). Ora è il momento della verità! Eseguire il comando: compiz --replace Se le finestre mostrano uno sfarfallio, perdono le barre dei titoli e poi riappaiono, Compiz Fusion è in esecuzione. Per ulteriore verifica, spostate una finestra. Se si comporta diversamente dal normale, Compiz Fusion è in esecuzione! Per configurare Compiz Fusion, eseguire ccsm o System/Preferences/CompizConfig # built using latest available (working) # sources from git/svn/cvs. FIGURA 7 Giocare “letteralmente” con i temi Emerald deb http://download.tuxfamily.org/3v1deb feisty eyecandy deb-src http://download.tuxfamily.org/ 3v1deb feisty eyecandy Gli utenti a 64-bit dovranno invece utilizzare: deb http://download.tuxfamily.org/3v1deb feisty eyecandy-amd64 deb-src http://download.tuxfamily.org/ 3v1deb feisty eyecandy-amd64 È anche necessario aggiungere la chiave GPG. Per farlo, eseguire da terminale il seguente comando: gpg --keyserver subkeys.pgp.net --recv-keys 81836EBF 30 Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 solutions Settings Manager (gli utenti Kubuntu lo troveranno in Settings/CompizConfig Settings Manager). Per far sì che Compiz Fusion sia eseguito automaticamente al login, aggiungere ai comandi di startup del sistema: [2] Howto per schede Nvidia - https://help.ubuntu.com/ community/BinaryDriverHowto/Nvidia [3] Avvio automatico dei programmi - http://gentoowiki.com/HOWTO_Autostart_Programs Risorse compiz --replace (il Wiki di Gentoo ha un ottimo articolo su come fare ciò [3]). Vi piacciono le decorazioni Emerald delle finestre fornite con Beryl? Gli utenti Compiz Fusion possono utilizzarle! Assicuratevi che sia installato il pacchetto emerald-themes (installerà anche Beryl, pertanto non sorprendetevi se è un pacchetto pesante). Poi eseguite: compiz --replace -c emerald & • Homepage di Compiz Fusion http://www.opencompositing.org/ • Vecchia homepage di Compiz - http://compiz.org/ • Blog di Compiz Fusion http://smspillaz.wordpress.com/ • Forum su Compiz Fusion http://forum.compiz-fusion.org/ • Articolo nel Wiki di Ubuntu su Compiz Fusion https://help.ubuntu.com/community/ CompositeManager/CompizFusion Versione italiana pubblicata su licenza di The Open Mind Company invece di compiz --replace Note Biografiche Riferimenti [1] Howto per schede ATI - https://help.ubuntu.com/ community/BinaryDriverHowto/ATI Andrew Min è un giornalista, amante di Linux Kubuntu, che collabora con diverse riviste online come Free Software Magazine, Full Circle Magazine e Mashable.com Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 31 cutting edge iTV Format per la Televisione Digitale Terrestre Ü di Fabio Ramacciani E’ noto come il successo di un’applicazione interattiva in genere dipenda dal suo grado di usabilità, cioè dalla sua rispondenza a criteri di efficacia, efficienza e soddisfazione nella navigazione del servizio. Compito dell’usabilità è fare in modo che il modello mentale di chi ha progettato il software (design model), da cui deriva il suo reale funzionamento, corrisponda il più possibile al modello mentale del funzionamento del software così come se lo costruisce l’utente finale (user model). L’usabilità nasce dunque soprattutto come ausilio alla progettazione e si applica in particolare alle interfacce informatiche. E’ con l’interfaccia di un software, infatti, che l’utente si relaziona: ad ogni sua azione l’interfaccia proporrà un risultato, un cambiamento di stato. Poco importa, ai fini dell’usabilità, come l’interfaccia sia giunta a quello stato, attraverso cioè quali meccanismi di programmazione, che rimangono racchiusi in una vera e propria scatola nera impermeabile all’utente. Se questa considerazione è valida per le applicazioni informatiche in genere, essa assume una connotazione e un’importanza ancora più forte quando si parla dei nuovi servizi a valore aggiunto introdotti dalla televisione digitale e soprattutto per quelli al servizio delle Pubbliche Amministrazioni; i Portali TV sono progettati infatti con l’intento di abbattere il cosiddetto digital-divide, ovvero le barriere che ancora esistono tra quella parte della popolazione che ha accesso ai servizi informatizzati erogati tramite la Rete Internet e coloro che, per motivi di ordine culturale, economico e/o sociale, non hanno accesso ad essi ed ai vantaggi che introducono nella vita quotidiana. Target di utenza La rete Internet, inizialmente indicata come canale preferenziale per un rapporto più diretto tra Pubblica Amministrazione e cittadini, alla luce dell’impossibilità di superare, almeno per ora, quegli ostacoli che ancora esistono nell’affrontare un suo utilizzo, diventa solo uno dei canali per realizzare tale obiettivo. I servizi erogati oggi sulla rete Internet sono infatti accessibili solo da una parte della cittadinanza, cioè a coloro che non hanno alcun genere di problema ad uti- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 33 cutting edge FIGURA 1 Telecomando del digitale terrestre pretendendo che l’interazione con la TV sia “istantaneamente” coinvolgente (vedi il fenomeno dello zapping). Lo spettatore televisivo si caratterizza anche per una limitata soglia d’attenzione che contraddistingue la sua interazione con il mezzo. Molti elementi entrano in gioco nel favorire tale dinamica: la variabile distanza dallo schermo e la possibilità di modificare la posizione del corpo (seduto o disteso o in piedi), la difficoltà di lettura a video, l’essere facilmente sottoposti a distrazioni causate da varie fonti esterne e spesso dalla naturale curiosità dell’individuo verso altri programmi televisivi o verso la contemporaneità offerta dall’intero palinsesto. Tutto questo limita notevolmente l’impegno e la concentrazione che un cittadino spettatore dedicherà, ad esempio, ad un testo su TV, anche se di notevole importanza per esso. Di conseguenza il medium televisivo può essere di primaria importanza per erogare servizi a distanza che potranno essere a disposizione di ogni cittadino in modalità “alway on”, a patto però che i servizi offerti ed i relativi testi siano progettati ed orientati con la massima chiarezza, immediatezza ed essenzialità della comunicazione visiva e testuale. Caratteristiche del mezzo lizzare un computer e ad avviare una connessione; molta parte resta invece fuori dal beneficio di usufruire di un servizio erogato a distanza. La televisione, invece, ancora percepita come elettrodomestico e ampiamente diffusa nelle case degli italiani, si pone come mezzo che più facilmente riesce a raggiungere un vasto pubblico e adatta a non escludere nessun potenziale utente: può quindi avvicinare anche quella parte di utenza che non ha la capacità o le possibilità di utilizzare un personal computer: un mezzo dunque che potenzialmente, riesce ad eliminare un divario ancora più forte tra persone informatizzate e persone che non hanno accesso a sistemi informatici. E’ quindi a questa larga parte della cittadinanza che i portali televisivi si rivolgono: a tutti coloro che trovano semplice ed immediato l’utilizzo del mezzo televisivo, che richiede solo uno sforzo minimo di user experience. La Televisione digitale come medium generalista aderisce perfettamente al bisogno di raggiungere target “difficili” per il web: basti pensare a quelle categorie di persone, ad esempio gli anziani, che presentano una bassa informatizzazione o a coloro che dispongono di poco tempo libero all’interno della giornata per “cercare” informazione nel web. Le osservazioni riguardanti gli approcci tipici dell’uso dei diversi media hanno inoltre mostrato che, generalmente, chi usa il web riesce a focalizzare la propria attenzione anche per diverse ore verso il proprio obiettivo, mentre chi fruisce del mezzo televisivo si pone in un atteggiamento quasi di attesa 34 La TV come medium differisce in molti aspetti da mezzi di comunicazione come la stampa ed il web: sfrutta prevalentemente le potenzialità della comunicazione visiva grazie alle caratteristiche dell’immagine e della multimedialità. L’utente si abitua ad osservare il flusso d’immagini e a modificare la propria emotività in base al suo scorrimento “momentaneo”, al quale corrisponde una relativa decodifica da parte dell’osservatore che risulta essere istantanea nella quasi totalità dei casi. La funzione televisiva si differenzia da quella del web per molti fattori: il fatto che chi si pone di fronte al personal computer ha un tipo di alfabetizzazione informatica che non è richiesta ad un utente televisivo. Inoltre cambiano gli atteggiamenti di fruizione dell’utilizzatore e le sue aspettative d’interazione: di fronte ad un computer, un utente si pone “in avanti” e in maniera proattiva (uso del computer per lavoro), mentre di fronte alla TV è “indietro”, in maniera reattiva (uso del mezzo televisivo per divertimento). Queste considerazioni obbligano gli attori della diffusione della televisione interattiva ad interrogarsi su questioni che trascendono le considerazioni abituali e riflettono sulla maniera migliore di sfruttare in pieno le potenzialità di questo “nuovo” mezzo di comunicazione, allo scopo di renderlo realmente un servizio utile. Progettazione User Centred Un servizio è ritenuto usabile quando l’utente finale non trova difficoltà nel suo utilizzo, raggiunge con fa- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 cutting edge altro problema è ottenerla. Proprio come Internet ha avuto bisogno di 10 anni per riuscire a codificare una serie di regole pratiche non potendo semplicemente mutuare quelle già esistenti per lo sviluppo di applicativi, allo stesso modo dobbiamo inventarci le regole per la TV digitale interattiva. Anche se stiamo ancora assistendo a tentativi di applicare a questo media precedenti esperienze fatte per altri media interattivi, l’unico insegnamento che possiamo veramente trarne è il costo di una scarsa usabilità. Ci aspettano dunque studi completamente orientati a questo “nuovo” mezzo di comunicazione senza necessariamente seguire le orme di un’altra tecnologia, dotata di altri hardware, altri software, altri scopi, fruita in differenti modalità e contesti d’uso e rivolta ad altre tipologie di utenza. FIGURA 2 Il format “Film” Le applicazioni interattive cilità, rapidità e soddisfazione i contenuti per lui interessanti e nell’operatività, soprattutto dei servizi interattivi; non prova nessun senso di frustrazione, ma riesce ad avere pieno controllo del servizio interattivo. Il vero “attore” dell’applicazione è quindi l’utente che deve essere al centro della progettazione: le scelte devono essere effettuate sempre allo scopo di creare un ambiente a lui familiare, iniziando con il rendere trasparente ed invisibile la tecnologia, perché egli possa focalizzare sull’obiettivo e non sul mezzo, possa acquisire velocemente un certo grado di esperienza d’uso e non senta mai il bisogno di accedere all’area “Aiuto” per l’esplorazione e l’utilizzo dei servizi. Mettere l’utente al centro della progettazione vuol dire calarsi nelle sue esigenze e nelle sue difficoltà, cercare di capire come è più logico organizzare i contenuti in un ambiente virtuale, comprendere e analizzare i suoi modelli, la sua personale interpretazione del funzionamento del sistema da confrontare e paragonare con l’effettivo modello del sistema, cioè come esso funziona realmente. Vuol dire analizzare e valutare le reali esperienze d’uso, le caratteristiche dei target individuati con confronti continui e diretti in reali contesti d’uso, con interazioni periodiche tramite test d’usabilità o tecniche d’indagine (intervista, questionari, focus group) che possono servire per capire quali sono i bisogni degli utenti e quali le competenze informatiche o la conoscenza del sistema di ogni specifica categoria di utenza. • Accesso. In uno scenario d’uso tipico del televisore in un’ottica analogica, l’utente assiste ad un tradizionale programma televisivo con un atteggiamento prevalentemente passivo. La presenza di un’applicazione interattiva deve perciò essere segnalata e le modalità di accesso devono essere veloci semplici e chiare. Una parentesi • Interazione. Alcune applicazioni interattive richiedono che sia l’utente a fornire informazioni al servizio. Queste informazioni vengono inserite tramite la digitazione di testo attraverso l’uso di un telecomando; l’operazione risulta lunga e complessa, tanto che nei box interattivi di ulti- La TV digitale interattiva non è il web: se i principi dell’usabilità sono oramai consolidati, non per questo lo sono le tecniche per ottenerla sui diversi media: misurare l’usabilità è relativamente facile, ben • Struttura. Condizione necessaria alla facilità d’uso di una applicazione è che la sua struttura sia chiara ed intuitiva per gli utenti. Per farlo è opportuno separare i contenuti dai comandi, assegnare alle varie componenti sempre le stesse aree, esempio possono essere il logo ed il flusso video. • Navigazione. La possibilità di interagire con l’applicazione in modo semplice ed intuitivo dipende dalla modalità con cui sono organizzate e dalla modalità con cui queste possono essere selezionate. • Orientamento. L’interfaccia di un’applicazione è di tipo nascosto, nel senso che l’utente non è in grado di vedere immediatamente l’effetto delle sue azioni. Per sapere che l’interazione è andata a buon fine, l’utente ha bisogno che l’applicazione restituisca un feedback appena il processo si conclude. Il feedback è importante soprattutto con l’utente che impara come meglio interagire con l’applicazione. Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 35 cutting edge FIGURA 3 Il format “Telefilm” La TV digitale interattiva non è il web: se i principi dell’usabilità sono oramai consolidati, non per questo lo sono le tecniche per ottenerla sui diversi media ma generazione sono disponibili software che facilitano la scrittura del testo come ad esempio il T9. Purtroppo i nuovi set-top-box non sono ancora abbastanza diffusi. E’ perciò necessario porre particolare attenzione in fase di progettazione alla modalità di introduzione di stringhe di testo. Per la compilazione dei form si possono utilizzare modalità diverse dalla tastiera del telecomando, quali l’uso delle frecce del telecomando per selezionare e confermare i caratteri di una stringa e vari tipi di tastiera virtuale che utilizzano solo le frecce per selezionare il carattere ed il tasto OK per confermarle sul campo. 36 • Testo. La natura del mezzo televisivo è molto diversa da quella di altri mezzi di comunicazione che erogano informazioni di tipo testuale come la stampa: la sua fruizione è di natura prettamente visiva dal momento che si basa sulla multimedialità. I testi erogati in televisione richiedono dunque tutta una serie di accorgimenti che necessariamente li differenziano da quelli finalizzati all’erogazione su altri mezzi e che sono volti a rendere la lettura meno faticosa possibile. Rispetto al mezzo televisivo, la carta stampata consente una lettura più riflessiva ed un maggiore controllo da parte del fruitore, che può manovrare il testo in maniera molto più agile: può tenerlo ad una distanza ravvicinata, sottolinearlo, sfogliarlo mantenendo la compresenza visiva di due pagine, senza per questo sacrificare la leggibilità del testo. Inoltre, la lettura su carta stampata è abituale e non stanca eccessivamente la vista come succede per il video che emana luce artificiale. Progettare contenuti per la televisione digitale Digitalizzazione e compressione rendono possibile la convergenza di contenuti e codici provenienti da media diversi. Se tutte le informazioni vengono tradotte in bit come una sorta di “DNA dell’informazione”, la loro mescolanza rende possibile la nascita della multimedialità interattiva come combinazione di audio, video, dati su supporti quali cd-rom, dvd e su canali di comunicazione quali le reti a banda larga, il satellite, il digitale terrestre. Questa e’ l’integrazione delle telecomunicazioni e delle comunicazioni di massa in un solo medium. In questo scenario di convergenza tra reti la TV digitale diventa parte del sistema integrato dei media. I classici paradigmi comunicativi sono legati alla specificità del medium televisivo (one-to-many), della telefonia (one-to-one) e della rete, il più complesso e flessibile, in cui convivono i primi due ma anche il many-to-many e il peer-to-peer. La tecnologia consente di ibridare le differenti logiche comunicative, cadono le barriere tecnologiche della connettività tra media e si sviluppa un sistema in cui ciascun medium non occupa solo il proprio posto accanto agli altri ma ne invade lo spazio (come la televisione sui dispositivi cellulari) e a sua volta viene invaso (quando si riesce a portare i ‘videogames’ in televisione). Si produce una radicale rivoluzione dei paradigmi co- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 cutting edge FIGURA 4 Il format “Eventi” pressione dei segnali di codifica, sulle stesse frequenze della televisione tradizionale, dove prima c’era un solo canale, ora ce ne sono quattro con in più i servizi interattivi. Senza necessità di antenna satellitare si può accedere ad un’offerta caratterizzata • da un maggior numero di canali televisivi e una migliore qualità dell’immagine e del suono • dalla possibilità di interagire con le trasmissioni preferite, di accedere a contenuti, informazioni supplementari, giochi, acquisto di prodotti, di servizi e di programmi televisivi. Il Digitale Terrestre in Italia offre complessivamente 28 canali tv nazionali gratuiti e interattivi. La Rai è presente nella Televisione Digitale Terrestre con una vasta offerta di canali televisivi, radiofonici e servizi. municativi che permette la comunicazione in tutti i modi possibili, indipendentemente dalla rete su cui l’utente si trova e dal tipo di mezzo. L’aspirazione è di rendere la tecnologia trasparente. I new media, come dimostra la storia dei mezzi di comunicazione, non scalzeranno i “vecchi” media e non determineranno l’esclusione di un paradigma comunicativo a favore dell’altro né la completa sostituzione del primo con il secondo ma costringeranno questi ultimi a riposizionarsi nel nuovo scenario. La televisione è chiamata ad affrontare la sfida di questo riassetto tecnologico che è anche riconfigurazione del suo ruolo culturale, sociale e comunicativo. Il digitale è il linguaggio comune attraverso cui si realizza la convergenza dei media. Le immagini, i suoni ed i dati possono unirsi, integrarsi e completarsi. La tecnica digitale e’ più efficiente di quella analogica perché utilizza sistemi di compressione dei segnali. Al posto di ogni programma TV trasmesso in analogico e’ oggi possibile diffondere, con il digitale terrestre, fino a cinque programmi TV, canali audio aggiuntivi e flussi di dati. Il Digitale terrestre e l’analogico hanno in comune lo stesso mezzo di trasmissione: ogni trasmettitore serve un’area corrispondente circa a quella di una provincia italiana. Questo significa che, a differenza del satellite, anche il digitale potrà differenziarsi attraverso contenuti locali specifici per ogni territorio come le trasmissioni regionali per televisione. La Televisione Digitale Terrestre rappresenta l’evoluzione della televisione tradizionale. Grazie alla com- Il decoder Il Decoder o Set Top Box e’ una “scatola” che riceve il segnale proveniente da parabola, cavo o antenna terrestre, lo decodifica e invia al televisore il programma televisivo. Esistono due fasce di decoder, la prima raccoglie i tipi base e si comporta esclusivamente come adattatore del segnale; nella seconda fascia troviamo i box evoluti che aggiungono alla trasmissione funzioni multimediali, interattive e sono equipaggiati con modem e lettore di smart-card. Il telecomando incluso nel box interattivo della seconda fascia e’ composto da tasti che hanno un significato simbolico. Durante la fase di sviluppo di una applicazione interattiva e’ opportuno avere chiara la disposizione e la funzione degli eventi associati alla pressione di ogni tasto perchè la continuità delle scelte passate rappresenta il criterio di usabilità destinato all’utente. E’ opportuno associare la pressione di un tasto ad un significante che veicola un significato al televisore; concetto fondamentale in quanto, essendo la televisione digitale terrestre un nuovo media, è necessario renderlo facile da comprendere all’utente, evitando di modificare il “significato” di un tasto. I tasti che hanno un significato prestabilito sono: Tasto Back: è il tasto che permette, una volta lanciato un servizio interattivo, di tornare alla pagina precedente Tasti Freccia: con le frecce direzionali l’utente si muove in ogni schermata, seleziona la voce desidera- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 37 cutting edge FIGURA 5 Il format “T-Government” ta e conferma con il tasto “OK”. Tasto Ok: quando richiesto dal servizio interattivo, si utilizza questo tasto per confermare la selezione di un contenuto all’interno della pagina. Tasto Exit: si utilizza questo tasto per uscire dal servizio interattivo. Tasto Menu: con questo tasto si visualizza l’elenco delle opzioni di configurazione del decoder. Tasti Alfanumerici: alcuni servizi delle applicazioni interattive possono richiedere l’uso della tastiera alfanumerica, es. selezionare alcune voci del menu oppure scrivere i propri dati. Tasto Rosso: si utilizza per avviare il servizio interattivo e accedere all’interattività quando compare, nell’angolo in basso a sinistra dello schermo il segnale di TV interattiva. Tasti verde, giallo e blu: i tasti colorati consentono di accedere facilmente ad aree specifiche dell’applicazione. Tasto Txt: viene usato per ripristinare la normale dimensione del segnale video del canale riducendo la grafica del servizio interattivo a semplice sovrimpressione grafica. Interattività Da un certo punto di vista la televisione è sempre stata interattiva, se diamo a questo termine il significato di semplice interazione individuo-televisore e 38 se consideriamo interattivo il modo partecipativo con cui i telespettatori si tuffano nel flusso audiovisivo e ne estraggono alcuni frammenti, li correlano e li rielaborano in base al proprio bagaglio di conoscenze, attitudini, desideri ed emozioni. In senso proprio l’interazione è qualcosa di ben più complesso: consiste nella possibilità di reagire al segnale televisivo con un concreto segnale, trasmesso su un canale di ritorno. L’azione di feedback può essere veicolata sia da black boxes che si affiancano al televisore, sia da tecnologie extratelevisive: il telefono, il cellulare e Internet. Negli ultimi tempi lo sviluppo delle tecnologie in fibra ottica che consentono la piena bidirezionalità dei segnali, realizza la vera e propria interattività che consente ai telespettatori/utenti di costruire il proprio palinsesto e interagire con i contenuti audiovisivi. Per merito del digitale, dei canali di trasmissione bidirezionali e degli strumenti in grado di inviare i segnali oltre che a riceverli come i set top box, il flusso comunicativo della televisione un tempo monodirezionale ed asimmetrico, diviene bidirezionale e simmetrico. Ad ogni input dell’utente corrisponde un output del mezzo televisivo in tempo reale. L’interattività come paradigma nella comunicazione televisiva offre nuove esperienze di consumo, ma prima che come condizione tecnologica essa va intesa come processo sociale: essa si completa solo con una decisa azione di risposta dell’utente. Il fulcro dell’esperienza multimediale rimane il consumatore il quale comincia a sviluppare con il prodotto e con il fornitore di esso un rapporto basato non solo sul consumo ma anche sull’interazione. Gli operatori devono introdurre sistemi di agevolazione alla nuova offerta interattiva, guidando l’utente, “formandolo”, rendendo la tecnologia per quanto possibile trasparente e riducendo sempre di più le barriere all’accesso. “Keep it simple” e’ una regola d’oro. Il televisore diviene il punto d’accesso ad una serie di Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 cutting edge FIGURA 6 T-Informo servizi: questi possono accompagnare il flusso televisivo sovrapponendosi ad esso o divenire una vera e propria alternativa al tradizionale consumo televisivo come con i prodotti e i servizi on demand. Ai prodotti come li conosciamo e definiamo, si affiancheranno gradualmente programmi i cui contenuti saranno la risultante delle interazioni, degli scambi e delle relazioni generate nei media di convergenza. La strategia attuata in questo momento da parte della maggior parte dei broadcaster è quella di utilizzare l’interattività come elemento di rinforzo della televisione classica più che una vera interazione bidirezionale cui non si è ancora preparati in quanto questa richiede un forte mutamento nei comportamenti d’uso della tv. Approfondimento, personalizzazione e partecipazione sono i principali effetti dell’applicazione di funzioni interattive alla tradizionale programmazione di flusso, ma il “vecchio” flusso televisivo si è dimostrato fondamentale nel favorire il decollo dei nuovi servizi interattivi in quanto continua a costituire il fulcro della comunicazione televisiva. Esistono diverse tipologie di interattività: • Interattività locale. Non prevede un canale di ritorno, offre la possibilità di arricchire i servizi televisivi tradizionali con contenuti multimediali, permette la gestione del flusso televisivo in termini di scelta tra diverse inquadrature o tracce audio. Queste applicazioni sono definite ad “interattivi- tà locale” perché le informazioni o i servizi richiamate dall’utente provengono dal settop-box. Il nuovo teletext multimediale, le informazioni relative ai programmi che si stanno guardando, l’Electronic Programme Guide ovvero la guida all’offerta nel suo complesso caratterizzano la cosiddetta “enhanced television”. Sono le applicazioni interattive che arricchiscono il prodotto televisivo con contenitori, informazione, intrattenimento, quiz, film, fiction e contenuti aggiuntivi correlati al programma come testo, immagini fisse e video aggiuntivi. Ma anche PortalTV come il Teletext e l’EPG. Il teletext è traduzione dei contenuti tipici del teletext analogico (news, meteo, sport, palinsesto) con i vantaggi della multimedialità. L’Electronic Program Guide offre la posizione di tutti i canali sulla piattaforma permettendo di accedervi direttamente. Si tratta di servizi interattivi disponibili 24ore al giorno, non correlati al contenuto televisivo. Teletext ed EPG sono in genere fruibili durante la visione di ogni canale televisivo. • Interattività elementare. Aggiunge al precedente la possibilità per l’utente di interagire con il centro servizi consentendo l’introduzione di servizi bidirezionali come la pubblicità interattiva, l’home-banking e il tele-shopping. In questo ambito vanno ricollocati ulteriori servizi come i sondaggi, le scommesse, le votazioni, la partecipazione a giochi, pratiche che possono essere esercitate anche in combinazione con programmi televisivi. Questo profilo, a differenza del precedente, richiede la presenza di un canale di ritorno costituito dal doppino telefonico. La pubblicità interattiva può essere proposta in forma di spot, tele-promozione e banner. Rispetto a quella tradizionale consente al telespettatore di interagire attraverso il telecomando per chiedere ulteriori informazioni sul prodotto pubblicizzato, acquistarlo, partecipare ai concorsi ed ai giochi collegati all’inserzione. • Interattività evoluta. Offre la possibilità di accedere a servizi di tipo Internet, navigando su contenuti web e consente di effettuare vere e proprie transazioni commerciali tipiche degli attuali servizi Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 39 cutting edge di e-commerce. All’interno di questo ambito esistono due modelli di riferimento: uno a circuito chiuso e protetto, denominato “walled garden” in cui tutte le transazioni e gli altri servizi interattivi passano attraverso il broadcaster; il secondo aperto, con l’accesso anche a Internet direttamente dal decoder televisivo. Anche l’invio di videomessaggi, pratica inaugurata con il debutto dei terminali di telefonia mobile di terza generazione, rappresenta una forma di interattività evoluta. In genere le applicazioni ad interattività evoluta permettono l’accesso a servizi dedicati di tipo t-commerce (commercio elettronico tramite tv digitale, servizi informativi e transattivi che permettono all’utente si consultare orari dei treni, acquistare biglietti aerei o altri prodotti), t-government (servizi di pubblica utilità, applicazioni interattive per la pubblica amministrazione, la trasposizione nel digitale terrestre dei servizi di e-government), t-learning (formazione a distanza, con trasmissione di contenuti formativi e di aggiornamento professionale con possibilità di interagire con docenti, scaricare materiali di formazione, ottenere certificati di partecipazione al corso prescelto), t-gaming (giochi i cui contenuti abbiano un nesso con programmi o personaggi del canale con finalità di fidelizzare l’utente) • Interattività bi-direzionale. Ha a che vedere con i servizi caratterizzati da un’interattività simmetrica, vale a dire un’uguale trasporto di dati sulla rete di comunicazione in entrambe le direzioni sorgente-utente. I servizi ad alta interattività permettono una forte gestione dei contenuti da parte dei singoli utenti e presuppongono una frammentazione definitiva delle “audience”. Fanno parte di questa categoria la videocomunicazione e il video on demand attualmente fruibili unicamente sulle reti di tipo IP o sulle reti via cavo più avanzate. Se la prima opzione verso cui sembrano tendere i principali broadcaster pubblici e privati conserva il linguaggio della TV tradizionale introducendo i contenuti interattivi come semplici “aggiunte”, appendici ed estensioni che lasciano intatte le dinamiche produttive e le normali modalità di fruizione, l’ultima invece impone di pensare l’interattività già al momento della progettazione e della produzione accettando il rischio che la nuova iTV si trasformi nel superamento della televisione tradizionale in un “prodotto” dai confini imprecisi e indefiniti la cui dinamica appare continuamente “in progress”. I TV Format in RAI All’interno della RAI si è deciso di standardizzare le applicazioni interattive; il motivo principale è dovuto alla volontà di fidelizzare l’utenza televisiva. E’ apparso quindi logico fornire layer diversi in base al programma ed al tipo di applicazione da realizzare. Un layer o piu’ correttamente, un format è un’appli40 cazione interattiva che include elementi predefiniti in posizioni predefinite. Sono state individuate diverse tipologie di programmi e quindi tipi di “TV Format”. • Film. Il format denominato “film” é fortemente legato a questo genere, la visione è accompagnata da un’applicazione interattiva che offre informazioni sul film in onda. Lo standard permette l’inserimento di tre aree che devono essere: Trama, Regia e Cast. L’utente con il telecomando può muoversi all’interno di questo spazio e navigare l’intera applicazione. • Fiction. Questo layer è di tipo invasivo perché riduce il flusso video a 3⁄4 e le aree navigabili presenti all’interno non aumentano rispetto al format film .Le motivazioni che hanno spinto alla definizione di questo standard sono dovute principalmente all’importanza delle fiction ed alla loro durata. E’ probabile, infatti, che l’applicazione verrà utilizzata dal telespettatore per ogni puntata della serie, per questo motivo è prestata particolare attenzione al layout grafico che deve risultare gradevole ed accessibile nello stesso momento. • Telefilm. Per i telefilm vengono rispettati gli stessi principi delle fiction poiché i prodotti sono affini e la tipologia di pubblico è la stessa. • Varietà e reality. Questi TV Format sono dedicati alle trasmissioni televisive a forte impatto con il pubblico. L’applicazione interattiva è presente esclusivamente insieme alla trasmissione e le componenti con cui è realizzata sono state studiate per intrattenere e divertire il pubblico con momenti di gioco condivisi con la diretta televisiva. Oltre alla possibilità di poter votare lo spettatore può interagire con il pubblico che sta seguendo il programma tramite un forum interattivo. • Eventi. Questo tipo di format è caratterizzato da una forte personalizzazione in base all’evento che si intende promuovere. A causa dei forti adattamenti realizzati ad hoc per ogni applicazione interattiva non esiste un format delineato. • Pubblicità. La pubblicità digitale si differenzia in base alla notorietà della marca e allo spot interattivo che consente una comunicazione bidirezionale tra spettatore ed inserzionista. Il Direct Response TV ovvero la pubblicità come stimolo all’azione e’ la teoria secondo cui le applicazioni di interactive advertising aumentano la brand awareness e l’advertising awareness, creando una propensione all’acquisto più forte di quella generata dai classici spot televisivi. Gli inserzionisti pubblicitari hanno l’opportunità di usare le loro campagne televisive in modo più dinamico e coinvolgente rispetto a prima in quanto sarà possibile permettere agli utenti di richiedere una brochure, ricevere un campione di prodotto omaggio ed avere un’espe- Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 cutting edge rienza di brand prolungata. • TV-Games. Sono dei format non legati a programmi televisivi in particolare; si contraddistinguono per la loro alta interattività e contengono piccoli videogiochi per intrattenere il telespettatore. Fruibili in ogni momento sono pensati come utile palliativo alla pubblicità e ad evitare il fenomeno dello zapping. • T-Government: I format di T-Government, come quello di Eventi, sono altamente personalizzabili. Le sezioni al loro interno possono variare considerevolmente in base alla regione in cui ci si trova. Ciò che accomuna queste applicazioni interattive sono i servizi che le Pubbliche Amministrazioni offrono al pubblico, dal semplice servizio di news alla possibilità di controllare lo stato del traffico in città. Un case-study: T-Informo RAI Nuovi Media ha realizzato T-Informo, un servizio di T-Government che permette ai telespettatori di interagire con la Pubblica Amministrazione nella maniera meno burocratica e quindi più veloce possibile e di cui garantisce un aggiornamento continuo insieme al Comune di Roma, la Provincia e la Regione Lazio. I servizi accessibili sono di diverso tipo: è possibile avere informazioni sulla temperatura e sulle previsioni meteo, accedere ad un bollettino sul traffico, calcolare un percorso stradale all’interno di Roma. Si può scegliere anche di entrare nella sezione relativa al turismo e alla cultura in cui si trovano itinerari per un’escursione oppure ricercare biblioteche e musei nel Lazio. Per la realizzazione di T-Informo sono stati coinvolti nel progetto vari Enti tra cui l’Atac che, nel caso del servizio per il calcolo del percorso, ha fornito le informazioni sulle mappe utilizzate dalla piattaforma digitale terrestre Rai. T-Informo oltre a rivestire il ruolo di portale digitale informativo con una pagina relativa all’informazione in ogni sezione del progetto, dedica uno spazio interattivo ad una componente sociale molto a cuore del cittadino: la sanità. Dall’applicazione interattiva si può infatti usufruire dei motori di ricerca interni per trovare una ASL, oppure consultare i servizi ed i reparti proposti all’interno di un ospedale. Durante lo sviluppo dell’applicazione la RAI è stata affiancata dal gruppo di lavoro del Professore Alberto Marinelli del Dipartimento di Scienze della Comunicazione e Sociologia dell’Università “La Sapienza” di Roma. L’impegno reciproco si è proteso per garantire l’usabilità applicativa in modo che l’utilizzo di T-Informo sia facile per gli utenti. Lo sforzo si è concentrato e poi distribuito egualmente in tutte le sezioni; il risultato è stato la creazione di pagine e motori di ricerca standard che permettessero la navigazione all’interno del progetto in modo coerente. Questa serie di servizi sono pensati per ridurre il Digital Divide della popolazione over 60 che è spettatrice prettamente televisiva. Al contrario dell’internet-generation ormai esclusivo uso dei nipoti. Se è quindi la televisione il media preferito dalle persone anziane, con T-Informo si è voluto proporre una soluzione vicina a questa fascia di popolazione che potesse informarli od addirittura aiutarli in caso di bisogno. Pur essendo pensata per una fascia d’età alta, l’applicazione presenta dei servizi anche per i giovani disoccupati in cerca di lavoro o corsi finanziati dalla Regione Lazio. Applicando questi concetti il 7 novembre 2006 l’applicazione T-Informo ha vinto il primo riconoscimento per la sezione “servizi interattivi” del premio nazionale ‘La PA che si vede - la tv che parla con te’, organizzato dal Formez in collaborazione con l’Associazione italiana della Comunicazione Pubblica e Istituzionale. Conclusione Un Format iTV offre la possibilità di avere elementi predefiniti: in termine di design grafico, navigazione ed usabilità. Questo permette di identificare velocemente il tipo di applicazione interattiva da sviluppare e sapere con largo anticipo i tempi di sviluppo. Un ringraziando le persone che hanno contribuito alla realizzazione di questo articolo. Riferimenti • Raccomandazioni per le interfacce dei servizi interattivi della televisione digitale. Fondazione Ugo Bordoni. • BBC eTV Formats January 2004 • T-Informo su http://www.mediazone.info Note Biografiche Fabio Ramacciani ha maturato la sua esperienza nello sviluppo di applicazioni per la televisione digitale terrestre in NetCat.it. Sviluppa in Java e C++ per RAI Nuovi Media ed e’ il Responsabile Tecnico del progetto T-Informo. Nel 2006 e’ stato chiamato dalla facolta’ di Scienze della Comunicazione della Sapienza di Roma come docente nel corso di “Progettazione contenuti e servizi per tv digitale”. E’ socio dell’associazione SS. Pietro e Paolo in Vaticano (Ex-Guardia Palatina d’Onore). Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 41 solutions Tips & Tricks per GNU/Linux Una collezione di suggerimenti e trucchi per il vostro sistema GNU/Linux Ü di Andrew Min Questo articolo raccoglie alcuni trucchi e suggerimenti su: 1. Come creare uno stick GNU/Linux live con SLAX (Andrew Min) 2. Come utilizzare terminali “stile Quake” su GNU/Linux (Andrew Min) 3. Come catturare screenshot video con Scrot (Gary Richmond) 4. Come effettuare il backup del Master Boot Record (MBR) (Gary Richmond) 1. Come creare uno stick USB GNU/ Linux live con SLAX Uno più grossi ostacoli all’adozione di GNU/ Linux è il fatto che molti non lo hanno mai provato. E qui entra in gioco SLAX. Cos’è SLAX? Vi chiederete. SLAX è una distribuzione GNU/Linux basata su KDE concepita per essere eseguita come sistema operativo GNU/Linux “live”. In altri termini, cancellerà automaticamente ogni sua traccia dal computer su cui è in esecuzione una volta che si spegne la macchina. E l’aspetto più notevole è che contiene tonnellate di software utili, compreso KDE, NTFS-3G, tool wireless, CUPS, giochi, strumenti di grafica, applicazioni multimediali, tool di sviluppo, la suite KOffice e molto altro. Il che la rende perfetta per mostrare la potenza di GNU/ Linux ai propri amici senza interferire nelle impostazioni dei loro sistemi. Inserire SLAX su un drive USB Benché SLAX possa non essere utilizzato come ordinario sistema operativo, è possibile ospitarlo in un dispositivo esterno, come un drive USB, e portarsi dietro un sistema GNU/Linux “live”. Ci sono tre vantaggi nell’utilizzare un drive USB rispetto a un più tradizionale CD: è più veloce, permette di aggiungere al volo file e programmi, e (di solito) ha più capacità di memorizzazione. Ci sono diversi modi per fare ciò, ma il modo più semplice è utilizzare lo script make_disk Per prima cosa, si deve formattare il drive utilizzando un programma come QtParted o GParted (utilizzare FAT32 su Windows e ext2 su GNU/Linux). Bisogna poi scaricare l’immagine ISO standard di SLAX da [1] ed estrarla con un programma come ISO Master. Se state utilizzando un sistema GNU/ Linux, utilizzando il comando cd, andate Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 43 solutions FIGURA 1 La console di NightFall (una mod per Half-Life 2) nella directory in cui avete estratto l’immagine ISO e eseguite ./make_disk.sh /dev/sda1 sostituendo /dev/sda1 con il nome del proprio drive (potete individuare il nome eseguendo fdisk -l come utente root). Se state utilizzando Windows, eseguite make_disk.bat E: sostituendo E: con il nome del drive. Ora eseguite il reboot del computer e modificate dal Setup del BIOS l’ordine di boot della macchina (consultate il manuale del vostro computer o leggete [2]) per far sì che il drive USB (o il disco removibile) sia il primo della lista di boot (con la versione alfa di SLAX 6 bisogna utilizzare il metodo descritto in [3]) Aggiunta dei programmi Benché la versione di default di SLAX sia dotata di molti strumenti, è sempre utile essere in grado di aggiungere e rimuovere dei programmi. Ecco perché SLAX supporta i moduli, disponibili dalla pagina 44 dei moduli SLAX [4]. Da qui si possono scaricare programmi come OpenOffice.org, giochi, il browser Firefox e anche ambienti desktop come Xfce o Gnome. Effettuato il download di un programma, bisogna copiarlo nella cartella modules dello stick USB. Al successivo avvio di SLAX, cercate il programma nel K Menu. Se avete necessità di creare un vostro programma, utilizzate un tool come rpm2mo o deb2mo per convertire un pacchetto esistente nel formato SLAX. SLAX è un ottimo sistema operativo. E abbiamo appena accennato a ciò che è in grado di fare! Si può creare un proprio SLAX (si veda http: //myslax.bonsonno.org/), creare dei propri moduli (http://www.slax.org/doc_modules.php) e anche installare SLAX su disco rigido (http://tinyurl.com/ 2weeks). E soprattutto, ora avete un sistema GNU/ Linux da mostrare ai vostri amici. 2. Come utilizzare terminali “stile Quake” su GNU/Linux Sappiamo tutto su quanto sia potente il terminale GNU/Linux. Tuttavia, è una pena dover lanciare un Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 solutions FIGURA 2 Kuake emulatore di terminale come Konsole o gnome-terminal, attendere alcuni secondi che si carichi, e poi dover premere Alt-Tab per passare a questa finestra. Non sarebbe più semplice avere una finestra terminale che si nasconde e si mostra automaticamente con clic di un pulsante? Andrò a descrivere tre differente emulatori di terminale che fanno proprio questo. Quake è un gioco “sparatutto” molto diffuso creato dalla id Software. Nel gioco vi è un terminal accessibile premendo il tasto “~”. Questa finestra terminale viene utilizzata per modificare le impostazioni e le variabili, per mostrare i log e per immettere comandi e trucchi (per ulteriori informazioni si legga l’articolo Wikipedia [5]). Quake non è il solo programma che ha questa funzionalità: Doom, Half-Life, Dark Engine, Lithtech e diversi altri giochi e engine di gioco utilizzano simili console. Kuake: un terminale alla Quake per KDE Molto tempo fa in un IDE molto lontano ... D’accor- do, non era né molto tempo fa (a meno che Gennaio 2003 non sia realmente “remoto”) né così tanto lontano. Allora, non tanto tempo in un IDE non così lontano, è nato Kuake. Martin Galpin ebbe la brillante idea di creare un front-end stile Quake per Konsole. L’idea era di poter premere un “hotkey” (all’epoca, Ctrl-K) e una finestra Konsole sarebbe apparsa scivolando dall’alto dello schermo. Si può ridimensionarla, riallinearla e fare molte altre cose. Quando apparve, Kuake ebbe un grosso successo (sfortunatamente, lo sviluppo sembra essersi interrotto dopo il rilascio di una versione 0.3 “unstable” nel Marzo 2004). Anche se Kuake non è stato aggiornato di recente, si può comunque installarlo. Il sito offre un archivio tar.gz dei sorgenti ed un pacchetto Debian è disponibile con il comando deb ftp://ftp.berlios.de/pub/kazit/debs Ubuntu ha un pacchetto kuake nel repository Universe e molte altre distribuzioni dispongono di analoghi pacchetti. La combinazione di tasti è Alt+”~” (disponibile dopo aver lanciato Kuake). Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 45 solutions FIGURA 3 YaKuake anche Tilda decollò, raggiungendo oltre 12.000 download in 3 anni. Tilda fornisce un archivio dei sorgenti tar.gz, ma molte distribuzioni ne forniscono il package. Una volta installato, bisogna eseguire tilda -C per configurarlo, per poi eseguire Tilda con il comando tilda. Le opzioni sono disponibili con tilda -h è anche disponibile una funzionalità a schede: i tasti di accesso sono Ctrl+Shift+T (nuova scheda), YaKuake Nel frattempo, in un’altra parte della galassia, un programmatore francese di nome Francois Chazal stava lavorando ad una versione fork di Kuake nota come YaKuake (“Yet Another Kuake”, emulatore di terminale per KDE). YaKuake introdusse diverse caratteristiche, compresa la rinominazione inline delle schede, un miglior supporto per Xinerama e le skin. Come per il suo predecessore, la popolarità di YaKuake salì alle stelle, raggiungendo oltre 25.000 download e meritandosi ben cinque stelle dal famoso repository di software Softpedia [6]. YaKuake è disponibile come archivio dei sorgenti tar.bz2. Molte distribuzioni lo offrono come package nei propri repository. La combinazine “hotkey” per lanciare YaKuake (quando è in esecuzione) è per default F12, ma si può modificare a proprio piacimento (io stesso preferisco la combinazione di default Alt+”~” di Kuake). Ctrl+Shift+PageUp (scheda successiva), Ctrl+Shift+PageDown (scheda precedente) e Alt+n (con n che va da 1 a 10). Riferimenti SLAX [1] Download di SLAX - http://www.slax.org/ download.php [2] http://tinyurl.com/b4tc7 [3] Souzione con SLAX 6 - http://slax.linux-live.org/ forum/viewtopic.php?p=75287#75287 [4] Moduli SLAX - http://www.slax.org/modules.php Terminali Quake-style [5] http://en.wikipedia.org/wiki/Quake-style_console [6] http://www.softpedia.com/reviews/linux/ YaKuake-Review-30782.shtml Versione italiana pubblicata su licenza di The Open Mind Company Tilda: un terminale alla Quake per Gnome Gli utenti KDE non sono stati i soli a divertirsi con i terminali alla Quake. Nel Dicembre 2004, Tristan Sloughter (noto anche come “kungfooguru”) ha rilasciato Tilda (chiamato così perché “tilde”, il simbolo “~” che spesso è il tasto hotkey dei terminali alla Quake, era già stato utilizzato), un emulatore di terminale GTK+ Quake-style. Come Kuake e YaKuake, 46 Login Internet Expert n.65 Luglio/Agosto/Settembre/Ottobre 2007 Note Biografiche Andrew Min è un giornalista, amante di Linux Kubuntu, che collabora con diverse riviste online come Free Software Magazine, Full Circle Magazine e Mashable.com IN VETRINA Digital Video and Audio Broadcasting Technology. A Practical Engineering Guide, 2. ed. di W. Fischer Springer 586 pp, 483 ill. - euro 105,00 ISBN 9783540763574 The Family of International Standards for Digital Video Broadcasting,2. ed. di U. Reimers Springer 408 pp, 261 ill. - euro 85,00 ISBN 9783540435457 Understanding Digital Television: IPTV and Internet Video: An Introduction to DVB Systems with Satellite & Cable TV Distribution di L. Lundstrom Focal Press 316 pp - euro 48,95 ISBN 9780240809069 Expanding the Reach of Television Broadcasting di W. Simpson e H. Greenfield Focal press 240 pp - euro 45,00 ISBN 9780240809540 Smart Cards, Tokens, Security and Applications Mobile Response di K. Mayes e K. Konstantinos Springer 387 pp, 128 illus. - euro 73,00 ISBN 9780387721972 >> 49 DVB First International Workshop on Mobile Information Technology, for Emergency Response, Mobile Response 2007 di Sankt Augustin Springer 163 pp - euro 45,00 ISBN 9783540756675 Frequency Assignment and Network Planning for Digital Terrestrial Broadcasting Systems di R. Beutler Springer 328 pp - euro 99.50 ISBN 9781402078729 Mobile TV, DVB-H, DMB 3G Systems and Rich Media Applications di A. Kumar Focal Press 508 pp - euro 65,00 ISBN 9780240809465 Mobile Phone Programming and its Application to Wireless Networking di F. Fitzeke F. Reichert Springer 473 pp - euro 74,50 ISBN 9781402059681 Login > n.65 luglio/agosto/settembre/ottobre 2007 LOGIN 65 Linux Annoyances for Geeks. Getting the Most Flexible System in the World Just the Way You Want It di M. Jang O’ Reilly 502 pp - euro 35,50 ISBN 9780596008017 Beginning Fedora: In Tasca Linux. From Novice to Professional Book/DVD Package di S. Sharma et al. Apress 519 pp - euro 45,50 ISBN 9781590598559 Codice e comandi essenziali di S. Granneman Pearson Italai 400 pp - euro 12,00 ISBN 9788871924045 Scrivi a [email protected] specificando nell’oggetto della e-mail: IN VETRINA Login n. 65 oppure inviaci il coupon al numero di fax 0587/732232 Potrai acquistare i libri qui riportati con uno SCONTO ECCEZIONALE del 10% anche se acquisti solo un libro oppure del 20% se acquisti 3 libri LOGIN 65 OFFERTE ABBONAMENTI Estate 2007 RIVISTE CARTACEE 1 anno COMPUTER PROGRAMMING DEV VISUAL BASIC JOURNAL LOGIN JAVA JOURNAL CP+DEV+VBJ+LOGIN+JJ € 55.00 € 55.00 € 45.00 € 45.00 € 43.00 2 anni � € 100.00 � � € 100.00 � � € 80.00 � � € 80.00 � � € 75.00 � € 196.00 � € 380.00 � RIVISTE WEB Per l’abbonamento in spedizione con posta prioritaria aggiungere i seguenti importi: durata 1 anno: � + € 18.00 per CP � + € 18.00 per DEV � + € 10.00 per VBJ � + € 10.00 per LOGIN � + € 10.00 per JJ durata 2 anni: � + € 36.00 per CP � + € 36.00 per DEV � + € 20.00 per VBJ � + € 20.00 per LOGIN � + € 20.00 per JJ Totale ordine € _______________________ 1 anno (IVA INCLUSA) € 45.00 � € 45.00 � € 35.00 � € 35.00 � € 35.00 � CP web compreso archivio DEV web compreso archivio VBJ web compreso archivio LOGIN web compreso archivio JJ web compreso archivio € 60.00 € 85.00 € 115.00 € 140.00 2 web a scelta compreso archivio 3 web a scelta compreso archivio 4 web a scelta compreso archivio 5 web compreso archivio � � � � INDIRIZZO DI SPEDIZIONE Nome/Società __________________________________________________________ Codice Fiscale (obbligatorio) ________________________________________________ Indirizzo _______________________________________________________________ CAP _____________ Città ___________________________________ Prov. ______ Telefono ____________________________ Fax ______________________________ E-Mail ________________________________@_______________________________ Codice Cliente __________________________________________________________ • OFFERTA SPECIALE: Con soli 20€ di differenza avrai la possibilità di accedere per un intero anno anche alla versione online (compreso archivio) della rivista a cui ti sei abbonato INDIRIZZO DI FATTURAZIONE RIVISTE CARTACEE + WEB Nome e Cognome _______________________________________________________ 1 anno (IVA INCLUSA) COMPUTER PROGRAMMING DEV VISUAL BASIC JOURNAL LOGIN JAVA JOURNAL CP+DEV+VBJ+LOGIN+JJ € 75.00 € 75.00 € 65.00 € 65.00 € 63.00 � � � � � € 296.00 � • I prezzi degli abbonamenti Web sono conprensivi dell’ IVA al 20% • I prezzi degli abbonamenti per l’estero sono maggiorati di spese di spedizione. • Gli abbonamenti decorrono dal primo numero raggiungibile. Per attivazioni retroattive contattaci al numero 0587/736460 o invia una e-mail all’indirizzo: [email protected] (solo per riviste web) Ditta __________________________________________________________________ Indirizzo _______________________________________________________________ CAP ____________ Città _________________________________ Prov. _________ P.IVA _________________________________________________________________ E-Mail per invio fattura _________________________ @ ________________________ MODALITA’ DI PAGAMENTO � Allego fotocopia del Bonifico Bancario effettuato sul C/C 000000014804 CAB 25200 ABI 01030 Cin “A” - Monte dei Paschi di Siena - Agenzia di Perignano � Allego fotocopia della ricevuta del versamento sul C/C Postale N.14291561 intestato a: “Gruppo Editoriale Infomedia S.r.l. - Ponsacco” � Allego assegno bancario intestato a: “Gruppo Editoriale Infomedia S.r.l.” NON TRASFERIBILE � Contrassegno (+ € 11.00 contributo spese postali) PRIVACY � Autorizzo l’addebito dell’importo di € _____________________ sulla mia CARTASI’/VISA Con la presente si autorizza al trattamento dei dati personali ai sensi delle vigenti norme sulla privacy N. ___ ___ ___ ___ ___ ___ ___ ___ Scad. ___ ___ / ___ ___ (mm/aa) ___ ___ ___ ___ ___ ___ ___ ___ Codice di sicurezza “CV2” ___ ___ ___ Nome del Titolare ____________________________________________________ SI , mi voglio iscrivere gratuitamente alla newsletter Infomedia che mi tiene aggiornato sui prossimi argomenti delle mie riviste di programmazione e mi informa delle offerte, le nuove uscite e le prossime pubblicazioni. Questo è il mio indirizzo di posta elettronica: ______________________________@____________________________ Data di nascita ____________________________________________________ Firma del Titolare ____________________________________________________ � Collegati al sito www.infomedia.it dove potrai effettuare il pagamento con carta di credito in modalità sicura (banca SELLA) Posso annullare la mia iscrizione in qualsiasi momento alla pagina: www.infomedia.it/newsletter.php Garanzia di riservatezza - Gruppo Editoriale Infomedia garantisce la massima riservatezza dei dati da lei forniti e la possibilità di richiederne gratuitamente la rettifica o la cancellazione scrivendo a: Responsabile Dati - Gruppo Editoriale Infomedia Srl - Via Valdera P. 116 - 56038 Ponsacco (PI). Le informazioni custodite nel nostro archivio elettronico verranno trattate in conformità alla legge 196/03 sulla tutela dati personali. L’IVA sul prezzo dell’abbonamento cartaceo è assolta dall’Editore e non sussiste l’obbligo di emissione della fattura, ai sensi del D.M. 9 aprile 1993, art.1, comma 5; pertanto, ai fini contabili, farà fede la sola ricevuta di pagamento; perciò la fattura verrà emessa solo se esplicitamente richiesta al momento dell’ordine. Lei può dedurre il costo dell’abbonamento dal reddito d’impresa e dai redditi derivanti dall’esercizio di arti e professioni (artt. 54 e 56 del TUIR) GRUPPO EDITORIALE INFOMEDIA S.R.L. Via Valdera P. 116 - 56038 Ponsacco (PI) - Tel. 0587 736460 - Fax 0587 732232 www.infomedia.it - [email protected]