Una delle esigenze attualmente più sentite dagli sviluppatori web è progettare i propri siti in modo compatibile con gli innumerevoli dispositivi mobili che il mercato offre. Per gli utilizzatori del web server Apache esiste un progetto open source, denominato AMF (Apache Mobile Filter), che permette in modo semplice di individuare le caratteristiche del dispositivo che sta inviando richieste HTTP. Le informazioni raccolte risulteranno disponibili al programmatore come variabili d'ambiente.
L'idea, sviluppata da Idel Fuschini, consiste nel mettere in comunicazione Apache con un Device Description Repository, ovvero un archivio di informazioni sulle funzionalità e caratteristiche di moltissimi dispositivi quali smart phone, tablet, console.
Alcuni dei repository utilizzabili sono WURFL, DetectRight e 51Degrees. Potremo così conoscere, ad esempio, la risoluzione dello schermo usato dal visitatore o se il suo browser supporta Ajax: in altri termini tutto ciò che ci consenta di adattarci alle sue peculiarità e rendere positiva l'esperienza di navigazione delle nostre pagine. In più il software consente il ridimensionamento automatico delle immagini e la ridirezione verso contenuti appositamente predisposti.
AMF richiede mod_perl 2, tramite tale modulo accede infatti alle API di Apache. Esso è costituito da una dozzina di componenti tra cui i "detection filters" rivestono il ruolo principale. Le informazioni raccolte (capabilities) da questi ultimi vengono poi passate ad altri moduli. Per non sovraccaricare il server, AMF implementa inoltre un meccanismo di caching. In realtà i sistemi sono due: uno utilizza il filesystem della macchina per memorizzare i dati, il secondo, dedicato ad architetture più complesse, si basa su memcached.
Di seguito vedremo come installare e configurare questo software open source, prendendo come riferimento un server Linux con sistema operativo Fedora e web server Apache 2.2.
Installazione
Come già accennato vi sono alcuni prerequisiti che dobbiamo rispettare. Sul nostro sistema dovranno essere installati:
- il webserver Apache versione 2.0.x o 2.2.x o successive;
- l'interprete Perl versione 5.8.8 o successive;
- il modulo di Apache mod_perl2
- Memcached versione 1.4.4 o più recenti.
Considerando Apache già funzionante, l'eventuale mancanza di qualche componente risulta velocemente risolvibile con YUM (su sistemi RedHat). Assunti i privilegi di root possiamo passare all'installazione dei pacchetti necessari:
$ yum install perl perl-GD mod_perl memcached
La presenza di Apache Mobile Filter all'interno dell'archivio perl CPAN, ci facilita ulteriormente il lavoro. Utilizzando gli automatismi dell'omonimo comando ci basterà digitare:
$ cpan Apache2::AMFWURFLFilter
Se non fosse disponibile, installate con YUM il pacchetto rpm perl-CPAN
A questo punto non ci resta che iniziare i nostri esperimenti partendo da alcune direttive di base per poi passare a qualche configurazione più avanzata.
Configurazione
Considerando di lavorare a livello globale, modifichiamo il file httpd.conf aggiungendo le righe:
Riavviamo Apache e già la console ci fornirà una serie di messaggi che indicano l'attivazione del modulo. La prima istruzione ha il compito di indicare la directory di lavoro, la seconda di caricare AMFLiteDetectionFilter
In /home/AMF amflitedetection.config
Vediamo un semplice esempio di come sia possibile, utilizzando PHP, ottenere i risultati del filtro. Creiamo una pagina che ci mostri in output le variabili generate dal web server, ovvero l'array $_SERVER:
<?php print_r($_SERVER); ?>
Se accediamo alla pagina utilizzando un normale browser da PC le informazioni visualizzate, ovvero le componenti dell'array $_SERVER a noi utili, saranno simili alle seguenti:
[AMFMobileHome] => /home/AMF [AMF_DEVICE_IS_TABLET] => false [AMF_ID] => amf_lite_detection [AMF_DEVICE_IS_MOBILE] => false [AMF_VER] => 3.52
$_SERVER['AMF_DEVICE_IS_TABLET'] e $_SERVER['AMF_DEVICE_IS_MOBILE'] sono impostate a false
come è immediato evincere dal risultato sappiamo di essere visitati da un dispositivo mobile.
Ma vediamo, nella pagina successiva, come poter rendere più raffinata la nostra configurazione.
Configurazione avanzata
Passiamo ora ad una configurazione un po' più avanzata, appoggiandoci al device database 51degrees. Innanzitutto procuriamoci una copia della versione Lite del file, liberamente prelevabile da 51degrees.codeplex.com, utilizzando il link denominato Lite Device Data - Xml Format.
Scompattiamo l'archivio in /home/AMF e rinominiamo il file come 51Degrees.xml.
Modifichiamo le direttive del file httpd.conf nel seguente modo:
Oltre alla directory di lavoro, /home/AMF /home/AMF/cache AMF51DegreesFilter
[AMF_BROWSERNAME] => Android [AMF_JAVASCRIPT] => true [AMF_HARDWAREVENDOR] => HTC [AMF_ISMOBILE] => true [AMF_SCREENPIXELSHEIGHT] => 320 [AMF_SCREENPIXELSWIDTH] => 228 [AMF_HARDWAREMODEL] => Tattoo
Quello precedente è solo un piccolo estratto e le caratteristiche elencate sono di immediata comprensione. Normalmente alle nostre applicazioni non saranno necessarie le centinaia di informazioni disponibili, per limitarle possiamo ricorrere alla direttiva CapabilityList
PerlSetEnv CapabilityList <elenco capabilities>
Per l'elenco completo potete riferirvi al sito 51degrees.mobi
In un ambiente di produzione è consigliabile utilizzare la direttiva AMFProductionMode
PerlSetEnv AMFProductionMode true
Se il nostro server gestisce più host virtuali e vogliamo personalizzare le configurazioni all'interno dei contenitori <VirtualHost>
PerlOptions +Parent
Da ultimo vediamo un esempio di come sia possibile ottenere il ridimensionamento automatico delle immagini, in modo che si adattino allo schermo del dispositivo:
PerlSetEnv ResizeImageDirectory /home/AMF/images <Directory /path_to_images/*> SetHandler modperl PerlOutputFilterHandler Apache2::AMFImageRendering </Directory>
In precedenza deve essere stato attivato uno dei filtri, che non sia però AMFLiteDetectionFilter. Il "lite filter" infatti non è in grado di fornire le dimensioni dello schermo di un dispositivo.
Nel nostro esempio /home/AMF/images
<Directory>
AMFImageRendering
Conclusioni
In queste pagine abbiamo visto alcuni semplici esempi di configurazioni, più che altro utili ad introdurre le funzionalità di Apache Mobile Filter. Per ulteriori approfondimenti vi consiglio la lettura del Wiki dedicato al progetto, ben strutturato e di semplice consultazione. Ciascun modulo della suite viene analizzato schematizzandone il funzionamento e corredando la descrizione con esempi di configurazione.
Abbiamo installato il software ricorrendo, per semplicità, al comando cpan, risulta però possibile scaricare AMF da sourceforge e procedere all'installazione manuale.
Infine segnalo con un po' di rammarico come WURFL, the Wireless Universal Resource FiLe, forse il Device Description Repository più curato, abbia modificato negli ultimi tempi il tipo di licenza, rendendo di fatto non disponibile per AMF una versione free.