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

🎓 Looks like a good point to save

This commit is contained in:
Steffo 2021-11-20 01:00:22 +01:00
parent b1fd6e07dc
commit e85d968d05
Signed by: steffo
GPG key ID: 6965406171929D01
3 changed files with 155 additions and 7 deletions

View file

@ -142,7 +142,11 @@ Inoltre, i colori scelti per l'interfaccia grafica **devono essere chiari anche
Separazione in moduli Separazione in moduli
===================== =====================
.. todo:: Separazione in moduli Per realizzare il requisito dell'`estendibilità <Estendibilità>`, si è scelto di separare le parti dell'applicazioni in 4 diversi moduli interagenti.
.. figure:: moduli.png
Schema che mostra come interagiscono tra loro i moduli di Sophon.
.. index:: .. index::
@ -151,26 +155,109 @@ Separazione in moduli
Modulo backend Modulo backend
-------------- --------------
.. todo:: Modulo backend Il modulo backend consisterà in una web :abbr:`API (application programming interface)` che si interfaccia con il database e i moduli Jupyter, permettendo un accesso controllato alle risorse del software.
Sarà scritto in `Python`, usando `Poetry` e le librerie `Django`, `Django REST Framework` e `Docker SDK for Python`, descritte nei prossimi paragrafi.
Esso sarà **eseguito dal server** sul quale si desidera ospitare Sophon.
.. index::
single: Python
single: Python; packages
Python
^^^^^^
`Python <https://www.python.org/>`_ è un linguaggio di programmazione interpretato con tipizzazione forte, particolarmente popolare negli ambiti dello sviluppo web e data science.
Ha numerosissime librerie (dette *packages*) sia incluse nell'eseguibile stesso del linguaggio, sia disponibili per il download sul `Python Package Index <https://pypi.org/>`_.
La sua sintassi è semplice ed human-friendly, come è possibile vedere dal seguente frammento di codice:
.. code-block:: python
class Animale:
def verso():
raise NotImplementedError()
class Cane(Animale):
def verso():
print("Woof!")
class Gatto(Animale):
def verso():
print("Miao!")
zoo = [
Cane(),
Gatto(),
Cane(),
]
for animale in zoo:
animale.verso()
La sua semplicità e l'enorme quantità di librerie a disposizione lo ha reso il secondo linguaggio di programmazione più popolare al mondo :cite:`so:survey2021`, subito dopo `JavaScript`; proprio per questi motivi è stato scelto per lo sviluppo del modulo backend.
.. index::
single: Poetry
Poetry
^^^^^^
Per gestire le dipendenze di Sophon si è scelto di usare `Poetry <https://python-poetry.org/>`_, un innovativo package manager per il linguaggio Python.
Poetry è in grado di risolvere automaticamente alberi complessi di dipendenze, generando un *lockfile* (``poetry.lock``) con la soluzione adottata, in modo che le dipendenze utilizzate siano congelate e uguali per tutti gli ambienti in cui deve essere sviluppato Sophon.
.. index:: .. index::
single: Django single: Django
single: Django; applicazione
single: Django; view
single: Django; function-based view
single: Django; class-based view
Django Django
^^^^^^ ^^^^^^
.. todo:: Django `Django <https://www.djangoproject.com/>`_ è un framework Python per lo sviluppo di siti web dinamici.
Fornisce una suite di strumenti che assistono nella creazione di siti di medie dimensioni, come un :abbr:`ORM (object-relational model)` per i database, una pagina di amministrazione integrata per la gestione dei contenuti del sito e un sistema di moduli scollegabili detti "applicazioni".
Le pagine restituite vengono definite attraverso funzioni, dette *function-based views*, o attraverso classi, dette *class-based views*, che ricevono in input la richiesta effettuata dall'utente ed restituscono in output la risposta HTTP da inoltrargli.
È stato usato per la realizzazione del modulo backend in quanto presentato al corso di Tecnologie web di Unimore, e con tutte le funzionalità necessarie per la realizzazione del progetto del sito.
.. index:: .. index::
single: Django; REST Framework single: Django REST Framework
single: Django REST Framework; function-based API view
single: Django REST Framework; class-based API view
single: Django REST Framework; viewset
Django REST Framework Django REST Framework
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
.. todo:: Django REST Framework `Django REST Framework <https://www.django-rest-framework.org/>`_ è un'estensione per `Django` che aggiunge la possibilità di inserire :abbr:`REST (representational state transfer)` :abbr:`API (application programming interface)` all'interno delle applicazioni Django.
Permette di definire metodi dell'API in modo molto simile alle views di Django: si vengono a creare le *function-based API views* se i metodi sono definiti attraverso funzioni, o le *class-based API views* se i metodi sono definiti attraverso classi.
Inoltre, permette la generazione automatica di metodi per l'interazione con certe entità del database, attraverso particolari classi dette *viewset*.
.. index::
single: Docker; SDK for Python
Docker SDK for Python
^^^^^^^^^^^^^^^^^^^^^
Per interfacciarsi con i `moduli Jupyter <Modulo Jupyter>`, si è deciso di utilizzare `Docker SDK for Python <https://docker-py.readthedocs.io/en/stable/>`_, un client Python per l'interazione con il daemon `Docker`.
.. seealso::
`Containerizzazione`, più avanti nel capitolo.
.. index:: .. index::
single: modulo; frontend single: modulo; frontend
@ -178,7 +265,47 @@ Django REST Framework
Modulo frontend Modulo frontend
--------------- ---------------
.. todo:: Modulo frontend Il *modulo frontend* consiste in una applicazione web che consente agli utenti di interagire con Sophon da un'interfaccia grafica.
Le interazioni vengono inviate al `modulo proxy <Modulo proxy>`, che le ispeziona e le inoltra al `modulo server <Modulo server>`.
Sarà scritto in `TypeScript`, usando `Yarn` e le librerie `React`, `FontAwesome` e `Bluelib` in aggiunta a innumerevoli altre microdipendenze.
.. index::
single: JavaScript
JavaScript
^^^^^^^^^^
.. todo:: JavaScript
.. index::
single: TypeScript
TypeScript
^^^^^^^^^^
.. todo:: TypeScript
.. index::
single: Node.JS
Node.JS
^^^^^^^
.. todo:: Node.JS
.. index::
single: Yarn
Yarn
^^^^
.. todo:: Yarn
.. index:: .. index::
@ -193,6 +320,16 @@ React
.. index:: .. index::
single: Bluelib single: Bluelib
.. index::
single: FontAwesome
FontAwesome
^^^^^^^^^^^
.. todo:: FontAwesome
Bluelib Bluelib
^^^^^^^ ^^^^^^^
@ -278,7 +415,7 @@ Volumi
.. index:: .. index::
single: Docker; compose single: Docker; Compose
Docker Compose Docker Compose
-------------- --------------

BIN
thesis/source/docs/4_progetto/moduli.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -55,3 +55,11 @@ overleaf:learn30mins,
howpublished = {https://web.archive.org/web/20211116220924/https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes}, howpublished = {https://web.archive.org/web/20211116220924/https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes},
note = {Accessed: 2021-11-16}, note = {Accessed: 2021-11-16},
} }
@misc{
so:survey2021,
author = {Stack Overflow},
title = {2021 Developer Survey},
howpublished = {https://insights.stackoverflow.com/survey/2021},
note = {Accessed: 2021-11-20},
}