Dopo aver raccolto i requisiti richiesti dall’applicazione, si è passati alla fase di progettazione del sistema. Come prima cosa sono stati preparati i mockup a livello di interfaccia in modo da poter posizionare tutti gli elementi grafici necessari per il gioco[1].

Figura 3.2 Primo mockup della struttura del sito

In seguito alla fase di design del mockup si è formulata un’ipotesi di interfaccia per la visualizzazione di una domanda reale con la foto e le risposte alternative.

 Figura 3.3 Mockup della struttura di una domanda

L’ultima fase del design ha riguardato la progettazione e realizzazione del logo del sito. Considerando il periodo di svolgimento del gioco e la vocazione agli sport invernali della Val di Fiemme, si è stabilito l’utilizzo di colori freddi che riportassero alla mente il concetto della montagna di inverno.

Figura 3.4 Logo del sito VinciFiemme

La seconda fase della progettazione ha riguardato la scelta della struttura dati ottimale per poter archiviare le informazioni ed è stato realizzato un database E/R adatto allo scopo.

I principi guida per la progettazione del database sono stati i seguenti:

  • Un utente, all’atto dell’iscrizione, deve indicare la propria provincia di residenza.
  • Ogni provincia può avere nessuno o più utenti che vi risiedono.
  • Ogni provincia appartiene a una regione.
  • Una regione ha più provincie.
  • Un utente può portare a termine una sola sessione di gioco[2].
  • Una sessione di gioco è relativa a un solo utente.
  • Ogni domanda riguarda zero o più sessioni di gioco.
  • Una sessione di gioco è composta da zero o più domande.
  • Ogni domanda ha sei possibili risposte alternative.
  • Ogni risposta fa riferimento a una sola domanda.

Partendo da queste informazioni di base relative alla struttura delle relazioni tra le entità del progetto, si sono realizzate le seguenti tabelle:

  • Users: contiene le informazioni relative all’utente
  • User_sessions: contiene le informazioni relative alla sessione di gioco dell’utente
  • Questions_sessions: contiene le informazioni riguardanti le singole risposte date dall’utente per ogni domanda proposta dal sistema
  • Questions: contiene le domande del gioco
  • Answers: contiene le risposte alle domande
  • Provinces: contiene le informazioni sulle provincie
  • Regions: contiene le informazioni sulle regioni
  • Bitly_links: contiene le informazioni sugli url personalizzati relativi agli utenti in forma di short url[3]

Dopo aver identificato le entità, si è analizzato il dettaglio di ogni tabella con la descrizione di tutti i campi.

users

Campo Descrizione
id Identificativo univoco progressivo
name Nome dell’utente
surname Cognome dell’utente [non utilizzato]
city Città di residenza dell’utente
address Indirizzo di residenza dell’utente [non utilizzato]
province_id Chiave esterna tabella provinces
zip Codice di avviamento postale
phone Telefono dell’utente [non utilizzato]
email Email dell’utente
password Password crittata scelta dall’utente in fase di registrazione
personal_code Stringa alfanumerica identificativa dell’utente
referral_code Stringa alfanumerica identificativa dell’utente presentante
created Data ed ora di registrazione
suggestions Numero di suggerimenti a disposizione dell’utente

Tabella 3.1 Dettaglio tabella users

 

 

user_sessions

Campo Descrizione
id Identificativo univoco progressivo
user_id Chiave esterna tabella users
created Data ed ora di avvio della sessione di gioco
modified Data ed ora al momento della risposta all’ultima domanda
correct_answer_number Numero di risposte corrette
score Punteggio ottenuto

Tabella 3.2 Dettaglio tabella user_sessions

 

questions_sessions

Campo Descrizione
id Identificativo univoco progressivo
question_id Chiave esterna tabella questions
user_session_id Chiave esterna tabella user_sessions
cxternal_click Contatore di click sul link esterno verso il sito www.visitfiemme.it
is_answered Flag che identifica se è stata data risposta alla domanda
created Data ed ora di visualizzazione della domanda
modified Data ed ora al momento della risposta alla domanda

Tabella 3.3 Dettaglio tabella questions_sessions

 

questions

Campo Descrizione
id Identificativo univoco progressivo
text Testo della domanda
image URL dell’immagine associata alla domanda

Tabella 3.4 Dettaglio tabella questions

 

answers

Campo Descrizione
id Identificativo univoco progressivo
question_id Chiave esterna tabella questions
text Testo della risposta
correct Flag che identifica la correttezza della risposta

Tabella 3.5 Dettaglio tabella answers

 

 

provinces

Campo Descrizione
id Identificativo univoco progressivo
province Nome della provincia
inhabitants Numero di abitanti della provincia
num_cities Numero di città appartenenti alla provincia
region_id Chiave esterna tabella regions

Tabella 3.6 Dettaglio tabella provinces

 

regions

Campo Descrizione
id Identificativo univoco progressivo
region Nome della regione
num_inhabitants Numero di abitanti della regione
num_cities Numero di città appartenenti alla regione
num_provinces Numero di provincie nella regione

Tabella 3.7 Dettaglio tabella regions

 

bitly_links

Campo Descrizione
id Identificativo univoco progressivo
long_url URL completo per la condivisione
hash Hash generato attraverso le API di bitly.com
created Data ed ora di creazione dello short URL
updated Data ed ora di aggiornamento dello short URL

Tabella 3.8 Dettaglio tabella bitly_links

 

La tabella users contiene le informazioni personali degli utenti iscritti al gioco e le tabelle provinces e regions i dettagli delle località. Nella tabella users è presente il campo suggestions che contiene il numero di suggerimenti a disposizione di quell’utente, il campo personal_code che contiene un codice alfanumerico generato in modo casuale utile per identificare quell’utente quando invita un’altra persona ad iscriversi al gioco ed il campo referral_code che contiene il codice dell’utente che lo ha invitato ad iscriversi.

La tabella users_sessions memorizza il tempo impiegato per rispondere a tutte le dieci domande previste. Tale tabella contiene nel campo correct_answer_number il numero di risposte corrette date fino a quel momento e il punteggio realizzato nel campo score, calcolato al termine della sessione di gioco.

La tabella questions_sessions associa la sessione dell’utente alle domande cui deve rispondere. Memorizza, infatti, l’id della sessione di gioco, l’id della domanda cui sta rispondendo, la correttezza della risposta data e se viene usato o meno un suggerimento per rispondere. Inoltre contiene il campo external_click, necessario per il conteggio del numero di volte che l’utente clicca sul link verso il sito target www.visitfiemme.it per trovare la risposta alla domanda.

La tabella bitly_links contiene gli short url generati interfacciandosi con le API di http://bit.ly. Tale sistema è comodo per ridurre la lunghezza del link di condivisione: ad esempio l’url http://vincifiemme.it/vincfiemme/users/register/r/2n95lz viene ridotto a http://bit.ly/rgJz02.

Figura 3.5 Struttura del database

Il software è stato sviluppato con il linguaggio PHP 5 utilizzando il framework opensource CakePHP (versione 1.3) e con il database MySql su Apache.

 


[1] Nei mockup è riportata la dicitura “VinciTrentino” in quanto nella prima fase di definizione del progetto di tesi il focus era sulla promozione del Trentino. Successivamente ci si è focalizzati soltanto sulla Val di Fiemme rinominando il progetto “VinciFiemme”.

[2] Nella fase di progettazione del database è stata prevista la possibilità per un utente di fare più sessioni di gioco. Nell’implementazione questa possibilità è stata esclusa, permettendo all’utente una sola sessione di gioco composta da 10 domande.

[3] L’URL shortening è una tecnica utilizzata per abbreviare lunghi indirizzi (URL) in link di pochi caratteri facilmente memorizzabili e condivisibili.