From 889358a0911ab716811f79ef448518716e988c4e Mon Sep 17 00:00:00 2001 From: Alexis Fourmaux Date: Fri, 18 Jul 2025 14:20:06 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20de=20la=20progression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Planning.ods | Bin 0 -> 32245 bytes .../01-bases-python/algorithmique-python.md | 43 +++++++++++++++ src/cours/CIEL1/02-reseau/adressage-ip.md | 39 ++++++++++++++ src/cours/CIEL1/03-dev-env/conteneurs.md | 31 +++++++++++ src/cours/CIEL1/03-dev-env/dev-env.md | 1 + src/cours/CIEL1/03-dev-env/forges.md | 15 ++++++ src/cours/CIEL1/03-dev-env/git.md | 41 ++++++++++++++ .../CIEL1/04-web-statique/web-statique.md | 50 ++++++++++++++++++ src/cours/CIEL1/05-web-js/web-js.md | 38 +++++++++++++ .../06-bases-de-donnees/bases-de-donnees.md | 50 ++++++++++++++++++ src/cours/CIEL1/07-appli-web/appli-web.md | 28 ++++++++++ src/cours/CIEL1/ciel1.md | 1 + .../01-revisions-python/python-revisions.md | 10 ++++ .../CIEL2/02-python-objet/python-objet.md | 26 +++++++++ .../03-base-de-donnees/bases-de-donnees.md | 12 +++++ src/cours/CIEL2/ciel2.md | 1 + src/cours/SUMMARY.md | 17 +++++- src/cours/chapter_1.md | 12 ----- 18 files changed, 401 insertions(+), 14 deletions(-) create mode 100644 Planning.ods create mode 100644 src/cours/CIEL1/01-bases-python/algorithmique-python.md create mode 100644 src/cours/CIEL1/02-reseau/adressage-ip.md create mode 100644 src/cours/CIEL1/03-dev-env/conteneurs.md create mode 100644 src/cours/CIEL1/03-dev-env/dev-env.md create mode 100644 src/cours/CIEL1/03-dev-env/forges.md create mode 100644 src/cours/CIEL1/03-dev-env/git.md create mode 100644 src/cours/CIEL1/04-web-statique/web-statique.md create mode 100644 src/cours/CIEL1/05-web-js/web-js.md create mode 100644 src/cours/CIEL1/06-bases-de-donnees/bases-de-donnees.md create mode 100644 src/cours/CIEL1/07-appli-web/appli-web.md create mode 100644 src/cours/CIEL1/ciel1.md create mode 100644 src/cours/CIEL2/01-revisions-python/python-revisions.md create mode 100644 src/cours/CIEL2/02-python-objet/python-objet.md create mode 100644 src/cours/CIEL2/03-base-de-donnees/bases-de-donnees.md create mode 100644 src/cours/CIEL2/ciel2.md delete mode 100644 src/cours/chapter_1.md diff --git a/Planning.ods b/Planning.ods new file mode 100644 index 0000000000000000000000000000000000000000..43b71ab876fc29aa48223efd53b1ad4d271bf958 GIT binary patch literal 32245 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 q{7)dZ~qS-#sIVc literal 0 HcmV?d00001 diff --git a/src/cours/CIEL1/01-bases-python/algorithmique-python.md b/src/cours/CIEL1/01-bases-python/algorithmique-python.md new file mode 100644 index 0000000..d710a00 --- /dev/null +++ b/src/cours/CIEL1/01-bases-python/algorithmique-python.md @@ -0,0 +1,43 @@ +# Bases de l'algorithmique avec Python +## Le langage Python +Expliquer rapidement ce que c'est d'où ça vient, ses spécificités, pourquoi on apprend celui là... + +- Rappels de représentation des données (binaire, nombres) +- Interpréteur +- Entrée / sortie (print + input) +- Opérations basiques +- Types + variables +- Chaines de caractères + formatage +- Structures conditionnelles +- Boucles while, for, break + continue +- Fonctions +- Import de modules +- Création de modules et packages +- Exceptions +- Structures de données + - chaines de caractères + - listes + - tuples + - dictionnaires + - set + - les fichiers +- Portée des variables et références + + + +## TP +- TP1 découverte du langage avec Thonny et mode interactif + Bonus : Installation de python +- TP2 fonctions et utilisation de VSCode + Bonus modularité +- TP3 Modularité et structures de données + - Connexion avec l'adressage IP : [exercice de scanner d'adresse IP](https://lycee-benoit.tech/BTS/_defrance/ciel/d2/python/lab-containers.html#exo3) +- TP4 Python : jouer avec les fichiers et les exceptions +- Alternative TP4 : Tests unitaires + +## TD +- Exercices sur les bases de python +- Fonctions et modules +- Les structures de données +- Fichiers et exceptions +- Préparation au devoir avec des révisions et les points les + importants \ No newline at end of file diff --git a/src/cours/CIEL1/02-reseau/adressage-ip.md b/src/cours/CIEL1/02-reseau/adressage-ip.md new file mode 100644 index 0000000..b8974c0 --- /dev/null +++ b/src/cours/CIEL1/02-reseau/adressage-ip.md @@ -0,0 +1,39 @@ +# L'adressage IP + +## Adresse IP +- Qu'est-ce qu'une adresse IP ? +- A quoi ça sert ? +- Comment c'est construit ? +- IPv4 / IPv6 + +## Les classes d'adresse IP + +## Les adresses IP spéciales +- Adresse de réseau +- Adresse de diffusion (broadcast) +- Adresses publiques, adresses privées +- Adresse d'initialisation +- Adresse de boucle locale (localhost/loopback) + +## Les masques de sous-reseau + +## Le plan d'adressage +- Unicité +- Choix des sous réseaux +- Obtenir une adresse IP ? +- Construire un plan d'adressage structuré + +## IPv6 ?? +- Pourquoi IPv6 ? +- Similitudes avec IPv4 +- Différences avec IPv4 + +# Exercices +## Application / compréhension +## Exercices de programmation pour jouer avec adresses IP -> Voir TP Python + +# Mise en pratique / TP +[Cisco Packet Tracer](https://wiki.archlinux.org/title/Packet_Tracer) +[GNS3](https://wiki.archlinux.org/title/GNS3) + +# Evaluation \ No newline at end of file diff --git a/src/cours/CIEL1/03-dev-env/conteneurs.md b/src/cours/CIEL1/03-dev-env/conteneurs.md new file mode 100644 index 0000000..84e0613 --- /dev/null +++ b/src/cours/CIEL1/03-dev-env/conteneurs.md @@ -0,0 +1,31 @@ +# Les conteneurs +## Concept +VM vs Conteneurs +Qu'est-ce qu'un conteneur et à quoi ça sert +Systèmes de conteneurisation : Docker, LXC, Podman... +Conteneurs, images, registries +## Utiliser Docker +### CLI +- Lancer/arrêter un conteneur avec une image existante +- Les variables d'environnement +- Les volumes +- Le réseau dans docker, et les applications multi-conteneurs +- Interagir avec un conteneur (accéder à un terminal) + +### Docker Compose +- Le YAML +- Configurer un ou plusieurs conteneurs avec un fichier + +## Créer une image docker +A mon avis ambitieux, voir avec les collègues. Sinon rester basique. +https://lycee-benoit.tech/BTS/_defrance/ciel/r3/docker/lab-docker-101.html#exo2 + + +# Orga +## TP +- Découverte de docker avec 1 puis 2 conteneurs (site web et ensuite db) et docker compose +- Personnalisation d'une image et compilation + mise en route + destruction + +## Cours +- Retour sur les conteneurs (après le premier TP) +- Retour sur la fabrication d'images (après le second TP) \ No newline at end of file diff --git a/src/cours/CIEL1/03-dev-env/dev-env.md b/src/cours/CIEL1/03-dev-env/dev-env.md new file mode 100644 index 0000000..1fc6b12 --- /dev/null +++ b/src/cours/CIEL1/03-dev-env/dev-env.md @@ -0,0 +1 @@ +# L'environnement de développement diff --git a/src/cours/CIEL1/03-dev-env/forges.md b/src/cours/CIEL1/03-dev-env/forges.md new file mode 100644 index 0000000..037392a --- /dev/null +++ b/src/cours/CIEL1/03-dev-env/forges.md @@ -0,0 +1,15 @@ +# Les forges logicielles + +## Git sur un serveur +### Local, HTTP ou SSH +### GitWeb --> ? à voir (+ installer un serveur git) +### Forgejo ? Install rapide avec docker pour la démo + +## Travailler en groupe avec Git : git distribué +- notion de PR/MR +- Flux de travail + +## Les plateformes +### GitLab +### GitHub +### Auto-hébergées \ No newline at end of file diff --git a/src/cours/CIEL1/03-dev-env/git.md b/src/cours/CIEL1/03-dev-env/git.md new file mode 100644 index 0000000..f82126d --- /dev/null +++ b/src/cours/CIEL1/03-dev-env/git.md @@ -0,0 +1,41 @@ +# Git + +## La gestion de version, concept +### Concept +### Autres systèmes de gestion de version vs git + +## Installer et paramétrer git à la première utilisation +### Installation sous windows +### Installation sous linux +### Fichier gitconfig +### Aide +- Doc +- man +- git help + +## Bases +### Démarrer un nouveau dépôt +### Enregistrer une modification : commit +### .gitignore +### Voir l'historique +### Revenir en arrière +### Travailler avec un dépôt distant +### Etiquetage + +## Branches +### Concept +### Brancher, fusionner +### Comment bien utiliser le branches +### Branches locales et branches distantes +### Rebase + +## Git Cheat Sheet +### Avant toute chose : lire la doc +### Les commandes courantes + +# Organisation +## TP +- TP découverte de git ++ utilisation régulière dans les autres TP +## Classe entière +Première approche ou synthèse ? \ No newline at end of file diff --git a/src/cours/CIEL1/04-web-statique/web-statique.md b/src/cours/CIEL1/04-web-statique/web-statique.md new file mode 100644 index 0000000..66baae1 --- /dev/null +++ b/src/cours/CIEL1/04-web-statique/web-statique.md @@ -0,0 +1,50 @@ +# Le Web statique +## Lancer un serveur web +### En développement +`python3 -m http.server` + +Puis `http://localhost:8000` + +### En production +Apache, nginx... +Voir à la fin d'un TP + +## HTML : structurer et donner du sens au contenu +### Bases +[MDN - Introduction au HTML](https://developer.mozilla.org/fr/docs/conflicting/Learn_web_development/Core/Structuring_content_2f5dc6d6e575054cc70e0a8faa24bef31907d53cee6754dd2c92e644e705a7d8) + +### Debug +[MDN - Debug HTML](https://developer.mozilla.org/fr/docs/Learn_web_development/Core/Structuring_content/Debugging_HTML) + +### Multimédia +images, audio, video + +### Tableaux + +### Point sur l'accessibilité (ou intégrer au fil du temps ?) et les bonnes pratiques + +### Balises de formulaire (à voir avec le JS ?) + +## CSS : donner du style au contenu +### Bases +- sélecteur > accolades > `propriétés: valeurs;` +- Intégrer la CSS dans la page +- Mise en forme et modification du comportement par défaut +- Sélections : classes, état, position, combinaisons, cascades (bonus: pseudo classes et pseudo éléments) +- Propriétés et valeurs +- fonctions +- @rules -> @import et @media +- propriétés raccourcies (border, padding...) +- boîtes et flex + +### Debugger du CSS +Firefox powaa + +## Ressources supplémentaires +MDN Web Docs, section Learn: https://developer.mozilla.org/fr/docs/Learn_web_development +ou section référence : https://developer.mozilla.org/fr/docs/Web + +# Orga +## TP +- Découverte du HTML + bases CSS +- Styler une page web avec CSS (boîtes et flex) \ No newline at end of file diff --git a/src/cours/CIEL1/05-web-js/web-js.md b/src/cours/CIEL1/05-web-js/web-js.md new file mode 100644 index 0000000..e8293f4 --- /dev/null +++ b/src/cours/CIEL1/05-web-js/web-js.md @@ -0,0 +1,38 @@ +# JavaScript + +## Que fait le JS ? +Programmation classique +Opérations sur chaines de caratères ou en réponse à des évènements +Interaction avec diverses API : DOM, WebGL, Canvas, Géolocalisation, WebRTC... Autres API tierces. +Interprété, dynamique +Côté client + +## Ajouter du JS à une page +- Interne avec balise `