Università degli Studi di Padova - SIAGAS
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica Creazione di un meteo-sensor bot per Telegram Tesi di laurea triennale Relatore Laureando Prof. Massimo Marchiori Oleksandr Filinesi Skrypnyk Anno Accademico 2015-2016
Sommario Questo documento descrive il lavoro svolto durante il periodo di stage dal laureando Oleksandr Filinesi Skrypnyk presso l’agenzia ARPAV - Servizio Informatica e Reti, Padova (PD). iii
Indice 1 L’agenzia..............................................................................................................1 1.1 Presentazione dell’agenzia............................................................................1 1.2 Servizio Informatica e Reti............................................................................2 1.3 Processi dell’agenzia.....................................................................................3 1.4 Tecnologie.....................................................................................................4 1.4.1 Sistemi operativi....................................................................................4 1.4.2 Tecnologie per lo sviluppo.....................................................................4 1.5 Tipologie di clienti e servizi offerti...............................................................5 2 Il progetto nella strategia dell’azienda..............................................................7 2.1 L’agenzia e gli stage......................................................................................7 2.2 Il progetto......................................................................................................8 2.2.1 Telegram................................................................................................8 2.2.2 Descrizione del progetto........................................................................9 2.2.3 Obiettivi...............................................................................................10 2.3 Vincoli.........................................................................................................10 2.3.1 Vincoli di tempo...................................................................................10 2.3.2 Vincoli tecnologici...............................................................................11 3 Il progetto di stage.............................................................................................13 3.1 Piano di lavoro.............................................................................................13 3.2 Analisi dei requisiti......................................................................................14 3.2.1 Requisiti comuni..................................................................................14 3.2.2 Requisiti IdroBot..................................................................................16 3.2.3 Requisiti PM10bot...............................................................................17 3.3 Tecnologie...................................................................................................18 3.3.1 PHP......................................................................................................18 3.3.2 Telegram Bot API................................................................................19 3.3.3 Bash.....................................................................................................19 3.3.4 MySQL................................................................................................20 3.4 Progettazione architetturale.........................................................................21 3.4.1 Architettura complessiva......................................................................21 3.4.2 Database...............................................................................................21 v
3.5 Progettazione di dettaglio............................................................................22 3.5.1 Considerazioni generali.......................................................................22 3.5.2 Struttura dei file...................................................................................23 3.6 Funzionamento dei bot................................................................................23 3.6.1 Cominciare ad utilizzare il bot.............................................................23 3.6.2 Ricercare una stazione.........................................................................25 3.7 Verifica e validazione..................................................................................26 3.7.1 Verifica.................................................................................................26 3.7.2 Validazione...........................................................................................27 4 Valutazione retrospettiva..................................................................................29 4.1 Successo del progetto..................................................................................29 4.2 Considerazioni sull’agenzia.........................................................................29 4.3 Sviluppi futuri..............................................................................................29 Glossario................................................................................................................31 Bibliografia...........................................................................................................33 vi
Elenco delle figure Figura 1.1: Logo dell'agenzia ARPAV.....................................................................1 Figura 1.2: Sistemi operativi...................................................................................4 Figura 1.3: Tecnologie per lo sviluppo....................................................................4 Figura 1.4: Tecnologie per la gestione delle informazioni......................................4 Figura 2.1: Logo di Telegram..................................................................................8 Figura 2.2: Logo del Bot che gestisce i Bot di Telegram........................................9 Figura 2.3: Logo di GitHub...................................................................................10 Figura 3.1: Diagramma di Gantt delle attività.......................................................13 Figura 3.2: Logo del linguaggio PHP....................................................................18 Figura 3.3: Schema delle Telegram Bot API.........................................................19 Figura 3.4: Lodo di Bash.......................................................................................20 Figura 3.5: Logo MySQL......................................................................................20 Figura 3.6: Database IdroBot................................................................................22 Figura 3.7: Database PM10bot..............................................................................22 Figura 3.8: Barra di ricerca di Telegram...............................................................24 Figura 3.9: Ricerca di ArpavPM10bot..................................................................24 Figura 3.10: Pulsante di avvio di un bot...............................................................24 Figura 3.11: Messaggio introduttivo del bot ArpavPM10bot................................24 Figura 3.12: Pulsante barra obliqua.......................................................................24 Figura 3.13: Lista di comandi per il bot................................................................25 Figura 3.14: Il comando /stazioni..........................................................................25 Figura 3.15: Elenco scorrevole delle stazioni.......................................................25 Figura 3.16: Comando per dettagli sulla stazione.................................................25 Figura 3.17: Informazioni dettagliate sulla stazione.............................................26 Figura 3.18: Grafico degli andamenti della stazione.............................................26 vii
Capitolo 1 L’agenzia Questo capitolo tratta dettagliatamente della agenzia ospitante lo stage. 1.1 Presentazione dell’agenzia ARPAV (Agenzia Regionale per la Protezione Ambientale del Veneto) è un agenzia istituita in Veneto con la Legge Regionale n°32 del 18 ottobre 1996 e diventata operativa il 3 ottobre 1997. L’agenzia ha come obiettivi: • La protezione, attraverso i controlli ambientali che tutelano la salute della popolazione e la sicurezza del territorio; • La prevenzione, attraverso la ricerca, la formazione, l’informazione e l’educazione ambientale. Figura 1.1: Logo dell'agenzia ARPAV. Le attività dell'agenzia sono: • prevenzione e controllo ambientale; • previsione, informazione ed elaborazione meteo-climatica e radar-meteorologica; • organizzazione e gestione del sistema informativo regionale per il monitoraggio ambientale ed epidemiologico in relazione ai fattori ambientali; 1
• promozione di attività di educazione ambientale ed informazione ambientale; • fornitura di supporto tecnico-scientifico per la valutazione di impatto ambientale e per la determinazione del danno ambientale; • promozione di iniziative di ricerca di base ed applicata sulle forme di tutela ambientale. L’agenzia si articola in una Direzione Centrale, due Dipartimenti Regionali e sette Dipartimenti Provinciali. 1.2 Servizio Informatica e Reti SIER (Servizio Informatica e Reti) è collocato nell’Area Amministrativa della Direzione Centrale dell’ARPAV. Lo stage è stato svolto presso l'ufficio SIER. Le mansioni del SIER sono: • Gestisce l’infrastruttura informatica e le risorse strumentali hardware di tutta l’agenzia; • Gestisce e coordina il mantenimento delle banche dati dell’Agenzia ed i servizi di assistenza su tutte le applicazioni informatiche dell’Agenzia, con particolare riferimento al Sistema Informativo Regionale Ambientale del Veneto (SIRAV); • Realizza, anche mediante la collaborazione con le altre strutture dell’Agenzia, i rapporti integrati sugli indicatori ambientali e la definizione degli stessi; • Svolge il ruolo di riferimento unitario aziendale in termini di standard operativi, architetture delle realizzazioni, attivazione e gestione tecnica dei portali internet/intranet; • Coordina e svolge la gestione della connettività aziendale voce e dati, nonché la telefonia fissa e mobile, ed i servizi collegati; • Coordina e svolge la gestione tecnico operativa per il funzionamento, la manutenzione e la connettività delle reti di monitoraggio dell’Agenzia; • Organizza, coordina ed ha la responsabilità sulle attività, sulle risorse umane direttamente assegnate, anche per gli aspetti disciplinari, e sulle risorse strumentali afferenti al Servizio; • Svolge le funzioni di dirigente per le attività di servizio ai sensi della normativa sulla sicurezza del lavoro (D.Lgs. n. 81/2008); 2
• Applica le procedure inerenti la gestione del budget e degli obiettivi aziendali; • Applica il Sistema di Gestione della Qualità. 1.3 Processi dell’agenzia Il processo di sviluppo di un nuovo servizio è composto da cinque fasi: 1. La richiesta di un servizio da parte di una delle aree dell’ARPAV. 2. Istituzione di una commissione interna composta da personale della struttura richiedente e dai membri del SIER.. La commissione valuta le esigenze e la fattibilità della richiesta. Vengono valutati i seguenti aspetti: • Esistenza di servizi interni già in grado di soddisfare la richiesta; • La disponibilità di risorse sia finanziarie che umane; • La complessità del servizio richiesto; • Le competenze necessarie per la creazione del servizio. Se l’esito della valutazione è positivo si decide se sviluppare il prodotto internamente o se, mediante una gara d’appalto, affidare lo sviluppo ad un ente esterno. 3. Viene svolta l’analisi dei requisiti. Quindi a seconda della decisione nella fase precedente si procede allo sviluppo del servizio: • Internamente: viene nominato un gruppo di sviluppo coordinato da un direttore, vengono inoltre previste delle riunioni atte a verificare l’avanzamento del progetto. • Esternamente: vengono nominati due coordinatori uno interno e uno esterno facente parte dell’ente vincitore della gara d’appalto. I coordinatori seguiranno lo sviluppo del software mediante riunioni periodiche e verbalizzate. 4. La manutenzione a seconda di come deciso può essere fatta internamente o affidata ad un ente esterno. 5. Il servizio viene dismesso se ritenuto obsoleto o se diventa non conforme ad obblighi istituzionali. 3
1.4 Tecnologie In questa sezione vengono descritte le tecnologie adoperate dall’agenzia. 1.4.1 Sistemi operativi Vengono utilizzati sia i sistemi operativi liberi come la distribuzione Ubuntu del sistema operativo Linux, sia i sistemi operativi proprietari quali le varie versioni di Microsoft Windows. Figura 1.2: Sistemi operativi. 1.4.2 Tecnologie per lo sviluppo Per lo sviluppo di applicazioni sono largamente adoperate le tecnologie quali PHP e JavaScript. Figura 1.3: Tecnologie per lo sviluppo. Per la parte di gestione delle informazioni vengono principalmente utilizzati i software della Oracle e PostgreSQL. Figura 1.4: Tecnologie per la gestione delle informazioni. 4
1.5 Tipologie di clienti e servizi offerti I clienti dell’ARPAV possono essere racchiusi in tre categorie: • Amministrazioni Pubbliche regionali; • Enti pubbliche e private; • Cittadini. I seguenti servizi sono accessibili a tutte e tre le categorie: • Analisi e relazioni tecniche ambientali; • Servizio di informazione e formazione; • Meteorologia ed agro-meteorologia; • Neve e valanghe. Il servizio di Supervisione sedimenti marini è accessibile alle prime due categorie di clienti. Mentre i seguenti servizi sono accessibili soltanto alle Amministrazioni Pubbliche regionali: • Monitoraggio qualità delle acque; • Monitoraggio aria ed emissioni; • Monitoraggio sullo stato dei suoli e delle attività estrattive; • Monitoraggio sulla produzione e gestione rifiuti. 5
6
Capitolo 2 Il progetto nella strategia dell’agenzia Questo capitolo descrive il progetto di stage le motivazioni dietro alla proposta di stage da parte dell’agenzia. Vengono inoltre descritti i vari vincoli imposti sul progetto. 2.1 L’agenzia e gli stage Lo stage è uno strumento che presenta vantaggi sia per lo stagista che per l’agenzia. Per l’agenzia ci sono svariati lati positivi derivanti dallo stage, tra i quali: • Permette di valutare le capacità dello stagista per una possibile futura collaborazione. • In alcuni casi apporta innovazione al interno dell’agenzia. • L’agenzia ha la possibilità di cimentarsi nei progetti innovativi e sperimentali mitigando i costi e i rischi che si avrebbero impiegando il personale interno all’agenzia stessa. Anche per lo stagista i vantaggi dello stage sono molteplici: • Di fondamentale importanza è l’acquisizione dell’esperienza lavorativa concreta. • Possibilità di collaborazioni future con l’agenzia mediante dei contratti a progetto. • Arricchimento del proprio curriculum vitae. 7
Nel caso specifico la motivazione da parte dell’agenzia nella proposta dello stage è stata guidata dalla voglia di cimentarsi in un campo innovativo sconosciuto e non sperimentato, bot per Telegram, ampliando in questo modo i propri canali di consegna dell’informazione. 2.2 Il progetto In questa sezione viene descritto il progetto e gli obiettivi dello stage proposto dall’agenzia. 2.2.1 Telegram Per parlare del progetto è necessario introdurre il servizio Telegram. 2.2.1.1 Descrizione di Telegram Telegram è un servizio di messaggistica istantanea basato su cloud ed erogato senza fini di lucro dalla società Telegram LLC. Figura 2.1: Logo di Telegram Per poter utilizzare il servizio di Telegram c’è bisogno di: • Un numero di cellulare, al quale viene associato il profilo utente. • Un client per Telegram, ne esistono per cellulari, browser e computer. • Una connessione internet. Mediante Telegram è possibile comunicare con altri utenti di Telegram mandando messaggi di testo, immagini, file audio, posizione geografica e tante altre tipologie di contenuto. Un basilare utilizzo di Telegram consiste nel: • Trovare un utente mediante la barra di ricerca. • Mandargli un messaggio. • Ricevere una risposta. 8
2.2.1.2 I Bot per Telegram Un utente, oltre a ricercare altri utenti, può ricercare i bot. La modalità di conversazione con un bot è analoga alla conversazione con altri utenti (si manda un messaggio e si riceve una risposta). I bot sono delle applicazioni che ricevono i messaggi degli utenti, gli elaborano per capirne il contenuto e mandano un messaggio in risposta. Queste applicazioni sono in esecuzione sugli server (o semplicemente sugli computer) predisposti da chi gli ha creati, quindi non sui server di Telegram. Figura 2.2: Logo del Bot che gestisce i Bot di Telegram. Quindi a grandi linee durante una conversazione di un utente con un bot, Telegram funge da mero tramite dei messaggi. 2.2.2 Descrizione del progetto La descrizione dello stage nel piano di lavoro è la seguente: “Lo stage sarà finalizzato alla creazione di un bot per Telegram. Più nello specifico il bot permetterà la consultazione dei dati relativi al livello idrografico dei corsi d’acqua e ai parametri meteo.” Dalle riunioni successive si è capito che la dicitura “parametri meteo” significava: il livello di concentrazione di PM10 (materiale particolato il cui diametro aerodinamico è uguale o inferiore a 10µm), è uno degli indicatori della qualità dell’aria. I dati relativi ai livelli idrometrici dei corsi d’acqua sono forniti dalle stazioni idrometriche situate presso diversi corpi idrici del Veneto. Invece i dati relativi alle concentrazioni di PM10 sono prelevati dalle stazioni che misurano la qualità dell’aria, dislocate nel territorio del Veneto Nell’agenzia sono presenti i sistemi che gestiscono, memorizzano e trasformano i flussi di dati generati dalle varie stazioni, sia idro che quelle relative alla 9
concentrazione di PM10. Quindi i dati d’interesse per il progetto sono reperibili in formato XML o JSON. 2.2.3 Obiettivi All’inizio dello stage gli obbiettivi erano i seguenti: • Creare un bot per Telegram con le seguenti caratteristiche: ◦ Permette la consultazione dei dati relativi ai livelli idrometrici dei corsi d’acqua della regione del Veneto. ◦ Permette la consultazione dei dati relativi alle concentrazioni di PM10 rilevate dalle stazioni della regione del Veneto. ◦ Al superamento di certe soglie di criticità, sia per i livelli dell’acqua sia per le concentrazioni di PM10, viene inviata una notifica agli utenti iscritti alla stazione che ha superato il livello di criticità. ◦ Permette di visualizzare i grafici degli andamenti sia per le stazioni idro si per quelle relative al PM10. ◦ Permette di trovare le stazioni vicine alla posizione geografica indicata. • Creare un sito web che spiega il come usare il bot. • Redigere la documentazione per il bot. • Pubblicare il codice sorgente del software prodotto su GitHub. Figura 2.3: Logo di GitHub. 2.3 Vincoli Questa sezione descrive i vari vincoli sul progetto. 2.3.1 Vincoli di tempo La durata dello stage deve essere obbligatoriamente compresa tra 300 e 320 ore. Con l’agenzia è stato concordato un impiego di 320 ore che corrispondono a 40 giorni di lavoro a tempo pieno. 10
2.3.2 Vincoli tecnologici L’agenzia ha imposto due vincoli sulle tecnologie per il progetto: • Il sistema operativo del server su cui sarà in esecuzione il bot deve essere Ubuntu. • Il software deve essere distribuito con la licenza GNU GPL. 11
12
Capitolo 3 Il progetto di stage Questo capitolo tratta nel dettaglio il progetto di stage svolto. 3.1 Piano di lavoro Per poter accedere allo stage è necessario stilare un piano di lavoro, che riporta le principali attività previste per lo stage. Figura 3.1: Diagramma di Gantt delle attività. Sono state previste tre fasi principali con attribuiti a ciascuna di esse anche i tempi di svolgimento stimato (in ore): • (80) Studio e analisi: questa fase è dedicata a: ◦ (24) Studio del servizio Telegram per capire i limiti e le potenzialità di questo servizio; ◦ (24) Analisi dei sistemi dell'agenzia per capire le fonti dei dati e possibili componenti riutilizzabili. ◦ (32) Studio dei bot per Telegram per capire quali caratteristiche deve possedere un software di questo tipo. 13
• (40) Progettazione: questa fase è dedicata alla riflessione sulla struttura che deve assumere il codice. • (200) Implementazione: questa fase è composta da: ◦ (40) Realizzazione del prototipo del bot: per via della natura sperimentale del progetto si è preferito introdurre questa prima versione per poter esplorare e comprendere più a fondo le potenzialità e i vincoli derivanti dallo sviluppo di un bot per Telegram, che non sono evidenti da una mera analisi delle documentazioni e dei sistemi esistenti. ◦ (120) Realizzazione della versione finale del bot: si tratta di una versione stabile, che viene arricchita di funzionalità in modo incrementale. ◦ (40) Verifica del codice: si tratta di una attività finale che prevede la revisione di tutto il codice, alla ricerca di eventuali incongruenze, mancanze o bug tralasciati durante il regolare processo di sviluppo. Questa attività permette la correzione del codice ma non l’incremento di funzionalità. 3.2 Analisi dei requisiti 3.2.1 Requisiti comuni I requisiti sono stati adeguati ed incrementati durante tutta la fase di sviluppo del software, si è preferito adottare un approccio che favorisse la massima flessibilità nell’evoluzione del software. Essendo un progetto innovativo e stato ritenuto strategico dare una più grande importanza alla reattività del software alle valutazioni, commenti e critiche raccolte durante la realizzazione incrementale del software stesso. Dopo la fase di studio dei bot per Telegram si è visto che era meglio creare due bot distinti: • Uno che si occupa delle funzionalità relative ai livelli dei corsi d’acqua; • E’ un altro che si occupa delle funzionalità relative alle concentrazioni di PM10. I due bot di seguito sono riferiti tramite i nominativi: IdroBot e PM10bot. Il codice sorgente dei due bot è commentato seguendo le convenzioni di Javadoc. 14
Per i due bot è stato deciso di stilare la documentazione e di creare delle pagine web che introducono l’utilizzo dei bot agli utenti. Requisiti validi per entrambi i bot: • I bot sono in grado di accettare i comandi nel seguente formato: “/nomeComando [parametro]” • Il comando stazione: “/stazione 42” visualizza le informazioni sulla stazione avente l’identificativo 42; • Gestione degli errori: gli errori di utilizzo dei comandi da parte dell’utente vengono segnalati mediante un messaggio, e viene visualizzato un esempio di uso corretto del comando. • Il comando segui: “/segui 42” permette di iscriversi alle segnalazioni della stazione avente l’identificativo 42; • Il comando nonseguire: “/nonseguire 42” permette di disiscriversi dalla stazione avente l’identificativo 42; • Il comando stazioni: “/stazioni” visualizza l’elenco di tutte le stazioni; • I bot sono in grado di ricevere e memorizzare la posizione geografica inviata dall’utente; • Dopo che un utente ha mandato una posizione geografica, tra le informazioni relative alle stazioni comparirà anche la distanza della stazione dalla posizione indicata. • Il comando posizione: “/posizione” visualizza la posizione mandata dall’utente; • Il comando seguikm: “/seguikm 100” iscrive l’utente alle stazioni nel raggio di 100 chilometri dalla posizione geografica precedentemente mandata; • Il comando stazionikm: “/stazionikm 100” visualizza l’elenco delle stazioni nel raggio di 100 chilometri dalla posizione geografica precedentemente mandata dall’utente; • Il comando stazionikm visualizza le stazioni ordinate per distanza, se l’utente ha precedentemente mandato una posizione geografica; • Il comando help: “/help” visualizza i comandi disponibili; • Il comando help con un parametro: “/help nomeComando” visualizza la descrizione dettagliata del comando “nomeComando”; • Vendono visualizzati dei messaggi introduttivi all’apertura di una conversazione con i bot; 15
• Nella sintassi dei comandi il carattere spazio “ ” è interscambiabile con il carattere trattino basso “_”. Di conseguenza tutti i comandi presentati dai bot possono essere eseguiti premendo su di essi; • Il comando stop: “/stop” disiscrive l’utente da tutte le stazioni è cancella la posizione geografica associata ad esso; • Il comando iscrizioni: “/iscrizioni” mostra le stazioni a cui un utente è iscritto; • Vengono generati dei file di log che riportano i comportamenti anomali dei bot e dei sistemi con cui i bot interagiscono; • Gestione della grandezza dei file di log: i file di log sono gestiti in modo che la loro grandezza non cresca in modo eccessivo; • Avvio automatico dei bot: i bot si riavviano automaticamente dopo il riavvio del server. 3.2.2 Requisiti IdroBot Questo bot tratta le stazioni idrometriche. I requisiti per il bot IdroBot: • Le informazioni relative ad una stazione idrometrica sono: ◦ Il nome della stazione; ◦ La provincia; ◦ Il comune; ◦ L’identificativo della stazione; ◦ Il grafico degli andamenti del livello dell’acqua della stazione; ◦ ora della misurazione più recente; ◦ il livello dell'acqua più recente. • Per alcune stazioni idrometriche sono disponibili anche i livelli di criticità, che sono dei valori del livello dell’acqua associati al grado di criticità. Il grado di criticità può essere: ordinario, moderato o elevato. E’ possibile iscriversi soltanto alle stazioni idrometriche che hanno il livello di criticità definito; • Il comando nonseguirenessuno: “/nonseguirenessuno” permette di disiscriversi da tutte le stazioni; 16
• Il meccanismo delle segnalazioni: quando il livello di criticità di una stazione viene superato viene mandata una segnalazione a tutti gli utenti iscritti alla stazione; • Il comando stazioni visualizza le stazioni ordinate per distanza, se l’utente ha precedentemente mandato una posizione geografica; • Il comando fiumi: “/fiumi” visualizza l’elenco dei corsi d’acqua che hanno delle stazioni associate; • Il comando stazionifiume: “/stazionifiume Muson dei Sassi” visualizza l’elenco delle stazioni relativa al fiume Muson dei Sassi; • Il comando stazionicriticitadefinita: “/stazionicriticitadefinita” visualizza l’elenco delle stazioni che hanno definiti i livelli di criticità dell'acqua. 3.2.3 Requisiti PM10bot Questo bot tratta solo le stazioni relative alla misura della qualità dell’aria, che hanno dei rilevatori della concentrazione del PM10. I requisiti per il bot PM10bot: • Le informazioni relative ad una stazione, ricavate dal più recente bollettino dei dati validati: ◦ Nome della stazione; ◦ Provincia; ◦ Data di creazione del bollettino; ◦ Data a cui sono riferiti i dati indicati; ◦ Media giornaliera della concentrazione di PM10; ◦ Numero di superamenti della concentrazione limite di PM10 da inizio anno; ◦ Indice di qualità dell’aria della stazione. • Il bot si occupa anche della generazione del grafico degli andamenti delle concentrazioni di PM10 partendo dai dati non validati (dati in diretta) degli ultimi 7 giorni; • Per tutte le stazioni le concentrazioni critiche sono fissate ai seguenti valori: ◦ 50 µg/m3 valore soglia di concentrazione del PM10; ◦ 100 µg/m3 concentrazione doppia del valore soglia. 17
• Il meccanismo delle segnalazioni: quando il livello di criticità di una stazione viene superato viene mandata una segnalazione a tutti gli utenti iscritti alla stazione; • Il meccanismo delle segnalazioni: viene mandata una segnalazione a tutti gli utenti iscritti ad una stazione se la concentrazione media del PM10 del bollettino esaminato, relativo alla stazione, supera una delle concentrazioni critiche. La segnalazione mandata informa anche quale concentrazione critica è stata superata. Per ciascuna stazione le segnalazioni vengono mandate una sola volta al giorno; • Il comando seguitutte: “/seguitutte” permette di iscriversi da tutte le stazioni; • Il comando nonseguirenessuna: “/nonseguirenessuna” permette di disiscriversi da tutte le stazioni. 3.3 Tecnologie Questo capitolo motiva la scelta delle principali tecnologie utilizzate durante il progetto. 3.3.1 PHP Per realizzare i bot c’era un ampia scelta di linguaggi tra cui: Java, Python, PHP C#, Rubby, Go, Lua, Haskell, Scala, OCaml. Figura 3.2: Logo del linguaggio PHP. E’ stato scelto di usare il PHP per conformarsi ai linguaggi usati nell’agenzia, poiché questo permette una più facile manutenzione del software da parte del personale dell’agenzia stessa. 18
3.3.2 Telegram Bot API Telegram mette a disposizione delle API apposite per la creazione dei bot. Sono documentate molto bene, e risultano di facile utilizzo. Figura 3.3: Schema delle Telegram Bot API. Nel interfacciare un bot con Telegram bisogna scegliere il modo in cui farlo, ci sono due modi: Webhook e Long polling. Webhook: consiste nel indicare a Telegram una funzione del bot da richiamare quando Telegram riceve da un utente un messaggio destinato al bot stesso (callback). Long Polling consiste in: • Il bot manda una richiesta a Telegram per scoprire se ci sono degli aggiornamenti; • Telegram mantiene la richiesta aperta finché non sono disponibili degli aggiornamenti; • Quando gli aggiornamenti sono disponibili Telegram gli invia al bot. Si è preferito adottare il Long Polling perché risulta di più facile manutenibilità, poiché non richiede di aprire l’accesso al server dall’esterno, ed inoltre richiede una meno approfondita conoscenza del funzionamento di Telegram. 3.3.3 Bash Sono stati scritti degli script da eseguire mediante l’interprete di comandi bash per realizzare le funzionalità di: • Riavvio automatico dei bot al riavvio del server; • Gestione della grandezza dei file di log. 19
Figura 3.4: Lodo di Bash. Gli script realizzano le funzionalità richieste mediante il comando crontab messo a disposizione dal sistema operativo Ubuntu. 3.3.4 MySQL E’ stato adottato il MySQL come sistema per la gestione di basi di dati relazionali (RDBMS). Lo si è preferito in un ottica che sottolinea l’importanza data alla manutenibilità. I principali motivi per la sua scelta sono: • E’ ampiamente conosciuto dal personale dell’agenzia; • Presenta una vasta documentazione, ed una comunità di sostegno attiva; • E’ perfettamente adatto per la realizzazione delle funzionalità richieste dal progetto. Figura 3.5: Logo MySQL. Le funzionalità che hanno richiesto l’utilizzo di una base di dati: • Memorizzazione della posizione geografica inviata dall’utente; • Gestione delle sottoscrizioni alle stazioni; • Gestione del meccanismo di notifiche. 20
3.4 Progettazione architetturale Questa sezione descrive la struttura dell’applicazione ad un alto livello di astrazione. 3.4.1 Architettura complessiva Nonostante la grande somiglianza della struttura del codice dei due bot si è preferito mantenere il loro codice scisso per garantire una maggior chiarezza del loro funzionamento, e rendere così il codice più comprensibile in modo da velocizzare il tempo necessario per un intervento di manutenzione adattiva. Le componenti principali dei due bot: • La base di dati; • Modulo di parsing dei messaggi ricevuti dagli utenti; • L’insieme dei comandi; • La componente che si occupa dell’avvio e dell’arresto del bot; • Le componenti responsabili del reperimento dei dati relativi alla parte di business del progetto, quali: ◦ Le informazioni sulle stazioni; ◦ I dati delle stazioni; ◦ I grafici degli andamenti delle misurazioni. • Il modulo concerne la gestione delle notifiche; • Per il bot PM10 la componente responsabile della generazione dei grafici degli andamenti. 3.4.2 Database I bot interagiscono con la base di dati mediante l’uso di apposite procedure memorizzate su MySQL, questo permette un maggior controllo sul accesso al database. Inoltre per accedere al database i bot hanno degli account appositi con permessi adeguatamente ristretti. Di seguito è riportato il diagramma E-R (Entity-Relationship) per la base di dati relativa al bot IdroBot. 21
Figura 3.6: Database IdroBot. Invece cui di seguito è riportato il diagramma E-R per la base di dati utilizzata dal bot PM10bot. Figura 3.7: Database PM10bot. 3.5 Progettazione di dettaglio 3.5.1 Considerazioni generali Per rendere il processo di sviluppo dell’applicazione flessibile e reattivo, è stato scelto di effettuare la progettazione di dettaglio a pari passo con l’attività di codifica, quindi si è riportato il dettaglio della progettazione direttamente nel codice mediante i commenti in stile Javadoc. Con un tale approccio è stato ritenuto importante mantenere la struttura del codice semplice, in modo da rendere comprensibile ed evidente il comportamento dell’applicazione. 22
3.5.2 Struttura dei file Questa è la struttura dei file del bot PM10bot: ArpavPM10bot (cartella radice) • ArpavPM10bot.log – File contenente i log generati dal bot. • ArpavPM10bot.php – Contiene il codice del bot. • ArpavPM10botLauncher.php – Parte del codice che eseguire il bot. • connect_DB.php – Parte del codice necessaria per connettersi al database. • descrizione_comandi.txt - Descrizioni dei comandi per il bot. • start.sh – Script da invocare per avviare il bot in background. • stop.sh – Script da invocare per fermare l'esecuzione del bot. • mysql_database (cartella) ◦ createDB.sql – Contiene le istruzioni SQL che richiamano le istruzioni di creazione delle tabelle e delle procedure. ◦ createProcedures.sql – Contiene le istruzioni SQL per la creazione delle procedure. ◦ createTables.sql – Contiene le istruzioni SQL per la creazione delle tabelle. ◦ dropDB.sql – Contiene le istruzioni SQL che richiamano le istruzioni di eliminazione delle tabelle e delle procedure. ◦ dropProcedures.sql - Contiene le istruzioni SQL per l’eliminazione delle procedure. ◦ dropTables.sql • pChart (cartella) – Contiene i file necessari per la generazione dei grafici. 3.6 Funzionamento dei bot Questa sezione mostra l’utilizzo più comune del bot PM10bot da parte di un utente di Telegram. 3.6.1 Cominciare ad utilizzare il bot Mediante la funzionalità di ricerca di uno dei client di Telegram, 23
Figura 3.8: Barra di ricerca di Telegram. si ricerca il bot di interesse, nel nostro caso PM10bot che in Telegram è stato registrato con il nome ArpavPM10bot. Figura 3.9: Ricerca di ArpavPM10bot. Premendo sul icona del bot trovato e successivamente sul pulsante “Avvia”, Figura 3.10: Pulsante di avvio di un bot. viene visualizzato il messaggio introduttivo del bot. Figura 3.11: Messaggio introduttivo del bot ArpavPM10bot. Ora il bot è avviato. Per procedere con l’utilizzo del bot si può premere sul pulsante rappresentante il carattere barra obliqua “/”, messo a disposizione dal client di Telegram, Figura 3.12: Pulsante barra obliqua. per visualizzare la lista scorrevole di tutti i comandi disponibili per il bot. 24
Figura 3.13: Lista di comandi per il bot. 3.6.2 Ricercare una stazione Inviando al bot il comando “/stazioni”, Figura 3.14: Il comando /stazioni. viene visualizzata una lista ordinata e scorrevole di tutte le stazioni dell’agenzia che hanno i sensori per la rilevazione della concentrazione di PM10. Figura 3.15: Elenco scorrevole delle stazioni. Premendo sul comando riportato sotto la dicitura “Dettagli:” di una delle stazioni (nel nostro caso sul comando “/Stazione_500021975”), Figura 3.16: Comando per dettagli sulla stazione. 25
vengono visualizzate le informazioni dettagliate sulla stazione, Figura 3.17: Informazioni dettagliate sulla stazione. e il grafico degli andamenti della stazione. Figura 3.18: Grafico degli andamenti della stazione. 3.7 Verifica e validazione 3.7.1 Verifica Dopo ogni incremento significativo delle funzionalità, per verificare il coretto comportamento dei due bot sono stati predisposti dei comandi di test da eseguire in sequenza. I comandi di test sono stati scritti in modo da comprendere tutte le tipologie di input. Inoltre l’ambiente di esecuzione del software è stato stressato in modo da simulare dei malfunzionamenti dei sistemi con cui i bot interagiscono. Ecco un esempio di comandi di test eseguiti per un test parziale del comando “/stazione”: • /stazione • /stazione a b 26
• /stazione abc • /stazione 400000000 • /stazione 500000106 • /stazione 500000079 • /stazione 500015004 I parametri usati appartengono a diverse classi di input, quindi richiamano funzionalità diverse del comando. Identificativi delle stazioni con a fianco descritta la categoria di appartenenza: • 400000000 – Rappresenta una stazione inesistente; • 500000079 – Identifica una stazione non di fondo (stazione situata lontano dalle strade e dal traffico); • 500000106 – Identifica una stazione di fondo senza i dati per PM10; • 500015004 - Identifica una stazione di fondo con i dati per PM10. Altre categorie di parametri: • abc – Provoca l’errore di sintassi; • a b - Provoca l’errore “numero di parametri errato". Tutti gli errori generati da un uso errato dei comandi vengono gestiti informando l’utente della causa dell’errore, ed fornendogli un messaggio di aiuto. 3.7.2 Validazione Nella fase finale del progetto è stato fatto un controllo per verificare che il software scritto fosse valido rispetto ai requisiti fissati. Grazie alla natura incrementale della metodologia di sviluppo tutti i requisiti sono stati soddisfatti. 27
28
Capitolo 4 Valutazione retrospettiva Questo capitolo descrive brevemente considerazioni fatte sul progetto. 4.1 Successo del progetto Il progetto è stato concluso con successo, i due bot per Telegram dono diventati dei servizi ufficiali dell’ARPAV. Inoltre l’agenzia è rimasta molto soddisfatta del lavoro svolto. 4.2 Considerazioni sull’agenzia Il personale dell’agenzia ha fatto una fantastica impressione, la loro sincera disponibilità ed il costante impegno nel lavoro sono fortemente motivanti. L’ambiente di lavoro predisposto è stato molto confortevole ed incentivante. 4.3 Sviluppi futuri Se nel tempo si vede che il servizio dei bot viene usato ed apprezzato dagli utenti, si potrebbe considerare la creazione di un sistema centralizzato di controllo dei bot e l’adozione o lo sviluppo di un framework specializzato nella creazione dei bot con le funzionalità di notifica delle criticità e di consultazione dei dati. 29
30
Glossario A API Application Programming Interface: indica ogni insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di strumenti specifici per adempire a un determinato compito all’interno di un certo programma. Spesso con tale termine si intendono le librerie software disponibili in un certo linguaggio di programmazione. Pag. 16 ARPAV Agenzia Regionale per la Protezione Ambientale del Veneto. Pag. 1-3, 5, 24, 27 B Bot Sono dei programmi che imitano il modo di fare o di comunicare degli umani. Pag. 1, 2, 5-17, 19-21, 23, 24, 27 C Cloud In informatica con il termine inglese cloud computing si indica un paradigma di erogazione di risorse informatiche, come l’archiviazione, l’elaborazione o la trasmissione di dati, caratterizzato dalla disponibilità su richiesta attraverso Internet. Pag. 7 D Database Il termine database, in italiano base di dati o banca dati (a volte abbreviato con la sigla DB), indica un insieme organizzato di dati. Le informazioni contenute in un database sono strutturate e collegate tra loro secondo un particolare modello logico scelto dal progettista del database (ad es. relazionale, gerarchico, reticolare o a oggetti). Pag. 19 31
F Framework È una struttura logica di supporto allo sviluppo di software. Alla base ci sono una serie di librerie di codice, utilizzabili con uno o più linguaggi di programmazione. Pag. 24 G GitHub Servizio web di hosting per lo sviluppo di progetti software, che usa il sistema di controllo di versione Git. GitHub offre la possibilità di gestire pository privati a pagamento o pubblici, molto utilizzati per lo sviluppo di progetti open source. Pag. 9 GNU GPL GNU General Public License è una licenza per software libero ampiamente utilizzata, che garantisce agli utenti finali la libertà di eseguire, studiare, condividere e modificare il software. Pag. 10 P PM10 Materiale particolato il cui diametro aerodinamico è uguale o inferiore a 10µm. Pag. 8, 9, 12, 15, 16, 19, 22, 27 S SIER Servizio Informatica e Reti. Pag. 2, 3 SIRAV Sistema Informativo Regionale Ambientale del Veneto. Pag. 2 W Windows È una famiglia di ambienti operativi e sistemi operativi dedicati ai personal computer, sviluppato da Microsoft Corporation. Pag. 4 32
Bibliografia “Presentazione dell’agenzia ARPAV.” ➔ http://www.arpa.veneto.it/arpav/chi-e-arpav “Cos’è Telegram?” ➔ https://telegram.org/faq “Client di Telegram per il browser.” ➔ https://web.telegram.org “Cosa sono i bot per Telegram?” ➔ https://core.telegram.org/bots “Codice sorgente del bot IdroBot.” ➔ https://github.com/venetoarpa/ArpavIdroBot “Codice sorgente del bot PM10bot.” ➔ https://github.com/venetoarpa/ArpavPM10bot “Cos’è il PM10?” ➔ http://www.arpa.veneto.it/temi-ambientali/aria/qualita- dellaria/metodologia/approfondimenti/inquinanti-atmosferici#pm “Sito del linguaggio di programmazione PHP” ➔ https://php.net/ “Sito di MySQL” ➔ https://www.mysql.com “Telegram Bot API” ➔ https://core.telegram.org/bots/api “Manuale di Bash” ➔ https://www.gnu.org/software/bash/manual/html_node/index.html 33
“Il comando crontab di Linux.” ➔ http://www.computerhope.com/unix/ucrontab.htm “Pagina web di descrizione del bot ArpavIdroBot” ➔ http://www.arpa.veneto.it/temi-ambientali/idrologia/arpavidrobot “Pagina web di descrizione del bot ArpavPM10bot” ➔ http://www.arpa.veneto.it/temi-ambientali/aria/arpavpm10bot 34
Puoi anche leggere