README.md 9.91 KB
Newer Older
CHAMONT David's avatar
divers  
CHAMONT David committed
1 2
# Bienvenue dans la Piscine

CHAMONT David's avatar
CHAMONT David committed
3
La "piscine", dont le nom est inspiré de certaines pratiques dans les écoles
CHAMONT David's avatar
divers  
CHAMONT David committed
4
d'informatique, est une sorte d'atelier collectif ou chacun est autonome et
CHAMONT David's avatar
CHAMONT David committed
5 6
plonge sur les sujets de son choix, individuellement ou en petits groupes.

CHAMONT David's avatar
divers  
CHAMONT David committed
7 8
Ce projet gitlab contient un *[ensemble de plongeons]
(https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI/tree/master)* :
9 10
des tutoriels courts (15 à 20 minutes), auto-suffisants, basés sur la pratique,
et nécessitant le moins d'installation possible, notamment en s'appuyant sur
CHAMONT David's avatar
CHAMONT David committed
11 12 13
des images Docker ou VirtualBox.

http://www.deezer.com/track/93110532
CHAMONT David's avatar
CHAMONT David committed
14

CHAMONT David's avatar
divers  
CHAMONT David committed
15
# Se préparer à plonger
16 17 18 19

## Instructions générales

Les tutoriels que nous vous proposons devront être exécutés sur vos ordinateurs
20 21 22
portables, par le biais d'images Docker ou de machines virtuelles VirtualBox.

Pour cette raison, nous vous demandons d'installer et de vous familiariser
23
avec Docker et/ou VirtualBox, selon les plongeons que vous voulez essayer.
24 25 26 27 28 29

Vous veillerez à avoir une quantité raisonnable d'espace libre sur vos
ordinateurs portables, car les machines virtuelles sont gourmandes...

## Installation Docker

30 31
Vous trouverez dans les liens ci-dessous des mini-plongeons dédiés aux
différents systèmes d'exploitation.
32 33 34 35 36
* [Installer Docker sous Linux](Docker_00_Linux/README.md)
* [Installer Docker sous MacOSX](Docker_00_Mac/README.md)
* [Installer Docker sous Windows](Docker_00_Windows/README.md)
* [Installer Docker sur du vieux matériel Apple](Docker_00_MacOld/README.md)
* [Installer Docker sur un vieux Windows](Docker_00_WindowsOld/README.md)
37

38
## Installation VirtualBox
39

CHAMONT David's avatar
divers  
CHAMONT David committed
40 41 42
Certains plongeons requièrent [VirtualBox](https://www.virtualbox.org/)
plutôt que Docker. Si vous avez une version ancienne de VirtualBox, merci de
la mettre à jour, sous peine de conflit avec Docker.
43

44 45 46 47 48 49 50
Les utilisateurs de clavier azerty peuvent peiner à faire reconnaitre leur clavier.
Quelques trucs et astuces :
* essayez la commande `loadkeys fr` ; si elle est absente, essayez d'installer le package `kbd`.
* si vous avez lancé votre machine virtuelle en mode graphique et qu'elle
comprend un serveur X11, vous pouvez aussi tenter `setxkbmap fr`.
* sur MacOSX, c'est encore pire... si votre `alt` de gauche ne fonctionne pas,
parfois celui de droite fonctionne.
51

CHAMONT David's avatar
divers  
CHAMONT David committed
52 53 54 55 56 57
# Essayer de plonger

Les plongeons sont situés dans la **[zone "Files"]
(https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI/tree/master)** de ce projet.
En général, chaque répertoire correspond à un plongeon, et l'énoncé se trouve
dans le fichier **README.md**.
58

59 60 61 62 63 64 65 66 67 68 69
Vous pouvez par exemple aller un peu plus loin sur Docker en essayant
Docker_01_Run et Docker_02_Build.

Si vous souhaitez télécharger une copie locale de tous les énoncés et fichiers
associés, utilisez le bouton "Download" en haut et à droite, ou bien via
une commande Git :

```shell
> git clone https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI.git
```

CHAMONT David's avatar
divers  
CHAMONT David committed
70
# Proposer de nouveaux plongeons
71 72 73 74

Nous cherchons à élargir au maximum le champ des propositions
et des technologies. Si vous avez un sujet qui vous tient à coeur ou qui
vous semble important, n'hésitez pas à contribuer. Il ne s'agit pas d'écrire
75 76
un document d'expert, mais d'aider vos collègues à se mettre à l'eau.

CHAMONT David's avatar
CHAMONT David committed
77 78 79 80 81 82 83
Les sujets envisagés/demandés :
* ELK
* C++, ma première classe.
* C++, objets-fonctions.
* Python 3, premier pas.
* RabbitMQ
* Git
84
* CMake
85
* Docker Compose
CHAMONT David's avatar
CHAMONT David committed
86 87 88 89 90 91
* Calcul intensif, vectorisation avec Boost.SIMD
* Calcul intensif, mon premier programme OpenCL
* Calcul intensif avec Thrust
* Calcul intensif, mon premier programme OpenMP
* Calcul intensif, mon premier programme MPI

92 93 94 95 96 97 98 99 100 101 102
Ce qu'on attend d'un plongeon :
* Un format court : 15-20 minutes. Si vous imaginiez quelque chose de plus
long... coupez-le en plusieurs morceaux ?
* Le moins possible de prérequis.
* Le moins possible d'installations préalables : pour y parvenir, la solution
actuellement privilégiée est l'utilisation d'images Docker.
* Le moins possible de dépendance au réseau, pour être capable de plonger même
sur un site peu connecté : essayez de mettre tout ce qui est nécessaire dans
votre répertoire.
* Une approche pédagogique par l'exemple et par la pratique.

103 104 105 106 107 108
**J'insiste : il s'agit de permettre à n'importe qui de comprendre par la pratique
une idée, un outil... rapidement, sans devoir passer par la phase d'installation,
qui peut être longue, spécifique, et polluante pour la machine du nageur. Donc
on n'aborde pas la partie installation dans un plongeon, à la place on donne
une image docker prête à servir.**

109 110
Ci-dessous, quelques recommandations pour uniformiser les plongeons et faciliter
la vie des nageurs.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

## Répertoire et fichiers

Tout ce qui constitue un plongeon doit être placé dans un sous-répertoire
dédié du projet gitlab présent. Par défaut, nommez votre répertoire en
CamelCase, en commencant par un préfixe discirminant ("Cpp", "Ada", ...), de
sorte que les plongeons de même thème apparaitront groupés dans la liste
de répertoires.

L'énoncé sera placé dans un fichier `README.md`. Le répertoire contiendra
également tous les fichiers de données, d'exemples et d'exercices.

Si vous utilisez une image Docker spécifique, vous placerez aussi le(s)
Dockerfile(s) dans ce répertoire, et les images produites dans l'organisation
"piscineri3" de "hub.docker.com".

## Modèle d'énoncé

Nous suggérons d'écrire l'énoncé du plongeon dans le fichier README.md
du sous-répertoire correspondant au plongeon.

En entête, placez ce genre de liste :
* prérequis : connaissance du C++ historique.
* hauteur du plongeoir : 5m.
* préinstallation : Docker, image `piscineri3/gcc6.1:3`.
* fichiers : https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI/tree/master/CppMove
* maître(s) nageur(s) : ...
CHAMONT David's avatar
photos  
CHAMONT David committed
138
* "photos des maitres nageurs en hauteur 50px"
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195

La difficulté s'exprime en hauteur de plongeoir : 1, 3, 5 ou 10m.

Placez ensuite une section "Vérification de votre environnement de travail",
permettant de s'assurer que tout l'outillage nécessaire sur le poste de
travail est opérationnel, avant d'entrer dans le vif du sujet.

En fin de plongeon, nous suggérons un questionnaire :
```
## Sortie de bain

Merci d'envoyer quelques commentaires à l'auteur :
 * Environnement de travail opérationnel ? oui [ ], non [ ]
 * Vous aviez les pre-requis ? oui [ ], non [ ]
 * Comment jugez-vous la difficulté du plongeon ? trop simple [ ], adapté [ ], trop compliqué [ ]
 * Durée du plongeon ? trop court [ ], 15-20 minutes [ ], trop long [ ]
 * Pourquoi avez-vous choisi ce plongeon ? :
 * Signalement de typos, erreurs, etc : 
 * Commentaires libres :
```

Une section d'URL sur vos sources et références, où des
liens pour aller plus loin.

```
## Sources

 * [What's new in Python 3](https://docs.python.org/3/whatsnew/3.0.html)
 * ...
```

Et un petit copyright :
```
---
© *CNRS 2016*  
*Assemblé et rédigé par Maitre Perus, cette œuvre est mise à disposition selon les termes de la*  
*[Licence Creative Commons - Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International](http://creativecommons.org/licenses/by-nc-sa/4.0/)*   
```

## Conseils divers

### --rm

Si vous utilisez les conteneurs pour des actions ponctuelles, comme
une compilation, n'oubliez pas l'option `--rm` sur votre commande
`docker run`, sans quoi vous allez laisser beaucoup de conteneurs
arrêtés et "invisibles" sur les machines des nageurs.

### différencier les prompts

Quand vous mettez des exemples de commandes dans l'énoncé de votre
plongeon, utilisez des prompts différents selon qu'il s'agit de
commandes à exécuter dans la fenêtre de commandes de la machine hôte,
ou au sein d'un conteneur.

## Faire une image spécifique au plongeon

196 197 198 199
Plutôt que de faire une image de façon interactive avec un
"docker commit", privilégiez la création d'un `Dockerfile`, à stocker
dans le répertoire du plongeon, afin que tout le monde sache comment
refaire cette image.
200 201 202 203

J'ai bien aimé cette [présentation sur Dockerfile](http://putaindecode.io/fr/articles/docker/dockerfile/).

Si vous voulez vous protéger des éventuels problèmes de montages de volume
204 205 206
des utilisateurs Windows (à priori réglés à ce jour), vous pouvez intégrer à
votre image une copie des fichiers de votre répertoire, ainsi que des outils
d'édition. Par exemple, pour fabriquer `piscineri3/gcc61` en version 2 :
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248

```
FROM gcc:6.1

RUN apt-get update \
&& apt-get install -y apt-utils \
&& apt-get install -y vim \
&& apt-get install -y x11-apps \
&& apt-get install -y xemacs21 \
&& rm -rf /var/lib/apt/lists/*

ADD . /work
WORKDIR /work
```

Suivi de la commande :

```shell
docker build -t piscineri3/gcc61:2 .
```

Mais ATTENTION : si les nageurs éditent, au sein du conteneur, les fichiers
ainsi fournis dans le répertoire `/work`, et si ils quittent ou tuent le
conteneur, toutes les modifications aux fichiers sont perdues...

## Mettre vos images dans le Hub

1. Demander à être dans l'équipe `owners` de l'organisation `piscineri3`.
1. Redonner un nom adéquat à votre image. En imaginant qu'elle existe déjà
avec le nom `gcc61`, la version `2` et l'id `7d9495d03763` :
```
docker tag 7d9495d03763 piscineri3/gcc61:2
```
1. Se faire reconnaître du Hub :
```
docker login
```
1. Pousser :
```
docker push piscineri3/gcc61:2
```

249 250 251 252 253 254 255 256 257 258 259 260 261 262
A propos de la politique de versions des images,
deux options se présentent :
1. Vous utilisez "latest" : vos nageurs n'ont pas besoin de surveiller
les versions de vos images, n'y même d'être conscients qu'il y a
une notion de version. Par contre, il faut veillez a leur faire
refaire des `docker pull...` fréquents, pour garantir qu'ils ont
bien téléchargé la dernière version (`docker run...` ne vérifie pas
la confirmité de l'image locale par rapport à celle du hub).
2. Vous utilisez des noms explicits, tels que "v1" : vous devez remettre
à jour vos énoncés à chaque modification de vos images, et vos nageurs
doivent apprendre la notion de version d'image. Par contre, vous
êtes protégés contre le cas d'un nageur qui n'aurait pas la
bonne "latest".

263 264 265 266 267 268 269 270