49
Università degli Studi di Padova Dipartimento di Matematica "Tullio Levi-Civita" Corso di Laurea in Informatica Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram Tesi di laurea triennale Relatore Prof.Tullio Vardanega Laureando Tommaso Panozzo Anno Accademico 2017-2018

Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Università degli Studi di Padova

Dipartimento di Matematica "Tullio Levi-Civita"

Corso di Laurea in Informatica

Sviluppo di un motore di statistiche e di unchatbot per monitorare account Instagram

Tesi di laurea triennale

Relatore

Prof.Tullio Vardanega

Laureando

Tommaso Panozzo

Anno Accademico 2017-2018

Page 2: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Tommaso Panozzo: Sviluppo di un motore di statistiche e di un chatbot per monitorareaccount Instagram, Tesi di laurea triennale, c© Dicembre 2017.

Page 3: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Indice

1 Azienda Ospitante 11.1 Struttura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1.1 Reparti Tecnici . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Rapporto con l’Innovazione . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Prodotti dell’Area Sviluppo . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Tecnologie Utilizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 Gestione di Progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Progetti di Stage nella Strategia Aziendale 72.1 Miriade e i rapporti con l’università . . . . . . . . . . . . . . . . . . . 72.2 Proposte di Stage 2017/2018 . . . . . . . . . . . . . . . . . . . . . . . 82.3 Proposta di Stage Scelta . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.3.1 Obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.2 Vincoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Svolgimento del Progetto 133.1 Studio delle Piattaforme . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1.1 Caratteristiche delle API di Instagram . . . . . . . . . . . . . . 133.1.2 Caratteristiche delle Bot API di Telegram . . . . . . . . . . . . 143.1.3 Definizione dei casi d’uso del prodotto . . . . . . . . . . . . . . 15

3.2 Analisi dei requisiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.1 Scopo del prodotto . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.2 Attori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.3 Casi d’uso salienti . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3 Architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.3.1 Business Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3.2 Persistenza dei Dati . . . . . . . . . . . . . . . . . . . . . . . . 233.3.3 Front end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.4 Progettazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.4.1 Spring Boot e Maven . . . . . . . . . . . . . . . . . . . . . . . . 253.4.2 Struttura del codice di routing dei comandi del bot . . . . . . . 263.4.3 Gestione di Utenti con Diversa Autenticazione . . . . . . . . . 283.4.4 Instagram Subscriptions . . . . . . . . . . . . . . . . . . . . . . 283.4.5 Design del Cron . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4.6 Internazionalizzazione del Bot . . . . . . . . . . . . . . . . . . . 303.4.7 Log Unificati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.5 Verifica e Validazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.6 Prodotto Finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

iii

Page 4: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

iv INDICE

4 Valutazioni Retrospettive 374.1 Raggiungimento degli Obiettivi . . . . . . . . . . . . . . . . . . . . . . 37

4.1.1 Obiettivi Aziendali . . . . . . . . . . . . . . . . . . . . . . . . . 374.1.2 Obiettivi Personali . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2 Bilancio Formativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.3 Valutazioni Personali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.3.1 Preparazione del Corso di Laurea al Lavoro . . . . . . . . . . . 41

Bibliografia 43

Page 5: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Elenco delle figure

1.1 Logo di Miriade S.p.A. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Reparti Tecnici di Miriade . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Funzionamento di un bot . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.4 Logo di Spring by Pivotal e Apache Maven . . . . . . . . . . . . . . . 5

1.5 Principi Agile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.6 Logo di Jira e Bitbucket . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1 Esemplificazione del funzionamento di un bot. . . . . . . . . . . . . . . 8

3.1 Principali metodi di input dei comandi del chatbot . . . . . . . . . . . 14

3.2 Mockup del Prodotto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3 Mockup Instagram Top Popular . . . . . . . . . . . . . . . . . . . . . . 17

3.4 Tipologie di Utenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.5 Use Case Principali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.6 Logo di PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.7 Prodotti di Google Cloud Platform. url: https://cloud.google.com 25

3.8 Parte del Package Instagram della Business Logic . . . . . . . . . . . . 29

3.9 Workflow del post per gli utenti autenticati . . . . . . . . . . . . . . . 29

3.10 Workflow del post per gli utenti non autenticati . . . . . . . . . . . . . 30

3.11 Console di Gestione del Cron di GCP . . . . . . . . . . . . . . . . . . 31

3.12 Console di Controllo dei Log di GCP . . . . . . . . . . . . . . . . . . . 32

3.13 Schema TDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.14 Screenshot delle schermate di avvio ed autenticazione . . . . . . . . . 34

3.15 Screenshot delle schermate di performance di account e singolo post . 34

3.16 Screenshot della schermata di suggerimento dell’orario per pubblicare 35

3.17 Screenshot della schermata di download di un media . . . . . . . . . . 35

v

Page 6: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

vi ELENCO DELLE TABELLE

Elenco delle tabelle

2.1 Piano di Lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.1 Comparazione Database Considerati . . . . . . . . . . . . . . . . . . . 24

4.1 Raggiungimento degli Obiettivi Aziendali . . . . . . . . . . . . . . . . 374.1 Raggiungimento degli Obiettivi Aziendali . . . . . . . . . . . . . . . . 384.2 Realizzazione delle Funzionalità Applicative Obbligatorie . . . . . . . 384.2 Realizzazione delle Funzionalità Applicative Obbligatorie . . . . . . . 394.3 Realizzazione delle Funzionalità Applicative Opzionali . . . . . . . . . 394.4 Raggiungimento degli Obiettivi Personali . . . . . . . . . . . . . . . . 394.4 Raggiungimento degli Obiettivi Personali . . . . . . . . . . . . . . . . 40

Page 7: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Capitolo 1

Azienda Ospitante

1.1 Struttura

Figura 1.1: Logo di Miriade S.p.A.

Miriade1 è un’azienda di consulenza informatica nata nel 2000 a Caldogno, inprovincia di Vicenza; attualmente occupa 2 sedi: Thiene, la principale, e Padova.Entro il primo trimestre del 2018 ne aprirà un’altra a Milano.Conta approssimativamente 50 dipendenti divisi tra amministrazione e 5 reparti tecnici.

Miriade S.p.A. è divisa in due settori: amministrativo e tecnico. Del repartoamministrativo fanno parte l’ufficio legale, l’ufficio acquisti, i back e front office, l’ufficiopaghe, i commerciali e l’ufficio marketing. Per quanto riguarda gli uffici tecnici, Miriadeha un 5 divisioni: il loro numero è elevato, se si considerano quelle presenti nelle aziendedi pari dimensioni. Questo la rende maggiormente appetibile per clienti con progettiche necessitino di prodotti completi e che attraversino diversi ambiti.

1.1.1 Reparti Tecnici

I reparti tecnici e le loro principali occupazioni sono:

∗ Sviluppo si occupa dello sviluppo di applicazioni on demand (sia web sia mobile),di portali aziendali (tipicamente B2B o intranet) e dello sviluppo di integrazioni

1Miriade S.p.A.. url: http://www.miriade.it.

1

Page 8: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

2 CAPITOLO 1. AZIENDA OSPITANTE

tra sistemi già esistenti (utile per chi volesse estendere un prodotto giunto a finevita o per l’affinamento di prodotti realizzati in casa dal cliente);

∗ Servizi Cloud si occupa di creare ambienti cloud nuovi o di migrare sistemiesistenti on premise;

∗ Database Administration DBA si occupa di installazione, migrazione, gestionedi database dei clienti (sia SQL che noSQL);

∗ Big Data è la divisione più recente e si occupa di analisi di big data: dallacreazione di cluster (principalmente Hadoop2) allo sviluppo di modelli predittividi machine learning3;

∗ Servizi Sistemistici si occupa di installare, configurare e gestire presso il clientesoluzioni di networking, virtualizzazione, antivirus, storage, nonché di soddisfarele esigenze aziendali in termini di hardware e configurazioni;

∗ Business Intelligence BI si occupa della creazione di datawarehouse (archividi dati interni all’azienda, utili per analisi di profitti e per prendere decisionisulla strategia dell’azienda), caricando dati da fonti eterogenee e della creazionedi dashboard di reportistica.

Figura 1.2: Reparti Tecnici di Miriade

Miriade è partner di due dei più importanti e innovativi provider di servizi cloud:Amazon (con Amazon Web Services [g]) e Google (con Google Cloud Platform [g]); questapartnership viene spesa soprattutto nei reparti sviluppo e servizi cloud, Big Data esistemistico.

2Hadoop è un framework per consentire l’elaborazione dati in parallelo di grandi quantità di dati.I cluster Hadoop sono costituiti da numerosi nodi che si occupano ciascuno di una porzione ridotta didati.

3I modelli di machine learning sono modelli matematici che, ricevendo un insieme di dati in input,forniscono un output che sia coerente con dei pattern appresi in una precedente fase di training.Questi modelli vengono spesso allenati su un gran numero di osservazioni per poi essere utilizzati pereffettuare previsioni. Chiariamo con un esempio. Si potrebbe allenare un modello fornendo in inputsia i valori di pressione e umidità di alcune stazioni metereologiche di una zona che un valore booleanoche indica se il giorno seguente alle misurazioni ha piovuto o meno; in un secondo momento si potrebbechiedere al modello di prevedere la possibilità di pioggià per l’indomani, considerati in input i valori dipressione ed umidità attuali. Ovviamente l’accuratezza di tali modelli cresce all’aumentare del numerodi dati di allenamento (e test) e all’aumentare della correlazione tra grandezze in input e in output.

Page 9: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

1.2. RAPPORTO CON L’INNOVAZIONE 3

(a) Logo AWS (b) Logo GCP

1.2 Rapporto con l’Innovazione

Nonostante l’innovazione non sia gratuita (la formazione e l’ambientamento dei tecnicicon le nuove tecnologie hanno infatti un costo temporale non trascurabile), essa è alcentro della strategia aziendale di Miriade; la società è infatti in costante ricerca dellenovità e delle nuove tendenze in fatto di prodotti, strumenti e piattaforme. Un esempioè dato dai numerosi prodotti creati con i Beacon Bluetooth[g](tecnologia che permettela micro-localizzazione dei dispositivi mobili attraverso piccoli dispositivi bluetooth chetrasmettono un indentificativo univoco nel raggio di pochi metri); un altro esempio èdato dall’interesse che Miriade ha manifestato da subito nell’ambito dei chatbot, checominciano ad essere sempre più in voga.

Figura 1.3: Funzionamento di un bot

Nel reparto Sviluppo questa filosofia di rinnovamento costante è abbracciata datutti i dipendenti ed è messa in evidenza dalle frequenti discussioni sulle novità infatto di framework/prodotti da utilizzare, dalla propensione alla formazione continuanonché dall’apertura all’adozione di nuovi framework/tecnologie proposti da membridel gruppo. Tuttavia, non è sufficiente che i soli reparti tecnici desiderino innovare: èfondamentale anche l’atteggiamento del titolare e degli altri commerciali, che stimolanoi clienti a scegliere soluzioni moderne e innovative. La reputazione che si è creataMiriade nel tempo è quella di un’azienda che sa suggerire al cliente soluzioni nuove aproblemi che egli stesso non aveva compreso appieno, spesso sfruttando le numerosecompetenze derivanti dalla stretta collaborazione dei 5 reparti tecnici (si vedano i repartitecnici). Questo modus operandi consente di realizzare prodotti ad ampio spettro; dueesempi possono essere modelli predittivi di machine learning che monitorano la lineadi produzione attraverso dispositivi IoT e interagiscono con l’utente attraverso chatboted estensioni per applicativi di reportistica nell’ambito della Business Intelligence.

Uno stimolo spontaneo all’innovazione è dato dall’interazione con i tecnici degli altrireparti nei momenti di pausa o nelle chat, email o post nel social network interno. La

Page 10: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

4 CAPITOLO 1. AZIENDA OSPITANTE

propensione allo scambio di competenze è ben radicata nei dipendenti: in fase di analisie progettazione sono numerosi i confronti e le interazioni tra i vari reparti. Nella fase diprogettazione della mia esperienza di stage, ad esempio, nonostante io appartenessi alreparto Sviluppo non è mancato il confronto con alcuni tecnici Big Data per la sceltadelle tecnologie di storage più appropriate, con tecnici DBA per discutere la strutturadel database e con i sistemisti per valutare l’opzione più conveniente per effettuare ildeployment del sistema.

Miriade investe molto sulla formazione: quasi tutti i dipendenti dell’area tecnicaconseguono una certificazione all’anno, che verrà poi esposta con orgoglio nella sedeprincipale. Queste certificazioni consentono a Miriade di essere partner di aziendeleader come Amazon AWS, Google Cloud Platform, Nutanix, Trifacta, Qlik e altri.

1.3 Prodotti dell’Area Sviluppo

Alcuni dei prodotti dell’area sviluppo sono:

∗ applicazioni on demand web e mobile per clienti esterni;

∗ consulenze (ad esempio riguardanti la migrazione di applicazioni che girano onpremise verso qualche servizio cloud) e formazione su alcuni framework specifici(come Liferay o Spring);

∗ definizione di user experience e user interface dei prodotti;

∗ sviluppo di portali aziendali (per lo più B2B4 e interni all’azienda);

∗ componenti necessarie a prodotti di altri reparti interni (come script/funzioniperiodiche di collezione dati da iniettare in dataset di Big Data);

∗ strumenti per la gestione interna (ad esempio il portale per l’inserimento deirapportini);

∗ applicazioni non commissionate da clienti esterni ma proposte dai dipendenti.

1.4 Tecnologie Utilizzate

Per lo sviluppo di applicazioni web si adotta principalmente Java e si fa uso inmaniera estensiva di Spring. Quest’ultimo è un framework che facilita lo sviluppo diapplicativi (in particolare web app) grazie a: numerosi package avanzati (come quelliper interfacciarsi con DB SQL e NoSQL), l’incentivo ad adottare buone pratiche diprogrammazione (una su tutte la Dependency Injection) ed alcuni vantaggi pratici cheriducono il tempo necessario al deployment (come la possibilità di creare facilmente

4B2B è l’acronimo di Business To Business e sta ad indicare i prodotti che fungono da interfacciatra aziende diverse; si differenzia dai prodotti B2C (Business To Customer) che, invece, colleganoun’azienda con il consumatore finale.

Page 11: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

1.5. GESTIONE DI PROGETTO 5

un’applicazione web in formato jar5). Miriade si occupa anche di formazione su Springpresso clienti. Per la gestione dei progetti Java, in particolare delle dipendenze e degliscript di compilazione, si utilizza Maven; per buona parte di essi viene utilizzato ancheLiferay, piattaforma per cui Miriade ha conseguito diverse certificazioni.

Figura 1.4: Logo di Spring by Pivotal e Apache Maven

Per il deployment delle applicazioni, ove possibile, vengono preferite le soluzioni incloud piuttosto che on premise.

Queste sono alcune delle tecnologie adottate, ma, come spiegato nella sezione sulrapporto con l’innovazione, nelle fasi di analisi e progettazione, il team di sviluppoè aperto a nuove proposte per quanto riguarda innovative e differenti tecnologie daadottare.

1.5 Gestione di Progetto

Il team di sviluppo implementa un modello Agile: il lavoro viene diviso in sprint delladurata di 2 settimane. Durante questo periodo ciasun membro si occupa di portare atermine i task a lui assegnati facendo progredire il progetto. La maggior parte dei taskviene stabilita ed assegnata all’inizio dello sprint (qualche aggiunta è permessa maperlopiù per la correzione di errori, o per imprevisti con priorità elevata); al terminedelle 2 settimane il team effettua una valutazione retrospettiva. Lo strumento utilizzatoper il tracciamento delle issue e dei task è Jira; quello per effettuare del planning e pertracciare diagrammi di Gantt è Teamwork.

Per il versionamento del codice viene usato git, in particolare Bitbucket (su un serverprivato), che si integra facilmente con Jira e permette di correlare issue o task con irelativi commit. Nexus viene utilizzato come repository di pacchetti (perlopiù librerie

5Il file jar è un’applicazione web standalone, l’alternativa avrebbe richiesto l’installazione econfigurazione manuali di un Web Container (come Apache Tomcat) e la creazione di file war.

Figura 1.5: Principi Agile

Page 12: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

6 CAPITOLO 1. AZIENDA OSPITANTE

interne); Bamboo (della suite di Atlassian come Jira e Bitbucket) viene utilizzato inalcuni progetti per gestire CI e CD6.

Figura 1.6: Logo di Jira e Bitbucket

6CI sta per Continuous Integration mentre CD per Continuous Deployment e indicano sistemiautomatizzati di compilazione, test e deployment del codice al fine di ridurre al minimo il lavoro daeffettuare ad ogni rilascio per aumentare quindi la frequenza di deployment di nuove versioni.

Page 13: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Capitolo 2

Progetti di Stage nella StrategiaAziendale

2.1 Miriade e i rapporti con l’università

I motivi principali per cui Miriade partecipa all’evento StageIT e propone dei progettidi stage a studenti laureandi sono principalmente due:

∗ avviare, proseguire o completare progetti che rischiano di bloccarsi per mancanzadi tempo delle risorse interne;

∗ valutare nuovi elementi da inserire eventualmente in organico.

Va precisato che l’area sviluppo non è la sola ad aderire ad iniziative simili: anche ireparti DBA, BI e Big Data partecipano ad eventi dell’Università di Padova e accettanostagisti.

La collaborazione con l’Università di Padova è motivo d’orgoglio per Miriade, laquale, infatti, oltre a partecipare all’evento StageIT, nell’anno didattico 2016/17 è stataazienda proponente di un capitolato d’appalto del corso di Ingegneria del Softwaree due dei suoi dipendenti hanno tenuto un seminario tecnologico dedicato ai BeaconBluetooth1.

1I Beacon sono dei piccoli dispositivi che attraverso la tecnologia Bluetooth a bassa energia (BLE)trasmettono in broadcast un codice identificativo univoco (UUID) settabile dal programmatore. Idispositivi mobili possono sfruttare l’univocità di questo codice e, per alcuni scopi, l’intensità delsegnale al fine di localizzare l’utente in uno spazio ristretto.

7

Page 14: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

8 CAPITOLO 2. PROGETTI DI STAGE NELLA STRATEGIA AZIENDALE

2.2 Proposte di Stage 2017/2018

∗ Un primo progetto chiedeva allo stagista di svolgere un’analisi delle modalità diintegrazione di un bot di una delle principali piattaforme di comunicazione (Sky-pe, Messenger, Telegram, WhatsApp) e di implementarne uno che permettessel’interazione degli utenti con alcuni social network, in particolar modo Insta-gram. Allo stagista erano richiesti anche l’esplorazione e l’utilizzo dei frameworkdisponibili per la creazione di chatbot.

∗ Una seconda proposta verteva sullo studio delle API di Amazon AWS e GoogleCloud Platform e sulla realizzazione di una console unificata, semplice ed intuitivada usare, per la gestione dei backup dei dischi connessi alle istanze attive pressociascuno dei due provider. Tale console consiste di un portale web a cui l’utentefinale possa collegare i propri account AWS e GCP per gestire in manieratrasparente le istanze.

∗ Il terzo progetto consisteva nello sviluppo di un’estensione per il prodotto direportistica Qlik Sense (un applicativo per la raccolta e la visualizzazione di datiaziendali, utile per analisi di Business Intelligence e per prendere decisioni distrategia aziendale). In particolare, allo stagista era proposto di lavorare con itool a disposizione nell’ambiente di Qlik Sense per l’estensione delle dashboardal fine di realizzare un plugin che mettesse a disposizione dell’utente un set direport più efficace e personalizzabile di quello fornito out-of-the-box.

Figura 2.1: Esemplificazione del funzionamento di un bot.

2.3 Proposta di Stage Scelta

Ho scelto il primo dei progetti di stage proposti da Miriade (si veda la sezione precedente§2.2). Le principali motivazioni che mi hanno spinto a chiedere a Miriade di potermidedicare a questo particolare progetto sono le seguenti:

∗ Interesse personale verso i Chatbot. Il fenomeno dei chatbot (finti utenti dipiattaforme di messaggistica che sono in realtà applicativi software) mi incuriosisceda qualche anno: essi rappresentano infatti un nuovo paradigma di interfacciautente molto differente da quelli tradizionali (web app, app native o altro) e permolti aspetti simile ad un’interfaccia da riga di comando (seppur più amichevole).I chatbot, infatti:

– necessitano di un minor impiego di risorse per lo sviluppo di un’interfacciautente;

Page 15: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

2.3. PROPOSTA DI STAGE SCELTA 9

– non necessitano di installazione nei device degli utenti (che sono spesso restiia scaricare nuove applicazioni a causa di consumo di dati e memoria neldispositivo);

– vengono percepiti come app native (e non web);

– sono multipiattaforma senza alcuno sforzo di sviluppo (almeno in tutte lepiattaforme in cui l’applicazione di messaggistica viene distribuita).

∗ Opportunità di approfondire API di prodotti leader. La connessione conpiattaforme esterne è un’esigenza comune alla maggior parte delle applicazionimoderne.Dovermi interfacciare e dover studiare le API di due piattaforme leader comeTelegram e Instagram è stata un’ottima occasione per capire come si implementinoquesti servizi connessi. Ad esempio:

– entrambi i servizi espongono delle API RESTful (l’architettura più popolaree comune per comunicare con i web service2);

– Instagram richiede di effetturare l’autenticazione con il protocollo OAuth2.0, molto diffuso e considerato tra i più sicuri sistemi di autenticazione;

– Instagram consente di indicare un indirizzo per creare un webhook, in mododa notificare il proprio web service ogni volta che un utente autenticatopubblica un’immagine (Instagram effettua una chiamata POST con ilcontenuto all’endpoint specificato).

∗ Opportunità di implementare un’architettura moderna. La natura stan-dalone del progetto (che non è un’estensione di un prodotto esistente) e la libertàlasciatami dal proponente riguardo alle tecnologie da utilizzare permettono distudiare le moderne soluzioni di back end (ad esempio soluzioni serverless, basatesu servizi di terze parti che si occupano di effettuare la manutenzione necessariasui server) e di implementare un’architettura moderna.

2.3.1 Obiettivi

Obiettivi aziendali

L’obiettivo principale del mio stage era quello di sviluppare un bot per una piattaformadi messaggistica che fornisse servizi utili per gli utenti di Instagram desiderosi dimigliorare le prestazioni del proprio account. Le attività da svolgere durante il periododi stage sono riassunte nel seguente piano di lavoro:

2I web service sono componenti di un sistema che consentono l’interazione con applicativi terzi;ad esempio i web service delle Bot API di Telegram espongono le funzioni che i bot possonoeseguire (inviare messaggi, ricevere aggiornamenti, . . . ), mentre i web service di Instagram consentonointerrogazioni al database di Instagram (richiedere il numero di follower di un dato utente, la sua fotoprofilo, . . . ).

Page 16: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

10 CAPITOLO 2. PROGETTI DI STAGE NELLA STRATEGIA AZIENDALE

Tabella 2.1: Piano di Lavoro

Attività Ore di lavoro

Studio di Java e Spring 40

Studio API Telegram e Instagram 32

Studio GCP e AWS e scelta stack tecnologico 16

Progettazione del prodotto 16

Sviluppo connettore Instagram 40

Sviluppo connettore Telegram 40

Sviluppo core 40

Definizione funzionalità aggiuntive 8

Sviluppo funzionalità aggiuntive 72

(a) Logo Instagram (b) Logo Telegram

Obiettivi Personali

Gli obiettivi personali che mi sono posto per lo stage sono stati:

∗ la realizzazione del prodotto richiesto dall’azienda;

∗ lo studio approfondito della struttura di un back end moderno e la sua imple-mentazione;

∗ l’inserimento in un team di sviluppo stimolante;

∗ l’adottare un’attitudine propositiva e una propensione alla collaborazione;

∗ l’approfondimento della metodologia agile by doing ;

∗ l’eventuale inserimento in azienda dopo la laurea.

In particolare, oltre al soddisfacimento dell’obiettivo aziendale di realizzare unprodotto funzionante, volevo sfruttare l’opportunità e la predisposizione di Miriade allasperimentazione di nuove tecnologie per realizzare un’architettura moderna, magariserverless. Già in fase preliminare mi era chiaro che tale obiettivo avrebbe comportatoun maggior impiego di ore nelle fasi di studio, di progettazione e probabilmente anche

Page 17: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

2.3. PROPOSTA DI STAGE SCELTA 11

di codifica (a causa della minor conoscenza dei nuovi strumenti) e che questo avrebbediminuito l’efficacia del mio lavoro sul progetto. Il tutor aziendale ha però valutatoche ciò non sarebbe stato un problema e che l’adozione delle tecnologie individuatesarebbe stata compatibile con la realizzazione del progetto.

2.3.2 Vincoli

Vincoli temporali

La durata dello stage è stata di 8 settimane (320 ore), da svolgersi tutte presso la sedeprincipale, a Thiene, e seguendo gli orari dei dipendenti: 9:00 - 13:00, 14:00 - 18:00.

Vincoli metodologici

Un vincolo di progetto riguardava le interazioni con il tutor; in particolare, eranoprevisti:

∗ alcune ore di formazione su Java e Spring

∗ un momento di formazione su Jira

∗ un’ora di configurazione di Bitbucket e Jira

∗ confronti al termine della fasi di analisi e di progettazione.

Il tutor è rimasto comunque sempre a disposizione e le interazioni sono state frequenti.

La definizione delle specifiche del prodotto è stata effettuata con una dipendente checonosce molto bene il social network Instagram e le esigenze degli utenti del prodotto.

Il progetto doveva utilizzare la stessa metodologia agile applicata dall’intero teamdi sviluppo con sprint di 2 settimane (si veda §1.5 Gestione di Progetto).

Vincoli tecnologici

Miriade ha richiesto che il front end dell’applicazione (la componente che si interfacciacon Telegram) fosse scritto in Java e in particolar modo utilizzasse Maven e SpringBoot.

Il sistema di versionamento adottato è stato Bitbucket di Atlassian, strumentoutilizzato da tutto il team sviluppo, mentre per la gestione del progetto è stata creatauna board agile su Jira per gestire gli sprint e tracciare l’avanzamento.

Page 18: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

12 CAPITOLO 2. PROGETTI DI STAGE NELLA STRATEGIA AZIENDALE

Altri vincoli teconologici non sono stati definiti a priori, ma, al termine della fasedi analisi, lo stack tecnologico proposto avrebbe dovuto essere approvato dal tutor.migliorare le prestazioniAPI

Page 19: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Capitolo 3

Svolgimento del Progetto

3.1 Studio delle Piattaforme

La proposta di stage era realizzare un chatbot che permettesse di monitorare e migliorarele prestazioni del proprio account Instagram.

Tra le piattaforme di messaggistica che permettono di implementare dei chatbot èstata scelta Telegram perché molto flessibile e con una buona base di utenti.

3.1.1 Caratteristiche delle API di Instagram

L’interfaccia con le API di Instagram1 era un elemento fondamentale per la realizzazionedel prodotto. Purtroppo tali API consentono di effettuare un numero ristretto dioperazioni.

In particolare gli endpoint utilizzati più significativi sono stati quelli relativi alleseguenti funzioni:

∗ autenticazione per permettere agli utenti di effettuare il login;

∗ statistiche sul post per permettere di salvare il numero di like e commenti cheun post ha ricevuto in un certo momento;

∗ statistiche sull’utente per salvare nome e numero dei seguaci di un dato utente.

Un limite delle API di Instagram è dato dalla mancanza di informazioni "storiche":non si possono cioè ottenere dati su statistiche nel passato, che sarebbero utili pereffettuare previsioni e indicare all’utente i progressi.

1Instagram Developer Portal. url: https://instagram.com/developer/.

13

Page 20: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

14 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.1: Principali metodi di input dei comandi del chatbot

(a) Input con Comandi (b) Custom Keyboard (c) Inline Keyboard

3.1.2 Caratteristiche delle Bot API di Telegram

La piattaforma bot di Telegram2 consente di collegare la propria applicazione aTelegram.

Dal punto di vista dell’interfaccia grafica, la piattaforma mette a disposizionedell’utente 4 principali metodi di input:

∗ input testuale (semplici messaggi di testo) che sono però poco intuitivi (l’utentenon necessariamente conosce la sintassi da utilizzare né quali sono le funzionalitàdisponibili) e richiedono all’utente lo sforzo di digitare la propria richiesta;

∗ comandi i comandi sono sequenze di caratteri (senza spazi) preceduti da un"/" vengono interpretati dai bot per eseguire specifici compiti, inoltre, quandol’utente inizia il messaggio con uno slash, l’applicazione suggerisce i possibilicomandi all’utente;

∗ custom keyboard il metodo di input più amichevole è rappresentato da unatastiera personalizzata: composta cioè da pochi pulsanti specificati dallo svilup-patore;

∗ inline keyboard è composta da una serie di bottoni che compaiono direttamentesotto ad uno specifico messaggio inviato dal bot, e rappresenta le possibili risposteindirizzate a quel preciso messaggio.

Queste sono le principali modalità attraverso cui l’utente può inviare contenuti albot. Le più intuitive sono la terza e la quarta e sono state usate il più possibile dal bot.

2Telegram Bot API. url: https://core.telegram.org/bots.

Page 21: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.2. ANALISI DEI REQUISITI 15

3.1.3 Definizione dei casi d’uso del prodotto

La definizione dei casi d’uso del prodotto è stata da me effettuata attraverso alcuneriunioni con una dipendente di Miriade esperta di Instagram. Tali riunioni hannoportato alla realizzazione dei seguenti mockup come linee guida.

Figura 3.2: Mockup del Prodotto

Per la descrizione dei casi d’uso significativi si veda § 3.2.3 Casi d’uso salienti.

3.2 Analisi dei requisiti

3.2.1 Scopo del prodotto

Il prodotto avrebbe dovuto essere un bot sulla piattaforma Telegram che consentisseagli utenti di monitorare e migliorare le performance del proprio account Instagram.Le performance di un account dipendono da alcune metriche legate all’account e aisuoi post. Le metriche più comuni sono:

∗ follower il numero di seguaci che ha un determinato account. Più che il valoreassoluto di questo numero è significativo l’aumento relativo tra due istanti ditempo.

∗ post like il numero di mi piace che un determinato post ha totalizzato. I likevengono ricevuti in maggiore quantità nelle prime ore di vita di un post, mentregià dopo 24 ore il numero tende a non incrementare ulteriormente.

∗ commenti il numero di commenti che gli altri utenti scrivono in risposta adun post effettuato. Sebbene non sia automatico che tutti i commenti sianodi apprezzamento (come invece è per i like), essi rappresentano una metricapositiva. I commenti negativi, infatti, (in cui gli altri utenti denigrano il post ol’autore) sono nella pratica una minima percentuale e contribuiscono ugualmentead accrescere la notorietà dell’autore del post.

Page 22: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

16 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

∗ post engagement: è una metrica relativa al singolo post composta dalle treprecedenti; essa indica la visibilità e l’apprezzamento generato da un determinatopost in relazione al numero di utenti che solitamente seguono l’autore. Per ilcomputo ho utilizzato la formula:

engagement =like+ commenti

followers

Come si può notare, tale valore aumenta all’aumentare delle interazioni legatead un post ma risulta normalizzato al numero di seguaci.Una formula simile viene utilizzata da Instagram per valutare quali siano icontenuti più interessanti, ma essa non è resa pubblica dall’azienda.

∗ popular for hashtag è una metrica booleana che rappresenta l’ingresso o menodi un post nella pagina dei "post popolari" per uno degli hashtag indicati indescrizione.Quando un utente posta un contenuto è solito aggiungere delle etichette3 (ohashtag) alla descrizione. Queste etichette vengono indicizzate da Instagram edè possibile, tramite la funzione cerca o il click/tocco su un hashtag, visualizzare ipost pubblicati recentemente da tutti gli utenti con profilo pubblico che conten-gono quello stesso hashtag.I primi 9 post di questa pagina sono post selezionati da Instagram che vengonovisualizzati da tutti gli utenti; tali post sono comunemente chiamati top popular4

(si veda la figura 3.3 come esempio).L’algoritmo utilizzato da Instagram per la scelta di quali post mostrare è scono-sciuto, ma è certo che i like, i commenti e il numero di follower lo condizionino(probabilmente è una variazione sulla formula di engagement indicata prima).Quando un post viene selezionato da Instagram e inserito tra i popular, essoottiene molta più visibilità migliorando notevolmente la propria performance.

3.2.2 Attori

Gli attori coinvolti nei casi d’uso del progetto sono:

∗ Telegram Bot API le API che Telegram mette a disposizione degli sviluppatoriper la creazione di bot;

∗ Instagram API le API che Instagram mette a disposizione per interrogare ildatabase e ottenere dati sugli utenti e sui post;

∗ Utenti sono utenti di Instagram e di Telegram che decidono di avviare unaconversazione con il bot per monitorare le proprie performance.

Per ottenere l’accesso più permissivo ai dati Instagram di un determinato utente ènecessario che egli autorizzi l’applicazione. Gli utenti sono però restii ad autorizzare

3La sintassi per indicare queste etichette è un cancelletto "#" (hashtag in inglese) seguito dall’eti-chetta scritta senza spazi. ad esempio, per i post relativi ad una giornata di sole, si potrebbe usare#sunnyday.

4Si consulti, a titolo di esempio la pagina https://www.instagram.com/explore/tags/sunnyday/.

Page 23: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.2. ANALISI DEI REQUISITI 17

Figura 3.3: Mockup Instagram Top Popular

applicazioni di terze parti a gestire il proprio account Instagram: in parte per la noiadi dover inserire username e password, in parte perché Instagram è solito bloccare iprofili di utenti che usano applicazioni di terze parti che violino le sue linee guida5.

Per rassicurare l’utente, al momento dell’autorizzazione dell’app, vengono richiestisolamente i permessi di visualizzare le proprie statistiche (like, followers, . . . ) e non,ad esempio, quelli per effettuare like o postare contenuti. L’utente inesperto potrebbeperò non notare ciò e rinunciare comunque del tutto all’autenticazione.

Si è scelto quindi di considerare 3 tipologie di utenti:

∗ autenticati: sono gli utenti che effettuano il login con Instagram permettendocosì di avere pieno accesso ai loro dati attraverso le API Instagram;

∗ indicanti l’username: sono utenti che indicano solamente il proprio username.Essi hanno accesso ad un set limitato di funzionalità che utilizzano quote pubbliche

5Alcune applicazioni di terze parti sfruttano l’autorizzazione fornita dall’utente per postare conte-nuti, seguire nuovi utenti, o mettere "mi piace" a post di altri in maniera automatica, violando lelinee guida di Instagram.

Page 24: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

18 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.4: Tipologie di Utenti

delle API di Instagram (quindi potrebbero aggiornare i dati con una frequenzaminore) o fanno affidamento a web crawler6;

∗ non autenticati: sono utenti che non effettuano il login né indicano il propriousername e utilizzano il bot per una serie minima di funzionalità (come il downloaddi media a partire dall’url di un post).

3.2.3 Casi d’uso salienti

UC1 Effettua login

Permette a qualsiasi utente di effettuare il login. Se l’utente è già autenticato vienesostituito il precedente account in favore di quello nuovo.

∗ UC1.1 Login con Instagram permette di autenticarsi attraverso le propriecredenziali di Instagram. È il modo consigliato e che mette a disposizionedell’utente tutte le funzionalità

∗ UC1.2 Login con l’username permette di autenticarsi inserendo solamente ilproprio nome utente di Instagram. È una modalità sconsigliata, ma a disposizionedegli utenti più diffidenti.

∗ UC1.3 Visualizza errore di login indica all’utente che l’username/passworderano errati (se è stato tentato un login autenticandosi con Instagram) ovveroche l’username non esiste o appartiene ad un utente privato (se è stato tentato illogin con il solo username).

6Per aggiornare alcuni dati degli utenti che indicano solamente il proprio username, il back endvisita le pagine web di instagram.com e scansiona il contenuto dell’html per estrapolare le informazionirilevanti. Questo metodo è meno affidabile perché non fa affidamento sull’immutabilità della strutturadella pagina web

Page 25: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.2. ANALISI DEI REQUISITI 19

Figura 3.5: Use Case Principali

Page 26: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

20 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

UC2 Visualizza messaggio di aiuto

Permette all’utente di ricevere un messaggio testuale che lo istruisca sulle funzionalitàdel bot e sulle loro modalità di fruizione.

UC3 Visualizza statistiche account

Permette all’utente di visualizzare informazioni riguardo al proprio account, come:

∗ il numero di seguaci;

∗ il numero di utenti seguiti;

∗ il numero di media condivisi finora;

∗ un grafico rappresentante l’andamento dei follower nelle ultime settimane.

UC4 Ottieni stima miglior momento per postare

Permette all’utente di ricevere una stima di quale sia il miglior momento della giornataper pubblicare un contenuto.

Tale stima viene inferita dall’engagement dei post passati nelle prime 2 ore di vita.Miriade intende affinare l’algoritmo di suggerimento dell’orario migliore per postareeffettuando analisi statistiche raffinate quando si saranno racconti un numero maggioredi dati sui post degli utenti. Ho implementato il design pattern Strategy al fine direndere agile la sostituzione dell’algoritmo con uno più avanzato.

Le informazioni salienti che vengono visualizzate sono:

∗ l’intervallo orario di 2 ore entro cui si consiglia pubblicare;

∗ una heatmap7 dell’engagement ottenuto dall’utente con i contenuti passati.

UC5 Visualizza statistiche ultimo post

Permette di visualizzare alcune informazioni circa l’ultimo post; in particolare:

∗ il numero di like;

∗ il numero di commenti;7L’heatmap è un grafico utilizzato per rappresentare funzioni che, presi due argomenti in input,

ne restituiscano uno di tipo numerico. Si presenta visivamente come una tabella le cui le colonneindicano uno dei valori in input, le righe l’altro e a ciascuna cella sia associato un numero. Solitamentele celle vengono colorate con intensità proporzionale al proprio contenuto.

Page 27: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.3. ARCHITETTURA 21

∗ l’engagement (cfr. equazione dell’engagement);

∗ se l’ultimo post è stato selezionato ed inserito Instagram nei popular per qualchehashtag, questi vengono visualizzati.

UC6 Inserisci URL nuovo post

Permette di inserire l’url del proprio post, dopo che si è pubblicato, per cominciare amonitorarne le performance.

Questo caso d’uso è necessario solamente agli utenti non autenticati tramite In-stagram. Quando un utente si autentica effettuando il login con Instagram, graziead un webhook8, il back end viene informato automaticamente della pubblicazione dinuovi contenuti, rendendo superflua questa funzionalità. Di contro, gli utenti che siautenticano inserendo solamente il proprio username devono informare manualmenteil back end dell’aggiunta di nuovi contenuti.

UC7 Download Media

Permette di inviare un link ad un post Instagram (di qualsiasi utente, purché pubblico)a cui il bot risponderà inviando il contenuto in chat.

È una funzione utile per effettuare il repost di contenuti o per salvarne una copia.Sono supportati i tipi di contenuti ad ora supportati da Instagram: video e immagini.

3.3 Architettura

Per l’applicazione, ho scelto un’architettura three-tier in cui i 3 strati Business Logic,Persistenza Dati e Front End fossero ben separati.

La separazione netta degli strati favorisce la loro manutenzione (ad esempio: sipuò rilasciare una nuova versione del front end senza che la business logic debbariavviarsi con esso) e l’estensione (ad esempio: per aggiungere una nuova piattaformadi messaggistica, o un’applicazione web, sarebbe sufficiente aggiungere un nuovoelemento di front end, senza alcuna modifica al sistema esistente).

La separazione è enfatizzata dall’utilizzo di tecnologie diverse per ciascuno strato.

8Instagram consente di indicare un indirizzo per creare un webhook, in modo da notificare il proprioweb service ogni volta che un utente autenticato pubblica un’immagine (Instagram effettua unachiamata POST con il contenuto all’endpoint specificato)

Page 28: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

22 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

3.3.1 Business Logic

Lo strato di Business Logic si occupa principalmente di:

∗ aggiornare periodicamente le statistiche dei vari post e account;

∗ esporre un endpoint per l’autenticazione ad Instagram con OAuth 2.0 9;

∗ esporre un endpoint su cui realizzare un webhook per gli aggiornamenti diInstagram.

Tecnologie

Si è scelto di utilizzare i prodotti offerti da Google Cloud Platform perché convenientidal punto di vista delle funzionalità e del prezzo. La Business Logic, in particolare, ètutta basata su Google Cloud Functions.Le Cloud Functions sono funzioni NodeJS che vengono invocate al verificarsi di unospecifico evento trigger. Questa tecnologia favorisce la scrittura di codice che rispettiil principio di singola responsabilità; infatti ogni compito viene incapsulato in unaspecifica Cloud Function.

Il cuore della Business Logic è quindi rappresentato dalle Cloud Functions, ma sononecessarie altre tecnologie per la coordinazione della loro esecuzione.Google Cloud Platform mette a disposizione Cloud Pub/Sub per l’invio di messaggi trai suoi prodotti.Avviene quindi che ogni funzionalità ha un suo topic (un titolo) associato (comeupdateFollowersCount); quando si vogliono attivare le funzioni associate è sufficienteemettere un messaggio Pub/Sub contenente quel topic ed un eventuale payload di datinecessari. Le funzioni che avranno quel preciso topic come evento trigger verrannoquindi invocate.

Le Cloud Functions permettono di limitare i costi di manutenzione del sistema(essendo totalmente gestite da Google non necessitano di aggiornamenti, antivirus,rinnovo di certificati o altro). Il costo del sistema è nullo, infatti le prime 2 milionidi invocazioni di funzioni e i primi 3.2 milioni di secondi di esecuzione (circa 890 ore)ogni mese sono gratuiti10.

Per supportare la schedulazione di compiti ricorrenti è stato necessario scrivere uncron. Per semplicità di gestione ho scelto di usare Google App Engine, un altro prodottodella suite di prodotti di GCP, che consente di effettuare il deployment di applicazionisenza curarsi dell’infrastruttura sottostante. Indicando in un file yaml l’opportuna

9OAuth 2.0 è un protocollo che permette a terze parti di ottenere accesso limitato agli accountdi un determinato utente presso un servizio http: nello specifico Instagram. Viene utilizzato perautorizzare il bot ad accedere ai dati Instagram di un determinato utente. Si veda OAuth Protocol.url: https://oauth.net

10I costi attualmente in vigore prendono in considerazione 3 parametri: il numero di invocazioni (iprimi 2 milioni sono gratuiti), il traffico di dati uscente (i primi 5GB sono gratuiti) ed il numero diGB-secondi di memoria complessivi (sono grauiti i primi 400000 GB-secondi, cioè 400000 secondi diesecuzione allocando 1GB di RAM o, ad esempio, 3.2 milioni secondi allocandone 128MB)

Page 29: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.3. ARCHITETTURA 23

configurazione si possono lanciare applicazioni che scalino automaticamente da zero acentinaia di istanze.Ho quindi realizzato un cron in Python per lanciare periodicamente dei messaggiPub/Sub che invocassero le necessarie funzioni.

3.3.2 Persistenza dei Dati

La persistenza dei dati è centrale nell’applicazione sviluppata in particolare per duemotivi: per mantenere uno storico delle varie statistiche raccolte al fine di mostrareall’utente dati rilevanti e per creare dataset sufficientemente ampi sui quali condurrequalche indagine statistica che sia significativa al fine di migliorare l’algoritmo disuggerimento del momento migliore per pubblicare.

La maggior parte dei dati da immagazzinare sono dati di statistiche associati adun certo istante in cui sono stati misurati. Ad esempio si vuol tener traccia dei like,commenti e engagement dei post pubblicati nelle ultime 48 ore, aggiungendo il valoreaggiornato ogni 10 minuti.Per fare questo verranno privilegiate operazioni di append piuttosto che update inmodo da preservare i dati storici. Questo richiede a sua volta che i dati siano lo strettonecessario, perché il numero di entrate nel database potrebbe crescere smisuratamente.

Tecnologie

Si è considerato dapprima se fosse più opportuno un database relazionale od uno nonrelazionale. La natura strutturata dei dati da inserire (tabelle con poche metriche eben definite) gioca a favore dei primi, mentre la maggior semplicità di interazione conun database non relazionale dal linguaggio NodeJS (utilizzato nelle Cloud Function)giocava a favore dei primi.Il fattore decisivo che ha condizionato la scelta in favore dei database relazionali èl’abilità di processare join in maniera efficiente. Come spiegato sopra, l’aggiunta dinuovi dati deve essere effettuata senza creare entrate inutili (se il numero di like di unpost è rimasto invariato dall’ultima misurazione, è inutile aggiungere una nuova entrata):la possibilità di effettuare join su una tabella temporanea, prima dell’inserimento deidati, consente di scremare i dati in ingresso dimandando al database il computo delledifferenze con quelli già presenti.

Ho considerato ulteriormente il servizio gestito Google BigQuery, per lo stoccaggio el’analisi di Big Data. BigQuery consente di interrogare rapidamente grandi quantità didati, ma ha un limite nella latenza relativamente elevata (tra i 5 e i 10 secondi) ancheper le query più banali su dataset di una decina di righe (probabilmente a causa deltempo necessario a dividere il dataset nei nodi che poi devono effettivamente eseguirela query) e per questo non l’ho ritenuto opportuno.

Per questa serie di considerazioni si è scelto di utilizzare PostgreSQL, in particolareil prodotto CloudSQL di Google Cloud Platform che fornisce un database PostgreSQLcompletamente gestito.

Page 30: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

24 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.6: Logo di PostgreSQL

Tabella 3.1: Comparazione Database Considerati

Tecnologia Pro Contro

MySQL - Veloce - Poco flessibile

- SQL compliant - Necessita di licenze

PostgreSQL - Veloce - Poco flessibile

- SQL compliant

NoSQL - Flessibile - Poco performante in join

BigQuery - Performante con dataset moltoampi

- Alta latenza, influente soprat-tutto con dataset ridotti

3.3.3 Front end

Il Front End consiste di una applicazione Java che si occupa di fornire un’interfacciautente attraverso le Bot API di Telegram.Il Front End si connette al database da cui ricava i dati da mostrare all’utente.

Tecnologie

Per il deployment si è optato, anche in questo caso, per Google App Engine per iseguenti motivi:

∗ è una soluzione completamente gestita con zero costi di manutenzione;

∗ è di semplice implementazione;

∗ è semplice la gestione di prodotti appartenenti tutti alla stessa suite (ad esempioviene fornita una console unificata dei log).

Per effettuare il deployment dell’applicazione, ho compiuto i seguenti passi:

Page 31: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.4. PROGETTAZIONE 25

Figura 3.7: Prodotti di Google Cloud Platform. url: https://cloud.google.com

(a) Logo Cloud Functions (b) Logo CloudSQL (c) Logo App Engine

1. grazie a Apache Maven e Spring ho potuto creare un eseguibile .jar dell’appli-cazione (si veda §1.4 Tecnologie Utilizzate);

2. specificando un semplice Dockerfile ho potuto creare un container Docker11

contenente il necessario per configurare ed avviare il modulo di front end ;

3. attraverso un file yaml, ho specificato quali fossero le configurazioni per AppEngine;

4. attraverso l’interfaccia di Google Cloud Platform da linea di comando, ho potutoeffettuare il deployment dell’applicazione in pochi minuti.

Si noti come i successivi deployment richiedano semplicemente:

1. la creazione del package .jar;

2. il build dell’immagine Docker ;

3. l’upload dell’app aggiornata;

consentendo quindi di lanciare in produzione una nuova versione del front end in menodi 2 minuti.

3.4 Progettazione

3.4.1 Spring Boot e Maven

Nella realizzazione del front end si è utilizzato Maven per la gestione delle dipendenze:attraverso un documento xml, noto con il nome di pom, è possibile definire tuttele dipendenze esterne del progetto (ad esempio framework come Spring Boot) e leistruzioni per effettuare la compilazione del progetto.

11I container Docker sono dei pacchetti contenente tutto quello che serve ad un’applicazione peressere eseguita. Sono isolati dal contesto e vengono caricati da App Engine in una o più macchinevirtuali a seconda delle esigenze di scalabilità dell’applicazione. Consentono, inoltre, di isolare ilsoftware da quello che è il sistema specifico in cui viene fatto girare, semplificandone la verifica.

Page 32: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

26 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Come anticipato, nel progetto, ho utilizzato estensivamente il framework SpringBoot. Alcuni dei vantaggi tratti dal suo utilizzo sono stati:

∗ Dependency Injection : l’iniezione delle dipendenze è un design pattern chemira a semplificare lo sviluppo e migliorare la testabilità del codice. Spring Bootmette a disposizione del programmatore l’annotazione @Autowired che consentel’iniezione automatica delle variabili da parte del framework.Supponiamo, ad esempio, che una classe C debba utilizzare un oggetto di un’altraclasse I. Per rispettare il principio di Inversione delle Dipendenze, C dovrebbedipendere da una astrazione di I, quindi è opportuno dichiarare un’interfacciaInterfaceI, che verrà implementata da I e che esponga il set minore possibiledi funzionalità. Si pone però il problema dell’istanziazione dell’oggetto specificoI: se la sua creazione fosse fatta da C, i nostri tentativi di isolare il più possibilele implementazioni delle interfacce dagli oggetti che le usano sarebbero vanificati.A questo punto entrano in gioco le annotazioni @Autowired e @Bean, semplificandoil lavoro dello sviluppatore. Supponiamo ad esempio le classi siano dichiaratecome segue:

Listing 3.1: Esempio di Autowiring di Spring

@Servicepublic class C {

@Autowiredprivate I i;

}

public interface InterfaceI {}

@Beanpublic class I implements InterfaceI {} �

Quando viene instaziato un oggetto di tipo C, Spring Boot cerca una classeannotata con @Bean che implementi l’interfaccia richiesta (InterfaceI) e sioccupa di iniettare un oggetto di questa classe nella proprietà i di C.Quello presentato è un caso semplice, a titolo esemplificativo. Spring Bootconsente di configurare in maniera raffinata i Bean, prima di effettuare l’injection.

∗ Package inclusi: Spring Boot include numerosi package utili per effettuareoperazioni comuni. Ad esempio il package JDBC fornisce un meccanismo sempliceed intuitivo per gestire le connessioni e le interrogazioni di un database esterno.

∗ Creazione di un jar: Spring Boot consente la creazione di un unico pacchettojar con tutto il necessario per eseguire l’applicazione; l’alternativa sarebbe laproduzione di un archivio war che deve però eseguito su un servlet (ad esempioApache Tomcat), il quale deve essere installato e manutenuto.

3.4.2 Struttura del codice di routing dei comandi del bot

Lo sviluppo di un bot presenta delle sfide legate al routing degli aggiornamenti. Gliaggiornamenti che Telegram invia all’applicazione sono di tipologie molto diverse tra

Page 33: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.4. PROGETTAZIONE 27

loro; alcuni esempi di aggiornamenti sono:

∗ un nuovo messaggio in una chat privata;

∗ un nuovo messaggio in un gruppo;

∗ un utente lascia un gruppo;

∗ il bot viene aggiunto in un gruppo;

∗ un utente modifica un messaggio inviato in precedenza;

∗ un utente invia una foto in una chat di gruppo;

∗ un utente preme su un inline button (si veda §3.1.2 Caratteristiche delle Bot APIdi Telegram).

Si deve prevedere un oggetto che effettui il routing di ciasun aggiornamento versol’oggetto handler a cui compete la sua gestione.

L’idea più intuitiva è inserire un metodo in ogni oggetto handler che valuti sel’aggiornamento ricevuto è di sua competenza ed eventualmente agisca.Questo approccio è di semplice implementazione e permette di avere una struttura delcodice chiara, ma comporta uno spreco di risorse: molti oggetti handler effettuerannogli stessi controlli sul medesimo aggiornamento, aumentando il tempo di risposta delserver.

Un secondo approccio potrebbe essere di inserire nel router un metodo che valutitutti i possibili casi e inoltri l’aggiornamento solamente all’handler designato.Questo porterebbe però ad un lungo elenco illeggibile di clausole if ed else cherenderebbero difficili l’aggiunta di nuovi handler e la manutenzione di quelli esistenti.

Il terzo approccio, quello adottato, è una versione ibrida dei primi due. Consistenell’effettuare alcuni dei controlli nel router, al fine di scremare l’insieme di handler acui viene inoltrato l’aggiornamento.Per non aumentare, però, le responsabilità del router e violare il principio di singolaresposabilità, sono i vari handler che devono dichiarare a quali tipologie di aggiorna-mento sono o non sono interessati.L’interfaccia degli handler si può esemplificare nella seguente:

Listing 3.2: Esempio di interfaccia di Handler degli aggiornamenti del bot

public enum ChatType {PRIVATE , GROUP , ALL

}public interface Handler {

boolean wantsTextMessage ();boolean wantsPhoto ();ChatType wantsMessageFromChat ();// altri

void handle(Update upd);} �

Page 34: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

28 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Mentre questa è una esemplificazione del metodo di routing :

Listing 3.3: Esempio di metodo di routing del bot

private List <Handler > handlers;

private route(Update upd) {Stream <Handler > selected = handlers.stream ();selected = selected.filter(h -> upd.chatType == h.

wantsMessageFromChat () || h.wantsMessageFromChat () ==ChatType.ALL);

if (upd.isMessage () && upd.hasText ()) {selected = selected.filter(Handler :: wantsTextMessage);

}if (upd.isMessage () && upd.isPhoto ()) {

selected = selected.filter(Handler :: wantsPhoto);}selected.foreach(h -> h.handle(upd));

} �3.4.3 Gestione di Utenti con Diversa Autenticazione

Come spiegato in §3.2.2 Attori, ci sono alcuni utenti che effettuano il login con Instagram,e alcuni utenti che forniscono solamente il proprio nome utente.Mentre per i primi si possono utilizzare le API di Instagram adoperando il tokenassociato a ciascun account senza preoccuparsi di raggiungere il limite della quotaprevista di utilizzo12, per la seconda categoria si devono usare dei token comuni (con ilrischio di eccedere i limiti di quota).

Un altro problema è che alcune statistiche richieste dal proponente non sono fornitedalle API di Instagram. Per esse è stato quindi necessario implementare alcuni crawler13

che analizzassero le pagine di instagram.com.

Nel diagramma in fig. 3.8 Parte del Package Instagram della Business Logic sipossono vedere alcune delle classi del pacchetto "Instagram" della business logic. Sinoti in particolare l’utilizzo delle interfacce Provider e delle classi Factory al fine diistaziare gli oggetti appropriati per ogni caso.Si noti anche come alcuni dati (come le statistiche sugli hashtag) siano ricavabiliunicamente tramite web crawler.

3.4.4 Instagram Subscriptions

Per migliorare l’esperienza degli utenti autenticati si è scelto di implementare le UserSubscriptions. Tale mecanismo consente di indicare ad Instagram un indirizzo dicallback su cui effettuare una chiamata in POST ogniqualvolta un utente autenticato

12Le API di Instagram consentono di effettuare fino a 5000 chiamate entro una sliding window diun’ora.

13I crawler sono applicazioni che scansionano le pagine web per estrapolarne dei dati.

Page 35: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.4. PROGETTAZIONE 29

Figura 3.8: Parte del Package Instagram della Business Logic

pubblica un nuovo contenuto.I nuovi post di questi utenti verrano quindi da subito monitorati dall’applicazione,senza che l’utente debba intraprendere alcuna azione.

Figura 3.9: Workflow del post per gli utenti autenticati

L’utilizzo di Cloud Functions è stato particolarmente appropriato per questafunzionalità, infatti:

∗ consente di contenere i costi al minimo (il costo è nullo nei momenti in cui il backend non stia elaborando richieste);

∗ consente una scalabilità del sistema pressoché illimitata (l’infrastruttura diGoogle invoca la funzione su una macchina differente per ogni richiesta ricevutaall’endpoint).

Page 36: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

30 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.10: Workflow del post per gli utenti non autenticati

3.4.5 Design del Cron

L’implementazione del cron fa affidamento sulla possibilità di configurare le applicazionidi Google App Engine con uno specifico documento cron.yaml.In questo documento è possibile specificare degli intervalli temporali allo scadere deiquali l’infrastruttura lancia l’applicativo.L’applicazione che funge da cron è composta da poche righe di codice Python perlanciare un messaggio Pub/Sub e notificare le funzioni appropriate.Ecco un estratto del file cron.yaml :

Listing 3.4: Porzione di cron.yaml di configurazione

cron:- description: Send an updateFollowers message to pubsub every 10

minutesurl: /publish/updateFollowersschedule: every 10 mins

- description: Send an updateFollowersCount message to pubsubevery 10 minutes

url: /publish/updateFollowersCountschedule: every 10 mins �

3.4.6 Internazionalizzazione del Bot

Nonostante al momento tutti i testi del bot siano in inglese, ho predisposto un mecca-nismo grazie al quale è possibile aggiungere il supporto ad altre lingue.Ho raccolto in un file di testo chiamato MessageBundle_en.properties tutti i testidiretti all’utente che si trovavano nell’applicazione Java del front end. Ad ognunodi tali testi ho associato una stringa che funge da chiave univoca per identificare ilmessaggio.Per insegnare al bot una nuova lingua è sufficiente duplicare il file MessageBundle,sostiuire i valori con nuovi messaggi (lasciando le chiavi invariate) e sostituire en nel

Page 37: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.5. VERIFICA E VALIDAZIONE 31

Figura 3.11: Console di Gestione del Cron di GCP

nome del file con la sigla della nuova lingua14 (ad esempio it per italiano o de pertedesco).Prima di inviare un messaggio, il bot controlla le preferenze dell’utente destinatario eutilizza la sua lingua preferita (se disponibile).

3.4.7 Log Unificati

L’utilizzo Google Cloud Platform come unica piattaforma per il deployment dei variservizi ha il vantaggio di tenere sotto controllo facilmente i costi e gli errori generatida tutte le componenti del prodotto.Si veda nella figura come si possono visualizzare e filtrare in un’unica pagina i loggenerati dai vari prodotti utilizzati.

3.5 Verifica e Validazione

Business Logic Ho sviluppato la parte di business logic, scritta in linguaggio NodeJS,seguendo il modello TDD (Test-Driven Development) che prevede che la scrittura delcodice sia preceduta dalla scrittura di un test automatico.In particolare le fasi sono:

1. scrittura di un test automatico che fallisca a causa della mancata implementazionedel codice che ne permette il superamento;

2. scrittura/modifica del codice affinché il test precedente funzioni15;

14Si fa riferimento al codice di lingua IETF.15È importante che il codice aggiunto sia lo stretto necessario e nulla più di quel che serve per

superare il test.

Page 38: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

32 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.12: Console di Controllo dei Log di GCP

3. verifica che le nuove aggiunte/modifiche al codice non abbiano portato al falli-mento di test precedentemente implementati (eventualmente ritorno al punto2);

4. pulizia del codice.

Ho utilizzato il framework di test Mocha e la libreria Chai per la gesione dei test.In particolare, Mocha si occupa di coordinare l’esecuzione dei test e di fornire un reportsui successi/fallimenti; Chai è una libreria che rende più agevole la verifica di asserzioniin JavaScript.

La scelta di utilizzare un approccio così aggressivo per i test della business logicè dovuta in gran parte alla mancanza di sicurezza rispetto ai tipi (type safety) diJavaScript. L’enorme flessibilità del linguaggio può infatti diventare un problema perlo sviluppo e la manutenzione quando si ha a che fare con progetti composti da ungran numero di elementi.

Persistenza Dati La parte di persistenza dei dati utilizza un servizio gestito daGoogle Cloud Platform commercializzato con il nome di CloudSQL. Si sono condottidei test manuali e si fa affidamento ai test automatici condotti dalla piattaforma.

Page 39: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.6. PRODOTTO FINALE 33

Figura 3.13: Schema TDD

Si è impostato il backup automatico giornaliero del database, per permettere il recuperodei dati se vi fossero problemi.

Front End Il bot di Telegram è stato collaudato manualmente da me e da altre 2persone in maniera indipendente. Purtroppo il vincolo temporale dello stage non haconsentito la stesura di una suite estensiva di test automatici per il front end.

3.6 Prodotto Finale

Riporto alcune immagini tratte dal prodotto finale.

Page 40: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

34 CAPITOLO 3. SVOLGIMENTO DEL PROGETTO

Figura 3.14: Screenshot delle schermate di avvio ed autenticazione

(a) Screenshot della schermata di avvio (b) Screenshot della schermata di auten-ticazione

Figura 3.15: Screenshot delle schermate di performance di account e singolo post

(a) Screenshot della schermata di visualiz-zazione follower

(b) Screenshot della schermata di perfor-mance dell’ultimo post

Page 41: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

3.6. PRODOTTO FINALE 35

Figura 3.16: Screenshot della schermata di suggerimento dell’orario per pubblicare

Figura 3.17: Screenshot della schermata di download di un media

(a) Inserimento del link (b) Risposta del bot

Page 42: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram
Page 43: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Capitolo 4

Valutazioni Retrospettive

4.1 Raggiungimento degli Obiettivi

4.1.1 Obiettivi Aziendali

Riassumo nelle tabelle seguenti i risultati ottenuti in riferimento agli obiettivi aziendaliindicati in sezione §2.3.1 Obiettivi aziendali.

Tabella 4.1: Raggiungimento degli Obiettivi Aziendali

Obiettivo Risultato

Studio API Instagram e Telegram Ho svolto in autonomia lo studio del-le API utilizzando la documentazioneufficiale.

Definizione delle funzionalità del prodot-to

Ho analizzato con una dipendente di Mi-riade quali fossero le esigenze e le aspetta-tive dell’utente finale stilando i requisitie i casi d’uso del prodotto.

Studio di Java e Spring Ho effettuato alcune ore di formazionecon il tutor aziendale, ho approfonditoalcune funzionalità di Spring dalla docu-mentazione ufficiale ed ho approfonditole mie conoscenze di Java in manieraautonoma.

37

Page 44: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

38 CAPITOLO 4. VALUTAZIONI RETROSPETTIVE

Tabella 4.1: Raggiungimento degli Obiettivi Aziendali

Obiettivo Risultato

Studio di Google Cloud Platform eAmazon Web Services

Ho avuto modo di approfondire le mieconoscenze sia in maniera autonoma cheattraverso il confronto con altri program-matori e sistemisti del team di sviluppodi Miriade; inoltre, ho partecipato ad unseminario sui prodotti della GCP.

Scelta dello stack tecnologico Ho svolto un ampio studio in fase discelta dello stack tecnologico che hapreso in considerazione molte e diversealternative.

Progettazione del prodotto Ho effettuato la progettazione architet-turale e di dettaglio.

Sviluppo connettore Instagram Ho implementato il modulo dell’applica-tivo che si occupa di interfacciarsi con leAPI Instagram (all’interno dello stratodi business logic).

Sviluppo connettore Telegram Ho implementato lo strato di front endche si occupa di interfacciarsi con le APITelegram.

Sviluppo core Ho implementato la business logic nellasua interezza.

Definizione funzionalità aggiuntive Sono state definite alcune funzionalitàaggiuntive a quelle definite inizialmente.

Sviluppo funzionalità aggiuntive Ho sviluppato parte delle funzionalitàaggiuntive, mentre altre non sono stateimplementate per mancanza di tempo.

Riportiamo in tabella le funzionalità implementate e quelle non implementate dalprodotto.

Tabella 4.2: Realizzazione delle Funzionalità Applicative Obbligatorie

Obiettivo Risultato

Possibilità di effettuare il login (con esenza Instagram)

Realizzata

Funzionalità di statistiche sul proprioaccount

Realizzata

Page 45: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

4.1. RAGGIUNGIMENTO DEGLI OBIETTIVI 39

Tabella 4.2: Realizzazione delle Funzionalità Applicative Obbligatorie

Obiettivo Risultato

Funzionalità di informazioni sull’ultimopost

Realizzata

Funzionalità di suggerimento del momen-to adatto a pubblicare un contenuto

Realizzata

Tabella 4.3: Realizzazione delle Funzionalità Applicative Opzionali

Obiettivo Risultato

Possibilità di effettuare il download diun media

Realizzata

Predisposizione del front end all’interna-zionalizzazione

Realizzata

Possibilità di monitorare più di un postin contemporanea

Non realizzata

Rilascio della versione definitiva Non effettuato

4.1.2 Obiettivi Personali

Riassumo in una tabella alcune valutazioni circa il raggiungimento degli obiettivipersonali indicati in sezione §2.3.1 Obiettivi Personali.

Tabella 4.4: Raggiungimento degli Obiettivi Personali

Obiettivo Risultato

Realizzazione del prodotto richiesto Ho realizzato il prodotto richiesto en-tro i vincoli e implementando tutte lefunzionalità e obbligatorie.

Studio approfondito e applicazione dellemoderne pratiche di design del back end

Ho studiato le migliori pratiche modernee il progetto è implementato seguendo ilmaggior numero possibile di esse.

Adozione di un’attitudine propositiva edi una propensione alla collaborazione

Adottate.

Page 46: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

40 CAPITOLO 4. VALUTAZIONI RETROSPETTIVE

Tabella 4.4: Raggiungimento degli Obiettivi Personali

Obiettivo Risultato

Approfondimento della metodologia diproject management Agile

Ho gestito il progetto con metodologiaAgile, ma, essendo io l’unico sviluppatorededicato a questo progetto, l’esperienzanon è stata educativa quanto auspicato.

Inserimento in azienda dopo la laurea Ho ricevuto (e accettato) una propostadi lavoro dall’azienda.

Valutazioni Retrospettive sull’Architettura

Un obiettivo personale era quello di sfruttare lo stage per apprendere il più possibileriguardo alle architetture di back end moderne.Questo obiettivo è stato raggiunto ma a costo di un maggior impiego di risorse in fasedi progettazione e di codifica. Alcuni fattori che hanno rallentato l’avanzamento delprogetto (e diminuito l’efficienza del lavoro) sono stati:

∗ Necessità di studio ho impiegato molto tempo per valutare i pro e i controdelle implementazioni di diverse componenti del progetto con diverse tecnologie;

∗ Formazione riguardo a diversi linguaggi il progetto ha richiesto l’utilizzodi 4 linguaggi differenti: Java, NodeJS (JavaScript), Python e SQL;

∗ Formazione sulle opzioni di deployment per interesse personale avevo giàesplorato le piattaforme AWS e GCP, ma, ugualmente, il tempo che ho dedicatoal confronto delle varie opzioni e allo studio delle documentazioni è stato elevato;

∗ Impossibilità di riuso del codice tra componenti l’utilizzo di linguaggidifferenti ha reso impossibile il riuso del codice tra strati differenti.Ad esempio, il codice per interagire con il database è stato scritto in Java per ilfront end ed in JavaScript per la business logic.

Al termine dello stage, ritengo sia stata valida la scelta di accrescere le conoscenzein ambito di architetture back end anche se a scapito di un avanzamento di progettopiù rapido.

4.2 Bilancio Formativo

Durante lo svolgimento dello stage ho avuto modo di accrescere le mie conoscenze inmolti ambiti, tra cui:

∗ project management con metodologia Agile;

Page 47: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

4.3. VALUTAZIONI PERSONALI 41

∗ architettura dei back end ;

∗ utilizzo di alcuni strumenti e framework (principalmente: Maven, Spring, Docker,npm, Chai, PostgreSQL);

∗ utilizzo di alcuni strumenti di gestione di progetto (principalmente Jira);

∗ utilizzo di tecnologie (in particolare i servizi della suite GCP e Docker).

Tra le competenze che ho appreso, o rafforzato, ci sono:

∗ la capacità di studiare la documentazione di un prodotto;

∗ la capacità di lavorare in gruppo e di relazionarmi con i colleghi.

4.3 Valutazioni Personali

4.3.1 Preparazione del Corso di Laurea al Lavoro

Ritengo che il corso di studi della laurea triennale raggiunga l’obiettivo di essereprofessionalizzante.In particolare, esso fornisce buone competenze di base ad ampio spettro, sulle quali ilneolaureato deve fondare uno studio più puntuale negli ambiti a lui richiesti.

Il corso di studi, così com’è organizzato, permette di apprendere competenze,processi mentali e metodologie di lavoro piuttosto che conoscenze specifiche, risultandoeffettivamente utile.A mio avviso, i punti di forza dell’attuale proposta formativa sono principalemente:

∗ i numerosi progetti che insegnano agli studenti sia un metodo per lo studioautonomo, sia un metodo di lavoro con i colleghi;

∗ l’ampio spettro di conoscenze fornito dall’offerta di insegnamenti obbligatoriche permette una preparazione più universale di quella che si avrebbe permettendoa ciascuno di selezionare i corsi che gli interessano maggiormente.

Suggerimenti Ritengo che l’offerta formativa sia completa e le competenze forni-te siano sufficienti. Credo, comunque, che si potrebbe migliorare ulteriormente lapreparazione degli studenti se:

∗ si affrontassero i database non relazionali; essi sono infatti molto diffusi el’approccio alla loro progettazione è molto differente da quello adottato con idatabase relazionali;

Page 48: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

42 CAPITOLO 4. VALUTAZIONI RETROSPETTIVE

∗ si proponessero più seminari tecnologici di quelli che già si organizzano: essihanno il vantaggio di stimolare gli studenti proponendo loro di confrontarsi construmenti moderni ed incentivano lo studio autonomo;

∗ si aggiornassero con maggior frequenza le tecnologie utilizzate ad esempioi linguaggi di programmazione (o almeno le loro versioni).

Page 49: Sviluppo di un motore di statistiche e di un chatbot per monitorare account Instagram

Bibliografia

Siti web consultati

Console Google Cloud Platform. url: https://console.cloud.google.com.

Google Cloud Platform. url: https://cloud.google.com (cit. a p. 25).

Instagram Developer Portal. url: https://instagram.com/developer/ (cit. a p. 13).

Miriade S.p.A. url: http://www.miriade.it (cit. a p. 1).

OAuth Protocol. url: https://oauth.net (cit. a p. 22).

Telegram Bot API. url: https://core.telegram.org/bots (cit. a p. 14).

43