Maquettes Claude Design avec visio de classe
This commit is contained in:
parent
238070ae54
commit
236d2d3567
243 changed files with 27992 additions and 0 deletions
28
design/js/contenus-plus-2.js
Normal file
28
design/js/contenus-plus-2.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
// Approfondissements premium (partie 2)
|
||||
window.CONTENUS_PLUS = Object.assign(window.CONTENUS_PLUS || {}, {
|
||||
tubes: {
|
||||
cm: [{ t: 'Expressions régulières avec grep -E', d: '20 min', html: 'Une expression régulière décrit un motif : <code>^</code> début de ligne, <code>$</code> fin, <code>.</code> n’importe quel caractère, <code>[0-9]</code> un chiffre, <code>+</code> une ou plusieurs fois, <code>{3}</code> exactement 3 fois.', exemple: "grep -E '^[0-9]{1,3}(\\.[0-9]{1,3}){3}' acces.log # lignes qui commencent par une IP\ngrep -Ei 'error|fail|denied' /var/log/syslog # plusieurs motifs, sans casse" },
|
||||
{ t: 'Scripter la chaîne', d: '15 min', html: 'Une chaîne utile se range dans un script avec un en-tête, des variables et un code de retour, puis se planifie avec cron ou un timer systemd.', exemple: '#!/bin/bash\nLOG=/var/log/auth.log\nSEUIL=100\nNB=$(grep -c "Failed password" "$LOG")\nif [ "$NB" -gt "$SEUIL" ]; then\n echo "Alerte : $NB échecs SSH" | mail -s "SSH" admin@lycee.fr\nfi' }],
|
||||
cas: { titre: 'Mise en situation · Attaque par force brute', texte: 'Un lundi matin, le serveur SSH du lycée est lent. Le technicien analyse auth.log avec une chaîne grep | awk | sort | uniq -c, identifie 3 adresses responsables de 95 % des échecs, les bloque au pare-feu, puis installe fail2ban et écrit un script d’alerte quotidien.' },
|
||||
erreurs: ['Oublier sort avant uniq', 'Utiliser > au lieu de >> et écraser un rapport', 'Mettre des guillemets simples autour d’une variable ($LOG ne s’étend pas)', 'Lancer cat f | grep au lieu de grep motif f (inutile mais courant)'],
|
||||
qcm: [['Que trouve grep -E "^#" fichier ?', ['Les lignes contenant #', 'Les lignes qui commencent par #', 'Les lignes vides', 'Rien'], 1, '^ ancre en début de ligne.'], ['Que fait grep -c ?', ['Colorise', 'Compte les lignes correspondantes', 'Coupe les colonnes', 'Ignore la casse'], 1, '-c = count.'], ['Dans un script, $(commande) sert à :', ['Commenter', 'Récupérer la sortie de la commande', 'Lancer en arrière-plan', 'Créer une fonction'], 1, 'Substitution de commande.']],
|
||||
examen: { titre: 'Sujet type · 40 min · 20 points', q: ['Compter les utilisateurs dont le shell est /bin/bash. (4 pts)', 'Afficher les 5 IP qui génèrent le plus d’erreurs 404 dans acces.log. (6 pts)', 'Écrire un script qui alerte si plus de 50 échecs SSH. (6 pts)', 'Expliquer la différence entre > et >>, 2> et &>. (4 pts)'], r: ['grep -c "/bin/bash$" /etc/passwd', "awk '$9==404 {print $1}' acces.log | sort | uniq -c | sort -rn | head -5", 'Voir le script de la partie 7, SEUIL=50', '> écrase, >> ajoute, 2> erreurs seules, &> les deux flux'] },
|
||||
prof: { deroule: [['0-10 min', 'Accroche : un vrai journal de 20 000 lignes projeté'], ['10-50 min', 'CM et construction d’une chaîne pas à pas au tableau'], ['50-120 min', 'TP IDE Bash avec tests'], ['Séance 2', 'Expressions régulières, script d’alerte, sujet type']], diff: 'Difficulté : construire la chaîne commande par commande en vérifiant chaque sortie. Avancés : awk avancé, OverTheWire.', eval: 'Tests automatiques de l’IDE et sujet type.' } },
|
||||
osi: {
|
||||
cm: [{ t: 'TCP et UDP en détail', d: '20 min', html: '<b>TCP</b> établit une connexion (poignée de main SYN, SYN-ACK, ACK), numérote les segments, les acquitte et les retransmet : fiable mais plus lent. <b>UDP</b> envoie sans connexion ni garantie : rapide, adapté au DNS, à la voix sur IP, au streaming.', table: [['Service', 'Protocole', 'Port'], ['HTTP / HTTPS', 'TCP', '80 / 443'], ['SSH', 'TCP', '22'], ['DNS', 'UDP (TCP si grosse réponse)', '53'], ['DHCP', 'UDP', '67 / 68'], ['SMTP', 'TCP', '25 / 587']] },
|
||||
{ t: 'ARP : de l’IP à la MAC', d: '15 min', html: 'Pour envoyer une trame à 192.168.10.1, le poste doit connaître sa MAC. Il diffuse une requête ARP « qui a 192.168.10.1 ? » ; la passerelle répond. La table est visible avec <code>ip neigh</code>.', attention: 'ARP n’est pas authentifié : l’usurpation ARP (ARP spoofing) permet une attaque de l’homme du milieu sur un réseau local.' }],
|
||||
cas: { titre: 'Mise en situation · « Internet ne marche plus »', texte: 'Une salle entière perd l’accès au web. Le technicien teste couche par couche : les liens sont actifs, les postes ont une IP, la passerelle répond au ping, mais la résolution de noms échoue. Il identifie un serveur DNS en panne, bascule sur le DNS secondaire et rédige un compte rendu d’incident.' },
|
||||
erreurs: ['Confondre switch et routeur', 'Penser que l’adresse MAC de destination est celle du serveur distant', 'Conclure qu’une machine est éteinte parce que le ping échoue', 'Confondre port et protocole'],
|
||||
qcm: [['Quels messages composent la poignée de main TCP ?', ['GET, POST, PUT', 'SYN, SYN-ACK, ACK', 'ARP, RARP', 'HELLO, BYE'], 1, 'Trois messages établissent la connexion.'], ['Quel protocole traduit une adresse IP en MAC ?', ['DNS', 'DHCP', 'ARP', 'ICMP'], 2, 'ARP, sur le réseau local.'], ['Pourquoi la voix sur IP utilise-t-elle UDP ?', ['Plus sûr', 'Une perte vaut mieux qu’un retard', 'Obligatoire', 'Plus de ports'], 1, 'Retransmettre un son en retard ne sert à rien.']],
|
||||
examen: { titre: 'Sujet type · 45 min · 20 points', q: ['Compléter le tableau des 7 couches OSI avec rôle et exemple. (7 pts)', 'Décrire l’encapsulation d’une requête HTTPS. (5 pts)', 'Comparer TCP et UDP, avec deux usages chacun. (4 pts)', 'Proposer une démarche de diagnostic pour « le site ne s’affiche pas ». (4 pts)'], r: ['Voir tableau du CM', 'HTTP → TLS → TCP 443 → IP → Ethernet', 'TCP fiable (web, SSH) · UDP rapide (DNS, VoIP)', 'ip link → ip addr → ping passerelle → nslookup → curl'] },
|
||||
prof: { deroule: [['0-15 min', 'Analogie de la lettre postale et de ses enveloppes'], ['15-60 min', 'CM, tableau des couches construit avec la classe'], ['60-90 min', 'TD encapsulation et diagnostic'], ['Séance 2', 'TP capture tcpdump, sujet type']], diff: 'Difficulté : moyen mnémotechnique et schéma à compléter. Avancés : analyse Wireshark d’une poignée de main TLS.', eval: 'QCM flash de début d’heure, sujet type.' } },
|
||||
sql: {
|
||||
cm: [{ t: 'Concevoir : du MCD au schéma relationnel', d: '25 min', html: 'Avant d’écrire des requêtes, on modélise : les <b>entités</b> (Élève, Classe, Devoir), leurs <b>attributs</b> et les <b>associations</b> avec leurs cardinalités. Une association 1,n devient une clé étrangère ; une association n,n devient une table de liaison.', exemple: 'ELEVE(id, nom, prenom, #classe_id)\nCLASSE(id, libelle, annee)\nDEVOIR(id, titre, date_rendu)\nRENDU(#eleve_id, #devoir_id, note, date_depot)' },
|
||||
{ t: 'Index et performances', d: '15 min', html: 'Un <b>index</b> accélère les recherches sur une colonne, comme l’index d’un livre. On indexe les clés étrangères et les colonnes souvent filtrées. <code>EXPLAIN</code> montre comment la base exécute une requête.' },
|
||||
{ t: 'Transactions', d: '15 min', html: 'Une transaction regroupe plusieurs opérations qui réussissent ou échouent ensemble (propriétés ACID). <code>BEGIN; … COMMIT;</code> valide, <code>ROLLBACK;</code> annule tout.', exemple: 'BEGIN;\nUPDATE comptes SET solde = solde - 50 WHERE id = 1;\nUPDATE comptes SET solde = solde + 50 WHERE id = 2;\nCOMMIT;' }],
|
||||
cas: { titre: 'Mise en situation · Base de l’ENT', texte: 'La direction veut un tableau de bord : taux de rendu des devoirs par classe, élèves sans aucun rendu depuis 3 semaines, moyenne par matière. Le développeur modélise les tables, écrit les requêtes avec jointures et agrégats, crée les index utiles et vérifie les performances avec EXPLAIN.' },
|
||||
erreurs: ['Oublier une colonne non agrégée dans le GROUP BY', 'Utiliser WHERE à la place de HAVING', 'Faire un UPDATE sans WHERE', 'Concaténer des saisies utilisateur dans une requête'],
|
||||
qcm: [['Une association n,n entre Élève et Devoir devient :', ['une colonne', 'une table de liaison', 'un index', 'une vue'], 1, 'RENDU(#eleve_id, #devoir_id, …).'], ['Que garantit une transaction ?', ['La vitesse', 'Tout ou rien', 'Le chiffrement', 'Le tri'], 1, 'Atomicité : toutes les opérations ou aucune.'], ['À quoi sert EXPLAIN ?', ['Commenter', 'Montrer le plan d’exécution', 'Supprimer un index', 'Exporter'], 1, 'Pour repérer les requêtes lentes.']],
|
||||
examen: { titre: 'Sujet type · 1 h · 20 points', q: ['Écrire le schéma relationnel à partir d’un énoncé donné. (5 pts)', 'Liste des élèves de SIO1 triés par moyenne décroissante. (3 pts)', 'Taux de rendu du devoir 7 par classe. (6 pts)', 'Élèves sans aucun rendu. (3 pts)', 'Sécuriser une requête de connexion. (3 pts)'], r: ['Voir partie 8', "SELECT … WHERE c.libelle = 'SIO1' ORDER BY moyenne DESC", 'COUNT(r.eleve_id) * 100.0 / COUNT(e.id) … LEFT JOIN … GROUP BY classe', 'LEFT JOIN rendus … WHERE r.eleve_id IS NULL', 'Requête préparée avec paramètres'] },
|
||||
prof: { deroule: [['0-10 min', 'Accroche : « combien d’élèves n’ont pas rendu le DM ? » en une ligne'], ['10-60 min', 'CM SELECT, WHERE, ORDER BY'], ['60-120 min', 'TP IDE SQL'], ['Séance 2', 'Agrégats et jointures'], ['Séance 3', 'Modélisation, transactions, sujet type']], diff: 'Difficulté : requêtes à trous dans l’IDE. Avancés : SQLBolt, HackerRank SQL niveau Medium.', eval: 'Tests automatiques IDE, sujet type sur 20.' } }
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue