• Non ci sono risultati.

2.5 Identificazione dell’utente

2.5.1 Codici QR e ZXing

Un codice QR `e un codice a barre bidimensionale (o 2D), ossia a matrice, composto da moduli neri disposti all’interno di uno schema di forma quadra- ta, generalmente impiegato per memorizzare informazioni destinate a essere lette di solito tramite un telefono cellulare o uno smartphone; in un solo crittogramma possono essere contenuti 7.089 caratteri numerici o 4.296 alfa- numerici. Il nome QR `e l’abbreviazione dell’inglese quick response, in virt`u del fatto che il codice fu sviluppato per permettere una rapida decodifica del suo contenuto: esso fu infatti sviluppato nel 1994 dalla compagnia giappone- se Denso Wave allo scopo di tracciare i pezzi di automobili nelle fabbriche di Toyota; vista la capacit`a del codice di contenere pi`u dati di un codice a barre, venne in seguito utilizzato per la gestione delle scorte da diverse industrie.4

In seguito al rilascio dei codici QR sotto licenza libera da parte della Denso Wave, essi si sono diffusi dapprima in Giappone e poi, pi`u lentamente ne- gli USA e in Europa. Dalla met`a degli anni 2000 questi codici sono divenuti sempre di pi`u comune utilizzo, ad esempio per scopi pubblicitari, poich´e sono in grado di veicolare facilmente URL e indirizzi.

ZXing `e invece una libreria Open Source implementata in Java: essa permette non solo la decodifica di codici QR tramite la scansione con la foto- camera di uno smartphone (tramite un’applicazione scaricabile per i modelli Android per esempio), ma anche la creazione di codici QR al cui interno sono encodificate le informazioni volute.5 Per questi motivi si `e utilizzata la

libreria sopra citata per utilizzare i codici QR sia lato smartphone che lato schermo.

2.5.2

Elementi principali di progetto

Il nucleo fondamentale di questa libreria `e l’interazione tra schermo e smartphone, per cui essa si deve dotare necessariamente di due parti: la pri- ma deve dare la possibilit`a allo schermo di creare un codice QR e di mostrarlo, attendendo che sia scansionato per una identificazione, mentre la seconda,

4

http://it.wikipedia.org/wiki/Codice_QR

5

2.5. IDENTIFICAZIONE DELL’UTENTE 37

Figura 2.17: Esempio di codice QR

lato smartphone, deve dare la possibilit`a di scansionare il codice QR invian- do automaticamente le proprie informazioni allo schermo. Per il progetto trattato, si `e deciso di progettare un’applicazione per smartphone Android, appoggiandosi all’applicazione sviluppata da ZXing per la decodifica di codici QR6.

La libreria dovr`a quindi fornire al programmatore la possibilit`a di inserire l’identificazione dell’utente in modo flessibile, permettendogli di decidere cosa fare sia per mostrare il codice sia una volta avvenuta l’identificazione: a questo scopo si pu`o gi`a notare, a livello di progetto, come il template method pattern pu`o risultare utile nel fornire le linee guida per la realizzazione.

Il diagramma in figura 2.18 mostra infatti il comportamento generale che un server di richieste di identificazione basate su decodifica di codici QR deve avere: tra le operazioni citate nel diagramma, quelle per mostrare il codice QR e per fare utilizzo delle informazioni aggiuntive sull’utente ricevute sono quelle che meglio si prestano ad essere modellate come astratte, poich´e possono differire abbastanza sensibilmente a seconda della logica applicativa da soddisfare (ad esempio mostrare queste informazioni oppure utilizzarle per una query su di un Database). Si pu`o inoltre notare come sia gi`a chiaro a livello progettuale che questo server debba avere un proprio flusso di controllo separato per rispondere tempestivamente alle richieste che gli giungono, e per questo dovr`a essere eseguito in un thread separato da quello principale dell’applicazione.

6

https://play.google.com/store/apps/details?id=com.google.zxing.client. android

Figura 2.18: ActivityDiagram per il server di richieste di identificazione Viene proposto infine anche il diagramma per l’applicazione per smart- phone, che nell’architettura considerata assume il ruolo di client: in esso si mostra la sequenza delle operazione principali da eseguire ogni qualvolta che si vuole essere identificati.

2.5. IDENTIFICAZIONE DELL’UTENTE 39

Figura 2.19: ActivityDiagram per l’applicazione Android per l’identificazione ta una connessione TCP, in cui il client assume il ruolo di initiator: `e infatti l’utente che, attivando l’applicazione sul suo smartphone e decodificando il codice QR invia una richiesta al server.

La decodifica del codice QR `e necessaria dal momento che in esso sono encodificate, in forma di stringa ipaddress:port?sessionID, le informazioni necessarie per raggiungere il server (indirizzo IP, numero di porta e codice segreto di sessione): tramite questo espediente ci si assicura che solamente le persone che vedono il codice, e quindi si trovano di fronte allo schermo nelle sue vicinanze, possono identificarsi.

Per gestire l’identificazione `e stato progettato anche un semplicissimo pro- tocollo di richiesta-risposta tra client e server, che prevede quattro semplici fasi:

codice QR

ˆ il server controlla se il sessionID ricevuto `e corretto e, a seconda che lo sia, invia un messaggio di errore o di conferma al client

ˆ se il client riceve una notifica di successo della prima fase di identifica- zione, invia le sue informazioni encodificate in forma di file XML ˆ il server prova a ricavare dal file XML ricevuto le informazioni riguardo

all’utente, ed invia al client un messaggio di conferma o di errore a seconda della buona riuscita di questa operazione

´

E importante sottolineare che per il progetto di questa libreria non si `e fatto uso del sensore Kinect, ma solamente della libreria di ZXing: per questo motivo all’interno del framework questa libreria assume una posizione intermedia tra le applicazioni utente e la libreria appena citata, fornendo un ulteriore livello di astrazione per dare al programmatore uno strumento di pi`u facile utilizzo per l’identificazione dell’utente.

Capitolo 3

Implementazione del

framework e deployment

In questo capitolo vengono descritte le informazioni principali e i punti sa- lienti riguardanti l’implementazione delle librerie sviluppate per il framework, in modo tale da fornire anche una guida utile a coloro che lo utilizzeranno. Ove possibile, per una maggiore concretezza ed efficacia della descrizione, si fa riferimento a semplici casi applicativi realizzati ad hoc per mostrare le potenzialit`a e alcuni possibili utilizzi delle librerie.

Bisogna ricordare che `e stato deciso di implementare il framework con il linguaggio Java, utilizzando il Kinect come sensore e i driver OpenNI 1.5.4.0 e NITE 1.5.2.23. L’implementazione fa quindi necessariamente riferimento ai concetti introdotti dagli strumenti utilizzati.

Lo scopo di questa descrizione `e quello di fornire i dettagli di maggior rilie- vo della fase di implementazione, quindi per un livello di dettaglio maggiore si rimanda alla documentazione del codice stesso.

3.1

Interfaccia con il sensore

Lo scopo principale di questa libreria `e quello di fornire le operazioni pi`u comuni per i sistemi software considerati in questo lavoro, quali l’inizializza- zione del sensore e le operazioni per ricavare da esso i dati.