Commit 08fe1829 authored by Arnaud Legrand's avatar Arnaud Legrand

Import the sources of all the slides

parent d74909fd
PATH_LOCAL=~/public_html/PITCHME/
PATH_BIN=../bin/
PATH_ASSETS=../assets/
sync_local: PITCHME.md
mkdir -p $(PATH_LOCAL)/assets/md/img/
cp PITCHME.md $(PATH_LOCAL)/assets/md/PITCHME.md
cp $(PATH_ASSETS)/img/* $(PATH_LOCAL)/assets/img/
$(PATH_LOCAL)/assets/md/PITCHME.md: PITCHME.md
sed 's|https://rawgit.com/alegrand/RR_MOOC/master/||g' < $< > $@
C028AL_slides_module1-en-gz.pdf: slides_module1.pdf
mv $< $@
C028AL_slides_module1-fr-gz.pdf: diapos_module1.pdf
mv $< $@
%-gz.pdf: %.pdf
gzprez $<
%.pdf: %.tex
pdflatex --shell-escape $^
pdflatex --shell-escape $^
%.tex: %.org
emacs -batch $^ --funcall org-beamer-export-to-latex
sed -i -e 's|includegraphics\(.*\)../assets/img/|includegraphics\1../assets/img/thumbnail/|' -e 's/\.png}/.jpg}/i' -e 's/\.JPG}/.jpg}/i' $@
#+TITLE: Les diapos du module 1
#+AUTHOR: @@latex:{\large Christophe Pouzat} \\ \vspace{0.2cm}MAP5, Paris-Descartes University and CNRS\\ \vspace{0.2cm} \texttt{christophe.pouzat@parisdescartes.fr}@@
#+OPTIONS: H:2 tags:nil
#+EXCLUDE_TAGS: noexport
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+BEAMER_HEADER: \setbeamercovered{invisible}
#+BEAMER_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Où en sommes nous ?}\tableofcontents[currentsection]\end{frame}}
#+BEAMER_HEADER: \beamertemplatenavigationsymbolsempty
#+STARTUP: beamer
#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) %8BEAMER_OPT(Opt)
#+STARTUP: indent
#+PROPERTY: header-args :eval no-export
* M1-S0: Cahiers de notes / cahiers de laboratoire
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s0
:END:
** Les grandes lignes du module : cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: les-grandes-lignes-du-module-cahier-de-notes-cahier-de-laboratoire
:END:
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
#+BEGIN_COMMENT
*Première ligne* Nous allons discuter ici d'une question qui
dépasse la problématique de la recherche reproductible.
En effet, la mise en œuvre concrète de la recherche reproductible
nécessite la tenue d'un cahier de notes et la prise de notes concerne
tout le monde. Je commencerai donc ce module en vous disant quelque
chose que vous savez déjà (!) : nous devons tous prendre des notes.
*Deuxième ligne* Si nous devons tous prendre des notes, nos
prédécesseurs ont du le faire aussi. Cette constatation élémentaire
faite, nous éviterons de croire que nous sommes les premiers à avoir à
faire face un déluge d'informations. Nous en profiterons pour apprendre
comment nos brillants ancêtres s'y sont pris.
En nous inspirant de nos connaissances des « anciennes » techniques,
nous verrons ensuite comment mettre à profit les outils fournis par
l'informatique.
*Troisième ligne* Les fichiers texte et les langages de balisage léger
font nous permettre de structurer nos notes et de les « recycler »
facilement (dans des articles, des pages web, etc.).
*Quatrième ligne* La gestion de version nous évitera de tout perdre tout
en gardant traces de nos corrections et modifications successives.
*Cinquième ligne* Enfin, reprendre une activité de zéro parce que
retrouver la bonne information dans la jungle de nos notes prendrait
plus de temps ne sera plus qu'un souvenir avec la construction d'index.
#+END_COMMENT
* M1-S1: Nous utilisons tous des cahiers de notes
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s1
:END:
** 1. Cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: cahier-de-notes-cahier-de-laboratoire
:END:
1. *Nous utilisons tous des cahiers de notes*
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
#+BEGIN_COMMENT
La recherche reproductible est encore -- mais pour peu de temps
seulement ! --, une activité dont le nombre d'adeptes est restreint.
Elle suppose par contre une prise de notes « rigoureuse » et là, notre
propos commence à s'adresser à un groupe beaucoup plus large. C'est ce
que nous allons illustrer ici par quelques exemples.
#+END_COMMENT
** L'érudit qui annote son livre / manuscrit
:PROPERTIES:
:CUSTOM_ID: lérudit-qui-annote-son-livre-manuscrit
:END:
[[../assets/img/ManuscritAnnoteEtCoupe.png]]
Manuscrit d'œuvres d'Aristoteles (XIVe siècle).
#+BEGIN_COMMENT
Nous voyons ici un manuscrit du XIVe abondamment annoté par son
propriétaire Nicasius de Planca. Cette forme de prise de note est
extrêmement fréquente aussi bien à l'époque des manuscrits
qu'aujourd'hui. Vous devriez néanmoins éviter de l'employer sur des
livres empruntés dans une bibliothèque ou à des amis !
Les deux pages suivantes présentent un exemple d'une importance
considérable pour l'histoire des sciences.
#+END_COMMENT
** Galilée qui observe les lunes de Jupiter
:PROPERTIES:
:CUSTOM_ID: galilée-qui-observe-les-lunes-de-jupiter
:END:
[[../assets/img/GalileoManuscriptCoupe.png]]
#+BEGIN_COMMENT
Le 7 janvier 1610, Galilée fait une découverte capitale : il remarque
trois « petites étoiles » à côté de Jupiter. Après quelques nuits
d'observation, il découvre qu'il y en a une quatrième et qu'*elles
accompagnent la planète*, c'est ce qu'il note sur son cahier
d'observations. Ce sont les satellites visibles de Jupiter, qu'il
nommera plus tard les étoiles Médicées ou astres médicéens -- en
l'honneur de ses protecteurs, la Famille des Médicis -- et qui sont
aujourd'hui appelés lunes galiléennes.
#+END_COMMENT
**
[[../assets/img/GalileoManuscriptZoom.png]]
#+BEGIN_COMMENT
Ces observations amèneront Galilée à rejeter l'hypothèse
géocentrique (la terre est le centre de l'Univers et tout tourne autour
d'elle) en faveur du système copernicien héliocentrique. Cela l'amènera
indirectement (je « fais court ») et bien plus tard, le 22 juin 1633, a
être condamné par l'inquisition, ce qui lui vaudra de finir ses jours en
résidence surveillée.
#+END_COMMENT
** Les armoires à notes de Placcius et Leibniz
:PROPERTIES:
:CUSTOM_ID: les-armoires-à-notes-de-placcius-et-leibniz
:END:
[[../assets/img/Placcius_cabinet_TabIV.png]]
#+BEGIN_COMMENT
Avec l'apparition de l'imprimerie, la demande de papier croît
considérablement et le prix de celui-ci chute. En plus de l'emploi des
codex avec support papier que nous venons de voir, de nombreux savants
commencent à prendre leurs notes sur des « bouts de papier » qui
deviendront plus tard des fiches.
Mais si prendre des notes en abondance sur des « bouts de papier », est
très bien ! encore faut-il être capable de s'y retrouver. Vincent
Placcius (1642-1699) et Gottfried Leibniz (1646-1716) s'étaient fait
construire une armoire spéciale pour résoudre ce problème.
#+END_COMMENT
**
#+ATTR_LATEX: :width 0.3\textwidth
[[../assets/img/Placcius_cabinet_TabIVzoom.png]]
#+BEGIN_COMMENT
Cette armoire contenait une multitude de colonnes capables de
tourner autour de leur axe. Un côté de la colonne permettait d'inscrire
un ou des mots clés et le côté opposé comportait un crochet auquel était
attaché les notes correspondantes.
Remarquez l'avantage des « bouts de papiers classés » de Placcius et
Leibniz sur le /codex/ de Galilée : les premiers peuvent être facilement
réordonnées.
#+END_COMMENT
** Les dangers de l'abondance de notes : la triste fin de Fulgence Tapir
:PROPERTIES:
:CUSTOM_ID: les-dangers-de-labondance-de-notes-la-triste-fin-de-fulgence-tapir
:END:
Un extrait de la fin de la préface de « L'île des pingouins » d'Anatole
France, publié en 1908.
[[../assets/img/A_France_Pingouins.jpg]]
#+BEGIN_COMMENT
Je ne résiste pas, pour vous prévenir contre une accumulation exagérée
de notes, à vous lire un extrait du roman d'Anatole France « L'île des
pingouins », une histoire parodique de la France. Dans la préface, le
narrateur explique qu'il écrit l'histoire des Pingouins et que sa quête
d'informations l'amène chez l'immense savant Fulgence Tapir. Cette
visite va se solder par une catastrophe que le narrateur rapporte
ainsi :
Les murs du cabinet de travail, le plancher, le plafond même portaient
des liasses débordantes, des cartons démesurément gonflés, des boîtes où
se pressait une multitude innombrable de fiches, et je contemplai avec
une admiration mêlée de terreur les cataractes de l'érudition prêtes à
se rompre.
---Maître, fis-je d'une voix émue, j'ai recours à votre bonté et à votre
savoir, tous deux inépuisables. Ne consentiriez-vous pas à me guider
dans mes recherches ardues sur les origines de l'art pingouin?
---Monsieur, me répondit le maître, je possède tout l'art, vous
m'entendez, tout l'art sur fiches classées alphabétiquement et par ordre
de matières. Je me fais un devoir de mettre à votre disposition ce qui
s'y rapporte aux Pingouins. Montez à cette échelle et tirez cette boîte
que vous voyez là-haut. Vous y trouverez tout ce dont vous avez besoin.
J'obéis en tremblant. Mais à peine avais-je ouvert la fatale boîte que
des fiches bleues s'en échappèrent et, glissant entre mes doigts,
commencèrent à pleuvoir. Presque aussitôt, par sympathie, les boîtes
voisines s'ouvrirent et il en coula des ruisseaux de fiches roses,
vertes et blanches, et de proche en proche, de toutes les boîtes les
fiches diversement colorées se répandirent en murmurant comme, en avril,
les cascades sur le flanc des montagnes. En une minute elles couvrirent
le plancher d'une couche épaisse de papier. Jaillissant de leurs
inépuisables réservoirs avec un mugissement sans cesse grossi, elles
précipitaient de seconde en seconde leur chute torrentielle. Baigné
jusqu'aux genoux, Fulgence Tapir, d'un nez attentif, observait le
cataclysme; il en reconnut la cause et pâlit d'épouvante.
---Que d'art! s'écria-t-il.
Je l'appelai, je me penchai pour l'aider à gravir l'échelle qui pliait
sous l'averse. Il était trop tard. Maintenant, accablé, désespéré,
lamentable, ayant perdu sa calotte de velours et ses lunettes d'or, il
opposait en vain ses bras courts au flot qui lui montait jusqu'aux
aisselles. Soudain une trombe effroyable de fiches s'éleva,
l'enveloppant d'un tourbillon gigantesque. Je vis durant l'espace d'une
seconde dans le gouffre le crâne poli du savant et ses petites mains
grasses, puis l'abîme se referma, et le déluge se répandit sur le
silence et l'immobilité. Menacé moi-même d'être englouti avec mon
échelle, je m'enfuis à travers le plus haut carreau de la croisée.
#+END_COMMENT
** Le Navigateur et son livre de bord : Éric Tabarly
:PROPERTIES:
:CUSTOM_ID: le-navigateur-et-son-livre-de-bord-éric-tabarly
:END:
[[../assets/img/LivredebordpenduickV.JPG]]
#+BEGIN_COMMENT
Ici, un cas en apparence plus anecdotique : le livre de bord
d'Éric Tabarly lors de la trans-Pacifique de San-Francisco à Tokyo en
1969.
#+END_COMMENT
**
[[../assets/img/LivredebordpenduickVzoom1.png]]
#+BEGIN_COMMENT
Tabarly y note les événements « marquant ». Par exemple, le 21
mars à 23 h, le foc ballon est déchiré.
#+END_COMMENT
**
[[../assets/img/LivredebordpenduickVzoom2.png]]
#+BEGIN_COMMENT
Sur la page opposé il fait ses calculs de positions (il n'y avait
pas de GPS à l'époque).
*Le cas du livre de bord n'est anecdotique qu'en apparence*.
Un projet européen a, en effet, été consacré, il y a une dizaine
d'année, à une reconstruction des climats des océans atlantiques et
indiens aux 17e et 18e siècles. Cette tentative de reconstruction s'est
basée sur des /livre de bord/ des navires des compagnies des Indes
portugaises, espagnoles, hollandaises, anglaises et françaises.
De même, les livres de bord des « navires négriers » constituent une
source d'information capitale pour l'estimation du nombre d'africains
déportés vers les colonies de ce que les occidentaux désignaient par
« Nouveau Monde » du 15e au 19e siècle (11 à 12 millions).
#+END_COMMENT
** Quel(s) support(s) matériel(s) pour les notes ?
:PROPERTIES:
:CUSTOM_ID: quels-supports-matériels-pour-les-notes
:END:
Doit-on utiliser :
- l'objet d'étude (comme pour le livre annoté)
- un ou des cahiers
- des fiches ou feuilles volantes stockées dans un classeur
- un ou des fichiers d'ordinateur
- des dessins ou photos
- des films
- ... ?
** Comment s'y retrouver ?
:PROPERTIES:
:CUSTOM_ID: comment-sy-retrouver
:END:
Les notes posent un problème d'organisation :
- Comment peut-on imposer une structure à nos notes après coup ? Est-ce
seulement possible ?
- Peut-on les indexer, si oui, comment ?
- Comment peut-on les rendre pérennes tout en les faisant évoluer ?
#+BEGIN_COMMENT
*En Introduction* Les notes par nature disparates -- par les
sujets dont elles traitent et, souvent, par leurs supports matériels --
posent un problème d'organisation.
*En conclusion* *Il est clair que sans organisation, l'utilité des notes
n'excède qu'à peine notre capacité à mémoriser des faits ou évènements.*
Dans le reste de ce module nous allons /proposer/ des réponses aux
questions que nous venons de poser dans ces deux dernières diapos.
#+END_COMMENT
* M1-S2: Un aperçu historique de la prise de notes
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s2
:END:
** 1. Cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: cahier-de-notes-cahier-de-laboratoire-1
:END:
1. Nous utilisons tous des cahiers de notes
2. *Un aperçu historique de la prise de notes*
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
#+BEGIN_COMMENT
Si nous devons tous prendre des notes, nos prédécesseurs ont dû le
faire aussi. Cette constatation élémentaire va nous inciter à regarder
comment nos brillants ancêtres s'y sont pris pour effectuer cette tâche.
#+END_COMMENT
** De quoi allons-nous discuter ?
:PROPERTIES:
:CUSTOM_ID: de-quoi-allons-nous-discuter
:END:
- de l'aspect concret de la prise de note -- la « matérialité » des
historiens --
- de l'organisation des livres et des notes
- du lien entre aspects matériels et organisationnels.
#+BEGIN_COMMENT
Notre discussion va porter en partie sur le livre puisque les éléments
de navigation de ce dernier : table des matières, index, etc. ;
s'applique aussi à l'organisation des notes.
Nous allons nous concentrer sur le « côté occidental » de l'histoire
avec une seule page consacrée aux contributions chinoises et aucune aux
contributions musulmanes, indiennes ou précolombiennes. Ce biais doit
être interprété comme un reflet de mes ignorances et par la plus grande
facilité d'obtenir des documents et illustrations concernant l'histoire
du livre et de la prise de notes en Occident.
#+END_COMMENT
** L'aspect matériel résumé sur une diapo
:PROPERTIES:
:CUSTOM_ID: laspect-matériel-résumé-sur-une-diapo
:END:
[[../assets/img/Figure_W1_S2_1.jpg]]
#+BEGIN_COMMENT
En haut à gauche : une tablette d'argile avec des comptes
(précunéiforme, vers -3000)
En haut au milieu : une fresque de Pompéi avec le portrait de Terentius
Neo et sa femme. Elle porte une /tablette de cire/ et un /stylet/ (les
outils principaux de prise de notes jusqu'au 19e siècle, ou presque), il
porte un /volumen/, la support matériel du livre jusqu'au début de notre
ère.
En haut à droite : un cahier de notes sur papier datant du milieu du 17e
siècle et contenant des « lieux communs » au sens rhétorique du terme de
« source générale communément admise d'où un orateur peut tirer ses
arguments ».
En bas à gauche : une fiche, exemple d'un support de notes dont
l'utilisation va « exploser » avec la bureaucratisation et le
développement des bibliothèques. Ce support sera largement adopté dans
les sciences humaines, mais il a d'abord été systématiquement employé et
peut être même créé par le naturaliste Carl Linné, père de la
/taxinomie/.
En bas au milieu : des « Post-it » comme nous sommes nombreux à en
utiliser tous les jours.
En bas à droite : un ordinateur moderne utilisable comme une tablette
(numérique cette fois).
#+END_COMMENT
** Tablette de cire et stylet
:PROPERTIES:
:CUSTOM_ID: tablette-de-cire-et-stylet
:END:
[[../assets/img/tabula_stilus.jpg]]
#+BEGIN_COMMENT
Les tablettes de cire (en latin tabulæ, planches) sont des supports
d'écriture effaçables et réutilisables, connus depuis la haute Antiquité
et qui ont été utilisés jusqu'au milieu du XIXe siècle.
La tablette de cire est formée d'une plaquette le plus souvent en bois
(mais les nobles auront des tablettes en argent, ivoire, etc.). Elle est
évidée sur presque toute sa surface en conservant un rebord de quelques
millimètres qui fait cadre. De la cire est coulée dans la partie en
dépression puis lissée. L'écriture se fait en gravant les caractères sur
la cire à l'aide de l'extrémité pointue d'un instrument appelé style ou
stylet. Ils peuvent être effacés en lissant la cire avec l'autre
extrémité, plate, du stylet, après l'avoir ramollie.
La plus ancienne tablette connue provient d'un bateau mycénien et date
du XIVe siècle av. J.-C. Les Grecs ont adopté la tablette par
l'intermédiaire des Phéniciens en même temps que l'alphabet vers le
VIIIe siècle av. J.-C..
En français l'expression « faire table rase » vient du latin /tabula
rasa/, effacer la tablette.
Les ardoises et des tablettes de sable ont également été utilisées pour
prendre des notes.
#+END_COMMENT
** Du /volumen/ au /codex/
:PROPERTIES:
:CUSTOM_ID: du-volumen-au-codex
:END:
[[../assets/img/Figure_W1_S2_3.jpg]]
#+BEGIN_COMMENT
Le passage du /volumen/ au /codex/ est absolument fondamentale pour
l'avenir de la civilisation écrite.
Le /volumen/ est un livre à base de feuilles de papyrus collées les unes
aux autres et qui s'enroule sur lui-même. Il a été créé en Égypte vers
3000 av. J.-C. Le texte est rédigé en colonnes parallèles assez
étroites. C'est le support du texte par excellence durant les trente
siècles précédant notre ère, d'abord en Égypte, puis dans tout le monde
méditerranéen.
La mosaïque en bas à gauche représente Virgile (70-19 avant J.-C.,
assis) tenant un volume de l'Énéide et Clio, muse de l'Histoire, tenant
elle aussi un /volumen/.
Comme l'explique Frédéric Barbier : « La forme du /volumen/ impose une
pratique de lecture complexe : il faut dérouler (/explicare/) et
enrouler en même temps, ce qui interdit par exemple, de travailler
simultanément sur plusieurs rouleaux (un texte et son commentaire) ou de
prendre des notes, impose une lecture suivie et empêche la simple
consultation. »
Le /volumen/ n'est clairement pas adapté à une lecture « nomade » ;
imagine-t-on Ulysse partant pour son Odyssée avec les 24 /volumen/ de
l'Iliade ?
Le /volumen/ est à l'origine du terme « volume » dans un « livre en
plusieurs volumes » comme dans la désignation du concept géométrique.
Le passage au codex repose sur deux innovations : - la collection des
tablettes de cires en « groupes reliés » ; - la généralisation du
parchemin (peau, généralement, de mouton spécialement préparée) au
détriment du papyrus. Cette généralisation résulte une lutte pour
l'hégémonie culturelle entre deux descendants de généraux d'Alexandre le
Grand, en effet d'après Pline l'ancien : Ptolémé Épiphane d'Alexandrie
cherchait à empêcher Eumène II d'établir une bibliothèque à Pergame (au
2e siècle avant J.-C.) et avait interdit l'exportation du papyrus
(produit exclusivement en Égypte), ce qui incita Eumène à chercher un
substitut qui devint le parchemin.
Le remplacement du rouleau par le codex aura des conséquences majeures
sur l'organisation du livre ainsi que sur la façon de lire et il
permettra le développement ultérieur de l'imprimerie.
La principale révolution introduite par le codex est la notion de page.
Grâce à elle, le lecteur peut accéder de manière directe à un chapitre
ou à un passage du texte, alors que le rouleau impose une lecture
continue. *Les mots ne sont de plus pas séparés par des espaces*. Comme
l'écrit Collette Sirat : « Il faudra vingt siècles pour qu'on se rende
compte que l'importance primordiale du codex pour notre civilisation a
été de permettre la lecture sélective et non pas continue, contribuant
ainsi à l'élaboration de structures mentales où le texte est dissocié de
la parole et de son rythme. »
Remarquez les lettres en rouge, résultat de la /rubrication/ (mot qui a
donné notre « rubrique » moderne) utilisée pour séparer ce qui deviendra
des paragraphes avec l'imprimerie. Cette dernière en effet utilisera des
espaces blancs plutôt que des couleurs (trop chères) pour marquer des
séparations. L'usage de la couleur constitue une technique de mise en
page qui pourrait parfaitement être remise à l'ordre du jour avec
l'informatique.
#+END_COMMENT
** Eusèbe et les références croisées
:PROPERTIES:
:CUSTOM_ID: eusèbe-et-les-références-croisées
:END:
[[../assets/img/Eusebe_final.jpg]]
#+BEGIN_COMMENT
Au IVe siècle de notre ère, Eusèbe de Césarée ou Eusèbe (de) Pamphile
est l'auteur de nombreuses œuvres historiques, apologétiques, bibliques
et exégétiques. Auteur de l'Histoire ecclésiastique, il est reconnu
comme un Père de l'Église, et ses écrits historiques ont une importance
capitale pour la connaissance des trois premiers siècles de l'histoire
chrétienne. Il va apporter plusieurs innovations capitales à
l'organisation du livre dont la table de références croisées.
#+END_COMMENT
** Canon eusébien
:PROPERTIES:
:CUSTOM_ID: canon-eusébien
:END:
[[../assets/img/Evangeliaire_Lorsch.jpg]]
#+BEGIN_COMMENT
Pour permettre une comparaison plus facile des quatre évangiles, il
numérote les différents versets de chacun d'entre eux -- sa numérotation
n'est celle employée de nos jours qui, elle, date du XVIe siècle. Il
indique les versets dont les contenus sont identiques dans les 4
évangiles (à gauche), ceux dont le contenu est identique dans 3 des 4 (à
droite), dans 2 des 4, etc. Ce « canon eusébien » constitue le premier
exemple connu de références croisées.
#+END_COMMENT
** Importance du /codex/
:PROPERTIES:
:CUSTOM_ID: importance-du-codex
:END:
D'après Frédéric Barbier dans l'« Histoire du livre » :
- L'invention du /codex/ est absolument fondamentale pour l'avenir de la
civilisation écrite
- Le /codex/ se prête à la /consultation partielle/
- On peut lui superposer un système de références facilitant la
consultation
- On peut consulter le /codex/ en prenant des notes
- La combinaison du /codex/ et de la minuscule donne un outil
intellectuel très puissant, tel qu'il n'en existait pas
antérieurement.
#+BEGIN_COMMENT
Au fil des siècles, le codex --- qu'on désigne le plus souvent comme un
manuscrit --- va évoluer et se donner peu à peu les attributs du livre
moderne : séparation entre les mots (VIIe siècle), début de ponctuation
(VIIIe siècle), table des matières, titre courant, marque de paragraphe
(XIe siècle), pagination, index (XIIIe siècle), etc.
Un point intéressant : le contenu de la Thora est « fixé » avant
l'apparition du codex et, aujourd'hui encore, la Thora est écrite sur
des /volumen/ (dans les synagogues au moins). La religion chrétienne se
développe en même temps que le codex et ne donnera jamais au /volumen/
un statut « supérieur », pas plus que ne le fera la religion musulmane.
#+END_COMMENT
** Parallèle chinois
:PROPERTIES:
:CUSTOM_ID: parallèle-chinois
:END:
[[../assets/img/Figure_W1_S2_6.jpg]]
#+BEGIN_COMMENT
Le lien entre apparition et généralisation du /codex/, d'une part, et
apparition des « outils de navigation », table des matières, index,
titre courant etc., d'autre part à un pendant dans la civilisation
chinoise.
En Chine, les concours d'entrée dans l'administration se développent au
9e siècle. L'épreuve principale de ceux-ci serait probablement appelée
épreuve de culture générale de nos jours et demande aux candidat une
connaissance approfondie des classiques, Confucius en tête, et la
capacité de les citer.
Pour répondre à cette demande, des ouvrages spécialisés, sorte de
florilèges, les leishu, vont se développer. Mais leur utilisation
efficace doit permettre de trouver un ensemble de citations appropriées
à un contexte donné suppose l'emploi d'index, de table des matières,
etc. De façon intéressante, le /codex/ et les outils de navigation vont
eux aussi se développer *de concert* à partir de cette époque.
La majorité de ces leishus *est imprimée* (dès le 9e siècle !), ce que
rappelle la matrice d'impression à droite de la page. L'impression se
fait bien sûr sur du papier, support inventé par les Chinois au 8e
siècle avant J.-C....
#+END_COMMENT
** Organiser en « mettant dans la bonne case »
:PROPERTIES:
:CUSTOM_ID: organiser-en-mettant-dans-la-bonne-case
:END:
[[../assets/img/Placcius_cabinet_TabIV.png]]
#+BEGIN_COMMENT
Maintenant que nous avons très brièvement décrit l'apparition des
principaux outils de navigations du livre -- outils qui peuvent bien
entendu s'appliquer aux notes prises dans un cahier -- ; nous revenons
sur le « bout de papier » ou la fiche comme support de note.
Nous montrons à nouveau l'armoire à notes de Placcius et Leibniz
puisqu'elle évoque parfaitement les inconvénients et les avantages des
supports ne contenant *qu'une seule note*.
L'inconvénient est que le bout de papier ou la fiche se perdent
facilement et ne servent à rien s'ils ne sont pas *classés* en plus
d'être rangés. Problème résolu par l'armoire de la figure. D'une
certaine façon, sa conception fait qu'on accède à son contenu par
l'index.
L'avantage est que les notes peuvent être réorganisées si elles
contiennent des information sur plusieurs sujets. Elle peuvent aussi
être directement collées dans un livre lors de la composition d'un
florilège ou d'un ouvrage de synthèse.
Ce dernier procédé était très couramment employé par les humanistes et
les érudit de la renaissance et du début de la période moderne.
[[https://fr.wikipedia.org/wiki/Conrad_Gessner][Conrad Gessner]]
(1516-1565) était un champion de cette technique ; il obtenait même
parfois ses fiches en découpant les pages des livres. Encore une fois,
ne faites pas cela avec les livres de bibliothèques !
#+END_COMMENT
** Organiser avec une bonne « carte » : la méthode de John Locke
:PROPERTIES:
:CUSTOM_ID: organiser-avec-une-bonne-carte-la-méthode-de-john-locke
:END:
[[../assets/img/MethodeLocke1.jpg]]
#+BEGIN_COMMENT
Nous allons maintenant apprendre une technique de construction d'index
due à [[https://fr.wikipedia.org/wiki/John_Locke][John Locke]]
(1632-1704), grand-père du libéralisme, ce qui ne l'empêchait pas d'être
actionnaire de la /Royal African Company/,
[[https://en.wikipedia.org/wiki/John_Locke#Constitution_of_Carolina][principale
compagnie négrière anglaise]]...
J'illustre la méthode avec mon cahier de notes. Les deux pages décrivent
l'organisation d'un jeu de données dans un fichier au format
[[https://www.hdfgroup.org/][HDF5]] sur la page de gauche et
l'organisation correspondante dans un =data frame= du logiciel
[[https://www.r-project.org/][R]] sur la page de droite. Les données
concernent la mesure de la concentration des ions calcium dans des
neurones et ces notes ont été prises lors du développement d'un code
(programme d'ordinateur) pour les analyser.
Pour l'application de la méthode de Locke, ce n'est pas le contenu des
pages qui nous importent directement, mais les fait qu'elles sont
numérotées (en bas dans les coins externes, ici nous avons affaire aux
pages 86 et 87) et qu'elles comportent des mots clé : =code= ; =neuro= ;
=calcium= ; inscrits en rouge en bas des pages.
Je signale que la méthode de Locke peut être mise en œuvre après coup.
Je l'ai en fait testée lors de la préparation de ce cours, c'est-à-dire
après avoir commencé à remplir mon cahier de notes.
#+END_COMMENT
** La méthode de John Locke (suite)
:PROPERTIES:
:CUSTOM_ID: la-méthode-de-john-locke-suite
:END:
[[../assets/img/MethodeLocke2.jpg]]
#+BEGIN_COMMENT
Nous voyons maintenant notre index. Il est situé en fin de cahier, même
si Locke recommande de le placer au début, parce-que je ne l'avais pas
planifié comme je viens de l'expliquer.
L'idée est de référencer les mots clé du cahier en se basant sur leur
première lettre et sur la première voyelle suivant la première lettre.
L'index est ainsi décomposé en 26 entrées principales, les lettres
capitales de A à R visibles sur les deux pages, et chaque entrée
principale est elle-même subdivisée suivant les 5 voyelles les plus
courantes (par convention le y sera alors classé avec le i).
Les pages 86 et 87 que nous venons de voir comportaient le mot clé
=code= et nous voyons qu'elles figurent sur la ligne =Co=, elle
comportaient le mot clé =neurone= et elles figurent également sur la
ligne =Ne= ; enfin elle comportaient le mot clé =calcium= et figurent
donc sur la ligne =Ca=.
Si besoin, on peut aussi lister les mots clé avant ou après l'index
lorsque le cahier est fini.
#+END_COMMENT
** Conclusions
:PROPERTIES:
:CUSTOM_ID: conclusions
:END:
- Comme il est rarement possible de se passer complètement d'un support
papier, apprendre de nos brillants prédécesseurs devrait nous
permettre de ne pas « réinventer la roue »
- Clairement nous avons néanmoins intérêt à utiliser autant que possible
un support numérique pour profiter (en nous inspirant de ces mêmes
prédécesseurs) :
- d'une plus grande flexibilité d'organisation, de réorganisation et
de structuration
- d'outils d'archivage fiables
- d'outils d'indexation puissants.
* M1-S3: Du fichier texte au langage de balisage léger
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s3
:END:
** 1. Cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: cahier-de-notes-cahier-de-laboratoire-2
:END:
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. *Du fichier texte au langage de balisage léger*
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
#+BEGIN_COMMENT
Nous commençons à présent une discussion plus « technique » dirigée
principalement vers les outils que l'informatique met à notre
disposition pour prendre des notes avec les notions de « fichier texte »
et de « langage de balisage léger ».
#+END_COMMENT
** Qu'est-ce qu'un fichier texte ?
:PROPERTIES:
:CUSTOM_ID: quest-ce-quun-fichier-texte
:END:
- De façon pratique, un
« [[https://fr.wikipedia.org/wiki/Fichier_texte][fichier texte]] »
/donne quelque chose de lisible/ lorsqu'il est ouvert avec un
[[https://fr.wikipedia.org/wiki/%C3%89diteur_de_texte][éditeur de
texte]].
- Un « éditeur de texte » permet de créer et de modifier des fichiers
textes (belle définition circulaire !) :
- [[https://notepad-plus-plus.org/][Notepad++]] pour =Windows=
- [[https://wiki.gnome.org/Apps/Gedit][gedit]] pour les systèmes
=Unix / Linux= (mais pas seulement)
- [[https://en.wikipedia.org/wiki/TextEdit][TextEdit]] pour les
=MacOS=.
#+BEGIN_COMMENT
Nous ne citons ici, délibérément, que des logiciels libres (il est
difficile de faire de la recherche vraiment reproductible avec des
logiciels non libres).
Un logiciel de
« [[https://fr.wikipedia.org/wiki/Traitement_de_texte][traitement de
texte]] » est plus sophistiqué qu'un simple éditeur de texte ; il permet
de faire plus, ce qui sous entend qu'il peut aussi ouvrir et manipuler
des fichiers textes.
*Attention* : le format « natif » des traitements de texte est rarement
un format texte. Les fichiers =doc= et =docx= de =Word= et =odt= de
=LibreOffice= /ne sont pas des fichiers textes/.
#+END_COMMENT
** Un fichier « non lisible » avec un éditeur de texte
:PROPERTIES:
:CUSTOM_ID: un-fichier-non-lisible-avec-un-éditeur-de-texte
:END:
[[../assets/img/Exemple_Fichier_Binaire.png]]
Un fichier =PDF= ouvert avec =gedit=
** Un fichier « texte » ouvert avec un éditeur de texte
:PROPERTIES:
:CUSTOM_ID: un-fichier-texte-ouvert-avec-un-éditeur-de-texte
:END:
[[../assets/img/Exemple_Fichier_Texte.png]]
** Pourquoi utiliser des fichiers texte ?
:PROPERTIES:
:CUSTOM_ID: pourquoi-utiliser-des-fichiers-texte
:END:
Les caractères contenus dans le fichier texte sont typiquement codés en
[[https://fr.wikipedia.org/wiki/UTF-8][UTF-8]] (/Universal Character Set
Transformation Format - 8 bits/).
*Cela implique que* :
- il est /toujours possible/ de les lire avec un éditeur de texte /même
des années plus tard/
- les logiciels d'indexation ou de
« [[https://en.wikipedia.org/wiki/Desktop_search][recherche de
bureau]] », comme les logiciels de
[[https://fr.wikipedia.org/wiki/Gestion_de_versions][gestion de
versions]], les exploitent pleinement.
*Conclusion : choisissez le format texte (UTF-8)*.
** Problème du fichier texte « simple »
:PROPERTIES:
:CUSTOM_ID: problème-du-fichier-texte-simple
:END:
- Avec un fichier texte « simple » il n'est pas possible de profiter des
outils de navigation comme les hyperliens.
- De même, il n'est pas possible de mettre en évidence un mot ou un
groupe de mots avec une police *grasse* ou une police /italique/.
- Si plusieurs personnes travaillent sur un même texte, elles ne peuvent
se corriger en +barrant+ des mots.
** Un fichier =HTML= visualisé avec un navigateur
:PROPERTIES:
:CUSTOM_ID: un-fichier-html-visualisé-avec-un-navigateur
:END:
[[../assets/img/Exemple_Rendu_HTML.png]]
#+BEGIN_COMMENT
Ces limitations, combinées aux avantages des fichiers textes, ont
amenées les informaticiens à développer des
[[https://fr.wikipedia.org/wiki/Langage_de_balisage][langages de
balisages]] (/Markup Language/ en anglais).
Un exemple banale est le
[[https://fr.wikipedia.org/wiki/Hypertext_Markup_Language][langageHTML]].
#+END_COMMENT
** Un fichier =HTML= visualisé avec un éditeur de texte
:PROPERTIES:
:CUSTOM_ID: un-fichier-html-visualisé-avec-un-éditeur-de-texte
:END:
[[../assets/img/Exemple_Source_HTML.png]]
#+BEGIN_COMMENT
Ces langages définissent une collection de balises qui ne sont pas
(typiquement) destinées à être lues par un humain, mais à être
interprétées par un logiciel.
Retrouvons le texte du début de la page précédente : « En informatique
les langages de balisage... ».
Remarquez la syntaxe qui permet d'introduire un commentaire dans le
fichier source. Un commentaire est un élément de texte qui ne sera pas
interprété par le logiciel de visualisation.
#+END_COMMENT
**
Le problème se résume ainsi :
- Fichiers texte attractifs pour la prise de notes.
- Langages de balisages $\Rightarrow$ meilleur confort de lecture des fichiers /avec
logiciel « de rendu »/.
- Langages de balisages $\Rightarrow$ fichiers source au format texte, *mais*
nécessitent éditeurs spécialisés.
Peut-on combiner la légèreté des fichiers textes « simples » avec le
confort de lecture offert par les langages de balisage ?
#+BEGIN_COMMENT
Le problème se résume ainsi :
- Les fichiers textes sont très attractifs pour la prise de notes.
- Les langages de balisages comme l'=HTML= nous permettent d'améliorer
considérablement le confort de lecture de nos fichiers /à condition
d'utiliser un logiciel « de rendu » adapté/.
- Les langages de balisages comme l'=HTML= génèrent des fichiers sources
au format texte, mais avec lesquels il est difficile (pénible) de
travailler et nécessitent des éditeurs spécialisés -- ce qui ralentit
l'écriture des notes --.
Peut-on combiner la légèreté des fichiers textes « simples » avec le
confort de lecture offert par les langages de balisage ?
#+END_COMMENT
** Langage de balisage léger : l'idée
:PROPERTIES:
:CUSTOM_ID: langage-de-balisage-léger-lidée
:END:
Un [[https://fr.wikipedia.org/wiki/Langage_de_balisage_l%C3%A9ger][langage de balisage léger]] est :
- un type de langage de balisage utilisant une /syntaxe simple/
- conçu pour qu'un fichier en ce langage soit /aisé à saisir/ avec un
éditeur de texte simple
- /facile à lire dans sa forme non formatée/, c'est-à-dire sans logiciel
dédié comme un navigateur internet.
** L'exemple de =Markdown=
:PROPERTIES:
:CUSTOM_ID: lexemple-de-markdown
:END:
[[../assets/img/Exemple_Markdown.png]]
Markdown source (en haut) et sortie HTML (en bas)
#+BEGIN_COMMENT
Markdown nous permet aussi de structurer facilement nos notes avec des
sections, sous-sections, etc.
Les hyperliens peuvent être aussi bien avoir des cibles externes, comme
illustré ici, qu'interne.
Il est possible d'inclure des commentaires.
#+END_COMMENT
** =Markdown= n'est pas le seul langage de balisage léger disponible
:PROPERTIES:
:CUSTOM_ID: markdown-nest-pas-le-seul-langage-de-balisage-léger-disponible
:END:
- Le plus communément employé est [[https://fr.wikipedia.org/wiki/Wikitexte][Wikitexte]] de Wikipédia
- [[http://www.methods.co.nz/asciidoc/][AsciiDoc]] a de nombreux adeptes
- [[http://docutils.sourceforge.net/docs/user/rst/quickstart.html][ReStructuredText]] est très employé par la communauté des programmeurs =Python=
- Il y en a bien d'autres.
** Conclusions
:PROPERTIES:
:CUSTOM_ID: conclusions-1
:END:
Les langages de balisage léger vont nous permettre de :
- travailler avec des fichiers textes
- écrire rapidement nos notes, avec n'importe quel éditeur, grâce à leur
syntaxe simplifiée
- organiser nos notes en les structurant.
#+BEGIN_COMMENT
Dans la partie approfondissements, nous montrons :
- comment obtenir n'importe quel format « de sortie » (=HTML=, =PDF=,
=docx=, =Wikitexte=) à partir d'un seul « fichier source » au format
=Markdown= ;
- que le langage de balisage léger choisi importe peu puisque nous
disposons d'un outil pour convertir l'un dans n'importe quel autre.
#+END_COMMENT
* M1-S4: Pérennité et évolutivité des notes avec la gestion de version
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s4
:END:
** 1. Cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: cahier-de-notes-cahier-de-laboratoire-3
:END:
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. *Pérennité et évolutivité des notes avec la gestion de version*
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
#+BEGIN_COMMENT
Nous allons maintenant discuter de la façon dont l'informatique nous
permet de conserver nos notes de façon « sûr » tout en nous permettant
de les faire évoluer.
Les outils dont nous allons parler concernent encore une fois une
communauté beaucoup plus large que celle de la « recherche
reproductible ». Toute personne amenée à « travailler » son texte s'y
trouve confrontée, cela d'autant plus que la rédaction est de plus en
plus effectuée en commun.
La problème de la pérennité des notes et des textes ne constitue en rien
une nouveauté.
Pour les humanistes et les savants du début de l'ère moderne qui se
spécialisaient dans la compilation de textes, elle était une véritable
obsession et la justification de leur travail.
La solution qu'ils préconisaient alors, la copie multiple, est identique
à celle que nous employons aujourd'hui, seul le support à changer.
Restons modestes, le support papier des humanistes a démontré sa
capacité à résister à l'épreuve du temps.
Par contre, en ce qui concerne l'évolutivité, nous avons quelques
raisons de penser que nos outils modernes constituent un véritable
progrès.
#+END_COMMENT
** L'évolutivité avec un support papier
:PROPERTIES:
:CUSTOM_ID: lévolutivité-avec-un-support-papier
:END:
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png]]
#+BEGIN_COMMENT
Ici, l'exemple du manuscrit des « Liaisons dangereuses » de Pierre
Ambroise Choderlos de Laclos.
L'auteur a apporté de nombreuses corrections à son manuscrit.
On conçoit que le nombre de corrections qu'il peut ainsi apporter est
relativement restreint.
#+END_COMMENT
** L'évolutivité avec traitement de texte
:PROPERTIES:
:CUSTOM_ID: lévolutivité-avec-traitement-de-texte
:END:
[[../assets/img/LibreOffice_notes_pour_CLOM_diff_origine.png]]
#+BEGIN_COMMENT
Une solution qui permet de travailler lorsqu'on utilise que des fichiers
texte est le suivi de modifications proposé par la plupart des logiciels
de traitement de texte.
Ce n'est pas la solution que nous préconisons, mais c'est certainement
le type de « gestion de version » auquel les utilisateurs d'ordinateurs
ont le plus de chances d'avoir été exposés.
Nous prenons ici un exemple avec =LibreOffice= où nous éditons un
fichier contenant des notes prises pour préparer ce cours.
Remarquez les boutons en bas à gauche que nous faisons apparaître en
navigant dans les menu /view/ puis /Toolbars/ avant de sélectionner
/track changes/.
- solution « facile » à mettre en œuvre
- pas de format texte
- faire attention à ne garder *que la dernière version* avant de
soumettre un article (pour les scientifiques)
- les sauvegardes doivent être gérées séparément.
#+END_COMMENT
** L'évolutivité avec un « moteur de wiki »
:PROPERTIES:
:CUSTOM_ID: lévolutivité-avec-un-moteur-de-wiki
:END:
[[../assets/img/Dokuwiki_notes_pour_CLOM.png]]
#+BEGIN_COMMENT
Une solution plus proche de l'esprit de ce cours est l'emploi d'un
/wiki/ pour gérer ses notes.
Ici, j'illustre l'usage d'un wiki personnel utilisant /DokuWiki/ comme
moteur de wiki, j'aurais aussi pu utiliser /MediaWiki/, le moteur de
Wikipédia.
/DokuWiki/ n'emploie que des fichiers texte.
Je l'ai appris lors de la préparation de ce cours, ce qui signifie qu'il
est assez simple à utiliser.
Encore une fois, les notes prises en préparation du cours sont utilisées
pour illustration.
#+END_COMMENT
**
[[../assets/img/Dokuwiki_notes_pour_CLOM_historique2.png]]
#+BEGIN_COMMENT
Si je clique sur « Derniers changements », alors je vois apparaître la
liste des pages de mon wiki avec les dates des dernières modifications.
Si maintenant je clique sur le nom de l'une des pages...
#+END_COMMENT
**
[[../assets/img/Dokuwiki_notes_pour_CLOM_diff.png]]
#+BEGIN_COMMENT
Je vois apparaître la différence entre la dernière version, à gauche, et
la version présente à droite.
Commenter plus...
Vous avez accès à des informations du même type sur n'importe quelle
page wikipédia.
#+END_COMMENT
** Avantages et inconvénients
:PROPERTIES:
:CUSTOM_ID: avantages-et-inconvénients
:END:
- solution qui a fait ses preuves, en particulier dans un cadre
collaboratif
- format texte (avec =DokuWiki=)
- ne permet de modifier qu'une seule page à la fois
** L'évolutivité avec la gestion de version
:PROPERTIES:
:CUSTOM_ID: lévolutivité-avec-la-gestion-de-version
:END:
[[../assets/img/Github_Module1.png]]
#+BEGIN_COMMENT
Je présente maintenant la solution la plus sophistiquée à ce jour.
Ici, un logiciel spécifique, /git/ est employé pour gérer les versions
successives d'un ensemble de fichiers de nature disparate (des fichiers
textes, des images, etc). En fait des arborescence de fichiers peuvent
être gérées par ce logiciel.
Les logiciels comme /git/ nécessite la création d'un dépôt, qui peut
être la machine de l'utilisateur, mais qui est en général hébergé sur un
site internet dédié comme ici /GitHub/.
Le dépôt va permettre à différentes personnes de travailler sur le même
« projet ». Elles vont échanger leur modifications via le dépôt. *Elles
auront néanmoins toutes une copie complète de ce dernier* (datant de
leur dernière « synchronisation »).
Des nombreux instituts de recherche fournissent maintenant de tels
dépôts aux laboratoires qui leurs sont rattachés.
Les utilisateurs peuvent alors souvent employer une interface graphique
pour naviguer dans leurs dépôts, revenir sur des version antérieures,
faire des comparaisons, des recherches, etc.
Nous voyons ici l'interface fourni par /GitHub/ et nous visualisons un
état antérieur du fichier source de cette présentation.
Vous pouvez tous vous connectez à /Github/, aller sur le dépôt que nous
avons utilisé pour préparer le cours, et refaire ce qui est montré dans
les quelques diapos qui suivent.
Si je clique sur le bouton /History/, je vois...
#+END_COMMENT
**
[[../assets/img/Github_Module1_historique.png]]
#+BEGIN_COMMENT
Encore une fois, la liste des modifications apportées au fichier avec le
nom de la personne ayant effectué ces modifications et les dates
associées.
Si maintenant je clique sur le numéro 5a2951f, je vois...
#+END_COMMENT
**
[[../assets/img/Github_Module1_diff.png]]
#+BEGIN_COMMENT
Les différences entre la version précédente et la version identifiée par
le numéro sur lequel j'ai cliqué.
Commentez...
#+END_COMMENT
**
[[../assets/img/Git_diff_mixte.png]]
#+BEGIN_COMMENT
Lorsque plusieurs fichiers ont été modifiés, comme ici où un fichier
image a été rajouté et un fichier texte a été modifié, l'ensemble des
modifications est visible et accessible.
#+END_COMMENT
** Avantages et inconvénients
:PROPERTIES:
:CUSTOM_ID: avantages-et-inconvénients-1
:END:
- Solution sophistiquée (donc un peu plus difficile à maîtriser que les
précédentes)
- Solution qui a fait ses preuves, en particulier dans un cadre
collaboratif sur de grands projets (noyau Linux)
- Permet d'enregistrer des modifications sur plusieurs fichiers à la
fois
- Une sauvegarde centralisée dont tous les membres du projet ont une
copie intégrale
#+BEGIN_COMMENT
Dans la partie approfondissements, nous rentrerons un peu plus dans les
aspects concrets de l'utilisation de =git=.
=git= devient de fait le standard de la gestion de version bien au-delà
des projets purement logiciels, cela vaut donc la peine de faire un
petit effort pour en maîtriser les rudiments.
Quelque soit la stratégie de gestion de version employée, le retour en
arrière est possible, mais lors des premières tentatives il vous faudra
faire preuve de calme et de patience !
#+END_COMMENT
* M1-S5: Les étiquettes et les logiciels d'indexation pour s'y retrouver
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s5
:END:
** 1. Cahier de notes / cahier de laboratoire
:PROPERTIES:
:CUSTOM_ID: cahier-de-notes-cahier-de-laboratoire-4
:END:
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. *Les étiquettes et les logiciels d'indexation pour s'y retrouver*
- Démonstration : DocFetcher
#+BEGIN_COMMENT
Nous revenons ici sur le problème de l'indexation, pas tant sur
l'indexation d'un document unique que sur l'indexation de documents
multiples dans des formats divers.
- comme nous l'avons déjà affirmé, prendre des notes abondantes et
détaillées n'est utile que si nous pouvons retrouver les informations
qu'elles contiennent quand nous en avons besoin
- pour des notes contenues dans un seul fichier texte, la fonction de
recherche de notre éditeur favori nous permet généralement d'aller
assez loin
- pour des notes manuscrites contenues dans un cahier, la méthode de
Locke --- que nous avons exposée dans notre deuxième séquence --- et
qui repose sur des mots clé ou étiquettes, donne de bons résultats
- les notes manuscrites sur fiches sont généralement stockées dans un
meuble dont la structure matérialise un index --- comme l'armoire de
Placcius et Leibniz ---
#+END_COMMENT
** Ainsi parlait Leibniz
:PROPERTIES:
:CUSTOM_ID: ainsi-parlait-leibniz
:END:
« Il me semble que l'apparat savant contemporain est comparable à un
grand magasin qui contient une grande quantité de produits, stockés de
façon totalement désordonnée, mélangée ; où les nombres ou lettres
d'indexation manquent ; où les inventaires et livres de comptes pouvant
aider à ordonner le contenu ont disparu.
Plus grande est la quantité d'objets amassés, plus petite est leur
utilité. Ainsi, ne devrions nous pas seulement essayer de rassembler de
nouveaux objets de toutes provenances, mais nous devrions aussi essayer
d'ordonner ceux que nous avons déjà. »
#+BEGIN_COMMENT
J'emploie ici le terme
d'« [[https://fr.wikipedia.org/wiki/Apparat_savant][apparat savant]] »
qui est un terme technique de l'édition désignant : citations,
références et sources, notes en bas de pages, introduction, texte en
langue originale (en parallèle avec la traduction), commentaire
historique ou philologique, index fontium (les sources), index locorum
(références avec renvoi à la page où le passage est cité ou mentionné,
par ex. : Évangile selon Marc 1, 1 : p. 100), index nominum (les noms
propres), index rerum (les thèmes), etc.
#+BEGIN_EXAMPLE
"It seems to me that the apparatus of contemporary scholarship is comparable to a very large store which, though it keeps a great variety of goods, yet is totally confused and in disorder, because all items are mixed up, because no numbers or letters of an index are displayed, and because inventories or account ledgers which could throw some light on the matter are missing.
"The larger the mass of collected things, the less will be their usefulness. Therefore, one should not only strive to assemble new goods from everywhere, but one must endeavor to put in the right order those that one already possesses."
#+END_EXAMPLE
http://www.backwordsindexing.com/index.html
#+END_COMMENT
** S'y retrouver dans un fichier texte
:PROPERTIES:
:CUSTOM_ID: sy-retrouver-dans-un-fichier-texte
:END:
[[file:../assets/img/recherche-avec-editeur.png]]
** S'y retrouver dans un cahier
:PROPERTIES:
:CUSTOM_ID: sy-retrouver-dans-un-cahier
:END:
[[file:../assets/img/IndexCahierLocke.jpg]]
** S'y retrouver dans des « fiches »
:PROPERTIES:
:CUSTOM_ID: sy-retrouver-dans-des-fiches
:END:
[[file:../assets/img/Placcius_cabinet_TabIV.png]]
** Problèmes, limitations, solutions ?
:PROPERTIES:
:CUSTOM_ID: problèmes-limitations-solutions
:END:
- Un seul document
- Indexation de fichiers numériques
- Étiquetage de fichiers numériques au sens large
- Moteur de recherche pour indexation et recherche globale
#+BEGIN_COMMENT
- les techniques que nous venons de voir ou revoir ne fonctionnent que
pour un seul « document » --- recherche avec l'éditeur de texte, index
d'un cahier --- et/ou pour un seul type de document
- les outils informatiques dont nous disposons nous permettent d'aller
plus loin dans l'indexation des fichiers numériques
- il est possible de rajouter des étiquettes ou mots-clés à des fichiers
textes comme à des fichiers images (=jpg=, =png=) ou des fichiers
« mixtes » (=pdf=) grâce aux métadonnées qu'ils contiennent
- les moteurs de recherche de bureau permettent d'indexer l'ensemble des
fichiers textes d'une arborescence donnée mais aussi les métadonnées
des autres fichiers
#+END_COMMENT
** Trouver un mot quelconque avec un moteur de recherche de bureau (=DocFetcher=)
:PROPERTIES:
:CUSTOM_ID: trouver-un-mot-quelconque-avec-un-moteur-de-recherche-de-bureau-docfetcher
:END:
[[file:../assets/img/Trouver_un_mot_avec_DocFetcher.png]]
** Le problème de l'« abondance »
:PROPERTIES:
:CUSTOM_ID: le-problème-de-labondance
:END:
[[file:../assets/img/Trouver_calcium_avec_DocFetcher.png]]
** Ajouter des étiquettes ou mots clés dans un fichier texte (=Markdown=)
:PROPERTIES:
:CUSTOM_ID: ajouter-des-étiquettes-ou-mots-clés-dans-un-fichier-texte-markdown
:END:
[[file:../assets/img/Ajout_etiquette_avec_Markdown.png]]
** Trouver une étiquette avec un moteur de recherche de bureau (=DocFetcher=)
:PROPERTIES:
:CUSTOM_ID: trouver-une-étiquette-avec-un-moteur-de-recherche-de-bureau-docfetcher
:END:
[[file:../assets/img/Trouver_etiquette_avec_DocFetcher.png]]
** Les fichiers images contiennent des métadonnées
:PROPERTIES:
:CUSTOM_ID: les-fichiers-images-contiennent-des-métadonnées
:END:
[[file:../assets/img/Metadonne_fichier_index.jpg]]
** Les métadonnées peuvent être modifiées
:PROPERTIES:
:CUSTOM_ID: les-métadonnées-peuvent-être-modifiées
:END:
[[file:../assets/img/Metadonne_fichier_index2.jpg]]
** Les moteurs de recherche de bureau peuvent lire les métadonnées
:PROPERTIES:
:CUSTOM_ID: les-moteurs-de-recherche-de-bureau-peuvent-lire-les-métadonnées
:END:
[[file:../assets/img/Trouver_etiquette_avec_DocFetcher2.jpg]]
** Conclusion
:PROPERTIES:
:CUSTOM_ID: conclusion
:END:
En combinant :
- des étiquettes insérées dans nos fichiers textes, images, =PDF=, etc
- avec un moteur de recherche de bureau
nous pouvons espérer éviter le « cauchemar de Leibniz »
# Comment rajouter des étiquettes dans un fichier Markdown ?
Pour rajouter une étiquette ou un mot clé visible par un `moteur de recherche de bureau`, nous pouvons les insérer dans des `commentaires`, c'est-à-dire des parties du fichier texte `source` qui ne seront pas montrées par le logiciel de rendu — comme le navigateur internet lors de la génération d'une sortie au format `HTML`.
Le [didacticiel Markdown](https://enacit1.epfl.ch/markdown-pandoc) de Jean-Daniel Bonjour nous explique clairement comment faire cela en section `3.2.7.4 Autres remarques sur les listes`. Pour rajouter en commentaire l'étiquette `:ceci-est-une-étiquette:`, il suffit de taper : `<!-- :ceci-est-une-étiquette: -->`. Nous pouvons ainsi étiqueter les différents éléments d'une liste :
* le premier élément ; <!-- :étiquette-1: -->
* le deuxième élément. <!-- :étiquette-2: -->
Et voilà !
\ No newline at end of file
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:nil arch:headline
#+OPTIONS: author:t broken-links:nil c:nil creator:nil
#+OPTIONS: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t
#+OPTIONS: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+OPTIONS: timestamp:t title:t toc:t todo:t |:t
#+TITLE: Notes sur le module 1 : cahier de notes / cahier de laboratoire
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 25.3.1 (Org mode 9.0.9)
#+STARTUP: indent
* Introduction au module
La mise en œuvre de la « recherche reproductible ou réplicable » requiert en plus des codes et des données une description de la façon dont les premiers ont été appliqués aux secondes. Cette description devrait contenir une *discussion du choix* des paramètres / arguments des codes lorsque ceux-ci ne sont pas choisis de façon automatique / algorithmique. Des considérations du même ordre doivent d'ailleurs s'appliquer à la conception (choix des algorithmes) et à la réalisation (choix du langage, des librairies, etc.) des codes comme à la conception et à la réalisation de la collecte de données, c'est-à-dire des expériences, des enquêtes, etc.
Le praticien de la recherche reproductible se trouve ainsi confronté à un problème somme toute classique : garder une trace, documenter ce qui est fait. L'épitête « classique » se justifie dès lors que le lecteur réalise qu'il a lui aussi souvent été confronté à ce problème même si sous des formes légérement différentes. Ainsi, bon nombre d'entre nous doit effectuer un travail bibliographique plus ou moins fréquemment, ce qui génère des « notes » pouvant prendre diverse formes sur un ou plusieurs supports. Mais ce travail de prise de notes, ce « traçage », ne s'arrête, le plus souvent, pas là. Prenons le cas de l'algorithme à mettre en œuvre ; après une étude bibliographique en ayant identifié quelques-uns /a priori/ applicable à la situation rencontrée, il nous faudra soit les coder nous-mêmes, soit les trouver déjà codés sur un dépôt type [[https://github.com/][github]] ou [[https://about.gitlab.com/][gitlab]] ; quelque soit la solution adoptée, il nous faudra la documenter -- /en expliquer les raisons/, ce qui peut impliquer une courte étude comparative -- avec des références adéquates ce qui générera de nouvelles notes sur support papier ou numérique. En poursuivant cette logique, on voit vite que la quasi totalité de notre activité peut (ou devrait) s'accompagner d'une prise de notes. Voilà pourquoi notre premier module traitera d'une question qui ne se limite pas, loin s'en faut, à la recherche reproductible, celle du « cahier de notes ». Ce module commencera donc en vous disant quelque chose que vous savez déjà (!) : « nous devons tous prendre des notes. »
Si nous devons tous prendre des notes, nos prédécesseurs ont du le faire aussi. Cette constatation élémentaire faite, nous éviterons de croire que nous sommes les premiers à avoir à faire face un déluge d'informations. Nous en profiterons pour apprendre comment nos brillants ancêtres s'y sont pris. En nous inspirant de nos connaissances des « anciennes » techniques, nous verrons ensuite comment mettre à profit les outils fournis par l'informatique.
Les fichiers texte et les langages de balisage léger vont nous permettre de structurer nos notes et de les « recycler » facilement (dans des articles, des pages web, etc.). La gestion de version nous évitera de tout perdre tout en gardant trace de nos corrections et modifications successives. Enfin, reprendre une activité de zéro parce que retrouver la bonne information dans la jungle de nos notes prendrait plus de temps ne sera plus qu'un souvenir avec la construction d'index.
** Le « cahier de notes »
Le « cahier de notes » doit être considéré ici « au sens large » ; c'est-à-dire que, suivant le contexte, il sera plus proprement appelé « cahier de terrain », « cahier d'observations », « journal » ou « cahier de laboratoire ». Ce qui nous intéresse ici est la notion de supports (papiers ou numériques) dans lesquels des informations sont stockées au fil du temps -- contrairement au cas d'un mémoire ou d'un article où c'est la logique de l'argumentation qui structure le contenu -- ; ces informations sont de plus de nature souvent hétérogène et leurs supports, lorsqu'ils sont multiples, aussi (par exemple, un cahier de notes associé à des fichiers textes).
*** Exemples concrets de « cahier de notes »
- [[http://unesdoc.unesco.org/images/0007/000748/074877fo.pdf][Les cahiers de Léonard de Vinci]] et la page Wikipédia sur [[https://fr.wikipedia.org/wiki/Codex_Leicester][Le Codex Leicester]] ;
- [[https://en.wikipedia.org/wiki/Galileo_Galilei][la page wikipedia sur Galilée]] contient de nombreux liens, certains vers ses cahiers de notes ;
- [[http://gallica.bnf.fr/Search?ArianeWireIndex=index&p=1&lang=EN&f_typedoc=manuscrits&q=Louis+Pasteur+registres][Les « registres de laboratoire » de Pasteur]] sont disponibles sur Gallica ;
- [[http://gallica.bnf.fr/ark:/12148/btv1b90797770/f1.image.r=Emile%20Zola][Les dossiers préparatoires de Zola pour les Rougon-Macquart]] sont aussi disponibles sur Gallica ;
- [[https://ebooks.adelaide.edu.au/c/cook/james/c77j/index.html][Le journal de bord de James Cook]] lors de son premier voyage sont consultables -- [[http://southseas.nla.gov.au/journals/hv01/title.html][un autre exemple]] plus complet est aussi disponible --, la [[https://en.wikipedia.org/wiki/James_Cook][page Wikipedia]] contient un grand nombre de liens ;
- L'essentiel des [[http://darwin-online.org.uk/][cahiers de notes de Charles Darwin]] est consultable en ligne ;
- [[http://linnean-online.org/61332/#/0][Les fiches de Carl von Linnée]] sont consultables en ligne ;
- [[http://scarc.library.oregonstate.edu/coll/pauling/rnb/index.html][Les cahiers de laboratoire de Linus Pauling]] sont disponibles dans leur intégralité ;
- L'histoire de la [[https://fr.wikipedia.org/wiki/Figure_de_la_Terre_et_m%C3%A9ridienne_de_Delambre_et_M%C3%A9chain#M%C3%A9ridienne_de_Delambre_et_M%C3%A9chain_et_progr%C3%A8s_scientifiques_%C3%A0_la_m%C3%AAme_%C3%A9poque][mesure du méridien]] de Dunkerke à Barcelone par Delambre et Méchain est remarquablement contée dans le livre de Ken Alder, « Mesurer le monde - 1792-1799 : l'incroyable histoire de l'invention du mètre » (en poche chez Flammarion) ; les cahiers de notes y jouent un rôle tout à fait primordial.
* Notes et références sur la séquence 1 : « Nous utilisons tous des cahiers de notes »
** Manuscrits annotés
En guise d'entrée dans l'univers des manuscrits annotés, je fais suivre une petite sélection de passages du premier chapitre de « LA PAGE. DE L'ANTIQUITÉ À L'ÈRE DU NUMÉRIQUE » d'Anthony Grafton (Hazan, 2012) :
#+BEGIN_EXAMPLE
Par le mouvement même de sa plume sur la page, il est clair que
Casaubon maîtrise tout ce qu'il lit. Constamment, il souligne des
mots et des expressions, il note en marge des mots clés et des résumés
montrant qu'il a lu attentivement, même quand, précise-t-il dans son
journal intime, il étudie en une journée quarante à cinquante pages
in-folio de grec émaillées de nombreuses abréviations. Les passages
plus importants donnent lieu en marge à des commentaires plus
longs. Sur les pages de titre, Casaubon porte très souvent — un peu
comme Montaigne — un jugement global sur la valeur de l'ouvrage.
Par ailleurs, il note ses réflexions dans des carnets, ou prend
des notes sur des textes qu'il ne peut pas acheter. Tels qu'ils sont
réunis dans sa bibliothèque, ses livres représentent une vie entière de
lecture que l'on peut reconstituer au fil des pages.
#+END_EXAMPLE
Pages 32 et 33, à propos d'[[https://fr.wikipedia.org/wiki/Isaac_Casaubon][Isaac Casaubon]] (1559-1614).
#+BEGIN_EXAMPLE
Pourtant, Harvey a laissé beaucoup plus que cela, et notamment
des traces des ses lectures sous forme de plus d'une centaine de livres
couverts d'annotations magnifiquement écrites de sa belle écriture
italique — en plus des cahiers dans lesquels il notait des extraits.
Manifestement, Harvey considérait la lecture comme sa profession,
et il en a fait aussi un art. Décennie après décennie, il couche ses
pensées sur l'histoire dans une édition in-folio de 1555 de l'Histoire
romaine de Tite-Live. Ses notes, en latin pour la plupart, parcourent
les marges, se répandent entre les chapitres et remplissent
des feuilles volantes, prenant un aspect particulièrement érudit et
assez rébarbatif.
#+END_EXAMPLE
Pages 35 et 36, à propos de [[https://en.wikipedia.org/wiki/Gabriel_Harvey][Gabriel Harvey]] (1545-1630).
#+BEGIN_EXAMPLE
... Mais dans l'exemplaire de travail qui subsiste du
texte, l'édition de base de 1549, il [Casaubon] introduit tant d'annotations
précises que les catalogueurs de la Bibliothèque bodléienne, qui n'étaient
pas rompus à la rhétorique, ont classé ce livre imprimé parmi les manuscrits.
#+END_EXAMPLE
Page 40.
** Armoires à notes de Placcius et Leibniz
J'ai trouvé cet exemple dans les travaux d'[[https://projects.iq.harvard.edu/ablair][Ann Blair]] comme « [[https://dash.harvard.edu/handle/1/4774908][The Rise of Note-Taking in Early Modern Europe]] » et son livre « [[https://yalebooks.yale.edu/book/9780300165395/too-much-know][TOO MUCH TO KNOW. Managing Scholarly Information before the Modern Age]] », publié chez /Yale University Press/ en 2011.
** La préface de « L'île des pingouins » d'Anatole France
Étant très loin de connaître Anatole France sur le bout des doigts, j'ai trouvé la référence citée dans le remarquable article de Keith Thomas publié par la /London Review of Books/, [[https://www.lrb.co.uk/v32/n11/keith-thomas/diary][le 10 juin 2010]]. Cet article (en anglais) décrit et discute le travail concret de prise de notes par un historien, il est de plus très bien écrit et plein d'anecdotes.
** Les livres de bord
Je remercie Joël Caselli de m'avoir aidé à interpréter le contenu du livre de bord d'Éric Tabarly.
Le projet européen de reconstruction des climats des océans atlantique et indien (et non pacifique comme je le dis dans le cours !) : [[http://webs.ucm.es/info/cliwoc/][/Climatological Database for the World's Oceans 1750-1850/]] ; dispose d'un site internet très intéressant (mais en anglais).
On trouvera des citations abondantes (et effrayantes) de livres de bord de navires négriers dans le livre de Marcus Rediker « À bord du négrier : Une histoire atlantique de la traite » (disponible en édition de poche).
** Un absent : le cahier de laboratoire classique
Je traduis ici la section 6.2 /Notebooks and Records/ du remarquable livre de E. Bright Wilson /An Introduction to Scientific Research/ réimprimé par Dover.
Il est difficile de concevoir un cahier de laboratoire parfait et il est malheureusement rare d'en trouver un qui soit même à peu près satisfaisant ; la conservation d'une trace écrite du travail effectué est néanmoins une source majeure d'efficacité. Il y aura forcément des gens opposés à un ensemble de règles fixes, mais cela sera probablement plus rare pour le rituel de garder un cahier que sur d'autres sujets. Par conséquent, un ensemble de règles qui sont généralement considérées comme satisfaisantes, voire même essentielles, seront quelque peu dogmatiquement énoncées.
De grandes découvertes ont été retardées en raison d'une négligente tenue des traces écrites. L'astronome Le Monnier est ainsi supposé avoir observé la planète Uranus à plusieurs reprises -- avant que son identification comme planète ait été annoncée par Herschel --, mais a décidé qu'elle était une étoile fixe. Cela s'explique probablement en partie par le fait qu'il a écrit ses mesures sur des morceaux de papier, y compris un sac en papier contenant à l'origine de la poudre pour cheveux !
Les cahiers de laboratoire doivent être solidement reliés, d'une taille approximative de 20 x 25 cm, avec des pages numérotées. Les feuilles séparées sont trop facilement perdues pour être satisfaisantes, d'autant plus qu'un cahier de laboratoire subit souvent un traitement un peu rude avec peut-être des projections occasionnelles d'acide [c'est un physico-chimiste qui écrit]. Le cas de mesures répétées constitue une exception où une ébauche spéciale imprimée est souvent utile si un bon système est établi pour collecter et relier les feuilles séparées. Les pages avec des lignes sont généralement utilisées, mais il s'agit d'une question de goût personnel, et certaines préfèrent des pages blanches ou à carreaux. Un tampon en caoutchouc peut être utilisé pour fournir des en-têtes pour les entrées les plus communes.
Les données doivent être entrées directement dans le cahier au moment de l'observation. Il est intolérable d'utiliser sa mémoire ou des fragments de papier pour l'enregistrement primaire, du fait de l'inévitabilité des erreurs et des pertes. Il devrait donc y avoir une bonne place pour le cahier à coté du poste de travail, et l'expérimentateur ne devrait jamais être sans son cahier lorsqu'il est en action.
Les données doivent être enregistrées à l'encre, de préférence une encre permanente, un buvard peut être pratique. Sinon, la trace écrite est trop éphémère. Les cahiers sont soumis à une utilisation intensive et les écritures au crayons se détériorent trop rapidement. Lorsque le cahier peut être utilisé comme preuve pour un brevet, l'usage de l'encre s'impose.
Des graphiques approximatifs et qualitatifs peuvent être dessinés directement, mais les graphiques précis sont généralement préparés avec le papier graphique du type le plus approprié [pensez au papier millimétré]. Ils sont ensuite soigneusement collés dans le cahier, une page vierge étant découpée afin de compenser l'épaisseur ajoutée.
Les cahiers doivent porter le nom de l'utilisateur et les dates couvertes. [...]. Les huit ou dix premières pages devraient être réservées pour une table des matières. Il s'agit de lignes ajoutées chronologiquement pour chaque série d'expériences similaires, ainsi que la référence de la page. La table des matières est extrêmement utile pour trouver des éléments plus tard et est très simple à suivre. Un index au dos du cahier est avantageux mais pas indispensable.
Chaque élément devrait être datée et, si plusieurs personnes utilisent un cahier (généralement pas recommandé), paraphé. Le contenu ne devrait pas inscrit de façon trop dense sur les pages ; le papier est bon marché par rapport aux autres dépenses de recherche.
La principale difficulté est de décider ce qu'il faut écrire dans le cahier. Évidemment, on entre les résultats numériques et les valeurs des variables indépendantes telles que la température, la composition ou la pression qui sont directement pertinentes. Il est également nécessaire d'avoir un système d'entrées ou de références afin que, plus tard, il soit possible de dire quel appareil a été utilisé et dans quelles circonstances. Une description assez complète de l'appareil devrait être conservée. Ensuite, lorsque des modifications sont apportées à l'appareil, elles doivent être décrites immédiatement dans le cahier. Il devrait également être possible de retracer la source des courbes d'étalonnage, des corrections, etc., qui étaient appropriées aux données d'un jour donné. Il est utile que les exigences relatives à l'écriture d'un article, d'une thèse ou d'un livre soient gardées à l'esprit. Une telle tâche, une fois effectuée, entraîne généralement la résolution solennelle de garder un cahier plus détaillé dans le futur. Essayer de comprendre le cahier de notes de quelqu'un d'autre constitue aussi un exercice hautement salutaire. Toutes les références aux appareils, aux lieux, aux horaires, aux livres, aux articles, aux graphiques et aux personnes devraient être suffisamment explicites pour être compréhensibles des années plus tard. *Il devrait être possible de prendre chaque article scientifique et de montrer exactement où chaque figure, description ou déclaration est justifiée par des observations originales dans le cahier de laboratoire, et exactement pourquoi les nombres final et original diffèrent, si tel est le cas*.
Un énoncé du but de chaque expérience et un résumé des conclusions obtenues rendent le cahier beaucoup plus utile.
Les croquis, dessins et diagrammes sont essentiels. Comme tant d'observations sont visuelles, /il est important de noter ce qui est réellement vu, y compris des éléments qui ne sont pas entièrement compris lors de leur observation/.
Les expériences mauvaises ou non prometteuses, même celles considérées comme des échecs, devraient être entièrement enregistrées. Elles représentent un effort qui ne doit pas être gaspillé, car souvent quelque chose peut être récupéré, même si ce n'est qu'une connaissance de ce qu'il ne faut pas faire.
Les données doivent toujours être entrées dans leur forme la plus primaire, et non après un calcul ou une transformation. Si c'est le rapport de deux observations qui est intéressant, mais si les deux nombres sont effectivement observés, les deux nombres doivent être enregistrés. Si le poids précis d'un objet est important, les poids d'équilibrage individuels utilisés et leur identification devraient être inclus, c'est-à-dire le numéro de série de leur boîte. Dans le cas contraire, il devient impossible d'appliquer ultérieurement des corrections d'étalonnage ou de modifier les corrections si de nouvelles valeurs apparaissent. Naturellement, ce détail n'est pas nécessaire si seulement un poids approximatif est impliqué. La forme tabulaire est la meilleure pour les données numériques. Les unités doivent être notées.
Lorsque des brevets sont impliquées, il peut être souhaitable d'authentifier les pages des cahiers à intervalles réguliers. Le témoin devrait être quelqu'un qui comprend le contenu mais qui n'est pas impliqué dans la recherche. Un contenu ajouté ultérieurement à une page devrait l'être dans une encre de couleur différente, et toutes les modifications devraient être paraphées, authentifiées et datées si elles sont susceptibles d'être importantes. Les entreprises industrielles font ainsi généralement respecter leurs propres règles en matière de cahiers de laboratoire.
*Numéros d'identification*. Il est stupide de consacrer du temps et de l'argent à des enregistrements de différents types [...] si ceux-ci sont ensuite perdus ou mélangés. Tout enregistrements qui ne peut être inclut directement dans le cahier de notes devraient porter une identification complète indélébile. Un système simple qui a fait ses preuves consiste à écrire à l'encre sur chaque enregistrement un symbole identifiant le cahier, puis le numéro de page sur lequel les données auxiliaires sont enregistrées. Si plus d'un enregistrement sont mentionnés sur une page du cahier, des lettres ou des chiffres supplémentaires peuvent être ajoutés. Ainsi, EBW II 85c identifie le troisième enregistrement discuté à la page 85 du deuxième cahier EBW. C'est mieux qu'un numéro de série qui ne dit pas, sans clé supplémentaire, où chercher la description le concernant dans le cahier.
Un bon système de classement est indispensable pour tous les films, les photographies, les schémas, les graphiques, les diagrammes de circuit, les dessins, les plans, etc. Il est plus difficile de concevoir des méthodes de dépôt satisfaisantes pour des matériaux très petits ou très grands. Les premiers sont facilement perdus et les dernier très volumineux. [...]
Il est important d'archiver les dessins et les plans à partir desquels les appareils utilisés ont été construits, même si ces dessins sont grossiers. Ils doivent être datés, paraphés et étiquetés ; en fait, tout morceau de papier contenant une information utile devrait être marqué de la sorte. Lorsqu'un équipement électronique ou autre est fabriqué, son diagramme doit être soigneusement préparé et entièrement étiqueté avec toutes les constantes. L'appareil doit porter un numéro de série qui apparaît également sur ce diagramme. Lorsque des modifications sont apportées, celles-ci doivent être indiquées sur le schéma et datées ou un diagramme révisé et daté doit être préparé. L'ancien ne doit pas être obscurci ou jeté, car il peut être nécessaire pour expliquer des données antérieures, considérées ultérieurement comme étranges. [...]
Le but de toute cette pratique de prise de notes est de préserver la valeur [le temps et les moyens humains et matériels investis dans la recherche]. Elle devrait être soigneusement conçus pour s'adapter aux conditions de chaque laboratoire et devraient être adéquate mais pas trop élaborés. *Si l'on exige trop de la nature humaine, le système ne fonctionnera pas*.
* Notes et références sur la séquence 2 : « Un aperçu historique de la prise de notes »
** Références générales
En plus des deux livres déjà cités :
- « LA PAGE. DE L'ANTIQUITÉ À L'ÈRE DU NUMÉRIQUE » d'Anthony Grafton (Hazan, 2012) ;
- « [[https://yalebooks.yale.edu/book/9780300165395/too-much-know][TOO MUCH TO KNOW. Managing Scholarly Information before the Modern Age]] », d'Ann Blair publié chez /Yale University Press/ en 2011 ;
j'ai utilisé :
- « L'histoire du livre » de Frédéric Barbier ;
- le remarquable site de Jacques Poitou, [[http://j.poitou.free.fr/pro/index.html][langages écritures typographies]] ;
- le site [[http://classes.bnf.fr/ecritures/][l'aventure des écritures]] de la BNF ;
- le catalogue de l'exposition de la BNF « Tous les savoirs du monde : Encyclopédies et bibliothèques de Sumer au XXIème siècle » ;
- « [[http://litmedmod.ca/sites/default/files/pdf/vandendorpe-papyrusenligne_lr.pdf][Du papyrus à l'hypertexte]] » de Christian Vandendorpe (La Découverte, 1999).
** Sur les tablettes de cires
Voir le site de Jacques Poitou (d'où les illustrations sont empruntées) et le livre de Frédéric Barbier, « L'histoire du livre ».
** Sur le passage du rouleau (/volumen/) au codex
Voir le livre de Frédéric Barbier, celui d'Anthony Grafton.
Le /volumen/ est un livre à base de feuilles de papyrus collées les unes aux autres et qui s'enroule sur lui-même. Il a été créé en Égypte vers 3000 av. J.-C. Le texte est rédigé en colonnes parallèles assez étroites. C'est le support du texte par excellence durant les trente siècles précédant notre ère, d'abord en Égypte, puis dans tout le monde méditerranéen.
Comme l'explique Frédéric Barbier : « La forme du /volumen/ impose une pratique de lecture complexe : il faut dérouler (/explicare/) et enrouler en même temps, ce qui interdit par exemple, de travailler simultanément sur plusieurs rouleaux (un texte et son commentaire) ou de prendre des notes, impose une lecture suivie et empêche la simple consultation. »
Le /volumen/ n'est clairement pas adapté à une lecture « nomade » ; imagine-t-on Ulysse partant pour son Odyssée avec les 24 /volumen/ de l'Iliade ?
Le /volumen/ est à l'origine du terme « volume » dans un « livre en plusieurs volumes » comme dans la désignation du concept géométrique.
Le passage au codex repose sur deux innovations :
- la collection des tablettes de cires en « groupes reliés » ;
- la généralisation du parchemin (peau, généralement, de mouton spécialement préparée) au détriment du papyrus. Cette généralisation résulte une lutte pour l'hégémonie culturelle entre deux descendants de généraux d'Alexandre le Grand, en effet d'après Pline l'ancien : [[https://fr.wikipedia.org/wiki/Ptol%C3%A9m%C3%A9e_V][Ptolémé Épiphane]] d'Alexandrie cherchait à empêcher [[https://fr.wikipedia.org/wiki/Eum%C3%A8ne_II][Eumène II]] d'établir une bibliothèque à Pergame (au 2e siècle avant J.-C.) et avait interdit l'exportation du papyrus (produit exclusivement en Égypte), ce qui incita Eumène à chercher un substitut qui devint le parchemin.
Le remplacement du rouleau par le codex aura des conséquences majeures sur l'organisation du livre ainsi que sur la façon de lire et il permettra le développement ultérieur de l'imprimerie.
La principale révolution introduite par le codex est la notion de page. Grâce à elle, le lecteur peut accéder de manière directe à un chapitre ou à un passage du texte, alors que le rouleau impose une lecture continue. *Les mots ne sont de plus pas séparés par des espaces*. Comme l'écrit Collette Sirat : « Il faudra vingt siècles pour qu’on se rende compte que l’importance primordiale du codex pour notre civilisation a été de permettre la lecture sélective et non pas continue, contribuant ainsi à l’élaboration de structures mentales où le texte est dissocié de la parole et de son rythme. »
Au fil des siècles, le codex — qu'on désigne le plus souvent comme un manuscrit — va évoluer et se donner peu à peu les attributs du livre moderne : séparation entre les mots (VIIe siècle), début de ponctuation (VIIIe siècle), table des matières, titre courant, marque de paragraphe (XIe siècle), pagination, index (XIIIe siècle), etc.
Un point intéressant : le contenu de la Thora est « fixé » avant l'apparition du codex et, aujourd'hui encore, la Thora est écrite sur des /volumen/ (dans les synagogues au moins). La religion chrétienne se développe en même temps que le codex, adopte ce support et le répand ; elle ne donnera jamais au /volumen/ un statut « supérieur », pas plus que ne le fera la religion musulmane.
** Sur Eusèbe de Césarée
Pour en savoir plus sur [[https://fr.wikipedia.org/wiki/Eus%C3%A8be_de_C%C3%A9sar%C3%A9e][Eusèbe de Césarée]], consultez le passionnant deuxième chapitre du livre d'Anthony Grafton.
** Parallèle chinois
Comme je le dis, mon inculture fait que je ne rends pas justice aux contributions chinoises, musulmanes, précolombienne, etc. J'essaierai de combler cette énorme lacune pour les seconde version du CLOM...
Ce que je dis sur le passage du volumen au codex accompagné d'un développement des « outils de navigation » (index, table des matières, etc) en Chine lors du développement de leishus vient du bouquin d'Ann Blair (p. 31) qui cite un article de Susan Cherniack, « Book Culture and Textual Transmission in Sung China », /Harvard Journal of Asiatic Studies/ Vol. 54, No. 1 (Jun., 1994), pp. 5-125.
** Retour sur l'armoire à notes
Nous revenons sur le « bout de papier » ou la fiche comme support de note. L'inconvénient est que le bout de papier ou la fiche se perdent facilement et ne servent à rien s'ils ne sont pas *classés* en plus d'être rangés. Problème résolu par l'armoire de Placcius. D'une certaine façon, sa conception fait qu'on accède à son contenu par l'index.
L'avantage est que les notes peuvent être réorganisées si elles contiennent des information sur plusieurs sujets. Elle peuvent aussi être directement collées dans un livre lors de la composition d'un florilège ou d'un ouvrage de synthèse.
Ce dernier procédé était très couramment employé par les humanistes et les érudit de la renaissance et du début de la période moderne. [[https://fr.wikipedia.org/wiki/Conrad_Gessner][Conrad Gessner]] (1516-1565) était un champion de cette technique ; il obtenait même parfois ses fiches en découpant les pages des livres. Encore une fois, ne faites pas cela avec les livres de bibliothèques !
** L'index et John Locke
Sur l'origine de l'index, on pourra lire l'article de Jean Berger : [[https://www.theindexer.org/files/25-2-berger.pdf][Indexation, Memoire, pouvoir et representations au seuil du XIIe siecle : La redecouverte des feuillets de tables du Liber De Honoribus, premier cartulaire de la collegiale Saint-Julien de Brioude]], /The Indexer/.
La méthode de John Lock est expliquée dans l'article /Indexing commonplace books: John Locke’s method/ d'Alan Walker, [[https://www.theindexer.org/issues/query.php?vol=22&iss=3][The Indexer]], vol. 22, p. 114-118, 2001.
Sur [[https://fr.wikipedia.org/wiki/John_Locke][John Locke]] (1632-1704) « papa du libéralisme » et actionnaire de la /Royal African Company/ principale compagnie négrière britannique, voir l'article [[https://en.wikipedia.org/wiki/John_Locke#Constitution_of_Carolina][Wikipedia]] (en anglais) et le livre « Contre-histoire du libéralisme » de Domenico Losurdo (La Découverte / Poche, 2014, p. 34-36).
* Notes et références sur la séquence 3 : « Du fichier texte au langage de balisage léger »
** Fichier texte et éditeur de texte
Une définition plus technique (et moins circulaire !) du fichier texte se trouve sur [[https://fr.wikipedia.org/wiki/Fichier_texte][la page wikipédia]] consacrée au sujet. Pour plus de détails sur les éditeurs de texte, voir aussi la [[https://fr.wikipedia.org/wiki/%C3%89diteur_de_texte][page wikipédia correspondante]].
Un logiciel de « [[https://fr.wikipedia.org/wiki/Traitement_de_texte][traitement de texte]] » est plus sophistiqué qu'un simple éditeur de texte ; il permet de faire plus, ce qui sous entend qu'il peut aussi ouvrir et manipuler des fichiers textes.
*Attention* : le format « natif » des traitements de texte est rarement un format texte. Les fichiers =doc= et =docx= de =Word= et =odt= de =LibreOffice= /ne sont pas des fichiers textes/.
** Le cas du fichier =PDF= ouvert avec un éditeur de texte
Dans le cours filmé, j'utilise l'exemple du [[https://en.wikipedia.org/wiki/Portable_Document_Format][PDF]] — je donne l'adresse de la page wikipedia en anglais, bien plus complète que celle en français — ouvert avec un éditeur de texte pour montrer que le fichier ne peut pas être visualisé avec un tel logiciel, il faut un logiciel de rendu dédié comme =Adobe Reader=, =Evince=, =MuPDF=, =Aperçu=,... Vous remarquez néanmoins que le début du fichier contient du texte (la première ligne nous apprend que le fichier utilise la version 1.3 du format =PDF=). Cette partie au format texte du fichier contient les méta-données — qui ne sont pas montrées, en tout cas pas directement, par les logiciels de rendu. Ces méta-données sont (en partie) au format [[https://en.wikipedia.org/wiki/Extensible_Metadata_Platform][XMP]] (/Extensible Metadata Platform/), nous y reviendrons dans la cinquème séquence.
** Sur l'UTF-8
Une table des symboles UTF-8, avec leur code se trouve à l'adresse : [[http://www.utf8-chartable.de/]]. C'est pratique pour insérer un symbole pas très courant comme la lettre « TLO » : Ꮰ de la langue cherokee, ou le symbole mathématique ∀, « pour tout ».
Pour ceux qui doivent souvent utiliser des lettres grecs (par exemple pour écrire des équations), il est possible sous Linux de (re)définir des combinaisons de touches pour générer directement les dites lettres. Ces combinaisons sont définies dans le fichier =.XCompose=, le début de mon fichier contient :
#+BEGIN_EXAMPLE
# On charge la base de donnée de Compose la plus complète en UTF-8
include "/usr/share/X11/locale/en_US.UTF-8/Compose"
# espace insécable fine
<Multi_key> <Multi_key> <Space> : " " U202F
# Lettres greques
<Multi_key> <space> <a> : "α" Greek_alpha
<Multi_key> <space> <A> : "Α" Greek_ALPHA
<Multi_key> <space> <b> : "β" Greek_beta
<Multi_key> <space> <B> : "Β" Greek_BETA
<Multi_key> <space> <g> : "γ" Greek_gamma
<Multi_key> <space> <G> : "Γ" Greek_GAMMA
<Multi_key> <space> <d> : "δ" Greek_delta
<Multi_key> <space> <D> : "Δ" Greek_DELTA
<Multi_key> <space> <e> : "ε" Greek_epsilon
<Multi_key> <space> <E> : "Ε" Greek_EPSILON
<Multi_key> <space> <z> : "ζ" Greek_zeta
<Multi_key> <space> <Z> : "Ζ" Greek_ZETA
<Multi_key> <space> <h> : "η" Greek_eta
#+END_EXAMPLE
J'ai en plus redéfini la « <Multi_key> » pour qu'elle corresponde à la touche « impression d'écran » de mon clavier. Pour apprendre à redéfinir des touches, consultez : [[https://wiki.archlinux.org/index.php/Keyboard_configuration_in_Xorg#Configuring_compose_key]].
* Notes et références sur la séquence 5 : « Les étiquettes et les logiciels d'indexation pour s'y retrouver »
** La structure de la séquence
Nous revenons ici sur le problème de l'indexation, pas tant sur l'indexation d'un document unique que sur l'indexation de documents multiples dans des formats divers :
- comme nous l'avons déjà affirmé, prendre des notes abondantes et détaillées n'est utile que si nous pouvons retrouver les informations qu'elles contiennent quand nous en avons besoin ;
- pour des notes contenues dans un seul fichier texte, la fonction de recherche de notre éditeur favori nous permet généralement d'aller assez loin ;
- pour des notes manuscrites contenues dans un cahier, la méthode de Locke — que nous avons exposée dans notre deuxième séquence — et qui repose sur des mots clé ou étiquettes, donne de bons résultats ;
- les notes manuscrites sur fiches sont généralement stockées dans un meuble dont la structure matérialise un index — comme l'armoire de Placcius et Leibniz — ;
- mais nous voulons ici aller plus loin, dans le cadre restreint des « notes » numérisées, en discutant de l'indexation de fichiers multiples qu'ils soient au format « texte » où dans d'autres format comme les images =jpg= où les fichier =pdf= ;
- cela nous amménera à introduire les « moteurs de recherche de bureau » et à expliquer comment des =étiquettes= ou =mots-clés= peuvent être ajoutés à nos fichiers.
** La citation de Leibniz
J'ai trouvé la citation introductive :
« Il me semble que l'apparat savant contemporain est comparable à un grand magasin qui contient une grande quantité de produits, stockés de façon totalement désordonnée, mélangée ; où les nombres ou lettres d'indexation manquent ; où les inventaires et livres de comptes pouvant aider à ordonner le contenu ont disparus.
Plus grande est la quantité d'objets amassés, plus petite est leur utilité. Ainsi, ne devrions nous pas seulement essayer de rassembler de nouveaux objets de toutes provenances, mais nous devrions aussi essayer d'ordonner ceux que nous avons déjà. »
sur le site [[http://www.backwordsindexing.com/index.html]], c'est donc une traduction de traduction. J'emploie ici le terme volontairement anachronique d'« [apparat savant](https://fr.wikipedia.org/wiki/Apparat_savant) » qui est un terme technique de l'édition désignant : citations, références et sources, notes en bas de pages, introduction, texte en langue originale (en parallèle avec la traduction), commentaire historique ou philologique, index fontium (les sources), index locorum (références avec renvoi à la page où le passage est cité ou mentionné, par ex. : Évangile selon Marc 1, 1 : p. 100), index nominum (les noms propres), index rerum (les thèmes), etc. La référence au « grand magasin » est, elle aussi anachronique !
Leibniz a, pendant une bonne partie de sa vie, « gagné celle-ci » comme [[https://www.reseau-canope.fr/savoirscdi/societe-de-linformation/le-monde-du-livre-et-des-medias/histoire-du-livre-et-de-la-documentation/biographies/leibniz-le-bibliothecaire.html][bibliothécaire]], ce qui explique en partie sont intérêt très poussé pour les questions de classifications, d'indexations, etc.
** Rechercher avec un éditeur de texte
La diapo correspondante rappelle juste au lecteur quelque chose qu'il sait déjà et qui est vue, par les gens qui passent des notes « papier » aux notes « numériques », comme le gros attrait du numérique.
Les gens de monde Unix/Linux connaissent aussi généralement le programme [[https://fr.wikipedia.org/wiki/Grep][grep]] qui permet de faire des recherches de mots et, plus généralement d'[[https://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re][expressions régulières]], sur un ou /plusieurs/ fichiers ; nous y reviendrons.
** Recherche avec index construit « à la main » sur des cahiers de notes
Là encore, il s'agit juste d'un rappel pour les lecteurs assidus de ce cours ; à ce stade se sont des experts dans la méthode d'indexation de Locke.
** Recherche avec index « matérialisés »
Encore un rappel pour les lecteurs.
** Vers les outils « sophistiqués » de l'informatique
- les techniques que nous venons de voir ou revoir ne fonctionnent que pour un seul « document » — recherche avec l'éditeur de texte, index d'un cahier — et/ou pour un seul type de document ;
- les outils informatiques dont nous disposons nous permettent d'aller plus loin dans l'indexation des fichiers numériques ;
- il est possible de rajouter des étiquettes ou mots-clés à des fichiers textes comme à des fichiers images (`jpg`, `png`) ou des fichiers « mixtes » (`pdf`) grâce aux métadonnées qu'ils contiennent ;
- les moteurs de recherche de bureau permettent d'indexer l'ensemble des fichiers textes d'une arborescence donnée mais aussi les métadonnées des autres fichiers.
** Les moteurs de recherche de bureau
Les moteurs de recherche de bureau comme :
- [[http://docfetcher.sourceforge.net/fr/index.html][DocFetcher]] (Linux, MacOS, Windows) ;
- [[https://wiki.gnome.org/Projects/Tracker][Tracker]] (Linux) ;
- [[https://www.lesbonscomptes.com/recoll/index.html.fr][Recoll]] (Linux, MacOS, Windows) ;
- [[https://fr.wikipedia.org/wiki/Spotlight_(moteur_de_recherche)][Spotlight]] (MacOS) ;
permettent de rechercher le /contenu/ des fichiers textes, des courriels, des fichiers générés par les =traitements de texte= — c'est-à-dire des fichiers qui contiennent essentiellement du texte, mais qui sont stockés dans un format type =doc=, =docx=, =odt=, etc qui ne sont pas des formats texte —, des fichiers =pdf= — quand ceux-ci ne sont pas des /images/ de textes —, mais aussi des [[https://en.wikipedia.org/wiki/Portable_Document_Format#Metadata][métadonnées]] des fichiers =pdf=, etc.
Les moteurs de recherche de bureau « utilisent des techniques d'[[https://fr.wikipedia.org/wiki/Indexation_automatique_de_documents][indexation]] qui permettent de réduire considérablement les temps de recherche, par rapport aux fonctions de recherche intégrées par défaut aux systèmes d'exploitation. Au contraire de ces derniers, ils prennent aussi souvent en charge les [[https://fr.wikipedia.org/wiki/M%C3%A9tadonn%C3%A9e][métadonnées]], et sont capables de faire une [[https://fr.wikipedia.org/wiki/Analyse_syntaxique][analyse syntaxique]] des fichiers. » (Source : [[https://fr.wikipedia.org/wiki/Moteur_de_recherche_de_bureau][Moteur de recherche de bureau]] sur Wikipédia)
Comme exemple de « fonctions de recherche intégrées par défaut », on trouvera sur les systèmes Unix/Linux le programme [[https://fr.wikipedia.org/wiki/Grep][grep ]]avec lequel nous pouvons chercher les occurrences du mot « Galilée » dans le répertoire « RR_MOOC » de notre cours sur GitHub (après l'avoir cloné) :
#+NAME: grep-Leibniz-RR_MOOC
#+BEGIN_SRC sh :results output :exports both
grep -r Galilée
#+END_SRC
#+RESULTS: grep-Leibniz-RR_MOOC
: PITCHME.md:## Galilée qui observe les lunes de Jupiter
: PITCHME.md:Le 7 janvier 1610, Galilée fait une découverte capitale : il remarque trois « petites étoiles » à côté de Jupiter. Après quelques nuits d'observation, il découvre qu'il y en a une quatrième et qu'**elles accompagnent la planète**, c'est ce qu'il note sur son cahier d'observations. Ce sont les satellites visibles de Jupiter, qu'il nommera plus tard les étoiles Médicées ou astres médicéens – en l'honneur de ses protecteurs, la Famille des Médicis – et qui sont aujourd'hui appelés lunes galiléennes.
: PITCHME.md:Ces observations amèneront Galilée à rejeter l'hypothèse géocentrique (la terre est le centre de l'Univers et tout tourne autour d'elle) en faveur du système copernicien héliocentrique. Cela l'amènera indirectement (je « fais court ») et bien plus tard, le 22 juin 1633, a être condamné par l'inquisition, ce qui lui vaudra de finir ses jours en résidence surveillée.
: PITCHME.md:Remarquez l'avantage des « bouts de papiers classés » de Placcius et Leibniz sur le _codex_ de Galilée : les premiers peuvent être facilement réordonnées.
: Notes_module1.org:- [[https://en.wikipedia.org/wiki/Galileo_Galilei][la page wikipedia sur Galilée]] contient de nombreux liens, certains vers ses cahiers de notes ;
: Notes_module1.org:Comme exemple de « fonctions de recherche intégrées par défaut » on trouvera sur les systèmes Unix/Linux le programme [[https://fr.wikipedia.org/wiki/Grep][grep ]]avec lequel nous pouvons chercher les occurrences du mot « Galilée » dans le répertoire « RR_MOOC » de notre cours sur GitHub (après l'avoir cloné) :
: Notes_module1.org:grep -r Galilée
Une version plus sophistiquée de =grep= est fournie par le programme [[http://uzix.org/cgvg.html][cgvg]].
** Pourquoi des étiquettes
Une requête basée sur un simple mot renvoie souvent un très grand nombre de propositions, même si la plupart des moteurs de recherche de bureau permettent de filtrer ces dernières. Une façon efficace de limiter leur nombre est d'inclure dans nos documents des étiquettes, c'est-à-dire des points d'ancrage labelisés, qui seront aisément indexés par le moteur de recherche de bureau et dont le label ne correspond à aucun mot ou locution du dictionnaire — nous effectuons ainsi une version simplifiée du travail de l'/indexeur/, la personne chargée de construire l'index d'un livre. Pour que l'étiquette garde un sens, il suffit d'encadrer un mot par une paire de signes de ponctuation comme « : », « ; » ou « ? ». Un label comme « :code: » sera facilement mémorisé et fera un parfait équivalent du mot-clé « code » utilisé dans l'exemple du cahier de note de la deuxième séquence de ce module — pour illustrer la méthode de Locke.
Il nous reste encore nous reste encore un détail technique à régler dans le cas de nos notes prises en format texte comme =Markdown=. En effet, nous ne souhaitons pas que nos étiquettes apparaissent dans les sorties =html=, =pdf= ou =docx= de nos notes. Un façon de procéder, pour les langages de balisage légers qui ne disposent pas d'étiquettes — par exemple, =Markdown= n'en dispose pas, alors que =org= en a — et de les inclure dans des commentaires. En =Markdown=, tout ce qui est encadré par =<!--= et =-->= est considéré comme un commentaire et ne figure pas dans les sorties =html= ou =pdf= des notes. Nous pouvons ainsi utiliser :
#+BEGIN_EXAMPLE
<!-- :code: -->
#+END_EXAMPLE
à l'endroit de nos notes où nous souhaitons aller rapidement lorsque que nous cherchons une information relative à de la programmation (production de codes).
** Les métadonnées
*** Fichiers images
Nous savons à présent comment rajouter des étiquettes à un fichier au format texte, mais nous devons souvent aussi travailler avec des fichiers contenant des images ou des photos, comme les fichiers [[https://fr.wikipedia.org/wiki/JPEG][JPEG]] — les appareils photos numériques utilisent tous ce format —, [[https://fr.wikipedia.org/wiki/Graphics_Interchange_Format][GIF]] ou [[https://fr.wikipedia.org/wiki/Portable_Network_Graphics][PNG]]. La question se pose alors, peut-on ajouter des étiquettes à nos fichiers images de sorte que nos moteurs de recherche de bureau les indexent ? La réponse et oui, grâce aux [[https://fr.wikipedia.org/wiki/M%C3%A9tadonn%C3%A9e][métadonnées]] que contiennent ces fichiers. Les métadonnées, dans ce cas, sont des données stockées dans le fichier mais qui ne sont pas montrées par le logiciel de rendu (en tout cas, pas montrées par défaut). Nous savons tous que ces métadonnées « existent » ; ce sont elles qui contiennent la date, la localisation GPS, le temps d'exposition, etc. de nos photos numériques. Dans les fichiers =JPEG=, elles sont stockées suivant l'[[https://fr.wikipedia.org/wiki/Exchangeable_image_file_format][exchangeable image file format]] (=EXIF=). La plupart des logiciels de manipulations d'images et de photos permettent d'accéder au contenu des métadonnées et de les modifier. L'exemple illustré dans le cours utilise une solution très simple en « ligne de commande », [[http://owl.phy.queensu.ca/~phil/exiftool/][ExifTool]] qui permet de visualiser et de modifier les métadonnées. D'autres logiciels comme [[http://www.exiv2.org/index.html][exiv2]] ou [[https://imagemagick.org/script/index.php][ImageMagick]] permettent de le faire (pour ne citer que des logiciels libres disponibles sur Linux, Windows et MacOS). Certains des éléments du format =EXIF= sont des chaînes de caractères, c'est-à-dire du texte, que nous somme libres d'utiliser comme nous le souhaitons ; nous pouvons dès lors les utiliser pour rajouter nos étiquettes. Nous illustrons dans le cours comment le faire avec =ExifTool=, mais nous aurions aussi pu le faire avec le programme [[https://www.imagemagick.org/script/command-line-options.php#comment][mogrify]] d'ImageMagick. Tous les moteurs de recherche de bureau que nous avons mentionné vont « aller regarder » les métadonnées des fichier =JPEG= lors de la phase d'indexation et nous permettront ainsi d'exploiter les étiquettes que nous y aurons insérées.
=EXIF= n'est pas le seul format de métadonnées existant ; un format plus récent est l'[[https://fr.wikipedia.org/wiki/Extensible_Metadata_Platform][Extensible Metadata Platform ]](=XMP=), disponible pour un plus grand nombre de formats de fichiers — il n'est pour l'instant pas lu sur les fichiers =JPEG= par =DocFetcher=, c'est pourquoi nous avons mis en avant le format =EXIF=, mais cela devrait évoluer assez vite ; les autres moteurs comme =Tracker= et =Recoll= le lisent.
*** Fichiers =PDF=
En plus des fichiers images, nous sommes tous très fréquemment amenés à travailler avec les fichiers « composites » — contenant textes, images, et plus — que sont les fichiers [[https://fr.wikipedia.org/wiki/Portable_Document_Format][PDF]]. Ces fichiers contiennent eux aussi des métadonnées ; c'est d'ailleurs pour eux qu'Adobe a initialement introduit le format =XMP= que nous venons de discuter. Ces métadonnées peuvent être lues et modifiées, en particulier l'élément =Keywords= (mot-clé) qui peut contenir des chaînes de caractères de longueur arbitraires et qui est parfait pour accueillir nos étiquettes. Le programme =ExifTool=, permet de modifier les métadonnées des fichiers =PDF=. Les moteurs de recherche de bureau que nous avons mentionnés, vont tous aller lire les métadonnées des fichiers =PDF= lors de la phase d'indexation.
*** Fichiers audios
Les formats audio comme le [[https://fr.wikipedia.org/wiki/MPEG-1/2_Audio_Layer_III][mp3]] ou le [[https://fr.wikipedia.org/wiki/Ogg][ogg]] contiennent eux aussi des métadonnées, où sont stockés les titres, noms des interprètes, etc ; ces métadonnées peuvent être modifiées et sont lues par les moteurs de recherche de bureau lors de la phase d'indexation.
---
# C028AL-W1-S0
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Les grandes lignes du module : cahier de notes / cahier de laboratoire
1. Nous utilisons tous des cahiers de notes
2. <!-- .element class="fragment" --> Un aperçu historique de la prise de notes
3. <!-- .element class="fragment" --> Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. <!-- .element class="fragment" --> Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. <!-- .element class="fragment" --> Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
Note:
__Première ligne__
Nous allons discuter ici d'une question qui dépasse la problématique de la recherche reproductible.
En effet, la mise en œuvre concrète de la recherche reproductible nécessite la tenue d'un cahier de notes et la prise de notes concerne tout le monde. Je commencerai donc ce module en vous disant quelque chose que vous savez déjà (!) : nous devons tous prendre des notes.
__Deuxième ligne__
Si nous devons tous prendre des notes, nos prédécesseurs ont du le faire aussi. Cette constatation élémentaire faite, nous éviterons de croire que nous sommes les premiers à avoir à faire face un déluge d'informations. Nous en profiterons pour apprendre comment nos brillants ancêtres s'y sont pris.
En nous inspirant de nos connaissances des « anciennes » techniques, nous verrons ensuite comment mettre à profit les outils fournis par l'informatique.
__Troisième ligne__
Les fichiers texte et les langages de balisage léger font nous permettre de structurer nos notes et de les « recycler » facilement (dans des articles, des pages web, etc.).
__Quatrième ligne__
La gestion de version nous évitera de tout perdre tout en gardant traces de nos corrections et modifications successives.
__Cinquième ligne__
Enfin, reprendre une activité de zéro parce que retrouver la bonne information dans la jungle de nos notes prendrait plus de temps ne sera plus qu'un souvenir avec la construction d'index.
---
# C028AL-W1-S1
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## 1. Cahier de notes / cahier de laboratoire
1. **Nous utilisons tous des cahiers de notes**
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
Note:
La recherche reproductible est encore – mais pour peu de temps seulement ! –, une activité dont le nombre d'adeptes est restreint. Elle suppose par contre une prise de notes « rigoureuse » et là, notre propos commence à s'adresser à un groupe beaucoup plus large. C'est ce que nous allons illustrer ici par quelques exemples.
+++
## L'érudit qui annote son livre / manuscrit
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/ManuscritAnnoteEtCoupe.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Manuscrit d'œuvres d'Aristoteles (XIVe siècle).
Note:
Nous voyons ici un manuscrit du XIVe abondamment annoté par son propriétaire Nicasius de Planca. Cette forme de prise de note est extrêmement fréquente aussi bien à l'époque des manuscrits qu'aujourd'hui. Vous devriez néanmoins éviter de l'employer sur des livres empruntés dans une bibliothèque ou à des amis !
Les deux pages suivantes présentent un exemple d'une importance considérable pour l'histoire des sciences.
+++
## Galilée qui observe les lunes de Jupiter
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/GalileoManuscriptCoupe.png" style="width:90%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Le 7 janvier 1610, Galilée fait une découverte capitale : il remarque trois « petites étoiles » à côté de Jupiter. Après quelques nuits d'observation, il découvre qu'il y en a une quatrième et qu'**elles accompagnent la planète**, c'est ce qu'il note sur son cahier d'observations. Ce sont les satellites visibles de Jupiter, qu'il nommera plus tard les étoiles Médicées ou astres médicéens – en l'honneur de ses protecteurs, la Famille des Médicis – et qui sont aujourd'hui appelés lunes galiléennes.
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/GalileoManuscriptZoom.png" style="width:90%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ces observations amèneront Galilée à rejeter l'hypothèse géocentrique (la terre est le centre de l'Univers et tout tourne autour d'elle) en faveur du système copernicien héliocentrique. Cela l'amènera indirectement (je « fais court ») et bien plus tard, le 22 juin 1633, a être condamné par l'inquisition, ce qui lui vaudra de finir ses jours en résidence surveillée.
+++
## Les armoires à notes de Placcius et Leibniz
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Placcius_cabinet_TabIV.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Avec l'apparition de l'imprimerie, la demande de papier croît considérablement et le prix de celui-ci chute. En plus de l'emploi des codex avec support papier que nous venons de voir, de nombreux savants commencent à prendre leurs notes sur des « bouts de papier » qui deviendront plus tard des fiches.
Mais si prendre des notes en abondance sur des « bouts de papier », est très bien ! encore faut-il être capable de s'y retrouver. Vincent Placcius (1642-1699) et Gottfried Leibniz (1646-1716) s'étaient fait construire une armoire spéciale pour résoudre ce problème.
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Placcius_cabinet_TabIVzoom.png" style="width:20%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Cette armoire contenait une multitude de colonnes capables de tourner autour de leur axe. Un côté de la colonne permettait d'inscrire un ou des mots clés et le côté opposé comportait un crochet auquel était attaché les notes correspondantes.
Remarquez l'avantage des « bouts de papiers classés » de Placcius et Leibniz sur le _codex_ de Galilée : les premiers peuvent être facilement réordonnées.
+++
## Les dangers de l'abondance de notes : la triste fin de Fulgence Tapir
Un extrait de la fin de la préface de « L'île des pingouins » d'Anatole France, publié en 1908.
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/A_France_Pingouins.jpg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Je ne résiste pas, pour vous prévenir contre une accumulation exagérée de notes, à vous lire un extrait du roman d'Anatole France « L'île des pingouins », une histoire parodique de la France. Dans la préface, le narrateur explique qu'il écrit l'histoire des Pingouins et que sa quête d'informations l'amène chez l'immense savant Fulgence Tapir. Cette visite va se solder par une catastrophe que le narrateur rapporte ainsi :
Les murs du cabinet de travail, le plancher, le plafond même portaient des liasses débordantes, des cartons démesurément gonflés, des boîtes où se pressait une multitude innombrable de fiches, et je contemplai avec une admiration mêlée de terreur les cataractes de l'érudition prêtes à se rompre.
—Maître, fis-je d'une voix émue, j'ai recours à votre bonté et à votre savoir, tous deux inépuisables. Ne consentiriez-vous pas à me guider dans mes recherches ardues sur les origines de l'art pingouin?
—Monsieur, me répondit le maître, je possède tout l'art, vous m'entendez, tout l'art sur fiches classées alphabétiquement et par ordre de matières. Je me fais un devoir de mettre à votre disposition ce qui s'y rapporte aux Pingouins. Montez à cette échelle et tirez cette boîte que vous voyez là-haut. Vous y trouverez tout ce dont vous avez besoin.
J'obéis en tremblant. Mais à peine avais-je ouvert la fatale boîte que des fiches bleues s'en échappèrent et, glissant entre mes doigts, commencèrent à pleuvoir. Presque aussitôt, par sympathie, les boîtes voisines s'ouvrirent et il en coula des ruisseaux de fiches roses, vertes et blanches, et de proche en proche, de toutes les boîtes les fiches diversement colorées se répandirent en murmurant comme, en avril, les cascades sur le flanc des montagnes. En une minute elles couvrirent le plancher d'une couche épaisse de papier. Jaillissant de leurs inépuisables réservoirs avec un mugissement sans cesse grossi, elles précipitaient de seconde en seconde leur chute torrentielle. Baigné jusqu'aux genoux, Fulgence Tapir, d'un nez attentif, observait le cataclysme; il en reconnut la cause et pâlit d'épouvante.
—Que d'art! s'écria-t-il.
Je l'appelai, je me penchai pour l'aider à gravir l'échelle qui pliait sous l'averse. Il était trop tard. Maintenant, accablé, désespéré, lamentable, ayant perdu sa calotte de velours et ses lunettes d'or, il opposait en vain ses bras courts au flot qui lui montait jusqu'aux aisselles. Soudain une trombe effroyable de fiches s'éleva, l'enveloppant d'un tourbillon gigantesque. Je vis durant l'espace d'une seconde dans le gouffre le crâne poli du savant et ses petites mains grasses, puis l'abîme se referma, et le déluge se répandit sur le silence et l'immobilité. Menacé moi-même d'être englouti avec mon échelle, je m'enfuis à travers le plus haut carreau de la croisée.
+++
## Le Navigateur et son livre de bord : Éric Tabarly
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/LivredebordpenduickV.JPG" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ici, un cas en apparence plus anecdotique : le livre de bord d'Éric Tabarly lors de la trans-Pacifique de San-Francisco à Tokyo en 1969.
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/LivredebordpenduickVzoom1.png" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Tabarly y note les événements « marquant ». Par exemple, le 21 mars à 23 h, le foc ballon est déchiré.
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/LivredebordpenduickVzoom2.png" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Sur la page opposé il fait ses calculs de positions (il n'y avait pas de GPS à l'époque).
__Le cas du livre de bord n'est anecdotique qu'en apparence__.
Un projet européen a, en effet, été consacré, il y a une dizaine d'année, à une reconstruction des climats des océans atlantiques et indiens aux 17e et 18e siècles. Cette tentative de reconstruction s'est basée sur des *livre de bord* des navires des compagnies des Indes portugaises, espagnoles, hollandaises, anglaises et françaises.
De même, les livres de bord des « navires négriers » constituent une source d'information capitale pour l'estimation du nombre d'africains déportés vers les colonies de ce que les occidentaux désignaient par « Nouveau Monde » du 15e au 19e siècle (11 à 12 millions).
+++
## <span style="font-size:95%">Quel(s) support(s) matériel(s) pour les notes ?</span>
Doit-on utiliser :
- l'objet d'étude (comme pour le livre annoté)
- un ou des cahiers
- des fiches ou feuilles volantes stockées dans un classeur
- un ou des fichiers d'ordinateur
- des dessins ou photos
- des films
- ... ?
+++
## Comment s'y retrouver ?
Les notes posent un problème d'organisation :
- <span style="font-size:97%">Comment peut-on imposer une structure à nos notes après coup ? Est-ce seulement possible ?</span>
- <span style="font-size:97%">Peut-on les indexer, si oui, comment ?</span>
- <span style="font-size:97%">Comment peut-on les rendre pérennes tout en les faisant évoluer ?</span>
Note:
__En Introduction__
Les notes par nature disparates – par les sujets dont elles traitent et, souvent, par leurs supports matériels – posent un problème d'organisation.
__En conclusion__
__Il est clair que sans organisation, l'utilité des notes n'excède qu'à peine notre capacité à mémoriser des faits ou évènements.__
Dans le reste de ce module nous allons *proposer* des réponses aux questions que nous venons de poser dans ces deux dernières diapos.
---
# C028AL-W1-S2
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## 1. Cahier de notes / cahier de laboratoire
1. Nous utilisons tous des cahiers de notes
2. **Un aperçu historique de la prise de notes**
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
Note:
Si nous devons tous prendre des notes, nos prédécesseurs ont dû le faire aussi. Cette constatation élémentaire va nous inciter à regarder comment nos brillants ancêtres s'y sont pris pour effectuer cette tâche.
+++
## De quoi allons-nous discuter ?
- de l'aspect concret de la prise de note – la « matérialité » des historiens –
- de l'organisation des livres et des notes
- du lien entre aspects matériels et organisationnels.
Note:
Notre discussion va porter en partie sur le livre puisque les éléments de navigation de ce dernier : table des matières, index, etc. ; s'applique aussi à l'organisation des notes.
Nous allons nous concentrer sur le « côté occidental » de l'histoire avec une seule page consacrée aux contributions chinoises et aucune aux contributions musulmanes, indiennes ou précolombiennes. Ce biais doit être interprété comme un reflet de mes ignorances et par la plus grande facilité d'obtenir des documents et illustrations concernant l'histoire du livre et de la prise de notes en Occident.
+++
## L'aspect matériel résumé sur une diapo
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Figure_W1_S2_1.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
En haut à gauche : une tablette d'argile avec des comptes (précunéiforme, vers -3000)
En haut au milieu : une fresque de Pompéi avec le portrait de Terentius Neo et sa femme. Elle porte une _tablette de cire_ et un _stylet_ (les outils principaux de prise de notes jusqu'au 19e siècle, ou presque), il porte un _volumen_, la support matériel du livre jusqu'au début de notre ère.
En haut à droite : un cahier de notes sur papier datant du milieu du 17e siècle et contenant des « lieux communs » au sens rhétorique du terme de « source générale communément admise d’où un orateur peut tirer ses arguments ».
En bas à gauche : une fiche, exemple d'un support de notes dont l'utilisation va « exploser » avec la bureaucratisation et le développement des bibliothèques. Ce support sera largement adopté dans les sciences humaines, mais il a d'abord été systématiquement employé et peut être même créé par le naturaliste Carl Linné, père de la _taxinomie_.
En bas au milieu : des « Post-it » comme nous sommes nombreux à en utiliser tous les jours.
En bas à droite : un ordinateur moderne utilisable comme une tablette (numérique cette fois).
+++
## Tablette de cire et stylet
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/tabula_stilus.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Les tablettes de cire (en latin tabulæ, planches) sont des supports d'écriture effaçables et réutilisables, connus depuis la haute Antiquité et qui ont été utilisés jusqu'au milieu du XIXe siècle.
La tablette de cire est formée d'une plaquette le plus souvent en bois (mais les nobles auront des tablettes en argent, ivoire, etc.). Elle est évidée sur presque toute sa surface en conservant un rebord de quelques millimètres qui fait cadre. De la cire est coulée dans la partie en dépression puis lissée. L'écriture se fait en gravant les caractères sur la cire à l'aide de l'extrémité pointue d'un instrument appelé style ou stylet. Ils peuvent être effacés en lissant la cire avec l'autre extrémité, plate, du stylet, après l'avoir ramollie.
La plus ancienne tablette connue provient d'un bateau mycénien et date du XIVe siècle av. J.-C. Les Grecs ont adopté la tablette par l'intermédiaire des Phéniciens en même temps que l'alphabet vers le VIIIe siècle av. J.-C..
En français l'expression « faire table rase » vient du latin _tabula rasa_, effacer la tablette.
Les ardoises et des tablettes de sable ont également été utilisées pour prendre des notes.
+++
## Du _volumen_ au _codex_
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Figure_W1_S2_3.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Le passage du _volumen_ au _codex_ est absolument fondamentale pour l'avenir de la civilisation écrite.
Le _volumen_ est un livre à base de feuilles de papyrus collées les unes aux autres et qui s'enroule sur lui-même. Il a été créé en Égypte vers 3000 av. J.-C. Le texte est rédigé en colonnes parallèles assez étroites. C'est le support du texte par excellence durant les trente siècles précédant notre ère, d'abord en Égypte, puis dans tout le monde méditerranéen.
La mosaïque en bas à gauche représente Virgile (70-19 avant J.-C., assis) tenant un volume de l'Énéide et Clio, muse de l'Histoire, tenant elle aussi un _volumen_.
Comme l'explique Frédéric Barbier : « La forme du _volumen_ impose une pratique de lecture complexe : il faut dérouler (_explicare_) et enrouler en même temps, ce qui interdit par exemple, de travailler simultanément sur plusieurs rouleaux (un texte et son commentaire) ou de prendre des notes, impose une lecture suivie et empêche la simple consultation. »
Le _volumen_ n'est clairement pas adapté à une lecture « nomade » ; imagine-t-on Ulysse partant pour son Odyssée avec les 24 _volumen_ de l'Iliade ?
Le _volumen_ est à l'origine du terme « volume » dans un « livre en plusieurs volumes » comme dans la désignation du concept géométrique.
Le passage au codex repose sur deux innovations :
- la collection des tablettes de cires en « groupes reliés » ;
- la généralisation du parchemin (peau, généralement, de mouton spécialement préparée) au détriment du papyrus. Cette généralisation résulte une lutte pour l'hégémonie culturelle entre deux descendants de généraux d'Alexandre le Grand, en effet d'après Pline l'ancien : Ptolémé Épiphane d'Alexandrie cherchait à empêcher Eumène II d'établir une bibliothèque à Pergame (au 2e siècle avant J.-C.) et avait interdit l'exportation du papyrus (produit exclusivement en Égypte), ce qui incita Eumène à chercher un substitut qui devint le parchemin.
Le remplacement du rouleau par le codex aura des conséquences majeures sur l'organisation du livre ainsi que sur la façon de lire et il permettra le développement ultérieur de l'imprimerie.
La principale révolution introduite par le codex est la notion de page. Grâce à elle, le lecteur peut accéder de manière directe à un chapitre ou à un passage du texte, alors que le rouleau impose une lecture continue. __Les mots ne sont de plus pas séparés par des espaces__. Comme l'écrit Collette Sirat : « Il faudra vingt siècles pour qu’on se rende compte que l’importance primordiale du codex pour notre civilisation a été de permettre la lecture sélective et non pas continue, contribuant ainsi à l’élaboration de structures mentales où le texte est dissocié de la parole et de son rythme. »
Remarquez les lettres en rouge, résultat de la _rubrication_ (mot qui a donné notre « rubrique » moderne) utilisée pour séparer ce qui deviendra des paragraphes avec l'imprimerie. Cette dernière en effet utilisera des espaces blancs plutôt que des couleurs (trop chères) pour marquer des séparations. L'usage de la couleur constitue une technique de mise en page qui pourrait parfaitement être remise à l'ordre du jour avec l'informatique.
+++
## Eusèbe et les références croisées
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Eusebe_final.jpg" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Au IVe siècle de notre ère, Eusèbe de Césarée ou Eusèbe (de) Pamphile est l'auteur de nombreuses œuvres historiques, apologétiques, bibliques et exégétiques. Auteur de l’Histoire ecclésiastique, il est reconnu comme un Père de l'Église, et ses écrits historiques ont une importance capitale pour la connaissance des trois premiers siècles de l'histoire chrétienne. Il va apporter plusieurs innovations capitales à l'organisation du livre dont la table de références croisées.
+++
## Canon eusébien
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Evangeliaire_Lorsch.jpg" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Pour permettre une comparaison plus facile des quatre évangiles, il numérote les différents versets de chacun d'entre eux – sa numérotation n'est celle employée de nos jours qui, elle, date du XVIe siècle. Il indique les versets dont les contenus sont identiques dans les 4 évangiles (à gauche), ceux dont le contenu est identique dans 3 des 4 (à droite), dans 2 des 4, etc. Ce « canon eusébien » constitue le premier exemple connu de références croisées.
+++
## Importance du _codex_
D'après Frédéric Barbier dans l'« Histoire du livre » :
- L'invention du _codex_ est absolument fondamentale pour l'avenir de la civilisation écrite
- Le _codex_ se prête à la _consultation partielle_
- On peut lui superposer un système de références facilitant la consultation
- On peut consulter le _codex_ en prenant des notes
- La combinaison du _codex_ et de la minuscule donne un outil intellectuel très puissant, tel qu'il n'en existait pas antérieurement.
Note:
Au fil des siècles, le codex — qu'on désigne le plus souvent comme un manuscrit — va évoluer et se donner peu à peu les attributs du livre moderne : séparation entre les mots (VIIe siècle), début de ponctuation (VIIIe siècle), table des matières, titre courant, marque de paragraphe (XIe siècle), pagination, index (XIIIe siècle), etc.
Un point intéressant : le contenu de la Thora est « fixé » avant l'apparition du codex et, aujourd'hui encore, la Thora est écrite sur des _volumen_ (dans les synagogues au moins). La religion chrétienne se développe en même temps que le codex et ne donnera jamais au _volumen_ un statut « supérieur », pas plus que ne le fera la religion musulmane.
+++
## Parallèle chinois
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Figure_W1_S2_6.jpg" style="width:90%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Le lien entre apparition et généralisation du _codex_, d'une part, et apparition des « outils de navigation », table des matières, index, titre courant etc., d'autre part à un pendant dans la civilisation chinoise.
En Chine, les concours d'entrée dans l'administration se développent au 9e siècle. L'épreuve principale de ceux-ci serait probablement appelée épreuve de culture générale de nos jours et demande aux candidat une connaissance approfondie des classiques, Confucius en tête, et la capacité de les citer.
Pour répondre à cette demande, des ouvrages spécialisés, sorte de florilèges, les leishu, vont se développer. Mais leur utilisation efficace doit permettre de trouver un ensemble de citations appropriées à un contexte donné suppose l'emploi d'index, de table des matières, etc. De façon intéressante, le _codex_ et les outils de navigation vont eux aussi se développer __de concert__ à partir de cette époque.
La majorité de ces leishus __est imprimée__ (dès le 9e siècle !), ce que rappelle la matrice d'impression à droite de la page. L'impression se fait bien sûr sur du papier, support inventé par les Chinois au 8e siècle avant J.-C....
+++
## Organiser en « mettant dans la bonne case »
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Placcius_cabinet_TabIV.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Maintenant que nous avons très brièvement décrit l'apparition des principaux outils de navigations du livre – outils qui peuvent bien entendu s'appliquer aux notes prises dans un cahier – ; nous revenons sur le « bout de papier » ou la fiche comme support de note.
Nous montrons à nouveau l'armoire à notes de Placcius et Leibniz puisqu'elle évoque parfaitement les inconvénients et les avantages des supports ne contenant __qu'une seule note__.
L'inconvénient est que le bout de papier ou la fiche se perdent facilement et ne servent à rien s'ils ne sont pas __classés__ en plus d'être rangés. Problème résolu par l'armoire de la figure. D'une certaine façon, sa conception fait qu'on accède à son contenu par l'index.
L'avantage est que les notes peuvent être réorganisées si elles contiennent des information sur plusieurs sujets. Elle peuvent aussi être directement collées dans un livre lors de la composition d'un florilège ou d'un ouvrage de synthèse.
Ce dernier procédé était très couramment employé par les humanistes et les érudit de la renaissance et du début de la période moderne. [Conrad Gessner](https://fr.wikipedia.org/wiki/Conrad_Gessner) (1516-1565) était un champion de cette technique ; il obtenait même parfois ses fiches en découpant les pages des livres. Encore une fois, ne faites pas cela avec les livres de bibliothèques !
+++
## Organiser avec une bonne « carte » : la méthode de John Locke
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/MethodeLocke1.jpg" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Nous allons maintenant apprendre une technique de construction d'index due à [John Locke](https://fr.wikipedia.org/wiki/John_Locke) (1632-1704), grand-père du libéralisme, ce qui ne l'empêchait pas d'être actionnaire de la _Royal African Company_, [principale compagnie négrière anglaise](https://en.wikipedia.org/wiki/John_Locke#Constitution_of_Carolina)...
J'illustre la méthode avec mon cahier de notes. Les deux pages décrivent l'organisation d'un jeu de données dans un fichier au format [HDF5](https://www.hdfgroup.org/) sur la page de gauche et l'organisation correspondante dans un `data frame` du logiciel [R](https://www.r-project.org/) sur la page de droite. Les données concernent la mesure de la concentration des ions calcium dans des neurones et ces notes ont été prises lors du développement d'un code (programme d'ordinateur) pour les analyser.
Pour l'application de la méthode de Locke, ce n'est pas le contenu des pages qui nous importent directement, mais les fait qu'elles sont numérotées (en bas dans les coins externes, ici nous avons affaire aux pages 86 et 87) et qu'elles comportent des mots clé : `code` ; `neuro` ; `calcium` ; inscrits en rouge en bas des pages.
Je signale que la méthode de Locke peut être mise en œuvre après coup. Je l'ai en fait testée lors de la préparation de ce cours, c'est-à-dire après avoir commencé à remplir mon cahier de notes.
+++
## La méthode de John Locke (suite)
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/MethodeLocke2.jpg" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Nous voyons maintenant notre index. Il est situé en fin de cahier, même si Locke recommande de le placer au début, parce-que je ne l'avais pas planifié comme je viens de l'expliquer.
L'idée est de référencer les mots clé du cahier en se basant sur leur première lettre et sur la première voyelle suivant la première lettre.
L'index est ainsi décomposé en 26 entrées principales, les lettres capitales de A à R visibles sur les deux pages, et chaque entrée principale est elle-même subdivisée suivant les 5 voyelles les plus courantes (par convention le y sera alors classé avec le i).
Les pages 86 et 87 que nous venons de voir comportaient le mot clé `code` et nous voyons qu'elles figurent sur la ligne `Co`, elle comportaient le mot clé `neurone` et elles figurent également sur la ligne `Ne` ; enfin elle comportaient le mot clé `calcium` et figurent donc sur la ligne `Ca`.
Si besoin, on peut aussi lister les mots clé avant ou après l'index lorsque le cahier est fini.
+++
## Conclusions
- Comme il est rarement possible de se passer complètement d'un support papier, apprendre de nos brillants prédécesseurs devrait nous permettre de ne pas « réinventer la roue »
- Clairement nous avons néanmoins intérêt à utiliser autant que possible un support numérique pour profiter (en nous inspirant de ces mêmes prédécesseurs) :
+ d'une plus grande flexibilité d'organisation, de réorganisation et de structuration
+ d'outils d'archivage fiables
+ d'outils d'indexation puissants.
---
# C028AL-W1-S3
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## 1. Cahier de notes / cahier de laboratoire
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. **Du fichier texte au langage de balisage léger**
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
Note:
Nous commençons à présent une discussion plus « technique » dirigée principalement vers les outils que l'informatique met à notre disposition pour prendre des notes avec les notions de « fichier texte » et de « langage de balisage léger ».
+++
## Qu'est-ce qu'un fichier texte ?
- De façon pratique, un « [fichier texte](https://fr.wikipedia.org/wiki/Fichier_texte) » _donne quelque chose de lisible_ lorsqu'il est ouvert avec un [éditeur de texte](https://fr.wikipedia.org/wiki/%C3%89diteur_de_texte).
- Un « éditeur de texte » permet de créer et de modifier des fichiers
textes (belle définition circulaire !) :
+ [Notepad++](https://notepad-plus-plus.org/) pour `Windows`
+ [gedit](https://wiki.gnome.org/Apps/Gedit) pour les systèmes `Unix / Linux` (mais pas seulement)
+ [TextEdit](https://en.wikipedia.org/wiki/TextEdit) pour les `MacOS`.
Note:
Nous ne citons ici, délibérément, que des logiciels libres (il est difficile de faire de la recherche vraiment reproductible avec des logiciels non libres).
Un logiciel de « [traitement de texte](https://fr.wikipedia.org/wiki/Traitement_de_texte) » est plus sophistiqué qu'un simple éditeur de texte ; il permet de faire plus, ce qui sous entend qu'il peut aussi ouvrir et manipuler des fichiers textes.
**Attention** : le format « natif » des traitements de texte est rarement un format texte. Les fichiers `doc` et `docx` de `Word` et `odt` de `LibreOffice` _ne sont pas des fichiers textes_.
+++
## Un fichier « non lisible » avec un éditeur de texte
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Exemple_Fichier_Binaire.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Un fichier `PDF` ouvert avec `gedit`
+++
## Un fichier « texte » ouvert avec un éditeur de texte
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Exemple_Fichier_Texte.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Pourquoi utiliser des fichiers texte ?
Les caractères contenus dans le fichier texte sont typiquement codés en [UTF-8](https://fr.wikipedia.org/wiki/UTF-8) (_Universal Character Set Transformation Format - 8 bits_).
**Cela implique que** :
- il est _toujours possible_ de les lire avec un éditeur de texte _même des années plus tard_
- les logiciels d'indexation ou de « [recherche de bureau](https://en.wikipedia.org/wiki/Desktop_search) », comme les logiciels de [gestion de versions](https://fr.wikipedia.org/wiki/Gestion_de_versions), les exploitent pleinement.
**Conclusion : choisissez le format texte (UTF-8)**.
+++
## Problème du fichier texte « simple »
- Avec un fichier texte « simple » il n'est pas possible de profiter des outils de navigation comme les hyperliens.
- De même, il n'est pas possible de mettre en évidence un mot ou un groupe de mots avec une police **grasse** ou une police *italique*.
- Si plusieurs personnes travaillent sur un même texte, elles ne peuvent se corriger en ~~barrant~~ des mots.
+++
## Un fichier `HTML` visualisé avec un navigateur
<br/>
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Exemple_Rendu_HTML.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ces limitations, combinées aux avantages des fichiers textes, ont amenées les informaticiens à développer des [langages de balisages](https://fr.wikipedia.org/wiki/Langage_de_balisage) (_Markup Language_ en anglais).
Un exemple banale est le [langage HTML](https://fr.wikipedia.org/wiki/Hypertext_Markup_Language).
+++
## Un fichier `HTML` visualisé avec un éditeur de texte
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Exemple_Source_HTML.png" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ces langages définissent une collection de balises qui ne sont pas (typiquement) destinées à être lues par un humain, mais à être interprétées par un logiciel.
Retrouvons le texte du début de la page précédente : « En informatique les langages de balisage... ».
Remarquez la syntaxe qui permet d'introduire un commentaire dans le fichier source. Un commentaire est un élément de texte qui ne sera pas interprété par le logiciel de visualisation.
+++
Le problème se résume ainsi :
- Fichiers texte attractifs pour la prise de notes.
- Langages de balisages ⇒ meilleur confort de lecture des fichiers _avec logiciel « de rendu »_.
- Langages de balisages ⇒ fichiers source au format texte, __mais__ nécessitent éditeurs spécialisés.
Peut-on combiner la légèreté des fichiers textes « simples » avec le confort de lecture offert par les langages de balisage ?
Note:
Le problème se résume ainsi :
- Les fichiers textes sont très attractifs pour la prise de notes.
- Les langages de balisages comme l'`HTML` nous permettent d'améliorer considérablement le confort de lecture de nos fichiers _à condition d'utiliser un logiciel « de rendu » adapté_.
- Les langages de balisages comme l'`HTML` génèrent des fichiers sources au format texte, mais avec lesquels il est difficile (pénible) de travailler et nécessitent des éditeurs spécialisés – ce qui ralentit l'écriture des notes –.
Peut-on combiner la légèreté des fichiers textes « simples » avec le confort de lecture offert par les langages de balisage ?
+++
## Langage de balisage léger : l'idée
Un [langage de balisage léger](https://fr.wikipedia.org/wiki/Langage_de_balisage_l%C3%A9ger) est :
- un type de langage de balisage utilisant une _syntaxe simple_
- conçu pour qu'un fichier en ce langage soit _aisé à saisir_ avec un éditeur de texte simple
- _facile à lire dans sa forme non formatée_, c'est-à-dire sans logiciel dédié comme un navigateur internet.
+++
## L'exemple de `Markdown`
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Exemple_Markdown.png" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Markdown source (en haut) et sortie HTML (en bas)
Note:
Markdown nous permet aussi de structurer facilement nos notes avec des sections, sous-sections, etc.
Les hyperliens peuvent être aussi bien avoir des cibles externes, comme illustré ici, qu'interne.
Il est possible d'inclure des commentaires.
+++
## `Markdown` n'est pas le seul langage de balisage léger disponible
- Le plus communément employé est [`Wikitexte`](https://fr.wikipedia.org/wiki/Wikitexte) de Wikipédia
- [AsciiDoc](http://www.methods.co.nz/asciidoc/) a de nombreux adeptes
- [ReStructuredText](http://docutils.sourceforge.net/docs/user/rst/quickstart.html) est très employé par la communauté des programmeurs `Python`
- Il y en a bien d'autres.
+++
## Conclusions
Les langages de balisage léger vont nous permettre de :
- travailler avec des fichiers textes
- écrire rapidement nos notes, avec n'importe quel éditeur, grâce à leur syntaxe simplifiée
- organiser nos notes en les structurant.
Note:
Dans la partie approfondissements, nous montrons :
- comment obtenir n'importe quel format « de sortie » (`HTML`, `PDF`, `docx`, `Wikitexte`) à partir d'un seul « fichier source » au format `Markdown` ;
- que le langage de balisage léger choisi importe peu puisque nous disposons d'un outil pour convertir l'un dans n'importe quel autre.
---
## C028AL-W1-S4
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## 1. Cahier de notes / cahier de laboratoire
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. **Pérennité et évolutivité des notes avec la gestion de version**
- Démonstration : gitlab
5. Les étiquettes et les logiciels d'indexation pour s'y retrouver
- Démonstration : DocFetcher
Note:
Nous allons maintenant discuter de la façon dont l'informatique nous permet de conserver nos notes de façon « sûr » tout en nous permettant de les faire évoluer.
Les outils dont nous allons parler concernent encore une fois une communauté beaucoup plus large que celle de la « recherche reproductible ». Toute personne amenée à « travailler » son texte s'y trouve confrontée, cela d'autant plus que la rédaction est de plus en plus effectuée en commun.
La problème de la pérennité des notes et des textes ne constitue en rien une nouveauté.
Pour les humanistes et les savants du début de l'ère moderne qui se spécialisaient dans la compilation de textes, elle était une véritable obsession et la justification de leur travail.
La solution qu'ils préconisaient alors, la copie multiple, est identique à celle que nous employons aujourd'hui, seul le support à changer.
Restons modestes, le support papier des humanistes a démontré sa capacité à résister à l'épreuve du temps.
Par contre, en ce qui concerne l'évolutivité, nous avons quelques raisons de penser que nos outils modernes constituent un véritable progrès.
+++
## L'évolutivité avec un support papier
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png" style="width:40%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ici, l'exemple du manuscrit des « Liaisons dangereuses » de Pierre Ambroise Choderlos de Laclos.
L'auteur a apporté de nombreuses corrections à son manuscrit.
On conçoit que le nombre de corrections qu'il peut ainsi apporter est relativement restreint.
+++
## L'évolutivité avec traitement de texte
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/LibreOffice_notes_pour_CLOM_diff_origine.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Une solution qui permet de travailler lorsqu'on utilise que des fichiers texte est le suivi de modifications proposé par la plupart des logiciels de traitement de texte.
Ce n'est pas la solution que nous préconisons, mais c'est certainement le type de « gestion de version » auquel les utilisateurs d'ordinateurs ont le plus de chances d'avoir été exposés.
Nous prenons ici un exemple avec `LibreOffice` où nous éditons un fichier contenant des notes prises pour préparer ce cours.
Remarquez les boutons en bas à gauche que nous faisons apparaître en navigant dans les menu _view_ puis _Toolbars_ avant de sélectionner _track changes_.
- solution « facile » à mettre en œuvre
- pas de format texte
- faire attention à ne garder __que la dernière version__ avant de soumettre un article (pour les scientifiques)
- les sauvegardes doivent être gérées séparément.
+++
## L'évolutivité avec un « moteur de wiki »
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Dokuwiki_notes_pour_CLOM.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Une solution plus proche de l'esprit de ce cours est l'emploi d'un _wiki_ pour gérer ses notes.
Ici, j'illustre l'usage d'un wiki personnel utilisant _DokuWiki_ comme moteur de wiki, j'aurais aussi pu utiliser _MediaWiki_, le moteur de Wikipédia.
_DokuWiki_ n'emploie que des fichiers texte.
Je l'ai appris lors de la préparation de ce cours, ce qui signifie qu'il est assez simple à utiliser.
Encore une fois, les notes prises en préparation du cours sont utilisées pour illustration.
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Dokuwiki_notes_pour_CLOM_historique2.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Si je clique sur « Derniers changements », alors je vois apparaître la liste des pages de mon wiki avec les dates des dernières modifications. Si maintenant je clique sur le nom de l'une des pages...
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Dokuwiki_notes_pour_CLOM_diff.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Je vois apparaître la différence entre la dernière version, à gauche, et la version présente à droite.
Commenter plus...
Vous avez accès à des informations du même type sur n'importe quelle page wikipédia.
+++
## Avantages et inconvénients
- solution qui a fait ses preuves, en particulier dans un cadre collaboratif
- format texte (avec `DokuWiki`)
- ne permet de modifier qu'une seule page à la fois
+++
## L'évolutivité avec la gestion de version
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Github_Module1.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Je présente maintenant la solution la plus sophistiquée à ce jour.
Ici, un logiciel spécifique, _git_ est employé pour gérer les versions successives d'un ensemble de fichiers de nature disparate (des fichiers textes, des images, etc). En fait des arborescence de fichiers peuvent être gérées par ce logiciel.
Les logiciels comme _git_ nécessite la création d'un dépôt, qui peut être la machine de l'utilisateur, mais qui est en général hébergé sur un site internet dédié comme ici _GitHub_.
Le dépôt va permettre à différentes personnes de travailler sur le même « projet ». Elles vont échanger leur modifications via le dépôt. __Elles auront néanmoins toutes une copie complète de ce dernier__ (datant de leur dernière « synchronisation »).
Des nombreux instituts de recherche fournissent maintenant de tels dépôts aux laboratoires qui leurs sont rattachés.
Les utilisateurs peuvent alors souvent employer une interface graphique pour naviguer dans leurs dépôts, revenir sur des version antérieures, faire des comparaisons, des recherches, etc.
Nous voyons ici l'interface fourni par _GitHub_ et nous visualisons un état antérieur du fichier source de cette présentation.
Vous pouvez tous vous connectez à _Github_, aller sur le dépôt que nous avons utilisé pour préparer le cours, et refaire ce qui est montré dans les quelques diapos qui suivent.
Si je clique sur le bouton _History_, je vois...
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Github_Module1_historique.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Encore une fois, la liste des modifications apportées au fichier avec le nom de la personne ayant effectué ces modifications et les dates associées.
Si maintenant je clique sur le numéro 5a2951f, je vois...
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Github_Module1_diff.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Les différences entre la version précédente et la version identifiée par le numéro sur lequel j'ai cliqué.
Commentez...
+++
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/Git_diff_mixte.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Lorsque plusieurs fichiers ont été modifiés, comme ici où un fichier image a été rajouté et un fichier texte a été modifié, l'ensemble des modifications est visible et accessible.
+++
## Avantages et inconvénients
- Solution sophistiquée (donc un peu plus difficile à maîtriser que les précédentes)
- Solution qui a fait ses preuves, en particulier dans un cadre collaboratif sur de grands projets (noyau Linux)
- Permet d'enregistrer des modifications sur plusieurs fichiers à la fois
- Une sauvegarde centralisée dont tous les membres du projet ont une copie intégrale
Note:
Dans la partie approfondissements, nous rentrerons un peu plus dans les aspects concrets de l'utilisation de `git`.
`git` devient de fait le standard de la gestion de version bien au-delà des projets purement logiciels, cela vaut donc la peine de faire un petit effort pour en maîtriser les rudiments.
Quelque soit la stratégie de gestion de version employée, le retour en arrière est possible, mais lors des premières tentatives il vous faudra faire preuve de calme et de patience !
---
## C028AL-W1-S5
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/clap.png" style="width:50%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## 1. Cahier de notes / cahier de laboratoire
1. Nous utilisons tous des cahiers de notes
2. Un aperçu historique de la prise de notes
3. Du fichier texte au langage de balisage léger
- Démonstration : markdown
4. Pérennité et évolutivité des notes avec la gestion de version
- Démonstration : gitlab
5. **Les étiquettes et les logiciels d'indexation pour s'y retrouver**
- Démonstration : DocFetcher
Note:
Nous revenons ici sur le problème de l'indexation, pas tant sur l'indexation d'un document unique que sur l'indexation de documents multiples dans des formats divers.
- comme nous l'avons déjà affirmé, prendre des notes abondantes et détaillées n'est utile que si nous pouvons retrouver les informations qu'elles contiennent quand nous en avons besoin
- pour des notes contenues dans un seul fichier texte, la fonction de recherche de notre éditeur favori nous permet généralement d'aller assez loin
- pour des notes manuscrites contenues dans un cahier, la méthode de Locke — que nous avons exposée dans notre deuxième séquence — et qui repose sur des mots clé ou étiquettes, donne de bons résultats
- les notes manuscrites sur fiches sont généralement stockées dans un meuble dont la structure matérialise un index — comme l'armoire de Placcius et Leibniz —
+++
## Ainsi parlait Leibniz
« Il me semble que l'apparat savant contemporain est comparable à un grand magasin qui contient une grande quantité de produits, stockés de façon totalement désordonnée, mélangée ; où les nombres ou lettres d'indexation manquent ; où les inventaires et livres de comptes pouvant aider à ordonner le contenu ont disparu.
Plus grande est la quantité d'objets amassés, plus petite est leur utilité. Ainsi, ne devrions nous pas seulement essayer de rassembler de nouveaux objets de toutes provenances, mais nous devrions aussi essayer d'ordonner ceux que nous avons déjà. »
Note:
J'emploie ici le terme d'« [apparat savant](https://fr.wikipedia.org/wiki/Apparat_savant) » qui est un terme technique de l'édition désignant : citations, références et sources, notes en bas de pages, introduction, texte en langue originale (en parallèle avec la traduction), commentaire historique ou philologique, index fontium (les sources), index locorum (références avec renvoi à la page où le passage est cité ou mentionné, par ex. : Évangile selon Marc 1, 1 : p. 100), index nominum (les noms propres), index rerum (les thèmes), etc.
"It seems to me that the apparatus of contemporary scholarship is comparable to a very large store which, though it keeps a great variety of goods, yet is totally confused and in disorder, because all items are mixed up, because no numbers or letters of an index are displayed, and because inventories or account ledgers which could throw some light on the matter are missing.
"The larger the mass of collected things, the less will be their usefulness. Therefore, one should not only strive to assemble new goods from everywhere, but one must endeavor to put in the right order those that one already possesses."
http://www.backwordsindexing.com/index.html
+++
## S'y retrouver dans un fichier texte
<img src="assets/img/recherche-avec-editeur.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## S'y retrouver dans un cahier
<img src="assets/img/IndexCahierLocke.jpg" style="width:80%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## S'y retrouver dans des « fiches »
<img src="assets/img/Placcius_cabinet_TabIV.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Problèmes, limitations, solutions ?
<br/>
- Un seul document
<br/>
- Indexation de fichiers numériques
<br/>
- Étiquetage de fichiers numériques au sens large
<br/>
- Moteur de recherche pour indexation et recherche globale
Note:
- les techniques que nous venons de voir ou revoir ne fonctionnent que pour un seul « document » — recherche avec l'éditeur de texte, index d'un cahier — et/ou pour un seul type de document
- les outils informatiques dont nous disposons nous permettent d'aller plus loin dans l'indexation des fichiers numériques
- il est possible de rajouter des étiquettes ou mots-clés à des fichiers textes comme à des fichiers images (`jpg`, `png`) ou des fichiers « mixtes » (`pdf`) grâce aux métadonnées qu'ils contiennent
- les moteurs de recherche de bureau permettent d'indexer l'ensemble des fichiers textes d'une arborescence donnée mais aussi les métadonnées des autres fichiers
+++
## Trouver un mot quelconque avec un moteur de recherche de bureau (`DocFetcher`)
<img src="assets/img/Trouver_un_mot_avec_DocFetcher.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Le problème de l'« abondance » &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="assets/img/Trouver_calcium_avec_DocFetcher.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Ajouter des étiquettes ou mots clés dans un fichier texte (`Markdown`)
<img src="assets/img/Ajout_etiquette_avec_Markdown.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Trouver une étiquette avec un moteur de recherche de bureau (`DocFetcher`)
<img src="assets/img/Trouver_etiquette_avec_DocFetcher.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Les fichiers images contiennent des métadonnées
<img src="assets/img/Metadonne_fichier_index.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Les métadonnées peuvent être modifiées &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src="assets/img/Metadonne_fichier_index2.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Les moteurs de recherche de bureau peuvent lire les métadonnées
<img src="assets/img/Trouver_etiquette_avec_DocFetcher2.jpg" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
+++
## Conclusion
En combinant :
- des étiquettes insérées dans nos fichiers textes, images, `PDF`, etc
- avec un moteur de recherche de bureau
nous pouvons espérer éviter le « cauchemar de Leibniz »
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t broken-links:nil c:nil creator:nil
#+OPTIONS: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t
#+OPTIONS: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+OPTIONS: timestamp:t title:t toc:t todo:t |:t
#+TITLE: Une phrase de description pour les séquences du module 1
#+DATE: <2018-07-05 jeu.>
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: en
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 25.3.1 (Org mode 9.0.9)
* Séquence 1
- Quelques exemples, célèbres et moins célèbres, de prise de notes.
- Some famous and less famous examples of note-taking.
* Séquence 2
- Une courte histoire de la navigation dans le livre et les notes.
- A brief history of navigation within the book and notes.
* Séquence 3
- L'intérêt des fichiers textes et des langages de balisage légers.
- Why should we use text fromats and ligthweight markup languages?
* Séquence 4
- Comment archiver des notes tout en les faisant évoluer ? L'intérêt des logiciels de gestion de version.
- How to archive notes while letting them evolve? The case for version control systems.
* Sèquence 5
- S'y retrouver dans ses notes avec des mots-clés et un moteur de recherche de bureau.
- Finding one's way in a large notes collection with key-words and desktop search software.
# -*- ispell-local-dictionary: "american" -*-
#+TITLE: Lab books and note books
#+AUTHOR: @@latex:{\large Christophe Pouzat} \\ \vspace{0.2cm}MAP5, Paris-Descartes University and CNRS\\ \vspace{0.2cm} \texttt{christophe.pouzat@parisdescartes.fr}@@
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+STARTUP: beamer indent
#+LANGUAGE: fr
#+PROPERTY: header-args :eval no-export
#+OPTIONS: H:2 tags:nil
#+OPTIONS: num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
# #+OPTIONS: author:nil email:nil creator:nil timestamp:t
#+TAGS: noexport(n)
#+EXCLUDE_TAGS: noexport
#+LATEX_HEADER: \usepackage{pgfpages}
#+LATEX_HEADER: \setbeameroption{show notes on second screen=right}
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \setbeamercovered{invisible}
#+LATEX_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Where are we?}\tableofcontents[currentsection]\end{frame}}
#+LATEX_HEADER: \beamertemplatenavigationsymbolsempty
#+LATEX_HEADER: \usepackage{tikzsymbols}
#+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]}
#+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]}
#+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]}
#+LATEX_HEADER: \usepackage{color,soul}
#+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7}
#+LATEX_HEADER: \sethlcolor{lightblue}
#+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}}
#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \newcommand\SoulColor{%
#+LATEX_HEADER: \let\set@color\beamerorig@set@color
#+LATEX_HEADER: \let\reset@color\beamerorig@reset@color}
#+LATEX_HEADER: \makeatother
#+LATEX_HEADER: \let\hrefold=\href
#+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}}
# #+BEAMER_HEADER: \setbeamercovered{invisible}
# #+BEAMER_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Where are we ?}\tableofcontents[currentsection]\end{frame}}
# #+BEAMER_HEADER: \beamertemplatenavigationsymbolsempty
#+STARTUP: beamer
#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) %8BEAMER_OPT(Opt)
#+STARTUP: indent
#+PROPERTY: header-args :eval no-export
* M1-S0: Lab books and note books
:PROPERTIES:
:CUSTOM_ID: c028al-w1-s0
:END:
** Lab books and note books
:PROPERTIES:
:CUSTOM_ID: les-grandes-lignes-du-module-cahier-de-notes-cahier-de-laboratoire
:END:
1. Note-taking Concerns Everyone
2. A Quick History of Note Taking
3. From Text Files to Lightweight Markup Languages
- Demo: markdown
4. Note Archiving and Evolution with Version Control
- Demo: gitlab
5. Labels and Search Engines
- Demo: DocFetcher
* M1-S1: Note-taking concerns everyone
** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
This section discusses a much wider issue than /reproducible research/ (RR). Implementing RR requires thorough note-taking and note-taking concerns everyone. The purpose of this section is therefore to remind the reader / auditor that he/she already knows: *note-taking concerns everyone*. Few examples are used to that end.
** The scholar annotating his book / manuscript
[[../assets/img/ManuscritAnnoteEtCoupe.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
A XIVth century manuscript with the works of Aristotle owned by Nicasius de Planca (gallica.bnf.fr / Bibliothèque nationale de France).
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
We see a manuscript from the XIVth century heavily annotated by its owner Nicasius de Planca. This kind of note-taking was and remains extremely common. You should nevertheless avoid it when reading books from a library or from your friends!
The next two slides show a case of paramount importance for the History of Science.
** Galileo observing Jupiter's moons
[[../assets/img/GalileoManuscriptCoupe.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Galileo Galilei's notes while observing Jupiter in January 1610 with his telescope (Wikimedia Commons).
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
The first observation was done on January 7 1610. Galileo Galilei first thought that he found new stars close to Jupiter (see the [[https://en.wikipedia.org/wiki/Galileo_Galilei#Jupiter's_moons][Wikipedia page]]). But after several nights of observation, he realized that these "stars" were in fact circling around the planet, *they are satellites*! He named the group of four the Medicean stars, in honour of his future patron, Cosimo II de' Medici, Grand Duke of Tuscany, and Cosimo's three brothers (Wikipedia).
**
[[../assets/img/GalileoManuscriptZoom.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The small "stars" are in fact orbiting around Jupiter, *they are doing what the Moon does around the Earth* (Wikimedia Commons).
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
These observations lead Galileo to reject the geocentric hypothesis in favor of the heliocentric one. This brought him much later, and after a somewhat tortuous path that I don't have the space to describe now, in front of the Inquisition that sentences him on June 22 1633 to house arrest, which he remained under for the rest of his life.
** Placcius' and Leibniz' closet
[[../assets/img/Placcius_cabinet_TabIV.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Organizing notes Placcius' way (Placcius, Vincent, 1642-1699. /De arte excerpendi vom gelahrten Buchhalten/, 1689. Houghton Library, Harvard University.)
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
With printing appearance, demand for paper increased and paper's price ended up decreasing (after a large production increase). In addition to the use of the /codex/ with pages made of paper, many scholars started using paper slips.
But taking abundant notes on paper slips is good only if one can find efficiently retrieve this stored information when needed. Vincent Placcius (1642-1699) and Gottfried Leibniz (1646-1716) had a custom made closet to solve this retrieval problem. This example is discussed in Ann Blair's book /TOO MUCH TO KNOW/, Yale Univ. Press, 2010 (pp. 93-95).
**
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
#+ATTR_LATEX: :width 0.6\textwidth
[[../assets/img/Placcius_cabinet_TabIVzoom.png]]
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
Zoom on the columns of Placcius' cabinet. You can see the "front" (left column), the "side" (second from left) and the "back" (fourth from left).
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
This cabinet had many columns that could rotate about their (vertical) axis. The column's front was used to write what we would now call keywords relating to the content of the notes that were hooked on the column's back side.
Notice the advantage of these paper slips over Galileo's codex: with the former, notes can be reorganized.
** Beware of overabundance: Fulgence Tapir's disappearance
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
#+BEGIN_SRC shell :exports none :results hide
cd imgs && wget https://upload.wikimedia.org/wikipedia/commons/c/c1/Anatole_France_young_years.jpg
#+END_SRC
#+RESULTS:
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/Anatole_France_young_years.jpg]]
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
In 1908, [[https://en.wikipedia.org/wiki/Anatole_France][Anatole France]] (1844-1924) published "[[https://archive.org/stream/in.ernet.dli.2015.220207/2015.220207.Penguin-Island_djvu.txt][Penguin Island]]" a parody of French history.
By Photographer : Wilhelm Benque. Tucker Collection - New York Public Library Archives, Public Domain, https://commons.wikimedia.org/w/index.php?curid=16240632.
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize The text can be found /legally/ at several places, the
[[https://en.wikipedia.org/wiki/Project_Gutenberg][Project Gutenberg]] one is missing the "Preface", so don't use it, go to
one of the versions available on [[https://archive.org/search.php?query=title%3Apenguin%20island%20AND%20-contributor%3Agutenberg%20AND%20mediatype%3Atexts][Internet Archive]]:
https://tinyurl.com/MOOC-RR-penguin-island. The importance of the
preface in illustrated by the following two quotations:
#+BEGIN_QUOTE
\tiny One word more if you want your book to be well
received, lose no opportunity for exalting the virtues on
which society is based — attachment to wealth, pious sentiments, and especially resignation on the part of the poor,
which latter is the very foundation of order. Proclaim, sir,
that the origins of property — nobility and police — are treated in your history with the respect which these institutions
deserve. Make it known that you admit the supernatural
when it presents itself. On these conditions you will succeed
in good society.
#+END_QUOTE
\vspace{-1em}And more importantly for our subject:\vspace{-1em}
#+BEGIN_QUOTE
\tiny The idea occurred to me, in the month of June last year, to
go and consult on the origins and progress of Penguin art,
the lamented M. Fulgence Tapir, the learned author of the
‘Universal Annals of Painting, Sculpture and Architecture’
Having been shown into his study, I found seated before a
roll-top desk, beneath a frightful mass of papers, an amazingly short-sighted little man whose eyelids blinked behind
his gold-mounted spectacles.
To make up for the defect of his eyes his long and mobile
nose, endowed with an exquisite sense of touch, explored the
sensible world. By means of this organ Fulgence Tapir put
himself in contact with art and beauty. It is observed that in
France, as a general rule, musical critics are deaf and art
critics are blind. This allows them the collectedness necessary for æsthetic ideas. Do you imagine that with eyes capable
of perceiving the forms and colours with which mysterious
nature envelops herself, Fulgence Tapir would have raised
himself, on a mountain of printed and manuscript documents, to the summit of doctrinal spiritualism, or that he
would have conceived that mighty theory which makes the
arts of all tunes and countries converge towards the Institute
of France, their supreme end?
The walls of the study, the floor, and even the ceiling were
loaded with overflowing bundles, pasteboard boxes swollen
beyond measure, boxes in which were compressed an in-
numerable multitude of small cards covered with writing. I
beheld in admiration minted with terror the cataracts of
erudition that threatened to burst forth.
‘Master,’ said I in feeling tones, ‘I throw myself upon
your kindness and your knowledge, both of which are
inexhaustible. Would you consent to guide me in my
arduous researches into the origins of Penguin art?’
‘Sir,’ answered the Master, ‘I possess all art, you under-
stand me, all art, on cards classed alphabetically and in
order of subjects. I consider it my duty to place at your disposal all that relates to the Penguins. Get on that ladder and
take out that box you see above. You will find in it everything you require.’
I tremblingly obeyed. But scarcely had I opened the fatal
box than some blue cards escaped from it, and slipping
through my fingers, began to rain down. Almost immediately, acting in sympathy, the neighbouring boxes opened, and
there flowed streams of pink, green, and white cards, and by
degrees, from all the boxes, differently coloured cards were
poured out murmuring like a waterfall on a mountain side
in April. In a minute they covered the floor with a thick
layer of paper. Issuing from their inexhaustible reservoirs
with a roar that continually grew in force, each second increased the vehemence of their torrential fall. Swamped up
to the knees in cards, Fulgence Tapir observed the cataclysm
with attentive nose. He recognised its cause and grew pale
with fright
‘What a mass of art !’ he exclaimed.
I called to him and leaned forward to help him mount the
ladder which bent under the shower. It was too late. Overwhelmed, desperate, pitiable, his velvet smoking-cap and his
gold-mounted spectacles having fallen from him, he vainly
opposed his short arms to the flood which had now mounted
to his arm-pits. Suddenly a terrible spurt of cards arose and
enveloped him in a gigantic whirlpool. During the space of a
second I could see in the gulf the shining skull and little fat
hands of the scholar, then it closed up and the deluge kept
on pouring over what was silence and immobility. In dread
lest I in my turn should be swallowed up ladder and all I
made my escape through the topmost pane of the window.
#+END_QUOTE
** A sailor's logbook
[[../assets/img/LivredebordpenduickV.JPG]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The logbook of Eric Tabarly during the San-Francisco / Tokyo transpacific ocean race in 1969.
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
This example is only superficially anecdotal. Information about the source can be found at: [[https://commons.wikimedia.org/wiki/File:LivredebordpenduickV.JPG]].
**
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/LivredebordpenduickVzoom1.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
On the left side, Tabarly reports salient events like a ripped jib on March 21 at 11 pm.
**
#+ATTR_LATEX: :width 0.8\textwidth
[[../assets/img/LivredebordpenduickVzoom2.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
On the right side, he computes his position (that was before GPS time!).
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
This example is only superficially anecdotal. Ten years ago, a European project was aiming at estimating the Atlantic and Indian Oceans climates during the 18th century using logbooks from ships of the West- and East-India companies from the Kingdoms of Portugal, Spain, Holland, Britain and France. See the [[http://webs.ucm.es/info/cliwoc/][Climatological Database for the World's Oceans 1750-1850]].
In the same vein, logbooks from slave ships give a lot of quantitative information about the slave trade between Africa and the "New World".
** So, what should we use to take notes?
- The object of study (like the annotated book)?
- One or several notebooks?
- Paper slips or cards?
- Computer files?
- Drawings, Pictures?
- Films?
- ...?
** Avoid getting lost
Notes generate an organizational problem:
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
- How can we structure our notes?
- Can we index them, if yes, how?
- How can we archive them while keeping the capability to make them evolve?
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Notes are necessarily heterogeneous---because of their subject matter as well as, often, their material support---and that creates a *serious* organizational problem.
*Without organization, notes usability barely exceeds our capability of memorizing facts and events*.
In the sequel we are going to give /tentative/ answers to the questions raised in the last two slides.
* M1-S2: Note-taking: a quick history
** Since note-taking concerns everyone...
- Since we are all "note-takers", our predecessors were also note-takers.
- This elementary observation will lead us to "study" how our brilliant ancestors took notes.
- Hopefully, we can learn some useful techniques on the way and put them to daily use.
- Hopefully, we can avoid thinking that we are the first to face the kind of problem we are now facing: "information overload".
** What are we going to talk about?
- The practical aspect of note-taking---what historians dub "materiality"---.
- The organization of books and notes.
- The link between the concrete and organizational aspects.
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
We are going to discuss the organization of books a lot since the "navigation devices" designed for the latter:
- table of content,
- index,
- etc,
also apply to notes.
*** Clarification
:PROPERTIES:
:BEAMER_ENV: note
:END:
We will mostly refer to the "Western" part of this History, with a single slide on Chinese contributions and nothing on Muslim, Indian or pre-Colombian contributions. This bias must be clearly understood as a *reflection of my ignorance* (I'm actively learning on the subject) and because it's easier, as always, to find illustrative material for "Western" contributions...
** The concrete aspects summarized on a single slide
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Figure_W1_S2_1.jpg]]
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize All illustrations are taken from Wikimedia Commons
- Top left: A clay tablet (pre-cuneiform period, -3000).
- Top center: A fresco from Pompeii with the portrait of [[https://en.wikipedia.org/wiki/Portrait_of_Paquius_Proculo][Terentius Neo and his wife]]. She carries a [[https://en.wikipedia.org/wiki/Wax_tablet][wax tablet]] and a /stylus/ (the main medium of note-takers up to the 19th century); he carries a /volumen/ or [[https://en.wikipedia.org/wiki/History_of_scrolls][scroll]], the stuff of books until the beginning of the Common Era.
- Top right: a notebook made of paper from the 17th century with [[https://en.wikipedia.org/wiki/Commonplace_book][commonplaces]]. "Commonplace" is a translation of the Latin term locus communis (from Greek tópos koinós, see literary topos) which means "a theme or argument of general application", such as a statement of proverbial wisdom (Wikipedia).
- Bottom left: An [[https://en.wikipedia.org/wiki/Index_card][index card]], a notes medium whose use exploded with bureaucratization and the development of libraries. Still heavily used in the humanities. Apparently first used (if not created) by the father of taxonomy, [[https://en.wikipedia.org/wiki/Carl_Linnaeus][Carl Linneaus]]. You can find his cards at: [[http://linnean-online.org/61332/#/0]].
- Bottom center: A [[https://en.wikipedia.org/wiki/Post-it_note][Post-it note]] as most of us use every day.
- Bottom right: A "modern days" numerical tablet.
*** The code generating the figure: :noexport:
#+NAME: Making-concrete-summary-of-material aspect
#+BEGIN_SRC shell :results hide
# This requires imagemagick
cd imgs
wget https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Clay_Tablet_-_Louvre_-_AO29562.jpg/1024px-Clay_Tablet_-_Louvre_-_AO29562.jpg -O Tablette_argile.jpg
wget https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Meister_des_Portr%C3%A4ts_des_Paquius_Proculus_001.jpg/651px-Meister_des_Portr%C3%A4ts_des_Paquius_Proculus_001.jpg -O Proculus.jpg
wget https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Commonplace_book_mid_17th_century.jpg/878px-Commonplace_book_mid_17th_century.jpg -O Carnet.jpg
wget https://upload.wikimedia.org/wikipedia/commons/6/6e/Lhfhospitalsstatehospital001.jpg -O Carte.jpg
wget https://upload.wikimedia.org/wikipedia/commons/e/ef/Fait_cnv.jpg -O Post_it.jpg
wget https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Lenovo_Yoga_3_Pro.jpg/1024px-Lenovo_Yoga_3_Pro.jpg -O Tablette_ordi.jpg
montage -mode concatenate -tile 3x2 Tablette_argile.jpg Proculus.jpg Carnet.jpg Carte.jpg Post_it.jpg Tablette_ordi.jpg Figure_W1_S2_1.jpg
rm Tablette_argile.jpg Proculus.jpg Carnet.jpg Carte.jpg Post_it.jpg Tablette_ordi.jpg
#+END_SRC
** Wax tablet and stylus
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/tabula_stilus.jpg]]
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize From the [[https://en.wikipedia.org/wiki/Wax_tablet][Wikipedia page]]:
A wax tablet is a tablet made of wood and covered with a layer of wax, often linked loosely to a cover tablet, as a "double-leaved" diptych. It was used as a reusable and portable writing surface in Antiquity and throughout the Middle Ages.
Writing on the wax surface was performed with a pointed instrument, a stylus. Writing by engraving in wax required the application of much more pressure and traction than would be necessary with ink on parchment or papyrus,[1] and the scribe had to lift the stylus in order to change the direction of the stroke. Therefore, the stylus could not be applied with the same degree of dexterity as a pen. A straight-edged, spatula-like implement (often placed on the opposite end of the stylus tip) would be used in a razor-like fashion to serve as an eraser. The entire tablet could be erased for reuse by warming it to about 50 °C and smoothing the softened wax surface. The modern expression of "a clean slate" equates to the Latin expression "tabula rasa".
** From the /scroll/ to the /codex/
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Figure_W1_S2_3.jpg]]
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
The shift from the /scroll/ to the /codex/ is fundamental for development of written civilization.
A scroll (from the Old French escroe or escroue), is a roll of papyrus, [[https://en.wikipedia.org/wiki/Parchment][parchment]], or paper containing writing.
From [[https://en.wikipedia.org/wiki/History_of_scrolls#Replacement_by_the_Codex][Wikipedia]]:
The codex was a new format for reading the written word, consisting of individual pages loosely attached to each other at one side and bound with boards or cloth. It came to replace the scroll thanks to several problems that limited the scroll's function and readability. For one, scrolls were very long, sometimes as long as ten meters. This made them hard to hold open and read, a difficulty not helped by the fact that most scrolls in that era were read horizontally, instead of vertically as scrolling virtual documents are read now. The text on a scroll was continuous, without page breaks, which made indexing and bookmarking impossible. Conversely, the codex was easier to hold open, separate pages made it possible to index sections and mark a page, and the protective covers kept the fragile pages intact better than scrolls generally stayed. This last made it particularly attractive for important religious texts.
The bottom left mosaic shows Virgil seating (70-19 BCE) holding a scroll of the /Aeneid/, with Clio, muse of history, also holding a scroll.
As explained by Frédéric Barbier (/Histoire du Livre/): "The scroll / volumen imposes a complex reading practice: one must unroll (/explicare/) and roll at the same time; that forbids working on several scrolls (the original text and its commentary) at the same time or to take notes. It imposes a continuous reading and making consultation impossible."
Scrolls are clearly unsuited to "nomadic reading"; can you imagine Ulysses embarking for his Odyssey carrying the 24 scrolls/volumen of the Iliad?
The term /volumen/ is the origin of our modern /volumes/ (a book in several volumes) as of the word for the geometrical concept.
Switching from scroll to codices required two innovations:
- The collection of wax tablets bound together with leather strands.
- The generalization of [[https://en.wikipedia.org/wiki/Parchment][parchment]] (usually sheep skin specially processed) as a replacement for [[https://en.wikipedia.org/wiki/Papyrus][papyrus]]. This generalization could be due (according to Pliny the Elder) to a rivalry between the cities of Pergamon and Alexandria for cultural hegemony: [[https://en.wikipedia.org/wiki/Ptolemy_V_Epiphanes][Ptolemy V Epiphanes]] King of Egypt wanted to block [[https://en.wikipedia.org/wiki/Eumenes_II][Eumenes II]] from developing in Pergamon a library that could compete with the one of Alexandria; he therefore imposed an embargo on papyrus export (Egypt was the sole papyrus producer). Eumenes looked for an alternative and fostered parchment development. The link between Pergamon and parchment is much clearer in German where Pergamon is written in the way as in English but where parchment is written /Pergament/.
Switching from scrolls to codices will have major consequences on books organization as well as on the reading practices, it will later on allow printing development.
The main revolution brought by the codex is the /page/. Thanks to this structural element, the reader can access directly to a specific chapter or a specific part of the text, while scrolls imposed continuous reading *at a time when there were no blanks between words*. According to Collette Sirat: "Twenty centuries will be necessary to realize the paramount importance of the codex for our civilization through the *selective reading* it made possible as opposed to the continuous reading. It opened room for the elaboration of mental structures where the text is dissociated from the speech and its rythm."
Notice the red letters used on the codex (bottom right), an example of [[https://en.wikipedia.org/wiki/Rubrication][rubrication]] used by scribes to mark paragraphs. With printing and the high cost of colors it entailed, an empty space started to be used to that end. Thinking about it, colors don't cost anything on a numerical support and could perfectly be used again in the same way.
** Eusebius and the invention of cross-references
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Eusebius_final.jpg]]
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize Illustrations from Wikimedia Commons.
From the Wikipedia page on [[https://en.wikipedia.org/wiki/Eusebius][Eusebius]]:
#+BEGIN_QUOTE
Eusebius of Caesarea (ad 260/265 – 339/340), also known as Eusebius Pamphili, was a historian of Christianity, exegete, and Christian polemicist. He became the bishop of Caesarea Maritima about 314 AD. Together with Pamphilus, he was a scholar of the Biblical canon and is regarded as an extremely learned Christian of his time. He wrote Demonstrations of the Gospel, Preparations for the Gospel, and On Discrepancies between the Gospels, studies of the Biblical text.
#+END_QUOTE
According to Anthony Grafton and Megan Williams (2006) /Christianity and the Transformation of the Book/, The Belknap Press of Harvard University Press, his writings are crucial for our knowledge of the first three centuries of Christian history. /He brought several essential innovations to the book's organization like the cross-references/.
*** The code generating the figure: :noexport:
#+BEGIN_SRC sh :results silent
cd imgs
wget https://upload.wikimedia.org/wikipedia/commons/b/ba/Eusebius_of_Caesarea.jpg
wget https://upload.wikimedia.org/wikipedia/commons/1/1f/Romia_Imperio.png
convert Romia_Imperio.png Eusebius_of_Caesarea.jpg -gravity northeast -composite Eusebius.jpg
convert Eusebius.jpg -font FreeSans -pointsize 75 -gravity southwest -annotate 0 'Roman Empire' Eusebius_leg.jpg
convert Eusebius_leg.jpg -font FreeSans -pointsize 75 -annotate +700+75 'Eusebius of\nCaeserea\n(265-340)' Eusebius_leg2.jpg
convert Eusebius_leg2.jpg -font FreeSans -pointsize 30 -annotate +1150+900 'Caeserea' Eusebius_final.jpg
rm Romia_Imperio.png Eusebius_of_Caesarea.jpg Eusebius.jpg Eusebius_leg.jpg Eusebius_leg2.jpg
#+END_SRC
** Eusebian canons
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Fol._10v-11r_Egmond_Gospels.jpg]]
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
Fol. 10v and 11r of the Egmond Gospels. Canon tables (900 CE).
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize Source: https://commons.wikimedia.org/wiki/File:Fol._10v-11r_Egmond_Gospels.jpg. Public Domain.
Quote from [[https://en.wikipedia.org/wiki/Eusebius#Biblical_text_criticism][Wikipedia]]:
#+BEGIN_QUOTE
For an easier survey of the material of the four Evangelists, Eusebius divided his edition of the New Testament into paragraphs and provided it with a synoptical table so that it might be easier to find the pericopes that belong together. These canon tables or "Eusebian canons" remained in use throughout the Middle Ages, and illuminated manuscript versions are important for the study of early medieval art, as they are the most elaborately decorated pages of many Gospel books.
#+END_QUOTE
*** The code generating the figure: :noexport:
#+BEGIN_SRC sh :results silent
cd imgs
wget https://upload.wikimedia.org/wikipedia/commons/0/0e/Fol._10v-11r_Egmond_Gospels.jpg
#+END_SRC
** The significance of the /codex/
Following Frédéric Barbier (/HISTOIRE DU LIVRE/, Armand Colin, 2009):
- The invention of the /codex/ is crucial for the development of written civilization.
- The /codex/ lends itself to *consultation reading*.
- We can add to the /codex/ a "navigation system" making consultation easier.
- We can take notes while consulting a /codex/.
- The combination of the /codex/ with the /Carolingian minuscule/ constitutes an extremely powerful intellectual tools, never seen before.
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
Example of /Carolingian minuscule/ can be found on the corresponding [[https://en.wikipedia.org/wiki/Carolingian_minuscule][Wikipedia page]].
Over centuries, /codices/---that we often call /manuscripts/---will slowly evolve and gain modern days book attributes:
- separation between words (VIIth century),
- start of punctuation (VIIIth century),
- table of content,
- running title,
- paragraph marks (rubrication, XIth century),
- pagination,
- index (XIIIth century).
An interesting point: Torah's content got "fixed" before the /codex/ generalization and today Torah scrolls are still used.
** Let us not forget China
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Figure_W1_S2_6.jpg]]
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
The link between the /codex/ generalization, on the one hand, and the apparition of "navigation guides" like the table of content, the index, the running title, on the other hand as a counterpart in the Chinese civilization.
In China, competitive examinations to become a high ranking state employee developed in the IXth century (CE). The main part of these exam was a paper on what we would now call general knowledge of the Classics where the students were asked to demonstrate their knowledge through appropriate quotations.
To fulfill the need of "textbook" appropriate for this kind of examination what is called [[https://en.wikipedia.org/wiki/Leishu][leishus]] were produced. They are described as follows on Wikipedia:
#+BEGIN_QUOTE
The leishu are composed of sometimes lengthy citations from other works and often contain copies of entire works, not just excerpts. The works are classified by a systematic set of categories, which are further divided into subcategories. Leishu may be considered anthologies, but are encyclopedic in the sense that they may comprise the entire realm of knowledge at the time of compilation.
#+END_QUOTE
The efficient use of the leishu requires an indexing system, a table of content, etc. Very interestingly, the scroll will be abandoned and the codex will generalize in China around that time, as observed by Ann Blair in her book /TOO MUCH TO KNOW/, Yale Univ. Press, 2010 (pp. 28-31).
Most of the leishus *were printed* (from the IXth century on!). The picture on the right side (a banknote printing plate) is there to remind us of who was (by far) the most advanced at that time. The Chinese were of course printing their leishus on paper that they discovered in the VIIIth century BCE.
*** The code generating the figure: :noexport:
#+BEGIN_SRC sh :results silent
cd imgs
wget https://upload.wikimedia.org/wikipedia/commons/e/e5/Yongle_Dadian_Encyclopedia_1403.jpg
wget https://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Beijing.China_printing_museum.Plate_of_Paper_money.Northern_Song_Dynasty.jpg/615px-Beijing.China_printing_museum.Plate_of_Paper_money.Northern_Song_Dynasty.jpg -O Matrice_billet_song.jpg
convert Yongle_Dadian_Encyclopedia_1403.jpg Matrice_billet_song.jpg +append -font FreeSans -pointsize 30 -gravity southwest -annotate +25-150 "Top: Yongle Dadian (1403) contains\n370 millions Chinese characters.\n\nRight: Banknote printing plate from\nNorthern Song Dynasty (960 – 1279)." Figure_W1_S2_6.jpg
rm Yongle_Dadian_Encyclopedia_1403.jpg Matrice_billet_song.jpg
#+END_SRC
** Getting organized by using the right slot
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Placcius_cabinet_TabIV.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Placcius' closet again (Placcius, Vincent, 1642-1699. /De arte excerpendi vom gelahrten Buchhalten/, 1689. Houghton Library, Harvard University.)
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
Now that we briefly reviewed the timeline of the main navigation elements of the books---navigation elements that can of course be applied to our lab/note-books---we come back to the paper slips and cards as notes media.
We see (again) Placcius' and Leibniz's closet since it displays both the benefits and the shortcomings of media that hold *a single note*.
Obvious shortcomings are:
- Paper slips and cards get easily lost.
- They are essentially useless if they are not *classified* in addition to being filed.
These problems are solved by Placcius' cabinet, the content of which is fundamentally accessed through the index.
Clear benefits are:
- Paper slips can be easily reorganized when they contain information on several subjects.
- Paper slips can be directly pasted in a book when composing an anthology or a compendium.
This last technique (pasting when making an anthology) was systematically used by the Renaissance polymath [[https://en.wikipedia.org/wiki/Conrad_Gessner][Conrad Gessner]] (1516-1565) who even got his paper slips by cutting parts of pages from books (don't do that with library books)!
** Constructing a notebook index the John Locke way
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/MethodeLocke1.jpg]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
My own notebook is used here for illustration.
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
We will now learn about an index construction technique due to [[https://en.wikipedia.org/wiki/John_Locke][John Locke]] (1632-1704), the grand-father of liberalism and a major investor in the /Royal African Company/, the largest company in the [[https://en.wikipedia.org/wiki/John_Locke#Constitution_of_Carolina][slave-trade]] business at that time...
The indexing method is here illustrated using my own notebook. The two pages that are displayed describe the structure of a dataset in the [[https://www.hdfgroup.org/][HDF5]] format on the left side and the corresponding structure (designed to map the former one) of a =data frame= object of the [[https://www.r-project.org/][R]] language. This dataset contain *calcium* concentration measurements made in *neurons*. This notes were taken while writing some computer *code* to analyze the data.
The precise content of the pages does not matter here in order to understand how Locke's method works. The important points are:
- The pages are numbered (we are seeing here pages 86 and 87).
- Keywords are written at the bottom of the page: *code*; *neuro*; *calcium*.
This method can be applied after note-taking, you just need to have few pages left at the end of your notebook. That's in fact what I did since I had started filling my notebook before learning about the method (I learned about while preparing the French version of this lecture last September).
** Locke's method continued
#+ATTR_LATEX: :width 0.8\textwidth
[[../assets/img/MethodeLocke2.jpg]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The last pages of my notebook with the index.
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
We know the index. It is located at the end of the notebook although Locke recommends placing it at the beginning. Since I did not know about the method when I started the notebook, I had to place it at the end...
The idea is to enter the keywords used in the notebook based on their *first letter* and the *first vowel following the first letter*.
The index is therefore made of the 26 letters (you see letters "A" to "R" here, the remaining ones are on the next page) subdivided the five most common vowels ("y" goes together with "i" in that case).
Pages 86 and 87 contained the keyword *code* that goes into the entry "Co" of the index (you see "86-89" because the following pages also concern code for the same project). The keyword *Neuro* giving an entry on line "Ne", while the keyword *Calcium* gives an entry on line "Ca".
The keyword *Criquet* (not shown above) gives an entry on line "Ci".
It is also a good idea to list the set of keywords used in the notebook on the page preceding or following the index.
** Conclusions of the historical overview
Since it is hard (for me at least) to use paper as a medium for note-taking, learning from "Newton's giants" should save us from reinventing the wheel (and getting it square).
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
We should nevertheless use digital media as much as possible (while keeping in mind what we just learned) since they provide:
- more organizational and structural flexibility,
- reliable archiving tools,
- powerful indexing tools.
* M1-S3: From text files to lightweight markup languages
** Section introduction
:PROPERTIES:
:BEAMER_ENV: note
:END:
We now start the "technical" part of this lecture with the tools that computers provide for note-taking like [[https://en.wikipedia.org/wiki/Text_file][text files]] and [[https://en.wikipedia.org/wiki/Lightweight_markup_language][lightweight markup languages]].
** What is a /text file/ or /text format/?
- From a practical point of view, a [[https://en.wikipedia.org/wiki/Text_file][text files]] /gives something readable/ when opened with a [[https://en.wikipedia.org/wiki/Text_editor][text editor]].
- A [[https://en.wikipedia.org/wiki/Text_editor][text editor]] enables us to create and modify text files (nice circular definition!). It's a software like:
+ [[https://notepad-plus-plus.org/][Notepad++]] for =Windows=,
+ [[https://wiki.gnome.org/Apps/Gedit][gedit]] for =Unix/Linux= systems (but it also runs on the other two),
+ [[https://en.wikipedia.org/wiki/TextEdit][TextEdit]] for =MacOS=.
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- I'm mentioning only open source software since it is hard to do genuinely reproducible research with anything else.
- A [[https://en.wikipedia.org/wiki/Word_processor][word precessor]] is more sophisticated than a /text editor/.
- *Warning* the native format used by word processors is rarely a /text format/. =Word='s =doc= and =docx= files and =Libreoffice= =odt= files /are not text files/.
** Example of a file that cannot be read with a text editor
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/pdf_opened_with_gedit.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
A =pdf= file (the file shown right now with a pdf reader) opened with =gedit=.
** A text file opened with a text editor
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/source_file_opened_with_gedit.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
A =markdown= file (a source file for this lecture) opened with =gedit=.
** Why should we use text files?
Characters contained in text files are now typically encoded in [[https://en.wikipedia.org/wiki/UTF-8][UTF-8]].
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
*This implies that*:
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- It is "always" possible to read these files with a text editor /even years after their creation/.
- [[https://en.wikipedia.org/wiki/Desktop_search][Desktop search]] and [[https://en.wikipedia.org/wiki/Version_control][version control]] software work /very efficiently/ with them.
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
*Unless you run into serious memory problems, use text files, always.*
** Problems with simple text files
- The "simple" text file precludes the use of nice navigation tools like [[https://en.wikipedia.org/wiki/Hyperlink][hyperlinks]].
- It is not possible to emphasize a word with a *bold* or an /italic/ font.
- If several persons work on the same text, they can't correct each other by \sout{striking through} text.
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
These limitations, combined with the benefits of text files, led computer scientists to develop [[https://en.wikipedia.org/wiki/Markup_language][markup languages]].
** A trivial example is the HTML language.
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/HTML_viewed_with_qutebrowser.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Wikipedia [[https://en.wikipedia.org/wiki/HTML][HTML]] page viewed with [[http://www.qutebrowser.org/][qutebrowser]] [[https://en.wikipedia.org/wiki/Web_browser][web browser]].
** An HTML file opened with a text editor
#+ATTR_LATEX: :width 0.9\textwidth
[[../assets/img/HTML_opened_with_gedit.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The Wikipedia HTML page opened with =gedit=. Markup languages were not designed to be read by humans.
*** Note
:PROPERTIES:
:BEAMER_ENV: note
:END:
The content of files written with a markup language are typically processed by a dedicated software like a web browser or converted into a format for which readers are available like \LaTeX{} files that get "compiled" into PDF files.
If you look carfuly the last figure, you can find the text of the first main paragraph of the previous figure.
**
We can summarize our problem as follows:
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- Text files are attractive for note-taking.
- Markup languages provide a much better "reading experience" when viewed with the proper "browser".
- Markup language files are text files, *but* usually require dedicated editing software if we want to modify them.
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
Is it possible to combine the benefits of "simple" text files with the reading comfort of markup languages?
** Lightweight markup languages: the idea
A [[https://en.wikipedia.org/wiki/Lightweight_markup_language][lightweight markup language]] is:
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- A /markup language/ with a *simple syntax*.
- A language designed to be *easily edited* with a /text editor/.
- A language *easily read* without a browser.
** =Markdown= as an example
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Markdown_syntax.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The syntax basics from [[https://en.wikipedia.org/wiki/Markdown][Wikipedia]], see also "Mastering Markdown" (a 3 min read) from [[https://guides.github.com/features/mastering-markdown/][GitHub]].
** =Markdown= is not the only lightweight markup language
Among the "most popular":
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- [[https://en.wikipedia.org/wiki/MediaWiki#Markup][MediaWiki]] used by Wikipedia (but files are not stored in text format!).
- [[https://www.dokuwiki.org/dokuwiki#][DokuWiki]] like =MediaWiki= but stored in text format.
- [[http://docutils.sourceforge.net/rst.html][reStructuredText]] used for the [[https://www.python.org/][python]] documentation.
- [[http://www.methods.co.nz/asciidoc/][AsciiDoc]].
- [[https://orgmode.org/][Org mode]], my favorite, but it requires learning [[https://www.gnu.org/software/emacs/][emacs]] (a good thing to do, if you have time for it).
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
The good news is that you don't need to be too nervous about choosing the "right" language, thanks to [[https://pandoc.org/][pandoc]] you can convert one into any other!
** Summary of this section
Thanks to lightweight markup languages we will be able to:
#+BEGIN_EXPORT latex
\vspace{0.2cm}
#+END_EXPORT
- Work mostly with text files.
- Write our notes quickly with any editor.
- Organize our notes.
* M1-S4: Notes (and codes) that are archived but can evolve with version control systems
** Introduction of this section
- The tools we are going to discuss should appeal to a much wider audience than the reproducible research community.
- Anyone working with text is concerned, even more so when this work is done in collaboration.
- *The longevity issue of notes and texts is in no way new*.
- The humanists and scholars of the early modern period who specialized in text compilations were literally obsessed by this problem and used it to justify their work.
- Their solution was to use multiple copies, as we now do with a different medium.
- We should nevertheless remain humble, the paper (and parchment) medium used by humanists has demonstrated its capability to last.
- When it comes to making notes evolve, I think we can say that some real progress was recently made.
** The nightmare: changing a text on paper medium
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png]]
***
:PROPERTIES:
:BEAMER_COL: 0.48
:BEAMER_ENV: block
:END:
Manuscript of /Dangerous Liaisons/ (/Les liaisons dangereuses/) by Pierre Choderlos de Laclos (p. 258, BNF Gallica).
There is clearly a very limited number of changes one can bring in that way!
** Changing a text with a word processor
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/LibreOffice_notes_pour_CLOM_diff_origine.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
An early version of this lecture (in French) edited with =LibreOffice=.
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
We see a way of working in collaboration on a text: most word processing software have a way to follow changes brought to the text.
This is not the solution I recommend but this is probably the most widely known concurrent version facility.
Notice the buttons at the bottom left. They appear when you navigate in /view/ -> /Toolbars/ -> /track changes/.
This "solution":
- is easy to implement,
- /does not generate text files/
- does not take care of archiving the files.
** Making change with a "wiki engine"
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Dokuwiki_notes_pour_CLOM.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The personal wiki (using the [[https://www.dokuwiki.org/dokuwiki#][dokuwiki]] engine) I experienced while preparing the French version of this lecture.
*** Details
:PROPERTIES:
:BEAMER_ENV: note
:END:
I started using [[https://www.dokuwiki.org/dokuwiki#][dokuwiki]] for this lecture, it is therefore simple enough to learn.
=Dokuwiki= uses a test format.
**
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Dokuwiki_notes_pour_CLOM_historique2.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Clicking /previous versions/ (/anciennes révisions/) gives access to the list of changes done when and by whom. If I now select two versions...
**
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Dokuwiki_notes_pour_CLOM_diff.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
I see the differences between the two versions. You obtain the same thing on Wikipedia by clicking on /View History/.
** Pros and cons
- A solution with a strong record for collaborative projects (Wikipedia).
- A text format is used when working with =Dokuwiki=.
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
- A single page can be modified at a time.
** Version Control Systems
I now come to the most "sophisticated" solution:
- A dedicated software, [[https://git-scm.com/][git]], is used to manage the successive versions of a *set* of files in *different formats* (text, images, etc.). In fact, file arborizations can be managed.
- =git=-like software requires a repository, that can be built on the user's computer, but is usually on a dedicated server like [[https://github.com/][GitHub]] or [[https://gitlab.com/][GitLab]].
- The repository allows several people to work on the same project and to exchange their modifications. Each project member has a *full copy* of the repository (dating back to his/her last /synchronization/).
**
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/GitLab_Commits.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
The [[https://gitlab.com/][GitLab]] interface containing the files of this presentation.
**
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/GitLab_Diff.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Modifications are easily visualized...
**
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/GitLab_Formating.png]]
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
Text files entered with a lightweight markup language get automatically formatted (an example with =org=).
** Pros and cons
- A "sophisticated" approach that takes a bit more time to learn and master than the other two.
#+BEGIN_EXPORT latex
\vspace{0.25cm}
#+END_EXPORT
- A strong record for collaborative projects (Linux kernel,...).
- Can manage modifications on several files at once.
- A centralized version *copied* by each member of the project.
* M1-S5: Finding one's way with tags and desktop search application
** Leibniz again
"It seems to me that the apparatus of contemporary scholarship is comparable to a very large store which, though it keeps a great variety of goods, yet is totally confused and in disorder, because all items are mixed up, because no numbers or letters of an index are displayed, and because inventories or account ledgers which could throw some light on the matter are missing."
"The larger the mass of collected things, the less will be their usefulness. Therefore, one should not only strive to assemble new goods from everywhere, but one must endeavor to put in the right order those that one already possesses."
** Finding one's way in a text file
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/recherche-avec-editeur.png]]
** Finding one's way in a notebook
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/IndexCahierLocke.jpg]]
** Finding one's way in a cards collection
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Placcius_cabinet_TabIV.png]]
** Problems, limitations, solutions?
- A single document at a time
- Numerical files indexation
- Tagging numerical files in general (not only text format files)
- Using a desktop search application for indexation and general search
** Finding an arbitrary word with a desktop search application (=DocFetcher=)
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Trouver_un_mot_avec_DocFetcher.png]]
** A problem: overabundance
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Trouver_calcium_avec_DocFetcher.png]]
** Adding tags / keywords in a text file (=Markdown=)
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Ajout_etiquette_avec_Markdown.png]]
** Finding a tag with a desktop search application (=DocFetcher=)
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Trouver_etiquette_avec_DocFetcher.png]]
** Image files contain metadata
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Metadonne_fichier_index.jpg]]
** Metadata can be set
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Metadonne_fichier_index2.jpg]]
** Desktop search applications can read metadata
#+ATTR_LATEX: :width 1.0\textwidth
[[../assets/img/Trouver_etiquette_avec_DocFetcher2.jpg]]
** Conclusions
Using:
\vspace{0.25cm}
- tags / keywords inserted in our numerical files (text, images, =PDF=, etc.)
- a desktop search application
\vspace{0.25cm}
we can (perhaps) avoid "Leibniz's nightmare".
../../bin/Makefile
\ No newline at end of file
#+TITLE: La vitrine et l'envers du décor : \newline Le document computationnel
#+AUTHOR: @@latex:{\large Arnaud Legrand} \\ \vspace{0.2cm}LIG, Univ. Grenoble Alpes, CNRS, Inria\\ \vspace{0.2cm} \texttt{arnaud.legrand@imag.fr}@@
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+STARTUP: beamer indent
#+LANGUAGE: fr
#+PROPERTY: header-args :eval no-export
#+OPTIONS: H:2 tags:nil
#+OPTIONS: num:t toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
# #+OPTIONS: author:nil email:nil creator:nil timestamp:t
#+TAGS: noexport(n)
#+EXCLUDE_TAGS: noexport
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \setbeamercovered{invisible}
#+LATEX_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Où en sommes nous ?}\tableofcontents[currentsection]\end{frame}}
#+LATEX_HEADER: \beamertemplatenavigationsymbolsempty
#+LATEX_HEADER: \usepackage{tikzsymbols}
#+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]}
#+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]}
#+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]}
#+LATEX_HEADER: \usepackage{color,soul}
#+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7}
#+LATEX_HEADER: \sethlcolor{lightblue}
#+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}}
#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \newcommand\SoulColor{%
#+LATEX_HEADER: \let\set@color\beamerorig@set@color
#+LATEX_HEADER: \let\reset@color\beamerorig@reset@color}
#+LATEX_HEADER: \makeatother
#+LATEX_HEADER: \let\hrefold=\href
#+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}}
#+LaTeX: \let\alert=\structure % to make sure the org * * works
#+LaTeX: \begin{frame}{Plan du cours}\tableofcontents\end{frame}
* Test et informations :noexport:
** Images
# - file:assets/img/donald_trump.jpg :: [[https://upload.wikimedia.org/wikipedia/commons/d/d4/Donald_Trump_%252825653047910%2529.jpg][Wikimedia]]
# - file:assets/img/trump_vs_obama_inauguration.png :: Screenshot from the
# [[https://www.nytimes.com/interactive/2017/01/20/us/politics/trump-inauguration-crowd.html][NY Times]]
# - file:assets/img/in_science_we_trust.jpg :: crop from [[http://drrichswier.com/2014/04/23/atheism-evolution-and-secular-humanism-masquerading-as-science-against-the-bible-and-creation/][the blog of a
# conservative]].
# - file:assets/img/les_decodeurs.png :: Montage à partir du site
# http://www.lemonde.fr/les-decodeurs/ le 30 juillet.
Origin of every image used in this series of slides:
- PhD Comics:
- [[file:../assets/img/phd010708.png][phd010708.png]]: http://phdcomics.com/comics/archive.php?comicid=961
c'est du fan art, là ;) je cite phdcomics dans la vidéo donc je
pense qu'on est bon et je doute qu'il vienne nous embêter vu le sujet.
- [[file:../assets/img/in_science_we_trust.jpg][in_science_we_trust.jpg]]: https://www.google.fr/search?client=firefox-b&dcr=0&biw=1450&bih=783&tbm=isch&sa=1&q=in+science+we+trust&oq=in+science+we+trust&gs_l=psy-ab.3..0i13k1j0i30k1l3.2692.5748.0.5946.6.5.0.0.0.0.694.1147.0j3j5-1.4.0....0...1.1.64.psy-ab..2.4.1144...0i7i30k1.0.JVlXKVLc9a4#imgrc=bt5vbb5C4e9fHM
puis http://www.patheos.com/blogs/unreasonablefaith/2012/03/a-better-motto/in-science-we-trust-coin/ normalement
- [[file:../assets/img/Researcher-test.jpg][Researcher-test.jpg]]: https://fr.wikipedia.org/wiki/Imagerie_par_r%C3%A9sonance_magn%C3%A9tique_fonctionnelle#/media/File:Researcher-test.jpg
- [[file:../assets/img/flipping_fiasco.png][flipping_fiasco.png]]: https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf
- [[file:../assets/img/in_science_we_trust_small.jpg][in_science_we_trust_small.jpg]]: voir file:../assets/img/in_science_we_trust.jpg
-
[[file:../assets/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg][box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg]]:
trouvé à la base sur
https://politicsinpinkdotcom.files.wordpress.com/2016/12/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg
mais visiblement achetable ici:
http://www.istockphoto.com/fr/vectoriel/femme-laissant-d%C3%A9mons-de-la-poitrine-gm165517954-24325536
*à acheter*.
- [[file:../assets/img/in_code_we_trust.jpg][in_code_we_trust.jpg]]: https://www.google.fr/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiJ2ZfIi4fXAhUJVxQKHb-xCBoQjRwIBw&url=https%3A%2F%2Fwww.spreadshirt.com%2Fa%2Bprogrammer%2Blife-A14770086&psig=AOvVaw1ZDWatztzt2-ycU-7qy-Gh&ust=1508859944930121
- [[file:../assets/img/iceberg.jpg][iceberg.jpg]]: http://www.jdubuzz.com/files/2016/03/iceberg-principle.jpg
- [[file:../assets/img/iceberg_publication-1.png][iceberg_publication-1.png]] and others alike:
- Crédits Juliana Freire: slides 2 à 5 de http://catt.nyu.edu/sites/default/files/files/Provenance_In_Data_Exploration.pdf
- https://en.wikipedia.org/wiki/Large_Hadron_Collider#/media/File:CERN_LHC.jpg
- https://fr.wikipedia.org/wiki/T%C3%A9lescope#/media/File:Hubble_01.jpg
- https://en.wikipedia.org/wiki/DNA_sequencer#/media/File:DNA-Sequencers_from_Flickr_57080968.jpg
- https://cnet3.cbsistatic.com/img/Ly9WLBFBoWxby2UraBktS1ftx90=/2014/06/10/1bd4587d-63a5-4d1a-b2fe-c6b692daa9bb/plantsensors-1.jpg
- http://www.cerfacs.fr/avbp7x/img/FULLSCREEN/explosion-masri_incite_1Md.png
- https://fr.wikipedia.org/wiki/Treemap#/media/File:Carte-proportionnelle-france.png
- https://fr.wikipedia.org/wiki/Repr%C3%A9sentation_graphique_de_donn%C3%A9es_statistiques
- https://fr.wikipedia.org/wiki/Visualisation_d%27informations#/media/File:InteractionAandB.png
- [[file:../assets/img/RStudio-Logo-Blue-Gradient.png and file:../assets/img//knitr.png][RStudio-Logo-Blue-Gradient.png and file:../assets/img//knitr.png]]: https://www.rstudio.com/about/logos/
- [[file:../assets/img/jumping_penguin.png][jumping_penguin.png]]: http://www.istockphoto.com/be/photo/saut-penguins-de-papou-sur-iceberg-gm466554153-33737494
*à acheter*.
* Internal refs/notes :noexport:
** phdcomics
- version control : http://phdcomics.com/comics/archive.php?comicid=1531
- http://r-bio.github.io/intro-git-rstudio/
- https://xkcd.com/1597/
- http://phdcomics.com/comics/archive.php?comicid=961
** Pandoc
- https://enacit1.epfl.ch/markdown-pandoc/
- https://www.markdowntutorial.com/
** Jupyter
*** Install
#+begin_src sh :results output :exports both
sudo apt-get install jupyter-notebook
sudo apt-get install python3-pip
sudo apt-get install python3-matplotlib python3-numpy
#+end_src
Then following https://github.com/kirbs-/hide_code (note sure this is
as useful as I thought though :()
#+begin_src sh :results output :exports both
sudo pip3 install hide_code
sudo jupyter-nbextension install --py hide_code
jupyter-nbextension enable --py hide_code
jupyter-serverextension enable --py hide_code
#+end_src
Pour que l'export via latex fonctionne:
#+begin_src shell :results output :exports both
sudo apt-get install wkhtmltopdf
sudo apt-get install texlive-xetex
#+end_src
Pour avoir R:
#+begin_src shell :results output :exports both
sudo apt-get python3-rpy2
#+end_src
Pour avoir le [[https://github.com/brospars/nb-git][git push/pull dans les notebooks]]:
#+begin_src shell :results output :exports both
jupyter nbextension install https://raw.githubusercontent.com/brospars/nb-git/master/nb-git.js
jupyter nbextension enable nb-git
#+end_src
Autres extensions (code-folding): https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook
#+begin_src shell :results output :exports both
pip3 install jupyter_contrib_nbextensions
# jupyter contrib nbextension install --user # not done yet
#+end_src
https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook
(collapsible headings)
Pour avoir le kernel R (from https://irkernel.github.io/installation/):
#+begin_src R :results output graphics :file (org-babel-temp-file "figure" ".png") :exports both :width 600 :height 400 :session *R*
install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
# Don’t forget step 2/2!
IRkernel::installspec()
#+end_src
*** Export
http://markus-beuckelmann.de/blog/customizing-nbconvert-pdf.html
https://nbconvert.readthedocs.io/en/latest/
#+begin_src sh :results output :exports both
ipython3 nbconvert --to pdf Untitled.ipynb
#+end_src
*** Pour aller plus loin
- https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
* M2-S0: Le document computationnel
** La vitrine et l'envers du décor: Le document computationnel
\vspace{-1cm}
\begin{flushright}
\includegraphics[width=7cm]{../assets/img/phd010708.png}
\end{flushright}
\vspace{-1cm}
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil Au choix :
- Jupyter
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
# Note:
# Pour vous convaincre de l'importance de cette traçabilité, je vais
# commencer par vous présenter quelques exemples récents de travaux dont
# les résultats ont été particulièrement controversés et discutés. Ils
# illustrent à quel point la capacité à pouvoir inspecter les méthodes
# utilisées pour produire tel ou tel résultat est essentielle.
# Comme nous le verrons, la plupart des problèmes rencontrés sont liées
# au calcul, qu'il s'agisse d'erreurs de programmations, de
# transformations de données peu rigoureuses, ou bien de procédures
# statistiques discutables.
# Une fois les origines de tous ces problèmes identifiées, je vous
# présenterai rapidement quelles bonnes pratiques mettre en oeuvre afin
# de les éviter.
# En particulier, je vous expliquerai ce que c'est que ce fameux
# document computationnel: un document qui permet de présenter
# agréablement des résultats à d'autres (ce que j'appelle la vitrine)
# mais aussi d'accéder à l'ensemble des calculs sous-jacents (ce que
# j'appelle l'envers du décor).
# Il existe plusieurs formats de tels documents et nous vous proposons
# trois environnements permettant d'en produire facilement. Ces trois
# environnements se distinguent par le niveau de technicité nécessaire à
# leur mise en oeuvre. À vous de choisir celui qui vous convient le
# mieux quitte à en essayer un autre plus tard.
# Jupyter, le premier, a été intégré au MOOC et au gitlab et ne
# nécessite donc aucune installation de votre part. C'est donc le plus
# simple à mettre en oeuvre. L'ensemble des données et des calculs sera
# hébergé sur nos serveurs, mais vous pourrez y accéder et les récupérer
# sur votre propre ordinateur à tout moment via le gitlab si vous le
# souhaitez. Jupyter vous permettra de gérer des notebooks et d'utiliser
# le langage python3 ou bien le langage R.
# Rstudio, le second, est un environnement de développement spécifique
# au langage R. Il vous faudra l'installer sur votre machine et
# synchroniser vos productions avec le gitlab. C'est un logiciel très
# bien maintenu, qui fonctionne aussi bien sous linux et mac que sous
# windows et son installation ne devrait pas poser de difficulté
# particulière. Si vous êtes déjà familier avec le langage R, c'est
# l'option que je vous recommande. L'avantage de cette approche est que
# vous aurez à la fin du MOOC sur votre machine un environnement de
# travail directement prêt à l'emploi. Avec Rstudio, il est également
# possible d'utiliser occasionnellement du code python mais si vous avez
# l'intention de faire principalement du python, il vaut mieux utiliser
# jupyter.
# Enfin, OrgMode, est clairement celui qui est le plus délicat à mettre
# en oeuvre mais c'est aussi celui que Konrad, Christophe et moi-même
# utilisons quotidiennement aussi bien pour gérer notre cahier de
# laboratoire que pour rédiger des articles ou des notes
# techniques. Nous nous sommes donc dit qu'il pouvait être intéressant
# de vous le présenter. OrgMode nécessite l'installation d'Emacs, un
# éditeur de texte qui révèle toute sa puissance dans un environnement
# linux ou mac. Il permet de combiner très efficacement différents
# langages et est par certains aspects moins limité que les deux
# précédents. Cette option est à réserver à un public averti mais le jeu
# en vaut la chandelle.
# Une fois familiarisé avec un de ces environnements, nous vous
# proposerons une petite séance pratique dont l'objectif sera de
# produire un petit document computationnel.
# Les dernières séquences peuvent être visionnées indépendemment et
# traitent de sujets un peu plus techniques, en particulier de comment
# utiliser de tels outils avec vos co-auteurs qui peuvent avoir leurs
# propres habitudes, ou de comment produire des documents avec un style
# bien spécifique.
# Nous concluons enfin ce module avec une comparaison de ces différents
# outils et une présentation des bénéfices d'une utilisation
# quotidienne.
* M2-S1: Exemples récents d'études assez discutées
** Le document computationnel
1. *Exemples récents d'études assez discutées*
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil. Aux choix :
- Jupyter
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Exemples récents d'études assez discutées
file:../assets/img/in_science_we_trust.jpg
# Note:
# Je vous avais promis quelques exemples récents de travaux dont les
# résultats ont été particulièrement controversés et discutés. C'est ce
# que je vais vous présenter dans cette séquence.
** Économie : politiques d'austérité (1/2)
*** 2010
# - /gross debt [..] exceeding 90 percent of the economy has a
# significant negative effect on economic growth/
#+BEGIN_QUOTE
Lorsque la dette extérieure brute atteint 60 pourcents du PIB, la
croissance annuelle d'un pays diminue de deux pourcents.
[..] pour des niveaux de dette extérieure dépassant 90 pourcents du
PIB, la croissance annuelle est à peu près divisée par deux.
\flushright -- [[https://en.wikipedia.org/wiki/Growth_in_a_Time_of_Debt][Reinhart et Rogoff]]: /Growth in a Time of Debt/
#+END_QUOTE
# - données non publiées mais disponibles sur demande
# Note:
# Commençons par des travaux en économie. 2007: crise des subprimes aux
# États-Unis. De 2008 à 2009, deux économistes prestigieux, Carmen
# Reinhart et Kenneth Rogoff présentent leurs travaux et annoncent que
# la crise financière est loin d'avoir produite toutes ses
# conséquences. En 2010, ils publient un article intitulé "Growth in a
# Time of debt" qui étudie le lien entre dette et croissance.
# Leurs principales conclusions sont que lorsque lorsque la dette
# extérieure d'un pays dépasse 90% du PIB, les conséquences sur la
# croissance sont dramatiques.
# De nombreux politiciens, journalistes et activistes s'appuient sur cet
# article pour soutenir la mise en place de politiques d'austérité
# budgétaire.
** Économie : politiques d'austérité (2/2)
*** 2013
# - Herndon, Ash and Pollin: /While using RR's working spreadsheet, we
# identified *coding errors*, *selective exclusion* of/ /available data,
# and *unconventional* weighting of summary *statistics*./
#+BEGIN_QUOTE
En utilisant leurs feuilles Excel,
nous avons identifié des *erreurs de programmation*, des *exclusions*
de certaines données, et des pondérations *statistiques non
conventionnelles*.
\flushright -- Herndon, Ash et Pollin
#+END_QUOTE
# #+BEGIN_EXPORT html
# <br/>
# #+END_EXPORT
# - Wray: /combining data across centuries, exchange rate regimes,
# public and private/ /debt, and debt denominated in foreign currency
# as well as domestic currency/
#+BEGIN_QUOTE
R&R combinent des données de siècles
différents, des régimes de changes différents, des dettes privées et
publiques, et des dettes exprimées en monnaies étrangères et
nationales.
\flushright -- Wray
#+END_QUOTE
# Note:
# Ces seuils de 90% ainsi que l'ampleur des conséquences sont très
# discutés, d'autant plus que certains chercheurs échouent à obtenir des
# résultats similaires en utilisant les données disponibles
# publiquement. Ils demandent donc à Reinhart et Rogoff l'ensemble des
# données et des feuilles de calculs utilisées dans l'étude et ces
# derniers finissent par leur fournir.
# Dans ces feuilles, des erreurs de calcul évidentes apparaissent
# rapidement ainsi que des traitement de données assez douteux
# (exclusion de données, pondérations suspectes, etc.).
# Reinhart et Rogoff répondent point par point en expliquant que ces
# quelques erreurs ne changent rien au résultat final, que leur façon de
# calculer les statistiques sont tout à fait standard.
# En fait, une fois les détails révélés, pour beaucoup de chercheurs ces
# calculs n'ont pas beaucoup de sens, les valeurs utilisées sont très
# discutables, et il est malhonnête d'utiliser ces travaux pour
# justifier une politique d'austérité budgétaire.
# Mais le mal est fait. Pendant plus de trois ans, l'austérité n'est pas
# présentée comme un choix mais comme une nécessité. Et quand bien même
# l'article original est considéré comme non pertinent par les
# économistes, ces idées ont fait leur chemin et sont difficiles à
# détrôner.
# Au delà du caractère idéologique de ce genre de travaux, une des
# raisons pour lesquelles ce débat a mis autant de temps à avoir lieu
# est lié à la non publication de l'ensemble des procédures de calcul et
# des données utilisées, pratique courante en économie. Sous les feux
# de la rampe, les auteurs ont bien été forcés de mettre à disposition
# ce qui sous-tendait leur travaux mais sans pression médiatique
# particulière, en général, rien ne se passe...
** IRM fonctionnelle
# file:assets/img/Irmf.jpg&size=cover
- 2010 : [[https://www.researchgate.net/publication/255651552_Neural_correlates_of_interspecies_perspective_taking_in_the_post-mortem_Atlantic_Salmon_an_argument_for_multiple_comparisons_correction][Bennett et al. et le saumon mort]] $\smiley$
- 2016 : [[http://www.pnas.org/content/113/28/7900.abstract][Eklund, Nichols, and
Knutsson]]. [[http://www.sciencealert.com/a-bug-in-fmri-software-could-invalidate-decades-of-brain-research-scientists-discover][A
bug in fmri software could invalidate 15 years of brain research]]
(/40 000 articles/)
- 2016 : Mais [[https://www.cogneurosociety.org/debunking-the-myth-that-fmri-studies-are-invalid/][c'est plus subtil que \c{c}a]]. [[http://blogs.warwick.ac.uk/nichols/entry/bibliometrics_of_cluster/][Nichols]]. /\approx 3 600
études concernées/
Des méthodes statistiques à améliorer mais pas de
remise en cause fondamentale.
file:../assets/img/Researcher-test.jpg
# Note:
# Continuons avec un autre exemple: l'imagerie cérébrale, qui permet
# d'observer l'activité du cerveau d'un individu lorsqu'il effectue une
# tâche cognitive et ainsi de mieux comprendre la structure et le
# fonctionnement du cerveau. L'IRM fonctionnelle est l'une de ces
# techniques et mesure de très faibles variations locales du taux
# d'oxygénation du sang dans le cerveau.
# En 2010, Craig Bennett et ses encadrants ont une idée saugrenue. Ils
# placent un saumon mort dans un appareil d'IRM et lui présentent des
# images. Étonnamment, ils observent des signes d'activité cérébrale, ce qui est
# pour le moins surprenant puisque le saumon est bel et bien mort. Aussi
# drôle que cela puisse paraître, Bennett et ses encadrants savent très
# bien ce qu'ils font. Les données brutes obtenues lors d'une IRM sont
# très bruitées et toute une série de calculs et de tests statistiques
# sont appliqués pour transformer ces données en images
# intelligibles. Mais il arrive que le bruit soit trop important, que la
# machine soit mal calibrée, que la procédure de calcul soit inadaptée
# et que des signaux apparaissent fortuitement.
# Leur article rédigé avec un ton très humoristique fait sensation car
# il met le doigt sur des faiblesses méthodologiques.
# L'an dernier, des collègues me sachant intéressé par ces problèmes de
# réplication me font suivre un article récent assez alarmant. Cet article présente un
# problème dans les procédures statistiques utilisées dans les logiciels
# d'analyse d'IRMf les plus courants, ce qui remet potentiellement en
# cause les résultats obtenus ces quinze dernières années. Étant donnée
# l'ampleur de l'erreur, les auteurs concluent que 40,000 articles
# pourraient être concernés. De plus, les données étant très
# volumineuses dans ce domaine, elles ne sont pas archivées et il ne
# sera pas possible de simplement les réanalyser. L'ensemble des
# expériences seraient à refaire...
# En fait, suite aux retours qui leurs sont faits, les auteurs revoient
# rapidement à la baisse leurs estimations assez alarmistes.
# Au final, le problème méthodologique et la capacité à vérifier les
# études suite à des erreurs de calcul reste entier même s'il ne remet
# pas pour autant en cause l'ensemble des résultats obtenus ces
# dernières années.
** Les fausses structures de protéines
#+LaTeX: \begin{columns}\begin{column}{6.3cm}
*Geoffrey Chang* : étude de la structure de protéines présentes dans
des bactéries résistant aux antibiotiques.
\small MsbA de Escherichia Coli (Science, 2001), Vibrio cholera
(Mol. Biology, 2003), Salmonella typhimurium (Science, 2005)
#+LaTeX: \end{column}\begin{column}{3.5cm}
#+LaTeX: \hspace{-.3\linewidth}\includegraphics[width=1.2\linewidth]{../assets/img/flipping_fiasco.png}
#+LaTeX: \end{column}\end{columns}\medskip
*2006* : Incohérences, alertes, puis 5 rétractations
#+BEGIN_QUOTE
a homemade data-analysis program had flipped
two columns of data, inverting the electron-density map from which his
team had derived the protein structure.
\flushright -- [[https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf][une "erreur de programmation"]]
#+END_QUOTE
# Note:
# Un dernier exemple, cette fois-ci en cristallographie.
# Geoffray Chang est un chercheur à la trajectoire fulgurante,
# récompensé par de nombreux prix. Son équipe, basée au Scripps
# Institute à l'Université de Californie San Diego, a publié une série
# d'articles dans des revues prestigieuses et détaillant la structure de
# certaines protéines présentes dans les membranes de cellules. Ces
# protéines jouent un rôle essentiel dans la résistance de ces bactéries
# à certains médicaments et connaître leur structure est une étape
# importante dans la compréhension de leur fonctionnement.
# Hélas, peu de temps après, d'autres équipes de chercheurs qui étudient
# des protéines très similaires rapportent des structures anormalement
# différentes de celles publiées par Chang et son équipe. En lisant ces
# travaux Chang, horrifié, remonte vite à la source du problème.
# Un des codes d'analyse aurait inversé deux
# colonnes de données et ainsi inversé la répartition de la densité
# d'électrons à partir de laquelle la structure finale de la protéine
# est calculée. D'après Chang, ce code aurait été hérité d'un autre
# laboratoire et s'était également répandu depuis dans d'autres équipes.
# Même si toute l'acquisition des données avait été faite soigneusement,
# ce n'était pas le cas de l'analyse et ce petit grain de sable a
# conduit à la rétractation immédiate de 5 articles par Chang et son
# équipe. Ces publications ont eu un impact énorme sur la communauté, à
# tel point que plusieurs années après la rétractation, les résultats
# contradictoires avec ceux de Chang paraissaient suspects avaient du
# mal à être publiés.
** Crise de foi ?
#+LaTeX: \begin{columns}\begin{column}{6.3cm}
- [[http://www.nature.com/nrd/journal/v10/n9/full/nrd3439-c1.html?foxtrotcallback=true][Oncologie]] : "/plus de la moitié des études publiées, même dans des
journaux prestigieux, ne/ /peuvent être reproduites en laboratoire
industriel/"
- [[http://theconversation.com/we-found-only-one-third-of-published-psychology-research-is-reliable-now-what-46596][Psychologie]] : "réplication d'une centaine d'articles /seulement un
tiers de résultats cohérents/"
#+LaTeX: \end{column}\begin{column}{3.5cm}
#+LaTeX: \hspace{-.1\linewidth}\includegraphics[width=1\linewidth]{../assets/img/in_science_we_trust_small.jpg}
#+LaTeX: \end{column}\end{columns}\medskip
#+BEGIN_CENTER
*Lanceurs d'alerte* ou
*institutions malades* ?
#+END_CENTER
*** La _remise en cause_ fait partie du processus scientifique\pause
*** Tout comme la _rigueur_ et la _transparence_...
# Note:
# Il n'y a à ce jour pas un domaine des science qui ne soit épargné par
# ces difficultés à reproduire les travaux publiés. En oncologie, un
# article récemment publié rapporte que plus de la moitié des études
# publiées ne peuvent être reproduites en laboratoire industriel, et ce
# même si les études sont publiées dans des journaux prestigieux.
# En psychologie, les capacités à reproduire les résultats publiés sont
# également très basses.
# Le problème est méthodologique mais également certainement
# sociologique, lié à une pression productiviste trop importante. Mais
# attention aussi à ne pas donner non plus trop d'importance aux signaux
# d'alertes que nous venons de voir...
# Le problème est compliqué mais il faut garder à l'esprit que la remise
# en cause fait partie du processus scientifique. Il n'est donc pas
# surprenant que de telles difficultés de reproduction de travaux
# scientifiques soit présentes.
# Cependant, deux autres caractéristiques essentielles du processus
# scientifique sont la rigueur et la transparence et il est clair que
# dans l'ensemble des cas que nous venons de voir il manquait souvent
# l'un et l'autre...
* M2-S2: Pourquoi est-ce difficile ?
** Le document computationnel
1. Exemples récents d'études assez discutées
2. *Pourquoi est-ce difficile ?*
3. Le document computationnel : principe
4. Prise en main de l'outil. Au choix :
- Jupyter
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Pourquoi est-ce difficile ?
file:../assets/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg
# Note: Comme nous l'avons vu, reproduire les travaux de recherche, même
# publiés dans des revues prestigieuses est souvent assez
# difficile. Dans cette séquence, nous allons identifier les difficultés
# les plus communes.
** 1) Le manque d'informations
Expliciter :
+ *Sources* et *données*
#+BEGIN_CENTER
/Données non disponibles = résultats difficiles à vérifier/
#+END_CENTER
+ *Choix*
#+BEGIN_CENTER
/Choix non expliqués = choix suspicieux/
#+END_CENTER
#+LaTeX: \bigskip
*** Le cahier de laboratoire peut vous aider
# Note: La première source de difficultés rencontrées lors de tentatives
# de reproduction est tout simplement le manque d'informations.
# Si on ne prend pas soin d'expliciter comment on a obtenu nos données
# et qu'on les garde secrètes, il est certain qu'il va être difficile
# pour une tierce personne de vérifier si elle arrive aux mêmes
# conclusions ou pas.
# # C'est étrange car mettre les données utilisées à disposition permet au
# # lecteur d'en évaluer la qualité (voire d'y trouver des erreurs). Sans
# # cette évaluation, difficile pour le lecteur de savoir quelle confiance
# # avoir dans les conclusions de l'article.
# De même expliciter les choix effectués à chacune des étapes de l'étude
# s'avère essentiel. Quel protocole expérimental a été choisi et
# pourquoi ? Quelles données ont été conservées ? Quelles données ont
# été soigneusement écartées et pourquoi ? Quelle procédure statistique
# a été utilisée et les hypothèses sous-jacentes étaient elles
# raisonnables ? Etc.
# Après tout, on doit toujours faire des choix à un moment donné. Mais
# ne pas expliquer ces choix, même en étant rigoureux et de bonne foi,
# c'est prendre le risque que les lecteurs deviennent
# suspicieux. D'autre part, être totalement transparent sur ces choix,
# c'est permettre à d'autres (ou à vous-même) de décider s'il est
# nécessaire de revenir dessus ou pas
# Pour garder trace de tous ces choix et des informations sur ces
# données, le cahier de laboratoire un outil essentiel. Encore faut-il
# ensuite mettre ces informations à disposition, mais nous reviendrons
# sur ce point par la suite.
** 2) L'ordinateur, [[http://theconversation.com/how-computers-broke-science-and-what-we-can-do-to-fix-it-49938][source d'erreurs]]
- *Point and click* :
- *Les tableurs* : [[https://qz.com/768334/years-of-genomics-research-is-riddled-with-errors-thanks-to-a-bunch-of-botched-excel-spreadsheets/][erreurs de programmation]] et de manipulation de données
-
~Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein
Ligase~ \to ~MARCH1~ \to 2016-03-01 \to 1456786800
-
~2310009E13~ \to 2.31E+19
- *Pile logicielle complexe*
- *Bug* : /Programmer, c'est dur !/
# Note:
# La deuxième source de difficultés rencontrées lors de tentatives
# de reproduction de travaux est tout simplement les erreurs induites
# par l'utilisation effrénée des ordinateurs.
# Comme toute innovation technologique, les ordinateurs nous permettent
# d'aller plus vite, plus loin mais aussi de faire des erreurs plus
# facilement et plus rapidement...
# Au premier plan des sources d'erreurs, ces logiciels intuitifs où
# l'interaction se fait à la souris et qui ne permettent pas
# d'expliciter ce qui est calculé et à partir de quoi. Leur simplicité
# d'utilisation incite à les utiliser pour tout, même pour ce pour quoi
# ça n'est pas vraiment prévu.
# Il est par exemple très difficile de comprendre la logique du calcul
# ayant lieu dans une feuille excel pleine de macros. Bien sûr, il est
# possible de gérer des stocks et la comptabilité d'une entreprise avec
# un tableur, mais ceux qui ont déjà eu à faire à ce genre
# d'abominations savent qu'un ERP permet d'éviter bien des soucis. Et
# bien de la même façon, un tableur n'est pas le bon outil pour faire
# des statistiques ou du traitement de données !
# Tenez, quelques exemples d'anecdotes effroyables liées à l'utilisation
# d'un tableur. En génomique, il est bien pratique de donner des petits
# noms aux gènes tels que celui-ci. Celui-ci, c'est MARCH1. Seulement
# pas mal de tableurs croient bien faire en l'interprétant
# comme une date et par effet de bord comme le nombre de secondes
# écoulées depuis le 1er janvier 1970... L'identifiant de gène 231 000
# 9E13 se retrouve lui aussi fréquemment convertit en nombre. Alors bien
# sûr, il n'y a peut-être qu'une vingtaine de gènes concernés par ce
# genre de problème sur les 30,000 du génome humain, mais c'est quand
# même assez désagréable.
# De manière générale, il est courant de se reposer sur une pile
# logicielle complexe. Complexe et souvent mal maîtrisée. Combien
# d'études reposent ainsi sur des logiciels propriétaires, sortes de
# boites noires dont on ne maîtrise pas le contenu et qui appliquent
# aveuglement des procédures de calculs et de transformations de
# données?
# # - l'utilisation de telle ou telle méthode plutôt qu'une autre est
# # souvent discutable
# Alors, je ne suis pas en train de dire qu'il faut tout reprogrammer
# soi même. Ce n'est bien sûr par la meilleure façon d'échapper aux
# bugs. Dans les cas de l'étude Reinhart et Rogoff ou des fausses
# structures de protéines de Chang, les erreurs venaient de programmes
# maisons.
# Mais il me semble essentiel d'être en mesure de déterminer dans son
# analyse si chacune des briques est digne de confiance ou pas. Et si
# l'un des composants, par sa nature, l'interdit, il faut sérieusement
# songer à le remplacer.
** L'informatique, seule responsable ?
*Le manque de rigueur et d'organisation*
- Pas de backup
- Pas d'historique
- Pas de contrôle qualité
# Note:
# Enfin, la dernière cause méthodologique de non-reproductibilité et
# source d'erreurs est certainement le mangue de rigueur et
# d'organisation.
# Même si le stockage ne coûte plus rien de nos jours, la sauvegarde des
# données est souvent mal assurée et il est courant d'en perdre suite à
# une mauvaise manipulation, ou bien à la suppression de son compte
# informatique lors du passage d'une institution à une autre.
# En l'absence de mécanisme de gestion de version, il est courant
# de remplacer par inadvertance d'anciennes données par de nouvelles et
# de ne plus arriver à accéder à d'anciennes observations.
# Dans un certain nombre de domaines, l'utilisation de plans
# d'expériences randomisés ou de pré-études (study pre-registration),
# n'est absolument pas systématique. De même les bonnes pratiques de
# développement logiciel comme la revue de code ou l'intégration
# continue sont encore rarement appliqués au logiciels utilisés dans la
# recherche.
** Une dimension culturelle et sociale
#+BEGIN_QUOTE
\centering Article = version _simplifiée_ de la procédure
#+END_QUOTE
#+LaTeX: \bigskip
#+BEGIN_QUOTE
\centering
*Tracer* toutes ces informations et les *rendre disponibles* =
investissement conséquent
#+END_QUOTE
#+LaTeX: \bigskip
Si personne n'exige/n'inspecte ces informations, à quoi bon
s'embêter ?
# Note:
# Enfin, il serait naïf de ne pas évoquer la dimension culturelle et
# sociale du problème.
# Un article est une version simplifiée et intelligible des
# résultats. Certains diraient même la publicité... Une description de
# haut niveau est essentielle car elle permet de prendre du recul mais
# elle est devenue la norme alors que la technicité de la recherche
# actuelle est telle qu'il est clairement impossible de donner dans un
# document de 8 à 10 pages toutes les informations permettant de refaire
# les expériences et les analyses.
# - La description du protocole expérimental est souvent succincte
# - Les données sont généralement bien trop nombreuses pour être données
# in extenso et sont résumées à travers quelques courbes.
# - Les traitements statistiques appliqués pour parvenir à ces courbes
# ne sont décrits que rapidement.
# Alors, bien sûr il est possible de tracer toutes ces informations et
# de les mettre à disposition. À ceci près que cela demande du temps,
# voire beaucoup de temps si on ne dispose pas des bons outils.
# # - sans compter que mettre à disposition toutes ces informations, alors
# # qu'on a soi-même peiné à les obtenir, c'est permettre à d'autres de
# # récupérer les fruits de notre travail sans efforts.
# Mais si personne n'exige ces informations, à quoi bon s'embêter ?
** Tout rendre public ?
#+LaTeX: \def\a{\`a }
- Les /faiblesses/ deviendraient évidentes
- Quelqu'un pourrait trouver une /erreur/
- Quelqu'un pourrait en [[http://www.nature.com/news/the-top-100-papers-1.16224][tirer avantage \a ma place]]
- /Les données peuvent être sensibles/
# sécurité, machine learning pour la police
Donnons nous les moyens que tout soit inspectable à la demande
# Note:
# Mais donner accès, mettre à disposition, cela veut dire tout rendre
# public ? N'est-ce pas un peu radical ? Et risqué ? Démontons ensemble
# quelques idées reçues.
# Si je donne accès à tout ce que j'ai fait, il deviendra alors évident
# que ce que j'ai fait n'est pas aussi parfait que ce que je prétends,
# que c'est un peu sale et pas toujours très rigoureux, que j'ai
# sélectionné les résultats que je présente.
# - C'est sûr. En même temps, c'est la réalité et vous auriez tort de
# croire que vous êtes le seul dans cette situation. Si ça se trouve,
# vous travaillez mieux que les autres et dans un domaine où la
# réputation est essentielle, vous avez probablement plutôt intérêt à
# le montrer. Pire, si vous le cachez, cela finira par paraître
# suspicieux.
# Vous me direz qu'en révélant tout, je prend le risque que quelqu'un
# trouve une erreur et de passer pour un imbécile.
# - C'est certain, mais tout le monde fait des erreurs, même les plus
# grands. Et en ce qui me concerne, je préfère que quelqu'un trouve
# une erreur et m'aide à la corriger afin que mes travaux deviennent
# corrects.
# Oui, mais quelqu'un pourrait tirer parti, réanalyser ces données que
# j'ai eu tant de mal à obtenir, ou simplement utiliser ce code que j'ai
# eu tant de mal à écrire et faire trois ou quatre papiers là où je n'ai
# eu le temps d'en faire qu'un.
# - Alors d'abord, si quelqu'un réutilise votre travail, il se doit de
# le citer correctement et de vous rendre le crédit qui vous est
# dû. Ensuite les articles les plus cités de tous les temps sont des
# articles présentant des contributions méthodologiques ou du logiciel
# qui sont devenus essentiels dans un domaine.
# Une petite parenthèse : ceux d'entre vous qui connaissent github,
# savent que cette plate-forme est à mi-chemin entre la plate-forme de
# développement logiciel et le réseau social. Les contributions d'un
# développeur à différents projets sont visibles ainsi que la
# fréquence de ses contributions, ce qui permet à un jeune développeur
# de se faire une carte de visite infalsifiable et
# ultra-visible. Montrer ce que l'on fait est une façon efficace
# d'atteindre une certaine forme de reconnaissance par la
# communauté. Mettre ses travaux à disposition de tous est
# probablement la meilleure façon de démontrer sa propriété
# intellectuelle.
# Enfin, il est possible que les données soient sensibles et ne puissent
# être divulguées sans prendre le risque de causer du tort à des
# gens. Par exemple, s'il s'agit de données médicales, de données
# judiciaires, d'informations sur des enfants ou sur des intentions de
# vote, etc.
# - Dans ce type de situation où les travaux ont une dimension éthique,
# il convient de définir quelles personnes peuvent avoir accès aux
# informations pour les vérifier ou les réutiliser. Ensuite, il existe
# des techniques cryptographiques assez faciles d'accès permettant de
# s'assurer que seulement les personnes habilitées peuvent accéder aux
# données.
# Dans tous les cas, même si au final ces informations sont
# semi-publiques, il est essentiel de se donner les moyens de permettre
# à autrui d'inspecter ce que nous avons fait.
** Outils à éviter et alternatives
- *Outils, formats, et services propriétaires*
1. +Excel, Word, Evernote+
- Markdown, Org-mode, CSV, HDF5, ...
2. +SAS, Minitab, matlab, mathematica, ...+
- Scilab, R, Python, ...
3. +Dropbox, cahiers de labo en ligne propriétaires, ...+
- Framadrop, GitLab/GitHub, ...
- *Outils "intuitifs" *
- +tableurs, interfaces graphiques, exploration interactive+
- apprendre à se contrôler... $\smiley$
- R, Python, ...
# Note:
# Et pour permettre l'inspection, il faut utiliser les bons outils
# Cela commence par banir autant que possible les logiciels et les
# formats propriétaires. Bien sûr, ces outils sont bien faits et vous y
# êtes habitués mais on en est également captif et les entreprises qui
# les développement n'offrent aucune garantie sur le long terme. Je suis
# sûr que ces mises à jours automatiques vous agacent vous aussi. :)
# L'expérience montre qu'il est hélas très courant de perdre des données
# et des informations lors de ces mises à jour.
# Alors, soyons honnête, l'utilisation de logiciel libre ne vous protège
# absolument pas de ce genre de mauvaises surprises. Mais comme vous
# avez accès librement à l'ensemble des versions, les chances d'arriver
# à récupérer vos données sont quand même bien plus élevées. De même
# l'adoption de formats textes simples et ouverts augmente vos chances
# d'arriver à les relire avec d'autres logiciels.
# En ce qui me concerne, à chaque fois que j'ai utilisé un format
# binaire ou pas bien ouvert, j'ai fini par perdre des données. Cela
# fait donc 10 ans que je n'utilise plus que des formats texte ou des
# standards binaires ouverts et le problème ne s'est plus jamais posé,
# et ce malgré les mises à jours logicielles très régulières de ma
# machine.
# Donc règle numéro 1 : utiliser autant que possible du format texte
# (markdown, orgmode pour vos notes, csv pour vos données).
# Règle numéro 2 : utiliser autant que possible les logiciels et les
# langages de programmation libres comme R ou python.
# Et Règle numéro 3 : éviter de stocker vos données chez un hébergeur
# dont vous pourriez être captif.
# En effet, les services gratuits (ou pas) et très intégrés sont
# tentants mais correspondent à un business plan particulier qui peut se
# révéler incompatible avec vos besoins futurs, ne pas être pérenne et
# ne vous donne pas forcément les garanties de confidentialité que vous
# souhaiteriez.
# Enfin, attention aux tableurs et outils graphiques qui peuvent vous
# donner au premier abord l'impression d'une meilleur efficacité et
# productivité mais qui sur le long terme ne vous permettent pas
# d'atteindre la traçabilité et l'inspectabilité que vous souhaiteriez.
# C'est plus difficile, en particulier au début, mais en utilisant des
# langages comme R ou python, passé la première marche, on gagne
# rapidement en puissance et en efficacité.
** Conséquences :noexport:
- Des *erreurs*...
- Des *difficultés* certaines à *réutiliser* le travail des autres, voire
son propre travail
- Un *doute* dommageable pour tout le monde (auteur, détracteurs,
lecteur, décideur...)
# Note:
# C'est pour toutes ces raisons que les résultats de recherche
# contiennent parfois des erreurs et sont si difficile à répliquer et à
# réutiliser, même au sein d'une même équipe.
# Les doutes que cela engendre sont dommageable pour tout le
# monde. Lorsque l'on propose un résultat, il n'est pas agréable d'être
# soupçonné de fraude ou d'incompétence. En même temps, les détracteurs
# d'un résultat apparaissent comme de simples aigris ou au contraire
# comme des lanceurs d'alertes selon le contexte alors qu'il est normal
# de questionner un résultat et d'avoir un débat apaisé et rationnel à
# son sujet.
# Face à ces problèmes, il me semble que la meilleur attitude à avoir
# est celle de la transparence : Expliciter augmente les chances de
# trouver les erreurs et de les éliminer.
# C'est d'ailleurs une demande de plus en plus pressante de la part
# de la société civile afin d'éviter les dérives et d'améliorer
# l'efficacité de nos travaux.
** Changement de paradigme
1. Manque d'information, problème d'accès aux données
2. Erreurs de calcul
3. Manque de rigueur scientifique et technique
#+LaTeX: \begin{center}\includegraphics[height=2.5cm]{../assets/img/in_science_we_trust_small.jpg}
#+LaTeX: \includegraphics[height=2.5cm]{../assets/img/in_code_we_trust.jpg}\end{center}
*** Expliciter augmente les chances de trouver les erreurs et de les éliminer
# Demande de *traçabilité* de plus en plus pressante de la société, des
# institutions, de l'Europe, ...
# Note:
# Nous avons vu que la première cause d'échec de reproduction de
# résultats scientifiques est tout simplement le manque d'information,
# la non disponibilité des données ou des procédures appliquées. Cela ne
# signifie pas que le résultat soit faux mais cela empêche de le
# vérifier et de s'appuyer dessus.
# La seconde cause d'échec est tout simplement l'erreur de calcul qui
# peut se glisser n'importe où.
# De manière générale, le manque de rigueur scientifique et technique
# est souvent à l'origine de ces deux problèmes.
# Il me semble que la meilleur attitude à avoir est celle de la
# transparence : Expliciter augmente les chances de trouver les erreurs
# et de les éliminer. C'est pour cela que nous assistons ces dernières
# années à un changement de paradigme de recherche et que l'on exige un
# accès à l'ensemble des données et des procédures de calcul.
# C'est d'ailleurs une demande de plus en plus pressante de la part de
# la société civile (en particulier le Conseil Européen) afin d'éviter
# les dérives et d'améliorer l'efficacité de nos travaux.
* M2-S3: Le document computationnel : principe
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. *Le document computationnel : principe*
4. Prise en main de l'outil. Au choix :
- Jupyter
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Le document computationnel : principe
file:../assets/img/iceberg.jpg
# Note:
# Dans cette séquence, je vais vous présenter ce qu'est un document
# computationnel ainsi que les principes généraux que nous retrouverons
# dans chacun des trois environnements dont je vous ai précédemment
# parlé. L'intérêt de ce type de document est de permettre une
# transparence la plus complète possible.
** La science moderne
#+LaTeX: \includegraphics<1>[width=\linewidth]{../assets/img/iceberg_publication-1.png}%
#+LaTeX: \includegraphics<2>[width=\linewidth]{../assets/img/iceberg_publication-2.png}%
#+LaTeX: \includegraphics<3>[width=\linewidth]{../assets/img/iceberg_publication-3.png}%
#+LaTeX: \includegraphics<4>[width=\linewidth]{../assets/img/iceberg_publication-4.png}%
#+LaTeX: \includegraphics<5>[width=\linewidth]{../assets/img/iceberg_publication-5.png}%
# Note:
# # Data \to visualization/analysis \to article
# Si une partie de l'activité scientifique nécessite des mesures sur le
# terrain ou derrière une paillasse, la majeure partie se passe
# maintenant derrière un ordinateur, les données provenant de machines
# spécifiques : je pense par exemple à un accélérateur de particules, des
# séquenceurs d'ADN, un téléscope, un réseau de capteur ou bien sûr des
# simulations numériques s'exécutant sur des supercalculateurs.
# Une fois ces données obtenues, elles sont transformées pour être
# analysées, visualisées afin de mieux en comprendre la structure. Il
# est courant de partager ces visualisations avec des collègues,
# d'avoir un certain nombre d'itérations, de passer d'une vue à une
# autre jusqu'à trouver celle qui explique le mieux les choses. On
# utilise d'ailleurs souvent une multitude de logiciels spécifiques pour
# obtenir ces visualisations.
# Il arrive souvent qu'on soit déçu par les résultats, qu'on n'y
# comprenne rien ou qu'on se rende compte que les données ne sont pas
# intéressantes et qu'il faut se poser la poser la question sous un
# angle différent.
# Dans ce cas, retour à la case départ : acquisition de
# données, visualisations, statistiques, nombreux échanges avec les
# collègues...
# Puis ça y est, on trouve enfin quelque chose d'intéressant. On prend
# alors nos plus belles figures, on y ajoute les explications qui sont
# finalement les bonnes, on tente de rendre tout cela intéressant et on
# envoie l'ensemble à une conférence ou un journal.
# Hélas, dans un pdf de 8 pages, le lecteur trouvera une jolie histoire,
# des figures convaincantes mais n'aura aucune idée du réel travail
# effectué. L'article, c'est la partie émergée de l'iceberg et il n'y a
# alors plus aucun moyen de revenir sur les nombreuses tentatives et
# échecs, ni sur les calculs et les données derrière chacune de ces
# figures.
# La recherche reproductible, c'est permettre de pouvoir naviguer dans
# les deux sens et de combler le fossé séparant l'auteur du lecteur.
** Objectifs méthodologiques
Garder trace afin de :
- *Inspecter* : justifier/comprendre
- *Refaire* : vérifier/corriger/réutiliser
# Note:
# Notre objectif est donc d'avoir un outil nous permettant :
# - d'une part d'inspecter toute cette démarche, afin que l'auteur
# puisse justifier pourquoi tel ou tel code est utilisé et que le
# lecteur puisse comprendre ce qui a été fait;
# - et d'autre part de refaire le calcul et l'analyse le plus
# simplement possible, ce qui est essentiel
# 1. pour permettre aux lecteurs de vérifier que ces calculs sont
# corrects,
# 2. pour permettre éventuellement de corriger des erreurs s'il y en a
# 3. et enfin pour permettre à d'autres de réutiliser ces travaux, soit
# sur un jeu de données différent, soit en réutilisant une partie de
# la procédure d'analyse dans un autre contexte.
** La vitrine... et l'envers du décor
\scriptsize
#+LaTeX: \only<1>{\hfill\includesvg[width=.5\linewidth]{../assets/img/example_pi_full-1}}%
#+LaTeX: \only<2>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-2}}%
#+LaTeX: \only<3>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-3}}%
#+LaTeX: \only<4>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-4}}%
#+LaTeX: \only<5>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-5}}%
#+LaTeX: \only<6>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-6}}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-2.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-3.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-4.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-5.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-6.svg}%
# Note:
# Voici la partie émergée du document computationnel. Au premier abord,
# il s'agit d'un document tout à fait banal avec un titre, du texte,
# éventuellement un petit morceau de code illustrant une procédure de
# calcul, des résultats numériques, des formules de maths, des figures,
# etc. Bref, un article classique au format pdf ou html.
# Voici maintenant ce qui se cache derrière ce document : ici, un
# notebook Jupyter tel que nous pouvons le voir dans un navigateur
# web. C'est un document dynamique constitué de différentes parties sur
# lesquelles on peut interagir.
# Tout d'abord du texte au format markdown : ce sont les zones de texte
# que j'ai surlignées en orange. Le formattage est assez simple, on peut
# assez facilement y inclure des liens hypertextes ou des formules
# mathématiques.
# Entre ces zones de texte, on trouve des zones de code, que j'ai
# surlignées en bleu. Ici il s'agit de fragments de code python
# relativement simples. Dans cet environnement, il est possible d'éditer
# directement ces fragments de code et les exécuter. En fait, un
# notebook a en interne une console python ouverte et lorsque l'on
# demande l'exécution d'un fragment de code, le code est directement
# envoyé dans la console et le résultat est automatiquement récupéré.
# Le résultat de chacun de ces différents codes est stocké juste en
# dessous dans les zones que j'ai surlignées en jaune. Puisque cette
# console reste "vivante" tout au long du document, les résultats
# calculés dans un bloc sont visibles dans le bloc suivant, ce qui
# encourage à ne pas écrire de longs blocs de code infâmes, mais au
# contraire à écrire de petits fragments, à calculer les choses petit à
# petit, tout en expliquant dans les zones de texte (en orange) comment
# les différents fragments de code (en bleu) s'enchaînent et éventuellement
# pourquoi, en fonction de ce que l'on vient de calculer (en jaune), on
# décide d'appliquer tel nouveau fragment.
# Une fois satisfait avec les calculs, on aime en général bien créer un
# document classique en exportant vers du pdf ou du html. Chaque zone
# (texte, code, résultat) est convertie et assemblée en un seul document
# markdown qui est à son tour transformé vers le format désiré avec un
# outil comme pandoc.
# Bien sûr, dans le document final, on ne souhaite pas forcément rendre
# tous les fragments de codes et tous les résultats visibles. C'est la
# raison pour laquelle pour chacune de ces zones, il est possible de
# spécifier si l'on souhaite la cacher ou pas.
# Enfin, si les résultats intermédiaires sont stockés automatiquement
# dans le notebook, l'environnement permet de ré-exécuter très
# simplement l'ensemble du code du notebook et de mettre à jour les
# résultats.
# C'est donc à vous de décider, selon le contexte, si vous souhaitez
# partager le document final, qui est souvent plus compact, ou le document
# computationnel qui va permettre une inspection complète et une
# réutilisation.
** Les différents outils
1. Jupyter
2. Rstudio/knitR
3. Org mode
| *Principes identiques* | *Différences* |
|----------------------------------------+--------------------|
| • *1 seul document* | • Syntaxe |
| \qquad (explications, code, resultats) | |
| • Session | • Interopérabilité |
| • Export | • Contrôle export |
# Note:
# Les trois environnements les plus matures permettant de créer de tels
# documents sont Jupyter, que vous venez de voir, Rstudio/knitr, et
# Org-mode. Ces trois environnements se distinguent par le niveau de
# technicité nécessaire à leur mise en oeuvre. Je ferai une petite démo
# de chacun de ces trois environnements dans les séquences suivantes. À
# l'issue de ces démonstrations, vous pourrez choisir lequel vous
# convient le mieux.
# Vous verrez que le principe reste le même dans les trois environnements :
# - Tout d'abord, avoir un seul document comprenant un entrelacs
# d'explications au format markdown, de code exécutable simplement, et
# les résultats de ces exécutions.
# Cette organisation permet l'inspection et la réexécution que nous
# nous étions fixés comme objectifs.
# - En interne, une console python ou R est active et assure une
# persistance des variables d'un fragment de code à l'autre. C'est la
# notion de session sur laquelle nous reviendrons pendant les
# démonstrations.
# - Enfin, il est possible d'exporter le document computationnel vers un
# format plus traditionnel éventuellement en masquant certaines
# parties.
# Les différences entre ces différents environnements sont relativement
# mineures :
# - Il y a quelques différences de syntaxe. Jupyter et Rstudio utilisent
# du markdown alors que Org mode utilise le format org qui est
# légèrement différent mais tout aussi lisible. La
# façon d'indiquer les zones de code et les résultats est également un
# peu différente mais c'est sans grande importance une fois dans
# l'environnement correspondant.
# - Plus important, peut-être l'interopérabilité entre différents
# langages. Jupyter vous permet de faire du python, du R, du ruby ou
# bien du julia mais pas vraiment d'utiliser plusieurs langages dans
# un même notebook. /Enfin/, c'est possible mais ça demande un peu de
# travail.
# Rstudio est conçu spécifiquement autour du langage R. Même s'il est
# possible d'utiliser du code python, vous verrez que ça n'est pas
# aussi convivial que pour R.
# Enfin, Org-mode permet une interaction entre les différents langages
# relativement naturelle mais comme je le disais, la courbe
# d'apprentissage est un peu plus raide.
# - Enfin, ces outils diffèrent par le contrôle offert en terme de mise
# en page lors de l'export. Jupyter et Rstudio se reposent sur
# markdown et donc sur pandoc. Le style par défaut est très bien,
# surtout si on souhaite produire du HTML. Mais si on doit produire un
# document PDF respectant un style particulier, ça peut être peu
# compliqué de demander à pandoc d'appliquer ce style.
# Org-mode ne fait à peu près rien pour vous de ce point de vue là. Il
# vous faudra donc de toutes façons configurer le style de votre
# export. Ceci dit, un des points que j'apprécie particulièrement
# lorsque je prépare un article en latex avec org-mode, c'est la
# capacité à écrire directement du LaTeX qui sera passé tel quel lors
# de l'export, ce qui me permet de faire exactement ce que je
# souhaite.
# Bien. Vous savez tout. Alors maintenant, Démo !
* M2-S4A: Prise en main de l'outil (Jupyter)
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil*. Au choix :
- *Jupyter*
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : Jupyter
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/jupyter-logo.png
** Lancement
- Ouverture d'un document
- Description rapide
- Sauvegarde
- Aide
** Exécution des blocs
- Exécution et récupération des résultats
- Ajout d'un bloc
- Attention à l'ordre
- Notion de session
- Incohérences possibles
- Tout réexécuter depuis le début
** Raccourcis clavier, auto-complétion, et Ipython magic
- Raccourcis clavier =<h>=
- Complétion Python (exemple de numpy)
- =%matplotlib=, =%lsmagic=
# =%run=, =%load=, =%load_ext=
** Utiliser d'autres langages
- Exemple pour R :
- =%load_ext rpy2.ipython=
- =%%R %%sh %%perl=
- Interaction entre =R= et =Python= possible
- mais fragile...
** Production et partage du document final
- Résultats stockés dans le document
- $\to$ visibles dans gitlab
- =git pull/push=
- Export HTML/PDF classique
** Préparer un document
# Contrôler la visibilité du code et des résultats
- Hide-code plugin
- =%%latex= et =%%html=
- [[http://nbconvert.readthedocs.io/en/latest/external_exporters.html][Personnaliser les /exporters/ de NBConvert]]
\small\href{-1cm}
~jupyter nbconvert --to mypackage.MyExporter notebook.ipynb~
** Ce qu'il faut retenir
- Beaucoup d'informations en peu de temps
- Mettez en pratique !
* M2-S4B: Prise en main de l'outil (Rstudio)
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil*. Au choix :
- Jupyter
- *Rstudio*
- Org-Mode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : Rstudio
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/RStudio-Logo-Blue-Gradient.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img//knitr.png
** Lancement
- Ouverture d'un document
- Description rapide
- Sauvegarde
- Aide
** Exécution des blocs
- Exécution et récupération des résultats
- Ajout d'un bloc
- Attention à l'ordre (notion de session, incohérences possibles)
- Tout réexécuter depuis le début
** Raccourcis clavier et auto-complétion
- Raccourcis claviers
- Complétion R
- Folding
** Production et partage du document final
- Knit
- Partage à peu de frais via rpubs
** Contrôler la visibilité du code et des résultats
- Complétion (paramètres des blocs)
** Utiliser un style particulier
- pdf, LaTeX
- html
- word/office
Possibilité de faire du LaTeX (R Sweave : =Rnw=) ou du html (R html :
=Rhtml=) directement pour avoir un contrôle parfait.
** Utiliser d'autres langages
- Ajout et exécution d'un bloc Python
- Attention, pas de session !
- Interaction uniquement via fichiers et dans de longs blocs
** Ce qu'il faut retenir
- Beaucoup d'informations en peu de temps
- Mettez en pratique !
* M2-S4C: Prise en main de l'outil (Org-Mode)
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil*. Au choix :
- Jupyter
- Rstudio
- *Org-Mode*
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : Org Mode
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/600px-EmacsIcon.svg.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/442px-Org-mode-unicorn.svg.png
# Note:
# Même plan que précédemment
** Lancement
- Ouverture d'un document
- Description rapide
- Folding / Navigation
- Restructuration
- Sauvegarde
- Aide
** Exécution des blocs
- Ajout d'un bloc R
- Exécution et récupération des résultats
- Attention à l'ordre
- Notion de session
- Incohérences possibles
- Tout réexécuter depuis le début
** Raccourcis clavier
- Bloc expansion
- R graphique
- Python, Perl, ...
- Shell session
- Plusieurs sessions, plusieurs langages !
- Communication entre langages possible
** Navigation :noexport:
- Folding
- Restructuration
# - Annotation (tags) ???
# - Sparse Tree ???
** Production et partage du document final
- Git Commit
- Attention aux fichiers produits
- Export
# - Désactiver le recalcul
- Visibilité du code et des résultats
- Sections cachées
** Utiliser un style particulier
- pdf, LaTeX
- html
- Possibilité de reprendre le contrôle
** Ce qu'il faut retenir
- Beaucoup d'informations en peu de temps
- Apprivoiser les raccourcis claviers avec la première entrée du
journal
- Mettez en pratique !
* M2-S5: Travailler avec les autres
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil. Au choix :
- Jupyter
- Rstudio
- Org-Mode
5. *Travailler avec les autres*
6. Analyse comparée des différents outils
** Travailler avec les autres
file:../assets/img/jumping_penguin.png
** Préparer un document pour un journal
Pré-requis pour faire un *pdf* :
- Actuellement caché. En interne /pandoc/, /knitr/ ou /emacs/org-mode/
- /LaTeX/ installé
Export *office/word* possible dans jupyter mais à configurer. Sinon
export *html*...
*** Dans tous les cas :
- Besoin de cacher certaines cellules
- Utiliser le bon style
# Soyons honnêtes
*** Produire un tel document demande d'avoir un environnement parfaitement configuré
# Note:
# Tout ces détails auront été expliqués avant pour chaque environnement.
# - http://blog.juliusschulz.de/blog/ultimate-ipython-notebook
# - https://github.com/kirbs-/hide_code is a must-have
# - http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/
# - https://github.com/balouf/Kleinberg/blob/master/KleinbergsGridSimulator.ipynb
# - Il y doit y avoir des choses équivalentes, mais plus simples pour
# Rmd
# - Et pour emacs, c'est d'une certaine façon plus simple car on est
# habitué à bidouiller.
** Convaincre vos co-auteurs
Face à cette complexité, plusieurs réactions :
1. Pas grave, c'est génial ! Je m'y mets !
2. Euh... c'est bien. Mais je n'ai pas le temps d'apprendre...
3. Un nouvel outil ? Jamais !
$\leadsto$ différentes organisations possibles
** Option 1 : les co-auteurs enthousiastes
Il faudra *assurer le service après-vente* :
- Compatibilité avec les différents environnements
- Gérer cette complexité (Jupyter/Rstudio/Emacs, Git, ...)
C'est la meilleure façon de *s'assurer que tout est reproductible* et
inspectable (et pas uniquement sur votre propre machine\dots)\hspace{-3em}
** Option 2 : investissement a minima
Vos co-auteurs vous laissent gérer le code, les résultats mais
adoptent votre style de document.
*Ils peuvent :*
- Éditer le texte de l'article (Markdown ou Org-Mode)
*Ils ne peuvent pas :*
- Recalculer
- Exporter et voir le document final
** Option 3 : les co-auteurs "réfractaires"
*Les co-auteurs ne changent pas leurs habitudes*
- Un document /computationnel/ séparé produit tous les résultats et
toutes les figures
- Un autre document (/classique/) inclut les figures générées
Mais tout est *conservé*, *documenté* et *recalculable* dans votre document
computationnel !
** Publier / partager votre document
*Rpubs*
- Parfait pour partage rapide, pas pérenne
*Dropbox et autres*
- +Pérénité+, accès ??, ...
*Gitlab/Github/...*
1. Rendre public (tout l'historique !)
2. Faire le ménage et archiver l'état courant dans un site compagnon
*Sites compagnons*
- Runmycode, Éditeurs, ...
- Article : *HAL* ; code et données : *Figshare / Zenodo*
** Conclusion
Plusieurs modalités possibles en fonction de :
- vos co-auteurs
- vos contraintes techniques
- vos contraintes de confidentialité/copyright
* M2-S6: Analyse comparée des différents outils
** Le document computationnel
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil. Au choix :
- Jupyter
- Rstudio
- Org-Mode
5. Travailler avec les autres
6. *Analyse comparée des différents outils*
** Analyse comparée des différents outils
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/jupyter-logo.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/RStudio-Logo-Blue-Gradient.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/442px-Org-mode-unicorn.svg.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/question_mark.png
\bigskip
Un document computationnel,
mais pour quoi faire exactement ?
# Note:
# - Pour comparer ces différents outils, il est important de bien
# identifier l'usage que l'on souhaite en faire.
# - Nous allons regarder ensemble quelques cas d'usages
** Un cours ou un tutoriel
Un notebook Jupyter
- Facile à prendre en main
- Document dynamique
# Note:
# - Super pratique.
# - Téléchargement, exécution dynamique, résultats interactifs,
# variations faciles, etc.
# - C'est idéal pour un document à destination d'auto-formation.
** Un journal
[[file:~/org/journal.org][Mon journal en org-mode]]
- Un seul auteur
- Organisation chronologique
- Étiquettes
- Notes, liens, code
# Note:
# - Structuration type: par date
# - Mots-clés
# - Navigation aisée
# - Réexécution de code comme d'habitude
** Un cahier de laboratoire
[[file:~/Work/Documents/Articles/2018/Alya-Perf/LabBook.org][Un cahier de laboratoire en org-mode]]
- Organisation sémantique
- Conventions
- Plusieurs auteurs
- Étiquettes pour auteurs, expériences, etc.
# Note:
# - Assez proche d'un journal mais avec un contenu bien plus technique
# et fait pour être exploitable par des collègues.
# - Exemple de structuration.
** Un article reproductible
[[file:~/Work/Documents/Articles/2017/paper-hpl-at-scale/paper.org][Un article en cours]]
- Plusieurs auteurs
- Regénérer les figures
- Revenir aux sources
# Note:
# - On voit la structure de l'article.
# - Certaines sections sont cachées
# - Elles pointent vers le cahier de laboratoire traçant les données
# que je vais exploiter.
# - Ici, je suis reparti de figure que Tom avait faites et je les ai
# retravaillées et adaptées à ce dont j'avais besoin pour mon
# article.
# - Ici, c'est un peu "sale", il y a des liens vers des fichiers qui
# sont sur mon disque dur mais c'est un article en cours de
# préparation et vous voyez que j'ai bien accès à l'ensemble des
# informations dont j'ai besoin.
# - Plusieurs structurations sont possibles. En général, j'ai une
# grosse section cachée au début de l'article où j'indique comment
# récupérer l'ensemble des données (avec les commandes git ou les
# URLs). Le reste du code d'analyse contenu dans l'article peut alors
# être exécuté.
# - Ici, comme on prépare un article, il est essentiel de pouvoir cacher
# certaines sections et d'avoir un contrôle complet sur la typographie
# car on n'a jamais assez de place.
# - Dans tous les cas, tout ceci n'est possible que si on a suffisemment
# de matière, c'est-à-dire que si on a pris régulièrement des notes
# sur comment on a obtenu les données et sur comment on les a
# analysées. C'est ce que vous mettrez en pratique dans le module 3
# avec l'outil de votre choix.
** Différences techniques
#+LaTeX: \null\hspace{-1cm}\begin{overlayarea}{\linewidth}{2.4cm}\scalebox{.73}{
#+ATTR_LATEX: :center nil
| | Origine | Technologie | Utilisation | Navigation | Format | Article? |
|---------------+-----------+--------------------+---------------+------------+--------+-----------|
| Jupyter | 2001 | Web App., Python | Facile | Limitée | JSON | Difficile |
| Rstudio/knitr | 2011/2014 | IDE, Java/R | Facile | Limitée | Rmd | Oui |
| Org-Mode | 1976/2008 | Editeur, EmacsLisp | Plus complexe | Puissante | Org | Oui |
#+LaTeX: }\end{overlayarea}
L'outil importe peu, ce qui importe, c'est :
- collecter l'information
- l'organiser et la rendre exploitable
- la rendre disponible
# Note:
# - L'écosystème évolue mais vous pouvez déjà vous en saisir.
** Bonus : expériences vécues :noexport:
- Complétion, introspection donc développement/composition pas si
désagréable comparé à un IDE avancé.
- Objectif atteint. Mois par mois : permet aux collègues d'aider,
d'avancer ensemble, etc. Communication de "problèmes" (données
manquantes par exemple) bien plus simple.
- Un document dynamique et traçable, réexecutable, modifiable,
réutilisable, ... Quand le reviewer 3 demande de refaire la figure 5
en noir et blanc et de changer les légendes. Ou bien de rajouter de
la compléter.
- Au jour le jour : meilleur réutilisation (par exemple entre l'article
et le slide)
Éléments clés lors du choix :
- Simplicité de prise en main vs. vrai éditeur
- Où sont fait les calculs
- Multi-langage
- http://carreau.github.io/posts/23-Cross-Language-Integration.html
- Gestion des langages compilés
- Notions de caches et d'état
Les principaux outils actuels :
- jupyter
- rstudio
- org-mode
Limitations :
- Longs calculs
- Grands documents
- Solutions wysiwyg pour jupyter
Historique/diff un peu compliqué pour jupyter
#+STARTUP: overview indent inlineimages logdrawer
#+TITLE: C028AL-W2
#+AUTHOR: Arnaud Legrand
#+TAGS: noexport(n)
* Test et informations :noexport:
** Images
# - file:assets/img/donald_trump.jpg :: [[https://upload.wikimedia.org/wikipedia/commons/d/d4/Donald_Trump_%252825653047910%2529.jpg][Wikimedia]]
# - file:assets/img/trump_vs_obama_inauguration.png :: Screenshot from the
# [[https://www.nytimes.com/interactive/2017/01/20/us/politics/trump-inauguration-crowd.html][NY Times]]
# - file:assets/img/in_science_we_trust.jpg :: crop from [[http://drrichswier.com/2014/04/23/atheism-evolution-and-secular-humanism-masquerading-as-science-against-the-bible-and-creation/][the blog of a
# conservative]].
# - file:assets/img/les_decodeurs.png :: Montage à partir du site
# http://www.lemonde.fr/les-decodeurs/ le 30 juillet.
Origin of every image used in this series of slides:
- PhD Comics:
- [[file:../assets/img/phd010708.png][phd010708.png]]: http://phdcomics.com/comics/archive.php?comicid=961
c'est du fan art, là ;) je cite phdcomics dans la vidéo donc je
pense qu'on est bon et je doute qu'il vienne nous embêter vu le sujet.
- [[file:../assets/img/in_science_we_trust.jpg][in_science_we_trust.jpg]]: https://www.google.fr/search?client=firefox-b&dcr=0&biw=1450&bih=783&tbm=isch&sa=1&q=in+science+we+trust&oq=in+science+we+trust&gs_l=psy-ab.3..0i13k1j0i30k1l3.2692.5748.0.5946.6.5.0.0.0.0.694.1147.0j3j5-1.4.0....0...1.1.64.psy-ab..2.4.1144...0i7i30k1.0.JVlXKVLc9a4#imgrc=bt5vbb5C4e9fHM
puis http://www.patheos.com/blogs/unreasonablefaith/2012/03/a-better-motto/in-science-we-trust-coin/ normalement
- [[file:../assets/img/Researcher-test.jpg][Researcher-test.jpg]]: https://fr.wikipedia.org/wiki/Imagerie_par_r%C3%A9sonance_magn%C3%A9tique_fonctionnelle#/media/File:Researcher-test.jpg
- [[file:../assets/img/flipping_fiasco.png][flipping_fiasco.png]]: https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf
- [[file:../assets/img/in_science_we_trust_small.jpg][in_science_we_trust_small.jpg]]: voir file:../assets/img/in_science_we_trust.jpg
-
[[file:../assets/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg][box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg]]:
trouvé à la base sur
https://politicsinpinkdotcom.files.wordpress.com/2016/12/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg
mais visiblement achetable ici:
http://www.istockphoto.com/fr/vectoriel/femme-laissant-d%C3%A9mons-de-la-poitrine-gm165517954-24325536
*à acheter*.
- [[file:../assets/img/in_code_we_trust.jpg][in_code_we_trust.jpg]]: https://www.google.fr/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiJ2ZfIi4fXAhUJVxQKHb-xCBoQjRwIBw&url=https%3A%2F%2Fwww.spreadshirt.com%2Fa%2Bprogrammer%2Blife-A14770086&psig=AOvVaw1ZDWatztzt2-ycU-7qy-Gh&ust=1508859944930121
- [[file:../assets/img/iceberg.jpg][iceberg.jpg]]: http://www.jdubuzz.com/files/2016/03/iceberg-principle.jpg
- [[file:../assets/img/iceberg_publication-1.png][iceberg_publication-1.png]] and others alike:
- Crédits Juliana Freire: slides 2 à 5 de http://catt.nyu.edu/sites/default/files/files/Provenance_In_Data_Exploration.pdf
- https://en.wikipedia.org/wiki/Large_Hadron_Collider#/media/File:CERN_LHC.jpg
- https://fr.wikipedia.org/wiki/T%C3%A9lescope#/media/File:Hubble_01.jpg
- https://en.wikipedia.org/wiki/DNA_sequencer#/media/File:DNA-Sequencers_from_Flickr_57080968.jpg
- https://cnet3.cbsistatic.com/img/Ly9WLBFBoWxby2UraBktS1ftx90=/2014/06/10/1bd4587d-63a5-4d1a-b2fe-c6b692daa9bb/plantsensors-1.jpg
- http://www.cerfacs.fr/avbp7x/img/FULLSCREEN/explosion-masri_incite_1Md.png
- https://fr.wikipedia.org/wiki/Treemap#/media/File:Carte-proportionnelle-france.png
- https://fr.wikipedia.org/wiki/Repr%C3%A9sentation_graphique_de_donn%C3%A9es_statistiques
- https://fr.wikipedia.org/wiki/Visualisation_d%27informations#/media/File:InteractionAandB.png
- [[file:../assets/img/RStudio-Logo-Blue-Gradient.png and file:../assets/img//knitr.png][RStudio-Logo-Blue-Gradient.png and file:../assets/img//knitr.png]]: https://www.rstudio.com/about/logos/
- [[file:../assets/img/jumping_penguin.png][jumping_penguin.png]]: http://www.istockphoto.com/be/photo/saut-penguins-de-papou-sur-iceberg-gm466554153-33737494
*à acheter*.
* Internal refs/notes :noexport:
** phdcomics
- version control : http://phdcomics.com/comics/archive.php?comicid=1531
- http://r-bio.github.io/intro-git-rstudio/
- https://xkcd.com/1597/
- http://phdcomics.com/comics/archive.php?comicid=961
** Pandoc
- https://enacit1.epfl.ch/markdown-pandoc/
- https://www.markdowntutorial.com/
** Jupyter
*** Install
#+begin_src sh :results output :exports both
sudo apt-get install jupyter-notebook
sudo apt-get install python3-pip
sudo apt-get install python3-matplotlib python3-numpy
#+end_src
Then following https://github.com/kirbs-/hide_code (note sure this is
as useful as I thought though :()
#+begin_src sh :results output :exports both
sudo pip3 install hide_code
sudo jupyter-nbextension install --py hide_code
jupyter-nbextension enable --py hide_code
jupyter-serverextension enable --py hide_code
#+end_src
Pour que l'export via latex fonctionne:
#+begin_src shell :results output :exports both
sudo apt-get install wkhtmltopdf
sudo apt-get install texlive-xetex
#+end_src
Pour avoir R:
#+begin_src shell :results output :exports both
sudo apt-get python3-rpy2
#+end_src
Pour avoir le [[https://github.com/brospars/nb-git][git push/pull dans les notebooks]]:
#+begin_src shell :results output :exports both
jupyter nbextension install https://raw.githubusercontent.com/brospars/nb-git/master/nb-git.js
jupyter nbextension enable nb-git
#+end_src
Autres extensions (code-folding): https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook
#+begin_src shell :results output :exports both
pip3 install jupyter_contrib_nbextensions
# jupyter contrib nbextension install --user # not done yet
#+end_src
https://stackoverflow.com/questions/33159518/collapse-cell-in-jupyter-notebook
(collapsible headings)
Pour avoir le kernel R (from https://irkernel.github.io/installation/):
#+begin_src R :results output graphics :file (org-babel-temp-file "figure" ".png") :exports both :width 600 :height 400 :session *R*
install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
# Don’t forget step 2/2!
IRkernel::installspec()
#+end_src
*** Export
http://markus-beuckelmann.de/blog/customizing-nbconvert-pdf.html
https://nbconvert.readthedocs.io/en/latest/
#+begin_src sh :results output :exports both
ipython3 nbconvert --to pdf Untitled.ipynb
#+end_src
*** Pour aller plus loin
- https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
* C028AL-W2-S0 (\approx 4:00); Le document computationnel
** Le document computationnel
*La vitrine et l'envers du décor*
#+BEGIN_EXPORT html
<img src="assets/img/phd010708.png" style="height:400px"/>
#+END_EXPORT
Note:
Bonjour à tous,
Si comme moi et que vous êtes assez mal organisés, cette petite bande
dessinée doit vous parler. Nous l'avons intitulée la vitrine et
l'envers du décors mais nous aurions aussi bien pu la baptiser "La
Théorie et la Pratique".
L'apparence que nous donnons en tant qu'expert de notre domaine, en
particulier lorsque nous communiquons avec des collègues, c'est
d'avoir une organisation impeccable, garante de la qualité de nos
travaux. Mais en pratique, nous sommes souvient bien moins organisés
que ce que aimerions être.
Si vous êtes comme moi, vous avez probablement eu envie de faire en
sorte que cela change.
Dans ce module, nous allons voir ensemble ce qu'est un document
computationnel et comment en réaliser un. C'est un terme un peu
barbare mais il nous a semblé que c'était celui qui décrivait le mieux
ce type de document qui permet d'améliorer la traçabilité d'un calcul.
** Module 2. La vitrine et l'envers du décor : le document computationnel
1. <!-- .element class="fragment highlight-current-red" --> Exemples récents d'études assez discutées
2. <!-- .element class="fragment highlight-current-red" --> Pourquoi est-ce difficile ?
3. <!-- .element class="fragment highlight-current-red" --> Le document computationnel : principe
4. <!-- .element class="fragment highlight-current-red" --> Prise en main de l'outil <br/> Au choix :
- <!-- .element class="fragment highlight-current-blue" --> <!-- .element style="font-size:30px" --> Jupyter
- <!-- .element class="fragment highlight-current-blue" --> <!-- .element style="font-size:30px" --> Rstudio
- <!-- .element class="fragment highlight-current-blue" --> <!-- .element style="font-size:30px" --> OrgMode
5. <!-- .element class="fragment highlight-current-red" --> Travailler avec les autres
6. <!-- .element class="fragment highlight-current-red" --> Analyse comparée des différents outils
Note:
Pour vous convaincre de l'importance de cette traçabilité, je vais
commencer par vous présenter quelques exemples récents de travaux dont
les résultats ont été particulièrement controversés et discutés. Ils
illustrent à quel point la capacité à pouvoir inspecter les méthodes
utilisées pour produire tel ou tel résultat est essentielle.
Comme nous le verrons, la plupart des problèmes rencontrés sont liées
au calcul, qu'il s'agisse d'erreurs de programmations, de
transformations de données peu rigoureuses, ou bien de procédures
statistiques discutables.
Une fois les origines de tous ces problèmes identifiées, je vous
présenterai rapidement quelles bonnes pratiques mettre en oeuvre afin
de les éviter.
En particulier, je vous expliquerai ce que c'est que ce fameux
document computationnel: un document qui permet de présenter
agréablement des résultats à d'autres (ce que j'appelle la vitrine)
mais aussi d'accéder à l'ensemble des calculs sous-jacents (ce que
j'appelle l'envers du décor).
Il existe plusieurs formats de tels documents et nous vous proposons
trois environnements permettant d'en produire facilement. Ces trois
environnements se distinguent par le niveau de technicité nécessaire à
leur mise en oeuvre. À vous de choisir celui qui vous convient le
mieux quitte à en essayer un autre plus tard.
Jupyter, le premier, a été intégré au MOOC et au gitlab et ne
nécessite donc aucune installation de votre part. C'est donc le plus
simple à mettre en oeuvre. L'ensemble des données et des calculs sera
hébergé sur nos serveurs, mais vous pourrez y accéder et les récupérer
sur votre propre ordinateur à tout moment via le gitlab si vous le
souhaitez. Jupyter vous permettra de gérer des notebooks et d'utiliser
le langage python3 ou bien le langage R.
Rstudio, le second, est un environnement de développement spécifique
au langage R. Il vous faudra l'installer sur votre machine et
synchroniser vos productions avec le gitlab. C'est un logiciel très
bien maintenu, qui fonctionne aussi bien sous linux et mac que sous
windows et son installation ne devrait pas poser de difficulté
particulière. Si vous êtes déjà familier avec le langage R, c'est
l'option que je vous recommande. L'avantage de cette approche est que
vous aurez à la fin du MOOC sur votre machine un environnement de
travail directement prêt à l'emploi. Avec Rstudio, il est également
possible d'utiliser occasionnellement du code python mais si vous avez
l'intention de faire principalement du python, il vaut mieux utiliser
jupyter.
Enfin, OrgMode, est clairement celui qui est le plus délicat à mettre
en oeuvre mais c'est aussi celui que Konrad, Christophe et moi-même
utilisons quotidiennement aussi bien pour gérer notre cahier de
laboratoire que pour rédiger des articles ou des notes
techniques. Nous nous sommes donc dit qu'il pouvait être intéressant
de vous le présenter. OrgMode nécessite l'installation d'Emacs, un
éditeur de texte qui révèle toute sa puissance dans un environnement
linux ou mac. Il permet de combiner très efficacement différents
langages et est par certains aspects moins limité que les deux
précédents. Cette option est à réserver à un public averti mais le jeu
en vaut la chandelle.
Une fois familiarisé avec un de ces environnements, nous vous
proposerons une petite séance pratique dont l'objectif sera de
produire un petit document computationnel.
Les dernières séquences peuvent être visionnées indépendemment et
traitent de sujets un peu plus techniques, en particulier de comment
utiliser de tels outils avec vos co-auteurs qui peuvent avoir leurs
propres habitudes, ou de comment produire des documents avec un style
bien spécifique.
Nous concluons enfin ce module avec une comparaison de ces différents
outils et une présentation des bénéfices d'une utilisation
quotidienne.
* C028AL-W2-S1 (\approx 7:30); Exemples récents d'études assez discutées
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. *Exemples récents d'études assez discutées*
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil <br/> Au choix :
- Jupyter
- Rstudio
- OrgMode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Exemples récents d'études assez discutées file:assets/img/in_science_we_trust.jpg&size=cover
Note:
Je vous avais promis quelques exemples récents de travaux dont les
résultats ont été particulièrement controversés et discutés. C'est ce
que je vais vous présenter dans cette séquence.
** Économie : politiques d'austérité (1/2)
*** 2010
# - /gross debt [..] exceeding 90 percent of the economy has a
# significant negative effect on economic growth/
#+BEGIN_QUOTE
Lorsque la dette extérieure brute atteint 60 pourcents du PIB, la
croissance annuelle d'un pays diminue de deux pourcents.
[..] pour des niveaux de dette extérieure dépassant 90 pourcents du
PIB, la croissance annuelle est à peu près divisée par deux.
-- [[https://en.wikipedia.org/wiki/Growth_in_a_Time_of_Debt][Reinhart et Rogoff]]: /Growth in a Time of Debt/
#+END_QUOTE
# - données non publiées mais disponibles sur demande
Note:
Commençons par des travaux en économie. 2007: crise des subprimes aux
États-Unis. De 2008 à 2009, deux économistes prestigieux, Carmen
Reinhart et Kenneth Rogoff présentent leurs travaux et annoncent que
la crise financière est loin d'avoir produite toutes ses
conséquences. En 2010, ils publient un article intitulé "Growth in a
Time of debt" qui étudie le lien entre dette et croissance.
Leurs principales conclusions sont que lorsque lorsque la dette
extérieure d'un pays dépasse 90% du PIB, les conséquences sur la
croissance sont dramatiques.
De nombreux politiciens, journalistes et activistes s'appuient sur cet
article pour soutenir la mise en place de politiques d'austérité
budgétaire.
** Économie : politiques d'austérité (2/2)
*** 2013
# - Herndon, Ash and Pollin: /While using RR's working spreadsheet, we
# identified *coding errors*, *selective exclusion* of/ /available data,
# and *unconventional* weighting of summary *statistics*./
#+BEGIN_QUOTE
<span style="font-size:30px">
En utilisant leurs feuilles excel,
nous avons identifié des *erreurs de programmations*, des *exclusions*
de certaines données, et des pondérations *statistiques non
conventionnelles*.</span>
<center><span style="font-size:30px">
-- Herndon, Ash et Pollin</span></center>
#+END_QUOTE
# #+BEGIN_EXPORT html
# <br/>
# #+END_EXPORT
# - Wray: /combining data across centuries, exchange rate regimes,
# public and private/ /debt, and debt denominated in foreign currency
# as well as domestic currency/
#+BEGIN_QUOTE
<!-- .element class="fragment" data-fragment-index="1"--> <span style="font-size:30px">
R&R combinent des données de siècles
différents, des régimes de changes différents, des dettes privées et
publiques, et des dettes exprimées en monnaies étrangères et
nationales.</span>
<center><!-- .element class="fragment" data-fragment-index="1"--> <span style="font-size:30px">
-- Wray </span></center>
#+END_QUOTE
Note:
Ces seuils de 90% ainsi que l'ampleur des conséquences sont très
discutés, d'autant plus que certains chercheurs échouent à obtenir des
résultats similaires en utilisant les données disponibles
publiquement. Ils demandent donc à Reinhart et Rogoff l'ensemble des
données et des feuilles de calculs utilisées dans l'étude et ces
derniers finissent par leur fournir.
Dans ces feuilles, des erreurs de calcul évidentes apparaissent
rapidement ainsi que des traitement de données assez douteux
(exclusion de données, pondérations suspectes, etc.).
Reinhart et Rogoff répondent point par point en expliquant que ces
quelques erreurs ne changent rien au résultat final, que leur façon de
calculer les statistiques sont tout à fait standard.
En fait, une fois les détails révélés, pour beaucoup de chercheurs ces
calculs n'ont pas beaucoup de sens, les valeurs utilisées sont très
discutables, et il est malhonnête d'utiliser ces travaux pour
justifier une politique d'austérité budgétaire.
Mais le mal est fait. Pendant plus de trois ans, l'austérité n'est pas
présentée comme un choix mais comme une nécessité. Et quand bien même
l'article original est considéré comme non pertinent par les
économistes, ces idées ont fait leur chemin et sont difficiles à
détrôner.
Au delà du caractère idéologique de ce genre de travaux, une des
raisons pour lesquelles ce débat a mis autant de temps à avoir lieu
est lié à la non publication de l'ensemble des procédures de calcul et
des données utilisées, pratique courante en économie. Sous les feux
de la rampe, les auteurs ont bien été forcés de mettre à disposition
ce qui sous-tendait leur travaux mais sans pression médiatique
particulière, en général, rien ne se passe...
** IRM fonctionnelle
# file:assets/img/Irmf.jpg&size=cover
- <!-- .element class="fragment" --> 2010 : [[https://www.researchgate.net/publication/255651552_Neural_correlates_of_interspecies_perspective_taking_in_the_post-mortem_Atlantic_Salmon_an_argument_for_multiple_comparisons_correction][Bennett et al. et le saumon mort]] \smiley
- <!-- .element class="fragment" --> 2016 : [[http://www.pnas.org/content/113/28/7900.abstract][Eklund, Nichols, and Knutsson]]. [[http://www.sciencealert.com/a-bug-in-fmri-software-could-invalidate-decades-of-brain-research-scientists-discover][A bug in fmri software could
invalidate 15 years of brain research]] (/40 000 articles/)
- <!-- .element class="fragment" --> 2016 : Mais [[https://www.cogneurosociety.org/debunking-the-myth-that-fmri-studies-are-invalid/][c'est plus subtil
que ça]]. [[http://blogs.warwick.ac.uk/nichols/entry/bibliometrics_of_cluster/][Nichols]]. /\approx 3 600 études concernées/
<p class="fragment"> Des méthodes statistiques à améliorer mais pas de
remise en cause fondamentale. </p>
#+BEGIN_EXPORT html
![Irmf](assets/img/Researcher-test.jpg)
#+END_EXPORT
Note:
Continuons avec un autre exemple: l'imagerie cérébrale, qui permet
d'observer l'activité du cerveau d'un individu lorsqu'il effectue une
tâche cognitive et ainsi de mieux comprendre la structure et le
fonctionnement du cerveau. L'IRM fonctionnelle est l'une de ces
techniques et mesure de très faibles variations locales du taux
d'oxygénation du sang dans le cerveau.
En 2010, Craig Bennett et ses encadrants ont une idée saugrenue. Ils
placent un saumon mort dans un appareil d'IRM et lui présentent des
images. Étonnamment, ils observent des signes d'activité cérébrale, ce qui est
pour le moins surprenant puisque le saumon est bel et bien mort. Aussi
drôle que cela puisse paraître, Bennett et ses encadrants savent très
bien ce qu'ils font. Les données brutes obtenues lors d'une IRM sont
très bruitées et toute une série de calculs et de tests statistiques
sont appliqués pour transformer ces données en images
intelligibles. Mais il arrive que le bruit soit trop important, que la
machine soit mal calibrée, que la procédure de calcul soit inadaptée
et que des signaux apparaissent fortuitement.
Leur article rédigé avec un ton très humoristique fait sensation car
il met le doigt sur des faiblesses méthodologiques.
L'an dernier, des collègues me sachant intéressé par ces problèmes de
réplication me font suivre un article récent assez alarmant. Cet article présente un
problème dans les procédures statistiques utilisées dans les logiciels
d'analyse d'IRMf les plus courants, ce qui remet potentiellement en
cause les résultats obtenus ces quinze dernières années. Étant donnée
l'ampleur de l'erreur, les auteurs concluent que 40,000 articles
pourraient être concernés. De plus, les données étant très
volumineuses dans ce domaine, elles ne sont pas archivées et il ne
sera pas possible de simplement les réanalyser. L'ensemble des
expériences seraient à refaire...
En fait, suite aux retours qui leurs sont faits, les auteurs revoient
rapidement à la baisse leurs estimations assez alarmistes.
Au final, le problème méthodologique et la capacité à vérifier les
études suite à des erreurs de calcul reste entier même s'il ne remet
pas pour autant en cause l'ensemble des résultats obtenus ces
dernières années.
** Les fausses structures de protéines
#+BEGIN_EXPORT html
<img src="assets/img/flipping_fiasco.png" style="float:right;width:250px"/>
#+END_EXPORT
*Geoffrey Chang* : étude de la structure de protéines présentes dans
des bactéries résistant aux antibiotiques. MsbA de Escherichia Coli (Science, 2001),
Vibrio cholera (Mol. Biology, 2003), Salmonella typhimurium
(Science, 2005)
<span class="fragment" data-fragment-index="1"> *2006* : Incohérences,
alertes, puis 5 rétractations </span>
#+BEGIN_QUOTE
<!-- .element class="fragment" data-fragment-index="2" style="font-size:30px"-->
a homemade data-analysis program had flipped
two columns of data, inverting the electron-density map from which his
team had derived the protein structure.
<!-- .element class="fragment" data-fragment-index="2" style="font-size:30px"--> -- [[https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf][une "erreur
de programmation"]]
#+END_QUOTE
Note:
Un dernier exemple, cette fois-ci en cristallographie.
Geoffray Chang est un chercheur à la trajectoire fulgurante,
récompensé par de nombreux prix. Son équipe, basée au Scripps
Institute à l'Université de Californie San Diego, a publié une série
d'articles dans des revues prestigieuses et détaillant la structure de
certaines protéines présentes dans les membranes de cellules. Ces
protéines jouent un rôle essentiel dans la résistance de ces bactéries
à certains médicaments et connaître leur structure est une étape
importante dans la compréhension de leur fonctionnement.
Hélas, peu de temps après, d'autres équipes de chercheurs qui étudient
des protéines très similaires rapportent des structures anormalement
différentes de celles publiées par Chang et son équipe. En lisant ces
travaux Chang, horrifié, remonte vite à la source du problème.
Un des codes d'analyse aurait inversé deux
colonnes de données et ainsi inversé la répartition de la densité
d'électrons à partir de laquelle la structure finale de la protéine
est calculée. D'après Chang, ce code aurait été hérité d'un autre
laboratoire et s'était également répandu depuis dans d'autres équipes.
Même si toute l'acquisition des données avait été faite soigneusement,
ce n'était pas le cas de l'analyse et ce petit grain de sable a
conduit à la rétractation immédiate de 5 articles par Chang et son
équipe. Ces publications ont eu un impact énorme sur la communauté, à
tel point que plusieurs années après la rétractation, les résultats
contradictoires avec ceux de Chang paraissaient suspects avaient du
mal à être publiés.
** Crise de foi ?
#+BEGIN_EXPORT html
<img src="assets/img/in_science_we_trust_small.jpg" style="float:right;width:240px"/>
#+END_EXPORT
- [[http://www.nature.com/nrd/journal/v10/n9/full/nrd3439-c1.html?foxtrotcallback=true][Oncologie]] : "/plus de la moitié des études publiées, même dans des
journaux prestigieux, ne/ /peuvent être reproduites en laboratoire
industriels/"
- [[http://theconversation.com/we-found-only-one-third-of-published-psychology-research-is-reliable-now-what-46596][Psychologie]] : "réplication d'une centaine d'articles /seulement un
tiers de résultats cohérents/"
<span class="fragment" data-fragment-index="2"> *Lanceurs d'alerte* ou
*institutions malades* ? </span>
*** <span class="fragment" data-fragment-index="2"> La remise en cause fait partie du processus scientifique</span>
*** <span class="fragment" data-fragment-index="2"> Tout comme la rigueur et la transparence...</span>
Note:
Il n'y a à ce jour pas un domaine des science qui ne soit épargné par
ces difficultés à reproduire les travaux publiés. En oncologie, un
article récemment publié rapporte que plus de la moitié des études
publiées ne peuvent être reproduites en laboratoire industriel, et ce
même si les études sont publiées dans des journaux prestigieux.
En psychologie, les capacités à reproduire les résultats publiés sont
également très basses.
Le problème est méthodologique mais également certainement
sociologique, lié à une pression productiviste trop importante. Mais
attention aussi à ne pas donner non plus trop d'importance aux signaux
d'alertes que nous venons de voir...
Le problème est compliqué mais il faut garder à l'esprit que la remise
en cause fait partie du processus scientifique. Il n'est donc pas
surprenant que de telles difficultés de reproduction de travaux
scientifiques soit présentes.
Cependant, deux autres caractéristiques essentielles du processus
scientifique sont la rigueur et la transparence et il est clair que
dans l'ensemble des cas que nous venons de voir il manquait souvent
l'un et l'autre...
* C028AL-W2-S2 (\approx 11:30); Pourquoi est-ce difficile ?
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. *Pourquoi est-ce difficile ?*
3. Le document computationnel : principe
4. Prise en main de l'outil <br/> Au choix :
- Jupyter
- Rstudio
- OrgMode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** <!-- .slide: class="center" --> Pourquoi est-ce difficile ? file:assets/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg&size=contain
Note: Comme nous l'avons vu, reproduire les travaux de recherche, même
publiés dans des revues prestigieuses est souvent assez
difficile. Dans cette séquence, nous allons identifier les difficultés
les plus communes.
** 1) Le manque d'informations
Expliciter :
+ *Sources* et *données*
<center> /Données non disponibles = résultats difficiles à vérifier/
</center><br/>
+ <!-- .element class="fragment" data-fragment-index="2" --> *Choix*
<center class="fragment" data-fragment-index="2" > /Choix non expliqués = choix suspicieux/
</center><br/>
*** <!-- .element class="fragment" data-fragment-index="3" --> Le cahier de laboratoire peut vous aider
Note: La première source de difficultés rencontrées lors de tentatives
de reproduction est tout simplement le manque d'informations.
Si on ne prend pas soin d'expliciter comment on a obtenu nos données
et qu'on les garde secrètes, il est certain qu'il va être difficile
pour une tierce personne de vérifier si elle arrive aux mêmes
conclusions ou pas.
# C'est étrange car mettre les données utilisées à disposition permet au
# lecteur d'en évaluer la qualité (voire d'y trouver des erreurs). Sans
# cette évaluation, difficile pour le lecteur de savoir quelle confiance
# avoir dans les conclusions de l'article.
De même expliciter les choix effectués à chacune des étapes de l'étude
s'avère essentiel. Quel protocole expérimental a été choisi et
pourquoi ? Quelles données ont été conservées ? Quelles données ont
été soigneusement écartées et pourquoi ? Quelle procédure statistique
a été utilisée et les hypothèses sous-jacentes étaient elles
raisonnables ? Etc.
Après tout, on doit toujours faire des choix à un moment donné. Mais
ne pas expliquer ces choix, même en étant rigoureux et de bonne foi,
c'est prendre le risque que les lecteurs deviennent
suspicieux. D'autre part, être totalement transparent sur ces choix,
c'est permettre à d'autres (ou à vous-même) de décider s'il est
nécessaire de revenir dessus ou pas
Pour garder trace de tous ces choix et des informations sur ces
données, le cahier de laboratoire un outil essentiel. Encore faut-il
ensuite mettre ces informations à disposition, mais nous reviendrons
sur ce point par la suite.
** 2) L'ordinateur, [[http://theconversation.com/how-computers-broke-science-and-what-we-can-do-to-fix-it-49938][source d'erreurs]]
<br/>
- *Point and click* :
- <!-- .element class="fragment" data-fragment-index="2" --> *Les tableurs* : [[https://qz.com/768334/years-of-genomics-research-is-riddled-with-errors-thanks-to-a-bunch-of-botched-excel-spreadsheets/][erreurs de programmation]] et de manipulation de données
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px"-->
~Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein
Ligase~ \to ~MARCH1~ \to 2016-03-01 \to 1456786800
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px"-->
~2310009E13~ \to 2.31E+19
- <!-- .element class="fragment" data-fragment-index="3" --> *Pile logicielle complexe*
- <!-- .element class="fragment" data-fragment-index="4" --> *Bug* : /Programmer, c'est dur !/
Note:
La deuxième source de difficultés rencontrées lors de tentatives
de reproduction de travaux est tout simplement les erreurs induites
par l'utilisation effrénée des ordinateurs.
Comme toute innovation technologique, les ordinateurs nous permettent
d'aller plus vite, plus loin mais aussi de faire des erreurs plus
facilement et plus rapidement...
Au premier plan des sources d'erreurs, ces logiciels intuitifs où
l'interaction se fait à la souris et qui ne permettent pas
d'expliciter ce qui est calculé et à partir de quoi. Leur simplicité
d'utilisation incite à les utiliser pour tout, même pour ce pour quoi
ça n'est pas vraiment prévu.
Il est par exemple très difficile de comprendre la logique du calcul
ayant lieu dans une feuille excel pleine de macros. Bien sûr, il est
possible de gérer des stocks et la comptabilité d'une entreprise avec
un tableur, mais ceux qui ont déjà eu à faire à ce genre
d'abominations savent qu'un ERP permet d'éviter bien des soucis. Et
bien de la même façon, un tableur n'est pas le bon outil pour faire
des statistiques ou du traitement de données !
Tenez, quelques exemples d'anecdotes effroyables liées à l'utilisation
d'un tableur. En génomique, il est bien pratique de donner des petits
noms aux gènes tels que celui-ci. Celui-ci, c'est MARCH1. Seulement
pas mal de tableurs croient bien faire en l'interprétant
comme une date et par effet de bord comme le nombre de secondes
écoulées depuis le 1er janvier 1970... L'identifiant de gène 231 000
9E13 se retrouve lui aussi fréquemment convertit en nombre. Alors bien
sûr, il n'y a peut-être qu'une vingtaine de gènes concernés par ce
genre de problème sur les 30,000 du génome humain, mais c'est quand
même assez désagréable.
De manière générale, il est courant de se reposer sur une pile
logicielle complexe. Complexe et souvent mal maîtrisée. Combien
d'études reposent ainsi sur des logiciels propriétaires, sortes de
boites noires dont on ne maîtrise pas le contenu et qui appliquent
aveuglement des procédures de calculs et de transformations de
données?
# - l'utilisation de telle ou telle méthode plutôt qu'une autre est
# souvent discutable
Alors, je ne suis pas en train de dire qu'il faut tout reprogrammer
soi même. Ce n'est bien sûr par la meilleure façon d'échapper aux
bugs. Dans les cas de l'étude Reinhart et Rogoff ou des fausses
structures de protéines de Chang, les erreurs venaient de programmes
maisons.
Mais il me semble essentiel d'être en mesure de déterminer dans son
analyse si chacune des briques est digne de confiance ou pas. Et si
l'un des composants, par sa nature, l'interdit, il faut sérieusement
songer à le remplacer.
** L'informatique, seule responsable ?
<br/>
*Le manque de rigueur et d'organisation*
- Pas de backup
- Pas d'historique
- Pas de contrôle qualité
Note:
Enfin, la dernière cause méthodologique de non-reproductibilité et
source d'erreurs est certainement le mangue de rigueur et
d'organisation.
Même si le stockage ne coûte plus rien de nos jours, la sauvegarde des
données est souvent mal assurée et il est courant d'en perdre suite à
une mauvaise manipulation, ou bien à la suppression de son compte
informatique lors du passage d'une institution à une autre.
En l'absence de mécanisme de gestion de version, il est courant
de remplacer par inadvertance d'anciennes données par de nouvelles et
de ne plus arriver à accéder à d'anciennes observations.
Dans un certain nombre de domaines, l'utilisation de plans
d'expériences randomisés ou de pré-études (study pre-registration),
n'est absolument pas systématique. De même les bonnes pratiques de
développement logiciel comme la revue de code ou l'intégration
continue sont encore rarement appliqués au logiciels utilisés dans la
recherche.
** Une dimension culturelle et sociale
#+BEGIN_QUOTE
<center> Article = version _simplifiée_ de la procédure </center>
#+END_QUOTE
<br/>
#+BEGIN_QUOTE
<center>
*Tracer* toutes ces informations et les *rendre disponibles* =
investissement conséquent
</center>
#+END_QUOTE
<br/>
Si personne n'exige/n'inspecte ces informations, à quoi bon
s'embêter ?
Note:
Enfin, il serait naïf de ne pas évoquer la dimension culturelle et
sociale du problème.
Un article est une version simplifiée et intelligible des
résultats. Certains diraient même la publicité... Une description de
haut niveau est essentielle car elle permet de prendre du recul mais
elle est devenue la norme alors que la technicité de la recherche
actuelle est telle qu'il est clairement impossible de donner dans un
document de 8 à 10 pages toutes les informations permettant de refaire
les expériences et les analyses.
- La description du protocole expérimental est souvent succincte
- Les données sont généralement bien trop nombreuses pour être données
in extenso et sont résumées à travers quelques courbes.
- Les traitements statistiques appliqués pour parvenir à ces courbes
ne sont décrits que rapidement.
Alors, bien sûr il est possible de tracer toutes ces informations et
de les mettre à disposition. À ceci près que cela demande du temps,
voire beaucoup de temps si on ne dispose pas des bons outils.
# - sans compter que mettre à disposition toutes ces informations, alors
# qu'on a soi-même peiné à les obtenir, c'est permettre à d'autres de
# récupérer les fruits de notre travail sans efforts.
Mais si personne n'exige ces informations, à quoi bon s'embêter ?
** Tout rendre public ?
<br/>
- Les /faiblesses/ deviendraient évidentes
- <!-- .element class="fragment" -->Quelqu'un pourrait trouver une /erreur/
- <!-- .element class="fragment" -->Quelqu'un pourrait en [[http://www.nature.com/news/the-top-100-papers-1.16224][tirer avantage à ma place]]
- <!-- .element class="fragment" --> /Les données peuvent être sensibles/
# sécurité, machine learning pour la police
#+BEGIN_EXPORT html
<br/>
#### <!-- .element class="fragment" --> Donnons nous les moyens que tout soit inspectable à la demande
#+END_EXPORT
Note:
Mais donner accès, mettre à disposition, cela veut dire tout rendre
public ? N'est-ce pas un peu radical ? Et risqué ? Démontons ensemble
quelques idées reçues.
Si je donne accès à tout ce que j'ai fait, il deviendra alors évident
que ce que j'ai fait n'est pas aussi parfait que ce que je prétends,
que c'est un peu sale et pas toujours très rigoureux, que j'ai
sélectionné les résultats que je présente.
- C'est sûr. En même temps, c'est la réalité et vous auriez tort de
croire que vous êtes le seul dans cette situation. Si ça se trouve,
vous travaillez mieux que les autres et dans un domaine où la
réputation est essentielle, vous avez probablement plutôt intérêt à
le montrer. Pire, si vous le cachez, cela finira par paraître
suspicieux.
Vous me direz qu'en révélant tout, je prend le risque que quelqu'un
trouve une erreur et de passer pour un imbécile.
- C'est certain, mais tout le monde fait des erreurs, même les plus
grands. Et en ce qui me concerne, je préfère que quelqu'un trouve
une erreur et m'aide à la corriger afin que mes travaux deviennent
corrects.
Oui, mais quelqu'un pourrait tirer parti, réanalyser ces données que
j'ai eu tant de mal à obtenir, ou simplement utiliser ce code que j'ai
eu tant de mal à écrire et faire trois ou quatre papiers là où je n'ai
eu le temps d'en faire qu'un.
- Alors d'abord, si quelqu'un réutilise votre travail, il se doit de
le citer correctement et de vous rendre le crédit qui vous est
dû. Ensuite les articles les plus cités de tous les temps sont des
articles présentant des contributions méthodologiques ou du logiciel
qui sont devenus essentiels dans un domaine.
Une petite parenthèse : ceux d'entre vous qui connaissent github,
savent que cette plate-forme est à mi-chemin entre la plate-forme de
développement logiciel et le réseau social. Les contributions d'un
développeur à différents projets sont visibles ainsi que la
fréquence de ses contributions, ce qui permet à un jeune développeur
de se faire une carte de visite infalsifiable et
ultra-visible. Montrer ce que l'on fait est une façon efficace
d'atteindre une certaine forme de reconnaissance par la
communauté. Mettre ses travaux à disposition de tous est
probablement la meilleure façon de démontrer sa propriété
intellectuelle.
Enfin, il est possible que les données soient sensibles et ne puissent
être divulguées sans prendre le risque de causer du tort à des
gens. Par exemple, s'il s'agit de données médicales, de données
judiciaires, d'informations sur des enfants ou sur des intentions de
vote, etc.
- Dans ce type de situation où les travaux ont une dimension éthique,
il convient de définir quelles personnes peuvent avoir accès aux
informations pour les vérifier ou les réutiliser. Ensuite, il existe
des techniques cryptographiques assez faciles d'accès permettant de
s'assurer que seulement les personnes habilitées peuvent accéder aux
données.
Dans tous les cas, même si au final ces informations sont
semi-publiques, il est essentiel de se donner les moyens de permettre
à autrui d'inspecter ce que nous avons fait.
** Outils à éviter et alternatives
<br/>
- *Outils, formats, et services propriétaires*
1. <!-- .element class="fragment" --> <strike> excel, word, evernote </strike>
- markdown, orgmode, csv, hdf5, ...
2. <!-- .element class="fragment" --> <strike> SAS, Minitab, matlab, mathematica, ... </strike>
- scilab, R, python, ...
3. <!-- .element class="fragment" --> <strike> dropbox, cahiers de labo en ligne propriétaires, ... </strike>
- framadrop, gitlab/github, ...
- <!-- .element class="fragment" --> *Outils "intuitifs" *
- <strike> tableurs, interfaces graphiques, exploration interactive
</strike>
- apprendre à se contrôler... ☺
- R, python, ...
Note:
Et pour permettre l'inspection, il faut utiliser les bons outils
Cela commence par banir autant que possible les logiciels et les
formats propriétaires. Bien sûr, ces outils sont bien faits et vous y
êtes habitués mais on en est également captif et les entreprises qui
les développement n'offrent aucune garantie sur le long terme. Je suis
sûr que ces mises à jours automatiques vous agacent vous aussi. :)
L'expérience montre qu'il est hélas très courant de perdre des données
et des informations lors de ces mises à jour.
Alors, soyons honnête, l'utilisation de logiciel libre ne vous protège
absolument pas de ce genre de mauvaises surprises. Mais comme vous
avez accès librement à l'ensemble des versions, les chances d'arriver
à récupérer vos données sont quand même bien plus élevées. De même
l'adoption de formats textes simples et ouverts augmente vos chances
d'arriver à les relire avec d'autres logiciels.
En ce qui me concerne, à chaque fois que j'ai utilisé un format
binaire ou pas bien ouvert, j'ai fini par perdre des données. Cela
fait donc 10 ans que je n'utilise plus que des formats texte ou des
standards binaires ouverts et le problème ne s'est plus jamais posé,
et ce malgré les mises à jours logicielles très régulières de ma
machine.
Donc règle numéro 1 : utiliser autant que possible du format texte
(markdown, orgmode pour vos notes, csv pour vos données).
Règle numéro 2 : utiliser autant que possible les logiciels et les
langages de programmation libres comme R ou python.
Et Règle numéro 3 : éviter de stocker vos données chez un hébergeur
dont vous pourriez être captif.
En effet, les services gratuits (ou pas) et très intégrés sont
tentants mais correspondent à un business plan particulier qui peut se
révéler incompatible avec vos besoins futurs, ne pas être pérenne et
ne vous donne pas forcément les garanties de confidentialité que vous
souhaiteriez.
Enfin, attention aux tableurs et outils graphiques qui peuvent vous
donner au premier abord l'impression d'une meilleur efficacité et
productivité mais qui sur le long terme ne vous permettent pas
d'atteindre la traçabilité et l'inspectabilité que vous souhaiteriez.
C'est plus difficile, en particulier au début, mais en utilisant des
langages comme R ou python, passé la première marche, on gagne
rapidement en puissance et en efficacité.
** Conséquences :noexport:
- Des *erreurs*...
- Des *difficultés* certaines à *réutiliser* le travail des autres, voire
son propre travail
- Un *doute* dommageable pour tout le monde (auteur, détracteurs,
lecteur, décideur...)
<br/>
Note:
C'est pour toutes ces raisons que les résultats de recherche
contiennent parfois des erreurs et sont si difficile à répliquer et à
réutiliser, même au sein d'une même équipe.
Les doutes que cela engendre sont dommageable pour tout le
monde. Lorsque l'on propose un résultat, il n'est pas agréable d'être
soupçonné de fraude ou d'incompétence. En même temps, les détracteurs
d'un résultat apparaissent comme de simples aigris ou au contraire
comme des lanceurs d'alertes selon le contexte alors qu'il est normal
de questionner un résultat et d'avoir un débat apaisé et rationnel à
son sujet.
Face à ces problèmes, il me semble que la meilleur attitude à avoir
est celle de la transparence : Expliciter augmente les chances de
trouver les erreurs et de les éliminer.
C'est d'ailleurs une demande de plus en plus pressante de la part
de la société civile afin d'éviter les dérives et d'améliorer
l'efficacité de nos travaux.
** Changement de paradigme
1. Manque d'information, problème d'accès aux données
2. Erreurs de calcul
3. Manque de rigueur scientifique et technique
#+BEGIN_EXPORT html
<img src="assets/img/in_science_we_trust_small.jpg" style="height:200px"/>
<img src="assets/img/in_code_we_trust.jpg" style="height:200px"/>
#+END_EXPORT
*** Expliciter augmente les chances de trouver les erreurs et de les éliminer
# Demande de *traçabilité* de plus en plus pressante de la société, des
# institutions, de l'Europe, ...
Note:
Nous avons vu que la première cause d'échec de reproduction de
résultats scientifiques est tout simplement le manque d'information,
la non disponibilité des données ou des procédures appliquées. Cela ne
signifie pas que le résultat soit faux mais cela empêche de le
vérifier et de s'appuyer dessus.
La seconde cause d'échec est tout simplement l'erreur de calcul qui
peut se glisser n'importe où.
De manière générale, le manque de rigueur scientifique et technique
est souvent à l'origine de ces deux problèmes.
Il me semble que la meilleur attitude à avoir est celle de la
transparence : Expliciter augmente les chances de trouver les erreurs
et de les éliminer. C'est pour cela que nous assistons ces dernières
années à un changement de paradigme de recherche et que l'on exige un
accès à l'ensemble des données et des procédures de calcul.
C'est d'ailleurs une demande de plus en plus pressante de la part de
la société civile (en particulier le Conseil Européen) afin d'éviter
les dérives et d'améliorer l'efficacité de nos travaux.
* C028AL-W2-S3 (\approx 7:40); Le document computationnel : principe
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. *Le document computationnel : principe*
4. Prise en main de l'outil <br/> Au choix :
- Jupyter
- Rstudio
- OrgMode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** <!-- .slide: class="center" --> Le document computationnel : <br> principe file:assets/img/iceberg.jpg&size=contain
Note:
Dans cette séquence, je vais vous présenter ce qu'est un document
computationnel ainsi que les principes généraux que nous retrouverons
dans chacun des trois environnements dont je vous ai précédemment
parlé. L'intérêt de ce type de document est de permettre une
transparence la plus complète possible.
** La science moderne
<br>
#+BEGIN_EXPORT html
<img src="assets/img/iceberg_publication-1.png" data-fragment-index="1" class="fragment current-visible"/>
<img src="assets/img/iceberg_publication-2.png" data-fragment-index="2" class="fragment current-visible"/>
<img src="assets/img/iceberg_publication-3.png" data-fragment-index="3" class="fragment current-visible"/>
<img src="assets/img/iceberg_publication-4.png" data-fragment-index="4" class="fragment current-visible"/>
<img src="assets/img/iceberg_publication-5.png" data-fragment-index="5" class="fragment current-visible"/>
#+END_EXPORT
Note:
# Data \to visualization/analysis \to article
Si une partie de l'activité scientifique nécessite des mesures sur le
terrain ou derrière une paillasse, la majeure partie se passe
maintenant derrière un ordinateur, les données provenant de machines
spécifiques : je pense par exemple à un accélérateur de particules, des
séquenceurs d'ADN, un téléscope, un réseau de capteur ou bien sûr des
simulations numériques s'exécutant sur des supercalculateurs.
Une fois ces données obtenues, elles sont transformées pour être
analysées, visualisées afin de mieux en comprendre la structure. Il
est courant de partager ces visualisations avec des collègues,
d'avoir un certain nombre d'itérations, de passer d'une vue à une
autre jusqu'à trouver celle qui explique le mieux les choses. On
utilise d'ailleurs souvent une multitude de logiciels spécifiques pour
obtenir ces visualisations.
Il arrive souvent qu'on soit déçu par les résultats, qu'on n'y
comprenne rien ou qu'on se rende compte que les données ne sont pas
intéressantes et qu'il faut se poser la poser la question sous un
angle différent.
Dans ce cas, retour à la case départ : acquisition de
données, visualisations, statistiques, nombreux échanges avec les
collègues...
Puis ça y est, on trouve enfin quelque chose d'intéressant. On prend
alors nos plus belles figures, on y ajoute les explications qui sont
finalement les bonnes, on tente de rendre tout cela intéressant et on
envoie l'ensemble à une conférence ou un journal.
Hélas, dans un pdf de 8 pages, le lecteur trouvera une jolie histoire,
des figures convaincantes mais n'aura aucune idée du réel travail
effectué. L'article, c'est la partie émergée de l'iceberg et il n'y a
alors plus aucun moyen de revenir sur les nombreuses tentatives et
échecs, ni sur les calculs et les données derrière chacune de ces
figures.
La recherche reproductible, c'est permettre de pouvoir naviguer dans
les deux sens et de combler le fossé séparant l'auteur du lecteur.
** Objectifs méthodologiques
<br>
Garder trace afin de :
- *Inspecter* : justifier/comprendre
- *Refaire* : vérifier/corriger/réutiliser
Note:
Notre objectif est donc d'avoir un outil nous permettant :
- d'une part d'inspecter toute cette démarche, afin que l'auteur
puisse justifier pourquoi tel ou tel code est utilisé et que le
lecteur puisse comprendre ce qui a été fait;
- et d'autre part de refaire le calcul et l'analyse le plus
simplement possible, ce qui est essentiel
1. pour permettre aux lecteurs de vérifier que ces calculs sont
corrects,
2. pour permettre éventuellement de corriger des erreurs s'il y en a
3. et enfin pour permettre à d'autres de réutiliser ces travaux, soit
sur un jeu de données différent, soit en réutilisant une partie de
la procédure d'analyse dans un autre contexte.
** La vitrine... <span data-fragment-index="1" class="fragment">et l'envers du décor </span>
#+BEGIN_EXPORT html
<img src="assets/img/example_pi_full-1.svg" style="height:600px" data-fragment-index="0" class="fragment current-visible"/>
<img src="assets/img/example_pi_full-2.svg" style="height:600px" data-fragment-index="1" class="fragment current-visible"/>
<img src="assets/img/example_pi_full-3.svg" style="height:600px" data-fragment-index="2" class="fragment current-visible"/>
<img src="assets/img/example_pi_full-4.svg" style="height:600px" data-fragment-index="3" class="fragment current-visible"/>
<img src="assets/img/example_pi_full-5.svg" style="height:600px" data-fragment-index="4" class="fragment current-visible"/>
<img src="assets/img/example_pi_full-6.svg" style="height:600px" data-fragment-index="5" class="fragment current-visible"/>
#+END_EXPORT
Note:
Voici la partie émergée du document computationnel. Au premier abord,
il s'agit d'un document tout à fait banal avec un titre, du texte,
éventuellement un petit morceau de code illustrant une procédure de
calcul, des résultats numériques, des formules de maths, des figures,
etc. Bref, un article classique au format pdf ou html.
Voici maintenant ce qui se cache derrière ce document : ici, un
notebook Jupyter tel que nous pouvons le voir dans un navigateur
web. C'est un document dynamique constitué de différentes parties sur
lesquelles on peut interagir.
Tout d'abord du texte au format markdown : ce sont les zones de texte
que j'ai surlignées en orange. Le formattage est assez simple, on peut
assez facilement y inclure des liens hypertextes ou des formules
mathématiques.
Entre ces zones de texte, on trouve des zones de code, que j'ai
surlignées en bleu. Ici il s'agit de fragments de code python
relativement simples. Dans cet environnement, il est possible d'éditer
directement ces fragments de code et les exécuter. En fait, un
notebook a en interne une console python ouverte et lorsque l'on
demande l'exécution d'un fragment de code, le code est directement
envoyé dans la console et le résultat est automatiquement récupéré.
Le résultat de chacun de ces différents codes est stocké juste en
dessous dans les zones que j'ai surlignées en jaune. Puisque cette
console reste "vivante" tout au long du document, les résultats
calculés dans un bloc sont visibles dans le bloc suivant, ce qui
encourage à ne pas écrire de longs blocs de code infâmes, mais au
contraire à écrire de petits fragments, à calculer les choses petit à
petit, tout en expliquant dans les zones de texte (en orange) comment
les différents fragments de code (en bleu) s'enchaînent et éventuellement
pourquoi, en fonction de ce que l'on vient de calculer (en jaune), on
décide d'appliquer tel nouveau fragment.
Une fois satisfait avec les calculs, on aime en général bien créer un
document classique en exportant vers du pdf ou du html. Chaque zone
(texte, code, résultat) est convertie et assemblée en un seul document
markdown qui est à son tour transformé vers le format désiré avec un
outil comme pandoc.
Bien sûr, dans le document final, on ne souhaite pas forcément rendre
tous les fragments de codes et tous les résultats visibles. C'est la
raison pour laquelle pour chacune de ces zones, il est possible de
spécifier si l'on souhaite la cacher ou pas.
Enfin, si les résultats intermédiaires sont stockés automatiquement
dans le notebook, l'environnement permet de ré-exécuter très
simplement l'ensemble du code du notebook et de mettre à jour les
résultats.
C'est donc à vous de décider, selon le contexte, si vous souhaitez
partager le document final, qui est souvent plus compact, ou le document
computationnel qui va permettre une inspection complète et une
réutilisation.
** Les différents outils
1. Jupyter
2. Rstudio/knitR
3. Org mode
# | Principes | Différences |
# |---------------------------------+--------------------|
# | • Explications, code, resultats | • Syntaxe |
# | • Session | • Interopérabilité |
# | • Export | • Contrôle export |
<br/>
<table class="fragment" data-fragment-index="1">
<tr>
<td class="fragment" data-fragment-index="1"> *Principes identiques* </td>
<td class="fragment" data-fragment-index="2"> *Différences* </td>
</tr>
<tr>
<td class="fragment" data-fragment-index="1"><ul style="font-size:30px">
<li> *1 seul document* : <br> explications, code, résultats
<li> Session
<li> Export
</ul></td>
<td class="fragment" data-fragment-index="2"><ul style="font-size:30px">
<li> Syntaxe <br/> <span style="color:white">.</span>
<li> Interopérabilité des langages
<li> Contrôle export
</ul></td>
</tr>
</table>
Note:
Les trois environnements les plus matures permettant de créer de tels
documents sont Jupyter, que vous venez de voir, Rstudio/knitr, et
Org-mode. Ces trois environnements se distinguent par le niveau de
technicité nécessaire à leur mise en oeuvre. Je ferai une petite démo
de chacun de ces trois environnements dans les séquences suivantes. À
l'issue de ces démonstrations, vous pourrez choisir lequel vous
convient le mieux.
Vous verrez que le principe reste le même dans les trois environnements :
- Tout d'abord, avoir un seul document comprenant un entrelacs
d'explications au format markdown, de code exécutable simplement, et
les résultats de ces exécutions.
Cette organisation permet l'inspection et la réexécution que nous
nous étions fixés comme objectifs.
- En interne, une console python ou R est active et assure une
persistance des variables d'un fragment de code à l'autre. C'est la
notion de session sur laquelle nous reviendrons pendant les
démonstrations.
- Enfin, il est possible d'exporter le document computationnel vers un
format plus traditionnel éventuellement en masquant certaines
parties.
Les différences entre ces différents environnements sont relativement
mineures :
- Il y a quelques différences de syntaxe. Jupyter et Rstudio utilisent
du markdown alors que Org mode utilise le format org qui est
légèrement différent mais tout aussi lisible. La
façon d'indiquer les zones de code et les résultats est également un
peu différente mais c'est sans grande importance une fois dans
l'environnement correspondant.
- Plus important, peut-être l'interopérabilité entre différents
langages. Jupyter vous permet de faire du python, du R, du ruby ou
bien du julia mais pas vraiment d'utiliser plusieurs langages dans
un même notebook. /Enfin/, c'est possible mais ça demande un peu de
travail.
Rstudio est conçu spécifiquement autour du langage R. Même s'il est
possible d'utiliser du code python, vous verrez que ça n'est pas
aussi convivial que pour R.
Enfin, Org-mode permet une interaction entre les différents langages
relativement naturelle mais comme je le disais, la courbe
d'apprentissage est un peu plus raide.
- Enfin, ces outils diffèrent par le contrôle offert en terme de mise
en page lors de l'export. Jupyter et Rstudio se reposent sur
markdown et donc sur pandoc. Le style par défaut est très bien,
surtout si on souhaite produire du HTML. Mais si on doit produire un
document PDF respectant un style particulier, ça peut être peu
compliqué de demander à pandoc d'appliquer ce style.
Org-mode ne fait à peu près rien pour vous de ce point de vue là. Il
vous faudra donc de toutes façons configurer le style de votre
export. Ceci dit, un des points que j'apprécie particulièrement
lorsque je prépare un article en latex avec org-mode, c'est la
capacité à écrire directement du LaTeX qui sera passé tel quel lors
de l'export, ce qui me permet de faire exactement ce que je
souhaite.
Bien. Vous savez tout. Alors maintenant, Démo !
* C028AL-W2-S4-A; Prise en main de l'outil (Jupyter)
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil* <br/> Au choix :
- *Jupyter*
- Rstudio
- OrgMode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : <br> Jupyter
#+BEGIN_EXPORT html
<br>
<br>
<img src="assets/img/jupyter-logo.png" style="width:400px"/>
#+END_EXPORT
** Lancement
- Ouverture d'un document
- Description rapide
- Sauvegarde
- Aide
** Exécution des blocs
- Exécution et récupération des résultats
- Ajout d'un bloc
- Attention à l'ordre
- Notion de session
- Incohérences possibles
- Tout réexécuter depuis le début
** Raccourcis clavier, <br> auto-complétion, <br> et Ipython magic
- Raccourcis clavier =<h>=
- Complétion python (exemple de numpy)
- =%matplotlib=, =%lsmagic=
# =%run=, =%load=, =%load_ext=
** Utiliser d'autres langages
- Exemple pour R :
- =%load_ext rpy2.ipython=
- =%%R %%sh %%perl=
- Interaction entre =R= et =python= possible
- mais fragile...
** Production et partage <br> du document final
- Résultats stockés dans le document
- $\to$ visibles dans gitlab
- =git pull/push=
- Export HTML/PDF classique
** Préparer un document
# Contrôler la visibilité du code et des résultats
- Hide-code plugin
- =%%latex= et =%%html=
- [[http://nbconvert.readthedocs.io/en/latest/external_exporters.html][Personnaliser les /exporters/ de NBConvert]] <br>
~jupyter nbconvert --to mypackage.MyExporter~ <!-- .element style="font-size:24px"--> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~notebook.ipynb~ <!-- .element style="font-size:24px"-->
** Recap
- Beaucoup d'informations en peu de temps
- Mettez en pratique !
* C028AL-W2-S4-B; Prise en main de l'outil (Rstudio)
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil* <br/> Au choix :
- Jupyter
- *Rstudio*
- OrgMode
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : <br> Rstudio
#+BEGIN_EXPORT html
<br>
<br>
<img src="assets/img/RStudio-Logo-Blue-Gradient.png" style="height:200px"/>
<img src="assets/img//knitr.png" style="height:200px"/>
#+END_EXPORT
Note:
Même plan que précédemment
** Lancement
- Ouverture d'un document
- Description rapide
- Sauvegarde
- Aide
** Exécution des blocs
- Exécution et récupération des résultats
- Ajout d'un bloc
- Attention à l'ordre (notion de session, incohérences possibles)
- Tout réexécuter depuis le début
** Raccourcis clavier et auto-complétion
- Raccourcis claviers
- Complétion R
- Folding
** Production et partage du document final
- Knit
- Partage à peu de frais via rpubs
** Contrôler la visibilité du code et des résultats
- Complétion (paramètres des blocs)
** Utiliser un style particulier
- pdf, LaTeX
- html
- word/office
Possibilité de faire du LaTeX (R Sweave : =Rnw=) ou du <br/>html (R html :
=Rhtml=) directement pour avoir un contrôle parfait.
** Utiliser d'autres langages
- Ajout et exécution d'un bloc python
- Attention, pas de session !
- Interaction uniquement via fichiers et dans de longs blocs
** Recap
- Beaucoup d'informations en peu de temps
- Mettez en pratique !
* C028AL-W2-S4-C; Prise en main de l'outil (OrgMode)
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. *Prise en main de l'outil* <br/> Au choix :
- Jupyter
- Rstudio
- *OrgMode*
5. Travailler avec les autres
6. Analyse comparée des différents outils
** Prise en main de l'outil : <br> Org Mode
#+BEGIN_EXPORT html
<br>
<br>
<img src="assets/img/600px-EmacsIcon.svg.png" style="height:200px"/>
<img src="assets/img/442px-Org-mode-unicorn.svg.png" style="height:250px"/>
#+END_EXPORT
Note:
Même plan que précédemment
** Lancement
- Ouverture d'un document
- Description rapide
- Folding / Navigation
- Restructuration
- Sauvegarde
- Aide
** Exécution des blocs
- Ajout d'un bloc R
- Exécution et récupération des résultats
- Attention à l'ordre
- Notion de session
- Incohérences possibles
- Tout réexécuter depuis le début
** Raccourcis clavier
- Bloc expansion
- R graphique
- Python, perl, ...
- Shell session
- Plusieurs sessions, plusieurs langages !
- Communication entre langages possible
** Navigation :noexport:
- Folding
- Restructuration
# - Annotation (tags) ???
# - Sparse Tree ???
** Production et partage <br> du document final
- Git Commit
- Attention aux fichiers produits
- Export
# - Désactiver le recalcul
- Visibilité du code et des résultats
- Sections cachées
** Utiliser un style particulier
- pdf, LaTeX
- html
- Possibilité de reprendre le contrôle
** Recap
- Beaucoup d'informations en peu de temps
- Apprivoiser les raccourcis claviers avec la <br> première entrée du
journal
- Mettez en pratique !
* C028AL-W2-S5; Travailler avec les autres
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil <br/> Au choix :
- Jupyter
- Rstudio
- OrgMode
5. *Travailler avec les autres*
6. Analyse comparée des différents outils
** Travailler avec les autres
# file:assets/img/jumping_penguin.png&size=contain
#+BEGIN_EXPORT html
<center><img src="assets/img/jumping_penguin.png" style="width:800px"/></center>
#+END_EXPORT
** Préparer un document pour un journal
Pré-requis pour faire un *pdf* :
- Actuellement caché. En interne /pandoc/, /knitr/ ou /emacs/org-mode/
- /LaTeX/ installé
<!-- .element class="fragment" data-fragment-index="1" --> Export *office/word* possible dans jupyter mais à configurer. Sinon
export *html*...
*<!-- .element class="fragment" data-fragment-index="2" --> Dans tous les cas* <span class="fragment" data-fragment-index="2">:</span>
- <!-- .element class="fragment" data-fragment-index="2" --> Besoin de cacher certaines cellules
- <!-- .element class="fragment" data-fragment-index="2" --> Utiliser le bon style
<br/>
# Soyons honnêtes
*** <!-- .element class="fragment" data-fragment-index="2" --> Produire un tel document demande d'avoir un environnement parfaitement configuré
Note:
Tout ces détails auront été expliqués avant pour chaque environnement.
- http://blog.juliusschulz.de/blog/ultimate-ipython-notebook
- https://github.com/kirbs-/hide_code is a must-have
- http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/
- https://github.com/balouf/Kleinberg/blob/master/KleinbergsGridSimulator.ipynb
- Il y doit y avoir des choses équivalentes, mais plus simples pour
Rmd
- Et pour emacs, c'est d'une certaine façon plus simple car on est
habitué à bidouiller.
** Convaincre vos co-auteurs
<br/>
Face à cette complexité, plusieurs réactions :
1. Pas grave, c'est génial ! Je m'y mets !
2. Euh... c'est bien. Mais je n'ai pas le temps d'apprendre...
3. Un nouvel outil ? Jamais !
$\leadsto$ différentes organisations possibles
** Option 1 : les co-auteurs enthousiastes
<br/>
Il faudra *assurer le service après-vente* :
- Compatibilité avec les différents environnements
- Gérer cette complexité (jupyter/rstudio/emacs, git, ...)
C'est la meilleure façon de *s'assurer que tout est reproductible* et
inspectable (et pas uniquement sur votre propre machine...)
** Option 2 : investissement a minima
<br/>
Vos co-auteurs vous laissent gérer le code, les résultats mais
adoptent votre style de document.
*Ils peuvent :*
- Éditer le texte de l'article (markdown ou org-mode)
*Ils ne peuvent pas :*
- Recalculer
- Exporter et voir le document final
** Option 3 : les co-auteurs "réfractaires"
<br>
*Les co-auteurs ne changent pas leurs habitudes*
- Un document /computationnel/ séparé produit tous les résultats et
toutes les figures
- Un autre document (/classique/) inclut les figures générées
Mais tout est *conservé*, *documenté* et *recalculable* dans votre document
computationnel !
** Publier / partager votre document
*Rpubs*
- Parfait pour partage rapide, pas pérenne
<!-- .element class="fragment" data-fragment-index="1" --> *Dropbox et autres*
- <!-- .element class="fragment" data-fragment-index="1" --> +Pérénité+,
accès ??, ...
<!-- .element class="fragment" data-fragment-index="2" --> *Gitlab/Github/...*
1. <!-- .element class="fragment" data-fragment-index="2" --> Rendre public (tout l'historique !)
2. <!-- .element class="fragment" data-fragment-index="2" --> Faire le ménage et archiver l'état courant dans un site compagnon
<!-- .element class="fragment" data-fragment-index="3" --> *Sites compagnons*
- <!-- .element class="fragment" data-fragment-index="3" --> Runmycode, Éditeurs, ...
- <!-- .element class="fragment" data-fragment-index="3" --> Article : *HAL* ; code et données : *Figshare / zenodo*
** Conclusion
<br/>
Plusieurs modalités possibles en fonction de :
- vos co-auteurs
- vos contraintes techniques
- vos contraintes de confidentialité/copyright
* C028AL-W2-S6; Analyse comparée des différents outils
** Le document computationnel
_Module 2. La vitrine et l'envers du décor : le document computationnel_
1. Exemples récents d'études assez discutées
2. Pourquoi est-ce difficile ?
3. Le document computationnel : principe
4. Prise en main de l'outil <br/> Au choix :
- Jupyter
- Rstudio
- OrgMode
5. Travailler avec les autres
6. *Analyse comparée des différents outils*
** Analyse comparée <br> des différents outils
#+BEGIN_EXPORT html
<img src="assets/img/jupyter-logo.png" style="width:100px"/>
<img src="assets/img/RStudio-Logo-Blue-Gradient.png" style="height:100px"/>
<img src="assets/img/442px-Org-mode-unicorn.svg.png" style="height:125px"/>
<img src="assets/img/question_mark.png" style="height:100px"/>
#+END_EXPORT
Un document computationnel, <br>
mais pour quoi faire exactement ?
Note:
- Pour comparer ces différents outils, il est important de bien
identifier l'usage que l'on souhaite en faire.
- Nous allons regarder ensemble quelques cas d'usages
** Un cours ou un tutoriel
Un notebook Jupyter
- Facile à prendre en main
- Document dynamique
Note:
- Super pratique.
- Téléchargement, exécution dynamique, résultats interactifs,
variations faciles, etc.
- C'est idéal pour un document à destination d'auto-formation.
** Un journal
[[file:~/org/journal.org][Mon journal en org-mode]]
- Un seul auteur
- Organisation chronologique
- Étiquettes
- Notes, liens, code
Note:
- Structuration type: par date
- Mots-clés
- Navigation aisée
- Réexécution de code comme d'habitude
** Un cahier de laboratoire
[[file:~/Work/Documents/Articles/2018/Alya-Perf/LabBook.org][Un cahier de laboratoire en org-mode]]
- Organisation sémantique
- Conventions
- Plusieurs auteurs
- Étiquettes pour auteurs, <br>expériences, etc.
Note:
- Assez proche d'un journal mais avec un contenu bien plus technique
et fait pour être exploitable par des collègues.
- Exemple de structuration.
** Un article reproductible
[[file:~/Work/Documents/Articles/2017/paper-hpl-at-scale/paper.org][Un article en cours]]
- Plusieurs auteurs
- Regénérer les figures
- Revenir aux sources
Note:
- On voit la structure de l'article.
- Certaines sections sont cachées
- Elles pointent vers le cahier de laboratoire traçant les données
que je vais exploiter.
- Ici, je suis reparti de figure que Tom avait faites et je les ai
retravaillées et adaptées à ce dont j'avais besoin pour mon
article.
- Ici, c'est un peu "sale", il y a des liens vers des fichiers qui
sont sur mon disque dur mais c'est un article en cours de
préparation et vous voyez que j'ai bien accès à l'ensemble des
informations dont j'ai besoin.
- Plusieurs structurations sont possibles. En général, j'ai une
grosse section cachée au début de l'article où j'indique comment
récupérer l'ensemble des données (avec les commandes git ou les
URLs). Le reste du code d'analyse contenu dans l'article peut alors
être exécuté.
- Ici, comme on prépare un article, il est essentiel de pouvoir cacher
certaines sections et d'avoir un contrôle complet sur la typographie
car on n'a jamais assez de place.
- Dans tous les cas, tout ceci n'est possible que si on a suffisemment
de matière, c'est-à-dire que si on a pris régulièrement des notes
sur comment on a obtenu les données et sur comment on les a
analysées. C'est ce que vous mettrez en pratique dans le module 3
avec l'outil de votre choix.
** Différences techniques
| | Origine | Technologie | Utilisation | Navigation | Format | Article? |
|---------------+-----------+--------------------+---------------+------------+--------+-----------|
| Jupyter | 2001 | Web App., Python | Facile | Limitée | JSON | Difficile |
| Rstudio/knitr | 2011/2014 | IDE, Java/R | Facile | Limitée | Rmd | Oui |
| Org-Mode | 1976/2008 | Editeur, EmacsLisp | Plus complexe | Puissante | Org | Oui |
L'outil importe peu, ce qui importe, c'est :
- collecter l'information
- l'organiser et la rendre exploitable
- la rendre disponible
Note:
- L'écosystème évolue mais vous pouvez déjà vous en saisir.
** Bonus : expériences vécues
- Complétion, introspection donc développement/composition pas si
désagréable comparé à un IDE avancé.
- Objectif atteint. Mois par mois : permet aux collègues d'aider,
d'avancer ensemble, etc. Communication de "problèmes" (données
manquantes par exemple) bien plus simple.
- Un document dynamique et traçable, réexecutable, modifiable,
réutilisable, ... Quand le reviewer 3 demande de refaire la figure 5
en noir et blanc et de changer les légendes. Ou bien de rajouter de
la compléter.
- Au jour le jour : meilleur réutilisation (par exemple entre l'article
et le slide)
Éléments clés lors du choix :
- Simplicité de prise en main vs. vrai éditeur
- Où sont fait les calculs
- Multi-langage
- http://carreau.github.io/posts/23-Cross-Language-Integration.html
- Gestion des langages compilés
- Notions de caches et d'état
Les principaux outils actuels :
- jupyter
- rstudio
- org-mode
Limitations :
- Longs calculs
- Grands documents
- Solutions wysiwyg pour jupyter
Historique/diff un peu compliqué pour jupyter
#+TITLE: Entering Behind the Scenes: Computational Documents
#+AUTHOR: @@latex:{\large Arnaud Legrand} \\ \vspace{0.2cm}LIG, Univ. Grenoble Alpes, CNRS, Inria\\ \vspace{0.2cm} \texttt{arnaud.legrand@imag.fr}@@
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+STARTUP: beamer indent
#+LANGUAGE: fr
#+PROPERTY: header-args :eval no-export
#+OPTIONS: H:2 tags:nil
#+OPTIONS: num:t toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
# #+OPTIONS: author:nil email:nil creator:nil timestamp:t
#+TAGS: noexport(n)
#+EXCLUDE_TAGS: noexport
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \setbeamercovered{invisible}
#+LATEX_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Where are we?}\tableofcontents[currentsection]\end{frame}}
#+LATEX_HEADER: \beamertemplatenavigationsymbolsempty
#+LATEX_HEADER: \usepackage{tikzsymbols}
#+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]}
#+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]}
#+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]}
#+LATEX_HEADER: \usepackage{color,soul}
#+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7}
#+LATEX_HEADER: \sethlcolor{lightblue}
#+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}}
#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \newcommand\SoulColor{%
#+LATEX_HEADER: \let\set@color\beamerorig@set@color
#+LATEX_HEADER: \let\reset@color\beamerorig@reset@color}
#+LATEX_HEADER: \makeatother
#+LATEX_HEADER: \let\hrefold=\href
#+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}}
#+LaTeX: \let\alert=\structure % to make sure the org * * works
#+LaTeX: \begin{frame}{Outline}\tableofcontents\end{frame}
* M2-S0: Computational Documents
** Entering Behind the Scenes: Computational Documents
\vspace{-1cm}
\begin{flushright}
\includegraphics[width=7cm]{../assets/img/phd010708.png}
\end{flushright}
\vspace{-1cm}
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. Collaborating
6. Comparative study
# Note:
# Pour vous convaincre de l'importance de cette traçabilité, je vais
# commencer par vous présenter quelques exemples récents de travaux dont
# les résultats ont été particulièrement controversés et discutés. Ils
# illustrent à quel point la capacité à pouvoir inspecter les méthodes
# utilisées pour produire tel ou tel résultat est essentielle.
# Comme nous le verrons, la plupart des problèmes rencontrés sont liées
# au calcul, qu'il s'agisse d'erreurs de programmations, de
# transformations de données peu rigoureuses, ou bien de procédures
# statistiques discutables.
# Une fois les origines de tous ces problèmes identifiées, je vous
# présenterai rapidement quelles bonnes pratiques mettre en oeuvre afin
# de les éviter.
# En particulier, je vous expliquerai ce que c'est que ce fameux
# document computationnel: un document qui permet de présenter
# agréablement des résultats à d'autres (ce que j'appelle la vitrine)
# mais aussi d'accéder à l'ensemble des calculs sous-jacents (ce que
# j'appelle l'envers du décor).
# Il existe plusieurs formats de tels documents et nous vous proposons
# trois environnements permettant d'en produire facilement. Ces trois
# environnements se distinguent par le niveau de technicité nécessaire à
# leur mise en oeuvre. À vous de choisir celui qui vous convient le
# mieux quitte à en essayer un autre plus tard.
# Jupyter, le premier, a été intégré au MOOC et au gitlab et ne
# nécessite donc aucune installation de votre part. C'est donc le plus
# simple à mettre en oeuvre. L'ensemble des données et des calculs sera
# hébergé sur nos serveurs, mais vous pourrez y accéder et les récupérer
# sur votre propre ordinateur à tout moment via le gitlab si vous le
# souhaitez. Jupyter vous permettra de gérer des notebooks et d'utiliser
# le langage python3 ou bien le langage R.
# Rstudio, le second, est un environnement de développement spécifique
# au langage R. Il vous faudra l'installer sur votre machine et
# synchroniser vos productions avec le gitlab. C'est un logiciel très
# bien maintenu, qui fonctionne aussi bien sous linux et mac que sous
# windows et son installation ne devrait pas poser de difficulté
# particulière. Si vous êtes déjà familier avec le langage R, c'est
# l'option que je vous recommande. L'avantage de cette approche est que
# vous aurez à la fin du MOOC sur votre machine un environnement de
# travail directement prêt à l'emploi. Avec Rstudio, il est également
# possible d'utiliser occasionnellement du code python mais si vous avez
# l'intention de faire principalement du python, il vaut mieux utiliser
# jupyter.
# Enfin, OrgMode, est clairement celui qui est le plus délicat à mettre
# en oeuvre mais c'est aussi celui que Konrad, Christophe et moi-même
# utilisons quotidiennement aussi bien pour gérer notre cahier de
# laboratoire que pour rédiger des articles ou des notes
# techniques. Nous nous sommes donc dit qu'il pouvait être intéressant
# de vous le présenter. OrgMode nécessite l'installation d'Emacs, un
# éditeur de texte qui révèle toute sa puissance dans un environnement
# linux ou mac. Il permet de combiner très efficacement différents
# langages et est par certains aspects moins limité que les deux
# précédents. Cette option est à réserver à un public averti mais le jeu
# en vaut la chandelle.
# Une fois familiarisé avec un de ces environnements, nous vous
# proposerons une petite séance pratique dont l'objectif sera de
# produire un petit document computationnel.
# Les dernières séquences peuvent être visionnées indépendemment et
# traitent de sujets un peu plus techniques, en particulier de comment
# utiliser de tels outils avec vos co-auteurs qui peuvent avoir leurs
# propres habitudes, ou de comment produire des documents avec un style
# bien spécifique.
# Nous concluons enfin ce module avec une comparaison de ces différents
# outils et une présentation des bénéfices d'une utilisation
# quotidienne.
* M2-S1: A few Recent Controversial Studies
** Entering Behind the Scenes: Computational Documents
1. *A few Recent Controversial Studies*
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. Collaborating
6. Comparative study
** A Few Recent Controversial Studies
file:../assets/img/in_science_we_trust.jpg
# Note:
# Je vous avais promis quelques exemples récents de travaux dont les
# résultats ont été particulièrement controversés et discutés. C'est ce
# que je vais vous présenter dans cette séquence.
** Economy: Austerity in Fiscal Policy (1/2)
*** 2010
# - /gross debt [..] exceeding 90 percent of the economy has a
# significant negative effect on economic growth/
#+BEGIN_QUOTE
gross external debt reaches 60 percent of GDP, a country's annual
growth declined by two percent
[..]for levels of external debt in excess of 90 percent, GDP growth
was roughly cut in half
\flushright -- [[https://en.wikipedia.org/wiki/Growth_in_a_Time_of_Debt][Reinhart et Rogoff]]: /Growth in a Time of Debt/
#+END_QUOTE
# - données non publiées mais disponibles sur demande
# Note:
# Commençons par des travaux en économie. 2007: crise des subprimes aux
# États-Unis. De 2008 à 2009, deux économistes prestigieux, Carmen
# Reinhart et Kenneth Rogoff présentent leurs travaux et annoncent que
# la crise financière est loin d'avoir produite toutes ses
# conséquences. En 2010, ils publient un article intitulé "Growth in a
# Time of debt" qui étudie le lien entre dette et croissance.
# Leurs principales conclusions sont que lorsque lorsque la dette
# extérieure d'un pays dépasse 90% du PIB, les conséquences sur la
# croissance sont dramatiques.
# De nombreux politiciens, journalistes et activistes s'appuient sur cet
# article pour soutenir la mise en place de politiques d'austérité
# budgétaire.
** Economy: Austerity in Fiscal Policy (2/2)
*** 2013
# - Herndon, Ash and Pollin: /While using RR's working spreadsheet, we
# identified *coding errors*, *selective exclusion* of/ /available data,
# and *unconventional* weighting of summary *statistics*./
#+BEGIN_QUOTE
While using RR's working spreadsheet, we identified *coding errors*,
*selective exclusion* of available data,
and *unconventional* weighting of summary *statistics*.
\flushright -- Herndon, Ash et Pollin
#+END_QUOTE
# #+BEGIN_EXPORT html
# <br/>
# #+END_EXPORT
# - Wray: /combining data across centuries, exchange rate regimes,
# public and private/ /debt, and debt denominated in foreign currency
# as well as domestic currency/
#+BEGIN_QUOTE
combining data across centuries, exchange rate regimes, public and
private debt, and debt denominated in foreign currency as well as
domestic currency.
\flushright -- Wray
#+END_QUOTE
# Note:
# Ces seuils de 90% ainsi que l'ampleur des conséquences sont très
# discutés, d'autant plus que certains chercheurs échouent à obtenir des
# résultats similaires en utilisant les données disponibles
# publiquement. Ils demandent donc à Reinhart et Rogoff l'ensemble des
# données et des feuilles de calculs utilisées dans l'étude et ces
# derniers finissent par leur fournir.
# Dans ces feuilles, des erreurs de calcul évidentes apparaissent
# rapidement ainsi que des traitement de données assez douteux
# (exclusion de données, pondérations suspectes, etc.).
# Reinhart et Rogoff répondent point par point en expliquant que ces
# quelques erreurs ne changent rien au résultat final, que leur façon de
# calculer les statistiques sont tout à fait standard.
# En fait, une fois les détails révélés, pour beaucoup de chercheurs ces
# calculs n'ont pas beaucoup de sens, les valeurs utilisées sont très
# discutables, et il est malhonnête d'utiliser ces travaux pour
# justifier une politique d'austérité budgétaire.
# Mais le mal est fait. Pendant plus de trois ans, l'austérité n'est pas
# présentée comme un choix mais comme une nécessité. Et quand bien même
# l'article original est considéré comme non pertinent par les
# économistes, ces idées ont fait leur chemin et sont difficiles à
# détrôner.
# Au delà du caractère idéologique de ce genre de travaux, une des
# raisons pour lesquelles ce débat a mis autant de temps à avoir lieu
# est lié à la non publication de l'ensemble des procédures de calcul et
# des données utilisées, pratique courante en économie. Sous les feux
# de la rampe, les auteurs ont bien été forcés de mettre à disposition
# ce qui sous-tendait leur travaux mais sans pression médiatique
# particulière, en général, rien ne se passe...
** Functional MRI
# file:assets/img/Irmf.jpg&size=cover
- 2010: [[https://www.researchgate.net/publication/255651552_Neural_correlates_of_interspecies_perspective_taking_in_the_post-mortem_Atlantic_Salmon_an_argument_for_multiple_comparisons_correction][Bennett et al. and the dead salmon]] $\smiley$
- 2016: [[http://www.pnas.org/content/113/28/7900.abstract][Eklund, Nichols, and Knutsson]]. [[http://www.sciencealert.com/a-bug-in-fmri-software-could-invalidate-decades-of-brain-research-scientists-discover][A bug in fmri software could
invalidate 15 years of brain research]] \newline (/40 000 articles/)
- 2016: But it's [[https://www.cogneurosociety.org/debunking-the-myth-that-fmri-studies-are-invalid/][more subtle than it looks like]]. [[http://blogs.warwick.ac.uk/nichols/entry/bibliometrics_of_cluster/][Nichols]].\newline /\approx 3 600
impacted studies/
Statistical methods and methodology should be improved but no
fundamental invalidation
file:../assets/img/Researcher-test.jpg
# Note:
# Continuons avec un autre exemple: l'imagerie cérébrale, qui permet
# d'observer l'activité du cerveau d'un individu lorsqu'il effectue une
# tâche cognitive et ainsi de mieux comprendre la structure et le
# fonctionnement du cerveau. L'IRM fonctionnelle est l'une de ces
# techniques et mesure de très faibles variations locales du taux
# d'oxygénation du sang dans le cerveau.
# En 2010, Craig Bennett et ses encadrants ont une idée saugrenue. Ils
# placent un saumon mort dans un appareil d'IRM et lui présentent des
# images. Étonnamment, ils observent des signes d'activité cérébrale, ce qui est
# pour le moins surprenant puisque le saumon est bel et bien mort. Aussi
# drôle que cela puisse paraître, Bennett et ses encadrants savent très
# bien ce qu'ils font. Les données brutes obtenues lors d'une IRM sont
# très bruitées et toute une série de calculs et de tests statistiques
# sont appliqués pour transformer ces données en images
# intelligibles. Mais il arrive que le bruit soit trop important, que la
# machine soit mal calibrée, que la procédure de calcul soit inadaptée
# et que des signaux apparaissent fortuitement.
# Leur article rédigé avec un ton très humoristique fait sensation car
# il met le doigt sur des faiblesses méthodologiques.
# L'an dernier, des collègues me sachant intéressé par ces problèmes de
# réplication me font suivre un article récent assez alarmant. Cet article présente un
# problème dans les procédures statistiques utilisées dans les logiciels
# d'analyse d'IRMf les plus courants, ce qui remet potentiellement en
# cause les résultats obtenus ces quinze dernières années. Étant donnée
# l'ampleur de l'erreur, les auteurs concluent que 40,000 articles
# pourraient être concernés. De plus, les données étant très
# volumineuses dans ce domaine, elles ne sont pas archivées et il ne
# sera pas possible de simplement les réanalyser. L'ensemble des
# expériences seraient à refaire...
# En fait, suite aux retours qui leurs sont faits, les auteurs revoient
# rapidement à la baisse leurs estimations assez alarmistes.
# Au final, le problème méthodologique et la capacité à vérifier les
# études suite à des erreurs de calcul reste entier même s'il ne remet
# pas pour autant en cause l'ensemble des résultats obtenus ces
# dernières années.
** Incorrect Protein Structures
#+LaTeX: \begin{columns}\begin{column}{6.3cm}
*Geoffrey Chang*: study the tertiary structures of membrane proteins of
multidrug resistant bacteria
\small MsbA de Escherichia Coli (Science, 2001), Vibrio cholera
(Mol. Biology, 2003), Salmonella typhimurium (Science, 2005)
#+LaTeX: \end{column}\begin{column}{3.5cm}
#+LaTeX: \hspace{-.3\linewidth}\includegraphics[width=1.2\linewidth]{../assets/img/flipping_fiasco.png}
#+LaTeX: \end{column}\end{columns}\medskip
*2006*: Inconsistencies, alerts, then 5 retractions
#+BEGIN_QUOTE
a homemade data-analysis program had flipped
two columns of data, inverting the electron-density map from which his
team had derived the protein structure.
\flushright -- [[https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf][a "buggy software"]]
#+END_QUOTE
# Note:
# Un dernier exemple, cette fois-ci en cristallographie.
# Geoffray Chang est un chercheur à la trajectoire fulgurante,
# récompensé par de nombreux prix. Son équipe, basée au Scripps
# Institute à l'Université de Californie San Diego, a publié une série
# d'articles dans des revues prestigieuses et détaillant la structure de
# certaines protéines présentes dans les membranes de cellules. Ces
# protéines jouent un rôle essentiel dans la résistance de ces bactéries
# à certains médicaments et connaître leur structure est une étape
# importante dans la compréhension de leur fonctionnement.
# Hélas, peu de temps après, d'autres équipes de chercheurs qui étudient
# des protéines très similaires rapportent des structures anormalement
# différentes de celles publiées par Chang et son équipe. En lisant ces
# travaux Chang, horrifié, remonte vite à la source du problème.
# Un des codes d'analyse aurait inversé deux
# colonnes de données et ainsi inversé la répartition de la densité
# d'électrons à partir de laquelle la structure finale de la protéine
# est calculée. D'après Chang, ce code aurait été hérité d'un autre
# laboratoire et s'était également répandu depuis dans d'autres équipes.
# Même si toute l'acquisition des données avait été faite soigneusement,
# ce n'était pas le cas de l'analyse et ce petit grain de sable a
# conduit à la rétractation immédiate de 5 articles par Chang et son
# équipe. Ces publications ont eu un impact énorme sur la communauté, à
# tel point que plusieurs années après la rétractation, les résultats
# contradictoires avec ceux de Chang paraissaient suspects avaient du
# mal à être publiés.
** Loosing Faith?
#+LaTeX: \begin{columns}\begin{column}{6.8cm}
- [[http://www.nature.com/nrd/journal/v10/n9/full/nrd3439-c1.html?foxtrotcallback=true][Oncology]]: "/half of published studies, even in prestigious journals,
can't be reproduced in industrial labs/"
- [[http://theconversation.com/we-found-only-one-third-of-published-psychology-research-is-reliable-now-what-46596][Psychology]]: "/attempting to reproduce 100 previously published
findings/, /only one-third of published psychology research was found
to be reliable/"
#+LaTeX: \end{column}\begin{column}{3.5cm}
#+LaTeX: \hspace{-.1\linewidth}\includegraphics[width=1\linewidth]{../assets/img/in_science_we_trust_small.jpg}
#+LaTeX: \end{column}\end{columns}\medskip
#+BEGIN_CENTER
*Whistle blowers* or
*dysfunctional institutions*?
#+END_CENTER
*** _Questioning_ is part of the scientific processus\pause
*** Just like _rigor_ and _transparency_...
# Note:
# Il n'y a à ce jour pas un domaine des science qui ne soit épargné par
# ces difficultés à reproduire les travaux publiés. En oncologie, un
# article récemment publié rapporte que plus de la moitié des études
# publiées ne peuvent être reproduites en laboratoire industriel, et ce
# même si les études sont publiées dans des journaux prestigieux.
# En psychologie, les capacités à reproduire les résultats publiés sont
# également très basses.
# Le problème est méthodologique mais également certainement
# sociologique, lié à une pression productiviste trop importante. Mais
# attention aussi à ne pas donner non plus trop d'importance aux signaux
# d'alertes que nous venons de voir...
# Le problème est compliqué mais il faut garder à l'esprit que la remise
# en cause fait partie du processus scientifique. Il n'est donc pas
# surprenant que de telles difficultés de reproduction de travaux
# scientifiques soit présentes.
# Cependant, deux autres caractéristiques essentielles du processus
# scientifique sont la rigueur et la transparence et il est clair que
# dans l'ensemble des cas que nous venons de voir il manquait souvent
# l'un et l'autre...
* M2-S2: Why is This so Difficult?
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. *Why is This so Difficult?*
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. Collaborating
6. Comparative study
** Why is This so Difficult?
file:../assets/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg
# Note: Comme nous l'avons vu, reproduire les travaux de recherche, même
# publiés dans des revues prestigieuses est souvent assez
# difficile. Dans cette séquence, nous allons identifier les difficultés
# les plus communes.
** 1) Information Scarcity
Clearly indicate:
+ *Provenance* and *data*
#+BEGIN_CENTER
/Unavailable data = hardly verifiable results/
#+END_CENTER
+ *Decisions*
#+BEGIN_CENTER
/Unexplained Decision = Suspicious Choice/
#+END_CENTER
#+LaTeX: \bigskip
*** Laboratory Notebooks may help
# Note: La première source de difficultés rencontrées lors de tentatives
# de reproduction est tout simplement le manque d'informations.
# Si on ne prend pas soin d'expliciter comment on a obtenu nos données
# et qu'on les garde secrètes, il est certain qu'il va être difficile
# pour une tierce personne de vérifier si elle arrive aux mêmes
# conclusions ou pas.
# # C'est étrange car mettre les données utilisées à disposition permet au
# # lecteur d'en évaluer la qualité (voire d'y trouver des erreurs). Sans
# # cette évaluation, difficile pour le lecteur de savoir quelle confiance
# # avoir dans les conclusions de l'article.
# De même expliciter les choix effectués à chacune des étapes de l'étude
# s'avère essentiel. Quel protocole expérimental a été choisi et
# pourquoi ? Quelles données ont été conservées ? Quelles données ont
# été soigneusement écartées et pourquoi ? Quelle procédure statistique
# a été utilisée et les hypothèses sous-jacentes étaient elles
# raisonnables ? Etc.
# Après tout, on doit toujours faire des choix à un moment donné. Mais
# ne pas expliquer ces choix, même en étant rigoureux et de bonne foi,
# c'est prendre le risque que les lecteurs deviennent
# suspicieux. D'autre part, être totalement transparent sur ces choix,
# c'est permettre à d'autres (ou à vous-même) de décider s'il est
# nécessaire de revenir dessus ou pas
# Pour garder trace de tous ces choix et des informations sur ces
# données, le cahier de laboratoire un outil essentiel. Encore faut-il
# ensuite mettre ces informations à disposition, mais nous reviendrons
# sur ce point par la suite.
** 2) Computers [[http://theconversation.com/how-computers-broke-science-and-what-we-can-do-to-fix-it-49938][broke science]]
- *Point and click*:
- *Spreadsheets*: [[https://qz.com/768334/years-of-genomics-research-is-riddled-with-errors-thanks-to-a-bunch-of-botched-excel-spreadsheets/][programming and data manipulation mistakes]]
-
~Membrane-Associated Ring Finger (C3HC4) 1, E3 Ubiquitin Protein
Ligase~ \to ~MARCH1~ \to 2016-03-01 \to 1456786800
-
~2310009E13~ \to 2.31E+19
- *Complex software stack*
- *Bug*: /Coding is a difficult task!/
# Note:
# La deuxième source de difficultés rencontrées lors de tentatives
# de reproduction de travaux est tout simplement les erreurs induites
# par l'utilisation effrénée des ordinateurs.
# Comme toute innovation technologique, les ordinateurs nous permettent
# d'aller plus vite, plus loin mais aussi de faire des erreurs plus
# facilement et plus rapidement...
# Au premier plan des sources d'erreurs, ces logiciels intuitifs où
# l'interaction se fait à la souris et qui ne permettent pas
# d'expliciter ce qui est calculé et à partir de quoi. Leur simplicité
# d'utilisation incite à les utiliser pour tout, même pour ce pour quoi
# ça n'est pas vraiment prévu.
# Il est par exemple très difficile de comprendre la logique du calcul
# ayant lieu dans une feuille excel pleine de macros. Bien sûr, il est
# possible de gérer des stocks et la comptabilité d'une entreprise avec
# un tableur, mais ceux qui ont déjà eu à faire à ce genre
# d'abominations savent qu'un ERP permet d'éviter bien des soucis. Et
# bien de la même façon, un tableur n'est pas le bon outil pour faire
# des statistiques ou du traitement de données !
# Tenez, quelques exemples d'anecdotes effroyables liées à l'utilisation
# d'un tableur. En génomique, il est bien pratique de donner des petits
# noms aux gènes tels que celui-ci. Celui-ci, c'est MARCH1. Seulement
# pas mal de tableurs croient bien faire en l'interprétant
# comme une date et par effet de bord comme le nombre de secondes
# écoulées depuis le 1er janvier 1970... L'identifiant de gène 231 000
# 9E13 se retrouve lui aussi fréquemment convertit en nombre. Alors bien
# sûr, il n'y a peut-être qu'une vingtaine de gènes concernés par ce
# genre de problème sur les 30,000 du génome humain, mais c'est quand
# même assez désagréable.
# De manière générale, il est courant de se reposer sur une pile
# logicielle complexe. Complexe et souvent mal maîtrisée. Combien
# d'études reposent ainsi sur des logiciels propriétaires, sortes de
# boites noires dont on ne maîtrise pas le contenu et qui appliquent
# aveuglement des procédures de calculs et de transformations de
# données?
# # - l'utilisation de telle ou telle méthode plutôt qu'une autre est
# # souvent discutable
# Alors, je ne suis pas en train de dire qu'il faut tout reprogrammer
# soi même. Ce n'est bien sûr par la meilleure façon d'échapper aux
# bugs. Dans les cas de l'étude Reinhart et Rogoff ou des fausses
# structures de protéines de Chang, les erreurs venaient de programmes
# maisons.
# Mais il me semble essentiel d'être en mesure de déterminer dans son
# analyse si chacune des briques est digne de confiance ou pas. Et si
# l'un des composants, par sa nature, l'interdit, il faut sérieusement
# songer à le remplacer.
** Are Computers the Only Ones to Blame?
*Lack of rigor and organization*
- No backup
- No history
- No quality control
# Note:
# Enfin, la dernière cause méthodologique de non-reproductibilité et
# source d'erreurs est certainement le mangue de rigueur et
# d'organisation.
# Même si le stockage ne coûte plus rien de nos jours, la sauvegarde des
# données est souvent mal assurée et il est courant d'en perdre suite à
# une mauvaise manipulation, ou bien à la suppression de son compte
# informatique lors du passage d'une institution à une autre.
# En l'absence de mécanisme de gestion de version, il est courant
# de remplacer par inadvertance d'anciennes données par de nouvelles et
# de ne plus arriver à accéder à d'anciennes observations.
# Dans un certain nombre de domaines, l'utilisation de plans
# d'expériences randomisés ou de pré-études (study pre-registration),
# n'est absolument pas systématique. De même les bonnes pratiques de
# développement logiciel comme la revue de code ou l'intégration
# continue sont encore rarement appliqués au logiciels utilisés dans la
# recherche.
** Social and Cultural Causes
#+BEGIN_QUOTE
\centering Article = _simplified_ version of the procedure
#+END_QUOTE
#+LaTeX: \bigskip
#+BEGIN_QUOTE
\centering
*Tracing* all these information and *making them available* =
substantial investment
#+END_QUOTE
#+LaTeX: \bigskip
If no one requires/inspect such information, why should I worry?
# Note:
# Enfin, il serait naïf de ne pas évoquer la dimension culturelle et
# sociale du problème.
# Un article est une version simplifiée et intelligible des
# résultats. Certains diraient même la publicité... Une description de
# haut niveau est essentielle car elle permet de prendre du recul mais
# elle est devenue la norme alors que la technicité de la recherche
# actuelle est telle qu'il est clairement impossible de donner dans un
# document de 8 à 10 pages toutes les informations permettant de refaire
# les expériences et les analyses.
# - La description du protocole expérimental est souvent succincte
# - Les données sont généralement bien trop nombreuses pour être données
# in extenso et sont résumées à travers quelques courbes.
# - Les traitements statistiques appliqués pour parvenir à ces courbes
# ne sont décrits que rapidement.
# Alors, bien sûr il est possible de tracer toutes ces informations et
# de les mettre à disposition. À ceci près que cela demande du temps,
# voire beaucoup de temps si on ne dispose pas des bons outils.
# # - sans compter que mettre à disposition toutes ces informations, alors
# # qu'on a soi-même peiné à les obtenir, c'est permettre à d'autres de
# # récupérer les fruits de notre travail sans efforts.
# Mais si personne n'exige ces informations, à quoi bon s'embêter ?
** Going Public?
- Weaknesses would become obvious
- Someone may find a flaw
- Someone may [[http://www.nature.com/news/the-top-100-papers-1.16224][benefit from my hard work]]
- /Data may be sensitive/
# sécurité, machine learning pour la police
Let us give ourselves the means to have everything inspectable on
demand.
# Note:
# Mais donner accès, mettre à disposition, cela veut dire tout rendre
# public ? N'est-ce pas un peu radical ? Et risqué ? Démontons ensemble
# quelques idées reçues.
# Si je donne accès à tout ce que j'ai fait, il deviendra alors évident
# que ce que j'ai fait n'est pas aussi parfait que ce que je prétends,
# que c'est un peu sale et pas toujours très rigoureux, que j'ai
# sélectionné les résultats que je présente.
# - C'est sûr. En même temps, c'est la réalité et vous auriez tort de
# croire que vous êtes le seul dans cette situation. Si ça se trouve,
# vous travaillez mieux que les autres et dans un domaine où la
# réputation est essentielle, vous avez probablement plutôt intérêt à
# le montrer. Pire, si vous le cachez, cela finira par paraître
# suspicieux.
# Vous me direz qu'en révélant tout, je prend le risque que quelqu'un
# trouve une erreur et de passer pour un imbécile.
# - C'est certain, mais tout le monde fait des erreurs, même les plus
# grands. Et en ce qui me concerne, je préfère que quelqu'un trouve
# une erreur et m'aide à la corriger afin que mes travaux deviennent
# corrects.
# Oui, mais quelqu'un pourrait tirer parti, réanalyser ces données que
# j'ai eu tant de mal à obtenir, ou simplement utiliser ce code que j'ai
# eu tant de mal à écrire et faire trois ou quatre papiers là où je n'ai
# eu le temps d'en faire qu'un.
# - Alors d'abord, si quelqu'un réutilise votre travail, il se doit de
# le citer correctement et de vous rendre le crédit qui vous est
# dû. Ensuite les articles les plus cités de tous les temps sont des
# articles présentant des contributions méthodologiques ou du logiciel
# qui sont devenus essentiels dans un domaine.
# Une petite parenthèse: ceux d'entre vous qui connaissent github,
# savent que cette plate-forme est à mi-chemin entre la plate-forme de
# développement logiciel et le réseau social. Les contributions d'un
# développeur à différents projets sont visibles ainsi que la
# fréquence de ses contributions, ce qui permet à un jeune développeur
# de se faire une carte de visite infalsifiable et
# ultra-visible. Montrer ce que l'on fait est une façon efficace
# d'atteindre une certaine forme de reconnaissance par la
# communauté. Mettre ses travaux à disposition de tous est
# probablement la meilleure façon de démontrer sa propriété
# intellectuelle.
# Enfin, il est possible que les données soient sensibles et ne puissent
# être divulguées sans prendre le risque de causer du tort à des
# gens. Par exemple, s'il s'agit de données médicales, de données
# judiciaires, d'informations sur des enfants ou sur des intentions de
# vote, etc.
# - Dans ce type de situation où les travaux ont une dimension éthique,
# il convient de définir quelles personnes peuvent avoir accès aux
# informations pour les vérifier ou les réutiliser. Ensuite, il existe
# des techniques cryptographiques assez faciles d'accès permettant de
# s'assurer que seulement les personnes habilitées peuvent accéder aux
# données.
# Dans tous les cas, même si au final ces informations sont
# semi-publiques, il est essentiel de se donner les moyens de permettre
# à autrui d'inspecter ce que nous avons fait.
** Tools to Avoid and Possible Alternatives
- *Proprietary tools, formats and services*
1. +Excel, Word, Evernote+
- Markdown, Org-mode, CSV, HDF5, ...
2. +SAS, Minitab, matlab, mathematica, ...+
- Scilab, R, Python, ...
3. +Dropbox, online proprietary lab. notebooks , ...+
- Framadrop, GitLab/GitHub, ...
- *"Intuitive" Tools *
- +spreadsheet, graphical interfaces, interactive exploration+
- learn self control and slow down... $\smiley$
- R, Python, ...
# Note:
# Et pour permettre l'inspection, il faut utiliser les bons outils
# Cela commence par banir autant que possible les logiciels et les
# formats propriétaires. Bien sûr, ces outils sont bien faits et vous y
# êtes habitués mais on en est également captif et les entreprises qui
# les développement n'offrent aucune garantie sur le long terme. Je suis
# sûr que ces mises à jours automatiques vous agacent vous aussi. :)
# L'expérience montre qu'il est hélas très courant de perdre des données
# et des informations lors de ces mises à jour.
# Alors, soyons honnête, l'utilisation de logiciel libre ne vous protège
# absolument pas de ce genre de mauvaises surprises. Mais comme vous
# avez accès librement à l'ensemble des versions, les chances d'arriver
# à récupérer vos données sont quand même bien plus élevées. De même
# l'adoption de formats textes simples et ouverts augmente vos chances
# d'arriver à les relire avec d'autres logiciels.
# En ce qui me concerne, à chaque fois que j'ai utilisé un format
# binaire ou pas bien ouvert, j'ai fini par perdre des données. Cela
# fait donc 10 ans que je n'utilise plus que des formats texte ou des
# standards binaires ouverts et le problème ne s'est plus jamais posé,
# et ce malgré les mises à jours logicielles très régulières de ma
# machine.
# Donc règle numéro 1: utiliser autant que possible du format texte
# (markdown, orgmode pour vos notes, csv pour vos données).
# Règle numéro 2: utiliser autant que possible les logiciels et les
# langages de programmation libres comme R ou python.
# Et Règle numéro 3: éviter de stocker vos données chez un hébergeur
# dont vous pourriez être captif.
# En effet, les services gratuits (ou pas) et très intégrés sont
# tentants mais correspondent à un business plan particulier qui peut se
# révéler incompatible avec vos besoins futurs, ne pas être pérenne et
# ne vous donne pas forcément les garanties de confidentialité que vous
# souhaiteriez.
# Enfin, attention aux tableurs et outils graphiques qui peuvent vous
# donner au premier abord l'impression d'une meilleur efficacité et
# productivité mais qui sur le long terme ne vous permettent pas
# d'atteindre la traçabilité et l'inspectabilité que vous souhaiteriez.
# C'est plus difficile, en particulier au début, mais en utilisant des
# langages comme R ou python, passé la première marche, on gagne
# rapidement en puissance et en efficacité.
** Conséquences :noexport:
- Des *erreurs*...
- Des *difficultés* certaines à *réutiliser* le travail des autres, voire
son propre travail
- Un *doute* dommageable pour tout le monde (auteur, détracteurs,
lecteur, décideur...)
# Note:
# C'est pour toutes ces raisons que les résultats de recherche
# contiennent parfois des erreurs et sont si difficile à répliquer et à
# réutiliser, même au sein d'une même équipe.
# Les doutes que cela engendre sont dommageable pour tout le
# monde. Lorsque l'on propose un résultat, il n'est pas agréable d'être
# soupçonné de fraude ou d'incompétence. En même temps, les détracteurs
# d'un résultat apparaissent comme de simples aigris ou au contraire
# comme des lanceurs d'alertes selon le contexte alors qu'il est normal
# de questionner un résultat et d'avoir un débat apaisé et rationnel à
# son sujet.
# Face à ces problèmes, il me semble que la meilleur attitude à avoir
# est celle de la transparence: Expliciter augmente les chances de
# trouver les erreurs et de les éliminer.
# C'est d'ailleurs une demande de plus en plus pressante de la part
# de la société civile afin d'éviter les dérives et d'améliorer
# l'efficacité de nos travaux.
** Paradigm Shift
1. Information scarcity, difficulties in accessing data
2. Computation mistakes
3. Lack of scientific and technical rigor
#+LaTeX: \begin{center}\includegraphics[height=2.5cm]{../assets/img/in_science_we_trust_small.jpg}
#+LaTeX: \includegraphics[height=2.5cm]{../assets/img/in_code_we_trust.jpg}\end{center}
*** Making everything explicit increases the chances of finding and getting rid of mistakes
# Demande de *traçabilité* de plus en plus pressante de la société, des
# institutions, de l'Europe, ...
# Note:
# Nous avons vu que la première cause d'échec de reproduction de
# résultats scientifiques est tout simplement le manque d'information,
# la non disponibilité des données ou des procédures appliquées. Cela ne
# signifie pas que le résultat soit faux mais cela empêche de le
# vérifier et de s'appuyer dessus.
# La seconde cause d'échec est tout simplement l'erreur de calcul qui
# peut se glisser n'importe où.
# De manière générale, le manque de rigueur scientifique et technique
# est souvent à l'origine de ces deux problèmes.
# Il me semble que la meilleur attitude à avoir est celle de la
# transparence: Expliciter augmente les chances de trouver les erreurs
# et de les éliminer. C'est pour cela que nous assistons ces dernières
# années à un changement de paradigme de recherche et que l'on exige un
# accès à l'ensemble des données et des procédures de calcul.
# C'est d'ailleurs une demande de plus en plus pressante de la part de
# la société civile (en particulier le Conseil Européen) afin d'éviter
# les dérives et d'améliorer l'efficacité de nos travaux.
* M2-S3: Computational Documents: Principles
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. *Computational Document: Principles*
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. Collaborating
6. Comparative study
** Computational Documents: Principles
file:../assets/img/iceberg.jpg
# Note:
# Dans cette séquence, je vais vous présenter ce qu'est un document
# computationnel ainsi que les principes généraux que nous retrouverons
# dans chacun des trois environnements dont je vous ai précédemment
# parlé. L'intérêt de ce type de document est de permettre une
# transparence la plus complète possible.
** Modern Science
#+LaTeX: \includegraphics<1>[width=\linewidth]{../assets/img/iceberg_publication-1.png}%
#+LaTeX: \includegraphics<2>[width=\linewidth]{../assets/img/iceberg_publication-2.png}%
#+LaTeX: \includegraphics<3>[width=\linewidth]{../assets/img/iceberg_publication-3.png}%
#+LaTeX: \includegraphics<4>[width=\linewidth]{../assets/img/iceberg_publication-4.png}%
#+LaTeX: \includegraphics<5>[width=\linewidth]{../assets/img/iceberg_publication-5.png}%
# Note:
# # Data \to visualization/analysis \to article
# Si une partie de l'activité scientifique nécessite des mesures sur le
# terrain ou derrière une paillasse, la majeure partie se passe
# maintenant derrière un ordinateur, les données provenant de machines
# spécifiques: je pense par exemple à un accélérateur de particules, des
# séquenceurs d'ADN, un téléscope, un réseau de capteur ou bien sûr des
# simulations numériques s'exécutant sur des supercalculateurs.
# Une fois ces données obtenues, elles sont transformées pour être
# analysées, visualisées afin de mieux en comprendre la structure. Il
# est courant de partager ces visualisations avec des collègues,
# d'avoir un certain nombre d'itérations, de passer d'une vue à une
# autre jusqu'à trouver celle qui explique le mieux les choses. On
# utilise d'ailleurs souvent une multitude de logiciels spécifiques pour
# obtenir ces visualisations.
# Il arrive souvent qu'on soit déçu par les résultats, qu'on n'y
# comprenne rien ou qu'on se rende compte que les données ne sont pas
# intéressantes et qu'il faut se poser la poser la question sous un
# angle différent.
# Dans ce cas, retour à la case départ: acquisition de
# données, visualisations, statistiques, nombreux échanges avec les
# collègues...
# Puis ça y est, on trouve enfin quelque chose d'intéressant. On prend
# alors nos plus belles figures, on y ajoute les explications qui sont
# finalement les bonnes, on tente de rendre tout cela intéressant et on
# envoie l'ensemble à une conférence ou un journal.
# Hélas, dans un pdf de 8 pages, le lecteur trouvera une jolie histoire,
# des figures convaincantes mais n'aura aucune idée du réel travail
# effectué. L'article, c'est la partie émergée de l'iceberg et il n'y a
# alors plus aucun moyen de revenir sur les nombreuses tentatives et
# échecs, ni sur les calculs et les données derrière chacune de ces
# figures.
# La recherche reproductible, c'est permettre de pouvoir naviguer dans
# les deux sens et de combler le fossé séparant l'auteur du lecteur.
** Methodological Goals
Keep track to allow:
- *Inspection*: justify/understand
- *Re-execution*: check/fix/improve/reuse
# Note:
# Notre objectif est donc d'avoir un outil nous permettant:
# - d'une part d'inspecter toute cette démarche, afin que l'auteur
# puisse justifier pourquoi tel ou tel code est utilisé et que le
# lecteur puisse comprendre ce qui a été fait;
# - et d'autre part de refaire le calcul et l'analyse le plus
# simplement possible, ce qui est essentiel
# 1. pour permettre aux lecteurs de vérifier que ces calculs sont
# corrects,
# 2. pour permettre éventuellement de corriger des erreurs s'il y en a
# 3. et enfin pour permettre à d'autres de réutiliser ces travaux, soit
# sur un jeu de données différent, soit en réutilisant une partie de
# la procédure d'analyse dans un autre contexte.
** Behind the Scenes
\scriptsize
#+LaTeX: \only<1>{\hfill\includesvg[width=.5\linewidth]{../assets/img/example_pi_full-1}}%
#+LaTeX: \only<2>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-2}}%
#+LaTeX: \only<3>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-3}}%
#+LaTeX: \only<4>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-4}}%
#+LaTeX: \only<5>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-5}}%
#+LaTeX: \only<6>{\includesvg[width=\linewidth]{../assets/img/example_pi_full-6}}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-2.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-3.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-4.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-5.svg}%
# #+LaTeX: \includesvg<1>[width=\linewidth]{../assets/img/example_pi_full-6.svg}%
# Note:
# Voici la partie émergée du document computationnel. Au premier abord,
# il s'agit d'un document tout à fait banal avec un titre, du texte,
# éventuellement un petit morceau de code illustrant une procédure de
# calcul, des résultats numériques, des formules de maths, des figures,
# etc. Bref, un article classique au format pdf ou html.
# Voici maintenant ce qui se cache derrière ce document: ici, un
# notebook Jupyter tel que nous pouvons le voir dans un navigateur
# web. C'est un document dynamique constitué de différentes parties sur
# lesquelles on peut interagir.
# Tout d'abord du texte au format markdown: ce sont les zones de texte
# que j'ai surlignées en orange. Le formattage est assez simple, on peut
# assez facilement y inclure des liens hypertextes ou des formules
# mathématiques.
# Entre ces zones de texte, on trouve des zones de code, que j'ai
# surlignées en bleu. Ici il s'agit de fragments de code python
# relativement simples. Dans cet environnement, il est possible d'éditer
# directement ces fragments de code et les exécuter. En fait, un
# notebook a en interne une console python ouverte et lorsque l'on
# demande l'exécution d'un fragment de code, le code est directement
# envoyé dans la console et le résultat est automatiquement récupéré.
# Le résultat de chacun de ces différents codes est stocké juste en
# dessous dans les zones que j'ai surlignées en jaune. Puisque cette
# console reste "vivante" tout au long du document, les résultats
# calculés dans un bloc sont visibles dans le bloc suivant, ce qui
# encourage à ne pas écrire de longs blocs de code infâmes, mais au
# contraire à écrire de petits fragments, à calculer les choses petit à
# petit, tout en expliquant dans les zones de texte (en orange) comment
# les différents fragments de code (en bleu) s'enchaînent et éventuellement
# pourquoi, en fonction de ce que l'on vient de calculer (en jaune), on
# décide d'appliquer tel nouveau fragment.
# Une fois satisfait avec les calculs, on aime en général bien créer un
# document classique en exportant vers du pdf ou du html. Chaque zone
# (texte, code, résultat) est convertie et assemblée en un seul document
# markdown qui est à son tour transformé vers le format désiré avec un
# outil comme pandoc.
# Bien sûr, dans le document final, on ne souhaite pas forcément rendre
# tous les fragments de codes et tous les résultats visibles. C'est la
# raison pour laquelle pour chacune de ces zones, il est possible de
# spécifier si l'on souhaite la cacher ou pas.
# Enfin, si les résultats intermédiaires sont stockés automatiquement
# dans le notebook, l'environnement permet de ré-exécuter très
# simplement l'ensemble du code du notebook et de mettre à jour les
# résultats.
# C'est donc à vous de décider, selon le contexte, si vous souhaitez
# partager le document final, qui est souvent plus compact, ou le document
# computationnel qui va permettre une inspection complète et une
# réutilisation.
** Existing Tools
1. Jupyter
2. Rstudio/knitR
3. Org mode
| *Same Principles* | *Differences* |
|--------------------------------------+---------------------|
| • *A single document* | • Syntax |
| \qquad (explanations, code, results) | |
| • Session | • Interoperability |
| • Export | • Controling export |
# Note:
# Les trois environnements les plus matures permettant de créer de tels
# documents sont Jupyter, que vous venez de voir, Rstudio/knitr, et
# Org-mode. Ces trois environnements se distinguent par le niveau de
# technicité nécessaire à leur mise en oeuvre. Je ferai une petite démo
# de chacun de ces trois environnements dans les séquences suivantes. À
# l'issue de ces démonstrations, vous pourrez choisir lequel vous
# convient le mieux.
# Vous verrez que le principe reste le même dans les trois environnements:
# - Tout d'abord, avoir un seul document comprenant un entrelacs
# d'explications au format markdown, de code exécutable simplement, et
# les résultats de ces exécutions.
# Cette organisation permet l'inspection et la réexécution que nous
# nous étions fixés comme objectifs.
# - En interne, une console python ou R est active et assure une
# persistance des variables d'un fragment de code à l'autre. C'est la
# notion de session sur laquelle nous reviendrons pendant les
# démonstrations.
# - Enfin, il est possible d'exporter le document computationnel vers un
# format plus traditionnel éventuellement en masquant certaines
# parties.
# Les différences entre ces différents environnements sont relativement
# mineures:
# - Il y a quelques différences de syntaxe. Jupyter et Rstudio utilisent
# du markdown alors que Org mode utilise le format org qui est
# légèrement différent mais tout aussi lisible. La
# façon d'indiquer les zones de code et les résultats est également un
# peu différente mais c'est sans grande importance une fois dans
# l'environnement correspondant.
# - Plus important, peut-être l'interopérabilité entre différents
# langages. Jupyter vous permet de faire du python, du R, du ruby ou
# bien du julia mais pas vraiment d'utiliser plusieurs langages dans
# un même notebook. /Enfin/, c'est possible mais ça demande un peu de
# travail.
# Rstudio est conçu spécifiquement autour du langage R. Même s'il est
# possible d'utiliser du code python, vous verrez que ça n'est pas
# aussi convivial que pour R.
# Enfin, Org-mode permet une interaction entre les différents langages
# relativement naturelle mais comme je le disais, la courbe
# d'apprentissage est un peu plus raide.
# - Enfin, ces outils diffèrent par le contrôle offert en terme de mise
# en page lors de l'export. Jupyter et Rstudio se reposent sur
# markdown et donc sur pandoc. Le style par défaut est très bien,
# surtout si on souhaite produire du HTML. Mais si on doit produire un
# document PDF respectant un style particulier, ça peut être peu
# compliqué de demander à pandoc d'appliquer ce style.
# Org-mode ne fait à peu près rien pour vous de ce point de vue là. Il
# vous faudra donc de toutes façons configurer le style de votre
# export. Ceci dit, un des points que j'apprécie particulièrement
# lorsque je prépare un article en latex avec org-mode, c'est la
# capacité à écrire directement du LaTeX qui sera passé tel quel lors
# de l'export, ce qui me permet de faire exactement ce que je
# souhaite.
# Bien. Vous savez tout. Alors maintenant, Démo !
* M2-S4A: Hands On (Jupyter)
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- *Jupyter*
- Rstudio
- Org-Mode
5. Collaborating
6. Comparative study
** Hands On: Jupyter
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/jupyter-logo.png
** Startup
- Opening a document
- Quick Tour
- Saving
- Getting help
** Running Cells
- Running and getting results
- Adding a cell
- Beware of the order
- Session notion
- Possible inconsistencies
- Restart and run from the beginning
** Keyboard Shortcuts, Completion, and Ipython Magic
- Keyboard shortcuts =<h>=
- Python completion (numpy example)
- =%matplotlib=, =%lsmagic=
# =%run=, =%load=, =%load_ext=
** Using Other Languages
- Example for R:
- =%load_ext rpy2.ipython=
- =%%R %%sh %%perl=
- Interactions between =R= and =Python= are possible
** Producing and Sharing the Document
- Results are stored in the document
- $\to$ pretty-printed in gitlab
- =git pull/push=
- Export to HTML/PDF
** Preparing an Article
# Contrôler la visibilité du code et des résultats
- Hide-code plugin
- =%%latex= and =%%html=
- [[http://nbconvert.readthedocs.io/en/latest/external_exporters.html][Customize /exporters/:]]
\small\href{-1cm}
~jupyter nbconvert --to mypackage.MyExporter notebook.ipynb~
** Recap
- A lot of information in short time period
- Now it's your turn!
* M2-S4B: Hands On (Rstudio)
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- *Rstudio*
- Org-Mode
5. Collaborating
6. Comparative study
** Hands On: Rstudio
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/RStudio-Logo-Blue-Gradient.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img//knitr.png
** Startup
- Opening a document
- Quick Tour
- Saving
- Getting help
** Running Chunks
- Running and getting results
- Adding a chunk
- Beware of the order
- Session notion
- Possible inconsistencies
- Restart and run from the beginning
** Keyboard Shortcuts, Completion
- Keyboard shortcuts
- R completion
- Folding
** Producing and Sharing the Document
- Knit
- Easy sharing via rpubs
** Controlling Code and Results Visibility
- Completion (chunk parameters)
** Using a Specific Style
- pdf, LaTeX
- html
- word/office
Writing raw LaTeX (R Sweave: =Rnw=) or HTML (R HTML:
=Rhtml=) to have full control is possible.
** Using Other Langages
- Inserting and running a Python chunk
- Warning: no session !
- Interaction between R and Python is done solely through files,
which encourages to write long chunks $\frowny$
** Recap
- A lot of information in short time period
- Now it's your turn!
* M2-S4C: Hands on (Org-Mode)
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- *Org-Mode*
5. Collaborating
6. Comparative study
** Hands On: Org Mode
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/600px-EmacsIcon.svg.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/442px-Org-mode-unicorn.svg.png
# Note:
# Même plan que précédemment
** Startup
- Opening a document
- Quick Tour
- Folding / Browsing
- Restructuring
- Saving
- Getting help
** Running Code Blocks
- Inserting an R block
- Running and getting résultats
- Beware of the order
- Session notion
- Possible inconsistencies
- Restart and run from the beginning
** Keyboard Shortcuts, Completion
- Block expansion
- R graphics
- Python, Perl, ...
- Shell session
- Several sessions, several languages !
- Language interactions
** Browsing
- Folding
- Restructuration
# - Annotation (tags) ???
# - Sparse Tree ???
** Producing and Sharing the Document
- Git Commit
- Beware of produced files
- Export
- Controling visibility of code and results
- Hidden sections
** Using a Specific Style
- pdf, LaTeX
- HTML
- Writing raw LaTeX or raw HTML in the middle of the org document is easy
** Recap
- A lot of information in short time period
- Learn the shortcuts one after the other. The main ones are in the
first entry of the journal
- Now it's your turn!
* M2-S5: Collaborating
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. *Collaborating*
6. Comparative study
** Collaborating
file:../assets/img/jumping_penguin.png
** Preparing a Document for a Journal or a Conference
Requirements for producing a *pdf*:
- Internally, /pandoc/, /knitr/ or /emacs/org-mode/
- /LaTeX/ should be installed
Exporting as *office/word* documents is possible (requires a specific
configuration in Jupyter). Otherwise export *html*...
*** In any case:
- Need to hide some cells
- Use the right style
# Soyons honnêtes
*** Producing such kind of documents requires a perfectly configured environment
# Note:
# Tout ces détails auront été expliqués avant pour chaque environnement.
# - http://blog.juliusschulz.de/blog/ultimate-ipython-notebook
# - https://github.com/kirbs-/hide_code is a must-have
# - http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/
# - https://github.com/balouf/Kleinberg/blob/master/KleinbergsGridSimulator.ipynb
# - Il y doit y avoir des choses équivalentes, mais plus simples pour
# Rmd
# - Et pour emacs, c'est d'une certaine façon plus simple car on est
# habitué à bidouiller.
** Convincing Your Co-authors
When confronted to this complexity, there are several possible
attitudes:
1. Nevermind, it's awesome! Let's do this!
2. Err... it looks cool but I really don't have the time to learn this
now...
3. Yet another new tool? Forget it!
$\leadsto$ several possible collaboration modes
** Option 1: Enthusiastic Co-authors
You'll have to *provide technical support*:
- Compatibility issues between the different environments
- Manage this complexity (Jupyter/Rstudio/Emacs, Git, ...)
It is the best way to *ensure everything is reproducible* (not only on
*your* machine\dots) and inspectable
** Option 2: A Minima Investment
Your co-authors let you manage the code and the results all by
yourself but are ready to make efforts to edit your document.
*They can:*
- Edit the content of the article (Markdown or Org-Mode)
*They can't:*
- Re-execute the code
- Export and generate the final document
** Option 3: "Defiant" Co-auteurs
*Co-auteurs do not change their habits*
- A separated /computational document/ allows to produce all results and
figures
- An other (/standard/) document includes generated figures
Everything is *stored*, *documented* and can be *re-computed* in your
computational document!
** Publishing / Sharing Your Document
*Rpubs*
- Great for a quick sharing but no durability
*Dropbox and alike*
- +Durability+, access ??, ...
*Gitlab/Github/...*
1. Go public (along with the history!)
2. Clean up the repository and archive the current state in a
companion website
*Companion websites*
- Runmycode, Editors, ...
- Article: *HAL* ; code and data: *Figshare / Zenodo*
** Conclusion
Several options depending on:
- your co-authors
- technical constraints
- confidentiality/copyright constraints
* M2-S6: Comparative Study
** Entering Behind the Scenes: Computational Documents
1. A few Recent Controversial Studies
2. Why is This so Difficult?
3. Computational Document: Principles
4. Hands on.
- Jupyter
- Rstudio
- Org-Mode
5. Collaborating
6. *Comparative study*
** Comparative Study
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/jupyter-logo.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/RStudio-Logo-Blue-Gradient.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/442px-Org-mode-unicorn.svg.png
#+ATTR_LATEX: :height 2cm :center nil
file:../assets/img/question_mark.png
\bigskip
A computational document. What for ?
# Note:
# - Pour comparer ces différents outils, il est important de bien
# identifier l'usage que l'on souhaite en faire.
# - Nous allons regarder ensemble quelques cas d'usages
** A Lecture or a Tutorial
A Jupyter notebook
- Easy to use for students
- Dynamic document
# Note:
# - Super pratique.
# - Téléchargement, exécution dynamique, résultats interactifs,
# variations faciles, etc.
# - C'est idéal pour un document à destination d'auto-formation.
** A Journal
[[file:~/org/journal.org][My journal with org-mode]]
- A single author
- Chronological organization
- Labels
- Notes, links, code
# Note:
# - Structuration type: par date
# - Mots-clés
# - Navigation aisée
# - Réexécution de code comme d'habitude
** A Laboratory Notebook
[[file:~/Work/Documents/Articles/2018/Alya-Perf/LabBook.org][A laboratory notebook with org-mode]]
- Semantic organization
- Conventions
- Several authors
- Labels per author, experiment, etc.
# Note:
# - Assez proche d'un journal mais avec un contenu bien plus technique
# et fait pour être exploitable par des collègues.
# - Exemple de structuration.
** A Reproducible Article
[[file:~/Work/Documents/Articles/2017/paper-hpl-at-scale/paper.org][An ongoing article]]
- Several authors
- Regenerate figures
- Track back the sources
# Note:
# - On voit la structure de l'article.
# - Certaines sections sont cachées
# - Elles pointent vers le cahier de laboratoire traçant les données
# que je vais exploiter.
# - Ici, je suis reparti de figure que Tom avait faites et je les ai
# retravaillées et adaptées à ce dont j'avais besoin pour mon
# article.
# - Ici, c'est un peu "sale", il y a des liens vers des fichiers qui
# sont sur mon disque dur mais c'est un article en cours de
# préparation et vous voyez que j'ai bien accès à l'ensemble des
# informations dont j'ai besoin.
# - Plusieurs structurations sont possibles. En général, j'ai une
# grosse section cachée au début de l'article où j'indique comment
# récupérer l'ensemble des données (avec les commandes git ou les
# URLs). Le reste du code d'analyse contenu dans l'article peut alors
# être exécuté.
# - Ici, comme on prépare un article, il est essentiel de pouvoir cacher
# certaines sections et d'avoir un contrôle complet sur la typographie
# car on n'a jamais assez de place.
# - Dans tous les cas, tout ceci n'est possible que si on a suffisemment
# de matière, c'est-à-dire que si on a pris régulièrement des notes
# sur comment on a obtenu les données et sur comment on les a
# analysées. C'est ce que vous mettrez en pratique dans le module 3
# avec l'outil de votre choix.
** Technical Differences
#+LaTeX: \null\hspace{-1cm}\begin{overlayarea}{\linewidth}{2.4cm}\scalebox{.73}{
#+ATTR_LATEX: :center nil
| | Origin | Technology | Usage | Browsing | Format | Article? |
|---------------+-----------+--------------------+--------------+-----------+--------+-----------|
| Jupyter | 2001 | Web App., Python | Easy | Limited | JSON | Difficult |
| Rstudio/knitr | 2011/2014 | IDE, Java/R | Easy | Limited | Rmd | Yes |
| Org-Mode | 1976/2008 | Editeur, EmacsLisp | More complex | Powerful | Org | Yes |
#+LaTeX: }\end{overlayarea}
Technology does not really matter. You need to:
- collect information
- organize it and prepare for exploitation
- make it available
# Note:
# - L'écosystème évolue mais vous pouvez déjà vous en saisir.
** Bonus: expériences vécues :noexport:
- Complétion, introspection donc développement/composition pas si
désagréable comparé à un IDE avancé.
- Objectif atteint. Mois par mois: permet aux collègues d'aider,
d'avancer ensemble, etc. Communication de "problèmes" (données
manquantes par exemple) bien plus simple.
- Un document dynamique et traçable, réexecutable, modifiable,
réutilisable, ... Quand le reviewer 3 demande de refaire la figure 5
en noir et blanc et de changer les légendes. Ou bien de rajouter de
la compléter.
- Au jour le jour: meilleur réutilisation (par exemple entre l'article
et le slide)
Éléments clés lors du choix:
- Simplicité de prise en main vs. vrai éditeur
- Où sont fait les calculs
- Multi-langage
- http://carreau.github.io/posts/23-Cross-Language-Integration.html
- Gestion des langages compilés
- Notions de caches et d'état
Les principaux outils actuels:
- jupyter
- rstudio
- org-mode
Limitations:
- Longs calculs
- Grands documents
- Solutions wysiwyg pour jupyter
Historique/diff un peu compliqué pour jupyter
C028AL_slides_module3-fr.pdf: diapos-module3.pdf
mv $< $@
C028AL_slides_module3-en.pdf: slides-module3.pdf
mv $< $@
%.pdf: %.tex
pdflatex --shell-escape $^
pdflatex --shell-escape $^
%.tex: %.org
emacs -batch $^ --funcall org-beamer-export-to-latex
images: analyse-traditionnelle-3-svg.pdf traditional-analysis-3-svg.pdf analyse-replicable-3-svg.pdf replicable-analysis-3-svg.pdf
%-svg.pdf: %.svg
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -D -z --file=$(abspath $<) --export-pdf=$(abspath $@)
../assets/img/analyse-replicable-3.svg
\ No newline at end of file
../assets/img/analyse-traditionnelle-3.svg
\ No newline at end of file
#+TITLE: La main à la pâte : une analyse réplicable
#+AUTHOR: @@latex:{\large Konrad Hinsen} \\ \vspace{0.2cm}CBM, CNRS Orléans et Synchrotron SOLEIL\\ \vspace{0.2cm} \texttt{konrad.hinsen@cnrs.fr}@@
#+OPTIONS: H:2 tags:nil
#+EXCLUDE_TAGS: noexport
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+LATEX_HEADER: \usepackage[french]{babel}
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+BEAMER_HEADER: \setbeamercovered{invisible}
#+BEAMER_HEADER: \beamertemplatenavigationsymbolsempty
#+STARTUP: beamer
#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) %8BEAMER_OPT(Opt)
#+STARTUP: indent
#+PROPERTY: header-args :eval no-export
* M3-S1: Une analyse réplicable, c'est quoi?
** 3. La main à la pâte: une analyse réplicable
1. *Une analyse réplicable, c'est quoi?*
2. Étude de cas: l'incidence de syndromes grippaux
3. Importer les données. Au choix:
- Jupyter
- RStudio
- OrgMode
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** L'analyse de données traditionnelle
[[./analyse-traditionnelle-3-svg.pdf]]
** L'analyse de données réplicable
[[./analyse-replicable-3-svg.pdf]]
** Pourquoi faire réplicable?
- Facile à refaire si les données changent
- Facile à modifier
- Facile à inspecter et vérifier
* M3-S2: Étude de cas: l'incidence de syndromes grippaux
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. *Étude de cas: l'incidence de syndromes grippaux*
3. Importer les données. Au choix:
- Jupyter
- RStudio
- OrgMode
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** Les points clés à retenir
- Aucune modification des données "à la main".
- Du code pour tout!
* M3-S3A: Importer les données (Jupyter)
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. Étude de cas: l'incidence de syndromes grippaux
3. *Importer les données*. Au choix:
- *Jupyter*
- RStudio
- OrgMode
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** Choix techniques
- Notebook Jupyter
- Langage Python 3
- Bibliothèques:
- pandas
- matplotlib
- isoweek
** Les points clés à retenir
- Lecture des données directement de la source
- Gestion des données manquantes
* M3-S3B: Importer les données (RStudio)
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. Étude de cas: l'incidence de syndromes grippaux
3. *Importer les données*. Au choix:
- Jupyter
- *RStudio*
- OrgMode
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** Choix techniques
- Environnement RStudio
- Langage R
- Bibliothèque: parsedate
** Les points clés à retenir
- Lecture des données directement de la source
- Attention aux données manquantes
* M3-S3C: Importer les données (OrgMode)
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. Étude de cas: l'incidence de syndromes grippaux
3. *Importer les données*. Au choix:
- Jupyter
- RStudio
- *OrgMode*
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** Choix techniques
- Environnement Environnement Emacs + Org mode
- Langages:
- Python 3 pour préparer les données
- R pour l'analyse
** Les points clés à retenir
- Lecture des données directement de la source
- Gestion des données manquantes
* M3-S4A/B/C: Vérification et inspection
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. Étude de cas: l'incidence de syndromes grippaux
3. Importer les données. Au choix:
- Jupyter
- RStudio
- OrgMode
4. *Vérification et inspection*. Au choix:
- *Jupyter*
- *RStudio*
- *OrgMode*
5. Questions et réponses. Au choix:
- Jupyter
- RStudio
- OrgMode
** Les points clés à retenir
- Pré-traitement des données
- Adapter aux conventions des logiciels
- Faciliter l'analyse
- Vérifier autant que possible
- Inspection visuelle
- Code de validation
* M3-S5A/B/C: Questions et réponses
** 3. La main à la pâte: une analyse réplicable
1. Une analyse réplicable, c'est quoi?
2. Étude de cas: l'incidence de syndromes grippaux
3. Importer les données. Au choix:
- Jupyter
- RStudio
- OrgMode
4. Vérification et inspection. Au choix:
- Jupyter
- RStudio
- OrgMode
5. *Questions et réponses*. Au choix:
- *Jupyter*
- *RStudio*
- *OrgMode*
** Questions
1. Quelles années ont connu les épidémies les plus fortes?
2. Quelle est la fréquence d'épidémies faibles, moyennes, et fortes?
** Les points clés à retenir
- Une analyse réplicable doit contenir *toutes les étapes* de traitement des données sous une forme *exécutable*.
- Il est important d'*expliquer* tous les choix qui peuvent influencer les résultats.
- Ceci nécessite d'exposer beaucoup de *détails techniques*, parce que c'est à ce niveau qu'on fait *le plus d'erreurs*!
../assets/img/replicable-analysis-3.svg
\ No newline at end of file
#+TITLE: Diving in: a replicable analysis
#+AUTHOR: @@latex:{\large Konrad Hinsen} \\ \vspace{0.2cm}CBM, CNRS Orléans and Synchrotron SOLEIL\\ \vspace{0.2cm} \texttt{konrad.hinsen@cnrs.fr}@@
#+OPTIONS: H:2 tags:nil
#+EXCLUDE_TAGS: noexport
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger]
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+BEAMER_HEADER: \setbeamercovered{invisible}
#+BEAMER_HEADER: \beamertemplatenavigationsymbolsempty
#+STARTUP: beamer
#+COLUMNS: %45ITEM %10BEAMER_ENV(Env) %10BEAMER_ACT(Act) %4BEAMER_COL(Col) %8BEAMER_OPT(Opt)
#+STARTUP: indent
#+PROPERTY: header-args :eval no-export
* M3-S1: What is a replicable analysis?
** 3. Diving in: a replicable analysis
1. *What is a replicable analysis?*
2. Case study: incidence of influenza-like illness
3. Data import
- Jupyter
- RStudio
- OrgMode
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Traditional data analysis
[[./traditional-analysis-3-svg.pdf]]
** Replicable data analysis
[[./replicable-analysis-3-svg.pdf]]
** Why do it replicably?
- Easy to re-do if the data change
- Easy to modify
- Easy to inspect and verify
* M3-S2: Case study: incidence of influenza-like illness
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. *Case study: incidence of influenza-like illness*
3. Data import
- Jupyter
- RStudio
- OrgMode
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Take-home message
- No manual editing of data
- Everything is done in code!
* M3-S3A: Data import (Jupyter)
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. Case study: incidence of influenza-like illness
3. *Data import*
- *Jupyter*
- RStudio
- OrgMode
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Technical choices
- Jupyter notebook
- Python 3 language
- Libraries:
- pandas
- matplotlib
- isoweek
** Take-home message
- The data are read directly from the source
- Missing data must be handled
* M3-S3B: Data import (RStudio)
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. Case study: incidence of influenza-like illness
3. *Data import*
- Jupyter
- *RStudio*
- OrgMode
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Technical choices
- RStudio development environment
- R language
- Library: parsedate
** Take-home message
- The data are read directly from the source
- Missing data must be handled
* M3-S3C: Data import (OrgMode)
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. Case study: incidence of influenza-like illness
3. *Data import*
- Jupyter
- RStudio
- *OrgMode*
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Technical choices
- Emacs editor + Org mode
- Languages:
- Python 3 for pre-processing
- R for analysis
** Take-home message
- The data are read directly from the source
- Missing data must be handled
* M3-S4A/B/C: Verification and inspection
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. Case study: incidence of influenza-like illness
3. Data import
- Jupyter
- RStudio
- OrgMode
4. *Verification and inspection*
- *Jupyter*
- *RStudio*
- *OrgMode*
5. Obtaining answers to a few questions
- Jupyter
- RStudio
- OrgMode
** Take-home message
- Preprocessing
- Adapt the data to the software's conventions
- Facilitates the analysis
- Verify as much as possible
- Visual inspection
- Validation code
* M3-S5A/B/C: Obtaining answers to a few questions
** 3. Diving in: a replicable analysis
1. What is a replicable analysis?
2. Case study: incidence of influenza-like illness
3. Data import
- Jupyter
- RStudio
- OrgMode
4. Verification and inspection
- Jupyter
- RStudio
- OrgMode
5. *Obtaining answers to a few questions*
- *Jupyter*
- *RStudio*
- *OrgMode*
** Questions
1. Which years have seen the strongest epidemics?
2. What is the frequency of weak, average, and strong epidemics?
** Take-home message
- A replicable analysis must contain *all* data processing steps in an *executable* form.
- It is important to *explain* all choices that have an impact on the results.
- This requires making many *technical details* explicit, because that is where most mistakes happen!
../assets/img/traditional-analysis-3.svg
\ No newline at end of file
#+TITLE: Vers une étude reproductible :\newline la réalité du terrain
#+AUTHOR: @@latex:Christophe Pouzat, Arnaud Legrand, Konrad Hinsen@@
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger,xcolor={usenames,dvipsnames,svgnames,table}]
#+STARTUP: beamer indent
#+LANGUAGE: fr
#+PROPERTY: header-args :eval no-export
#+OPTIONS: H:2 tags:nil
#+OPTIONS: num:t toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
# #+OPTIONS: author:nil email:nil creator:nil timestamp:t
#+TAGS: noexport(n)
#+EXCLUDE_TAGS: noexport
#+LATEX_HEADER: % \usepackage{pgfpages}
#+LATEX_HEADER: % \setbeameroption{show notes on second screen=right}
#+LATEX_HEADER: \usepackage[francais]{babel}
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \setbeamercovered{invisible}
#+LATEX_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Où en sommes nous?}\tableofcontents[currentsection]\end{frame}}
#+LATEX_HEADER: \beamertemplatenavigationsymbolsempty
#+LATEX_HEADER: \usepackage{tikzsymbols}
#+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]}
#+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]}
#+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]}
#+LATEX_HEADER: \usepackage{color,soul}
#+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7}
#+LATEX_HEADER: \sethlcolor{lightblue}
#+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}}
#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \newcommand\SoulColor{%
#+LATEX_HEADER: \let\set@color\beamerorig@set@color
#+LATEX_HEADER: \let\reset@color\beamerorig@reset@color}
#+LATEX_HEADER: \makeatother
#+LATEX_HEADER: \let\hrefold=\href
#+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}}
#+LaTeX: \let\alert=\structure % to make sure the org * * works
#+LaTeX: \begin{frame}{Plan du cours}\tableofcontents\end{frame}
* Test et informations :noexport:
* Internal refs/notes :noexport:
** Images
- Notebook konrad:
- file:../slides-module2/jupyter-grippal-full.png
- file:../slides-module2/jupyter-grippal-top.png
- file:../slides-module2/jupyter-grippal-bottom.png
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file jupyter-grippal-full.png
rm /tmp/cropped_*
convert -crop 1345x3000 jupyter-grippal-full.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append jupyter-grippal-paged.png
#+end_src
#+RESULTS:
: jupyter-grippal-full.png: PNG image data, 1345 x 8772, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 jupyter-grippal-paged.png ../assets/img/nb3.png
#+end_src
#+RESULTS:
- Notebook Elisabeth: https://bitbucket.org/elizabethpwalton/smpe_project
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file elizabethpwalton_SMPE.png
rm /tmp/cropped_*
convert -crop 820x2650 elizabethpwalton_SMPE.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append elizabethpwalton_SMPE-aged.png
#+end_src
#+RESULTS:
: elizabethpwalton_SMPE.png: PNG image data, 820 x 15217, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 elizabethpwalton_SMPE-aged.png ../assets/img/nb4.png
#+end_src
#+RESULTS:
- Notebook Ismail:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
rm /tmp/cropped_*
convert -crop 590x1400 oscar.png /tmp/cropped_%d.png
for i in /tmp/cropped_[1-9].png ; do mv $i `echo $i | sed 's/cropped_/cropped_0/'` ; done
convert /tmp/cropped_*.png +append And_the_Oscar_goes_to-paged.png
#+end_src
#+RESULTS:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 And_the_Oscar_goes_to-paged.png ../assets/img/nb5.png
#+end_src
#+RESULTS:
- Navette russe: https://io9.gizmodo.com/more-sad-remains-of-the-soviet-buran-space-shuttle-prog-1733190814
- Msieur il marche mon programme: https://www.luc-damas.fr/humeurs/images/il-marche-mon-programme.jpg
- PhD Comics:
- http://phdcomics.com/comics/archive.php?comicid=1947:
http://phdcomics.com/comics/archive/phd050817s.gif
- http://phdcomics.com/comics/archive.php?comicid=1948:
http://phdcomics.com/comics/archive/phd051017s.gif
** Graphe syndrome grippal:
#+begin_src shell :results output raw :exports both
debtree python3-matplotlib > python3-matplotlib.dot
sed -i -e 's/rankdir=LR/rankdir=RL/g' \
-e 's/node \[shape=box\]/node [shape=box, color=black, fillcolor=gray, fontcolor=black, style=filled]/g' \
python3-matplotlib.dot
dot -Tpng python3-matplotlib.dot > python3-matplotlib.png
echo file:python3-matplotlib.png
#+end_src
#+RESULTS:
file:python3-matplotlib.png
#+begin_src shell :results output :exports both
mv python3-matplotlib.png ../assets/img/
#+end_src
#+RESULTS:
* M4-S0: Vers une étude reproductible : la réalité du terrain
** L'enfer de la Recherche Reproductible
file:../assets/img/phd_sisyphe.png
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Bonjour à tous,
Maintenant que vous êtes familiers avec les documents computationnels
et les analyses réplicables, vous disposez des outils principaux vous
permettant d'améliorer votre pratique et de rendre votre recherche
reproductible.
Mais la route est longue et semée d'embûches. Il est temps d'aller un
peu plus loin et que vous preniez consciences des différentes
difficultés auxquelles vous risquez d'être confronté.
Dans ce dernier module, nous vous présenterons trois des enfers de la
recherche reproductible.
** Module 4. Vers une étude reproductible : la réalité du terrain :noexport:
1. L'enfer des données
2. L'enfer du logiciel
3. L'enfer du calcul
4. Conclusion
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
*Christophe:* Le premier enfer est celui des données. Quand on travaille
sur de vrais données, leur taille, leur structure, ou leur diversité
peuvent rapidement poser d'importantes difficultés. Je présenterai
quelques approches permettant de survivre dans cet environnement
hostile.
*Arnaud:* Le second enfer est celui du logiciel et on se trouve
rapidement confronté à deux défis. D'une part, le logiciel devient
très rapidement gros, difficile à gérer, et les solutions simples que
nous vous avons présentées passent alors très mal à
l'échelle. D'autre part, aussi étonnant que cela puisse paraître, les
logiciels vieillissent et résistent souvent très mal à l'épreuve du
temps. Je présenterai des exemples concrets et quelques approches
permettant de survivre dans cet environnement hostile.
*Konrad:* Enfin, le troisième enfer est celui du calcul
numérique. J'illustrerai les difficultés que peut poser le calcul avec
des flottants, ou l'ordre des opérations influe sur les
résultats. Comme cet ordre a aussi un impact sur la performance, il
faut trouver un compromis entre temps d'exécution et
reproductibilité. Ceci est particulièrement difficile pour le calcul
parallèle, qui concerne tous les ordinateurs modernes, même les
smartphones. J'évoquerai aussi les précautions à prendre quand on
utilise les nombres aléatoires.
En espérant ne pas vous avoir trop effrayés, nous concluerons enfin
brièvement ce MOOC par quelques remarques de bon sens.
* M4-S1: L'enfer des données
** Vers une étude reproductible : la réalité du terrain :noexport:
1. *L'enfer des données*
2. L'enfer du logiciel
3. L'enfer du calcul
4. Conclusion
** Deux « nouveaux » problèmes
Lorsque nous commençons à travailler sur de « vraies » données nous nous trouvons généralement confrontés à deux problèmes :
- les données sont de nature « diverse »
- les données occupent un grand espace mémoire
** Les données « non homogènes »
- Les données grippales du module 3 se prêtent bien à une présentation en table (objet à 2 dimensions)
- Souvent la forme table doit être *abandonnée* car :
- les colonnes n'ont pas la même longueur
- les données peuvent être des suites chronologiques *et* des images, etc.
** Les données sont « trop grosses »
- *Format texte* pas toujours approprié pour des nombres
- Choix d'un *format binaire* car :
- Les nombres prennent moins de place mémoire
- Nombres en format texte \Rightarrow conversion en binaire pour calculs
** Ce qu'il faut garder du format texte : les métadonnées
- Le format texte permet de stocker les données *et* tout le reste...
- \Rightarrow ajouter des informations sur les données :
- provenance
- date d'enregistrement
- source
- etc.
- Ces informations sur les données sont ce qu'on appelle les *métadonnées*
- Elles sont vitales pour la mise en œuvre de la recherche reproductible
** Ce qu'il faut garder du format texte : le boutisme
- Format texte « universel »
- Formats binaires dépendent de l'architecture ou de l'OS
- 1010, codé sur 4 bits peut être lu comme :
- 1x1 + 0x2 + 1x4 + 0x8 = 5, c'est le *petit-boutisme*
- 1x8 + 0x4 + 1x2 + 0x1 = 10, c'est le *gros-boutisme*
- *Un stockage binaire pour la recherche reproductible doit spécifier le boutisme*
** Des formats binaires, pour données composites, permettant la sauvegarde de métadonnées
Rechercher des formats binaires pour :
- travailler avec de grosses données de natures différentes
- stocker des métadonnées avec les données
- avoir un boutisme fixé **une fois pour toute**
** `FITS` et `HDF5`
- Le *Flexible Image Transport System* (`FITS`), créé en 1981 est toujours régulièrement mis à jour
- Le *Hierarchical Data Format* (`HDF`), développé au *National Center for Supercomputing Applications*, en est à sa cinquième version, `HDF5`
** `FITS`
- `FITS` introduit et mis à jour par les astrophysiciens
- Format suffisamment général pour utilisation dans différents contextes
** Anatomie d'un fichier `FITS`
- 1 ou plusieurs segments : *Header/Data Units* (HDUs)
- HDU constituée :
- d'une en-tête (*Header Unit*) suivie, *mais ce n'est pas obligatoire*, par
- des données (*Data Unit*)
- En-tête = paires mots clés / valeurs → *métadonnées*
- Données tableaux binaires (une à 999 dimensions) ou tables (texte ou binaire)
** Manipulation des fichiers `FITS`
- Les développeurs du format fournissent une bibliothèque `C` et des programmes associés (faciles à utiliser)
- Les utilisateurs de `Python` pourront utiliser `PyFITS`
- Les utilisateurs de `R` pourront utiliser `FITSio`
** `HDF5`
- Organisation hiérarchique, ressemble à une arborisation de fichiers
- Élément structurant : le *group* (répertoire) contient un ou plusieurs *datasets* (jeux de données)
- Les *groups* peuvent être imbriqués
- Les métadonnées n'ont pas de structure imposée
- Les données n'ont pas de structure imposée — elles peuvent être des textes.
** Manipulation des fichiers `HDF5`
- Format plus souple \Rightarrow bibliothèque `C` plus compliquée que son équivalent `FITS`
- La bibliothèque distribuée avec `HDFView` : outil puissant d'exploration et de visualisation
- `Python` dispose d'une interface très complète avec `h5py`
- Il y a trois paquets `R` : `h5`, `hdf5r` et `rhdf5`
** L'archivage
Git(hub/lab/...) : pas bien adapté au stockage de données
#+BEGIN_CENTER
#+ATTR_LATEX: :height 1cm :center nil
file:../assets/img/Zenodo-logo.jpg
#+ATTR_LATEX: :height 1cm :center nil
file:../assets/img/Figshare-logo.png
#+END_CENTER
** Conclusions
- Vraies données \Rightarrow problèmes de taille et de structure
- Vraies données complexes \Rightarrow métadonnées
- `FITS` et `HDF5` = solutions *pratiques*
- En complexité et flexibilité : `FITS` < `HDF5`
- Plateformes d'archivage \Rightarrow stockage pérenne accessible à tous
* M4-S2: L'enfer du logiciel
** Vers une étude reproductible : la réalité du terrain :noexport:
1. L'enfer des données
2. *L'enfer du logiciel*
3. L'enfer du calcul
4. Conclusion
** Passage à l'échelle
#+ATTR_LATEX: :width \linewidth
file:../assets/img/il-marche-mon-programme.jpg
** Des codes complexes...
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb1.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb2.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb3.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb4.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/grippal_orgmode1.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/grippal_orgmode2.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb5.png}%
- Un vrai plat de spaghettis
- Pas de vision d'ensemble
- Interaction entre plusieurs langages = danger
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Des codes compliqués à organiser/orchestrer. Le notebook a ses
limitations et vous pouvez en devenir prisonnier.
** ... et difficiles à orchestrer
#+LaTeX: \only<1>{\begin{overlayarea}{1.5\linewidth}{7cm}
#+ATTR_LATEX: :height 7cm :center nil
file:../assets/img/SbmlParameterisation.png
#+ATTR_LATEX: :height 7cm :center nil
file:../assets/img/SbmlModelling.png
#+LaTeX: \end{overlayarea}}\pause
Le *Workflow* :
- Vue de haut niveau plus claire
- Compositions de codes et mouvements de données explicites
- Partage, réutilisation, et exécution plus sûre
- Le notebook en est une forme à la fois appauvrie et plus riche
- Pas de façon simple/mature de passer d'un notebook à un
workflow
*Exemples* :
- Galaxy, Kepler, Taverna, Pegasus, Collective Knowledge, VisTrails
- Légers : dask, drake, swift, snakemake...
- Hybrides : SOS-notebook...
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- un workflow, c'est quoi ? On restructure le code de façon à rendre
le flot de traitement plus explicite. Chaque bout de code est
encapsulé dans une fonction, on supprime les effets de bord pour que
les entrées et les sorties soient parfaitement identifiées. On
connecte ensuite chacune de ces fonctions les unes avec les
autres.
- Un environnement de workflow fournit les bonnes abstractions, les
bonnes conventions d'écritures permettant d'orchestrer tous ces
appels et c'est ensuite le moteur de workflow qui gère l'exécution
des choses. Non seulement le workflow peut plus facilement exploiter
une machine parallèle, mais en plus, il est possible de sauvegarder
l'état d'avancement du calcul (via les données générées jusqu'ici)
et le reprendre plus tard. Si on décide de modifier une des briques
du workflow, on peut réutiliser les résultats obtenus en amont. Ce
genre de manipulation est bien plus compliquée avec un notebook où
il y a une session, un état global et où le risque d'erreur est bien
plus important.
- Alors, un workflow peut devenir quelque chose de très compliqué et
de pas forcément très clair non plus mais la représentation par un
graphe permet de regrouper et d'agréger certaines parties pour se
concentrer sur l'essentiel tout en pouvant inspecter les détails
quand on le souhaite.
- Un autre avantages du workflow est la capacité à partager des
parties du workflow avec d'autres et à bénéficier des améliorations
que d'autres pourraient apporter à notre propre workflow... C'est un
des intérêt de plates-formes comme taverna ou kepler.
- Le notebook est donc selon moi parfait quand on met quelque chose au
point car il permet de prendre des notes sur ce que l'on fait
et sur pourquoi on le fait. Au fur et à mesure que le notebook
évolue en quelque chose de plus complexe et qu'on a les idées de
plus en plus claires sur les manipulations de données à effectuées,
il devient intéressant de transformer toute cette matière en un
workflow.
- Cette restructuration est manuelle et il n'existe pas encore de
bonne solution pour passer de l'un à l'autre. Il y a des tentatives
intéressantes comme le sos-notebook dans Jupyter mais toutes ces
initiatives sont encore en plein développement.
- L'utilisation d'un workflow ne rend pas l'utilisation d'un notebook
caduque. Le notebook est utile mais à un autre niveau. Les appels au
workflow peuvent parfaitement être faits à partir du notebook et on
utilisxe alors ce dernier pour décrire les expériences que l'on mène
et le résultats des analyses.
** L'usine à gaz des calculs coûteux
Les *calculs interminables* et les *gros volumes de données*
- JupyterHub et les supercalculateurs : en développement
- Checkpoint et Cache
- Le workflow permet de passer à l'échelle
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
# https://zonca.github.io/2015/04/jupyterhub-hpc.html
# https://github.com/ipython/ipyparallel/issues/167
# https://groups.google.com/forum/#!topic/jupyter/BlexhV8W5TE
Les calculs interminables et les gros volumes de données
- JupyterHub et les supercalculateurs: en développement
- Lancement sur des machines distantes ? Compliqué, pas de bonnes
solutions à l'heure actuelle.
- Actuellement, JupyterHub permet de donner une machine
(éventuellement virtuelle) à chaque notebook
- Il dispose également d'un onglet cluster permettant d'allouer
plusieurs machines à un Ipython parallèle.
- Lorsque l'on souhaite paralléliser c'est la plupart du temps le
langage du notebook qui fait le travail (Ipython parallèle, R au
dessus de spark, etc.), pas le notebook lui même.
- Notebook idéal selon moi: tel bloc peut/doit s'exécuter ailleurs
- Ce qui n'est pas sans poser de nombreux problèmes de sémantiques
(surtout si le mécanisme de session est utilisé et/ou que
plusieurs langages sont utilisés)
- Checkpoint et Cache:
- Il y a des mécanismes de cache dans les trois environnements que
nous vous avons présentés.
- Cela vous permet de ne pas tout réexécuter depuis le début.
- Ne pas confondre l'objet résultant (le graphique ou le tableau) des
données sous-jacentes.
- Un checkpoint explicite (via des fichiers) des données nécessaires
à la suite des calculs est la méthode la plus simple.
- Le workflow gère la séparation des codes et des données, ce qui
permet de passer à l'échelle
# - Histoire de montrer que malgré ça c'est dur:
# https://github.com/IFB-ElixirFr/ReproHackathon/blob/master/docs/index.md
# https://f1000research.com/articles/6-124/v1
** Des éco-systèmes complexes
Que se cache-t-il derrière ce simple
#+begin_src python :results output :exports both
import matplotlib
#+end_src
#+LaTeX: \scriptsize
#+BEGIN_EXAMPLE
Package: python3-matplotlib
Version: 2.1.1-2
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2),
python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz,
libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1),
python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~),
python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>=
2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>=
1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
#+END_EXAMPLE
#+LaTeX: \only<2>{\vspace{-3.5cm}\includegraphics<2>[width=\linewidth]{../assets/img/python3-matplotlib.png}}\vspace{10cm}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Qu'est-ce qui se cache derrière matplotlib
- Python peut nous dire ce qu'il en sait (i.e., pas grand chose)
mais comment s'assurer que deux personnes exécutent bien ce code
dans le même environnement logiciel
- Dans le cadre de ce MOOC, un serveur jupyter est déployé et un
environnemnt commun est proposé. Mais pouvez vous vous assurer que
vous disposerez du même environnemnt chez vous à la fin du MOOC ?
- Comment réinstaller un tel environnemnent ? Comment packager un
logiciel complexe ?
- Comment faire en sorte qu'il puisse évoluer si un bug est corrigé ?
** Des éco-systèmes complexes
\small Pas de standard:
- Linux (=apt=, =rpm=, =yum=), MacOS X (=brew=, =McPorts=, =Fink=), Windows (?)
#+LaTeX: \null\vspace{-.6em}
- Ni pour l'installation ni pour récupérer les informations... $\frowny$
#+LaTeX: \null\vspace{-.6em}
#+LaTeX: \vspace{-1em}
#+LaTeX: \begin{columns}\begin{column}[t]{.45\linewidth}\scriptsize
#+begin_src python :results output :exports both
import sys
print(sys.version)
import matplotlib
print(matplotlib.__version__)
import pandas as pd
print(pd.__version__)
#+end_src
#+LaTeX: ~\vspace{-2.4em}~\tiny
#+begin_example
3.6.3 (default, Oct 3 2017, 21:16:13)
[GCC 7.2.0]
2.1.1
0.20.3
#+end_example
#+LaTeX: \end{column}\begin{column}[t]{.55\linewidth}\scriptsize
#+begin_src R :results output :session *R* :exports both
library(ggplot2)
sessionInfo()
#+end_src
#+LaTeX: ~\vspace{-2.4em}~\tiny
#+RESULTS:
#+begin_example
R version 3.4.3 (2017-11-30)
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.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
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
other attached packages:
[1] ggplot2_2.2.1
loaded via a namespace (and not attached):
[1] colorspace_1.3-2 scales_0.5.0 compiler_3.4.3 lazyeval_0.2.1
[5] plyr_1.8.4 pillar_1.1.0 gtable_0.2.0 tibble_1.4.2
[9] Rcpp_0.12.15 grid_3.4.3 rlang_0.1.6 munsell_0.4.3
#+end_example
#+LaTeX: \end{column}\end{columns}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Pas de standard:
- Ni pour l'installation ni pour récupérer les informations:
- Linux (Debian =apt=, RedHat =rpm=...), MacOS X (=brew=, =McPorts=,
=Fink=), Windows (?)
- Indiquer ses dépendances logicielles, c'est la version 0 de la
reproductibilité. Ça ne coûte pas bien cher et ça permettra à
celui qui viendra après vous de savoir par où commencer.
- Il faut mettre en place une solution ad hoc, selon le langage
utilisé et ce n'est pas simple.
- Lister l'intégralité de ses dépendances logicielles (voire avec
quel compilateur telle bibliothèque a été compilée) peut être très
compliqué
** Contrôler son environnement
*Un environnement contrôlé :*
- Travailler dans une machine virtuelle (lourd) ou un conteneur docker
(léger)
#+LaTeX: \bigskip\begin{columns}\begin{column}[t]{.45\linewidth}
*Conserver le bazar*
- Capture automatique de l'environnement
- [[http://www.pgbovine.net/cde.html][CDE]], [[https://vida-nyu.github.io/reprozip/][ReproZip]], +[[http://reproducible.io/][CARE]]+
#+LaTeX: \end{column}\hspace{-2em}\begin{column}[t]{.52\linewidth}
*Faire le ménage*
- Partir d'un environnement vierge
- Installer uniquement le nécessaire (et l'expliciter)
- [[https://www.docker.io/][Docker]], [[https://singularity.lbl.gov/][Singularity]], [[https://www.gnu.org/software/guix/][Guix]], [[https://nixos.org/][Nix]]...
#+LaTeX: \end{column}\end{columns}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Intro:
- You cannot expect people to find all the chains of dependencies!
- You cannot expect people to install all the dependencies and run your
code smoothly!
- Règle numéro 1 d'un environnement bien contrôlé: travailler dans un
environnement isolé (une machine virtuelle ou bien un conteneur)
- Brève explication de ce que c'est et de la différence. Sans le
savoir, tous ceux qui ont utilisé nos notebooks ont travaillé dans
un conteneur docker.
- Conséquence:
- du point de vue du code exécuté, tout est encapsulé: rien ne
rentre, rien ne sort
- l'utilisation de l'interface graphique peut être un peu compliquée
- exécution a priori possible sur n'importe quel OS (pour une VM,
sur un OS compatible pour un conteneur)
- Un environnement contrôlé: deux approches
- Conserver le bazar ::
- C'est l'approche toute automatique, un outil se charge
d'observer l'exécution de votre logiciel et de capturer
l'ensemble des codes et des bibliothèques utilisées
- Une archive contenant l'environnement peut alors être construite
et partagée. C'est très facile et très pratique.
- Avantage: Facile, permet à quelqu'un d'autre de réexécuter le
code dans les mêmes conditions
- Inconvénient: pas facile de faire évoluer un tel objet, ni de
comprendre comment il fonctionne. Le résultat est une boite
noire.
- Examples: CARE, CDE, Reprozip
- Faire le ménage ::
- On part d'un environnement minimal dans un conteneur
- On rajoute les composants logiciel dont on a besoin au fur et à
mesure
- Idéalement, au fur et à mesure qu'on rajoute ces logiciel, on
scripte leur installation (e.g., dockerfile)
- Avantage: cela permettra de facilement faire évoluer
l'environnement (mise à jour, remplacement d'un composant
défectueux, etc.)
- Inconvénient: demande quelques efforts, en particulier quand les
composants logiciels sont mal packagés (pas partie d'une
distribution, interventions manuelles, etc.) et que beaucoup
d'interactions avec l'extérieur sont nécessaires (le téléchargement
des données doit être bien séparé)
- Examples: Singularity, voire Nix ou GUIX qui permettent une
reconstruction parfaite, un environnement étant encodé de façon
fonctionnel
*** Cruft :noexport:
#+begin_src shell :results output raw :exports both
echo "#+BEGIN_EXAMPLE"
apt-cache show python3-matplotlib # | grep Depends | head -1
echo "#+END_EXAMPLE"
#+end_src
#+RESULTS:
#+BEGIN_EXAMPLE
Package: python3-matplotlib
Source: matplotlib
Version: 2.1.1-2
Installed-Size: 12159
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1), python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.1.1-2_amd64.deb
Size: 4597588
MD5sum: bfca8169a6b4e2cd9f89eb2f862083c7
SHA256: cbf80fdbf2643f19f926e33ea24cab3f76286d631d0806a2f665989fb17c76e4
Package: python3-matplotlib
Source: matplotlib
Version: 2.0.0+dfsg1-2
Installed-Size: 7362
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.0.0+dfsg1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.10.0~b1), python3-numpy-abi9, python3 (<< 3.6), python3 (>= 3.5~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.0.0+dfsg1-2_amd64.deb
Size: 1589544
MD5sum: e8f0571243df303a9b1f37a8ebf8177d
SHA256: 8f5d3509d4f5451468c6de44fc8dfe391c3df4120079adc01ab5f13ff4194f5a
#+END_EXAMPLE
** L'épreuve du temps
file:../assets/img/soviet_space_shuttle.jpg
** Compatibilité ascendante
\small
- Python et tout son écosystème à évolution hyper rapide
#+LaTeX: \null\vspace{-1em}
#+begin_src shell :results output :exports both
python2 -c "print(10/3)"
python3 -c "print(10/3)"
#+end_src
#+LaTeX: \null\vspace{-2.4em}{\scriptsize
#+RESULTS:
: 3
: 3.3333333333333335
#+LaTeX: }
\pause
#+ATTR_LATEX: :height 3.2cm :center nil
file:../assets/img/plot_1.5.3.png
#+ATTR_LATEX: :height 3.2cm :center nil
file:../assets/img/plot_2.1.1.png
\pause
- Cortical Thickness Measurements (PLOS ONE,
June 2012): /FreeSurfer/: /differences were found between the Mac and
HP workstations and between Mac OSX 10.5 and OSX 10.6./
- Incompatibilité de formats entre orgmode 7.*, 8.*, 9.*, etc.
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Petit exemple en python, le plus simple qui soit, une division:
- Le passage de python2 à python3 a introduit des changements
majeurs puisque la division par défaut qui était à l'origine une
division entière est devenue une division sur des flottants.
- Alors, certains diront que python2 et python3 doivent être
considérés comme deux langages distincts mais même si python2
reste maintenu et continue d'évoluer (doucement), quand tous les
efforts de l'écosystème se tournent vers python3, on est bien
obligé d'emboiter le pas...
- Il y a quelques mois, un de mes collègues qui était bien content
d'avoir utilisé un notebook pour préparer son dernier article et
d'avoir fait bien attention à sauvegarder tout son code et ses
résultats intermédiaires, a été assez surpris en préparant la
révision finale de remarquer que la figure qu'il avait générée 3
mois auparavant avait décidé de changer de couleurs...
- Entre les deux, matplotlib a été mis à jour sur sa machine et il
se trouve qu'entre la version 1.5.12 et la 2.0, la palette de
couleurs par défaut a changé...
- Alors, dans cet exemple précis, ça ne change pas
fondamentalement les choses et le plus important était de
pouvoir mettre à disposition la démarche utilisée mais c'est
quand même assez agaçant.
- Ce type d'incident met en évidence le problème de la perméabilité
à l'environnement extérieur.
** Les outils à développement rapide
*Rapides*, mais *fragiles* et *peu pérennes* :
- Correction ou introduction de bug
- Il devient nécessaire de vérifier régulièrement la
reconstructibilité et la fonctionnalité de ces environnements
(intégration continue et tests de non régression)
Popper: [[http://falsifiable.us/][http://falsifiable.us/]]
#+ATTR_LATEX: :height 1.5cm :center nil
file:../assets/img/popper_logo_just_jug.png
*Autre possibilité* :
- Se restreindre à ce qui est maîtrisable (C par exemple)
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Les outils informatiques évoluent à une vitesse incroyable et nous
permettent d'aller plus vite, plus loin dans nos recherche. Il est
donc indispensable de s'appuyer dessus.
- Néanmoins, ces développements rapides sont aussi a source de
nombreuses erreurs, de régressions, de corrections (ce qui est une
bonne chose) et très souvent de perte de compatibilité entre les
versions.
- Ce sont des outils à développement rapide dans les deux sens du
terme, c'est à dire des outils qui à la fois vous permettent de
mettre en place des choses complexes très rapidement mais qui
évoluent aussi très (pour ne pas dire trop) rapidement.
- Dans ce contexte mouvant, il devient nécessaire de vérifier
régulièrement que notre code et son environnement peuvent être
regénérés et qu'ils sont fonctionnels. En génie logiciel, les termes
associés sont "intégration continue" (chaque nuit ou bien à chaque
commit dans votre gestionnaire de version, la compilation de votre
code est déclenchée et remonte une alerte en cas de problème) et
"tests de non régression" (une fois votre code et son environnement
compilé, on vérifie via une batterie de tests que les sorties pour
des entrées bien spécifiques sont toujours correctes).
- Certains proposent même une utilisation systématique de ce type
d'approche au processus de recherche. Ça demande un investissement
technique un peu lourd mais dans le principe, pourquoi pas ?
- Il faut garder à l'esprit que les notebooks ou les outils que nous
vous avons présentés font d'ailleurs partie de cette famille
d'outils à développement rapide et n'échappent pas malgré leurs
efforts à ces difficultés de pérennité.
- Pour être le moins possible ennuyé par ce type de problème, certains
font le choix de se restreindre à des outils et des langages très
stables et qu'ils peuvent maîtriser de bout en bout.
- Il faut donc trouver le bon compromis entre modernisme et pérennité.
** L'archivage
*Gestion du code source*
- Github/Gitlab/... : stables, ouverts, \dots pérennes ?
- +Google Code+, +Gitorious+, +Code Spaces+
#+ATTR_LATEX: :height 1.3cm :center nil
file:../assets/img/swh-logo.png
#+ATTR_LATEX: :height 1.3cm :center nil
file:../assets/img/LogoHAL.PNG
*Gestion des environnements*
- Pérénité de l'accès à dockerhub, nix repository, code ocean... ?
- Une fois l'environnement gelé, quelle est la pérennité d'une VM,
d'une image docker... ?
*Conserver le plus d'informations possible en automatisant*
- Logiciels, versions, procédure d'installation
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Dans les exercices, faites y bien attention.
# file:../assets/img/ArXiv-web.png" height=60 />
# file:../assets/img/Zenodo-logo.jpg" height=60 />
# file:../assets/img/Figshare-logo.png" height=60 />
* M4-S3: L'enfer du calcul
** Vers une étude reproductible : la réalité du terrain :noexport:
1. L'enfer des données
2. L'enfer du logiciel
3. *L'enfer du calcul*
4. Conclusion
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Dans cette séquence, nous montrons les difficultés spécifiques qu'on
rencontre dans le calcul numérique. La plus fréquente est due à
l'arithmétique à virgule flottante, ce qui est un cas spécial de la
variabilité entre les plateformes de calcul. Une autre difficulté
est due aux générateurs de nombres aléatoires.
** L'arithmétique à virgule flottante
file:../assets/img/polynome1.svg
#+begin_src python :results output :exports both
def polynome(x):
return x**9 - 9.*x**8 + 36.*x**7 - 84.*x**6 + 126.*x**5 \
- 126.*x**4 + 84.*x**3 - 36.*x**2 + 9.*x - 1.
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Commençons avec un exemple. Mon collègue Arnaud a calculé les valeurs d'un
polynôme d'ordre 9. Le voici.
** L'arithmétique à virgule flottante
file:../assets/img/polynome2.svg
#+begin_src python :results output :exports both
def horner(x):
return x*(x*(x*(x*(x*(x*(x*(x*(x - 9.) + 36.) - 84.) + 126.) \
- 126.) + 84.) - 36.) + 9.) - 1.
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Mon collègue Christophe lui fait remarquer que la méthode de Horner résulte dans
un calcul plus efficace. Il s'agit d'un réarrangement des termes qui reduit notamment
le nombre de multiplications. Le voici. Les deux courbes se recouvrent, donc les
résultats sont identiques.
** L'arithmétique à virgule flottante
file:../assets/img/polynome3.svg
#+begin_src python :results output :exports both
def simple(x):
return (x-1.)**9
# trop facile!
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Une analyse un peu plus approfondie montre que notre polynôme a une seule racine
à x=1, ce qui nous permet d'en simplifier le calcul. Nous avons maintenant
trois courbes qui se recouvrent. Tout va bien !
** L'arithmétique à virgule flottante
file:../assets/img/polynome3-4.svg
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Mais regardons la région autour de x=1 de plus près...
** L'arithmétique à virgule flottante
file:../assets/img/polynome4.svg
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Ça a l'air un peu bizarre. Et les trois courbes ne sont enfin pas identiques,
juste proches. Qu'est-ce qui se passe ?
** L'arrondi
#+LaTeX: \def\round{\texttt{arrondi}}
- Il y a un arrondi implicite dans chaque opération.
- a+b est en réalité \round(a+b).
- Mais:
#+BEGIN_CENTER
\small
\round(\round(a+b)+c) $\ne$ \round(a+\round(b+c)).
#+END_CENTER
- L'ordre des opérations est donc important.
*Pour un calcul reproductible, il faut préserver l'ordre des
opérations !!!*
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Le résultat d'une opération arithmétique sur des flottant n'est en général pas
représentable par un autre flottant. On applique une opération d'arrondi qui
remplace le résultat exact avec une valeur proche qui est représentable.
A cause de l'arrondi, les règles habituelles de l'arithmétique ne sont plus
applicables à l'identique. On perd notamment l'associativité de l'addition et
de la multiplication.
En changeant l'ordre des opérations, on peut donc changer le résultat !
** Comment l'expliquer à mon compilateur?
Pour accélérer le calcul, les compilateurs peuvent changer l'ordre des opérations,
et donc le résultat.
Pour un calcul reproductible, il y a deux approches:
- Insister sur le respect de l'ordre des opérations,
+ si le langage le permet.
+ Exemple: Le module `ieee_arithmetic` en Fortran 2003
- Rendre la compilation reproductible:
- Noter la version précise du compilateur
- Noter toutes les options de compilation
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Ceci devient un obstacle à la reproductibilité à cause des
optimisations appliquées par les compilateurs pour accélérer le
calcul. Celle-ci changent souvent l'ordre des opérations et donc le
résultat.
Pour rendre un calcul reproductible, il y a deux
approches. Premièrement, on peut dire à son compilateur de ne pas
toucher à l'ordre des opérations, idéalement dans le code source du
logiciel. Ceci est possible par exemple dans le langage Fortran
2003.
L'autre approche est de rendre la compilation elle-même
reproductible en notant la version précise du compilateur utilisé,
ainsi que toutes les options de compilation. Idéalement, il faut
alors archiver le compilateur avec le logiciel de calcul.
** Calcul parallèle
- Objectif: une exécution plus rapide
\to Minimiser la communication entre processeurs
\to Adapter la répartition des données...
\to et donc l'ordre des opérations
- Conséquence: le résultat dépend du nombre de processeurs!
*Minimiser cet impact du parallélisme reste un sujet de recherche.*
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Un autre obstacle à la reproductibilité résulte du calcul parallèle.
Celui-ci a comme seul objectif une exécution plus rapide. Pour y arriver,
il faut minimiser la communication entre les processeurs en adaptant
la répartition des données. Ceci implique d'adapter l'ordre des opérations,
car chaque processeur traite d'abord ses données locales avant d'entrer en
communication avec les autres processeurs.
La conséquence est que le résultat du calcul change avec le nombre
de processeurs utilisés.
On peut tenter d'écrire le logiciel tel que l'impact de cette variation
soit minimisé. Mais il n'y a pour l'instant aucune technique éprouvée
pour y arriver. Ceci reste un sujet de recherche.
** Calcul parallèle: exemple
file:../assets/img/gouttedo1.png
Source: Thèse de Rafife Nheili, Université de Perpignan, 2016
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Regardons un simple exemple: la simulation des vagues causées dans
un bassin carré d'eau par une goutte qui tombe au milieu. A gauche,
la simulation exécutée sur un seul processeur. A droite, le résultat
d'un calcul sur quatre proecesseurs, ou les points qui diffèrent
sont colorés en gris.
** Calcul parallèle: exemple
file:../assets/img/gouttedo2.png
Source: Thèse de Rafife Nheili, Université de Perpignan, 2016
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Un pas de temps plus loin, le nombre de points à résultat différent
a nettement augmenté. Il continuera a augmenter au cours de la
simulation, jusqu'à ce qu'il n'y a plus aucun point pour lequel le
résultat restera identique.
** Les plateformes de calcul
- Plateforme de calcul: matériel + infrastructure logicielle
- Calcul = plateforme + logiciel + données
- La plateforme définit l'interprétation du logiciel.
- Plateforme et logiciel définissent l'interprétation des données.
- Autres aspects définis par la plateforme:
- la représentation des entiers (16/32/64 bits)
- la gestion des erreurs
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Les obstacles à la reproductibilité dûs à l'arithmétique à virgule flottante
sont un cas spécial important de la dépendance des plateformes. Un logiciel
est écrit dans un langage de programmation, mais l'interprétation précise de
ce langage est définie par la plateforme de calcul utilisé. Celle-ci consiste
du matériel, notamment du processeur, et de l'infrastructure logiciel:
système d'exploitation, compilateurs, etc.
Un calcul est défini par trois ingrédients: la plateforme, le logiciel, et les
données traitées. La plateforme définit comment est interprété le logiciel,
et les deux ensembles définissent comment sont interprétées les donées.
L'arithmétique à virgule flottante est interprétée différemment par les différentes
plateformes de calcul populaires aujourd'hui, mais ce n'est pas le seul point
de divergence. Dans certains langage comme le C ou le Fortran, les entiers sont
aussi concernés car les plateformes leur attribuent des tailles et donc des
intervalles de valeurs différentes. Enfin, les erreurs de calcul, comme par
exemple la division par zéro, ne sont pas gérées de la ême façon par toutes les
plateformes.
** Les nombres aléatoires
- Utilisés pour simuler les processus stochastiques.
- En pratique: nombres *pseudo-* aléatoires.
- Suite de nombres *en apparence* aléatoires...
- ... mais générés par un algorithme déterministe.
** Générateur de nombres pseudo-aléatoires
#+LaTeX: \vspace{1cm}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-1.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-2.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-3.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-4.svg}}
#+LaTeX: \vspace{10cm}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
On part d'un état initial appelé "graine" (typiquement un entier).
Pour générer un nombre, on applique une transformation à cet état,
puis on calcule le nombre comme fonction de cet état.
On repète autant que nécessaire.
** La reproductibilité en théorie
- Principe: même graine + même algorithme → même suite
- La graine est souvent choisie comme fonction de l'heure
- Il faut la définir dans le code d'application
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
En principe, il suffit d'utiliser la même graine et le même algorithme pour
toujours avoir la même suite de nombres.
L'algorithme fait partie d'une librairie, dont il faut noter la version
utilisée. Les librairie de nombres aléatoires choisissent souvent la graine
comme fonction de l'heure, pour donner une apparence "plus aléatoire".
Mais pour la reproductibilité, il faut définir la graine dans le code
d'application.
** La reproductibilité en pratique
- Même graine + même algorithme → même suite:\newline
pas évident en arithmétique à virgule flottante!
- Une astuce simple pour permettre la vérification:\newline
tester quelques valeurs du début de la suite
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
En pratique, il n'est pas si facile d'obtenir une suite identique, même avec
la même version de la même librairie, à cause de la variation dans l'arithmétique
à virgule flottante.
Un astuce simple est de tester quelques valeurs du début de la suite. Si elle ne
sont pas identiques, on sait que la suite a changé.
** Exemple: le langage Python
#+begin_src python :results output :exports both
import random
random.seed(123)
for i in range(5):
print(random.random())
#+end_src
#+LaTeX: \scriptsize
#+RESULTS:
: 0.0523635988509
: 0.0871866775226
: 0.40724176367
: 0.107700234938
: 0.901198877952
#+LaTeX: \vfill
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Voici l'application de cet astuce en langage Python. On commence par
définir la graine et d'afficher les premières valeurs de la suit de
nombres pseudo-aléatoires.
** Exemple: le langage Python
#+begin_src python :results output :exports both
import random
random.seed(123)
assert random.random() == 0.052363598850944326
assert random.random() == 0.08718667752263232
assert random.random() == 0.4072417636703983
#+end_src
#+RESULTS:
#+LaTeX: \vfill
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Puis on modifie le code en remplaçant l'affichage des valeurs par des
comparaisons aux valeurs précédemment affichées. En cas de divergence,
le programme s'arrête avec un message d'erreur.
** Les points clés à retenir
- Les résultats d'un calcul dépendent
- du logiciel
- des données d'entrée
- de la plateforme de calcul: matériel, compilateurs...
- L'influence de la plateforme est importante pour l'arithmétique à virgule flottante.
- Notez les paramètres dont peuvent dépendre vos résultats:
- version du compilateur, options de compilation
- matériel (type de processeur, GPU...)
- nombre de processeurs
- En utilisant un générateur de nombres aléatoires, définissez la graine et vérifiez les premiers éléments de la suite.
* M4-S4: Conclusion
** Vers une étude reproductible : la réalité du terrain :noexport:
1. L'enfer des données
2. L'enfer du logiciel
3. L'enfer du calcul
4. *Conclusion*
** Ce qu'il faut retenir de ce MOOC
*Un véritable enjeu*
- Méthodologie scientifique
- Inspectabilité et réutilisation
*Des outils existent*
- Documents computationnels et Workflows, Suivi de version et
Archives, Environnements logiciels, Intégration continue...
- Ces outils évoluent en permanence
- Choisissez ceux qui sont les plus adaptés à votre contexte
- Cherchez un compromis entre modernisme et pérénité
*Mettez en pratique, ne vous découragez pas!*
- Prenez des notes rigoureusement
- Rendez l'information exploitable et accessible
- Améliorez petit à petit
* Emacs Setup :noexport:
This document has local variables in its postembule, which should
allow Org-mode (9) to work seamlessly without any setup. If you're
uncomfortable using such variables, you can safely ignore them at
startup. Exporting may require that you copy them in your .emacs.
# Local Variables:
# eval: (add-to-list 'org-latex-packages-alist '("" "minted"))
# eval: (setq org-latex-listings 'minted)
# eval: (setq org-latex-minted-options '(("style" "Tango") ("bgcolor" "Moccasin") ("frame" "lines") ("linenos" "true") ("fontsize" "\\scriptsize")))
# eval: (setq org-latex-pdf-process '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
# End:
#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
#+OPTIONS: author:t broken-links:nil c:nil creator:nil
#+OPTIONS: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t
#+OPTIONS: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+OPTIONS: timestamp:t title:t toc:t todo:t |:t
#+TITLE: Notes pour la séquence 1 du module 4 : « L'enfer des données »
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 25.3.1 (Org mode 9.0.9)
#+STARTUP: indent
* Introduction
** Deux problèmes
Lorsque nous commençons à travailler sur de « vraies » données, comme lorsque nous nous lançons dans une étude numérique « sérieuse » nécessitant de longs calculs intermédiaires, nous nous trouvons généralement confrontés à deux problèmes :
- les données / résultats intermédiaires sont de nature « diverse » ;
- les données / résultats intermédiaires occupent un grand espace mémoire.
** Les données « non homogènes »
Jusqu'ici nous n'avons présenté qu'un cas concret de données, dans le module 3, avec les données grippales du [[http://www.sentiweb.fr][réseau sentinelles]]. Ces données étaient suffisamment « petites » pour être stockées en format texte et, mêmes si toutes les variables qu'elles contiennent ne sont pas de même nature — par exemple une date, une incidence, une localisation —, elles sont toutes disponibles en même temps ce qui veut dire qu'il y a autant de dates, que de mesures d'incidence et que de localisations. Les données /se prêtent donc bien à une représentation sous forme de table/.
Il y a néanmoins en pratique de très nombreux cas similaires au précédent dans la mesure où les données se présentent sous forme de suites chronologiques (/time series/) — une quantité donnée est mesurée ou estimée à intervalles réguliers au cours d'une « longue » période —, mais où les fréquences de mesures / estimations des différentes suites ne sont pas identiques — elles peuvent même varier au cours du temps. Pour fixer les idées avec un exemple qui devrait parler à tous le monde, nous pouvons considérer les données employées en [[https://fr.wikipedia.org/wiki/Pal%C3%A9oclimatologie][paléoclimatologie]] (la reconstruction du climat du passé). Là, des données annuelles fournies par l'étude des cernes des arbres ([[https://fr.wikipedia.org/wiki/Dendrochronologie][dendrochronologie]]) sont combinées avec des températures reconstruites à partir d'un forage dans la roche ([[https://en.wikipedia.org/wiki/Proxy_(climate)#Boreholes][boreholes]] en anglais) dont la résolution temporelle se dégrade à mesure que l'on remonte dans le temps (quelques dizaines d'années pour le 20e siècle à quelques siècles vers 1500 avant notre ère). Ces données ne se prête pas bien à un stockage sous forme de tableau et les sites qui les fournissent, comme le [[https://www.ncdc.noaa.gov/data-access/paleoclimatology-data/datasets][National Oceanic and Atmospheric Administration]] aux États-Unis, le font sous forme de fichiers séparés. /Il y a néanmoins un intérêt clair, pour le praticien de la recherche reproductible, à « centraliser » les données sur lesquels il travaille ; cela évite, par exemple, les pertes lors des « déplacements » des données/.
** Les données « trop grosses »
Une activité symptomatique de l'état de dégénérescence du capitalisme contemporain est la pratique de [[https://fr.wikipedia.org/wiki/Transactions_%C3%A0_haute_fr%C3%A9quence][transactions à haute fréquence]] : une activité entièrement gérée par ordinateur puisque des « décisions » de vente ou d'achat doivent être « prises » toutes les 100 microsecondes. Ces décisions sont basées sur des données qui arrivent à ce rythme. On conçoit bien, dès lors, qu'un développeur de programmes de transaction à haute fréquence aura tout intérêt à stocker les données sur lesquelles il testera ses algorithmes dans un format :
- plus compacte qu'un format texte ;
- qui peut être utiliser directement pour les calculs.
En effet, pour stocker le nombre 1234567890123456789 il faut 19x7 = 133 bits en format texte ([[https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange][ASCII]] ou [[https://fr.wikipedia.org/wiki/Unicode#UTF-8][UTF-8)]] alors qu'il loge sur les 64 bits d'un « format binaire » [[https://fr.wikipedia.org/wiki/Entier_(informatique)][entier non-signé]], ce qui donne un gain de 69 bits. De plus, nos ordinateurs lorsqu'ils manipulent la [[https://fr.wikipedia.org/wiki/Cha%C3%AEne_de_caract%C3%A8res][chaîne de caractères]] « 1234567890123456789 » ne savent pas plus la multiplier par 2 que la chaîne « abcdefghijklmnopqrs » ; pour qu'ils puissent multiplier le nombre correspondant à la première il faut d'abord /convertir/ celle-ci en un type arithmétique et cela prends du temps. Ce surcout en temps est complètement négligeable lorsque nous traitons des « petits jeux de données » comme celui du module 3, mais il peut devenir considérable lors du traitement de grosses données.
Fort heureusement, les données financières à haute fréquence ne constituent pas le seul exemple de données trop grosses pour être stockées en format texte. Nous avons en fait déjà rencontré un exemple de « grosses données » dans ce cours lorsque nous avons discuté de l'indexation d'images dans la séquence 5 du module 1. Une image, comme une photo numérique, contient en effet une grande quantité de données. Ainsi l'image que nous avions utilisée en exemple dans la diapo intitulée : « Les fichiers images contiennent des métadonnées » est-elle constituée de 7,8 Mégapixels et chaque pixel contient une information sur trois couleurs, chacune étant résolue avec 256 niveaux (8 bits). Cela fait une quantité énorme de données qui est stockée sous format binaire après [[https://fr.wikipedia.org/wiki/Compression_d%27image][compression]] par le format [[https://fr.wikipedia.org/wiki/JPEG][JPEG]].
** L'intérêt des données au format texte et ce qui serait désirable pour un « bon » format binaire
*** Métadonnées
Le premier intérêt du format texte comme nous l'avons vu dans le premier module est que nous pouvons l'utiliser pour stocker à peu près n'importe quoi. En particulier, ce qui nous préoccupe ici est la capacité à stocker non seulement des données, c'est-à-dire des nombres, mais des informations sur les données : d'où proviennent-elles, à qu'elle date ont elles été enregistrées, par qui, quel instrument / appareil de mesure a été utilisé, avec quels paramètres (comme la fréquence à laquelle une suite chronologique est observée), etc., autant d'informations qui peuvent s'avérer cruciales pour rendre nos résultats reproductibles. Mais ces « informations sur les données » ne sont rien d'autre que les métadonnées que nous avons brièvement discutées dans la séquence 5 du module 1. Elles sont si importantes que des formats de données conçus pour une tâche spécifique, comme le format JPEG pour les photos numériques, inclus une place pour elles dans leur spécifications. /Nous voyons bien que si, pour des raisons de taille mémoire trop importante ou d'efficacité de lecture / écriture, nous nous retrouvons « forcés » d'abandonner un format texte, nous avons tout intérêt à choisir un format binaire qui permet l'inclusion de métadonnées/.
*** Boutisme
Un autre intérêt du format texte, que nous avons aussi mentionné dans le premier module, est son caractère « universel » (dans l'univers de l'informatique !) : un fichier généré sur une machine avec une architecture et un système d'exploitation donné peut être ouvert et lu sans problème sur une autre machine ayant une architecture et un système d'exploitation complètement différents. Cette universalité se perd très vite avec les formats binaires. Le cas typique est lié au [[https://fr.wikipedia.org/wiki/Endianness][boutisme]] ([[https://en.wikipedia.org/wiki/Endianness][endianness]] en anglais, les explications sur cette notion sont plus claires sur site Wikipedia en anglais) qui spécifie par quel bout il faut lire une séquence de bits comme 1010 ; s'il s'agit d'un entier non signé (codé sur 4 bits), on peut faire:
- 1x1 + 0x2 + 1x4 + 0x8 = 5, c'est le /petit-boutisme/ utilisé par Unix/Linux, MacOS et Windows sur processeurs Intel ;
- 1x8 + 0x4 + 1x2 + 0x1 = 10, c'est le /gros-boutisme/ utilisé par les Sparc, Unix/Linux et MacOS sur PowerPC et par les protocoles [[https://fr.wikipedia.org/wiki/Suite_des_protocoles_Internet][TCP/IP]], c'est-à-dire par tout ce qui passe par internet (c'est aussi comme cela que nous écrivons les nombres décimaux : 123 = 1x100 + 2x10 + 3x1).
Il est évident que le stockage de données binaires à des fins de recherche reproductible devrait toujours se faire avec des formats dont le boutisme a été spécifié « une fois pour toute ».
* Des formats binaires, pour données composites, permettant le sauvegarde de métadonnées
Les préoccupations que nous avons évoquées dans la section précédente ne sont évidemment pas nouvelles, même mesurées à l'aune de l'ère numérique.
De façon non surprenante, ce sont les astrophysiciens qui ont très tôt développé des formats de fichiers de données numériques qui remplissent les critères induits par notre discussion précédente :
- des données de grandes tailles et de natures différentes doivent pouvoir être sauvegardées dans un même fichier ;
- des métadonnées doivent pouvoir être sauvegardées dans le même fichier ;
- le boutisme est spécifié.
En effet, les astrophysiciens ont très tôt commencés à utiliser des « capteurs numériques », comme les dispositifs à transfert de charges — plus connus sous leur nom anglais de /charge-coupled device/ qui donne l'acronyme [[https://en.wikipedia.org/wiki/Charge-coupled_device][CCD]] —, ils enregistrent des quantités massives de données qui sont le plus souvent de nature variée allant de la « simple image » à des spectres résolus dans le temps et dans l'espace (c'est-à-dire des objets à 5 dimensions). Nous allons présenter ici deux des formats de fichiers développé successivement, le premier par les astrophysiciens, le second pour les applications numériques sur « super-ordinateurs » :
- le /Flexible Image Transport System/ ([[https://fr.wikipedia.org/wiki/Flexible_Image_Transport_System][FITS]]), créé en 1981 est toujours régulièrement mis à jour — l'adresse du site officiel est : [[https://fits.gsfc.nasa.gov/]] — ;
- le /Hierarchical Data Format/ ([[https://fr.wikipedia.org/wiki/Hierarchical_Data_Format][HDF]]), développé au /National Center for Supercomputing Applications/, il en est à sa cinquième version, =HDF5= — l'adresse du site officiel est : https://www.hdfgroup.org/.
** « Bonus »
*** Bibliothèques
Les deux formats de fichiers que nous venons d'introduire, =FITS= et =HDF5=, sont en fait plus que des « formats » puisque les institutions / consortiums qui les développent distribuent également une ou plusieurs bibliothèques de fonctions (ainsi que des programmes) permettant de manipuler ces fichiers — un des reproches couramment adressé au format HDF5 est d'ailleurs le fait qu'il est tellement compliqué, que personne ne s'est jamais lancé dans le développement d'une bibliothèque de manipulation indépendante de celle distribué par le consortium.
*** Lecture partielle de données
Les deux formats ont été conçus pour de très grosses données, tellement grosses qu'elle peuvent ne pas loger dans la [[https://fr.wikipedia.org/wiki/M%C3%A9moire_vive][mémoire vive]] (=RAM=) d'un ordinateur « typique » de laboratoire. Les bibliothèques fournissent donc des fonctions qui permettent de ne charger en RAM, par exemple, qu'une partie d'une très grosse matrice, cela de façon « transparente » : le code de l'utilisateur est écrit comme si la totalité de la matrice était en RAM (c'est la bibliothèque qui gère le va et vient nécessaire entre RAM et disque).
** FITS
Comme nous l'avons écrit, le format =FITS= a été introduit et continue d'être mis à jour par les astrophysiciens. Ce format est néanmoins suffisamment général pour être utilisé dans des contextes très différents comme en témoigne son adoption par le projet de numérisation des manuscrits de la [[https://www.vaticanlibrary.va/home.php?pag=progettodigit][bibliothèque vaticane]]. Sans aller jusqu'à considérer cette adoption comme une [[https://fr.wikipedia.org/wiki/Imprimatur][imprimatur]], elle témoigne clairement d'une adaptabilité du format.
*** Anatomie d'un fichier =FITS=
Un fichier =FITS= peut contenir un nombre arbitraire de segments appelés « Header/Data Units (HDUs) » — voir le [[https://fits.gsfc.nasa.gov/fits_primer.html][primer ]]pour plus de détails. Ces segments sont placés « à la queue leu leu » dans le fichier — c'est-à-dire qu'il n'y a pas de structure hiérarchique comme dans les fichiers =HDF5= que nous discutons plus loin.
Le premier segment qui est obligatoire dans tout fichier =FITS= (même s'il ne contient pas de données). Il est nommé HDU primaire (/Primary HDU/ ou /Primary Array/). Il ne peut contenir qu'un tableau au sens large — c'est-à-dire avec 1, 2 ou plus de dimensions (jusqu'à 999), c'est ce qu'on nomme /array/ en anglais — au format binaire (entiers ou [[https://fr.wikipedia.org/wiki/Virgule_flottante][virgule flottante]]).
Les segments suivants sont facultatifs et son désignés par le terme d'« extension » dans le jargon =FITS=. Les extensions peuvent contenir des tableaux comme l'HDU primaire, mais aussi des tables (objets à 2 dimensions) au format texte (ASCII) ou binaire.
Chaque HDU consiste en une en-tête (/Header Unit/ en jargon =FITS=) suivie, /mais ce n'est pas obligatoire/, par des données (/Data Unit/ en jargon =FITS=). Chaque en-tête est formée de paires de « mots clés / valeurs ». Les paires de mots clés / valeurs fournissent des informations telles que la taille, l'origine, les coordonnées, le format de données binaire, les commentaires en format libre, l'historique des données, et /toute autre chose souhaitée par le rédacteur/ ; tandis que beaucoup de mots-clés sont réservés pour l'usage interne, la norme permet l'utilisation arbitraire du reste (source [[https://fr.wikipedia.org/wiki/Flexible_Image_Transport_System][Wikipédia]]).
*** Manipulation des fichiers =FITS=
Le consortium qui développe le format =FITS= fournit une bibliothèque [[https://heasarc.gsfc.nasa.gov/docs/software/fitsio/fitsio.html][CFITSIO]] en langage =C= ainsi qu'une collection de programmes associés. Notre expérience est que la bibliothèque, comme les programmes sont simples d'emploi et « bien pensés ».
Les utilisateurs de =Python= pourront utiliser [[https://pythonhosted.org/pyfits/][PyFITS]], une interface très complète avec [[https://heasarc.gsfc.nasa.gov/docs/software/fitsio/fitsio.html][CFITSIO]].
Les utilisateurs de =R= pourront utiliser [[https://cran.r-project.org/package=FITSio][FITSio]].
Des [[https://fits.gsfc.nasa.gov/fits_libraries.html][interfaces existent]] également pour =Java=, =Perl=, =Matlab=, etc.
** HDF5
*** La présentation d'=HDF5= par ses concepteurs
HDF5 est un modèle de données, une bibliothèque et un format de fichier pour stocker et gérer des données. Il prend en charge une variété illimitée de types de données et est conçu pour des entrées / sorties flexibles et efficaces, pour des volumes élevés et des données complexes. HDF5 est utilisable sur différentes plateformes et est extensible. Il permet aux applications d'évoluer dans leur utilisation d'HDF5. La suite technologique HDF5 comprend des outils et des applications pour gérer, manipuler, visualiser et analyser des données au format HDF5.
La [[https://portal.hdfgroup.org/display/HDF5/HDF5][version originale]] du texte ci-dessus :
HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
*** Différences majeurs avec =FITS=
Comme son nom l'indique avec le « H » pour /Hierarchical/, l'organisation interne d'un fichier =HDF5= est hierarchique et ressemble elle-même à une arborisation de fichiers. Cela contraste avec l'organisation « plate » des fichiers =FITS= et cela permet clairement d'ordonner des données complexes plus efficacement.
Ainsi un expérimentateur qui effectue des mesures répétées dans les mêmes conditions sur un même objet peut il stoker chaque « mesure » — qui peut elle-même générer des données complexes, /dataset/ en jargon =HDF=, comme une séquence d'images et une ou plusieurs suites chronologiques — dans l'équivalent d'un répertoire, un /group/ en jargon =HDF=. Cela permet à notre expérimentateur de créer un /group/ par condition expérimentale. Comme dans le cas d'une arborescence de répertoires sur le disque d'un ordinateur, les /groups/ peuvent eux-mêmes contenir des /groups/ (les répertoires peuvent avoir des sous-répertoires). Clairement, l'aspect structuré du format =HDF5=, facilite la navigation dans les jeux de données (/datasets/) et constitue une véritable amélioration par-rapport au format =FITS=.
Les méta-données n'ont pas de structure imposée mots clés / valeurs comme dans le cas du format =FITS=. Les données (/datasets/) n'ont pas non plus de structure imposée ce qui permet par exemple d'y stocker de longs textes, comme un article ou des codes sources. Encore une fois, cette possibilité n'est pas présente dans les fichiers =FITS=.
*** Manipulation des fichiers =HDF5=
La plus grande « souplesse » du format =HDF5= se « paie » par une bibliothèque de manipulation =C= (nettement) plus difficile à utiliser que son équivalent du format =FITS=. La bibliothèque vient avec de nombreux programmes utilisables depuis la ligne de commande, ainsi qu'avec une application =JAVA=, [[https://portal.hdfgroup.org/display/HDFVIEW/HDFView][HDFView]], très puissante pour explorer, visualiser et, dans une certaine mesure, éditer les fichiers =HDF5=.
=Python= dispose d'une interface très complète avec [[http://www.h5py.org/][h5py]].
Il y a trois paquets =R= pour manipuler les fichiers =HDF5= : [[https://CRAN.R-project.org/package=h5][h5]], [[https://CRAN.R-project.org/package=hdf5r][hdf5r]] et [[http://www.bioconductor.org/packages/release/bioc/html/rhdf5.html][rhdf5]]. Les deux premiers sont disponibles sur le /Comprehensive R Archive Network/ ([[https://cran.r-project.org/][CRAN]]), et le dernier est disponible sur [[http://www.bioconductor.org/][bioconductor]]. Le plus complet à ce jour est =hdf5r=, mais les trois permettent toutes les opérations de bases et même plus.
*** Pour aller plus loin
Une présentation par Martial Tola : [[https://perso.liris.cnrs.fr/martial.tola/presentations/hdf5/]].
Le blog de C. Rossant présente une critique intéressante et argumentée du format : [[http://cyrille.rossant.net/moving-away-hdf5/]].
#+STARTUP: overview indent inlineimages logdrawer
#+TITLE: C028AL-W2
#+AUTHOR: Arnaud Legrand
#+TAGS: noexport(n)
* Test et informations :noexport:
* Internal refs/notes :noexport:
** Images
- Notebook konrad:
- file:../slides-module2/jupyter-grippal-full.png
- file:../slides-module2/jupyter-grippal-top.png
- file:../slides-module2/jupyter-grippal-bottom.png
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file jupyter-grippal-full.png
rm /tmp/cropped_*
convert -crop 1345x3000 jupyter-grippal-full.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append jupyter-grippal-paged.png
#+end_src
#+RESULTS:
: jupyter-grippal-full.png: PNG image data, 1345 x 8772, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 jupyter-grippal-paged.png ../assets/img/nb3.png
#+end_src
#+RESULTS:
- Notebook Elisabeth: https://bitbucket.org/elizabethpwalton/smpe_project
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file elizabethpwalton_SMPE.png
rm /tmp/cropped_*
convert -crop 820x2650 elizabethpwalton_SMPE.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append elizabethpwalton_SMPE-aged.png
#+end_src
#+RESULTS:
: elizabethpwalton_SMPE.png: PNG image data, 820 x 15217, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 elizabethpwalton_SMPE-aged.png ../assets/img/nb4.png
#+end_src
#+RESULTS:
- Notebook Ismail:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
rm /tmp/cropped_*
convert -crop 590x1400 oscar.png /tmp/cropped_%d.png
for i in /tmp/cropped_[1-9].png ; do mv $i `echo $i | sed 's/cropped_/cropped_0/'` ; done
convert /tmp/cropped_*.png +append And_the_Oscar_goes_to-paged.png
#+end_src
#+RESULTS:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 And_the_Oscar_goes_to-paged.png ../assets/img/nb5.png
#+end_src
#+RESULTS:
- Navette russe: https://io9.gizmodo.com/more-sad-remains-of-the-soviet-buran-space-shuttle-prog-1733190814
- Msieur il marche mon programme: https://www.luc-damas.fr/humeurs/images/il-marche-mon-programme.jpg
- PhD Comics:
- http://phdcomics.com/comics/archive.php?comicid=1947:
http://phdcomics.com/comics/archive/phd050817s.gif
- http://phdcomics.com/comics/archive.php?comicid=1948:
http://phdcomics.com/comics/archive/phd051017s.gif
** Graphe syndrome grippal:
#+begin_src shell :results output raw :exports both
debtree python3-matplotlib > python3-matplotlib.dot
sed -i -e 's/rankdir=LR/rankdir=RL/g' \
-e 's/node \[shape=box\]/node [shape=box, color=black, fillcolor=gray, fontcolor=black, style=filled]/g' \
python3-matplotlib.dot
dot -Tpng python3-matplotlib.dot > python3-matplotlib.png
echo file:python3-matplotlib.png
#+end_src
#+RESULTS:
file:python3-matplotlib.png
#+begin_src shell :results output :exports both
mv python3-matplotlib.png ../assets/img/
#+end_src
#+RESULTS:
* C028AL-W0-S0 (\approx 2:00); Introduction :noexport:
:LOGBOOK:
- State "TODO" from [2018-01-29 lun. 14:29]
:END:
** La recherche reproductible
*La recherche reproductible* s'intéresse à la mise en oeuvre et à la
promotion de meilleurs pratiques de recherche, et ce aussi bien sur le
plan technique qu'épistémologique.
*Petite bio, parcours, activité actuelle*: Pourquoi nous nous y
intéressons ?
Que vous preniez des notes, que vous génériez des figures, de gros
calculs ou des analyse de données, la recherche reproductible peut vous
intéresser.
Allons-y! :)
** Structure du cours
- *Cahier de notes, cahier de labo*
- *Le document computationnel*
- *Une analyse réplicable* <font style="font-size:28px">Pour le premier module, pas de prérequis particulier. À partir du
2ème, on suppose une familarité avec les langages de programmation
python ou R. </font>
A. Intégration Gitlab Jupyter
B. R/Rstudio,
C. Org-Mode <br>
<font style="font-size:28px">À ce stade, vous devriez commencez à maîtriser des outils modernes
permettant de singulièrement améliorer votre quotidien. Mais la
route est longue. Nous vous présenterons donc dans le dernier
module, les</font>
- Autres défis de la recherche reproductible<br>
<font style="font-size:28px">Ce module ci est plus technique mais vous permettra de prendre du
recul et de bien identifier les difficultés spécifiques à votre
domaine et auxquelles vous serez confrontés.</font>
* C028AL-W2-S0 (\approx 2:00); Vers une étude reproductible : la réalité du terrain
** L'enfer de la Recherche Reproductible
# <img src="https://www.kdnuggets.com/wp-content/uploads/expectation_vs_reality.png" style="height:400px"/>
# http://thumbpress.com/wp-content/uploads/2014/04/funny-water-toy-kids-playing1.jpg
#+BEGIN_EXPORT html
<img src="assets/img/phd_sisyphe.gif"/>
#+END_EXPORT
Note:
Bonjour à tous,
Maintenant que vous êtes familiers avec les documents computationnels
et les analyses réplicables, vous disposez des outils principaux vous
permettant d'améliorer votre pratique et de rendre votre recherche
reproductible.
Mais la route est longue et semée d'embûches. Il est temps d'aller un
peu plus loin et que vous preniez consciences des différentes
difficultés auxquelles vous risquez d'être confronté.
Dans ce dernier module, nous vous présenterons trois des enfers de la
recherche reproductible.
** Module 4. Vers une étude reproductible : la réalité du terrain
1. <!-- .element class="fragment highlight-current-red" --> L'enfer des données
2. <!-- .element class="fragment highlight-current-red" --> L'enfer du logiciel
3. <!-- .element class="fragment highlight-current-red" --> L'enfer du calcul
4. <!-- .element class="fragment highlight-current-red" --> Conclusion
Note:
Christophe: Le premier enfer est celui des données. Quand on travaille
sur de vrais données, leur taille, leur structure, ou leur diversité
peuvent rapidement poser d'importantes difficultés. Je présenterai
quelques approches permettant de survivre dans cet environnement
hostile.
Arnaud: Le second enfer est celui du logiciel et on se trouve
rapidement confronté à deux défis. D'une part, le logiciel devient
très rapidement gros, difficile à gérer, et les solutions simples que
nous vous avons présentées passent alors très mal à
l'échelle. D'autre part, aussi étonnant que cela puisse paraître, les
logiciels vieillissent et résistent souvent très mal à l'épreuve du
temps. Je présenterai des exemples concrets et quelques approches
permettant de survivre dans cet environnement hostile.
Konrad: Enfin, le troisième enfer est celui du calcul
numérique. J'illustrerai les difficultés que peut poser le calcul avec
des flottants, ou l'ordre des opérations influe sur les
résultats. Comme cet ordre a aussi un impact sur la performance, il
faut trouver un compromis entre temps d'exécution et
reproductibilité. Ceci est particulièrement difficile pour le calcul
parallèle, qui concerne tous les ordinateurs modernes, même les
smartphones. J'évoquerai aussi les précautions à prendre quand on
utilise les nombres aléatoires.
En espérant ne pas vous avoir trop effrayés, nous concluerons enfin
brièvement ce MOOC par quelques remarques de bon sens.
* C028AL-W2-S1 (\approx 10:00); L'enfer des données
** Vers une étude reproductible : la réalité du terrain
_Module 4. Vers une étude reproductible : la réalité du terrain_
1. *L'enfer des données*
2. L'enfer du logiciel
3. L'enfer du calcul
4. Conclusion
#+BEGIN_EXPORT html
+++
## Deux « nouveaux » problèmes
Lorsque nous commençons à travailler sur de « vraies » données nous nous trouvons généralement confrontés à deux problèmes :
- les données sont de nature « diverse »
- les données occupent un grand espace mémoire
+++
## Les données « non homogènes »
- Les données grippales du module 3 se prêtent bien à une présentation en table (objet à 2 dimensions)
- Souvent la forme table doit être *abandonnée* car :
- les colonnes n'ont pas la même longueur
- les données peuvent être des suites chronologiques **et** des images, etc.
+++
## Les données sont « trop grosses »
- **Format texte** pas toujours approprié pour des nombres
- Choix d'un **format binaire** car :
- Les nombres prennent moins de place mémoire
- Nombres en format texte ⇒ conversion en binaire pour calculs
+++
## Ce qu'il faut garder du format texte : les métadonnées
- Le format texte permet de stocker les données **et** tout le reste...
- ⇒ ajouter des informations sur les données :
- provenance
- date d'enregistrement
- source
- etc.
+++
## <br/><br/>
- Ces informations sur les données sont ce qu'on appelle les **métadonnées**
- Elles sont vitales pour la mise en œuvre de la recherche reproductible
+++
## Ce qu'il faut garder du format texte : le boutisme
- Format texte « universel »
- Formats binaires dépendent de l'architecture ou de l'OS
- 1010, codé sur 4 bits peut être lu comme :
- 1x1 + 0x2 + 1x4 + 0x8 = 5, c'est le *petit-boutisme*
- 1x8 + 0x4 + 1x2 + 0x1 = 10, c'est le *gros-boutisme*
- **Un stockage binaire pour la recherche reproductible doit spécifier le boutisme**
+++
## Des formats binaires, pour données composites, permettant le sauvegarde de métadonnées
Rechercher des formats binaires pour :
- travailler avec de grosses données de natures différentes
- stocker des métadonnées avec les données
- avoir un boutisme fixé **une fois pour toute**
+++
## `FITS` et `HDF5`
- Le *Flexible Image Transport System* (`FITS`), créé en 1981 est toujours régulièrement mis à jour
- Le *Hierarchical Data Format* (`HDF`), développé au *National Center for Supercomputing Applications*, il en est à sa cinquième version, `HDF5`
+++
## `FITS`
- `FITS` introduit et mis à jour par les astrophysiciens
- Format suffisamment général pour utilisation dans différents contextes
+++
## Anatomie d'un fichier `FITS`
- 1 ou plusieurs segments : *Header/Data Units* (HDUs)
- HDU constituée :
- d'une en-tête (*Header Unit*) suivie, *mais ce n'est pas obligatoire*, par
- des données (*Data Unit*)
- En-tête = paires mots clés / valeurs → **métadonnées**
- Données tableaux binaires (une à 999 dimensions) ou tables (texte ou binaire)
+++
## Manipulation des fichiers `FITS`
- Les développeurs du format fournissent une bibliothèque `C` et des programmes associés (faciles à utiliser)
- Les utilisateurs de `Python` pourront utiliser `PyFITS`
- Les utilisateurs de `R` pourront utiliser `FITSio`
+++
## `HDF5`
- Organisation hiérarchique, ressemble à une arborisation de fichiers
- Élément structurant : le *group* (répertoire) contient un ou plusieurs *datasets* (jeux de données)
- Les *groups* peuvent être imbriqués
- Les métadonnées n'ont pas de structure imposée
- Les données n'ont pas de structure imposée — elles peuvent être des textes.
+++
## Manipulation des fichiers `HDF5`
- Format plus souple ⇒ bibliothèque `C` plus compliquée que son équivalent `FITS`
- La bibliothèque distribuée avec `HDFView` : outil puissant d'exploration et de visualisation
- `Python` dispose d'une interface très complète avec `h5py`
- Il y a trois paquets `R` : `h5`, `hdf5r` et `rhdf5`
+++
## L'archivage
Git (hub, lab, ...) : pas bien adapté au stockage de données
<img src="assets/img/Zenodo-logo.jpg" height=120 /> <img src="assets/img/Figshare-logo.png" height=120 />
+++
## Conclusions
- Vraies données ⇒ problèmes de taille et de structure
- Vraies données complexes ⇒ métadonnées
- `FITS` et `HDF5` = solutions **pratiques**
- En complexité et flexibilité : `FITS` < `HDF5`
- Plates-formes d'archivage ⇒ stockage pérenne accessible à tous
#+END_EXPORT
* C028AL-W2-S2 (\approx 14:00); L'enfer du logiciel
** Vers une étude reproductible : la réalité du terrain
_Module 4. Vers une étude reproductible : la réalité du terrain_
1. L'enfer des données
2. *L'enfer du logiciel*
3. L'enfer du calcul
4. Conclusion
** Passage à l'échelle file:assets/img/il-marche-mon-programme.jpg&size=contain
** Des codes complexes...
#+BEGIN_HTML
<img src="assets/img/nb1.png" height=600 data-fragment-index="1" class="fragment current-visible"/>
<img src="assets/img/nb2.png" height=600 data-fragment-index="2" class="fragment current-visible"/>
<img src="assets/img/nb3.png" height=600 data-fragment-index="3" class="fragment current-visible"/>
<img src="assets/img/nb4.png" height=600 data-fragment-index="4" class="fragment current-visible"/>
<img src="assets/img/grippal_orgmode1.png" height=600 data-fragment-index="5" class="fragment current-visible"/>
<img src="assets/img/grippal_orgmode2.png" height=600 data-fragment-index="6" class="fragment current-visible"/>
<img src="assets/img/nb5.png" data-fragment-index="7" class="fragment current-visible"/>
#+END_HTML
- <!-- .element class="fragment" data-fragment-index="7"--> Un vrai
plat de spaghettis
- <!-- .element class="fragment" data-fragment-index="7"--> Pas de
vision d'ensemble
- <!-- .element class="fragment" data-fragment-index="7"-->
Interaction entre plusieurs langages = danger
Note:
- Des codes compliqués à organiser/orchestrer. Le notebook a ses
limitations et vous pouvez en devenir prisonnier.
** ... et difficiles à orchestrer
#+BEGIN_HTML
<img src="http://www.mcisb.org/resources/taverna/sysbio/images/SbmlParameterisation.png" height=600 data-fragment-index="1" class="fragment current-visible"/>
<img src="http://www.mcisb.org/resources/taverna/sysbio/images/SbmlModelling.png" height=600 data-fragment-index="2" class="fragment current-visible"/>
#+END_HTML
<!-- .element class="fragment" data-fragment-index="3"--> Le *Workflow* :
- Vue de haut niveau plus claire
- Compositions de codes et mouvements de données explicites
- Partage, réutilisation, et exécution plus sûre
- Le notebook en est une forme à la fois appauvrie et plus riche
- Pas de façon simple/mature de passer d'un notebook à un
workflow
<!-- .element class="fragment" data-fragment-index="4"--> *Exemples* :
- <!-- .element class="fragment" data-fragment-index="4"--> Galaxy, Kepler, Taverna, Pegasus, Collective Knowledge, VisTrails
- <!-- .element class="fragment" data-fragment-index="4"--> Légers :
dask, drake, swift, snakemake, ...
- <!-- .element class="fragment" data-fragment-index="4"--> Hybrides :
SOS-notebook, ...
Note:
- un workflow, c'est quoi ? On restructure le code de façon à rendre
le flot de traitement plus explicite. Chaque bout de code est
encapsulé dans une fonction, on supprime les effets de bord pour que
les entrées et les sorties soient parfaitement identifiées. On
connecte ensuite chacune de ces fonctions les unes avec les
autres.
- Un environnement de workflow fournit les bonnes abstractions, les
bonnes conventions d'écritures permettant d'orchestrer tous ces
appels et c'est ensuite le moteur de workflow qui gère l'exécution
des choses. Non seulement le workflow peut plus facilement exploiter
une machine parallèle, mais en plus, il est possible de sauvegarder
l'état d'avancement du calcul (via les données générées jusqu'ici)
et le reprendre plus tard. Si on décide de modifier une des briques
du workflow, on peut réutiliser les résultats obtenus en amont. Ce
genre de manipulation est bien plus compliquée avec un notebook où
il y a une session, un état global et où le risque d'erreur est bien
plus important.
- Alors, un workflow peut devenir quelque chose de très compliqué et
de pas forcément très clair non plus mais la représentation par un
graphe permet de regrouper et d'agréger certaines parties pour se
concentrer sur l'essentiel tout en pouvant inspecter les détails
quand on le souhaite.
- Un autre avantages du workflow est la capacité à partager des
parties du workflow avec d'autres et à bénéficier des améliorations
que d'autres pourraient apporter à notre propre workflow... C'est un
des intérêt de plates-formes comme taverna ou kepler.
- Le notebook est donc selon moi parfait quand on met quelque chose au
point car il permet de prendre des notes sur ce que l'on fait
et sur pourquoi on le fait. Au fur et à mesure que le notebook
évolue en quelque chose de plus complexe et qu'on a les idées de
plus en plus claires sur les manipulations de données à effectuées,
il devient intéressant de transformer toute cette matière en un
workflow.
- Cette restructuration est manuelle et il n'existe pas encore de
bonne solution pour passer de l'un à l'autre. Il y a des tentatives
intéressantes comme le sos-notebook dans Jupyter mais toutes ces
initiatives sont encore en plein développement.
- L'utilisation d'un workflow ne rend pas l'utilisation d'un notebook
caduque. Le notebook est utile mais à un autre niveau. Les appels au
workflow peuvent parfaitement être faits à partir du notebook et on
utilisxe alors ce dernier pour décrire les expériences que l'on mène
et le résultats des analyses.
** L'usine à gaz des calculs coûteux
Les *calculs interminables* et les *gros volumes de données*
- JupyterHub et les supercalculateurs : en développement
<br/>
- Checkpoint et Cache
<br/>
- Le workflow permet de passer à l'échelle
Note:
# https://zonca.github.io/2015/04/jupyterhub-hpc.html
# https://github.com/ipython/ipyparallel/issues/167
# https://groups.google.com/forum/#!topic/jupyter/BlexhV8W5TE
Les calculs interminables et les gros volumes de données
- JupyterHub et les supercalculateurs: en développement
- Lancement sur des machines distantes ? Compliqué, pas de bonnes
solutions à l'heure actuelle.
- Actuellement, JupyterHub permet de donner une machine
(éventuellement virtuelle) à chaque notebook
- Il dispose également d'un onglet cluster permettant d'allouer
plusieurs machines à un Ipython parallèle.
- Lorsque l'on souhaite paralléliser c'est la plupart du temps le
langage du notebook qui fait le travail (Ipython parallèle, R au
dessus de spark, etc.), pas le notebook lui même.
- Notebook idéal selon moi: tel bloc peut/doit s'exécuter ailleurs
- Ce qui n'est pas sans poser de nombreux problèmes de sémantiques
(surtout si le mécanisme de session est utilisé et/ou que
plusieurs langages sont utilisés)
- Checkpoint et Cache:
- Il y a des mécanismes de cache dans les trois environnements que
nous vous avons présentés.
- Cela vous permet de ne pas tout réexécuter depuis le début.
- Ne pas confondre l'objet résultant (le graphique ou le tableau) des
données sous-jacentes.
- Un checkpoint explicite (via des fichiers) des données nécessaires
à la suite des calculs est la méthode la plus simple.
- Le workflow gère la séparation des codes et des données, ce qui
permet de passer à l'échelle
# - Histoire de montrer que malgré ça c'est dur:
# https://github.com/IFB-ElixirFr/ReproHackathon/blob/master/docs/index.md
# https://f1000research.com/articles/6-124/v1
** Des éco-systèmes complexes
Que se cache-t-il derrière ce simple
#+begin_src python :results output :exports both
import matplotlib
#+end_src
#+BEGIN_EXPORT html
<pre><code data-fragment-index="1" class="fragment current-visible">Package: python3-matplotlib
Version: 2.1.1-2
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2),
python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz,
libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1),
python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~),
python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>=
2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>=
1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
</code>
<img src="assets/img/python3-matplotlib.png" height=600 data-fragment-index="2" class="fragment current-visible"/>
</pre>
#+END_EXPORT
Note:
- Qu'est-ce qui se cache derrière matplotlib
- Python peut nous dire ce qu'il en sait (i.e., pas grand chose)
mais comment s'assurer que deux personnes exécutent bien ce code
dans le même environnement logiciel
- Dans le cadre de ce MOOC, un serveur jupyter est déployé et un
environnemnt commun est proposé. Mais pouvez vous vous assurer que
vous disposerez du même environnemnt chez vous à la fin du MOOC ?
- Comment réinstaller un tel environnemnent ? Comment packager un
logiciel complexe ?
- Comment faire en sorte qu'il puisse évoluer si un bug est corrigé ?
** Des éco-systèmes complexes
<span style="font-size:30px">Pas de standard</span>
- <!-- .element style="font-size:25px" --> Linux (=apt=, =rpm=, =yum=),
MacOS X (=brew=, =McPorts=, =Fink=), Windows (?)
- <!-- .element style="font-size:25px" --> Ni pour l'installation ni pour récupérer les informations... \frowny
#+BEGIN_EXPORT html
<div class='left' style='float:left;width:40%'>
<pre style="font-size:15px"><!-- <code class="lang-python hljs"><span class="line" style="font-size:20px"> -->
#+END_EXPORT
#+begin_src python :results output :exports both
import sys
print(sys.version)
import matplotlib
print(matplotlib.__version__)
import pandas as pd
print(pd.__version__)
#+end_src
#+RESULTS:
: 3.6.3 (default, Oct 3 2017, 21:16:13)
: [GCC 7.2.0]
: 2.1.1
: 0.20.3
#+BEGIN_EXPORT html
<!-- </span></code> --></pre>
</div>
<div class='right' style='float:right;width:60%'>
<pre style="font-size:15px"><!-- <code class="lang-r hljs"><span class="line"> -->
#+END_EXPORT
#+begin_src R :results output :session *R* :exports both
library(ggplot2)
sessionInfo()
#+end_src
#+RESULTS:
#+begin_example
R version 3.4.3 (2017-11-30)
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.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
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
other attached packages:
[1] ggplot2_2.2.1
loaded via a namespace (and not attached):
[1] colorspace_1.3-2 scales_0.5.0 compiler_3.4.3 lazyeval_0.2.1
[5] plyr_1.8.4 pillar_1.1.0 gtable_0.2.0 tibble_1.4.2
[9] Rcpp_0.12.15 grid_3.4.3 rlang_0.1.6 munsell_0.4.3
#+end_example
#+BEGIN_EXPORT html
<!-- </span></code> --></pre>
</div>
#+END_EXPORT
Note:
- Pas de standard:
- Ni pour l'installation ni pour récupérer les informations:
- Linux (Debian =apt=, RedHat =rpm=, ...), MacOS X (=brew=, =McPorts=,
=Fink=), Windows (?)
- Indiquer ses dépendances logicielles, c'est la version 0 de la
reproductibilité. Ça ne coûte pas bien cher et ça permettra à
celui qui viendra après vous de savoir par où commencer.
- Il faut mettre en place une solution ad hoc, selon le langage
utilisé et ce n'est pas simple.
- Lister l'intégralité de ses dépendances logicielles (voire avec
quel compilateur telle bibliothèque a été compilée) peut être très
compliqué
** Contrôler son environnement
*Un environnement contrôlé :*
- Travailler dans une machine virtuelle (lourd) ou un conteneur docker
(léger)
#+BEGIN_EXPORT html
</br>
<div class='left' style='float:left;width:50%'>
**Conserver le bazar**
<ul>
<li> Capture automatique de l'environnement
<li> <a href="http://www.pgbovine.net/cde.html">CDE</a>,
<a href="https://vida-nyu.github.io/reprozip/">ReproZip</a>,
<a href="http://reproducible.io/"><strike>CARE</strike></a>
</ul>
</div>
<div class='right' style='float:right;width:50%'>
**Faire le ménage**
<ul>
<li> Partir d'un environnement vierge
<li> Installer uniquement le nécessaire (et l'expliciter)
<li> <a href="https://www.docker.io/">Docker</a>/<a href="https://singularity.lbl.gov/">Singularity</a>, <a href="https://www.gnu.org/software/guix/">Guix</a>/<a href="https://nixos.org/">Nix</a>, ...
<ul>
</div>
#+END_EXPORT
Note:
- Intro:
- You cannot expect people to find all the chains of dependencies!
- You cannot expect people to install all the dependencies and run your
code smoothly!
- Règle numéro 1 d'un environnement bien contrôlé: travailler dans un
environnement isolé (une machine virtuelle ou bien un conteneur)
- Brève explication de ce que c'est et de la différence. Sans le
savoir, tous ceux qui ont utilisé nos notebooks ont travaillé dans
un conteneur docker.
- Conséquence:
- du point de vue du code exécuté, tout est encapsulé: rien ne
rentre, rien ne sort
- l'utilisation de l'interface graphique peut être un peu compliquée
- exécution a priori possible sur n'importe quel OS (pour une VM,
sur un OS compatible pour un conteneur)
- Un environnement contrôlé: deux approches
- Conserver le bazar ::
- C'est l'approche toute automatique, un outil se charge
d'observer l'exécution de votre logiciel et de capturer
l'ensemble des codes et des bibliothèques utilisées
- Une archive contenant l'environnement peut alors être construite
et partagée. C'est très facile et très pratique.
- Avantage: Facile, permet à quelqu'un d'autre de réexécuter le
code dans les mêmes conditions
- Inconvénient: pas facile de faire évoluer un tel objet, ni de
comprendre comment il fonctionne. Le résultat est une boite
noire.
- Examples: CARE, CDE, Reprozip
- Faire le ménage ::
- On part d'un environnement minimal dans un conteneur
- On rajoute les composants logiciel dont on a besoin au fur et à
mesure
- Idéalement, au fur et à mesure qu'on rajoute ces logiciel, on
scripte leur installation (e.g., dockerfile)
- Avantage: cela permettra de facilement faire évoluer
l'environnement (mise à jour, remplacement d'un composant
défectueux, etc.)
- Inconvénient: demande quelques efforts, en particulier quand les
composants logiciels sont mal packagés (pas partie d'une
distribution, interventions manuelles, etc.) et que beaucoup
d'interactions avec l'extérieur sont nécessaires (le téléchargement
des données doit être bien séparé)
- Examples: Singularity, voire Nix ou GUIX qui permettent une
reconstruction parfaite, un environnement étant encodé de façon
fonctionnel
*** Cruft :noexport:
#+begin_src shell :results output raw :exports both
echo "#+BEGIN_EXAMPLE"
apt-cache show python3-matplotlib # | grep Depends | head -1
echo "#+END_EXAMPLE"
#+end_src
#+RESULTS:
#+BEGIN_EXAMPLE
Package: python3-matplotlib
Source: matplotlib
Version: 2.1.1-2
Installed-Size: 12159
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1), python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.1.1-2_amd64.deb
Size: 4597588
MD5sum: bfca8169a6b4e2cd9f89eb2f862083c7
SHA256: cbf80fdbf2643f19f926e33ea24cab3f76286d631d0806a2f665989fb17c76e4
Package: python3-matplotlib
Source: matplotlib
Version: 2.0.0+dfsg1-2
Installed-Size: 7362
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.0.0+dfsg1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.10.0~b1), python3-numpy-abi9, python3 (<< 3.6), python3 (>= 3.5~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.0.0+dfsg1-2_amd64.deb
Size: 1589544
MD5sum: e8f0571243df303a9b1f37a8ebf8177d
SHA256: 8f5d3509d4f5451468c6de44fc8dfe391c3df4120079adc01ab5f13ff4194f5a
#+END_EXAMPLE
<!-- .slide: class="center" --> Pourquoi est-ce difficile ?
** <!-- .slide: class="center" --> L'épreuve du temps file:assets/img/soviet_space_shuttle.jpg&size=cover
** Compatibilité ascendante
- Python et tout son écosystème à évolution hyper rapide
#+begin_src shell :results output :exports both
python2 -c "print(10/3)"
python3 -c "print(10/3)"
#+end_src
#+RESULTS:
: 3
: 3.3333333333333335
#+HTML: <img src="assets/img/plot_1.5.3.png" height=240 data-fragment-index="2" class="fragment current-visible"/>
#+HTML: <img src="assets/img/plot_1.5.3.png" height=240 data-fragment-index="3" class="fragment current-visible"/>
#+HTML: <img src="assets/img/plot_2.1.1.png" height=240 data-fragment-index="3" class="fragment current-visible"/>
 
- <!-- .element class="fragment" data-fragment-index="4"--> <span
style="font-size:30px"> Cortical Thickness Measurements (PLOS ONE,
June 2012): /FreeSurfer/: /differences were found between the Mac and
HP workstations and between Mac OSX 10.5 and OSX 10.6./
- <!-- .element class="fragment" data-fragment-index="5"-->
Incompatibilité de formats entre orgmode 7.*, 8.*, 9.*, etc.
Note:
- Petit exemple en python, le plus simple qui soit, une division:
- Le passage de python2 à python3 a introduit des changements
majeurs puisque la division par défaut qui était à l'origine une
division entière est devenue une division sur des flottants.
- Alors, certains diront que python2 et python3 doivent être
considérés comme deux langages distincts mais même si python2
reste maintenu et continue d'évoluer (doucement), quand tous les
efforts de l'écosystème se tournent vers python3, on est bien
obligé d'emboiter le pas...
- Il y a quelques mois, un de mes collègues qui était bien content
d'avoir utilisé un notebook pour préparer son dernier article et
d'avoir fait bien attention à sauvegarder tout son code et ses
résultats intermédiaires, a été assez surpris en préparant la
révision finale de remarquer que la figure qu'il avait générée 3
mois auparavant avait décidé de changer de couleurs...
- Entre les deux, matplotlib a été mis à jour sur sa machine et il
se trouve qu'entre la version 1.5.12 et la 2.0, la palette de
couleurs par défaut a changé...
- Alors, dans cet exemple précis, ça ne change pas
fondamentalement les choses et le plus important était de
pouvoir mettre à disposition la démarche utilisée mais c'est
quand même assez agaçant.
- Ce type d'incident met en évidence le problème de la perméabilité
à l'environnement extérieur.
** Les outils à développement rapide
*Rapides*, mais *fragiles* et *peu pérennes* :
#+BEGIN_EXPORT html
<ul>
<li>Correction ou introduction de bug
<li>Il devient nécessaire de vérifier régulièrement la
reconstructibilité et la fonctionnalité de ces environnements
(intégration continue et tests de non régression)<br/>
Popper: <http://falsifiable.us/> <img src="https://raw.githubusercontent.com/systemslab/popper/gh-pages/images/popper_logo_just_jug.png" height=100/>
</ul>
#+END_EXPORT
*Autre possibilité* :
- Se restreindre à ce qui est maîtrisable (C par exemple)
Note:
- Les outils informatiques évoluent à une vitesse incroyable et nous
permettent d'aller plus vite, plus loin dans nos recherche. Il est
donc indispensable de s'appuyer dessus.
- Néanmoins, ces développements rapides sont aussi a source de
nombreuses erreurs, de régressions, de corrections (ce qui est une
bonne chose) et très souvent de perte de compatibilité entre les
versions.
- Ce sont des outils à développement rapide dans les deux sens du
terme, c'est à dire des outils qui à la fois vous permettent de
mettre en place des choses complexes très rapidement mais qui
évoluent aussi très (pour ne pas dire trop) rapidement.
- Dans ce contexte mouvant, il devient nécessaire de vérifier
régulièrement que notre code et son environnement peuvent être
regénérés et qu'ils sont fonctionnels. En génie logiciel, les termes
associés sont "intégration continue" (chaque nuit ou bien à chaque
commit dans votre gestionnaire de version, la compilation de votre
code est déclenchée et remonte une alerte en cas de problème) et
"tests de non régression" (une fois votre code et son environnement
compilé, on vérifie via une batterie de tests que les sorties pour
des entrées bien spécifiques sont toujours correctes).
- Certains proposent même une utilisation systématique de ce type
d'approche au processus de recherche. Ça demande un investissement
technique un peu lourd mais dans le principe, pourquoi pas ?
- Il faut garder à l'esprit que les notebooks ou les outils que nous
vous avons présentés font d'ailleurs partie de cette famille
d'outils à développement rapide et n'échappent pas malgré leurs
efforts à ces difficultés de pérennité.
- Pour être le moins possible ennuyé par ce type de problème, certains
font le choix de se restreindre à des outils et des langages très
stables et qu'ils peuvent maîtriser de bout en bout.
- Il faut donc trouver le bon compromis entre modernisme et pérennité.
** L'archivage
*Gestion du code source* <!-- .element class="fragment" data-fragment-index="1"-->
- <!-- .element class="fragment" data-fragment-index="1"--> Git (hub, lab, ...) : stables, ouverts, \dots pérennes ?
- <!-- .element class="fragment" data-fragment-index="1"--> <strike>Google Code</strike>, <strike>Gitorious</strike>, <strike>Code Spaces</strike>
<br><img src="assets/img/swh-logo.png" height=100 />
<img src="assets/img/LogoHAL.PNG" height=80 />
*Gestion des environnements* <!-- .element class="fragment" data-fragment-index="2"-->
- <!-- .element class="fragment" data-fragment-index="2"--> Pérénité de l'accès à dockerhub, nix repository, code ocean, ... ?
- <!-- .element class="fragment" data-fragment-index="2"--> Une fois l'environnement gelé, quelle est la pérennité d'une VM,
d'une image docker, ... ?
*Conserver le plus d'informations possible en automatisant* <!-- .element class="fragment" data-fragment-index="3"-->
- <!-- .element class="fragment" data-fragment-index="3"-->
Logiciels, versions, procédure d'installation
Note:
- Dans les exercices, faites y bien attention.
# <img src="assets/img/ArXiv-web.png" height=60 />
# <img src="assets/img/Zenodo-logo.jpg" height=60 />
# <img src="assets/img/Figshare-logo.png" height=60 />
* C028AL-W2-S3 (\approx 10:00); L'enfer du calcul
** Vers une étude reproductible : la réalité du terrain
_Module 4. Vers une étude reproductible : la réalité du terrain_
1. L'enfer des données
2. L'enfer du logiciel
3. *L'enfer du calcul*
4. Conclusion
#+BEGIN_EXPORT html
Note:
Dans cette séquence, nous montrons les difficultés spécifiques qu'on
rencontre dans le calcul numérique. La plus fréquente est due à
l'arithmétique à virgule flottante, ce qui est un cas spécial de la
variabilité entre les plateformes de calcul. Une autre difficulté
est due aux générateurs de nombres aléatoires.
+++
## L'arithmétique à virgule flottante
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/polynome1.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
```
def polynome(x):
return x**9 - 9.*x**8 + 36.*x**7 - 84.*x**6 + 126.*x**5 \
- 126.*x**4 + 84.*x**3 - 36.*x**2 + 9.*x - 1.
```
Note:
Commençons avec un exemple. Mon collègue Arnaud a calculé les valeurs d'un
polynôme d'ordre 9. Le voici.
+++
## L'arithmétique à virgule flottante
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/polynome2.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
```
def horner(x):
return x*(x*(x*(x*(x*(x*(x*(x*(x - 9.) + 36.) - 84.) + 126.) \
- 126.) + 84.) - 36.) + 9.) - 1.
```
Note:
Mon collègue Christophe lui fait remarquer que la méthode de Horner résulte dans
un calcul plus efficace. Il s'agit d'un réarrangement des termes qui reduit notamment
le nombre de multiplications. Le voici. Les deux courbes se recouvrent, donc les
résultats sont identiques.
+++
## L'arithmétique à virgule flottante
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/polynome3.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
```
def simple(x):
return (x-1.)**9
```
Note:
Une analyse un peu plus approfondie montre que notre polynôme a une seule racine
à x=1, ce qui nous permet d'en simplifier le calcul. Nous avons maintenant
trois courbes qui se recouvrent. Tout va bien !
+++
## L'arithmétique à virgule flottante
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/polynome3-4.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Mais regardons la région autour de x=1 de plus près...
+++
## L'arithmétique à virgule flottante
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/polynome4.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" />
Note:
Ça a l'air un peu bizarre. Et les trois courbes ne sont enfin pas identiques,
juste proches. Qu'est-ce qui se passe ?
+++
## L'arrondi
<ul>
<li>Il y a un arrondi implicite dans chaque opération.</li>
<li class="fragment">a+b est en réalité *arrondi*(a+b).</li>
<li class="fragment">Mais *arrondi*(*arrondi*(a+b)+c) ≠ *arrondi*(a+*arrondi*(b+c)).</li>
<li class="fragment">L'ordre des opérations est donc important.</li>
</ul>
<p class="fragment"> **Pour un calcul reproductible,<br /> il faut préserver l'ordre des opérations&emsp14;!!**</p>
Note:
Le résultat d'une opération arithmétique sur des flottant n'est en général pas
représentable par un autre flottant. On applique une opération d'arrondi qui
remplace le résultat exact avec une valeur proche qui est représentable.
A cause de l'arrondi, les règles habituelles de l'arithmétique ne sont plus
applicables à l'identique. On perd notamment l'associativité de l'addition et
de la multiplication.
En changeant l'ordre des opérations, on peut donc changer le résultat !
+++
## Comment l'expliquer à mon compilateur&emsp14;?
Pour accélérer le calcul, les compilateurs peuvent changer l'ordre des opérations,
et donc le résultat.
<p class="fragment">
Pour un calcul reproductible, il y a deux approches&emsp14;:</p>
<ul>
<li class="fragment">
Insister sur le respect de l'ordre des opérations, <br >
&emsp14;si le langage le permet.<br />
&emsp14;Exemple&emsp14;: Le module `ieee_arithmetic` en Fortran 2003 <br />
<br /></li>
<li class="fragment">
Rendre la compilation reproductible&emsp14;:<br />
- Noter la version précise du compilateur<br />
- Noter toutes les options de compilation</li>
</ul>
Note:
Ceci devient un obstacle à la reproductibilité à cause des
optimisations appliquées par les compilateurs pour accélérer le
calcul. Celle-ci changent souvent l'ordre des opérations et donc le
résultat.
Pour rendre un calcul reproductible, il y a deux
approches. Premièrement, on peut dire à son compilateur de ne pas
toucher à l'ordre des opérations, idéalement dans le code source du
logiciel. Ceci est possible par exemple dans le langage Fortran
2003.
L'autre approche est de rendre la compilation elle-même
reproductible en notant la version précise du compilateur utilisé,
ainsi que toutes les options de compilation. Idéalement, il faut
alors archiver le compilateur avec le logiciel de calcul.
+++
## Calcul parallèle
<ul>
<li> Objectif&emsp14;: une exécution plus rapide <br />
⟶ Minimiser la communication entre processeurs <br />
⟶ Adapter la répartition des données... <br />
⟶ et donc l'ordre des opérations <br />
<br /> </li>
<li class="fragment"> Conséquence&emsp14;: le résultat dépend du nombre de processeurs&emsp14;! </li>
</ul>
<p class="fragment"> **Minimiser cet impact du parallélisme<br /> reste un sujet de recherche.**</p>
Note:
Un autre obstacle à la reproductibilité résulte du calcul parallèle.
Celui-ci a comme seul objectif une exécution plus rapide. Pour y arriver,
il faut minimiser la communication entre les processeurs en adaptant
la répartition des données. Ceci implique d'adapter l'ordre des opérations,
car chaque processeur traite d'abord ses données locales avant d'entrer en
communication avec les autres processeurs.
La conséquence est que le résultat du calcul change avec le nombre
de processeurs utilisés.
On peut tenter d'écrire le logiciel tel que l'impact de cette variation
soit minimisé. Mais il n'y a pour l'instant aucune technique éprouvée
pour y arriver. Ceci reste un sujet de recherche.
+++
## Calcul parallèle&emsp14;: exemple
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/gouttedo1.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
<font size="5">(Source&emsp14;: Thèse de Rafife Nheili, Université de Perpignan, 2016)</font>
Note:
Regardons un simple exemple: la simulation des vagues causées dans
un bassin carré d'eau par une goutte qui tombe au milieu. A gauche,
la simulation exécutée sur un seul processeur. A droite, le résultat
d'un calcul sur quatre proecesseurs, ou les points qui diffèrent
sont colorés en gris.
+++
## Calcul parallèle&emsp14;: exemple
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/gouttedo2.png" style="width:100%; margin-top: none; border: none; background: none; box-shadow: none;" />
<font size="5">(Source&emsp14;: Thèse de Rafife Nheili, Université de Perpignan, 2016)</font>
Note:
Un pas de temps plus loin, le nombre de points à résultat différent
a nettement augmenté. Il continuera a augmenter au cours de la
simulation, jusqu'à ce qu'il n'y a plus aucun point pour lequel le
résultat restera identique.
+++
## Les plateformes de calcul
<ul>
<li>Plateforme de calcul&emsp14;: matériel + infrastructure logicielle</li>
<li class="fragment">Calcul = plateforme + logiciel + données </li>
<li class="fragment">La plateforme définit l'interprétation du logiciel.</li>
<li class="fragment">Plateforme et logiciel définissent l'interprétation des données.</li>
<li class="fragment">Autres aspects définis par la plateforme&emsp14;:<br />
- la représentation des entiers (16/32/64 bits)<br />
- la gestion des erreurs</li>
</ul>
Note:
Les obstacles à la reproductibilité dûs à l'arithmétique à virgule flottante
sont un cas spécial important de la dépendance des plateformes. Un logiciel
est écrit dans un langage de programmation, mais l'interprétation précise de
ce langage est définie par la plateforme de calcul utilisé. Celle-ci consiste
du matériel, notamment du processeur, et de l'infrastructure logiciel:
système d'exploitation, compilateurs, etc.
Un calcul est défini par trois ingrédients: la plateforme, le logiciel, et les
données traitées. La plateforme définit comment est interprété le logiciel,
et les deux ensembles définissent comment sont interprétées les donées.
L'arithmétique à virgule flottante est interprétée différemment par les différentes
plateformes de calcul populaires aujourd'hui, mais ce n'est pas le seul point
de divergence. Dans certains langage comme le C ou le Fortran, les entiers sont
aussi concernés car les plateformes leur attribuent des tailles et donc des
intervalles de valeurs différentes. Enfin, les erreurs de calcul, comme par
exemple la division par zéro, ne sont pas gérées de la ême façon par toutes les
plateformes.
+++
## Les nombres aléatoires
<ul>
<li> Utilisés pour simuler les processus stochastiques.<br />
<br /></li>
<li class="fragment"> En pratique&emsp14;: nombres **pseudo-**aléatoires.<br />
<br /></li>
<li class="fragment"> Suite de nombres **en apparence** aléatoires...<br />
<br /></li>
<li class="fragment">... mais générés par un algorithme déterministe.<br />
<br /></li>
</ul>
+++
## Générateur de nombres pseudo-aléatoires
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/nombres-aleatoires-1.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" class="fragment current-visible" />
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/nombres-aleatoires-2.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" class="fragment current-visible" />
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/nombres-aleatoires-3.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" class="fragment current-visible" />
<img src="https://rawgit.com/alegrand/RR_MOOC/master/assets/img/nombres-aleatoires-4.svg" style="width:70%; margin-top: none; border: none; background: none; box-shadow: none;" class="fragment current-visible" />
Note:
On part d'un état initial appelé "graine" (typiquement un entier).
Pour générer un nombre, on applique une transformation à cet état,
puis on calcule le nombre comme fonction de cet état.
On repète autant que nécessaire.
+++
## La reproductibilité en théorie
<ul>
<li> Principe&emsp14;: même graine + même algorithme → même suite<br />
<br /></li>
<li class="fragment"> La graine est souvent choisie comme fonction de l'heure<br />
<br /></li>
<li class="fragment"> Il faut la définir dans le code d'application<br />
<br /></li>
<ul>
Note:
En principe, il suffit d'utiliser la même graine et le même algorithme pour
toujours avoir la même suite de nombres.
L'algorithme fait partie d'une librairie, dont il faut noter la version
utilisée. Les librairie de nombres aléatoires choisissent souvent la graine
comme fonction de l'heure, pour donner une apparence "plus aléatoire".
Mais pour la reproductibilité, il faut définir la graine dans le code
d'application.
+++
## La reproductibilité en pratique
<ul>
<li> Même graine + même algorithme → même suite&emsp14;: <br />
&emsp14;pas évident en arithmétique à virgule flottante&emsp14;! <br />
<br /></li>
<li class="fragment">
Un astuce simple pour permettre la vérification&emsp14;: <br />
&emsp14;tester quelques valeurs du début de la suite.</li>
</ul>
Note:
En pratique, il n'est pas si facile d'obtenir une suite identique, même avec
la même version de la même librairie, à cause de la variation dans l'arithmétique
à virgule flottante.
Un astuce simple est de tester quelques valeurs du début de la suite. Si elle ne
sont pas identiques, on sait que la suite a changé.
+++
## Exemple&emsp14;: le langage Python
```
import random
random.seed(123)
for i in range(5):
print(random.random())
```
```
0.052363598850944326
0.08718667752263232
0.4072417636703983
0.10770023493843905
0.9011988779516946
```
Note:
Voici l'application de cet astuce en langage Python. On commence par
définir la graine et d'afficher les premières valeurs de la suit de
nombres pseudo-aléatoires.
+++
## Exemple&emsp14;: le langage Python
```
import random
random.seed(123)
assert random.random() == 0.052363598850944326
assert random.random() == 0.08718667752263232
assert random.random() == 0.4072417636703983
```
Note:
Puis on modifie le code en remplaçant l'affichage des valeurs par des
comparaisons aux valeurs précédemment affichées. En cas de divergence,
le programme s'arrête avec un message d'erreur.
+++
## Les points clés à retenir
<ul>
<li>Les résultats d'un calcul dépendent <br />
- du logiciel<br />
- des données d'entrée<br />
- de la plateforme de calcul&emsp14;: matériel, compilateurs, ... </li>
<li class="fragment">L'influence de la plateforme est importante pour l'arithmétique à virgule flottante.</li>
<li class="fragment"> Notez les paramètres dont peuvent dépendre vos résultats&emsp14;: <br />
- version du compilateur, options de compilation <br />
- matériel (type de processeur, GPU, ...) <br />
- nombre de processeurs </li>
<li class="fragment">En utilisant un générateur de nombres aléatoires, définissez la graine et vérifiez les premiers éléments de la suite.</li>
</ul>
#+END_EXPORT
* C028AL-W2-S4 (\approx 2:00); Conclusion
** Vers une étude reproductible : la réalité du terrain
_Module 4. Vers une étude reproductible : la réalité du terrain_
1. L'enfer des données
2. L'enfer du logiciel
3. L'enfer du calcul
4. *Conclusion*
** Ce qu'il faut retenir de ce MOOC
*Un véritable enjeu* <!-- .element class="fragment" data-fragment-index="1"-->
- <!-- .element class="fragment" data-fragment-index="1" style="font-size:30px" --> Méthodologie scientifique
- <!-- .element class="fragment" data-fragment-index="1" style="font-size:30px" --> Inspectabilité et réutilisation
*Des outils existent* <!-- .element class="fragment" data-fragment-index="2"-->
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px" -->Documents computationnels et Workflows, Suivi de version et
Archives, Environnements logiciels, Intégration continue, ...
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px" --> Ces outils évoluent en permanence
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px" --> Choisissez ceux qui sont les plus adaptés à votre contexte
- <!-- .element class="fragment" data-fragment-index="2" style="font-size:30px" --> Cherchez un compromis entre modernisme et pérénité
*Mettez en pratique, ne vous découragez pas!* <!-- .element class="fragment" data-fragment-index="3"-->
- <!-- .element class="fragment" data-fragment-index="3" style="font-size:30px" --> Prenez des notes rigoureusement
- <!-- .element class="fragment" data-fragment-index="3" style="font-size:30px" --> Rendez l'information exploitable et accessible
- <!-- .element class="fragment" data-fragment-index="3" style="font-size:30px" --> Améliorez petit à petit
digraph "python3-matplotlib" {
rankdir=RL;
node [shape=box, color=black, fillcolor=gray, fontcolor=black, style=filled];
"python3-matplotlib" -> "python3-dateutil" [color=blue];
"python3-dateutil" -> "python3-six" [color=blue,label="(>= 1.5)"];
"python3-six" -> "python3:any" [color=blue,label="(>= 3.4~)"];
"python3:any" -> virt1 [dir=back,arrowtail=inv,color=green];
"python3:any" [shape=octagon];
"python3-dateutil" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-dateutil" -> "tzdata" [color=blue];
"tzdata" -> "alt1":"debconf" [color=blue,label="(>= 0.5)"];
"alt1":"debconf-2.0" -> virt2 [dir=back,arrowtail=inv,color=green];
"python3-matplotlib" -> "python-matplotlib-data" [color=blue,label="(>= 2.2.2-2)"];
"python-matplotlib-data" -> "fonts-lyx" [color=blue];
"python-matplotlib-data" -> "ttf-bitstream-vera" [color=blue];
"python3-matplotlib" -> "python3-pyparsing" [color=blue,label="(>= 1.5.6)"];
"python3-pyparsing" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-matplotlib" -> "python3-six" [color=blue,label="(>= 1.10)"];
"python3-matplotlib" -> "python3-tz" [color=blue];
"python3-tz" -> "tzdata" [color=blue];
"python3-tz" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-matplotlib" -> "libjs-jquery" [color=blue];
"libjs-jquery" -> "jquery" [color=red];
"libjs-jquery" -> "javascript-common";
"python3-matplotlib" -> "libjs-jquery-ui" [color=blue];
"libjs-jquery-ui" -> "libjs-jquery" [color=blue,label="(>= 1.7)"];
"libjs-jquery-ui" -> "javascript-common";
"python3-matplotlib" -> "python3-numpy" [color=blue,label="(>= 1:1.13.1)"];
"python3-numpy" -> "python3" [color=blue,label="(<< 3.7)"];
"python3" -> "python3-minimal" [color=purple,style=bold,label="(= 3.6.5-3)"];
"python3-minimal" -> "python3.6-minimal" [color=blue,label="(>= 3.6.5-2~)"];
"python3.6-minimal" -> "libpython3.6-minimal" [color=blue,label="(= 3.6.5-9)"];
"libpython3.6-minimal" -> "libssl1.1" [color=blue,label="(>= 1.1.0)"];
"libssl1.1" -> "alt1":"debconf" [color=blue,label="(>= 0.5)"];
"libpython3.6-minimal" -> "libpython3.6-stdlib";
"libpython3.6-stdlib" -> "libpython3.6-minimal" [color=blue,label="(= 3.6.5-9)"];
"libpython3.6-stdlib" -> "mime-support" [color=blue];
"mime-support" -> "bzip2";
"bzip2" -> "libbz2-1.0" [color=blue,label="(= 1.0.6-8.1)"];
"bzip2" -> "bzip2" [color=red];
"mime-support" -> "file";
"file" -> "libmagic1" [color=blue,label="(= 1:5.33-2)"];
"libmagic1" -> "libmagic-mgc" [color=blue,label="(= 1:5.33-2)"];
"libmagic-mgc" -> "libmagic-mgc" [color=red];
"file" -> "file" [color=red];
"mime-support" -> "xz-utils";
"xz-utils" -> "liblzma5" [color=blue,label="(>= 5.2.2)"];
"xz-utils" -> "xz-lzma" [color=red];
"xz-utils" -> "xz-utils" [color=red];
"libpython3.6-stdlib" -> "libbz2-1.0" [color=blue];
"libpython3.6-stdlib" -> "libdb5.3" [color=blue];
"libpython3.6-stdlib" -> "libffi6" [color=blue,label="(>= 3.0.4)"];
"libpython3.6-stdlib" -> "liblzma5" [color=blue,label="(>= 5.1.1alpha+20120614)"];
"libpython3.6-stdlib" -> "libmpdec2" [color=blue];
"libpython3.6-stdlib" -> "libncursesw6" [color=blue,label="(>= 6)"];
"libncursesw6" -> "libtinfo6" [color=blue,label="(= 6.1+20180210-3)"];
"libncursesw6" -> "libgpm2";
"libpython3.6-stdlib" -> "libreadline7" [color=blue,label="(>= 7.0~beta)"];
"libreadline7" -> "readline-common" [color=blue];
"readline-common" -> "alt2":"dpkg" [color=blue,label="(>= 1.15.4)"];
"alt2":"install-info" -> "alt2":"dpkg" [color=purple,style=bold,label="(>= 1.16.1)"];
"alt2":"install-info" -> "alt2":"install-info" [color=red];
"readline-common" -> "libreadline-common" [color=red];
"libreadline7" -> "libtinfo6" [color=blue,label="(>= 6)"];
"libpython3.6-stdlib" -> "libsqlite3-0" [color=blue,label="(>= 3.5.9)"];
"libpython3.6-stdlib" -> "libtinfo6" [color=blue,label="(>= 6)"];
"python3.6-minimal" -> "libexpat1" [color=blue,label="(>= 2.1~beta3)"];
"python3.6-minimal" -> "python3.6";
"python3.6" -> "python3.6-minimal" [color=blue,label="(= 3.6.5-9)"];
"python3.6" -> "libpython3.6-stdlib" [color=blue,label="(= 3.6.5-9)"];
"python3.6" -> "mime-support" [color=blue];
"python3.6" -> "python3.6" [color=red];
"python3.6-minimal" -> "python3.6-minimal" [color=red];
"python3-minimal" -> "alt2":"dpkg" [color=blue,label="(>= 1.13.20)"];
"python3-minimal" -> "python3-minimal" [color=red];
"python3" -> "python3.6" [color=blue,label="(>= 3.6.5-2~)"];
"python3" -> "libpython3-stdlib" [color=blue,label="(= 3.6.5-3)"];
"libpython3-stdlib" -> "libpython3.6-stdlib" [color=blue,label="(>= 3.6.5-2~)"];
"python3" -> "python3" [color=red];
"python3-numpy" -> "python3" [color=blue,label="(>= 3.6~)"];
"python3-numpy" -> "python3.6:any" [color=blue];
"python3.6:any" -> virt3 [dir=back,arrowtail=inv,color=green];
"python3.6:any" [shape=octagon];
"python3-numpy" -> "python3:any" [color=blue,label="(>= 3.4~)"];
"python3-numpy" -> "alt3" [color=blue];
"alt3":"libblas3" -> "libgfortran4" [color=blue,label="(>= 7)"];
"libgfortran4" -> "gcc-7-base" [color=blue,label="(= 7.3.0-19)"];
"libgfortran4" -> "libquadmath0" [color=blue];
"libquadmath0" -> "gcc-8-base" [color=blue,label="(= 8.1.0-3)"];
"alt3":"libblas3" -> "libquadmath0" [color=blue,label="(>= 4.6)"];
"alt3":"libblas.so.3" -> "Pr_libblas.so.3" [label="-3-",dir=back,arrowtail=inv,color=green];
"Pr_libblas.so.3" [label="...",style=rounded];
"python3-numpy" -> "alt4" [color=blue];
"alt4":"liblapack3" -> "alt3" [color=blue];
"alt4":"liblapack3" -> "libgfortran4" [color=blue,label="(>= 7)"];
"alt4":"liblapack3" -> "libquadmath0" [color=blue,label="(>= 4.6)"];
"alt4":"liblapack.so.3" -> "Pr_liblapack.so.3" [label="-3-",dir=back,arrowtail=inv,color=green];
"Pr_liblapack.so.3" [label="...",style=rounded];
"python3-numpy" -> "python3-numpy" [color=red];
"python3-matplotlib" -> "python3-numpy-abi9" [color=blue];
"python3-numpy-abi9" -> "python3-numpy" [dir=back,arrowtail=inv,color=green];
"python3-numpy-abi9" [shape=octagon];
"python3-matplotlib" -> "python3" [color=blue,label="(<< 3.7)"];
"python3-matplotlib" -> "python3" [color=blue,label="(>= 3.6~)"];
"python3-matplotlib" -> "python3-cycler" [color=blue,label="(>= 0.10.0)"];
"python3-cycler" -> "python3-six" [color=blue];
"python3-cycler" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-matplotlib" -> "python3-kiwisolver" [color=blue];
"python3-kiwisolver" -> "python3" [color=blue,label="(<< 3.7)"];
"python3-kiwisolver" -> "python3" [color=blue,label="(>= 3.6~)"];
"python3-kiwisolver" -> "python3-pkg-resources" [color=blue];
"python3-pkg-resources" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-kiwisolver" -> "python3-kiwisolver" [color=red];
"python3-matplotlib" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-matplotlib" -> "libfreetype6" [color=blue,label="(>= 2.2.1)"];
"libfreetype6" -> "libpng16-16" [color=blue,label="(>= 1.6.2-1)"];
"python3-matplotlib" -> "libpng16-16" [color=blue,label="(>= 1.6.2-1)"];
"python3-matplotlib" -> "python3-pil";
"python3-pil" -> "python3" [color=blue,label="(<< 3.7)"];
"python3-pil" -> "python3" [color=blue,label="(>= 3.6~)"];
"python3-pil" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-pil" -> "alt5" [color=blue];
"alt5":"python3-pil.imagetk" -> "python3-pil" [color=blue,label="(= 5.1.0-1)"];
"alt5":"python3-pil.imagetk" -> "python3-tk" [color=blue,label="(>= 3.4.1-2)"];
"python3-tk" -> "python3" [color=blue,label="(>= 3.6.4-1~)"];
"python3-tk" -> "python3" [color=blue,label="(<< 3.8)"];
"python3-tk" -> "blt" [color=blue,label="(>= 2.4z-9)"];
"blt" -> "tk8.6-blt2.5" [color=blue,label="(= 2.5.3+dfsg-5)"];
"tk8.6-blt2.5" -> "libtcl8.6" [color=blue,label="(>= 8.6.0)"];
"libtcl8.6" -> "tzdata" [color=blue];
"tk8.6-blt2.5" -> "libtk8.6" [color=blue,label="(>= 8.6.0)"];
"libtk8.6" -> "libtcl8.6" [color=blue,label="(>= 8.6.0-2)"];
"libtk8.6" -> "libfontconfig1" [color=blue,label="(>= 2.12)"];
"libtk8.6" -> "libfreetype6" [color=blue,label="(>= 2.2.1)"];
"libtk8.6" -> "libxext6" [color=blue];
"libtk8.6" -> "libxft2" [color=blue,label="(>> 2.1.1)"];
"libxft2" -> "libfontconfig1" [color=blue,label="(>= 2.12.6)"];
"libxft2" -> "libfreetype6" [color=blue,label="(>= 2.3.5)"];
"libxft2" -> "libxrender1" [color=blue];
"libtk8.6" -> "libxss1" [color=blue];
"libxss1" -> "libxext6" [color=blue];
"libxss1" -> "x11-common" [color=blue];
"tk8.6-blt2.5" -> "blt4.2" [color=red];
"tk8.6-blt2.5" -> "blt8.0" [color=red];
"tk8.6-blt2.5" -> "blt8.0-unoff" [color=red];
"python3-tk" -> "libtcl8.6" [color=blue,label="(>= 8.6.0)"];
"python3-tk" -> "libtk8.6" [color=blue,label="(>= 8.6.0)"];
"python3-tk" -> "tk8.6-blt2.5" [color=blue,label="(>= 2.5.3)"];
"alt5":"python3-pil.imagetk" -> "python3" [color=blue,label="(<< 3.7)"];
"alt5":"python3-pil.imagetk" -> "python3" [color=blue,label="(>= 3.6~)"];
"alt5":"python3-pil.imagetk" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-pil" -> "libfreetype6" [color=blue,label="(>= 2.2.1)"];
"python3-pil" -> "libjpeg62-turbo" [color=blue,label="(>= 1.3.1)"];
"libjpeg62-turbo" -> "libjpeg62" [color=red];
"libjpeg62-turbo" -> "libjpeg62" [color=red];
"python3-pil" -> "liblcms2-2" [color=blue,label="(>= 2.2+git20110628)"];
"python3-pil" -> "libtiff5" [color=blue,label="(>= 4.0.3)"];
"libtiff5" -> "libjbig0" [color=blue,label="(>= 2.0)"];
"libtiff5" -> "libjpeg62-turbo" [color=blue,label="(>= 1.3.1)"];
"libtiff5" -> "liblzma5" [color=blue,label="(>= 5.1.1alpha+20120614)"];
"python3-pil" -> "libwebp6" [color=blue,label="(>= 0.5.1)"];
"python3-pil" -> "libwebpdemux2" [color=blue,label="(>= 0.5.1)"];
"libwebpdemux2" -> "libwebp6" [color=blue,label="(>= 0.5.1)"];
"python3-pil" -> "libwebpmux3" [color=blue,label="(>= 0.6.1-2)"];
"libwebpmux3" -> "libwebp6" [color=blue,label="(>= 0.5.1)"];
"python3-pil" -> "python3-olefile";
"python3-olefile" -> "python3:any" [color=blue,label="(>= 3.3.2-2~)"];
"python3-matplotlib" -> "python3-tk";
"python3-matplotlib" -> "python3-matplotlib" [color=red];
"python3-matplotlib" [style="setlinewidth(2)"]
"blt4.2" [style=filled,fillcolor=oldlace];
"blt8.0" [style=filled,fillcolor=oldlace];
"blt8.0-unoff" [style=filled,fillcolor=oldlace];
"jquery" [style=filled,fillcolor=oldlace];
"libreadline-common" [style=filled,fillcolor=oldlace];
"xz-lzma" [style=filled,fillcolor=oldlace];
alt1 [
shape = "record"
label = "<debconf> \{debconf\} | <debconf-2.0> debconf-2.0"
]
alt2 [
shape = "record"
label = "<dpkg> \{dpkg\} | <install-info> install-info"
]
alt3 [
shape = "record"
label = "<libblas3> libblas3 | <libblas.so.3> libblas.so.3"
]
alt4 [
shape = "record"
label = "<liblapack3> liblapack3 | <liblapack.so.3> liblapack.so.3"
]
alt5 [
shape = "record"
label = "<mime-support> [mime-support] | <python3-pil.imagetk> python3-pil.imagetk"
]
virt1 [
shape = "record"
style = "rounded"
label = "<python3> [python3] | <python3> [python3]"
]
virt2 [
shape = "record"
style = "rounded"
label = "<debconf> [debconf] | <cdebconf> \{cdebconf\}"
]
virt3 [
shape = "record"
style = "rounded"
label = "<python3.6> [python3.6] | <python3.6> [python3.6]"
]
"libfontconfig1" [shape=diamond];
"x11-common" [shape=diamond];
}
// Excluded dependencies:
// libc6 libgcc1 libstdc++6 libx11-6 zlib1g
// total size of all shown packages: 106674176
// download size of all shown packages: 29406112
#+TITLE: The Rough Road to Real-Life Reproducible Research
#+AUTHOR: @@latex:Christophe Pouzat, Arnaud Legrand, Konrad Hinsen@@
#+LATEX_CLASS: beamer
#+LATEX_CLASS_OPTIONS: [presentation,bigger,xcolor={usenames,dvipsnames,svgnames,table}]
#+STARTUP: beamer indent
#+LANGUAGE: fr
#+PROPERTY: header-args :eval no-export
#+OPTIONS: H:2 tags:nil
#+OPTIONS: num:t toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
# #+OPTIONS: author:nil email:nil creator:nil timestamp:t
#+TAGS: noexport(n)
#+EXCLUDE_TAGS: noexport
#+LATEX_HEADER: % \usepackage{pgfpages}
#+LATEX_HEADER: % \setbeameroption{show notes on second screen=right}
#+LATEX_HEADER: \usepackage[american]{babel}
#+LATEX_HEADER: \usepackage[normalem]{ulem}
#+LATEX_HEADER: \usepackage{svg}
#+LATEX_HEADER: \setbeamercovered{invisible}
#+LATEX_HEADER: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Where are we?}\tableofcontents[currentsection]\end{frame}}
#+LATEX_HEADER: \beamertemplatenavigationsymbolsempty
#+LATEX_HEADER: \usepackage{tikzsymbols}
#+LATEX_HEADER: \def\smiley{\Smiley[1][green!80!white]}
#+LATEX_HEADER: \def\frowny{\Sadey[1][red!80!white]}
#+LATEX_HEADER: \def\winkey{\Winkey[1][yellow]}
#+LATEX_HEADER: \usepackage{color,soul}
#+LATEX_HEADER: \definecolor{lightblue}{rgb}{1,.9,.7}
#+LATEX_HEADER: \sethlcolor{lightblue}
#+LATEX_HEADER: \newcommand{\muuline}[1]{\SoulColor\hl{#1}}
#+LATEX_HEADER: \makeatletter
#+LATEX_HEADER: \newcommand\SoulColor{%
#+LATEX_HEADER: \let\set@color\beamerorig@set@color
#+LATEX_HEADER: \let\reset@color\beamerorig@reset@color}
#+LATEX_HEADER: \makeatother
#+LATEX_HEADER: \let\hrefold=\href
#+LATEX_HEADER: \renewcommand{\href}[2]{\hrefold{#1}{\SoulColor\hl{#2}}}
#+LaTeX: \let\alert=\structure % to make sure the org * * works
#+LaTeX: \begin{frame}{Outline}\tableofcontents\end{frame}
* Test et informations :noexport:
* Internal refs/notes :noexport:
** Images
- Notebook konrad:
- file:../slides-module2/jupyter-grippal-full.png
- file:../slides-module2/jupyter-grippal-top.png
- file:../slides-module2/jupyter-grippal-bottom.png
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file jupyter-grippal-full.png
rm /tmp/cropped_*
convert -crop 1345x3000 jupyter-grippal-full.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append jupyter-grippal-paged.png
#+end_src
#+RESULTS:
: jupyter-grippal-full.png: PNG image data, 1345 x 8772, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 jupyter-grippal-paged.png ../assets/img/nb3.png
#+end_src
#+RESULTS:
- Notebook Elisabeth: https://bitbucket.org/elizabethpwalton/smpe_project
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
file elizabethpwalton_SMPE.png
rm /tmp/cropped_*
convert -crop 820x2650 elizabethpwalton_SMPE.png /tmp/cropped_%d.png
convert /tmp/cropped_*.png +append elizabethpwalton_SMPE-aged.png
#+end_src
#+RESULTS:
: elizabethpwalton_SMPE.png: PNG image data, 820 x 15217, 8-bit/color RGBA, non-interlaced
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 elizabethpwalton_SMPE-aged.png ../assets/img/nb4.png
#+end_src
#+RESULTS:
- Notebook Ismail:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
rm /tmp/cropped_*
convert -crop 590x1400 oscar.png /tmp/cropped_%d.png
for i in /tmp/cropped_[1-9].png ; do mv $i `echo $i | sed 's/cropped_/cropped_0/'` ; done
convert /tmp/cropped_*.png +append And_the_Oscar_goes_to-paged.png
#+end_src
#+RESULTS:
#+begin_src shell :results output :exports both
cd /home/alegrand/Work/Documents/Enseignements/RR_MOOC/slides-module2
convert -scale x1507 And_the_Oscar_goes_to-paged.png ../assets/img/nb5.png
#+end_src
#+RESULTS:
- Navette russe: https://io9.gizmodo.com/more-sad-remains-of-the-soviet-buran-space-shuttle-prog-1733190814
- Msieur il marche mon programme: https://www.luc-damas.fr/humeurs/images/il-marche-mon-programme.jpg
- PhD Comics:
- http://phdcomics.com/comics/archive.php?comicid=1947:
http://phdcomics.com/comics/archive/phd050817s.gif
- http://phdcomics.com/comics/archive.php?comicid=1948:
http://phdcomics.com/comics/archive/phd051017s.gif
** Graphe syndrome grippal:
#+begin_src shell :results output raw :exports both
debtree python3-matplotlib > python3-matplotlib.dot
sed -i -e 's/rankdir=LR/rankdir=RL/g' \
-e 's/node \[shape=box\]/node [shape=box, color=black, fillcolor=gray, fontcolor=black, style=filled]/g' \
python3-matplotlib.dot
dot -Tpng python3-matplotlib.dot > python3-matplotlib.png
echo file:python3-matplotlib.png
#+end_src
#+RESULTS:
file:python3-matplotlib.png
#+begin_src shell :results output :exports both
mv python3-matplotlib.png ../assets/img/
#+end_src
#+RESULTS:
* M4-S0: The Rough Road to Real-Life Reproducible Research
** Reproducible Research Hell
file:../assets/img/phd_sisyphe.png
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Bonjour à tous,
Maintenant que vous êtes familiers avec les documents computationnels
et les analyses réplicables, vous disposez des outils principaux vous
permettant d'améliorer votre pratique et de rendre votre recherche
reproductible.
Mais la route est longue et semée d'embûches. Il est temps d'aller un
peu plus loin et que vous preniez consciences des différentes
difficultés auxquelles vous risquez d'être confronté.
Dans ce dernier module, nous vous présenterons trois des enfers de la
recherche reproductible.
** Module 4. The Rough Road to Real-Life Reproducible Research
1. Data Hell
2. Software Hell
3. Numerics Hell
4. Conclusion
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
*Christophe:* Le premier enfer est celui des données. Quand on travaille
sur de vrais données, leur taille, leur structure, ou leur diversité
peuvent rapidement poser d'importantes difficultés. Je présenterai
quelques approches permettant de survivre dans cet environnement
hostile.
*Arnaud:* Le second enfer est celui du logiciel et on se trouve
rapidement confronté à deux défis. D'une part, le logiciel devient
très rapidement gros, difficile à gérer, et les solutions simples que
nous vous avons présentées passent alors très mal à
l'échelle. D'autre part, aussi étonnant que cela puisse paraître, les
logiciels vieillissent et résistent souvent très mal à l'épreuve du
temps. Je présenterai des exemples concrets et quelques approches
permettant de survivre dans cet environnement hostile.
*Konrad:* Enfin, le troisième enfer est celui du calcul
numérique. J'illustrerai les difficultés que peut poser le calcul avec
des flottants, ou l'ordre des opérations influe sur les
résultats. Comme cet ordre a aussi un impact sur la performance, il
faut trouver un compromis entre temps d'exécution et
reproductibilité. Ceci est particulièrement difficile pour le calcul
parallèle, qui concerne tous les ordinateurs modernes, même les
smartphones. J'évoquerai aussi les précautions à prendre quand on
utilise les nombres aléatoires.
En espérant ne pas vous avoir trop effrayés, nous concluerons enfin
brièvement ce MOOC par quelques remarques de bon sens.
* M4-S1: Data Hell
** The Rough Road to Real-Life Reproducible Research :noexport:
1. *Data Hell*
2. Software Hell
3. Numerics Hell
4. Conclusion
** Two new problems
When we start to work on real data, we typically have to deal with two problems:
- the data are of diverse nature
- the data occupy a lot of memory
** Non-homogeneous data
- The influenza-like illness data from module can easily be presented as a table (2 dimensional object)
- Often the table form must be *abandoned* because
- the columns don't all have the same length
- the data can be a time series *and* a set of images, etc.
** Big data
- *Text formats* are not always appropriate for numbers
- Choice of a *binary format* because
- Numbers occupy less memory
- Numbers in text format must be converted to binary anyway for computation
** Text format features we wish to keep: metadata
- Text permits storing the data *and* all the rest...
- \Rightarrow add information about the data:
- provenance
- recording date
- source
- etc.
- This information about the data is what is called *metadata*
- They are vital for doing reproducible research
** Text format features we wish to keep: endianness
- Text format is universal
- Binary formats depend on hardware architecture and operating system
- The four-bit sequence 1010 can be read as
- 1x1 + 0x2 + 1x4 + 0x8 = 5, which is *little-endianness*
- 1x8 + 0x4 + 1x2 + 0x1 = 10, which is *big-endianness*
- *A binary storage for reproducible research much specify endianness*
** Binary formats for composite data allow storing metadata
Wanted: binary formats for
- working with big datasets of diverse nature
- storing metadata along with the data
- having endianness fixed *once and for all*
** `FITS` and `HDF5`
- The *Flexible Image Transport System* (`FITS`), developed in 1981 and still regularly updated
- The *Hierarchical Data Format* (`HDF`), developed at the *National Center for Supercomputing Applications*, is at its fifth version, `HDF5`
** `FITS`
- `FITS` introduced and updates by the astrophysics community
- Format sufficiently general for use in different contexts
** The anatomy of a `FITS` file
- One or mode segments: *Header/Data Units* (HDUs)
- A HDU is made up of:
- a header (*Header Unit*) followed *optionally* by
- the data (*Data Unit*)
- Header = key-value pair → *metadata*
- Data stored as binary tables (one to 999 dimensions) or as tables (text or binary)
** Manipulation of `FITS` files
- The developers of the format offer a `C` library and associated programs that are easy to use
- `PyFITS` for Python users
- `FITSio` for R users
** `HDF5`
- Hierarchical organization, resembles a filesystem tree
- Structuring element: a *group* (similar to a directory) contains one of more *datasets*
- *Groups* can be nested
- No structure imposed on metadata
- No structure imposed on data - they can be text
** Manipulation of `HDF5` files
- More flexible format \Rightarrow the `C` library is more complex thatn its `FITS` equivalent
- The library is distribued with `HDFView`, a powerful tool for exploring and visualizing data
- `h5py` is a very complete `Python` interface
- Three `R` packages: `h5`, `hdf5r` et `rhdf5`
** Archiving
Git (hub, lab, ...): not well suited for data storage
#+BEGIN_CENTER
#+ATTR_LATEX: :height 1cm :center nil
file:../assets/img/Zenodo-logo.jpg
#+ATTR_LATEX: :height 1cm :center nil
file:../assets/img/Figshare-logo.png
#+END_CENTER
** Conclusions
- Real data \Rightarrow size and structure problems
- Read data are complex \Rightarrow metadata
- `FITS` and `HDF5` = *practical* solutions
- In terms of complexity and flexibility: `FITS` < `HDF5`
- Archiving platforms \Rightarrow persistent storage accessible for everyone
* M4-S2: Software Hell
** The Rough Road to Real-Life Reproducible Research :noexport:
1. Data Hell
2. *Software Hell*
3. Numerics Hell
4. Conclusion
** Scaling up
#+ATTR_LATEX: :width \linewidth
file:../assets/img/il-marche-mon-programme.jpg
** Complex code...
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb1.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb2.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb3.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb4.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/grippal_orgmode1.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/grippal_orgmode2.png}%
#+LaTeX: \includegraphics<+>[height=6cm]{../assets/img/nb5.png}%
- A real spaghetti bowl
- No global view
- Interaction between multiple languages = danger
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Des codes compliqués à organiser/orchestrer. Le notebook a ses
limitations et vous pouvez en devenir prisonnier.
** ... that is difficult to orchestrate
#+LaTeX: \only<1>{\begin{overlayarea}{1.5\linewidth}{7cm}
#+ATTR_LATEX: :height 7cm :center nil
file:../assets/img/SbmlParameterisation.png
#+ATTR_LATEX: :height 7cm :center nil
file:../assets/img/SbmlModelling.png
#+LaTeX: \end{overlayarea}}\pause
*Workflows*:
- Clearer high-level view
- Composition of codes and data movement made explicit
- Safer sharing, reusing, and execution
- Notebooks are a variant that is both impoverished and richer
- No simple/mature path from a notebook to a workflow
*Examples*:
- Galaxy, Kepler, Taverna, Pegasus, Collective Knowledge, VisTrails
- Light-weight: dask, drake, swift, snakemake, ...
- Hybrids: SOS-notebook, ...
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- un workflow, c'est quoi ? On restructure le code de façon à rendre
le flot de traitement plus explicite. Chaque bout de code est
encapsulé dans une fonction, on supprime les effets de bord pour que
les entrées et les sorties soient parfaitement identifiées. On
connecte ensuite chacune de ces fonctions les unes avec les
autres.
- Un environnement de workflow fournit les bonnes abstractions, les
bonnes conventions d'écritures permettant d'orchestrer tous ces
appels et c'est ensuite le moteur de workflow qui gère l'exécution
des choses. Non seulement le workflow peut plus facilement exploiter
une machine parallèle, mais en plus, il est possible de sauvegarder
l'état d'avancement du calcul (via les données générées jusqu'ici)
et le reprendre plus tard. Si on décide de modifier une des briques
du workflow, on peut réutiliser les résultats obtenus en amont. Ce
genre de manipulation est bien plus compliquée avec un notebook où
il y a une session, un état global et où le risque d'erreur est bien
plus important.
- Alors, un workflow peut devenir quelque chose de très compliqué et
de pas forcément très clair non plus mais la représentation par un
graphe permet de regrouper et d'agréger certaines parties pour se
concentrer sur l'essentiel tout en pouvant inspecter les détails
quand on le souhaite.
- Un autre avantages du workflow est la capacité à partager des
parties du workflow avec d'autres et à bénéficier des améliorations
que d'autres pourraient apporter à notre propre workflow... C'est un
des intérêt de plates-formes comme taverna ou kepler.
- Le notebook est donc selon moi parfait quand on met quelque chose au
point car il permet de prendre des notes sur ce que l'on fait
et sur pourquoi on le fait. Au fur et à mesure que le notebook
évolue en quelque chose de plus complexe et qu'on a les idées de
plus en plus claires sur les manipulations de données à effectuées,
il devient intéressant de transformer toute cette matière en un
workflow.
- Cette restructuration est manuelle et il n'existe pas encore de
bonne solution pour passer de l'un à l'autre. Il y a des tentatives
intéressantes comme le sos-notebook dans Jupyter mais toutes ces
initiatives sont encore en plein développement.
- L'utilisation d'un workflow ne rend pas l'utilisation d'un notebook
caduque. Le notebook est utile mais à un autre niveau. Les appels au
workflow peuvent parfaitement être faits à partir du notebook et on
utilisxe alors ce dernier pour décrire les expériences que l'on mène
et le résultats des analyses.
** The mess of expensive computations
*Long-running computations* and *big datasets*
- JupyterHub and supercomputers: under development
- Checkpoints and caching
- Workflows permit scaling up
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
# https://zonca.github.io/2015/04/jupyterhub-hpc.html
# https://github.com/ipython/ipyparallel/issues/167
# https://groups.google.com/forum/#!topic/jupyter/BlexhV8W5TE
Les calculs interminables et les gros volumes de données
- JupyterHub et les supercalculateurs: en développement
- Lancement sur des machines distantes ? Compliqué, pas de bonnes
solutions à l'heure actuelle.
- Actuellement, JupyterHub permet de donner une machine
(éventuellement virtuelle) à chaque notebook
- Il dispose également d'un onglet cluster permettant d'allouer
plusieurs machines à un Ipython parallèle.
- Lorsque l'on souhaite paralléliser c'est la plupart du temps le
langage du notebook qui fait le travail (Ipython parallèle, R au
dessus de spark, etc.), pas le notebook lui même.
- Notebook idéal selon moi: tel bloc peut/doit s'exécuter ailleurs
- Ce qui n'est pas sans poser de nombreux problèmes de sémantiques
(surtout si le mécanisme de session est utilisé et/ou que
plusieurs langages sont utilisés)
- Checkpoint et Cache:
- Il y a des mécanismes de cache dans les trois environnements que
nous vous avons présentés.
- Cela vous permet de ne pas tout réexécuter depuis le début.
- Ne pas confondre l'objet résultant (le graphique ou le tableau) des
données sous-jacentes.
- Un checkpoint explicite (via des fichiers) des données nécessaires
à la suite des calculs est la méthode la plus simple.
- Le workflow gère la séparation des codes et des données, ce qui
permet de passer à l'échelle
# - Histoire de montrer que malgré ça c'est dur:
# https://github.com/IFB-ElixirFr/ReproHackathon/blob/master/docs/index.md
# https://f1000research.com/articles/6-124/v1
** Complex ecosystems
What is hiding behind the simple
#+begin_src python :results output :exports both
import matplotlib
#+end_src
#+LaTeX: \scriptsize
#+BEGIN_EXAMPLE
Package: python3-matplotlib
Version: 2.1.1-2
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2),
python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz,
libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1),
python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~),
python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>=
2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>=
1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
#+END_EXAMPLE
#+LaTeX: \only<2>{\vspace{-3.5cm}\includegraphics<2>[width=\linewidth]{../assets/img/python3-matplotlib.png}}\vspace{10cm}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Qu'est-ce qui se cache derrière matplotlib
- Python peut nous dire ce qu'il en sait (i.e., pas grand chose)
mais comment s'assurer que deux personnes exécutent bien ce code
dans le même environnement logiciel
- Dans le cadre de ce MOOC, un serveur jupyter est déployé et un
environnemnt commun est proposé. Mais pouvez vous vous assurer que
vous disposerez du même environnemnt chez vous à la fin du MOOC ?
- Comment réinstaller un tel environnemnent ? Comment packager un
logiciel complexe ?
- Comment faire en sorte qu'il puisse évoluer si un bug est corrigé ?
** Complex ecosystems
\small No standard:
- Linux (=apt=, =rpm=, =yum=), MacOS X (=brew=, =McPorts=, =Fink=), Windows (?)
#+LaTeX: \null\vspace{-.6em}
- Neither for installation nor for retrieving the information... $\frowny$
#+LaTeX: \null\vspace{-.6em}
#+LaTeX: \vspace{-1em}
#+LaTeX: \begin{columns}\begin{column}[t]{.45\linewidth}\scriptsize
#+begin_src python :results output :exports both
import sys
print(sys.version)
import matplotlib
print(matplotlib.__version__)
import pandas as pd
print(pd.__version__)
#+end_src
#+LaTeX: ~\vspace{-2.4em}~\tiny
#+begin_example
3.6.3 (default, Oct 3 2017, 21:16:13)
[GCC 7.2.0]
2.1.1
0.20.3
#+end_example
#+LaTeX: \end{column}\begin{column}[t]{.55\linewidth}\scriptsize
#+begin_src R :results output :session *R* :exports both
library(ggplot2)
sessionInfo()
#+end_src
#+LaTeX: ~\vspace{-2.4em}~\tiny
#+RESULTS:
#+begin_example
R version 3.4.3 (2017-11-30)
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.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
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
other attached packages:
[1] ggplot2_2.2.1
loaded via a namespace (and not attached):
[1] colorspace_1.3-2 scales_0.5.0 compiler_3.4.3 lazyeval_0.2.1
[5] plyr_1.8.4 pillar_1.1.0 gtable_0.2.0 tibble_1.4.2
[9] Rcpp_0.12.15 grid_3.4.3 rlang_0.1.6 munsell_0.4.3
#+end_example
#+LaTeX: \end{column}\end{columns}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Pas de standard:
- Ni pour l'installation ni pour récupérer les informations:
- Linux (Debian =apt=, RedHat =rpm=, ...), MacOS X (=brew=, =McPorts=,
=Fink=), Windows (?)
- Indiquer ses dépendances logicielles, c'est la version 0 de la
reproductibilité. Ça ne coûte pas bien cher et ça permettra à
celui qui viendra après vous de savoir par où commencer.
- Il faut mettre en place une solution ad hoc, selon le langage
utilisé et ce n'est pas simple.
- Lister l'intégralité de ses dépendances logicielles (voire avec
quel compilateur telle bibliothèque a été compilée) peut être très
compliqué
** Controlling one's environment
*A controlled environment:*
- Work in a virtual machine (heavy) or a Docker container (light)
#+LaTeX: \bigskip\begin{columns}\begin{column}[t]{.45\linewidth}
*Preserve the mess*
- Automatic capture of the environment
- [[http://www.pgbovine.net/cde.html][CDE]], [[https://vida-nyu.github.io/reprozip/][ReproZip]], +[[http://reproducible.io/][CARE]]+
#+LaTeX: \end{column}\hspace{-2em}\begin{column}[t]{.52\linewidth}
*Cleaning up*
- Start with a clean environment
- Install only what's strictly necessary (and document it)
- [[https://www.docker.io/][Docker]], [[https://singularity.lbl.gov/][Singularity]], [[https://www.gnu.org/software/guix/][Guix]], [[https://nixos.org/][Nix]], ...
#+LaTeX: \end{column}\end{columns}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Intro:
- You cannot expect people to find all the chains of dependencies!
- You cannot expect people to install all the dependencies and run your
code smoothly!
- Règle numéro 1 d'un environnement bien contrôlé: travailler dans un
environnement isolé (une machine virtuelle ou bien un conteneur)
- Brève explication de ce que c'est et de la différence. Sans le
savoir, tous ceux qui ont utilisé nos notebooks ont travaillé dans
un conteneur docker.
- Conséquence:
- du point de vue du code exécuté, tout est encapsulé: rien ne
rentre, rien ne sort
- l'utilisation de l'interface graphique peut être un peu compliquée
- exécution a priori possible sur n'importe quel OS (pour une VM,
sur un OS compatible pour un conteneur)
- Un environnement contrôlé: deux approches
- Conserver le bazar ::
- C'est l'approche toute automatique, un outil se charge
d'observer l'exécution de votre logiciel et de capturer
l'ensemble des codes et des bibliothèques utilisées
- Une archive contenant l'environnement peut alors être construite
et partagée. C'est très facile et très pratique.
- Avantage: Facile, permet à quelqu'un d'autre de réexécuter le
code dans les mêmes conditions
- Inconvénient: pas facile de faire évoluer un tel objet, ni de
comprendre comment il fonctionne. Le résultat est une boite
noire.
- Examples: CARE, CDE, Reprozip
- Faire le ménage ::
- On part d'un environnement minimal dans un conteneur
- On rajoute les composants logiciel dont on a besoin au fur et à
mesure
- Idéalement, au fur et à mesure qu'on rajoute ces logiciel, on
scripte leur installation (e.g., dockerfile)
- Avantage: cela permettra de facilement faire évoluer
l'environnement (mise à jour, remplacement d'un composant
défectueux, etc.)
- Inconvénient: demande quelques efforts, en particulier quand les
composants logiciels sont mal packagés (pas partie d'une
distribution, interventions manuelles, etc.) et que beaucoup
d'interactions avec l'extérieur sont nécessaires (le téléchargement
des données doit être bien séparé)
- Examples: Singularity, voire Nix ou GUIX qui permettent une
reconstruction parfaite, un environnement étant encodé de façon
fonctionnel
*** Cruft :noexport:
#+begin_src shell :results output raw :exports both
echo "#+BEGIN_EXAMPLE"
apt-cache show python3-matplotlib # | grep Depends | head -1
echo "#+END_EXAMPLE"
#+end_src
#+RESULTS:
#+BEGIN_EXAMPLE
Package: python3-matplotlib
Source: matplotlib
Version: 2.1.1-2
Installed-Size: 12159
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.1.1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.13.1), python3-numpy-abi9, python3 (<< 3.7), python3 (>= 3.6~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2), zlib1g (>= 1:1.1.4)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.1.1-2_amd64.deb
Size: 4597588
MD5sum: bfca8169a6b4e2cd9f89eb2f862083c7
SHA256: cbf80fdbf2643f19f926e33ea24cab3f76286d631d0806a2f665989fb17c76e4
Package: python3-matplotlib
Source: matplotlib
Version: 2.0.0+dfsg1-2
Installed-Size: 7362
Maintainer: Sandro Tosi <morph@debian.org>
Architecture: amd64
Depends: python3-dateutil, python-matplotlib-data (>= 2.0.0+dfsg1-2), python3-pyparsing (>= 1.5.6), python3-six (>= 1.10), python3-tz, libjs-jquery, libjs-jquery-ui, python3-numpy (>= 1:1.10.0~b1), python3-numpy-abi9, python3 (<< 3.6), python3 (>= 3.5~), python3-cycler (>= 0.10.0), python3:any (>= 3.3.2-2~), libc6 (>= 2.14), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libpng16-16 (>= 1.6.2-1), libstdc++6 (>= 5.2)
Recommends: python3-pil, python3-tk
Suggests: dvipng, ffmpeg, gir1.2-gtk-3.0, ghostscript, inkscape, ipython3, librsvg2-common, python-matplotlib-doc, python3-cairocffi, python3-gi, python3-gi-cairo, python3-gobject, python3-nose, python3-pyqt4, python3-scipy, python3-sip, python3-tornado, texlive-extra-utils, texlive-latex-extra, ttf-staypuft
Enhances: ipython3
Description-fr: système de traçage basé sur Python dans un style similaire à celui Matlab –⋅Python⋅3
Matplotlib est une bibliothèque de traçage en Python pur conçue pour
apporter à Python des capacités de traçage d'une qualité adaptée à la
publication, avec une syntaxe familière aux utilisateurs de Matlab. L'accès
à toutes les commandes de traçage, dans l'interface pylab, est possible
soit à travers une interface fonctionnelle familière aux utilisateurs de
Matlab, soit à travers une interface orientée objet familière à ceux de Python.
.
Ce paquet fournit la version Python⋅3 de matplotlib.
Description-md5: 29e115db1f22ec2264a195b584329de9
Homepage: http://matplotlib.org/
Section: python
Priority: optional
Filename: pool/main/m/matplotlib/python3-matplotlib_2.0.0+dfsg1-2_amd64.deb
Size: 1589544
MD5sum: e8f0571243df303a9b1f37a8ebf8177d
SHA256: 8f5d3509d4f5451468c6de44fc8dfe391c3df4120079adc01ab5f13ff4194f5a
#+END_EXAMPLE
** The test of time
file:../assets/img/soviet_space_shuttle.jpg
** Backwards compatibility
\small
- Python and its rapidly evolving environment
#+LaTeX: \null\vspace{-1em}
#+begin_src shell :results output :exports both
python2 -c "print(10/3)"
python3 -c "print(10/3)"
#+end_src
#+LaTeX: \null\vspace{-2.4em}{\scriptsize
#+RESULTS:
: 3
: 3.3333333333333335
#+LaTeX: }
\pause
#+ATTR_LATEX: :height 3.2cm :center nil
file:../assets/img/plot_1.5.3.png
#+ATTR_LATEX: :height 3.2cm :center nil
file:../assets/img/plot_2.1.1.png
\pause
- Cortical Thickness Measurements (PLOS ONE,
June 2012): /FreeSurfer/: /differences were found between the Mac and
HP workstations and between Mac OSX 10.5 and OSX 10.6./
- Format incompatibility between orgmode 7.*, 8.*, 9.*, etc.
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
\scriptsize
- Petit exemple en python, le plus simple qui soit, une division:
- Le passage de python2 à python3 a introduit des changements
majeurs puisque la division par défaut qui était à l'origine une
division entière est devenue une division sur des flottants.
- Alors, certains diront que python2 et python3 doivent être
considérés comme deux langages distincts mais même si python2
reste maintenu et continue d'évoluer (doucement), quand tous les
efforts de l'écosystème se tournent vers python3, on est bien
obligé d'emboiter le pas...
- Il y a quelques mois, un de mes collègues qui était bien content
d'avoir utilisé un notebook pour préparer son dernier article et
d'avoir fait bien attention à sauvegarder tout son code et ses
résultats intermédiaires, a été assez surpris en préparant la
révision finale de remarquer que la figure qu'il avait générée 3
mois auparavant avait décidé de changer de couleurs...
- Entre les deux, matplotlib a été mis à jour sur sa machine et il
se trouve qu'entre la version 1.5.12 et la 2.0, la palette de
couleurs par défaut a changé...
- Alors, dans cet exemple précis, ça ne change pas
fondamentalement les choses et le plus important était de
pouvoir mettre à disposition la démarche utilisée mais c'est
quand même assez agaçant.
- Ce type d'incident met en évidence le problème de la perméabilité
à l'environnement extérieur.
** Rapid development tools
*Rapid* but also *fragile* and *unstable*:
- Correction or introduction of bugs
- It becomes necessary to check regularly if environments can still be reconstructed and work (continuous integration, regression testing)
Popper: [[http://falsifiable.us/][http://falsifiable.us/]]
#+ATTR_LATEX: :height 1.5cm :center nil
file:../assets/img/popper_logo_just_jug.png
*Another option*:
- Limit onself to what is manageable (C for example)
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Les outils informatiques évoluent à une vitesse incroyable et nous
permettent d'aller plus vite, plus loin dans nos recherche. Il est
donc indispensable de s'appuyer dessus.
- Néanmoins, ces développements rapides sont aussi a source de
nombreuses erreurs, de régressions, de corrections (ce qui est une
bonne chose) et très souvent de perte de compatibilité entre les
versions.
- Ce sont des outils à développement rapide dans les deux sens du
terme, c'est à dire des outils qui à la fois vous permettent de
mettre en place des choses complexes très rapidement mais qui
évoluent aussi très (pour ne pas dire trop) rapidement.
- Dans ce contexte mouvant, il devient nécessaire de vérifier
régulièrement que notre code et son environnement peuvent être
regénérés et qu'ils sont fonctionnels. En génie logiciel, les termes
associés sont "intégration continue" (chaque nuit ou bien à chaque
commit dans votre gestionnaire de version, la compilation de votre
code est déclenchée et remonte une alerte en cas de problème) et
"tests de non régression" (une fois votre code et son environnement
compilé, on vérifie via une batterie de tests que les sorties pour
des entrées bien spécifiques sont toujours correctes).
- Certains proposent même une utilisation systématique de ce type
d'approche au processus de recherche. Ça demande un investissement
technique un peu lourd mais dans le principe, pourquoi pas ?
- Il faut garder à l'esprit que les notebooks ou les outils que nous
vous avons présentés font d'ailleurs partie de cette famille
d'outils à développement rapide et n'échappent pas malgré leurs
efforts à ces difficultés de pérennité.
- Pour être le moins possible ennuyé par ce type de problème, certains
font le choix de se restreindre à des outils et des langages très
stables et qu'ils peuvent maîtriser de bout en bout.
- Il faut donc trouver le bon compromis entre modernisme et pérennité.
** Archiving
*Source code management*
- Git (hub, lab, ...) : stable, open, \dots durable ?
- +Google Code+, +Gitorious+, +Code Spaces+
#+ATTR_LATEX: :height 1.3cm :center nil
file:../assets/img/swh-logo.png
#+ATTR_LATEX: :height 1.3cm :center nil
file:../assets/img/LogoHAL.PNG
*Environment management*
- Longevity of access to Docker Hub, Nix repository, Code Ocean, ... ?
- Once an environment is frozen, what's the lifetime of a virtual machine, a Docker image, ... ?
*Preserve as much information as possible automatically*
- Software, versions, installation procedures
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
- Dans les exercices, faites y bien attention.
# file:../assets/img/ArXiv-web.png" height=60 />
# file:../assets/img/Zenodo-logo.jpg" height=60 />
# file:../assets/img/Figshare-logo.png" height=60 />
* M4-S3: Numerics Hell
** The Rough Road to Real-Life Reproducible Research :noexport:
1. Data Hell
2. Software Hell
3. *Numerics Hell*
4. Conclusion
** Floating-point arithmetic
file:../assets/img/polynome1.svg
#+begin_src python :results output :exports both
def polynome(x):
return x**9 - 9.*x**8 + 36.*x**7 - 84.*x**6 + 126.*x**5 \
- 126.*x**4 + 84.*x**3 - 36.*x**2 + 9.*x - 1.
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Commençons avec un exemple. Mon collègue Arnaud a calculé les valeurs d'un
polynôme d'ordre 9. Le voici.
** Floating-point arithmetic
file:../assets/img/polynome2.svg
#+begin_src python :results output :exports both
def horner(x):
return x*(x*(x*(x*(x*(x*(x*(x*(x - 9.) + 36.) - 84.) + 126.) \
- 126.) + 84.) - 36.) + 9.) - 1.
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Mon collègue Christophe lui fait remarquer que la méthode de Horner résulte dans
un calcul plus efficace. Il s'agit d'un réarrangement des termes qui reduit notamment
le nombre de multiplications. Le voici. Les deux courbes se recouvrent, donc les
résultats sont identiques.
** Floating-point arithmetic
file:../assets/img/polynome3.svg
#+begin_src python :results output :exports both
def simple(x):
return (x-1.)**9
# trop facile!
#+end_src
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Une analyse un peu plus approfondie montre que notre polynôme a une seule racine
à x=1, ce qui nous permet d'en simplifier le calcul. Nous avons maintenant
trois courbes qui se recouvrent. Tout va bien !
** Floating-point arithmetic
file:../assets/img/polynome3-4.svg
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Mais regardons la région autour de x=1 de plus près...
** Floating-point arithmetic
file:../assets/img/polynome4.svg
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Ça a l'air un peu bizarre. Et les trois courbes ne sont enfin pas identiques,
juste proches. Qu'est-ce qui se passe ?
** Rounding
#+LaTeX: \def\round{\texttt{arrondi}}
- Every operation includes implicit rounding.
- a+b is actually \round(a+b).
- Unfortunately:
#+BEGIN_CENTER
\small
\round(\round(a+b)+c) $\ne$ \round(a+\round(b+c)).
#+END_CENTER
- Operation order therefore matters.
*For a reproducible computation, operation order must be preserved!!!*
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Le résultat d'une opération arithmétique sur des flottant n'est en général pas
représentable par un autre flottant. On applique une opération d'arrondi qui
remplace le résultat exact avec une valeur proche qui est représentable.
A cause de l'arrondi, les règles habituelles de l'arithmétique ne sont plus
applicables à l'identique. On perd notamment l'associativité de l'addition et
de la multiplication.
En changeant l'ordre des opérations, on peut donc changer le résultat !
** How to explain it to my compiler?
To speed up computations, compilers may change operation order, and thus results.
Two options for computing reproducibly:
- Insist on the preservation of operation order,
- if the language permits it.
- Example: Module `ieee_arithmetic` in Fortran 2003
- Make compilation reproducible:
- Record the precise compiler version
- Record all compilation options
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Ceci devient un obstacle à la reproductibilité à cause des
optimisations appliquées par les compilateurs pour accélérer le
calcul. Celle-ci changent souvent l'ordre des opérations et donc le
résultat.
Pour rendre un calcul reproductible, il y a deux
approches. Premièrement, on peut dire à son compilateur de ne pas
toucher à l'ordre des opérations, idéalement dans le code source du
logiciel. Ceci est possible par exemple dans le langage Fortran
2003.
L'autre approche est de rendre la compilation elle-même
reproductible en notant la version précise du compilateur utilisé,
ainsi que toutes les options de compilation. Idéalement, il faut
alors archiver le compilateur avec le logiciel de calcul.
** Parallel computation
- Goal: get results sooner
\to Minimize communications between processosrs
\to Adapt data distribution
\to \dots hence the operation order $\frowny$
- Consequence: results depends on the number of processors!
*Minimizing the impact of parallelism is an active research topic.*
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Un autre obstacle à la reproductibilité résulte du calcul parallèle.
Celui-ci a comme seul objectif une exécution plus rapide. Pour y arriver,
il faut minimiser la communication entre les processeurs en adaptant
la répartition des données. Ceci implique d'adapter l'ordre des opérations,
car chaque processeur traite d'abord ses données locales avant d'entrer en
communication avec les autres processeurs.
La conséquence est que le résultat du calcul change avec le nombre
de processeurs utilisés.
On peut tenter d'écrire le logiciel tel que l'impact de cette variation
soit minimisé. Mais il n'y a pour l'instant aucune technique éprouvée
pour y arriver. Ceci reste un sujet de recherche.
** Parallel computation: example
file:../assets/img/gouttedo1.png
Source: Rafife Nheili, PhD. Thesis, University of Perpignan, 2016
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Regardons un simple exemple: la simulation des vagues causées dans
un bassin carré d'eau par une goutte qui tombe au milieu. A gauche,
la simulation exécutée sur un seul processeur. A droite, le résultat
d'un calcul sur quatre proecesseurs, ou les points qui diffèrent
sont colorés en gris.
** Parallel computation: example
file:../assets/img/gouttedo2.png
Source: Rafife Nheili, PhD. Thesis, University of Perpignan, 2016
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Un pas de temps plus loin, le nombre de points à résultat différent
a nettement augmenté. Il continuera a augmenter au cours de la
simulation, jusqu'à ce qu'il n'y a plus aucun point pour lequel le
résultat restera identique.
** Computing platforms
- Computing platform: hardware + infrastructure software
- Computation = platform + software + data
- The platform defines the interpretation of the software.
- Platform and software define the interpretation of the data.
- Other platform-defined aspects:
- integer representation (16/32/64 bits)
- error handling
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Les obstacles à la reproductibilité dûs à l'arithmétique à virgule flottante
sont un cas spécial important de la dépendance des plateformes. Un logiciel
est écrit dans un langage de programmation, mais l'interprétation précise de
ce langage est définie par la plateforme de calcul utilisé. Celle-ci consiste
du matériel, notamment du processeur, et de l'infrastructure logiciel:
système d'exploitation, compilateurs, etc.
Un calcul est défini par trois ingrédients: la plateforme, le logiciel, et les
données traitées. La plateforme définit comment est interprété le logiciel,
et les deux ensembles définissent comment sont interprétées les donées.
L'arithmétique à virgule flottante est interprétée différemment par les différentes
plateformes de calcul populaires aujourd'hui, mais ce n'est pas le seul point
de divergence. Dans certains langage comme le C ou le Fortran, les entiers sont
aussi concernés car les plateformes leur attribuent des tailles et donc des
intervalles de valeurs différentes. Enfin, les erreurs de calcul, comme par
exemple la division par zéro, ne sont pas gérées de la ême façon par toutes les
plateformes.
** Random numbers
- Used to simulate stochastic processes.
- In practice: *pseudo-* random numbers.
- Series of numbers that *appear* to be random...
- ... but are generated by a deterministic algorithm.
** Pseudo-random number generators
#+LaTeX: \vspace{1cm}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-1.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-2.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-3.svg}}
#+LaTeX: \only<+>{\includesvg[scale=.45]{../assets/img/nombres-aleatoires-4.svg}}
#+LaTeX: \vspace{10cm}
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
On part d'un état initial appelé "graine" (typiquement un entier).
Pour générer un nombre, on applique une transformation à cet état,
puis on calcule le nombre comme fonction de cet état.
On repète autant que nécessaire.
** Reproducibility in theory
- Principle: same seed + same algorithm → same series
- The seed is often chosen as a function of time
- It must be defined in the application code
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
En principe, il suffit d'utiliser la même graine et le même algorithme pour
toujours avoir la même suite de nombres.
L'algorithme fait partie d'une librairie, dont il faut noter la version
utilisée. Les librairie de nombres aléatoires choisissent souvent la graine
comme fonction de l'heure, pour donner une apparence "plus aléatoire".
Mais pour la reproductibilité, il faut définir la graine dans le code
d'application.
** Reproductibility in practice
- Same seed + same algorithm → same series: \newline
not obvious with floating-point arithmetic!
- A simple trick to permit verification: \newline
test the first values of the series.
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
En pratique, il n'est pas si facile d'obtenir une suite identique, même avec
la même version de la même librairie, à cause de la variation dans l'arithmétique
à virgule flottante.
Un astuce simple est de tester quelques valeurs du début de la suite. Si elle ne
sont pas identiques, on sait que la suite a changé.
** Example: the Python language
#+begin_src python :results output :exports both
import random
random.seed(123)
for i in range(5):
print(random.random())
#+end_src
#+LaTeX: \scriptsize
#+RESULTS:
: 0.0523635988509
: 0.0871866775226
: 0.40724176367
: 0.107700234938
: 0.901198877952
#+LaTeX: \vfill
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Voici l'application de cet astuce en langage Python. On commence par
définir la graine et d'afficher les premières valeurs de la suit de
nombres pseudo-aléatoires.
** Example: the Python language
#+begin_src python :results output :exports both
import random
random.seed(123)
assert random.random() == 0.052363598850944326
assert random.random() == 0.08718667752263232
assert random.random() == 0.4072417636703983
#+end_src
#+RESULTS:
#+LaTeX: \vfill
*** Notes
:PROPERTIES:
:BEAMER_ENV: note
:END:
Puis on modifie le code en remplaçant l'affichage des valeurs par des
comparaisons aux valeurs précédemment affichées. En cas de divergence,
le programme s'arrête avec un message d'erreur.
** Take-home message
- The results of a numerical computation depend on
- the software
- the input data
- the computing platform: hardware, compilers, ...
- Platform influence is important for floating-point arithmetic.
Record all parameters on which your results may depend:
- compiler version, compilation options
- hardware (processor type, GPU, ...)
- number of processors
- When using a random number generator, define your own seed and
verify the first elements of the series.
* M4-S4: Conclusion
** The Rough Road to Real-Life Reproducible Research :noexport:
1. Data Hell
2. Software Hell
3. Numerics Hell
4. *Conclusion*
** The take-home message of the MOOC
*A major concern*
- Scientific method
- Inspectability and reusability
*Tools exist*
- Computational documents and workflows, version control and archives,
software environments, continuous integration, ...
- These tools evolve constantly
- Choose those that are best adapted to your context
- Find a compromise between modern and durable tools
*Use in practice, don't get discouraged!*
- Takes notes rigorously
- Make information useable and accessible
- Improve in small steps
* Emacs Setup :noexport:
This document has local variables in its postembule, which should
allow Org-mode (9) to work seamlessly without any setup. If you're
uncomfortable using such variables, you can safely ignore them at
startup. Exporting may require that you copy them in your .emacs.
# Local Variables:
# eval: (add-to-list 'org-latex-packages-alist '("" "minted"))
# eval: (setq org-latex-listings 'minted)
# eval: (setq org-latex-minted-options '(("style" "Tango") ("bgcolor" "Moccasin") ("frame" "lines") ("linenos" "true") ("fontsize" "\\scriptsize")))
# eval: (setq org-latex-pdf-process '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
# End:
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