...
 
Commits (434)
......@@ -10,3 +10,5 @@
_minted*
svg-inkscape*
*-svg.pdf
.Rhistory
.snakemake
image: brospars/pandoc-gitlab-ci:latest
pages:
stage: deploy
script:
- pandoc --version
# - pandoc --help
# - pandoc --list-input-formats # Broken as pandoc dates from 2013 on this image! :(
- bin/pandoc_fixer.pl html_src_files.lst;
- for file in `cat html_src_files.lst | sed 's/#.*//g' `; do
mkdir -p public/`dirname ${file}`;
mv ${file%.*}.html public/`dirname ${file}`/;
done
- cd module2/ressources/; tar zcf rr_org_archive.tgz rr_org/init.el rr_org/journal.org rr_org/init.org ; cd ../.. ; mv module2/ressources/rr_org_archive.tgz public/module2/ressources/
- cd module2/ressources/; tar zcf replicable_article.tgz replicable_article/Makefile replicable_article/article.org replicable_article/biblio.bib ; cd ../.. ; mv module2/ressources/replicable_article.tgz public/module2/ressources/
artifacts:
paths:
- public
only:
- master
Les ressources de cet entrepôt sont, sauf mention contraire, diffusées sous Licence Creative Commons CC-BY 3.0 : Attribution.
Le titulaire des droits autorise toute exploitation de l’œuvre, y compris à des fins commerciales, ainsi que la création d’œuvres dérivées, dont la distribution est également autorisée sans restriction, à condition de l’attribuer à son auteur en citant son nom.
Except otherwise specified, this repository resources are provided under Creative Commons Licence CC-BY 3.0: Attribution.
The licensor permits others to copy, distribute, display, and perform the work. In return, licenses must give the original author credit.
\ No newline at end of file
ressources-md:
for i in module1/ressources module2/ressources module2/slides module3/ressources \
module4/ressources module5/ressources module6/ressources; do \
make -C $$i ressources-md; \
done
%.md: %.org
rm -f $@
LANG=C ; pandoc -s -f org -t gfm -o $@ $^
mv $@ $@.bak
echo '---' > $@
grep -i -e "#+TITLE:" -e "#+AUTHOR:" $^ | sed 's/#+//' >> $@ # -e "#+DATE:" ## echo "DATE: `date '+%B %e, %Y'`" >> $@
git log $^ | grep Date | head -n 1 | sed 's/+.*//' >> $@
sed -i -e 's/TITLE:/title:/i' -e 's/AUTHOR:/author:/i' -e 's/Date:/date:/i' $@
echo "---\\n" >> $@
cat $@.bak >> $@
rm $@.bak
chmod a-wx $@
# %.html: %.org
# emacs -batch $^ --funcall org-html-export-to-html
# sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
# -e 's/<li>/<li style="margin-bottom:0;">/g' \
# -e 's/<ul>/<ul style="margin:0 0;">/g' $@
# mv $@ $@.bak
# html_png_inliner.pl < $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
# rm $@.bak
clean:
rm -f *~
# Ressources du Mooc Recherche reproductible / Reproducible research Mooc resources
[English version below]
Cet entrepôt contient toutes les ressources du Mooc "Recherche reproductible : principes méthodologiques pour une science transparente" au format orgmode ou markdown.
Sur [cette page](https://learninglab.gitlabpages.inria.fr/mooc-rr/mooc-rr-ressources/), vous trouverez les liens vers les pages html générées automatiquement ainsi que les liens vers FUN (session 02)
-----------------------------------------------------------------
This repository contains all the resources of the Mooc "Reproducible Research: Methodological Principles for Transparent Science" in orgmode or markdown format.
On[this page] (https://learninglab.gitlabpages.inria.fr/mooc-rr/mooc-rr-ressources/), you will find links to automatically generated html pages as well as links to FUN (session 02)
\ No newline at end of file
#!/usr/bin/perl -w
use strict;
my($usage) = "Usage: pandox_fixer.pl org_md_files.lst";
($#ARGV==0) or die $usage;
sub pandoc_export {
my($input)=shift(@_);
########### Git date #################
my($gitdate)=`git log --date=short $input | grep Date | head -n 1`;
chomp($gitdate);
$gitdate =~ s/Date: *//g;
$gitdate =~ s/\s*\+.*$//g;
########### Input file ###############
my($type) = "";
my($output) = $input;
if($input =~ /.md$/) {
$type = "gfm";
$output =~ s/.md$/.html/;
} elsif ($input =~ /.org$/) {
$type = "org";
$output =~ s/.org$/.html/;
} else {
die "Usage: pandox_fixer.pl input.md";
}
my($output_temp) = $output."tmp";
########### URL Fixing ###############
my($input_path)=$input;
$input_path =~ s|/[^/]*$||g;
my($raw_path) = "https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/raw/master/".$input_path;
my($raw_path_percent) = $raw_path; $raw_path_percent =~ s/^http/%/g;
my($tree_path) = "https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/tree/master/".$input_path;
my($pages_path) = "https://learninglab.gitlabpages.inria.fr/mooc-rr/mooc-rr-ressources/".$input_path;
my($pages_path_percent) = $pages_path; $pages_path_percent =~ s/^http/%/g;
my($gitlab_origin)= "https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/";
########### Pandoc #################
print "Exporting $input\n";
my($pandoc_output) = `LANG=C ; pandoc -s --mathjax -f $type -t html -o $output_temp $input`;open INPUT, $output_temp or die;
open OUTPUT, "> ".$output or die;
while(defined(my $line=<INPUT>)) {
if($line =~ /<p class="author"/) { next; }
# if($line =~ /<h1 class="title"/) { next; }
if($line =~ /<p class="date"/) { next; }
if($line =~ /<p>.*broken-links:nil/) { next; }
# $line =~ s|https://gitlab.inria.fr/learninglab/|https://learninglab.gitlabpages.inria.fr/|g; ## Not such a good idea!
if($line =~ /<body>/) {
if($output=~ /_fr.html/) {
$line =~ s|<body>|<body>Les <a href='$gitlab_origin/$input'>sources de ce document sont disponibles sur gitlab</a>.|g;
$line .= "<br><i>Version du $gitdate.</i><br><hr/>\n"
} else {
$line =~ s|<body>|<body>The <a href='$gitlab_origin/$input'>source of this document is available on gitlab</a>.|g;
$line .= "<br><i>Last version: $gitdate</i><br><hr/>\n"
}
}
$line =~ s|<span class="smallcaps">TOC</span>||g;
$line =~ s|---</p>|<hr/>|g;
# $line =~ s|Date:.*<br|<i>Date: $gitdate</i><br|g;
# $line =~ s|<p>TITLE:\(.*\)<br|<b>TITLE:$1</b><br|g;
#### Processing links to images, org files, archives, ...
$line =~ s|img src="http|img src="%|g;
$line =~ s|img src="([^%][^"]*)"|img src="$raw_path/$1"|g; # ?inline=false
$line =~ s|img src="%|img src="http|g;
$line =~ s|href="http|href="%|g;
$line =~ s|href="([^%#][^"]*.tgz)"|href="$pages_path_percent/$1"|g;
$line =~ s|href="([^%#][^"]*)"|href="$tree_path/$1"|g; # ?inline=false
$line =~ s|href="(#[^"]*)-"|href="$1"|g;
$line =~ s|href="(#[^"]*)--([^"]*)"|href="$1-$2"|g;
$line =~ s|href="(#[^"]*)--([^"]*)"|href="$1-$2"|g;
$line =~ s|href="(#[^"]*)--([^"]*)"|href="$1-$2"|g;
$line =~ s|href="%|href="http|g;
# if($line =~ /img src="([^%][^"]*)"/) {
# $line = "\t".$line;
# }
#### Changing headers
foreach my $i (4,3,2,1) {
my($j)=$i+1;
$line =~ s|<h$i|<h$j|g;
$line =~ s|</h$i|</h$j|g;
}
print OUTPUT $line;
}
close OUTPUT;
close INPUT;
unlink($output_temp);
}
sub main() {
my($input_list)=shift(@ARGV);
open LIST, $input_list or die;
open INDEX, "> public/index.org" or die;
my($f);
print INDEX "| Gitlab Origin | Pandoc HTML (Gitlab pages) | FUN Outcome |
|---+---+---|\n";
while(defined($f = <LIST>)) {
chomp($f);
if($f =~ /^#/) { warn "Skipping $f"; next;}
if($f =~ /^\s*$/) {
print INDEX "|---+---+---|\n";
next;
}
my($file,$url) = split(/\s*#\s*/,$f);
if($file eq "" || !defined($url)) { warn "Malformed line"; next;}
# print "'$file' --- '$url'\n";
pandoc_export($file);
my($html)=$file; $html=~ s/\.[^\.]*$/.html/g;
my($url_id) = $url; $url_id =~ s|^.*jump_to_id/||g;
print INDEX "| [[https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/tree/master/$file][$file]] | [[$html]] | [[$url][$url_id]] |\n";
}
print INDEX "|---+---+---|\n";
close INDEX;
close LIST;
my($pandoc_output) = `LANG=C ; pandoc -s -c readtheorg.css -f org -t html -o public/index.html public/index.org`;
}
main()
"","speed","dist"
"1",4,2
"2",4,10
"3",7,4
"4",7,22
"5",8,16
"6",9,10
"7",10,18
"8",10,26
"9",10,34
"10",11,17
"11",11,28
"12",12,14
"13",12,20
"14",12,24
"15",12,28
"16",13,26
"17",13,34
"18",13,34
"19",13,46
"20",14,26
"21",14,36
"22",14,60
"23",14,80
"24",15,20
"25",15,26
"26",15,54
"27",16,32
"28",16,40
"29",17,32
"30",17,40
"31",17,50
"32",18,42
"33",18,56
"34",18,76
"35",18,84
"36",19,36
"37",19,46
"38",19,68
"39",20,32
"40",20,48
"41",20,52
"42",20,56
"43",20,64
"44",22,66
"45",23,54
"46",24,70
"47",24,92
"48",24,93
"49",24,120
"50",25,85
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Notebook Python R\n",
"\n",
"## Import des données dans Python"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>speed</th>\n",
" <th>dist</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>8</td>\n",
" <td>16</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 speed dist\n",
"0 1 4 2\n",
"1 2 4 10\n",
"2 3 7 4\n",
"3 4 7 22\n",
"4 5 8 16"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"# data_url = \"https://forge.scilab.org/index.php/p/rdataset/source/file/master/csv/datasets/cars.csv\"\n",
"data_url = \"cars.csv\"\n",
"df_python = pd.read_csv(data_url)\n",
"df_python.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Supression de la première colonne"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>speed</th>\n",
" <th>dist</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>7</td>\n",
" <td>22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>8</td>\n",
" <td>16</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" speed dist\n",
"0 4 2\n",
"1 4 10\n",
"2 7 4\n",
"3 7 22\n",
"4 8 16"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_python.drop(df_python.columns[[0]], axis=1, inplace=True)\n",
"df_python.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary avec Python"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>speed</th>\n",
" <th>dist</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>50.000000</td>\n",
" <td>50.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>15.400000</td>\n",
" <td>42.980000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>5.287644</td>\n",
" <td>25.769377</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>4.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>12.000000</td>\n",
" <td>26.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>15.000000</td>\n",
" <td>36.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>19.000000</td>\n",
" <td>56.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>25.000000</td>\n",
" <td>120.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" speed dist\n",
"count 50.000000 50.000000\n",
"mean 15.400000 42.980000\n",
"std 5.287644 25.769377\n",
"min 4.000000 2.000000\n",
"25% 12.000000 26.000000\n",
"50% 15.000000 36.000000\n",
"75% 19.000000 56.000000\n",
"max 25.000000 120.000000"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_python.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary avec R"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from rpy2.robjects import pandas2ri\n",
"pandas2ri.activate()\n",
"from rpy2.robjects.packages import importr"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" speed dist \n",
"\r\n",
" Min. : 4.0 Min. : 2.00 \n",
"\r\n",
" 1st Qu.:12.0 1st Qu.: 26.00 \n",
"\r\n",
" Median :15.0 Median : 36.00 \n",
"\r\n",
" Mean :15.4 Mean : 42.98 \n",
"\r\n",
" 3rd Qu.:19.0 3rd Qu.: 56.00 \n",
"\r\n",
" Max. :25.0 Max. :120.00 \n",
"\n"
]
}
],
"source": [
"base = importr('base')\n",
"print(base.summary(df_python))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\r\n",
" Numeric \n",
"\r\n",
" mean median var sd valid.n\n",
"\r\n",
"speed 15.40 15 27.96 5.29 50\n",
"\r\n",
"dist 42.98 36 664.06 25.77 50\n",
"\n"
]
}
],
"source": [
"prettyR = importr('prettyR')\n",
"print(prettyR.describe(df_python))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Liens utiles\n",
"\n",
"- http://rpy.sourceforge.net/rpy2/doc-2.4/html/introduction.html\n",
"- https://rpy2.readthedocs.io/en/version_2.8.x/"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
This diff is collapsed.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Notebook R"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
" speed dist \n",
" Min. : 4.0 Min. : 2.00 \n",
" 1st Qu.:12.0 1st Qu.: 26.00 \n",
" Median :15.0 Median : 36.00 \n",
" Mean :15.4 Mean : 42.98 \n",
" 3rd Qu.:19.0 3rd Qu.: 56.00 \n",
" Max. :25.0 Max. :120.00 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summary(cars)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nGMU0FVKti2PVToxiWgqp4u2aaidGIW2FBJUSEgQICQKEBAFCggAhQYCQIEBIECAkCBASBAgJ\nAoQEAUKCACFBgJAgQEgQICQIEBIECAkChAQBQvoc0/cv4XZCeh/Rd9TiHkI6H1FI3EhI3wZU\nErcR0rcBhcRthPRtQCFxGyGdj6gjbiSk9xGt2nEPIX2OKSNuJyQIaCskzxpUqqWQXMdQraZC\nKjU8/FZDIdnroV5CggAhQUBDIblGol5NhWTVjlq1FJJ9JKrVVkhQqaIhvTyuuqPV+mWoIWAU\nBUPaL7ovy0GGgJEUDGnd9c/b06Pdpu/WQwwBIykYUt9tPx9vu36IIWAkBUP6tuL29/Jbd+7G\nIWAknpEgoOw10mZ3euQaiakpufy9PHvtttgPMgSMo+w+0vq0j9SvHu0jMS3ubIAAIUGAkCBA\nSBAgJAgQEgQICQKEBAGVhgSNueGrPB9OSq1Tq3Ve1U5sFvOq9YM81Du1WudV7cRmMa9aP8hD\nvVOrdV7VTmwW86r1gzzUO7Va51XtxGYxr1o/yEO9U6t1XtVObBbzqvWDPNQ7tVrnVe3EZjGv\nWj/IQ71Tq3Ve1U5sFvOq9YM81Du1WudV7cRmMa9aP8hDvVOrdV7VTmwW86r1gzzUO7Va51Xt\nxGYxr1o/yEO9U6t1XtVObBbzqvWDPNQ7tVrnVe3EZjGvWj9IaIqQIEBIECAkCBASBAgJAoQE\nAUKCACFBgJAgQEgQICQIEBIECAkChAQBQoKASkO6+XuZD+rpY0LrvuvX+1Hn8s3HxOo6bU+L\nz7NU1Qn7mlfwfNVy0r/b1vUV8W77MaHlaXKLcWdz5mNidZ229Wku/fErtqoT9jWv5Pmq5KT/\nYdutxp7C37b9+yl/6frt8XcvI0/ow+fEqjpt2+5hf3yufKjshJ3NK3m+6gzpqXscewp/eeqW\n71+v627z+utzLXP8mlhVp231Nqfj1Ko6YWfzSp6vWkN6GnsKf+nWh/ev11W3O1T0z//XxKo8\nbV11J+zkLaTc+aozpFW3eXi9IBx7Gt9sDx9fr9//M7qviVV42vbdsroTdnSaV/J8VfSxnVm9\nXQQux57HH+oM6XAWUnWn7en4qq6+E/Y2r+T5quhjO9N1z6//aKxre6VSe0j1nbZdf3w5V98J\n+5hX7nzV87H9bV/LgumH2kN6U9Fp2/enf+2rO2Hv83r/TeR8VfOx/Us9Z/7N+3z62r4u/phK\nPRNbvn2JVnfClt/Sicyrmo/tX+o582++rdrtKlqEqjOk3WK5Oz2o7IR9zuvdhEPqu+N+eDVn\n/sP7GX88bYtsunqWxz6fKms6bZvPq/i6TtjXvJLnq86Q1sdzvn/bx6tIpXc2fE6sqtO2+1oN\nq+qEnc0reb7qDGnfn9Yl6/gX7MvHa4BFbavM7xOr6rQ9dF93stV0ws7mlTxfdYb0+s9E3y3q\nWcV99xHS/nQz87hz+eZ8YrWctu4spJpO2J/zCp2vSkOCtggJAoQEAUKCACFBgJAgQEgQICQI\nEBIECAkChAQBQoIAIUGAkCBASBAgJAgQEgQICQKEBAFCggAhQYCQIEBIECAkCBASBAgJAoQE\nAUKCACFBgJAgQEgQICQIEBIECGl6avmp5rPinE+PkEbgnE+PkEbgnE+PkEbgnFdvs+y65eZw\nCmT9+cPBnxZd//TXw3XfrYU0Bue8dk9vP8z+6RjS4/HR8vh/V92/Hi6Pj1ZCGoFzXru+2x4O\nz93iGFK/PWz77vn1Wapb7g/7Zbf59vD5/Q/4pJbnnNeuOyZy9mjTrY7PQvvXh/u/Hr6c/oBP\nannOee3Wry/Wttvjo/dAjv/pPvzx8HD25yjJOa/e4+trta7fCalqznkDNuvF2zXS6XdnyXz8\n9vtDIY3AOW/DWz1vl0APx6uhjwunvx++CGkEznntFsdVum+rdh/rc4en4wrD2cONVbvROOe1\ne367Ano5hvS2T3T8v6dHpyun84enLaUHIY3AOa/e6c6G44u610BW3eLrdobuYffnw0d3NozE\nOW+HQCrmc9MOIVXM56YdQqqYz007hFQxnxsIEBIECAkChAQBQoIAIUGAkCBASBAgJAgQEgQI\nCQKEBAFCggAhQYCQIEBIECAkCBASBAgJAoQEAUKCACFBgJAgQEgQICQIEBIECAkC/gNzeDUu\n0A6vdAAAAABJRU5ErkJggg==",
"text/plain": [
"plot without title"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(cars)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<h3>Hello</h3>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import display, HTML\n",
"display(HTML('<h3>Hello</h3>'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Liens utiles :\n",
"\n",
"- https://stackoverflow.com/questions/43965823/convert-notebook-generated-html-snippet-to-latex-and-pdf\n",
"- https://github.com/jupyter/nbconvert/issues/474"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
SASmarkdown notebook
====================
Reference manual
================
[SASmarkdown.pdf](https://cran.r-project.org/web/packages/SASmarkdown/SASmarkdown.pdf)
Configuration
=============
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
require(SASmarkdown)
saspath <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe"
sasopts <- "-nosplash -ls 75"
knitr::opts_chunk$set(engine='sas', engine.path=saspath,
engine.opts=sasopts, comment="")
```
Listing output
==============
```{r, engine='sas', collectcode=TRUE, error=FALSE}
proc means data=sashelp.class;
run;
ods listing gpath='D:\figures';
ods graphics / imagename="fig" imagefmt=png;
title 'Student Weight by Student Height';
proc sgplot data=sashelp.class noautolegend;
pbspline y=weight x=height;
run;
```
Procédure MEANS
Variable N Moyenne Ecart-type Minimum Maximum
-------------------------------------------------------------------------
Age 19 13.3157895 1.4926722 11.0000000 16.0000000
Height 19 62.3368421 5.1270752 51.3000000 72.0000000
Weight 19 100.0263158 22.7739335 50.5000000 150.0000000
-------------------------------------------------------------------------
`![figure](D:\figures\fig.png)`
![figure](images/fig.png)
HTML output (vue du fichier pdf)
===========
```{r, engine='sashtml', collectcode=TRUE, error=FALSE}
proc means data=sashelp.class;
run;
```
Tableau mal converti en pdf
Variable
N
Moyenne
Ecart-type
Minimum
Maximum
Age
Height
Weight
19
19
19
13.3157895
62.3368421
100.0263158
1.4926722
5.1270752
22.7739335
11.0000000
51.3000000
50.5000000
16.0000000
72.0000000
150.0000000
```{r, engine='sashtml', echo=FALSE, collectcode=TRUE, error=FALSE}
title 'Student Weight by Student Height';
proc sgplot data=sashelp.class noautolegend;
pbspline y=weight x=height;
run;
```
Pas de sortie graphique dans le fichier pdf.
\ No newline at end of file
1. [Installation et configuration des différents outils](#1-installation-et-configuration-des-diff%C3%A9rents-outils)
1. [Installer et configurer Emacs](#11-installer-et-configurer-emacs)
2. [Ajouter les chemins de R et Python dans dans la variable PATH de Windows](#12-ajouter-les-chemins-de-r-et-python-dans-dans-la-variable-path-de-windows)
3. [Installer et configurer matplotlib (librairie graphique Python)](#13-installer-et-configurer-matplotlib-librairie-graphique-python)
2. [Utilisation d'Emacs](#2-utilisation-demacs)
1. [Exécuter des commandes dos](#21-exécuter-des-commandes-dos)
2. [Exécuter du code R](#22-exécuter-du-code-r)
3. [Exécuter du code Python](#23-exécuter-du-code-python)
4. [Écrire dans le journal](#24-écrire-dans-le-journal)
# 1 Installation et configuration des différents outils
## 1.1 Installer et configurer Emacs
- Installer [Emacs modifié pour Windows](https://vigou3.github.io/emacs-modified-windows/)
- version 26.1 pour Windows 64 bits
- version 25.2 pour Windows 32 bits
- Télécharger le fichier [rr_org_archive.tgz](https://app-learninglab.inria.fr/gitlab/learning-lab/mooc-rr-ressources/raw/master/module2/ressources/rr_org_archive.tgz)
*NB : Avec 7z il faut décompresser l'archive deux fois : une première fois crée une archive `rr_org_archive.tar` et une deuxième fois crée un dossier `rr_org` contenant les fichiers `init.el` et `journal.org`.*
- Lancer Emacs
![emacs](documents/tuto_emacs_windows/images/emacs.png)
- Emacs crée le répertoire `C:\Users\***\.emacs.d`
*NB : Le répertoire est créé au premier lancement d'Emacs.*
- Placer le fichier `init.el` dedans
- Lancer Emacs
![scratch](documents/tuto_emacs_windows/images/scratch.png)
- Exécuter la commande suivante pour installer `htmlize`
```
M-x package-install RET htmlize RET
```
- Créer un dossier `C:\Users\***\org` dans l'explorateur Windows
- Placer le fichier `journal.org` dedans
---
## 1.2 Ajouter les chemins de R et Python dans dans la variable PATH de Windows
La façon de procéder est très bien expliquée [ici](http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-path-sous-windows/).
---
## 1.3 Installer et configurer matplotlib (librairie graphique Python)
- Installer la librairie `matplotlib`
- Ouvrir une invite de commande dos
- Exécuter la commande suivante
```
python -m pip install -U matplotlib
```
![install_matplotlib](documents/tuto_emacs_windows/images/install_matplotlib.png)
- Désactiver les plots interactifs dans matplotlib
Pour ce faire, il faut d'abord savoir où se trouve le fichier de configuration de matplotlib sous Windows.
Exécuter le code suivant sous Python
```
import matplotlib
matplotlib.matplotlib_fname()
```
![matplotlib](documents/tuto_emacs_windows/images/matplotlib.png)
Ouvrir le fichier `matplotlibrc` et ajouter un `#` devant la ligne qui commence par `backend`, ce qui correspond à utiliser la valeur par défaut `Agg`
---
## 1.4 Installer MiKTeX
Télécharger et installer [MiKTeX](https://miktex.org/download) en choisissant le bon système d'exploitation.
Vous serez amené à installer différents packages lors du premier export pdf.
---
---
# 2 Utilisation d'Emacs
## 2.1 Exécuter des commandes dos
- Lancer Emacs
- Créer un fichier toto.org dans l'explorateur Windows
- Ouvrir le fichier toto.org dans Emacs et saisir `<b` + `tab`.
![shell](documents/tuto_emacs_windows/images/shell.png)
- Le raccourci `C-g` permet de sortir d'une commande
---
## 2.2 Exécuter du code R
- Le raccourci `<r` + `tab` permet d'exécuter une commande R
![commandeR1](documents/tuto_emacs_windows/images/commandeR1.png)
Emacs demande le dossier de démarrage. Garder le dossier par défaut (`Entrée`)
![commandeR2](documents/tuto_emacs_windows/images/commandeR2.png)
- Le raccourci `<R` + `tab` permet d'exécuter une commande graphique R
(org-babel-temp-file \"figure\" \".png\") génère un nom de fichier temporaire.
Il faut indiquer un nom de fichier pour que l'image soit chargée lors de la réouverture du fichier Emacs.
![graphiqueR](documents/tuto_emacs_windows/images/graphiqueR.png)
Remarque : Il peut être pratique de remplacer `(org-babel-temp-file \"figure\" \".png\")` par `"D:/temp/figure.png\"` dans dans le fichier `init.el` (raccourci `<R` et `<PP`).
---
## 2.3 Exécuter du code Python
- Voir la page [Python Source Code Blocks in Org Mode](https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html)
- Le raccourci `<p` + `tab` permet d'exécuter du code Python en mode "non-session"
![python1](documents/tuto_emacs_windows/images/python1.png)
- Le raccourci `<P` + `tab` permet d'exécuter du code Python en mode "session" pour conserver les valeurs d'un bloc de code à l'autre.
![python2](documents/tuto_emacs_windows/images/python2.png)
- Le raccourci `<PP` + `tab` permet d'exécuter un graphique Python
![python4](documents/tuto_emacs_windows/images/python4.png)
- Si cette commande échoue, essayer de mettre la librairie `numpy` à jour
Exécuter le code suivant dans une invite de commande dos
```
python -m pip install -U numpy
```
---
## 2.4 Écrire dans le journal
- Ouvrir le fichier `journal.org`
- Le raccourci `C-c c` ouvre un menu demandant si on veut écrire dans la todo list ou dans le journal
![ctrl_c_c](documents/tuto_emacs_windows/images/ctrl_c_c.png)
- On appuie sur `j` pour écrire dans le journal. Un mini buffer est ouvert et Emacs modifie le fichier `journal.org` pour créer une entrée à la bonne date. On peut commencer à écrire dans le journal.
![org_mode](documents/tuto_emacs_windows/images/org_mode.png)
`C-c C-c` pour enregistrer les modifications.
- La combinaison `Alt`+ `flèche gauche` ou `flèche droite` permet de décaler les puces à gauche ou à droite.
- Penser à enregistrer avant de quitter !
# Configurer Gitlab
- Accéder à [Gitlab](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/xblock/block-v1:inria+41016+session01bis+type@lti+block@05a0ce425f1741e5bee5049040f70529/handler/preview_handler)
![sign_in](documents/tuto_git_gtlab/images/sign_in.png)
- NB : Il faut accéder à Gitlab depuis la plateforme FUN. On obtient une erreur 405 en accédant directement à la page https://app-learninglab.inria.fr/gitlab/users/sign_in.
![erreur 405](documents/tuto_git_gtlab/images/erreur405.png)
- Cliquer sur le premier **Sign in**. L'authentification est automatique à cette étape.
![projects](documents/tuto_git_gtlab/images/projects.png)
La grande chaîne de caractères remplacée ici par xxx est le login qu'il faudra utiliser dans Git pour accéder à Gitlab.
- Pour récupérer le mot de passe prédéfini, il faut utiliser le [Gitlab credentials retrieval
tool](https://app-learninglab.inria.fr/jupyterhub/services/password). On retrouve alors le login et le mot de passe.
![settings](documents/tuto_git_gtlab/images/password_retrieval.png)
- Il est possible de modifier le mot de passe dans `Account / Paramètres / Mot de passe`. NB : Cela empêchera d'utiliser les notebook Jupyter du MOOC.
![settings](documents/tuto_git_gtlab/images/password.png)
---
# Configurer Git
## Opérations de configuration à faire sur Git (parcours RStudio et OrgMode)
- Enregistrer l'email et le nom de l'utilisateur
```
git config --global --user.email you@example.com
git config --global --user.name Your Name
```
NB : Ne pas mettre de guillemets.
Ces deux paramètres sont obligatoire pour pouvoir commiter sinon on obtient le message suivant
![commit3](documents/tuto_git_gtlab/images/commit3.png)
- Si vous êtes derrière un proxy, il faut le définir dans Git
```
git config --global http.proxy http://proxy.server.com:port
```
On peut aussi définir le proxyUsername pour n'avoir que le mot de passe à saisir
```
git config --global http.proxy http://proxyUsername@proxy.server.com:port
```
- Option pour que le login et mot de passe soient enregistrés pendant 1 heure
```
git config --global credential.helper "cache --timeout=3600"
```
## Commandes pour afficher et effacer des options de configuration (parcours RStudio et OrgMode)
- Afficher les paramètres
```
git config --list
```
- Effacer les mots de passe enregistrés
```
git config --system --unset credential.helper
```
- Effacer le proxy
```
git config --global --unset http.proxy
```
- Effacer le message "git: 'credential-cache' is not a git command."
```
git config --global --unset credential.helper
```
## Opérations de transfert entre Git et Gitlab (parcours OrgMode)
- Récupérer l'adresse du dépôt
![adresse_depot](documents/tuto_git_gtlab/images/adresse_depot.png)
- Cloner le dépôt
```
git clone https://app-learninglab.inria.fr/gitlab/xxx/mooc-rr.git
```
On peut aussi définir l'identifiant pour n'avoir que le mot de passe à saisir
```
git clone https://xxx@app-learninglab.inria.fr/gitlab/xxx/mooc-rr.git
```
Un répertoire `mooc-rr` est créé sur votre ordinateur.
- Se placer dans le répertoire mooc-rr
```
cd mooc-rr
```
- Lister les fichiers du répertoire
```
ls (Unix)
dir (Windows)
```
- Synchroniser Git vers Gitlab
Il faut suivre les fichiers (commande `git add`) et les commiter (commande `git commit`) en local pour pouvoir les transférer sur serveur. La commande `git status` indique le statut des fichiers.
Soit un fichier `fichier.txt` à la racine du répertoire mooc-rr.
```
git status
```
![status1](documents/tuto_git_gtlab/images/status1.png)
```
git add fichier.txt
git status
```
![status2](documents/tuto_git_gtlab/images/status2.png)
```
git commit -m "message commit"
```
![commit_git](documents/tuto_git_gtlab/images/commit_git.png)
```
git status
```
![status3](documents/tuto_git_gtlab/images/status3.png)
On peut alors faire le `git push`pour transférer le fichier sur Gitlab.
```
git push
```
Demande le mot de passe
- NB : Il n'est pas possible de synchroniser vers Gitlab si des modifications ont été faites sur Gitlab et n'ont pas été répercupées en local
![rejected](documents/tuto_git_gtlab/images/rejected.png)
- Synchroniser Gitlab vers Git
```
git pull
```
# Liens utiles
- [Installer Git et Gitlab](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/courseware/66bc811404b8481da5f794de54681c5e/f6580ad8e997400faeffe9af4fd37063/)
- [Définir un proxy dans Git](https://gist.github.com/evantoli/f8c23a37eb3558ab8765)
- [Mémoriser son mot de passe](http://blog.lecacheur.com/2015/11/05/git-le-b-a-ba-memoriser-son-mot-de-passe/)
- [Livre Pro Git](https://git-scm.com/book/fr/v2/)
\ No newline at end of file
1. [Installer Python](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#1-installer-python)
2. [Installer le package Jupyter](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#2-installer-le-package-jupyter)
3. [Installer les modules complémentaires](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#3-installer-les-modules-compl%C3%A9mentaires)
4. [Lancer Jupyper](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#4-lancer-jupyper)
5. [Autres langages](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#5-autres-langages)
1. [Le package R IRKernel](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#51-le-package-r-irkernel-permet-dex%C3%A9cuter-du-code-r-dans-un-notebook-r)
2. [Le package Python rpy2](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#52-le-package-python-rpy2-permet-dex%C3%A9cuter-du-code-r-dans-un-notebook-python)
3. [Le package Python SASPy](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#53-le-package-python-saspy-permet-dex%C3%A9cuter-du-code-sas-dans-un-notebook-python)
4. [Le package Python SASKernel](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/tuto_jupyter_windows/tuto_jupyter_windows.md#54-le-package-python-saskernel-permet-dex%C3%A9cuter-du-code-sas-dans-un-notebook-sas)
# 1 Installer Python
- Installer Python
- Ajouter les chemins de Python et Python\Scripts dans dans la variable PATH de Windows
La façon de procéder est très bien expliquée [ici](http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-path-sous-windows/).
---
# 2 Installer le package Jupyter
- Méthode pour installer un package
- Ouvrir une invite de commande dos
- Exécuter la commande suivante
```
pip install jupyter
```
NB : Le raccourci `^v` ne fonctionne pas dans l'invite de commande dos. La fonction "coller" est disponible avec le bouton droit de la souris.
---
# 3 Installer les modules complémentaires
- Ouvrir une invite de commande dos
- Exécuter les commandes suivantes
## **jupyter_contrib_nbextensions** pour replier le code à l'affichage
```
pip install jupyter_contrib_nbextensions
```
## **hide_code** pour choisir ce qui est exporté
```
pip install hide_code
jupyter-nbextension install --py hide_code
jupyter-nbextension enable --py hide_code
jupyter-serverextension enable --py hide_code
```
Choisir `Hide_code` dans le menu
![menu_hide_code](documents/tuto_jupyter_windows/images/menu_hide_code.png)
On obtient ceci
![hide_code](documents/tuto_jupyter_windows/images/hide_code.png)
Utiliser les icônes ci-dessous pour l'export
![export_hide_code](documents/tuto_jupyter_windows/images/export_hide_code.png)
NB : L'export semble mal fonctionner sous Windows (cf. [discussion](https://www.fun-mooc.fr/courses/course-v1:inria+41016+session01bis/discussion/forum/0c40378f778710ac14c97e2f0d8e7bb6c9d8d0c2/threads/5bd1685da0241eb2d5005bc7)).
# 4 Lancer Jupyper
- Ouvrir une invite de commande dos
- Exécuter la commande suivante
```
jupyter notebook
```
---
# 5 Autres langages
Jupyper permet par défaut d'exécuter du code Python. Des packages permettent d'exécuter d'autres langages.
## 5.1 Le package R [IRKernel](https://cran.r-project.org/web/packages/IRkernel/IRkernel.pdf) permet d'exécuter du code R dans un notebook R
- Lancer R ou RStudio
- Installer le package `IRkernel`
```
install.packages('IRkernel',dep=TRUE)
IRkernel::installspec() # to register the kernel in the current R installation
```
- On peut alors créer un notebook R
![new_notebook](documents/tuto_jupyter_windows/images/new_notebook.png)
![notebook_R](documents/tuto_jupyter_windows/images/notebook_R.png)
On remarque l'icône du logiciel R en haut à droite.
- [Exemple de notebook R](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/notebooks_jupyter/notebook_R/notebook_R.ipynb)
- Lien utile : https://irkernel.github.io/installation/
---
## 5.2 Le package Python **rpy2** permet d'exécuter du code R dans un notebook Python
- Le package `rpy2` s'installe difficilement par méthode standard.
- Télécharger le fichier binaire qui correspond au système d'exploitation [ici](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2)
- Ouvrir une invite de commande dos
- Se placer dans le dossier de téléchargement
- Exécuter la commande suivante
```
python -m pip install rpy2‑2.9.4‑cp37‑cp37m‑win_amd64.whl # adapter le nom du fichier
```
- Lancer Jupiter et créer un notebook Python
- Exécuter la commande suivante
```
%load_ext rpy2.ipython
```
- Installer le package `tzlocal` à l'aide de la commande `pip`
- [Exemple de notebook Python/R](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/notebooks_jupyter/notebook_Python_R/notebook_Python_R.ipynb)
- Lien utile : https://stackoverflow.com/questions/14882477/rpy2-install-on-windows-7
NB : Je n'ai pas eu besoin de définir les variables d'environnement R_HOME et R_USER.
---
## 5.3 Le package Python [SASPy](https://sassoftware.github.io/saspy/) permet d'exécuter du code SAS dans un notebook Python
- Installer le package `saspy` à l'aide de la commande `pip`
- Modifier le fichier C:\Program Files\Python\Python37\Lib\site-packages\saspy\sascfg_sav.py pour l'adapter à votre système
Dans les deux images ci-dessous, la fenêtre de gauche correspond au fichier initial et celle de droite au fichier modifié.
![sascfg1](documents/tuto_jupyter_windows/images/sascfg1.png)
![sascfg2](documents/tuto_jupyter_windows/images/sascfg2.png)
- [Exemple de notebook Python/SAS] (https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/notebooks_jupyter/notebook_Python_SAS/notebook_Python_SAS.ipynb)
- NB : L'export Jupyter vers pdf ne fonctionne pas pour les sorties HTML et donc SAS. Il est possible de faire l'export depuis pandoc.
- Exporter le document au format HTML
- Exécuter la commande suivante
```
pandoc --variable=geometry:a4paper --variable=geometry:margin=1in notebook_sas.html -o notebook_sas.pdf
```
mais ça ne marche pas pour tous les tableaux et on perd la coloration syntaxique.
---
## 5.4 Le package Python [SASKernel](https://sassoftware.github.io/sas_kernel/) permet d'exécuter du code SAS dans un notebook SAS
- Le package `sas_kernel` est basé sur le package `saspy`. Installer `saspy` en suivant les instructions de la section 4.3 si ce n'est déjà fait.
- Installer le package `sas_kernel` à l'aide de la commande `pip`
- On peut alors créer un notebook SAS
![new_notebook](documents/tuto_jupyter_windows/images/new_notebook.png)
![notebook_SAS](documents/tuto_jupyter_windows/images/notebook_SAS.png)
On remarque l'icône du logiciel SAS en haut à droite.
- [Exemple de notebook SAS](https://app-learninglab.inria.fr/gitlab/85bc36e0a8096c618fbd5993d1cca191/mooc-rr/blob/master/documents/notebooks_jupyter/notebook_SAS/notebook_SAS.ipynb)
- NB : L'export Jupyter vers pdf ne fonctionne pas pour les sorties HTML et donc SAS. Il est possible de faire l'export depuis pandoc.
- Exporter le document au format HTML
- Exécuter la commande suivante
```
pandoc --variable=geometry:a4paper --variable=geometry:margin=1in notebook_sas.html -o notebook_sas.pdf
```
mais ça ne marche pas pour tous les tableaux et on perd la coloration syntaxique.
- Lien utile : https://sassoftware.github.io/sas_kernel/install.html
# 1 Installer Magit
Plusieurs méthodes sont proposées [ici] (https://magit.vc/manual/magit/Installing-from-an-Elpa-Archive.html).
Celle-ci a été testée sur Windows :
- Ajouter le code suivant dans le fichier `.emacs.d/init.el`
```
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/") t)
```
- Lancer Emacs et exécuter les commandes suivantes
```
M-x package-refresh-contents RET
M-x package-install RET magit RET
```
NB : `M-` correspond à la touche `<Alt>`, `RET` à la touche `<Entrée>`
# 2 Lancer Magit
- Ouvrir un fichier et exécuter le racourci `C-x g`
- Magit demande le chemin du répertoire Git
- Indiquer le chemin du répertoire mooc-rr
![git1](documents/tuto_magit/images/git1.png)
\ No newline at end of file
# Dans Git
- Enregistrer l'email et le nom de l'utilisateur
```
git config --global --user.email you@example.com
git config --global --user.name Your Name
```
NB : Ne pas mettre de guillemets.
Ces deux paramètres sont obligatoire pour pouvoir commiter sinon on obtient le message suivant
![commit3](documents/tuto_rstudio_gitlab/images/commit3.png)
- Si vous êtes derrière un proxy, il faut le définir dans Git
```
git config --global http.proxy http://proxy.server.com:port
```
On peut aussi définir le proxyUsername pour n'avoir que le mot de passe à saisir
```
git config --global http.proxy http://proxyUsername@proxy.server.com:port
```
- Option pour que le login et mot de passe soient enregistrés pendant 1 heure
```
git config --global credential.helper "cache --timeout=3600"
```
# Dans RStudio
- File / New Project / Version Control
![new_project](documents/tuto_rstudio_gitlab/images/new_project.png)
![git](documents/tuto_rstudio_gitlab/images/git.png)
- Récupérer l'adresse du dépôt
![adresse_depot](documents/tuto_rstudio_gitlab/images/adresse_depot.png)
- Indiquer l'adresse du dépôt dans le champ "Repository URL"
- Il est possible de faire précéder l'adresse du dépôt par `xxx@`, xxx étant l'identifiant Gitlab, pour ne pas avoir à le renseigner par la suite
![clone](documents/tuto_rstudio_gitlab/images/clone.png)
- Si vous êtes derrière un proxy, il faut le définir dans Git
- Git demande le mot de passe du proxy
![password_proxy](documents/tuto_rstudio_gitlab/images/password_proxy.png)
- Git se connecte à Gitlab et récupère l'ensemble des données
- RStudio redémarre pour se placer dans un mode lié à Git
![rstudio](documents/tuto_rstudio_gitlab/images/rstudio.png)
- Module2 / exo1 / toy_document.Rmd
- Modifier le fichier
- Sauvegarder
- Aller dans Git pour effectuer le commit
![commit](documents/tuto_rstudio_gitlab/images/commit.png)
![commit2](documents/tuto_rstudio_gitlab/images/commit2.png)
- Sélectionner les lignes à commiter puis cliquer sur "commit"
![commit5](documents/tuto_rstudio_gitlab/images/commit5.png)
Les modifications sont pour l'instant uniquement sur la machine. Elles n'ont pas été propagées sur Gitlab.
- Cliquer sur "push" pour les propager sur Gitlab
![push](documents/tuto_rstudio_gitlab/images/push.png)
![push2](documents/tuto_rstudio_gitlab/images/push2.png)
![push3](documents/tuto_rstudio_gitlab/images/push3.png)
- NB : Il n'est pas possible de synchroniser vers Gitlab si des modifications ont été faites sur Gitlab et n'ont pas été répercupées en local
![push4](documents/tuto_rstudio_gitlab/images/push4.png)
- Cliquer sur "pull" pour synchroniser Gitlab vers Git
\ No newline at end of file
* GitLab CI configuration
Here is the manually filtered list of org and md files that need to be
exported to html with the gitlab pages CI mechanism. Have a look at
file:html_src_files.lst to know which files are exported.
Here is the yaml file used for CI. All the work is done in a single
perl script.
#+BEGIN_SRC yaml :tangle .gitlab-ci.yml
image: brospars/pandoc-gitlab-ci:latest
pages:
stage: deploy
script:
- pandoc --version
# - pandoc --help
# - pandoc --list-input-formats # Broken as pandoc dates from 2013 on this image! :(
- bin/pandoc_fixer.pl html_src_files.lst;
- for file in `cat html_src_files.lst | sed 's/#.*//g' `; do
mkdir -p public/`dirname ${file}`;
mv ${file%.*}.html public/`dirname ${file}`/;
done
- cd module2/ressources/; tar zcf rr_org_archive.tgz rr_org/init.el rr_org/journal.org rr_org/init.org ; cd ../.. ; mv module2/ressources/rr_org_archive.tgz public/module2/ressources/
- cd module2/ressources/; tar zcf replicable_article.tgz replicable_article/Makefile replicable_article/article.org replicable_article/biblio.bib ; cd ../.. ; mv module2/ressources/replicable_article.tgz public/module2/ressources/
artifacts:
paths:
- public
only:
- master
#+END_SRC
* Update script =html_src_files.lst=
Once the content of the MOOC has been exported from FUN into =/tmp/course/=:
#+begin_src shell :results output :exports both
for file in `cat html_src_files.lst | sed -e 's/#.*//g'`; do
FILE=`echo $file | sed -e 's|^\./||' -e 's|.org$||' -e 's|.md$||'`
URL=`grep -l "gitlabpages.*$FILE" /tmp/course/html/*.html | sed -e 's|.html$||' -e 's|/tmp/course/html/|https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/|'`
echo "$file # $URL"
done
#+end_src
#+RESULTS:
#+begin_example
./module1/ressources/introduction_to_markdown_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/ecbcbd8bfafd48e9a912f66237b76c92
./module1/ressources/introduction_to_markdown.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/ecbcbd8bfafd48e9a912f66237b76c92
./module1/ressources/sequence1_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/9719a1f5b81a4f2d89c27e54ce81f498
./module1/ressources/sequence2_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/565a72fe3c8b464f8ec3e31b56cd4c57
./module1/ressources/sequence3_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/d85eb783ff884ff8b1306b680326b198
./module1/ressources/sequence5_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/c96bfaf3804847a38d2a8850ee0baf54
./module1/ressources/sequence1.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/9719a1f5b81a4f2d89c27e54ce81f498
./module1/ressources/sequence2.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/565a72fe3c8b464f8ec3e31b56cd4c57
./module2/ressources/maintaining_a_journal.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/0af0b6bf03194c1bb2798c29d7375a76
./module2/ressources/maintaining_a_journal_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/0af0b6bf03194c1bb2798c29d7375a76
./module2/ressources/jupyter.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/8dcce91be83c4ece834abfa98b8bbfb1
./module2/ressources/jupyter_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/8dcce91be83c4ece834abfa98b8bbfb1
./module2/ressources/rstudio.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/09d339f009cd4b45a468583ab7730221
./module2/ressources/rstudio_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/09d339f009cd4b45a468583ab7730221
./module2/ressources/gitlab.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/448cd6f9018545d1a67405551add6fda
./module2/ressources/gitlab_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/448cd6f9018545d1a67405551add6fda
./module2/ressources/emacs_orgmode.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/954f94ce4f9a4d858d47b41793cc96c8
./module2/ressources/emacs_orgmode_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/954f94ce4f9a4d858d47b41793cc96c8
./module2/ressources/sequence6_examples/README.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/827b36e10ddd49239f1c62cc1903951a
./module2/ressources/sequence6_examples/README_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/827b36e10ddd49239f1c62cc1903951a
./module2/exo4/stat_activity.org #
./module2/slides/ressources.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/36723edefc72488ab44e269501cfc9f8
./module2/slides/ressources_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/36723edefc72488ab44e269501cfc9f8
./module3/ressources/iso_date_format.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/316fc24edc1b44278ada4ca531c705be
./module3/ressources/iso_date_format_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/316fc24edc1b44278ada4ca531c705be
./module3/ressources/influenza-like-illness-analysis-orgmode+R.org #
./module3/ressources/influenza-like-illness-analysis-orgmode+Lisp+Python+R.org #
./module3/ressources/influenza-like-illness-analysis-orgmode.org #
./module3/ressources/analyse-syndrome-grippal-orgmode.org #
./module3/ressources/analyse-syndrome-grippal-orgmode+R.org #
./module3/ressources/analyse-syndrome-grippal-orgmode+Lisp+Python+R.org #
./module4/ressources/resources_refs.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/3c3c8cb2160d44e09a087b825beb92b8
./module4/ressources/resources_refs_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/3c3c8cb2160d44e09a087b825beb92b8
./module4/ressources/exo1.org #
./module4/ressources/exo2.org #
./module4/ressources/exo3.org #
./module4/ressources/resources_environment.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/4be922aa6b8c471ab1addcdbddb4e487
./module4/ressources/resources_environment_fr.org # https://www.fun-mooc.fr/courses/course-v1:inria+41016+session02/jump_to_id/4be922aa6b8c471ab1addcdbddb4e487
./documents/notebooks/notebook_RStudio_SASmarkdown.md #
./documents/tuto_git_gtlab/tuto_git_gitlab.md #
./documents/tuto_rstudio_gitlab/tuto_rstudio_gitlab.md #
./documents/tuto_magit/tuto_magit.md #
./documents/tuto_emacs_windows/tuto_emacs_windows.md #
./documents/tuto_jupyter_windows/tuto_jupyter_windows.md #
#+end_example
* Local Testing
Having to go through a commit/push all the time to check whether it
works or not is a pain. Here a simple mechanism that allows to test
the CI script locally.
#+begin_src perl :results output :file gitlab-ci.sh :exports both
open INPUT, ".gitlab-ci.yml";
my($line);
my($script_found)=0;
while(defined($line=<INPUT>)) {
if($line=~/\s*script:/) { $script_found=1; next;}
if($line=~/\s*artifacts:/) { $script_found=0; }
if($script_found) {
if($line =~ /^\s*#\s/) { next; }
# if($line =~ /mv.*public/) { next; }
$line =~ s/^\s*-\s//g;
print($line);
}
}
#+end_src
#+RESULTS:
[[file:gitlab-ci.sh]]
#+begin_src shell :results output :exports both
chmod +x ./gitlab-ci.sh
./gitlab-ci.sh
#+end_src
This diff is collapsed.
#+TITLE: Interview de François Pellegrini : recherche reproductible et utilisation de données à caractère personnel
#+Date: <déc 2019>
#+Author: François Pellegrini
#+LANGUAGE: fr
** Biographie
*François Pellegrini*, est informaticien, professeur des universités à
l’Université de Bordeaux et chercheur au Laboratoire bordelais de
recherche en informatique1 (LaBRI) et à Inria. Il est l'auteur du
logiciel [[https://gforge.inria.fr/projects/scotch/][Scotch2]], un logiciel de partitionnement généraliste.
Il est commissaire à la Commission nationale de l’informatique et des libertés (CNIL).
** Interview
*** Comment concilier la logique de transparence inhérente à celle de la recherche reproductible avec le respect de contraintes de confidentialité, dans le cas d'utilisation de données personnelles ?
La personne ayant collecté les données à caractère personnel acquiert, de par le
Règlement Général sur la Protection des Données (RGPD), le statut de
"*responsable de traitement*", qui est le "gardien" des données en question. Il
est soumis à un *principe de* "*redevabilité*" (en anglais : "*accountability*")
quant aux moyens et procédures qu'il met en place pour administrer le traitement
en question.
De fait, *sauf consentement explicite des personnes lors de la collecte*, il ne
peut placer ces données en libre accès pour les personnes inconnues souhaitant
reproduire les recherches.
Il doit leur accorder un *accès au cas par cas*, encadré par des clauses de non
divulgation, afin que les scientifiques en questions puissent mener, sur le
site du responsable de traitement (ou, à tout le moins, seulement dans le
périmètre de l'Union Européenne), des traitements compatibles avec les finalités
de recueil initial.
De fait, ils peuvent (tenter de) reproduire les résultats, mais pas mener
d'autres recherches qui seraient trop différentes de celles pour lesquelles le
consentement des personnes avait été recueilli.
Dans le cas de *données confidentielles non à caractère personnel*, la situation
est somme toute similaire, avec en moins la contrainte du respect strict de la
loi "Informatique et Libertés".
*** En tant que lecteur.rice d'articles scientifiques, sur quels critères puis-je évaluer la robustesse du protocole de constitution des données si elles sont confidentielles ?
*Le processus et les données sont deux choses différentes*.
Tu peux très bien *auditer un processus sans regarder /in concreto/ les données
qui y seront soumises*.
Il est également possible de *tester le processus avec des données synthétiques*,
afin d'en vérifier la conformité des résultats attendus, par rapport aux
caractéristiques des jeux de données qui ont été générées.
** Ressources complémententaires
Site web de la CNIL : [[https://www.cnil.fr/fr/comprendre-le-rgpd]["Comprendre le RGPD"]]
Nguyen, Benjamin. 2019. ‘Anonymization Techniques: Theory and Practice’. presented at the Cinquième École d’Hiver é-EGC, sur le thème «Privacy Preserving, Reasoning, Explaining», Metz, January 21. [[https://egc2019.sciencesconf.org/resource/page/id/12]].
Nilsonne, Gustav. 2019. ‘Hack- Finding Value in Anonymized Data: Exploring Scenarios for Secondary Use’, June. [[https://osf.io/2n8b6/]].
#+TITLE: Interview de Joël Zaffran, chercheur en sociologie
#+Date: <déc 2019>
#+Author: Joël Zaffran
#+LANGUAGE: fr
** Biographie
*Joël Zaffran* est Professeur de sociologie à
l’université de Bordeaux et chercheur au Centre Émile Durkheim qui est
une UMR dont la particularité est de regrouper des chercheurs en
science politique et en sociologie.
** Interview
*** Quel est votre domaine de recherche ? Quelles méthodes utilisez-vous pour traiter vos données ?
Mes domaines de recherche sont d’une part l’école et la jeunesse,
d’autre part le handicap. Sur le plan méthodologique, j’utilise aussi bien des
approches quantitatives que des approches qualitatives. Souvent, j’essaie
d’articuler les deux approches pour faire en sorte que la mixed method éclaire
sous plusieurs angles l’objet de recherche. C’est dans ce cadre que j’utilise
plusieurs logiciels, parfois simultanément.
*** Sur quels types de données travaillez-vous (ex. données d’enquête, etc.) et quelles sont les contraintes associées à ce type de données (ex. confidentialité) ? Comment gérez-vous ces contraintes ?
Les données quantitatives sur lesquelles je travaille soit sont issues d’un
questionnaire *ad hoc* que j’élabore en fonction de mes hypothèses puis
diffuse généralement sous Sphinx, soit sont issues d’une analyse secondaire.
Dans les deux cas, le problème de la confidentialité se pose conjointement avec
la contrainte de la CNIL.
Cela suppose donc d’une part une autorisation préalable de la CNIL après qu’une
demande a été déposée sur leur site, d’autre part une anonymisation des
individus lors de la production des résultats. À cela s’ajoute que le fait
d’utiliser Sphinx me permet de déposer mes données sur le serveur de
l’université, ce qui a l’avantage de bénéficier d’une sécurisation d’accès à
ces données.
*** Dans votre domaine, quelles ont été les évolutions majeures en termes de traitement de données ? il peut s’agir de méthodes (ex. new statistics) comme d’outils (ex. utilisation plus massive de R, etc.)
L’évolution majeure pour ce qui me concerne a été de passer de SPSS à R. Ce
passage a été contraint puisqu’il est dû à des restrictions budgétaires de
l’université. Or, j'enseignais SPSS à mes étudiants, et il a fallu que je passe
à R (qui a l’avantage d’être un logiciel libre) pour assurer la continuité de
mes enseignements. Cela étant, j’ai une licence SPSS sur mon ordinateur privé,
de sorte qu’il n’est pas rare que je passe de Sphinx à SPSS, et de SPSS à R
lorsque j’exploite les données de mes enquêtes.
Cette manière de faire présente plusieurs avantages. Tout d’abord, R me permet
de passer d’une analyse statistique des données quantitatives à une analyse
statistique des données lexicales (ce que permet de faire iramuteq). Ensuite,
j’ai dû faire récemment une analyse de survie pour des données de parcours. Or,
SPSS ne fournit (du moins à ma connaissance) ni la table des “Hazard ratio” ni
les graphiques du Schoenfeld test, alors qu’il existe un script R pour cela.
*** Comment se traduit la question de la transparence dans votre domaine de recherche ? Quels sont les points critiques dans votre discipline ? Toutes les données n’ont pas vocation à être partagées, mais comment gérez-vous le fait de pouvoir retracer votre processus de recherche ? Quelles pratiques avez-vous adoptées ?
Comme je l’ai dit, mon champ est les sciences humaines et sociales, plus
précisément la sociologie. Dans ce domaine, la question de la transparence ne
se pose pas dans des termes identiques aux sciences dures, où les enjeux
scientifiques et académiques sont différents. *En revanche, le problème de la capacité
à retracer le processus de recherche est le même, quelle que soit la discipline.*
Pour ce qui me concerne, il s’agit surtout de *garder une trace des scripts et des
tableaux construits avant de publier les résultats sous la forme d’un article*.
Je dois dire que ce n’est pas une mince affaire puisque l’on sait bien qu’
*un article reflète mal le processus de recherche en amont de sa publication*.
J’ai deux manières de faire : la première est de préciser l’approche et la
méthode dans un *encart méthodologique* figurant dans le corps de l’article,
la deuxième est de toujours *nommer chaque tableau ou script avant de l’enregistrer*.
Cela permet de s’y retrouver dans la masse des fichiers créés.
*** Quels outils utilisez-vous ? par exemple, le recours aux logiciels propriétaires (SAS, SPSS, etc.) soulève de nombreuses difficultés dans une perspective de recherche reproductible car le code source n’est pas disponible.
Sur le plan de la traçabilité, *le recours à R est plus aisé dans la mesure où
tous les scripts utilisés sont enregistrés chronologiquement*, et qu’il suffit
d’attribuer un titre à chacun d’eux (en veillant au préalable à bien mettre le
signe #). Cela est plus difficile avec SPSS. C’est la raison pour laquelle,
comme je le disais, j’ai opté avec SPSS pour des enregistrements pas à pas du
listing des résultats.
*** Pourriez-vous décrire une histoire d'horreur ? i.e. un gros raté (ex. : données non disponibles ; impossibilité de reproduire une figure en obtenant le même résultat, impossibilité de fournir des données à un reviewer, etc.)
Mon plus grand raté est lorsqu’il s’est agi de *refaire un modèle de régression
à la demande de reviewers*. Le drame est que j’ai été dans *l’impossibilité de retrouver
les variables qui furent recodées et l’horreur a été de refaire tous les recodages*,
puis de refaire tous les tableaux avant de pouvoir refaire l’analyse dans le
sens attendu par les reviewers. Ma plus grande déception a été de voir que les
résultats initialement présentés n'étaient guère différents des résultats
produits après avoir retravaillé les données dans le sens indiqué par les reviewers.
all: introduction_to_markdown.html
ressources-md: Module1_1_MaterielSupplementaire_fr.md Module1_2_MaterielSupplementaire_fr.md\
Module1_3_MaterielSupplementaire_fr.md Module1_5_MaterielSupplementaire_fr.md\
Module1_1_SupplementaryMaterial.md Module1_2_SupplementaryMaterial.md
NLINES=10000000
%.html: %.org
emacs -batch $^ --funcall org-html-export-to-html
sed -i -e 's/<pre /<pre style="padding-left: 30px; background-color: #f6f8fa;" /g' \
-e 's/<li>/<li style="margin-bottom:0;">/g' \
-e 's/<ul>/<ul style="margin:0 0;">/g' $@
mv $@ $@.bak
cat $@.bak | grep -A $(NLINES) -e '<body>' | grep -B $(NLINES) -e '<div id="postamble" class="status">' | grep -v -e '<body>' -e '<div id="postamble" class="status">' > $@
rm $@.bak
include ../../Makefile.ressources
This diff is collapsed.
This diff is collapsed.
# -*- coding: utf-8 -*-
# -*- mode: org -*-
#+TITLE: Exploiter des textes avec la TEI
#+Author: Sabrina Granger
#+STARTUP: overview indent inlineimages logdrawer
#+LANGUAGE: fr
** Introduction
La question de la reproductibilité, pour soi comme pour les autres,
soulève entre autres celle de la pérennité de l'information
scientifique. Or, les données produites avec des logiciels propriétaires
et/ou sous des formats spécifiques à un outil offrent encore moins de
garantie d'accessibilité sur le long terme. La Text Encoding Initiative
(TEI) constitue un exemple de format de balisage standard.
** A quels besoins de recherche la TEI répond-elle ?
Si vous utilisez des textes (littéraires, législatifs, archives,
/etc/.), une technique de balisage de données peut vous permettre
d'aller au-delà du seul décompte brut d'occurrences : la Text Encoding
Initiative (TEI). Lou Burnard, l'un des fondateurs de la TEI, prend
l'exemple du mot "Paris" : s'agit-il de la ville du Texas, de la
capitale fraçaise, voire du prénom d'une héritière américaine ? Si trier
manuellement le bon grain de l'ivraie est possible - mais non sans
risque d'erreur - à l'échelle d'un petit /corpus/, il s'avère nettement
plus complexe de travailler sur *une masse de documents plus importante
et/ou plus hétérogène*. La TEI permet de résoudre ce problème.
Dans ce cas, /quid/ des /corpus/ peu volumineux ? *Le balisage en TEI
permet de rendre vos données textuelles "intelligentes"*: il est
possible de *baliser des personnages, des langues de citation, des
catégories grammaticales, des passages barrés*, /etc/. Qui peut le plus
peut le moins : s'il existe plus de 500 éléments combinables entre eux,
il est possible de travailler avec un jeu de balises réduit. Pour
traiter un roman, 5 ou 6 balises peuvent suffire.
** Quelles garanties de pérennité ?
L'encodage des données en TEI permet de concevoir des /corpus/ à très
forte valeur ajoutée. Dès lors se posent les questions de l'*accès*, de
la *conservation* voire du *partage* de cette plus-value. Si le recours
à certains logiciels proposant des outils d'encodage de données est
commode, sur le long terme, leur utilisation peut nuire à la
reproductibilité de vos travaux. En effet, l'un des avantages de la TEI
est d'offrir un *codage standard, affranchissant ainsi ses utilisateurs
de toute dépendance logicielle*.
Si certains logiciels intègrent le codage en TEI, d'autres reposent sur
des codages qui leur sont propres (ex. Alceste, Lexico3, /etc/.) ainsi
que le souligne Burnard : "Si vous souhaitez partager les ressources
textuelles que vous créez avec d'autres personnes (ou avec vous-même à
quelques décennies de distance), vous devriez vous préoccuper de la
tendance de nombreux systèmes informatiques à appliquer leur propre
façon de stocker l'information" (Burnard 2014).
*Normalisation n'est pas synonyme de fermeture* : l'un des enjeux de la
TEI est d'offrir un système de balise évolutif grâce à son
extensibilité.
** La TEI en pratique
Bernard et Bohet définissent ainsi la TEI (Bernard and Bohet 2017) : "Il
s'agit d'un balisage s'appuyant sur le langage XML et qui se présente
comme un dictionnaire de balises couvrant à peu près toutes les
situations". Il s'agit de permettre à une machine de lire ces données.
La TEI permet d'*introduire dans le texte des informations allant bien
au-delà des éléments formels* comme le montre
[[https://fr.wikipedia.org/wiki/Text_Encoding_Initiative][ce comparatif
tiré de Wikipédia]] entre d'une part, un encodage en HTML, où l'on prend
en compte uniquement les aspects de présentation, et d'autre part, un
encodage en TEI, où l'on peut introduire des informations sur les
personnages, la versification des éléments.
Le travail s'effectue sur des données numériques ; si les données sont
issues d'une numérisation, elles doivent au préalable être traitées avec
un logiciel de reconnaissance optique des caractères (OCR) (Humanum
2015).
Il existe des *éditeurs* tels que
[[https://framalibre.org/content/xml-copy-editor][XML Copy Editor]].
Certains logiciels incluent un *convertisseur* ; on peut citer :
- le [[http://textometrie.ens-lyon.fr/spip.php?rubrique96][logiciel TXM]]
- le [[http://obvil.sorbonne-universite.site/developpements/odette][logiciel Odette]] permet de passer d'un document en traitement de texte à des
données en XML/TEI
Exemple de texte encodé : Oscar Wilde. /The Importance of Being Earnest/
[[https://teibyexample.org/examples/TBED05v00.htm?target=wilde][disponible
sur le site web TEI by example]]
** Sources
Bernard, Michel, and Baptiste Bohet. 2017. Littérométrie: outils
numériques pour l'analyse des textes littéraires. Paris, France: Presses
Sorbonne nouvelle.
Burnard, Lou. 2014. What Is the Text Encoding Initiative? : How to Add
Intelligent Markup to Digital Resources. Encyclopédie Numérique.
Marseille: OpenEdition Press. http://books.openedition.org/oep/426.
Humanum. 2015. 'Le Guide Des Bonnes Pratiques Numériques'. TGIR des
humanités numériques.
https://www.huma-num.fr/ressources/guide-des-bonnes-pratiques-numeriques.
#+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: Interface de Gitlab dans ce Mooc
#+DATE: <2019-03-26 mar.>
#+AUTHOR: Arnaud Legrand, Laurence Farhi
#+EMAIL: arnaud.legrand@imag.fr
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 26.1 (Org mode 9.1.9)
#+STARTUP: indent
** Access your Gitlab repository
This section describes the successive steps involved to access your
Gitlab repository after from the FUN platform after clicking on the
button "*Accéder à Gitlab / Access to Gitlab*".
- You reach the following form:
#+BEGIN_CENTER
[[file:gitlab_images/sign_in_gitlab.png]]
#+END_CENTER
- Click on **Sign in**. below "*Connexion*" label. The "Connexion Admin" frame is reserved for
Gitlab interface administrators. Authentication is automatic at that
stage.
#+BEGIN_CENTER
[[file:gitlab_images/projects.png]]
#+END_CENTER
The long string replaced here by =xxx= is the login you will have to
use in Git to synchronize with GitLab.
- *NB* : You must reach GitLab from the FUN platform. You are likely to get a "405 error" if you are using the following address: https://app-learninglab.inria.fr/gitlab/users/sign_in.
#+BEGIN_CENTER
[[file:gitlab_images/erreur405.png]]
#+END_CENTER
** Recover your password
To recover a predefined password you must use [[https://app-learninglab.inria.fr/jupyterhub/services/password][Gitlab
credentials retrieval tool]]. One gets then the login and password.
#+BEGIN_CENTER
[[file:gitlab_images/password_retrieval.png]]
#+END_CENTER
** Modify your password
You can change this password in "Account / Parameters / Password". We do not recommend doing it since that will block you from using the Jupyter notebooks of this MOOC.
#+BEGIN_CENTER
[[file:gitlab_images/password.png]]
#+END_CENTER
** To go learn more about git/Gitlab
If you want to go further, few tutorial videos are gathered in [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/jump_to_id/7508aece244548349424dfd61ee3ba85][sequence "7. Installations, configurations, references" of module 2]]
of this MOOC.
** In case of problems with Gitlab
In case of problem, contact us via the forum. In order to help you
solve any problems, please give us your LTI identifier (external
identifier automatically assigned for GitLab and Jupyter)
that you can find on your GitLab account (see capture below).
#+BEGIN_CENTER
[[file:gitlab_images/gitlab_id_lti.jpg]]
#+END_CENTER
#+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: Interface de GitLab dans ce Mooc
#+DATE: <2019-03-26 mar.>
#+AUTHOR: Arnaud Legrand, Laurence Farhi
#+EMAIL: arnaud.legrand@imag.fr
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 26.1 (Org mode 9.1.9)
#+STARTUP: indent
** Accéder à son espace GitLab
Cette section décrit étape par étape comment accéder à votre espace GitLab depuis la
plateforme FUN après avoir cliqué sur le bouton "*Accéder à GitLab / Access to GitLab*".
- Vous arrivez sur le formulaire suivant :
#+BEGIN_CENTER
[[file:gitlab_images/sign_in_gitlab.png]]
#+END_CENTER
- Connectez-vous en cliquant sur le bouton "*Sign in*" situé sous
"*Connexion*". Le cadre "Connexion Admin" est réservé aux
administrateurs de l'interface GitLab. L'authentification est automatique à cette étape.
#+BEGIN_CENTER
[[file:gitlab_images/projects.png]]
#+END_CENTER
La grande chaîne de caractères remplacée ici par =xxx= est le login
qu'il faudra utiliser dans git pour accéder à GitLab.
- *NB* : Il faut accéder à GitLab depuis la plateforme FUN. Vous risquez
d'obtenir une erreur 405 en accédant directement à la page [[https://app-learninglab.inria.fr/gitlab/users/sign_in]].
#+BEGIN_CENTER
[[file:gitlab_images/erreur405.png]]
#+END_CENTER
** Récupérer son mot de passe
Pour récupérer le mot de passe prédéfini, il faut utiliser le [[https://app-learninglab.inria.fr/jupyterhub/services/password][GitLab
credentials retrieval tool]]. On retrouve alors le login et le mot de
passe.
#+BEGIN_CENTER
[[file:gitlab_images/password_retrieval.png]]
#+END_CENTER
** Modifier son mot de passe
Il est possible de modifier ce mot de passe dans "Account / Paramètres / Mot de passe". Mais nous vous déconseillons de le faire
car cela vous empêchera d'utiliser les notebook Jupyter du MOOC.
#+BEGIN_CENTER
[[file:gitlab_images/password.png]]
#+END_CENTER
** En savoir plus sur git/GitLab
Enfin, pour ceux qui veulent aller plus plus loin et en savoir plus
sur l'outil de gestion de version git sur lequel s'appuie GitLab,
quelques vidéos de démonstration sur git et GitLab sont proposées dans
la [[https://www.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/jump_to_id/7508aece244548349424dfd61ee3ba85][séquence "7. Installations, configurations, references" du module 2]]
de ce Mooc ainsi que des ressources pour apprivoiser git en ligne de commandes.
** Que faire en cas de problème
En cas de problème, contactez-nous via le forum. Afin de pouvoir vous
aider à résoudre vos problèmes éventuels,
merci de nous communiquer votre identifiant LTI (identifiant externe
attribué automatiquement pour GitLab et Jupyter) que vous pouvez
retrouver sur votre compte GitLab (cf. capture ci-dessous).
#+BEGIN_CENTER
[[file:gitlab_images/gitlab_id_lti.jpg]]
#+END_CENTER
This diff is collapsed.
This diff is collapsed.
#+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: The Introductory Sequence (Module 1 sequence 0)
#+DATE: <2019-03-25 jeu.>
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: en
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 26.1 (Org mode 9.1.9)
#+STARTUP: indent
* Table of content :TOC:
- [[The "notebook"]]
- [[Examples of notebooks]]
* The "notebook"
"Notebook" must be here understood with a fairly general meaning; that is, depending on the context, it could more specifically be called "field book", "observations book", "journal" or "labbook". What we concentrate on is a a meduim (paper or digital) on which information get stored "as it arrives"--as opposed to a report or a scientic paper where the logic of the argument directs the structure of the content--; the information concidered is not homogeneous (different topics do show up) and multiple media can be used.
* Examples of notebooks
- Leonardo da Vinci notebooks ([[http://unesdoc.unesco.org/images/0007/000748/074877fo.pdf][in pdf format]]) and the Wikipdia page on the [[https://en.wikipedia.org/wiki/Codex_Leicester][Codex Leicester]].
- The [[https://en.wikipedia.org/wiki/Galileo_Galilei][Wikipedia page on Galileo Galilei]] gives many links to his notebooks.
- [[https://ebooks.adelaide.edu.au/c/cook/james/c77j/index.html][Captain Cook's journal]] relating his first trip is available.
- [[http://darwin-online.org.uk/][Darwin's notebooks]] are also available.
- The exhaustive collection of [[http://linnean-online.org/61332/#/0][Carl Linneaus]] paper slips can be found online.
- The complete collection of [[http://scarc.library.oregonstate.edu/coll/pauling/rnb/index.html][Linus Pauling]] labbooks can also be accesssed.
- The meridian's measure from Bunkirk to Barcelona by Delambre and Méchain is wonderfully made by Ken Alder in his book "The Measure of All Things: The Seven-Year Odyssey and Hidden Error that Transformed the World", *a must read*.
#+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: Ressources pour la séquence 0 du module 1 : « Introduction »
#+DATE: <2019-03-25 jeu.>
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: fr
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 26.1 (Org mode 9.1.9)
#+STARTUP: indent
* Table des matières :TOC:
- [[#le-cahier-de-notes][Le « cahier de notes »]]
- [[#exemples-concrets-de-cahier-de notes][Exemples concrets de « cahier de notes ]]
* 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 »
- Les cahiers de Léonard de Vinci ([[http://unesdoc.unesco.org/images/0007/000748/074877fo.pdf][lien vers le pdf]]) et la page Wikipédia sur [[https://fr.wikipedia.org/wiki/Codex_Leicester][Le Codex Leicester]] ;
- La [[https://en.wikipedia.org/wiki/Galileo_Galilei][Page wikipedia sur Galilée]] contient de nombreux liens, certains vers ses cahiers de notes ;
- Les « [[http://gallica.bnf.fr/Search?ArianeWireIndex=index&p=1&lang=EN&f_typedoc=manuscrits&q=Louis+Pasteur+registres][registres de laboratoire]] » de Pasteur sont disponibles sur Gallica ;
- Les [[http://gallica.bnf.fr/ark:/12148/btv1b90797770/f1.image.r=Emile%20Zola][dossiers préparatoires de Zola pour les Rougon-Macquart]] sont aussi disponibles sur Gallica ;
- Le [[https://ebooks.adelaide.edu.au/c/cook/james/c77j/index.html][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 –, [[https://en.wikipedia.org/wiki/James_Cook][la 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 ;
- Les [[http://linnean-online.org/61332/#/0][fiches de Carl von Linnée]] sont consultables en ligne ;
- Les [[http://scarc.library.oregonstate.edu/coll/pauling/rnb/index.html][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.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#+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: From text files to lightweight markup languages
#+AUTHOR: Christophe Pouzat
#+EMAIL: christophe.pouzat@parisdescartes.fr
#+LANGUAGE: en
#+SELECT_TAGS: export
#+EXCLUDE_TAGS: noexport
#+CREATOR: Emacs 26.1 (Org mode 9.1.9)
#+STARTUP: indent
* Table of contents :TOC:
- [[#text-files-and-text-editors][Text files and text editors]]
- [[#the-case-of-the-pdf-file-opened-with-a-text-editor][The case of the =PDF= file opened with a text editor]]
- [[#on-tinytex][On TinyTex]]
* Text files and text editors
A more technical as well as less circular (!) definition of a text file can be found on the dedicated [[https://en.wikipedia.org/wiki/Text_file][Wikipedia article]]. For more details on text editors you can also check the [[https://en.wikipedia.org/wiki/Text_editor][corresponding Wikipedia page]].
A [[https://en.wikipedia.org/wiki/Word_processor][word processor]] software is more sophisticated than a simple text editor; it can do more and can therefore also open and work with text files. When we write "do more" we mean here work on the final layout of the document. Some text editors like [[https://en.wikipedia.org/wiki/Emacs][Emacs]] or [[https://en.wikipedia.org/wiki/Vim_(text_editor)][Vim]] provide programming aid, interaction with some of the other software installed on the machine (/e.g./ =Python, =R=), etc. giving them a quasi "Swiss army knife" status; their users can spend days or weeks without having to use a word processor (some even never use a word processor).
*Be careful*: the native format of the files generated by word processors is rarely a text format. =doc=, =docx= and =odt= files /are not text files/.
* The case of the =PDF= file opened with a text editor
In the sequence a [[https://en.wikipedia.org/wiki/Portable_Document_Format][PDF]] file opened with a text editor is shown in order to demonstrate that such a file cannot not be properly visualized with this kind of software, a "PDF specific" software is required such as =Adobe Reader=, =Evince=, =MuPDF=, =Aperçu=,... You can nevertheless see that the beginning of the file contains readable characters (readable by a text editor), the first line tells us that the file uses version 1.3 of the =PDF= format. This early part in text format contains metadata that are not shown by a visualization software like =Adobe Reader=. These metadata follow (partly) the [[https://en.wikipedia.org/wiki/Extensible_Metadata_Platform][XMP]] (/Extensible Metadata Platform/) format; we will come back to it in the fifth sequence of this module.
* On UTF-8
A table of UTF-8 symbols can be found at: [[http://www.utf8-chartable.de/]]. It is handy to insert uncommon symbols like the "TLO": Ꮰ of Cherokee, or the mathematical symbol ∀, "for all".
If you are often using Greek letters (for equations for instance),it is possible with Linux to redefine some keys combinations to generate quickly these letters. These key combinations are defined in the =.XCompose= file; the beginning of my =.XCompose= file contains:
#+BEGIN_EXAMPLE
# On charge la base de donnée de Compose la plus complète en UTF-8
include "/usr/share/X11/locale/en_US.UTF-8/Compose"
# espace insécable fine
<Multi_key> <Multi_key> <Space> : " " U202F
# Lettres greques
<Multi_key> <space> <a> : "α" Greek_alpha
<Multi_key> <space> <A> : "Α" Greek_ALPHA
<Multi_key> <space> <b> : "β" Greek_beta
<Multi_key> <space> <B> : "Β" Greek_BETA
<Multi_key> <space> <g> : "γ" Greek_gamma
<Multi_key> <space> <G> : "Γ" Greek_GAMMA
<Multi_key> <space> <d> : "δ" Greek_delta
<Multi_key> <space> <D> : "Δ" Greek_DELTA
<Multi_key> <space> <e> : "ε" Greek_epsilon
<Multi_key> <space> <E> : "Ε" Greek_EPSILON
<Multi_key> <space> <z> : "ζ" Greek_zeta
<Multi_key> <space> <Z> : "Ζ" Greek_ZETA
<Multi_key> <space> <h> : "η" Greek_eta
#+END_EXAMPLE
* On TinyTex
Yihui Xie, author of the great "bookdown" =R= package, has developed a "light LaTeX" version: TinyTex ("[[https://yihui.name/tinytex/][A lightweight, cross-platform, portable, and easy-to-maintain LaTeX distribution based on TeX Live]]").
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.