• Non ci sono risultati.

Gestione della disattivazione dell’applicazione

5.4 Il Client Windows Phone 7: ImageWP7

5.4.6 Gestione della disattivazione dell’applicazione

Nel realizzare l’applicazione perWidows Phone 7sì è dovuto tener conto della possibili-tà che l’applicazione venga messo in uno stato dormiente, per poi essere riattivata. Le linee guida proposte per lo sviluppo della applicazioni suggeriscono di rendere questa situazione il più possibile trasparente per l’utenza. A questo proposito si sono dovute implementare politiche per il salvataggio dello stato della pagina e dell’applicazione stessa. Si è anche dovuto tenere conto della casistica che si sta trattando. Una delle maggiori problematiche emerse in questo frangente è l’impossibilità di mantenere la connessione attiva con il servizio dopo che l’applicazione è stata disattivata. Questo comporta che, anche salvando lo stato dell’applicazione nel momento in cui essa viene messa nello stato dormiente, al momento dell’attivazione i dati visualizzati non saranno aggiornati. Si è comunque deciso i implementare tale operazione di gestione della disattivazione, trovandola interessante per le disattivazioni di breve periodo.

75 75 di 87

Per implementazione si è dovuto inserire del codice all’interno della classe MainPage andando a gestire gli eventiOnNavigatingFromeOnNavigatedTo dell’unica pagina che compone l’applicazione. Per prima cosa però si è andati a creare la variabili booleana _isNewPageInstanceper segnalare se l’applicazione è alla sua prima esecuzione oppure se è stata riattivata dallo stato dormiente.

Nell’evento OnNavigatingFrom è necessario salvare i dati prima che l’applicazione venga disattivata. Il salvataggio avviene all’interno delloState Dictionarymesso a disposizione dal sistema operativo invocabile tramite l’oggetto PhoneApplicatio .State che è di tipo IDictionary. In Questo oggetto è necessario salvare lo stato grafico della pagina e i dati relativi all’applicazione:

• Dati relativi all’applicazione: I dati dell’applicazione interessanti per le prossime esecuzioni sono quelli contenuti nella lista di elementi ricevuti dal servizio e attualmente salvati in memoria. Per il salvataggio di questi dati all’interno dello State Dictionaryè necessario che siano serializzabili. È quindi stato necessario rendere gli oggetti ImageItemcontenuti nella lista degli elementi serializzabili, ed è stato questo uno dei motivi per cui sì è deciso di rappresentare le immagini in essi contenute tramite array di Byte. Anche la scelta della struttura dati ha richiesto di scegliere un contenitore serializzabile, e si è quindi scelto un oggetto di tipo List(of).

Salvando tutti i dati attualmente contenuti in memoria ha permesso, al rientro nell’applicazione di utilizzare tutte le funzionalità fornite normalmente (ad esempio navigare tra i vari dati) senza dover attendere che la connessione venga ristabilita.

• Dati della pagina: Per il salvataggio dei dati relativi alla pagina, utili a ricreare la medesima interfaccia grafica al momento della riattivazione dell’applicazione, si è deciso di creare una classe apposita alla quale collegare le proprietà dei controlli grafici che si intende conservare tramitebinding. Tale classe è stata chiamata GuiUpdate, e contiene campi dati capaci di ospitare i valori delle pro-prietà che si vogliono mantenere nelloState Dictionary. La classe implementa l’interfacciaINotifyPropertyChangedche tramite l’eventoPropertyChanged per-mette di aggiornare automaticamente le proprietà collegate in base al valore dei campi dati della classe e viceversa. Per render la classe Serializzabile si sono inoltre usati gli attributi<DataContract()>per l’intera classe e<DataMember()>

per le proprietà che si vuole serializzare.

Grazie alla classeGuiUpdateè stato possibile salvare tutti i dati che permettono di ristabilire l’aspetto grafico dell’applicazione in una sola istruzione e con un solo oggetto, inoltre automatizzando la raccolta di questi dati.

Nell’evento OnNavigatedToper prima cosa si controlla se è il primo accesso alla pagina (e nel nostro caso, avendo una sola pagina anche all’applicazione) oppure si tratta di una riattivazione, per fare questo controllo si utilizza la variabile booleana _isNewPageInstance. Se il controllo segnala che è una nuova istanza della pagina (e dell’applicazione) l’unica operazione da eseguire e la preparazione degli oggetti che andranno poi a contenere i dati che verranno salvati nelloState Dictionary. Nel caso in cui invece ci si trovi di fronte ad una situazione in cui l’applicazione è stata riattivata s va a leggere i dati dalloState Dictionaryed inserirli negli oggetti opportuni. Questo è sufficiente anche per la gestione dell’interfaccia grafica, infatti essendo la classe GuiUpdatecollegata ad essa ed implementando l’interfaccia INotifyPropertyChanged, le modifiche all’oggetto si ripercuotono automaticamente sull’interfaccia grafica. È stato però necessario eseguire un ulteriore operazione riguardante la visualizzazione delle immagini, infatti è necessario reimpostare la proprietà source del controllo

Luca Pasa 5.4. IL CLIENT WINDOWS PHONE 7: IMAGEWP7 graficoimage, in quanto tale proprietà contiene oggetti non serializzabili e quindi non inseribili nella classeGuiUpdatee nello State Dictionary.

77 77 di 87

Capitolo 6

Conclusioni

Il progetto ha richiesto la creazione di un’applicazione prototipale per l’invio d’im-magini catturate da una webcam, senza che sia necessario eseguire modifiche a sistemi NAT, proxy e firewall. Inoltre l’applicazione realizzata ha dovuto minimizzare il TCO. Per far sì che questi vincoli siano rispettati è stato creato un servizio RESTful che si appoggia su Windows Azure AppFabric Service Busper la comunicazione tra esso ed i client.

Tale prototipo è stato realizzato per accertare la fattibilità di tale applicazione al fine di decidere se inserire o meno questa nuova funzionalità all’interno del prodotto softwareaKite.

L’attività di stage è stata divisa in due principali fasi: una prima fase di studio delle tecnologie necessarie per la realizzazione del progetto, e una seconda dove è stato analizzato il problema e realizzata la soluzione. La prima fase ha richiesto circa quattro settimane lavorative in cui lo stagista, affiancato dal tutor aziendale, ha appreso le tecnologie necessarie all’esecuzione del progetto ed eseguito dei tutorial esemplificativi per meglio comprendere le stesse. La seconda fase ha avuto una durata di circa cinque settimane. All’interno di queste cinque settimane si è per prima cosa eseguita un’analisi del problema, che ha portato ad identificare quali requisiti fosse necessario soddisfare per creare una soluzione che risolvesse il problema. Vista la natura della soluzione, comprendente più applicazioni si è deciso di eseguire per ognuna di esse una fase di progettazione e codifica. Tali attività hanno richiesto il tempo previsto nel piano di lavoro. In Figura 6.1 viene riportato il diagramma di Gantt che segnala la durata effettiva delle attività eseguite all’interno dell’attività di stage.

Figura 6.1: Diagramma di Gantt che illustra la durata effettiva dell’attività di stage.

Il progetto è stato completato con successo, andando a confermare la fattibilità dell’applicazione. La soluzione ottenuta ha dimostrato di poter soddisfare tutti i requisiti espressi in fase di analisi. In particolare l’utilizzo del paradigmaREST per l’esposizione del servizio ha dimostrato di rendere quest’ultimo fortemente interpola-bile e versatile, andando inoltre a dimostrare una grande facilità nel consumo dei dati esposti.

79

Molti degli obiettivi prefissati sono stati raggiunti anche grazie all’utilizzo diWindows Azure Service Bus, in particolare la minimizzazione del TCO. Tale minimizzazione deriva infatti dalla soddisfazione di molti requisiti come l’eliminazione della necessità di effettuare interventi sistemistici su firewall, dispositivi NAT e proxy.

L’utilizzo di un feed RSS 2.0 ha reso possibile consultare i dati senza bisogno di alcuna particolare tecnologia e ne ha standardizzato il formato.

La scelta di esporre nuove immagini ad intervalli di un secondo, e di dare la possibilità ai consumatori del servizio di prelevare solo le immagini richieste, ha permesso di rendere il servizio estremamente versatile, e ha lasciato estrema libertà ai consuma-tori. In questo modo il servizio diventa fruibile anche per utenze con connessione ad internet non particolarmente veloce, oppure che dispongono di spazio in memoria limitato.

Si è inoltre appurato che la possibilità di esporre immagini tramite un feed RSS, oltre a essere fattibile, è risultata anche molto comoda andando a standardizzare il formato dei dati esposti, e rendendo possibile la consultazione degli stessi senza bisogno di particolari client. In questo modo il servizio diventa consultabile da qualsiasi dispositivo, anche senza che sia stato creato uno specifico client. La possibilità di creare client specifici per diversi dispositivi, anche non legati a tecnologie Windows, è comunque stata salvaguardata utilizzando il paradigmaREST che elimina eventuali dipendenze tecnologiche dei client. Si può quindi immaginare lo scenario di sviluppo di client per dispositivi mobili Androido Apple.

La soluzione realizzata ha inoltre portato alla luce la possibilità di integrare ed es-porre ulteriori dati, non necessariamente legati all’uso della webcam, con particolare semplicità. Da questo punto di vista, l’utilizzo del paradigma REST e l’utilizzo del feed RSS 2.0, hanno reso possibile un facile integrazione di nuovi dati che possono essere reperiti da fonti esterne come sensori o altri dispositivi di input.

L’applicazione prototipale realizzata si dimostra quindi capace di soddisfare le richi-este in termini sia economici, legati alla minimizzazione del TCO, sia tecnologici, assicurando ottime prestazioni e versatilità.

I requisiti sorti in fase di analisi possono essere considerati soddisfatti nella loro totalità, rendendo le funzionalità fornite da tale progetto introducibili inaKite senza che esse portino problematiche o limitazioni alla soluzione preesistente.

Appendice A

Glossario

Di seguito verrano spiegati i termini tecnici e acronimi presenti nel documento, tali termini sono catalogati in ordine alfabetico.

API: acronimo di Application Programming Interface, indica ogni insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di strumenti specifici per un determinato compito all’interno di un certo programma.

La finalità è ottenere un’astrazione, di solito tra l’hardware e il programmatore o tra software a basso e quello ad alto livello semplificando così il lavoro di programmazione

Asp.net: è un insieme di tecnologie di sviluppo di software per il web, commer-cializzate dalla Microsoft. Utilizzando queste tecnologie gli sviluppatori possono realizzare applicazioni Web e servizi Web.

Blob: acronimo di binary large object, si riferisce ad un tipo di dato usato nei database per la memorizzazione di dati di grandi dimensioni in formato binario.

Blog: è un sito internet, generalmente gestito da una persona o da un ente, in cui l’autore (blogger) pubblica più o meno periodicamente, come in una sorta di diario online, i propri pensieri, opinioni, riflessioni, considerazioni ed altro, assieme, eventualmente, ad altre tipologie di materiale elettronico come immagini o video.

Browser: è un programma che consente di usufruire dei servizi di connettività in Rete e di navigare sul World Wide Web, appoggiandosi sui protocolli di rete forniti dal sistema operativo, permettendo di visualizzare i contenuti delle pagine dei siti web e di interagire con essi.

Client: Componente che accede ai servizi o alle risorse di un’altra componente, detta server. In questo contesto si può quindi parlare di client riferendosi all’hardware o al software.

COM: acronimo diComponent Object Model, è un’interfaccia per componenti soft-ware introdotta da Microsoft nel 1993. COMpermette la comunicazione tra processi e creazione dinamica di oggetti con qualsiasi linguaggio di programmazione che supporta questa tecnologia.

Datacenter: è un impianto utilizzato a fini informatici con lo scopo di fornire grande potenza di storage, sicurezza dei dati, e forte disponibilità. include sistemi di

81

protezione dell’alimentazione e di backup e sicurezza dei dati e di connessione.

Delegate: indica dei puntatori a funzioni utilizzabili nella gestione degli eventi, ed utili nella programmazione asincrona.

Design pattern: è una soluzione progettuale generale a un problema ricorrente.

Esso non è una libreria o un componente di software riusabile, quanto piuttosto una descrizione o un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software.

DMZ: acronimo di Demilitarized Zone, si riferisce ad un segmento isolato di LAN raggiungibile sia da reti interne che esterne che permette, però, connessioni esclusiva-mente verso l’esterno: gli host attestati sulla DMZ non possono connettersi alla rete aziendale interna.

DNS: acronimo diDomain Name System, è un sistema utilizzato per la risoluzione di nomi dei nodi della rete in indirizzi IP e viceversa. Il servizio è realizzato tramite un database distribuito, costituito dai server DNS.

Factory: è un pattern creazionale che fornisce un metodo per istanziare un oggetto senza sapere a priori la sua esatta classe. Questo pattern raggiunge il suo scopo fornendo un’interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.

Firewall: è un apparato di rete hardware o software passivo di difesa perimetrale che può anche svolgere funzioni di collegamento tra due o più tronconi di rete.

Esso filtra tutti i pacchetti entranti ed uscenti, da e verso una rete o un computer, applicando regole che contribuiscono alla sicurezza della stessa.

Framework: è una struttura di supporto su cui un software può essere organizzato e progettato. Alla base di un framework c’è sempre una serie di librerie di codice utilizzabili con uno o più linguaggi di programmazione, spesso corredate da una serie di strumenti di supporto allo sviluppo del software.

Front-end: è la parte di un sistema software che gestisce l’interazione con l’u-tente o con sistemi esterni che producono dati di ingresso. Esso è responsabile per l’acquisizione dei dati di ingresso e per la loro elaborazione con modalità conformi a specifiche predefinite e invarianti.

Green Computing: sì riferisce ad un’informatica ecologicamente sostenibile. Si occupa dello studio e della messa in pratica di tecniche di progettazione e realiz-zazione di computer, server, e sistemi connessi come ad esempio monitor, stampanti, dispositivi di archiviazione e reti e sistemi di comunicazione efficienti con impatti ambientali limitati o nulli.

Grid Computing: sì riferisce un’infrastruttura di calcolo distribuito, utilizzati per l’elaborazione di grandi quantità di dati, mediante l’uso di una vasta quantità di risorse. In particolare, tali sistemi permettono la condivisione coordinata di risorse all’interno di un’organizzazione virtuale.

HTTP: acronimo diHypertext Transfer Protocol, è usato come principale sistema per la trasmissione d’informazioni sul web. Le specifiche del protocollo sono gestite

Luca Pasa

dal World Wide Web Consortium (W3C)

Identity provider: è un servizio che permette di autenticare gli utenti e client, il quale restituisce informazioni relative all’identità di client o utenti, e ne definisce la possibilità di autenticarsi ad un servizio o ad una applicazione.

IIS: acronimo diInternet Information Services, è un complesso di servizi server Internet per sistemi operativi Microsoft Windows.

IP: acronimo diInternet Protocol, indica un protocollo di rete a pacchetto senza connessione che secondo la classificazione ISO/OSI appartiene al livello rete. IPè un protocollo di interconnessione di reti, nato per interconnettere reti eterogenee per tecnologia, prestazioni, gestione.

LAN: acronimo diLocal Area Network, indica una tipologia di rete informatica contraddistinta da un’estensione territoriale non superiore a qualche chilometro. Si tratta storicamente delle prime tipologie di reti informatiche realizzate al mondo per semplicità di realizzazione e costi sostenibili anche da piccoli privati.

Lambda expression: è una funzione anonima che può contenere espressioni e istruzioni e che può essere utilizzata per creare delegati o tipi di struttura ad albero dell’espressione.

Load balancing: è una tecnica informatica che consiste nel distribuire il carico di un servizio, ad esempio la fornitura di un sito web, tra più server. Si aumentano in questo modo la scalabilità e l’affidabilità dell’architettura nel suo complesso.

Metadato: è definito come l’informazione che descrive un insieme di dati.

Multi-core: descrive una CPU composta da due o più core, ovvero da più nuclei di processori fisici montati sullo stesso package.

Multithreading: indica il supporto hardware da parte di un processore di eseguire più thread.

Namespace: Collezione di nomi di entità, definite dal programmatore, omogenea-mente usate in uno o più file sorgente. Lo scopo dei namespace è quello di evitare confusione ed equivoci nel caso siano necessarie molte entità con nomi simili.

NAT: acronimo diNetwork Address Translation, è una tecnica che consiste nel modificare gli indirizzi IP dei pacchetti in transito su un sistema che agisce da router.

.NET: è un progetto all’interno del quale Microsoft ha creato una piattaforma di sviluppo software.

On-primise: Si riferisce ai software che vengono eseguiti ed utilizzati all’interno del medesimo ambiente fisico. Si contrappongono ai software on-cloud.

Parsing: è il processo atto ad analizzare uno stream continuo in input in modo da determinare la sua struttura grammaticale grazie ad una data grammatica formale.

83 83 di 87

Un parserè un programma che esegue questo compito.

Peer-to-peer: definisce una rete di computer o qualsiasi rete informatica che non possiede nodi gerarchizzati sotto forma di client o server fissi, ma un numero di nodi equivalenti che fungono sia da cliente che da servente verso altri nodi della rete.

Proxy: è un programma che si interpone tra un client ed un server, inoltrando le richieste e le risposte dall’uno all’altro. Il client si collega al proxy invece che al server, e gli invia delle richieste. Il proxy a sua volta si collega al server e inoltra la richiesta del client, riceve la risposta e la inoltra al client.

RIA: acronimo i RIA, indica le applicazioni web che possiedono le caratteristiche e le funzionalità delle applicazioni desktop, senza però necessitare dell’installazione sul disco fisso. Le RIAsi caratterizzano per la dimensione interattiva, la multimedialità e per la velocità d’esecuzione. Infatti la parte dell’applicazione che elabora i dati è trasferita a livello client e fornisce una pronta risposta all’interfaccia utente, mentre la gran parte dei dati e dell’applicazione rimane sul server remoto, con notevole alleggerimento per il computer utente. Le RIA si fondano perciò su un’architettura di tipo distribuito.

RPC: Acronimo di Remote Procedure Call, si riferisce all’attivazione di una ‘‘pro-cedura’’ o subroutine da parte di un programma, nel caso in cui tale subroutine venga attivata su un computer diverso da quello sul quale il programma stesso viene eseguito. In altre parole, l’RPC consente a un programma di eseguire subroutine a distanza su computer remoti.

SaaS: Acronimo di Software as a service, è un modello di distribuzione del software applicativo dove un produttore di software sviluppa, opera e gestisce un’ap-plicazione web che mette a disposizione dei propri clienti via internet. I clienti non pagano per il possesso del software bensì per l’utilizzo dello stesso. Essi uti-lizzano il software tramite API accessibili via web, spesso come Web Services o REST.

SDK: acronimo di Software Development Kit, indica un insieme di strumenti per lo sviluppo e la documentazione di software.

Silverlight: è un ambiente di runtime sviluppato da Microsoft per piattaforme Windows e Mac che consente di visualizzare, all’interno del browser, Rich Internet applications, ovvero applicazioni multimediali ad alta interattività.

SOA: Acronimo di Service-Oriented Architecture, indica generalmente un’ar-chitettura software adatta a supportare l’uso di servizi Web per garantire l’interoper-abilità tra diversi sistemi così da consentire l’utilizzo delle singole applicazioni come componenti del processo di business e soddisfare le richieste degli utenti in modo integrato e trasparente.

SOAP: Acronimo diSimple Object Access Protocol, è un protocollo leggero per lo scambio di messaggi tra componenti software, tipicamente nella forma di compo-nentistica software.

Stack Trace: è un report che contiene dei riferimenti ai metodi dove è avvenuta un eccezione.

Luca Pasa

Start-up: identifica l’operazione e il periodo durante il quale si avvia un’impresa.

Si tratta di solito di imprese appena costituite, nelle quali vi sono ancora processi organizzativi in corso. Nello startup possono avvenire operazioni di acquisizione delle risorse tecniche correnti, di definizione delle gerarchie e dei metodi di produzione, di ricerca di personale, ma anche studi di mercato con i quali si cerca di definire le attività e gli indirizzi aziendali.

Tag: indica una struttura in un documento XML e un metodo per ordinare gerarchicamente i contenuti del documento stesso.

TCO: acronimo diTotal Cost of Ownership, è un approccio sviluppato nel 1987, utilizzato per calcolare tutti i costi del ciclo di vita di un’apparecchiatura informatica

TCO: acronimo diTotal Cost of Ownership, è un approccio sviluppato nel 1987, utilizzato per calcolare tutti i costi del ciclo di vita di un’apparecchiatura informatica