Introduzione “Quick and dirty way” è un modo di dire (di fare!) americano che all'incirca vale: fare qualcosa nel modo più veloce possibile, purché funzioni.
È il metodo che abbiamo adottato nella nostra scuola quando è stato deciso di affiancare alla pagina Web anche una pagina WAP e avevamo un pomeriggio domenicale a disposizione per realizzarla.
WAP (Wireless Application Protocol - protocollo per trasmissioni senza fili rivolto alle applicazioni) è una modalità di trasmissione di testo, immagini e altro per i telefonini abilitati a questo servizio.
Il nostro obiettivo è quello di pubblicare tempestivamente informazioni di valore contingente (qual è l'orario delle iscrizioni? se c'è sciopero degli insegnanti, la mensa funziona?) con la più ampia accessibilità consentita dal telefonino.
Qui non intendiamo offrire un corso WAP, ma semplicemente descrivere i passaggi compiuti dal concepimento dell'idea alla sua realizzazione.

Conoscenze iniziali e strumenti

WAP utilizza un linguaggio WML (wireless markup language) che ha qualche analogia con l' HTML (i puristi storceranno la bocca: in realtà appartiene alla famiglia XML); ma qui stiamo utilizzando il metodo “quick and dirty” ed è dalla (scarsa) conoscenza dell'HTML che vogliamo ricavare le informazioni per costruire una pagina WML di cui sappiamo ancora meno.
Una pagina WML è pensata per essere “letta” non da un browser, ma da un telefonino; poiché non è conveniente, durante lo sviluppo, stare attaccati al telefono, ci sono Kit che lo simulano sul PC, con la possibilità di visualizzare le interfacce di modelli anche commerciali.
Avevamo in precedenza scaricato (e dimenticato in un angolo dell' HD) da http://developer.openwave.com la versione 5.0 del loro SDK (un autoestraente da 23MB) e l'abbiamo installato senza indugi.
Abbiamo anche recuperato, dalla massa del materiale scaricato, un file che promette di scrivere “Hello World!” (e cos'altro, se no?!) sul display del telefonino virtuale.
Lo carichiamo nel programma Openwave SDK, poi menu File > Preview (oppure CTRL + R) ed ecco, sul display, il messaggio di saluto al mondo.


Esempio 1

Nella finestra a sinistra c'è il listato WML della pagina, a destra il display del telefonino (uno “generico”, ma è possibile impostare anche un Siemens S45: menu Simulator > Select Device…), in basso l'indirizzo del file visualizzato: file://f:/Temp/Prove_Wap/Hello_World.wml.

Analizziamo un attimo il listato WML:
a parte le due righe iniziali, che dichiarano il tipo di documento, troviamo

<wml>: analogo alla dichiarazione <html> di una pagina Web
<card> e il corrispondente </card>: tag specifici del wml che racchiudono l'informazione presentata in una schermata del telefonino
<p> e </p>: come in HTML
Hello World!: Il testo da visualizzare

Ulteriori informazioni “raccattate in giro” dicono che i tag vanno sempre chiusi (</p> NON è opzionale), che il WML è “case sensitive” (cioè tiene conto delle maiuscole) e che il listato deve essere “corretto” altrimenti, sul telefonino, si ottiene un errore e non si vede nulla, a differenza dei browser attuali che sono di manica larga e tentano comunque di interpretare la pagina.
Con queste informazioni siamo in grado di scrivere una pagina di testo, ma non sappiamo come “linkare” altre pagine.

Nel vivo del lavoro

Abbiamo cercato e trovato un'altra pagina di esempio, contenente un elenco in guisa di menu e, parassitandola, abbiamo costruito un listato che, caricato sul telefonino (CRTL+R), ha prodotto il seguente display


Esempio 2


Come in una pagina HTML, le parole sottolineate sono dei link; per visualizzare il testo fuori schermo si utilizzano i tasti cursore del telefonino.

Vediamo il nuovo listato

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//PHONE.COM//DTD WML 1.3//EN"
"http://www.phone.com/dtd/wml13.dtd">
<!-- WML file created by Openwave SDK -->
<wml>
<card id="card1" title="Circolo 3  Firenze">
<p>
10-21 gennaio<br/>
<anchor title="Iscrizioni"><go href="#isc"/>
Iscrizioni alla prima  elementare e all'infanzia<br/>
</anchor>
15-17-18 gennaio<br/>
<anchor title="Visita"><go href="#vis"/>
Visita scuola dell'Infanzia<br/>
</anchor>
9 gennaio<br/>
<anchor title="Incontro"><go href="#inc1"/>
Dirigente incontra genitori elementare Don Minzoni<br/>
</anchor>
8 gennaio <br/>
<anchor title="Incontro"><go href="#inc2"/>
Dirigente incontra genitori elementare Cadorna<br/>
</anchor>
</p>
</card>
<card id="isc" title="Iscrizioni">
<p>
Iscrizioni alla prima classe elementare e alla scuola
 dell'infanzia<br/>
Dal 10 al 21 gennaio 2002 sono aperte le iscrizioni  
per l'anno scolastico 2002/2003,  
presso la segreteria della Direzione Didattica,
via Reginaldo Giuliani 180, con il seguente orario<br/>
lunedi-sabato    8,30  11,30<br/>
mercoledì 14,30 16,30 
<br/>
<anchor title="Menu"><go href="#card1"/>
Ritorna al menu
</anchor>
</p>
</card>
<card id="vis" title="Visita">
<p>
È possibile visitare la Scuola dell'Infanzia 
con il seguente orario<br/>
martedi 15 gennaio   10,00  11,00<br/> 
mercoledi 17 gennaio  10,30 11,30<br/>
giovedi 18 gennaio   15,00  16,00<br/> 

<anchor title="Menu"><go href="#card1"/>
ritorna al menu
</anchor>
</p>
</card>
<card id="inc1" title="Incontro">
<p>
Il D.S. incontra i genitori degli alunni classi prime
anno scolastico 2002/2003 presso la Scuola Don Minzoni, 
il 9 gennaio alle 17.00, 
per illustrare l'organizzazione della scuola.<br/>
<anchor title="Menu"><go href="#card1"/>
ritorna al menu
</anchor>
</p>
</card>
<card id="inc2" title="Incontro">
<p>
Il D.S. Incontra i genitori degli alunni classi prime
anno scolastico 2002/2003 presso la Scuola Cadorna,
l'8 gennaio alle 17.00, 
per illustrare l'organizzazione della scuola.<br/>
<anchor title="Menu"><go href="#card1"/>
ritorna al menu
</anchor>
</p>
</card>
</wml>
il tag <card> si è arricchito di due attributi:
  1. id="card1": corrisponde in HTML a <a name=”riferimento”> e serve come punto di riferimento in una pagina per i link
  2. title="Circolo 3 Firenze": identico all'HTML
<br/>: i tag che non hanno un corrispondente tag di chiusura sono scritti con “/” finale all'interno delle parentesi

<anchor title="Iscrizioni">: i telefonini, a seconda del modello, hanno vari metodi di interazione con l'utente; un metodo, ad esempio, è quello di visualizzare bottoni virtuali programmabili; con il telefonino virtuale che stiamo utilizzando il tag <anchor title="Iscrizioni"> produce sul display un bottone virtuale con etichetta “Iscrizioni”, che ne sintetizza la funzione. Il bottone virtuale, come ben sanno tutti i possessori di telefonini, è azionabile dal sottostante tasto reale. La funzione che verrà realizzata è definita dal tag seguente.

<go href="#isc"/>: analogo ad <a href=”#link> dell'HTML (link “interno” in HTML) ma, a differenza di quest'ultimo, nel nostro caso, pur avendo l'informazione contenuta in un solo file, questa viene presentata in più schermate, perchéi singoli documenti (iscrizioni, visita e incontri) sono delimitati dai tag <card> </card> che, come già detto, racchiudono l'informazione da presentare in una sola schermata del telefonino. Questo collegamento punta perciò alla card, che ha id=”isc” e termina con / perché non ha un corrispondente tag di chiusura.

In questo modo, ripetendo blocchi di listato, è stato costruito un menu che porta alle varie pagine (iscrizioni, ecc.); le singole pagine iniziano allora con <card id=”riferimento”> dove “riferimento” corrisponde al termine utilizzato nel tag <go href=”#riferimento”> corrispondente.
Al termine di ogni pagina ci sono un link e un bottone che riportano alla pagina iniziale (menu)
<anchor title="Menu"><go href="#card1"/>
ritorna al menu
</anchor>

La figura seguente mostra la pagina delle iscrizioni con il collegamento alla pagina menu e il bottone corrispondente.


Esempio 3

Soddisfatti del risultato conseguito, abbiamo trasferito il file sui due server che distribuiscono la pagina Web del nostro Circolo, ci siamo collegati con il simulatore ma, sorpresa, abbiamo ottenuto un messaggio di errore.


Esempio 4

Abbiamo analizzato le righe iniziali del testo riportato nella “Finestra di Risposta HTTP” del simulatore per i due server:

Server: Apache/1.3.12 (Unix) AuthMySQL/2.20 PHP/4.0.2
Content-Type: text/plain
Server: Microsoft-IIS/2.0
Content-Type: application/octet-stream
I due server sono diversi: uno è Apache sotto Unix, l'altro è Microsoft IIS/2.0, ma entrambi “distribuiscono” (voce Content-Type) la pagina in forma errata: il primo come text/plain, il secondo come application/octet-stream invece che, correttamente, come wml.

Una veloce ricerca con il motore Google ha portato alla pagina: http://netwinsite.com/webmail/wap.htm in cui è spiegato l'arcano.
Occorre fornire al server Web la giusta indicazione di come trattare il dato; nel server Apache aggiungendo delle label nel file mime.types, nel server Microsoft aggiungendo alcune chiavi di registro.

Sono partiti immediatamente due mail, all'indirizzo degli amministratori dei server, con la preghiera di fare le modifiche necessarie.

Epilogo

Il lavoro che ci eravamo prefissi inizialmente si è concluso e anche il pomeriggio è terminato, ma le possibilità del WAP vanno ben oltre quanto descritto e rimane molto da imparare e fare.

Sperimentando con il simulatore e “modelli” di telefoni differenti, ci si rende conto della necessità di testi ultrastringati e di etichette per i bottoni abbreviate (massimo 5 caratteri?) per adattarsi ai display più piccoli.
I file non devono essere più grossi di circa 1K (abbiamo letto distrattamente il numero e, non trovando più il riferimento, non siamo sicuri del valore preciso) perché, anche se la presentazione avviene su più schermate, il file viene caricato interamente sulla memoria del telefonino; occorre quindi “spezzare” l'informazione su più file.
Può essere necessario caricare delle immagini: la codifica è differente da quella del Web.
È possibile aggiungere script e interattività con l'utente.

L'elenco - e altro ancora - è un eccellente programma di ricerca e studio per la prossima estate, quando gli impegni scolastici renderanno disponibile un po' più di tempo che una semplice domenica pomeriggio.

Tutte le immagini sono riprodotte per concessione di "Openwave Systems Inc."
"Openwave, the Openwave logo, Openwave SDK, Openwave SDK Universal Edition, Openwave SDK WAP Edition" sono marchi registrati di "Openwave Systems Inc." Tutti i diritti sono riservati.

18 gennaio 2002