diff --git a/module1/ressources/sequence1.org b/module1/ressources/sequence1.org index 881d19aefa7814bf11d418b206fd4316c004fb09..55a09e997db0719169680c643eddae70ce4e3aee 100644 --- a/module1/ressources/sequence1.org +++ b/module1/ressources/sequence1.org @@ -279,3 +279,5 @@ The whole purpose of all these recording systems is to preserve values. They sho laboratory and should be adequate but not overelaborate. If too much is demanded of human nature, the system will break down. #+END_QUOTE +** Additional links +A student of the course pointed to us a very interesting ressource on laboratory notebooks: [[https://colinpurrington.com/tips/lab-notebooks]]. diff --git a/module1/ressources/sequence4.org b/module1/ressources/sequence4.org index d1fb7d894203a94440f148e108beb77a82a4ec72..b82266f51475c061337af192a8c4537b7f9846ce 100644 --- a/module1/ressources/sequence4.org +++ b/module1/ressources/sequence4.org @@ -13,8 +13,8 @@ #+STARTUP: indent * Table of contents :TOC: -- [[Version control with GitLab and Git]] -- [[Version control with LibreOffice or DokuWiki]] +- [[#version-control-with-gitlab-and-git-in-the-Reproducible-research-mooc][Version control with GitLab and Git]] +- [[#version-control-with-libreoffice-or-dokuwiki][Version control with LibreOffice or DokuWiki]] * Version control with GitLab and Git in the "Reproducible research" MOOC We have created a GitLab server especially for this MOOC so that you can smoothly learn how to implement version control. diff --git a/module2/ressources/emacs_orgmode.org b/module2/ressources/emacs_orgmode.org index 63d5189b46ed66bff51d89686b1459104be5c0e8..d850914de53bcf10193dbc37217fd8b0847d67b7 100644 --- a/module2/ressources/emacs_orgmode.org +++ b/module2/ressources/emacs_orgmode.org @@ -158,7 +158,8 @@ instructions given in this section may help. Emacs comes with a very basic default configuration, so almost everyone wants to personalize it. Given the flexibility of Emacs, a configuration can become quite complex and in fact include what would -otherwise be considered complete software packages. In the context of +otherwise be considered complete software packages (see for example +these Emacs Starter Kits [[https://kieranhealy.org/resources/emacs-starter-kit/][here]] or [[https://www.emacswiki.org/emacs/StarterKits][here]]). In the context of this MOOC, we propose a relatively minimalist configuration oriented towards "/reproducible research/" with Org-Mode. If you are new to Emacs, we strongly recommended that you use it with as little diff --git a/module2/ressources/emacs_orgmode_fr.org b/module2/ressources/emacs_orgmode_fr.org index 01963b59a99b908859d16c14bc19575ccd678d00..33f85e83dcb9b20bc199ea6c68e7ef845bca2c2b 100644 --- a/module2/ressources/emacs_orgmode_fr.org +++ b/module2/ressources/emacs_orgmode_fr.org @@ -34,7 +34,7 @@ regarder la vidéo [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+sessi - [[#étape-6--ouvrez-et-commencez-à-utiliser--avec-votre-journal][Étape 6 : Ouvrez et commencez à utiliser avec votre journal]] - [[#un-modèle-darticle-réplicable][Un modèle d'article réplicable]] - [[#emacs-trucs-et-astuces][Emacs trucs et astuces]] - - [[#pense-bête][Pense-bête]] + - [[#pense-bêtes][Pense-bêtes]] - [[#tutoriels-vidéo][Tutoriels vidéo]] - [[#paquets-emacs-utiles-supplémentaires][Paquets emacs utiles supplémentaires]] - [[#autres-ressources][Autres ressources]] @@ -131,7 +131,7 @@ expliqué [[http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-p *** Installation et configuration de Matplotlib (bibliothèque graphique python) Ouvrez une console DOS et tapez la commande suivante : #+begin_src shell :results output :exports both -python -m pip install install -U matplotlib +python -m pip install -U matplotlib #+end_src [[file:emacs_orgmode_images/install_matplotlib.png]] @@ -155,7 +155,8 @@ Cette section est illustrée dans une [[https://www.fun-mooc.fr/courses/course-v Emacs s'installe avec une configuration par défaut très basique que chacun va donc vouloir personnaliser. Compte tenu de la flexibilité d'Emacs, sa configuration peut vite devenir assez complexe et pourrait -même faire l'objet d'un paquet à part entière. Dans le contexte de ce +même faire l'objet d'un paquet à part entière (voir par exemple les +différents Emacs Starter Kits [[https://kieranhealy.org/resources/emacs-starter-kit/][ici]] ou [[https://www.emacswiki.org/emacs/StarterKits][ici]]). Dans le contexte de ce MOOC, nous vous proposons une configuration relativement minimaliste orientée "/recherche reproductible/" avec Org-Mode. Si vous êtes peu familier d'Emacs, nous vous recommandons fortement de l'utiliser et de la modifier le moins possible. Il vous suffira de suivre diff --git a/module2/ressources/emacs_orgmode_images/scratch.png b/module2/ressources/emacs_orgmode_images/scratch.png new file mode 100755 index 0000000000000000000000000000000000000000..14e13a41dddcebab6c6767e07648a959994cb87c Binary files /dev/null and b/module2/ressources/emacs_orgmode_images/scratch.png differ diff --git a/module2/ressources/jupyter.org b/module2/ressources/jupyter.org index 1d51891083ceb1dbe31bb769662b2fdb1fea1123..e34bd4912e74aeca88792593cd5c1e02b142a5e4 100644 --- a/module2/ressources/jupyter.org +++ b/module2/ressources/jupyter.org @@ -23,6 +23,7 @@ jupyter notebook - [[#making-sure-jupyter-allows-you-to-use-r][Making sure Jupyter allows you to use R]] - [[#latex-for-pdf-export][LaTeX for PDF export]] - [[#additional-tips][Additional tips]] + - [[#interacting-with-gitlab-and-git][Interacting with GitLab and Git]] * Jupyter tips and tricks The following [[https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/][webpage]] lists several Jupyter tricks (in particular, it @@ -344,14 +345,17 @@ Here are a few extensions that can ease your life: #+END_CENTER NB: In the first edition of the MOOC some people had issues making it work under Windows. -*** • Interacting with GitLab and GitHub +** • Interacting with GitLab and git 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 [[https://github.com/Lab41/sunny-side-up][proof of concept]]. We have recently discovered that someone else developed about at the same time a [[https://github.com/sat28/githubcommit][rather generic version of this Jupyter plugin]]. 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. +can easily issue git commands. This is how we work most of the time. If you choose this solution, you will have to configure Git on your +computer. To do this, you can follow the video +[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85][Configure git for Gitlab]] and read the document +[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module2/ressources/gitlab.org][Git and GitLab]]. 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 diff --git a/module2/ressources/jupyter_fr.org b/module2/ressources/jupyter_fr.org index cfb28b720710747f8594e8efd5bf5d56853c437f..9885e90debad3aabc857afb87a4db4addf298b8a 100644 --- a/module2/ressources/jupyter_fr.org +++ b/module2/ressources/jupyter_fr.org @@ -16,6 +16,7 @@ - [[#sassurer-que-jupyter-vous-permet-dutiliser-r][S'assurer que Jupyter vous permet d'utiliser R]] - [[#latex-pour-la-génération-de-pdf][LaTeX pour la génération de PDF]] - [[#conseils-additionnels][Conseils additionnels]] + - [[#interaction-avec-gitlab-et-git][Interaction avec GitLab et git]] * Jupyter : Trucs et astuces Cette [[https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/][page web]] (en anglais) recense un certain nombre d'astuces @@ -381,7 +382,7 @@ vie : N.B. : Dans la première édition de ce MOOC, certains participants nous ont rapporté avoir eu des difficultés à faire fonctionner cette extension sous Windows. -*** • Interaction avec GitLab et GitHub +** • Interaction avec GitLab et git Pour rendre vous simplifier la vie, nous avons rajouté des boutons =pull/push= dans Jupyter qui vous permettent de synchroniser vos modifications avec GitLab. Ce développement spécifique pour ce MOOC @@ -393,7 +394,10 @@ intéresse, c'est donc une piste intéressante à explorer. Sinon, souvenez-vous qu'il est très simple d'insérer une cellule shell dans Jupyter et vous pouvez facilement y insérer des commandes Git. C'est la façon dont nous travaillons en pratique la majorité du -temps. +temps. Si vous optez pour cette solution, il vous faudra configurer Git sur votre +ordinateur. Pour ce faire, vous pouvez suivre la vidéo +[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85][configurer Git pour Gitlab]] et le document +[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module2/ressources/gitlab_fr.org][Git et Gitlab]] correspondant. Ceci étant dit, vous avez certainement remarqué que Jupyter conserve une trace parfaite de l'ordre dans lequel les cellules ont été diff --git a/module2/ressources/rr_org/init.el b/module2/ressources/rr_org/init.el index 5ce0517e27f2555d960833f79c65b2b3b7da026b..a81549de88782edcf0a757bdc4dd2f6765f1b1d3 100644 --- a/module2/ressources/rr_org/init.el +++ b/module2/ressources/rr_org/init.el @@ -227,51 +227,64 @@ Entered on %U )) (setq org-src-preserve-indentation t) -(require 'org-tempo nil t) +(setq rrmooc/new-org-templates (version<= "9.2" (org-version))) +(when rrmooc/new-org-templates + (require 'org-tempo)) -(add-to-list 'org-structure-template-alist - '("s" "#+begin_src ?\n\n#+end_src" "\n\n")) +(require 'subr-x) +(defun rrmooc/add-org-template (old-style-template) + (add-to-list 'org-structure-template-alist + (if rrmooc/new-org-templates + (cons + (first old-style-template) + (string-trim-right (substring (second old-style-template) 8 -9))) + old-style-template))) + +(unless rrmooc/new-org-templates + ;; this template is predefined in the new templating system + (rrmooc/add-org-template + '("s" "#+begin_src ?\n\n#+end_src" "\n\n"))) -(add-to-list 'org-structure-template-alist - '("m" "#+begin_src emacs-lisp :tangle init.el\n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("m" "#+begin_src emacs-lisp\n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("r" "#+begin_src R :results output :session *R* :exports both\n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("r" "#+begin_src R :results output :session *R* :exports both\n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("R" "#+begin_src R :results output graphics :file (org-babel-temp-file \"figure\" \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("R" "#+begin_src R :results output graphics :file (org-babel-temp-file \"figure\" \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("RR" "#+begin_src R :results output graphics :file (org-babel-temp-file (concat (file-name-directory (or load-file-name buffer-file-name)) \"figure-\") \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("RR" "#+begin_src R :results output graphics :file (org-babel-temp-file (concat (file-name-directory (or load-file-name buffer-file-name)) \"figure-\") \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("p" "#+begin_src python :results output :exports both\n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("p" "#+begin_src python :results output :exports both\n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("P" "#+begin_src python :results output :session :exports both\n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("P" "#+begin_src python :results output :session :exports both\n\n#+end_src" "\n\n")) -(add-to-list 'org-structure-template-alist - '("PP" "#+begin_src python :results file :session :var matplot_lib_filename=(org-babel-temp-file \"figure\" \".png\") :exports both\nimport matplotlib.pyplot as plt\n\nimport numpy\nx=numpy.linspace(-15,15)\nplt.figure(figsize=(10,5))\nplt.plot(x,numpy.cos(x)/x)\nplt.tight_layout()\n\nplt.savefig(matplot_lib_filename)\nmatplot_lib_filename\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("PP" "#+begin_src python :results file :session :var matplot_lib_filename=(org-babel-temp-file \"figure\" \".png\") :exports both\nimport matplotlib.pyplot as plt\n\nimport numpy\nx=numpy.linspace(-15,15)\nplt.figure(figsize=(10,5))\nplt.plot(x,numpy.cos(x)/x)\nplt.tight_layout()\n\nplt.savefig(matplot_lib_filename)\nmatplot_lib_filename\n#+end_src" "\n\n")) (if (memq system-type '(windows-nt ms-dos)) ;; Non-session shell execution does not seem to work under Windows, so we use ;; a named session just like for B. - (add-to-list 'org-structure-template-alist - '("b" "#+begin_src shell :session session :results output :exports both\n\n#+end_src" "\n\n")) - (add-to-list 'org-structure-template-alist - '("b" "#+begin_src shell :results output :exports both\n\n#+end_src" "\n\n"))) - -(add-to-list 'org-structure-template-alist - '("B" "#+begin_src shell :session *shell* :results output :exports both \n\n#+end_src" "\n\n")) - -(add-to-list 'org-structure-template-alist - '("g" "#+begin_src dot :results output graphics :file \"/tmp/graph.pdf\" :exports both - digraph G { - node [color=black,fillcolor=white,shape=rectangle,style=filled,fontname=\"Helvetica\"]; - A[label=\"A\"] - B[label=\"B\"] - A->B - }\n#+end_src" "\n\n")) + (rrmooc/add-org-template + '("b" "#+begin_src shell :session session :results output :exports both\n\n#+end_src" "\n\n")) + (rrmooc/add-org-template + '("b" "#+begin_src shell :results output :exports both\n\n#+end_src" "\n\n"))) + +(rrmooc/add-org-template + '("B" "#+begin_src shell :session *shell* :results output :exports both \n\n#+end_src" "\n\n")) + +(rrmooc/add-org-template + '("g" "#+begin_src dot :results output graphics :file \"/tmp/graph.pdf\" :exports both +digraph G { +node [color=black,fillcolor=white,shape=rectangle,style=filled,fontname=\"Helvetica\"]; +A[label=\"A\"] +B[label=\"B\"] +A->B +}\n#+end_src" "\n\n")) (global-set-key (kbd "C-c S-t") 'org-babel-execute-subtree) diff --git a/module2/ressources/rr_org/init.org b/module2/ressources/rr_org/init.org index d6e20cbf16c23f9ab6bac5411fba30e260da4769..b4b1fec88434dba22493dda35ed9c720ddeccb19 100644 --- a/module2/ressources/rr_org/init.org +++ b/module2/ressources/rr_org/init.org @@ -83,7 +83,7 @@ document, simply =M-x org-babel-tangle=. ("melpa-stable" . 10))) #+END_SRC * Install missing packages -#+begin_src emacs-lisp +#+begin_src emacs-lisp :tangle init.el (dolist (pkg '(ess auctex htmlize @@ -92,7 +92,7 @@ document, simply =M-x org-babel-tangle=. (package-install pkg))) #+end_src * Import environment variables -#+begin_src emacs-lisp +#+begin_src emacs-lisp :tangle init.el (exec-path-from-shell-initialize) (exec-path-from-shell-copy-env "PYTHONPATH") #+end_src @@ -366,57 +366,72 @@ Additional shortcuts for navigating through org-mode documents: ** Adding source code blocks: :LUKA: *** Enable the old template system with Orgmode 9.2 and later #+begin_src emacs-lisp :tangle init.el -(require 'org-tempo nil t) +(setq rrmooc/new-org-templates (version<= "9.2" (org-version))) +(when rrmooc/new-org-templates + (require 'org-tempo)) +#+end_src +*** Template definitions that work with the old and new templating systems +#+begin_src emacs-lisp :tangle init.el +(require 'subr-x) +(defun rrmooc/add-org-template (old-style-template) + (add-to-list 'org-structure-template-alist + (if rrmooc/new-org-templates + (cons + (first old-style-template) + (string-trim-right (substring (second old-style-template) 8 -9))) + old-style-template))) #+end_src *** With capital letters: To use this type \n\n")) +(unless rrmooc/new-org-templates + ;; this template is predefined in the new templating system + (rrmooc/add-org-template + '("s" "#+begin_src ?\n\n#+end_src" "\n\n"))) #+end_src *** Emacs-elisp code: To use this type \n\n")) +(rrmooc/add-org-template + '("m" "#+begin_src emacs-lisp\n\n#+end_src" "\n\n")) #+end_src *** R code: To use this type \n\n")) +(rrmooc/add-org-template + '("r" "#+begin_src R :results output :session *R* :exports both\n\n#+end_src" "\n\n")) #+end_src To use this type \n\n")) +(rrmooc/add-org-template + '("R" "#+begin_src R :results output graphics :file (org-babel-temp-file \"figure\" \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) #+end_src To use this type \n\n")) +(rrmooc/add-org-template + '("RR" "#+begin_src R :results output graphics :file (org-babel-temp-file (concat (file-name-directory (or load-file-name buffer-file-name)) \"figure-\") \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "\n\n")) #+end_src *** Python code To use this type

\n\n")) +(rrmooc/add-org-template + '("p" "#+begin_src python :results output :exports both\n\n#+end_src" "\n\n")) #+end_src #+begin_src emacs-lisp :tangle init.el -(add-to-list 'org-structure-template-alist - '("P" "#+begin_src python :results output :session :exports both\n\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("P" "#+begin_src python :results output :session :exports both\n\n#+end_src" "\n\n")) #+end_src #+begin_src emacs-lisp :tangle init.el -(add-to-list 'org-structure-template-alist - '("PP" "#+begin_src python :results file :session :var matplot_lib_filename=(org-babel-temp-file \"figure\" \".png\") :exports both\nimport matplotlib.pyplot as plt\n\nimport numpy\nx=numpy.linspace(-15,15)\nplt.figure(figsize=(10,5))\nplt.plot(x,numpy.cos(x)/x)\nplt.tight_layout()\n\nplt.savefig(matplot_lib_filename)\nmatplot_lib_filename\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("PP" "#+begin_src python :results file :session :var matplot_lib_filename=(org-babel-temp-file \"figure\" \".png\") :exports both\nimport matplotlib.pyplot as plt\n\nimport numpy\nx=numpy.linspace(-15,15)\nplt.figure(figsize=(10,5))\nplt.plot(x,numpy.cos(x)/x)\nplt.tight_layout()\n\nplt.savefig(matplot_lib_filename)\nmatplot_lib_filename\n#+end_src" "\n\n")) #+end_src *** Bash "sh" code: To use this type \n\n")) - (add-to-list 'org-structure-template-alist - '("b" "#+begin_src shell :results output :exports both\n\n#+end_src" "\n\n"))) + (rrmooc/add-org-template + '("b" "#+begin_src shell :session session :results output :exports both\n\n#+end_src" "\n\n")) + (rrmooc/add-org-template + '("b" "#+begin_src shell :results output :exports both\n\n#+end_src" "\n\n"))) #+end_src To use this type \n\n")) +(rrmooc/add-org-template + '("B" "#+begin_src shell :session *shell* :results output :exports both \n\n#+end_src" "\n\n")) #+end_src *** Graphviz #+begin_src emacs-lisp :tangle init.el -(add-to-list 'org-structure-template-alist - '("g" "#+begin_src dot :results output graphics :file \"/tmp/graph.pdf\" :exports both - digraph G { - node [color=black,fillcolor=white,shape=rectangle,style=filled,fontname=\"Helvetica\"]; - A[label=\"A\"] - B[label=\"B\"] - A->B - }\n#+end_src" "\n\n")) +(rrmooc/add-org-template + '("g" "#+begin_src dot :results output graphics :file \"/tmp/graph.pdf\" :exports both +digraph G { +node [color=black,fillcolor=white,shape=rectangle,style=filled,fontname=\"Helvetica\"]; +A[label=\"A\"] +B[label=\"B\"] +A->B +}\n#+end_src" "\n\n")) #+end_src ** Evaluating whole subtree: :LUKA: #+begin_src emacs-lisp :tangle init.el diff --git a/module2/ressources/rstudio.org b/module2/ressources/rstudio.org index 902180717257390fa64293bb10f6ef911a8ddd0f..33a3c71e4dd305370d6ae1c78800a37b447e3071 100644 --- a/module2/ressources/rstudio.org +++ b/module2/ressources/rstudio.org @@ -89,8 +89,8 @@ of these documents: * Using Git from RStudio If you have never used git with RStudio, *we strongly advise that you follow [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/d132a854b0464ad29085cedaded23136][our tutorial on using git from RStudio]]* (/"RStudio et Gitlab"/ -in French). Before proceeding, make sure you also have followed the -*[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85]["git/GitLab configuration" tutorial]]* (in French). +). Before proceeding, make sure you also have followed the +*[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85]["git/GitLab configuration" tutorial]]*. Alternatively, you may want to watch [[https://www.youtube.com/embed/uHYcDQDbMY8][this video]] (in English). If you do not like videos, you should have a look at the [[https://swcarpentry.github.io/git-novice/14-supplemental-rstudio/index.html][step-by-step diff --git a/module2/ressources/rstudio_fr.org b/module2/ressources/rstudio_fr.org index 09ea1d0abdce6fd996e7ce3b1f6d700dfc55f931..b510eea237d2c065371adf67fe8ea4169bcd6b3b 100644 --- a/module2/ressources/rstudio_fr.org +++ b/module2/ressources/rstudio_fr.org @@ -93,11 +93,11 @@ ne sont pas toujours à jour : * Utiliser Git avec RStudio La première chose à faire est de configurer Git sur votre ordinateur. Pour ce faire, vous pouvez suivre la vidéo -[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85][configurer Git pour Gitlab]] (en français) et le document -[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module2/ressources/gitlab_fr.org][Git et Gitlab]] correspondant (en français). +[[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/7508aece244548349424dfd61ee3ba85][configurer Git pour Gitlab]] et le document +[[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module2/ressources/gitlab_fr.org][Git et Gitlab]] correspondant. Vous pourrez alors utiliser Git avec RStudio. Pour ce faire, vous -pouvez suivre la vidéo [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/d132a854b0464ad29085cedaded23136][RStudio - Gitlab]] (en français) dont les étapes +pouvez suivre la vidéo [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/d132a854b0464ad29085cedaded23136][RStudio - Gitlab]] dont les étapes sont reprises ci-dessous. /(Nous vous signalons aussi cette/ [[https://www.youtube.com/embed/uHYcDQDbMY8][vidéo]] /(en anglais) ainsi que le/ [[https://swcarpentry.github.io/git-novice/14-supplemental-rstudio/index.html][tuto