Università degli Studi di Padova - SIAGAS

Pagina creata da Valeria Olivieri
 
CONTINUA A LEGGERE
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova
 D IPARTIMENTO DI M ATEMATICA "T ULLIO L EVI -C IVITA "
               C ORSO DI L AUREA IN I NFORMATICA

Servizi web per la registrazione, trascrizione e
  interpretazione di uno stand-up meeting
                      Tesi di laurea triennale

Relatore
Prof. Francesco Ranzato

                                                      Laureando
                                                   Miki Violetto

                    A NNO A CCADEMICO 2017-2018
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova - SIAGAS
Sommario

La presente relazione descrive il lavoro svolto nel periodo di stage, della durata di
8 settimane lavorative, dal laureando Miki Violetto presso l’azienda Zero12 s.r.l. nel
periodo di febbraio e marzo 2018.

Lo scopo dello stage era apprendere tecniche di sviluppo di soluzioni software su
tecnologie Cloud nel contesto dell’intelligenza artificiale e realizzare un progetto spe-
rimentale in grado di registrare l’audio degli standup giornalieri per poi elaborarli ed
estrarre il contenuto informativo, mostrando in una dashboard se l’andamento del
progetto è in linea con le aspettative oppure si stanno verificando delle problematiche
che rallentano il progetto.
Durante lo stage si dovevano valutare e studiare le tecnologie offerte da Amazon Web
Services e Google Cloud Platform, concentrandosi sui prodotti offerti che riguardano
la trascrizione audio e la comprensione e classificazione automatica di testi.

I primi due capitoli del presente documento descrivono il contesto aziendale in cui ho
svolto lo stage e come esso si colloca all’interno della strategia aziendale.
Il terzo capitolo documenta lo svolgimento dello stage, descrivendone le attività, i
processi produttivi impiegati e le principali scelte progettuali.
Il quarto ed ultimo capitolo contiene una valutazione retrospettiva sul soddisfacimen-
to degli obiettivi, il bilancio delle conoscenze acquisite e una valutazione conclusiva
sullo stage.
L’appendice A contiene alcuni test effettuati sui servizi utilizzati.
L’appendice B contiene alcuni screenshot effettuati durante l’utilizzo dei servizi AWS.

                                           iii
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova - SIAGAS
Ringraziamenti

Innanzitutto, vorrei esprimere la mia gratitudine al Prof. Francesco Ranzato, relatore della
mia tesi, per l’aiuto fornitomi durante la stesura del lavoro.

Ringrazio inoltre tutta la Zero12 per l’esperienza di stage che ho vissuto e per l’accogliente
ambiente di lavoro che sono riusciti a creare.

Desidero inoltre ringraziare i miei parenti e la mia ragazza Viviana, per l’infinita pazienza
dimostratami in questi lunghi anni.

Un ultimo ringraziamento ai compagni di corso, senza di loro non sarei riuscito ad apprendere
tutto quello che ho imparato all’università.

Padova, Luglio 2018                                                            Miki Violetto

                                              v
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova - SIAGAS
Indice

1   Contesto Aziendale                                                                                                                     1
    1.1 L’azienda . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    1
    1.2 Dominio applicativo . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
        1.2.1 Mobile app . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
        1.2.2 Data analysis . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
        1.2.3 Sviluppo software personalizzato                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
    1.3 Tecnologie aziendali . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
    1.4 Processi Aziendali . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
        1.4.1 Framework Scrum . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
        1.4.2 Strumenti a supporto dei processi                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5

2   Progetto nella strategia aziendale                                                                                                     9
    2.1 Rapporto tra azienda e stage universitari                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
    2.2 Presentazione del progetto . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
        2.2.1 Cos’è una standup . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
        2.2.2 Pianificazione . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
    2.3 Aspettative aziendali . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
    2.4 Obiettivi del progetto . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
    2.5 Vincoli . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
        2.5.1 Vincoli metodologici . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
        2.5.2 Vincoli temporali . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
        2.5.3 Vincoli tecnologici . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13

3   Resoconto del progetto                                                                                                                15
    3.1 Analisi dei rischi . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
    3.2 Scelta delle tecnologie . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
        3.2.1 Introduzione . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
        3.2.2 Tecnologie approfondite         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
    3.3 Progettazione . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
        3.3.1 Ajarvis WebApp . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
        3.3.2 Ajarvis . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
    3.4 Verifica e validazione . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
    3.5 Prodotti finali . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
        3.5.1 Ajarvis Webapp . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25

4   Valutazione retrospettiva                                                                                                             31
    4.1 Valutazione degli obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . .                                                   31
    4.2 Valutazione personale . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                     32

                                              vii
Università degli Studi di Padova - SIAGAS
viii                                                                                                                     INDICE

            4.2.1   Gestione di progetto . . . . . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   32
            4.2.2   Processi di sviluppo e strumenti a loro supporto                         .   .   .   .   .   .   .   .   .   32
            4.2.3   Linguaggi e tecnologie . . . . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   32
            4.2.4   Conclusione . . . . . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   33

5      Appendice A                                                                                                               35
       5.1 Test su Amazon Transcribe e Google Speech .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
           5.1.1 Test dopo le prime standup . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
           5.1.2 Test sulla qualità della registrazione .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
           5.1.3 Test sulla lingua . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
           5.1.4 Altri test . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44

6      Appendice B                                                                                                               47
       6.1 AWS Elastic Compute Cloud . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
       6.2 AWS Identity and Access Management            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
       6.3 AWS Simple Storage Service . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
       6.4 AWS DynamoDB . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51
       6.5 AWS API Gateway . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
       6.6 AWS CloudWatch . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
       6.7 AWS Lambda . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59

Glossario                                                                                                                        61

Bibliografia                                                                                                                     63
Università degli Studi di Padova - SIAGAS
Elenco delle figure

 1.1    Logo di Zero12 s.r.l. . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
 1.2    Logo di Allos S.p.A. e di Nextep        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2
 1.3    I partner di Zero12 . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
 1.4    Il framework Scrum . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
 1.5    Architettura distribuita di Git . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
 1.6    Funzionalità di Basecamp . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
 1.7    Logo di Atlassian Confluence . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
 1.8    Interfaccia di Swagger . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8

 3.1    Funzionamento di Amazon Comprehend .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
 3.2    Schermata di login da browser e da mobile                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
 3.3    Home page da browser e da mobile . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
 3.4    Schermata di trascrizione standup . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
 3.5    Schermata registratore . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
 3.6    Schermata dei dettagli di una standup . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30

 6.1    Schermata dei dettagli dell’istanza di Amazon EC2 . . . . . . . . . . .                                                         47
 6.2    Schermata ricca di grafici sulle statistiche dell’istanza di Amazon EC2                                                         48
 6.3    Lista dei ruoli su IAM . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                  48
 6.4    Lista delle regole su IAM . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                 48
 6.5    Schermata di un ruolo su IAM . . . . . . . . . . . . . . . . . . . . . . . .                                                    49
 6.6    Schermata di una regola su IAM . . . . . . . . . . . . . . . . . . . . . .                                                      49
 6.7    Schermata di esempio del bucket . . . . . . . . . . . . . . . . . . . . . .                                                     49
 6.8    Schermata delle regole del bucket . . . . . . . . . . . . . . . . . . . . . .                                                   50
 6.9    Schermata delle configurazioni CORS del bucket . . . . . . . . . . . . .                                                        50
 6.10   Schermate delle tabelle su DynamoDB . . . . . . . . . . . . . . . . . . .                                                       51
 6.11   Schermata dell’ Authorizer di Amazon API Gateway . . . . . . . . . .                                                            52
 6.12   Schermata d’esempio di un metodo di Amazon API Gateway . . . . .                                                                52
 6.13   Schermata di configurazione di una stage di Amazon API Gateway . .                                                              53
 6.14   Schermata d’esempio di un modello di Amazon API Gateway . . . . .                                                               53
 6.15   Schermata iniziale di Amazon CloudWatch . . . . . . . . . . . . . . . .                                                         54
 6.16   Schermate d’esempio dei log di Amazon CloudWatch . . . . . . . . . .                                                            55
 6.17   Schermate d’esempio dei grafici di Amazon CloudWatch . . . . . . . .                                                            56
 6.18   Altre schermate d’esempio dei grafici di Amazon CloudWatch . . . . .                                                            57
 6.19   Schermata d’esempio dell’evento schedulato di Amazon CloudWatch .                                                               57
 6.20   Schermate d’esempio degli allarmi di Amazon CloudWatch . . . . . .                                                              58
 6.21   Dettaglio della configurazione dei log di Amazon Lambda . . . . . . .                                                           59
 6.22   Dettaglio dell’editor e dell’upload della funzione di Amazon Lambda                                                             59

                                            ix
Università degli Studi di Padova - SIAGAS
x                                                                ELENCO DELLE FIGURE

    6.23 Dettaglio della configurazione di Amazon API Gateway su Amazon
         Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   59
    6.24 Dettagli della dashboard di Amazon Lambda . . . . . . . . . . . . . . .            60
Elenco delle tabelle

 2.1   Piano di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                11

 5.1   Alcuni test dei servizi di trascrizione . . . . . . . . . . . . . . .      .   .   .   .   .   36
 5.2   Alcuni test sull’influenza della qualità audio nella trascrizione          .   .   .   .   .   37
 5.3   Alcuni test sulle registrazioni di madrelingua inglese . . . . .           .   .   .   .   .   43
 5.4   Un test sulla trascrizione in italiano . . . . . . . . . . . . . . . .     .   .   .   .   .   44
 5.5   Alcuni estratti di altri test effettuati . . . . . . . . . . . . . . . .   .   .   .   .   .   45

                                            xi
Capitolo 1

Contesto Aziendale

Questo capitolo intende descrivere l’azienda in cui ha trovato collocazione lo stage.

1.1    L’azienda
Zero12 s.r.l. nasce come startup nel 2012. Si occupa di realizzare soluzioni software
su misura per accompagnare i clienti in un percorso di innovazione incentrato su
soluzioni mobile e orientato ai servizi cloud con processi di miglioramento continuo.

                              figura 1.1: Logo di Zero12 s.r.l.

                             Fonte: http://www.zero12.it/

La sede operativa di Zero12, nella quale ho svolto lo stage, si trova presso Villa Spessa
a Carmignano di Brenta (PD). La stessa sede ospita anche le altre due aziende del
Gruppo Allos, di cui Zero12 fa parte: Allos S.p.A. e Nextep. La prima si occupa di
sviluppo del capitale umano, mentre la seconda opera nel campo delle infrastrutture
IT, in particolare sistemistica e web design.

                                             1
2                                             CAPITOLO 1. CONTESTO AZIENDALE

                        figura 1.2: Logo di Allos S.p.A. e di Nextep

                 Fonte: http://www.allos.it/ e http://www.nextep.it/

1.2     Dominio applicativo
Zero12 offre ai propri clienti soluzioni informatiche innovative e personalizzate, ge-
stendo i progetti partendo dalla fase di onboarding. Ciò permette di collaborare a
stretto contatto con i clienti, conoscere le loro esigenze ed il mercato e creare una rela-
zione professionale basata su obiettivi e strategie condivisi. Nella fase di onboarding,
il team di Zero12 e quello del cliente si incontrano per delineare obiettivi, specifiche di
progetto, metodologie di lavoro, tempi e modi di rilascio del prodotto.

Il dominio applicativo di Zero12 si sviluppa su 3 assi principali:

    ∗ progettazione e sviluppo di mobile app su piattaforme iOS e Android;

    ∗ consulenza ad aziende sull’attivazione di processi di data mining al fine di
      valorizzare i Big Data a loro disposizione;

    ∗ sviluppo software personalizzato, sia in ambito B2B che B2C, basato su sistemi
      cloud.

1.2.1   Mobile app
L’impiego di dispositivi mobile è sempre più diffuso e la richiesta da parte dell’utente
finale di soluzioni e servizi da usare in mobilità è in costante crescita. Zero12 sviluppa
mobile app su piattaforme Android e iOS destinate sia al supporto dei processi
aziendali sia all’utilizzo da parte dell’utente finale. Per lo sviluppo vengono impiegati
sia linguaggi di programmazione nativi sia linguaggi cross-platform, in base alle
necessità.
Al fine di realizzare soluzioni mobile efficienti e massimizzare la user experience,
l’azienda implementa un’architettura a supporto basata su microservizi in modo da
poter realizzare soluzioni lato server in tempi e costi contenuti.

1.2.2   Data analysis
Zero12 offre servizi di consulenza in campo data analysis, per accompagnare le
aziende nel passaggio da un approccio basato su delle intuizioni imprenditoriali ad
un approccio data-driven. Questo servizio si basa sull’utilizzo dei big data raccolti
negli anni dalle aziende dai quali estrarre valore attivando processi di data mining,
permettendo alle aziende di conoscere meglio i propri consumatori al fine di prendere
le decisioni giuste al momento giusto.
1.3. TECNOLOGIE AZIENDALI                                                               3

1.2.3   Sviluppo software personalizzato
L’azienda applica i principi alla base dell’ingegneria del software per realizzare solu-
zioni efficienti, modulabili ed automatizzate. I principi applicati sono l’apprendimento
costante, continuous delivery , innovazione responsabile e agilità. Basandosi su tali
principi, Zero12 progetta e sviluppa soluzioni digitali collaborando con il cliente per
identificare le soluzioni innovative più adatte alle sue esigenze e al suo contesto di
riferimento.
Inoltre Zero12 affianca i clienti nel processo di migrazione, progettazione e realizzazio-
ne di infrastrutture cloud scalabili e serverless basate su tecnologia AWS a supporto di
progetti in qualsiasi ambito digitale che necessiti di un sistema informativo strutturato,
come ad esempio ambiti web, mobile, e-commerce, Internet of Things e Big Data.

1.3     Tecnologie aziendali
Zero12 vanta una estensiva esperienza su una vasta gamma di tecnologie, come ad
esempio Amazon Web Services, MongoDB e Hadoop.
Inoltre, per lo sviluppo utilizza diversi linguaggi di programmazione come Java, Scala,
Python, Node.js, Swift, ecc.
L’azienda però, vista la forte spinta innovativa, punta sempre a valutare le nuove tec-
nologie per poter essere sempre aggiornata e pronta a trasformare la novità in valore
per i clienti. Questo è reso possibile dall’ambiente dinamico e rilassato incentrato sulla
sperimentazione: i membri dei team di Zero12 sono incoraggiati a sperimentare e a
condividere quanto hanno appreso.

In ogni caso, indipendentemente dalla tecnologia impiegata, l’azienda preferisce
utilizzare:

   ∗ tecnologie open source: permettono di ridurre l’investimento iniziale e di evitare
     il vendor lock-in
   ∗ framework leggeri ed agili: permettono di sviluppare soluzioni verticalizzate
     sulla singola necessità (ottica di sviluppo a microservizi), accelerando lo stu-
     dio sulla tecnologia e quindi i tempi di sviluppo della soluzione. In quanto
     framework leggeri e semplici, garantiscono velocità e tempi di sviluppo rapidi
   ∗ architetture semplici: le architetture a microservizi, a differenza dei sistemi
     monolitici, garantiscono sviluppi agili e veloci, indipendenza delle soluzioni e
     la possibilità di scegliere le tecnologie più adeguate alle esigenze
Infine, Zero12 è partner di:

   ∗ AWS, l’infrastruttura di servizi cloud fondata nel 2012 da amazon.com
   ∗ MongoDB, un database open source non relazionale che permette di gestire
     modelli di dati flessibili, non strutturati ed in grado di evolvere rapidamente
     secondo le necessità del software
4                                           CAPITOLO 1. CONTESTO AZIENDALE

                             figura 1.3: I partner di Zero12

           Fonte: https://aws.amazon.com/it/ e https://www.mongodb.com/

1.4     Processi Aziendali
Zero12 adotta una metodologia di sviluppo agile , il framework Scrum. Esso offre il
vantaggio di lavorare a stretto contatto con il cliente, permettendo di avere frequenti
feedback sul lavoro svolto. Questo permette di individuare nuove necessità che non
erano emerse nell’analisi iniziale e identificare, correggere o sopperire a eventuali
mancanze e difetti in modo tempestivo.

1.4.1   Framework Scrum
Scrum è un framework pensato per gestire lo sviluppo di progetti software complessi.
Il metodo prevede la suddivisione del lavoro in blocchi di dimensione contenuta
detti sprint, della durata di 2-4 settimane. Al termine di ognuna di queste iterazioni
vengono rilasciate le nuove funzionalità sviluppate.
Questo consente al cliente di poter sempre visionare lo stato attuale del prodotto e di
testare le nuove funzionalità incremento dopo incremento, fino al raggiungimento del
prodotto finale.
Il cliente può quindi esprimere frequenti feedback sul prodotto ed individuare even-
tuali necessità che non erano, fino a quel momento, ancora emerse.

                             figura 1.4: Il framework Scrum

        Fonte: https://www.htgsoft.com/pf/mobile-applications-development/
1.4. PROCESSI AZIENDALI                                                                  5

   Le componenti principali di questo metodo di sviluppo sono:

   ∗ product backlog: insieme di tutti i requisiti individuati per lo sviluppo del
     prodotto ordinati per priorità, calcolata tenendo in considerazione i rischi ad
     essi associati ed il valore aggiunto

   ∗ sprint backlog: sottoinsieme di requisiti del product backlog che verranno
     soddisfatti durante lo svolgimento dello sprint successivo

   ∗ sprint: fase operativa durante la quale avviene lo sviluppo del prodotto per
     soddisfare i requisiti inclusi nello sprint backlog. Le attività vengono suddivise
     in piccoli task che possono essere assegnati ad una singola persona

Inoltre, come descritto in precedenza, questo metodo prevede frequenti incontri o
riunioni per discutere lo stato di avanzamento. Possono essere divisi in tre categorie:

   ∗ precedentemente ad uno sprint: il team di sviluppo si riunisce per pianificare lo
     sprint. Seleziona quali attività del product backlog verranno eseguite nel corso
     dello sprint e costruisce lo sprint backlog

   ∗ durante lo sprint: il team esegue uno stand-up meeting giornaliero in cui tutti i
     componenti vengono messi al corrente del lavoro svolto il giorno precedente da
     ciascun membro e di cosa ognuno pianifica di fare il giorno corrente

   ∗ al termine di uno sprint: il team esegue lo sprint review in cui rivede e presenta
     al cliente il lavoro svolto e lo sprint retrospective in cui riflette sullo sprint ap-
     pena terminato ed identifica e discute i miglioramenti da apportare ai processi
     produttivi. Inoltre, da queste due riunioni possono emergere eventuali perfe-
     zionamenti al product backlog, ai requisiti che esso contiene e alle loro priorità
     (backlog grooming)

Per tenere traccia dello stato di avanzamento, del product backlog e dello sprint
backlog viene impiegata la sprint board: un grafico suddiviso in 5 colonne su cui
sono visivamente riportate tutte le attività del progetto (ad esempio usando dei post-it
colorati).
Le 5 colonne sono:

                      backlog    to do    doing    testing    done

La sprint board è molto utile perché permette di avere sempre a disposizione lo stato
del progetto, sia durante lo sviluppo che durante le riunioni.
In Zero12 le sprint board sono disegnate con i pennarelli sulle finestre dell’ufficio e i
requisiti vengono riportati su dei post-it colorati.

Il mio progetto riguarda proprio i standup meeting giornalieri che l’azienda svolge.

1.4.2   Strumenti a supporto dei processi
Versionamento
Per il versionamento del codice Zero12 utilizza git e per i repository remoti si appoggia
ad AWS CodeCommit.
6                                             CAPITOLO 1. CONTESTO AZIENDALE

                         figura 1.5: Architettura distribuita di Git

                   Fonte: https://www.edureka.co/blog/what-is-git/

 Git è un software di controllo di versione distribuito, cioè mantiene una copia locale
del repository nei dispositivi di ogni collaboratore, rendendo non necessario un server
centrale. Grazie all’architettura distribuita di git, gli sviluppatori possono lavorare
con la copia locale del repository anche se non dispongono di una connessione ad
internet e periodicamente sincronizzare i cambiamenti da loro effettuati con quelli
degli altri membri del team. Inoltre l’esistenza di più copie del repository proteggono
il progetto dai danni causati da un eventuale guasto o malfunzionamento del server
centrale.

Gestione di progetto
Per gestire il progetto e coordinare i membri del team l’azienda usa Basecamp.
Questa piattaforma offre funzionalità di supporto all’organizzazione, alla gestione e
al coordinamento del lavoro.
Le principali funzionalità offerte sono:

    ∗ servizio di chat (campfire)

    ∗ sistema di messaggi simile ad un forum (message board)

    ∗ to-do list

    ∗ condivisione di file

    ∗ gestione delle milestone

    ∗ pianificazione di attività ed eventi (schedule)
1.4. PROCESSI AZIENDALI                                                                7

                           figura 1.6: Funzionalità di Basecamp

                             Fonte: https://basecamp.com/

Documentazione
La documentazione è una parte fondamentale di ogni progetto. È importante utiliz-
zare strumenti che rendano semplice ed agevole la scrittura e la consultazione dei
documenti. Per garantire ciò Zero12 si affida a due strumenti: Atlassian Confluence e
SwaggerHub.

Confluence viene usato per redigere e consultare la documentazione tecnica del
progetto. Tra le funzionalità offerte presenta un editor che permette la scrittura e la
formattazione dei documenti e la gestione dei permessi in lettura e scrittura dell’intero
documento o delle sue singole parti.

                         figura 1.7: Logo di Atlassian Confluence

                Fonte: https://it.atlassian.com/software/confluence
8                                         CAPITOLO 1. CONTESTO AZIENDALE

   SwaggerHub viene usato per la progettazione e la documentazione di API. Que-
sto strumento permette di descrivere e documentare le API seguendo la specifica
OpenAPI Specification (https://swagger.io/specification/) e di visualizzare una
documentazione interattiva creata in modo automatico a partire dalla descrizione
inserita.

                         figura 1.8: Interfaccia di Swagger

                Fonte: https://swagger.io/tools/swagger-editor/
Capitolo 2

Progetto nella strategia
aziendale

Questo capitolo tratta della scelta dello stage e delle varie informazioni presenti prima di
iniziare effetivamente lo stage.

2.1     Rapporto tra azienda e stage universitari
Ospitare dei progetti di stage universitario comporta molti vantaggi per Zero12.
Innanzitutto permette di inserire nell’ecosistema aziendale persone provenienti dal-
l’ambiente accademico, con punti di vista ed idee diverse da cui possono scaturire
confronti costruttivi e stimolanti. Gli studenti universitari infatti si ritrovano spesso
ad entrare in contatto con le ultime novità in tema di tecnologie e di strumenti, spe-
cialmente open source, principalmente grazie al progetto didattico previsto dal corso
di Ingegneria del software.
Inoltre i progetti di stage possono diventare un’opportunità per l’azienda per speri-
mentare una nuova tecnologia, studiarne le possibilità e i vantaggi e testarne i limiti.
Impiegare uno stagista universitario in questi progetti sperimentali consente di valu-
tare le potenzialità di una o più tecnologie per capire se sono promettenti e meritevoli
di essere adottate, prima di investire delle significative risorse aziendali su di esse.
Questi fattori aiutano l’azienda a restare sempre al passo con le novità tecnologiche
ed in grado di concepire soluzioni innovative ai problemi dei clienti.
Infine l’esperienza formativa del tirocinio, oltre agli ovvi vantaggi per lo studente
che ha la possibilità di entrare in contatto con le dinamiche e le aspettative del mon-
do del lavoro, permette a Zero12 di conoscere e mettere alla prova le competenze e
l’attitudine degli stagisti al fine di un eventuale successivo inserimento nell’azienda.

2.2     Presentazione del progetto
Ho conosciuto l’azienda Zero12 grazie ad un collega che dopo essersi laureato è stato
assundo dalla stessa. Non riuscendo a completare gli esami necessari per fare lo stage
in tempo però non ho potuto usufruire di stageIT e così ho contattato personalmente
l’azienda per capire se era possibile fare uno stage durante il periodo invernale.

                                             9
10                    CAPITOLO 2. PROGETTO NELLA STRATEGIA AZIENDALE

Per questo il progetto che ho eseguito non è compreso nei progetti di stage pre-
sentati dall’azienda a StageIT ma è stato tratto dai capitolati prosposti per i progetti
del corso di ingegneria del software. Lo scopo del progetto era uno studio sulla fattibi-
lità e la realizzazione di un sistema che, per quanto rudimentale, permettesse in modo
automatico di trascrivere l’audio di un standup meeting in testo e successivamente
analizzarlo per estrarre informazioni sullo stato del progetto e dettagli su eventuali
ritardi o problematiche incontrate.
Inoltre sono stato spinto ad utilizzare maggiormente i servizi offerti da Amazon Web
Services in quanto un mio collega, che aveva svolto lo stage precendetemente, aveva
gia utilizzato Google Cloud Platform fer fare analisi ed estrazione di informazioni dal
testo e l’azienda era interessata ad una valutazione comparativa delle soluzioni offerte
per lo stesso problema.

2.2.1    Cos’è una standup
La standup (o standup meeting o daily Scrum meeting) è una delle attività del fra-
mework Scrum. Si tratta di una riunione giornaliera durante la quale ogni componente
del team in un paio di minuti deve rispondere a tre domande:

     ∗ Cos’ha raggiunto rispetto all’ultimo meeting?
     ∗ Cos’ha intenzione di raggiungere entro il meeting successivo?
     ∗ Ci sono degli impedimenti ancora attivi per raggiungere gli obiettivi prefissati?
Ci sono molteplici modalità per eseguire questi meeting.
In Zero12 ho potuto notare che:
     ∗ Normalmente non viene svolta individualmente, ma vengono riunite le persone
       che lavorano allo stesso progetto.
     ∗ A volte viene eseguita come monologo personale, a volte come domande-
       risposte tra due persone.

     ∗ La durata è sempre breve, al massimo qualche minuto. Molte volte alcuni
       componenti del team si incontrano dopo il meeting per parlare più nello specifico
       delle problematiche emerse
     ∗ Quasi sempre si lascia parlare chi ha preso la parola senza interromperlo.

2.2.2    Pianificazione
Le attività da svolgere nello stage sono state pianificate come indicato:
2.3. ASPETTATIVE AZIENDALI                                                               11

 Settimana     Attività                                                    Periodo
      1        Introduzione ai servizi Google Cloud Platform e           5 Feb - 9 Feb
               Amazon Web Services. Studio del linguaggio di
               programmazione Python
      2        Analisi e studio dei servizi offerti dalle Natural       12 Feb - 16 Feb
               Language API di Google Cloud Platform
      3        Sviluppo del sistema di registrazione (web app,          19 Feb - 23 Feb
               mobile app o skills su Amazon Echo) standup
      4        Sviluppo conversione audio in testo                      26 Feb - 2 Ma
      5        Sviluppo, interpretazione e classificazione dello        5 Mar - 9 Mar
               standup
      6        Sviluppo, interpretazione e classificazione dello       12 Mar - 16 Mar
               standup
      7        Sviluppo, interpretazione e classificazione del-        19 Mar - 23 Mar
               lo standup e sviluppo dashboard web per la
               visualizzazione dei risultati
      8        Sviluppo dashboard web per la visualizzazione           26 Mar - 30 Mar
               dei risultati
                                tabella 2.1: Piano di lavoro

2.3       Aspettative aziendali
L’azienda era interessata ad un confronto tra le tecnologie offerte da Google Cloud
Platform e Amazon Web Services. La Google Cloud Platform era stata utilizzata
dal collega che aveva svolto lo stage in Zero12 prima di me per eseguire un’analisi
del testo delle email, mentre io ho dovuto analizzare le soluzioni software offerte
da Amazon Web Services. In particolare ho dovuto analizzare l’affidabilità della
trascrizione da audio a testo di Amazon Transcribe.

2.4       Obiettivi del progetto
Gli obiettivi per il progetto derivano dal piano di lavoro e dalle riunioni tenute con
il tutor aziendale all’inizio dello stage. Essi sono divisi in obiettivi minimi, obiettivi
massimi e obiettivi formativi.

Obiettivi minimi
   ∗ realizzazione di un sistema di registrazione per la standup utilizzabile su iOS e
     Android e, se possibile, su Amazon Echo
   ∗ realizzazione di uno o più microservizi per la trascrizione e analisi della standup
   ∗ realizzazione di una dashboard per la visualizzazione dei dati ricavati nel punto
     precedente
   ∗ documentazione tramite swagger dei microservizi sviluppati
Obiettivi massimi
   ∗ analisi approfondita delle tecnologie utilizzate e valutazione della loro capacità
     a svolgere con successo i lavori richiesti
12                    CAPITOLO 2. PROGETTO NELLA STRATEGIA AZIENDALE

Obiettivi formativi
Gli obiettivi formativi di questa esperienza di stage sono:

     ∗ apprendere un nuovo linguaggio di programmazione: Python

     ∗ apprendere nuove metodologie di sviluppo

     ∗ avvicinarsi ai servizi cloud offerti da Amazon Web Services e Google Cloud
       Platform per capirne le potenzialità, i vantaggi, gli svantaggi e le differenze

     ∗ studiare e provare i servizi di intelligenza artificiale e NLP di Amazon e Google

     ∗ entrare in contatto e collaborare con un team di sviluppo esperto

2.5      Vincoli
2.5.1    Vincoli metodologici
Il progetto di stage sì è svolto per la sua intera durata presso la sede dell’azienda a
Carmignano di Brenta.
Questa decisione è stata presa in comune con il tutor aziendale allo scopo di inserirmi
nel contesto dei team di sviluppo dell’azienda. Ho avuto così modo di confrontarmi
con sviluppatori esperti e ho potuto interagire con il tutor aziendale per risolvere pro-
blematiche di natura tecnica e dubbi riguardanti i requisiti o la gestione del progetto.
Inoltre ha reso possibile lo svolgimento degli stand-up meeting giornalieri previsti
dalla metodologia di sviluppo Scrum, che è anche oggetto di questo progetto.

2.5.2    Vincoli temporali
La durata dello stage è stata di otto settimane, per la durata complessiva di 320 ore.
Ho lavorato secondo gli orari che seguono i dipendendi dell’azienda, a tempo pieno,
dal lunedì al venerdì anche se l’azienda lavora anche il sabato mattina, dalle ore 8:30
alle ore 18:00 con pausa pranzo dalle 13:00 alle 14:00.
Inoltre erano presenti due pause obbligatorie di quindici minuti alle 10:45 e alle 15:45.

Come descritto nel piano di lavoro dello stage, per lo svolgimento del progetto il mio
tutor ha deciso di dividere le otto settimane di stage in diverse fasi:

     ∗ due settimana di studio della tecnologie e del linguaggio di programmazione
       che non avevo mai utilizzato;

     ∗ una settimana per la realizzazione di un sistema di registrazione audio;

     ∗ una settimata per la realizzazione del microservizio per la conversione audio in
       testo;

     ∗ due settimane e mezza per la realizzazione dei microservizi necessari all’inter-
       pretazione e alla classificazione dei testi ottenuti;

     ∗ l’ultima settimana e mezza per la realizzazione della dashboard per visualizzare
       i risultati dei microservizi sopra realizzati.
2.5. VINCOLI                                                                       13

2.5.3   Vincoli tecnologici
In azienda mi è stata data una scrivania con un pc Mac ed era presente anche un
dispositivo Amazon Echo; inoltre erano reperibili i progetti dei colleghi che avevano
svolto lo stage in Zero12.
Per le comunicazioni sono stato invitato in un progetto di Basecamp, dove a fine stage
ho caricato i prodotti realizzati e la documentazione delle API esposte dai servizi,
utilizzando la specifica OpenAPI Specification e il servizio SwaggerHub.
Capitolo 3

Resoconto del progetto

Questo capitolo parla delle attività che hanno portato alla realizzazione dei prodotti richiesti
del progetto di stage.

3.1     Analisi dei rischi
Nel corso di una delle riunioni effettuate con il tutor aziendale all’inizio dello stage
abbiamo individuato i rischi legati al mio progetto e analizzato quale impatto avreb-
bero potuto avere sul buon esito delle attività.
I rischi individuati possono essere raggruppati in tre categorie:
   ∗ rischi tecnologici: tutti i rischi associati all’utilizzo delle tecnologie. Questi
     rischi sono molteplici perché nel corso del progetto di stage ho avuto modo di
     utilizzare tecnologie con cui non avevo alcuna esperienza precedente, trovan-
     domi quindi a dover imparare da zero. Oltre a ciò, la natura sperimentale del
     progetto ha come conseguenza il fatto che molte delle tecnologie in questione
     non sono ancora mature, presentano dei malfunzionamenti o delle imperfezioni,
     la loro documentazione è carente o parziale o addirittura sono prodotti anco-
     ra in fase di sviluppo. Questa categoria di rischi è stata affrontata prestando
     particolare attenzione alle tecnologie a rischio nel corso delle due settimane di
     formazione. I rischi derivanti da tecnologie incomplete non hanno potuto essere
     risolti;
   ∗ rischi organizzativi: tutti i rischi associati alla pianificazione delle attività, al-
     l’organizzazione del lavoro e ad eventuali impegni lavorativi del tutor aziendale
     che gli impediscono di essere disponibili per riunioni e domande. I rischi ap-
     partenenti a questa categoria possono impattare i tempi di sviluppo e il rispetto
     delle scadenze previste dalla pianificazione. Essi sono stati affrontati adattando
     la pianificazione delle attività nel corso degli stand-up meeting giornalieri tenen-
     do conto di eventuali ritardi e problematiche nell’attività di sviluppo. I rischi
     relativi agli impegni lavorativi del tutor aziendale invece sono stati affrontati
     pianificando le riunioni, qualora possibile, in momenti in cui il tutor era libero
     da impegni e, nel caso di domande o dubbi urgenti, comunicando tramite posta
     elettronica e Basecamp;
   ∗ rischi sui requisiti: tutti i rischi associati ad una parziale o errata comprensione
     dei requisiti e delle funzionalità richieste o del dominio applicativo. Questi rischi

                                              15
16                                       CAPITOLO 3. RESOCONTO DEL PROGETTO

        possono impattare sulla buona riuscita del progetto in quanto, se non affrontati
        e risolti, possono portare ad un prodotto incompleto o che presenta funzionalità
        non richieste. Questa categoria di rischi è stata affrontata tramite riunioni con il
        tutor aziendale in cui abbiamo discusso delle funzionalità richieste e tramite gli
        stand-up meeting giornalieri.

3.2      Scelta delle tecnologie
3.2.1     Introduzione
All’inizio dello stage ho svolto alcune riunioni con il tutor aziendale per pianificare
le attività da svolgere e le tecnologie più interessanti su cui concentrarsi nelle prime
settimane di studio e analisi.
L’azienda mi ha indirizzato maggiormente verso la scelta delle tecnologie offerte
da Amazon Web Services e invitato ad utilizzare i servizi offerti da Google Cloud
Platform solo a scopo di confronto.
La scelta finale sulle tecnologie da utilizzare è stata lasciata a me, ma il tutor aziendale
mi ha consigliato AWS Transcribe per la trascrizione audio in testo e AWS Comprehend
per l’analisi e la comprensione del linguaggio naturale in modo automatico.
Dal punto di vista dell’infrastruttura mi è stato consigliato il servizio AWS Lambda
per i microservizi da sviluppare, AWS S3 per l’archiviazione dei dati più grandi come
le registrazioni audio e AWS DynamoDB nel caso fosse necessario l’utilizzo di un
database.

3.2.2     Tecnologie approfondite
Innanzitutto ho studiato il linguaggio di programmazione Python utilizzando la
documentazione presente nel sito ufficiale. Oltre al linguaggio ho studiato anche tre
moduli per Python:
     ∗ Flask
     ∗ Requests
     ∗ Boto3
Successivamente ho studiato i servizi offerti da Amazon Web Services e brevemente
alcuni da Google Cloud Platform:
     ∗ Amazon Alexa per la creazione di una skill che registrasse lo standup meeting e
       successivamente Amazon EC2 per l’infrastruttura della webapp;
     ∗ Amazon Transcribe e l’alternativa Google Cloud Speech, per la trascrizione
       dell’audio registrato in testo;
     ∗ Amazon S3 e DynamoDB per la memorizzazione dei dati;
     ∗ Amazon Comprehend e l’alternativa Google Cloud Natural Language per
       eseguire machine learning sul testo ed estrarre le informazioni volute;
     ∗ Amazon Lambda, Amazon API Gateway e Amazon IAM per l’infrastruttura dei
       microservizi;
     ∗ Amazon CloudWatch per raccogliere log e statistiche dei vari servizi AWS
       utilizzati.
3.2. SCELTA DELLE TECNOLOGIE                                                            17

Python
Python è un linguaggio di programmazione ad alto livello orientato agli oggetti ed è
stato scelto perché è un linguaggio di scripting che offre ottime prestazioni se usato
per le funzioni su AWS Lambda e presenta una grande quantità di librerie gratuite.
Nel corso dello stage è stato usato sia come linguaggio per la webapp, sia come lin-
guaggio di script per le funzioni Lambda che compongono i microservizi sviluppati.
Grazie alla sua naturta di linguaggio orientato agli oggetti non è stato difficile impa-
rarlo dopo aver seguito il corso di Programmazione ad oggetti.

Skill per Alexa
Amazon Alexa è un assistente personale intelligente sviluppato da Amazon, utilizzato
per la prima volta nei dispositivi Amazon Echo e Amazon Echo Dot sviluppati dalla
sezione Amazon Lab126. È in grado di interagire con la voce, riprodurre musica,
creare elenchi di cose da fare, impostare allarmi, effettuare streaming di podcast,
riprodurre audiolibri e fornire previsioni meteorologiche, informazioni sul traffico e
altre informazioni in tempo reale, come le notizie.
Alexa può anche controllare diversi dispositivi intelligenti usando se stesso come
sistema di automazione domestica per la gestione della domotica.
La maggior parte dei dispositivi dotati di Alexa consente agli utenti di attivare il
dispositivo usando una sveglia (come Echo); altri dispositivi (come l’app Amazon su
iOS o Android) richiedono all’utente di premere un pulsante per attivare la modalità
di ascolto di Alexa.

Inizialmente il tutor aveva proposto di creare una skill, traducibile con l’idea di
un’applicazione personalizzata per Alexa, per poter così sedersi attorno ad un tavolo
durante la standup, attivare vocalmente la registrazione e poi lasciare che automatica-
mente Alexa si occupasse di inviarla.
Dopo aver studiato come creare una Skill e le varie limitazioni presenti questa idea è
stata scartata in quanto, allo stato attuale, non è disponibile la funzione di registrazio-
ne e invio audio tramite Alexa ma esso viene direttamete analizzato per estrarre dei
comandi e chiamare specifiche funzioni.

Webapp
Eliminata l’opzione di utilizzare Alexa come dispositivo di registrazione, l’azienda ha
richiesto lo sviluppo di una webapp che fosse stata utilizzabile sia su dispositivi iOS
che Android. Ho scelto di scrivere questa webapp in Python visto che è il linguaggio
che avrei dovuto utilizzare anche per il resto del progetto. In questo modo, a mio
avviso, ho potuto sfruttare al meglio il periodo di studio delle tecnologie.
Durante questo periodo ho anche individuato dei moduli per Python che mi sarebbero
serviti:
   ∗ il modulo Flask: un framework web leggero per la realizzazione di web ap-
     plication in modo facilitato ed è basato sullo strumento Werkzeug WSGI che
     permette le comunicazioni ed interazioni tra server ed applicazioni e con il
     motore template Jinja2 per la creazione di file HTML;
   ∗ il modulo Requests: una liberia che facilita l’utilizzo del protocollo HTTP per la
     comunicatione tra applicativi differenti, da utilizzare per connettersi con l’API
     dei servizi che avrei realizzato nella seconda parte dello stage.
18                                      CAPITOLO 3. RESOCONTO DEL PROGETTO

Oltre a Python ho dovuto ripassare ed approfondire la mia conoscenza su Angular e
Javascript per la parte client della Webapp e individuare delle librerie che mi perme-
tessero l’acquisizione audio su vari dispositvi con sistemi operativi così differenti.
Inoltre ho scelto di Utilizzare, sotto consiglio del tutor, Amazon EC2 come sistema su
cui far eseguire la webapp.

Microservizi
Lo studio dei servizi offerti da Amazon Web Services e Google Cloud Platform ha
occupato gran parte delle due settimane impiegate allo studio delle tecnologie.
Inizialmente ho concentrato la mia attenzione ai servizi di trascrizione audio, Amazon
Transcribe e Google Speech: entrambi permettono la trascrizione di audio in testo, ma
mentre il servizio offerto da Google è disponibile da più tempo e abbastanza affidabile,
quello offerto da Amazon è disponibile solo per l’inglese e lo spagnolo ed è disponibile
ai sviluppatori in versione Alpha.
Successivamente mi sono concentrato a studiare Amazon Comprehend e Google
Cloud Natural Language utili per eseguire data mining ed è evidente che i servizi
Google sono più avanzati di quelli di Amazon, almeno rispetto all’analisi di audio e
testo.
Come servizio di salvataggio delle registrazioni ho deciso di studiare ed utilizzare
Amazon Simple Storage Service (S3) mentre per il salvataggio delle informazioni
raccolte dal testo della standup ho scelto di usare Amazon DynamoDB.
Amazon Lambda è stato scelto come ambiente serverless su cui far eseguire le funzioni
dei microservizi, mentre Amazon API Gateway viene utilizzato per gestire l’accesso
ai microservizi tramite API e AWS Identity and Access Management (IAM) viene
utilizzato per la gestione dei permessi e la regolazione degli accessi il vari servizi AWS
sia dalle funzioni Lambda che dalla webapp sviluppata.
Infine viene scelto di utilizzare Amazon CLoudWatch per il controllo delle varie stati-
stiche raccholte dai servizi AWS e per la gestione dei log.

Boto3 è un SDK per gli Amazon Web Services per Python; permette l’utilizzo dei ser-
vizi Amazon attraverso delle API orientate agli oggetti e quindi facilitare lo sviluppo
delle funzioni lambda.

3.3     Progettazione
In questa sezione parlo delle scelte progettuali che ho compiuto durante lo stage,
suddividendole tra loro in base a quale prodotto fanno parte.

3.3.1   Ajarvis WebApp
Ajarvis Webapp è l’applicazione web che ho sviluppato. Per renderla utilizzabile sia
da browser desktop che da browser mobile ho scelto di utilizzare Bootstrapt per un
layout responsive che si adattasse alla grandezza dello schermo, che varia in base
al modello di dispositivo mobile utilizzato. Questo, unito all’utilizzo della libreria
recorder (https://github.com/mattdiamond/Recorderjs) per registrare l’audio e
convertirlo in un file .wav che permetta di utilizzare l’applicazione in tutti i dispositivi
mobile più recenti.
3.3. PROGETTAZIONE                                                                    19

La gestione del registratore, dall’inizio della registrazione fino all’invio del file su
Amazon S3 avviene tutta in background su lato client, tramite dei script Javascript
così da rendere l’utilizzo dell’applicazione più piacevole. Ovviamente tutti gli script
Javascript vengono minificati per mantenere la dimensione il minore possibile e velo-
cizzare così il caricamento dell’applicazione.

Inoltre l’applicazione è stata sviluppata pensando ad una possibile estensione e il
codice è stato separato in varie cartelle.
   ∗ Nella cartella api sono inseriti i file Python necessari alla Webapp per eseguire:
     al suo interno contiene lo scrip per minificare, il file app.py dove si definisce
     l’applicazione e i collegamenti delle routes e la cartella resources che contiene
     i vari files separati per contesto, quali ad esempio detail.py, per la visualiz-
     zazione dei dettagli e upload.py per il caricamento del file audio o testo della
     standup.
   ∗ Nella cartella config sono presenti i file di configurazione JSON, tra cui le infor-
     mazioni degli account della webapp e le informazioni di accesso all’API, quali
     username, password e indirizzo di dove trovarla.
   ∗ Nella cartella static sono presenti i file CSS dell’applicazione e la catella script
     in cui si possono trovare i file Javascript.
   ∗ Infine nella cartella template sono presenti i template delle varie pagine HTML,
     che verrano poi utilizzati dal modulo Jinja2 di Flask per generare dinamicamente
     le pagine dell’applicazione.

Amazon EC2
Amazon Elastic Compute Cloud (Amazon EC2) è un servizio Web che fornisce capacità
di elaborazione sicura e scalabile nel cloud. Viene utilizzato come sistema in cui
esegure l’applicazione web. Amazon EC2 permette la gestione e il monitoraggio
tramite una dashboard web, di cui le immagini sottostanti mostrano una panoramica.
Inoltre sono disponibili i grafici sulle varie statistiche rilevate grazie ad Amazon
CloudWatch.

3.3.2   Ajarvis
Ajarvis è l’applicativo dei microservizi creati a cui si connette Ajarvis Webapp. Succes-
sivamente descriverò come sono stati usati i vari servizi Amazon.

Amazon Transcribe
Amazon Transcribe è il servizio di trascrizione audio in testo offerto da Amazon
Web Service ed è disponibile al momento solo per sviluppatori e solo in fase di test,
in quanto non viene assicurato che la trascrizione avvenga in tempo breve (alcune
trascrizioni hanno richiesto più di 300 secondi e una più di 15 minuti) o che abbia
esito favorevole (molte operazioni di trascrizione sono fallite).
La necessità di controllare periodicamente se i lavori di trascrizione avessero termi-
nato ha portato alla creazione di un evento schedulato, che ogni 5 minuti chiamasse
l’esecuizione di una funzione Lambda apposita.
Un lavoro di trascrizione richiede un audio presente su S3 localizzato nella stessa
20                                     CAPITOLO 3. RESOCONTO DEL PROGETTO

regione di Amazon Transcribe, che esssendo disponibile solo in una specifica regione
ha richiesto di localizzare tutti i servizi Amazon su US-EAST(Nord Virginia).

Amazon Comprehend
Amazon Comprehend è un servizio di elaborazione del linguaggio naturale (NLP)
che usa l’apprendimento automatico per trovare informazioni e relazioni in uno o più
testi. Amazon Comprehend identifica il linguaggio del testo, estrae le frasi chiave, i
luoghi, le persone, i marchi o gli eventi; capisce quanto il testo sia positivo o negativo
e organizza automaticamente una raccolta di file di testo per argomento.
Queste funzionalita si sono rivelate ancora poco affidabili ma sono fiducioso, visto
quanto AWS sta investendo in questi servizi, che miglioreranno velocemte.

Amazon Comporehend permette di individuare:

     ∗ entità

     ∗ frasi chiave

     ∗ linguaggio utilizzato

     ∗ sentimenti

     ∗ argomenti

Ho potuto notare che al momento il servizio è indirizzato più a tematiche di assistenza
automatica degli utenti o analisi di grandi quantità di dati di carattere generale, ma nel
sito di Amazon Comprehend scrivono chiaramente che sono rivolti anche all’analisi
delle trascrizioni telefoniche.

                      figura 3.1: Funzionamento di Amazon Comprehend

                Fonte: https://aws.amazon.com/it/comprehend/?nc2=h_a1

Amazon IAM
AWS Identity and Access Management (IAM) consente di gestire in sicurezza l’accesso
ai servizi e alle risorse AWS. Grazie a IAM è possibile creare e gestire utenti e gruppi
AWS e utilizzare autorizzazioni per consentire o negare l’accesso alle risorse AWS.
3.3. PROGETTAZIONE                                                                    21

Per i microservizi ho cercato di creare molte regole e ruoli, in modo di permettere
l’esecuzione solo dei servizi che vengono effetivamente utilizzati e più nel dettaglio
solo ad alcune operazioni specifiche.
IAM lavora con ruoli e regole: i ruoli vengono associati ad entità quali per esempio
funzioni lambda, mentre le regole sono permessi di granularità diversa, come per
esempio scrivere su un database, controllare i lavori di trascrizione, ecc. In definitiva
ho creato 9 ruoli, uno per ogni lambda realizzata e 19 regole.
La nomenclatura nel progetto ha seguito la regola utente-progetto-entità

RUOLI

   ∗ violetto-Ajarvis-lambda-authorizer

   ∗ violetto-Ajarvis-lambda-retrieve

   ∗ violetto-Ajarvis-lambda-scheduled-manager

   ∗ violetto-Ajarvis-lambda-transcriber

   ∗ violetto-Ajarvis-lambda-upload

   ∗ violetto-Ajarvis-lambda-analyzer

   ∗ violetto-Ajarvis-lambda-upload-text

   ∗ violetto-Ajarvis-lambda-project

   ∗ violetto-Ajarvis-lambda-download-audio

REGOLE

   ∗ violetto-Ajarvis-get-users

   ∗ violetto-Ajarvis-write-logs

   ∗ violetto-Ajarvis-s3-write

   ∗ violetto-Ajarvis-scan-transcription-jobs

   ∗ violetto-Ajarvis-start-transcription-job

   ∗ violetto-Ajarvis-get-transcription-job

   ∗ violetto-Ajarvis-get-audio

   ∗ violetto-Ajarvis-get-transcription-job-table

   ∗ violetto-Ajarvis-update-transcription-job

   ∗ violetto-Ajarvis-put-standup

   ∗ violetto-Ajarvis-delete-transcription-job

   ∗ violetto-Ajarvis-scan-standup-table

   ∗ violetto-Ajarvis-query-standup-table

   ∗ violetto-Ajarvis-get-standup-table
22                                     CAPITOLO 3. RESOCONTO DEL PROGETTO

     ∗ violetto-Ajarvis-put-transcription-job-table

     ∗ violetto-Ajarvis-comprehend

     ∗ violetto-Ajarvis-get-transcribe-json

     ∗ violetto-Ajarvis-update-standups

     ∗ violetto-Ajarvis-get-comprehend-json

Amazon S3
Amazon S3 è uno storage di oggetti creato per memorizzare e ripristinare qualsiasi vo-
lume di dati da qualsiasi origine, permettendo di momorizzare grandissime quantita
di dati a basso prezzo (https://aws.amazon.com/it/s3/pricing/).
Nel progetto viene utilizzato memorizzare gli audio registrati e i file di trascrizione
creati da Amazon Transcribe; inoltre sono presenti alcuni file di dizionario usati dal-
l’algoritmo di data mining.
La struttura interna del bucket presenta due cartelle: comprehend che contiene i file
di dizionario e upload che contiene i file di registrazione e trascrizione. A sua volta ho
deciso che upload contenga una cartella per ogni singola webapp che utilizza questi
servizi, creando appunto la cartella AjarvisWebApp. Al suo interno sono presenti
i vari file con regole di nomenclatura anno-mese-giornoTore-minuti-secondi (es.
2018-03-21T17-01-41.wav).

Inoltre ho dovuto aggiungere delle politiche particolari al bucket per permettere
la scrittura da parte di servizi esterni come Amazon Transcribe e ad applicazioni
esterne come Ajarvis WebApp.

DynamoDB
Amazon DynamoDB è un servizio di database non relazionale veloce e flessibile
pensato per tutte le applicazioni che richiedono una latenza costante non superiore a
una decina di millisecondi su qualsiasi scala.
Viene utilizzato dai microservizi per immagazzinare le informazioni estratte dall’ana-
lisi della trascrizione.
Nel progetto ho utilizzato 3 tabelle:

     ∗ violetto-Ajarvis-users: per salvare i dati di accesso delle webapp che si connet-
       tono ad Ajarvis, in questo caso solo Ajarvis WebApp;

     ∗ violetto-Ajarvis-transcription-jobs: per salvare temporaneamente i lavori di
       trascrizione in corso, così da non dover recuperare la lista completa di tutti i
       lavori eseguiti con Amazon Transcribe;

     ∗ violetto-Ajarvis-standups: dove salvare tutte le informazioni ricavate dall’ana-
       lisi.

Amazon API Gateway
Amazon API Gateway è un servizio completamente gestito che semplifica agli svilup-
patori creazione, pubblicazione, manutenzione, monitoraggio e protezione delle API
su qualsiasi scala. Attraverso di esso è stato possibile creare le API dei microservizi
3.3. PROGETTAZIONE                                                                    23

sviluppati con Amazon Lambda.
Per accedere alle funzioni è stato configurato un Authorizer utilizzando una funzione
Lambda apposita, ed avendo solo una tipologia di utenti che si connettono ho potuto
non utilizzare le funzioni avanzate di creazione di permessi personalizzati per accede-
re ai vari microservizi.
Inoltre ho utilizzato la funzionalità degli stage per poter continuare ad estendere i
microservizi sullo stage dev mentre l’API era utilizzabile sullo stage prod.

Ho utilizzato i modelli per eseguire un controllo su tutti i dati in ingresso ed in
uscita dalle API.

Amazon CloudWatch
Amazon CloudWatch è un servizio di monitoraggio per le risorse cloud AWS e le
applicazioni in esecuzione su AWS.
Nel progetto è stato utilizzato per monitorare i log delle varie funzioni lambda e le
statistiche dei vari dati raccolti sui servizi AWS quali latenza, chiamate effetuate alle
API, ecc.
Inoltre è stato creato un evento schedulato per chiamare l’esecuzione di una funzione
lambda ogni 5 minuti.

Amazon Lambda
AWS Lambda consente di eseguire codice senza dover effettuare il provisioning né
gestire server; le tariffe sono calcolate in base ai tempi di elaborazione, perciò non
viene addebitato alcun costo quando il codice non è in esecuzione. Le funzioni di
AWS Lambda sono identificate dal metodo def lambda_handler(event, context)
e ritornano un JSON che verrà analizzato e convertito da Amazon API Gateway.
Le funzioni Lambda sviluppate sono:
   ∗ violetto-Ajarvis-authorizer: metodo che viene chiamato automaticamente ad
     ogni richiesta all’API da Amazon API Gateway e decide, controllando l’auten-
     ticazione eseguita tramite BasicHTTPAuth se bloccare la richiesta o lasciarla
     avvenire; utilizza una tabella su DynamoDB per memorizzare i dati di accesso
     validi.
   ∗ violetto-Ajarvis-upload: metodo accessibile esternamente che permette il cari-
     camento di un file audio da Ajarvis Webapp o un’altra applicazione autorizzata;
     si occupa di rinominare il file .wav e di salvarlo sul backet di Amazon S3.
   ∗ violetto-Ajarvis-upload-text: metodo accessibile esternamente che permette il
     caricamento di una trascrizione, salvandola sempre sul bucket di Amazon S3.
   ∗ violetto-Ajarvis-retrieve: metodo accessibile esternamente che analizza la ri-
     chiesta di recupero informazioni di una o più standup e prepara una risposta
     JSON appropriata con le informazioni richieste.
   ∗ violetto-Ajarvis-project: metodo accessibile esternamente che recupera infor-
     mazioni generali sulle standup e prepara un JSON con le informazioni più
     importanti dei progetti di cui sono disponibili una o più standup.
   ∗ violetto-Ajarvis-transcriber: metodo che viene triggerato automaticamente
     ogni volta che un audio viene caricato sul bucket di Amazon S3. Si occupa
24                                       CAPITOLO 3. RESOCONTO DEL PROGETTO

       della creazione di un lavoro di trascrizione oppure mette il lavoro in attesa su
       una tabella di DynamoDB nel caso ce ne siano troppi attivi allo stesso tempo.

     ∗ violetto-Ajarvis-scheduled-manager: metodo chiamato automaticamente ogni
       5 minuti che controlla se ci sono lavori di trascrizione completati, e nel caso
       salva le informazioni ottenute su una tabella di DynamoDB e prende un lavoro
       in attesa per mandarlo in esecuzione. Nel caso di errori nella trascrizione
       riporta gli errori sulla tabella di DynamoDB, così che possano essere mostrati
       all’applicazione nel caso richieda lo stato dell’analisi della standup.

     ∗ violetto-Ajarvis-download-audio: metodo accessibile esternamente che per-
       mette il download di un file audio di una standup. Come per l’upload viene
       generato un link prefirmato dalla validità di un’ora che può essere utilizzato
       senza la necessità di nessuna autenticazione.

     ∗ violetto-Ajarvis-analyzer: metodo più importante e complesso del progetto,
       utilizza l’algoritmo di data mining; verrà trattato successivamente.

Lambda Analyzer
violetto-Ajarvis-analyzer è la funzione Lambda che si occupa di estrarre informazioni
dalla trascrizione della standup. Per riuscire meglio la funzione utilizza due file di
supporrto presenti nel bucket di Amazon S3.
Il primo file è helper.json e contiene possibili sostituzioni a termini che vengono
trascritti in modo sbagliato da Amazon Transcribe, emersi dai vari test effettuati. Per
esempio il termine "Hub" viene erroneamente trascritto come "ob".
Il secondo file è tokens.json e contiene i dizionari utilizzati per individuare e valutare
le parole e pezzi di frasi che individuano la durata, i problemi, il nome del progetto,
ecc.

Ho suddiviso l’operazione di analisi in più pezzi e in più file:

     ∗ Il file lambda.py, come in tutte le altre funzioni lambda, contiene il metodo
       handler della funzione; esso si preoccupa dei dati che bisognerà utilizzare, oltre
       a preparare in modo corretto i dati da ritornare. Utilizza analyzer.py per
       eseguire l’algoritmo di data mining.

     ∗ Il file analyzer.py, il quale contiene vari metodi pulire o formattare il testo, oltre
       a metodi specifici per:

          – estrarre il nome del progetto
          – estrarre il nome dell’utente che si identifica
          – ricavare informazioni su cosa era stato fatto precedentemente
          – ricavare informazioni su cosa sarà fatto dopo la standup
          – individuare se si sono stati presentati vari problemi e se ne è stata data una
            durata quantificabile

     ∗ Il file prepocess.py, il quale contiene metodi usati da analyzer.py per rifinire il
       testo, ed eseguire una suddivisione in token che viene usata per facilitare la com-
       prensione di frasi troppo lunghe, individuando token che possono suddividere
       la frase in sottofrasi.
Puoi anche leggere