diff --git a/main.tex b/main.tex index b96980a..63ec245 100644 --- a/main.tex +++ b/main.tex @@ -5,7 +5,6 @@ \usepackage[english]{babel} \end{en} -\usepackage{blindtext} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[pdftex]{graphicx} @@ -976,6 +975,37 @@ export class RESTService { \subsection{Project status} \end{en} +\begin{it} + \def\itgganttprg{Progettazione} + \def\itggantttf{Test funzioni} + \def\itgganttir{Impl. \textit{restaurant}} + \def\itgganttfunz{Impl. sezioni} + \def\itgganttim{Inv. di magazzino} + \def\itgganttcal{Agenda} + \def\itgganttsogg{Soggetti} + \def\itgganttco{Ordini cliente} + \def\itgganttrifr{Rininim. \textit{restaurant}} + \def\itggantttr{Test \textit{restaurant}} + \def\itgganttadtarch{Adattam. architettura} + \def\itgganttstr{Test} + \def\itgganttril{Finalizzazione} +\end{it} +\begin{en} + \def\itgganttprg{Planning} + \def\itggantttf{Sections testing} + \def\itgganttir{\textit{restaurant} impl.} + \def\itgganttfunz{Sections impl.} + \def\itgganttim{Warehouses} + \def\itgganttcal{Calendar} + \def\itgganttsogg{Customers and suppl.} + \def\itgganttco{Customers' orders} + \def\itgganttrifr{\textit{restaurant} improv.} + \def\itggantttr{\textit{restaurant} testing} + \def\itgganttadtarch{Architecture revising} + \def\itgganttstr{Testing} + \def\itgganttril{Finalisation} +\end{en} + \begin{figure}[H] \centering \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{ @@ -996,18 +1026,18 @@ export class RESTService { \gantttitle{5}{4} \\ \gantttitlelist{25,...,52}{1} \gantttitlelist{1,...,21}{1} \\ - \ganttbar[name=prg]{Progettazione}{1}{1} \\ - \ganttlinkedbar[name=ir]{Impl. \textit{restaurant}}{2}{37} \\ - \ganttgroup[name=funz]{Impl. sezioni}{2}{13} \\ - \ganttbar{Inv. di magazzino}{2}{4} \\ - \ganttbar{Agenda}{5}{6} \\ - \ganttbar{Soggetti}{7}{8} \\ - \ganttbar{Ordini cliente}{11}{13} \\ - \ganttbar[name=tf]{Test per sezioni}{14}{16} \\ - \ganttlinkedgroup[name=tr]{Rifinim. \textit{restaurant}}{19}{46} \\ - \ganttbar{Adattam. architettura}{19}{37} \\ - \ganttbar[name=str]{Test}{38}{46} \\ - \ganttbar[name=ril]{Finalizzazione}{47}{49} + \ganttbar[name=prg]{\itgganttprg}{1}{1} \\ + \ganttlinkedbar[name=ir]{\itgganttir}{2}{37} \\ + \ganttgroup[name=funz]{\itgganttfunz}{2}{13} \\ + \ganttbar{\itgganttim}{2}{4} \\ + \ganttbar{\itgganttcal}{5}{6} \\ + \ganttbar{\itgganttsogg}{7}{8} \\ + \ganttbar{\itgganttco}{11}{13} \\ + \ganttbar[name=tf]{\itggantttf}{14}{16} \\ + \ganttlinkedgroup[name=tr]{\itggantttr}{19}{46} \\ + \ganttbar{\itgganttadtarch}{19}{37} \\ + \ganttbar[name=str]{\itgganttstr}{38}{46} \\ + \ganttbar[name=ril]{\itgganttril}{47}{49} \ganttlink{funz}{tf} \ganttlink{prg}{funz} \ganttlink{ir}{str} @@ -1043,14 +1073,15 @@ export class RESTService { \begin{it} \subsection{Fasi del progetto} - Le fasi del progetto, di cui date di inizio e fine sono state specificate nel diagramma in figura \ref{fig:ganttitgmob}, sono: + 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 + \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; @@ -1064,10 +1095,10 @@ export class RESTService { \item Ordini cliente; \end{itemize} - \item[Test per le sezioni] messa alla prova degli algoritmi e della UI per + \item[Test per le sezioni] collaudo degli algoritmi e della UI per efficacia ed efficienza, nonch\'e eventuali correzioni; - \item[Rifinimento \textit{restaurant}] messa alla prova delle scelte + \item[Rifinimento \textit{restaurant}] collaudo delle scelte architetturali e algoritmi usati nella libreria e rifinimento di essi; Fase divisa in: \begin{description} @@ -1084,95 +1115,279 @@ export class RESTService { \begin{en} \subsection{Project phases} - \blindtext + The various project phases, by which start and end dates are shown on + the diagram in figure \ref{fig:ganttitgmob}, are described below. + + \begin{description} + + \item[Planning] features definition and first drafts of the user interface; + + \item[\textit{restaurant} implementation] 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 + for all the features planned, which are: + \begin{itemize} + \item Warehouses; + \item Calendar; + \item Customers and suppliers; + \item Customers' orders; + \end{itemize} + + \item[Sections testing] trial of algorithms and UI to achieve effectiveness + and efficiency and possible adjustments; + + \item[\textit{restaurant} improvement] 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] analisis of the protocol aimed to find weak + points and possible optimisations; + \item[\textit{restaurant} testing] trial of the changes implemented before; + \end{description} + +\item[Finalisation] collection of final tasks, including branding, pre-release + operations and possible development of per-customer customizations. + +\end{description} \end{en} +\begin{it} \section{Il progetto secondario: \textit{Guac Remote}} -Questo progetto \`e destinato ad un'importante azienda del territorio, produttrice di macchine equilibratrici. Tale applicazione dovrebbe fungere da client di -desktop remoto (come \textit{TeamViewer}\footnote{TeamViewer: \url{https://www.teamviewer.com/it/}}) per il PC presente nel loro prodotto di punta, un sistema di calibrazione delle -ruote di autoveicoli funzionante mediante telecamere. Il programma dovrebbe permettere all'operatore di tale prodotto di interagire con il software presente nel macchinario, senza scendere dal veicolo. + +Questo progetto \`e destinato ad un'importante azienda del territorio, +produttrice di macchine equilibratrici. Tale applicazione dovrebbe fungere da +client di desktop remoto (come \textit{TeamViewer}\footnote{TeamViewer: + \url{https://www.teamviewer.com/it}}) per il PC presente nel loro prodotto +di punta, un sistema di calibrazione delle ruote di autoveicoli funzionante +mediante telecamere. Il programma dovrebbe permettere all'operatore di tale +prodotto di interagire con il software presente nel macchinario, senza +scendere dal veicolo. -A causa di urgenza del committente, lo sviluppo di questo progetto ha interrotto e attualmente interrompe gli sviluppi -per \textit{InteGRa Mobile}. +A causa di urgenza da parte del committente, lo sviluppo di questo progetto ha +interrotto sviluppi per \textit{InteGRa Mobile} fino alla fine del periodo di +alternanza estesa. +\end{it} +\begin{en} +\section{The side project: \textit{Guac Remote}} -\subsection{Architettura software} +This project is made for an important local company, which produces +wheel balancers. This application should work as a remote desktop client +(as \textit{TeamViewer}\footnote{TeamViewer: \url{https://www.teamviewer.com}}) +for the PC mounted inside their main product, an automatic wheel balancer +that works with cameras. The program should allow the user to interact with the +wheel balancing software, without needing them to exit from the veichle. +\end{en} + +\begin{it} + \subsection{Architettura software} +\end{it} +\begin{en} + \subsection{Software architecture} +\end{en} \begin{figure}[H] \centering \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{\input{diagrams/guacremote}} - \caption{L'architettura di \textit{Guac Remote}} + \begin{it} + \caption{L'architettura di \textit{Guac Remote}} + \end{it} + \begin{en} + \caption{The architecture of \textit{Guac Remote} as a diagram} + \end{en} \label{fig:argosarch} \end{figure} -\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 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 \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 classi Java per la connessione con \textit{guacamole-server}. \cite{guacdoc:api} +\begin{it} + \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 + 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 + \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 + classi Java per la connessione con \textit{guacamole-server}\cite{guacdoc:api}. + + In \textit{Guac Remote}, \textit{Apache Guacamole} è usato per fornire accesso + remoto al PC presente nel macchinario, che contiene l'applicativo per la + calibrazione, all'applicazione installata sul tablet. Nel dettaglio, + \textit{guacamole-common-js} è usato nell'applicazione \textit{mobile} (la quale + è basata su \textit{Apache Cordova}) per fornire + un'interfaccia touchscreen per interagire con l'host remoto, mentre + \textit{guacamole-common}, tramite una piccola Java Web Application, assieme a + \textit{guacamole-server} sono installati sul PC. + + In aggiunta, tablet e PC possono comunicare informazioni aggiuntive tramite + una WebSocket creata al momento della connessione, necessaria per alcune + estensioni al protocollo richieste dal cliente. +\end{it} +\begin{en} + \textit{Guac Remote} is based on an application and library for remote desktop + 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 + 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 + Servlets} that offers a web interface for interacting with + \end{description} + \textit{guacamole-server} and to connect with remote PCs. + 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 + similar software. To be precise, \textit{guacamole-client} can be divided in the + libraries \textit{guacamole-common-js}, containing the client-side Javascript + code, and \textit{guacamole-common}, which contains Java classes for connecting + with \textit{guacamole-server}\cite{guacdoc:api}. + + In \textit{Guac Remote}, \textit{Apache Guacamole} is used for granting remote + access on the PC inside the machine, containing the balancing software, to the + tablet containing the mobile app. In particular, \textit{guacamole-common-js} is + used in the mobile app (which is built with \textit{Apache Cordova}) in order to + make a touchscreen interface for the interacting with the remote host, while + \textit{guacamole-common}, bundled in a small Java Web Application, toghteter + with \textit{guacamole-server} are installed on the PC. + + In addition, the tablet and the PC can share additional information through a + WebSocket created at the same time as the connection, which is needed by some + custom extensions commisioned by the customer. +\end{en} -In \textit{Guac Remote}, \textit{Apache Guacamole} è usato per fornire accesso remoto al PC presente nel macchinario, che contiene l'applicativo per la calibrazione, all'applicazione installata sul tablet. Nel dettaglio, \textit{guacamole-common-js} è usato nell'applicazione \textit{mobile} fornire un'interfaccia touchscreen per interagire con l'host remoto, mentre \textit{guacamole-common}, tramite una piccola WebApplication, assieme a \textit{guacamole-server} sono installati sul PC. +\begin{it} + \subsection{Stato del progetto} +\end{it} +\begin{en} + \subsection{Project status} +\end{en} -In aggiunta, tablet e PC possono comunicare informazioni aggiuntive tramite una WebSocket creata al momento della connessione, necessaria per alcune estensioni al protocollo richieste dal cliente. - -\subsection{Stato del progetto} +\begin{it} + \def\ganttargosprg{Incontro con il cliente} + \def\ganttargosprot{Realizzazione primo prototipo} + \def\ganttargosdemo{Prima demo al cliente} + \def\ganttargosstima{Stime orarie per sviluppi futuri} + \def\ganttargosimpl{Implementazione richieste \ldots} + \def\ganttargoszoom{Apertura tastiera e zoom \ldots} + \def\ganttargosscroll{Scroll a due dita} + \def\ganttargosconf{Interfaccia di configurazione} + \def\ganttargoskbd{Input tramite tastiera nativa \ldots} + \def\ganttargosdemodef{Demo al cliente} + \def\ganttargosagg{Implementazione richieste agg\ldots} + \def\ganttargoscon{Consegna} +\end{it} +\begin{en} + \def\ganttargosprg{Incontro con il cliente} + \def\ganttargosprot{Realizzazione primo prototipo} + \def\ganttargosdemo{Prima demo al cliente} + \def\ganttargosstima{Stime orarie per sviluppi futuri} + \def\ganttargosimpl{Implementazione richieste \ldots} + \def\ganttargoszoom{Apertura tastiera e zoom \ldots} + \def\ganttargosscroll{Scroll a due dita} + \def\ganttargosconf{Interfaccia di configurazione} + \def\ganttargoskbd{Input tramite tastiera nativa \ldots} + \def\ganttargosdemodef{Demo al cliente} + \def\ganttargosagg{Implementazione richieste agg\ldots} + \def\ganttargoscon{Consegna} +\end{en} \begin{figure}[H] \centering \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{ - \begin{ganttchart}{1}{22} - \gantttitle{2018}{22} \\ + \begin{ganttchart}{1}{32} + \gantttitle{2018}{32} \\ \gantttitle{2}{6} \gantttitle{3}{8} - \gantttitle{4}{8} \\ - \gantttitlelist{7,...,17}{2} \\ - \foreach \n in {7,...,17}{ + \gantttitle{4}{8} + \gantttitle{5}{9} + \gantttitle{6}{1} \\ + \gantttitlelist{7,...,22}{2} \\ + \foreach \n in {7,...,22}{ \gantttitle{G}{1} \gantttitle{V}{1} } \\ - \ganttbar[name=prg]{Incontro con il cliente}{1}{1} \\ - \ganttlinkedbar{Realizzazione primo prototipo}{2}{4} \\ - \ganttlinkedbar{Prima demo al cliente}{5}{5} \\ - \ganttlinkedbar{Stime orarie per sviluppi futuri}{6}{6} \\ - \ganttlinkedgroup[name=impl]{Implementazione richieste \ldots}{8}{12} \\ - \ganttbar{Apertura tastiera e zoom \ldots}{8}{9} \\ - \ganttbar{Input tramite tastiera nativa \ldots}{10}{10} \\ - \ganttbar{Scroll a due dita}{11}{11} \\ - \ganttbar{Interfaccia di configurazione}{12}{12} \\ - \ganttbar[name=demodef]{Demo al cliente}{13}{13} \\ - \ganttlinkedbar{Implementazione richieste agg\ldots}{14}{20} \\ - \ganttlinkedbar{Consegna}{21}{22} + \ganttbar[name=prg]{\ganttargosprg}{1}{1} \\ + \ganttlinkedbar{\ganttargosprot}{2}{4} \\ + \ganttlinkedbar{\ganttargosdemo}{5}{5} \\ + \ganttlinkedbar{\ganttargosstima}{6}{6} \\ + \ganttlinkedgroup[name=impl]{\ganttargosimpl}{8}{12} \\ + \ganttbar{\ganttargoszoom}{8}{9} \\ + \ganttbar{\ganttargoskbd}{10}{10} \\ + \ganttbar{\ganttargosscroll}{11}{11} \\ + \ganttbar{\ganttargosconf}{12}{12} \\ + \ganttbar[name=demodef]{\ganttargosdemodef}{13}{13} \\ + \ganttlinkedbar{\ganttargosagg}{14}{30} \\ + \ganttlinkedbar{\ganttargoscon}{31}{32} \ganttlink{impl}{demodef} \end{ganttchart} } - \caption{Il diagramma di Gantt del progetto \textit{Guac Remote}} + \begin{it} + \caption{Il diagramma di Gantt del progetto \textit{Guac Remote}} + \end{it} + \begin{en} + \caption{\textit{Guac Remote} diagram} + \end{en} \label{fig:ganttargos} \end{figure} % TODO: cambiare quando diventa tesina vera e propria -Questo progetto, al giorno 06/04, non ha ritardi. L'applicazione \'e stata mostrata in demo il giorno 29/03, ed il cliente si ritiene soddisfatto del lavoro fatto fino ad ora. +\begin{it} + Questo progetto, al giorno 06/04, non ha ritardi. L'applicazione \'e stata + mostrata in demo il giorno 29/03, ed il cliente si ritiene soddisfatto del + lavoro fatto fino ad ora. +\end{it} -\subsection{Fasi del progetto} +\begin{it} + \subsection{Fasi del progetto} +\end{it} +\begin{en} + \subsection{Project phases} +\end{en} -Le fasi del progetto, di cui le date di inizio e di fine sono indicate nel diagramma della figura \ref{fig:ganttargos}, sono: - -\begin{description} -\item[Incontro con il cliente] primo scambio di informazioni per capire gli obiettivi del progetto; -\item[Realizzazione primo prototipo] 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 gli sviluppi futuri; -\item[Implementazione richieste del cliente] 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 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 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 configurazione, in cui inserire IP e porta del PC; -\end{description} -\item[Demo al cliente] dimostrazione degli sviluppi fatti al cliente e eventuale definizione di richieste aggiuntive; -\item[Implementazione delle richieste aggiuntive del cliente] -\item[Consegna] operazioni finali del progetto, tra cui branding e compilazione per rilascio. -\end{description} +\begin{it} + Le fasi del progetto, di cui le date di inizio e di fine sono indicate nel + diagramma della figura \ref{fig:ganttargos}, sono: + + \begin{description} + \item[Incontro con il cliente] primo scambio di informazioni per capire gli + obiettivi del progetto; + \item[Realizzazione primo prototipo] dimostrazione dell'efficacia del protocollo + \textit{guacamole} tramite un prototipo del prodotto; + \item[Prima dmo al cliente] demo del prototipo al cliente; + \item[Stime orarie per sviluppi futuri] delineazione della tabella di marcia per + gli sviluppi futuri; + \item[Implementazione richieste del cliente] 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 + 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 + 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 + configurazione, in cui inserire IP e porta del PC; + \end{description} + \item[Demo al cliente] dimostrazione degli sviluppi fatti al cliente e eventuale + definizione di richieste aggiuntive; + \item[Implementazione delle richieste aggiuntive del cliente] + \item[Consegna] operazioni finali del progetto, tra cui branding e compilazione + per rilascio. + \end{description} +\end{it} +\begin{en} + STUB +\end{en} \newpage