1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-24 14:04:19 +00:00
pds-2021-g2-nest/docs/build/latex/nest.tex

8884 lines
225 KiB
TeX
Raw Normal View History

2021-05-30 12:34:19 +00:00
%% Generated by Sphinx.
\def\sphinxdocclass{report}
\documentclass[letterpaper,10pt,italian]{sphinxmanual}
\ifdefined\pdfpxdimen
\let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen
\fi \sphinxpxdimen=.75bp\relax
\PassOptionsToPackage{warn}{textcomp}
\usepackage[utf8]{inputenc}
\ifdefined\DeclareUnicodeCharacter
% support both utf8 and utf8x syntaxes
\ifdefined\DeclareUnicodeCharacterAsOptional
\def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}}
\else
\let\sphinxDUC\DeclareUnicodeCharacter
\fi
\sphinxDUC{00A0}{\nobreakspace}
\sphinxDUC{2500}{\sphinxunichar{2500}}
\sphinxDUC{2502}{\sphinxunichar{2502}}
\sphinxDUC{2514}{\sphinxunichar{2514}}
\sphinxDUC{251C}{\sphinxunichar{251C}}
\sphinxDUC{2572}{\textbackslash}
\fi
\usepackage{cmap}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amstext}
\usepackage{babel}
\usepackage{times}
\expandafter\ifx\csname T@LGR\endcsname\relax
\else
% LGR was declared as font encoding
\substitutefont{LGR}{\rmdefault}{cmr}
\substitutefont{LGR}{\sfdefault}{cmss}
\substitutefont{LGR}{\ttdefault}{cmtt}
\fi
\expandafter\ifx\csname T@X2\endcsname\relax
\expandafter\ifx\csname T@T2A\endcsname\relax
\else
% T2A was declared as font encoding
\substitutefont{T2A}{\rmdefault}{cmr}
\substitutefont{T2A}{\sfdefault}{cmss}
\substitutefont{T2A}{\ttdefault}{cmtt}
\fi
\else
% X2 was declared as font encoding
\substitutefont{X2}{\rmdefault}{cmr}
\substitutefont{X2}{\sfdefault}{cmss}
\substitutefont{X2}{\ttdefault}{cmtt}
\fi
\usepackage[Sonny]{fncychap}
\ChNameVar{\Large\normalfont\sffamily}
\ChTitleVar{\Large\normalfont\sffamily}
\usepackage{sphinx}
\fvset{fontsize=\small}
\usepackage{geometry}
% Include hyperref last.
\usepackage{hyperref}
% Fix anchor placement for figures with captions.
\usepackage{hypcap}% it must be loaded after hyperref.
% Set up styles of URL: it should be placed after hyperref.
\urlstyle{same}
\addto\captionsitalian{\renewcommand{\contentsname}{Manuale utente}}
\usepackage{sphinxmessages}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{3}
\title{N.E.S.T.\@{}}
\date{30 mag 2021}
\release{0.1.0}
\author{Gruppo 2}
\newcommand{\sphinxlogo}{\vbox{}}
\renewcommand{\releasename}{Release}
\makeindex
\begin{document}
\ifdefined\shorthandoff
\ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
\ifnum\catcode`\"=\active\shorthandoff{"}\fi
\fi
\pagestyle{empty}
\sphinxmaketitle
\pagestyle{plain}
\sphinxtableofcontents
\pagestyle{normal}
\phantomsection\label{\detokenize{index::doc}}
\sphinxAtStartPar
Benvenuto alla documentazione di N.E.S.T.!
\chapter{Il progetto in breve}
\label{\detokenize{guide/about:il-progetto-in-breve}}\label{\detokenize{guide/about::doc}}
\sphinxAtStartPar
\sphinxstylestrong{N.E.S.T.} (Noi Estraiamo Statistiche Tweet) è un progetto realizzato nel 2021 per
l\textquotesingle{}\sphinxstylestrong{esame di Progetto del Software} del corso di Informatica all\textquotesingle{}Unimore.
\section{Suddivisione in moduli}
\label{\detokenize{guide/about:suddivisione-in-moduli}}
\sphinxAtStartPar
Il progetto è composto da tre parti:
\begin{description}
\item[{{\hyperref[\detokenize{code/crawler/index:module-nest_crawler}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{nest\_crawler}}}}}}] \leavevmode
\sphinxAtStartPar
Un modulo scritto in \sphinxhref{https://www.python.org/}{Python} usando \sphinxcode{\sphinxupquote{tweepy}} che recupera tweet attraverso la \sphinxhref{https://developer.twitter.com/en/docs/twitter-api}{Twitter API} secondo le
condizioni presenti all\textquotesingle{}interno del database e li salva per future elaborazioni.
\item[{{\hyperref[\detokenize{code/backend/index:module-nest_backend}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{nest\_backend}}}}}}] \leavevmode
\sphinxAtStartPar
Un web server scritto in \sphinxhref{https://www.python.org/}{Python} usando il framework \sphinxhref{https://flask.palletsprojects.com/en/1.1.x/api/\#module-flask}{\sphinxcode{\sphinxupquote{flask}}} che fornisce un\textquotesingle{}API HTTP per visualizzare e
manipolare i dati dell\textquotesingle{}applicazione, gestendo autenticazione, autorizzazione e comunicazione con il database.
\item[{\sphinxcode{\sphinxupquote{nest\_frontend}}}] \leavevmode
\sphinxAtStartPar
Una applicazione web scritta in \sphinxhref{https://reactjs.org/docs/introducing-jsx.html}{JSX} usando il framework \sphinxcode{\sphinxupquote{react}} che comunica con il backend, mostrando
all\textquotesingle{}utente i dati del backend in una formato immediatamente comprensibile.
\end{description}
\section{Screenshots}
\label{\detokenize{guide/about:screenshots}}
\noindent\sphinxincludegraphics{{frontendDashboard}.png}
\noindent\sphinxincludegraphics{{frontendRepositoryCreate}.png}
\noindent\sphinxincludegraphics{{frontendAnalysis}.png}
\noindent\sphinxincludegraphics{{frontendRepositoryShare}.png}
\noindent\sphinxincludegraphics{{frontendAlertCreate}.png}
\chapter{Installazione}
\label{\detokenize{guide/installation:installazione}}\label{\detokenize{guide/installation::doc}}
\sphinxAtStartPar
Questa guida illustra come installare interamente N.E.S.T. su un server Linux.
\section{Prerequisiti}
\label{\detokenize{guide/installation:prerequisiti}}
\sphinxAtStartPar
Per installare ed eseguire N.E.S.T., è necessario:
\begin{itemize}
\item {}
\sphinxAtStartPar
Una connessione a Internet
\item {}
\sphinxAtStartPar
Un sistema operativo Linux\sphinxhyphen{}based (preferibilmente \sphinxhref{https://wiki.archlinux.org/title/Main\_page}{Arch Linux})
\item {}
\sphinxAtStartPar
\sphinxhref{https://www.freedesktop.org/wiki/Software/systemd/}{SystemD \textasciicircum{}248.2}
\item {}
\sphinxAtStartPar
\sphinxhref{https://httpd.apache.org/}{Apache HTTP Server \textasciicircum{}2.4.46}
\item {}
\sphinxAtStartPar
\sphinxhref{https://www.postgresql.org/download/}{PostgreSQL \textasciicircum{}13.2}
\item {}
\sphinxAtStartPar
\sphinxhref{https://git-scm.com/}{Git \textasciicircum{}2.31.1}
\item {}
\sphinxAtStartPar
\sphinxhref{https://www.python.org/downloads/}{Python \textasciicircum{}3.8}
\item {}
\sphinxAtStartPar
\sphinxhref{https://python-poetry.org/}{Poetry \textasciicircum{}1.0}
\item {}
\sphinxAtStartPar
\sphinxhref{https://nodejs.org/}{NodeJS \textasciicircum{}16.0}
\item {}
\sphinxAtStartPar
\sphinxhref{https://www.npmjs.com/}{npm \textasciicircum{}7.13.0}
\item {}
\sphinxAtStartPar
Un mail server (interno o esterno) che supporti
l\textquotesingle{}\sphinxhref{https://it.wikipedia.org/wiki/Simple\_Mail\_Transfer\_Protocol}{SMTP}
\end{itemize}
\section{Creare un nuovo utente}
\label{\detokenize{guide/installation:creare-un-nuovo-utente}}
\sphinxAtStartPar
Per motivi di sicurezza, si suggerisce di creare un nuovo utente con il quale eseguire il progetto:
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
È necessario essere amministratori di sistema per eseguire i seguenti comandi.
Si veda il manuale di \sphinxhref{https://linux.die.net/man/8/useradd}{useradd} per più dettagli.
\end{sphinxadmonition}
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }mkdir \PYGZhy{}\PYGZhy{}parents /srv/nest
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }useradd \PYGZhy{}\PYGZhy{}home\PYGZhy{}dir /srv/nest \PYGZhy{}\PYGZhy{}shell /bin/bash nest
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }chown \PYGZhy{}\PYGZhy{}recursive nest: /srv/nest
\end{sphinxVerbatim}
\section{Scaricare il codice sorgente}
\label{\detokenize{guide/installation:scaricare-il-codice-sorgente}}
\sphinxAtStartPar
Per installare N.E.S.T., è necessario avere il codice sorgente disponibile sul server.
\sphinxAtStartPar
Si consiglia di scaricarlo tramite \sphinxstyleemphasis{Git}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}\PYGZdl{} }git clone https://gitlab.steffo.eu/nest/g2\PYGZhy{}progetto.git
\end{sphinxVerbatim}
\sphinxAtStartPar
Questo creerà una nuova cartella \sphinxcode{\sphinxupquote{g2\sphinxhyphen{}progetto}} nella directory in cui è stato eseguito il comando.
\sphinxAtStartPar
Per proseguire, sarà necessario entrarvi:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}\PYGZdl{} }\PYG{n+nb}{cd} g2\PYGZhy{}progetto
\end{sphinxVerbatim}
\section{Creare il database}
\label{\detokenize{guide/installation:creare-il-database}}
\sphinxAtStartPar
N.E.S.T. necessita di un database PostgreSQL in cui salvare i dati.
\sphinxAtStartPar
Per motivi di sicurezza, si suggerisce di creare un ruolo isolato dal resto del DBMS apposta per N.E.S.T.:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{postgres:\PYGZti{}\PYGZdl{} }createuser nest
\end{sphinxVerbatim}
\sphinxAtStartPar
Per creare il database PostgreSQL, si esegua:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{postgres:\PYGZti{}\PYGZdl{} }createdb \PYGZhy{}\PYGZhy{}owner\PYG{o}{=}nest nest
\end{sphinxVerbatim}
\section{Creare un file di configurazione per il backend}
\label{\detokenize{guide/installation:creare-un-file-di-configurazione-per-il-backend}}
\sphinxAtStartPar
Il backend usa un file di configurazione per impostare alcune variabili.
\sphinxAtStartPar
Si crei un nuovo file nella working directory del progetto denominato \sphinxcode{\sphinxupquote{config.py}}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}/g2\PYGZhy{}progetto\PYGZdl{} }vim config.py
\end{sphinxVerbatim}
\sphinxAtStartPar
Il file dovrà avere i seguenti contenuti:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{c+c1}{\PYGZsh{} Una stringa rappresentante il database da utilizzare}
\PYG{c+c1}{\PYGZsh{} Per maggiori informazioni sulla sintassi, si veda https://docs.sqlalchemy.org/en/14/core/engines.html}
\PYG{n}{SQLALCHEMY\PYGZus{}DATABASE\PYGZus{}URI} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{postgresql://nest@/nest}\PYG{l+s+s2}{\PYGZdq{}}
\PYG{c+c1}{\PYGZsh{} Una stringa casuale utilizzata per generare i JSON Web Token (JWT)}
\PYG{c+c1}{\PYGZsh{} Va mantenuta segreta e costante per tutta l\PYGZsq{}operazione del backend!}
\PYG{c+c1}{\PYGZsh{} Si suggerisce di premere tasti casuali sulla tastiera finchè la riga non è piena.}
\PYG{n}{SECRET\PYGZus{}KEY} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{dsjiofgvinmodfiojvbnio3erfnoiweraqugu43ghjwrevniuwerng43iugnreuwignhritmj43i43nb8i42ug0wevkwovmwigtjj}\PYG{l+s+s2}{\PYGZdq{}}
\end{sphinxVerbatim}
\section{Installare le dipendenze Python}
\label{\detokenize{guide/installation:installare-le-dipendenze-python}}
\sphinxAtStartPar
Le dipendenze Python sono gestite da \sphinxstyleemphasis{Poetry}, e possono essere installate con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}/g2\PYGZhy{}progetto\PYGZdl{} }poetry install
\end{sphinxVerbatim}
\sphinxAtStartPar
Poetry creerà automaticamente un \sphinxhref{https://docs.python.org/3/library/venv.html}{venv} e vi installerà all\textquotesingle{}interno tutti
i pacchetti necessari all\textquotesingle{}esecuzione del backend e del crawler di N.E.S.T. .
\sphinxAtStartPar
\sphinxstylestrong{Si suggerisce di ricordare il nome del venv creato da Poetry}, in quanto sarà necessario per
{\hyperref[\detokenize{guide/installation:creare-un-servizio-systemd-per-il-backend}]{\sphinxcrossref{\DUrole{std,std-ref}{Creare un servizio SystemD per il backend}}}}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+go}{Creating virtualenv nest\PYGZhy{}7C2fm2VD\PYGZhy{}py3.9 in /srv/nest/.cache/pypoetry/virtualenvs}
\end{sphinxVerbatim}
\section{Installare le dipendenze NodeJS}
\label{\detokenize{guide/installation:installare-le-dipendenze-nodejs}}
\sphinxAtStartPar
Le dipendenze NodeJS sono gestite da \sphinxstyleemphasis{npm}, e possono essere installate con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}/g2\PYGZhy{}progetto\PYGZdl{} }npm install
\end{sphinxVerbatim}
\sphinxAtStartPar
npm creerà automaticamente una cartella
\sphinxhref{https://docs.npmjs.com/cli/v7/configuring-npm/folders\#node-modules}{node\_modules} e vi installerà all\textquotesingle{}interno tutte
le librerie necessarie all\textquotesingle{}esecuzione del frontend di N.E.S.T. .
\section{Creare un servizio SystemD per il backend}
\label{\detokenize{guide/installation:creare-un-servizio-systemd-per-il-backend}}
\sphinxAtStartPar
Per fare in modo che il backend rimanga attivo in background, anche dopo un riavvio, si suggerisce di installarlo come
servizio di sistema di \sphinxstyleemphasis{SystemD}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl edit \PYGZhy{}\PYGZhy{}force \PYGZhy{}\PYGZhy{}full nest\PYGZhy{}backend
\end{sphinxVerbatim}
\sphinxAtStartPar
Inserire all\textquotesingle{}interno del file le seguenti direttive:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Unit]
Description=N.E.S.T. Backend
Wants=network\PYGZhy{}online.target postgresql.service
After=network\PYGZhy{}online.target nss\PYGZhy{}lookup.target postgresql.service
[Service]
Type=exec
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2\PYGZhy{}progetto
\PYGZsh{} Si sostituisca a questo il percorso del virtualenv creato in precedenza da Poetry
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ExecStart=/srv/nest/.cache/pypoetry/virtualenvs/nest\PYGZhy{}7C2fm2VD\PYGZhy{}py3.9/bin/python \PYGZhy{}m gunicorn \PYGZhy{}b 127.0.0.1:30040 \PYGZhy{}\PYGZhy{}env=\PYGZdq{}FLASK\PYGZus{}CONFIG=../config.py\PYGZdq{} nest\PYGZus{}backend.app:rp\PYGZus{}app
[Install]
WantedBy=multi\PYGZhy{}user.target
\end{sphinxVerbatim}
\sphinxAtStartPar
Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl start nest\PYGZhy{}backend
\end{sphinxVerbatim}
\sphinxAtStartPar
In caso di successo, l\textquotesingle{}API dovrebbe essere esposto sulla porta \sphinxcode{\sphinxupquote{30040}} dell\textquotesingle{}indirizzo di loopback \sphinxcode{\sphinxupquote{127.0.0.1}}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }curl \PYG{l+m}{127}.0.0.1:30040/doa
\PYG{g+go}{If you see this, the server is fine.}
\end{sphinxVerbatim}
\sphinxAtStartPar
Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl \PYG{n+nb}{enable} nest\PYGZhy{}backend
\end{sphinxVerbatim}
\section{Compilare il frontend}
\label{\detokenize{guide/installation:compilare-il-frontend}}
\sphinxAtStartPar
Perchè sia possibile servire il frontend agli utenti, è necessario prima crearne una versione compilata ottimizzata.
\sphinxAtStartPar
È possibile farlo con il comando:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:\PYGZti{}/g2\PYGZhy{}progetto\PYGZdl{} }npm run build
\end{sphinxVerbatim}
\sphinxAtStartPar
Verrà creata una cartella \sphinxcode{\sphinxupquote{build}} con all\textquotesingle{}interno la versione compilata.
\section{Creare un servizio SystemD per il frontend}
\label{\detokenize{guide/installation:creare-un-servizio-systemd-per-il-frontend}}
\sphinxAtStartPar
Per rendere disponibile alla rete la copia locale del frontend, si suggerisce di avviare lo script npm \sphinxcode{\sphinxupquote{serve}}
integrato con N.E.S.T. come un servizio di sistema di \sphinxstyleemphasis{SystemD}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl edit \PYGZhy{}\PYGZhy{}force \PYGZhy{}\PYGZhy{}full nest\PYGZhy{}frontend
\end{sphinxVerbatim}
\sphinxAtStartPar
Inserire all\textquotesingle{}interno del file le seguenti direttive:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Unit]
Description=N.E.S.T. Frontend
Wants=network\PYGZhy{}online.target nest\PYGZhy{}backend.service
After=network\PYGZhy{}online.target nss\PYGZhy{}lookup.target nest\PYGZhy{}backend.service
[Service]
Type=exec
Environment=NODE\PYGZus{}ENV=production
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2\PYGZhy{}progetto
ExecStart=/usr/bin/npm run serve
[Install]
WantedBy=multi\PYGZhy{}user.target
\end{sphinxVerbatim}
\begin{sphinxadmonition}{warning}{Avvertimento:}
\sphinxAtStartPar
Questo file non è stato testato, in quanto sul server demo è in uso una versione più complessa che usa
\sphinxhref{https://github.com/nvm-sh/nvm}{nvm} per gestire più versioni di NodeJS sullo stesso sistema.
\sphinxAtStartPar
La versione in uso sul server demo è:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Unit]
Description=N.E.S.T. Frontend
Wants=network\PYGZhy{}online.target nest\PYGZhy{}backend.service
After=network\PYGZhy{}online.target nss\PYGZhy{}lookup.target nest\PYGZhy{}backend.service
[Service]
Type=exec
Environment=NODE\PYGZus{}ENV=production
Environment=NODE\PYGZus{}VERSION=16
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2\PYGZhy{}progetto
ExecStart=/srv/nest/.nvm/nvm\PYGZhy{}exec npm run serve
[Install]
WantedBy=multi\PYGZhy{}user.target
\end{sphinxVerbatim}
\end{sphinxadmonition}
\sphinxAtStartPar
Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl start nest\PYGZhy{}frontend
\end{sphinxVerbatim}
\sphinxAtStartPar
In caso di successo, il frontend dovrebbe essere esposto sulla porta \sphinxcode{\sphinxupquote{30041}} dell\textquotesingle{}indirizzo di loopback \sphinxcode{\sphinxupquote{127.0.0.1}}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }curl \PYG{l+m}{127}.0.0.1:30041
\PYG{g+go}{[...]}
\end{sphinxVerbatim}
\sphinxAtStartPar
Si abiliti il servizio, in modo che venga automaticamente avviato al riavvio del sistema:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl \PYG{n+nb}{enable} nest\PYGZhy{}frontend
\end{sphinxVerbatim}
\section{Creare un servizio SystemD per il crawler}
\label{\detokenize{guide/installation:creare-un-servizio-systemd-per-il-crawler}}
\sphinxAtStartPar
Perchè i repository vengano popolati di Tweet, è necessario configurare il crawler come servizio di \sphinxstyleemphasis{SystemD}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl edit \PYGZhy{}\PYGZhy{}force \PYGZhy{}\PYGZhy{}full nest\PYGZhy{}crawler
\end{sphinxVerbatim}
\sphinxAtStartPar
All\textquotesingle{}interno del file, inserire le seguenti direttive:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Unit]
Description=N.E.S.T. Crawler
Wants=network\PYGZhy{}online.target nest\PYGZhy{}backend.service
After=network\PYGZhy{}online.target nss\PYGZhy{}lookup.target nest\PYGZhy{}backend.service
[Service]
Type=exec
Environment=FLASK\PYGZus{}CONFIG=../config.py
User=nest
Group=nest
WorkingDirectory=/srv/nest/g2\PYGZhy{}progetto
\PYGZsh{} Si sostituisca a questo il percorso del virtualenv creato in precedenza da Poetry
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ExecStart=/srv/nest/.cache/pypoetry/virtualenvs/nest\PYGZhy{}7C2fm2VD\PYGZhy{}py3.9/bin/python \PYGZhy{}m nest\PYGZus{}crawler
[Install]
WantedBy=multi\PYGZhy{}user.target
\end{sphinxVerbatim}
\section{Configurare il crawler}
\label{\detokenize{guide/installation:configurare-il-crawler}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
Per utilizzare gli API di Twitter, è necessario essere approvati dal supporto tecnico di Twitter.
\sphinxAtStartPar
È dunque necessario \sphinxhref{https://developer.twitter.com/en/apply-for-access}{fare richiesta}, e sarà possibile
procedere con l\textquotesingle{}installazione solo una volta ricevute le credenziali per l\textquotesingle{}utilizzo.
\end{sphinxadmonition}
\sphinxAtStartPar
Per impostare le variabili di ambiente richieste dal crawler, si suggerisce di creare un \sphinxstyleemphasis{file di override} di SystemD:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl edit nest\PYGZhy{}crawler
\end{sphinxVerbatim}
\sphinxAtStartPar
All\textquotesingle{}interno del file, inserire le seguenti direttive:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Service]
\PYGZsh{} Sostituire a questi caratteri la Consumer Key ricevuta da Twitter
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=C\PYGZus{}K=0000000000000000000000000
\PYGZsh{} Sostituire a questi caratteri il Consumer Secret ricevuto da Twitter
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=C\PYGZus{}S=00000000000000000000000000000000000000000000000000
\PYGZsh{} Sostituire a questi caratteri l\PYGZsq{}Access Token ricevuto da Twitter
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=A\PYGZus{}T=00000000000000000000000000000000000000000000000000
\PYGZsh{} Sostituire a questi caratteri l\PYGZsq{}Access Token Secret ricevuto da Twitter
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=A\PYGZus{}T\PYGZus{}S=000000000000000000000000000000000000000000000
\PYGZsh{} Sostituire con l\PYGZsq{}indirizzo del proprio SMTP mail server
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=SMTP\PYGZus{}HOST=mail.gandi.net
\PYGZsh{} Sostituire con le proprie credenziali dell\PYGZsq{}SMTP mail server
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓
Environment=SMTP\PYGZus{}USERNAME=bot@ryg.one
\PYGZsh{} ↓↓↓↓↓↓↓↓
Environment=SMTP\PYGZus{}PASSWORD=password
\PYGZsh{} Sostituire con l\PYGZsq{}email da cui si desidera che vengano inviate le allerte
\PYGZsh{} ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Environment=SMTP\PYGZus{}FROM\PYGZus{}EMAIL=nest\PYGZhy{}bot@ryg.one
\end{sphinxVerbatim}
\sphinxAtStartPar
Ora, si verifichi che il servizio si avvii correttamente eseguendolo manualmente con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl start nest\PYGZhy{}crawler
\end{sphinxVerbatim}
\sphinxAtStartPar
Nel log di sistema non dovrebbe comparire nessun errore:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }journalctl nest\PYGZhy{}crawler
\end{sphinxVerbatim}
\section{Creare un timer SystemD per il crawler}
\label{\detokenize{guide/installation:creare-un-timer-systemd-per-il-crawler}}
\sphinxAtStartPar
Per fare in modo che il crawler venga eseguito periodicamente, si suggerisce di configurare un timer SystemD:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl edit \PYGZhy{}\PYGZhy{}force \PYGZhy{}\PYGZhy{}full nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\sphinxAtStartPar
Si inseriscano all\textquotesingle{}interno del file le seguenti direttive:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
[Unit]
Description=Run nest\PYGZhy{}crawler every 60 minutes
[Timer]
OnBootSec=60min
OnUnitActiveSec=60min
Unit=nest\PYGZhy{}crawler.service
[Install]
WantedBy=timers.target
\end{sphinxVerbatim}
\sphinxAtStartPar
Ora, si verifichi che il timer si avvii correttamente eseguendolo manualmente con:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl start nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\sphinxAtStartPar
Nello stato del timer non dovrebbe comparire nessun errore:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl status nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\sphinxAtStartPar
Si abiliti il timer, in modo che venga automaticamente avviato al riavvio del sistema:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl \PYG{n+nb}{enable} nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\section{Configurare Apache come reverse proxy}
\label{\detokenize{guide/installation:configurare-apache-come-reverse-proxy}}
\sphinxAtStartPar
Per rendere l\textquotesingle{}API e il frontend disponibili al pubblico, si suggerisce di configurare Apache HTTP Server
come reverse proxy.
\sphinxAtStartPar
La configurazione di Apache varia molto da distribuzione a distribuzione Linux, e talvolta anche da server a server;
pertanto, si fornisce solamente un file \sphinxhref{https://httpd.apache.org/docs/2.4/vhosts/examples.html}{VirtualHost} di
esempio da adattare al proprio setup:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{n+nt}{\PYGZlt{}VirtualHost} \PYG{l+s}{*:80}\PYG{n+nt}{\PYGZgt{}}
\PYG{n+nb}{ServerName} \PYG{l+s+s2}{\PYGZdq{}api.nest.steffo.eu\PYGZdq{}}
\PYG{n+nb}{ServerName} \PYG{l+s+s2}{\PYGZdq{}prod.nest.steffo.eu\PYGZdq{}}
\PYG{n+nb}{RewriteEngine} \PYG{k}{On}
\PYG{n+nb}{RewriteRule} \PYGZca{}(.*)\PYGZdl{} https://\PYGZpc{}\PYGZob{}HTTP\PYGZus{}HOST\PYGZcb{}\PYGZdl{}1 [R=301,L]
\PYG{n+nt}{\PYGZlt{}/VirtualHost}\PYG{n+nt}{\PYGZgt{}}
\PYG{n+nt}{\PYGZlt{}VirtualHost} \PYG{l+s}{*:443}\PYG{n+nt}{\PYGZgt{}}
\PYG{n+nb}{ServerName} \PYG{l+s+s2}{\PYGZdq{}api.nest.steffo.eu\PYGZdq{}}
\PYG{n+nb}{SSLEngine} \PYG{k}{on}
\PYG{n+nb}{SSLCertificateFile} \PYG{l+s+s2}{\PYGZdq{}/root/.acme.sh/*.nest.steffo.eu/fullchain.cer\PYGZdq{}}
\PYG{n+nb}{SSLCertificateKeyFile} \PYG{l+s+s2}{\PYGZdq{}/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key\PYGZdq{}}
\PYG{n+nb}{ProxyPass} \PYG{l+s+s2}{\PYGZdq{}/\PYGZdq{}} \PYG{l+s+s2}{\PYGZdq{}http://127.0.0.1:30040/\PYGZdq{}}
\PYG{n+nb}{ProxyPassReverse} \PYG{l+s+s2}{\PYGZdq{}/\PYGZdq{}} \PYG{l+s+s2}{\PYGZdq{}http://127.0.0.1:30040/\PYGZdq{}}
\PYG{n+nb}{RequestHeader} set \PYG{l+s+s2}{\PYGZdq{}X\PYGZhy{}Forwarded\PYGZhy{}Proto\PYGZdq{}} expr=\PYGZpc{}\PYGZob{}REQUEST\PYGZus{}SCHEME\PYGZcb{}
\PYG{n+nb}{Protocols} h2 http/1.1
\PYG{n+nb}{Header} always set Strict\PYGZhy{}Transport\PYGZhy{}Security \PYG{l+s+s2}{\PYGZdq{}max\PYGZhy{}age=63072000\PYGZdq{}}
\PYG{n+nt}{\PYGZlt{}/VirtualHost}\PYG{n+nt}{\PYGZgt{}}
\PYG{n+nt}{\PYGZlt{}VirtualHost} \PYG{l+s}{*:443}\PYG{n+nt}{\PYGZgt{}}
\PYG{n+nb}{ServerName} \PYG{l+s+s2}{\PYGZdq{}prod.nest.steffo.eu\PYGZdq{}}
\PYG{n+nb}{SSLEngine} \PYG{k}{on}
\PYG{n+nb}{SSLCertificateFile} \PYG{l+s+s2}{\PYGZdq{}/root/.acme.sh/*.nest.steffo.eu/fullchain.cer\PYGZdq{}}
\PYG{n+nb}{SSLCertificateKeyFile} \PYG{l+s+s2}{\PYGZdq{}/root/.acme.sh/*.nest.steffo.eu/*.nest.steffo.eu.key\PYGZdq{}}
\PYG{n+nb}{ProxyPass} \PYG{l+s+s2}{\PYGZdq{}/\PYGZdq{}} \PYG{l+s+s2}{\PYGZdq{}http://127.0.0.1:30041/\PYGZdq{}}
\PYG{n+nb}{ProxyPassReverse} \PYG{l+s+s2}{\PYGZdq{}/\PYGZdq{}} \PYG{l+s+s2}{\PYGZdq{}http://127.0.0.1:30041/\PYGZdq{}}
\PYG{n+nb}{RequestHeader} set \PYG{l+s+s2}{\PYGZdq{}X\PYGZhy{}Forwarded\PYGZhy{}Proto\PYGZdq{}} expr=\PYGZpc{}\PYGZob{}REQUEST\PYGZus{}SCHEME\PYGZcb{}
\PYG{n+nb}{Protocols} h2 http/1.1
\PYG{n+nb}{Header} always set Strict\PYGZhy{}Transport\PYGZhy{}Security \PYG{l+s+s2}{\PYGZdq{}max\PYGZhy{}age=63072000\PYGZdq{}}
\PYG{n+nt}{\PYGZlt{}/VirtualHost}\PYG{n+nt}{\PYGZgt{}}
\end{sphinxVerbatim}
\chapter{Aggiornamento}
\label{\detokenize{guide/updating:aggiornamento}}\label{\detokenize{guide/updating::doc}}
\sphinxAtStartPar
Per scaricare gli aggiornamenti di N.E.S.T. si esegua il seguente comando nella directory del codice sorgente:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:g2\PYGZhy{}progetto\PYGZdl{} }git pull
\end{sphinxVerbatim}
\sphinxAtStartPar
Si aggiornino poi tutte le dipendenze:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:g2\PYGZhy{}progetto\PYGZdl{} }poetry install
\PYG{g+gp}{nest:g2\PYGZhy{}progetto\PYGZdl{} }npm install
\end{sphinxVerbatim}
\sphinxAtStartPar
Si ricompili il frontend:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{nest:g2\PYGZhy{}progetto\PYGZdl{} }npm build
\end{sphinxVerbatim}
\sphinxAtStartPar
In seguito, si riavviino tutti i servizi di N.E.S.T.:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl restart nest\PYGZhy{}frontend nest\PYGZhy{}backend nest\PYGZhy{}crawler nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\sphinxAtStartPar
Si verifichi infine il corretto avvio di tutti i servizi:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{root:\PYGZti{}\PYGZsh{} }systemctl status nest\PYGZhy{}frontend nest\PYGZhy{}backend nest\PYGZhy{}crawler nest\PYGZhy{}crawler.timer
\end{sphinxVerbatim}
\chapter{Introduzione}
\label{\detokenize{development/goals:introduzione}}\label{\detokenize{development/goals::doc}}
\section{Obiettivo}
\label{\detokenize{development/goals:obiettivo}}
\sphinxAtStartPar
L\textquotesingle{}obiettivo del progetto è la creazione di un software per fornire l\textquotesingle{}aggregazione e l\textquotesingle{}analisi di \sphinxhref{https://help.twitter.com/it/using-twitter\#tweets}{Tweet}, in modo da
rilevare eventi \sphinxstyleemphasis{macroscopici}, \sphinxstyleemphasis{locali} o più semplicemente filtrarli in base a delle \sphinxstyleemphasis{keyword}.
\sphinxAtStartPar
Il prodotto sarà utilizzato dal cliente e da un piccolo gruppo di suoi dipendenti per effettuare ricerche statistiche.
\sphinxAtStartPar
Il software andrà ad integrarsi direttamente con \sphinxhref{https://twitter.com/}{Twitter}, da cui verranno raccolti dati e su cui verranno pubblicate
allerte su di essi.
\section{Campo di applicazione}
\label{\detokenize{development/goals:campo-di-applicazione}}
\sphinxAtStartPar
Il software trova utilizzo principalmente in \sphinxstylestrong{ambito statistico}, essendo il suo scopo quello di raccogliere dati e
permettere di analizzarli tramite un\textquotesingle{}interfaccia grafica.
\section{Caratteristiche degli utenti}
\label{\detokenize{development/goals:caratteristiche-degli-utenti}}
\sphinxAtStartPar
Il software potrà essere utilizzato da utenti con una discreta esperienza nell\textquotesingle{}analisi di dati ma senza particolari
conoscenze informatiche.
\section{Glossario}
\label{\detokenize{development/goals:glossario}}\begin{description}
\item[{Repository}] \leavevmode
\sphinxAtStartPar
Raccolta di tweet che soddisfano determinate condizioni.
\item[{Condizione}] \leavevmode
\sphinxAtStartPar
Predicato logico che deve essere soddisfatto da un tweet per essere raccolto in fase di raccolta dati, o per essere
contato in fase di allertamento utente.
\item[{Filtro}] \leavevmode
\sphinxAtStartPar
Predicato logico che deve essere soddisfatto da un tweet per essere visualizzato in fase di analisi dati.
\item[{Allarme}] \leavevmode
\sphinxAtStartPar
Notifica inviata all\textquotesingle{}utente attraverso un mezzo telematico, come email oppure un tweet.
\item[{Utente}] \leavevmode
\sphinxAtStartPar
Utilizzatore del software con un proprio account creato dall\textquotesingle{}amministratore della piattaforma.
\sphinxAtStartPar
In particolare, la piattaforma prevederà due tipologie di utenti:
\begin{description}
\item[{Utente regolare}] \leavevmode
\sphinxAtStartPar
Potranno eseguire attività di creazione, analisi, condivisione, archiviazione ed eliminazione dei propri repository.
\item[{Utente amministratore}] \leavevmode
\sphinxAtStartPar
Potrà effettuare tutte le attività dell\textquotesingle{}utente regolare, e in aggiunta potrà creare ed eliminare nuovi utenti
regolari.
\end{description}
\end{description}
\section{Macro\sphinxhyphen{}funzionalità}
\label{\detokenize{development/goals:macro-funzionalita}}
\sphinxAtStartPar
Il software permetterà di selezionare \sphinxstylestrong{condizioni} con cui scegliere quali tweet raccogliere:
\begin{itemize}
\item {}
\sphinxAtStartPar
in base ai loro \sphinxhref{https://help.twitter.com/it/using-twitter/how-to-use-hashtags}{hashtag}
\item {}
\sphinxAtStartPar
in base al loro autore
\item {}
\sphinxAtStartPar
in base alla loro \sphinxhref{https://help.twitter.com/en/safety-and-security/tweet-location-settings}{posizione geografica} (ove presente)
\item {}
\sphinxAtStartPar
in base alla loro data di pubblicazione
\end{itemize}
\sphinxAtStartPar
Selezionate le condizioni, l\textquotesingle{}utente potrà creare una \sphinxstylestrong{repository}: una cartella in cui verranno raccolti i tweet
soddisfacenti le condizioni richieste.
\sphinxAtStartPar
Una volta raccolti, i tweet di una repository potranno essere \sphinxstylestrong{analizzati} in qualsiasi momento: durante l\textquotesingle{}analisi,
saranno mostrate statistiche e grafici relativi ai tweet.
\sphinxAtStartPar
La raccolta potrà essere interrotta in qualsiasi momento \sphinxstylestrong{archiviando} il repository.
\sphinxAtStartPar
Sarà possibile \sphinxstylestrong{condividere} una repository con altri utenti della piattaforma, permettendo loro di analizzarla.
\sphinxAtStartPar
Infine, l\textquotesingle{}utente potrà configurare una repository in modo che gli invii una \sphinxstylestrong{allerta} qualora vengano raccolti un dato
numero di tweet in una certa \sphinxstyleemphasis{finestra temporale}.
\section{Casi d\textquotesingle{}uso}
\label{\detokenize{development/goals:casi-d-uso}}
\sphinxAtStartPar
N.E.S.T. prevede tre tipologie di \sphinxstyleemphasis{agenti} ("utenti" UML): \sphinxstylestrong{utente}, \sphinxstylestrong{amministratore} e \sphinxstylestrong{sistema}.
\noindent\sphinxincludegraphics{{Utenti}.png}
\sphinxAtStartPar
I principali casi duso individuati durante la progettazione di N.E.S.T. sono:
\begin{itemize}
\item {}
\sphinxAtStartPar
La gestione degli utenti da parte di un Amministratore:
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{CasiUso1}.PNG}
\item {}
\sphinxAtStartPar
La gestione del login da parte di un Utente:
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{CasiUso2}.PNG}
\item {}
\sphinxAtStartPar
La gestione delle Allerte sia dal punto di vista dellUtente che del Sistema:
\noindent\sphinxincludegraphics[width=800\sphinxpxdimen]{{CasiUso3}.PNG}
\item {}
\sphinxAtStartPar
La gestione della raccolta da parte dell\textquotesingle{}utente:
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{CasiUso4}.PNG}
\item {}
\sphinxAtStartPar
La gestione di un repository da parte dell\textquotesingle{}utente:
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{CasiUso5}.PNG}
\item {}
\sphinxAtStartPar
La visualizzazione di un repository:
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{CasiUso6}.PNG}
\end{itemize}
\section{Backlog generale}
\label{\detokenize{development/goals:backlog-generale}}
\sphinxAtStartPar
Si riporta qui di seguito il Backlog definito ad inizio progetto, prima dellavvio dello sviluppo.
Gli elementi dal bordo grigio sono le epiche:
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
Alcune user story sono state rimosse in seguito al feedback ricevuto durante il primo sprint!
\end{sphinxadmonition}
\noindent\sphinxincludegraphics{{Backlog1}.PNG}
\noindent\sphinxincludegraphics{{Backlog2}.PNG}
\noindent\sphinxincludegraphics{{Backlog3}.PNG}
\noindent\sphinxincludegraphics{{Backlog4}.PNG}
\noindent\sphinxincludegraphics{{Backlog5}.PNG}
\chapter{Strumenti utilizzati}
\label{\detokenize{development/tools:strumenti-utilizzati}}\label{\detokenize{development/tools::doc}}
\sphinxAtStartPar
Nello sviluppo di N.E.S.T. sono stati usati i seguenti strumenti software:
\sphinxAtStartPar
\sphinxhref{https://www.jetbrains.com/idea/}{IntelliJ IDEA Ultimate}
\begin{quote}
\sphinxAtStartPar
IDE multilinguaggio utilizzato per lo sviluppo di tutte le parti di N.E.S.T., per la scrittura della documentazione,
per l\textquotesingle{}esecuzione del testing e per la visualizzazione del coverage, per il refactoring automatico e per l\textquotesingle{}analisi
statica del codice.
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://git-scm.com/}{Git}
\begin{quote}
\sphinxAtStartPar
Software di controllo versione utilizzato per tracciare tutte le modifiche al software.
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://about.gitlab.com/}{GitLab}
\begin{quote}
\sphinxAtStartPar
Applicazione web self\sphinxhyphen{}hosted per hosting di repository \sphinxhref{https://git-scm.com/}{Git}, utilizzato per ospitare il repository del progetto.
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
È accessibile al seguente indirizzo: \sphinxurl{https://gitlab.steffo.eu/}
\end{sphinxadmonition}
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://www.taiga.io/}{Taiga}
\begin{quote}
\sphinxAtStartPar
Applicazione web self\sphinxhyphen{}hosted per il Project Management, utilizzata per tracciare lo stato del progetto giorno per
giorno.
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
È accessibile al seguente indirizzo: \sphinxurl{https://taiga.steffo.eu/}
\end{sphinxadmonition}
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://www.sonarqube.org/}{SonarQube}
\begin{quote}
\sphinxAtStartPar
Applicazione web self\sphinxhyphen{}hosted per l\textquotesingle{}analisi statica e visualizzazione del coverage del software, utilizzata per
il miglioramento della qualità del codice del progetto.
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
È accessibile al seguente indirizzo: \sphinxurl{https://sonarqube.steffo.eu/}
\end{sphinxadmonition}
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://www.figma.com/}{Figma}
\begin{quote}
\sphinxAtStartPar
Applicazione web centralizzata per la creazione collaborativa di interfacce grafiche moderne.
\end{quote}
\sphinxAtStartPar
\sphinxhref{https://discord.com/}{Discord}
\begin{quote}
\sphinxAtStartPar
Piattaforma centralizzata di messaggistica istantanea e chiamate vocali utilizzata per la comunicazione sincrona
tra i membri del team.
\end{quote}
\chapter{Processo di sviluppo}
\label{\detokenize{development/process:processo-di-sviluppo}}\label{\detokenize{development/process::doc}}
\section{Ruoli}
\label{\detokenize{development/process:ruoli}}
\sphinxAtStartPar
Per lavorare più efficientemente, si è assegnato uno o più "ruoli" a ogni membro del team in base alle proprie
competenze.
\begin{quote}\begin{description}
\item[{Stefano Goldoni}] \leavevmode
\sphinxAtStartPar
Product Owner, Tester
\item[{Flavia Cocca}] \leavevmode
\sphinxAtStartPar
Scrum Master, UI Designer
\item[{Chiara Calzolari}] \leavevmode
\sphinxAtStartPar
UI Designer, Translator
\item[{Stefano Pigozzi}] \leavevmode
\sphinxAtStartPar
Frontend Developer, Sysadmin
\item[{Giovanni Anniballi}] \leavevmode
\sphinxAtStartPar
Lead Tester
\item[{Giorgio Minoccari}] \leavevmode
\sphinxAtStartPar
Analyst, Crawler Developer
\item[{Lorenzo Balugani}] \leavevmode
\sphinxAtStartPar
Database Architect, Backend Developer
\end{description}\end{quote}
\sphinxAtStartPar
Questi ruoli sono stati usati in maniera \sphinxstylestrong{flessibile}; è capitato infatti moltissime volte che un membro con un ruolo
ne aiutasse un altro con un ruolo diverso: ad esempio, è successo che i Developer aiutassero i Tester indicando loro
particolarità specifiche dei linguaggi di programmazione utilizzati, oppure che gli UI Designer aiutassero nella
scrittura della documentazione.
\section{Sprint}
\label{\detokenize{development/process:sprint}}
\sphinxAtStartPar
Lo sviluppo si è svolto in \sphinxstylestrong{4 Sprint} dalla durata di \sphinxstylestrong{2 settimane ciascuno}.
\subsection{Sprint 0: 04 Apr \sphinxhyphen{} 18 Apr}
\label{\detokenize{development/sprint0/index:sprint-0-04-apr-18-apr}}\label{\detokenize{development/sprint0/index::doc}}
\subsubsection{Consegna}
\label{\detokenize{development/sprint0/index:consegna}}
\sphinxAtStartPar
La seguente documentazione è stata fornita dal cliente durante questo sprint:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{0\sphinxhyphen{}initial.pdf}}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{0\sphinxhyphen{}sprint\sphinxhyphen{}requirements.pdf}}
\end{itemize}
\subsubsection{Definition of Ready}
\label{\detokenize{development/sprint0/index:definition-of-ready}}
\sphinxAtStartPar
Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
\begin{itemize}
\item {}
\sphinxAtStartPar
La User Story è stata compresa ed accettata da tutti i membri
\item {}
\sphinxAtStartPar
I tester hanno confermato la possibilità di poterla testare
\item {}
\sphinxAtStartPar
Il Product Owner ha la visione necessaria per definirne la priorità
\item {}
\sphinxAtStartPar
Il Team è in grado di stimarla
\item {}
\sphinxAtStartPar
La User Story è indipendente o dipendente da altre a priorità maggiore
\end{itemize}
\subsubsection{Definition of Done}
\label{\detokenize{development/sprint0/index:definition-of-done}}
\sphinxAtStartPar
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così
definita:
\begin{itemize}
\item {}
\sphinxAtStartPar
Sviluppo completo della funzionalità richiesta
\item {}
\sphinxAtStartPar
Definizione e superamento dei test
\item {}
\sphinxAtStartPar
Bozza della documentazione della funzionalità
\item {}
\sphinxAtStartPar
Merge dei sorgenti nel branch \sphinxcode{\sphinxupquote{main}} del repository Git
\end{itemize}
\subsubsection{Statistiche}
\label{\detokenize{development/sprint0/index:statistiche}}
\paragraph{Gitinspector}
\label{\detokenize{development/sprint0/index:gitinspector}}
\sphinxAtStartPar
Questa statistica è stata generata dal prof. Marcello Missiroli con
\sphinxhref{https://github.com/ejwa/gitinspector}{Gitinspector} al termine dello Sprint.
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{0\sphinxhyphen{}stats.html}}
\end{itemize}
\subsubsection{Sprint Retrospective}
\label{\detokenize{development/sprint0/index:sprint-retrospective}}
\sphinxAtStartPar
La Sprint Retrospective è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{0\sphinxhyphen{}retrospective.pdf}}
\end{itemize}
\subsubsection{Sprint Review}
\label{\detokenize{development/sprint0/index:sprint-review}}
\sphinxAtStartPar
Il video di Sprint Review è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://drive.google.com/file/d/12worWEcx-uf2UP4\_lnEOovHZpvR77MsG/view}
\end{itemize}
\subsubsection{Artefatti}
\label{\detokenize{development/sprint0/index:artefatti}}
\sphinxAtStartPar
In questo sprint è stato realizzato un documento con i risultati dell\textquotesingle{}analisi effettuata per realizzare il software:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{0\sphinxhyphen{}result.pdf}}
\end{itemize}
\subsubsection{Registro attività}
\label{\detokenize{development/sprint0/index:registro-attivita}}
\paragraph{Riunioni collettive}
\label{\detokenize{development/sprint0/index:riunioni-collettive}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Ora
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
10h 6m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}08
&
\sphinxAtStartPar
20:45
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Analisi documento di specifiche
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}09
&
\sphinxAtStartPar
14:15
&
\sphinxAtStartPar
35m
&
\sphinxAtStartPar
Intervista con il cliente
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}09
&
\sphinxAtStartPar
15:00
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Resoconto intervista
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
15:03
&
\sphinxAtStartPar
2h 39m
&
\sphinxAtStartPar
Documentazione e planning poker
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}15
&
\sphinxAtStartPar
18:15
&
\sphinxAtStartPar
52m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
15:05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Documentazione e partita a Scrumble
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\paragraph{Attività individuali}
\label{\detokenize{development/sprint0/index:attivita-individuali}}
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
Per vedere più in dettaglio il lavoro di sviluppo effettuato da ogni membro del gruppo, si suggerisce di
visualizzare il log di Git:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{\PYGZdl{} }git log
\end{sphinxVerbatim}
\end{sphinxadmonition}
\subparagraph{Stefano Goldoni}
\label{\detokenize{development/sprint0/index:stefano-goldoni}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
6h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}08
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
user stories
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}09
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
epic
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}10
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
use cases
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
use cases
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}14
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
documentazione SRS
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}15
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
documentazione SRS
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
diagrammi di attività
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Flavia Cocca}
\label{\detokenize{development/sprint0/index:flavia-cocca}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
15h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}08
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
brainstorming Ui
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}10
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
creazione frame in figma con relativo css
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
mockup UI con relativo css (creazione componenti)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}12
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
mockup UI con relativo css (creazione componenti)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}14
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
mockup UI con relativo css (creazione pagine)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}15
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
mockup UI con relativo css (creazioni pagine)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}16
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
ultimi ritocchi UI
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Stesura documentazione partita scrumble
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Chiara Calzolari}
\label{\detokenize{development/sprint0/index:chiara-calzolari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
12h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}09
&
\sphinxAtStartPar
2.5h
&
\sphinxAtStartPar
Brainstorming UI
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}10
&
\sphinxAtStartPar
1.5h
&
\sphinxAtStartPar
mockup UI con relativo css (dashboard ed elenco repositories)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
mockup UI con relativo css (settings)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
0.5h
&
\sphinxAtStartPar
Prima versione del logo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}12
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
mockup UI con relativo css (creazione componenti, light/dark mode)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}13
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
mockup UI con relativo css (alerts)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}15
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Versione definitiva del logo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}16
&
\sphinxAtStartPar
0.5h
&
\sphinxAtStartPar
mockup UI con relativo css (Notifications e Share)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Documentazione Mockup
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
0.5h
&
\sphinxAtStartPar
Doppiaggio video di presentazione
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Stefano Pigozzi}
\label{\detokenize{development/sprint0/index:stefano-pigozzi}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
23h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}08
&
\sphinxAtStartPar
4h 30m
&
\sphinxAtStartPar
Configurazione Discord e GitLab
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}09
&
\sphinxAtStartPar
3h 30m
&
\sphinxAtStartPar
Riunione con il cliente e configurazione Taiga
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}10
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Configurazione Penpot, Taiga, UI Design, progettazione Database
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}11
&
\sphinxAtStartPar
3h 30m
&
\sphinxAtStartPar
Riunione, configurazione GitLab e project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}12
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Configurazione Twitter e UI Design
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}15
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
Partita a Scrumble e project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}16
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Project management e configurazione SonarQube
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}17
&
\sphinxAtStartPar
3h 30m
&
\sphinxAtStartPar
Riunione e partita a scrumble
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Giovanni Anniballi}
\label{\detokenize{development/sprint0/index:giovanni-anniballi}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
Giovanni ha iniziato a raccogliere dati sul tempo impiegato a partire dallo Sprint 1.
\end{sphinxadmonition}
\subparagraph{Giorgio Minoccari}
\label{\detokenize{development/sprint0/index:giorgio-minoccari}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
Giorgio ha iniziato a raccogliere dati sul tempo impiegato a partire dallo Sprint 1.
\end{sphinxadmonition}
\subparagraph{Lorenzo Balugani}
\label{\detokenize{development/sprint0/index:lorenzo-balugani}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
Lorenzo ha iniziato a raccogliere dati sul tempo impiegato a partire dallo Sprint 1.
\end{sphinxadmonition}
\subsubsection{Risultati della partita di Scrumble}
\label{\detokenize{development/sprint0/index:risultati-della-partita-di-scrumble}}\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Learn
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members understand the Scrum roles?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Knowledge of Scrum roles by questions
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
no idea of the Scrum roles
\item[{5}] \leavevmode
\sphinxAtStartPar
perfect knowledge of the roles and their jobs
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
4
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
4
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
4
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
4
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
4
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Learn
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members feel they learned the process?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Opinions from the participants
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
couldn\textquotesingle{}t repeat the game
\item[{5}] \leavevmode
\sphinxAtStartPar
could play the game as a Scrum Master by himself
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
3
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
3
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
4
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
3
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
3
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
3
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Learn
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does everyone keep up with the other players?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Check during every sprint retrospective if every one is on point
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
totally lost
\item[{5}] \leavevmode
\sphinxAtStartPar
leads the game driving the other players
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
3
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
4
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
4
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
4
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Practice
\item[{Question}] \leavevmode
\sphinxAtStartPar
Are the game mechanics linear and repeatable?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Opinions from the participants
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
feels the game is unrepeatable
\item[{5}] \leavevmode
\sphinxAtStartPar
feels the game could be played in any situation
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
1
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
2
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
1
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
1
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
1
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
2
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
1
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Practice
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team success in completing the game?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Number of User Stories completed
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
0 to 3 stories
\item[{2}] \leavevmode
\sphinxAtStartPar
4 to 6
\item[{3}] \leavevmode
\sphinxAtStartPar
7 to 9
\item[{4}] \leavevmode
\sphinxAtStartPar
10 to 12
\item[{5}] \leavevmode
\sphinxAtStartPar
13 to 15
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
5
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Practice
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members efficiently estimate during sprint planning?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Uniformity in evaluating the size and the priority of user stories
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
abnormal difference from the other players
\item[{5}] \leavevmode
\sphinxAtStartPar
coherent and uniform with the group most of the time
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
5
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
4
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
4
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Cooperation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members know each other better?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Level of players\textquotesingle{} serenity throughout the game
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
never speaks with the other players
\item[{5}] \leavevmode
\sphinxAtStartPar
talks friendly to anyone in every situation
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
4
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
4
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Cooperation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does the game let all players cooperate?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Contribution of every player during the game
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
never puts effort in doing something
\item[{5}] \leavevmode
\sphinxAtStartPar
every time is willing to understand what is going on
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
4
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
3
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
3
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
2
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
3
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
4
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
3
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Cooperation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team member consult each other about a topic?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Sharing of ideas
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
never asks for an opinion
\item[{5}] \leavevmode
\sphinxAtStartPar
wants to discuss about every topic
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
5
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
3
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
4
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Motivation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members encourage collegues in need?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Players explain something other players don\textquotesingle{}t understand
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
not involved by the game
\item[{5}] \leavevmode
\sphinxAtStartPar
always makes sure everyone is on point
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
3
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
4
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
4
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
4
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Motivation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does PO help the team?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Quality of PO\textquotesingle{}s advices to get better in the next sprints
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
poor/absent advices
\item[{5}] \leavevmode
\sphinxAtStartPar
wise and helpful suggestions when is required
\end{description}\end{quote}
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
4
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Motivation
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does the team come up with good ideas?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Effectiveness of sprint retrospective
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
doesn\textquotesingle{}t express opinions during retrospective
\item[{5}] \leavevmode
\sphinxAtStartPar
feels the retrospective fundamental to express opinions
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
4
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Problem Solving
\item[{Question}] \leavevmode
\sphinxAtStartPar
Do team members behave well when facing a problem?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Level of the technical debt at the end of the game
\item[{Evaluation}] \leavevmode
\sphinxAtStartPar
On the game board, if the debt pawn is on the lowest stage,the evaluation is 5, for every higher stage it decreases by 1
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
5
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\item[{Flavia}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Problem Solving
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does team organize their tasks properly?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Average of tasks left at the end of each sprint
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
21+ average tasks left
\item[{2}] \leavevmode
\sphinxAtStartPar
16\sphinxhyphen{}20 average tasks left
\item[{3}] \leavevmode
\sphinxAtStartPar
11\sphinxhyphen{}15 average tasks left
\item[{4}] \leavevmode
\sphinxAtStartPar
6\sphinxhyphen{}10 average tasks left
\item[{5}] \leavevmode
\sphinxAtStartPar
0\sphinxhyphen{}5 average tasks left
\end{description}\end{quote}
\item[{Chiara}] \leavevmode
\sphinxAtStartPar
5
\item[{Giorgio}] \leavevmode
\sphinxAtStartPar
5
\item[{Giovanni}] \leavevmode
\sphinxAtStartPar
5
\item[{Stefano P.}] \leavevmode
\sphinxAtStartPar
5
\item[{Lorenzo}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\item {} \begin{quote}\begin{description}
\item[{Goal}] \leavevmode
\sphinxAtStartPar
Problem Solving
\item[{Question}] \leavevmode
\sphinxAtStartPar
Does PO plan efficiently the Sprint Backlog?
\item[{Metric}] \leavevmode
\sphinxAtStartPar
Average of tasks left at the end of each sprint
\item[{Evaluation}] \leavevmode\begin{quote}\begin{description}
\item[{1}] \leavevmode
\sphinxAtStartPar
21+ average tasks left
\item[{2}] \leavevmode
\sphinxAtStartPar
16\sphinxhyphen{}20 average tasks left
\item[{3}] \leavevmode
\sphinxAtStartPar
11\sphinxhyphen{}15 average tasks left
\item[{4}] \leavevmode
\sphinxAtStartPar
6\sphinxhyphen{}10 average tasks left
\item[{5}] \leavevmode
\sphinxAtStartPar
0\sphinxhyphen{}5 average tasks left
\end{description}\end{quote}
\item[{Stefano G.}] \leavevmode
\sphinxAtStartPar
5
\end{description}\end{quote}
\end{enumerate}
\subsection{Sprint 1: 19 Apr \sphinxhyphen{} 02 Mag}
\label{\detokenize{development/sprint1/index:sprint-1-19-apr-02-mag}}\label{\detokenize{development/sprint1/index::doc}}
\subsubsection{Consegna}
\label{\detokenize{development/sprint1/index:consegna}}
\sphinxAtStartPar
La seguente documentazione è stata fornita dal cliente durante questo Sprint:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{1\sphinxhyphen{}sprint\sphinxhyphen{}requirements.pdf}}
\end{itemize}
\subsubsection{Goal}
\label{\detokenize{development/sprint1/index:goal}}
\sphinxAtStartPar
Il \sphinxstylestrong{goal} per questo Sprint è stato costruire una codebase facilmente mantenibile e modulare, che potesse accomodare
grossi cambiamenti nei sottomoduli senza impattare gli altri:
\begin{itemize}
\item {}
\sphinxAtStartPar
Dal lato \sphinxstylestrong{backend}: l\textquotesingle{}obiettivo è stato predisporre la struttura del database e creare le API calls
per il login degli utenti e la creazione dei repository
\item {}
\sphinxAtStartPar
Dal lato \sphinxstylestrong{testing}: creare un piccolo framework per il testing automatizzato del backend
\item {}
\sphinxAtStartPar
Dal lato \sphinxstylestrong{frontend}: creare la struttura con le componenti importate da Figma e implementare le schermate principali
\end{itemize}
\paragraph{Backlog}
\label{\detokenize{development/sprint1/index:backlog}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{1-backlog}.png}
\paragraph{Task completati}
\label{\detokenize{development/sprint1/index:task-completati}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{1-tasks}.png}
\subsubsection{Definition of Ready}
\label{\detokenize{development/sprint1/index:definition-of-ready}}
\sphinxAtStartPar
Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
\begin{itemize}
\item {}
\sphinxAtStartPar
La User Story è stata compresa ed accettata da tutti i membri
\item {}
\sphinxAtStartPar
I tester hanno confermato la possibilità di poterla testare
\item {}
\sphinxAtStartPar
Il Product Owner ha la visione necessaria per definirne la priorità
\item {}
\sphinxAtStartPar
Il Team è in grado di stimarla
\item {}
\sphinxAtStartPar
La User Story è indipendente o dipendente da altre a priorità maggiore
\end{itemize}
\subsubsection{Definition of Done}
\label{\detokenize{development/sprint1/index:definition-of-done}}
\sphinxAtStartPar
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
\begin{itemize}
\item {}
\sphinxAtStartPar
Sviluppo completo della funzionalità richiesta
\item {}
\sphinxAtStartPar
Definizione e superamento dei test
\item {}
\sphinxAtStartPar
Bozza della documentazione della funzionalità
\item {}
\sphinxAtStartPar
Merge dei sorgenti nel branch \sphinxcode{\sphinxupquote{main}} di GitLab
\end{itemize}
\subsubsection{Statistiche}
\label{\detokenize{development/sprint1/index:statistiche}}
\paragraph{Burndown chart}
\label{\detokenize{development/sprint1/index:burndown-chart}}
\sphinxAtStartPar
Questa è la burndown chart relativa allo Sprint 1:
\noindent\sphinxincludegraphics{{1-burndown}.png}
\paragraph{Gitinspector}
\label{\detokenize{development/sprint1/index:gitinspector}}
\sphinxAtStartPar
Questa statistica è stata generata dal prof. Marcello Missiroli con
\sphinxhref{https://github.com/ejwa/gitinspector}{Gitinspector} al termine dello Sprint.
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{1\sphinxhyphen{}stats.html}}
\end{itemize}
\subsubsection{Sprint Retrospective}
\label{\detokenize{development/sprint1/index:sprint-retrospective}}
\sphinxAtStartPar
La Sprint Retrospective è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{1\sphinxhyphen{}retrospective.pdf}}
\end{itemize}
\subsubsection{Sprint Review}
\label{\detokenize{development/sprint1/index:sprint-review}}
\sphinxAtStartPar
Il video di Sprint Review è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://drive.google.com/drive/folders/1dsis\_cGCRnVgZAkZjEVIZKt4NndkycaF}
\end{itemize}
\subsubsection{Valutazione sul debito tecnico}
\label{\detokenize{development/sprint1/index:valutazione-sul-debito-tecnico}}
\sphinxAtStartPar
Durante questo sprint è stata prodotta dallo Scrum Master la seguente valutazione sul debito tecnico:
\begin{quote}
\sphinxAtStartPar
La valutazione del debito tecnico effettuata da SonarQube è relativa principalmente al backend,
poiché lanalisi del progetto sarebbe stata troppo dispendiosa a causa dellelevato numero di file presente nella
cartella \sphinxcode{\sphinxupquote{/frontend}}.
\sphinxAtStartPar
Per quanto riguarda il backend invece il debito tecnico riscontrato è minore del 5\% come si può verificare dal
grado A attestato da SonarQube.
\sphinxAtStartPar
Un punto chiave nellimplementazione ha permesso al team di diminuire il debito tecnico, questo è avvenuto grazie
alladozione del modello architetturale REST che ha migliorato esponenzialmente il tempo di risposta delle
richieste e la leggibilità del codice.
\begin{flushright}
---Flavia Cocca, Scrum Master
\end{flushright}
\end{quote}
\subsubsection{Valutazione sulle User Stories}
\label{\detokenize{development/sprint1/index:valutazione-sulle-user-stories}}
\sphinxAtStartPar
Durante questo sprint è stata prodotta dal Product Owner la seguente valutazione sulle User Stories:
\begin{quote}
\sphinxAtStartPar
Durante questo sprint non sono state ristimate le US in quanto non sono emerse al termine dello Sprint 0
valutazioni che lo rendessero necessario, di conseguenza non sono state neanche rivalutate le priorità.
\sphinxAtStartPar
Come Product Owner ho individuato come criterio di accettazione l\textquotesingle{}esito positivo dei test, anche per il fatto che
i test sono presenti in ogni US.
\sphinxAtStartPar
Durante lo sviluppo di questo primo sprint sono ovviamente emerse delle issue che sono state tracciate su Taiga.
Una di queste, la \#101 "L\textquotesingle{}API non è interamente REST" ha portato ad un refactoring di una parte del codice del
backend, del frontend e naturalmente anche delle procedure di test, che erano già state abbozzate.
La modifica comunque si è rilevata essere necessaria per rispondere appieno alle struttura tipica dei metodi REST.
\sphinxAtStartPar
Altre issue sono state inserite ma possono essere sistemate nello sprint successivo in quanto non influiscono sul
funzionamento atteso in questo primo sprint.
\sphinxAtStartPar
Un leggero ritardo sullo sviluppo del frontend non consente di chiudere alcune US, che verranno chiuse e
testate nel prossimo Sprint.
\begin{flushright}
---Stefano Goldoni, Product Owner
\end{flushright}
\end{quote}
\subsubsection{Registro attività}
\label{\detokenize{development/sprint1/index:registro-attivita}}
\paragraph{Riunioni collettive}
\label{\detokenize{development/sprint1/index:riunioni-collettive}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Ora
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
2h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
15:30
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
backlog grooming session
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\paragraph{Attività individuali}
\label{\detokenize{development/sprint1/index:attivita-individuali}}
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
Per vedere più in dettaglio il lavoro di sviluppo effettuato da ogni membro del gruppo, si suggerisce di
visualizzare il log di Git:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{\PYGZdl{} }git log
\end{sphinxVerbatim}
\end{sphinxadmonition}
\subparagraph{Stefano Goldoni}
\label{\detokenize{development/sprint1/index:stefano-goldoni}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
23h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}20
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
analisi test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}20
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
scrittura test cases
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
predisposizione progetto in locale per il test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
metodi di test login e creazione utente
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
metodi ti test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
metodi di test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}30
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
metodi di test backend
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
test frontend
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
test backend in pair programming
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
test backend
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Flavia Cocca}
\label{\detokenize{development/sprint1/index:flavia-cocca}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
8h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
modifica mockup UI
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Organizzazione Sprint retrospective
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}30
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
modifica mockup UI
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Riunione con il team per Sprint review e Sprint retrospective
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Stesura documenti Sprint 1 (debito tecnico e relazione Sprint retrospective), realizzazione video Sprint1 review
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Chiara Calzolari}
\label{\detokenize{development/sprint1/index:chiara-calzolari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
6h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Configurazione ambiente di sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
modifica mockup UI (adeguamento al JS)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
modifica mockup UI (Manage users)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Ultimi ritocchi al mockup UI
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Stefano Pigozzi}
\label{\detokenize{development/sprint1/index:stefano-pigozzi}}
\begin{savenotes}\sphinxatlongtablestart\begin{longtable}[c]{|l|l|l|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
29h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endfirsthead
\multicolumn{3}{c}%
{\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} \textendash{} continua dalla pagina precedente}}}\\
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
29h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endhead
\hline
\multicolumn{3}{r}{\makebox[0pt][r]{\sphinxtablecontinued{continues on next page}}}\\
\endfoot
\endlastfoot
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}19
&
\sphinxAtStartPar
18m
&
\sphinxAtStartPar
Configurazione IntelliJ IDEA
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}19
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Configurazione IntelliJ IDEA
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}20
&
\sphinxAtStartPar
1h 26m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
1h 3m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
3m
&
\sphinxAtStartPar
Configurazione IntelliJ IDEA
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
58m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
13m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
7m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
6m
&
\sphinxAtStartPar
Project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
15m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
32m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
5m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
16m
&
\sphinxAtStartPar
Presentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
36m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
1h 23m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
18m
&
\sphinxAtStartPar
Studio
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
42m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
1h 9m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
3m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}24
&
\sphinxAtStartPar
19m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}24
&
\sphinxAtStartPar
19m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}25
&
\sphinxAtStartPar
2h 59m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}25
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
13m
&
\sphinxAtStartPar
Configurazione SonarQube
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
12m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
4m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
2h 58m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
1h 4m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
56m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
6m
&
\sphinxAtStartPar
Project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
7m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
15m
&
\sphinxAtStartPar
Configurazione Taiga
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
29m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
35m
&
\sphinxAtStartPar
Collaborazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
34m
&
\sphinxAtStartPar
Collaborazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h 42m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h 26m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
48m
&
\sphinxAtStartPar
Project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}30
&
\sphinxAtStartPar
56m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}30
&
\sphinxAtStartPar
46m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
12m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
14m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
28m
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
15m
&
\sphinxAtStartPar
Collaborazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
3m
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\end{longtable}\sphinxatlongtableend\end{savenotes}
\subparagraph{Giovanni Anniballi}
\label{\detokenize{development/sprint1/index:giovanni-anniballi}}
\sphinxAtStartPar
Per il lavoro di testing è stata utilizzata anche la tecnica del Pair Programming, grazie ad un plugin dell\textquotesingle{}IDE utilizzato.
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
16h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Riunione con il team
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Studio struttura del backend
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}24
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Studio del backend, volto a capire il funzionamento delle varie API
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Testing login e retrieval dei dati inerenti a tutti gli utenti registrati
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Testing creazione user
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Test cancellazione utente e ritorno dei dati inerenti a quellutente
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Test modica utenti e creazione della prima repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}30
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Testing ritorno di tutte le repository di proprietà dellutente loggato, ritorno delle info inerenti alla repository specificata
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Riunione con il team per Sprint review e Sprint retrospective
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Testing modifica ed eliminazione di una repository (nome, stato)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Testing del frontend tramite UI, controllo generale dei test già effettuati.
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Giorgio Minoccari}
\label{\detokenize{development/sprint1/index:giorgio-minoccari}}
\sphinxAtStartPar
Durante lo Sprint ho principalmente svolto sviluppo e test riguardo alla API di twitter, in modo da poter effettuare chiamate efficenti e non venire limitati dal sito riguardo alle richieste effettuate.
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
10h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Primi test riguardo autenticazione Oauth per API twitter
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}23
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Autenticazione funzionante
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}24
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Test su ricerche generali con parole chiave
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Test su ricerche geolocalizzate
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Definizione di entita\textquotesingle{} di esempio nei database per provare funzioni legate ad esse
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Definizione di funzioni per l\textquotesingle{}aggregazione di condizioni di diverso tipo per la ricerca di tweet tramite API
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Refactor codice scritto fino a quel momento, eliminazione di dati inutili
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}01
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Implementazioni di analisi su termini e hashtag restituiti dall\textquotesingle{}API
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Test di chiamata alle funzioni di ricerca a partire da repository con condizioni complesse aggregate
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Lorenzo Balugani}
\label{\detokenize{development/sprint1/index:lorenzo-balugani}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
13h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}21
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Implementazione Base di Dati
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}22
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Login, creazione utenti
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}25
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Rimozione utenti, CORS, Creazione repo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}25
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Altre funzioni API
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Standardizzazione output json
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}26
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}27
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Aggiunto supporto al modulo explorer, fix
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}28
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Gestione migliorata errori
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}04\sphinxhyphen{}29
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Refactoring
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}02
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subsection{Sprint 2: 03 Mag \sphinxhyphen{} 16 Mag}
\label{\detokenize{development/sprint2/index:sprint-2-03-mag-16-mag}}\label{\detokenize{development/sprint2/index::doc}}
\subsubsection{Consegna}
\label{\detokenize{development/sprint2/index:consegna}}
\sphinxAtStartPar
La seguente documentazione è stata fornita dal cliente durante questo sprint:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{2\sphinxhyphen{}sprint\sphinxhyphen{}requirements.pdf}}
\end{itemize}
\subsubsection{Goal}
\label{\detokenize{development/sprint2/index:goal}}
\sphinxAtStartPar
Il \sphinxstylestrong{goal} del secondo Sprint è stato la creazione, cancellazione e modifica dei repository, ovvero permettere
agli utenti di creare repository partendo da una ricerca che rispetta determinate condizioni.
\paragraph{Backlog}
\label{\detokenize{development/sprint2/index:backlog}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{2-backlog}.png}
\paragraph{Task completati}
\label{\detokenize{development/sprint2/index:task-completati}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{2-tasks}.png}
\subsubsection{Definition of Ready}
\label{\detokenize{development/sprint2/index:definition-of-ready}}
\sphinxAtStartPar
Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
\begin{itemize}
\item {}
\sphinxAtStartPar
La User Story è stata compresa ed accettata da tutti i membri
\item {}
\sphinxAtStartPar
I tester hanno confermato la possibilità di poterla testare
\item {}
\sphinxAtStartPar
Il Product Owner ha la visione necessaria per definirne la priorità
\item {}
\sphinxAtStartPar
Il Team è in grado di stimarla
\item {}
\sphinxAtStartPar
La User Story è indipendente o dipendente da altre a priorità maggiore
\end{itemize}
\subsubsection{Definition of Done}
\label{\detokenize{development/sprint2/index:definition-of-done}}
\sphinxAtStartPar
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
\begin{itemize}
\item {}
\sphinxAtStartPar
Sviluppo completo della funzionalità richiesta
\item {}
\sphinxAtStartPar
Definizione e superamento dei test
\item {}
\sphinxAtStartPar
Bozza della documentazione della funzionalità
\item {}
\sphinxAtStartPar
Merge dei sorgenti nel branch \sphinxcode{\sphinxupquote{main}} di GitLab
\end{itemize}
\subsubsection{Statistiche}
\label{\detokenize{development/sprint2/index:statistiche}}
\paragraph{Burndown chart}
\label{\detokenize{development/sprint2/index:burndown-chart}}
\sphinxAtStartPar
Questa è la burndown chart relativa allo Sprint 2:
\noindent\sphinxincludegraphics{{2-burndown}.png}
\paragraph{Gitinspector}
\label{\detokenize{development/sprint2/index:gitinspector}}
\sphinxAtStartPar
Questa statistica è stata generata dal prof. Marcello Missiroli con
\sphinxhref{https://github.com/ejwa/gitinspector}{Gitinspector} al termine dello Sprint.
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{2\sphinxhyphen{}stats.html}} (relativa al codice)
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{2D\sphinxhyphen{}stats.html}} (relativa a parte della documentazione)
\end{itemize}
\subsubsection{Sprint Retrospective}
\label{\detokenize{development/sprint2/index:sprint-retrospective}}
\sphinxAtStartPar
La Sprint Retrospective è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{2\sphinxhyphen{}retrospective.pdf}}
\end{itemize}
\subsubsection{Sprint Review}
\label{\detokenize{development/sprint2/index:sprint-review}}
\sphinxAtStartPar
Il video di Sprint Review è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://drive.google.com/file/d/1x1kub-bpVJrwmGrn5LLU8ecqcbxFaoKg/view}
\end{itemize}
\subsubsection{Registro attività}
\label{\detokenize{development/sprint2/index:registro-attivita}}
\paragraph{Riunioni collettive}
\label{\detokenize{development/sprint2/index:riunioni-collettive}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Ora
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
1h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
10:00
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Sprint Retrospective session
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\paragraph{Attività individuali}
\label{\detokenize{development/sprint2/index:attivita-individuali}}
\begin{sphinxadmonition}{hint}{Suggerimento:}
\sphinxAtStartPar
Per vedere più in dettaglio il lavoro di sviluppo effettuato da ogni membro del gruppo, si suggerisce di
visualizzare il log di Git:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{\PYGZdl{} }git log
\end{sphinxVerbatim}
\end{sphinxadmonition}
\subparagraph{Stefano Goldoni}
\label{\detokenize{development/sprint2/index:stefano-goldoni}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
16h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}04
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
preparazione backlog sprint 2
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
test sprint 2
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
test utenti e repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
test repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
test repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
test conditions
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}15
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
test conditions + sonarqube scanner
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Flavia Cocca}
\label{\detokenize{development/sprint2/index:flavia-cocca}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
16h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}04
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Riunione per con PO, nuovo backlog
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}05
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Refactoring test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}08
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Refactoring test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}09
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Nuovi test
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
2h 30m
&
\sphinxAtStartPar
Discussione test e risoluzione di alcune issue
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Sprint Retrospective
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}15
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Stefano Pigozzi}
\label{\detokenize{development/sprint2/index:stefano-pigozzi}}
\begin{savenotes}\sphinxatlongtablestart\begin{longtable}[c]{|l|l|l|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
27h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endfirsthead
\multicolumn{3}{c}%
{\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} \textendash{} continua dalla pagina precedente}}}\\
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
27h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endhead
\hline
\multicolumn{3}{r}{\makebox[0pt][r]{\sphinxtablecontinued{continues on next page}}}\\
\endfoot
\endlastfoot
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}05
&
\sphinxAtStartPar
40m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}05
&
\sphinxAtStartPar
21m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
9m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
3m
&
\sphinxAtStartPar
Configurazione Taiga
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
11m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
9m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
20m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
39m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
15m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
1h 4m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
1h 47m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
17m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
34m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
34m
&
\sphinxAtStartPar
Project management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
2h 44m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}08
&
\sphinxAtStartPar
13m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}08
&
\sphinxAtStartPar
29m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}08
&
\sphinxAtStartPar
18m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
1h 00m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
1h 15m
&
\sphinxAtStartPar
Configurazione GitLab
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
25m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
39m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
25m
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
3h 57m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
1h 45m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
1h 51m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
1h 00m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
1h 20m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
20m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
3h 17m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}15
&
\sphinxAtStartPar
1h 8m
&
\sphinxAtStartPar
Porting dipendenze
\\
\hline
\end{longtable}\sphinxatlongtableend\end{savenotes}
\subparagraph{Chiara Calzolari}
\label{\detokenize{development/sprint2/index:chiara-calzolari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
11h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}03
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Testing frontend e segnalazione issues
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}03
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Modifica mockup UI (Dashboard repository)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}04
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Modifica mockup UI (adeguamento al JS)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Configurazione ambiente di sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Modifica UI (traduzione in Italiano)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Modifica UI (traduzione in Italiano)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Realizzazione video demo sprint 2
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Giovanni Anniballi}
\label{\detokenize{development/sprint2/index:giovanni-anniballi}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
17h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}04
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Incontro con SM e PO per valutare quali US andranno nello sprint2
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}05
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Incontro con il team
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Refactoring tests sugli user e primi utilizzi delle fixtures
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}08
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Completamento test users
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Ulteriori approcci (fallimentari) al coverage di SonarQube
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Discussione sui test e correzioni bug
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Test repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Generazione coverage pytest e setting sonarqube (riuscito!)
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Sprint review e retrospettiva, conclusione test repository
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}15
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
generazione nuovo coverage e fix a sonarqube
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}15
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
fix piccoli bug segnalati da sonarqube
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Giorgio Minoccari}
\label{\detokenize{development/sprint2/index:giorgio-minoccari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
10h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}04
&
\sphinxAtStartPar
30m
&
\sphinxAtStartPar
Aggiunta della condizione sull\textquotesingle{}utente
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Tentativo di inserimento delle query con place\_id
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Test per passare alla versione 2.0 delle API
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Ritorno alla versione 1.1 perche\textquotesingle{} lascia disponibili le query sulla geolocalizzazione gratuitamente
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
5h
&
\sphinxAtStartPar
Integrazione e inserimento dei tweet catturati nel database
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Lorenzo Balugani}
\label{\detokenize{development/sprint2/index:lorenzo-balugani}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
19h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Setup di swagger, documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}06
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Documentazione, sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}07
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Alert, documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}10
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Alert Put, bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}11
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Bugfixing, sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}12
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Risolti issue pubblicati su Taiga
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}13
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}14
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subsection{Sprint 3: 17 Mag \sphinxhyphen{} 30 Mag}
\label{\detokenize{development/sprint3/index:sprint-3-17-mag-30-mag}}\label{\detokenize{development/sprint3/index::doc}}
\subsubsection{Consegna}
\label{\detokenize{development/sprint3/index:consegna}}
\sphinxAtStartPar
La seguente documentazione è stata fornita dal cliente durante questo sprint:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{3\sphinxhyphen{}sprint\sphinxhyphen{}requirements.pdf}}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{3\sphinxhyphen{}report.pdf}}
\end{itemize}
\subsubsection{Goal}
\label{\detokenize{development/sprint3/index:goal}}
\sphinxAtStartPar
Il \sphinxstylestrong{goal} del terzo Sprint è stato far funzionare il crawler, gli alert e completare tutte i task rimanenti.
\paragraph{Backlog}
\label{\detokenize{development/sprint3/index:backlog}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{3-backlog}.png}
\paragraph{Task completati}
\label{\detokenize{development/sprint3/index:task-completati}}
\noindent\sphinxincludegraphics[width=400\sphinxpxdimen]{{3-tasks}.png}
\subsubsection{Grooming session}
\label{\detokenize{development/sprint3/index:grooming-session}}
\sphinxAtStartPar
Sono state definite le nuove \sphinxstylestrong{User Stories} da inserire nel progetto sulla base delle nuove richieste
pervenute dal cliente:
\begin{itemize}
\item {}
\sphinxAtStartPar
analisi statistica più dettagliata
\item {}
\sphinxAtStartPar
postare su Twitter
\item {}
\sphinxAtStartPar
traduzione dell\textquotesingle{}interfaccia in inglese.
\end{itemize}
\sphinxAtStartPar
La richiesta relativa alle \sphinxstyleemphasis{ricerche basate sulla geolocalizzazione}, come già comunicato al cliente, non è stata
completata interamente per motivi tecnici legati a limitazioni sulle features delle \sphinxstylestrong{API 1.1 di Twitter} che non
permettono di eseguire query su campi di posizione geografica.
\sphinxAtStartPar
Le nuove User Stories sono state valutate tramite Scrum Poker, durante il quale ogni membro ha espresso
la sua valutazione.
\sphinxAtStartPar
Tutte le nuove richieste sono state accettate dal Product Owner e sono pronte ad essere inserite nello sprint di
sviluppo in partenza.
\subsubsection{Definition of Ready}
\label{\detokenize{development/sprint3/index:definition-of-ready}}
\sphinxAtStartPar
Il team ha definito lo stato di Ready di una User Story in base ai seguenti criteri:
\begin{itemize}
\item {}
\sphinxAtStartPar
La User Story è stata compresa ed accettata da tutti i membri
\item {}
\sphinxAtStartPar
I tester hanno confermato la possibilità di poterla testare
\item {}
\sphinxAtStartPar
Il Product Owner ha la visione necessaria per definirne la priorità
\item {}
\sphinxAtStartPar
Il Team è in grado di stimarla
\item {}
\sphinxAtStartPar
La User Story è indipendente o dipendente da altre a priorità maggiore
\end{itemize}
\subsubsection{Definition of Done}
\label{\detokenize{development/sprint3/index:definition-of-done}}
\sphinxAtStartPar
La definizione di Done è stata concordata da tutto il team con il Product Owner, ed è stata così definita:
\begin{itemize}
\item {}
\sphinxAtStartPar
Sviluppo completo della funzionalità richiesta
\item {}
\sphinxAtStartPar
Definizione e superamento dei test
\item {}
\sphinxAtStartPar
Bozza della documentazione della funzionalità
\item {}
\sphinxAtStartPar
Merge dei sorgenti nel branch \sphinxcode{\sphinxupquote{main}} di GitLab
\end{itemize}
\subsubsection{Statistiche}
\label{\detokenize{development/sprint3/index:statistiche}}
\paragraph{Gitinspector}
\label{\detokenize{development/sprint3/index:gitinspector}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
La statistica dello sprint 3 non è ancora stata generata dal prof. Marcello Missiroli.
\end{sphinxadmonition}
\paragraph{Schermata finale di SonarQube}
\label{\detokenize{development/sprint3/index:schermata-finale-di-sonarqube}}
\sphinxAtStartPar
La schermata finale di SonarQube è visibile a questo link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{3\sphinxhyphen{}sonarqube.pdf}}
\end{itemize}
\subsubsection{Final Retrospective}
\label{\detokenize{development/sprint3/index:final-retrospective}}\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{Retrospettiva finale}}
\end{itemize}
\subsubsection{Demo}
\label{\detokenize{development/sprint3/index:demo}}
\sphinxAtStartPar
Il video di Demo è disponibile al seguente link:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://drive.google.com/file/d/15o70Ffe51CNj8LTKHC9dGiqRVnbv9UpZ/view}
\end{itemize}
\subsubsection{Registro attività}
\label{\detokenize{development/sprint3/index:registro-attivita}}
\paragraph{Riunioni collettive}
\label{\detokenize{development/sprint3/index:riunioni-collettive}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
3.5h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
2.0 h
&
\sphinxAtStartPar
Grooming session nuove richieste cliente
\\
\hline
\sphinxAtStartPar
29/05
&
\sphinxAtStartPar
1.5 h
&
\sphinxAtStartPar
sprint retrospective
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\paragraph{Attività individuali}
\label{\detokenize{development/sprint3/index:attivita-individuali}}
\subparagraph{Stefano Goldoni}
\label{\detokenize{development/sprint3/index:stefano-goldoni}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
14h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
21/05
&
\sphinxAtStartPar
2.0h
&
\sphinxAtStartPar
Analisi strumenti di test frontend
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Inizio test alerts
\\
\hline
\sphinxAtStartPar
25/05
&
\sphinxAtStartPar
2.5h
&
\sphinxAtStartPar
Test alerts
\\
\hline
\sphinxAtStartPar
26/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Test
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
3.5h
&
\sphinxAtStartPar
Test, refactory in base a Sonarqube
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Flavia Cocca}
\label{\detokenize{development/sprint3/index:flavia-cocca}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
14h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
20/05
&
\sphinxAtStartPar
2.0h
&
\sphinxAtStartPar
Trasferimento documenti in nuova documentazione
\\
\hline
\sphinxAtStartPar
21/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Studio Sphinx
\\
\hline
\sphinxAtStartPar
23/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Studio sintassi rST
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
25/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
26/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
27/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
29/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Chiara Calzolari}
\label{\detokenize{development/sprint3/index:chiara-calzolari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
17h 30m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
1.5h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
18/05
&
\sphinxAtStartPar
1.5h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
20/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
22/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
2.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
25/05
&
\sphinxAtStartPar
1.0h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
27/05
&
\sphinxAtStartPar
0.5h
&
\sphinxAtStartPar
Traduzione UI
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
2.0h
&
\sphinxAtStartPar
Configurazione ambiente di sviluppo
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
3.0h
&
\sphinxAtStartPar
Creazione video\sphinxhyphen{}demo
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Stefano Pigozzi}
\label{\detokenize{development/sprint3/index:stefano-pigozzi}}
\begin{savenotes}\sphinxatlongtablestart\begin{longtable}[c]{|l|l|l|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
50h 41m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endfirsthead
\multicolumn{3}{c}%
{\makebox[0pt]{\sphinxtablecontinued{\tablename\ \thetable{} \textendash{} continua dalla pagina precedente}}}\\
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
50h 41m
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\endhead
\hline
\multicolumn{3}{r}{\makebox[0pt][r]{\sphinxtablecontinued{continues on next page}}}\\
\endfoot
\endlastfoot
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}17
&
\sphinxAtStartPar
25m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}17
&
\sphinxAtStartPar
19m
&
\sphinxAtStartPar
Riunione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}17
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}17
&
\sphinxAtStartPar
1h 7m
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}17
&
\sphinxAtStartPar
7m
&
\sphinxAtStartPar
User Interface
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
55m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
14m
&
\sphinxAtStartPar
Configurazione GitLab
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
1h 52m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
22m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
21m
&
\sphinxAtStartPar
User Interface
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
34m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
40m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
29m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}18
&
\sphinxAtStartPar
1h 8m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}19
&
\sphinxAtStartPar
36m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}19
&
\sphinxAtStartPar
2h 40m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}19
&
\sphinxAtStartPar
44m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}19
&
\sphinxAtStartPar
19m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}20
&
\sphinxAtStartPar
1h 26m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}20
&
\sphinxAtStartPar
2h 59m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}20
&
\sphinxAtStartPar
53m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}20
&
\sphinxAtStartPar
18m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}21
&
\sphinxAtStartPar
4h 32m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}22
&
\sphinxAtStartPar
2h 28m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}23
&
\sphinxAtStartPar
1h 12m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}23
&
\sphinxAtStartPar
1h 2m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}23
&
\sphinxAtStartPar
1h 13m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}23
&
\sphinxAtStartPar
16m
&
\sphinxAtStartPar
Code review
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}24
&
\sphinxAtStartPar
10m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}24
&
\sphinxAtStartPar
1h 46m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}24
&
\sphinxAtStartPar
5m
&
\sphinxAtStartPar
Project Management
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}24
&
\sphinxAtStartPar
3m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}24
&
\sphinxAtStartPar
54m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}25
&
\sphinxAtStartPar
2h 13m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}25
&
\sphinxAtStartPar
2h 12m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}27
&
\sphinxAtStartPar
19m
&
\sphinxAtStartPar
Sviluppo
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}27
&
\sphinxAtStartPar
34m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}27
&
\sphinxAtStartPar
1h 46m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}27
&
\sphinxAtStartPar
33m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}27
&
\sphinxAtStartPar
1h 34m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}28
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}28
&
\sphinxAtStartPar
1h 30m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}28
&
\sphinxAtStartPar
7m
&
\sphinxAtStartPar
Code review
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}29
&
\sphinxAtStartPar
1h 38m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}29
&
\sphinxAtStartPar
2h 39m
&
\sphinxAtStartPar
Documentazione
\\
\hline
\sphinxAtStartPar
2021\sphinxhyphen{}05\sphinxhyphen{}29
&
\sphinxAtStartPar
27m
&
\sphinxAtStartPar
Deployment
\\
\hline
\end{longtable}\sphinxatlongtableend\end{savenotes}
\subparagraph{Giovanni Anniballi}
\label{\detokenize{development/sprint3/index:giovanni-anniballi}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
18h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Ricontrollo generale codice, fix piccoli typo
\\
\hline
\sphinxAtStartPar
18/05
&
\sphinxAtStartPar
1h
&
\sphinxAtStartPar
Aggiornati files di log e refactoring documentazione
\\
\hline
\sphinxAtStartPar
21/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Studio Jest, valutazione di test sul frontend
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Primi test sulle autorizzazioni
\\
\hline
\sphinxAtStartPar
26/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Fix ai test
\\
\hline
\sphinxAtStartPar
27/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Test autorizzazioni completati, fix
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Fix test malfunzionanti, refactoring test
\\
\hline
\sphinxAtStartPar
29/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Aggiornamento documentazione, aggiunti ulteriori test seguendo i suggerimenti di SQ
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Giorgio Minoccari}
\label{\detokenize{development/sprint3/index:giorgio-minoccari}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
22h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Aggiunta associazione tra singoli tweet e condizioni che ne hanno scaturito il download
\\
\hline
\sphinxAtStartPar
18/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Aggiunto salvataggio delle immagini presenti nei tweet e data in cui sono stati postati
\\
\hline
\sphinxAtStartPar
20/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Ristrutturazione del crawler in uno script lanciabile separatamente su tutte le repository
\\
\hline
\sphinxAtStartPar
21/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Aggiunta degli alert e delle azioni che vengono svolte quando scatta il trigger
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
25/05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Refactoring di sicurezza
\\
\hline
\sphinxAtStartPar
27/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Refactor struttura per poter associare le condizioni degli allarmi ai singoli tweet
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
6h
&
\sphinxAtStartPar
Completamento generale e bugfixing
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\subparagraph{Lorenzo Balugani}
\label{\detokenize{development/sprint3/index:lorenzo-balugani}}
\begin{savenotes}\sphinxattablestart
\centering
\begin{tabulary}{\linewidth}[t]{|T|T|T|}
\hline
\sphinxstyletheadfamily
\sphinxAtStartPar
Data
&\sphinxstyletheadfamily
\sphinxAtStartPar
Durata
&\sphinxstyletheadfamily
\sphinxAtStartPar
Attività
\\
\hline\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
22h
&\sphinxstyletheadfamily
\sphinxAtStartPar
Totale
\\
\hline
\sphinxAtStartPar
17/05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Bugfixing, supporto alla localizzazione degli errori
\\
\hline
\sphinxAtStartPar
18/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
20/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
API autorizzazioni, refactoring
\\
\hline
\sphinxAtStartPar
21/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Gestione tweet, rappresentazione tweet
\\
\hline
\sphinxAtStartPar
24/05
&
\sphinxAtStartPar
2h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
25/05
&
\sphinxAtStartPar
4h
&
\sphinxAtStartPar
Docs, refactoring
\\
\hline
\sphinxAtStartPar
27/05
&
\sphinxAtStartPar
3h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\sphinxAtStartPar
28/05
&
\sphinxAtStartPar
6h
&
\sphinxAtStartPar
Bugfixing
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\section{Burndown chart complessiva}
\label{\detokenize{development/process:burndown-chart-complessiva}}
\noindent\sphinxincludegraphics{{Burndown4}.png}
\chapter{Artefatti}
\label{\detokenize{development/artifacts:artefatti}}\label{\detokenize{development/artifacts::doc}}
\sphinxAtStartPar
Gran parte degli artefatti sono stati elencati nei singoli sprint.
\sphinxAtStartPar
Vengono di seguito elencati alcuni artefatti che non sono stati precedentemente elencati:
\section{Diagrammi UML}
\label{\detokenize{development/artifacts:diagrammi-uml}}
\sphinxAtStartPar
Per la realizzazione dei diagrammi UML, utili nelle fasi iniziali di progettazione di N.E.S.T., è stato utilizzato
DrawIO (oggi diagrams.net). Si allega il file con il progetto UML.
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{Diagrammi UML}}
\end{itemize}
\sphinxAtStartPar
Dopo aver scaricato il file, recarsi su \sphinxurl{https://app.diagrams.net/} e tramite il menù \sphinxcode{\sphinxupquote{File \(\rightarrow\) Open from \(\rightarrow\) Device...}}
caricare il file appena scaricato.
\section{Demo}
\label{\detokenize{development/artifacts:demo}}
\subsection{Video}
\label{\detokenize{development/artifacts:video}}
\sphinxAtStartPar
Il video di demo è disponibile al seguente URL:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://drive.google.com/file/d/15o70Ffe51CNj8LTKHC9dGiqRVnbv9UpZ/view}
\end{itemize}
\subsection{Interattiva}
\label{\detokenize{development/artifacts:interattiva}}
\sphinxAtStartPar
Una demo interattiva è disponibile ai seguenti URL:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxurl{https://api.nest.steffo.eu/} (backend)
\item {}
\sphinxAtStartPar
\sphinxurl{https://prod.nest.steffo.eu/} (frontend pre\sphinxhyphen{}popolato)
\item {}
\sphinxAtStartPar
\sphinxurl{https://docs.nest.steffo.eu/} (documentazione e relazione)
\end{itemize}
\chapter{Conclusioni}
\label{\detokenize{development/conclusions:conclusioni}}\label{\detokenize{development/conclusions::doc}}\begin{itemize}
\item {}
\sphinxAtStartPar
Il team dimostra di aver \sphinxstylestrong{imparato numerose nuove nozioni}, acquisendo dimestichezza con vari linguaggi e software,
come:
\begin{itemize}
\item {}
\sphinxAtStartPar
Python
\item {}
\sphinxAtStartPar
NodeJS
\item {}
\sphinxAtStartPar
reStructuredText
\item {}
\sphinxAtStartPar
IntelliJ IDEA
\item {}
\sphinxAtStartPar
Taiga
\item {}
\sphinxAtStartPar
Git
\item {}
\sphinxAtStartPar
GitLab
\item {}
\sphinxAtStartPar
SystemD
\item {}
\sphinxAtStartPar
\sphinxstyleemphasis{Twitter}
\end{itemize}
\item {}
\sphinxAtStartPar
Il team ritiene che l\textquotesingle{}\sphinxstylestrong{organizzazione e collaborazione} tra tutti i membri del gruppo è stata eccellente:
\begin{itemize}
\item {}
\sphinxAtStartPar
Ciascuno aveva un suo compito e non sono sorti conflitti.
\item {}
\sphinxAtStartPar
L\textquotesingle{}organizzazione strutturata ci ha permesso di procedere a ritmo sostenuto dall\textquotesingle{}inizio alla fine,
realizzando un prodotto efficace e modulare.
\end{itemize}
\item {}
\sphinxAtStartPar
Parte del team ritiene che \sphinxstylestrong{alcune attività}, come le varie riunioni, \sphinxstylestrong{sarebbero state più edificanti e veloci} se
fossero state effettuate in presenza, purtroppo la pandemia e la distanza non lo hanno reso possibile.
\item {}
\sphinxAtStartPar
Parte del team ritiene invece che il \sphinxstylestrong{lavoro a distanza} ci ha permesso di adottare metodi migliori di
\sphinxstylestrong{comunicazione asincrona}, permettendo ai membri di lavorare indipendentemente uno dall\textquotesingle{}altro in base alle proprie
disponibilità di tempo.
\end{itemize}
\chapter{Suggerimenti relativi al corso}
\label{\detokenize{development/suggestions:suggerimenti-relativi-al-corso}}\label{\detokenize{development/suggestions::doc}}\begin{itemize}
\item {}
\sphinxAtStartPar
Il team concorda sull\textquotesingle{}\sphinxstylestrong{utilità del progetto} poiché permette di utilizzare le nozioni viste a lezione nella pratica,
facendo quindi esperienza sulle varie metodologie da adottare e le varie problematiche in cui si può incorrere.
\item {}
\sphinxAtStartPar
Il team concorda nel dire che \sphinxstylestrong{il progetto è eccessivamente corposo}:
\begin{itemize}
\item {}
\sphinxAtStartPar
Tecnicamente a 6 CFU dovrebbero corrispondere circa 125 ore di lavoro, mentre questo progetto ne ha richieste molte di più.
\item {}
\sphinxAtStartPar
Suggeriamo quindi di \sphinxstylestrong{alleggerire significativamente il carico di lavoro}, e renderlo più proporzionato ai
crediti previsti.
\end{itemize}
\item {}
\sphinxAtStartPar
Il team suggerisce di lasciare agli studenti \sphinxstylestrong{scelta completamente libera sugli strumenti da adottare}, in quanto si
sono verificati svariati problemi con quelli previsti dal corso:
\begin{itemize}
\item {}
\sphinxAtStartPar
Le istanze di Taiga, GitLab e SonarQube ospitate dall\textquotesingle{}Università si sono dimostrate inaffidabili,
portando il team a dover ospitare le proprie e quindi a perderci una fetta significativa del proprio tempo.
\begin{itemize}
\item {}
\sphinxAtStartPar
CAS è supportato solo su Debian, e lo script di installazione esegue operazioni con effetti collaterali sul
Docker del sistema host.
\item {}
\sphinxAtStartPar
L\textquotesingle{}installazione di Taiga tramite Docker Compose ha richiesto 5 ore, in quanto una race condition presente nel
file \sphinxcode{\sphinxupquote{docker\sphinxhyphen{}compose.yml}} impediva al software di raggiungere il database.
\item {}
\sphinxAtStartPar
L\textquotesingle{}installazione e manutenzione di GitLab ha richiesto 5 ore, e richiede competenze di amministrazione di sistema
avanzate che sono oltre il livello dello studente medio del terzo anno di Informatica.
\end{itemize}
\item {}
\sphinxAtStartPar
Taiga, per quanto funzionale, è un po\textquotesingle{} acerbo a livello di User Experience, il che ha portato a svariati grattacapi
durante il suo utilizzo da parte del team.
\begin{itemize}
\item {}
\sphinxAtStartPar
Inoltre, è in parte superfluo: quasi tutte le funzionalità che fornisce sono già implementate sui sistemi di issues
di GitHub e GitLab.
\end{itemize}
\item {}
\sphinxAtStartPar
Utilizzare GitLab invece che il più popolare GitHub impedisce di sfruttare la licenza gratuita o \sphinxhref{https://education.github.com/pack}{universitaria} di
numerosi strumenti di Continuous Integration e Deployment, quali \sphinxhref{https://github.com/features/actions}{GitHub Actions}, \sphinxhref{https://readthedocs.org/}{Read the Docs} e \sphinxhref{https://render.com/}{Render}.
\item {}
\sphinxAtStartPar
SonarQube, per quanto semplice da installare, è molto complesso da utilizzare: il team ha necessitato di parecchie
ore per capirne il funzionamento.
\begin{itemize}
\item {}
\sphinxAtStartPar
È forse anche superfluo: tutte le issues che ha segnalato erano già state segnalate in precedenza dal sistema di
linting di IntelliJ IDEA Ultimate.
\end{itemize}
\end{itemize}
\item {}
\sphinxAtStartPar
Il team concorda nel dire che sarebbe molto utile la \sphinxstylestrong{partecipazione diretta del prof} durante le prime fasi di
progetto, all\textquotesingle{}inizio del lavoro, per instradare il gruppo nella giusta direzione ed evitare l\textquotesingle{}effetto "salto nel buio":
\begin{itemize}
\item {}
\sphinxAtStartPar
Sarebbe stato piacevole avere una spiegazione più dettagliata delle regole dello Scrumble, e soprattutto sul come
giocarlo a distanza.
\item {}
\sphinxAtStartPar
Sarebbero state utili lezioni più specifica sui tool da utilizzare, come SonarQube.
\end{itemize}
\end{itemize}
\chapter{Meta\sphinxhyphen{}documentazione}
\label{\detokenize{code/meta/index:meta-documentazione}}\label{\detokenize{code/meta/index::doc}}
\sphinxAtStartPar
La documentazione è scritta in \sphinxhref{https://docutils.sourceforge.io/rst.html}{reStructuredText}, ed è generata con
\sphinxhref{https://www.sphinx-doc.org/en/master/}{Sphinx}.
\sphinxAtStartPar
I dati relativi alla documentazione si trovano nella directory standard \sphinxcode{\sphinxupquote{/docs}};
in particolare, le sorgenti reStructuredText si trovano in \sphinxcode{\sphinxupquote{/docs/source}},
mentre l\textquotesingle{}ultima versione compilata si trova in \sphinxcode{\sphinxupquote{/docs/build}}.
\sphinxAtStartPar
Questa struttura permetterebbe l\textquotesingle{}integrazione con lo strumento di "Continuous Documentation"
\sphinxhref{https://readthedocs.com/}{ReadTheDocs}, qualora il progetto fosse ospitato su GitHub o disponessimo di una licenza
almeno \sphinxhref{https://readthedocs.com/pricing/}{Basic}.
\section{Compilazione con IntelliJ IDEA}
\label{\detokenize{code/meta/index:compilazione-con-intellij-idea}}
\sphinxAtStartPar
È possibile compilare manualmente la documentazione con IntelliJ IDEA.
\sphinxAtStartPar
Su sistemi Linux, è disponibile la Run Configuration \sphinxcode{\sphinxupquote{Docs}}, che compilerà la versione HTML della documentazione se
eseguita.
\noindent\sphinxincludegraphics{{docsRunConfig}.png}
\section{Compilazione con GNU Make}
\label{\detokenize{code/meta/index:compilazione-con-gnu-make}}
\sphinxAtStartPar
È possibile compilare manualmente la documentazione con GNU Make.
\sphinxAtStartPar
Come prima cosa, è necessario {\hyperref[\detokenize{guide/installation:installare-le-dipendenze-python}]{\sphinxcrossref{\DUrole{std,std-ref}{Installare le dipendenze Python}}}} del progetto:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{user:g2\PYGZhy{}progetto\PYGZdl{} }poetry install
\end{sphinxVerbatim}
\sphinxAtStartPar
Poi, si entri all\textquotesingle{}interno del virtual environment:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{user:g2\PYGZhy{}progetto\PYGZdl{} }poetry shell
\end{sphinxVerbatim}
\sphinxAtStartPar
Una volta all\textquotesingle{}interno del venv, si entri nella cartella della documentazione:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{user:g2\PYGZhy{}progetto\PYGZdl{} }\PYG{n+nb}{cd} docs
\end{sphinxVerbatim}
\sphinxAtStartPar
Infine, si esegua il target \sphinxcode{\sphinxupquote{html}} del Makefile:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{user:g2\PYGZhy{}progetto/docs\PYGZdl{} }make html
\end{sphinxVerbatim}
\section{Compilazione con Windows Powershell}
\label{\detokenize{code/meta/index:compilazione-con-windows-powershell}}
\sphinxAtStartPar
È possibile compilare manualmente la documentazione con Windows Powershell.
\sphinxAtStartPar
Come prima cosa, è necessario {\hyperref[\detokenize{guide/installation:installare-le-dipendenze-python}]{\sphinxcrossref{\DUrole{std,std-ref}{Installare le dipendenze Python}}}} del progetto:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{g2\PYGZhy{}progetto\PYGZgt{}} poetry install
\end{sphinxVerbatim}
\sphinxAtStartPar
Poi, si entri all\textquotesingle{}interno del virtual environment:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{g2\PYGZhy{}progetto\PYGZgt{}} poetry shell
\end{sphinxVerbatim}
\sphinxAtStartPar
Una volta all\textquotesingle{}interno del venv, si entri nella cartella della documentazione:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{g2\PYGZhy{}progetto\PYGZgt{}} \PYG{k}{cd} docs
\end{sphinxVerbatim}
\sphinxAtStartPar
Infine, si esegua lo script \sphinxcode{\sphinxupquote{make.bat}} con il parametro \sphinxcode{\sphinxupquote{html}}:
\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{g+gp}{g2\PYGZhy{}progetto/docs\PYGZgt{}} make html
\end{sphinxVerbatim}
\chapter{Struttura del database}
\label{\detokenize{code/database/index:struttura-del-database}}\label{\detokenize{code/database/index::doc}}\index{Alert (classe built\sphinxhyphen{}in)@\spxentry{Alert}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Alert}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Alert}}}
\sphinxAtStartPar
Un alert è un allarme impostato da un utente che si "attiva" quando un numero di tweet che rispetta certe condizioni
(poste in and oppure or) supera una certa soglia, indicata dall\textquotesingle{}utente.
\sphinxAtStartPar
Ogni volta che l\textquotesingle{}alert si attiva, viene creata una "notifica", ovvero una entry nella tabella Notifications.
Questo permette di tenere conto del numero di volte in cui l\textquotesingle{}alert viene triggerato.
\sphinxAtStartPar
Gli alert sono legati al repository di appartenenza, e quando uno di essi viene allertato viene inviata una mail
all\textquotesingle{}admin e pubblicato un tweet sull\textquotesingle{}account Twitter usato per le analisi.
\sphinxAtStartPar
La tabella alert contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
id (INTEGER, PK)
&
\sphinxAtStartPar
l\textquotesingle{}identificativo dell\textquotesingle{}alert
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
name (VARCHAR, NOT NULL)
&
\sphinxAtStartPar
il nome dell\textquotesingle{}alert
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
limit (INTEGER, NOT NULL)
&
\sphinxAtStartPar
il numero di tweet che innescano l\textquotesingle{}alert
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
window\_size (INTEGER, NOT NULL)
&
\sphinxAtStartPar
numero di ore in cui il limit può venire superato
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
evaluation\_mode (ENUM/SMALLINT, NOT NULL)
&
\sphinxAtStartPar
può essere posto a all\_or oppure all\_not
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
repository\_id (INTEGER, FK, NOT NULL)
&\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Authorization (classe built\sphinxhyphen{}in)@\spxentry{Authorization}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Authorization}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Authorization}}}
\sphinxAtStartPar
Una autorizzazione è un\textquotesingle{}entità che rappresenta il permesso, concesso dal creatore del repository ad un altro utente,
di ispezionare il contenuto di un repo e di eseguire analisi su di esso.
\sphinxAtStartPar
La tabella authorization contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
rid (INTEGER, PK, FK)
&
\sphinxAtStartPar
id del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
email (VARCHAR, PK, FK)
&
\sphinxAtStartPar
email dell\textquotesingle{}utente
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Composed (classe built\sphinxhyphen{}in)@\spxentry{Composed}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Composed}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Composed}}}
\sphinxAtStartPar
Composed è una tabella le cui righe indicano l\textquotesingle{}appartenenza di un Tweet ad un certo repository.
\sphinxAtStartPar
La tabella Composed contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
rid (INTEGER, PK, FK)
&
\sphinxAtStartPar
id del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
snowflake (VARCHAR, PK, FK)
&
\sphinxAtStartPar
id del tweet
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Condition (classe built\sphinxhyphen{}in)@\spxentry{Condition}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Condition}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Condition}}}
\sphinxAtStartPar
Una condizione è un elemento che viene usato da repository e alert per cercare e classificare i tweet.
\sphinxAtStartPar
Le condizioni possono essere di diversi tipi:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxstylestrong{hashtag}: valore \sphinxcode{\sphinxupquote{0}}, richiede che il tweet contenga un dato hashtag
\item {}
\sphinxAtStartPar
\sphinxstylestrong{time}: valore \sphinxcode{\sphinxupquote{2}}, richiede che il tweet sia stato pubblicato prima o dopo una certa data
\item {}
\sphinxAtStartPar
\sphinxstylestrong{coordinates}: valore \sphinxcode{\sphinxupquote{3}}, richiede che il tweet sia stato pubblicato entro un certo raggio da delle
coordinate
\item {}
\sphinxAtStartPar
\sphinxstylestrong{user}: valore \sphinxcode{\sphinxupquote{5}}, richiede che il tweet sia stato pubblicato da un dato utente
\end{itemize}
\sphinxAtStartPar
La tabella condition contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
id (INTEGER, PK)
&
\sphinxAtStartPar
id della condition
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
type (ENUM/SMALLINT, NOT NULL)
&
\sphinxAtStartPar
tipo del contenuto
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
content (VARCHAR, NOT NULL)
&
\sphinxAtStartPar
contenuto della condition
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
repository\_id (INTEGER, FK, NOT NULL)
&\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Contains (classe built\sphinxhyphen{}in)@\spxentry{Contains}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Contains}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Contains}}}
\sphinxAtStartPar
Contains è una tabella le cui righe indicano la presenza di una certa condition rispetto ad un certo tweet.
\sphinxAtStartPar
La tabella contains contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
cid (INTEGER, PK, FK)
&
\sphinxAtStartPar
id della condition
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
snowflake (VARCHAR, PK, FK)
&
\sphinxAtStartPar
id del tweet
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{MadeOf (classe built\sphinxhyphen{}in)@\spxentry{MadeOf}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:MadeOf}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{MadeOf}}}
\sphinxAtStartPar
MadeOf è una tabella le cui righe indicano il legame tra un alert e una certa condition.
\sphinxAtStartPar
La tabella madeof contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
aid (INTEGER, PK, FK)
&
\sphinxAtStartPar
id dell\textquotesingle{}alert
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
cid (INTEGER, PK, FK)
&
\sphinxAtStartPar
id della condition
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Notification (classe built\sphinxhyphen{}in)@\spxentry{Notification}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Notification}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Notification}}}
\sphinxAtStartPar
Una notification è un\textquotesingle{}entità che consente di tenere traccia del momento in cui un certo alert si è attivato
per l\textquotesingle{}ultima volta.
\sphinxAtStartPar
La tabella notification contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
id (INTEGER, PK)
&
\sphinxAtStartPar
id della notifica
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
ora (TIMESTAMP, NOT NULL)
&
\sphinxAtStartPar
timestamp di attivazione
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
alert\_id (INTEGER, FK, NOT NULL)
&\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Repository (classe built\sphinxhyphen{}in)@\spxentry{Repository}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Repository}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Repository}}}
\sphinxAtStartPar
Un repository è un "contenitore" di tweet, a cui sono legati alert, autorizzazioni di lettura e condizioni.
\sphinxAtStartPar
Le condizioni possono essere messe in and oppure or, inoltre un repository può venire archiviato prima divenire
eliminato. Quando un repository non è archiviato, questo viene riempito di tweet su base oraria, cosa che non
accade se viene archiviato.
\sphinxAtStartPar
La tabella repository contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
id (INTEGER, PK)
&
\sphinxAtStartPar
id del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
name (VARCHAR, NOT NULL)
&
\sphinxAtStartPar
nome del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
start (TIMESTAMP)
&
\sphinxAtStartPar
timestamp di partenza del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
end (TIMESTAMP)
&
\sphinxAtStartPar
timestamp di chiusura del repository
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
is\_active (BOOLEAN, NOT NULL)
&
\sphinxAtStartPar
flag per segnalare se il repo è aperto o meno
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
evaluation\_mode (ENUM/SMALLINT, NOT NULL)
&
\sphinxAtStartPar
può essere posto a all\_or oppure all\_not
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
owner\_id (VARCHAR, FK, NOT NULL)
&
\sphinxAtStartPar
email del proprietario
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
is\_deleted (BOOLEAN, NOT NULL)
&
\sphinxAtStartPar
flag per segnalare se l\textquotesingle{}oggetto è eliminato o meno
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{Tweet (classe built\sphinxhyphen{}in)@\spxentry{Tweet}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:Tweet}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Tweet}}}
\sphinxAtStartPar
Un tweet è un\textquotesingle{}entità che viene raccolta dal componente crawler, e quando viene inserita nella base di dati viene
legata ad un repository e alle condition che contiene. Un tweet contiene informazioni relativamente a chi l\textquotesingle{}ha
creato, eventuali immagini, il tempo di creazione, il tempo di inserimento nel db e l\textquotesingle{}opzionale posizione legata
al tweet.
\sphinxAtStartPar
La tabella tweet contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
snowflake (VARCHAR, PK)
&
\sphinxAtStartPar
id univoco del tweet
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
content (VARCHAR)
&
\sphinxAtStartPar
contenuto del tweet
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
location (VARCHAR)
&
\sphinxAtStartPar
stringa contenente informazioni sulla posizione
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
place (VARCHAR)
&
\sphinxAtStartPar
riservato per sviluppi futuri
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
poster (VARCHAR)
&
\sphinxAtStartPar
informazioni sull\textquotesingle{}utente che ha creato il tweet
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
insert\_time (TIMESTAMP, NOT NULL)
&
\sphinxAtStartPar
timestamp dell\textquotesingle{}inserimento del tweet
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
image\_url (VARCHAR)
&
\sphinxAtStartPar
link alle immagini, se presenti
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
post\_time (TIMESTAMP)
&
\sphinxAtStartPar
timestamp relativo all\textquotesingle{}invio del tweet
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\index{User (classe built\sphinxhyphen{}in)@\spxentry{User}\spxextra{classe built\sphinxhyphen{}in}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/database/index:User}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{User}}}
\sphinxAtStartPar
Uno user è l\textquotesingle{}utilizzatore della piattaforma.
\sphinxAtStartPar
E\textquotesingle{} presente di default un utente admin, il quale può creare nuovi utenti.
\sphinxAtStartPar
La tabella user contiene le seguenti colonne:
\begin{savenotes}\sphinxattablestart
\raggedright
\begin{tabulary}{\linewidth}[t]{|T|T|}
\hline
\sphinxstyletheadfamily &\sphinxstyletheadfamily
\sphinxAtStartPar
Definizioni
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
email (VARCHAR, PK)
&
\sphinxAtStartPar
email dell\textquotesingle{}utente
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
username (VARCHAR, NOT NULL)
&
\sphinxAtStartPar
username dell\textquotesingle{}utente
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
password (BYTEARRAY, NOT NULL)
&
\sphinxAtStartPar
sale della password, codificata usando l\textquotesingle{}algoritmo bcrypt
\\
\hline\sphinxstyletheadfamily
\sphinxAtStartPar
isAdmin (BOOLEAN, NOT NULL)
&
\sphinxAtStartPar
true se l\textquotesingle{}utente è admin
\\
\hline
\end{tabulary}
\par
\sphinxattableend\end{savenotes}
\end{fulllineitems}
\chapter{\sphinxstyleliteralintitle{\sphinxupquote{nest\_backend}} \sphinxhyphen{} Web API in Python}
\label{\detokenize{code/backend/index:module-nest_backend}}\label{\detokenize{code/backend/index:nest-backend-web-api-in-python}}\label{\detokenize{code/backend/index::doc}}\index{modulo@\spxentry{modulo}!nest\_backend@\spxentry{nest\_backend}}\index{nest\_backend@\spxentry{nest\_backend}!modulo@\spxentry{modulo}}
\section{\sphinxstyleliteralintitle{\sphinxupquote{.gestione}} \sphinxhyphen{} Metodi di utility}
\label{\detokenize{code/backend/index:module-nest_backend.gestione}}\label{\detokenize{code/backend/index:gestione-metodi-di-utility}}\index{modulo@\spxentry{modulo}!nest\_backend.gestione@\spxentry{nest\_backend.gestione}}\index{nest\_backend.gestione@\spxentry{nest\_backend.gestione}!modulo@\spxentry{modulo}}
\sphinxAtStartPar
Gestione adds many fancy thingamajigs to the flask application, such as a login system and such.
\index{authenticate() (nel modulo nest\_backend.gestione)@\spxentry{authenticate()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.authenticate}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{authenticate}}}{\emph{\DUrole{n}{username}}, \emph{\DUrole{n}{password}}}{}
\sphinxAtStartPar
Authentication method. It checks if the combination of username+password is a valid match. If not, it returns None.
:param username: the user\textquotesingle{}s email
:param password: the user\textquotesingle{}s password
:return: if the credentials are correct, it returns the user. Else, it returns None.
\end{fulllineitems}
\index{identity() (nel modulo nest\_backend.gestione)@\spxentry{identity()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.identity}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{identity}}}{\emph{\DUrole{n}{payload}}}{}
\sphinxAtStartPar
Authentication verification method. It checks if the user is in fact registered on the server.
It is required by Flask\sphinxhyphen{}JWT, and shouldnt be used alone.
:param payload: the reqest payload.
:return: an User or None. It depends whether the user is actually registered on the platform.
\end{fulllineitems}
\index{gen\_password() (nel modulo nest\_backend.gestione)@\spxentry{gen\_password()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.gen_password}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{gen\_password}}}{\emph{\DUrole{n}{password}}}{}
\sphinxAtStartPar
It generates an hashed password.
:param password: the password that needs to be hashed.
:return: the password\textquotesingle{}s hash.
\end{fulllineitems}
\index{find\_user() (nel modulo nest\_backend.gestione)@\spxentry{find\_user()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.find_user}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{find\_user}}}{\emph{\DUrole{n}{email}}}{}
\end{fulllineitems}
\index{admin\_or\_403() (nel modulo nest\_backend.gestione)@\spxentry{admin\_or\_403()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.admin_or_403}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{admin\_or\_403}}}{\emph{\DUrole{n}{f}}}{}
\end{fulllineitems}
\index{repository\_auth() (nel modulo nest\_backend.gestione)@\spxentry{repository\_auth()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.repository_auth}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{repository\_auth}}}{\emph{\DUrole{n}{f}}}{}
\end{fulllineitems}
\index{json\_request\_authorizer() (nel modulo nest\_backend.gestione)@\spxentry{json\_request\_authorizer()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.json_request_authorizer}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{json\_request\_authorizer}}}{\emph{\DUrole{n}{json}}, \emph{\DUrole{n}{serializable}}}{}
\end{fulllineitems}
\index{json\_error() (nel modulo nest\_backend.gestione)@\spxentry{json\_error()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.json_error}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{json\_error}}}{\emph{\DUrole{n}{msg}}, \emph{\DUrole{n}{code}\DUrole{o}{=}\DUrole{default_value}{\textquotesingle{}errorUnknownError\textquotesingle{}}}}{}
\sphinxAtStartPar
Returns an error in json format
:param code: the code of the error according to the spec.
:param msg: the error message.
:return: a json formatted string.
\end{fulllineitems}
\index{json\_success() (nel modulo nest\_backend.gestione)@\spxentry{json\_success()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.json_success}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{json\_success}}}{\emph{\DUrole{n}{data}}}{}
\sphinxAtStartPar
An happy little function. Its happy because the operation was successful.
:param data: the thing you want to be returned
:return: a json formatted string
\end{fulllineitems}
\index{error\_handler() (nel modulo nest\_backend.gestione)@\spxentry{error\_handler()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.error_handler}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{error\_handler}}}{\emph{\DUrole{n}{e}}}{}
\end{fulllineitems}
\index{hashtag\_validator() (nel modulo nest\_backend.gestione)@\spxentry{hashtag\_validator()}\spxextra{nel modulo nest\_backend.gestione}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.gestione.hashtag_validator}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_backend.gestione.}}\sphinxbfcode{\sphinxupquote{hashtag\_validator}}}{\emph{\DUrole{n}{hashtag}}}{}
\end{fulllineitems}
\section{\sphinxstyleliteralintitle{\sphinxupquote{.database}} \sphinxhyphen{} Database}
\label{\detokenize{code/backend/index:module-nest_backend.database}}\label{\detokenize{code/backend/index:database-database}}\index{modulo@\spxentry{modulo}!nest\_backend.database@\spxentry{nest\_backend.database}}\index{nest\_backend.database@\spxentry{nest\_backend.database}!modulo@\spxentry{modulo}}
\sphinxAtStartPar
This module imports all the tables and the declarative base
\subsection{\sphinxstyleliteralintitle{\sphinxupquote{.base}} \sphinxhyphen{} Estensione flask}
\label{\detokenize{code/backend/index:module-nest_backend.database.base}}\label{\detokenize{code/backend/index:base-estensione-flask}}\index{modulo@\spxentry{modulo}!nest\_backend.database.base@\spxentry{nest\_backend.database.base}}\index{nest\_backend.database.base@\spxentry{nest\_backend.database.base}!modulo@\spxentry{modulo}}
\subsection{\sphinxstyleliteralintitle{\sphinxupquote{.tables}} \sphinxhyphen{} Tabelle}
\label{\detokenize{code/backend/index:module-nest_backend.database.tables}}\label{\detokenize{code/backend/index:tables-tabelle}}\index{modulo@\spxentry{modulo}!nest\_backend.database.tables@\spxentry{nest\_backend.database.tables}}\index{nest\_backend.database.tables@\spxentry{nest\_backend.database.tables}!modulo@\spxentry{modulo}}
\sphinxAtStartPar
This module contains all database classes.
\index{Alert (classe in nest\_backend.database.tables)@\spxentry{Alert}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Alert}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{id (nest\_backend.database.tables.Alert attributo)@\spxentry{id}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.id}}\pysigline{\sphinxbfcode{\sphinxupquote{id}}}
\end{fulllineitems}
\index{name (nest\_backend.database.tables.Alert attributo)@\spxentry{name}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.name}}\pysigline{\sphinxbfcode{\sphinxupquote{name}}}
\end{fulllineitems}
\index{limit (nest\_backend.database.tables.Alert attributo)@\spxentry{limit}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.limit}}\pysigline{\sphinxbfcode{\sphinxupquote{limit}}}
\end{fulllineitems}
\index{window\_size (nest\_backend.database.tables.Alert attributo)@\spxentry{window\_size}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.window_size}}\pysigline{\sphinxbfcode{\sphinxupquote{window\_size}}}
\end{fulllineitems}
\index{evaluation\_mode (nest\_backend.database.tables.Alert attributo)@\spxentry{evaluation\_mode}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.evaluation_mode}}\pysigline{\sphinxbfcode{\sphinxupquote{evaluation\_mode}}}
\end{fulllineitems}
\index{repository\_id (nest\_backend.database.tables.Alert attributo)@\spxentry{repository\_id}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.repository_id}}\pysigline{\sphinxbfcode{\sphinxupquote{repository\_id}}}
\end{fulllineitems}
\index{repository (nest\_backend.database.tables.Alert attributo)@\spxentry{repository}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.repository}}\pysigline{\sphinxbfcode{\sphinxupquote{repository}}}
\end{fulllineitems}
\index{notifications (nest\_backend.database.tables.Alert attributo)@\spxentry{notifications}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.notifications}}\pysigline{\sphinxbfcode{\sphinxupquote{notifications}}}
\end{fulllineitems}
\index{conditions (nest\_backend.database.tables.Alert attributo)@\spxentry{conditions}\spxextra{nest\_backend.database.tables.Alert attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.conditions}}\pysigline{\sphinxbfcode{\sphinxupquote{conditions}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Alert metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Alert metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Alert metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Alert metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Alert.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Authorization (classe in nest\_backend.database.tables)@\spxentry{Authorization}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Authorization}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{rid (nest\_backend.database.tables.Authorization attributo)@\spxentry{rid}\spxextra{nest\_backend.database.tables.Authorization attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.rid}}\pysigline{\sphinxbfcode{\sphinxupquote{rid}}}
\end{fulllineitems}
\index{email (nest\_backend.database.tables.Authorization attributo)@\spxentry{email}\spxextra{nest\_backend.database.tables.Authorization attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.email}}\pysigline{\sphinxbfcode{\sphinxupquote{email}}}
\end{fulllineitems}
\index{repository (nest\_backend.database.tables.Authorization attributo)@\spxentry{repository}\spxextra{nest\_backend.database.tables.Authorization attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.repository}}\pysigline{\sphinxbfcode{\sphinxupquote{repository}}}
\end{fulllineitems}
\index{user (nest\_backend.database.tables.Authorization attributo)@\spxentry{user}\spxextra{nest\_backend.database.tables.Authorization attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.user}}\pysigline{\sphinxbfcode{\sphinxupquote{user}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Authorization metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Authorization metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Authorization metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Authorization metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Authorization.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Composed (classe in nest\_backend.database.tables)@\spxentry{Composed}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Composed}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{rid (nest\_backend.database.tables.Composed attributo)@\spxentry{rid}\spxextra{nest\_backend.database.tables.Composed attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed.rid}}\pysigline{\sphinxbfcode{\sphinxupquote{rid}}}
\end{fulllineitems}
\index{snowflake (nest\_backend.database.tables.Composed attributo)@\spxentry{snowflake}\spxextra{nest\_backend.database.tables.Composed attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed.snowflake}}\pysigline{\sphinxbfcode{\sphinxupquote{snowflake}}}
\end{fulllineitems}
\index{repository (nest\_backend.database.tables.Composed attributo)@\spxentry{repository}\spxextra{nest\_backend.database.tables.Composed attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed.repository}}\pysigline{\sphinxbfcode{\sphinxupquote{repository}}}
\end{fulllineitems}
\index{tweet (nest\_backend.database.tables.Composed attributo)@\spxentry{tweet}\spxextra{nest\_backend.database.tables.Composed attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed.tweet}}\pysigline{\sphinxbfcode{\sphinxupquote{tweet}}}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Composed metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Composed metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Composed.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Condition (classe in nest\_backend.database.tables)@\spxentry{Condition}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Condition}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{id (nest\_backend.database.tables.Condition attributo)@\spxentry{id}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.id}}\pysigline{\sphinxbfcode{\sphinxupquote{id}}}
\end{fulllineitems}
\index{type (nest\_backend.database.tables.Condition attributo)@\spxentry{type}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.type}}\pysigline{\sphinxbfcode{\sphinxupquote{type}}}
\end{fulllineitems}
\index{content (nest\_backend.database.tables.Condition attributo)@\spxentry{content}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.content}}\pysigline{\sphinxbfcode{\sphinxupquote{content}}}
\end{fulllineitems}
\index{repository\_id (nest\_backend.database.tables.Condition attributo)@\spxentry{repository\_id}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.repository_id}}\pysigline{\sphinxbfcode{\sphinxupquote{repository\_id}}}
\end{fulllineitems}
\index{repository (nest\_backend.database.tables.Condition attributo)@\spxentry{repository}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.repository}}\pysigline{\sphinxbfcode{\sphinxupquote{repository}}}
\end{fulllineitems}
\index{tweets (nest\_backend.database.tables.Condition attributo)@\spxentry{tweets}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.tweets}}\pysigline{\sphinxbfcode{\sphinxupquote{tweets}}}
\end{fulllineitems}
\index{alerts (nest\_backend.database.tables.Condition attributo)@\spxentry{alerts}\spxextra{nest\_backend.database.tables.Condition attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.alerts}}\pysigline{\sphinxbfcode{\sphinxupquote{alerts}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Condition metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Condition metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Condition metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Condition metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Condition.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Contains (classe in nest\_backend.database.tables)@\spxentry{Contains}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Contains}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{cid (nest\_backend.database.tables.Contains attributo)@\spxentry{cid}\spxextra{nest\_backend.database.tables.Contains attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains.cid}}\pysigline{\sphinxbfcode{\sphinxupquote{cid}}}
\end{fulllineitems}
\index{snowflake (nest\_backend.database.tables.Contains attributo)@\spxentry{snowflake}\spxextra{nest\_backend.database.tables.Contains attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains.snowflake}}\pysigline{\sphinxbfcode{\sphinxupquote{snowflake}}}
\end{fulllineitems}
\index{condition (nest\_backend.database.tables.Contains attributo)@\spxentry{condition}\spxextra{nest\_backend.database.tables.Contains attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains.condition}}\pysigline{\sphinxbfcode{\sphinxupquote{condition}}}
\end{fulllineitems}
\index{tweet (nest\_backend.database.tables.Contains attributo)@\spxentry{tweet}\spxextra{nest\_backend.database.tables.Contains attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains.tweet}}\pysigline{\sphinxbfcode{\sphinxupquote{tweet}}}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Contains metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Contains metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Contains.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Notification (classe in nest\_backend.database.tables)@\spxentry{Notification}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Notification}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{id (nest\_backend.database.tables.Notification attributo)@\spxentry{id}\spxextra{nest\_backend.database.tables.Notification attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.id}}\pysigline{\sphinxbfcode{\sphinxupquote{id}}}
\end{fulllineitems}
\index{ora (nest\_backend.database.tables.Notification attributo)@\spxentry{ora}\spxextra{nest\_backend.database.tables.Notification attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.ora}}\pysigline{\sphinxbfcode{\sphinxupquote{ora}}}
\end{fulllineitems}
\index{alert\_id (nest\_backend.database.tables.Notification attributo)@\spxentry{alert\_id}\spxextra{nest\_backend.database.tables.Notification attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.alert_id}}\pysigline{\sphinxbfcode{\sphinxupquote{alert\_id}}}
\end{fulllineitems}
\index{alert (nest\_backend.database.tables.Notification attributo)@\spxentry{alert}\spxextra{nest\_backend.database.tables.Notification attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.alert}}\pysigline{\sphinxbfcode{\sphinxupquote{alert}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Notification metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Notification metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Notification metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Notification metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Notification.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Repository (classe in nest\_backend.database.tables)@\spxentry{Repository}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Repository}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{id (nest\_backend.database.tables.Repository attributo)@\spxentry{id}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.id}}\pysigline{\sphinxbfcode{\sphinxupquote{id}}}
\end{fulllineitems}
\index{name (nest\_backend.database.tables.Repository attributo)@\spxentry{name}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.name}}\pysigline{\sphinxbfcode{\sphinxupquote{name}}}
\end{fulllineitems}
\index{start (nest\_backend.database.tables.Repository attributo)@\spxentry{start}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.start}}\pysigline{\sphinxbfcode{\sphinxupquote{start}}}
\end{fulllineitems}
\index{end (nest\_backend.database.tables.Repository attributo)@\spxentry{end}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.end}}\pysigline{\sphinxbfcode{\sphinxupquote{end}}}
\end{fulllineitems}
\index{is\_active (nest\_backend.database.tables.Repository attributo)@\spxentry{is\_active}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.is_active}}\pysigline{\sphinxbfcode{\sphinxupquote{is\_active}}}
\end{fulllineitems}
\index{is\_deleted (nest\_backend.database.tables.Repository attributo)@\spxentry{is\_deleted}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.is_deleted}}\pysigline{\sphinxbfcode{\sphinxupquote{is\_deleted}}}
\end{fulllineitems}
\index{evaluation\_mode (nest\_backend.database.tables.Repository attributo)@\spxentry{evaluation\_mode}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.evaluation_mode}}\pysigline{\sphinxbfcode{\sphinxupquote{evaluation\_mode}}}
\end{fulllineitems}
\index{owner\_id (nest\_backend.database.tables.Repository attributo)@\spxentry{owner\_id}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.owner_id}}\pysigline{\sphinxbfcode{\sphinxupquote{owner\_id}}}
\end{fulllineitems}
\index{owner (nest\_backend.database.tables.Repository attributo)@\spxentry{owner}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.owner}}\pysigline{\sphinxbfcode{\sphinxupquote{owner}}}
\end{fulllineitems}
\index{authorizations (nest\_backend.database.tables.Repository attributo)@\spxentry{authorizations}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.authorizations}}\pysigline{\sphinxbfcode{\sphinxupquote{authorizations}}}
\end{fulllineitems}
\index{tweets (nest\_backend.database.tables.Repository attributo)@\spxentry{tweets}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.tweets}}\pysigline{\sphinxbfcode{\sphinxupquote{tweets}}}
\end{fulllineitems}
\index{alerts (nest\_backend.database.tables.Repository attributo)@\spxentry{alerts}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.alerts}}\pysigline{\sphinxbfcode{\sphinxupquote{alerts}}}
\end{fulllineitems}
\index{conditions (nest\_backend.database.tables.Repository attributo)@\spxentry{conditions}\spxextra{nest\_backend.database.tables.Repository attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.conditions}}\pysigline{\sphinxbfcode{\sphinxupquote{conditions}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Repository metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Repository metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Repository metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Repository metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Repository.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{Tweet (classe in nest\_backend.database.tables)@\spxentry{Tweet}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{Tweet}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{snowflake (nest\_backend.database.tables.Tweet attributo)@\spxentry{snowflake}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.snowflake}}\pysigline{\sphinxbfcode{\sphinxupquote{snowflake}}}
\end{fulllineitems}
\index{content (nest\_backend.database.tables.Tweet attributo)@\spxentry{content}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.content}}\pysigline{\sphinxbfcode{\sphinxupquote{content}}}
\end{fulllineitems}
\index{location (nest\_backend.database.tables.Tweet attributo)@\spxentry{location}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.location}}\pysigline{\sphinxbfcode{\sphinxupquote{location}}}
\end{fulllineitems}
\index{place (nest\_backend.database.tables.Tweet attributo)@\spxentry{place}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.place}}\pysigline{\sphinxbfcode{\sphinxupquote{place}}}
\end{fulllineitems}
\index{poster (nest\_backend.database.tables.Tweet attributo)@\spxentry{poster}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.poster}}\pysigline{\sphinxbfcode{\sphinxupquote{poster}}}
\end{fulllineitems}
\index{insert\_time (nest\_backend.database.tables.Tweet attributo)@\spxentry{insert\_time}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.insert_time}}\pysigline{\sphinxbfcode{\sphinxupquote{insert\_time}}}
\end{fulllineitems}
\index{post\_time (nest\_backend.database.tables.Tweet attributo)@\spxentry{post\_time}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.post_time}}\pysigline{\sphinxbfcode{\sphinxupquote{post\_time}}}
\end{fulllineitems}
\index{image\_url (nest\_backend.database.tables.Tweet attributo)@\spxentry{image\_url}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.image_url}}\pysigline{\sphinxbfcode{\sphinxupquote{image\_url}}}
\end{fulllineitems}
\index{repositories (nest\_backend.database.tables.Tweet attributo)@\spxentry{repositories}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.repositories}}\pysigline{\sphinxbfcode{\sphinxupquote{repositories}}}
\end{fulllineitems}
\index{conditions (nest\_backend.database.tables.Tweet attributo)@\spxentry{conditions}\spxextra{nest\_backend.database.tables.Tweet attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.conditions}}\pysigline{\sphinxbfcode{\sphinxupquote{conditions}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.Tweet metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.Tweet metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.Tweet metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.Tweet metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.Tweet.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{User (classe in nest\_backend.database.tables)@\spxentry{User}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{User}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{email (nest\_backend.database.tables.User attributo)@\spxentry{email}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.email}}\pysigline{\sphinxbfcode{\sphinxupquote{email}}}
\end{fulllineitems}
\index{username (nest\_backend.database.tables.User attributo)@\spxentry{username}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.username}}\pysigline{\sphinxbfcode{\sphinxupquote{username}}}
\end{fulllineitems}
\index{password (nest\_backend.database.tables.User attributo)@\spxentry{password}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.password}}\pysigline{\sphinxbfcode{\sphinxupquote{password}}}
\end{fulllineitems}
\index{isAdmin (nest\_backend.database.tables.User attributo)@\spxentry{isAdmin}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.isAdmin}}\pysigline{\sphinxbfcode{\sphinxupquote{isAdmin}}}
\end{fulllineitems}
\index{owner\_of (nest\_backend.database.tables.User attributo)@\spxentry{owner\_of}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.owner_of}}\pysigline{\sphinxbfcode{\sphinxupquote{owner\_of}}}
\end{fulllineitems}
\index{authorizations (nest\_backend.database.tables.User attributo)@\spxentry{authorizations}\spxextra{nest\_backend.database.tables.User attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.authorizations}}\pysigline{\sphinxbfcode{\sphinxupquote{authorizations}}}
\end{fulllineitems}
\index{to\_json() (nest\_backend.database.tables.User metodo)@\spxentry{to\_json()}\spxextra{nest\_backend.database.tables.User metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.to_json}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{to\_json}}}{}{}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.User metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.User metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.User.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{MadeOf (classe in nest\_backend.database.tables)@\spxentry{MadeOf}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{MadeOf}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxcode{\sphinxupquote{sqlalchemy.orm.decl\_api.Model}}
\end{quote}
\index{aid (nest\_backend.database.tables.MadeOf attributo)@\spxentry{aid}\spxextra{nest\_backend.database.tables.MadeOf attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf.aid}}\pysigline{\sphinxbfcode{\sphinxupquote{aid}}}
\end{fulllineitems}
\index{cid (nest\_backend.database.tables.MadeOf attributo)@\spxentry{cid}\spxextra{nest\_backend.database.tables.MadeOf attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf.cid}}\pysigline{\sphinxbfcode{\sphinxupquote{cid}}}
\end{fulllineitems}
\index{alert (nest\_backend.database.tables.MadeOf attributo)@\spxentry{alert}\spxextra{nest\_backend.database.tables.MadeOf attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf.alert}}\pysigline{\sphinxbfcode{\sphinxupquote{alert}}}
\end{fulllineitems}
\index{condition (nest\_backend.database.tables.MadeOf attributo)@\spxentry{condition}\spxextra{nest\_backend.database.tables.MadeOf attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf.condition}}\pysigline{\sphinxbfcode{\sphinxupquote{condition}}}
\end{fulllineitems}
\index{\_\_init\_\_() (nest\_backend.database.tables.MadeOf metodo)@\spxentry{\_\_init\_\_()}\spxextra{nest\_backend.database.tables.MadeOf metodo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.MadeOf.__init__}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{\_\_init\_\_}}}{\emph{\DUrole{o}{**}\DUrole{n}{kwargs}}}{}
\sphinxAtStartPar
A simple constructor that allows initialization from kwargs.
\sphinxAtStartPar
Sets attributes on the constructed instance using the names and
values in \sphinxcode{\sphinxupquote{kwargs}}.
\sphinxAtStartPar
Only keys that are present as
attributes of the instance\textquotesingle{}s class are allowed. These could be,
for example, any mapped columns or relationships.
\end{fulllineitems}
\end{fulllineitems}
\index{ConditionType (classe in nest\_backend.database.tables)@\spxentry{ConditionType}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{ConditionType}}}{\emph{\DUrole{n}{value}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxhref{https://docs.python.org/3.8/library/enum.html\#enum.Enum}{\sphinxcode{\sphinxupquote{enum.Enum}}}
\end{quote}
\sphinxAtStartPar
Vedi \sphinxhref{https://gitlab.steffo.eu/nest/g2-progetto/-/wikis/Specifica-delle-Conditions}{Specifica delle Conditions su
GitLab} .
\index{hashtag (nest\_backend.database.tables.ConditionType attributo)@\spxentry{hashtag}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.hashtag}}\pysigline{\sphinxbfcode{\sphinxupquote{hashtag}}\sphinxbfcode{\sphinxupquote{ = 0}}}
\end{fulllineitems}
\index{location (nest\_backend.database.tables.ConditionType attributo)@\spxentry{location}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.location}}\pysigline{\sphinxbfcode{\sphinxupquote{location}}\sphinxbfcode{\sphinxupquote{ = 1}}}
\end{fulllineitems}
\index{time (nest\_backend.database.tables.ConditionType attributo)@\spxentry{time}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.time}}\pysigline{\sphinxbfcode{\sphinxupquote{time}}\sphinxbfcode{\sphinxupquote{ = 2}}}
\end{fulllineitems}
\index{coordinates (nest\_backend.database.tables.ConditionType attributo)@\spxentry{coordinates}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.coordinates}}\pysigline{\sphinxbfcode{\sphinxupquote{coordinates}}\sphinxbfcode{\sphinxupquote{ = 3}}}
\end{fulllineitems}
\index{place (nest\_backend.database.tables.ConditionType attributo)@\spxentry{place}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.place}}\pysigline{\sphinxbfcode{\sphinxupquote{place}}\sphinxbfcode{\sphinxupquote{ = 4}}}
\end{fulllineitems}
\index{user (nest\_backend.database.tables.ConditionType attributo)@\spxentry{user}\spxextra{nest\_backend.database.tables.ConditionType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionType.user}}\pysigline{\sphinxbfcode{\sphinxupquote{user}}\sphinxbfcode{\sphinxupquote{ = 5}}}
\end{fulllineitems}
\end{fulllineitems}
\index{OperationType (classe in nest\_backend.database.tables)@\spxentry{OperationType}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.OperationType}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{OperationType}}}{\emph{\DUrole{n}{value}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxhref{https://docs.python.org/3.8/library/enum.html\#enum.Enum}{\sphinxcode{\sphinxupquote{enum.Enum}}}
\end{quote}
\sphinxAtStartPar
An enumeration.
\index{assign (nest\_backend.database.tables.OperationType attributo)@\spxentry{assign}\spxextra{nest\_backend.database.tables.OperationType attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.OperationType.assign}}\pysigline{\sphinxbfcode{\sphinxupquote{assign}}\sphinxbfcode{\sphinxupquote{ = 3}}}
\end{fulllineitems}
\end{fulllineitems}
\index{ConditionMode (classe in nest\_backend.database.tables)@\spxentry{ConditionMode}\spxextra{classe in nest\_backend.database.tables}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionMode}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{nest\_backend.database.tables.}}\sphinxbfcode{\sphinxupquote{ConditionMode}}}{\emph{\DUrole{n}{value}}}{}~\begin{quote}
\sphinxAtStartPar
Basi: \sphinxhref{https://docs.python.org/3.8/library/enum.html\#enum.Enum}{\sphinxcode{\sphinxupquote{enum.Enum}}}
\end{quote}
\sphinxAtStartPar
An enumeration.
\index{all\_or (nest\_backend.database.tables.ConditionMode attributo)@\spxentry{all\_or}\spxextra{nest\_backend.database.tables.ConditionMode attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionMode.all_or}}\pysigline{\sphinxbfcode{\sphinxupquote{all\_or}}\sphinxbfcode{\sphinxupquote{ = 0}}}
\end{fulllineitems}
\index{all\_and (nest\_backend.database.tables.ConditionMode attributo)@\spxentry{all\_and}\spxextra{nest\_backend.database.tables.ConditionMode attributo}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/backend/index:nest_backend.database.tables.ConditionMode.all_and}}\pysigline{\sphinxbfcode{\sphinxupquote{all\_and}}\sphinxbfcode{\sphinxupquote{ = 1}}}
\end{fulllineitems}
\end{fulllineitems}
\section{\sphinxstyleliteralintitle{\sphinxupquote{.routes}} \sphinxhyphen{} Percorsi API}
\label{\detokenize{code/backend/index:routes-percorsi-api}}
\begin{sphinxadmonition}{note}{Nota:}
\sphinxAtStartPar
La documentazione dei percorsi API è gestita da Swagger UI, disponibile a \sphinxcode{\sphinxupquote{/docs}} una volta che il webserver
del backend è avviato.
\end{sphinxadmonition}
\sphinxAtStartPar
Si allega una stampa dell\textquotesingle{}interfaccia swagger:
\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxcode{\sphinxupquote{Schermata di swagger}}
\end{itemize}
\chapter{\sphinxstyleliteralintitle{\sphinxupquote{nest\_crawler}} \sphinxhyphen{} Crawler in Python}
\label{\detokenize{code/crawler/index:module-nest_crawler}}\label{\detokenize{code/crawler/index:nest-crawler-crawler-in-python}}\label{\detokenize{code/crawler/index::doc}}\index{modulo@\spxentry{modulo}!nest\_crawler@\spxentry{nest\_crawler}}\index{nest\_crawler@\spxentry{nest\_crawler}!modulo@\spxentry{modulo}}\index{associate\_condition\_tweet() (nel modulo nest\_crawler)@\spxentry{associate\_condition\_tweet()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.associate_condition_tweet}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{associate\_condition\_tweet}}}{\emph{\DUrole{n}{conditions\_type}}, \emph{\DUrole{n}{tweet}}}{}
\end{fulllineitems}
\index{authenticate() (nel modulo nest\_crawler)@\spxentry{authenticate()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.authenticate}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{authenticate}}}{}{}
\end{fulllineitems}
\index{is\_coordinate\_inside\_bounding\_box() (nel modulo nest\_crawler)@\spxentry{is\_coordinate\_inside\_bounding\_box()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.is_coordinate_inside_bounding_box}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{is\_coordinate\_inside\_bounding\_box}}}{\emph{\DUrole{n}{latitude}}, \emph{\DUrole{n}{longitude}}, \emph{\DUrole{n}{radius}}, \emph{\DUrole{n}{tweet\_latitude}}, \emph{\DUrole{n}{tweet\_longitude}}}{}
\end{fulllineitems}
\index{is\_repo\_alert\_triggered() (nel modulo nest\_crawler)@\spxentry{is\_repo\_alert\_triggered()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.is_repo_alert_triggered}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{is\_repo\_alert\_triggered}}}{\emph{\DUrole{n}{repository\_id}}}{}
\end{fulllineitems}
\index{search\_repo\_conditions() (nel modulo nest\_crawler)@\spxentry{search\_repo\_conditions()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.search_repo_conditions}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{search\_repo\_conditions}}}{\emph{\DUrole{n}{repository\_id}}}{}
\end{fulllineitems}
\index{send\_notification\_email() (nel modulo nest\_crawler)@\spxentry{send\_notification\_email()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.send_notification_email}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{send\_notification\_email}}}{\emph{\DUrole{n}{alert}}}{}
\end{fulllineitems}
\index{send\_notification\_tweet() (nel modulo nest\_crawler)@\spxentry{send\_notification\_tweet()}\spxextra{nel modulo nest\_crawler}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/crawler/index:nest_crawler.send_notification_tweet}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{nest\_crawler.}}\sphinxbfcode{\sphinxupquote{send\_notification\_tweet}}}{\emph{\DUrole{n}{alert}}}{}
\end{fulllineitems}
\chapter{\sphinxstyleliteralintitle{\sphinxupquote{nest\_frontend}} \sphinxhyphen{} Interfaccia utente in React}
\label{\detokenize{code/frontend/index:nest-frontend-interfaccia-utente-in-react}}\label{\detokenize{code/frontend/index::doc}}
\begin{sphinxadmonition}{warning}{Avvertimento:}
\sphinxAtStartPar
\sphinxhref{https://jsdoc.app/}{JSDoc} non sembra essere in grado di gestire correttamente il lato frontend del progetto.
\sphinxAtStartPar
Per maggiori dettagli sul funzionamento dei vari componenti, si suggerisce di guardare le \sphinxstylestrong{docstring presenti nel
codice sorgente}.
\sphinxAtStartPar
Seguono sotto le uniche classi che JSDoc è stato in grado di gestire (anche se vengono mostrate solo
parzialmente).
\end{sphinxadmonition}
\section{\sphinxstyleliteralintitle{\sphinxupquote{.objects}} \sphinxhyphen{} Oggetti vari di utility}
\label{\detokenize{code/frontend/index:objects-oggetti-vari-di-utility}}\index{Condition() (classe)@\spxentry{Condition()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:Condition}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Condition}}}{}{}
\sphinxAtStartPar
Condition class for an undefined/unknown condition.
\sphinxAtStartPar
See {[}the Condition spec{]}(\sphinxurl{https://gitlab.steffo.eu/nest/g2-progetto/-/wikis/sprint-2/Specifica-delle-Conditions}).
\end{fulllineitems}
\index{ConditionHashtag() (classe)@\spxentry{ConditionHashtag()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ConditionHashtag}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ConditionHashtag}}}{}{}
\sphinxAtStartPar
Require a tweet to contain a specific hashtag to be gathered.
\end{fulllineitems}
\index{ConditionUser() (classe)@\spxentry{ConditionUser()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ConditionUser}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ConditionUser}}}{}{}
\sphinxAtStartPar
Require a tweet to be posted by a certain user to be gathered.
\end{fulllineitems}
\index{ConditionTime() (classe)@\spxentry{ConditionTime()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ConditionTime}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ConditionTime}}}{}{}
\sphinxAtStartPar
Require a tweet to be posted before or after a certain time to be gathered.
\end{fulllineitems}
\index{ConditionLocation() (classe)@\spxentry{ConditionLocation()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ConditionLocation}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ConditionLocation}}}{}{}
\sphinxAtStartPar
Require a tweet to have coordinates associated and to be posted within the \sphinxhref{mailto:\{@link}{\{@link} MapArea\}.
\end{fulllineitems}
\index{NotImplementedError() (classe)@\spxentry{NotImplementedError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:NotImplementedError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{NotImplementedError}}}{}{}
\sphinxAtStartPar
Error thrown when a function is not implemented in the current class/instance.
\end{fulllineitems}
\index{BackendCommunicationError() (classe)@\spxentry{BackendCommunicationError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:BackendCommunicationError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{BackendCommunicationError}}}{}{}
\sphinxAtStartPar
An error in the N.E.S.T. frontend\sphinxhyphen{}backend communication.
\end{fulllineitems}
\index{ViewNotAllowedError() (classe)@\spxentry{ViewNotAllowedError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ViewNotAllowedError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ViewNotAllowedError}}}{}{}
\sphinxAtStartPar
Error thrown when trying to access a backend view which doesn\textquotesingle{}t exist or isn\textquotesingle{}t allowed in the used hook.
\end{fulllineitems}
\index{ServerNotConfiguredError() (classe)@\spxentry{ServerNotConfiguredError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ServerNotConfiguredError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ServerNotConfiguredError}}}{}{}
\sphinxAtStartPar
Error thrown when trying to access a backend view when outside a \sphinxhref{mailto:\{@link}{\{@link} ContextServer\}.
\end{fulllineitems}
\index{FetchAlreadyRunningError() (classe)@\spxentry{FetchAlreadyRunningError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FetchAlreadyRunningError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FetchAlreadyRunningError}}}{}{}
\sphinxAtStartPar
Error thrown when trying to access a backend view while another access is ongoing.
\sphinxAtStartPar
This is not allowed due to potential race conditions.
\end{fulllineitems}
\index{FetchError() (classe)@\spxentry{FetchError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FetchError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FetchError}}}{}{}
\sphinxAtStartPar
Abstract class for \sphinxhref{mailto:\{@link}{\{@link} DecodeError\} and \sphinxhref{mailto:\{@link}{\{@link} ResultError\}.
\end{fulllineitems}
\index{DecodeError() (classe)@\spxentry{DecodeError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:DecodeError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{DecodeError}}}{}{}
\sphinxAtStartPar
Error thrown when the frontend can\textquotesingle{}t parse the data received from the backend.
\end{fulllineitems}
\index{ResultError() (classe)@\spxentry{ResultError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:ResultError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{ResultError}}}{}{}
\sphinxAtStartPar
Error thrown when the backend returns a falsy \sphinxtitleref{"result"} value.
\end{fulllineitems}
\index{SerializationError() (classe)@\spxentry{SerializationError()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:SerializationError}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{SerializationError}}}{}{}
\sphinxAtStartPar
Error thrown when a string couldn\textquotesingle{}t be serialized into an object.
\end{fulllineitems}
\index{Filter() (classe)@\spxentry{Filter()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:Filter}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{Filter}}}{\emph{negate=false}}{}
\sphinxAtStartPar
A filter applicable in the Analysis mode.
\begin{quote}\begin{description}
\item[{Parametri}] \leavevmode\begin{itemize}
\item {}
\sphinxAtStartPar
\sphinxstyleliteralstrong{\sphinxupquote{negate}} \sphinxhyphen{}\sphinxhyphen{} If the filter output should be reversed.
\end{itemize}
\end{description}\end{quote}
\end{fulllineitems}
\index{FilterContains() (classe)@\spxentry{FilterContains()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterContains}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterContains}}}{}{}
\sphinxAtStartPar
Checks if a tweet contains a string.
\end{fulllineitems}
\index{FilterHashtag() (classe)@\spxentry{FilterHashtag()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterHashtag}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterHashtag}}}{}{}
\sphinxAtStartPar
Check if a tweet contains an hashtag.
\end{fulllineitems}
\index{FilterPoster() (classe)@\spxentry{FilterPoster()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterPoster}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterPoster}}}{}{}
\sphinxAtStartPar
Check if a tweet was posted by a certain user.
\end{fulllineitems}
\index{FilterWithLocation() (classe)@\spxentry{FilterWithLocation()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterWithLocation}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterWithLocation}}}{}{}
\sphinxAtStartPar
Check if a tweet contains \sphinxtitleref{location} metadata.
\end{fulllineitems}
\index{FilterWithPlace() (classe)@\spxentry{FilterWithPlace()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterWithPlace}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterWithPlace}}}{}{}
\sphinxAtStartPar
Check if a tweet contains \sphinxtitleref{place} metadata.
\end{fulllineitems}
\index{FilterInsideMapArea() (classe)@\spxentry{FilterInsideMapArea()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterInsideMapArea}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterInsideMapArea}}}{}{}
\sphinxAtStartPar
Check if a tweet\textquotesingle{}s \sphinxtitleref{location} is inside a \sphinxhref{mailto:\{@link}{\{@link} MapArea\}.
\end{fulllineitems}
\index{FilterInsideTimeRay() (classe)@\spxentry{FilterInsideTimeRay()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterInsideTimeRay}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterInsideTimeRay}}}{}{}
\sphinxAtStartPar
Check if a tweet\textquotesingle{}s \sphinxtitleref{post\_time} is inside a \sphinxhref{mailto:\{@link}{\{@link} TimeRay\}.
\end{fulllineitems}
\index{FilterWithImage() (classe)@\spxentry{FilterWithImage()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterWithImage}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterWithImage}}}{}{}
\sphinxAtStartPar
Check if a tweet has an associated \sphinxtitleref{image\_url}.
\end{fulllineitems}
\index{FilterIsRetweet() (classe)@\spxentry{FilterIsRetweet()}\spxextra{classe}}
\begin{fulllineitems}
\phantomsection\label{\detokenize{code/frontend/index:FilterIsRetweet}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxbfcode{\sphinxupquote{FilterIsRetweet}}}{}{}
\sphinxAtStartPar
Check if a tweet is a retweet.
\end{fulllineitems}
\chapter{Altri collegamenti}
\label{\detokenize{index:altri-collegamenti}}\begin{itemize}
\item {}
\sphinxAtStartPar
\DUrole{xref,std,std-ref}{genindex}
\item {}
\sphinxAtStartPar
\DUrole{xref,std,std-ref}{modindex}
\end{itemize}
\renewcommand{\indexname}{Indice del modulo Python}
\begin{sphinxtheindex}
\let\bigletter\sphinxstyleindexlettergroup
\bigletter{n}
\item\relax\sphinxstyleindexentry{nest\_backend}\sphinxstyleindexpageref{code/backend/index:\detokenize{module-nest_backend}}
\item\relax\sphinxstyleindexentry{nest\_backend.database}\sphinxstyleindexpageref{code/backend/index:\detokenize{module-nest_backend.database}}
\item\relax\sphinxstyleindexentry{nest\_backend.database.base}\sphinxstyleindexpageref{code/backend/index:\detokenize{module-nest_backend.database.base}}
\item\relax\sphinxstyleindexentry{nest\_backend.database.tables}\sphinxstyleindexpageref{code/backend/index:\detokenize{module-nest_backend.database.tables}}
\item\relax\sphinxstyleindexentry{nest\_backend.gestione}\sphinxstyleindexpageref{code/backend/index:\detokenize{module-nest_backend.gestione}}
\item\relax\sphinxstyleindexentry{nest\_crawler}\sphinxstyleindexpageref{code/crawler/index:\detokenize{module-nest_crawler}}
\end{sphinxtheindex}
\renewcommand{\indexname}{Indice}
\printindex
\end{document}