1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-12-22 06:44:21 +00:00

🎓 Add some new things

This commit is contained in:
Steffo 2021-11-19 17:16:44 +01:00
parent 45d8f4457a
commit b1fd6e07dc
Signed by: steffo
GPG key ID: 6965406171929D01
12 changed files with 399 additions and 121 deletions

View file

@ -33,14 +33,16 @@ L'obiettivo di questa tesi è quello di descrivere lo sviluppo dell'applicativo
Struttura della tesi
====================
.. todo::
Aggiornare questo elenco man mano che vengono aggiunti nuovi capitoli.
La tesi è strutturata nel seguente modo:
#. nel primo capitolo, :ref:`Sinossi`, viene descritto molto brevemente il progetto realizzato;
#. nel secondo capitolo, :ref:`Introduzione`, viene introdotto il contesto della tesi, la tesi stessa e i suoi contenuti;
#. nel terzo capitolo, :ref:`Ricerca collaborativa`, viene presentata in dettaglio la situazione attuale della ricerca collaborativa;
#. nel quarto capitolo, :ref:`Requisiti`, venono elencati i requisiti che si sono voluti raggiungere con la realizzazione dell'applicativo;
#. nel quinto capitolo, :ref:`Progetto`, viene descritta la progettazione avvenuta, entrando nei dettagli della suddivisione in moduli e delle astrazioni create;
#. nel sesto capitolo, :ref:`Implementazione`, vengono trattate le specifiche tecniche implementative del progetto;
#. nel settimo capitolo, :ref:`Applicazione`, viene fatto un esempio di applicazione del progetto all'interno di un'Università;
#. nell'ottavo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi;
#. nel nono capitolo, :ref:`Appendice`, è infine inserito ulteriore materiale indirettamente relativo alla tesi.
#. nel quarto capitolo, :ref:`Progettazione`, viene descritta la progettazione avvenuta, entrando nei dettagli dei requisiti, della suddivisione in moduli e delle astrazioni create;
#. nel quinto capitolo, :ref:`Implementazione`, vengono trattate le specifiche tecniche implementative del progetto;
#. nel sesto capitolo, :ref:`Applicazione`, viene fatto un breve esempio di applicazione del progetto all'interno di un'Università;
#. nell'settimo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi.

View file

@ -72,7 +72,7 @@ Il più importante di questi editor è `Google Docs <https://docs.google.com/>`_
.. index::
single: notebook computazionale
single: notebook; computazionale
single: celle
Notebook computazionali

View file

@ -0,0 +1,364 @@
.. index::
single: progettazione
*************
Progettazione
*************
Vista la situazione della `ricerca collaborativa <Ricerca collaborativa>`, si è ritenuto potesse essere utile sviluppare un'alternativa al `progetto JupyterHub <Hosting on-premises>`.
.. index::
single: requisiti
Requisiti
=========
Si è stabilito che per essere un'alternativa valida, il progetto dovesse avere i seguenti requisiti:
* `estendibilità <Estendibilità>`
* `security by default <Sicurezza>`
* `interfaccia grafica facile ed intuibile <Intuibilità>`
* `maggiore possibilità di collaborazione <Possibilità di collaborazione>`
* `codice open source <Open source>`
* `possibilità di personalizzazione <Personalizzabilità>`
* `accessibilità <Accessibilità>`
Seguono descrizioni dettagliate dei requisiti elencati.
.. index::
single: requisiti; estendibilità
single: estendibilità
Estendibilità
-------------
**Aggiungere nuove funzionalità** al software deve essere facile, e non richiedere ristrutturazioni profonde del codice.
Inoltre, il software deve essere **modulare**, in modo da semplificare l'aggiornamento, la sostituzione e la eventuale rimozione di componenti.
Infine, il software deve esporre un'**interfaccia alla quale altri software esterni possono connettersi** per interagirvi come se fossero un utente.
.. index::
single: requisiti; sicurezza
single: sicurezza
Sicurezza
---------
I dati immagazzinati all'interno del software devono essere **protetti da acccessi non autorizzati**.
**Tentativi di ingannare gli utenti del software devono essere impediti**, riducendo il fattore umano nelle falle di sicurezza.
Non si reputa importante impedire agli utenti di comunicare con Internet all'interno delle loro ricerche, in quanto si ritiene che essi siano utenti fidati; qualora ne sorga la necessità, ciò deve essere possibile senza ristrutturazione del codice.
Non si reputa nemmeno importante limitare le risorse utilizzate dai `notebook <notebook computazionali>` in uso; deve però essere possibile implementare la funzionalità in futuro, se divenisse necessario.
.. index::
single: requisiti; intuibilità
single: intuibilità
Intuibilità
-----------
Il modo in cui utilizzare l'interfaccia utente del software deve essere **facilmente intuibile** dall'utente medio, senza che abbia bisogno di leggere alcuna guida o manuale.
A tale scopo, l'interfaccia grafica deve utilizzare **design patterns comuni e familiari** all'utente medio.
In aggiunta, i **dettagli implementativi devono essere nascosti** all'utente, in modo che possa concentrarsi sull'utilizzo del software.
.. index::
single: requisiti; personalizzabilità
single: personalizzabilità
Personalizzabilità
------------------
Il software deve permettere all'utente di **personalizzare il suo workflow senza alcuna limitazione**, che ciò venga fatto tramite plugin, configurazioni speciali o modifica di file dell'ambiente di lavoro, assicurando che i workflow personalizzati di un utente **non possano interferire** con quelli degli altri.
Inoltre, il software deve inoltre permettere all'amministratore di **personalizzare nome e aspetto** mostrati agli utenti nell'interfaccia grafica, in modo che essa possa essere adattata al brand dell'istituzione che utilizza il progetto.
.. index::
single: requisiti; possibilità di collaborazione
single: possibilità di collaborazione
Possibilità di collaborazione
-----------------------------
Il software deve permettere agli utenti di **collaborare sui notebook in tempo reale**, come all'interno dei `web-based editor <Web-based editor>`.
Devono essere **facilitate le interazioni tra utenti**, al fine di ridurre errori e incomprensioni tra essi.
.. index::
single: requisiti; open source
single: open source
Open source
-----------
Il software deve essere interamente **open source**.
In pieno spirito collaborativo, il **codice sorgente deve essere liberamente consultabile, modificabile, utilizzabile e condivisibile**, sia per soddisfare la curiosità degli utenti, sia per permetterne lo studio e il miglioramento.
Tutte le **modifiche al codice sorgente devono essere rese disponibili agli utenti** del software modificato, in modo che possano verificare l'affidabilità del software che utilizzano.
.. index::
single: requisiti; responsività
single: responsività
Responsività
------------
Il software deve essere **utilizzabile su schermi di dimensione ridotta**, come quelli di un cellulare.
Pertanto, gli elementi dell'interfaccia devono essere disposti in modo che non escano dallo schermo qualora non ci fosse spazio sufficiente per mostrarli.
.. index::
single: requisiti; accessibilità
single: accessibilità
Accessibilità
-------------
Il software deve essere utilizzabile da **qualsiasi tipologia di utente**, inclusi utenti con disabilità visive e motorie.
Deve essere quindi possibile utilizzare il software **interamente da tastiera**, senza dover ricorrere a un mouse.
Inoltre, i colori scelti per l'interfaccia grafica **devono essere chiari anche a persone affette da daltonismo**.
.. index::
single: separazione in moduli
single: modulo
Separazione in moduli
=====================
.. todo:: Separazione in moduli
.. index::
single: modulo; backend
Modulo backend
--------------
.. todo:: Modulo backend
.. index::
single: Django
Django
^^^^^^
.. todo:: Django
.. index::
single: Django; REST Framework
Django REST Framework
^^^^^^^^^^^^^^^^^^^^^
.. todo:: Django REST Framework
.. index::
single: modulo; frontend
Modulo frontend
---------------
.. todo:: Modulo frontend
.. index::
single: React
React
^^^^^
.. todo:: React
.. index::
single: Bluelib
Bluelib
^^^^^^^
.. todo:: Bluelib
.. index::
single: modulo; proxy
Modulo proxy
------------
.. todo:: Modulo proxy
.. index::
single: Apache HTTP server
single: httpd
single: apache2
Apache HTTP server
^^^^^^^^^^^^^^^^^^
.. todo:: Apache HTTP server
.. index::
single: modulo; Jupyter
single: Jupyter; modulo di Sophon
Modulo Jupyter
--------------
.. todo:: Modulo backend
.. index::
single: containerizzazione
Containerizzazione
==================
.. todo:: Containerizzazione
.. index::
single: Docker
Docker
------
.. todo:: Containerizzazione
.. index::
single: container
single: Docker; container
Container
^^^^^^^^^
.. todo:: Container
.. index::
single: network
single: Docker; network
Network
^^^^^^^
.. todo:: Network
.. index::
single: volume
single: Docker; volume
Volumi
^^^^^^
.. todo:: Volumi
.. index::
single: Docker; compose
Docker Compose
--------------
.. todo:: Containerizzazione
.. index::
single: database
Database
========
.. todo:: Database
.. index::
single: PostgreSQL
PostgreSQL
----------
.. todo:: PostgreSQL
.. index::
single: entità
Entità
------
.. todo:: Entità
.. index::
single: entità; istanza
single: istanza
Istanze
^^^^^^^
.. todo:: Istanze
.. index::
single: entità; gruppi di ricerca
single: gruppi di ricerca
Gruppi di ricerca
^^^^^^^^^^^^^^^^^
.. todo:: Gruppi di ricerca
.. index::
single: entità; progetti di ricerca
single: progetti di ricerca
Progetti di ricerca
^^^^^^^^^^^^^^^^^^^
.. todo:: Progetti di ricerca
.. index::
single: entità; notebook
single: notebook; entità di Sophon
Notebook
^^^^^^^^
.. todo:: Notebook
.. index::
single: entità; utente
single: utente
Utenti
^^^^^^
.. todo:: Utenti

View file

@ -1,94 +0,0 @@
*********
Requisiti
*********
Sophon è stato realizzato per fornire un'alternativa al `progetto JupyterHub <Hosting on-premises>` con i seguenti requisiti:
* più facile `estendibilità <Estendibilità>`
* `security <Sicurezza>` by default
* interfaccia grafica `facile ed intuibile <Intuibilità>`
* maggiore `possibilità di collaborazione <Possibilità di collaborazione>`
* codice `open source <Open source>`
* `possibilità di personalizzazione <Personalizzabilità>`
* completa `accessibilità <Accessibilità>`
Estendibilità
=============
Aggiungere nuove funzionalità al software deve essere facile, e non richiedere ristrutturazioni profonde del codice.
Inoltre, il software deve essere modulare, in modo da semplificare l'aggiornamento, la sostituzione e la eventuale rimozione di componenti.
Infine, il software deve esporre un'interfaccia alla quale altri software esterni possono connettersi per interagirvi come se fossero un utente.
Sicurezza
=========
I dati immagazzinati all'interno del software non devono essere accessibili agli utenti non autorizzati.
Inoltre, tentativi di ingannare gli utenti del software devono essere resi più difficili possibile, riducendo il fattore umano delle falle di sicurezza.
Non si reputa importante impedire agli utenti di comunicare con Internet all'interno delle loro ricerche, in quanto si ritiene che essi siano utenti fidati; qualora ne sorga la necessità, ciò deve essere possibile senza ristrutturazione del codice.
Intuibilità
===========
Il modo in cui utilizzare l'interfaccia utente del software deve essere intuibile all'utente medio, senza che abbia bisogno di leggere alcuna guida o manuale.
A tale scopo, l'interfaccia grafica deve utilizzare design patterns comuni e familiari all'utente medio.
In aggiunta, i dettagli implementativi devono essere nascosti all'utente, in modo che possa concentrarsi sull'utilizzare il notebook.
Personalizzabilità
==================
Il software deve permettere all'utente di personalizzare il suo workflow senza alcuna limitazione, che venga fatto tramite plugin, configurazioni speciali o modifica di file dell'ambiente di lavoro, assicurando che i workflow personalizzati di un utente non possano interferire con quelli degli altri.
Inoltre, il software deve inoltre permettere all'amministratore di personalizzare nome e aspetto mostrati agli utenti nell'interfaccia grafica, in modo che essa possa essere adattata al brand dell'istituzione che utilizza il progetto.
Possibilità di collaborazione
=============================
Il software deve permettere agli utenti di collaborare sui notebook in tempo reale, come all'interno dei `web-based editor <Web-based editor>`.
.. todo::
Il software deve facilitare le interazioni all'interno del gruppo, e non complicarle. (Preludio al meccanismo di locking)
Open source
===========
Il software deve essere open source nella sua interezza.
In pieno spirito collaborativo, il codice sorgente deve essere liberamente consultabile, modificabile, utilizzabile e condivisibile da chiunque, sia per soddisfare la curiosità degli utenti, sia per permetterne lo studio e il miglioramento.
Tutte le modifiche al codice sorgente devono essere disponibili agli utenti del software modificato, in modo che possano verificare l'affidabilità del software che utilizzano.
Responsività
============
Il software deve essere utilizzabile almeno in parte da schermi di dimensione ridotta, come quelli di un cellulare.
Pertanto, gli elementi dell'interfaccia devono essere disposti in modo che non escano dallo schermo qualora non ci fosse spazio sufficiente per mostrarli.
.. todo:: eh?
Accessibilità
=============
Il software deve essere utilizzabile da qualsiasi tipologia di utente, inclusi utenti con disabilità visive e motorie.
Deve essere allora possibile utilizzare il software interamente da tastiera, senza dover ricorrere a un mouse.
Inoltre, i colori scelti per l'interfaccia grafica non devono essere confondibili da persone affette da daltonismo.
Infine, l'intero software deve essere navigabile tramite screen reader, permettendo a non-vedenti di usare il progetto.

View file

@ -1,3 +1,7 @@
***************
Implementazione
***************
.. todo::
Scrivere questo capitolo.

View file

@ -1,3 +0,0 @@
********
Progetto
********

View file

@ -0,0 +1,7 @@
************
Applicazione
************
.. todo::
Scrivere questo capitolo.

View file

@ -1,3 +0,0 @@
************
Applicazione
************

View file

@ -0,0 +1,7 @@
***********
Conclusione
***********
.. todo::
Scrivere questo capitolo.

View file

@ -2,9 +2,8 @@
Appendice
*********
.. only:: html
.. rubric:: Bibliografia
Bibliografia
============
.. bibliography::
:all:

View file

@ -1,3 +0,0 @@
***********
Conclusione
***********

View file

@ -4,19 +4,17 @@ Progettazione e sviluppo di Sophon, applicativo cloud a supporto della ricerca
.. toctree::
:maxdepth: 6
:numbered: 1
:numbered: 2
:caption: Contenuti
docs/1_sinossi/index
docs/2_introduzione/index
docs/3_presentazione/index
docs/4_requisiti/index
docs/9_appendice/index
.. docs/5_progetto/index
.. docs/6_implementazione/index
.. docs/7_applicazione/index
.. docs/8_conclusione/index
docs/4_progetto/index
docs/5_implementazione/index
docs/6_applicazione/index
docs/7_conclusione/index
docs/8_appendice/index
.. only:: html