mirror of
https://github.com/Steffo99/sophon.git
synced 2024-12-21 22:34:21 +00:00
🎓 Complete presentation
This commit is contained in:
parent
e16d470192
commit
dd7f491d46
9 changed files with 352 additions and 37 deletions
179
backend/poetry.lock
generated
179
backend/poetry.lock
generated
|
@ -6,6 +6,14 @@ category = "dev"
|
|||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "appdirs"
|
||||
version = "1.4.4"
|
||||
description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "asgiref"
|
||||
version = "3.4.1"
|
||||
|
@ -80,6 +88,17 @@ humanfriendly = ">=9.1"
|
|||
[package.extras]
|
||||
cron = ["capturer (>=2.4)"]
|
||||
|
||||
[[package]]
|
||||
name = "commonmark"
|
||||
version = "0.9.1"
|
||||
description = "Python parser for the CommonMark Markdown spec"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.extras]
|
||||
test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
|
||||
|
||||
[[package]]
|
||||
name = "deprecation"
|
||||
version = "2.1.0"
|
||||
|
@ -290,6 +309,14 @@ python-versions = ">=3.6"
|
|||
[package.dependencies]
|
||||
pyparsing = ">=2.0.2,<3"
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "8.4.0"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
|
||||
[[package]]
|
||||
name = "psycopg2"
|
||||
version = "2.9.1"
|
||||
|
@ -387,6 +414,19 @@ category = "dev"
|
|||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
|
||||
[[package]]
|
||||
name = "recommonmark"
|
||||
version = "0.7.1"
|
||||
description = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
commonmark = ">=0.8.1"
|
||||
docutils = ">=0.11"
|
||||
sphinx = ">=1.3.1"
|
||||
|
||||
[[package]]
|
||||
name = "requests"
|
||||
version = "2.26.0"
|
||||
|
@ -405,6 +445,68 @@ urllib3 = ">=1.21.1,<1.27"
|
|||
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
|
||||
use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
|
||||
|
||||
[[package]]
|
||||
name = "rinoh-typeface-dejavuserif"
|
||||
version = "0.1.3"
|
||||
description = "DejaVu Serif typeface"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
rinohtype = "*"
|
||||
|
||||
[[package]]
|
||||
name = "rinoh-typeface-texgyrecursor"
|
||||
version = "0.1.1"
|
||||
description = "TeX Gyre Cursor typeface"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
rinohtype = "*"
|
||||
|
||||
[[package]]
|
||||
name = "rinoh-typeface-texgyreheros"
|
||||
version = "0.1.1"
|
||||
description = "TeX Gyre Heros typeface"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
rinohtype = "*"
|
||||
|
||||
[[package]]
|
||||
name = "rinoh-typeface-texgyrepagella"
|
||||
version = "0.1.1"
|
||||
description = "TeX Gyre Pagella typeface"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[package.dependencies]
|
||||
rinohtype = "*"
|
||||
|
||||
[[package]]
|
||||
name = "rinohtype"
|
||||
version = "0.5.3"
|
||||
description = "The Python document processor"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6.1,<4.0.0"
|
||||
|
||||
[package.dependencies]
|
||||
appdirs = ">=1.4.3,<2.0.0"
|
||||
docutils = ">=0.15"
|
||||
recommonmark = ">=0.6.0"
|
||||
rinoh-typeface-dejavuserif = ">=0.1.3,<0.2.0"
|
||||
rinoh-typeface-texgyrecursor = ">=0.1.1,<0.2.0"
|
||||
rinoh-typeface-texgyreheros = ">=0.1.1,<0.2.0"
|
||||
rinoh-typeface-texgyrepagella = ">=0.1.1,<0.2.0"
|
||||
Sphinx = ">=2.2.1"
|
||||
|
||||
[[package]]
|
||||
name = "six"
|
||||
version = "1.16.0"
|
||||
|
@ -628,13 +730,17 @@ test = ["websockets"]
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.9"
|
||||
content-hash = "951a40d1e27bbe63eb358fade1e7639cf16ac42ea2e814bae9b5b267478d5ce0"
|
||||
content-hash = "51ddb46bd6559cbdb22d529967f3368f91b034862c4df87b14e785aa282aa03d"
|
||||
|
||||
[metadata.files]
|
||||
alabaster = [
|
||||
{ file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359" },
|
||||
{ file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" },
|
||||
]
|
||||
appdirs = [
|
||||
{ file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" },
|
||||
{ file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41" },
|
||||
]
|
||||
asgiref = [
|
||||
{ file = "asgiref-3.4.1-py3-none-any.whl", hash = "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214" },
|
||||
{ file = "asgiref-3.4.1.tar.gz", hash = "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9" },
|
||||
|
@ -663,6 +769,10 @@ coloredlogs = [
|
|||
{ file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934" },
|
||||
{ file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0" },
|
||||
]
|
||||
commonmark = [
|
||||
{ file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" },
|
||||
{ file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60" },
|
||||
]
|
||||
deprecation = [
|
||||
{ file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a" },
|
||||
{ file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff" },
|
||||
|
@ -825,6 +935,49 @@ packaging = [
|
|||
{ file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0" },
|
||||
{ file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966" },
|
||||
]
|
||||
pillow = [
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a" },
|
||||
{ file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9" },
|
||||
{ file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b" },
|
||||
{ file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09" },
|
||||
{ file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02" },
|
||||
{ file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b" },
|
||||
{ file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2" },
|
||||
{ file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad" },
|
||||
{ file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698" },
|
||||
{ file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc" },
|
||||
{ file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df" },
|
||||
{ file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b" },
|
||||
{ file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc" },
|
||||
{ file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed" },
|
||||
]
|
||||
psycopg2 = [
|
||||
{ file = "psycopg2-2.9.1-cp36-cp36m-win32.whl", hash = "sha256:7f91312f065df517187134cce8e395ab37f5b601a42446bdc0f0d51773621854" },
|
||||
{ file = "psycopg2-2.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:830c8e8dddab6b6716a4bf73a09910c7954a92f40cf1d1e702fb93c8a919cc56" },
|
||||
|
@ -933,10 +1086,34 @@ pyyaml = [
|
|||
{ file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c" },
|
||||
{ file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2" },
|
||||
]
|
||||
recommonmark = [
|
||||
{ file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f" },
|
||||
{ file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67" },
|
||||
]
|
||||
requests = [
|
||||
{ file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24" },
|
||||
{ file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" },
|
||||
]
|
||||
rinoh-typeface-dejavuserif = [
|
||||
{ file = "rinoh-typeface-dejavuserif-0.1.3.tar.gz", hash = "sha256:8be129230ac98ab2ebfbf5b570575052ba7069e4087ce36a2d4c1d85182833ce" },
|
||||
{ file = "rinoh_typeface_dejavuserif-0.1.3-py3-none-any.whl", hash = "sha256:35ba67bf25e526b4b8180dc31d8fa2ff9b594d924e8790e8074699cd2f0e7da8" },
|
||||
]
|
||||
rinoh-typeface-texgyrecursor = [
|
||||
{ file = "rinoh-typeface-texgyrecursor-0.1.1.tar.gz", hash = "sha256:076f7dbbd0201b0d44f4c77e4f7070474e1365152dc8509b5cded04c1648308a" },
|
||||
{ file = "rinoh_typeface_texgyrecursor-0.1.1-py3-none-any.whl", hash = "sha256:98080e6af2271e67cff1d69033cb6c3a6baa58de41a66dce1a1102b4dd41de72" },
|
||||
]
|
||||
rinoh-typeface-texgyreheros = [
|
||||
{ file = "rinoh-typeface-texgyreheros-0.1.1.tar.gz", hash = "sha256:fd7082e917bccc292894447f11d15a3efce9f1386056118b57b66cc2f5a36bbd" },
|
||||
{ file = "rinoh_typeface_texgyreheros-0.1.1-py3-none-any.whl", hash = "sha256:0c921a040a84b0af031e4a36d196d46b65fb18929d88df5ed26533b57100e6c9" },
|
||||
]
|
||||
rinoh-typeface-texgyrepagella = [
|
||||
{ file = "rinoh-typeface-texgyrepagella-0.1.1.tar.gz", hash = "sha256:53f4dba338c6b1df758888f23ce1ed728e5be45746f161488ad3b944e5e79fd2" },
|
||||
{ file = "rinoh_typeface_texgyrepagella-0.1.1-py3-none-any.whl", hash = "sha256:0144e3b828a31b405ab9be1dec67f48be360d9f86d109578924fd1d7e0e1ded6" },
|
||||
]
|
||||
rinohtype = [
|
||||
{ file = "rinohtype-0.5.3-py3-none-any.whl", hash = "sha256:8bd4f0dd188026ede65286eab4bcfb3bffc594fe4bca7cf1f0125ccd35ff995a" },
|
||||
{ file = "rinohtype-0.5.3.tar.gz", hash = "sha256:7b4dea40df49a7f623ad0382b3802cb72a7e72d0e30facba135cd86b977b5762" },
|
||||
]
|
||||
six = [
|
||||
{ file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" },
|
||||
{ file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" },
|
||||
|
|
|
@ -25,6 +25,8 @@ Sphinx = "^4.2.0"
|
|||
sphinx-rtd-theme = "^1.0.0"
|
||||
sphinx-autobuild = "^2021.3.14"
|
||||
sphinxcontrib-bibtex = "^2.4.1"
|
||||
rinohtype = "^0.5.3"
|
||||
Pillow = "^8.4.0"
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
|
|
|
@ -159,3 +159,11 @@ bibtex_bibfiles = [
|
|||
"refs.bib",
|
||||
]
|
||||
bibtex_reference_style = "super"
|
||||
|
||||
# Rinohtype
|
||||
rinoh_documents = [
|
||||
{
|
||||
"doc": "index",
|
||||
"target": "manual",
|
||||
}
|
||||
]
|
||||
|
|
|
@ -24,7 +24,7 @@ Jupyter però ha alcuni problemi: è complesso da installare e mantenere, e non
|
|||
Obiettivo della tesi
|
||||
====================
|
||||
|
||||
L'obiettivo di questa tesi è quello di descrivere lo sviluppo dell'applicativo "*Sophon*", realizzato con il fine di colmare le lacune di `Jupyter`, facilitandone l'utilizzo in ambiente universitario.
|
||||
L'obiettivo di questa tesi è quello di descrivere lo sviluppo dell'applicativo "*Sophon*", realizzato con il fine di semplificare l'utilizzo di `Jupyter` in ambiente universitario.
|
||||
|
||||
In particolare, l'obiettivo di Sophon è quello di:
|
||||
|
||||
|
|
BIN
thesis/source/docs/3_presentazione/google_docs.png
(Stored with Git LFS)
Normal file
BIN
thesis/source/docs/3_presentazione/google_docs.png
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -7,7 +7,68 @@ Ricerca collaborativa
|
|||
|
||||
Nelle scienze, sia teoriche, sia sperimentali, si verifica spesso la necessità di dover prendere appunti e condividere appunti sulla ricerca effettuata.
|
||||
|
||||
Mentre in passato a tale scopo venivano utilizzati quaderni di carta (detti anche *"blocchi note laboratoriali"* :cite:`enwiki:993314047`), con la nascita dell'informatica si iniziarono ad utilizzare strumenti digitali, più comodi ed efficienti: inizialmente, semplici word processor come *Microsoft Word*, arrivando poi negli ultimi anni ai più avanzati e interattivi `notebook computazionali <Notebook computazionali>`.
|
||||
Mentre in passato a tale scopo venivano utilizzati quaderni di carta (detti anche *"blocchi note laboratoriali"* :cite:`enwiki:993314047`), con la nascita dell'informatica si iniziarono ad utilizzare strumenti digitali, più comodi ed efficienti: inizialmente, semplici sistemi di composizione tipografica come *TeX*, poi editor :abbr:`WYSIWYG (What You See Is What You Get)` come *Microsoft Word*, arrivando infine negli ultimi anni ai più avanzati e interattivi `notebook computazionali <Notebook computazionali>`.
|
||||
|
||||
|
||||
.. index::
|
||||
single: composizione tipografica
|
||||
single: sistemi di composizione tipografica
|
||||
|
||||
Sistemi di composizione tipografica
|
||||
===================================
|
||||
|
||||
I primi sistemi utilizzati in ambito accademico per la creazione di documenti erano molto semplici: si limitavano a descrivere come dovevano apparire i contenuti sul foglio stampato attraverso istruzioni molto simili a quelle di un linguaggio di programmazione.
|
||||
|
||||
Sono esempi di sistemi di composizione tipografica `TeX <https://www.tug.org/begin.html>`_, usato ancora oggi in combinazione con il sistema `LaTeX <https://www.latex-project.org//>`_ per comporre documenti accademici come paper e tesi (inclusa questa), e `roff <https://en.wikipedia.org/wiki/Roff_(software)>`_, su cui si basa oggi lo strumento `groff <https://it.wikipedia.org/wiki/Groff_(software)>`_ per comporre le pagine di manuale dei sistemi operativi Unix-like.
|
||||
|
||||
Un esempio di documento LaTeX :cite:`overleaf:learn30mins` è il seguente:
|
||||
|
||||
.. code-block:: latex
|
||||
|
||||
\documentclass{article}
|
||||
|
||||
\begin{document}
|
||||
First document.
|
||||
This is a simple example, with no extra parameters or packages included.
|
||||
\end{document}
|
||||
|
||||
|
||||
.. index::
|
||||
single: editor WYSIWYG
|
||||
|
||||
Editor WYSIWYG
|
||||
==============
|
||||
|
||||
.. todo:: Non mi piace questa frase.
|
||||
|
||||
Con l'evolversi dei sistemi operativi, in particolare con la diffusione dei sistemi operativi a finestre, sono stati sviluppati software detti "editor di testo :abbr:`WYSIWYG (What You See Is What You Get)`", che permettono di scrivere documenti avendo un'anteprima istantanea del testo inserito.
|
||||
|
||||
Essendo molto più intuitivi da usare dei loro predecessori, ne hanno preso rapidamente il posto in tutto il mondo, di fatto limitando l'uso dei `sistemi di composizione tipografica <Sistemi di composizione tipografica>` ad ambiti in cui era necessaria una formattazione avanzata dei documenti.
|
||||
|
||||
Alcuni esempi moderni di editor :abbr:`WYSIWYG (What You See Is What You Get)` sono `Microsoft Word <https://www.microsoft.com/it-it/microsoft-365/word>`_ e `LibreOffice Writer <https://it.libreoffice.org/scopri/writer/>`_.
|
||||
|
||||
.. figure:: libreoffice.png
|
||||
|
||||
Modifica di un documento su LibreOffice 7.2.2.2.
|
||||
|
||||
|
||||
.. index::
|
||||
single: editor WYSIWYG; web-based
|
||||
|
||||
Web-based editor
|
||||
================
|
||||
|
||||
Il paradigma web "2.0" ha portato miglioramenti significativi agli editor :abbr:`WYSIWYG (What You See Is What You Get)`, rendendoli utilizzabili online come software-as-a-service direttamente da un browser.
|
||||
|
||||
Ciò ha semplificato il processo di collaborazione sui documenti: non è più necessario inviare ai collaboratori tutte le revisioni dei documenti, ma è possibile semplicemente condividergli un link, al quale sarà possibile accedere al documento.
|
||||
|
||||
Da questa funzionalità ne è poi derivata un'altra, che ha rivoluzionato la scrittura di testi: la possibilità di collaborare online con gli altri autori, vedendo le loro modifiche in tempo reale sulla propria pagina.
|
||||
|
||||
Il più importante di questi editor è `Google Docs <https://docs.google.com/>`_, rilasciato nel 2009; la sua popolarità ha portato allo sviluppo di alternative come `Office 365 <https://www.office.com/>`_, una versione web di `Microsoft Word <Editor WYSIWYG>`.
|
||||
|
||||
.. figure:: google_docs.png
|
||||
|
||||
Un esempio di collaborazione su un documento Google Docs.
|
||||
|
||||
|
||||
.. index::
|
||||
|
@ -17,15 +78,17 @@ Mentre in passato a tale scopo venivano utilizzati quaderni di carta (detti anch
|
|||
Notebook computazionali
|
||||
=======================
|
||||
|
||||
I *notebook computazionali* sono documenti interattivi frequentemente utilizzati nel mondo della ricerca, in quanto permettono di documentare l'analisi di dati con feedback grafico immediato.
|
||||
In parallelo ai `web-based editor <Web-based editor>`, ha preso piede nel mondo della ricerca scientifica una nuova tipologia di documento: il notebook computazionali.
|
||||
|
||||
Tipicamente, sono composti da tante **celle** contenenti codice in un qualche linguaggio di programmazione, le quali sono eseguite e il cui output è mostrato all'utente sotto forma di testo, equazioni, immagini, grafici, o anche widget interattivi come slider o aree di input testo.
|
||||
I *notebook computazionali* sono un tipo di documento interattivo che permette contemporaneamente di analizzare dati, elaborarli e documentare elaborazioni effettuate e risultati ottenuti.
|
||||
|
||||
Alcuni esempi di software per la scrittura di notebook computazionali sono `Jupyter`, `Wolfram Mathematica <https://www.wolfram.com/mathematica/>`_, `MATLAB Live Editor <https://it.mathworks.com/products/matlab/live-editor.html>`_...
|
||||
Essi sono composti da tante **celle**, ciascuna contenente codice in un determinato linguaggio di programmazione o di marcatura, il quale è eseguito, mostrandone poi i risultati all'utente, sotto forma di testo, equazioni, immagini, grafici, o anche widget interattivi come slider o aree di input testo.
|
||||
|
||||
.. figure:: hist_example.png
|
||||
Alcuni esempi di software per la scrittura di notebook computazionali sono `Jupyter <https://jupyter.org/>`_, `Wolfram Mathematica <https://www.wolfram.com/mathematica/>`_, `MATLAB Live Editor <https://it.mathworks.com/products/matlab/live-editor.html>`_...
|
||||
|
||||
Un esempio di notebook `Jupyter` con una cella di testo e una cella di Python che emette un grafico. :cite:`matplotlib:histograms`
|
||||
.. figure:: wolfram_cloud.png
|
||||
|
||||
Un esempio di notebook Mathematica, scritto su Wolfram Cloud.
|
||||
|
||||
|
||||
.. index::
|
||||
|
@ -34,55 +97,86 @@ Alcuni esempi di software per la scrittura di notebook computazionali sono `Jupy
|
|||
Jupyter
|
||||
=======
|
||||
|
||||
*Jupyter* è un'applicazione che permette la scrittura e la visualizzazione di `notebook computazionali <Notebook computazionali>`.
|
||||
*Jupyter* è un software open-source che permette la scrittura e la visualizzazione di `notebook computazionali <Notebook computazionali>`.
|
||||
|
||||
Come tutti i notebook computazionali è strutturato in celle, le quali possono contenere testo, dati oppure codice di programmazione con relativo output.
|
||||
|
||||
Prende ispirazione dai `web-based editor <Web-based editor>`, permettendo agli utenti di modificare i notebook direttamente da un browser web, e include rudimentali funzionalità di collaborazione in tempo reale :cite:`jupyter:collaboration`.
|
||||
|
||||
.. figure:: hist_example.png
|
||||
|
||||
Un esempio di notebook Jupyter con una cella di testo e una cella di Python che emette un grafico.
|
||||
|
||||
|
||||
.. index::
|
||||
single: Jupyter; parti di
|
||||
|
||||
Parti di Jupyter
|
||||
----------------
|
||||
|
||||
Jupyter è composto da 3 parti: un `kernel <Kernel Jupyter>`, un `server <server Jupyter>` e un `client <client Jupyter>`.
|
||||
|
||||
È composta da 3 (o più) parti:
|
||||
|
||||
.. index::
|
||||
single: Jupyter; kernel
|
||||
single: IPython
|
||||
|
||||
- | Un **kernel** per il linguaggio di programmazione che si desidera utilizzare nel notebook (o, se si desidera più linguaggi, un kernel per ciascun linguaggio).
|
||||
| Il kernel si occupa di eseguire su richiesta le celle del notebook, e di rispondere alla richiesta con i risultati dell'esecuzione.
|
||||
| Il kernel predefinito di Jupyter è `IPython <https://ipython.org/>`_, che permette di utilizzare il linguaggio di programmazione `Python <https://www.python.org/>`_.
|
||||
Kernel Jupyter
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Il kernel è la parte di Jupyter che si occupa di eseguire le celle del notebook, restituendone i risultati al `server <server Jupyter>`.
|
||||
|
||||
Per ogni linguaggio di programmazione che si desidera utilizzare nel notebook è necessario il relativo **kernel**: il kernel predefinito di Jupyter è `IPython <https://ipython.org/>`_, che permette di utilizzare il linguaggio di programmazione `Python <https://www.python.org/>`_; sono però disponibili tanti altri kernel, tra cui uno per `Julia <https://julialang.org/>`_ e uno per `R <https://www.r-project.org/>`_ :cite:`jupyter:kernels`.
|
||||
|
||||
|
||||
.. index::
|
||||
single: Jupyter; server
|
||||
|
||||
- | Un **server** che gestisce le richieste dell'utente di interazione con il notebook, inoltrandole a un kernel se necessario.
|
||||
| Il server ufficiale di Jupyter è `Jupyter Server <https://github.com/jupyter-server/jupyter_server>`_.
|
||||
Server Jupyter
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Il **server** è la parte di Jupyter che gestisce le interazioni del `client <client Jupyter>` con il notebook, inoltrandole al `kernel <kernel Jupyter>` appropriato se necessario.
|
||||
|
||||
Il server ufficiale di Jupyter è `Jupyter Server <https://github.com/jupyter-server/jupyter_server>`_.
|
||||
|
||||
|
||||
.. index::
|
||||
single: Jupyter; client
|
||||
single: Jupyter; Notebook
|
||||
single: Jupyter; Lab
|
||||
|
||||
- | un **client** che mostra in un formato user-friendly il contenuto del notebook e gli permette di modificarlo con facilità, connettendosi al relativo server.
|
||||
| Esistono due client ufficiali per Jupyter: il client di vecchia generazione `Jupyter Notebook <https://github.com/jupyter/notebook>`_ e il client di nuova generazione `JupyterLab <https://github.com/jupyterlab>`_.
|
||||
Client Jupyter
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Il **client** è la parte di Jupyter che mostra in un formato user-friendly il contenuto del notebook e gli permette di interagirvi, comunicando le interazioni al `server <server Jupyter>`.
|
||||
|
||||
Esistono due client ufficiali per Jupyter: il client di vecchia generazione `Jupyter Notebook <https://github.com/jupyter/notebook>`_ e il client di nuova generazione `JupyterLab <https://github.com/jupyterlab>`_, entrambi web-based.
|
||||
|
||||
|
||||
.. index::
|
||||
single: Jupyter; hosting
|
||||
|
||||
Hosting di Jupyter
|
||||
==================
|
||||
------------------
|
||||
|
||||
È possibile utilizzare `Jupyter` in diversi modi, ciascuno con alcuni vantaggi e svantaggi.
|
||||
Essendo `server <server Jupyter>` e `client <client Jupyter>` separati, è possibile eseguire il server su una macchina e il client su un'altra.
|
||||
|
||||
È possibile selezionare la macchina su cui eseguire il server in tre modi diversi, elencati nelle prossime sezioni, ciascuno con alcuni vantaggi e svantaggi.
|
||||
|
||||
|
||||
.. index::
|
||||
single: Jupyter; hosting locale
|
||||
|
||||
Hosting locale
|
||||
--------------
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
È possibile installare il server Jupyter sul proprio computer per visualizzare e modificare notebook semplici.
|
||||
È possibile installare il server Jupyter **sul proprio computer** per visualizzare e modificare notebook semplici.
|
||||
|
||||
Così facendo, le celle verranno eseguite con le risorse del proprio computer, e il notebook sarà accessibile solo dal computer che sta eseguendo il server.
|
||||
Così facendo, le celle saranno eseguite con le risorse del proprio computer, e il notebook sarà accessibile solo dal computer che sta eseguendo il server.
|
||||
|
||||
È un ottimo modo per lavorare su progetti personali, in quanto offre la massima personalizzazione dell'ambiente, e per lavorare offline, in quanto è in grado di funzionare senza alcuna connessione ad Internet.
|
||||
È un ottimo modo per lavorare su progetti personali, in quanto offre la massima personalizzazione attraverso un sistema di plugin installabili, e per lavorare offline, in quanto è l'unico modo di usare il server senza connessione ad Internet.
|
||||
|
||||
In base al proprio sistema operativo, però, potrebbe risultare difficile da installare, e in base alla propria configurazione di rete, collaborare su un progetto potrebbe essere impossibile (senza appoggiarsi a strumenti esterni di scambio file, come email, o sistemi di controllo versione).
|
||||
In base al proprio sistema operativo, però, potrebbe risultare difficile da installare, e in base alla propria configurazione di rete, la collaborazione realtime su un progetto potrebbe essere impossibile.
|
||||
|
||||
|
||||
.. index::
|
||||
|
@ -91,15 +185,15 @@ In base al proprio sistema operativo, però, potrebbe risultare difficile da ins
|
|||
single: SageMaker Notebook
|
||||
|
||||
Come software-as-a-service
|
||||
--------------------------
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
È possibile utilizzare un server Jupyter gestito da un cloud provider ed utilizzare le risorse da esso fornite per eseguire le celle.
|
||||
È possibile utilizzare un server Jupyter **gestito da un cloud provider** ed utilizzare le risorse da esso fornite per eseguire le celle.
|
||||
|
||||
Alcuni esempi di cloud provider che forniscono questo servizio sono Google, con `Google Colaboratory <https://colab.research.google.com/#>`_ e Amazon, con `SageMaker Notebook <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html>`_.
|
||||
Un esempio di cloud provider che fornisce questo servizio è Google, con `Google Colaboratory <https://colab.research.google.com/#>`_.
|
||||
|
||||
Generalmente, il modello software-as-a-service è il modo più semplice per usare Jupyter, in quanto non richiede di effettuare alcuna installazione sul proprio computer, e in genere permette la collaborazione online con altri utenti.
|
||||
Usare il modello :abbr:`SaaS <Software as a Service>` è il modo più semplice per usare Jupyter, in quanto non richiede di effettuare alcuna installazione sul proprio computer, e in genere permette di collaborare online con altri utenti.
|
||||
|
||||
Purtroppo, però, offre poche opzioni per personalizzare l'ambiente, e, se si necessitano più risorse di quelle offerte gratuitamente dai provider, il costo cresce molto rapidamente.
|
||||
In genere, però, Jupyter sulle piattaforme :abbr:`SaaS <Software as a Service>` non permette l'installazione di plugin, limitando la personalizzazione, e, se si necessitano più risorse di quelle offerte gratuitamente dai provider, si rischia di trovarsi a pagare mensilmente cifre elevate.
|
||||
|
||||
|
||||
.. index::
|
||||
|
@ -107,12 +201,12 @@ Purtroppo, però, offre poche opzioni per personalizzare l'ambiente, e, se si ne
|
|||
single: Jupyter; Hub
|
||||
|
||||
Hosting on-premises
|
||||
-------------------
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
È possibile configurare un server della propria istituzione in modo tale che esegua uno o più server Jupyter a cui si connetteranno gli utenti.
|
||||
È possibile configurare un **server della propria istituzione** in modo tale che esegua uno o più `server Jupyter <Server Jupyter>` a cui si connetteranno i `client <client Jupyter>`.
|
||||
|
||||
A tale scopo, è disponibile il progetto `JupyterHub <https://jupyter.org/hub>`_, in grado di gestire migliaia di utenti simultanei :cite:`jupyter:ifaq`, ciascuno con il proprio notebook.
|
||||
|
||||
È performante ed efficace, e lascia completa libertà agli utenti di personalizzare il loro ambiente di lavoro.
|
||||
È performante ed efficace, e in base alla configurazione scelta dall'amministratore, può permettere agli utenti di personalizzare il loro ambiente di lavoro con plugin.
|
||||
|
||||
L'interfaccia di gestione utenti e notebook è però ancora molto essenziale, essendo un progetto piuttosto nuovo, e non supporta nativamente la collaborazione multiutente su un singolo notebook, preferendo il modello *"tanti server Jupyter da utente singolo"* :cite:`jupyter:hub`.
|
||||
L'interfaccia di gestione utenti e notebook è però molto essenziale, essendo un progetto piuttosto nuovo, e in aggiunta non supporta nativamente la collaborazione real-time su un singolo notebook, preferendo il modello *"tanti server Jupyter da utente singolo"* :cite:`jupyter:hub`.
|
||||
|
|
BIN
thesis/source/docs/3_presentazione/libreoffice.png
(Stored with Git LFS)
Normal file
BIN
thesis/source/docs/3_presentazione/libreoffice.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
thesis/source/docs/3_presentazione/wolfram_cloud.png
(Stored with Git LFS)
Normal file
BIN
thesis/source/docs/3_presentazione/wolfram_cloud.png
(Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -22,11 +22,36 @@ jupyter:hub,
|
|||
note = {Accessed: 2021-11-16},
|
||||
}
|
||||
|
||||
@misc{
|
||||
jupyter:kernels,
|
||||
author = {Project Jupyter},
|
||||
title = {Jupyter kernels},
|
||||
howpublished = {https://web.archive.org/web/20211118154819/https://github.com/jupyter/jupyter/wiki/Jupyter-kernels},
|
||||
note = {Accessed: 2021-11-18},
|
||||
}
|
||||
|
||||
@misc{
|
||||
jupyter:collaboration,
|
||||
author = {Project Jupyter},
|
||||
title = {Real Time Collaboration},
|
||||
howpublished = {https://web.archive.org/web/20211118174617/https://jupyterlab.readthedocs.io/en/stable/user/rtc.html},
|
||||
note = {Accessed: 2021-11-18},
|
||||
}
|
||||
|
||||
|
||||
@misc{
|
||||
enwiki:993314047,
|
||||
author = {Wikipedia},
|
||||
title = {Electronic lab notebook --- {Wikipedia}{,} The Free Encyclopedia},
|
||||
author = {English Wikipedia},
|
||||
title = {Electronic lab notebook},
|
||||
year = {2020},
|
||||
howpublished = {https://en.wikipedia.org/w/index.php?title=Electronic_lab_notebook&oldid=993314047},
|
||||
note = {Accessed 2021-11-15},
|
||||
}
|
||||
note = {Accessed: 2021-11-15},
|
||||
}
|
||||
|
||||
@misc{
|
||||
overleaf:learn30mins,
|
||||
author = {Overleaf},
|
||||
title = {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},
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue