diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2a68594 --- /dev/null +++ b/.gitignore @@ -0,0 +1,247 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# easy-todo +*.lod + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# comment tmp files +*.cut + +# outputs that are not the thesis +*.pdf +!/english.pdf +!/italian.pdf diff --git a/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..e5faed8 --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,33 @@ +@online{guacdoc:arch, + 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]" +} +@online{guacdoc:api, + title = {\textit{API Documentation}}, + author = {Apache Guacamole}, + url = "https://guacamole.apache.org/api-documentation/", + note = "[Online; in data 9-aprile-2018, traduzione propria]" +} +@online{wiki:rest, + author = "Wikipedia", + title = "Representational State Transfer --- Wikipedia{,} L'enciclopedia libera", + year = "2018", + url = "https://it.wikipedia.org/w/index.php?title=Representational_State_Transfer&oldid=95970771", + note = "[Online; in data 9-aprile-2018]" +} +@online{wiki:soap, + author = "Wikipedia", + title = "SOAP --- Wikipedia{,} L'enciclopedia libera", + year = "2017", + url = "https://it.wikipedia.org/w/index.php?title=SOAP&oldid=85936136", + note = "[Online; in data 9-aprile-2018]" +} +@online{wiki:json, + author = "Wikipedia", + title = "JavaScript Object Notation --- Wikipedia{,} L'enciclopedia libera", + year = "2018", + url = "https://it.wikipedia.org/w/index.php?title=JavaScript_Object_Notation&oldid=94928405", + note = "[Online; in data 9-aprile-2018]" +} \ No newline at end of file diff --git a/diagrams/guacremote.dia b/diagrams/guacremote.dia new file mode 100644 index 0000000..9d4e64b Binary files /dev/null and b/diagrams/guacremote.dia differ diff --git a/diagrams/guacremote.tex b/diagrams/guacremote.tex new file mode 100644 index 0000000..9950bf7 --- /dev/null +++ b/diagrams/guacremote.tex @@ -0,0 +1,280 @@ +% Graphic for TeX using PGF +% Title: /home/claudio/Nextcloud/ScuolaSincronizzato/GPOI quinta/relazione/argosremote.dia +% Creator: Dia v0.97.3 +% CreationDate: Tue Apr 10 08:35:57 2018 +% For: claudio +% \usepackage{tikz} +% The following commands are not supported in PSTricks at present +% We define them conditionally, so when they are implemented, +% this pgf file will use them. +\ifx\du\undefined + \newlength{\du} +\fi +\setlength{\du}{15\unitlength} +\begin{tikzpicture} +\pgftransformxscale{1.000000} +\pgftransformyscale{-1.000000} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (19.825000\du,2.156930\du)--(19.825000\du,13.391171\du)--(39.544775\du,13.391171\du)--(39.544775\du,2.156930\du)--cycle; +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (19.825000\du,2.156930\du)--(19.825000\du,13.391171\du)--(39.544775\du,13.391171\du)--(39.544775\du,2.156930\du)--cycle; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (1.479330\du,2.740290\du)--(1.479330\du,12.904950\du)--(10.388875\du,12.904950\du)--(10.388875\du,2.740290\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (1.479330\du,2.740290\du)--(1.479330\du,12.904950\du)--(10.388875\du,12.904950\du)--(10.388875\du,2.740290\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.934103\du,8.017620\du){}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (1.709140\du,2.946920\du)--(1.709140\du,8.921920\du)--(10.150227\du,8.921920\du)--(10.150227\du,2.946920\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (1.709140\du,2.946920\du)--(1.709140\du,8.921920\du)--(10.150227\du,8.921920\du)--(10.150227\du,2.946920\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.929684\du,5.729420\du){Guac Remote}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.929684\du,6.529420\du){(lato client)}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (20.364500\du,2.731450\du)--(20.364500\du,12.922626\du)--(27.417890\du,12.922626\du)--(27.417890\du,2.731450\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (20.364500\du,2.731450\du)--(20.364500\du,12.922626\du)--(27.417890\du,12.922626\du)--(27.417890\du,2.731450\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.891195\du,8.022038\du){}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (20.619200\du,2.934750\du)--(20.619200\du,8.941933\du)--(27.223452\du,8.941933\du)--(27.223452\du,2.934750\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (20.619200\du,2.934750\du)--(20.619200\du,8.941933\du)--(27.223452\du,8.941933\du)--(27.223452\du,2.934750\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.921326\du,5.733341\du){Guac Remote}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.921326\du,6.533341\du){(lato server)}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (20.596800\du,9.197610\du)--(20.596800\du,12.697610\du)--(27.221800\du,12.697610\du)--(27.221800\du,9.197610\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (20.596800\du,9.197610\du)--(20.596800\du,12.697610\du)--(27.221800\du,12.697610\du)--(27.221800\du,9.197610\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.909300\du,10.342610\du){Apache}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.909300\du,11.142610\du){Guacamole}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (23.909300\du,11.942610\du){guacamole-client}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (1.716640\du,9.198500\du)--(1.716640\du,12.698500\du)--(10.159066\du,12.698500\du)--(10.159066\du,9.198500\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (1.716640\du,9.198500\du)--(1.716640\du,12.698500\du)--(10.159066\du,12.698500\du)--(10.159066\du,9.198500\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.937853\du,10.343500\du){Apache}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.937853\du,11.143500\du){Guacamole}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.937853\du,11.943500\du){guacamole-common-js}; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{stealth} +\pgfsetarrowsend{stealth} +{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (10.159066\du,10.948500\du)--(15.377933\du,10.948500\du)--(15.377933\du,10.947610\du)--(20.596800\du,10.947610\du); +}} +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.256100\du,9.563700\du){Guacamole}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.256100\du,10.363700\du){(HTTP o WebSocket)}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (14.724300\du,14.445200\du){}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.149300\du,5.321920\du){WebSocket}; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{latex} +\pgfsetarrowsend{latex} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (10.150200\du,5.934420\du)--(20.619200\du,5.938341\du); +} +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (31.866500\du,9.193960\du)--(31.866500\du,12.693960\du)--(38.761500\du,12.693960\du)--(38.761500\du,9.193960\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (31.866500\du,9.193960\du)--(31.866500\du,12.693960\du)--(38.761500\du,12.693960\du)--(38.761500\du,9.193960\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (35.314000\du,10.338960\du){Apache}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (35.314000\du,11.138960\du){Guacamole}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (35.314000\du,11.938960\du){guacamole-server}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (31.878100\du,2.924640\du)--(31.878100\du,6.424640\du)--(38.773100\du,6.424640\du)--(38.773100\du,2.924640\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (31.878100\du,2.924640\du)--(31.878100\du,6.424640\du)--(38.773100\du,6.424640\du)--(38.773100\du,2.924640\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (35.325600\du,4.469640\du){Server VNC/RDP}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (35.325600\du,5.269640\du){locale}; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{latex} +\pgfsetarrowsend{latex} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (35.325600\du,6.424640\du)--(35.314000\du,9.193960\du); +} +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{latex} +\pgfsetarrowsend{latex} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (27.221800\du,10.947600\du)--(31.866500\du,10.944000\du); +} +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (28.381600\du,10.518500\du){Socket}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (32.685500\du,7.637010\du){VNC/}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (32.685500\du,8.437010\du){RDP}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.916430\du,1.564730\du){Tablet}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (5.916430\du,2.364730\du){Android/iOS}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (29.748300\du,0.857621\du){PC macchinario}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (29.748300\du,1.657621\du){Windows 7 embedded}; +\end{tikzpicture} diff --git a/diagrams/itgmobile.tex b/diagrams/itgmobile.tex new file mode 100644 index 0000000..4bc7208 --- /dev/null +++ b/diagrams/itgmobile.tex @@ -0,0 +1,236 @@ +% Graphic for TeX using PGF +% Title: /home/claudio/Nextcloud/ScuolaSincronizzato/GPOI quinta/relazione/itgmobile.dia +% Creator: Dia v0.97.3 +% CreationDate: Sat Mar 31 22:54:30 2018 +% For: claudio +% \usepackage{tikz} +% The following commands are not supported in PSTricks at present +% We define them conditionally, so when they are implemented, +% this pgf file will use them. +\ifx\du\undefined + \newlength{\du} +\fi +\setlength{\du}{15\unitlength} +\begin{tikzpicture} +\pgftransformxscale{1.000000} +\pgftransformyscale{-1.000000} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (0.529524\du,30.016000\du)--(0.529524\du,36.616000\du)--(5.329524\du,36.616000\du)--(5.329524\du,30.016000\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (0.529524\du,30.016000\du)--(0.529524\du,36.616000\du)--(5.329524\du,36.616000\du)--(5.329524\du,30.016000\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.929524\du,33.511000\du){InteGRa}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (0.044630\du,13.916600\du)--(0.044630\du,24.066600\du)--(5.844630\du,24.066600\du)--(5.844630\du,13.916600\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (0.044630\du,13.916600\du)--(0.044630\du,24.066600\du)--(5.844630\du,24.066600\du)--(5.844630\du,13.916600\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.944630\du,19.186600\du){}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (0.300560\du,14.131100\du)--(0.300560\du,20.851329\du)--(5.605272\du,20.851329\du)--(5.605272\du,14.131100\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (0.300560\du,14.131100\du)--(0.300560\du,20.851329\du)--(5.605272\du,20.851329\du)--(5.605272\du,14.131100\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.952916\du,17.286215\du){InteGRa}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.952916\du,18.086215\du){Mobile}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (12.478000\du,13.881000\du)--(12.478000\du,24.031000\du)--(18.278000\du,24.031000\du)--(18.278000\du,13.881000\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (12.478000\du,13.881000\du)--(12.478000\du,24.031000\du)--(18.278000\du,24.031000\du)--(18.278000\du,13.881000\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.378000\du,19.151000\du){}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (12.731900\du,14.106600\du)--(12.731900\du,20.824671\du)--(18.036900\du,20.824671\du)--(18.036900\du,14.106600\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (12.731900\du,14.106600\du)--(12.731900\du,20.824671\du)--(18.036900\du,20.824671\du)--(18.036900\du,14.106600\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.384400\du,17.660636\du){InteGRaREST}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (12.729400\du,21.086000\du)--(12.729400\du,23.786000\du)--(18.045606\du,23.786000\du)--(18.045606\du,21.086000\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (12.729400\du,21.086000\du)--(12.729400\du,23.786000\du)--(18.045606\du,23.786000\du)--(18.045606\du,21.086000\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.387503\du,22.231000\du){restaurant}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.387503\du,23.031000\du){(server)}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (0.304128\du,21.098500\du)--(0.304128\du,23.798500\du)--(5.605272\du,23.798500\du)--(5.605272\du,21.098500\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (0.304128\du,21.098500\du)--(0.304128\du,23.798500\du)--(5.605272\du,23.798500\du)--(5.605272\du,21.098500\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.954700\du,22.243500\du){restaurant}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (2.954700\du,23.043500\du){(client)}; +\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000} +\pgfsetfillcolor{dialinecolor} +\fill (12.802200\du,29.989300\du)--(12.802200\du,36.589300\du)--(18.059700\du,36.589300\du)--(18.059700\du,29.989300\du)--cycle; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (12.802200\du,29.989300\du)--(12.802200\du,36.589300\du)--(18.059700\du,36.589300\du)--(18.059700\du,29.989300\du)--cycle; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.430950\du,33.084300\du){DB}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (15.430950\du,33.884300\du){(PostgreSQL)}; +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{stealth} +\pgfsetarrowsend{stealth} +{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (5.605272\du,22.448500\du)--(9.167336\du,22.448500\du)--(9.167336\du,22.436000\du)--(12.729400\du,22.436000\du); +}} +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{stealth} +\pgfsetarrowsend{stealth} +{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (14.058500\du,23.786000\du)--(14.058500\du,27.005800\du)--(2.929522\du,27.005800\du)--(2.929523\du,29.966017\du); +}} +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetmiterjoin +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{stealth} +\pgfsetarrowsend{stealth} +{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (5.379823\du,33.316000\du)--(9.065848\du,33.316000\du)--(9.065848\du,33.289300\du)--(12.751873\du,33.289300\du); +}} +\pgfsetlinewidth{0.100000\du} +\pgfsetdash{}{0pt} +\pgfsetdash{}{0pt} +\pgfsetbuttcap +{ +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetfillcolor{dialinecolor} +% was here!!! +\pgfsetarrowsstart{stealth} +\pgfsetarrowsend{stealth} +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\draw (16.716600\du,23.786000\du)--(16.745400\du,29.989300\du); +} +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (9.219250\du,21.063700\du){HTTP}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (9.219250\du,21.863700\du){REST (JSON)}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (8.759640\du,25.589100\du){HTTP}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node at (8.759640\du,26.389100\du){SOAP (XML)}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (8.724290\du,25.945200\du){}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (8.441450\du,32.730800\du){SQL}; +% setfont left to latex +\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000} +\pgfsetstrokecolor{dialinecolor} +\node[anchor=west] at (16.926600\du,27.147200\du){SQL}; +\end{tikzpicture} diff --git a/diagrams/itgmoblie.dia b/diagrams/itgmoblie.dia new file mode 100644 index 0000000..32e08b6 Binary files /dev/null and b/diagrams/itgmoblie.dia differ diff --git a/english.pdf b/english.pdf new file mode 100644 index 0000000..6474754 Binary files /dev/null and b/english.pdf differ diff --git a/english.tex b/english.tex new file mode 100644 index 0000000..1002f1f --- /dev/null +++ b/english.tex @@ -0,0 +1,7 @@ +\documentclass[hidelinks,12pt,a4paper]{scrartcl} +\usepackage{comment} + +\includecomment{en} +\excludecomment{it} + +\input{main.tex} \ No newline at end of file diff --git a/images/logo.jpg b/images/logo.jpg new file mode 100644 index 0000000..ea03eaa Binary files /dev/null and b/images/logo.jpg differ diff --git a/italian.pdf b/italian.pdf new file mode 100644 index 0000000..8b05ca8 Binary files /dev/null and b/italian.pdf differ diff --git a/italian.tex b/italian.tex new file mode 100644 index 0000000..4a2329f --- /dev/null +++ b/italian.tex @@ -0,0 +1,7 @@ +\documentclass[hidelinks,12pt,a4paper]{scrartcl} +\usepackage{comment} + +\includecomment{it} +\excludecomment{en} + +\input{main.tex} \ No newline at end of file diff --git a/main.tex b/main.tex new file mode 100644 index 0000000..f2d385c --- /dev/null +++ b/main.tex @@ -0,0 +1,369 @@ +\begin{it} + \usepackage[italian]{babel} +\end{it} +\begin{en} + \usepackage[english]{babel} +\end{en} + +\usepackage{blindtext} +\usepackage[utf8]{inputenc} +\usepackage[pdftex]{graphicx} +\usepackage{scrlayer-scrpage} +\usepackage{float} +\usepackage{hyperref} +\usepackage{tikz} +\usepackage[backend=biber]{biblatex} +\usepackage{pgfgantt} +\usepackage{pgffor} + +\bibliography{bibliography} + +% page margins +\usepackage[margin=3cm,head=15pt]{geometry} + +% document metadata +\begin{it} + \def\mdtitle{Alternanza scuola-lavoro estesa presso 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\mdsubtitle{Multiplatform mobile application development} +\end{en} +\def\mdauthor{Claudio Maggioni} +\def\mddate{\today} +\def\mdrevision{5} + +% header and footer style +\clearscrheadfoot +\pagestyle{scrheadings} +\makeatletter +\ohead[]{\mdauthor} +\ihead[]{\mdtitle} +\cfoot[\pagemark]{\pagemark} + +\begin{document} + +% first page +\begin{titlepage} + \pagenumbering{gobble} + \centering + \includegraphics[width=0.15\textwidth]{images/logo.jpg}\par\vspace{1cm} + {\scshape\LARGE Istituto di Istruzione Superiore \mbox{``A. Badoni''}\par} + \vspace{1cm} + {\scshape\Large Tesi di maturità\par} + \vspace{1.5cm} + {\huge\bfseries\mdtitle\par} + \vspace{0.75cm} + {\Large\bfseries\mdsubtitle\par} + \vspace{2cm} + {\Large\itshape\mdauthor\par} + \vfill + % Bottom of the page + {\large\mddate\par} + \begin{it} + \vspace{0.5cm} + {\large\textsc{Traduzione in italiano}\par} + \end{it} + \vspace{0.5cm} + {\large\color{red}\textsc{Revisione \mdrevision}\par} +\end{titlepage} + +\newpage + +\pagenumbering{Roman} +\tableofcontents + +\newpage + +\pagenumbering{arabic} +\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/}}. + + 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} + + \blindtext +\end{en} + +\begin{it} + \section{Gestione dei progetti} + + 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 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 collaboratori. + + 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é consigli e dritte varie. + + 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. +\end{it} +\begin{en} + \section{Projects management} + + \blindtext +\end{en} + +\begin{it} + \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: + + \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[Magazzini] gestire e inventariare scorte in magazzino. + \end{description} + + In aggiunta, sarà possibile anche registrare le ore per interventi in trasferta, funzione gi\`a implementata + nell'applicazione \textit{InteGRa.Service}, sviluppata nei periodi di alternanza precedenti. Tale lavoro non \`e + direttamente implementabile in \textit{InteGRa Mobile} a causa di differenze consistenti nelle architetture dei due prodotti. + + Inoltre, l'applicazione sarà in grado di funzionare in modo limitato anche senza connessione diretta ad + \textit{InteGRa}, permettendo la sincronizzazione dei dati modificati con il gestionale in un momento futuro. +\end{it} +\begin{en} + \section{The main project: \textit{InteGRa Mobile}} + + \blindtext +\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/itgmobile}} + \begin{it} + \caption{L'architettura di \textit{InteGRa Mobile} raffigurata con un diagramma} + \end{it} + \begin{en} + \caption{The architecture of \textit{InteGRa Mobile} as a diagram} + \end{en} + \label{fig:itgmobliearch} +\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} +\end{it} +\begin{en} + \blindtext +\end{en} + +\begin{it} + \subsection{Stato del progetto} +\end{it} +\begin{en} + \subsection{Project status} +\end{en} + +\begin{figure}[H] + \centering + \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{ + \begin{ganttchart}{1}{49} + \gantttitle{2017}{28} + \gantttitle{2018}{21} \\ + \gantttitle{6}{2} + \gantttitle{7}{4} + \gantttitle{8}{5} + \gantttitle{9}{4} + \gantttitle{10}{4} + \gantttitle{11}{5} + \gantttitle{12}{4} + \gantttitle{1}{5} + \gantttitle{2}{4} + \gantttitle{3}{4} + \gantttitle{4}{4} + \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} + \ganttlink{funz}{tf} + \ganttlink{prg}{funz} + \ganttlink{ir}{str} + \ganttlink{tr}{ril} + \end{ganttchart} + } + \begin{it} + \caption{Il diagramma di Gantt del progetto + \textit{InteGRa Mobile}} + \end{it} + \begin{en} + \caption{\textit{InteGRa Mobile} Gantt diagram} + \end{en} + \label{fig:ganttitgmob} +\end{figure} + +\begin{it} + Nella lettura del diagramma di Gantt in figura \ref{fig:ganttitgmob} \`e necessario tenere a mente che il completamento dell'intera applicazione non \`e certo per + la fine di maggio. Ci\`o che dovr\`a essere necessariamente completato \`e la parte pi\`u importante del progetto: + \textit{restaurant}, il motore di sincronizzazione online/offline e libreria generica che permette di implementare + velocemente nuove sezioni dell'applicazione. +\end{it} +\begin{en} + \blindtext +\end{en} +\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: + + \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: + \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: + \begin{description} + \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} +\end{it} +\begin{en} + \subsection{Project phases} + + \blindtext +\end{en} + +\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. + +A causa di urgenza del committente, lo sviluppo di questo progetto ha interrotto e attualmente interrompe gli sviluppi +per \textit{InteGRa Mobile}. + +\subsection{Architettura software} + +\begin{figure}[H] + \centering + \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{\input{diagrams/guacremote}} + \caption{L'architettura di \textit{Guac Remote}} + \label{fig:argosarch} +\end{figure} + +\textit{Guac Remote} è basata su un'applicativo e libreria per la connessione a computer remoto chiamato \textit{Apache Guacamole}\footnote{\textit{Apache Guacamole}: \url{https://guacamole.apache.org}}. +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} 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. + +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{figure}[H] + \centering + \resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{ + \begin{ganttchart}{1}{22} + \gantttitle{2018}{22} \\ + \gantttitle{2}{6} + \gantttitle{3}{8} + \gantttitle{4}{8} \\ + \gantttitlelist{7,...,17}{2} \\ + \foreach \n in {7,...,17}{ + \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} + \ganttlink{impl}{demodef} + \end{ganttchart} + } + \caption{Il diagramma di Gantt del progetto \textit{Guac Remote}} + \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. + +\subsection{Fasi del progetto} + +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} + +\newpage + +\pagenumbering{gobble} + +\listoffigures +\printbibliography + +\end{document}