# Bienvenue dans la Piscine La "piscine", dont le nom est inspiré de certaines pratiques dans les écoles d'informatique, est une sorte d'atelier collectif ou chacun est autonome et plonge sur les sujets de son choix, individuellement ou en petits groupes. Ce projet gitlab contient un *[ensemble de plongeons] (https://gitlab.in2p3.fr/MaitresNageurs/PiscineJI/tree/master)* : des tutoriels courts (15 à 20 minutes), auto-suffisants, nécessitant le moins d'installation possible, notamment en s'appuyant sur des images Docker ou VirtualBox. # Se préparer à plonger ## Instructions générales Les tutoriels que nous vous proposons devront être exécutés sur vos ordinateurs portables, par le biais d'images Docker ou de machines virtuelles VirtualBox. Pour cette raison, nous vous demandons d'installer et de vous familiariser avec Docker et/ou VirtualBox, selon les plongeons que vous voulez essayer. Vous veillerez à avoir une quantité raisonnable d'espace libre sur vos ordinateurs portables, car les machines virtuelles sont gourmandes... ## Installation Docker Vous trouverez dans les liens ci-dessous des mini-plongeons dédiés aux différents systèmes d'exploitation. * [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) ## Installation VirtualBox 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. 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. # 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**. 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 ``` # Proposer de nouveaux plongeons 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 un document d'expert, mais d'aider vos collègues à se mettre à l'eau. 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. Ci-dessous, quelques recommandations pour uniformiser les plongeons et faciliter la vie des nageurs. ## 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) : ... * "photos des maitres nageurs en hauteur 50px" 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 Ajouter un Dockerfile dans votre répertoire. 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 des utilisateurs Windows, 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 : ``` 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 ```