diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e6ffe3a48ab1bae6a2bc1da089924c554c5f03ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*~ +*.vrb +*.aux +*.log +*.nav +*.out +*.snm +*.toc +*.tex +_minted* +svg-inkscape* +*-svg.pdf \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 638b8e7ef502e275bdc05c44e807a972ba34bb01..0000000000000000000000000000000000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,12 +0,0 @@ -image: alpine:latest - -pages: - stage: deploy - script: - - echo 'Nothin to do ...' - artifacts: - paths: - - public - only: - - master - diff --git a/module1/slides/C028AL_slides_module1-en-gz.pdf b/module1/slides/C028AL_slides_module1-en-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..74eec209e28eb817d14c5490689185a5d45c916c Binary files /dev/null and b/module1/slides/C028AL_slides_module1-en-gz.pdf differ diff --git a/module1/slides/C028AL_slides_module1-fr-gz.pdf b/module1/slides/C028AL_slides_module1-fr-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..98a2645fb9117a5ad55ecdbf3938f70d0c691d5c Binary files /dev/null and b/module1/slides/C028AL_slides_module1-fr-gz.pdf differ diff --git a/module1/slides/Makefile b/module1/slides/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a244a361590bbd2c1ee3e5adf53f6a9b7846058a --- /dev/null +++ b/module1/slides/Makefile @@ -0,0 +1,28 @@ +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' $@ diff --git a/module1/slides/diapos_module1.org b/module1/slides/diapos_module1.org new file mode 100644 index 0000000000000000000000000000000000000000..c6fe70d0f87d1fd5396ba18cfc65243247759371 --- /dev/null +++ b/module1/slides/diapos_module1.org @@ -0,0 +1,1421 @@ +#+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}\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: + +[[file: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: + +[[file: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 + +** +[[file: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: + +[[file: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 +[[file: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. + +[[file: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: + +[[file: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 + +** +[[file: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 + +** +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + +[[file: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: + + +[[file: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: + +[[file: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: + +[[file: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 +[[file: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: + +[[file: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: + +[[file: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 + +** +[[file: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 + +** +[[file: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: + +[[file: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 + +** +[[file: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 + +** +[[file: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 + +** +[[file: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:img/recherche-avec-editeur.png]] + +** S'y retrouver dans un cahier + :PROPERTIES: + :CUSTOM_ID: sy-retrouver-dans-un-cahier + :END: + +[[file:img/IndexCahierLocke.jpg]] + +** S'y retrouver dans des « fiches » + :PROPERTIES: + :CUSTOM_ID: sy-retrouver-dans-des-fiches + :END: + +[[file: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:img/Trouver_un_mot_avec_DocFetcher.png]] + +** Le problème de l'« abondance » + :PROPERTIES: + :CUSTOM_ID: le-problème-de-labondance + :END: + +[[file: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: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: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: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: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: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 » diff --git a/module1/slides/img/A_France_Pingouins.jpg b/module1/slides/img/A_France_Pingouins.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7466bc3ac876fa619655fbed598258e5a8ebec28 Binary files /dev/null and b/module1/slides/img/A_France_Pingouins.jpg differ diff --git a/module1/slides/img/Ajout_etiquette_avec_Markdown.png b/module1/slides/img/Ajout_etiquette_avec_Markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..df9ab041664a60d40a6237a6a8a12fdf60c615c2 Binary files /dev/null and b/module1/slides/img/Ajout_etiquette_avec_Markdown.png differ diff --git a/module1/slides/img/Anatole_France_young_years.jpg b/module1/slides/img/Anatole_France_young_years.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af8e340cb6525f16acdf3014921f6edece90f1b1 Binary files /dev/null and b/module1/slides/img/Anatole_France_young_years.jpg differ diff --git a/module1/slides/img/Dokuwiki_notes_pour_CLOM.png b/module1/slides/img/Dokuwiki_notes_pour_CLOM.png new file mode 100644 index 0000000000000000000000000000000000000000..78e2ca8e63765b0520dcdb65c7dcef34faf8bf0f Binary files /dev/null and b/module1/slides/img/Dokuwiki_notes_pour_CLOM.png differ diff --git a/module1/slides/img/Dokuwiki_notes_pour_CLOM_diff.png b/module1/slides/img/Dokuwiki_notes_pour_CLOM_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0225af44cd5a0fb2dcf808550551ee60e6755b Binary files /dev/null and b/module1/slides/img/Dokuwiki_notes_pour_CLOM_diff.png differ diff --git a/module1/slides/img/Dokuwiki_notes_pour_CLOM_historique2.png b/module1/slides/img/Dokuwiki_notes_pour_CLOM_historique2.png new file mode 100644 index 0000000000000000000000000000000000000000..70d40f276da10cc003634a557ac89582f8ad43b7 Binary files /dev/null and b/module1/slides/img/Dokuwiki_notes_pour_CLOM_historique2.png differ diff --git a/module1/slides/img/Eusebe_final.jpg b/module1/slides/img/Eusebe_final.jpg new file mode 100644 index 0000000000000000000000000000000000000000..388508ba77a0aa02369dff14d488d6e19f898c25 Binary files /dev/null and b/module1/slides/img/Eusebe_final.jpg differ diff --git a/module1/slides/img/Eusebius_final.jpg b/module1/slides/img/Eusebius_final.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95965725acbc99b7ae83087e8a532fd5cfb6bb7b Binary files /dev/null and b/module1/slides/img/Eusebius_final.jpg differ diff --git a/module1/slides/img/Evangeliaire_Lorsch.jpg b/module1/slides/img/Evangeliaire_Lorsch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec107e8deead9b3b526a171391c2806ee221715f Binary files /dev/null and b/module1/slides/img/Evangeliaire_Lorsch.jpg differ diff --git a/module1/slides/img/Exemple_Fichier_Binaire.png b/module1/slides/img/Exemple_Fichier_Binaire.png new file mode 100644 index 0000000000000000000000000000000000000000..ff310ec7bd096caffaf81921cd9dc7e89fed23aa Binary files /dev/null and b/module1/slides/img/Exemple_Fichier_Binaire.png differ diff --git a/module1/slides/img/Exemple_Fichier_Texte.png b/module1/slides/img/Exemple_Fichier_Texte.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8b8768dc8a1bbfc0a124fd8d71633ac2269dc0 Binary files /dev/null and b/module1/slides/img/Exemple_Fichier_Texte.png differ diff --git a/module1/slides/img/Exemple_Markdown.png b/module1/slides/img/Exemple_Markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..0f37be845388cb583500d31382c74946d88cb2b0 Binary files /dev/null and b/module1/slides/img/Exemple_Markdown.png differ diff --git a/module1/slides/img/Exemple_Rendu_HTML.png b/module1/slides/img/Exemple_Rendu_HTML.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ddebc93ea517da20c3db3ac4c5663b89e0bef3 Binary files /dev/null and b/module1/slides/img/Exemple_Rendu_HTML.png differ diff --git a/module1/slides/img/Exemple_Source_HTML.png b/module1/slides/img/Exemple_Source_HTML.png new file mode 100644 index 0000000000000000000000000000000000000000..e5430cf882dbcadfcc7a70ccbf03f7a1775bbe8f Binary files /dev/null and b/module1/slides/img/Exemple_Source_HTML.png differ diff --git a/module1/slides/img/Figure_W1_S2_1.jpg b/module1/slides/img/Figure_W1_S2_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bbf32ccb160cf75eeb66100b62632d66e9fbbc5 Binary files /dev/null and b/module1/slides/img/Figure_W1_S2_1.jpg differ diff --git a/module1/slides/img/Figure_W1_S2_3.jpg b/module1/slides/img/Figure_W1_S2_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9e32b7c93f24140d8bc8f0df52c1c0665a938be Binary files /dev/null and b/module1/slides/img/Figure_W1_S2_3.jpg differ diff --git a/module1/slides/img/Figure_W1_S2_6.jpg b/module1/slides/img/Figure_W1_S2_6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5be1a2bfadf8eaa244c4d39e05176e1590b6df5 Binary files /dev/null and b/module1/slides/img/Figure_W1_S2_6.jpg differ diff --git a/module1/slides/img/Fol._10v-11r_Egmond_Gospels.jpg b/module1/slides/img/Fol._10v-11r_Egmond_Gospels.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a79d74ab9e78baff81c9ddc8d4fe6eea1bda20ac Binary files /dev/null and b/module1/slides/img/Fol._10v-11r_Egmond_Gospels.jpg differ diff --git a/module1/slides/img/GalileoManuscriptCoupe.png b/module1/slides/img/GalileoManuscriptCoupe.png new file mode 100644 index 0000000000000000000000000000000000000000..e172a95437ccb9b4b1ca9f20acde4824c97dec48 Binary files /dev/null and b/module1/slides/img/GalileoManuscriptCoupe.png differ diff --git a/module1/slides/img/GalileoManuscriptZoom.png b/module1/slides/img/GalileoManuscriptZoom.png new file mode 100644 index 0000000000000000000000000000000000000000..97d70b0bb66ab0277b35b5a9ffe070836c0d42ea Binary files /dev/null and b/module1/slides/img/GalileoManuscriptZoom.png differ diff --git a/module1/slides/img/GitLab_Commits.png b/module1/slides/img/GitLab_Commits.png new file mode 100644 index 0000000000000000000000000000000000000000..80ef7b3c1fb5c4e2a687be0ff8d4720b4703dcae Binary files /dev/null and b/module1/slides/img/GitLab_Commits.png differ diff --git a/module1/slides/img/GitLab_Diff.png b/module1/slides/img/GitLab_Diff.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d10089b0ca883af372854b7bbcecd890d8a4b5 Binary files /dev/null and b/module1/slides/img/GitLab_Diff.png differ diff --git a/module1/slides/img/GitLab_Formating.png b/module1/slides/img/GitLab_Formating.png new file mode 100644 index 0000000000000000000000000000000000000000..9160d6a88418e38e3da43ffb40abae52095d6479 Binary files /dev/null and b/module1/slides/img/GitLab_Formating.png differ diff --git a/module1/slides/img/Git_diff_mixte.png b/module1/slides/img/Git_diff_mixte.png new file mode 100644 index 0000000000000000000000000000000000000000..0349e7cc6380c601517ed431b18a2876421c3726 Binary files /dev/null and b/module1/slides/img/Git_diff_mixte.png differ diff --git a/module1/slides/img/Github_Module1.png b/module1/slides/img/Github_Module1.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae18ad79fb92e33c2ee80cdaa370e5d4f56637e Binary files /dev/null and b/module1/slides/img/Github_Module1.png differ diff --git a/module1/slides/img/Github_Module1_diff.png b/module1/slides/img/Github_Module1_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..826685787c8b00f2d5a28e3981fa835cf29bf11a Binary files /dev/null and b/module1/slides/img/Github_Module1_diff.png differ diff --git a/module1/slides/img/Github_Module1_historique.png b/module1/slides/img/Github_Module1_historique.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a272f17d68172ecacf34ed10137b255001175c Binary files /dev/null and b/module1/slides/img/Github_Module1_historique.png differ diff --git a/module1/slides/img/HTML_opened_with_gedit.png b/module1/slides/img/HTML_opened_with_gedit.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd2f551eab34c6a26c880e57f4752de65546640 Binary files /dev/null and b/module1/slides/img/HTML_opened_with_gedit.png differ diff --git a/module1/slides/img/HTML_viewed_with_qutebrowser.png b/module1/slides/img/HTML_viewed_with_qutebrowser.png new file mode 100644 index 0000000000000000000000000000000000000000..aff8db184887d41ecc0cc5190dbd130bec7b2967 Binary files /dev/null and b/module1/slides/img/HTML_viewed_with_qutebrowser.png differ diff --git a/module1/slides/img/IndexCahierLocke.jpg b/module1/slides/img/IndexCahierLocke.jpg new file mode 100644 index 0000000000000000000000000000000000000000..810b373da4ff5a79741a9759eff839b595c5704c Binary files /dev/null and b/module1/slides/img/IndexCahierLocke.jpg differ diff --git a/module1/slides/img/LibreOffice_notes_pour_CLOM_diff_origine.png b/module1/slides/img/LibreOffice_notes_pour_CLOM_diff_origine.png new file mode 100644 index 0000000000000000000000000000000000000000..033a5a2e5191daabb709de519f78f4bd64d2a92e Binary files /dev/null and b/module1/slides/img/LibreOffice_notes_pour_CLOM_diff_origine.png differ diff --git a/module1/slides/img/LivredebordpenduickV.jpg b/module1/slides/img/LivredebordpenduickV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08a6a4ea9b1dbb8774e55dc7d715601d982b337e Binary files /dev/null and b/module1/slides/img/LivredebordpenduickV.jpg differ diff --git a/module1/slides/img/LivredebordpenduickVzoom1.png b/module1/slides/img/LivredebordpenduickVzoom1.png new file mode 100644 index 0000000000000000000000000000000000000000..8f18e8a4f7ae0045c749a8b4f601c0637efdd136 Binary files /dev/null and b/module1/slides/img/LivredebordpenduickVzoom1.png differ diff --git a/module1/slides/img/LivredebordpenduickVzoom2.png b/module1/slides/img/LivredebordpenduickVzoom2.png new file mode 100644 index 0000000000000000000000000000000000000000..b115195128a5573a0b40c5374a96e8e500c2f0a8 Binary files /dev/null and b/module1/slides/img/LivredebordpenduickVzoom2.png differ diff --git a/module1/slides/img/ManuscritAnnoteEtCoupe.png b/module1/slides/img/ManuscritAnnoteEtCoupe.png new file mode 100644 index 0000000000000000000000000000000000000000..ba07c893c192f44a9af2a2de0fc3373b75f50328 Binary files /dev/null and b/module1/slides/img/ManuscritAnnoteEtCoupe.png differ diff --git a/module1/slides/img/Markdown_syntax.png b/module1/slides/img/Markdown_syntax.png new file mode 100644 index 0000000000000000000000000000000000000000..7f14643267ba53aa15878f5480ebd68de5d8edd0 Binary files /dev/null and b/module1/slides/img/Markdown_syntax.png differ diff --git a/module1/slides/img/Metadonne_fichier_index.jpg b/module1/slides/img/Metadonne_fichier_index.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5ee1863cfe212999a7ae49e7d377cacee65c105 Binary files /dev/null and b/module1/slides/img/Metadonne_fichier_index.jpg differ diff --git a/module1/slides/img/Metadonne_fichier_index2.jpg b/module1/slides/img/Metadonne_fichier_index2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4420d195b0cc71e463925767671ebcb65e8b0eeb Binary files /dev/null and b/module1/slides/img/Metadonne_fichier_index2.jpg differ diff --git a/module1/slides/img/MethodeLocke1.jpg b/module1/slides/img/MethodeLocke1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0b2fc5b32fd3eb7fa8b8995f0742b0981c19600 Binary files /dev/null and b/module1/slides/img/MethodeLocke1.jpg differ diff --git a/module1/slides/img/MethodeLocke2.jpg b/module1/slides/img/MethodeLocke2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70e892f4823cdabca746f745acae4b6b01e3fdf4 Binary files /dev/null and b/module1/slides/img/MethodeLocke2.jpg differ diff --git a/module1/slides/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png b/module1/slides/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8cf1822d85965a08e65cc4e95861cae1476bdf Binary files /dev/null and b/module1/slides/img/Pierre_Ambroise_Choderlos_de_Laclos_Les_Liaisons_dangereuses.png differ diff --git a/module1/slides/img/Placcius_cabinet_TabIV.png b/module1/slides/img/Placcius_cabinet_TabIV.png new file mode 100644 index 0000000000000000000000000000000000000000..37f21d101a854b0e90a2cb81114d6e55956f16fc Binary files /dev/null and b/module1/slides/img/Placcius_cabinet_TabIV.png differ diff --git a/module1/slides/img/Placcius_cabinet_TabIVzoom.png b/module1/slides/img/Placcius_cabinet_TabIVzoom.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd2640a3be1ce8df0e08c4cda73e4839e5cdeb4 Binary files /dev/null and b/module1/slides/img/Placcius_cabinet_TabIVzoom.png differ diff --git a/module1/slides/img/Trouver_calcium_avec_DocFetcher.png b/module1/slides/img/Trouver_calcium_avec_DocFetcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f6503cb24c3b466acb6eeb599408ae0359a054 Binary files /dev/null and b/module1/slides/img/Trouver_calcium_avec_DocFetcher.png differ diff --git a/module1/slides/img/Trouver_etiquette_avec_DocFetcher.png b/module1/slides/img/Trouver_etiquette_avec_DocFetcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a47c7788d4b25982b3364f49eac3aa9df5d4c2ce Binary files /dev/null and b/module1/slides/img/Trouver_etiquette_avec_DocFetcher.png differ diff --git a/module1/slides/img/Trouver_etiquette_avec_DocFetcher2.jpg b/module1/slides/img/Trouver_etiquette_avec_DocFetcher2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..135ecf3d9d380d0cce6fe29244703cca2bc3bdbf Binary files /dev/null and b/module1/slides/img/Trouver_etiquette_avec_DocFetcher2.jpg differ diff --git a/module1/slides/img/Trouver_un_mot_avec_DocFetcher.png b/module1/slides/img/Trouver_un_mot_avec_DocFetcher.png new file mode 100644 index 0000000000000000000000000000000000000000..00f2fdffbf1e373c6eb2c3d0a4da508d800d7ec3 Binary files /dev/null and b/module1/slides/img/Trouver_un_mot_avec_DocFetcher.png differ diff --git a/module1/slides/img/pdf_opened_with_gedit.png b/module1/slides/img/pdf_opened_with_gedit.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d339fdb1565f9cd3a1e67cb8118d5196f5e84d Binary files /dev/null and b/module1/slides/img/pdf_opened_with_gedit.png differ diff --git a/module1/slides/img/recherche-avec-editeur.png b/module1/slides/img/recherche-avec-editeur.png new file mode 100644 index 0000000000000000000000000000000000000000..6b04e295fd99f2c80c53d96d39b8390f371145df Binary files /dev/null and b/module1/slides/img/recherche-avec-editeur.png differ diff --git a/module1/slides/img/source_file_opened_with_gedit.png b/module1/slides/img/source_file_opened_with_gedit.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba81cfb1b780e354385bdf7780519a759fed36e Binary files /dev/null and b/module1/slides/img/source_file_opened_with_gedit.png differ diff --git a/module1/slides/img/tabula_stilus.jpg b/module1/slides/img/tabula_stilus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53fa15edf793bb241a79f0e7edb200bb0f6fce57 Binary files /dev/null and b/module1/slides/img/tabula_stilus.jpg differ diff --git a/module1/slides/misc/Etiquette_avec_Markdown.md b/module1/slides/misc/Etiquette_avec_Markdown.md new file mode 100644 index 0000000000000000000000000000000000000000..fdb27ac9ec9604e7be487ef0abcb38ca651198e0 --- /dev/null +++ b/module1/slides/misc/Etiquette_avec_Markdown.md @@ -0,0 +1,10 @@ +# 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 : ``. Nous pouvons ainsi étiqueter les différents éléments d'une liste : + +* le premier élément ; +* le deuxième élément. + + Et voilà ! \ No newline at end of file diff --git a/module1/slides/misc/Notes_module1.org b/module1/slides/misc/Notes_module1.org new file mode 100644 index 0000000000000000000000000000000000000000..4224a206000c368b25180741cdabc2dc3c59b70b --- /dev/null +++ b/module1/slides/misc/Notes_module1.org @@ -0,0 +1,342 @@ +#+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 + : " " U202F + # Lettres greques + : "α" Greek_alpha + : "Α" Greek_ALPHA + : "β" Greek_beta + : "Β" Greek_BETA + : "γ" Greek_gamma + : "Γ" Greek_GAMMA + : "δ" Greek_delta + : "Δ" Greek_DELTA + : "ε" Greek_epsilon + : "Ε" Greek_EPSILON + : "ζ" Greek_zeta + : "Ζ" Greek_ZETA + : "η" Greek_eta +#+END_EXAMPLE + +J'ai en plus redéfini la «  » 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 == est considéré comme un commentaire et ne figure pas dans les sorties =html= ou =pdf= des notes. Nous pouvons ainsi utiliser : + +#+BEGIN_EXAMPLE + +#+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. + + diff --git a/module1/slides/misc/PITCHME.md b/module1/slides/misc/PITCHME.md new file mode 100644 index 0000000000000000000000000000000000000000..b93a8d77dbbde1f3ac56adab22b94949306b603e --- /dev/null +++ b/module1/slides/misc/PITCHME.md @@ -0,0 +1,849 @@ +--- +# C028AL-W1-S0 + + + ++++ +## Les grandes lignes du module : 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: +__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 + + + ++++ +## 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 + + + +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 + + + +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. ++++ + + + +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 + + + +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. + ++++ + + + +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. + + + +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 + + + +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. ++++ + + + +Note: +Tabarly y note les événements « marquant ». Par exemple, le 21 mars à 23 h, le foc ballon est déchiré. ++++ + + + +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). + ++++ +## Quel(s) support(s) matériel(s) pour les notes ? + +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 : + +- 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 ? + +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 + + ++++ +## 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 + + + +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 + + + +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_ + + + +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 + + + +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 + + + +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 + + + +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 » + + + +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 + + + +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) + + +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 + + ++++ +## 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 + + + +Un fichier `PDF` ouvert avec `gedit` + ++++ +## Un fichier « texte » ouvert avec un éditeur de texte + + + ++++ +## 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 +
+ + +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 + + + +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` + + + +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 + + ++++ +## 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 + + + +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 + + + +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 » + + + +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. + ++++ + + + +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... ++++ + + + +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 + + + +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... + ++++ + + + +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... + ++++ + + + +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... + ++++ + + + +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 + + ++++ +## 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 + + + ++++ +## S'y retrouver dans un cahier + + + ++++ +## S'y retrouver dans des « fiches » + + + ++++ +## Problèmes, limitations, solutions ? + +
+ +- Un seul document + +
+ +- Indexation de fichiers numériques + +
+ +- Étiquetage de fichiers numériques au sens large + +
+ +- 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`) + + + + ++++ +## Le problème de l'« abondance »                                  + + + ++++ +## Ajouter des étiquettes ou mots clés dans un fichier texte (`Markdown`) + + + ++++ +## Trouver une étiquette avec un moteur de recherche de bureau (`DocFetcher`) + + + ++++ +## Les fichiers images contiennent des métadonnées + + + ++++ +## Les métadonnées peuvent être modifiées                  + + + ++++ +## Les moteurs de recherche de bureau peuvent lire les métadonnées + + + + ++++ +## 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 » diff --git a/module1/slides/misc/description_sequences_module1.org b/module1/slides/misc/description_sequences_module1.org new file mode 100644 index 0000000000000000000000000000000000000000..2adf0e92fc3b952f87ffbb8bea550aee7d4696ab --- /dev/null +++ b/module1/slides/misc/description_sequences_module1.org @@ -0,0 +1,34 @@ +#+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. + diff --git a/module1/slides/slides_module1.org b/module1/slides/slides_module1.org new file mode 100644 index 0000000000000000000000000000000000000000..7f5bce239e793101bc72fe0bc8dd0ad85b5f1625 --- /dev/null +++ b/module1/slides/slides_module1.org @@ -0,0 +1,1057 @@ +# -*- 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}\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}\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 + +[[file: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 + +[[file: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). + +** +[[file: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 + +[[file: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 +[[file: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 +[[file: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 + +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file: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 +[[file:img/GitLab_Diff.png]] + +#+BEGIN_EXPORT latex +\vspace{0.25cm} +#+END_EXPORT +Modifications are easily visualized... + +** +#+ATTR_LATEX: :width 1.0\textwidth +[[file: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 +[[file:img/recherche-avec-editeur.png]] + +** Finding one's way in a notebook + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/IndexCahierLocke.jpg]] + +** Finding one's way in a cards collection + +#+ATTR_LATEX: :width 1.0\textwidth +[[file: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 +[[file:img/Trouver_un_mot_avec_DocFetcher.png]] + +** A problem: overabundance + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/Trouver_calcium_avec_DocFetcher.png]] + +** Adding tags / keywords in a text file (=Markdown=) + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/Ajout_etiquette_avec_Markdown.png]] + +** Finding a tag with a desktop search application (=DocFetcher=) + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/Trouver_etiquette_avec_DocFetcher.png]] + + +** Image files contain metadata + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/Metadonne_fichier_index.jpg]] + +** Metadata can be set + +#+ATTR_LATEX: :width 1.0\textwidth +[[file:img/Metadonne_fichier_index2.jpg]] + +** Desktop search applications can read metadata + +#+ATTR_LATEX: :width 1.0\textwidth +[[file: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". diff --git a/module2/ressources/emacs_orgmode.md b/module2/ressources/emacs_orgmode.md new file mode 100644 index 0000000000000000000000000000000000000000..3d0a695b9c83040181742c076ee3d65deac940ba --- /dev/null +++ b/module2/ressources/emacs_orgmode.md @@ -0,0 +1,467 @@ +**Disclaimer:** The two sections *A simple "reproducible research" emacs +configuration* and *A stub of replicable article* explain how to set up +emacs/org-mode for this MOOC. These are very important sections in the +context of this MOOC. **These sections are illustrated in two out of the +[three video tutorials of this +sequence](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4), +and** **which you really should follow carefully**. **Otherwise, you may +have trouble doing the exercises later on**. Likewise, I strongly +encourage you to watch the ["emacs and git" video tutorial available at +the same +place](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4). + +The next section provides information on how to install emacs. + +Table of Contents +================= + +- [Installing emacs, org-mode, ess, and + auctex.](#installing-emacs-org-mode-ess-and-auctex) + - [Linux (Debian, Ubuntu)](#linux-debian-ubuntu) + - [macOS](#macos) + - [Windows](#windows) + - [All platforms: pretty code in HTML + export](#all-platforms-pretty-code-in-html-export) +- [A simple "*reproducible research*" emacs configuration + ](#a-simple-reproducible-research-emacs-configuration-) + - [Step 0: Backup and download our + configuration](#step-0-backup-and-download-our-configuration) + - [Step 1: Prepare your journal](#step-1-prepare-your-journal) + - [Step 2: Set up Emacs + configuration](#step-2-set-up-emacs-configuration) + - [Step 3: Adapt the configuration to your specific needs if + required](#step-3-adapt-the-configuration-to-your-specific-needs-if-required) + - [Step 4: Check whether the installation is working or + not](#step-4-check-whether-the-installation-is-working-or-not) + - [Step 5: Open and play with your + journal:](#step-5-open-and-play-with-your-journal) +- [A stub of a replicable article](#a-stub-of-a-replicable-article) +- [Emacs tips and tricks](#emacs-tips-and-tricks) + - [Cheat-sheets](#cheat-sheets) + - [Video tutorials](#video-tutorials) + - [Additional useful emacs + packages](#additional-useful-emacs-packages) + - [Other resources](#other-resources) + +Installing emacs, org-mode, ess, and auctex. +============================================ + +Linux (Debian, Ubuntu) +---------------------- + +We provide here only instructions for Debian-based distributions. Feel +free to contribute to this document to provide up-to-date information +for other distributions (e.g.n redhat, fedora). + +Today, the stable versions of the most common distributions provide +recent enough versions of emacs and org-mode: + +- Debian (stretch) ships with [emacs + 25.1](https://packages.debian.org/stretch/emacs25) and [org-mode + 9.0.3](https://packages.debian.org/stretch/org-mode) +- Ubuntu (bionic 18.04) ships with [emacs + 25.2](https://packages.ubuntu.com/bionic/emacs25) and [org-mode + 9.1.6](https://packages.ubuntu.com/bionic/org-mode) +- Ubuntu (artful 17.04) ships with [emacs + 25.2](https://packages.ubuntu.com/artful/emacs25) and [org-mode + 9.0.9](https://packages.ubuntu.com/artful/org-mode) + +If your distribution is older than this, well, it may be a good time for +upgrading... + +Simply run (as root): + +``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} +apt-get update ; apt-get install emacs25 org-mode ess r-base auctex +``` + +Then make sure you have a sufficiently recent version of emacs. + +``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} +emacs --version 2>&1 | head -n 1 +``` + +``` {.example} +GNU Emacs 25.2.2 +``` + +Likewise, you'll want to check you have a recent version of org-mode: + +``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} +emacs -batch --funcall "org-version" 2>&1 | grep version +``` + +``` {.example} +Org mode version 9.1.11 (9.1.11-dist @ /usr/share/emacs/25.2/site-lisp/elpa/org-9.1.11/) +``` + +The version numbers you get will depend on the distribution you are +running. **You really want to make sure you do not rely on org-mode 8**, +which is now deprecated. + +macOS +----- + +**Note:** macOS comes with a prehistoric command-line-only version of +Emacs located at `/usr/bin/emacs`. It's best to forget about it. + +- **Option 1**: Install the `.dmg` file from [Vincent + Goulet](http://vgoulet.act.ulaval.ca/): + [](https://vigou3.gitlab.io/emacs-modified-macos/). + It ships with recent versions: + - Emacs 26.1 + - Org-mode 9.1.13 + - ESS 17.11 + + If you install this version of Emacs, or in fact any other version + of Emacs distributed as a clickable application in a `.dmg` file, + you must type the full path to the executable if you want to run + Emacs from a terminal. For example, if your clickable application is + at `/Applications/Emacs.app`, then the executable is at + `/Applications/Emacs.app/Contents/MacOS/Emacs` + +- **Option 2**: If you use [Homebrew](https://docs.brew.sh/), do the + following: + + ``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} + brew update + brew install emacs --with-cocoa + brew linkapps emacs + brew install wget + brew tap dunn/emacs + brew install auctex + brew tap brewsci/science + brew install ess + ``` + + This provides an `emacs` command for use from the command line, plus + a clickable application at `Cellar/emacs/26.1_1/Emacs.app` inside + your Homebrew directory. If you installed Homebrew at the default + location `/usr/local`, then this is + `/usr/local/Cellar/emacs/26.1_1/Emacs.app`. If you installed + Homebrew on an account with administrator privileges, you can add + + ``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} + brew linkapps emacs + ``` + + in order to make Emacs accessible directly from `/Applications`. + +Windows +------- + +Install the `.exe` file from [Vincent +Goulet](http://vgoulet.act.ulaval.ca/): +[](https://vigou3.gitlab.io/emacs-modified-windows/). +It ships with recent versions: + +- Emacs 26.1 +- Org-mode 9.1.13 +- ESS 17.11 + +### Directory naming conventions + +In the following instructions, we refer to your home directory through +the (UNIX) `~/` notation. On Windows, your home directory should be +something like `C:\Users\yourname`. Therefore, whenever we mention the +`~/org/` (resp. the `~/.emacs.d/`) directory this means we are referring +to `C:\Users\yourname\org` (resp. `C:\Users\yourname\.emacs.d\`). + +### Making R and Python available to the console + +When running a command, Windows will look for the command in the +directories indicated in the `PATH` environment variable. If none of +these directories contains the command, Windows will stop and indicate +the command does not exist. To make sure R (which may be in something +like `C:/Program Files/R/R-3.5.1/bin/x64/`) and Python (which may be in +something like `C:/Program Files/Python/Python37/`) can easily be run +from Emacs, you should thus configure the `PATH` variable accordingly. + +This requires to go through the "Environment Variable" editor as +explained +[here](http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-path-sous-windows/). + +### Installing and configuring Matplotlib (graphic python library) + +Open an DOS console and type the following command: + +``` {.shell .rundoc-block rundoc-language="shell" rundoc-results="output" rundoc-exports="both"} +python -m pip install -U matplotlib +``` + +![](emacs_orgmode_images/install_matplotlib.png) + +Then you will want to deactivate interactive plots in matplotlib. To +this end, you first need to know where the matplotlib configuration is +located. Open a python console the type the following code: + +``` {.python .rundoc-block rundoc-language="python" rundoc-results="output" rundoc-exports="both"} +import matplotlib +matplotlib.matplotlib_fname() +``` + +![](emacs_orgmode_images/matplotlib.png) + +Open the `matplotlibrc` file and modify the line starting with `backend` +to make it `backend : Agg`. + +All platforms: pretty code in HTML export +----------------------------------------- + +To have code pretty printing when exporting to HTML, you should install +the `htmlize` package, which is done by opening emacs and typing the +following command: + +``` {.example} +M-x package-install RET htmlize RET # where M-x means pressing the "Esc" key then the "x" key +``` + +A simple "*reproducible research*" emacs configuration +====================================================== + +This section is illustrated in a [video +tutorial](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4) +(/"Mise en place Emacs/Orgmode"/ in French). Watching it before +following the instructions given in this section may help. + +Emacs comes with very basic default configuration and it appears like +everyone has its own taste. You will for example find +[here](https://www.emacswiki.org/emacs/StarterKits) several default +Emacs configurations that reflect the preferences of their creators. +Likewise the configuration of Org-Mode is incredibly flexible (see for +example [the org-mode +website](https://orgmode.org/worg/org-configs/index.html) for more +references). In the context of this MOOC, we propose you a relatively +minimalist one that is rather "*reproducible research*" oriented by +adding a few org-mode specific configurations. + +Step 0: Backup and download our configuration +--------------------------------------------- + +The procedure we propose will wipe your already existing custom Emacs +configuration if you have one. **You should thus beforehand make a +backup** of `~/.emacs` and of `~/.emacs.d/init.el` (if these files +exist). + +Then download [this +archive](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/rr_org_archive.tgz) +and uncompress it. It contains the following files and we will refer to +them in the following: + +``` {.example} +rr_org/init.el +rr_org/journal.org +``` + +Alternatively, [the files you are looking for are available +here](rr_org/). + +Step 1: Prepare your journal +---------------------------- + +Create an `org/` directory in the top of your home: + +``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} +mkdir -p ~/org/ +``` + +Then copy `rr_org/journal.org` file in your `~/org/` directory. This +file will be your laboratory notebook and all the notes you will capture +with `C-c c` will go automatically go in this file. The first entry of +this notebook is populated with [many Emacs +shortcuts](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org) +that you should give a try. + +Step 2: Set up Emacs configuration +---------------------------------- + +Copy `rr_org/init.el` in your `~/.emacs.d/` directory. + +Alternatively, if you do not want to mess with your already existing +emacs configuration, you may launch emacs with this specific +configuration with the following command: `emacs -q -l rr_org/init.el`. + +Step 3: Adapt the configuration to your specific needs if required +------------------------------------------------------------------ + +There are two situations in which it might be necessary to modify +`init.el`: + +1. Your network environment forces you to use a proxy for access to Web + sites (HTTP(S) protocol). +2. You have multiple installations of Python or R on your computer, or + they are in unusual places and not fully configured. If you can run + - "python3" and "R" under Linux and macOS + - "Python" and "R" under Windows + + in a terminal without getting an error message, then you should not + have to do anything. + +If you do have to modify `init.el`, check the comments at the beginning +of the file for instructions. + +Step 4: Check whether the installation is working or not +-------------------------------------------------------- + +Open a new instance of Emacs and open a `foo.org` file. Copy the +following lines in this file: + +``` {.example} +#+begin_src shell :session foo :results output :exports both +ls -la # or dir under windows +#+end_src +``` + +Put your cursor inside this code block and execute it with the following +command: `C-c C-c` (If you are not familiar with Emacs commands, this +one means '`Ctrl + C`' twice) + +A `#+RESULTS:` block with the result of the command should appear if it +worked. + +In the video, we already have demonstrated the main features and +shortcuts of emacs/org-mode that will help you maintain a document and +benefit from literate programming. The list of features and shortcuts is +demonstrated in the [first entry of your +labbook](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org). + +Step 5: Open and play with your journal: +---------------------------------------- + +In step 1, you were told to create an journal in `~org/journal.org`. +First you probably want to make sure this file is stored in a version +control system like git. We leave it up to you to set this up but if you +have any trouble, feel free to ask on the FUN forums. + +A stub of a replicable article +============================== + +This section is illustrated in a [video +tutorial](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4) +(/"Écrire un article réplicable avec Emacs/Orgmode"/ in French). +Watching it before following the instructions given in this section may +help. + +Remember, you need a working LaTeX and R environment. If you can't open +a terminal and run the commands `R`, `pdflatex`, and `python`, you will +not be able to generate this document. When being compiled, the article +downloads the corresponding LaTeX packages so you also need to have a +working `wget` command (alternatively, it uses `curl`). Once downloaded, +you may still read the source +([article.org](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.org)) +and understand how it works though. + +Download the following +[archive](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/replicable_article.tgz), +uncompress it and simply `make` to generate the article. You should then +be able to open the [resulting +article](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.pdf). +This is summarized in the following command: + +``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} +wget --no-check-certificate -O replicable_article.tgz https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/replicable_article.tgz +tar zxf replicable_article.tgz; cd replicable_article; make ; evince article.pdf +``` + +**Possible issues**: + +- If the `make` command fails (especially on Mac), it may be because + Emacs or something else is not correctly installed. In that case, + open the article directly with the following command: + + ``` {.bash .rundoc-block rundoc-language="sh" rundoc-results="output" rundoc-exports="both"} + emacs -q --eval "(setq enable-local-eval t)" --eval "(setq enable-local-variables t)" article.org + ``` + + and export it to pdf with the following shortcut: `C-c C-e l o` +- If it still doesn't work and emacs complains about not finding ESS, + it may be because you installed ESS in your home instead of + system-wide. In that case, try to remove the `-q` in the previous + command line to load your personal emacs configuration. + +Finally, when you'll be tired of always re-executing all the source code +when exporting, just look for the following line in +[article.org](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/replicable_article/article.org): + +``` {.example} +# #+PROPERTY: header-args :eval never-export +``` + +If you remove the `# ` in the beginning of the line, it will not be a +comment anymore and will indicate org-mode to stop evaluating every +chunk of code when exporting. + +Emacs tips and tricks +===================== + +Cheat-sheets +------------ + +Learning Emacs and Org-Mode can be difficult as there is an inordinate +amount of shortcuts. Many people have thus come up with cheat-sheats. +Here is a selection in case it helps: + +### Emacs + +- [Common and step-by-step Emacs shortcuts for our *reproducible + research* + configuration](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org) +- [The official GNU emacs + refcard](https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf) +- Two graphical cheat-sheats by Sacha Chua on + ![](http://sachachua.com/blog/wp-content/uploads/2013/05/How-to-Learn-Emacs-v2-Large.png) + and on + ![](http://sachachua.com/blog/wp-content/uploads/2013/08/20130830-Emacs-Newbie-How-to-Learn-Emacs-Keyboard-Shortcuts.png). + +### Org-mode + +- [Common and step-by-step org-mode shortcuts for our *reproducible + research* + configuration](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/blob/master/module2/ressources/rr_org/journal.org) +- [The official org-mode + refcard](https://orgmode.org/worg/orgcard.html) +- [The official description of the org-mode + syntax](https://orgmode.org/worg/dev/org-syntax.html) and a + [relatively concise description of the org-mode + syntax](https://gist.github.com/hoeltgman/3825415). + +Video tutorials +--------------- + +For those of you who prefer video explanations, here is a [Youtube +channel with many step by step emacs +tutorials](https://www.youtube.com/playlist?list=PL9KxKa8NpFxIcNQa9js7dQQIHc81b0-Xg). + +Additional useful emacs packages +-------------------------------- + +### Company-mode + +[Company-mode](http://company-mode.github.io/) is a text completion +framework for Emacs. It allows to have smart completion in emacs for the +most common languages. If you feel this is needed, you should follow the +instructions from the official Web page: +[](http://company-mode.github.io/) + +### Magit + +[Magit](https://magit.vc/) is an Emacs interface for Git. Its usage is +briefly illustrated in the context of this MOOC in a [video +tutorial](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to_id/9cfc7500f0ef46d288d2317ec7b037b4) +("*Utilisation Emacs/git*" in French). + +It is very powerful and we use it on a daily basis but you should +definitely understand what git does behind the scenes beforehand. If you +feel this would be useful for you, you should follow [this visual +walk-through](https://magit.vc/screenshots/) or [this really short +"crash course"](https://www.emacswiki.org/emacs/Magit). If you installed +the previous "*reproducible research*" emacs configuration, you can +easily invoke magit by using `C-x g`. + +Other resources +--------------- + +- [The compact Org-mode Guide](https://orgmode.org/orgguide.pdf) +- [Many examples illustrating the use of different languages in + org-mode](https://github.com/dfeich/org-babel-examples) + diff --git a/module2/ressources/emacs_orgmode.org b/module2/ressources/emacs_orgmode.org index 5a9a8d4b883d613f501d8a594e06ebce1f82c03d..3def7685639299ae93efea20186839984214e9b5 100644 --- a/module2/ressources/emacs_orgmode.org +++ b/module2/ressources/emacs_orgmode.org @@ -17,6 +17,26 @@ the [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/jump_to The next section provides information on how to install emacs. +* Table of Contents :TOC: + - [[#installing-emacs-org-mode-ess-and-auctex][Installing emacs, org-mode, ess, and auctex.]] + - [[#linux-debian-ubuntu][Linux (Debian, Ubuntu)]] + - [[#macos][macOS]] + - [[#windows][Windows]] + - [[#all-platforms-pretty-code-in-html-export][All platforms: pretty code in HTML export]] + - [[#a-simple-reproducible-research-emacs-configuration-][A simple "/reproducible research/" emacs configuration ]] + - [[#step-0-backup-and-download-our-configuration][Step 0: Backup and download our configuration]] + - [[#step-1-prepare-your-journal][Step 1: Prepare your journal]] + - [[#step-2-set-up-emacs-configuration][Step 2: Set up Emacs configuration]] + - [[#step-3-adapt-the-configuration-to-your-specific-needs-if-required][Step 3: Adapt the configuration to your specific needs if required]] + - [[#step-4-check-whether-the-installation-is-working-or-not][Step 4: Check whether the installation is working or not]] + - [[#step-5-open-and-play-with-your-journal][Step 5: Open and play with your journal:]] + - [[#a-stub-of-a-replicable-article][A stub of a replicable article]] + - [[#emacs-tips-and-tricks][Emacs tips and tricks]] + - [[#cheat-sheets][Cheat-sheets]] + - [[#video-tutorials][Video tutorials]] + - [[#additional-useful-emacs-packages][Additional useful emacs packages]] + - [[#other-resources][Other resources]] + * Installing emacs, org-mode, ess, and auctex. ** Linux (Debian, Ubuntu) We provide here only instructions for Debian-based distributions. Feel diff --git a/module2/slides/C028AL_slides_module2-en-gz.pdf b/module2/slides/C028AL_slides_module2-en-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4937d73cf93c19e1785e1ec45765df9249e43cbc Binary files /dev/null and b/module2/slides/C028AL_slides_module2-en-gz.pdf differ diff --git a/module2/slides/C028AL_slides_module2-fr-gz.pdf b/module2/slides/C028AL_slides_module2-fr-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d65631ba3e00f8e1361af13a175b487cabfa5e8a Binary files /dev/null and b/module2/slides/C028AL_slides_module2-fr-gz.pdf differ diff --git a/module2/slides/Makefile b/module2/slides/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5b13068d64e137f7269f728f6274fa16ddae86af --- /dev/null +++ b/module2/slides/Makefile @@ -0,0 +1,16 @@ +C028AL_slides_module2-en-gz.pdf: slides_module2.pdf + mv $< $@ + +C028AL_slides_module2-fr-gz.pdf: diapos_module2.pdf + mv $< $@ + +%-gz.pdf: %.pdf + gzprez $< + +%.pdf: %.tex + pdflatex --shell-escape $^ + pdflatex --shell-escape $^ + +%.tex: %.org + emacs -batch --eval "(setq enable-local-eval t)" --eval "(setq enable-local-variables t)" $^ --funcall org-beamer-export-to-latex + # sed -i -e 's|includegraphics\(.*\)../assets/img/|includegraphics\1../assets/img/thumbnail/|' -e 's/\.png}/.jpg}/i' $@ diff --git a/module2/slides/diapos_module2.org b/module2/slides/diapos_module2.org new file mode 100644 index 0000000000000000000000000000000000000000..ab224c4c6f601ff379fe6bb47f7cf392120149de --- /dev/null +++ b/module2/slides/diapos_module2.org @@ -0,0 +1,1580 @@ +#+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}\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 +Origin of every image used in this series of slides: +- PhD Comics: + - [[file: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: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: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:img/flipping_fiasco.png][flipping_fiasco.png]]: https://people.ligo-wa.caltech.edu/~michael.landry/calibration/S5/getsignright.pdf +- [[file:img/in_science_we_trust_small.jpg][in_science_we_trust_small.jpg]]: voir file:img/in_science_we_trust.jpg +- + [[file: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: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:img/iceberg.jpg][iceberg.jpg]]: http://www.jdubuzz.com/files/2016/03/iceberg-principle.jpg +- [[file: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:img/RStudio-Logo-Blue-Gradient.png and file:img//knitr.png][RStudio-Logo-Blue-Gradient.png and file:img//knitr.png]]: https://www.rstudio.com/about/logos/ +- [[file: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]{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: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 + #
+ # #+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: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]{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]{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: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]{img/in_science_we_trust_small.jpg} +#+LaTeX: \includegraphics[height=2.5cm]{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: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]{img/iceberg_publication-1.png}% +#+LaTeX: \includegraphics<2>[width=\linewidth]{img/iceberg_publication-2.png}% +#+LaTeX: \includegraphics<3>[width=\linewidth]{img/iceberg_publication-3.png}% +#+LaTeX: \includegraphics<4>[width=\linewidth]{img/iceberg_publication-4.png}% +#+LaTeX: \includegraphics<5>[width=\linewidth]{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]{img/example_pi_full-1}}% +#+LaTeX: \only<2>{\includesvg[width=\linewidth]{img/example_pi_full-2}}% +#+LaTeX: \only<3>{\includesvg[width=\linewidth]{img/example_pi_full-3}}% +#+LaTeX: \only<4>{\includesvg[width=\linewidth]{img/example_pi_full-4}}% +#+LaTeX: \only<5>{\includesvg[width=\linewidth]{img/example_pi_full-5}}% +#+LaTeX: \only<6>{\includesvg[width=\linewidth]{img/example_pi_full-6}}% + +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-2.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-3.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-4.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-5.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{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: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 == +- 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:img/RStudio-Logo-Blue-Gradient.png +#+ATTR_LATEX: :height 2cm :center nil +file: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:img/600px-EmacsIcon.svg.png +#+ATTR_LATEX: :height 2cm :center nil +file: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: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:img/jupyter-logo.png +#+ATTR_LATEX: :height 2cm :center nil +file:img/RStudio-Logo-Blue-Gradient.png +#+ATTR_LATEX: :height 2cm :center nil +file:img/442px-Org-mode-unicorn.svg.png +#+ATTR_LATEX: :height 2cm :center nil +file: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 + diff --git a/module2/slides/img/442px-Org-mode-unicorn.svg.png b/module2/slides/img/442px-Org-mode-unicorn.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..11d2b823ee29dfc5e6862e2a0ef0f71b76acee18 Binary files /dev/null and b/module2/slides/img/442px-Org-mode-unicorn.svg.png differ diff --git a/module2/slides/img/600px-EmacsIcon.svg.png b/module2/slides/img/600px-EmacsIcon.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..32230abff62d1ebe3006debf36e4c7e56bcb17ea Binary files /dev/null and b/module2/slides/img/600px-EmacsIcon.svg.png differ diff --git a/module2/slides/img/Irmf.jpg b/module2/slides/img/Irmf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4015461fdd11fe959314948292e6b3d58381a1fb Binary files /dev/null and b/module2/slides/img/Irmf.jpg differ diff --git a/module2/slides/img/RStudio-Logo-Blue-Gradient.png b/module2/slides/img/RStudio-Logo-Blue-Gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0454ae33163ad3cac710afe35e748ee602297e Binary files /dev/null and b/module2/slides/img/RStudio-Logo-Blue-Gradient.png differ diff --git a/module2/slides/img/Researcher-test.jpg b/module2/slides/img/Researcher-test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7bebdd749b1c018a094223cb399d1e42a80b1a6 Binary files /dev/null and b/module2/slides/img/Researcher-test.jpg differ diff --git a/module2/slides/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg b/module2/slides/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61d2b9f4fc88c3d5eca1cd38332b5f54050db444 Binary files /dev/null and b/module2/slides/img/box-she-s-told-not-to-open-in-it-the-gods-had-placed-all-the-evils-9vbl9q-clipart.jpg differ diff --git a/module2/slides/img/example_pi_full-1.svg b/module2/slides/img/example_pi_full-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..9fb113de849065f899cf8c83877732518171f2fc --- /dev/null +++ b/module2/slides/img/example_pi_full-1.svg @@ -0,0 +1,1055 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/module2/slides/img/example_pi_full-2.svg b/module2/slides/img/example_pi_full-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..009bcf8b5c428774954e1ce345b623abe98a3afa --- /dev/null +++ b/module2/slides/img/example_pi_full-2.svg @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Document initial dans son environnement + Document final + + diff --git a/module2/slides/img/example_pi_full-3.svg b/module2/slides/img/example_pi_full-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..f477ef44ab982abd7582b25e8b2f35fee7148f4d --- /dev/null +++ b/module2/slides/img/example_pi_full-3.svg @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Document initial dans son environnement + Document final + MarkDown + + + + + diff --git a/module2/slides/img/example_pi_full-4.svg b/module2/slides/img/example_pi_full-4.svg new file mode 100644 index 0000000000000000000000000000000000000000..b56626fe6ec9ac6f13d98d6a8e15bc8cd90fd90f --- /dev/null +++ b/module2/slides/img/example_pi_full-4.svg @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + Document initial dans son environnement + Document final + Code + + + + + diff --git a/module2/slides/img/example_pi_full-5.svg b/module2/slides/img/example_pi_full-5.svg new file mode 100644 index 0000000000000000000000000000000000000000..819cdd8f4b0a2c7d58ea85de57af70d207e44e41 --- /dev/null +++ b/module2/slides/img/example_pi_full-5.svg @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + Document initial dans son environnement + Document final + Résultats + + + + + diff --git a/module2/slides/img/example_pi_full-6.svg b/module2/slides/img/example_pi_full-6.svg new file mode 100644 index 0000000000000000000000000000000000000000..2c8d490f3ad6a317f1422fa4dd211e636e4b8492 --- /dev/null +++ b/module2/slides/img/example_pi_full-6.svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + Export + Document initial dans son environnement + Document final + + diff --git a/module2/slides/img/example_pi_full.svg b/module2/slides/img/example_pi_full.svg new file mode 100644 index 0000000000000000000000000000000000000000..77ceca08565cdce603c6a95994b4d8561f779e9b --- /dev/null +++ b/module2/slides/img/example_pi_full.svg @@ -0,0 +1,6090 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + Export + Document initial dans son environnement + Document final + + diff --git a/module2/slides/img/flipping_fiasco.png b/module2/slides/img/flipping_fiasco.png new file mode 100644 index 0000000000000000000000000000000000000000..47563b1946c9191fd3663226266db8ceeb8da77d Binary files /dev/null and b/module2/slides/img/flipping_fiasco.png differ diff --git a/module2/slides/img/iceberg.jpg b/module2/slides/img/iceberg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfd55aac23a659c10d87f012f91add01a4a6c450 Binary files /dev/null and b/module2/slides/img/iceberg.jpg differ diff --git a/module2/slides/img/iceberg_publication-1.png b/module2/slides/img/iceberg_publication-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5d354d8e2ce075dc4c6fe07b9da39c100c81e8 Binary files /dev/null and b/module2/slides/img/iceberg_publication-1.png differ diff --git a/module2/slides/img/iceberg_publication-2.png b/module2/slides/img/iceberg_publication-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a61d702cb68e54b0cf8825909405661e798ac238 Binary files /dev/null and b/module2/slides/img/iceberg_publication-2.png differ diff --git a/module2/slides/img/iceberg_publication-3.png b/module2/slides/img/iceberg_publication-3.png new file mode 100644 index 0000000000000000000000000000000000000000..30aba7ae335395a259efe0ca54a968f706684d90 Binary files /dev/null and b/module2/slides/img/iceberg_publication-3.png differ diff --git a/module2/slides/img/iceberg_publication-4.png b/module2/slides/img/iceberg_publication-4.png new file mode 100644 index 0000000000000000000000000000000000000000..499bf150e7e425245bd3f71880b7f02a6e1b7c2a Binary files /dev/null and b/module2/slides/img/iceberg_publication-4.png differ diff --git a/module2/slides/img/iceberg_publication-5.png b/module2/slides/img/iceberg_publication-5.png new file mode 100644 index 0000000000000000000000000000000000000000..efeb198d5653747a59a7717c6683d1d6aae2faac Binary files /dev/null and b/module2/slides/img/iceberg_publication-5.png differ diff --git a/module2/slides/img/iceberg_publication.svg b/module2/slides/img/iceberg_publication.svg new file mode 100644 index 0000000000000000000000000000000000000000..d79f84ec3c1cc1cd355cc294cd00e5f3305bbcef --- /dev/null +++ b/module2/slides/img/iceberg_publication.svg @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Données + + + + + AnalysesVisualisations + + + + + Publication + + + + + + + + + + diff --git a/module2/slides/img/in_code_we_trust.jpg b/module2/slides/img/in_code_we_trust.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a37a3d1561e99618883665f337e19d442761e666 Binary files /dev/null and b/module2/slides/img/in_code_we_trust.jpg differ diff --git a/module2/slides/img/in_science_we_trust.jpg b/module2/slides/img/in_science_we_trust.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d4b1dc89f696165212b091167ac6a33eb3fb19b Binary files /dev/null and b/module2/slides/img/in_science_we_trust.jpg differ diff --git a/module2/slides/img/in_science_we_trust_small.jpg b/module2/slides/img/in_science_we_trust_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..145abdd30420b19bf6eb6c80c2d26e9016fe5169 Binary files /dev/null and b/module2/slides/img/in_science_we_trust_small.jpg differ diff --git a/module2/slides/img/jumping_penguin.png b/module2/slides/img/jumping_penguin.png new file mode 100644 index 0000000000000000000000000000000000000000..fed98e7e8ab13e3269d656044e170ef693382351 Binary files /dev/null and b/module2/slides/img/jumping_penguin.png differ diff --git a/module2/slides/img/jupyter-logo.png b/module2/slides/img/jupyter-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6d7ec3473df1852ddbaa781fb7b468a217bd71 Binary files /dev/null and b/module2/slides/img/jupyter-logo.png differ diff --git a/module2/slides/img/knitr.png b/module2/slides/img/knitr.png new file mode 100644 index 0000000000000000000000000000000000000000..48b1046e91299470f5048fbefe22ae26a3f9608f Binary files /dev/null and b/module2/slides/img/knitr.png differ diff --git a/module2/slides/img/phd010708.png b/module2/slides/img/phd010708.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e77a23ff20f20ff2f72644b8df176a68619582 Binary files /dev/null and b/module2/slides/img/phd010708.png differ diff --git a/module2/slides/img/question_mark.png b/module2/slides/img/question_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..be9c9c79e55d8bb90fe23216eb07f5574eacf662 Binary files /dev/null and b/module2/slides/img/question_mark.png differ diff --git a/module2/slides/misc/PITCHME.org b/module2/slides/misc/PITCHME.org new file mode 100644 index 0000000000000000000000000000000000000000..35acb97eb27f532a59502271f41318b0c5e61aa7 --- /dev/null +++ b/module2/slides/misc/PITCHME.org @@ -0,0 +1,1610 @@ +#+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 + +#+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. 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 + - OrgMode +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. +* 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
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 + + 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*. + +
+ -- Herndon, Ash et Pollin
+#+END_QUOTE + + # #+BEGIN_EXPORT html + #
+ # #+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. + +
+ -- 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 ç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.

+ +#+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 + +#+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) + + *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. + + -- [[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 + +#+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/" + + *Lanceurs d'alerte* ou +*institutions malades* ? + +*** La remise en cause fait partie du processus scientifique +*** 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... + +* 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
Au choix : + - Jupyter + - Rstudio + - OrgMode +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&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* +
/Données non disponibles = résultats difficiles à vérifier/ +

++ *Choix* +
/Choix non expliqués = choix suspicieux/ +

+ +*** 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 +
Article = version _simplifiée_ de la procédure
+#+END_QUOTE + +
+ +#+BEGIN_QUOTE +
+*Tracer* toutes ces informations et les *rendre disponibles* = +investissement conséquent +
+#+END_QUOTE + +
+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 ? +
+- 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 à ma place]] +- /Les données peuvent être sensibles/ + # sécurité, machine learning pour la police + +#+BEGIN_EXPORT html +
+#### 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 +
+- *Outils, formats, et services propriétaires* + 1. excel, word, evernote + - markdown, orgmode, 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... ☺ + - 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 + +#+BEGIN_EXPORT html + + +#+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
Au choix : + - Jupyter + - Rstudio + - OrgMode +5. Travailler avec les autres +6. Analyse comparée des différents outils +** Le document computationnel :
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 +
+#+BEGIN_EXPORT html + + + + + +#+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 +
+ +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 +#+BEGIN_EXPORT html + + + + + + +#+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 | + +
+ + + + + + + + + +
*Principes identiques* *Différences*
    +
  • *1 seul document* :
    explications, code, résultats +
  • Session +
  • Export +
    +
  • Syntaxe
    . +
  • Interopérabilité des langages +
  • 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 ! +* 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*
Au choix : + - *Jupyter* + - Rstudio + - OrgMode +5. Travailler avec les autres +6. Analyse comparée des différents outils +** Prise en main de l'outil :
Jupyter + +#+BEGIN_EXPORT html +
+
+ +#+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,
auto-complétion,
et Ipython magic +- Raccourcis clavier == +- 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]]
+ ~jupyter nbconvert --to mypackage.MyExporter~
+         ~notebook.ipynb~ +** 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*
Au choix : + - Jupyter + - *Rstudio* + - OrgMode +5. Travailler avec les autres +6. Analyse comparée des différents outils +** Prise en main de l'outil :
Rstudio + +#+BEGIN_EXPORT html +
+
+ + +#+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
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*
Au choix : + - Jupyter + - Rstudio + - *OrgMode* +5. Travailler avec les autres +6. Analyse comparée des différents outils +** Prise en main de l'outil :
Org Mode + +#+BEGIN_EXPORT html +
+
+ + +#+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
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
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
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 +
+#+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é + + 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...) +** 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 +* 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
Au choix : + - Jupyter + - Rstudio + - OrgMode +5. Travailler avec les autres +6. *Analyse comparée des différents outils* +** Analyse comparée
des différents outils + +#+BEGIN_EXPORT html + + + + +#+END_EXPORT + +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 +| | 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 + diff --git a/module2/slides/slides_module2.org b/module2/slides/slides_module2.org new file mode 100644 index 0000000000000000000000000000000000000000..4a41208966b9506458f049ff8e61596d77fba043 --- /dev/null +++ b/module2/slides/slides_module2.org @@ -0,0 +1,1468 @@ +#+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}\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]{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: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 + #
+ # #+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: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]{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]{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: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]{img/in_science_we_trust_small.jpg} +#+LaTeX: \includegraphics[height=2.5cm]{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: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]{img/iceberg_publication-1.png}% +#+LaTeX: \includegraphics<2>[width=\linewidth]{img/iceberg_publication-2.png}% +#+LaTeX: \includegraphics<3>[width=\linewidth]{img/iceberg_publication-3.png}% +#+LaTeX: \includegraphics<4>[width=\linewidth]{img/iceberg_publication-4.png}% +#+LaTeX: \includegraphics<5>[width=\linewidth]{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]{img/example_pi_full-1}}% +#+LaTeX: \only<2>{\includesvg[width=\linewidth]{img/example_pi_full-2}}% +#+LaTeX: \only<3>{\includesvg[width=\linewidth]{img/example_pi_full-3}}% +#+LaTeX: \only<4>{\includesvg[width=\linewidth]{img/example_pi_full-4}}% +#+LaTeX: \only<5>{\includesvg[width=\linewidth]{img/example_pi_full-5}}% +#+LaTeX: \only<6>{\includesvg[width=\linewidth]{img/example_pi_full-6}}% + +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-2.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-3.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-4.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{img/example_pi_full-5.svg}% +# #+LaTeX: \includesvg<1>[width=\linewidth]{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: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 == +- 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:img/RStudio-Logo-Blue-Gradient.png +#+ATTR_LATEX: :height 2cm :center nil +file: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:img/600px-EmacsIcon.svg.png +#+ATTR_LATEX: :height 2cm :center nil +file: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: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:img/jupyter-logo.png +#+ATTR_LATEX: :height 2cm :center nil +file:img/RStudio-Logo-Blue-Gradient.png +#+ATTR_LATEX: :height 2cm :center nil +file:img/442px-Org-mode-unicorn.svg.png +#+ATTR_LATEX: :height 2cm :center nil +file: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 + diff --git a/module3/slides/C028AL_slides_module3-en.pdf b/module3/slides/C028AL_slides_module3-en.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8524cd1d0a4fffe538bea72469eb52eb2bf7aecf Binary files /dev/null and b/module3/slides/C028AL_slides_module3-en.pdf differ diff --git a/module3/slides/C028AL_slides_module3-fr.pdf b/module3/slides/C028AL_slides_module3-fr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e8e31ccf6d204c3b38a699e43a168e4161577393 Binary files /dev/null and b/module3/slides/C028AL_slides_module3-fr.pdf differ diff --git a/module3/slides/Makefile b/module3/slides/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4159381e8dac46c4b7439ef5992a2caf3ac02103 --- /dev/null +++ b/module3/slides/Makefile @@ -0,0 +1,18 @@ +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: img/analyse-traditionnelle-3-svg.pdf img/traditional-analysis-3-svg.pdf img/analyse-replicable-3-svg.pdf img/replicable-analysis-3-svg.pdf + +img/%-svg.pdf: img/%.svg +# /Applications/Inkscape.app/Contents/Resources/bin/ # for MacOSX + inkscape -D -z --file=$(abspath $<) --export-pdf=$(abspath $@) diff --git a/module3/slides/diapos-module3.org b/module3/slides/diapos-module3.org new file mode 100644 index 0000000000000000000000000000000000000000..8701f13913a32900472cb3df528c8b67dca9b48c --- /dev/null +++ b/module3/slides/diapos-module3.org @@ -0,0 +1,202 @@ +#+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 +[[file:img/analyse-traditionnelle-3-svg.pdf]] +** L'analyse de données réplicable +[[file:img/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*! + diff --git a/module3/slides/img/analyse-replicable-1.svg b/module3/slides/img/analyse-replicable-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..9750fad810fc298f7dee5cf1ae5871b3ba64a4e8 --- /dev/null +++ b/module3/slides/img/analyse-replicable-1.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + résultats + + + + discussion + + + diff --git a/module3/slides/img/analyse-replicable-2.svg b/module3/slides/img/analyse-replicable-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..c5ac7af02387e0df79922d70e6ce9c53d4b3198b --- /dev/null +++ b/module3/slides/img/analyse-replicable-2.svg @@ -0,0 +1,124 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + code + + + + résultats + + + + discussion + + + diff --git a/module3/slides/img/analyse-replicable-3.svg b/module3/slides/img/analyse-replicable-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..2fc734a96cb444e754e883e2506e6a2f5ab7d4ce --- /dev/null +++ b/module3/slides/img/analyse-replicable-3.svg @@ -0,0 +1,145 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + code + + + + résultats + + + + explication + + + + discussion + + + diff --git a/module3/slides/img/analyse-traditionnelle-1.svg b/module3/slides/img/analyse-traditionnelle-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..49719102fbb66d1aebf22968041ad86e7ee1d007 --- /dev/null +++ b/module3/slides/img/analyse-traditionnelle-1.svg @@ -0,0 +1,82 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + résultats + + + diff --git a/module3/slides/img/analyse-traditionnelle-2.svg b/module3/slides/img/analyse-traditionnelle-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..41d3bb72789c068003c674502ae4e5f01412c645 --- /dev/null +++ b/module3/slides/img/analyse-traditionnelle-2.svg @@ -0,0 +1,116 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + résultats + + + + résumé + méthodologique + + + diff --git a/module3/slides/img/analyse-traditionnelle-3.svg b/module3/slides/img/analyse-traditionnelle-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..7f78e25f818c6363557806177acd12891094aec5 --- /dev/null +++ b/module3/slides/img/analyse-traditionnelle-3.svg @@ -0,0 +1,137 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + résultats + + + + discussion + + + + résumé + méthodologique + + + diff --git a/module3/slides/img/replicable-analysis-1.svg b/module3/slides/img/replicable-analysis-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..8ddd93e26d99209582aab175e8c6c409c3e6305b --- /dev/null +++ b/module3/slides/img/replicable-analysis-1.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + results + + + + discussion + + + diff --git a/module3/slides/img/replicable-analysis-2.svg b/module3/slides/img/replicable-analysis-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..a48dea62d0b1127a3dfdd8a8ff4fb9775243cff5 --- /dev/null +++ b/module3/slides/img/replicable-analysis-2.svg @@ -0,0 +1,124 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + code + + + + results + + + + discussion + + + diff --git a/module3/slides/img/replicable-analysis-3.svg b/module3/slides/img/replicable-analysis-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..054b50727a7d1a86289941db27b1e7dcc542fe9e --- /dev/null +++ b/module3/slides/img/replicable-analysis-3.svg @@ -0,0 +1,145 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + code + + + + results + + + + explanation + + + + discussion + + + diff --git a/module3/slides/img/traditional-analysis-1.svg b/module3/slides/img/traditional-analysis-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..8a5fc7f7dc99f5b50544b2e70393ac9cdc4790f0 --- /dev/null +++ b/module3/slides/img/traditional-analysis-1.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + results + + diff --git a/module3/slides/img/traditional-analysis-2.svg b/module3/slides/img/traditional-analysis-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..a86eb5790be7a8d4906c78637d291ee29be62c43 --- /dev/null +++ b/module3/slides/img/traditional-analysis-2.svg @@ -0,0 +1,110 @@ + + + + + + + + + + image/svg+xml + + + + + + + + results + + method + summary + + diff --git a/module3/slides/img/traditional-analysis-3.svg b/module3/slides/img/traditional-analysis-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..9f5bf5408e03fc6a93e9a90b99609ccfdafb8b1b --- /dev/null +++ b/module3/slides/img/traditional-analysis-3.svg @@ -0,0 +1,131 @@ + + + + + + + + + + image/svg+xml + + + + + + + + results + + + discussion + + + method + summary + + diff --git a/module3/slides/slides-module3.org b/module3/slides/slides-module3.org new file mode 100644 index 0000000000000000000000000000000000000000..769039c8cf3ace4e1689bc083942d0ff6305b7c9 --- /dev/null +++ b/module3/slides/slides-module3.org @@ -0,0 +1,198 @@ +#+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 +[[file:img/traditional-analysis-3-svg.pdf]] +** Replicable data analysis +[[file:img/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! diff --git a/module4/slides/C028AL_slides_module4-en-gz.pdf b/module4/slides/C028AL_slides_module4-en-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e9e2c3557767ebd87249ea4378055d3d03668cb6 Binary files /dev/null and b/module4/slides/C028AL_slides_module4-en-gz.pdf differ diff --git a/module4/slides/C028AL_slides_module4-fr-gz.pdf b/module4/slides/C028AL_slides_module4-fr-gz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20c4ccdbd3c57d46f417ef7909de755feab2194d Binary files /dev/null and b/module4/slides/C028AL_slides_module4-fr-gz.pdf differ diff --git a/module4/slides/Makefile b/module4/slides/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9b3201c42814575b6852b27759cba96baf57a4e5 --- /dev/null +++ b/module4/slides/Makefile @@ -0,0 +1,16 @@ +C028AL_slides_module4-en-gz.pdf: slides_module4.pdf + mv $< $@ + +C028AL_slides_module4-fr-gz.pdf: diapos_module4.pdf + mv $< $@ + +%-gz.pdf: %.pdf + gzprez $< + +%.pdf: %.tex + pdflatex --shell-escape $^ + pdflatex --shell-escape $^ + +%.tex: %.org + emacs -batch --eval "(setq enable-local-eval t)" --eval "(setq enable-local-variables t)" $^ --funcall org-beamer-export-to-latex + # sed -i -e 's|includegraphics\(.*\)../assets/img/|includegraphics\1../assets/img/thumbnail/|' -e 's/\.png}/.jpg}/i' $@ diff --git a/module4/slides/diapos_module4.org b/module4/slides/diapos_module4.org new file mode 100644 index 0000000000000000000000000000000000000000..6e6d82631c16ef9b5e9ec5ecde77b99341544668 --- /dev/null +++ b/module4/slides/diapos_module4.org @@ -0,0 +1,1230 @@ +#+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}\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 > img/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 img/python3-matplotlib.dot > img/python3-matplotlib.png + echo file:img/python3-matplotlib.png + #+end_src + + #+RESULTS: + file:img/python3-matplotlib.png + +* M4-S0: Vers une étude reproductible : la réalité du terrain +** L'enfer de la Recherche Reproductible +file: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:img/Zenodo-logo.jpg +#+ATTR_LATEX: :height 1cm :center nil +file: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:img/il-marche-mon-programme.jpg +** Des codes complexes... + +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb1.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb2.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb3.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb4.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/grippal_orgmode1.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/grippal_orgmode2.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{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:img/SbmlParameterisation.png +#+ATTR_LATEX: :height 7cm :center nil +file: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]{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 +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 +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: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:img/plot_1.5.3.png +#+ATTR_LATEX: :height 3.2cm :center nil +file: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: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:img/swh-logo.png + #+ATTR_LATEX: :height 1.3cm :center nil + file: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:img/ArXiv-web.png" height=60 /> + # file:img/Zenodo-logo.jpg" height=60 /> + # file: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: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: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: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: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: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: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: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]{img/nombres-aleatoires-1.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{img/nombres-aleatoires-2.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{img/nombres-aleatoires-3.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{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: + diff --git a/module4/slides/img/ArXiv-web.png b/module4/slides/img/ArXiv-web.png new file mode 100644 index 0000000000000000000000000000000000000000..949205d04f280dc6b5d2d58414bf057748aeeb88 Binary files /dev/null and b/module4/slides/img/ArXiv-web.png differ diff --git a/module4/slides/img/Figshare-logo.png b/module4/slides/img/Figshare-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e53af9a1e9b786f37ef40497d1fae6301322fc Binary files /dev/null and b/module4/slides/img/Figshare-logo.png differ diff --git a/module4/slides/img/LogoHAL.png b/module4/slides/img/LogoHAL.png new file mode 100644 index 0000000000000000000000000000000000000000..065a9f71d52bd01e452562ccc1b0a41913f93564 Binary files /dev/null and b/module4/slides/img/LogoHAL.png differ diff --git a/module4/slides/img/SbmlModelling.png b/module4/slides/img/SbmlModelling.png new file mode 100644 index 0000000000000000000000000000000000000000..afb55919cc71248cea6c14368fcfb1048a4ee3ea Binary files /dev/null and b/module4/slides/img/SbmlModelling.png differ diff --git a/module4/slides/img/SbmlParameterisation.png b/module4/slides/img/SbmlParameterisation.png new file mode 100644 index 0000000000000000000000000000000000000000..80584fe16397b3b254c23fa7596198c0a8c54117 Binary files /dev/null and b/module4/slides/img/SbmlParameterisation.png differ diff --git a/module4/slides/img/Zenodo-logo.jpg b/module4/slides/img/Zenodo-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6442e0df4dd2eb9a93434f1dd10874f3b272b4a3 Binary files /dev/null and b/module4/slides/img/Zenodo-logo.jpg differ diff --git a/module4/slides/img/gouttedo1.png b/module4/slides/img/gouttedo1.png new file mode 100644 index 0000000000000000000000000000000000000000..c63eb3947fad93693bd9c6b2b5e25d2ede786d39 Binary files /dev/null and b/module4/slides/img/gouttedo1.png differ diff --git a/module4/slides/img/gouttedo2.png b/module4/slides/img/gouttedo2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d536e6a8ccaad1621f72a30b3cefcdcb1db708e Binary files /dev/null and b/module4/slides/img/gouttedo2.png differ diff --git a/module4/slides/img/grippal_orgmode1.png b/module4/slides/img/grippal_orgmode1.png new file mode 100644 index 0000000000000000000000000000000000000000..b97f64eccba433b3d13751ae990468b3605c8a6c Binary files /dev/null and b/module4/slides/img/grippal_orgmode1.png differ diff --git a/module4/slides/img/grippal_orgmode2.png b/module4/slides/img/grippal_orgmode2.png new file mode 100644 index 0000000000000000000000000000000000000000..1820d5b88ded8c60dd9a7e7e922779e6e2e9c541 Binary files /dev/null and b/module4/slides/img/grippal_orgmode2.png differ diff --git a/module4/slides/img/il-marche-mon-programme.jpg b/module4/slides/img/il-marche-mon-programme.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6137b5bea424177e1ded42f450c08940684fac70 Binary files /dev/null and b/module4/slides/img/il-marche-mon-programme.jpg differ diff --git a/module4/slides/img/nb1.png b/module4/slides/img/nb1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8f0ec80a9a9871ef1089d06f74cb718ad811e0 Binary files /dev/null and b/module4/slides/img/nb1.png differ diff --git a/module4/slides/img/nb2.png b/module4/slides/img/nb2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff11662b807dbdfcfb69d4adde1765d0f3a367f5 Binary files /dev/null and b/module4/slides/img/nb2.png differ diff --git a/module4/slides/img/nb3.png b/module4/slides/img/nb3.png new file mode 100644 index 0000000000000000000000000000000000000000..89f0f3ec4ca77c586080e63eda70d9d6ed181f62 Binary files /dev/null and b/module4/slides/img/nb3.png differ diff --git a/module4/slides/img/nb4.png b/module4/slides/img/nb4.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a2656ad42435351db8eb4f4aedfe133cb3bcbd Binary files /dev/null and b/module4/slides/img/nb4.png differ diff --git a/module4/slides/img/nb5.png b/module4/slides/img/nb5.png new file mode 100644 index 0000000000000000000000000000000000000000..588da22063433db735dd7983c3308d1755e7a6e2 Binary files /dev/null and b/module4/slides/img/nb5.png differ diff --git a/module4/slides/img/nombres-aleatoires-1.svg b/module4/slides/img/nombres-aleatoires-1.svg new file mode 100644 index 0000000000000000000000000000000000000000..591d9fc9c4fa85c6ce8bff1e70c695933252e2aa --- /dev/null +++ b/module4/slides/img/nombres-aleatoires-1.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + graine + + + + diff --git a/module4/slides/img/nombres-aleatoires-2.svg b/module4/slides/img/nombres-aleatoires-2.svg new file mode 100644 index 0000000000000000000000000000000000000000..d6b18425630b6117f665499f10aac5a6fd4163d0 --- /dev/null +++ b/module4/slides/img/nombres-aleatoires-2.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + graine + + + + état 1 + + + + + diff --git a/module4/slides/img/nombres-aleatoires-3.svg b/module4/slides/img/nombres-aleatoires-3.svg new file mode 100644 index 0000000000000000000000000000000000000000..3b9c058cad9dec92624db22b3e29e97f394017f9 --- /dev/null +++ b/module4/slides/img/nombres-aleatoires-3.svg @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + graine + + + + état 1 + + + + + nombre 1 + + + diff --git a/module4/slides/img/nombres-aleatoires-4.svg b/module4/slides/img/nombres-aleatoires-4.svg new file mode 100644 index 0000000000000000000000000000000000000000..11de1da554c612f4c76f95812f9bbb67b339cea1 --- /dev/null +++ b/module4/slides/img/nombres-aleatoires-4.svg @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + graine + + + + état 1 + + + + état 2 + + + + état 3 + + + + + + + nombre 1 + + + nombre 2 + + + nombre 3 + + + diff --git a/module4/slides/img/phd_sisyphe.png b/module4/slides/img/phd_sisyphe.png new file mode 100644 index 0000000000000000000000000000000000000000..887a8f87ed5d79e88bb8b8962ca7bef1277cb3cf Binary files /dev/null and b/module4/slides/img/phd_sisyphe.png differ diff --git a/module4/slides/img/plot_1.5.3.png b/module4/slides/img/plot_1.5.3.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c01b5fce8cf0812e9dc7fbbd0b973318c3a05f Binary files /dev/null and b/module4/slides/img/plot_1.5.3.png differ diff --git a/module4/slides/img/plot_2.1.1.png b/module4/slides/img/plot_2.1.1.png new file mode 100644 index 0000000000000000000000000000000000000000..a84274380287c861e2f961ca748bb5b58086b12e Binary files /dev/null and b/module4/slides/img/plot_2.1.1.png differ diff --git a/module4/slides/img/polynome1.svg b/module4/slides/img/polynome1.svg new file mode 100644 index 0000000000000000000000000000000000000000..7a3e85be18f0dfacbf809e83e92c65c8f79f6558 --- /dev/null +++ b/module4/slides/img/polynome1.svg @@ -0,0 +1,786 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module4/slides/img/polynome2.svg b/module4/slides/img/polynome2.svg new file mode 100644 index 0000000000000000000000000000000000000000..04504eb099d29aadae9a69cd48f7f54128e30d33 --- /dev/null +++ b/module4/slides/img/polynome2.svg @@ -0,0 +1,1128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module4/slides/img/polynome3-4.svg b/module4/slides/img/polynome3-4.svg new file mode 100644 index 0000000000000000000000000000000000000000..d1aa3aa46cc7dad07f5eec5dcc8e255fb2b9f519 --- /dev/null +++ b/module4/slides/img/polynome3-4.svg @@ -0,0 +1,1155 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module4/slides/img/polynome3.svg b/module4/slides/img/polynome3.svg new file mode 100644 index 0000000000000000000000000000000000000000..e678dcbb481797b5f4b99cc4bdc09ff929a8ea11 --- /dev/null +++ b/module4/slides/img/polynome3.svg @@ -0,0 +1,1314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module4/slides/img/polynome4.svg b/module4/slides/img/polynome4.svg new file mode 100644 index 0000000000000000000000000000000000000000..628618ebc0fb54be089510b2b3a88219f4c22470 --- /dev/null +++ b/module4/slides/img/polynome4.svg @@ -0,0 +1,1345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module4/slides/img/popper_logo_just_jug.png b/module4/slides/img/popper_logo_just_jug.png new file mode 100644 index 0000000000000000000000000000000000000000..96f1f474ecfe43885ce92106c9941c15d56beafc Binary files /dev/null and b/module4/slides/img/popper_logo_just_jug.png differ diff --git a/module4/slides/img/python3-matplotlib.dot b/module4/slides/img/python3-matplotlib.dot new file mode 100644 index 0000000000000000000000000000000000000000..c24c1893468324a0b1a270ea7eee77f803f1cebf --- /dev/null +++ b/module4/slides/img/python3-matplotlib.dot @@ -0,0 +1,218 @@ +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-2.0" + ] + alt2 [ + shape = "record" + label = " \{dpkg\} | install-info" + ] + alt3 [ + shape = "record" + label = " libblas3 | libblas.so.3" + ] + alt4 [ + shape = "record" + label = " liblapack3 | liblapack.so.3" + ] + alt5 [ + shape = "record" + label = " [mime-support] | python3-pil.imagetk" + ] + virt1 [ + shape = "record" + style = "rounded" + label = " [python3] | [python3]" + ] + virt2 [ + shape = "record" + style = "rounded" + label = " [debconf] | \{cdebconf\}" + ] + virt3 [ + shape = "record" + style = "rounded" + label = " [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 diff --git a/module4/slides/img/python3-matplotlib.png b/module4/slides/img/python3-matplotlib.png new file mode 100644 index 0000000000000000000000000000000000000000..dc74b8699c04868b90e4e8905827d3ac3cb467b3 Binary files /dev/null and b/module4/slides/img/python3-matplotlib.png differ diff --git a/module4/slides/img/soviet_space_shuttle.jpg b/module4/slides/img/soviet_space_shuttle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18de49f36cfc6ec8be51552cc96b43b5ff31b8ed Binary files /dev/null and b/module4/slides/img/soviet_space_shuttle.jpg differ diff --git a/module4/slides/img/swh-logo.png b/module4/slides/img/swh-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac92fd86816a83faa1735273366a70760f5070a Binary files /dev/null and b/module4/slides/img/swh-logo.png differ diff --git a/module4/slides/misc/Notes_sur_Enfer_des_donnees_Xtof.org b/module4/slides/misc/Notes_sur_Enfer_des_donnees_Xtof.org new file mode 100644 index 0000000000000000000000000000000000000000..1dcd251bce86a33f7e491a0c7e7aab7d42ac58a9 --- /dev/null +++ b/module4/slides/misc/Notes_sur_Enfer_des_donnees_Xtof.org @@ -0,0 +1,122 @@ +#+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/]]. diff --git a/module4/slides/misc/PITCHME.org b/module4/slides/misc/PITCHME.org new file mode 100644 index 0000000000000000000000000000000000000000..7e0911a4d8129bede10cf8b3dfc0cd525150cbb5 --- /dev/null +++ b/module4/slides/misc/PITCHME.org @@ -0,0 +1,1217 @@ +#+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* 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. + A. Intégration Gitlab Jupyter + B. R/Rstudio, + C. Org-Mode
+ À 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 +- Autres défis de la recherche reproductible
+ 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. +* C028AL-W2-S0 (\approx 2:00); Vers une étude reproductible : la réalité du terrain +** L'enfer de la Recherche Reproductible +# +# http://thumbpress.com/wp-content/uploads/2014/04/funny-water-toy-kids-playing1.jpg +#+BEGIN_EXPORT html + +#+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. L'enfer des données +2. L'enfer du logiciel +3. L'enfer du calcul +4. 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. + ++++ +##

+ +- 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 + + + ++++ +## 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 + + + + + + + +#+END_HTML + +- Un vrai + plat de spaghettis + - Pas de + vision d'ensemble + - + 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 + + +#+END_HTML + + 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, ... + + +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 +
+- Checkpoint et Cache +
+- 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 +
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_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 + Pas de standard + - Linux (=apt=, =rpm=, =yum=), + MacOS X (=brew=, =McPorts=, =Fink=), Windows (?) + - Ni pour l'installation ni pour récupérer les informations... \frowny + +#+BEGIN_EXPORT html +
+

+#+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
+  
+
+ +
+

+#+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
+  
+
+#+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 +
+
+ +
+**Faire le ménage** +
    +
  • Partir d'un environnement vierge +
  • Installer uniquement le nécessaire (et l'expliciter) +
  • Docker/Singularity, Guix/Nix, ... +
      +
+#+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 +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 +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 + + Pourquoi est-ce difficile ? +** 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: +#+HTML: +#+HTML: +  +- 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. + +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 +
    +
  • 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: +
+#+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* +- Git (hub, lab, ...) : stables, ouverts, \dots pérennes ? + - Google Code, Gitorious, Code Spaces +
+ +*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 + +Note: +- Dans les exercices, faites y bien attention. + + # + # + # +* 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 + + +``` +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 + + +``` +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 + + +``` +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 + + + +Note: + Mais regardons la région autour de x=1 de plus près... + ++++ +## L'arithmétique à virgule flottante + + + +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 + +
    +
  • Il y a un arrondi implicite dans chaque opération.
  • +
  • a+b est en réalité *arrondi*(a+b).
  • +
  • Mais *arrondi*(*arrondi*(a+b)+c) ≠ *arrondi*(a+*arrondi*(b+c)).
  • +
  • L'ordre des opérations est donc important.
  • +
+ +

**Pour un calcul reproductible,
il faut préserver l'ordre des opérations !!**

+ +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 ? + +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
  • +
+ +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 + +
    +
  • Objectif : une exécution plus rapide
    + ⟶ Minimiser la communication entre processeurs
    + ⟶ Adapter la répartition des données...
    + ⟶ 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.**

+ +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 : exemple + + + +(Source : Thèse de Rafife Nheili, Université de Perpignan, 2016) + +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 : exemple + + + +(Source : Thèse de Rafife Nheili, Université de Perpignan, 2016) + +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 + +
    +
  • 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
  • +
+ +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 + +
    +
  • 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 + + + + + + + + + +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 + +
    +
  • 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
    +
  • +
      + +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 + +
        +
      • Même graine + même algorithme → même suite :
        +  pas évident en arithmétique à virgule flottante !
        +
      • +
      • + Un astuce simple pour permettre la vérification :
        +  tester quelques valeurs du début de la suite.
      • +
      + +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 : 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 : 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 + +
        +
      • 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.
      • +
      + +#+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* + - 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 diff --git a/module4/slides/slides_module4.org b/module4/slides/slides_module4.org new file mode 100644 index 0000000000000000000000000000000000000000..b2c7561a0fe843d0b7e10429f304f7d48d833a2e --- /dev/null +++ b/module4/slides/slides_module4.org @@ -0,0 +1,1216 @@ +#+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}\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: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:img/Zenodo-logo.jpg +#+ATTR_LATEX: :height 1cm :center nil +file: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:img/il-marche-mon-programme.jpg +** Complex code... + +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb1.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb2.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb3.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/nb4.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/grippal_orgmode1.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{img/grippal_orgmode2.png}% +#+LaTeX: \includegraphics<+>[height=6cm]{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:img/SbmlParameterisation.png +#+ATTR_LATEX: :height 7cm :center nil +file: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]{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 +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 +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: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:img/plot_1.5.3.png +#+ATTR_LATEX: :height 3.2cm :center nil +file: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: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:img/swh-logo.png + #+ATTR_LATEX: :height 1.3cm :center nil + file: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:img/ArXiv-web.png" height=60 /> + # file:img/Zenodo-logo.jpg" height=60 /> + # file: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: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: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: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: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: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: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: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]{img/nombres-aleatoires-1.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{img/nombres-aleatoires-2.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{img/nombres-aleatoires-3.svg}} +#+LaTeX: \only<+>{\includesvg[scale=.45]{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: + diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e8a7a9cb894b5dadba49d5e0a08b7ee3e6affc2f --- /dev/null +++ b/public/index.html @@ -0,0 +1 @@ +Hello world ! It works \ No newline at end of file