diff --git a/bibliography.bib b/bibliography.bib index e5faed8..0615926 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -1,14 +1,32 @@ @online{guacdoc:arch, - title = {Guacamole Manual, Chapter 1. Implementation and architecture}, - author = {The Apache Software Foundation}, + title = "Guacamole Manual, Chapter 1. Implementation and architecture", + author = "The Apache Software Foundation", url = "https://guacamole.apache.org/doc/gug/guacamole-architecture.html", - note = "[Online; in data 9-aprile-2018, traduzione propria]" + note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]" +} +@online{ionic:website, + title = "Build Amazing Native Apps and Progressive Web Apps with Ionic Framework and Angular", + author = "Ionic (precedentemente Drifty Co.)", + url = "https://ionicframework.com/framework", + note = "[Online; in data 30-aprile-2018]" +} +@online{agomir:website, + title = "Agomir S.p.A. - Software - Sistemi - Servizi", + author = "Agomir S.p.A.", + url = "https://www.agomir.com", + note = "[Online; in data 30-aprile-2018]" } @online{guacdoc:api, - title = {\textit{API Documentation}}, - author = {Apache Guacamole}, + title = {\textit{API Documentation} -- Apache Guacamole}, + author = "The Apache Software Foundation", url = "https://guacamole.apache.org/api-documentation/", - note = "[Online; in data 9-aprile-2018, traduzione propria]" + note = "[Online; in data 9-aprile-2018, traduzione e rielaborazione proprie]" +} +@online{cordova:website, + title = "Apache Cordova", + author = "The Apache Software Foundation", + url = "https://cordova.apache.org", + note = "[Online; in data 30-aprile-2018]" } @online{wiki:rest, author = "Wikipedia", diff --git a/italian.pdf b/italian.pdf index 8b05ca8..9a1c4a3 100644 Binary files a/italian.pdf and b/italian.pdf differ diff --git a/main.tex b/main.tex index f2d385c..8ec9e5c 100644 --- a/main.tex +++ b/main.tex @@ -23,11 +23,11 @@ % document metadata \begin{it} - \def\mdtitle{Alternanza scuola-lavoro estesa presso Agomir S.p.A.} + \def\mdtitle{Alternanza scuola-lavoro estesa presso \textit{Agomir S.p.A.}} \def\mdsubtitle{Sviluppo di applicazioni multipiattaforma per dispositivi mobili} \end{it} \begin{en} - \def\mdtitle{Extended school internship at Agomir S.p.A.} + \def\mdtitle{Extended school internship at \textit{Agomir S.p.A.}} \def\mdsubtitle{Multiplatform mobile application development} \end{en} \def\mdauthor{Claudio Maggioni} @@ -80,14 +80,22 @@ \begin{it} \section{Informazioni generali sul lavoro svolto} - A partire dal giorno 19/10/2017, collaboro con l'azienda Agomir S.p.A\footnote{Agomir S.p.A.: \url{https://www.agomir.com/}}, che produce software, sistemi e servizi per - piccole e medie imprese, svolgendo un'attività di alternanza scuola-lavoro estesa con cadenza settimanale (nello specifico giovedì e venerdì pomeriggio). Mi occupo di sviluppo software di tipo gestionale, nello specifico di applicazioni per smartphone - multipiattaforma (cioè compatibili sia con Android che con iOS) utilizzando strumenti come \textit{Ionic Framework}\footnote{Ionic Framework: \url{https://ionicframework.com/}} e \textit{Apache - Cordova}\footnote{Apache Cordova: \url{https://cordova.apache.org/}}. + A partire dal giorno 19/10/2017, collaboro con l'azienda \textit{Agomir + S.p.A}\cite{agomir:website} (produttrice di software, sistemi e servizi per + piccole e medie imprese) svolgendo un'attività di alternanza scuola-lavoro + estesa con cadenza settimanale (giovedì e venerdì pomeriggio). Mi occupo di + sviluppo software di tipo gestionale, nello specifico di applicazioni per + smartphone multipiattaforma (cioè compatibili sia con Android che con iOS) + utilizzando strumenti come \textit{Ionic Framework}\cite{ionic:website} e + \textit{Apache Cordova}\cite{cordova:website}. - Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al posto di usare API e meccanismi legati - alla piattaforma \`e possibile utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente tali - applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide, ma questo aspetto è meno rilevante in contesti gestionali come quelli affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o all'elaborazione real-time. + Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al + posto di usare API e meccanismi legati alla piattaforma \`e possibile + utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente + tali applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide, + ma questo aspetto è meno rilevante in contesti gestionali come quelli + affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o + all'elaborazione real-time. \end{it} \begin{en} \section{General information about the work done} @@ -108,7 +116,7 @@ Nonostante non abbia controllo totale \`e comunque mia responsabilità fare stime orarie sul lavoro da svolgere nonché definire passi e \textit{milestone} per i vari progetti. - Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile} ho gestito momenti di formazione ad alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso. + Per aumentare la forza lavoro per lo sviluppo di applicazioni \textit{mobile} ho coordinato momenti di formazione ad alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso. \end{it} \begin{en} \section{Projects management} @@ -120,13 +128,13 @@ \section{Il progetto principale: \textit{InteGRa Mobile}} Questa applicazione, una volta completata, dovrebbe permettere ad utenti in mobilità di interfacciarsi con alcune - funzioni del prodotto ERP di punta di Agomir: il gestionale \textit{InteGRa}\footnote{InteGRa ERP: \url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere alle seguenti sezioni: + funzioni del prodotto ERP di punta di Agomir: il gestionale + \textit{InteGRa}\footnote{Sito internet di InteGRa ERP: \url{https://integra.agomir.com/}}. Nel dettaglio, sarà possibile accedere alle seguenti sezioni: \begin{description} \item[Ordini cliente] per registrare ordini di prodotti a clienti; \item[Soggetti] per consultare informazioni anagrafiche di clienti e fornitori; - \item[Agenda] per consultare e aggiungere eventi nel calendario presente nell'ERP, il quale si pu\`o integrare con \textit{Outlook} - \footnote{Microsoft Outlook: \url{https://products.office.com/it-it/outlook}}; + \item[Agenda] per consultare e aggiungere eventi nel calendario presente nell'ERP, il quale si pu\`o integrare con \textit{Outlook}; \item[Magazzini] gestire e inventariare scorte in magazzino. \end{description} @@ -163,20 +171,57 @@ \end{figure} \begin{it} - Nella figura \ref{fig:itgmobliearch} si può notare come l'insieme dei componenti software all'interno del progetto siano organizzati e comunichino tra loro. Nel dettaglio: - \begin{itemize} - \item L'applicazione non comunica direttamente con il gestionale, ma tramite una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario. - Nello specifico, i dati in input vengono trasmessi come \texttt{application/x-www-form-urlencoded} mentre - i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le sessioni vengono identificate con un token presente nella query string di ciascuna richiesta; - \item Tale componente server è in grado di effettuare autonomamente query \textsc{SQL} al database del gestionale per recuperare velocemente informazioni aventi una struttura dati semplice; - \item Nel caso sia necessario interagire con record complessi, \textit{InteGRaREST} comunica direttamente con \textit{InteGRa} attraverso chiamate \textsc{SOAP}\cite{wiki:soap}; - \item La comunicazione tra \textit{InteGRaREST} e \textit{InteGRa Mobile} avviene tramite \textit{restaurant}, libreria che implementa e rende standard il protocollo di comunicazione e sincronizzazione dati. - \end{itemize} + Nella figura \ref{fig:itgmobliearch} si può notare come l'insieme dei + componenti software all'interno del progetto siano organizzati e comunichino + tra loro. Tale architettura è stata realizzata da me, basandosi + sull'esperienza acquisita con il progetto \textit{InteGRa.Service}. Segue + una spiegazione sintetica (organizzata in punti) del diagramma. + + \begin{itemize} + + \item L'applicazione non comunica direttamente con il gestionale, ma tramite + una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato + server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario. + + \item Tale componente è una Java WebApplication che utilizza una libreria + sviluppata internamente (chiamata \textit{restaurant}) per offrire le + servlet accessibili al client e per interagire con il database di + \textit{InteGRa}, una normale istanza di \textit{PostgreSQL}. + + \item Nella fase di comunicazione tramite HTTP, i dati in input vengono + trasmessi come \texttt{application/x-www-form-urlencoded} mentre + i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le + sessioni vengono identificate con un token presente come parametro nella + query string di ciascuna richiesta; + + \item \textit{InteGRaREST} effettua autonomamente query \textsc{SQL} al + database per recuperare velocemente informazioni aventi + struttura dati e logiche di memorizzazione semplici; + + \item Nel caso sia necessario interagire con record complessi, + \textit{InteGRaREST} comunica con \textit{InteGRa} attraverso + chiamate \textsc{SOAP}\cite{wiki:soap}; + + \item \textit{InteGRa Mobile}, l'applicazione per dispositivi mobili, comunica + con \textit{InteGRaREST} grazie a una versione client di \textit{restaurant}, + in grado di gestire (in modo limitato) operazioni eseguite in mancanza di + connessione alla rete. + + \end{itemize} + \end{it} \begin{en} \blindtext \end{en} +\begin{it} + \subsubsection{\textit{restaurant} -- lato server} +\end{it} + +\begin{it} + \subsubsection{\textit{restaurant} -- lato client} +\end{it} + \begin{it} \subsection{Stato del progetto} \end{it} @@ -247,24 +292,40 @@ Le fasi del progetto, di cui date di inizio e fine sono state specificate nel diagramma in figura \ref{fig:ganttitgmob}, sono: \begin{description} - \item[Progettazione] delineazione delle funzionalità da implementare nell'applicazione - e prime bozze dell'interfaccia utente; -// \item[Implementazione \textit{restaurant}] implementazione della libreria, su cui si basano tutte le sezioni del programma. Vista l'importanza di questo componente, gli sviluppi vengono continuati in parallelo con l'implementazione delle sezioni; - \item[Implementazione sezioni] creazione di interfaccia e logica per le funzionalit\'a previste, cio\'e: + + \item[Progettazione] delineazione delle funzionalità da implementare + nell'applicazione e prime bozze dell'interfaccia utente; + + \item[Implementazione \textit{restaurant}] implementazione della libreria, su + cui si basano tutte le sezioni del programma. Vista l'importanza di questo + componente, gli sviluppi vengono continuati in parallelo con + l'implementazione delle sezioni; + + \item[Implementazione sezioni] creazione di interfaccia e logica per le + funzionalit\'a previste, cio\'e: \begin{itemize} \item Magazzini; \item Agenda; \item Soggetti; \item Ordini cliente; \end{itemize} - \item[Test per le sezioni] messa alla prova degli algoritmi e della UI per efficacia ed efficienza, nonch\'e eventuali correzioni; - \item[Rifinimento \textit{restaurant}] messa alla prova delle scelte architetturali e algoritmi usati nella libreria e rifinimento di essi; Fase divisa in: + + \item[Test per le sezioni] messa alla prova degli algoritmi e della UI per + efficacia ed efficienza, nonch\'e eventuali correzioni; + + \item[Rifinimento \textit{restaurant}] messa alla prova delle scelte + architetturali e algoritmi usati nella libreria e rifinimento di essi; + Fase divisa in: \begin{description} - \item[Miglioramento architettura] analisi del protocollo per individuare punti di debolezza e possibili ottimizzazioni; + \item[Miglioramento architettura] analisi del protocollo per individuare + punti di debolezza e possibili ottimizzazioni; \item[Test per \textit{restaurant}] messa alla prova dei cambiamenti fatti; \end{description} - \item[Finalizzazione] task finali del progetto, tra cui branding, operazioni pre-rilascio, e gestione di eventuali personalizzazioni richieste dai clienti. - \end{description} + +\item[Finalizzazione] task finali del progetto, tra cui branding, operazioni + pre-rilascio, e gestione di eventuali personalizzazioni richieste dai clienti. + +\end{description} \end{it} \begin{en} \subsection{Project phases}