Commit 548469b4 authored by Arnaud Legrand's avatar Arnaud Legrand

Remove all html generated files (from the 1st edition) and automate org -> markdown generation

parent a5fc7359
ressources-md:
for i in module1/ressources module2/ressources module3/ressources \
module4/ressources; do \
make -C $$i; \
done
%.md: %.org
pandoc -f org -t markdown_github -o $@ $^
# %.html: %.org
# emacs -batch $^ --funcall org-html-export-to-html
# sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
# -e 's/<li>/<li style="margin-bottom:0;">/g' \
# -e 's/<ul>/<ul style="margin:0 0;">/g' $@
# mv $@ $@.bak
# html_png_inliner.pl < $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
# rm $@.bak
clean:
rm -f *~
all: introduction_to_markdown.html
all: introduction_to_markdown.md
NLINES=10000000
%.html: %.org
emacs -batch $^ --funcall org-html-export-to-html
sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
-e 's/<li>/<li style="margin-bottom:0;">/g' \
-e 's/<ul>/<ul style="margin:0 0;">/g' $@
mv $@ $@.bak
cat $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
rm $@.bak
include ../../Makefile.ressources
<div id="content">
<h1 class="title">Introduction à Markdown</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org99b4a98">Syntaxe</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org28d66f2">Headers</a></li>
<li style="margin-bottom:0;"><a href="#orgc27acce">Emphasis</a></li>
<li style="margin-bottom:0;"><a href="#org50640c4">Lists</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org11d3314">Unordered</a></li>
<li style="margin-bottom:0;"><a href="#org0453134">Ordered</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#orgda3d80b">Images</a></li>
<li style="margin-bottom:0;"><a href="#org7cb67aa">Links</a></li>
<li style="margin-bottom:0;"><a href="#orge09365f">Blockquotes</a></li>
<li style="margin-bottom:0;"><a href="#orgfa4914a">Inline code</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org8737c71">Écrire des Maths</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org6dc05c1">Lettres grecques</a></li>
<li style="margin-bottom:0;"><a href="#org2d8310d">Fonctions et opérateurs</a></li>
<li style="margin-bottom:0;"><a href="#org69729f8">Exposants et indices</a></li>
<li style="margin-bottom:0;"><a href="#org39a711a">Fractions, coefficients binomiaux, racines, &#x2026;</a></li>
<li style="margin-bottom:0;"><a href="#org4b11fa4">Sommes et intégrales</a></li>
<li style="margin-bottom:0;"><a href="#org55cc222">Déguisements</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org5bb515f">Autour de <code>markdown</code></a></li>
</ul>
</div>
</div>
<p>
Voici un aperçu rapide de la syntaxe Markdown repris d'une
<a href="https://guides.github.com/features/mastering-markdown/">présentation de Github</a> ainsi que de celles d'<a href="http://csrgxtu.github.io/2015/03/20/Writing-Mathematic-Fomulars-in-Markdown/">Archer Reilly</a>.
</p>
<div id="outline-container-org99b4a98" class="outline-2">
<h2 id="org99b4a98">Syntaxe</h2>
<div class="outline-text-2" id="text-org99b4a98">
</div>
<div id="outline-container-org28d66f2" class="outline-3">
<h3 id="org28d66f2">Headers</h3>
<div class="outline-text-3" id="text-org28d66f2">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
# This is an &lt;h1&gt; tag
## This is an &lt;h2&gt; tag
###### This is an &lt;h6&gt; tag
</pre>
</div>
</div>
<div id="outline-container-orgc27acce" class="outline-3">
<h3 id="orgc27acce">Emphasis</h3>
<div class="outline-text-3" id="text-orgc27acce">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
*This text will be italic*
_This will also be italic_
**This text will be bold**
__This will also be bold__
_You **can** combine them_
</pre>
</div>
</div>
<div id="outline-container-org50640c4" class="outline-3">
<h3 id="org50640c4">Lists</h3>
<div class="outline-text-3" id="text-org50640c4">
</div>
<div id="outline-container-org11d3314" class="outline-4">
<h4 id="org11d3314">Unordered</h4>
<div class="outline-text-4" id="text-org11d3314">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
- Item 1
- Item 2
- Item 2a
- Item 2b
</pre>
</div>
</div>
<div id="outline-container-org0453134" class="outline-4">
<h4 id="org0453134">Ordered</h4>
<div class="outline-text-4" id="text-org0453134">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
1. Item 1
2. Item 2
3. Item 3
1. Item 3a
2. Item 3b
</pre>
</div>
</div>
</div>
<div id="outline-container-orgda3d80b" class="outline-3">
<h3 id="orgda3d80b">Images</h3>
<div class="outline-text-3" id="text-orgda3d80b">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
![GitHub Logo](/images/logo.png)
Format: ![Alt Text](url)
</pre>
</div>
</div>
<div id="outline-container-org7cb67aa" class="outline-3">
<h3 id="org7cb67aa">Links</h3>
<div class="outline-text-3" id="text-org7cb67aa">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
http://github.com - automatic!
[GitHub](http://github.com)
</pre>
</div>
</div>
<div id="outline-container-orge09365f" class="outline-3">
<h3 id="orge09365f">Blockquotes</h3>
<div class="outline-text-3" id="text-orge09365f">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
As Kanye West said:
&gt; We're living the future so
&gt; the present is our past.
</pre>
</div>
</div>
<div id="outline-container-orgfa4914a" class="outline-3">
<h3 id="orgfa4914a">Inline code</h3>
<div class="outline-text-3" id="text-orgfa4914a">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
To print some text with python, you should use the `print()` function.
```
print("Hello world!")
```
</pre>
</div>
</div>
</div>
<div id="outline-container-org8737c71" class="outline-2">
<h2 id="org8737c71">Écrire des Maths</h2>
<div class="outline-text-2" id="text-org8737c71">
<p>
Il est possible d'écrire des formules en Markdown, soit en mode <b>inline</b>
soit en mode <b>displayed formulas</b>. Dans le premier cas, les formules
sont inclues directement à l'intérieur du paragraphe courant alors
que dans le second, elles apparaissent centrées et mises en exergue.
</p>
<p>
Le formatage de la formule est légèrement différent dans les deux cas
car pour qu'une formule s'affiche joliment sur une seule ligne, il
faut la "tasser" un peu plus que lorsqu'elle est mise en valeur.
</p>
<p>
Pour écrire une formule en mode <b>inline</b>, il faut la délimiter par un <code>$</code>
(du coup, pour écrire le symbole dollar, il faut le préfixer par un
backslash, comme ceci: <code>\$</code>) alors que pour écrire en mode <b>displayed</b>, il
faut la délimiter par un <code>$$</code>. Un petit exemple valant mieux qu'un long
discours, voici concrètement comment cela fonctionne:
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Cette expression $\sum_{i=1}^n X_i$ est inlinée.
</pre>
<p>
Cette expression \(\sum_{i=1}^n X_i\) est inlinée.
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Cette expression est mise en valeur:
$$\sum_{i=1}^n X_i$$
</pre>
<p>
Cette expression est mise en valeur:
</p>
<p>
\[\sum_{i=1}^n X_i\]
</p>
<p>
Nous vous présentons par la suite une sélection de symboles et de
commandes courantes. En fait, à peu près tout ce qui est classique
dans le langage LaTeX peut être utilisé pourvu que vous délimitiez
bien avec un <code>$</code>. Pour d'autres exemples plus complets jetez un coup
d'œil à ces <a href="http://www.statpower.net/Content/310/R%20Stuff/SampleMarkdown.html">exemples de James H. Steiger</a>.
</p>
</div>
<div id="outline-container-org6dc05c1" class="outline-3">
<h3 id="org6dc05c1">Lettres grecques</h3>
<div class="outline-text-3" id="text-org6dc05c1">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\alpha\)</td>
<td class="org-left"><code>$\alpha$</code></td>
</tr>
<tr>
<td class="org-left">\(\beta\)</td>
<td class="org-left"><code>$\beta$</code></td>
</tr>
<tr>
<td class="org-left">\(\gamma\)</td>
<td class="org-left"><code>$\gamma$</code></td>
</tr>
<tr>
<td class="org-left">\(\Gamma\)</td>
<td class="org-left"><code>$\Gamma$</code></td>
</tr>
<tr>
<td class="org-left">\(\pi\)</td>
<td class="org-left"><code>$\pi$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org2d8310d" class="outline-3">
<h3 id="org2d8310d">Fonctions et opérateurs</h3>
<div class="outline-text-3" id="text-org2d8310d">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\cos\)</td>
<td class="org-left"><code>$\cos$</code></td>
</tr>
<tr>
<td class="org-left">\(\sin\)</td>
<td class="org-left"><code>$\sin$</code></td>
</tr>
<tr>
<td class="org-left">\(\lim\)</td>
<td class="org-left"><code>$\lim$</code></td>
</tr>
<tr>
<td class="org-left">\(\exp\)</td>
<td class="org-left"><code>$\exp$</code></td>
</tr>
<tr>
<td class="org-left">\(\to\)</td>
<td class="org-left"><code>$\to$</code></td>
</tr>
<tr>
<td class="org-left">\(\in\)</td>
<td class="org-left"><code>$\in$</code></td>
</tr>
<tr>
<td class="org-left">\(\forall\)</td>
<td class="org-left"><code>$\forall$</code></td>
</tr>
<tr>
<td class="org-left">\(\exists\)</td>
<td class="org-left"><code>$\exists$</code></td>
</tr>
<tr>
<td class="org-left">\(\equiv\)</td>
<td class="org-left"><code>$\equiv$</code></td>
</tr>
<tr>
<td class="org-left">\(\sim\)</td>
<td class="org-left"><code>$\sim$</code></td>
</tr>
<tr>
<td class="org-left">\(\approx\)</td>
<td class="org-left"><code>$\approx$</code></td>
</tr>
<tr>
<td class="org-left">\(\times\)</td>
<td class="org-left"><code>$\times$</code></td>
</tr>
<tr>
<td class="org-left">\(\le\)</td>
<td class="org-left"><code>$\le$</code></td>
</tr>
<tr>
<td class="org-left">\(\ge\)</td>
<td class="org-left"><code>$\ge$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org69729f8" class="outline-3">
<h3 id="org69729f8">Exposants et indices</h3>
<div class="outline-text-3" id="text-org69729f8">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(k_{n+1}\)</td>
<td class="org-left"><code>$k_{n+1}$</code></td>
</tr>
<tr>
<td class="org-left">\(n^2\)</td>
<td class="org-left"><code>$n^2$</code></td>
</tr>
<tr>
<td class="org-left">\(k_n^2\)</td>
<td class="org-left"><code>$k_n^2$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org39a711a" class="outline-3">
<h3 id="org39a711a">Fractions, coefficients binomiaux, racines, &#x2026;</h3>
<div class="outline-text-3" id="text-org39a711a">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\frac{4z^3}{16}\)</td>
<td class="org-left"><code>$\frac{4z^3}{16}$</code></td>
</tr>
<tr>
<td class="org-left">\(\frac{n!}{k!(n-k)!}\)</td>
<td class="org-left"><code>$\frac{n!}{k!(n-k)!}$</code></td>
</tr>
<tr>
<td class="org-left">\(\binom{n}{k}\)</td>
<td class="org-left"><code>$\binom{n}{k}$</code></td>
</tr>
<tr>
<td class="org-left">\(\frac{\frac{x}{1}}{x - y}\)</td>
<td class="org-left"><code>$\frac{\frac{x}{1}}{x - y}$</code></td>
</tr>
<tr>
<td class="org-left">\(^3/_7\)</td>
<td class="org-left"><code>$^3/_7$</code></td>
</tr>
<tr>
<td class="org-left">\(\sqrt{k}\)</td>
<td class="org-left"><code>$\sqrt{k}$</code></td>
</tr>
<tr>
<td class="org-left">\(\sqrt[n]{k}\)</td>
<td class="org-left"><code>$\sqrt[n]{k}$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org4b11fa4" class="outline-3">
<h3 id="org4b11fa4">Sommes et intégrales</h3>
<div class="outline-text-3" id="text-org4b11fa4">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\sum_{i=1}^{10} t_i\)</td>
<td class="org-left"><code>$\sum_{i=1}^{10} t_i$</code></td>
</tr>
<tr>
<td class="org-left">\(\int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x\)</td>
<td class="org-left"><code>$\int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org55cc222" class="outline-3">
<h3 id="org55cc222">Déguisements</h3>
<div class="outline-text-3" id="text-org55cc222">
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Symbole</th>
<th scope="col" class="org-left">Commande</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(\hat{a}\)</td>
<td class="org-left"><code>$\hat{a}$</code></td>
</tr>
<tr>
<td class="org-left">\(\bar{a}\)</td>
<td class="org-left"><code>$\bar{a}$</code></td>
</tr>
<tr>
<td class="org-left">\(\dot{a}\)</td>
<td class="org-left"><code>$\dot{a}$</code></td>
</tr>
<tr>
<td class="org-left">\(\ddot{a}\)</td>
<td class="org-left"><code>$\ddot{a}$</code></td>
</tr>
<tr>
<td class="org-left">\(\overrightarrow{AB}\)</td>
<td class="org-left"><code>$\overrightarrow{AB}$</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-org5bb515f" class="outline-2">
<h2 id="org5bb515f">Autour de <code>markdown</code></h2>
<div class="outline-text-2" id="text-org5bb515f">
<p>
Tout d'abord, pour aller plus loin avec <code>markdown</code> et ses extensions / ramifications :
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Le didacticiel « <a href="https://enacit1.epfl.ch/markdown-pandoc/">Élaboration et conversion de documents avec Markdown et Pandoc</a> » de Jean-Daniel Bonjour (EPFL), précis, complet, concis, en français ; un vrai bonheur !</li>
<li style="margin-bottom:0;">L'article <a href="https://en.wikipedia.org/wiki/Markdown#Example">Markdown</a> de wikipedia en anglais contient un bon pense-bête sur la syntaxe <code>markdown</code>.</li>
<li style="margin-bottom:0;">Github propose un court et efficace didacticiel (en anglais) : <a href="https://guides.github.com/features/mastering-markdown/">Mastering Markdown</a>.</li>
</ul>
<p>
Comme nous l'illustrons dans la « film d'écran » (<i>screencast</i>), l'éditeur de texte des dépôts <code>github</code> et <code>gitlab</code> permet d'interpréter / transformer à la demande un fichier <code>mardown</code> en un fichier <code>html</code>. C'est à la fois agréable et pratique, mais ce n'est pas une solution pour une utilisation quotidienne de <code>markdown</code>, pour cela, il est plus efficace d'éditer son texte, avec un éditeur de texte, sur son ordinateur, avant de « l'exporter » dans un format comme <code>html</code>, <code>pdf</code>, <code>docx</code>, <code>epub</code>, etc. Il existe des éditeurs plus ou moins spécialisés pour <code>markdown</code>, certains sont indiqués sur la page <a href="https://github.com/jgm/pandoc/wiki/Pandoc-Extras#editors">Editors</a> du site de <code>pandoc</code>, mais nous préconisons clairement l'emploi d'un éditeur de texte « généraliste » capable de reconnaître la syntaxe <code>markdown</code>. Nous en avons indiqué en début de séquence et on pourra trouver des informations complémentaires dans la section <a href="https://enacit1.epfl.ch/markdown-pandoc/#editeurs_markdown">Quelques éditeurs adaptés à l'édition Markdown</a> du didacticiel de Jean-Daniel Bonjour.
</p>
<p>
Pour convertir un fichier <code>markdown</code> en un format « arbitraire », la solution à ce jour la plus complète est <a href="http://pandoc.org/">Pandoc</a>, logiciel développé par John MacFarlane, un philosophe de Berkeley (le site <a href="https://github.com/jgm/pandoc">github</a>). En plus du site de <code>Pandoc</code>, le didacticiel de J.-D. Bonjour donne de nombreuses explications sur comment installer et utiliser <code>pandoc</code> dans la section <a href="https://enacit1.epfl.ch/markdown-pandoc/#commande_pandoc">Utilisation du convertisseur Pandoc</a>. Comme <code>pandoc</code> &#x2013; écrit en Haskell &#x2013; peut être parfois un peu difficile à installer, nous indiquons maintenant quelques solutions alternatives :
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Des sites comme <a href="http://www.markdowntopdf.com/">http://www.markdowntopdf.com/</a> et <a href="http://markdown2pdf.com/">http://markdown2pdf.com/</a> permettent de convertir en ligne un fichier <code>markdown</code> en un fichier <code>pdf</code>.</li>
<li style="margin-bottom:0;">Le projet <a href="http://commonmark.org/">CommonMark</a> propose, en plus d'une spécifications plus rigoureuse de la syntaxe <code>markdown</code>, des convertisseurs <code>markdown</code><code>html</code> / <code>LaTeX</code> (et plus) écris en <code>C</code> et en <code>JavaScript</code> (<a href="https://github.com/CommonMark/CommonMark">https://github.com/CommonMark/CommonMark</a>).</li>
<li style="margin-bottom:0;">Le site de <a href="https://daringfireball.net/projects/markdown/">John Gruber</a>, le créateur de <code>markdown</code>, fournit un convertisseur <code>markdown</code><code>html</code> écrit en <code>perl</code>.</li>
<li style="margin-bottom:0;"><a href="http://fletcherpenney.net/multimarkdown/">MultiMarkdown</a> est une autre extension de <code>markdown</code> qui vient avec son convertisseur <code>markdown</code><code>html</code> écrit en <code>C</code>.</li>
<li style="margin-bottom:0;"><a href="https://github.com/joeyespo/grip">grip</a> est un serveur écrit en <code>python</code> qui permet de convertir et visualiser à la volée des fichiers <code>markdown</code> avec son navigateur (très utile pour éviter d'avoir à faire des « commits » en grande quantité lorsqu'on écrit de tels fichiers pour un dépôt <code>github</code> ou <code>gitlab</code>).</li>
</ul>
<p>
La conversion en <code>pdf</code> passe toujours par <a href="https://fr.wikipedia.org/wiki/LaTeX">LaTeX</a> ce qui nécessite d'avoir une version complète et à jour de ce logiciel sur sa machine.
</p>
<p>
Dans la petite démonstration, nous montrons comment générer un fichier <code>docx</code> à partir d'un fichier <code>md</code> avec <code>Pandoc</code> et nous soulignons qu'il est alors possible d'utiliser un traitement de texte comme <code>LibreOffice</code> pour modifier le fichier obtenu. Il est clair que si des modifications sont apportées au <code>docx</code> elle en seront pas (automatiquement) propagées au <code>md</code>. Il faudra utiliser <code>Pandoc</code> pour cela et effectuer une conversion de <code>docx</code> vers <code>md</code> (et seules les éléments du format <code>docx</code> qui existent en <code>md</code> seront conservés).
</p>
<p>
Une stratégie qui est souvent employée et qui fonctionne bien en pratique consiste à faire le gros du travail de rédaction d'un article ou d'un mémoire en <code>Markdown</code>. La rédaction terminée, le fichier est exporté au format <code>docx</code> (ou <code>LaTeX</code>) et des ajustements de mise en page sont alors effectués avec un logiciel de traitement de texte (ou un éditeur <code>LaTeX</code>).
</p>
</div>
</div>
</div>
all: gitlab.html emacs_orgmode.html jupyter.html rstudio.html maintaining_a_journal.html
all: emacs_orgmode.md jupyter.md maintaining_a_journal.md gitlab.md gitlab_fr.md rstudio.md rstudio_fr.md video_examples/README.md
NLINES=10000000
include ../../Makefile.ressources
%.html: %.org
emacs -batch $^ --funcall org-html-export-to-html
sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
-e 's/<li>/<li style="margin-bottom:0;">/g' \
-e 's/<ul>/<ul style="margin:0 0;">/g' $@
mv $@ $@.bak
html_png_inliner.pl < $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
rm $@.bak
clean:
rm -f *~
<div id="content">
<h1 class="title">Emacs/org-mode</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org945f839">Installing emacs, org-mode, ess, and auctex.</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orge325516">Linux (Debian, Ubuntu)</a></li>
<li style="margin-bottom:0;"><a href="#org95706b9">macOS</a></li>
<li style="margin-bottom:0;"><a href="#orgb87390f">Windows</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org69f7d5a">Directory naming conventions</a></li>
<li style="margin-bottom:0;"><a href="#orgfe267c7">Making R and Python available to the console</a></li>
<li style="margin-bottom:0;"><a href="#orgc458b5a">Installing and configuring Matplotlib (graphic python library)</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org47ff448">All platforms: pretty code in HTML export</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org98a8b7e">A simple "<i>reproducible research</i>" emacs configuration</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgd0815e9">Step 0: Backup and download our configuration</a></li>
<li style="margin-bottom:0;"><a href="#org9008837">Step 1: Prepare your journal</a></li>
<li style="margin-bottom:0;"><a href="#orgd3b10f7">Step 2: Set up Emacs configuration</a></li>
<li style="margin-bottom:0;"><a href="#org73ef313">Step 3: Adapt the configuration to your specific needs if required</a></li>
<li style="margin-bottom:0;"><a href="#orgc85363f">Step 4: Check whether the installation is working or not</a></li>
<li style="margin-bottom:0;"><a href="#orgadd0750">Step 5: Open and play with your journal:</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org7b9442b">A stub of a replicable article</a></li>
<li style="margin-bottom:0;"><a href="#orgdde4be6">Emacs tips and tricks</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org152ca8a">Cheat-sheets</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org8a94d36">Emacs</a></li>
<li style="margin-bottom:0;"><a href="#org1765514">Org-mode</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org4cc7124">Video tutorials</a></li>
<li style="margin-bottom:0;"><a href="#orgd5c8443">Additional useful emacs packages</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgb58b5a8">Company-mode</a></li>
<li style="margin-bottom:0;"><a href="#orgc20d2e9">Magit</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org9260c82">Other resources</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
<b>Disclaimer:</b> The two sections <span class="underline">A simple "<i>reproducible research</i>" emacs
configuration</span> and <span class="underline">A stub of replicable article</span> explain how to set up
emacs/org-mode for this MOOC. These are very important sections in the
context of this MOOC. <b>These sections are illustrated in two
out of the <a href="https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4">three video tutorials of this sequence</a>, and</b> <b>which you
really should follow carefully</b>. <b>Otherwise, you may have trouble doing
the exercises later on</b>. Likewise, I strongly encourage you to watch
the <a href="https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4">"emacs and git" video tutorial available at the same place</a>.
</p>
<p>
The next section provides information on how to install emacs.
</p>
<div id="outline-container-org945f839" class="outline-2">
<h2 id="org945f839">Installing emacs, org-mode, ess, and auctex.</h2>
<div class="outline-text-2" id="text-org945f839">
</div>
<div id="outline-container-orge325516" class="outline-3">
<h3 id="orge325516">Linux (Debian, Ubuntu)</h3>
<div class="outline-text-3" id="text-orge325516">
<p>
We provide here only instructions for Debian-based distributions. Feel
free to contribute to this document to provide up-to-date information
for other distributions (e.g.n redhat, fedora).
</p>
<p>
Today, the stable versions of the most common distributions provide
recent enough versions of emacs and org-mode:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Debian (stretch) ships with <a href="https://packages.debian.org/stretch/emacs25">emacs 25.1</a> and <a href="https://packages.debian.org/stretch/org-mode">org-mode 9.0.3</a></li>
<li style="margin-bottom:0;">Ubuntu (bionic 18.04) ships with <a href="https://packages.ubuntu.com/bionic/emacs25">emacs 25.2</a> and <a href="https://packages.ubuntu.com/bionic/org-mode">org-mode 9.1.6</a></li>
<li style="margin-bottom:0;">Ubuntu (artful 17.04) ships with <a href="https://packages.ubuntu.com/artful/emacs25">emacs 25.2</a> and <a href="https://packages.ubuntu.com/artful/org-mode">org-mode 9.0.9</a></li>
</ul>
<p>
If your distribution is older than this, well, it may be a good time
for upgrading&#x2026;
</p>
<p>
Simply run (as root):
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">apt-get update ; apt-get install emacs25 org-mode ess r-base auctex
</pre>
</div>
<p>
Then make sure you have a sufficiently recent version of emacs.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">emacs --version 2&gt;&amp;1 | head -n 1
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
GNU Emacs 25.2.2
</pre>
<p>
Likewise, you'll want to check you have a recent version of org-mode:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">emacs -batch --funcall <span style="font-style: italic;">"org-version"</span> 2&gt;&amp;1 | grep version
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Org mode version 9.1.11 (9.1.11-dist @ /usr/share/emacs/25.2/site-lisp/elpa/org-9.1.11/)
</pre>
<p>
The version numbers you get will depend on the distribution you are
running. <span class="underline">You really want to make sure you do not rely on org-mode 8</span>,
which is now deprecated.
</p>
</div>
</div>
<div id="outline-container-org95706b9" class="outline-3">
<h3 id="org95706b9">macOS</h3>
<div class="outline-text-3" id="text-org95706b9">
<p>
<b>Note:</b> macOS comes with a prehistoric command-line-only version of Emacs located at <code>/usr/bin/emacs</code>. It's best to forget about it.
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><p>
<b>Option 1</b>: Install the <code>.dmg</code> file from <a href="http://vgoulet.act.ulaval.ca/">Vincent Goulet</a>:
<a href="https://vigou3.gitlab.io/emacs-modified-macos/">https://vigou3.gitlab.io/emacs-modified-macos/</a>. It ships with recent
versions:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Emacs 26.1</li>
<li style="margin-bottom:0;">Org-mode 9.1.13</li>
<li style="margin-bottom:0;">ESS 17.11</li>
</ul>
<p>
If you install this version of Emacs, or in fact any other version of
Emacs distributed as a clickable application in a <code>.dmg</code> file,
you must type the full path to the executable if you want to run
Emacs from a terminal. For example, if your clickable application
is at <code>/Applications/Emacs.app</code>, then the executable is at
<code>/Applications/Emacs.app/Contents/MacOS/Emacs</code>
</p></li>
<li style="margin-bottom:0;"><p>
<b>Option 2</b>: If you use <a href="https://docs.brew.sh/">Homebrew</a>, do the following:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">brew update
brew install emacs --with-cocoa
brew linkapps emacs
brew install wget
brew tap dunn/emacs
brew install auctex
brew tap brewsci/science
brew install ess
</pre>
</div>
<p>
This provides an <code>emacs</code> command for use from the command line, plus a clickable application at <code>Cellar/emacs/26.1_1/Emacs.app</code> inside your Homebrew directory. If
you installed Homebrew at the default location <code>/usr/local</code>, then this is <code>/usr/local/Cellar/emacs/26.1_1/Emacs.app</code>.
If you installed Homebrew on an account with administrator privileges, you can add
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">brew linkapps emacs
</pre>
</div>
<p>
in order to make Emacs accessible directly from <code>/Applications</code>.
</p></li>
</ul>
</div>
</div>
<div id="outline-container-orgb87390f" class="outline-3">
<h3 id="orgb87390f">Windows</h3>
<div class="outline-text-3" id="text-orgb87390f">
<p>
Install the <code>.exe</code> file from <a href="http://vgoulet.act.ulaval.ca/">Vincent Goulet</a>:
<a href="https://vigou3.gitlab.io/emacs-modified-windows/">https://vigou3.gitlab.io/emacs-modified-windows/</a>. It ships with recent
versions:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Emacs 26.1</li>
<li style="margin-bottom:0;">Org-mode 9.1.13</li>
<li style="margin-bottom:0;">ESS 17.11</li>
</ul>
</div>
<div id="outline-container-org69f7d5a" class="outline-4">
<h4 id="org69f7d5a">Directory naming conventions</h4>
<div class="outline-text-4" id="text-org69f7d5a">
<p>
In the following instructions, we refer to your home
directory through the (UNIX) <code>~/</code> notation. On Windows, your home
directory should be something like <code>C:\Users\yourname</code>. Therefore,
whenever we mention the <code>~/org/</code> (resp. the <code>~/.emacs.d/</code>) directory this
means we are referring to <code>C:\Users\yourname\org</code> (resp.
<code>C:\Users\yourname\.emacs.d\</code>).
</p>
</div>
</div>
<div id="outline-container-orgfe267c7" class="outline-4">
<h4 id="orgfe267c7">Making R and Python available to the console</h4>
<div class="outline-text-4" id="text-orgfe267c7">
<p>
When running a command, Windows will look for the command in the
directories indicated in the <code>PATH</code> environment variable. If none of
these directories contains the command, Windows will stop and indicate
the command does not exist. To make sure R (which may be in
something like <code>C:/Program Files/R/R-3.5.1/bin/x64/</code>) and Python (which may be in something like <code>C:/Program Files/Python/Python37/</code>) can
easily be run from Emacs, you should thus configure the <code>PATH</code> variable
accordingly.
</p>
<p>
This requires to go through the "Environment Variable" editor as
explained <a href="http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-path-sous-windows/">here</a>.
</p>
</div>
</div>
<div id="outline-container-orgc458b5a" class="outline-4">
<h4 id="orgc458b5a">Installing and configuring Matplotlib (graphic python library)</h4>
<div class="outline-text-4" id="text-orgc458b5a">
<p>
Open an DOS console and type the following command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">python -m pip install -U matplotlib
</pre>
</div>
<div class="figure">
<p><img src="data:image/png;base64,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" alt="install_matplotlib.png" /></p>
</div>
<p>
Then you will want to deactivate interactive plots in matplotlib. To
this end, you first need to know where the matplotlib configuration is
located. Open a python console the type the following code:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python"><span style="font-weight: bold;">import</span> matplotlib
matplotlib.matplotlib_fname()
</pre>
</div>
<div class="figure">
<p><img src="data:image/png;base64,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" alt="matplotlib.png" /></p>
</div>
<p>
Open the <code>matplotlibrc</code> file and add a <code>#</code> at the beginning of the line
starting with <code>backend</code>, which amounts to use the default <code>Agg</code> value.
</p>
</div>
</div>
</div>
<div id="outline-container-org47ff448" class="outline-3">
<h3 id="org47ff448">All platforms: pretty code in HTML export</h3>
<div class="outline-text-3" id="text-org47ff448">
<p>
To have code pretty printing when exporting to HTML, you should
install the <code>htmlize</code> package, which is done by opening emacs and
typing the following command:
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
M-x package-install RET htmlize RET # where M-x means pressing the "Esc" key then the "x" key
</pre>
</div>
</div>
</div>
<div id="outline-container-org98a8b7e" class="outline-2">
<h2 id="org98a8b7e">A simple "<i>reproducible research</i>" emacs configuration</h2>
<div class="outline-text-2" id="text-org98a8b7e">
<p>
This section is illustrated in a <a href="https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4">video tutorial</a> (<i>"Mise en place
Emacs/Orgmode"</i> in French). Watching it before following the
instructions given in this section may help.
</p>
<p>
Emacs comes with very basic default configuration and it appears like
everyone has its own taste. You will for example find <a href="https://www.emacswiki.org/emacs/StarterKits">here</a> several
default Emacs configurations that reflect the preferences of their
creators. Likewise the configuration of Org-Mode is incredibly
flexible (see for example <a href="https://orgmode.org/worg/org-configs/index.html">the org-mode website</a> for more
references). In the context of this MOOC, we propose you a relatively
minimalist one that is rather "<i>reproducible research</i>" oriented by
adding a few org-mode specific configurations.
</p>
</div>
<div id="outline-container-orgd0815e9" class="outline-3">
<h3 id="orgd0815e9">Step 0: Backup and download our configuration</h3>
<div class="outline-text-3" id="text-orgd0815e9">
<p>
The procedure we propose will wipe your already existing custom Emacs
configuration if you have one. <b>You should thus beforehand make a
backup</b> of <code>~/.emacs</code> and of <code>~/.emacs.d/init.el</code> (if these files exist).
</p>
<p>
Then download <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/rr_org_archive.tgz">this archive</a> and uncompress it. It contains the
following files and we will refer to them in the following:
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
rr_org/init.el
rr_org/journal.org
</pre>
<p>
Alternatively, <a href="rr_org/">the files you are looking for are available here</a>.
</p>
</div>
</div>
<div id="outline-container-org9008837" class="outline-3">
<h3 id="org9008837">Step 1: Prepare your journal</h3>
<div class="outline-text-3" id="text-org9008837">
<p>
Create an <code>org/</code> directory in the top of your home:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">mkdir -p ~/org/
</pre>
</div>
<p>
Then copy <code>rr_org/journal.org</code> file in your <code>~/org/</code> directory. This
file will be your laboratory notebook and all the notes you will
capture with <code>C-c c</code> will go automatically go in this file. The first
entry of this notebook is populated with <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org">many Emacs shortcuts</a> that you
should give a try.
</p>
</div>
</div>
<div id="outline-container-orgd3b10f7" class="outline-3">
<h3 id="orgd3b10f7">Step 2: Set up Emacs configuration</h3>
<div class="outline-text-3" id="text-orgd3b10f7">
<p>
Copy <code>rr_org/init.el</code> in your <code>~/.emacs.d/</code> directory.
</p>
<p>
Alternatively, if you do not want to mess with your already existing
emacs configuration, you may launch emacs with this specific
configuration with the following command: <code>emacs -q -l rr_org/init.el</code>.
</p>
</div>
</div>
<div id="outline-container-org73ef313" class="outline-3">
<h3 id="org73ef313">Step 3: Adapt the configuration to your specific needs if required</h3>
<div class="outline-text-3" id="text-org73ef313">
<p>
There are two situations in which it might be necessary to modify
<code>init.el</code>:
</p>
<ol class="org-ol">
<li style="margin-bottom:0;">Your network environment forces you to use a proxy for access
to Web sites (HTTP(S) protocol).</li>
<li style="margin-bottom:0;"><p>
You have multiple installations of Python or R on your computer,
or they are in unusual places and not fully configured.
If you can run
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">"python3" and "R" under Linux and macOS</li>
<li style="margin-bottom:0;">"Python" and "R" under Windows</li>
</ul>
<p>
in a terminal without getting an error message, then you should
not have to do anything.
</p></li>
</ol>
<p>
If you do have to modify <code>init.el</code>, check the comments at the
beginning of the file for instructions.
</p>
</div>
</div>
<div id="outline-container-orgc85363f" class="outline-3">
<h3 id="orgc85363f">Step 4: Check whether the installation is working or not</h3>
<div class="outline-text-3" id="text-orgc85363f">
<p>
Open a new instance of Emacs and open a <code>foo.org</code> file. Copy the
following lines in this file:
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
#+begin_src shell :session foo :results output :exports both
ls -la # or dir under windows
#+end_src
</pre>
<p>
Put your cursor inside this code block and execute it with the
following command: <code>C-c C-c</code> (If you are not familiar with Emacs
commands, this one means '<code>Ctrl + C</code>' twice)
</p>
<p>
A <code>#+RESULTS:</code> block with the result of the command should appear if it
worked.
</p>
<p>
In the video, we already have demonstrated the main features and
shortcuts of emacs/org-mode that will help you maintain a document and
benefit from literate programming. The list of features and shortcuts
is demonstrated in the <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org">first entry of your labbook</a>.
</p>
</div>
</div>
<div id="outline-container-orgadd0750" class="outline-3">
<h3 id="orgadd0750">Step 5: Open and play with your journal:</h3>
<div class="outline-text-3" id="text-orgadd0750">
<p>
In step 1, you were told to create an journal in
<code>~org/journal.org</code>. First you probably want to make sure this file is
stored in a version control system like git. We leave it up to you
to set this up but if you have any trouble, feel free to ask on the
FUN forums.
</p>
</div>
</div>
</div>
<div id="outline-container-org7b9442b" class="outline-2">
<h2 id="org7b9442b">A stub of a replicable article</h2>
<div class="outline-text-2" id="text-org7b9442b">
<p>
This section is illustrated in a <a href="https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4">video tutorial</a> (<i>"Écrire un article
réplicable avec Emacs/Orgmode"</i> in French). Watching it before
following the instructions given in this section may help.
</p>
<p>
Remember, you need a working LaTeX and R environment. If you can't
open a terminal and run the commands <code>R</code>, <code>pdflatex</code>, and <code>python</code>, you will not be
able to generate this document. When being compiled, the article downloads the
corresponding LaTeX packages so you also need to have a working <code>wget</code>
command (alternatively, it uses <code>curl</code>). Once downloaded, you may still read the
source (<a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.org">article.org</a>) and understand how it works though.
</p>
<p>
Download the following <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/replicable_article.tgz">archive</a>, uncompress it and simply <code>make</code> to generate the
article. You should then be able to open the <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.pdf">resulting article</a>. This
is summarized in the following command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">wget --no-check-certificate -O replicable_article.tgz https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/replicable_article.tgz
tar zxf replicable_article.tgz; <span style="font-weight: bold;">cd</span> replicable_article; make ; evince article.pdf
</pre>
</div>
<p>
<b>Possible issues</b>:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><p>
If the <code>make</code> command fails (especially on Mac), it may be because
Emacs or something else is not correctly installed. In that case,
open the article directly with the following command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">emacs -q --eval <span style="font-style: italic;">"(setq enable-local-eval t)"</span> --eval <span style="font-style: italic;">"(setq enable-local-variables t)"</span> article.org
</pre>
</div>
<p>
and export it to pdf with the following shortcut: <code>C-c C-e l o</code>
</p></li>
<li style="margin-bottom:0;">If it still doesn't work and emacs complains about not finding ESS,
it may be because you installed ESS in your home instead of
system-wide. In that case, try to remove the <code>-q</code> in the previous
command line to load your personal emacs configuration.</li>
</ul>
<p>
Finally, when you'll be tired of always re-executing all the source
code when exporting, just look for the following line in <a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.org">article.org</a>:
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
# #+PROPERTY: header-args :eval never-export
</pre>
<p>
If you remove the <code></code> in the beginning of the line, it will not be a
comment anymore and will indicate org-mode to stop evaluating every
chunk of code when exporting.
</p>
</div>
</div>
<div id="outline-container-orgdde4be6" class="outline-2">
<h2 id="orgdde4be6">Emacs tips and tricks</h2>
<div class="outline-text-2" id="text-orgdde4be6">
</div>
<div id="outline-container-org152ca8a" class="outline-3">
<h3 id="org152ca8a">Cheat-sheets</h3>
<div class="outline-text-3" id="text-org152ca8a">
<p>
Learning Emacs and Org-Mode can be difficult as there is an inordinate
amount of shortcuts. Many people have thus come up with
cheat-sheats. Here is a selection in case it helps:
</p>
</div>
<div id="outline-container-org8a94d36" class="outline-4">
<h4 id="org8a94d36">Emacs</h4>
<div class="outline-text-4" id="text-org8a94d36">
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org">Common and step-by-step Emacs shortcuts for our <i>reproducible research</i> configuration</a></li>
<li style="margin-bottom:0;"><a href="https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf">The official GNU emacs refcard</a></li>
<li style="margin-bottom:0;">Two graphical cheat-sheats by Sacha Chua on <a href="http://sachachua.com/blog/wp-content/uploads/2013/05/How-to-Learn-Emacs-v2-Large.png">how to learn Emacs</a> and on
<a href="http://sachachua.com/blog/wp-content/uploads/2013/08/20130830-Emacs-Newbie-How-to-Learn-Emacs-Keyboard-Shortcuts.png">how to learn Emacs shortcuts</a>.</li>
</ul>
</div>
</div>
<div id="outline-container-org1765514" class="outline-4">
<h4 id="org1765514">Org-mode</h4>
<div class="outline-text-4" id="text-org1765514">
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org">Common and step-by-step org-mode shortcuts for our <i>reproducible research</i> configuration</a></li>
<li style="margin-bottom:0;"><a href="https://orgmode.org/worg/orgcard.html">The official org-mode refcard</a></li>
<li style="margin-bottom:0;"><a href="https://orgmode.org/worg/dev/org-syntax.html">The official description of the org-mode syntax</a> and a <a href="https://gist.github.com/hoeltgman/3825415">relatively concise description of the org-mode syntax</a>.</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-org4cc7124" class="outline-3">
<h3 id="org4cc7124">Video tutorials</h3>
<div class="outline-text-3" id="text-org4cc7124">
<p>
For those of you who prefer video explanations, here is a <a href="https://www.youtube.com/playlist?list=PL9KxKa8NpFxIcNQa9js7dQQIHc81b0-Xg">Youtube
channel with many step by step emacs tutorials</a>.
</p>
</div>
</div>
<div id="outline-container-orgd5c8443" class="outline-3">
<h3 id="orgd5c8443">Additional useful emacs packages</h3>
<div class="outline-text-3" id="text-orgd5c8443">
</div>
<div id="outline-container-orgb58b5a8" class="outline-4">
<h4 id="orgb58b5a8">Company-mode</h4>
<div class="outline-text-4" id="text-orgb58b5a8">
<p>
<a href="http://company-mode.github.io/">Company-mode</a> is a text completion framework for Emacs. It allows to
have smart completion in emacs for the most common languages. If you
feel this is needed, you should follow the instructions from the
official Web page: <a href="http://company-mode.github.io/">http://company-mode.github.io/</a>
</p>
</div>
</div>
<div id="outline-container-orgc20d2e9" class="outline-4">
<h4 id="orgc20d2e9">Magit</h4>
<div class="outline-text-4" id="text-orgc20d2e9">
<p>
<a href="https://magit.vc/">Magit</a> is an Emacs interface for Git. Its usage is briefly illustrated
in the context of this MOOC in a <a href="https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4">video tutorial</a> (<i>"Utilisation
Emacs/git"</i> in French).
</p>
<p>
It is very powerful and we use it on a daily basis but you should
definitely understand what git does behind the scenes beforehand. If
you feel this would be useful for you, you should follow <a href="https://magit.vc/screenshots/">this visual
walk-through</a> or <a href="https://www.emacswiki.org/emacs/Magit">this really short "crash course"</a>. If you installed the
previous "<i>reproducible research</i>" emacs configuration, you can easily
invoke magit by using <code>C-x g</code>.
</p>
</div>
</div>
</div>
<div id="outline-container-org9260c82" class="outline-3">
<h3 id="org9260c82">Other resources</h3>
<div class="outline-text-3" id="text-org9260c82">
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://orgmode.org/orgguide.pdf">The compact Org-mode Guide</a></li>
<li style="margin-bottom:0;"><a href="https://github.com/dfeich/org-babel-examples">Many examples illustrating the use of different languages in org-mode</a></li>
</ul>
</div>
</div>
</div>
</div>
This source diff could not be displayed because it is too large. You can view the blob instead.
<div id="content">
<h1 class="title">Jupyter</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgd37ebcc">1. Jupyter tips and tricks</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orge426487">Creating or importing a notebook</a></li>
<li style="margin-bottom:0;"><a href="#org6607533">Running R and Python in the same notebook</a></li>
<li style="margin-bottom:0;"><a href="#orgd909163">Other languages</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org9176019">2. Installing and configuring Jupyter on your computer</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org51b3378">2.1 Installing Jupyter</a></li>
<li style="margin-bottom:0;"><a href="#orgc0d2a71">2.2 Making sure Jupyter allows you to use R</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org608c96e">• Installing IRKernel (R package)</a></li>
<li style="margin-bottom:0;"><a href="#org076acd5">• Installing rpy2 (Python package)</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org524a8ac">2.3 Additional tips</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org814c076">• Exporting a notebook</a></li>
<li style="margin-bottom:0;"><a href="#orga5ae744">• Improving notebook readability</a></li>
<li style="margin-bottom:0;"><a href="#orgab0846a">• Interacting with GitLab and GitHub</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-orgd37ebcc" class="outline-2">
<h2 id="orgd37ebcc">1. Jupyter tips and tricks</h2>
<div class="outline-text-2" id="text-orgd37ebcc">
<p>
The following <a href="https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/">webpage</a> lists several Jupyter tricks (in particular, it
illustrates many <code>IPython magic</code> commands) that should improve your
efficiency (note that this blog post is about two years old so some of
the tricks may have been integrated in the default behavior of Jupyter
now).
</p>
</div>
<div id="outline-container-orge426487" class="outline-3">
<h3 id="orge426487">Creating or importing a notebook</h3>
<div class="outline-text-3" id="text-orge426487">
<p>
Using the Jupyter environment we deployed for this MOOC will allow to
easily access any file from your default GitLab project. There are
situations however where you may want to play with other notebooks.
</p>
<dl class="org-dl">
<dt>Adding a brand new notebook in a given directory</dt><dd>Simply follow
the following steps:
<ol class="org-ol">
<li style="margin-bottom:0;">From the menu: <code>File -&gt; Open</code>. You're now in the Jupyter file manager.</li>
<li style="margin-bottom:0;">Navigate to the directory where you want your notebook to be created.</li>
<li style="margin-bottom:0;">Then from the top right button: <code>New -&gt; Notebook: Python 3</code>.</li>
<li style="margin-bottom:0;"><p>
Give your notebook a name from the menu: <code>File -&gt; Rename</code>.
</p>
<p>
N.B.: If you create a file by doing <code>File -&gt; New Notebook -&gt;
Python 3</code>, the new notebook will be created in the current
directory. Moving it afterward is possible but a bit cumbersome
(you'll have to go through the Jupyter file manager by following
the menu <code>File -&gt; Open</code>, then select it, <code>Shut</code> it <code>down</code>, and <code>Move</code>
and/or <code>Rename</code>).
</p></li>
</ol></dd>
<dt>Importing an already existing notebook</dt><dd>If your notebook is
already in your GitLab project, then simply synchronize by using
the <code>Git pull</code> button and use the <code>File -&gt; Open</code> menu. Otherwise,
imagine, you want to import the <a href="https://app-learninglab.inria.fr/gitlab/moocrr-session1/moocrr-reproducibility-study/blob/master/src/Python3/challenger.ipynb">following notebook</a> from someone
else's repository to re-execute it.
<ol class="org-ol">
<li style="margin-bottom:0;">Download the file on your computer. E.g., for this <a href="https://app-learninglab.inria.fr/gitlab/moocrr-session1/moocrr-reproducibility-study/blob/master/src/Python3/challenger.ipynb">GitLab hosted
notebook</a>, click on <code>Open raw</code> (a small <code>&lt;/&gt;</code> within a document icon)
and save (<code>Ctrl-S</code> on most browsers) the content (a long Json text
file).</li>
<li style="margin-bottom:0;">Open the Jupyter file manager from the menu <code>File -&gt; Open</code> and
navigate to the directory where you want to upload your notebook.</li>
<li style="margin-bottom:0;">Then from the top right button, <code>Upload</code> the previously downloaded
notebook and confirm the upload.</li>
<li style="margin-bottom:0;">Open the freshly uploaded notebook through the Jupyter file
manager.</li>
</ol></dd>
</dl>
</div>
</div>
<div id="outline-container-org6607533" class="outline-3">
<h3 id="org6607533">Running R and Python in the same notebook</h3>
<div class="outline-text-3" id="text-org6607533">
<p>
<code>rpy2</code> package allows to use both languages in the same notebook by:
</p>
<ol class="org-ol">
<li style="margin-bottom:0;"><p>
Loading <code>rpy2</code>:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python">%load_ext rpy2.ipython
</pre>
</div></li>
<li style="margin-bottom:0;"><p>
Using the <code>%R</code> Ipython magic:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python">%%R
summary(cars)
</pre>
</div>
<p>
Python objects can then even be passed to R as follows (assuming <code>df</code>
is a pandas dataframe):
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python">%%R -i df
plot(df)
</pre>
</div></li>
</ol>
<p>
Note that this <code>%%R</code> notation indicates that R should be used for the whole cell but
an other possibility is to use <code>%R</code> to have a single line of R within a
python cell.
</p>
</div>
</div>
<div id="outline-container-orgd909163" class="outline-3">
<h3 id="orgd909163">Other languages</h3>
<div class="outline-text-3" id="text-orgd909163">
<p>
Jupyter is not limited to Pytyhon and R. Many other languages are available:
<a href="https://github.com/jupyter/jupyter/wiki/Jupyter-kernels">https://github.com/jupyter/jupyter/wiki/Jupyter-kernels</a>, including
non-free languages like SAS, Mathematica, Matlab&#x2026; Note that the maturity of these kernels differs widely.
</p>
<p>
None of these other languages have been deployed in the context of our
MOOC but you may want to read the next sections to learn how
to set up your own Jupyter on your computer and benefit from these extensions.
</p>
<p>
Since the question was asked several times, if you really need to stay
with SAS, you should know that SAS can be used within Jupyter using
either the <a href="https://sassoftware.github.io/sas_kernel/">Python SASKernel</a> or the <a href="https://sassoftware.github.io/saspy/">Python SASPy</a> package (step by step
explanations about this are given <a href="https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md">here</a>).
</p>
<p>
Since proprietary software such as SAS cannot easily be inspected, we discourage its use as it hinders reproducibility by
essence. But perfection does not exist anyway and using Jupyter
literate programming approach allied with systematic control version
and environment control will certainly help anyway.
</p>
</div>
</div>
</div>
<div id="outline-container-org9176019" class="outline-2">
<h2 id="org9176019">2. Installing and configuring Jupyter on your computer</h2>
<div class="outline-text-2" id="text-org9176019">
<p>
In this section, we explain how to set up a Jupyter environment on
your own computer similar to the one deployed for this MOOC.
</p>
<p>
Note that Jupyter notebooks are only a small part of the picture and
that Jupyter is now part of a bigger project: <a href="https://blog.jupyter.org/jupyterlab-is-ready-for-users-5a6f039b8906">JupyterLab</a>, which allows
you to mix various components (including notebooks) in your
browser. In the context of this MOOC, our time frame was too short to
benefit from JupyterLab which was still under active development. You may, however, prefer JupyterLab when doing an installation on your own computer.
</p>
</div>
<div id="outline-container-org51b3378" class="outline-3">
<h3 id="org51b3378">2.1 Installing Jupyter</h3>
<div class="outline-text-3" id="text-org51b3378">
<p>
Follow these instructions if you wish to have a Jupyter environment on
your own computer similar to the one we set up for this MOOC.
</p>
<p>
First, download and install the <a href="https://conda.io/miniconda.html">latest version of Miniconda</a>. We use
Miniconda version <code>4.5.4</code> and Python version <code>3.6</code> on our server.
</p>
<p>
Miniconda is a light version of Anaconda, which includes Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science.
</p>
<p>
Then download the <a href="https://gist.github.com/brospars/4671d9013f0d99e1c961482dab533c57">mooc<sub>rr</sub> environment file</a> and create the environment using conda:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">conda env create -f environment.yml
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Windows activate the environment</span>
activate mooc_rr
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Linux and MacOS activate the environment</span>
<span style="font-weight: bold;">source</span> activate mooc_rr
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Linux, MacOS and Windows: launch the notebook</span>
jupyter notebook
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc0d2a71" class="outline-3">
<h3 id="orgc0d2a71">2.2 Making sure Jupyter allows you to use R</h3>
<div class="outline-text-3" id="text-orgc0d2a71">
<p>
The environment described in the last section should include R, but if
you proceeded otherwise and only have Python available in Jupyter, you
may want to read the following section.
</p>
</div>
<div id="outline-container-org608c96e" class="outline-4">
<h4 id="org608c96e">• Installing <a href="https://github.com/IRkernel/IRkernel">IRKernel</a> (R package)</h4>
<div class="outline-text-4" id="text-org608c96e">
<p>
Do the following in R console:
</p>
<p>
Install the <code>devtools</code> package:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">install.packages(<span style="font-style: italic;">'devtools'</span>,dep=<span style="font-weight: bold; text-decoration: underline;">TRUE</span>)
</pre>
</div>
<p>
Define a proxy if needed:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R"><span style="font-weight: bold; text-decoration: underline;">library</span>(httr)
set_config(use_proxy(url=<span style="font-style: italic;">"proxy"</span>, port=80, username=<span style="font-style: italic;">"username"</span>, password=<span style="font-style: italic;">"password"</span>))
</pre>
</div>
<p>
Install the <code>IRkernel</code> package:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">devtools::install_github(<span style="font-style: italic;">'IRkernel/IRkernel'</span>)
IRkernel::installspec() <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">to register the kernel in the current R installation</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org076acd5" class="outline-4">
<h4 id="org076acd5">• Installing rpy2 (Python package)</h4>
<div class="outline-text-4" id="text-org076acd5">
<p>
On Linux, the rpy2 package is available in standard distributions
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">sudo apt-get install python3-rpy2 python3-tzlocal
</pre>
</div>
<p>
An alternative (not really recommended if the first one is available)
consists in going through the python package manager with
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python">pip3 install rpy2
</pre>
</div>
<p>
<b>Windows</b>
</p>
<p>
Download the <code>rpy2</code> <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2">binary file</a> by choosing the right operating system.
</p>
<p>
Open a DOS console and type the following command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">python -m pip install rpy2&#8209;2.9.4&#8209;cp37&#8209;cp37m&#8209;win_amd64.whl <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">adapt filename</span>
</pre>
</div>
<p>
Install also <code>tzlocal</code>:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">python -m pip install tzlocal
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org524a8ac" class="outline-3">
<h3 id="org524a8ac">2.3 Additional tips</h3>
<div class="outline-text-3" id="text-org524a8ac">
</div>
<div id="outline-container-org814c076" class="outline-4">
<h4 id="org814c076">• Exporting a notebook</h4>
<div class="outline-text-4" id="text-org814c076">
<p>
Here is what we had to install on a recent Debian computer to make sure
the notebook export via LaTeX works:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">sudo apt-get install texlive-xetex wkhtmltopdf
</pre>
</div>
<p>
Obviously, you can convert to html or pdf using the using the <code>File &gt; Download as &gt; HTML</code> (or <code>PDF</code>) menu option. This can also be done from
the command line with the following command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">ipython3 nbconvert --to pdf Untitled.ipynb
</pre>
</div>
<p>
If you want to use a specific style, then the <code>nbconvert</code> exporter
should be customized. This is discussed and demoed <a href="http://markus-beuckelmann.de/blog/customizing-nbconvert-pdf.html">here</a>. We encourage
you to simply read the <a href="https://nbconvert.readthedocs.io/en/latest/">doc of nbconvert</a>.
</p>
<p>
Instead of going directly through LaTeX and playing too much with the
<code>nbconvert</code> exporter, an other option consists in exporting to Markdown
and playing with <a href="https://pandoc.org/">pandoc</a>. Both approaches work, it's rather a matter of
taste.
</p>
<p>
<b>Windows</b>
</p>
<p>
Download and install MiKTeX from the <a href="https://miktex.org/download">MiKTeX webpage</a> by choosing the
right operating system. You will be prompted to install some specific
packages when exporting to pdf.
</p>
</div>
</div>
<div id="outline-container-orga5ae744" class="outline-4">
<h4 id="orga5ae744">• Improving notebook readability</h4>
<div class="outline-text-4" id="text-orga5ae744">
<p>
Here are a few extensions that can ease your life:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><p>
<a href="https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook">Code folding</a> to improve readability when browsing the notebook.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip3 install jupyter_contrib_nbextensions
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">jupyter contrib nbextension install --user # not done yet</span>
</pre>
</div></li>
<li style="margin-bottom:0;"><p>
<a href="https://github.com/kirbs-/hide_code">Hiding code</a> to improve readability when exporting.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-sh">sudo pip3 install hide_code
sudo jupyter-nbextension install --py hide_code
jupyter-nbextension enable --py hide_code
jupyter-serverextension enable --py hide_code
</pre>
</div></li>
</ul>
</div>
</div>
<div id="outline-container-orgab0846a" class="outline-4">
<h4 id="orgab0846a">• Interacting with GitLab and GitHub</h4>
<div class="outline-text-4" id="text-orgab0846a">
<p>
To ease your experience, we added pull/push buttons that allow
you to commit and sync with GitLab. This development was specific to
the MOOC but inspired from a previous <a href="https://github.com/Lab41/sunny-side-up">proof of concept</a>. We have
recently discovered that someone else developed about at the same time
a <a href="https://github.com/sat28/githubcommit">rather generic version of this Jupyter plugin</a>. Otherwise, remember
that it is very easy to insert a shell cell in Jupyter in which you
can easily issue git commands. This is how we work most of the time.
</p>
<p>
This being said, you may have noticed that Jupyter keeps a perfect
track of the sequence in which cells have been run by updating the
"output index". This is a very good property from the reproducibility
point of view but depending on your usage, you may find it a bit
painful when committing. Some people have thus developed <a href="https://gist.github.com/pbugnion/ea2797393033b54674af">specific git
hooks</a> to ignore these numbers when committing Jupyter notebooks. There
is a long an interesting discussion about various options on
<a href="https://stackoverflow.com/questions/18734739/using-ipython-notebooks-under-version-control">StackOverflow</a>.
</p>
<p>
For those who use <a href="https://blog.jupyter.org/jupyterlab-is-ready-for-users-5a6f039b8906">JupyterLab</a> rather than the plain Jupyter, a specific <a href="https://github.com/jupyterlab/jupyterlab-git">JupyterLab git plugin</a> has been developed to offer a nice version control experience.
</p>
</div>
</div>
</div>
</div>
</div>
<div id="content">
<h1 class="title">Maintaining a journal</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgc95598e">Some examples of LabBooks provided for inspiration</a></li>
<li style="margin-bottom:0;"><a href="#org51674f0">How to report efficiently (by Martin Quinson)</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org976cc9a">Reporting</a></li>
<li style="margin-bottom:0;"><a href="#org5ff6009">Reporting Logistics</a></li>
<li style="margin-bottom:0;"><a href="#org50f88a2">Reporting Document Organization</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-orgc95598e" class="outline-2">
<h2 id="orgc95598e">Some examples of LabBooks provided for inspiration</h2>
<div class="outline-text-2" id="text-orgc95598e">
<p>
Since a few years, we systematically require any or our students to
have a laboratory notebook in org-mode. Most of the time, they start
in private repositories but often end up being fully opened. Here are
a few ones:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">Luka Stanisic (a former PhD student advised by Arnaud Legrand) starting
using this methodology during his Msc and developed further
throughout his PhD. Part of his <a href="http://mescal.imag.fr/membres/luka.stanisic/thesis/thesis.pdf">PhD thesis</a> was actually about
designing a methodology for reproducible experiments in large scale
distributed systems. You may want to have a look at <a href="http://starpu-simgrid.gforge.inria.fr/">his postdoc
LabBook</a> and to the <a href="https://framagit.org/lvgx/pfe/blob/master/doc/labbook.org">report of Léo Villeveygoux</a> whom he advised.</li>
<li style="margin-bottom:0;">Tom Cornebize is currently a PhD student advised by Arnaud Legrand
and during his MSc, he also heavily <a href="https://github.com/Ezibenroc/simulating_mpi_applications_at_scale">loged his activity on Github</a>.</li>
<li style="margin-bottom:0;"><a href="https://github.com/schnorr">Lucas Schnorr</a>'s students usually also maintain their journal in a
very nice way: <a href="https://github.com/taisbellini/aiyra/blob/master/LabBook.org">Tais Bellini's BSc.</a>, <a href="https://github.com/mittmann/hpc/blob/master/LabBook.org">Arthur Krause's LabBook</a>, <a href="http://www.inf.ufrgs.br/~llnesi/memory_report/MemoryReport.html">Luca
Nesi's LabBook</a>.</li>
<li style="margin-bottom:0;"><a href="https://people.irisa.fr/Martin.Quinson/Research/Students/Methodo/">Martin Quinson</a>'s students also follow such conventions:
<ul class="org-ul">
<li style="margin-bottom:0;">Ezequiel Torti Lopez, M2R 2014. <a href="https://github.com/mquinson/simgrid-simpar/blob/master/report.org">Report</a>, with both the data
provenance and the data analysis included in the appendix.</li>
<li style="margin-bottom:0;">Betsegaw Lemma, M2R 2017. <a href="https://github.com/betsegawlemma/internship/blob/master/intern_report.org">LabBook</a></li>
<li style="margin-bottom:0;">Gabriel Corona, engineer on SimGrid, 2015-2016. <a href="https://github.com/randomstuff/simgrid-journal/blob/master/journal.org">Journal</a>, <a href="http://www.gabriel.urdhr.fr/tags/simgrid/">Blog (findings)</a>.</li>
<li style="margin-bottom:0;">Matthieu Nicolas, engineer on PLM, 2014-2016, <a href="https://github.com/MatthieuNICOLAS/PLM-reporting/blob/master/activity-report.org">Journal</a>.</li>
</ul></li>
</ul>
<p>
Org-mode is obviously not the only option and many of our students use
am mixture of org-mode, rstudio and jupyter depending on what is more
convenient.
</p>
</div>
</div>
<div id="outline-container-org51674f0" class="outline-2">
<h2 id="org51674f0">How to report efficiently (by Martin Quinson)</h2>
<div class="outline-text-2" id="text-org51674f0">
<p>
My friend Martin has gathered <a href="https://people.irisa.fr/Martin.Quinson/Research/Students/Methodo/">an excellent compendium of information
and references on his webpage to explain his students what he expects
from them</a>. <b>I'll therefore simply paraphrase him here</b> with the most
important aspects related to reporting but feel free to read <a href="https://people.irisa.fr/Martin.Quinson/Research/Students/Methodo/">the
original version</a>:
</p>
</div>
<div id="outline-container-org976cc9a" class="outline-3">
<h3 id="org976cc9a">Reporting</h3>
<div class="outline-text-3" id="text-org976cc9a">
<p>
I ask you to write a little reporting regularly. Depending on the
situation, it may be every day, every week or every month. In any
case, your reporting is very important for the following reasons:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">It forces you to think about what you are doing, which may help you
to unblock your problem by your own. Writing down the problems in a
clear way is often sufficient to see the solution appearing.</li>
<li style="margin-bottom:0;">It helps me following your progress even between the meetings. I
cannot unblock you if I don't detect that you are on a wrong lead or
otherwise blocked.</li>
<li style="margin-bottom:0;">It keeps a track of the steps in your work. That's good for the day
where you want to write your final report (even if a final report
should never be presented in the chronological order). That's good
for the next after you who will be supposed to continue you effort,
or to build upon it.</li>
<li style="margin-bottom:0;">That person may be yourself (if you go for a PhD program), another
intern, myself or even someone else on the Internet: that's what we
call Open Science, an effort where everyone can build upon the
scientific work of everyone.</li>
</ul>
<p>
I want you to write your reporting in an org file (yep, you don't have
a choice here). [..]
</p>
</div>
</div>
<div id="outline-container-org5ff6009" class="outline-3">
<h3 id="org5ff6009">Reporting Logistics</h3>
<div class="outline-text-3" id="text-org5ff6009">
<p>
Once you're setup with all software installed and somehow configured,
you need to create a reporting file in a place where I can see it and
where it won't get lost if your disk crashes or something. Open a
dedicated git repository (on github, gitorious, gitlab, &#x2026;) for
that. After your internship, your report should be archived directly
in the source tree of the software that you are working on, if
any. But having your reporting located in the source tree may
complicate things during your work.
</p>
<p>
Yes, it means that your file will be public at some point, but that's
why we call it "Open Science", after all. Also, you should write it in
English if possible. The part of your reporting that is called
"Journal" (see below) may be written in French if you are more
efficient this way but the rest must be in English. Don't make your
tone too formal because the file is public. Make it efficient. Nobody
will ever blame you for the work you did during an internship a long
time ago. If you really want, we can even make this file
anonymous. Just speak to me.
</p>
<p>
You want to write your reporting before leaving work. Weekly reporting
should be written on Friday, one or two hours before leaving. That's
the best solution to have a nice week end without thinking about work,
and still lose no information that you would need on Monday morning.
</p>
</div>
</div>
<div id="outline-container-org50f88a2" class="outline-3">
<h3 id="org50f88a2">Reporting Document Organization</h3>
<div class="outline-text-3" id="text-org50f88a2">
<p>
Your reporting document should have four main parts:
</p>
<dl class="org-dl">
<dt>Findings</dt><dd>This section summarizes the general information that you
gathered during your work. It is empty at the beginning
of your internship, and gets fleshed with the important
things that you find on your way. That's where
bibliographical information go, for example. But that's
definitely not where TODO notes go (see below).</dd>
<dt>Development</dt><dd>This section presents the technical sides of your
work. Don't write anything in there yet. Put it all
in the Journal part for now.</dd>
<dt>Journal</dt><dd>Describe the day-to-day work done for each period (day,
week or month) of your internship. That's the most
important part of your reporting, and we come back to it
below.</dd>
<dt>Conclusion</dt><dd><p>
That's what you write in the next week of your
internship. You can see it as a letter to the next
guy, explaining the current state of your work, a few
words about its technical organization, and what
should be done next on that topic. Keep this part
highly technical, the overall organization of your
internship will be seen in your final report.
</p>
<p>
The Journal part is the only part that you may write
in French on need. You want to add one subsection per
period to your journal. Don't make it too long, or you
would waste time writing long texts that very few will
ever read. Don't make it too short or it will be
impossible to understand it on Monday morning (or
three months after). Finding the good balance is
sometimes difficult, but I will provide feedback on
your first entries, so don't worry.
</p></dd>
</dl>
<p>
Each of section describing a period should contain three subsubsections:
</p>
<dl class="org-dl">
<dt>Things done</dt><dd>a few words about what you've done. Something like 2
or 4 items with a few words describing what you've
done. You can omit the title of that section and put
the items directly in the upper section (see the
example below).</dd>
<dt>Blocking points and questions</dt><dd>try to explain clearly the things
that block you or slow you down. If you found the solution
already, then it should be part of the previous subsection (but
you should say a few words nevertheless). Also ask every question
that you may have for me in that section. If the question are
personal (e.g., about the logistics of your internship such as
salary or so), please prefer emails that are not publicly
visible. If this section is empty for a given period, skip it
all together (no empty subsubsections).</dd>
<dt>Planned work</dt><dd>A few items about what you plan to work on during
the next period.</dd>
</dl>
<p>
A template of reporting file is given at the end of this section. This
is just a strong advice: If you really feel better with another file
organization, then give it a try for one period, and ask for my
feedback. I can adapt, and I do not pretend that my advice is the
definitive answer. It's just the result of my experience so far.
</p>
<p>
Notice how TODO items are written: they are given as items in the
Planned work sections of the journal. As explained in the
<a href="http://orgmode.org/manual/Checkboxes.html">documentation</a>, you simply have to write "[ ]" in front of items that
you plan to do in the future.
</p>
<p>
You should add a <code>[1/]</code> on the "Planned work" line, so that emacs keeps
track of what is done and what is still to do. Once they are done, you
type C-c C-C on their lines to change the blank box [ ] into a checked
box [X]. Also, the <code>[1/]</code> will be changed to denote the amount of work
that is still to be done.
</p>
<p>
At any point, you can see all ongoing TODO items with the following
keystrokes: "C-c / t". More information on TODOs in orgmode's
<a href="http://orgmode.org/manual/TODO-basics.html">documentation</a>. The important thing here is that most TODO items must
only be written in the <i>Journal</i> part (so that we know when they
occurred).
</p>
<p>
<b>Do not edit past entries of your journal</b>, unless you have very good
reasons. If you must, make sure that you don't lose information about
the path that you took (remember the Open Science thingy). You should
always <b>add</b> information to past entries, such as:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">- *edit* This hypothesis does not hold; see the entry of [the day where you found it] for more information.
</pre>
</div>
<p>
The only exception are TODO entries, that should clearly be rewritten
to DONE entries. If you need to adapt your TODO entry (because the
initial goal was poorly stated or otherwise), change the initial entry
from TODO to CANCELED (or check the box after stating in a subitem
that it was not done but canceled, and why), and create a new TODO
entry in the current period section.
</p>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
* Introduction
This file contains the reporting for my beloved internship done on
this topic on that year. For now, just add the official title of
your internship (check the convention signed between your
university and my lab). After a few weeks, once you really
understand your internship, you should write a few paragraphs about
the context, problem and motivation of your work, with some
possible use cases. But don't do that right now.
* Bibliography
* Journal
** Week 2 feb
- read the doc about writing my reporting
*** Questions
- do I really have to use emacs?
*** Work Planed [1/2]
- [X] install emacs and setup orgmode
- [ ] read the provided articles
** Week 9 feb
- Installed emacs
(omit the Questions section if no question)
*** Work Planed
- do some useful work
</pre>
</div>
</div>
</div>
</div>
This source diff could not be displayed because it is too large. You can view the blob instead.
all:
include ../../Makefile.ressources
all: resources_refs.html resources_environment.html exo1.html exo2.html exo3.html
all: resources_refs.md resources_environment.md resources_refs_fr.md resources_environment_fr.md # exo1.html exo2.html exo3.html
NLINES=10000000
include ../../Makefile.ressources
%.html: %.org
emacs -batch $^ --funcall org-html-export-to-html
sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
-e 's/<li>/<li style="margin-bottom:0;">/g' \
-e 's/<ul>/<ul style="margin:0 0;">/g' $@
mv $@ $@.bak
html_png_inliner.pl < $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
rm $@.bak
clean:
rm -f *~
#!/usr/bin/perl -w
use strict;
my($line);
while(defined($line=<STDIN>)) {
if($line =~ /^(.*)<img *src="([^"]*)"(.*)$/g) {
my($pre,$image,$post) = ($1,$2,$3);
$image =~ s|file://||;
# print "$image\n";
my $base64=`base64 -w 0 $image`;
my $format=$image;
$format =~ s/.*\.//g;
print $pre."<img src=\"data:image/$format;base64,".$base64.'"'.$post;
} else {
print $line;
}
}
<div id="content">
<h1 class="title">Tracking environment information</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org54d219c">Getting information about your Git repository</a></li>
<li style="margin-bottom:0;"><a href="#orgd1774c3">Getting information about Python(3) libraries</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org7283a87">Getting information about your system</a></li>
<li style="margin-bottom:0;"><a href="#orgfa4dc3a">Getting the list of installed packages and their version</a></li>
<li style="margin-bottom:0;"><a href="#org31cde5f">How to list imported modules?</a></li>
<li style="margin-bottom:0;"><a href="#orgcea179c">Saving and restoring an environment with pip</a></li>
<li style="margin-bottom:0;"><a href="#org849fdbb">Installing a new package or a specific version</a></li>
</ul>
</li>
<li style="margin-bottom:0;"><a href="#org4f45b1e">Getting information about R libraries</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgc583ee9">Getting the list imported modules and their version</a></li>
<li style="margin-bottom:0;"><a href="#orgdffc6a5">Getting the list of installed packages and their version</a></li>
<li style="margin-bottom:0;"><a href="#orgb52d0ce">Installing a new package or a specific version</a>
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#orgaf558a0">Installing a pre-compiled version</a></li>
<li style="margin-bottom:0;"><a href="#org7d8a9f0">Using devtools</a></li>
<li style="margin-bottom:0;"><a href="#org4509fba">Installing from source code</a></li>
<li style="margin-bottom:0;"><a href="#org9d64d25">Potential issues</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org54d219c" class="outline-2">
<h2 id="org54d219c">Getting information about your Git repository</h2>
<div class="outline-text-2" id="text-org54d219c">
<p>
When taking notes, it may be difficult to remember which version of
the code or of a file was used. This is what version control is useful
for. Here are a few useful commands that we typically insert at the
top of our notebooks in shell cells
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">git log -1
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
commit 741b0088af5b40588493c23c46d6bab5d0adeb33
Author: Arnaud Legrand &lt;arnaud.legrand@imag.fr&gt;
Date: Tue Sep 4 12:45:43 2018 +0200
Fix a few typos and provide information on jupyter-git plugins.
</pre>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">git status -u
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add &lt;file&gt;..." to update what will be committed)
(use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
modified: resources.org
Untracked files:
(use "git add &lt;file&gt;..." to include in what will be committed)
../../module2/ressources/replicable_article/IEEEtran.bst
../../module2/ressources/replicable_article/IEEEtran.cls
../../module2/ressources/replicable_article/article.bbl
../../module2/ressources/replicable_article/article.tex
../../module2/ressources/replicable_article/data.csv
../../module2/ressources/replicable_article/figure.pdf
../../module2/ressources/replicable_article/logo.png
.#resources.org
no changes added to commit (use "git add" and/or "git commit -a")
</pre>
<p>
<i>Note: the -u indicates that git should also display the contents of
new directories it did not previously know about.</i>
</p>
<p>
Then, we often include commands at the end of our notebook indicating
how to commit the results (adding the new files, committing with a
clear message and pushing). E.g.,
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">git add resources.org;
git commit -m <span style="font-style: italic;">"Completing the section on getting Git information"</span>
git push
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
[master 514fe2c1 ] Completing the section on getting Git information
1 file changed, 61 insertions(+)
Counting objects: 25, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (25/25), 7.31 KiB | 499.00 KiB/s, done.
Total 25 (delta 11), reused 0 (delta 0)
To ssh://app-learninglab.inria.fr:9418/learning-lab/mooc-rr-ressources.git
6359f8c..1f8a567 master -&gt; master
</pre>
<p>
Obviously, in this case you need to save the notebook before running
this cell, hence the output of this final command (with the new git
hash) will not be stored in the cell. This is not really a problem and
is the price to pay for running git from within the notebook itself.
</p>
</div>
</div>
<div id="outline-container-orgd1774c3" class="outline-2">
<h2 id="orgd1774c3">Getting information about Python(3) libraries</h2>
<div class="outline-text-2" id="text-orgd1774c3">
</div>
<div id="outline-container-org7283a87" class="outline-3">
<h3 id="org7283a87">Getting information about your system</h3>
<div class="outline-text-3" id="text-org7283a87">
<p>
This topic is discussed on <a href="https://stackoverflow.com/questions/3103178/how-to-get-the-system-info-with-python">StackOverflow</a>.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python"><span style="font-weight: bold;">import</span> platform
<span style="font-weight: bold;">print</span>(platform.uname())
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
uname_result(system='Linux', node='icarus', release='4.15.0-2-amd64', version='#1 SMP Debian 4.15.11-1 (2018-03-20)', machine='x86_64', processor='')
</pre>
</div>
</div>
<div id="outline-container-orgfa4dc3a" class="outline-3">
<h3 id="orgfa4dc3a">Getting the list of installed packages and their version</h3>
<div class="outline-text-3" id="text-orgfa4dc3a">
<p>
This topic is discussed on <a href="https://stackoverflow.com/questions/20180543/how-to-check-version-of-python-modules">StackOverflow</a>. When using <code>pip</code> (the Python
package installer) within a shell command, it is easy to query the
version of all installed packages (note that on your system, you may
have to use either <code>pip</code> or <code>pip3</code> depending on how it is named and which
versions of Python are available on your machine
</p>
<p>
Here is for example how I get this information on my machine:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip3 freeze
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
asn1crypto==0.24.0
attrs==17.4.0
bcrypt==3.1.4
beautifulsoup4==4.6.0
bleach==2.1.3
...
pandas==0.22.0
pandocfilters==1.4.2
paramiko==2.4.0
patsy==0.5.0
pexpect==4.2.1
...
traitlets==4.3.2
tzlocal==1.5.1
urllib3==1.22
wcwidth==0.1.7
webencodings==0.5
</pre>
<p>
In a Jupyter notebook, this can easily be done by using the <code>%%sh</code>
magic. Here is for example what you could do and get on the Jupyter
notebooks we deployed for the MOOC (note that here, you should simply
use the <code>pip</code> command):
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python">%%sh
pip freeze
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
alembic==0.9.9
asn1crypto==0.24.0
attrs==18.1.0
Automat==0.0.0
...
numpy==1.13.3
olefile==0.45.1
packaging==17.1
pamela==0.3.0
pandas==0.22.0
...
webencodings==0.5
widgetsnbextension==3.2.1
xlrd==1.1.0
zope.interface==4.5.0
</pre>
<p>
In the rest of this document, I will assume the correct command is <code>pip</code>
and I will not systematically insert the <code>%%sh</code> magic.
</p>
<p>
Once you know which packages are installed, you can easily get
additional information about a given package and in particular check
whether it was installed "locally" through pip or whether it is
installed system-wide. Again, in a shell command:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip show pandas
<span style="font-weight: bold;">echo</span> <span style="font-style: italic;">" "</span>
pip show statsmodels
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Name: pandas
Version: 0.22.0
Summary: Powerful data structures for data analysis, time series,and statistics
Home-page: http://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /usr/lib/python3/dist-packages
Requires:
Name: statsmodels
Version: 0.9.0
Summary: Statistical computations and models for Python
Home-page: http://www.statsmodels.org/
Author: None
Author-email: None
License: BSD License
Location: /home/alegrand/.local/lib/python3.6/site-packages
Requires: patsy, pandas
</pre>
</div>
</div>
<div id="outline-container-org31cde5f" class="outline-3">
<h3 id="org31cde5f">How to list imported modules?</h3>
<div class="outline-text-3" id="text-org31cde5f">
<p>
Without resorting to pip (that will list all available packages), you
may want to know which modules are loaded in a Python session as well
as their version. Inspired by <a href="https://stackoverflow.com/questions/4858100/how-to-list-imported-modules">StackOverflow</a>, here is a simple
function that lists loaded package (that have a <code>__version__</code> attribute,
which is unfortunately not completely standard).
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-python"><span style="font-weight: bold;">def</span> <span style="font-weight: bold;">print_imported_modules</span>():
<span style="font-weight: bold;">import</span> sys
<span style="font-weight: bold;">for</span> name, val <span style="font-weight: bold;">in</span> <span style="font-weight: bold;">sorted</span>(sys.modules.items()):
<span style="font-weight: bold;">if</span>(<span style="font-weight: bold;">hasattr</span>(val, <span style="font-style: italic;">'__version__'</span>)):
<span style="font-weight: bold;">print</span>(val.<span style="font-weight: bold;">__name__</span>, val.__version__)
<span style="font-weight: bold;">else</span>:
<span style="font-weight: bold;">print</span>(val.<span style="font-weight: bold;">__name__</span>, <span style="font-style: italic;">"(unknown version)"</span>)
<span style="font-weight: bold;">print</span>(<span style="font-style: italic;">"**** Package list in the beginning ****"</span>);
print_imported_modules()
<span style="font-weight: bold;">print</span>(<span style="font-style: italic;">"**** Package list after loading pandas ****"</span>);
<span style="font-weight: bold;">import</span> pandas
print_imported_modules()
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
**** Package list in the beginning ****
**** Package list after loading pandas ****
_csv 1.0
_ctypes 1.1.0
decimal 1.70
argparse 1.1
csv 1.0
ctypes 1.1.0
cycler 0.10.0
dateutil 2.7.3
decimal 1.70
distutils 3.6.5rc1
ipaddress 1.0
json 2.0.9
logging 0.5.1.2
matplotlib 2.1.1
numpy 1.14.5
numpy.core 1.14.5
numpy.core.multiarray 3.1
numpy.core.umath b'0.4.0'
numpy.lib 1.14.5
numpy.linalg._umath_linalg b'0.1.5'
pandas 0.22.0
_libjson 1.33
platform 1.0.8
pyparsing 2.2.0
pytz 2018.5
re 2.2.1
six 1.11.0
urllib.request 3.6
zlib 1.0
</pre>
</div>
</div>
<div id="outline-container-orgcea179c" class="outline-3">
<h3 id="orgcea179c">Saving and restoring an environment with pip</h3>
<div class="outline-text-3" id="text-orgcea179c">
<p>
The easiest way to go is as follows:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip3 freeze &gt; requirements.txt <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">to obtain the list of packages with their version</span>
pip3 install -r requirements.txt <span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">to install the previous list of packages, possibly on an other machine</span>
</pre>
</div>
<p>
If you want to have several installed Python environments, you may
want to use <a href="https://docs.pipenv.org/">Pipenv</a>. I doubt it allows to track correctly FORTRAN or C
dynamic libraries that are wrapped by Python though.
</p>
</div>
</div>
<div id="outline-container-org849fdbb" class="outline-3">
<h3 id="org849fdbb">Installing a new package or a specific version</h3>
<div class="outline-text-3" id="text-org849fdbb">
<p>
The Jupyter environment we deployed on our servers for the MOOC is
based on the version 4.5.4 of Miniconda and Python 3.6. In this
environment you should simply use the <code>pip</code> command (remember on your
machine, you may have to use <code>pip3</code>).
</p>
<p>
If I query the current version of <code>statsmodels</code> in a shell command,
here is what I will get.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip show statsmodels
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Name: statsmodels
Version: 0.8.0
Summary: Statistical computations and models for Python
Home-page: http://www.statsmodels.org/
Author: Skipper Seabold, Josef Perktold
Author-email: pystatsmodels@googlegroups.com
License: BSD License
Location: /opt/conda/lib/python3.6/site-packages
Requires: scipy, patsy, pandas
</pre>
<p>
I can then easily upgrade <code>statsmodels</code>:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip install --upgrade statsmodels
</pre>
</div>
<p>
Then the new version should then be:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip show statsmodels
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
Name: statsmodels
Version: 0.9.0
Summary: Statistical computations and models for Python
Home-page: http://www.statsmodels.org/
Author: Skipper Seabold, Josef Perktold
Author-email: pystatsmodels@googlegroups.com
License: BSD License
Location: /opt/conda/lib/python3.6/site-packages
Requires: scipy, patsy, pandas
</pre>
<p>
It is even possible to install a specific (possibly much older) version, e.g.,:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">pip install <span style="font-weight: bold; font-style: italic;">statsmodels</span>==0.6.1
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org4f45b1e" class="outline-2">
<h2 id="org4f45b1e">Getting information about R libraries</h2>
<div class="outline-text-2" id="text-org4f45b1e">
</div>
<div id="outline-container-orgc583ee9" class="outline-3">
<h3 id="orgc583ee9">Getting the list imported modules and their version</h3>
<div class="outline-text-3" id="text-orgc583ee9">
<p>
The best way seems to be to rely on the <code>devtools</code> package (if this
package is not installed, you should install it first by running in <code>R</code>
the command <code>install.packages("devtools")</code>).
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">sessionInfo()
devtools::session_info()
</pre>
</div>
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="example">
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux buster/sid
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.8.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.8.0
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
[3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
[5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.1
Session info ------------------------------------------------------------------
setting value
version R version 3.5.1 (2018-07-02)
system x86_64, linux-gnu
ui X11
language (EN)
collate fr_FR.UTF-8
tz Europe/Paris
date 2018-08-01
Packages ----------------------------------------------------------------------
package * version date source
base * 3.5.1 2018-07-02 local
compiler 3.5.1 2018-07-02 local
datasets * 3.5.1 2018-07-02 local
devtools 1.13.6 2018-06-27 CRAN (R 3.5.1)
digest 0.6.15 2018-01-28 CRAN (R 3.5.0)
graphics * 3.5.1 2018-07-02 local
grDevices * 3.5.1 2018-07-02 local
memoise 1.1.0 2017-04-21 CRAN (R 3.5.1)
methods * 3.5.1 2018-07-02 local
stats * 3.5.1 2018-07-02 local
utils * 3.5.1 2018-07-02 local
withr 2.1.2 2018-03-15 CRAN (R 3.5.0)
</pre>
<p>
Some actually advocate that <a href="https://github.com/ropensci/rrrpkg">writing a reproducible research compendium
is best done by writing an R package</a>. Those of you willing to have a
clean R dependency management should thus have a look at <a href="https://rstudio.github.io/packrat/">Packrat</a>.
</p>
</div>
</div>
<div id="outline-container-orgdffc6a5" class="outline-3">
<h3 id="orgdffc6a5">Getting the list of installed packages and their version</h3>
<div class="outline-text-3" id="text-orgdffc6a5">
<p>
Finally, it is good to know that there is a built-in R command
(<code>installed.packages</code>) allowing to retrieve and list the details of all
packages installed.
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">head(installed.packages())
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-right" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Package</th>
<th scope="col" class="org-left">LibPath</th>
<th scope="col" class="org-right">Version</th>
<th scope="col" class="org-left">Priority</th>
<th scope="col" class="org-left">Depends</th>
<th scope="col" class="org-left">Imports</th>
<th scope="col" class="org-left">LinkingTo</th>
<th scope="col" class="org-left">Suggests</th>
<th scope="col" class="org-left">Enhances</th>
<th scope="col" class="org-left">License</th>
<th scope="col" class="org-left">License<sub>is</sub><sub>FOSS</sub></th>
<th scope="col" class="org-left">License<sub>restricts</sub><sub>use</sub></th>
<th scope="col" class="org-left">OS<sub>type</sub></th>
<th scope="col" class="org-left">MD5sum</th>
<th scope="col" class="org-left">NeedsCompilation</th>
<th scope="col" class="org-left">Built</th>
<th scope="col" class="org-right">&#xa0;</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">BH</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">1.66.0-1</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">BSL-1.0</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">no</td>
<td class="org-left">3.5.1</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">Formula</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">1.2-3</td>
<td class="org-left">nil</td>
<td class="org-left">R (&gt;= 2.0.0), stats</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">GPL-2</td>
<td class="org-left">GPL-3</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">no</td>
<td class="org-right">3.5.1</td>
</tr>
<tr>
<td class="org-left">Hmisc</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">4.1-1</td>
<td class="org-left">nil</td>
<td class="org-left">lattice, survival (&gt;= 2.40-1), Formula, ggplot2 (&gt;= 2.2)</td>
<td class="org-left">methods, latticeExtra, cluster, rpart, nnet, acepack, foreign,</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">gtable, grid, gridExtra, data.table, htmlTable (&gt;= 1.11.0),</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">viridis, htmltools, base64enc</td>
<td class="org-left">nil</td>
<td class="org-right">chron, rms, mice, tables, knitr, ff, ffbase, plotly (&gt;=</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">4.5.6)</td>
<td class="org-left">nil</td>
<td class="org-right">GPL (&gt;= 2)</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">yes</td>
<td class="org-left">3.5.1</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">Matrix</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">1.2-14</td>
<td class="org-left">recommended</td>
<td class="org-left">R (&gt;= 3.2.0)</td>
<td class="org-left">methods, graphics, grid, stats, utils, lattice</td>
<td class="org-left">nil</td>
<td class="org-left">expm, MASS</td>
<td class="org-left">MatrixModels, graph, SparseM, sfsmisc</td>
<td class="org-left">GPL (&gt;= 2)</td>
<td class="org-left">file LICENCE</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">yes</td>
<td class="org-right">3.5.1</td>
</tr>
<tr>
<td class="org-left">StanHeaders</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">2.17.2</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">RcppEigen, BH</td>
<td class="org-left">nil</td>
<td class="org-left">BSD<sub>3</sub><sub>clause</sub> + file LICENSE</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">yes</td>
<td class="org-left">3.5.1</td>
<td class="org-right">&#xa0;</td>
</tr>
<tr>
<td class="org-left">acepack</td>
<td class="org-left">/home/alegrand/R/x86<sub>64</sub>-pc-linux-gnu-library/3.5</td>
<td class="org-right">1.4.1</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">testthat</td>
<td class="org-left">nil</td>
<td class="org-left">MIT + file LICENSE</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">nil</td>
<td class="org-left">yes</td>
<td class="org-left">3.5.1</td>
<td class="org-right">&#xa0;</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgb52d0ce" class="outline-3">
<h3 id="orgb52d0ce">Installing a new package or a specific version</h3>
<div class="outline-text-3" id="text-orgb52d0ce">
<p>
This section is mostly a cut and paste from the <a href="https://support.rstudio.com/hc/en-us/articles/219949047-Installing-older-versions-of-packages">recent post by Ian
Pylvainen</a> on this topic. It comprises a very clear explanation of how
to proceed.
</p>
</div>
<div id="outline-container-orgaf558a0" class="outline-4">
<h4 id="orgaf558a0">Installing a pre-compiled version</h4>
<div class="outline-text-4" id="text-orgaf558a0">
<p>
If you're on a Debian or a Ubuntu system, it may be difficult to
access a specific version without breaking your system. So unless you
are moving to the latest version available in your Linux distribution,
<b>we strongly recommend you to build from source</b>. In this case, you'll
need to make sure you have the necessary toolchain to build packages
from source (e.g., gcc, FORTRAN, etc.). On Windows, this may require
you to install <a href="https://cran.r-project.org/bin/windows/Rtools/">Rtools</a>.
</p>
<p>
If you're on Windows or OS X and looking for a package for an <b>older
version of R</b> (R 2.1 or below), you can check the <a href="https://cran-archive.r-project.org/bin/">CRAN binary
archive</a>. Once you have the URL, you can install it using a command
similar to the example below:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">packageurl <span style="font-weight: bold; text-decoration: underline;">&lt;-</span> <span style="font-style: italic;">"https://cran-archive.r-project.org/bin/windows/contrib/2.13/BBmisc_1.0-58.zip"</span>
install.packages(packageurl, repos=<span style="font-weight: bold; text-decoration: underline;">NULL</span>, type=<span style="font-style: italic;">"binary"</span>)
</pre>
</div>
</div>
</div>
<div id="outline-container-org7d8a9f0" class="outline-4">
<h4 id="org7d8a9f0">Using devtools</h4>
<div class="outline-text-4" id="text-org7d8a9f0">
<p>
The simplest method to install the version you need is to use the
<code>install_version()</code> function of the <code>devtools</code> package (obviously, you
need to install <code>devtools</code> first, which can be done by running in <code>R</code> the
command <code>install.packages("devtools")</code>). For instance:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R"><span style="font-weight: bold; text-decoration: underline;">require</span>(devtools)
install_version(<span style="font-style: italic;">"ggplot2"</span>, version = <span style="font-style: italic;">"0.9.1"</span>, repos = <span style="font-style: italic;">"http://cran.us.r-project.org"</span>)
</pre>
</div>
</div>
</div>
<div id="outline-container-org4509fba" class="outline-4">
<h4 id="org4509fba">Installing from source code</h4>
<div class="outline-text-4" id="text-org4509fba">
<p>
Alternatively, you may want to install an older package from source If
devtools fails or if you do not want to depend on it, you can install
it from source via <code>install.packages()</code> directed using the right
URL. This URL can be obtained by browsing the <a href="https://cran.r-project.org/src/contrib/Archive">CRAN Package Archive</a>.
</p>
<p>
Once you have the URL, you can install it using a command similar to
the example below:
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-R">packageurl <span style="font-weight: bold; text-decoration: underline;">&lt;-</span> <span style="font-style: italic;">"http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz"</span>
install.packages(packageurl, repos=<span style="font-weight: bold; text-decoration: underline;">NULL</span>, type=<span style="font-style: italic;">"source"</span>)
</pre>
</div>
<p>
If you know the URL, you can also install from source via the command
line outside of R. For instance (in bash):
</p>
<div class="org-src-container">
<pre style="padding-left: 30px; background-color: #f6f8fa;" class="src src-shell">wget http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.1.tar.gz
R CMD INSTALL ggplot2_0.9.1.tar.gz
</pre>
</div>
</div>
</div>
<div id="outline-container-org9d64d25" class="outline-4">
<h4 id="org9d64d25">Potential issues</h4>
<div class="outline-text-4" id="text-org9d64d25">
<p>
There are a few potential issues that may arise with installing older
versions of packages:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">You may be losing functionality or bug fixes that are only present
in the newer versions of the packages.</li>
<li style="margin-bottom:0;">The older package version needed may not be compatible with the
version of R you have installed. In this case, you will either need
to downgrade R to a compatible version or update your R code to work
with a newer version of the package.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
......@@ -6,6 +6,19 @@
#+OPTIONS: num:nil toc:t
#+PROPERTY: header-args :eval never-export
* Table of Contents :TOC:
- [[#getting-information-about-your-git-repository][Getting information about your Git repository]]
- [[#getting-information-about-python3-libraries][Getting information about Python(3) libraries]]
- [[#getting-information-about-your-system][Getting information about your system]]
- [[#getting-the-list-of-installed-packages-and-their-version][Getting the list of installed packages and their version]]
- [[#how-to-list-imported-modules][How to list imported modules?]]
- [[#saving-and-restoring-an-environment-with-pip][Saving and restoring an environment with pip]]
- [[#installing-a-new-package-or-a-specific-version][Installing a new package or a specific version]]
- [[#getting-information-about-r-libraries][Getting information about R libraries]]
- [[#getting-the-list-imported-modules-and-their-version][Getting the list imported modules and their version]]
- [[#getting-the-list-of-installed-packages-and-their-version-1][Getting the list of installed packages and their version]]
- [[#installing-a-new-package-or-a-specific-version-1][Installing a new package or a specific version]]
* Getting information about your Git repository
When taking notes, it may be difficult to remember which version of
the code or of a file was used. This is what version control is useful
......
......@@ -6,10 +6,18 @@
#+OPTIONS: num:nil toc:t
#+PROPERTY: header-args :eval never-export
* Table des matières
- Obtenir des informations sur votre dépôt Git
- Obtenir des informations sur les librairies Python 3
- Obtenir des informations sur les packages R
* Table des matières :TOC:
- [[#obtenir-des-informations-sur-votre-dépôt-git][Obtenir des informations sur votre dépôt Git]]
- [[#obtenir-des-informations-sur-les-librairies-python-3][Obtenir des informations sur les librairies Python 3]]
- [[#obtenir-des-informations-sur-votre-système][Obtenir des informations sur votre système]]
- [[#lister-les-packages-installés-et-leur-version][Lister les packages installés et leur version]]
- [[#lister-les-packages-importés-chargés-dans-une-session-python-et-leur-version][Lister les packages importés (chargés dans une session Python) et leur version]]
- [[#sauvegarder-et-restaurer-un-environnement-avec-pip][Sauvegarder et restaurer un environnement avec pip]]
- [[#installer-un-nouveau-package-ou-une-version-spécifique][Installer un nouveau package ou une version spécifique]]
- [[#obtenir-des-informations-sur-les-packages-r][Obtenir des informations sur les packages R]]
- [[#lister-les-packages-installés-et-leur-version-1][Lister les packages installés et leur version]]
- [[#lister-les-packages-importés-chargés-dans-une-session-r-et-leur-version][Lister les packages importés (chargés dans une session R) et leur version]]
- [[#installer-un-nouveau-package-ou-une-version-spécifique-1][Installer un nouveau package ou une version spécifique]]
* Obtenir des informations sur votre dépôt Git
Lorsqu'on prend des notes, il peut être difficile de se rappeler
......
<div id="content">
<h1 class="title">Additional references</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul style="margin:0 0;">
<li style="margin-bottom:0;"><a href="#org3b8ed57">"Thoughts" on language/software stability</a></li>
<li style="margin-bottom:0;"><a href="#org1d2d532">Controlling your software environment</a></li>
<li style="margin-bottom:0;"><a href="#org50da419">Preservation/Archiving</a></li>
<li style="margin-bottom:0;"><a href="#org5d2f9e5">Workflows</a></li>
<li style="margin-bottom:0;"><a href="#orgad41259">Numerical and statistical issues</a></li>
<li style="margin-bottom:0;"><a href="#org7321a51">Publication practices</a></li>
<li style="margin-bottom:0;"><a href="#orge4adad6">Experimentation</a></li>
</ul>
</div>
</div>
<div id="outline-container-org3b8ed57" class="outline-2">
<h2 id="org3b8ed57">"Thoughts" on language/software stability</h2>
<div class="outline-text-2" id="text-org3b8ed57">
<p>
As we explained, the programming language used in an analysis has a
clear influence on the reproducibility of your analysis. It is not a
characteristic of the language itself but rather a consequence of the
development philosophy of the underlying community. For example C is a
very stable language with a <a href="https://en.wikipedia.org/wiki/C_(programming_language)#ANSI_C_and_ISO_C">very clear specification designed by a
committee</a> (even though some compilers may not respect this norm).
</p>
<p>
On the other end of the spectrum, <a href="https://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> had a much more organic
development based on a readability philosophy and valuing continuous
improvement over backwards-compatibility. Furthermore, Python is
commonly used as a wrapping language (e.g., to easily use C or FORTRAN
libraries) and has its own packaging system. All these design choices
tend to make reproducibility often a bit painful with Python, even
though the community is slowly taking this into account. The transition from Python 2 to the not fully backwards compatible Python 3 has been a particularly painful process, not least because the two languages are so similar that is it not always easy to figure out if a given script or module is written in Python 2 or Python 3. It isn't even rare to see Python scripts that work under both Python 2 and Python 3, but produce different results due to the change in the behavior of integer division.
</p>
<p>
<a href="https://en.wikipedia.org/wiki/R_(programming_language)">R</a>, in comparison is much closer (in terms of developer community) to
languages like <a href="https://en.wikipedia.org/wiki/SAS_(software)">SAS</a>, which is heavily used in the pharmaceutical
industry where statistical procedures need to be standardized and rock
solid/stable. R is obviously not immune to evolutions that break old
versions and hinder reproducibility/backward compatibility. Here is a
relatively recent <a href="http://members.cbio.mines-paristech.fr/~thocking/HOCKING-reproducible-research-with-R.html">true story about this</a> and some colleagues who worked
on the <a href="https://www.fun-mooc.fr/courses/UPSUD/42001S06/session06/about">statistics introductory course with R on FUN</a> reported us
several issues with a few functions (<code>plotmeans</code> from <code>gplots</code>,
<code>survfit</code> from <code>survival</code>, or <code>hclust</code>) whose default parameters had
changed over the years. It is thus probably good practice to give
explicit values for all parameters (which can be cumbersome) instead
of relying on default values, and to restrict your dependencies as much
as possible.
</p>
<p>
This being said, the R development community is generally quite
careful about stability. We (the authors of this MOOC) believe that open
source (which allows to inspect how computation is done and to
identify both mistakes and sources of non-reproducibility) is more
important than the rock solid stability of SAS, which is proprietary
software. Yet, if you really need to stay with SAS (similar solutions
probably exist for other languages as well), you should know that SAS
can be used within Jupyter using either the <a href="https://sassoftware.github.io/sas_kernel/">Python SASKernel</a> or the
<a href="https://sassoftware.github.io/saspy/">Python SASPy</a> package (step by step explanations about this are given
<a href="https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md">here</a>). Using such literate programming approach allied with systematic
version and environment control will always help.
</p>
</div>
</div>
<div id="outline-container-org1d2d532" class="outline-2">
<h2 id="org1d2d532">Controlling your software environment</h2>
<div class="outline-text-2" id="text-org1d2d532">
<p>
As we mentioned in the video sequences, there are several solutions to
control your environment:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;">The easy (preserve the mess) ones: <a href="http://www.pgbovine.net/cde.html">CDE</a> or <a href="https://vida-nyu.github.io/reprozip/">ReproZip</a></li>
<li style="margin-bottom:0;">The more demanding (encourage cleanliness) where you start with a
clean environment and install only what's strictly necessary (and document it):
<ul class="org-ul">
<li style="margin-bottom:0;">The very well known <a href="https://www.docker.io/">Docker</a></li>
<li style="margin-bottom:0;"><a href="https://singularity.lbl.gov/">Singularity</a> or <a href="https://spack.io/">Spack</a>, which are more targeted toward the specific
needs of high performance computing users</li>
<li style="margin-bottom:0;"><a href="https://www.gnu.org/software/guix/">Guix</a>, <a href="https://nixos.org/">Nix</a> that are very clean (perfect?) solutions to this
dependency hell and which we recommend</li>
</ul></li>
</ul>
<p>
It may be hard to understand the difference between these different
approaches and decide which one is better in your context.
</p>
<p>
Here is a webinar where some of these tools are demoed in a
reproducible research context: <a href="https://github.com/alegrand/RR_webinars/blob/master/2_controling_your_environment/index.org">Controling your environment (by Michael
Mercier and Cristian Ruiz)</a>
</p>
<p>
You may also want to have a look at <a href="http://falsifiable.us/">the Popper conventions</a> (<a href="https://github.com/alegrand/RR_webinars/blob/master/11_popper/index.org">webinar by
Ivo Gimenez through google hangout</a>) or at the <a href="https://github.com/alegrand/RR_webinars/blob/master/7_publications/index.org">presentation of Konrad
Hinsen on Active Papers</a> (<a href="http://www.activepapers.org/">http://www.activepapers.org/</a>).
</p>
</div>
</div>
<div id="outline-container-org50da419" class="outline-2">
<h2 id="org50da419">Preservation/Archiving</h2>
<div class="outline-text-2" id="text-org50da419">
<p>
Ensuring software is properly archived, i.e, is safely stored so that
it can be accessed in a perennial way, can be quite tricky. If you
have never seen <a href="https://github.com/alegrand/RR_webinars/blob/master/5_archiving_software_and_data/index.org">Roberto Di Cosmo presenting the Software Heritage
project</a>, this is a must see. <a href="https://www.softwareheritage.org/">https://www.softwareheritage.org/</a>
</p>
<p>
For regular data, we highly recommend using <a href="https://www.zenodo.org/">https://www.zenodo.org/</a>
whenever the data is not sensitive.
</p>
</div>
</div>
<div id="outline-container-org5d2f9e5" class="outline-2">
<h2 id="org5d2f9e5">Workflows</h2>
<div class="outline-text-2" id="text-org5d2f9e5">
<p>
In the video sequences, we mentioned workflow managers (original application domain in parenthesis):
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://galaxyproject.org/">Galaxy</a> (genomics), <a href="https://kepler-project.org/">Kepler</a> (ecology), <a href="https://taverna.apache.org/">Taverna</a> (bio-informatics), <a href="https://pegasus.isi.edu/">Pegasus</a>
(astronomy), <a href="http://cknowledge.org/">Collective Knowledge</a> (compiling optimization) ,
<a href="https://www.vistrails.org">VisTrails</a> (image processing)</li>
<li style="margin-bottom:0;">Light-weight: <a href="http://dask.pydata.org/">dask</a> (python), <a href="https://ropensci.github.io/drake/">drake</a> (R), <a href="http://swift-lang.org/">swift</a> (molecular biology),
<a href="https://snakemake.readthedocs.io/">snakemake</a> (like <code>make</code> but more expressive and in <code>python</code>) &#x2026;</li>
<li style="margin-bottom:0;">Hybrids: <a href="https://vatlab.github.io/sos-docs/">SOS-notebook</a>, &#x2026;</li>
</ul>
<p>
You may want to have a look at this webinar: <a href="https://github.com/alegrand/RR_webinars/blob/master/6_reproducibility_bioinformatics/index.org">Reproducible Science in
Bio-informatics: Current Status, Solutions and Research Opportunities
(by Sarah Cohen Boulakia, Yvan Le Bras and Jérôme Chopard).</a>
</p>
</div>
</div>
<div id="outline-container-orgad41259" class="outline-2">
<h2 id="orgad41259">Numerical and statistical issues</h2>
<div class="outline-text-2" id="text-orgad41259">
<p>
We have mentioned these topics in our MOOC but we could by no way
cover them properly. We only suggest here a few interesting talks
about this.
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://github.com/alegrand/RR_webinars/blob/master/10_statistics_and_replication_in_HCI/index.org">In this talk, Pierre Dragicevic provides a nice illustration of the
consequences of statistical uncertainty and of how some concepts
(e.G. p-values) are commonly badly understood.</a></li>
<li style="margin-bottom:0;"><a href="https://github.com/alegrand/RR_webinars/blob/master/3_numerical_reproducibility/index.org">Nathalie Revol, Philippe Langlois and Stef Graillat present the main
challenges encountered when trying to achieve numerical
reproducibility and present recent research work on this topic.</a></li>
</ul>
</div>
</div>
<div id="outline-container-org7321a51" class="outline-2">
<h2 id="org7321a51">Publication practices</h2>
<div class="outline-text-2" id="text-org7321a51">
<p>
You may want to have a look at the following two webinars:
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://github.com/alegrand/RR_webinars/blob/master/8_artifact_evaluation/index.org">Enabling open and reproducible research at computer systems’
conferences (by Grigori Fursin)</a>. In particular, this talk discusses
<i>artifact evaluation</i> that is becoming more and more popular.</li>
<li style="margin-bottom:0;"><a href="https://github.com/alegrand/RR_webinars/blob/master/7_publications/index.org">Publication Modes Favoring Reproducible Research (by Konrad Hinsen
and Nicolas Rougier)</a>. In this talk, the motivation for the <a href="http://rescience.github.io/">ReScience
journal</a> initiative are presented.</li>
<li style="margin-bottom:0;"><a href="https://www.youtube.com/watch?v=HuJ2G8rXHMs">Simine Vazire - When Should We be Skeptical of Scientific Claims?</a>,
which is discussing publication practices in social sciences and in
particular HARKing (Hypothesizing After the Results are Known),
p-hacking, etc.</li>
</ul>
</div>
</div>
<div id="outline-container-orge4adad6" class="outline-2">
<h2 id="orge4adad6">Experimentation</h2>
<div class="outline-text-2" id="text-orge4adad6">
<p>
Experimentation was not covered in this MOOC, although it is an
essential part of science. The main reason is that practices and
constraints can vary so wildly from one domain to another that it could
not be properly covered in a first edition. We would be happy to
gather references you consider as interesting in your domain so do not
hesitate to provide us with such references by using the forum and we
will update this page.
</p>
<ul class="org-ul">
<li style="margin-bottom:0;"><a href="https://github.com/alegrand/RR_webinars/blob/master/9_experimental_testbeds/index.org">A recent talk by Lucas Nussbaum on Experimental Testbeds in Computer
Science</a>.</li>
</ul>
</div>
</div>
</div>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment