Final tweaks

This commit is contained in:
Claudio Maggioni 2018-06-13 23:40:11 +02:00
parent 6b8541bc8e
commit 667310a11b
3 changed files with 41 additions and 39 deletions

View file

@ -1,4 +1,4 @@
\documentclass[hidelinks,12pt,a4paper]{scrartcl} \documentclass[hidelinks,12pt,a4paper,numbers=enddot]{scrartcl}
\usepackage{comment} \usepackage{comment}
\includecomment{en} \includecomment{en}

View file

@ -1,4 +1,4 @@
\documentclass[hidelinks,12pt,a4paper]{scrartcl} \documentclass[hidelinks,12pt,a4paper,numbers=enddot]{scrartcl}
\usepackage{comment} \usepackage{comment}
\includecomment{it} \includecomment{it}

View file

@ -33,14 +33,14 @@
\begin{it} \begin{it}
\def\mdtitle{Alternanza scuola-lavoro estesa presso \textit{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} \def\mdsubtitle{Sviluppo di applicazioni multipiattaforma per dispositivi mobili}
\def\mddate{8 giugno 2018}
\end{it} \end{it}
\begin{en} \begin{en}
\def\mdtitle{Extended school internship at \textit{Agomir S.p.A.}} \def\mdtitle{Extended school internship at \textit{Agomir S.p.A.}}
\def\mdsubtitle{Multiplatform mobile application development} \def\mdsubtitle{Multiplatform mobile application development}
\def\mddate{8 June 2018}
\end{en} \end{en}
\def\mdauthor{Claudio Maggioni} \def\mdauthor{Claudio Maggioni}
\def\mddate{\today}
\def\mdrevision{7}
% header and footer style % header and footer style
\clearscrheadfoot \clearscrheadfoot
@ -83,19 +83,21 @@
{\huge\bfseries\mdtitle\par} {\huge\bfseries\mdtitle\par}
\vspace{0.75cm} \vspace{0.75cm}
{\Large\bfseries\mdsubtitle\par} {\Large\bfseries\mdsubtitle\par}
\vspace{2cm}
{\Large Tesi di maturità di\par} \vfill
{\Large Tesi di maturità\par}
{\vspace{0.5cm}} {\vspace{0.5cm}}
{\Large\itshape\mdauthor\par} {\Large\itshape\mdauthor\par}
\vfill \vspace{3cm}
% Bottom of the page
{\large\mddate\par}
\begin{it} \begin{it}
\vspace{0.5cm}
{\large\textsc{Traduzione in italiano}\par} {\large\textsc{Traduzione in italiano}\par}
\end{it} \end{it}
\begin{en}
{\large\textsc{Main copy}\par}
\end{en}
\vspace{0.5cm} \vspace{0.5cm}
{\large\color{red}\textsc{Revisione \mdrevision}\par} {\large\mddate\par}
\end{titlepage} \end{titlepage}
\newpage \newpage
@ -114,17 +116,17 @@
piccole e medie imprese) svolgendo un'attività di alternanza scuola-lavoro piccole e medie imprese) svolgendo un'attività di alternanza scuola-lavoro
estesa con cadenza settimanale (giovedì e venerdì pomeriggio). Mi occupo di estesa con cadenza settimanale (giovedì e venerdì pomeriggio). Mi occupo di
sviluppo software di tipo gestionale, nello specifico di applicazioni per sviluppo software di tipo gestionale, nello specifico di applicazioni per
smartphone multipiattaforma (cioè compatibili sia con Android che con iOS) smartphone multipiattaforma (cioè compatibili sia con \textit{Android} che con \textit{iOS})
utilizzando strumenti come \textit{Ionic Framework}\cite{ionic:website} e utilizzando strumenti come \textit{Ionic Framework}\cite{ionic:website} e
\textit{Apache Cordova}\cite{cordova:website}. \textit{Apache Cordova}\cite{cordova:website}.
Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al Tale approccio al mondo \textit{mobile} facilita lo sviluppo, perché al
posto di usare API e meccanismi legati alla piattaforma \`e possibile posto di usare \textit{API} e meccanismi legati alla piattaforma è possibile
utilizzare tecnologie note e standard come HTML e Javascript. Naturalmente utilizzare tecnologie note e standard come \textit{HTML} e \textit{Javascript}. Naturalmente
tali applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide, tali applicazioni richiedono pi\`u risorse e tendono ad essere meno fluide,
ma questo aspetto è meno rilevante in contesti gestionali come quelli ma questo aspetto è meno rilevante in contesti gestionali come quelli
affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o affrontati da Agomir, non legati ad esempio al mondo dei videogiochi o
all'elaborazione real-time. all'elaborazione \textit{real-time}.
\end{it} \end{it}
\begin{en} \begin{en}
\section{General information about the work done} \section{General information about the work done}
@ -135,13 +137,13 @@
industries) doing an extended school internship on a weekly basis (Thursdays industries) doing an extended school internship on a weekly basis (Thursdays
and Fridays, in the afternoon). I am involved in developing accounting and Fridays, in the afternoon). I am involved in developing accounting
software, writing multiplatform smartphone applications (which work software, writing multiplatform smartphone applications (which work
with both Android and iOS) to be precise. In order to do this, I am using tools with both \textit{Android} and \textit{iOS}) to be precise. In order to do this, I am using tools
such as \textit{Ionic Framework}\cite{ionic:website} and \textit{Apache such as \textit{Ionic Framework}\cite{ionic:website} and \textit{Apache
Cordova}\cite{cordova:website}. Cordova}\cite{cordova:website}.
This type of approach to the mobile world makes development easier because This type of approach to the mobile world makes development easier because
instead of using APIs and platform-dependent code it is possible to use instead of using APIs and platform-dependent code it is possible to use
well-known and standardized technologies such as HTML and Javascript. well-known and standardized technologies such as \textit{HTML} and \textit{Javascript}.
Naturally, these apps require more system resources and they generally are Naturally, these apps require more system resources and they generally are
less responsive than their native counterparts. However, this aspect is less less responsive than their native counterparts. However, this aspect is less
relevant in the world of accounting software that Agomir embraces, far from the relevant in the world of accounting software that Agomir embraces, far from the
@ -154,7 +156,7 @@
Non ho diretto controllo manageriale su ciò che sviluppo in azienda, Non ho diretto controllo manageriale su ciò che sviluppo in azienda,
in quanto ho un ruolo simile a quello di un dipendente. L'incarico di gestire in quanto ho un ruolo simile a quello di un dipendente. L'incarico di gestire
l'andamento dei progetti spetta a Mario Goretti, A.D. dell'azienda e capo l'andamento dei progetti spetta a Mario Goretti, A.D. dell'azienda e capo
del settore di sviluppo software gestionale (\textsc{SWG}), e ai suoi del settore di sviluppo software gestionale (\textsc{SWG}), ed ai suoi
collaboratori. collaboratori.
In generale sviluppo i progetti da solo. Collaboro con il collega Daniele In generale sviluppo i progetti da solo. Collaboro con il collega Daniele
@ -162,7 +164,7 @@
l'organizzazione di nuovi progetti, nonché per ricevere da lui consigli utili l'organizzazione di nuovi progetti, nonché per ricevere da lui consigli utili
per migliorare le mie competenze. per migliorare le mie competenze.
Nonostante non abbia controllo totale \`e comunque mia responsabilità fare Nonostante non abbia controllo totale è comunque mia responsabilità fare
stime orarie sul lavoro da svolgere nonché definire passi e \textit{milestone} stime orarie sul lavoro da svolgere nonché definire passi e \textit{milestone}
per i vari progetti. per i vari progetti.
@ -176,7 +178,7 @@
I do not directly manage the projects on which I work, because my role is more I do not directly manage the projects on which I work, because my role is more
similar to that of an employee. The task of managing the status of the various similar to that of an employee. The task of managing the status of the various
projects is given to Mario Goretti, CEO of the company and head of the projects is given to Mario Goretti, CEO of the company and head of the
accounting software department (codenamed SWG), and to his collaborators. accounting software department (codenamed \textsc{SWG}), and to his collaborators.
In general, I work on the tasks assigned to me alone. I sometimes work with my In general, I work on the tasks assigned to me alone. I sometimes work with my
colleague Daniele Crippa in order to interface my projects' code with the colleague Daniele Crippa in order to interface my projects' code with the
@ -204,7 +206,7 @@
\begin{description} \begin{description}
\item[Ordini cliente{\normalfont,}] per registrare ordini di prodotti a clienti; \item[Ordini cliente{\normalfont,}] per registrare ordini di prodotti a clienti;
\item[Soggetti{\normalfont,}] per consultare informazioni anagrafiche di clienti e fornitori; \item[Soggetti{\normalfont,}] per consultare informazioni anagrafiche di clienti e fornitori;
\item[Agenda{\normalfont,}] per consultare e aggiungere eventi nel calendario presente \item[Agenda{\normalfont,}] per consultare ed aggiungere eventi nel calendario presente
nell'ERP, il quale si pu\`o integrare con \textit{Outlook}; nell'ERP, il quale si pu\`o integrare con \textit{Outlook};
\item[Magazzini{\normalfont,}] gestire e inventariare scorte in magazzino. \item[Magazzini{\normalfont,}] gestire e inventariare scorte in magazzino.
\end{description} \end{description}
@ -278,29 +280,29 @@
\item L'applicazione non comunica direttamente con il gestionale, ma tramite \item L'applicazione non comunica direttamente con il gestionale, ma tramite
una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato una serie di chiamate \textsc{REST}\cite{wiki:rest} ad un endpoint lato
server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario; server (chiamato \textit{InteGRaREST}) che svolge il ruolo di intermediario.
\item Tale componente è una Java WebApplication che utilizza una libreria \item Tale componente è una Java WebApplication che utilizza una libreria
sviluppata internamente (chiamata \textit{restaurant}) per offrire le rotte sviluppata internamente (chiamata \textit{restaurant}) per offrire le rotte
accessibili al client e per interagire con il database di accessibili al client e per interagire con il database di
\textit{InteGRa}, una normale istanza di \textit{PostgreSQL}; \textit{InteGRa}, una normale istanza di \textit{PostgreSQL}.
\item Nella fase di comunicazione tramite HTTP, i dati in input vengono \item Nella fase di comunicazione tramite HTTP, i dati in input vengono
trasmessi come \texttt{application/x-www-form-urlencoded} mentre trasmessi come \texttt{application/x-www-form-urlencoded} mentre
i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le i dati in output vengono trasmessi come \textsc{JSON}\cite{wiki:json}, e le
sessioni vengono identificate con un token presente come parametro nella sessioni vengono identificate con un token presente come parametro nella
query string di ciascuna richiesta; query string di ciascuna richiesta.
\item \textit{InteGRaREST} effettua autonomamente query \textsc{SQL} al \item \textit{InteGRaREST} effettua autonomamente query \textsc{SQL} al
database per recuperare velocemente informazioni aventi database per recuperare velocemente informazioni aventi
struttura dati e logiche di memorizzazione semplici; struttura dati e logiche di memorizzazione semplici.
\item Nel caso sia necessario interagire con record complessi, \item Nel caso sia necessario interagire con record complessi,
\textit{InteGRaREST} comunica con \textit{InteGRa} attraverso \textit{InteGRaREST} comunica con \textit{InteGRa} attraverso
chiamate \textsc{SOAP}\cite{wiki:soap}; chiamate \textsc{SOAP}\cite{wiki:soap}.
\item \textit{InteGRa Mobile}, l'applicazione per dispositivi mobili, comunica \item \textit{InteGRa Mobile}, l'applicazione per dispositivi mobili, comunica
con \textit{InteGRaREST} grazie a una versione client di \textit{restaurant}, con \textit{InteGRaREST} grazie ad una versione client di \textit{restaurant},
in grado di gestire (in modo limitato) operazioni eseguite in mancanza di in grado di gestire (in modo limitato) operazioni eseguite in mancanza di
connessione alla rete. connessione alla rete.
@ -316,26 +318,26 @@
\item The smartphone app does not directly communicate with the accounting \item The smartphone app does not directly communicate with the accounting
software, but instead it interacts using \textsc{REST} calls\cite{wiki:rest} software, but instead it interacts using \textsc{REST} calls\cite{wiki:rest}
with a middleware server application, named \textit{InteGRaREST}; with a middleware server application, named \textit{InteGRaREST}.
\item The last component mentioned is a Java WebApplication, \item The last component mentioned is a Java WebApplication,
implemented by using an internally developed library named \textit{restaurant}, implemented by using an internally developed library named \textit{restaurant},
that contains the boilerplate needed to generate the \textsc{REST} routes that contains the boilerplate needed to generate the \textsc{REST} routes
and to access the \textit{InteGRa} database, a normal \textit{PostgreSQL} and to access the \textit{InteGRa} database, a normal \textit{PostgreSQL}
instance; instance.
\item When information is exchanged by HTTP, input data is encoded \item When information is exchanged by HTTP, input data is encoded
as the MIME type \texttt{application/x-www-form-urlencoded}, while output data as the MIME type \texttt{application/x-www-form-urlencoded}, while output data
is encoded as \textsc{JSON}\cite{wiki:json}. Sessions are identified by is encoded as \textsc{JSON}\cite{wiki:json}. Sessions are identified by
a token that must be included in the query string of each call; a token that must be included in the query string of each call.
\item \textit{InteGRaREST} queries the database autonomously through \item \textit{InteGRaREST} queries the database autonomously through
\textsc{SQL} in order to fetch and store data structures with simple \textsc{SQL} in order to fetch and store data structures with simple
or absent logical constraints; or absent logical constraints.
\item When interaction with data arranged in complex structures is needed, \item When interaction with data arranged in complex structures is needed,
\textit{InteGRaREST} communicates with \textit{InteGRa} through \textit{InteGRaREST} communicates with \textit{InteGRa} through
\textsc{SOAP} calls\cite{wiki:soap}; \textsc{SOAP} calls\cite{wiki:soap}.
\item \textit{InteGRa Mobile}, the smartphone app, interacts with \item \textit{InteGRa Mobile}, the smartphone app, interacts with
\textit{InteGRaREST} thanks to a client version of \textit{restaurant}, \textit{InteGRaREST} thanks to a client version of \textit{restaurant},
@ -381,7 +383,7 @@
Seguono le interfacce delle classi \textit{CRUDUtils}, \textit{JsonProducer}, Seguono le interfacce delle classi \textit{CRUDUtils}, \textit{JsonProducer},
\textit{ReadableRESTController} e \textit{CRUDRESTController}, complete di \textit{ReadableRESTController} e \textit{CRUDRESTController}, complete di
Javadoc (in inglese, come presente nei sorgenti originali). \textit{Javadoc} (in inglese, come presente nei sorgenti originali).
\end{it} \end{it}
\begin{en} \begin{en}
\subsubsection{\textit{restaurant} -- server side} \subsubsection{\textit{restaurant} -- server side}
@ -418,7 +420,7 @@
Below there are the interface listings for the classes \textit{CRUDUtils}, \textit{JsonProducer}, Below there are the interface listings for the classes \textit{CRUDUtils}, \textit{JsonProducer},
\textit{ReadableRESTController} and \textit{CRUDRESTController}, with the \textit{ReadableRESTController} and \textit{CRUDRESTController}, with the
respective Javadoc comments (in english, as in the original sources). respective \textit{Javadoc} comments (in english, as in the original sources).
\end{en} \end{en}
\begin{it} \begin{it}
@ -822,7 +824,7 @@ public abstract class CRUDUtils {
Oltre a quanto mostrato, \textit{restaurant} contiene vari metodi utilità per Oltre a quanto mostrato, \textit{restaurant} contiene vari metodi utilità per
la gestione di file \texttt{.properties}, per la validazione dei dati in la gestione di file \texttt{.properties}, per la validazione dei dati in
input, per la registrazione della \textit{timestamp} di creazione o modifica input, per la registrazione della \textit{timestamp} di creazione o modifica
di un record, e altro ancora. di un record, ed altro ancora.
\end{it} \end{it}
\begin{en} \begin{en}
Beside what shown, \textit{restaurant} includes many utility methods able to Beside what shown, \textit{restaurant} includes many utility methods able to
@ -833,7 +835,7 @@ public abstract class CRUDUtils {
\begin{it} \begin{it}
\subsubsection{\textit{restaurant} -- lato client} \subsubsection{\textit{restaurant} -- lato client}
La parte \textit{client} della libreria \textit{restaurant} è implementata con il La parte \textit{client} della libreria \textit{restaurant} è implementata con il
linguaggio \textit{TypeScript}, un'estensione di \textit{Javascript} linguaggio di programmazione \textit{TypeScript}, un'estensione di \textit{Javascript}
che aggiunge tipizzazione statica, costrutti classici della programmazione che aggiunge tipizzazione statica, costrutti classici della programmazione
ad oggetti, nonch\'e supporto alle generiche. Segue il listato dell'interfaccia della ad oggetti, nonch\'e supporto alle generiche. Segue il listato dell'interfaccia della
classe \textit{RESTService}, la quale contiene metodi statici per comunicare classe \textit{RESTService}, la quale contiene metodi statici per comunicare
@ -845,7 +847,7 @@ public abstract class CRUDUtils {
The client portion of the \textit{restaurant} library is implemented with the The client portion of the \textit{restaurant} library is implemented with the
\textit{TypeScript} programming language, an extension of \textit{Javascript} \textit{TypeScript} programming language, an extension of \textit{Javascript}
offering static typing, common OOP constructs and generics support. The offering static typing, common OOP constructs and generics support. The
following listings describes the \textit{RESTService} class interface, which following listing describes the \textit{RESTService} class interface, which
contains some static methods useful to exchange data asynchronously with the contains some static methods useful to exchange data asynchronously with the
server in the form of instances of ``entity'' classes, inheritors of the server in the form of instances of ``entity'' classes, inheritors of the
abstract class \textit{Table}. abstract class \textit{Table}.
@ -1256,8 +1258,8 @@ Since this project was urgent for the customer, development on \textit{InteGRa
to the remote hosts; to the remote hosts;
\item[\textit{guacamole-client}{\normalfont,}] a Web Application written with \textit{Java \item[\textit{guacamole-client}{\normalfont,}] a Web Application written with \textit{Java
Servlets} that offers a web interface for interacting with Servlets} that offers a web interface for interacting with
\end{description}
\textit{guacamole-server} and to connect with remote PCs. \textit{guacamole-server} and to connect with remote PCs.
\end{description}
Considering the open-source nature of the project, both \textit{guacamole-server} Considering the open-source nature of the project, both \textit{guacamole-server}
and \textit{guacamole-client} can be used as a library for the implementation of and \textit{guacamole-client} can be used as a library for the implementation of
similar software. To be precise, \textit{guacamole-client} can be divided in the similar software. To be precise, \textit{guacamole-client} can be divided in the