<spanid="index-0"></span><h1><spanclass="section-number">3. </span>Ricerca collaborativa<aclass="headerlink"href="#ricerca-collaborativa"title="Link a questa intestazione"></a></h1>
<p>Nelle scienze, sia teoriche, sia sperimentali, si verifica spesso la necessità di dover prendere appunti e condividere appunti sulla ricerca effettuata.</p>
<p>Mentre in passato a tale scopo venivano utilizzati quaderni di carta (detti anche <em>"blocchi note laboratoriali"</em><aclass="reference internal"href="../bibliografia/index.html#wiki-eln"id="id1"><span>[wiki:eln]</span></a>), con la nascita dell'informatica si iniziarono ad utilizzare strumenti digitali, più comodi ed efficienti: inizialmente, semplici sistemi di composizione tipografica come <em>TeX</em>, poi editor <abbrtitle="What You See Is What You Get">WYSIWYG</abbr> come <em>Microsoft Word</em>, arrivando infine negli ultimi anni ai più avanzati e interattivi <aclass="reference internal"href="#notebook-computazionali"><spanclass="std std-ref">notebook computazionali</span></a>.</p>
<sectionid="sistemi-di-composizione-tipografica">
<spanid="index-1"></span><h2><spanclass="section-number">3.1. </span>Sistemi di composizione tipografica<aclass="headerlink"href="#sistemi-di-composizione-tipografica"title="Link a questa intestazione"></a></h2>
<p>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.</p>
<p>Sono esempi di sistemi di composizione tipografica <aclass="reference external"href="https://www.tug.org/begin.html">TeX</a>, usato ancora oggi in combinazione con il sistema <aclass="reference external"href="https://www.latex-project.org//">LaTeX</a> per comporre documenti accademici come paper e tesi (inclusa questa), e <aclass="reference external"href="https://en.wikipedia.org/wiki/Roff_(software)">roff</a>, su cui si basa oggi lo strumento <aclass="reference external"href="https://it.wikipedia.org/wiki/Groff_(software)">groff</a> per comporre le pagine di manuale dei sistemi operativi Unix-like.</p>
<p>Un esempio di documento LaTeX <aclass="reference internal"href="../bibliografia/index.html#overleaf-learn30mins"id="id2"><span>[overleaf:learn30mins]</span></a> è il seguente:</p>
<spanid="index-2"></span><h2><spanclass="section-number">3.2. </span>Editor WYSIWYG<aclass="headerlink"href="#editor-wysiwyg"title="Link a questa intestazione"></a></h2>
<p>Con l'evolversi dei sistemi operativi, in particolare con la diffusione dei sistemi operativi a finestre, sono stati sviluppati software detti "editor di testo <abbrtitle="What You See Is What You Get">WYSIWYG</abbr>", che permettono di scrivere documenti avendo un'anteprima istantanea del testo inserito.</p>
<p>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 <aclass="reference internal"href="#sistemi-di-composizione-tipografica"><spanclass="std std-ref">sistemi di composizione tipografica</span></a> ad ambiti in cui era necessaria una formattazione avanzata dei documenti.</p>
<p>Alcuni esempi moderni di editor <abbrtitle="What You See Is What You Get">WYSIWYG</abbr> sono <aclass="reference external"href="https://www.microsoft.com/it-it/microsoft-365/word">Microsoft Word</a> e <aclass="reference external"href="https://it.libreoffice.org/scopri/writer/">LibreOffice Writer</a>.</p>
<p><spanclass="caption-number">Figura 3.2.1 </span><spanclass="caption-text">Modifica di un documento su LibreOffice 7.2.2.2.</span><aclass="headerlink"href="#id9"title="Link a questa immagine"></a></p>
</figcaption>
</figure>
</section>
<sectionid="web-based-editor">
<spanid="index-3"></span><h2><spanclass="section-number">3.3. </span>Web-based editor<aclass="headerlink"href="#web-based-editor"title="Link a questa intestazione"></a></h2>
<p>Il paradigma web "2.0" ha portato miglioramenti significativi agli editor <abbrtitle="What You See Is What You Get">WYSIWYG</abbr>, rendendoli utilizzabili online come software-as-a-service direttamente da un browser.</p>
<p>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.</p>
<p>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.</p>
<p>Il più importante di questi editor è <aclass="reference external"href="https://docs.google.com/">Google Docs</a>, rilasciato nel 2009; la sua popolarità ha portato allo sviluppo di alternative come <aclass="reference external"href="https://www.office.com/">Office 365</a>, una versione web di <aclass="reference internal"href="#editor-wysiwyg"><spanclass="std std-ref">Microsoft Word</span></a>.</p>
<p><spanclass="caption-number">Figura 3.3.1 </span><spanclass="caption-text">Un esempio di collaborazione su un documento Google Docs.</span><aclass="headerlink"href="#id10"title="Link a questa immagine"></a></p>
</figcaption>
</figure>
</section>
<sectionid="notebook-computazionali">
<spanid="index-4"></span><h2><spanclass="section-number">3.4. </span>Notebook computazionali<aclass="headerlink"href="#notebook-computazionali"title="Link a questa intestazione"></a></h2>
<p>In parallelo ai <aclass="reference internal"href="#web-based-editor"><spanclass="std std-ref">web-based editor</span></a>, ha preso piede nel mondo della ricerca scientifica una nuova tipologia di documento: il notebook computazionale.</p>
<p>I <em>notebook computazionali</em> sono un tipo di documento interattivo che permette contemporaneamente di analizzare dati, elaborarli e documentare elaborazioni effettuate e risultati ottenuti.</p>
<p>Essi sono composti da tante <strong>celle</strong>, 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.</p>
<p>Alcuni esempi di software per la scrittura di notebook computazionali sono <aclass="reference external"href="https://jupyter.org/">Jupyter</a>, <aclass="reference external"href="https://www.wolfram.com/mathematica/">Wolfram Mathematica</a>, <aclass="reference external"href="https://it.mathworks.com/products/matlab/live-editor.html">MATLAB Live Editor</a>...</p>
<p><spanclass="caption-number">Figura 3.4.1 </span><spanclass="caption-text">Un esempio di notebook Mathematica, scritto su Wolfram Cloud.</span><aclass="headerlink"href="#id11"title="Link a questa immagine"></a></p>
</figcaption>
</figure>
</section>
<sectionid="index-5">
<spanid="id3"></span><h2><spanclass="section-number">3.5. </span>Jupyter<aclass="headerlink"href="#index-5"title="Link a questa intestazione"></a></h2>
<p><em>Jupyter</em> è un software open-source che permette la scrittura e la visualizzazione di <aclass="reference internal"href="#notebook-computazionali"><spanclass="std std-ref">notebook computazionali</span></a>.</p>
<p>Come tutti i notebook computazionali è strutturato in celle, le quali possono contenere testo, dati oppure codice di programmazione con relativo output.</p>
<p>Prende ispirazione dai <aclass="reference internal"href="#web-based-editor"><spanclass="std std-ref">web-based editor</span></a>, permettendo agli utenti di modificare i notebook direttamente da un browser web, e include rudimentali funzionalità di collaborazione in tempo reale <aclass="reference internal"href="../bibliografia/index.html#jupyter-collaboration"id="id4"><span>[jupyter:collaboration]</span></a>.</p>
<p><spanclass="caption-number">Figura 3.5.1 </span><spanclass="caption-text">Un esempio di notebook Jupyter con una cella di testo e una cella di Python che emette un grafico <aclass="reference internal"href="../bibliografia/index.html#matplotlib-histograms"id="id5"><span>[matplotlib:histograms]</span></a>.</span><aclass="headerlink"href="#id12"title="Link a questa immagine"></a></p>
</figcaption>
</figure>
<sectionid="componenti-di-jupyter">
<spanid="index-6"></span><h3>Componenti di Jupyter<aclass="headerlink"href="#componenti-di-jupyter"title="Link a questa intestazione"></a></h3>
<p>Jupyter è composto da 3 componenti: un <aclass="reference internal"href="#kernel-jupyter"><spanclass="std std-ref">kernel</span></a>, un <aclass="reference internal"href="#server-jupyter"><spanclass="std std-ref">server</span></a> e un <aclass="reference internal"href="#client-jupyter"><spanclass="std std-ref">client</span></a>.</p>
<sectionid="kernel-jupyter">
<spanid="index-7"></span><h4>Kernel Jupyter<aclass="headerlink"href="#kernel-jupyter"title="Link a questa intestazione"></a></h4>
<p>Il kernel è la parte di Jupyter che si occupa di eseguire le celle del notebook, restituendone i risultati al <aclass="reference internal"href="#server-jupyter"><spanclass="std std-ref">server</span></a>.</p>
<p>Per ogni linguaggio di programmazione che si desidera utilizzare nel notebook è necessario il relativo <strong>kernel</strong>: il kernel predefinito di Jupyter è <aclass="reference external"href="https://ipython.org/">IPython</a>, che permette di utilizzare il linguaggio di programmazione <aclass="reference external"href="https://www.python.org/">Python</a>; sono però disponibili tanti altri kernel, tra cui uno per <aclass="reference external"href="https://julialang.org/">Julia</a> e uno per <aclass="reference external"href="https://www.r-project.org/">R</a><aclass="reference internal"href="../bibliografia/index.html#jupyter-kernels"id="id6"><span>[jupyter:kernels]</span></a>.</p>
</section>
<sectionid="server-jupyter">
<spanid="index-8"></span><h4>Server Jupyter<aclass="headerlink"href="#server-jupyter"title="Link a questa intestazione"></a></h4>
<p>Il <strong>server</strong> è la parte di Jupyter che gestisce le interazioni del <aclass="reference internal"href="#client-jupyter"><spanclass="std std-ref">client</span></a> con il notebook, inoltrandole al <aclass="reference internal"href="#kernel-jupyter"><spanclass="std std-ref">kernel</span></a> appropriato se necessario.</p>
<p>Il server ufficiale di Jupyter è <aclass="reference external"href="https://github.com/jupyter-server/jupyter_server">Jupyter Server</a>.</p>
</section>
<sectionid="client-jupyter">
<spanid="index-9"></span><h4>Client Jupyter<aclass="headerlink"href="#client-jupyter"title="Link a questa intestazione"></a></h4>
<p>Il <strong>client</strong> è la parte di Jupyter che mostra in un formato user-friendly il contenuto del notebook e gli permette di interagirvi, comunicando le interazioni al <aclass="reference internal"href="#server-jupyter"><spanclass="std std-ref">server</span></a>.</p>
<p>Esistono due client ufficiali per Jupyter: il client di vecchia generazione <aclass="reference external"href="https://github.com/jupyter/notebook">Jupyter Notebook</a> e il client di nuova generazione <aclass="reference external"href="https://github.com/jupyterlab">JupyterLab</a>, entrambi web-based.</p>
</section>
</section>
<sectionid="hosting-di-jupyter">
<spanid="index-10"></span><h3>Hosting di Jupyter<aclass="headerlink"href="#hosting-di-jupyter"title="Link a questa intestazione"></a></h3>
<p>Essendo <aclass="reference internal"href="#server-jupyter"><spanclass="std std-ref">server</span></a> e <aclass="reference internal"href="#client-jupyter"><spanclass="std std-ref">client</span></a> separati, è possibile eseguire il server su una macchina e il client su un'altra.</p>
<p>È possibile selezionare la macchina su cui eseguire il server in tre modi diversi, elencati nelle prossime sezioni, ciascuno con alcuni vantaggi e svantaggi.</p>
<sectionid="hosting-locale">
<h4>Hosting locale<aclass="headerlink"href="#hosting-locale"title="Link a questa intestazione"></a></h4>
<p>È possibile installare il server Jupyter <strong>sul proprio computer</strong>.</p>
<p>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.</p>
<p>È 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.</p>
<p>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.</p>
</section>
<sectionid="come-software-as-a-service">
<spanid="index-11"></span><h4>Come software-as-a-service<aclass="headerlink"href="#come-software-as-a-service"title="Link a questa intestazione"></a></h4>
<p>È possibile utilizzare un server Jupyter <strong>gestito da un cloud provider</strong> ed utilizzare le risorse da esso fornite per eseguire le celle.</p>
<p>Un esempio di cloud provider che fornisce questo servizio è Google, con <aclass="reference external"href="https://colab.research.google.com/#">Google Colaboratory</a>.</p>
<p>Usare il modello <abbrtitle="Software as a Service">SaaS</abbr> è 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.</p>
<p>Di contro, però, Jupyter sulle piattaforme <abbrtitle="Software as a Service">SaaS</abbr> non permette l'installazione di plugin, limitando la personalizzazione, e, se si necessitano più risorse di quelle offerte gratuitamente dai provider, si rischiano canoni mensili elevati.</p>
</section>
<sectionid="hosting-on-premises">
<spanid="index-12"></span><h4>Hosting on-premises<aclass="headerlink"href="#hosting-on-premises"title="Link a questa intestazione"></a></h4>
<p>È possibile configurare un <strong>server della propria istituzione</strong> in modo tale che esegua uno o più <aclass="reference internal"href="#server-jupyter"><spanclass="std std-ref">server Jupyter</span></a> a cui si connetteranno i <aclass="reference internal"href="#client-jupyter"><spanclass="std std-ref">client</span></a>.</p>
<p>A tale scopo, è disponibile il progetto <aclass="reference external"href="https://jupyter.org/hub">JupyterHub</a>, in grado di gestire migliaia di utenti simultanei <aclass="reference internal"href="../bibliografia/index.html#jupyter-ifaq"id="id7"><span>[jupyter:ifaq]</span></a>, ciascuno con il proprio notebook.</p>
<p>È performante ed efficace, e in base alla configurazione scelta dall'amministratore, può permettere agli utenti di personalizzare il loro ambiente di lavoro con plugin.</p>
<p>L'interfaccia di gestione utenti e notebook è però molto essenziale, e in aggiunta non supporta nativamente la collaborazione real-time su un singolo notebook, preferendo il modello <em>"tanti server Jupyter da utente singolo"</em><aclass="reference internal"href="../bibliografia/index.html#jupyter-hub"id="id8"><span>[jupyter:hub]</span></a>.</p>
</section>
</section>
</section>
</section>
</div>
</div>
<footer><divclass="rst-footer-buttons"role="navigation"aria-label="Piè di pagina">
<ahref="../introduzione/index.html"class="btn btn-neutral float-left"title="2. Introduzione alla tesi"accesskey="p"rel="prev"><spanclass="fa fa-arrow-circle-left"aria-hidden="true"></span> Precedente</a>
<ahref="../progetto/index.html"class="btn btn-neutral float-right"title="4. Progettazione di Sophon"accesskey="n"rel="next">Prossimo <spanclass="fa fa-arrow-circle-right"aria-hidden="true"></span></a>