From dd7f491d46c39841e30bfa0d664de618b8b51ecb Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Thu, 18 Nov 2021 19:32:27 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=93=20Complete=20presentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/poetry.lock | 179 +++++++++++++++++- backend/pyproject.toml | 2 + thesis/source/conf.py | 8 + thesis/source/docs/2_introduzione/index.rst | 2 +- .../docs/3_presentazione/google_docs.png | 3 + thesis/source/docs/3_presentazione/index.rst | 156 ++++++++++++--- .../docs/3_presentazione/libreoffice.png | 3 + .../docs/3_presentazione/wolfram_cloud.png | 3 + thesis/source/refs.bib | 33 +++- 9 files changed, 352 insertions(+), 37 deletions(-) create mode 100644 thesis/source/docs/3_presentazione/google_docs.png create mode 100644 thesis/source/docs/3_presentazione/libreoffice.png create mode 100644 thesis/source/docs/3_presentazione/wolfram_cloud.png diff --git a/backend/poetry.lock b/backend/poetry.lock index 95b3c2c..4e2433e 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -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" }, diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 6e2e242..adadd19 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -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"] diff --git a/thesis/source/conf.py b/thesis/source/conf.py index 41efad0..47226c5 100644 --- a/thesis/source/conf.py +++ b/thesis/source/conf.py @@ -159,3 +159,11 @@ bibtex_bibfiles = [ "refs.bib", ] bibtex_reference_style = "super" + +# Rinohtype +rinoh_documents = [ + { + "doc": "index", + "target": "manual", + } +] diff --git a/thesis/source/docs/2_introduzione/index.rst b/thesis/source/docs/2_introduzione/index.rst index 41217e3..4066aa1 100644 --- a/thesis/source/docs/2_introduzione/index.rst +++ b/thesis/source/docs/2_introduzione/index.rst @@ -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: diff --git a/thesis/source/docs/3_presentazione/google_docs.png b/thesis/source/docs/3_presentazione/google_docs.png new file mode 100644 index 0000000..baf76ad --- /dev/null +++ b/thesis/source/docs/3_presentazione/google_docs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d41465bfa37d6f8613cfb4b1bbf72b38b449b31d1ee09ae8e51efeb8c76e810 +size 38439 diff --git a/thesis/source/docs/3_presentazione/index.rst b/thesis/source/docs/3_presentazione/index.rst index e0762f8..449e888 100644 --- a/thesis/source/docs/3_presentazione/index.rst +++ b/thesis/source/docs/3_presentazione/index.rst @@ -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 `. +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 `. + + +.. 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 `_, usato ancora oggi in combinazione con il sistema `LaTeX `_ per comporre documenti accademici come paper e tesi (inclusa questa), e `roff `_, su cui si basa oggi lo strumento `groff `_ 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 ` 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 `_ e `LibreOffice 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 `_, rilasciato nel 2009; la sua popolarità ha portato allo sviluppo di alternative come `Office 365 `_, una versione web di `Microsoft Word `. + +.. 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 `, 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 `_, `MATLAB Live Editor `_... +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 `_, `Wolfram Mathematica `_, `MATLAB Live Editor `_... - 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 `. +*Jupyter* è un software open-source che permette la scrittura e la visualizzazione di `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 `, 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 `, un `server ` e un `client `. -È 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 `_, che permette di utilizzare il linguaggio di programmazione `Python `_. +Kernel Jupyter +^^^^^^^^^^^^^^ + +Il kernel è la parte di Jupyter che si occupa di eseguire le celle del notebook, restituendone i risultati al `server `. + +Per ogni linguaggio di programmazione che si desidera utilizzare nel notebook è necessario il relativo **kernel**: il kernel predefinito di Jupyter è `IPython `_, che permette di utilizzare il linguaggio di programmazione `Python `_; sono però disponibili tanti altri kernel, tra cui uno per `Julia `_ e uno per `R `_ :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 `_. +Server Jupyter +^^^^^^^^^^^^^^ + +Il **server** è la parte di Jupyter che gestisce le interazioni del `client ` con il notebook, inoltrandole al `kernel ` appropriato se necessario. + +Il server ufficiale di Jupyter è `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 `_ e il client di nuova generazione `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 `. + +Esistono due client ufficiali per Jupyter: il client di vecchia generazione `Jupyter Notebook `_ e il client di nuova generazione `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 ` e `client ` 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 `_ e Amazon, con `SageMaker Notebook `_. +Un esempio di cloud provider che fornisce questo servizio è Google, con `Google Colaboratory `_. -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 ` è 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 ` 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 ` a cui si connetteranno i `client `. A tale scopo, è disponibile il progetto `JupyterHub `_, 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`. diff --git a/thesis/source/docs/3_presentazione/libreoffice.png b/thesis/source/docs/3_presentazione/libreoffice.png new file mode 100644 index 0000000..1e3e684 --- /dev/null +++ b/thesis/source/docs/3_presentazione/libreoffice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac7cc5aae3efbeca65a8e8588b836caabba3f14dd9b448e61d5ee413d4f9419c +size 31069 diff --git a/thesis/source/docs/3_presentazione/wolfram_cloud.png b/thesis/source/docs/3_presentazione/wolfram_cloud.png new file mode 100644 index 0000000..c4b8550 --- /dev/null +++ b/thesis/source/docs/3_presentazione/wolfram_cloud.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:734e26d6368ab13f88a65383107b968b4dec82076ff3327289128fe94aed65f2 +size 37504 diff --git a/thesis/source/refs.bib b/thesis/source/refs.bib index 3505256..cbf293e 100644 --- a/thesis/source/refs.bib +++ b/thesis/source/refs.bib @@ -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}, -} \ No newline at end of file + 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}, +}