diff --git a/main.tex b/main.tex index be48319..8e8bbc4 100644 --- a/main.tex +++ b/main.tex @@ -75,16 +75,18 @@ \begin{titlepage} \pagenumbering{gobble} \centering - \includesvg[width=0.3\textwidth]{images/logo}\par\vspace{1.5cm} + \includesvg[width=0.3\textwidth]{images/logo}\par\vspace{1cm} {\scshape\LARGE Istituto di Istruzione Superiore \mbox{``A. Badoni''}\par} \vspace{1cm} - {\scshape\Large Tesi di maturità\par} - \vspace{1.5cm} + {\scshape\Large Indirizzo ``Informatica e Telecomunicazioni''\par} + \vspace{2cm} {\huge\bfseries\mdtitle\par} \vspace{0.75cm} {\Large\bfseries\mdsubtitle\par} \vspace{2cm} - {\Large\itshape\mdauthor\par} + {\Large Tesi di maturità di\par} + {\vspace{0.5cm}} + {\Large\itshape\mdauthor\par} \vfill % Bottom of the page {\large\mddate\par} @@ -157,14 +159,15 @@ In generale sviluppo i progetti da solo. Collaboro con il collega Daniele Crippa per l'interfacciamento con i software aziendali esistenti e per - l'organizzazione di nuovi progetti, nonché per consigli vari. + l'organizzazione di nuovi progetti, nonché per ricevere da lui consigli utili + per migliorare le mie competenze. 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 coordinato momenti di formazione ad alcuni dipendenti nei quali ho mostrato + ho coordinato momenti di formazione per alcuni dipendenti nei quali ho mostrato il principale funzionamento delle tecnologie che uso. \end{it} \begin{en} @@ -177,8 +180,8 @@ 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 - existing products from the company, to plan new projects, and for suggestions - in general. + existing products from the company, to plan new projects, and for recieving + suggestions aimed to increase my skills. Even though I do not have total control on the projects I work on, I am still responsible for defining development milestones and making @@ -199,11 +202,11 @@ 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 + \item[Ordini cliente{\normalfont,}] per registrare ordini di prodotti a clienti; + \item[Soggetti{\normalfont,}] per consultare informazioni anagrafiche di clienti e fornitori; + \item[Agenda{\normalfont,}] 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. + \item[Magazzini{\normalfont,}] gestire e inventariare scorte in magazzino. \end{description} In aggiunta, sarà possibile anche registrare le ore per interventi in @@ -226,12 +229,12 @@ within the following areas: \begin{description} - \item[Customers' orders] for registering the products customers may order; - \item[Customers and suppliers] for looking up data record of customers and + \item[Customers' orders{\normalfont,}] for registering the products customers may order; + \item[Customers and suppliers{\normalfont,}] for looking up data record of customers and suppliers; - \item[Calendar] for viewing and editing events on the ERP calendar, synchronizable + \item[Calendar{\normalfont,}] for viewing and editing events on the ERP calendar, synchronizable with \textit{Outlook}; - \item[Warehouses] for managing warehouses and inventories. + \item[Warehouses{\normalfont,}] for managing warehouses and inventories. \end{description} In addition to what specified above, users will be able to register working @@ -347,12 +350,12 @@ gioco di parole sull'acronimo REST.} viene importata come una normale dipendenza Maven\cite{maven:website}. Essa dipende da: \begin{description} - \item[Hibernate ORM\cite{hibernate:website}] un famoso Object/Relation + \item[Hibernate ORM\cite{hibernate:website}{\normalfont,}] un famoso Object-Relation Mapper\cite{wiki:orm} per Java, utile ad interrogare il database \textit{PostgreSQL} con facilità; - \item[GSON\cite{gson:website}] una libreria di Google per serializzare + \item[GSON\cite{gson:website}{\normalfont,}] una libreria di Google per serializzare e deserializzare oggetti Java in JSON; - \item[Jersey\cite{jersey:website}] un'implementazione dell'API JAX-RS + \item[Jersey\cite{jersey:website}{\normalfont,}] un'implementazione dell'API JAX-RS per realizzare gli endpoint REST. Ciò avviene senza servlet ma tramite semplici metodi contenuti in classi senza ``padre'' dette \textit{controller}, opportunamente decorati con le annotazioni nel package @@ -363,7 +366,7 @@ semplificate dal codice contenuto in \textit{restaurant} su due livelli: \begin{itemize} \item È possibile eseguire normali operazioni di CRUD\cite{wiki:crud} - nonchè costruire manualmente query tramite i metodi statici della classe + nonch\'e costruire manualmente query tramite i metodi statici della classe \textit{CRUDUtils}, che lavorano in input e in output con istanze delle classi ``entità'' registrate nell'ORM; \item Inoltre, è possibile creare nuovi \textit{controller} con facilità @@ -387,12 +390,12 @@ as a normal Maven\cite{maven:website} dependency. It requires the following dependencies: \begin{description} - \item[Hibernate ORM\cite{hibernate:website}] a famous Java Object/Relation + \item[Hibernate ORM\cite{hibernate:website}{\normalfont,}] a famous Java Object/Relation Mapper\cite{wiki:orm}, used to query the \textit{PostgreSQL} database with ease; - \item[GSON\cite{gson:website}] a library from Google for serializing and + \item[GSON\cite{gson:website}{\normalfont,}] a library from Google for serializing and deserializing Java object in JSON; - \item[Jersey\cite{jersey:website}] an implementation of the API JAX-RS + \item[Jersey\cite{jersey:website}{\normalfont,}] an implementation of the API JAX-RS for creating REST endpoints, not through servlets but using simple methods contained in plain classes, called \textit{controllers}, decorated with the annotations contained in the package \texttt{javax.ws.rs}. @@ -480,7 +483,7 @@ public abstract class JsonProducer { \end{lstlisting} \begin{it} Per una migliore lettura del listato \ref{lst:jsonprd-java}, si precisa che la - classe \textit{Error} è una enumerazione Java contenente messaggi di errore + classe \textit{Error} è un'enumerazione Java contenente messaggi di errore standard. La classe \textit{ErrorDetails}, invece, permette al codice esterno di realizzare messaggi di errore personalizzati. Inoltre, l'oggetto statico \texttt{GSON} di classe \textit{Gson} è il serializzatore a JSON offerto dalla @@ -672,7 +675,7 @@ public abstract class CRUDRESTController}. Di conseguenza, le classi ``entità'' che estendono \textit{CRUDable} @@ -829,10 +832,10 @@ public abstract class CRUDUtils { \begin{it} \subsubsection{\textit{restaurant} -- lato client} - La parte 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} - che aggiunge tipizzazione statica, i classici costrutti della programmazione - ad oggetti, nonchè il supporto alle generiche. Segue il listato dell'interfaccia della + che aggiunge tipizzazione statica, costrutti classici della programmazione + ad oggetti, nonch\'e supporto alle generiche. Segue il listato dell'interfaccia della classe \textit{RESTService}, la quale contiene metodi statici per comunicare con il server asincronamente tramite istanze di classi ``entità'', cioè classi figlie della classe astratta \textit{Table}. @@ -1085,15 +1088,15 @@ export class RESTService { \begin{description} - \item[Progettazione] delineazione delle funzionalità da implementare + \item[Progettazione{\normalfont,}] delineazione delle funzionalità da implementare nell'applicazione e prime bozze dell'interfaccia utente; - \item[Implementazione \textit{restaurant}] implementazione della libreria su + \item[Implementazione \textit{restaurant}{\normalfont,}] 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 + \item[Implementazione sezioni{\normalfont,}] creazione di interfaccia e logica per le funzionalit\'a previste, cio\'e: \begin{itemize} \item Magazzini; @@ -1102,19 +1105,19 @@ export class RESTService { \item Ordini cliente; \end{itemize} - \item[Test per le sezioni] collaudo degli algoritmi e della UI per + \item[Test per le sezioni{\normalfont,}] collaudo degli algoritmi e della UI per efficacia ed efficienza, nonch\'e eventuali correzioni; - \item[Rifinimento \textit{restaurant}] collaudo delle scelte + \item[Rifinimento \textit{restaurant}{\normalfont,}] collaudo 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 + \item[Miglioramento architettura{\normalfont,}] analisi del protocollo per individuare punti di debolezza e possibili ottimizzazioni; - \item[Test per \textit{restaurant}] messa alla prova dei cambiamenti fatti; + \item[Test per \textit{restaurant}{\normalfont,}] messa alla prova dei cambiamenti fatti; \end{description} -\item[Finalizzazione] task finali del progetto, tra cui branding, operazioni +\item[Finalizzazione{\normalfont,}] task finali del progetto, tra cui branding, operazioni pre-rilascio, e gestione di eventuali personalizzazioni richieste dai clienti. \end{description} @@ -1127,13 +1130,13 @@ export class RESTService { \begin{description} - \item[Planning] features definition and first drafts of the user interface; + \item[Planning{\normalfont,}] features definition and first drafts of the user interface; - \item[\textit{restaurant} implementation] implementation of the library on + \item[\textit{restaurant} implementation{\normalfont,}] implementation of the library on which all the sections are based. Given the importance of this component, it is developed concurrently with the sections; - \item[Sections implementation] creation of user interface and business logic + \item[Sections implementation{\normalfont,}] creation of user interface and business logic for all the features planned, which are: \begin{itemize} \item Warehouses; @@ -1142,19 +1145,19 @@ export class RESTService { \item Customers' orders; \end{itemize} - \item[Sections testing] trial of algorithms and UI to achieve effectiveness + \item[Sections testing{\normalfont,}] trial of algorithms and UI to achieve effectiveness and efficiency and possible adjustments; - \item[\textit{restaurant} improvement] trial of architectural choices and + \item[\textit{restaurant} improvement{\normalfont,}] trial of architectural choices and algorithms used inside the library, with improvement of the last ones. This phase is divided in: \begin{description} - \item[Architecture revising] analisys of the protocol aimed to find weak + \item[Architecture revising{\normalfont,}] analisys of the protocol aimed to find weak points and possible optimisations; - \item[\textit{restaurant} testing] trial of the changes implemented before; + \item[\textit{restaurant} testing{\normalfont,}] trial of the changes implemented before; \end{description} -\item[Finalisation] collection of final tasks, including branding, pre-release +\item[Finalisation{\normalfont,}] collection of final tasks, including branding, pre-release operations and possible development of per-customer customizations. \end{description} @@ -1210,23 +1213,23 @@ Since this project was urgent for the customer, development on \textit{InteGRa \end{figure} \begin{it} - \textit{Guac Remote} è basata su un'applicativo e libreria per la connessione + \textit{Guac Remote} è basata su un applicativo e libreria per la connessione a computer remoto chiamato \textit{Apache Guacamole}\cite{guacamole:website}. Tale software è costituito da due parti:\cite{guacdoc:arch} \begin{description} - \item[\textit{guacamole-server} (o \textit{guacd})] un servizio scritto + \item[\textit{guacamole-server} (o \textit{guacd}){\normalfont,}] un servizio scritto in C che funge da adattatore tra il protocollo \textit{guacamole} e i protocolli VNC, RDP o SSH, utilizzando questi ultimi per stabilire connessioni con gli host remoti; - \item[\textit{guacamole-client}] una WebApplication scritta tramite + \item[\textit{guacamole-client}{\normalfont,}] una WebApplication scritta tramite \textit{Java servlet} che fornisce un'interfaccia web per interagire con \textit{guacamole-server} e connettersi ai PC remoti. \end{description} Data la natura open-source del progetto, sia \textit{guacamole-server} che \textit{guacamole-client} possono essere usati come libreria per la realizzazione di software derivati. In particolare, \textit{guacamole-client} - può essere scomposto nelle librerie \textit{guacamole-common-js}, che contiene - il codice Javascript per il client, e \textit{guacamole-common}, che fornisce + può essere scomposto nella libreria \textit{guacamole-common-js}, che contiene + il codice Javascript per il client, e in quella \textit{guacamole-common}, che fornisce classi Java per la connessione con \textit{guacamole-server}\cite{guacdoc:api}. In \textit{Guac Remote}, \textit{Apache Guacamole} è usato per fornire accesso @@ -1247,11 +1250,11 @@ Since this project was urgent for the customer, development on \textit{InteGRa connectivity named \textit{Apache Guacamole}\cite{guacamole:website}. This software is a combination of two components:\cite{guacdoc:arch} \begin{description} - \item[\textit{guacamole-server} (a.k.a. \textit{guacd})] a daemon written + \item[\textit{guacamole-server} (a.k.a. \textit{guacd}){\normalfont,}] a daemon written in C which takes the role of an adapter between the \textit{guacamole} protocol and the VNC, RDP and SSH protocols, using the last ones to connect to the remote hosts; - \item[\textit{guacamole-client}] 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 \end{description} \textit{guacamole-server} and to connect with remote PCs. @@ -1351,7 +1354,7 @@ Since this project was urgent for the customer, development on \textit{InteGRa \end{figure} \begin{it} - Questo progetto non ha avuto ritardi. L'applicazione \'e stata + Questo progetto non ha avuto ritardi: l'applicazione è stata mostrata in demo il giorno 29/03 e consegnata il giorno 1/6. Il cliente si ritiene soddisfatto del lavoro fatto. \end{it} @@ -1372,29 +1375,29 @@ Since this project was urgent for the customer, development on \textit{InteGRa diagramma della figura \ref{fig:ganttargos}, sono: \begin{description} - \item[Incontro con il cliente] primo scambio di informazioni per capire gli + \item[Incontro con il cliente{\normalfont,}] primo scambio di informazioni per capire gli obiettivi del progetto; - \item[Realizzazione primo prototipo] dimostrazione dell'efficacia del protocollo + \item[Realizzazione primo prototipo{\normalfont,}] dimostrazione dell'efficacia del protocollo \textit{guacamole} tramite un prototipo del prodotto; - \item[Prima demo al cliente] demo del prototipo al cliente; - \item[Stime orarie per sviluppi futuri] delineazione della tabella di marcia per + \item[Prima demo al cliente{\normalfont,}] demo del prototipo al cliente; + \item[Stime orarie per sviluppi futuri{\normalfont,}] delineazione della tabella di marcia per gli sviluppi futuri; - \item[Implementazione richieste del cliente] sviluppo delle estensioni al + \item[Implementazione richieste del cliente{\normalfont,}] sviluppo delle estensioni al protocollo richieste. Nel dettaglio, esse sono: \begin{description} - \item[Apertura tastiera e zoom al ``focus'' di un input] alla pressione di un + \item[Apertura tastiera e zoom al ``focus'' di un input{\normalfont,}] alla pressione di un campo di testo, l'applicazione \textit{mobile} deve automaticamente ingrandire l'area selezionata e mostrare una tastiera; - \item[Input tramite tastiera nativa Android o iOS] sostituzione della tastiera + \item[Input tramite tastiera nativa Android o iOS{\normalfont,}] sostituzione della tastiera su schermo di \textit{guacamole-common-js} con quella nativa; - \item[Scroll a due dita] supporto della gesture di scroll verticale a due dita; - \item[Interfaccia di configurazione] creazione di una piccola finestra di + \item[Scroll a due dita{\normalfont,}] supporto della gesture di scroll verticale a due dita; + \item[Interfaccia di configurazione{\normalfont,}] creazione di una piccola finestra di configurazione, in cui inserire IP e porta del PC; \end{description} - \item[Demo al cliente] dimostrazione degli sviluppi fatti al cliente e eventuale + \item[Demo al cliente{\normalfont,}] dimostrazione degli sviluppi fatti al cliente ed eventuale definizione di richieste aggiuntive; - \item[Implementazione delle richieste aggiuntive del cliente] - \item[Consegna] operazioni finali del progetto, tra cui branding e compilazione + \item[Implementazione delle richieste aggiuntive del cliente{\normalfont,}] + \item[Consegna{\normalfont,}] operazioni finali del progetto, tra cui \textit{branding} e compilazione per rilascio. \end{description} \end{it} @@ -1403,29 +1406,29 @@ Since this project was urgent for the customer, development on \textit{InteGRa figure \ref{fig:ganttargos}, are listed below. \begin{description} - \item[Meeting with the customer] first information exchange aimed to + \item[Meeting with the customer{\normalfont,}] first information exchange aimed to establish the project targets; - \item[Development of the first prototype] demonstration of + \item[Development of the first prototype{\normalfont,}] demonstration of \textit{guacamole} as an effective protocol through a prototype; - \item[First demo to the customer] prototype demo with the customer; - \item[Time estimates for future development] creation of the future development + \item[First demo to the customer{\normalfont,}] prototype demo with the customer; + \item[Time estimates for future development{\normalfont,}] creation of the future development schedule; - \item[Implementation of the features required by the customer] development + \item[Implementation of the features required by the customer{\normalfont,}] development of the requested protocol extensions, which are listed below. \begin{description} - \item[Keyboard opening with zoom on input focus] when an input field is + \item[Keyboard opening with zoom on input focus{\normalfont,}] when an input field is pressed, the mobile app must automatically zoom on the selected area and open a keyboard; - \item[Input through native iOS or Android keyboard] substitution of the + \item[Input through native iOS or Android keyboard{\normalfont,}] substitution of the keyboard included with \textit{guacamole-common-js} with the native one; - \item[Two-finger scroll] support for vertical two-finger scrolling; - \item[Settings page] creation of a small configuration panel, needed to + \item[Two-finger scroll{\normalfont,}] support for vertical two-finger scrolling; + \item[Settings page{\normalfont,}] creation of a small configuration panel, needed to enter the PC's IP address and port number; \end{description} - \item[Demo to the customer] meeting aimed to show the work done and to + \item[Demo to the customer{\normalfont,}] meeting aimed to show the work done and to establish possible additional requests; - \item[Implementation of additional requests from the customer] - \item[Delivery] final operations for the project, including branding and + \item[Implementation of additional requests from the customer{\normalfont,}] + \item[Delivery{\normalfont,}] final operations for the project, including branding and release compilation. \end{description} \end{en}