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]