{"id":2001,"date":"2026-09-19T21:28:20","date_gmt":"2026-09-19T21:28:20","guid":{"rendered":"https:\/\/www.mogacode.ma\/academy\/github-et-l-open-source\/"},"modified":"2026-09-19T21:28:20","modified_gmt":"2026-09-19T21:28:20","slug":"github-et-l-open-source","status":"publish","type":"page","link":"https:\/\/www.mogacode.ma\/en\/academy\/github-et-l-open-source\/","title":{"rendered":"Bonus : GitHub et l&rsquo;open source"},"content":{"rendered":"<div class=\"mga-shell\" data-code=\"z1\"><button type=\"button\" class=\"mga-side-toggle\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 6h16M4 12h16M4 18h16\"\/><\/svg><span>Modules<\/span><\/button><div class=\"mga-shell-inner\"><aside class=\"mga-sidebar\"><div class=\"mga-side-head\"><a class=\"mga-side-logo\" href=\"\/academy\/\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 10 12 5 2 10l10 5 10-5Z\"\/><path d=\"M6 12v5c0 1 2 2 6 2s6-1 6-2v-5\"\/><\/svg><span>MogaCode <b>Academy<\/b><\/span><\/a><div class=\"mga-side-prog\"><div class=\"track\"><div class=\"bar\"><\/div><\/div><span class=\"lbl\"><\/span><\/div><\/div><nav class=\"mga-side-nav\"><div class=\"mga-blk\" data-bloc=\"A\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"\/><\/svg><\/span><span class=\"t\">D\u00e9couverte<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"a1\" data-state=\"open\" href=\"\/academy\/comprendre-l-ia-sans-jargon\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">A1<\/span><span class=\"mt\">L&#039;IA sans jargon : de quoi parle-t-on vraiment ?<\/span><\/a><a class=\"mga-modlink\" data-code=\"a2\" data-state=\"open\" href=\"\/academy\/ce-qu-une-ia-sait-faire\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">A2<\/span><span class=\"mt\">Ce qu&#039;un LLM sait faire, et ce qu&#039;il ne sait PAS<\/span><\/a><a class=\"mga-modlink\" data-code=\"a3\" data-state=\"open\" href=\"\/academy\/utiliser-l-ia-sans-se-faire-avoir\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">A3<\/span><span class=\"mt\">Les 5 r\u00e9flexes pour ne pas se faire pi\u00e9ger<\/span><\/a><a class=\"mga-modlink\" data-code=\"a4\" data-state=\"open\" href=\"\/academy\/ecrire-son-premier-prompt\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">A4<\/span><span class=\"mt\">Parler a une IA : tes premiers prompts<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"B\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg><\/span><span class=\"t\">Prompt et outils<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"b1\" data-state=\"open\" href=\"\/academy\/le-prompt-qui-marche-vraiment\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">B1<\/span><span class=\"mt\">Le prompt qui marche vraiment<\/span><\/a><a class=\"mga-modlink\" data-code=\"b2\" data-state=\"open\" href=\"\/academy\/quel-outil-ia-choisir\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">B2<\/span><span class=\"mt\">Quel outil IA choisir, et pour quoi faire<\/span><\/a><a class=\"mga-modlink\" data-code=\"b3\" data-state=\"open\" href=\"\/academy\/gagner-du-temps-avec-l-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">B3<\/span><span class=\"mt\">Gagner du temps au quotidien<\/span><\/a><a class=\"mga-modlink\" data-code=\"b4\" data-state=\"open\" href=\"\/academy\/verifier-et-corriger-l-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">B4<\/span><span class=\"mt\">V\u00e9rifier, corriger, assumer<\/span><\/a><a class=\"mga-modlink\" data-code=\"b5\" data-state=\"open\" href=\"\/academy\/donnees-personnelles-et-rgpd\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">B5<\/span><span class=\"mt\">Donn\u00e9es, vie priv\u00e9e et \u00e9thique<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"C\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"\/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"\/><path d=\"M9 2v2M15 2v2M9 20v2M15 20v2M20 9h2M20 14h2M2 9h2M2 14h2\"\/><\/svg><\/span><span class=\"t\">Comprendre la machine<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"c1\" data-state=\"lock\" href=\"\/academy\/comprendre-les-api\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">C1<\/span><span class=\"mt\">Une API, c&#039;est quoi et \u00e0 quoi \u00e7a sert ?<\/span><\/a><a class=\"mga-modlink\" data-code=\"c2\" data-state=\"lock\" href=\"\/academy\/preparer-ses-donnees\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">C2<\/span><span class=\"mt\">Donn\u00e9es structur\u00e9es ou non : pr\u00e9parer ses donn\u00e9es<\/span><\/a><a class=\"mga-modlink\" data-code=\"c3\" data-state=\"lock\" href=\"\/academy\/sous-le-capot-d-un-llm\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">C3<\/span><span class=\"mt\">Sous le capot d&#039;un LLM, sans maths<\/span><\/a><a class=\"mga-modlink\" data-code=\"c4\" data-state=\"lock\" href=\"\/academy\/connecter-les-briques\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">C4<\/span><span class=\"mt\">Connecter les briques : tes premi\u00e8res int\u00e9grations<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"D\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"8\" height=\"8\" x=\"3\" y=\"3\" rx=\"2\"\/><path d=\"M7 11v3a2 2 0 0 0 2 2h4\"\/><rect width=\"8\" height=\"8\" x=\"13\" y=\"13\" rx=\"2\"\/><\/svg><\/span><span class=\"t\">Automatiser<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"d1\" data-state=\"lock\" href=\"\/academy\/automatiser-sans-dependance\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">D1<\/span><span class=\"mt\">L&#039;automatisation sans d\u00e9pendance<\/span><\/a><a class=\"mga-modlink\" data-code=\"d2\" data-state=\"lock\" href=\"\/academy\/declencheurs-cron-webhooks\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">D2<\/span><span class=\"mt\">D\u00e9clencheurs, t\u00e2ches planifi\u00e9es, webhooks<\/span><\/a><a class=\"mga-modlink\" data-code=\"d3\" data-state=\"lock\" href=\"\/academy\/ton-premier-script-utile\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">D3<\/span><span class=\"mt\">Ton premier script utile, de bout en bout<\/span><\/a><a class=\"mga-modlink\" data-code=\"d4\" data-state=\"lock\" href=\"\/academy\/automatiser-un-process\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">D4<\/span><span class=\"mt\">Automatiser un vrai process m\u00e9tier de A \u00e0 Z<\/span><\/a><a class=\"mga-modlink\" data-code=\"d5\" data-state=\"lock\" href=\"\/academy\/fiabilite-logs-reprise\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">D5<\/span><span class=\"mt\">Fiabilit\u00e9 : logs, erreurs, reprise, sauvegardes<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"E\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"8\" height=\"8\" x=\"3\" y=\"3\" rx=\"2\"\/><path d=\"M7 11v3a2 2 0 0 0 2 2h4\"\/><rect width=\"8\" height=\"8\" x=\"13\" y=\"13\" rx=\"2\"\/><\/svg><\/span><span class=\"t\">Agents<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"e1\" data-state=\"lock\" href=\"\/academy\/comprendre-les-agents-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E1<\/span><span class=\"mt\">Un agent IA, c&#039;est quoi vraiment<\/span><\/a><a class=\"mga-modlink\" data-code=\"e2\" data-state=\"lock\" href=\"\/academy\/donner-des-outils-a-une-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E2<\/span><span class=\"mt\">Donner des outils \u00e0 une IA<\/span><\/a><a class=\"mga-modlink\" data-code=\"e3\" data-state=\"lock\" href=\"\/academy\/cadrer-un-agent\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E3<\/span><span class=\"mt\">Cadrer un agent : mission et garde-fous<\/span><\/a><a class=\"mga-modlink\" data-code=\"e4\" data-state=\"lock\" href=\"\/academy\/memoire-et-contexte-des-agents\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E4<\/span><span class=\"mt\">M\u00e9moire et contexte d&#039;un agent<\/span><\/a><a class=\"mga-modlink\" data-code=\"e5\" data-state=\"lock\" href=\"\/academy\/assembler-un-agent-souverain\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E5<\/span><span class=\"mt\">Assembler un agent souverain, de bout en bout<\/span><\/a><a class=\"mga-modlink\" data-code=\"e6\" data-state=\"lock\" href=\"\/academy\/fiabilite-et-securite-des-agents\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">E6<\/span><span class=\"mt\">Fiabilit\u00e9 et s\u00e9curit\u00e9 des agents<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"F\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"\/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"\/><path d=\"M9 2v2M15 2v2M9 20v2M15 20v2M20 9h2M20 14h2M2 9h2M2 14h2\"\/><\/svg><\/span><span class=\"t\">RAG et donn\u00e9es<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"f1\" data-state=\"lock\" href=\"\/academy\/le-rag-donner-tes-documents-a-l-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">F1<\/span><span class=\"mt\">Le RAG : donner tes documents \u00e0 l&#039;IA<\/span><\/a><a class=\"mga-modlink\" data-code=\"f2\" data-state=\"lock\" href=\"\/academy\/architecture-d-un-rag\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">F2<\/span><span class=\"mt\">L&#039;architecture compl\u00e8te d&#039;un RAG<\/span><\/a><a class=\"mga-modlink\" data-code=\"f3\" data-state=\"lock\" href=\"\/academy\/la-recherche-par-le-sens\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">F3<\/span><span class=\"mt\">La recherche par le sens, et un mini-RAG en direct<\/span><\/a><a class=\"mga-modlink\" data-code=\"f4\" data-state=\"lock\" href=\"\/academy\/construire-un-rag-sans-reinventer-la-roue\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">F4<\/span><span class=\"mt\">Construire un RAG sans r\u00e9inventer la roue<\/span><\/a><a class=\"mga-modlink\" data-code=\"f5\" data-state=\"lock\" href=\"\/academy\/qualite-et-pieges-d-un-rag\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">F5<\/span><span class=\"mt\">Qualit\u00e9 et pi\u00e8ges d&#039;un RAG<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"G\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg><\/span><span class=\"t\">Aller plus loin<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"g1\" data-state=\"lock\" href=\"\/academy\/ia-multimodale-image-voix\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">G1<\/span><span class=\"mt\">L&#039;IA multimodale : image, voix, documents<\/span><\/a><a class=\"mga-modlink\" data-code=\"g2\" data-state=\"lock\" href=\"\/academy\/prompt-rag-ou-fine-tuning\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">G2<\/span><span class=\"mt\">Prompt, RAG ou fine-tuning : quand quoi<\/span><\/a><a class=\"mga-modlink\" data-code=\"g3\" data-state=\"lock\" href=\"\/academy\/evaluer-et-ameliorer-un-systeme-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">G3<\/span><span class=\"mt\">\u00c9valuer et am\u00e9liorer un syst\u00e8me IA<\/span><\/a><a class=\"mga-modlink\" data-code=\"g4\" data-state=\"lock\" href=\"\/academy\/cout-et-performance-a-l-echelle\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">G4<\/span><span class=\"mt\">Co\u00fbt et performance \u00e0 l&#039;\u00e9chelle<\/span><\/a><\/div><\/div><div class=\"mga-blk\" data-bloc=\"H\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 10 12 5 2 10l10 5 10-5Z\"\/><path d=\"M6 12v5c0 1 2 2 6 2s6-1 6-2v-5\"\/><\/svg><\/span><span class=\"t\">Projet<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink\" data-code=\"h1\" data-state=\"lock\" href=\"\/academy\/cadrer-ton-projet-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">H1<\/span><span class=\"mt\">Cadrer ton projet IA : du besoin au plan<\/span><\/a><a class=\"mga-modlink\" data-code=\"h2\" data-state=\"lock\" href=\"\/academy\/construire-ton-projet-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">H2<\/span><span class=\"mt\">Construire ton projet, brique par brique<\/span><\/a><a class=\"mga-modlink\" data-code=\"h3\" data-state=\"lock\" href=\"\/academy\/mettre-en-production-et-mesurer\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">H3<\/span><span class=\"mt\">Mettre en production et mesurer l&#039;impact<\/span><\/a><a class=\"mga-modlink\" data-code=\"h4\" data-state=\"lock\" href=\"\/academy\/ton-serveur-souverain-opere-par-l-ia\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">H4<\/span><span class=\"mt\">DevOps : ton serveur souverain, op\u00e9r\u00e9 par l&#039;IA<\/span><\/a><\/div><\/div><div class=\"mga-blk mgaon\" data-bloc=\"Z\"><button type=\"button\" class=\"mga-blk-h\"><span class=\"ic\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg><\/span><span class=\"t\">Bonus<\/span><span class=\"ch\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span><\/button><div class=\"mga-blk-body\"><a class=\"mga-modlink cur\" data-code=\"z1\" data-state=\"open\" href=\"\/academy\/github-et-l-open-source\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">BONUS<\/span><span class=\"mt\">Bonus : GitHub et l&#039;open source<\/span><\/a><div class=\"mga-subs\"><a class=\"mga-sublink\" data-ch=\"0\" href=\"#sm-0\"><span class=\"d\"><\/span>GitHub, le grand cahier ouvert du code<\/a><a class=\"mga-sublink\" data-ch=\"1\" href=\"#sm-1\"><span class=\"d\"><\/span>Lire un d\u00e9p\u00f4t sans se perdre<\/a><a class=\"mga-sublink\" data-ch=\"2\" href=\"#sm-2\"><span class=\"d\"><\/span>Donner, r\u00e9utiliser, et rester ma\u00eetre chez soi<\/a><\/div><a class=\"mga-modlink\" data-code=\"z2\" data-state=\"open\" href=\"\/academy\/best-of-skills-mcp-playbooks\/\"><span class=\"st\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg><span class=\"chk\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg><\/span><\/span><span class=\"mc\">BONUS 2<\/span><span class=\"mt\">Bonus avanc\u00e9 : le best-of du moment (skills, MCP, playbooks)<\/span><\/a><\/div><\/div><\/nav><a class=\"mga-side-wa\" href=\"https:\/\/wa.me\/212620229114\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\"\/><\/svg><span>Une question ? WhatsApp<\/span><\/a><\/aside><div class=\"mga-shell-main\"><div class=\"mga\"><div class=\"mga-hero\"><p class=\"mga-eyebrow\">BONUS \u00b7 Bonus \u00b7 1h \u00b7 gratuit<\/p><h1>Bonus : GitHub et l&#039;open source<\/h1><p>Tu repars avec : Le r\u00e9flexe qui change tout : trouver la brique open source qui existe d\u00e9j\u00e0, savoir juger un d\u00e9p\u00f4t GitHub, et l&#039;utiliser sans se faire avoir, en restant souverain.<\/p><\/div><div class=\"mga-chapters\" data-code=\"z1\" data-n=\"3\"><div class=\"mga-chnav\"><button type=\"button\" class=\"mga-chtab on\" data-ch=\"0\"><span class=\"num\">1<\/span>GitHub, le grand cahier ouvert du code<\/button><button type=\"button\" class=\"mga-chtab\" data-ch=\"1\"><span class=\"num\">2<\/span>Lire un d\u00e9p\u00f4t sans se perdre<\/button><button type=\"button\" class=\"mga-chtab\" data-ch=\"2\"><span class=\"num\">3<\/span>Donner, r\u00e9utiliser, et rester ma\u00eetre chez soi<\/button><\/div><div class=\"mga-chprog\"><div class=\"bar\"><\/div><\/div><div class=\"mga-chapter\" data-ch=\"0\"><div class=\"mga-atlist\"><b>Ateliers de ce sous-module<\/b><a href=\"#at-d98d89\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : parle \u00e0 l'IA souveraine<\/a><a href=\"#at-ab6a8e\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : la bonne d\u00e9cision<\/a><\/div><div class=\"mga-step\"><div class=\"n\">1 \u00b7 L&#039;accroche<\/div><h3><\/h3><p>Il est presque minuit. Tu es sur ton petit projet, celui que personne ne t'a demand\u00e9 mais qui te tient \u00e0 coeur. Peut-\u00eatre un site pour le commerce d'un proche, peut-\u00eatre juste une page pour t'entra\u00eener. Tu veux ajouter une chose qui a l'air toute simple : un menu qui s'ouvre quand on clique, une galerie de photos qui d\u00e9file toute seule, un petit champ o\u00f9 l'on tape son adresse et qui pr\u00e9vient gentiment quand on s'est tromp\u00e9. Tu essaies une fois. Rien. Tu recommences autrement. Toujours rien. Tu changes une virgule, tu d\u00e9places une ligne, tu retiens ta respiration. Et l\u00e0, tu as cette pens\u00e9e qui revient souvent quand on d\u00e9bute : je dois \u00eatre la seule personne au monde \u00e0 gal\u00e9rer sur un truc aussi b\u00eate.<\/p><p>Cette pens\u00e9e est fausse, et c'est important de le savoir t\u00f4t. Des milliers de gens, avant toi, ont voulu exactement le m\u00eame menu, la m\u00eame galerie, le m\u00eame petit champ d'adresse. Certains ont mis des soir\u00e9es enti\u00e8res \u00e0 le faire marcher, comme toi ce soir. Sauf qu'\u00e0 la fin, au lieu de refermer leur ordinateur et de garder leur trouvaille pour eux, ils ont fait un geste tout simple : ils ont pos\u00e9 leur bout de code dans un endroit public, accessible, gratuit, pour que le suivant n'ait plus jamais \u00e0 passer la m\u00eame nuit blanche. Cet endroit a un nom : GitHub.<\/p><p>GitHub, ce n'est pas un logiciel magique ni un truc r\u00e9serv\u00e9 aux g\u00e9nies de l'informatique. C'est un lieu, une immense biblioth\u00e8que en ligne, o\u00f9 des gens rangent leurs projets de code et laissent la porte ouverte. Tu peux entrer, regarder, apprendre, emporter ce dont tu as besoin, et parfois m\u00eame laisser un mot pour dire merci ou signaler un probl\u00e8me. Le sentiment de solitude que tu ressens \u00e0 minuit vient d'une id\u00e9e qu'on a en t\u00eate au d\u00e9but : coder, ce serait fabriquer chaque chose tout seul, \u00e0 partir de rien. Ce n'est pas \u00e7a. Coder, la plupart du temps, c'est assembler intelligemment des morceaux que d'autres ont partag\u00e9s, en comprenant ce qu'on assemble. Ce sous-module est l\u00e0 pour te faire passer de l'autre c\u00f4t\u00e9 de cette porte, calmement, sans jargon.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">2 \u00b7 Le pourquoi<\/div><h3><\/h3><p>Comprendre GitHub, ce n'est pas cocher une case technique de plus. C'est un vrai changement dans ta fa\u00e7on de travailler, et il touche cinq choses tr\u00e8s concr\u00e8tes de ton quotidien de d\u00e9butant.<\/p><p>La premi\u00e8re, c'est que tu arr\u00eates de r\u00e9inventer ce qui existe d\u00e9j\u00e0. Tu ne vas plus perdre trois soir\u00e9es sur un menu d\u00e9roulant, parce que tu sauras qu'un menu d\u00e9roulant propre, test\u00e9 par des centaines de personnes, t'attend quelque part. Ton temps, tu le garderas pour la partie qui te rend vraiment utile : adapter ce menu \u00e0 ton projet, choisir les bonnes couleurs, bien le placer. C'est la diff\u00e9rence entre un menuisier qui fabrique ses propres vis une par une et un menuisier qui ach\u00e8te les vis et se concentre sur le meuble.<\/p><p>La deuxi\u00e8me, c'est que tu apprends beaucoup plus vite. Quand tu lis le code que quelqu'un a partag\u00e9 et qui fonctionne, tu vois comment un vrai projet est construit. C'est comme apprendre \u00e0 cuisiner en regardant par-dessus l'\u00e9paule d'un cuisinier, plut\u00f4t qu'en inventant toutes les recettes seul dans ta cuisine. Chaque projet public que tu ouvres est une petite le\u00e7on gratuite.<\/p><p>La troisi\u00e8me, c'est que tu obtiens une m\u00e9moire pour ton propre travail. GitHub garde chaque \u00e9tape de ton projet, avec la date et une petite note qui dit ce que tu as chang\u00e9. Si tu casses tout un mardi soir, tu peux revenir \u00e0 la version de lundi qui marchait, en un geste. Fini le fichier appel\u00e9 projet-final-vraiment-final-cette-fois. Tu as un historique propre, sur lequel tu peux t'appuyer sans peur.<\/p><p>La quatri\u00e8me, c'est que tu peux montrer ce que tu sais faire. Ton profil GitHub devient une sorte de cahier ouvert o\u00f9 l'on voit tes projets, tes progr\u00e8s, ta r\u00e9gularit\u00e9. Pour quelqu'un qui d\u00e9bute et qui n'a pas encore de longue exp\u00e9rience, c'est parfois plus parlant qu'un beau discours : on voit le travail r\u00e9el.<\/p><p>La cinqui\u00e8me, enfin, c'est que tu rejoins une culture. Le partage de code n'est pas qu'une astuce pratique, c'est une mani\u00e8re de faire tourner le monde du logiciel : je prends, je comprends, et quand je peux, je redonne. Une fois que tu as go\u00fbt\u00e9 \u00e0 \u00e7a, tu ne travailles plus tout \u00e0 fait de la m\u00eame fa\u00e7on. Tu te sens moins seul, et tu deviens plus efficace. Ce ne sont pas deux effets s\u00e9par\u00e9s : c'est le m\u00eame mouvement.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">3 \u00b7 Le comment<\/div><h3><\/h3><p class=\"mga-sub\">1. Le d\u00e9p\u00f4t, c'est un dossier de projet avec sa m\u00e9moire<\/p><p>Le mot le plus important \u00e0 comprendre s'appelle le d\u00e9p\u00f4t. En anglais on dit repository, souvent raccourci en repo, mais retiens surtout l'id\u00e9e : un d\u00e9p\u00f4t, c'est simplement le dossier complet d'un projet. Tous les fichiers, rang\u00e9s ensemble, au m\u00eame endroit.<\/p><p>L\u00e0 o\u00f9 \u00e7a devient int\u00e9ressant, c'est que ce dossier a une m\u00e9moire. Il ne garde pas seulement l'\u00e9tat actuel des fichiers, il garde aussi toute leur histoire. Imagine un cahier o\u00f9, chaque fois que tu changes une page, une photo de la page d'avant reste coll\u00e9e dans la marge, avec la date et une note qui dit pourquoi tu as chang\u00e9. C'est exactement \u00e7a, un d\u00e9p\u00f4t.<\/p><p>Exemple concret : chez MogaCode, la bo\u00eete \u00e0 outils qui sert \u00e0 mesurer le r\u00e9f\u00e9rencement des sites vit dans un d\u00e9p\u00f4t. Chaque fois qu'un outil est am\u00e9lior\u00e9, l'ancienne version reste dans l'histoire du d\u00e9p\u00f4t. Si une am\u00e9lioration se r\u00e9v\u00e8le mauvaise, on peut revenir en arri\u00e8re sans rien perdre. Le d\u00e9p\u00f4t n'est pas un simple dossier, c'est un dossier qui n'oublie jamais.<\/p><p class=\"mga-sub\">2. Le compte et le profil, c'est ton identit\u00e9 et ta vitrine<\/p><p>Pour poser tes propres projets sur GitHub, tu as un compte, comme sur n'importe quel autre service. Ce compte porte un nom que tu choisis. Autour de ce compte, il y a ton profil : la page publique o\u00f9 l'on voit tes d\u00e9p\u00f4ts, ceux que tu as ouverts, et ta r\u00e9gularit\u00e9.<\/p><p>Ne n\u00e9glige pas ce profil, m\u00eame d\u00e9butant. Un nom clair et s\u00e9rieux vaut mieux qu'un pseudo compliqu\u00e9 que tu regretteras. Pense \u00e0 quelqu'un qui voudra te faire confiance un jour : il regardera cette page avant de te croire sur parole.<\/p><p>Exemple concret : quand une entreprise range son travail dans un compte, tous ses projets sont regroup\u00e9s au m\u00eame endroit, faciles \u00e0 retrouver. C'est comme avoir tous ses classeurs sur la m\u00eame \u00e9tag\u00e8re, avec son nom dessus, plut\u00f4t que des feuilles \u00e9parpill\u00e9es dans toute la maison.<\/p><p class=\"mga-sub\">3. Les versions, c'est le bouton retour arri\u00e8re qui ne s'efface jamais<\/p><p>Chaque fois que tu enregistres un changement sur GitHub, tu cr\u00e9es ce qu'on appelle une version. Une version, c'est une photo de ton projet \u00e0 un instant pr\u00e9cis, accompagn\u00e9e d'une petite phrase qui explique ce que tu viens de faire, par exemple : ajout du menu qui s'ouvre au clic.<\/p><p>La r\u00e8gle d'or, c'est d'\u00e9crire des petites phrases honn\u00eates et de faire des versions souvent. Une version pour chaque \u00e9tape qui a du sens. Ainsi, ton historique se lit comme le journal de bord de ton projet.<\/p><p>Exemple concret : tu passes une soir\u00e9e \u00e0 tout casser en essayant une nouvelle id\u00e9e. Si tu avais enregistr\u00e9 une version propre juste avant de commencer, tu reviens \u00e0 cette version en un geste et tu retrouves ton projet intact. Sans cette habitude, tu passerais la nuit \u00e0 tenter de te souvenir de ce que tu as touch\u00e9.<\/p><p class=\"mga-sub\">4. Chercher et r\u00e9cup\u00e9rer ce qui existe d\u00e9j\u00e0<\/p><p>Le vrai super pouvoir de GitHub, c'est de trouver du code utile que d'autres ont partag\u00e9, et de le rapporter chez toi. On appelle souvent ce geste cloner, c'est-\u00e0-dire faire une copie compl\u00e8te d'un d\u00e9p\u00f4t sur ton ordinateur.<\/p><p>La bonne m\u00e9thode n'est jamais de copier b\u00eatement. Tu cherches par mots simples ce dont tu as besoin, tu ouvres deux ou trois projets, tu regardes lequel est clair et vivant, et seulement ensuite tu r\u00e9cup\u00e8res. Comprendre d'abord, copier ensuite.<\/p><p>Exemple concret : plut\u00f4t que de coder toi-m\u00eame un calendrier de rendez-vous, tu peux en trouver un d\u00e9j\u00e0 partag\u00e9, l'essayer, et l'adapter \u00e0 ton besoin. Tu gagnes des jours de travail, \u00e0 condition de prendre le temps de comprendre ce que tu ram\u00e8nes, ce qu'on verra dans le sous-module suivant.<\/p><p class=\"mga-syn\">En r\u00e9sum\u00e9 : un d\u00e9p\u00f4t est un dossier de projet qui garde toute sa m\u00e9moire, ton compte est ta vitrine, chaque version est une photo dat\u00e9e \u00e0 laquelle tu peux revenir, et r\u00e9cup\u00e9rer du code partag\u00e9 te fait gagner un temps \u00e9norme si tu comprends d'abord ce que tu prends.<\/p><\/div><div class=\"mga-step atelier\" id=\"at-d98d89\" data-atlabel=\"\u00c0 toi : parle \u00e0 l&#039;IA souveraine\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><p>Le plus simple pour sentir \u00e0 quoi ressemble un d\u00e9p\u00f4t, c'est d'en explorer un avec quelqu'un qui te l'explique en langage clair. Parle \u00e0 l'IA souveraine de l'Academy, celle qui tourne sur les serveurs de MogaCode : demande-lui de te faire visiter un d\u00e9p\u00f4t imaginaire tout simple, pi\u00e8ce par pi\u00e8ce, pour voir en direct o\u00f9 se trouve la notice, o\u00f9 sont les versions, et comment on devine le r\u00f4le d'un dossier gr\u00e2ce \u00e0 son nom.<\/p><div class=\"mga-lab\" data-ex=\"z1_ia\"><p class=\"lh\">Parle a notre IA souveraine<\/p><p class=\"ls\">Le plus simple pour sentir \u00e0 quoi ressemble un d\u00e9p\u00f4t, c&#039;est d&#039;en explorer un avec quelqu&#039;un qui te l&#039;explique en langage clair. Parle \u00e0 l&#039;IA souveraine de l&#039;Academy, celle qui tourne sur les serveurs <\/p><textarea class=\"mga-in\" maxlength=\"400\" placeholder=\"Peux-tu m&#039;imaginer un tout petit d\u00e9p\u00f4t de projet pour un site de boulangerie de quartier, me lister ce qu&#039;il contiendrait (la notice, les dossiers, la licence), et m&#039;expliquer dans quel ordre je devrais le lire pour comprendre le projet en cinq minutes sans tout lire ?\"><\/textarea><div class=\"row\"><button type=\"button\" class=\"b1 mga-try\">Essaie<\/button><button type=\"button\" class=\"b2 mga-guide\">Puis teste une limite<\/button><span class=\"cc\"><span class=\"n\">0<\/span>\/400<\/span><\/div><div class=\"mga-out mga-o1\" hidden><\/div><div class=\"mga-note mga-n1\" hidden><\/div><p class=\"warn\">Mod\u00e8le local souverain, a but pedagogique. Il peut se tromper : c'est justement la le\u00e7on.<\/p><\/div><\/div><div class=\"mga-step\"><div class=\"n\">5 \u00b7 Le cas r\u00e9el<\/div><h3><\/h3><p>Prenons un cas vrai, v\u00e9cu chez MogaCode, qui montre \u00e0 quoi sert vraiment GitHub au-del\u00e0 de la simple r\u00e9cup\u00e9ration de bouts de code : la capacit\u00e9 \u00e0 tout retrouver apr\u00e8s une catastrophe.<\/p><p>Imagine la situation. L'ordinateur de travail sur lequel tourne tout un environnement de d\u00e9veloppement rend l'\u00e2me, ou bien il faut repartir de z\u00e9ro sur une machine neuve. Pour beaucoup de d\u00e9butants, ce serait le drame absolu : des semaines de r\u00e9glages perdus, des projets \u00e0 moiti\u00e9 refaits, la peur au ventre \u00e0 l'id\u00e9e d'avoir oubli\u00e9 un fichier crucial. C'est le genre d'accident qui d\u00e9courage des gens pour de bon.<\/p><p>Chez MogaCode, ce sc\u00e9nario ne fait plus peur, et c'est GitHub qui rend cela possible. Tout l'essentiel de l'environnement est rang\u00e9 dans un d\u00e9p\u00f4t priv\u00e9 d\u00e9di\u00e9 \u00e0 la reconstruction : la liste des projets, les r\u00e9glages, la configuration, les notes de proc\u00e9dure pour tout remettre en marche. Le d\u00e9p\u00f4t est priv\u00e9, donc pas ouvert \u00e0 tout le monde, mais il vit sur GitHub comme n'importe quel autre projet, avec sa m\u00e9moire compl\u00e8te. Sur une machine toute neuve, l'id\u00e9e est de pouvoir dire \u00e0 l'assistant, en une seule consigne : restaure mon environnement depuis ce d\u00e9p\u00f4t. Et la machine se reconstruit \u00e0 partir de la m\u00e9moire qui \u00e9tait en s\u00e9curit\u00e9, loin de l'ordinateur en panne.<\/p><p>Ce cas enseigne trois choses tr\u00e8s concr\u00e8tes. D'abord, un d\u00e9p\u00f4t n'est pas seulement fait pour partager avec les autres. Il sert aussi, et c'est immense pour un d\u00e9butant, \u00e0 te prot\u00e9ger toi-m\u00eame. Ton travail cesse de vivre uniquement sur une machine fragile qui peut tomber, \u00eatre vol\u00e9e, ou prendre un caf\u00e9 renvers\u00e9. Il vit aussi ailleurs, en s\u00e9curit\u00e9, avec toute son histoire.<\/p><p>Ensuite, ce cas montre l'importance de ranger proprement et de bien nommer. Si ce d\u00e9p\u00f4t de reconstruction avait \u00e9t\u00e9 un fouillis de fichiers sans notes, il n'aurait servi \u00e0 rien au moment critique. C'est parce que tout y est clair et ordonn\u00e9 qu'il devient un vrai filet de s\u00e9curit\u00e9. Ranger, c'est aimer son futur soi, celui qui devra retrouver ses affaires un mauvais jour.<\/p><p>Enfin, ce cas apprend une chose sur les secrets. Certaines informations sensibles, comme des mots de passe ou des cl\u00e9s, ne se mettent jamais en clair dans un d\u00e9p\u00f4t, m\u00eame priv\u00e9. Chez MogaCode, ces \u00e9l\u00e9ments sont prot\u00e9g\u00e9s \u00e0 part, chiffr\u00e9s, avec une cl\u00e9 rang\u00e9e dans un gestionnaire d\u00e9di\u00e9 et une copie sur papier. La le\u00e7on pour toi qui d\u00e9butes : GitHub est un formidable cahier de m\u00e9moire, mais tout ne s'\u00e9crit pas dans un cahier. Ce qui doit rester secret se garde ailleurs, et on ne m\u00e9lange pas les deux. Un d\u00e9p\u00f4t bien tenu, c'est un projet qu'on peut faire rena\u00eetre, sans jamais exposer ce qui doit rester cach\u00e9.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">6 \u00b7 Le contre-exemple<\/div><h3><\/h3><p>GitHub et le partage de code, c'est formidable, mais il y a un pi\u00e8ge dans lequel les d\u00e9butants tombent presque tous une fois : croire que, puisque c'est partag\u00e9 et gratuit, on peut prendre les yeux ferm\u00e9s et s'appuyer dessus pour toujours. Ce n'est pas vrai, et l'histoire suivante le montre bien.<\/p><p>Chez MogaCode, comme sur beaucoup de sites du monde entier, on a longtemps utilis\u00e9 un composant tout pr\u00eat pour enrichir des pages web, un module fait par d'autres, ajout\u00e9 par-dessus l'outil principal. C'\u00e9tait pratique, \u00e7a faisait gagner du temps, exactement l'esprit du partage. Sauf qu'un jour, ce composant tiers a pr\u00e9sent\u00e9 une faille de s\u00e9curit\u00e9. Une porte laiss\u00e9e ouverte, non pas chez MogaCode, mais dans le code de ce module ext\u00e9rieur. Le r\u00e9sultat a \u00e9t\u00e9 douloureux : par cette faille, des sites qui l'utilisaient ont \u00e9t\u00e9 attaqu\u00e9s et pirat\u00e9s. Depuis, ce composant est banni de toutes les installations : on ne le remet plus, jamais.<\/p><p>Que faut-il en retenir, quand on d\u00e9bute ? Pas qu'il faut fuir le code partag\u00e9, ce serait la mauvaise le\u00e7on. La bonne le\u00e7on est plus fine : r\u00e9utiliser du code des autres, c'est aussi h\u00e9riter de leurs probl\u00e8mes. Quand tu ajoutes un morceau que tu n'as pas \u00e9crit, tu invites chez toi tout ce qu'il contient, le bon comme le mauvais, ce que tu vois comme ce que tu ne vois pas. Si ce morceau a une faille, cette faille devient la tienne. Si le projet est abandonn\u00e9 et que plus personne ne le r\u00e9pare, tu te retrouves seul avec un morceau qui vieillit mal.<\/p><p>Le bon r\u00e9flexe, ce n'est donc pas la m\u00e9fiance totale, ni la confiance aveugle. C'est une vigilance calme. Avant de t'appuyer sur un projet partag\u00e9 pour quelque chose d'important, tu regardes s'il est vivant, s'il est tenu \u00e0 jour, s'il est utilis\u00e9 par beaucoup de monde, si les probl\u00e8mes signal\u00e9s re\u00e7oivent des r\u00e9ponses. Et surtout, tu gardes toujours en t\u00eate une question simple : si ce morceau dispara\u00eet ou tombe en panne demain, qu'est-ce qui se passe pour moi ? Si la r\u00e9ponse est une catastrophe, c'est que tu en d\u00e9pends trop. Le partage est une force, \u00e0 condition de ne jamais confier \u00e0 un morceau ext\u00e9rieur les cl\u00e9s de ta maison. Cette le\u00e7on, on la reverra sous un autre angle, parce qu'elle touche au coeur du m\u00e9tier.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">7 \u00b7 Les pi\u00e8ges<\/div><h3><\/h3><ul class=\"mga-chain\"><li><b>Le pi\u00e8ge du fichier final num\u00e9ro douze.<\/b> Sympt\u00f4me : tu as des dizaines de copies de ton projet nomm\u00e9es final, vraiment-final, final-corrig\u00e9, et tu ne sais plus laquelle marche. Cause : tu enregistres en dupliquant des dossiers au lieu d'utiliser les versions de GitHub. R\u00e9flexe : un seul d\u00e9p\u00f4t, et une version dat\u00e9e \u00e0 chaque \u00e9tape qui a du sens.<\/li><li><b>Le pi\u00e8ge du copier sans comprendre.<\/b> Sympt\u00f4me : tu colles un bout de code trouv\u00e9 en ligne, \u00e7a marche par miracle, puis \u00e7a casse et tu es totalement perdu. Cause : tu as pris le r\u00e9sultat sans lire ni comprendre le fonctionnement. R\u00e9flexe : lis le morceau avant de le rapporter, garde seulement ce que tu peux expliquer avec tes mots.<\/li><li><b>Le pi\u00e8ge du secret dans le cahier.<\/b> Sympt\u00f4me : tu ranges un mot de passe ou une cl\u00e9 directement dans un fichier de ton d\u00e9p\u00f4t. Cause : tu confonds m\u00e9moire du code et coffre-fort des secrets. R\u00e9flexe : les secrets se gardent \u00e0 part, chiffr\u00e9s, jamais en clair dans un d\u00e9p\u00f4t m\u00eame priv\u00e9.<\/li><li><b>Le pi\u00e8ge du message de version vide.<\/b> Sympt\u00f4me : ton historique est une suite de notes qui disent juste changement ou hop. Cause : tu enregistres sans prendre trois secondes pour dire ce que tu as fait. R\u00e9flexe : \u00e9cris une phrase honn\u00eate et concr\u00e8te, ton futur toi te remerciera un mauvais soir.<\/li><li><b>Le pi\u00e8ge de la d\u00e9pendance aveugle.<\/b> Sympt\u00f4me : tout ton projet repose sur un composant ext\u00e9rieur que tu n'as jamais v\u00e9rifi\u00e9. Cause : tu as confondu gratuit et sans risque. R\u00e9flexe : avant de t'appuyer dessus, v\u00e9rifie qu'il est vivant, et demande-toi ce qui t'arrive s'il dispara\u00eet demain.<\/li><\/ul><\/div><div class=\"mga-step atelier\" id=\"at-ab6a8e\" data-atlabel=\"\u00c0 toi : la bonne d\u00e9cision\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><div class=\"mga-decision\"><script type=\"application\/json\" class=\"mga-data\">[{\"q\":\"Tu veux ajouter \\u00e0 ton site un carrousel de photos qui d\\u00e9file. Tu en trouves plusieurs d\\u00e9j\\u00e0 partag\\u00e9s sur GitHub. Que fais-tu ?\",\"options\":[{\"t\":\"Tu en ouvres deux ou trois, tu regardes lequel est clair et vivant, tu comprends comment il marche, puis tu l'adaptes.\",\"ok\":true,\"why\":\"C'est la bonne d\\u00e9marche : comprendre d'abord, choisir un projet en bon \\u00e9tat, adapter ensuite. Tu gagnes du temps sans importer un probl\\u00e8me \\u00e0 l'aveugle.\"},{\"t\":\"Tu prends le premier de la liste et tu colles son code sans le lire, du moment que \\u00e7a d\\u00e9file.\",\"ok\":false,\"why\":\"Copier sans comprendre te laisse d\\u00e9muni d\\u00e8s que \\u00e7a casse, et tu risques d'importer un morceau abandonn\\u00e9 ou risqu\\u00e9.\"}]},{\"q\":\"Ton projet marchait hier soir, ce soir tu as tout cass\\u00e9 en essayant une id\\u00e9e. Heureusement tu utilises GitHub. Quelle est ton attitude ?\",\"options\":[{\"t\":\"Tu paniques et tu refais tout de m\\u00e9moire, ligne par ligne, en esp\\u00e9rant retomber sur la bonne version.\",\"ok\":false,\"why\":\"C'est exactement l'effort que GitHub t'\\u00e9vite. Refaire de m\\u00e9moire est long et source d'erreurs.\"},{\"t\":\"Tu reviens \\u00e0 la version propre enregistr\\u00e9e hier soir, en un geste, et tu repars de l\\u00e0.\",\"ok\":true,\"why\":\"C'est tout l'int\\u00e9r\\u00eat des versions : un retour arri\\u00e8re fiable qui ne s'efface jamais. Encore faut-il avoir enregistr\\u00e9 une version propre avant de tenter des choses.\"}]},{\"q\":\"Tu dois enregistrer une version apr\\u00e8s avoir ajout\\u00e9 un menu qui s'ouvre au clic. Quel message \\u00e9cris-tu ?\",\"options\":[{\"t\":\"Ajout du menu qui s'ouvre au clic.\",\"ok\":true,\"why\":\"Une phrase honn\\u00eate et concr\\u00e8te rend ton historique lisible comme un journal de bord.\"},{\"t\":\"maj\",\"ok\":false,\"why\":\"Un message vide ne dit rien \\u00e0 ton futur toi. Le jour o\\u00f9 tu chercheras une \\u00e9tape pr\\u00e9cise, tu seras perdu.\"}]},{\"q\":\"Tu as besoin de garder en s\\u00e9curit\\u00e9 les r\\u00e9glages de ton environnement de travail, au cas o\\u00f9 ta machine tomberait en panne. O\\u00f9 mets-tu les mots de passe ?\",\"options\":[{\"t\":\"En clair dans un fichier du d\\u00e9p\\u00f4t, pour tout retrouver au m\\u00eame endroit.\",\"ok\":false,\"why\":\"On ne met jamais de secrets en clair dans un d\\u00e9p\\u00f4t, m\\u00eame priv\\u00e9. La m\\u00e9moire du code et le coffre-fort des secrets sont deux choses s\\u00e9par\\u00e9es.\"},{\"t\":\"Dans un gestionnaire de secrets d\\u00e9di\\u00e9, \\u00e0 part du d\\u00e9p\\u00f4t, chiffr\\u00e9, avec une cl\\u00e9 conserv\\u00e9e en lieu s\\u00fbr.\",\"ok\":true,\"why\":\"Le d\\u00e9p\\u00f4t garde la m\\u00e9moire du projet, les secrets se gardent ailleurs et prot\\u00e9g\\u00e9s. On ne m\\u00e9lange jamais les deux.\"}]}]<\/script><div class=\"mga-host\"><\/div><\/div><\/div><div class=\"mga-q\" data-q=\"z1a1\"><p style=\"margin:0 0 6px;color:#0F2237\">Qu&#039;est-ce qu&#039;un d\u00e9p\u00f4t sur GitHub ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Le dossier complet d&#039;un projet, avec toute la m\u00e9moire de son histoire.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Un logiciel magique qui \u00e9crit le code \u00e0 ta place.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Un coffre-fort r\u00e9serv\u00e9 aux mots de passe et aux cl\u00e9s secr\u00e8tes.<\/button><\/div><div class=\"mga-q\" data-q=\"z1a2\"><p style=\"margin:0 0 6px;color:#0F2237\">\u00c0 quoi sert une version (aussi appel\u00e9e commit) ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">\u00c0 garder une photo dat\u00e9e du projet, avec une note qui dit ce qui a chang\u00e9.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">\u00c0 supprimer d\u00e9finitivement l&#039;historique pour gagner de la place.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">\u00c0 envoyer automatiquement ton projet \u00e0 toutes les entreprises du monde.<\/button><\/div><div class=\"mga-q\" data-q=\"z1a3\"><p style=\"margin:0 0 6px;color:#0F2237\">Quel est le bon r\u00e9flexe avant de r\u00e9cup\u00e9rer du code partag\u00e9 ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">L&#039;ouvrir, le comprendre, v\u00e9rifier qu&#039;il est clair et vivant, puis l&#039;adapter.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Le copier le plus vite possible sans le lire, du moment que \u00e7a marche.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Le t\u00e9l\u00e9charger seulement s&#039;il compte moins de dix lignes.<\/button><\/div><div class=\"mga-q\" data-q=\"z1a4\"><p style=\"margin:0 0 6px;color:#0F2237\">O\u00f9 ne faut-il jamais mettre un mot de passe ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">En clair dans un fichier d&#039;un d\u00e9p\u00f4t, m\u00eame priv\u00e9.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Dans un gestionnaire de secrets d\u00e9di\u00e9 et chiffr\u00e9.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Sur une feuille de papier rang\u00e9e dans un lieu s\u00fbr.<\/button><\/div><div class=\"mga-q\" data-q=\"z1a5\"><p style=\"margin:0 0 6px;color:#0F2237\">Quelle est la vraie le\u00e7on de l&#039;incident du composant tiers pirat\u00e9 ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">R\u00e9utiliser du code, c&#039;est aussi h\u00e9riter de ses probl\u00e8mes, donc il faut rester vigilant.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Il ne faut jamais r\u00e9utiliser aucun code partag\u00e9 par les autres.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Le code gratuit est toujours plus s\u00fbr que le code payant.<\/button><\/div><div class=\"mga-chfoot\"><button type=\"button\" class=\"mga-cta mga-chnext\" data-go=\"1\">Sous-module suivant &rarr;<\/button><\/div><\/div><div class=\"mga-chapter hid\" data-ch=\"1\"><div class=\"mga-atlist\"><b>Ateliers de ce sous-module<\/b><a href=\"#at-4627e7\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : la bonne d\u00e9cision<\/a><a href=\"#at-d12e6e\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : ton playbook<\/a><\/div><div class=\"mga-step\"><div class=\"n\">1 \u00b7 L&#039;accroche<\/div><h3><\/h3><p>Tu as trouv\u00e9, sur GitHub, un projet qui semble faire exactement ce dont tu as besoin. Le coeur battant un peu, tu cliques dessus. Et l\u00e0, une douche froide : une page pleine de noms de fichiers bizarres, des dossiers dans des dossiers, des mots que tu n'as jamais vus, des chiffres partout, des boutons dont tu ignores l'usage. Tu remontes, tu redescends, tu ne sais pas par o\u00f9 commencer. L'impression que ce projet parle une langue que tout le monde comprend sauf toi. Tu refermes l'onglet, un peu honteux, en te disant que tu reviendras quand tu seras plus \u00e0 l'aise. Sauf que ce moment ne vient jamais tout seul.<\/p><p>Ce blocage est compl\u00e8tement normal, et presque tout le monde le vit au d\u00e9but. La v\u00e9rit\u00e9, c'est qu'un d\u00e9p\u00f4t n'est pas fait pour \u00eatre lu en entier, du premier fichier au dernier, comme un roman. Personne ne fait \u00e7a, m\u00eame les gens tr\u00e8s exp\u00e9riment\u00e9s. Un d\u00e9p\u00f4t se lit par petits bouts, dans un certain ordre, en cherchant d'abord les bonnes portes d'entr\u00e9e. Une fois que tu connais ces portes, ce qui ressemblait \u00e0 un mur incompr\u00e9hensible devient une maison o\u00f9 tu sais te d\u00e9placer.<\/p><p>Pense \u00e0 la premi\u00e8re fois o\u00f9 tu es entr\u00e9 dans une grande biblioth\u00e8que que tu ne connaissais pas. Au d\u00e9but, c'est intimidant : des milliers de livres, des rayons dans tous les sens. Puis quelqu'un te montre l'entr\u00e9e, le panneau qui explique comment tout est rang\u00e9, le comptoir o\u00f9 l'on r\u00e9pond aux questions. Soudain, tu n'es plus perdu, tu sais comment chercher. Lire un d\u00e9p\u00f4t, c'est pareil. Il y a des rep\u00e8res simples, toujours les m\u00eames, qui existent dans presque tous les projets s\u00e9rieux. Il y a une notice qui explique tout au d\u00e9but. Il y a des indices qui te disent si le projet est encore vivant ou abandonn\u00e9. Il y a un document qui te dit ce que tu as le droit de faire avec ce code. Et il y a une organisation des dossiers qui, une fois qu'on en conna\u00eet la logique, se laisse deviner.<\/p><p>Ce sous-module va te donner ces rep\u00e8res, dans l'ordre. \u00c0 la fin, tu pourras ouvrir n'importe quel d\u00e9p\u00f4t et, en quelques minutes, savoir de quoi il parle, s'il est fiable, et si tu peux t'en servir. Sans tout lire. Sans jargon. Sans honte.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">2 \u00b7 Le pourquoi<\/div><h3><\/h3><p>Savoir lire un d\u00e9p\u00f4t change ta vie de d\u00e9butant sur trois plans tr\u00e8s concrets, et chacun t'\u00e9vite une cat\u00e9gorie d'ennuis bien pr\u00e9cise.<\/p><p>Le premier, c'est que tu cesses de rapporter chez toi des choses que tu ne comprends pas. Un d\u00e9butant press\u00e9 prend un projet, colle son code, et prie pour que \u00e7a marche. Tant que \u00e7a marche, tout va bien. Le jour o\u00f9 \u00e7a casse, c'est le drame, parce qu'il n'a jamais compris ce qu'il avait pris. Quelqu'un qui sait lire un d\u00e9p\u00f4t fait l'inverse : il regarde d'abord, il comprend l'essentiel, et il ne ram\u00e8ne que ce qu'il peut expliquer avec ses propres mots. R\u00e9sultat, quand un probl\u00e8me arrive, il sait o\u00f9 chercher. La lecture n'est pas une perte de temps avant l'action, c'est ce qui rend l'action solide.<\/p><p>Le deuxi\u00e8me plan, c'est que tu apprends \u00e0 juger la fiabilit\u00e9 avant de faire confiance. Tous les projets partag\u00e9s ne se valent pas. Certains sont tenus par des \u00e9quipes s\u00e9rieuses, mis \u00e0 jour souvent, utilis\u00e9s par des milliers de gens. D'autres ont \u00e9t\u00e9 pos\u00e9s une fois puis abandonn\u00e9s il y a des ann\u00e9es, avec des probl\u00e8mes signal\u00e9s qui n'ont jamais eu de r\u00e9ponse. De l'ext\u00e9rieur, les deux peuvent se ressembler. Savoir lire un d\u00e9p\u00f4t, c'est savoir rep\u00e9rer la diff\u00e9rence en quelques minutes : la date de la derni\u00e8re activit\u00e9, le nombre de personnes qui s'y int\u00e9ressent, la mani\u00e8re dont les probl\u00e8mes sont trait\u00e9s. Tu deviens capable de choisir, au lieu de subir.<\/p><p>Le troisi\u00e8me plan, c'est que tu comprends enfin ce que tu as le droit de faire. Beaucoup de d\u00e9butants croient que puisqu'un code est visible en ligne, il est \u00e0 eux, gratuit et sans condition. C'est faux, et cette erreur peut co\u00fbter cher. Chaque projet pr\u00e9cise ses r\u00e8gles dans un document d\u00e9di\u00e9, la licence. Certaines licences te laissent tout faire, m\u00eame dans un projet commercial. D'autres t'imposent des conditions, comme citer l'auteur ou partager \u00e0 ton tour tes modifications. Savoir lire un d\u00e9p\u00f4t inclut savoir trouver et lire ce document, pour ne pas te retrouver, un jour, \u00e0 avoir utilis\u00e9 du travail d'autrui sans en avoir le droit.<\/p><p>Ces trois plans se rejoignent en une seule habitude qui te fera passer pour quelqu'un de s\u00e9rieux tr\u00e8s vite : regarder avant de prendre. C'est une habitude qui rassure les clients, qui prot\u00e8ge tes projets, et qui, au fond, est simplement une marque de respect envers le travail des autres et envers ton propre travail futur.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">3 \u00b7 Le comment<\/div><h3><\/h3><p class=\"mga-sub\">1. Commence toujours par la notice, le README<\/p><p>Dans presque tout d\u00e9p\u00f4t s\u00e9rieux, il y a un fichier sp\u00e9cial qui s'affiche automatiquement quand tu arrives sur la page : le README. Le mot veut dire lis-moi, et c'est un ordre \u00e0 suivre. C'est la notice du projet, \u00e9crite pour les humains, pas pour les machines.<\/p><p>Un bon README te dit en quelques lignes ce que fait le projet, \u00e0 qui il sert, comment on l'installe, et comment on s'en sert. C'est ta premi\u00e8re et ta meilleure porte d'entr\u00e9e. Avant de plonger dans les fichiers de code, tu lis cette notice en entier, calmement.<\/p><p>Exemple concret : tu tombes sur un projet qui promet un calendrier de rendez-vous. Le README t'explique en trois paragraphes \u00e0 quoi il sert et te donne les \u00e9tapes pour l'essayer. En cinq minutes de lecture, tu sais si ce projet correspond \u00e0 ton besoin, sans avoir ouvert un seul fichier de code. C'est comme lire le dos d'un livre avant de l'acheter.<\/p><p class=\"mga-sub\">2. Regarde si le projet est vivant ou abandonn\u00e9<\/p><p>Un projet partag\u00e9, c'est comme un jardin : s'il n'est pas entretenu, il finit par ne plus \u00eatre utilisable. Ton deuxi\u00e8me geste, c'est donc de v\u00e9rifier la vie du projet. Deux indices suffisent au d\u00e9but.<\/p><p>Le premier indice est la date de la derni\u00e8re activit\u00e9. Un projet touch\u00e9 il y a quelques semaines est probablement vivant. Un projet dont le dernier changement remonte \u00e0 plusieurs ann\u00e9es dort peut-\u00eatre pour toujours. Le second indice est la mani\u00e8re dont les probl\u00e8mes signal\u00e9s sont trait\u00e9s : si les gens posent des questions et que personne ne r\u00e9pond depuis longtemps, m\u00e9fie-toi.<\/p><p>Exemple concret : deux projets font la m\u00eame chose. L'un a \u00e9t\u00e9 mis \u00e0 jour le mois dernier et ses probl\u00e8mes re\u00e7oivent des r\u00e9ponses. L'autre n'a pas boug\u00e9 depuis des ann\u00e9es et croule sous des questions sans r\u00e9ponse. M\u00eame s'ils se ressemblent, tu choisis le premier. Tu ne construis pas ta maison sur un terrain que plus personne n'entretient.<\/p><p class=\"mga-sub\">3. Lis la licence pour savoir ce que tu as le droit de faire<\/p><p>La licence, c'est le document qui dit les r\u00e8gles d'utilisation du code. Le trouver et le lire, m\u00eame en diagonale, fait partie d'une lecture s\u00e9rieuse de d\u00e9p\u00f4t. Ne saute jamais cette \u00e9tape sous pr\u00e9texte que le code est visible.<\/p><p>Retiens l'id\u00e9e g\u00e9n\u00e9rale : certaines licences sont tr\u00e8s permissives et te laissent presque tout faire, y compris dans un travail que tu vends. D'autres posent des conditions, par exemple citer l'auteur, ou partager \u00e0 ton tour ce que tu as construit par-dessus. Ce n'est pas grave d'avoir des conditions, il faut juste les conna\u00eetre et les respecter.<\/p><p>Exemple concret : tu veux utiliser un joli composant dans un site pour un client qui te paie. Avant de l'int\u00e9grer, tu v\u00e9rifies la licence pour \u00eatre s\u00fbr d'avoir le droit de t'en servir dans un cadre commercial. Cinq minutes de lecture t'\u00e9vitent un probl\u00e8me g\u00eanant plus tard.<\/p><p class=\"mga-sub\">4. Parcours la structure sans vouloir tout lire<\/p><p>Enfin, tu jettes un oeil \u00e0 la mani\u00e8re dont les dossiers et les fichiers sont rang\u00e9s. L'objectif n'est pas de tout lire, c'est de rep\u00e9rer les grandes pi\u00e8ces de la maison et de deviner o\u00f9 se trouve ce qui t'int\u00e9resse.<\/p><p>La bonne m\u00e9thode est d'aller du g\u00e9n\u00e9ral au pr\u00e9cis. Tu regardes les dossiers principaux, tu devines leur r\u00f4le gr\u00e2ce \u00e0 leur nom, et tu ne descends dans le d\u00e9tail que sur la partie qui te concerne vraiment. Tu ignores le reste sans culpabiliser.<\/p><p>Exemple concret : chez MogaCode, la bo\u00eete \u00e0 outils SEO contient des dizaines d'outils, chacun avec un nom qui dit clairement ce qu'il fait. Pour comprendre \u00e0 quoi sert le projet, tu n'as pas besoin de lire chaque outil : tu lis la notice, tu parcours les noms, et tu plonges seulement dans les deux ou trois qui t'int\u00e9ressent. La clart\u00e9 des noms fait la moiti\u00e9 du travail.<\/p><p class=\"mga-syn\">En r\u00e9sum\u00e9 : on ne lit jamais un d\u00e9p\u00f4t en entier. On lit la notice pour comprendre, on regarde la date et l'activit\u00e9 pour juger s'il est vivant, on lit la licence pour conna\u00eetre ses droits, et on parcourt la structure du g\u00e9n\u00e9ral au pr\u00e9cis pour trouver ce qui compte.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">4 \u00b7 Le cas r\u00e9el<\/div><h3><\/h3><p>Prenons un cas vrai de MogaCode qui montre pourquoi une bonne lecture repose autant sur la clart\u00e9 des noms que sur la patience du lecteur : la bo\u00eete \u00e0 outils SEO, celle qui sert \u00e0 mesurer et am\u00e9liorer le r\u00e9f\u00e9rencement des sites.<\/p><p>Cette bo\u00eete \u00e0 outils est un projet qui contient des dizaines d'outils diff\u00e9rents. Chacun fait une t\u00e2che pr\u00e9cise. Un outil va chercher les performances d'un site dans les donn\u00e9es de Google. Un autre analyse la vitesse d'une page. Un autre encore rep\u00e8re les pages d'un site qui ne re\u00e7oivent aucun lien depuis les autres pages, ces fameuses pages orphelines que personne ne trouve. Il y en a pour mesurer, il y en a pour proposer des am\u00e9liorations. Au total, une vraie caisse \u00e0 outils bien remplie.<\/p><p>Maintenant, imagine que tu d\u00e9barques dans ce projet sans jamais l'avoir vu, comme tu d\u00e9barquerais dans n'importe quel d\u00e9p\u00f4t trouv\u00e9 sur GitHub. Si tu voulais lire chaque outil en entier pour comprendre l'ensemble, tu y passerais des jours et tu abandonnerais. C'est l\u00e0 que la lecture intelligente entre en jeu. Tu commences par la notice, qui explique ce que fait la bo\u00eete en g\u00e9n\u00e9ral : mesurer et optimiser le r\u00e9f\u00e9rencement, sans jamais inventer de chiffre. Puis tu parcours simplement la liste des noms d'outils. Et l\u00e0, la magie op\u00e8re : les noms sont choisis pour dire ce que fait chaque outil. Tu n'as pas besoin de lire le code d'un outil pour deviner qu'il sert \u00e0 rep\u00e9rer les pages orphelines, son nom te le dit.<\/p><p>Ce qui rend ce cas particuli\u00e8rement parlant, c'est que cette bo\u00eete \u00e0 outils n'est pas seulement lue par des humains. Une intelligence artificielle s'en sert aussi : elle choisit le bon outil selon la question, l'appelle, r\u00e9cup\u00e8re le r\u00e9sultat. Et pour qu'une IA choisisse bien, il faut exactement la m\u00eame chose que pour un humain qui lit un d\u00e9p\u00f4t : des noms clairs et une notice honn\u00eate. Un outil bien nomm\u00e9 est compris par tout le monde, humain comme machine. Un outil au nom obscur est un pi\u00e8ge pour les deux.<\/p><p>La le\u00e7on pour toi qui d\u00e9butes tient en deux points. D'abord, quand tu lis un d\u00e9p\u00f4t, appuie-toi sur les noms avant de plonger dans le code : dans un projet bien fait, ils t'orientent presque tout seuls. Ensuite, quand ce sera ton tour de partager du code, souviens-toi de ce cas et soigne tes noms. Un nom clair est un cadeau que tu fais \u00e0 tous ceux qui liront ton projet apr\u00e8s toi, y compris \u00e0 toi-m\u00eame dans six mois. La lisibilit\u00e9 d'un d\u00e9p\u00f4t ne tombe pas du ciel : quelqu'un a pris le temps de bien nommer les choses. Ce quelqu'un, un jour, ce sera toi.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">5 \u00b7 Le contre-exemple<\/div><h3><\/h3><p>Voici maintenant un contre-exemple, le genre d'erreur que fait un d\u00e9butant qui a entendu dire qu'il fallait r\u00e9utiliser du code, mais qui a saut\u00e9 l'\u00e9tape de la lecture. C'est une histoire qui n'a pas de m\u00e9chant, juste un exc\u00e8s de confiance.<\/p><p>Imagine quelqu'un qui construit un site et qui a besoin d'une fonction pr\u00e9cise, disons un syst\u00e8me d'envoi de messages. Il cherche sur GitHub, trouve un projet qui a l'air parfait, une belle page d'accueil, un code qui semble propre. Ravi, il le rapporte chez lui et l'int\u00e8gre directement dans un vrai site en production, celui que des clients utilisent pour de bon. Il n'a pas ouvert la notice. Il n'a pas regard\u00e9 la date. Il n'a pas lu la licence. Il a vu que \u00e7a avait l'air bien et il a fonc\u00e9.<\/p><p>Le probl\u00e8me, c'est que la notice, s'il l'avait lue, disait clairement quelque chose comme : projet exp\u00e9rimental, \u00e0 ne pas utiliser en production, non maintenu. Trois indices qu'il a ignor\u00e9s. Projet exp\u00e9rimental veut dire que ce n'est pas fini. \u00c0 ne pas utiliser en production veut dire que l'auteur lui-m\u00eame d\u00e9conseille de s'en servir pour du vrai. Non maintenu veut dire que personne ne le r\u00e9pare plus. Toute l'information \u00e9tait l\u00e0, \u00e9crite, gratuite, \u00e0 port\u00e9e de clic. Il ne l'a pas lue.<\/p><p>La suite est pr\u00e9visible. Un jour, le morceau tombe en panne sur un cas que l'auteur avait justement pr\u00e9venu ne pas g\u00e9rer. Le site a un souci en pleine journ\u00e9e, devant les clients. La personne cherche de l'aide, retourne sur le projet, et d\u00e9couvre alors, trop tard, tous les avertissements qu'elle aurait d\u00fb lire au d\u00e9but.<\/p><p>La le\u00e7on est simple et vaut de l'or : lire la notice n'est pas une politesse, c'est une protection. Les auteurs de projets s\u00e9rieux \u00e9crivent souvent noir sur blanc les limites de leur travail, les cas o\u00f9 il ne faut pas s'en servir, l'\u00e9tat d'avancement. Ils te tendent la main pour t'\u00e9viter les ennuis. Sauter la lecture, c'est refuser cette main tendue. Le bon r\u00e9flexe, avant d'int\u00e9grer quoi que ce soit dans quelque chose d'important, c'est de lire la notice en entier, de v\u00e9rifier la date et l'activit\u00e9, et de prendre au s\u00e9rieux les avertissements. Un projet qui te dit lui-m\u00eame ne m'utilise pas en production te rend un immense service. \u00c9coute-le.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">6 \u00b7 Les pi\u00e8ges<\/div><h3><\/h3><ul class=\"mga-chain\"><li><b>Le pi\u00e8ge de la lecture lin\u00e9aire.<\/b> Sympt\u00f4me : tu essaies de lire tous les fichiers d'un d\u00e9p\u00f4t du premier au dernier, tu te noies et tu abandonnes. Cause : tu crois qu'un d\u00e9p\u00f4t se lit comme un roman. R\u00e9flexe : lis d'abord la notice, puis parcours les noms, et ne plonge que dans la partie qui te concerne.<\/li><li><b>Le pi\u00e8ge de la notice ignor\u00e9e.<\/b> Sympt\u00f4me : tu int\u00e8gres un projet et tu d\u00e9couvres apr\u00e8s coup qu'il \u00e9tait marqu\u00e9 \u00e0 ne pas utiliser en production. Cause : tu as jug\u00e9 sur l'apparence sans lire le README. R\u00e9flexe : lis la notice en entier avant tout, surtout la partie sur les limites.<\/li><li><b>Le pi\u00e8ge du projet fant\u00f4me.<\/b> Sympt\u00f4me : tu t'appuies sur un projet qui ne r\u00e9pond jamais \u00e0 tes questions et ne se r\u00e9pare plus. Cause : tu n'as pas v\u00e9rifi\u00e9 la date de la derni\u00e8re activit\u00e9 ni le traitement des probl\u00e8mes. R\u00e9flexe : regarde si le projet est vivant avant de compter dessus.<\/li><li><b>Le pi\u00e8ge de la licence oubli\u00e9e.<\/b> Sympt\u00f4me : tu utilises du code dans un travail payant sans savoir si tu en as le droit. Cause : tu as cru que visible en ligne veut dire libre de tout usage. R\u00e9flexe : trouve et lis la licence, surtout pour un usage commercial.<\/li><li><b>Le pi\u00e8ge du nom obscur qu'on ne questionne pas.<\/b> Sympt\u00f4me : tu ne comprends pas \u00e0 quoi sert une partie et tu passes ton chemin en croyant que c'est toi le probl\u00e8me. Cause : le projet est mal nomm\u00e9, ou tu n'oses pas t'appuyer sur les noms. R\u00e9flexe : dans un bon d\u00e9p\u00f4t, les noms t'orientent, appuie-toi dessus, et m\u00e9fie-toi des projets o\u00f9 rien n'est clair.<\/li><\/ul><\/div><div class=\"mga-step atelier\" id=\"at-4627e7\" data-atlabel=\"\u00c0 toi : la bonne d\u00e9cision\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><div class=\"mga-decision\"><script type=\"application\/json\" class=\"mga-data\">[{\"q\":\"Tu arrives pour la premi\\u00e8re fois sur un d\\u00e9p\\u00f4t qui a l'air de faire ce dont tu as besoin. Par quoi commences-tu ?\",\"options\":[{\"t\":\"Par lire la notice, le README, en entier et calmement.\",\"ok\":true,\"why\":\"La notice est la meilleure porte d'entr\\u00e9e : elle dit ce que fait le projet, comment s'en servir, et ses limites, en quelques minutes.\"},{\"t\":\"Par ouvrir un fichier de code au hasard pour voir \\u00e0 quoi \\u00e7a ressemble.\",\"ok\":false,\"why\":\"Plonger dans le code au hasard te perd. La notice te donne d'abord la vue d'ensemble dont tu as besoin pour te rep\\u00e9rer.\"}]},{\"q\":\"Deux projets font la m\\u00eame chose. L'un a boug\\u00e9 le mois dernier et r\\u00e9pond aux questions, l'autre n'a pas boug\\u00e9 depuis des ann\\u00e9es. Lequel choisis-tu ?\",\"options\":[{\"t\":\"Celui qui n'a pas boug\\u00e9 depuis des ann\\u00e9es, tant que le code a l'air joli.\",\"ok\":false,\"why\":\"Un projet abandonn\\u00e9 ne se r\\u00e9pare plus et te laisse seul avec les probl\\u00e8mes. L'apparence du code ne suffit pas.\"},{\"t\":\"Celui qui a boug\\u00e9 r\\u00e9cemment et dont les probl\\u00e8mes re\\u00e7oivent des r\\u00e9ponses.\",\"ok\":true,\"why\":\"Un projet vivant est entretenu : tu construis sur un terrain qui reste solide, pas sur un jardin \\u00e0 l'abandon.\"}]},{\"q\":\"Tu veux utiliser un composant partag\\u00e9 dans un site pour un client qui te paie. Quelle v\\u00e9rification fais-tu absolument ?\",\"options\":[{\"t\":\"Tu lis la licence pour v\\u00e9rifier que tu as le droit de l'utiliser dans un cadre commercial.\",\"ok\":true,\"why\":\"Visible en ligne ne veut pas dire libre de tout usage. La licence fixe les r\\u00e8gles, il faut les conna\\u00eetre avant de vendre un travail qui l'int\\u00e8gre.\"},{\"t\":\"Rien de sp\\u00e9cial, si c'est en ligne c'est forc\\u00e9ment gratuit et libre pour tout.\",\"ok\":false,\"why\":\"C'est une erreur fr\\u00e9quente et risqu\\u00e9e. Beaucoup de licences posent des conditions, il faut les lire.\"}]},{\"q\":\"La notice d'un projet indique clairement projet exp\\u00e9rimental, \\u00e0 ne pas utiliser en production. Tu en as besoin pour un vrai site de client. Que fais-tu ?\",\"options\":[{\"t\":\"Tu l'utilises quand m\\u00eame, \\u00e7a a l'air de marcher pour l'instant.\",\"ok\":false,\"why\":\"L'auteur t'a pr\\u00e9venu lui-m\\u00eame. Ignorer cet avertissement, c'est t'exposer \\u00e0 une panne sur un cas qu'il n'a pas g\\u00e9r\\u00e9, en plein devant les clients.\"},{\"t\":\"Tu ne l'utilises pas en production et tu cherches une option maintenue et pr\\u00e9vue pour un usage s\\u00e9rieux.\",\"ok\":true,\"why\":\"Un avertissement clair est un cadeau. Le respecter t'\\u00e9vite un incident, surtout sur un site r\\u00e9el.\"}]}]<\/script><div class=\"mga-host\"><\/div><\/div><\/div><div class=\"mga-step atelier\" id=\"at-d12e6e\" data-atlabel=\"\u00c0 toi : ton playbook\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><p>Voici ta checklist pour lire n'importe quel d\u00e9p\u00f4t en quelques minutes, sans te noyer. Applique-la dans cet ordre \u00e0 chaque nouveau projet que tu d\u00e9couvres.<\/p><div class=\"mga-checklist\"><script type=\"application\/json\" class=\"mga-data\">{\"ck\":\"z1_b\",\"items\":[\"J'ai lu la notice (README) en entier avant de toucher au code.\",\"J'ai v\\u00e9rifi\\u00e9 la date de la derni\\u00e8re activit\\u00e9 pour savoir si le projet est vivant.\",\"J'ai regard\\u00e9 si les probl\\u00e8mes signal\\u00e9s re\\u00e7oivent des r\\u00e9ponses.\",\"J'ai trouv\\u00e9 et lu la licence, surtout si mon usage est commercial.\",\"J'ai parcouru la structure du g\\u00e9n\\u00e9ral au pr\\u00e9cis, sans chercher \\u00e0 tout lire.\"]}<\/script><div class=\"mga-host\"><\/div><\/div><\/div><div class=\"mga-q\" data-q=\"z1b1\"><p style=\"margin:0 0 6px;color:#0F2237\">Quel fichier faut-il lire en premier dans un d\u00e9p\u00f4t ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Le README, la notice qui explique le projet aux humains.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Le fichier le plus long, car il contient s\u00fbrement le plus d&#039;informations.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">N&#039;importe quel fichier de code ouvert au hasard.<\/button><\/div><div class=\"mga-q\" data-q=\"z1b2\"><p style=\"margin:0 0 6px;color:#0F2237\">Comment savoir si un projet partag\u00e9 est encore vivant ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">En regardant la date de la derni\u00e8re activit\u00e9 et si les probl\u00e8mes re\u00e7oivent des r\u00e9ponses.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">En comptant le nombre total de fichiers qu&#039;il contient.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">En v\u00e9rifiant si la page d&#039;accueil est jolie.<\/button><\/div><div class=\"mga-q\" data-q=\"z1b3\"><p style=\"margin:0 0 6px;color:#0F2237\">Que t&#039;apprend la licence d&#039;un projet ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Ce que tu as le droit de faire avec le code, et sous quelles conditions.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">La vitesse \u00e0 laquelle le projet s&#039;ex\u00e9cute sur ta machine.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Le nombre de personnes qui ont d\u00e9j\u00e0 t\u00e9l\u00e9charg\u00e9 le projet.<\/button><\/div><div class=\"mga-q\" data-q=\"z1b4\"><p style=\"margin:0 0 6px;color:#0F2237\">Faut-il lire un d\u00e9p\u00f4t en entier, du premier au dernier fichier ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Non, on lit la notice puis on parcourt du g\u00e9n\u00e9ral au pr\u00e9cis vers ce qui nous concerne.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Oui, sinon on ne peut rien comprendre au projet.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Oui, mais seulement les fichiers de moins de cent lignes.<\/button><\/div><div class=\"mga-q\" data-q=\"z1b5\"><p style=\"margin:0 0 6px;color:#0F2237\">Que faire quand la notice indique \u00e0 ne pas utiliser en production ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Ne pas l&#039;utiliser sur un vrai site et chercher une option maintenue et pr\u00e9vue pour cela.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">L&#039;utiliser quand m\u00eame tant que \u00e7a a l&#039;air de marcher.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Effacer cette phrase de la notice pour ne plus y penser.<\/button><\/div><div class=\"mga-chfoot\"><button type=\"button\" class=\"mga-cta mga-chnext\" data-go=\"2\">Sous-module suivant &rarr;<\/button><\/div><\/div><div class=\"mga-chapter hid\" data-ch=\"2\"><div class=\"mga-atlist\"><b>Ateliers de ce sous-module<\/b><a href=\"#at-4627e7\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : la bonne d\u00e9cision<\/a><a href=\"#at-d12e6e\"><svg class=\"mga-ic\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l1.7 5.2a2 2 0 0 0 1.1 1.1L20 11l-5.2 1.7a2 2 0 0 0-1.1 1.1L12 19l-1.7-5.2a2 2 0 0 0-1.1-1.1L4 11l5.2-1.7a2 2 0 0 0 1.1-1.1z\"\/><\/svg>\u00c0 toi : ton playbook<\/a><\/div><div class=\"mga-step\"><div class=\"n\">1 \u00b7 L&#039;accroche<\/div><h3><\/h3><p>Un soir, en te servant d'un petit projet partag\u00e9 que tu as trouv\u00e9 sur GitHub, tu tombes sur un d\u00e9faut. Un vrai bug, pas ta faute \u00e0 toi : dans certains cas, le code se trompe. Tu cherches un moment, tu comprends d'o\u00f9 \u00e7a vient, et tu trouves comment le corriger. Trois lignes \u00e0 changer. \u00c7a marche. Tu es content, ton projet fonctionne enfin.<\/p><p>Et l\u00e0, une petite question te traverse. Ce que tu viens de d\u00e9couvrir, cette correction que tu as trouv\u00e9e \u00e0 la sueur de ton front, tu la gardes juste pour toi et tu refermes l'onglet ? Ou tu prends deux minutes pour la signaler \u00e0 la personne qui a partag\u00e9 le projet, pour que les milliers de gens qui l'utilisent apr\u00e8s toi n'aient plus jamais ce bug ?<\/p><p>Cette petite question, en apparence anodine, est en fait le coeur de toute une culture. Le monde de l'open source, du code partag\u00e9, tient debout parce que des gens, tous les jours, choisissent la deuxi\u00e8me option. Ils prennent, ils utilisent, et quand ils peuvent, ils redonnent quelque chose. Une correction, une remarque, un merci, une am\u00e9lioration. C'est un cercle. Toi ce soir, tu profites du travail de quelqu'un qui a partag\u00e9 son projet. Demain, quelqu'un profitera peut-\u00eatre de ta correction. Personne n'est oblig\u00e9, et c'est justement ce qui rend le geste beau.<\/p><p>Mais il y a une deuxi\u00e8me face \u00e0 cette histoire, tout aussi importante, et c'est souvent celle qu'on oublie quand on est enthousiaste. R\u00e9utiliser le travail des autres, c'est merveilleux, \u00e0 condition de ne pas finir totalement d\u00e9pendant d'eux pour les choses qui comptent vraiment. Prendre un morceau pour aller plus vite, oui. Confier les cl\u00e9s de sa maison \u00e0 un morceau qu'on ne contr\u00f4le pas, non. Ce sous-module parle des deux faces : la g\u00e9n\u00e9rosit\u00e9 du don, et la sagesse de rester ma\u00eetre chez soi. Les deux vont ensemble. C'est en comprenant les deux qu'on devient vraiment \u00e0 l'aise dans ce monde du code partag\u00e9, ni m\u00e9fiant \u00e0 l'exc\u00e8s, ni na\u00eff.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">2 \u00b7 Le pourquoi<\/div><h3><\/h3><p>Comprendre la culture de collaboration et l'\u00e9quilibre avec l'ind\u00e9pendance change ta fa\u00e7on de travailler sur trois plans qui, ensemble, feront de toi quelqu'un de fiable et de respect\u00e9.<\/p><p>Le premier plan, c'est ta r\u00e9putation, qui se construit par le don. Dans le monde du code, on ne juge pas les gens seulement sur ce qu'ils disent savoir faire, mais sur ce qu'ils rendent visible et utile. Quand tu signales un bug proprement, quand tu proposes une petite am\u00e9lioration, quand tu \u00e9cris une notice claire, tu laisses une trace. Les gens s'en souviennent. Peu \u00e0 peu, tu passes de la personne qui prend \u00e0 la personne qui participe. Ce changement d'image ouvre des portes : on te fait confiance plus vite, on te propose des choses, on t'inclut. Et tout cela commence par des gestes minuscules, \u00e0 la port\u00e9e d'un d\u00e9butant d\u00e8s aujourd'hui.<\/p><p>Le deuxi\u00e8me plan, c'est la qualit\u00e9 de ton propre travail, qui monte quand tu contribues. C'est un effet secondaire surprenant du don. Pour signaler un bug de fa\u00e7on utile, tu dois savoir le d\u00e9crire pr\u00e9cis\u00e9ment, ce qui t'oblige \u00e0 vraiment comprendre le probl\u00e8me. Pour proposer une am\u00e9lioration, tu dois \u00e9crire du code que d'autres liront, donc tu le soignes. En contribuant, tu t'entra\u00eenes dans les meilleures conditions, avec un vrai public. On progresse toujours plus vite quand on \u00e9crit pour \u00eatre lu que quand on bricole dans son coin.<\/p><p>Le troisi\u00e8me plan, et il est vital, c'est la solidit\u00e9 de ce que tu construis, qui d\u00e9pend de ton ind\u00e9pendance. R\u00e9utiliser du code te fait gagner du temps, mais si tout ton projet repose sur des morceaux que tu ne contr\u00f4les pas, tu es \u00e0 leur merci. Le jour o\u00f9 l'un d'eux tombe en panne, dispara\u00eet, change ses r\u00e8gles, ou se fait attaquer, c'est ton projet qui souffre. Apprendre \u00e0 \u00e9quilibrer r\u00e9utilisation et ma\u00eetrise, c'est apprendre \u00e0 construire des choses qui tiennent dans le temps, pas juste des choses qui marchent le jour o\u00f9 on les montre. Pour un d\u00e9butant qui r\u00eave un jour de vivre de ce m\u00e9tier, cette solidit\u00e9 fait toute la diff\u00e9rence entre un bricolage fragile et un vrai savoir-faire. Ces trois plans forment un m\u00eame profil : quelqu'un qui donne, qui progresse en donnant, et qui garde le contr\u00f4le de l'essentiel. C'est vers ce profil que ce sous-module veut te mener.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">3 \u00b7 Le comment<\/div><h3><\/h3><p class=\"mga-sub\">1. La r\u00e8gle du don, redonner ce que tu peux<\/p><p>La premi\u00e8re habitude \u00e0 prendre est simple : quand un projet partag\u00e9 t'a rendu service et que tu peux lui rendre quelque chose, fais-le. Le don n'a pas besoin d'\u00eatre \u00e9norme. Signaler un probl\u00e8me clairement est d\u00e9j\u00e0 un don pr\u00e9cieux. Dire merci publiquement en est un autre. Corriger une petite faute dans une notice en est un troisi\u00e8me.<\/p><p>Le bon \u00e9tat d'esprit, c'est de se dire : ce projet existe parce que quelqu'un a donn\u00e9 de son temps sans rien attendre. Je fais tourner la roue en donnant \u00e0 mon tour, \u00e0 ma mesure. Tu n'es jamais oblig\u00e9, et c'est \u00e7a qui rend le geste sinc\u00e8re.<\/p><p>Exemple concret : tu utilises un composant et tu remarques que sa notice contient une \u00e9tape oubli\u00e9e qui t'a fait perdre une heure. Tu le signales \u00e0 l'auteur, gentiment, en expliquant ce qui manquait. La personne suivante gagnera cette heure gr\u00e2ce \u00e0 toi. C'est un don minuscule pour toi, un vrai cadeau pour les autres.<\/p><p class=\"mga-sub\">2. Les licences, comprendre ce que libre veut dire<\/p><p>On l'a effleur\u00e9 en lisant les d\u00e9p\u00f4ts, mais ici c'est central : le mot libre, dans open source, ne veut pas dire n'importe quoi est permis. Il veut dire que le code est ouvert et partag\u00e9, sous des r\u00e8gles \u00e9crites dans la licence.<\/p><p>Retiens deux grandes familles. Il y a les licences tr\u00e8s souples, qui te laissent presque tout faire, souvent \u00e0 la seule condition de garder le nom de l'auteur quelque part. Et il y a les licences avec une contrepartie, par exemple celles qui demandent que si tu construis quelque chose par-dessus et que tu le partages, tu le partages dans le m\u00eame esprit d'ouverture. Aucune n'est meilleure que l'autre, ce sont des choix.<\/p><p>Exemple concret : tu b\u00e2tis un site pour un client. Un composant sous licence tr\u00e8s souple ne te posera aucun souci, tu gardes juste la mention de l'auteur. Un composant avec contrepartie m\u00e9rite que tu lises attentivement ce qu'il t'engage \u00e0 faire, pour ne pas promettre \u00e0 ton client quelque chose que la licence t'interdit.<\/p><p class=\"mga-sub\">3. R\u00e9utiliser oui, d\u00e9pendre non, rester ma\u00eetre chez soi<\/p><p>Voici le principe le plus important du sous-module. Tu r\u00e9utilises du code partag\u00e9 pour aller plus vite, c'est sain. Mais pour tout ce qui est vital dans ton projet, tu gardes la ma\u00eetrise et tu \u00e9vites de d\u00e9pendre enti\u00e8rement de quelque chose que tu ne contr\u00f4les pas.<\/p><p>La bonne question \u00e0 te poser, avant de t'appuyer lourdement sur un morceau ext\u00e9rieur, est toujours la m\u00eame : si \u00e7a dispara\u00eet ou tombe en panne demain, qu'est-ce qui m'arrive ? Si la r\u00e9ponse est un petit d\u00e9sagr\u00e9ment, tu peux y aller. Si la r\u00e9ponse est une catastrophe, il faut soit une solution de secours, soit h\u00e9berger la chose chez toi pour ne plus en d\u00e9pendre.<\/p><p>Exemple concret : chez MogaCode, on r\u00e9utilise \u00e9norm\u00e9ment de code partag\u00e9, mais les choses vitales tournent sur des serveurs qui appartiennent \u00e0 MogaCode, avec m\u00eame une intelligence artificielle qui tourne sur ces serveurs plut\u00f4t que sur un service ext\u00e9rieur. R\u00e9utiliser les briques des autres, oui. Poser sa maison sur le terrain de quelqu'un d'autre pour l'essentiel, non.<\/p><p class=\"mga-sub\">4. Contribuer poliment, un petit pas \u00e0 la fois<\/p><p>Quand tu d\u00e9cides de donner, fais-le avec respect et modestie, surtout au d\u00e9but. On ne d\u00e9barque pas dans le projet d'autrui en donnant des ordres. On signale, on propose, on remercie, on accepte les retours.<\/p><p>La bonne m\u00e9thode pour un d\u00e9butant est de commencer petit. Un bug bien d\u00e9crit avant une grosse modification. Une question polie avant une critique. Tu observes comment les gens communiquent dans le projet, et tu t'y adaptes. La g\u00e9n\u00e9rosit\u00e9 sans arrogance est toujours bien re\u00e7ue.<\/p><p>Exemple concret : plut\u00f4t que de r\u00e9\u00e9crire une grosse partie d'un projet que tu connais mal, tu commences par signaler un seul petit probl\u00e8me, clairement, avec de quoi le reproduire. Si l'\u00e9change se passe bien, tu proposes davantage la fois suivante. Tu construis une relation, pas un coup d'\u00e9clat.<\/p><p class=\"mga-syn\">En r\u00e9sum\u00e9 : redonne ce que tu peux au code qui t'a servi, comprends que libre veut dire ouvert sous des r\u00e8gles \u00e9crites, r\u00e9utilise sans jamais confier l'essentiel \u00e0 ce que tu ne contr\u00f4les pas, et contribue avec modestie, un petit pas \u00e0 la fois.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">4 \u00b7 Le cas r\u00e9el<\/div><h3><\/h3><p>Voici un cas vrai de MogaCode qui illustre parfaitement l'\u00e9quilibre entre r\u00e9utiliser g\u00e9n\u00e9reusement et rester ma\u00eetre chez soi : la fa\u00e7on dont MogaCode fait tourner ses outils et son intelligence artificielle sur ses propres serveurs.<\/p><p>MogaCode, entreprise bas\u00e9e \u00e0 Essaouira au Maroc, construit et fait fonctionner beaucoup d'outils : un syst\u00e8me qui fabrique des pages de contenu la nuit avec des contr\u00f4les de qualit\u00e9, un assistant qui lit et envoie des messages, une bo\u00eete \u00e0 outils qui mesure le r\u00e9f\u00e9rencement, et m\u00eame une intelligence artificielle qui fait fonctionner cette Academy dont tu suis la formation. Pour construire tout cela, MogaCode r\u00e9utilise \u00e9norm\u00e9ment de code partag\u00e9 venu du monde entier. C'est l'esprit m\u00eame de l'open source, et c'est parfaitement sain : personne ne r\u00e9invente ce qui existe d\u00e9j\u00e0 et fonctionne bien.<\/p><p>Mais voici le choix d\u00e9cisif. Toutes ces choses ne tournent pas sur des services ext\u00e9rieurs lou\u00e9s \u00e0 droite et \u00e0 gauche. Elles tournent sur un serveur qui appartient \u00e0 MogaCode, qu'on appelle un serveur souverain. Souverain, ici, veut dire simplement : chez soi, sous son propre contr\u00f4le. L'intelligence artificielle de l'Academy, par exemple, tourne sur les serveurs de MogaCode. Ce n'est pas un service ext\u00e9rieur qui pourrait, du jour au lendemain, changer ses prix, ses r\u00e8gles, ou fermer.<\/p><p>Ce cas enseigne une distinction fine mais essentielle, et c'est toute la sagesse de ce sous-module. D'un c\u00f4t\u00e9, MogaCode r\u00e9utilise le travail des autres sans complexe : les briques de code partag\u00e9es sont un cadeau du monde, on les prend et on les assemble. De l'autre, MogaCode garde chez elle les fondations, l'endroit o\u00f9 tout tourne. C'est comme un cuisinier qui ach\u00e8te volontiers ses ingr\u00e9dients au march\u00e9, mais qui tient absolument \u00e0 cuisiner dans sa propre cuisine, avec ses propres fourneaux, plut\u00f4t que de louer une cuisine dont le propri\u00e9taire pourrait le mettre dehors sans pr\u00e9venir.<\/p><p>Pourquoi est-ce si important ? Parce que d\u00e9pendre enti\u00e8rement d'un service ext\u00e9rieur pour ses choses vitales, c'est accepter que quelqu'un d'autre d\u00e9cide de ton sort. Si ce service augmente ses tarifs, tu subis. S'il ferme, tu t'\u00e9croules. S'il change ses r\u00e8gles, tu suis ou tu meurs. En h\u00e9bergeant l'essentiel chez soi, MogaCode reste libre de ses choix et \u00e0 l'abri de ces mauvaises surprises.<\/p><p>La le\u00e7on pour toi qui d\u00e9butes n'est pas de tout h\u00e9berger toi-m\u00eame d\u00e8s demain, ce serait exag\u00e9r\u00e9 et trop lourd. La le\u00e7on, c'est de commencer \u00e0 te poser la bonne question pour chaque chose importante : est-ce que je contr\u00f4le ceci, ou est-ce que je suis \u00e0 la merci de quelqu'un ? Prends les cadeaux du partage \u00e0 pleines mains, r\u00e9utilise, gagne du temps. Mais pour ce qui compte vraiment, garde la main. Rester ma\u00eetre chez soi n'est pas un manque de g\u00e9n\u00e9rosit\u00e9, c'est une forme de responsabilit\u00e9 envers ceux qui comptent sur toi.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">5 \u00b7 Le contre-exemple<\/div><h3><\/h3><p>Voici un contre-exemple v\u00e9cu chez MogaCode qui montre, de la fa\u00e7on la plus concr\u00e8te possible, ce qui arrive quand on confie une t\u00e2che importante \u00e0 quelque chose qu'on ne ma\u00eetrise pas assez : l'histoire d'un automatisme qui tournait sur un ordinateur personnel.<\/p><p>\u00c0 une \u00e9poque, une t\u00e2che automatique importante \u00e9tait programm\u00e9e pour se d\u00e9clencher toute seule, \u00e0 heure fixe, sur un ordinateur de type Mac. L'id\u00e9e \u00e9tait bonne : plus besoin de penser \u00e0 lancer la t\u00e2che \u00e0 la main, elle se ferait d'elle-m\u00eame chaque jour. C'est le principe de l'automatisation, et c'est tr\u00e8s utile. On r\u00e8gle une fois, et \u00e7a travaille pour nous.<\/p><p>Sauf qu'un jour, la t\u00e2che ne s'est pas d\u00e9clench\u00e9e. Elle a \u00e9t\u00e9 rat\u00e9e, purement et simplement. La raison \u00e9tait toute b\u00eate, et c'est \u00e7a qui rend la le\u00e7on si pr\u00e9cieuse : l'ordinateur \u00e9tait \u00e9teint au moment o\u00f9 la t\u00e2che aurait d\u00fb partir. Un automatisme, aussi bien r\u00e9gl\u00e9 soit-il, ne peut pas s'ex\u00e9cuter sur une machine \u00e9teinte. Il attendait sagement son heure, mais personne n'\u00e9tait l\u00e0 pour l'\u00e9couter, parce que la machine dormait.<\/p><p>Ce petit incident, sans gravit\u00e9 en apparence, cache une grande v\u00e9rit\u00e9. On avait confi\u00e9 une t\u00e2che importante \u00e0 un support fragile : un ordinateur personnel, qui s'\u00e9teint le soir, qu'on d\u00e9place, qu'on ferme, qui peut manquer de batterie. Un ordinateur personnel n'est pas fait pour \u00eatre un serveur toujours disponible. Compter sur lui pour une t\u00e2che qui doit tourner sans faute, c'est construire sur du sable.<\/p><p>La correction apport\u00e9e est exactement la le\u00e7on de ce sous-module. La t\u00e2che a \u00e9t\u00e9 d\u00e9plac\u00e9e vers le serveur souverain de MogaCode, ce serveur qui appartient \u00e0 l'entreprise et qui, lui, reste allum\u00e9 en permanence, jour et nuit. Sur une machine toujours disponible, un automatisme r\u00e9gl\u00e9 pour partir chaque jour part vraiment chaque jour. La fragilit\u00e9 de l'ordinateur personnel a \u00e9t\u00e9 remplac\u00e9e par la fiabilit\u00e9 d'un serveur pens\u00e9 pour \u00e7a.<\/p><p>Que faut-il en retenir quand on d\u00e9bute ? Deux choses. La premi\u00e8re : automatiser une t\u00e2che ne suffit pas, il faut aussi qu'elle tourne sur un support digne de confiance. Un beau r\u00e9glage sur une machine qui s'\u00e9teint ne vaut rien au moment critique. La seconde, plus large : chaque fois que tu confies quelque chose d'important \u00e0 un support, demande-toi s'il sera vraiment l\u00e0 quand il faudra. Un ordinateur qu'on \u00e9teint, un service gratuit qui peut fermer, un morceau de code abandonn\u00e9, tout cela peut te laisser tomber au pire moment. Le r\u00e9flexe qui fait la diff\u00e9rence, c'est de mettre les choses importantes l\u00e0 o\u00f9 elles seront fiables, et de ne jamais confondre \u00e7a marche quand je regarde et \u00e7a marchera toujours, m\u00eame quand je ne regarde pas.<\/p><\/div><div class=\"mga-step\"><div class=\"n\">6 \u00b7 Les pi\u00e8ges<\/div><h3><\/h3><ul class=\"mga-chain\"><li><b>Le pi\u00e8ge du preneur silencieux.<\/b> Sympt\u00f4me : tu profites sans cesse de code partag\u00e9 mais tu ne rends jamais rien, m\u00eame pas un merci ou un bug signal\u00e9. Cause : tu vois le partage comme un service \u00e0 sens unique. R\u00e9flexe : redonne \u00e0 ta mesure, un bug bien d\u00e9crit ou un merci font tourner la roue.<\/li><li><b>Le pi\u00e8ge du libre mal compris.<\/b> Sympt\u00f4me : tu utilises du code partag\u00e9 en croyant que tout est permis, et tu enfreins sa licence sans le savoir. Cause : tu penses que libre veut dire sans aucune r\u00e8gle. R\u00e9flexe : libre veut dire ouvert sous des r\u00e8gles \u00e9crites, lis la licence et respecte-la.<\/li><li><b>Le pi\u00e8ge de la d\u00e9pendance totale.<\/b> Sympt\u00f4me : tout ton projet repose sur un service ext\u00e9rieur, et le jour o\u00f9 il change ou ferme, tu t'\u00e9croules. Cause : tu as confi\u00e9 l'essentiel \u00e0 quelque chose que tu ne contr\u00f4les pas. R\u00e9flexe : pour le vital, garde la main ou pr\u00e9vois une solution de secours.<\/li><li><b>Le pi\u00e8ge de la machine qui dort.<\/b> Sympt\u00f4me : ton automatisme rate son ex\u00e9cution sans raison apparente. Cause : le support sur lequel il tourne \u00e9tait \u00e9teint ou indisponible au bon moment. R\u00e9flexe : mets les t\u00e2ches importantes sur un support fiable et toujours disponible, pas sur une machine qu'on \u00e9teint.<\/li><li><b>Le pi\u00e8ge du contributeur envahissant.<\/b> Sympt\u00f4me : tu d\u00e9barques dans le projet d'autrui en voulant tout r\u00e9\u00e9crire et tes propositions sont mal re\u00e7ues. Cause : tu confonds g\u00e9n\u00e9rosit\u00e9 et prise de pouvoir. R\u00e9flexe : commence petit, signale d'abord, observe le ton du projet, avance un pas \u00e0 la fois.<\/li><\/ul><\/div><div class=\"mga-step atelier\" id=\"at-4627e7\" data-atlabel=\"\u00c0 toi : la bonne d\u00e9cision\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><div class=\"mga-decision\"><script type=\"application\/json\" class=\"mga-data\">[{\"q\":\"Tu corriges un vrai bug dans un projet partag\\u00e9 qui t'a bien servi. Que fais-tu de ta correction ?\",\"options\":[{\"t\":\"Tu la gardes pour toi et tu refermes l'onglet, tant pis pour les suivants.\",\"ok\":false,\"why\":\"Le monde du code partag\\u00e9 tient debout parce que les gens redonnent. Garder ta correction pour toi casse ce cercle, alors qu'un signalement co\\u00fbte deux minutes.\"},{\"t\":\"Tu prends deux minutes pour la signaler proprement \\u00e0 l'auteur, pour que les suivants n'aient plus le bug.\",\"ok\":true,\"why\":\"C'est l'esprit du don : tu fais tourner la roue \\u00e0 ta mesure, et tu construis en m\\u00eame temps ta r\\u00e9putation de personne qui participe.\"}]},{\"q\":\"Un composant que tu veux utiliser est sous une licence avec contrepartie, pour un site que tu vends \\u00e0 un client. Quelle est la bonne attitude ?\",\"options\":[{\"t\":\"Tu lis attentivement ce que la licence t'engage \\u00e0 faire avant de promettre quoi que ce soit au client.\",\"ok\":true,\"why\":\"Libre veut dire ouvert sous des r\\u00e8gles. Conna\\u00eetre la contrepartie t'\\u00e9vite de promettre \\u00e0 ton client quelque chose que la licence interdit.\"},{\"t\":\"Tu l'utilises sans lire, puisque c'est de l'open source c'est forc\\u00e9ment permis pour tout.\",\"ok\":false,\"why\":\"L'open source n'est pas sans r\\u00e8gles. Ignorer une contrepartie peut te mettre en faute vis-\\u00e0-vis de la licence.\"}]},{\"q\":\"Tu dois faire tourner une t\\u00e2che automatique importante qui doit partir chaque jour sans faute. O\\u00f9 la mets-tu ?\",\"options\":[{\"t\":\"Sur ton ordinateur personnel, que tu \\u00e9teins le soir et d\\u00e9places souvent.\",\"ok\":false,\"why\":\"Un automatisme ne peut pas partir sur une machine \\u00e9teinte. C'est exactement l'incident v\\u00e9cu chez MogaCode : la t\\u00e2che a \\u00e9t\\u00e9 rat\\u00e9e.\"},{\"t\":\"Sur un support fiable et toujours disponible, comme un serveur pens\\u00e9 pour rester allum\\u00e9.\",\"ok\":true,\"why\":\"Une t\\u00e2che vitale a besoin d'un support digne de confiance, disponible m\\u00eame quand tu ne regardes pas.\"}]},{\"q\":\"Pour une fonction vitale de ton projet, tu h\\u00e9sites \\u00e0 t'appuyer enti\\u00e8rement sur un service ext\\u00e9rieur gratuit. Quel raisonnement tiens-tu ?\",\"options\":[{\"t\":\"Je fonce, c'est gratuit et \\u00e7a marche aujourd'hui, je verrai bien plus tard.\",\"ok\":false,\"why\":\"D\\u00e9pendre enti\\u00e8rement de ce que tu ne contr\\u00f4les pas te met \\u00e0 sa merci : s'il ferme ou change ses r\\u00e8gles, ton projet s'\\u00e9croule.\"},{\"t\":\"Je me demande ce qui m'arrive si \\u00e7a dispara\\u00eet demain, et je pr\\u00e9vois une solution de secours ou je garde la main.\",\"ok\":true,\"why\":\"C'est le principe rester ma\\u00eetre chez soi : r\\u00e9utiliser oui, mais garder le contr\\u00f4le de l'essentiel.\"}]}]<\/script><div class=\"mga-host\"><\/div><\/div><\/div><div class=\"mga-step atelier\" id=\"at-d12e6e\" data-atlabel=\"\u00c0 toi : ton playbook\"><div class=\"n\"><span class=\"mga-atbadge\">Atelier - a toi de jouer<\/span><\/div><h3><\/h3><p>Voici ta checklist pour vivre sainement dans le monde du code partag\u00e9 : g\u00e9n\u00e9reux dans le don, sage dans l'ind\u00e9pendance. Garde-la sous les yeux quand tu r\u00e9utilises ou contribues.<\/p><div class=\"mga-checklist\"><script type=\"application\/json\" class=\"mga-data\">{\"ck\":\"z1_c\",\"items\":[\"Quand un projet m'a servi et que je peux rendre quelque chose, je le fais : un bug signal\\u00e9, un merci, une correction de notice.\",\"Avant d'utiliser un code partag\\u00e9, je lis sa licence et je respecte ses conditions, surtout pour un usage commercial.\",\"Pour chaque brique vitale, je me demande ce qui m'arrive si elle dispara\\u00eet demain.\",\"Je mets mes t\\u00e2ches et donn\\u00e9es importantes sur un support fiable et toujours disponible, pas sur une machine que j'\\u00e9teins.\",\"Quand je contribue \\u00e0 un projet, je commence petit, je reste poli, et je m'adapte au ton de la communaut\\u00e9.\"]}<\/script><div class=\"mga-host\"><\/div><\/div><\/div><div class=\"mga-q\" data-q=\"z1c1\"><p style=\"margin:0 0 6px;color:#0F2237\">Quel est l&#039;esprit de la culture open source ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Je prends, je comprends, et quand je peux, je redonne \u00e0 ma mesure.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Je prends tout ce qui est gratuit et je ne rends jamais rien.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Je ne prends jamais rien aux autres et je fais tout moi-m\u00eame.<\/button><\/div><div class=\"mga-q\" data-q=\"z1c2\"><p style=\"margin:0 0 6px;color:#0F2237\">Que veut vraiment dire libre dans open source ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Que le code est ouvert et partag\u00e9, sous des r\u00e8gles \u00e9crites dans la licence.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Que tout est permis sans aucune condition ni aucune r\u00e8gle.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Que le code est forc\u00e9ment gratuit et sans aucun auteur.<\/button><\/div><div class=\"mga-q\" data-q=\"z1c3\"><p style=\"margin:0 0 6px;color:#0F2237\">Pourquoi MogaCode fait tourner ses choses vitales sur son propre serveur souverain ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Pour garder le contr\u00f4le et ne pas \u00eatre \u00e0 la merci d&#039;un service ext\u00e9rieur.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Parce que r\u00e9utiliser du code partag\u00e9 est interdit.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Parce que c&#039;est toujours moins cher que n&#039;importe quelle autre solution.<\/button><\/div><div class=\"mga-q\" data-q=\"z1c4\"><p style=\"margin:0 0 6px;color:#0F2237\">Quelle est la le\u00e7on de l&#039;automatisme rat\u00e9 sur une machine \u00e9teinte ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Une t\u00e2che importante doit tourner sur un support fiable et toujours disponible.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Il ne faut jamais automatiser aucune t\u00e2che.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Les ordinateurs personnels sont toujours plus fiables que les serveurs.<\/button><\/div><div class=\"mga-q\" data-q=\"z1c5\"><p style=\"margin:0 0 6px;color:#0F2237\">Comment contribuer poliment \u00e0 un projet quand on d\u00e9bute ?<\/p><button type=\"button\" class=\"opt\" data-good=\"1\">Commencer petit, signaler clairement, rester modeste et s&#039;adapter au ton du projet.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">D\u00e9barquer et r\u00e9\u00e9crire une grosse partie du projet tout de suite.<\/button><button type=\"button\" class=\"opt\" data-good=\"0\">Critiquer durement l&#039;auteur pour montrer qu&#039;on s&#039;y conna\u00eet.<\/button><\/div><\/div><\/div><div class=\"mga-carnet\"><h3>Ton dictionnaire s'agrandit (+8 mots)<\/h3><p class=\"sub\">Ils rejoignent ton Carnet de mots. On ne les reintroduira jamais sans te rappeler leur sens.<\/p><div class=\"mga-mot\"><b>D\u00e9p\u00f4t<\/b><div class=\"df\">Le dossier complet d&#039;un projet de code, rang\u00e9 au m\u00eame endroit, qui garde en plus toute la m\u00e9moire de son histoire.<\/div><div class=\"an\">Un classeur de projet o\u00f9 chaque page modifi\u00e9e laisse une copie dat\u00e9e coll\u00e9e dans la marge.<\/div><\/div><div class=\"mga-mot\"><b>README<\/b><div class=\"df\">Le fichier de notice qui s&#039;affiche en arrivant sur un d\u00e9p\u00f4t et explique aux humains ce que fait le projet et comment s&#039;en servir.<\/div><div class=\"an\">Le mode d&#039;emploi gliss\u00e9 dans la bo\u00eete, ou le dos d&#039;un livre qu&#039;on lit avant d&#039;acheter.<\/div><\/div><div class=\"mga-mot\"><b>Version<\/b><div class=\"df\">Une photo dat\u00e9e de ton projet \u00e0 un instant pr\u00e9cis, avec une note qui dit ce qui a chang\u00e9. On dit aussi un commit.<\/div><div class=\"an\">Un bouton retour arri\u00e8re qui ne s&#039;efface jamais, comme des points de sauvegarde dans un jeu.<\/div><\/div><div class=\"mga-mot\"><b>Open source<\/b><div class=\"df\">Du code partag\u00e9 publiquement, que chacun peut regarder et r\u00e9utiliser, sous les r\u00e8gles fix\u00e9es par sa licence.<\/div><div class=\"an\">Une recette de cuisine affich\u00e9e pour tous, que tout le monde peut refaire et adapter chez soi.<\/div><\/div><div class=\"mga-mot\"><b>Licence<\/b><div class=\"df\">Le document qui dit ce que tu as le droit de faire avec un code partag\u00e9, et sous quelles conditions.<\/div><div class=\"an\">Le petit r\u00e8glement affich\u00e9 \u00e0 l&#039;entr\u00e9e d&#039;un lieu public : bienvenue, mais voici les r\u00e8gles.<\/div><\/div><div class=\"mga-mot\"><b>Cloner<\/b><div class=\"df\">Faire une copie compl\u00e8te d&#039;un d\u00e9p\u00f4t sur ton propre ordinateur pour t&#039;en servir et l&#039;adapter.<\/div><div class=\"an\">Photocopier un cahier entier pour pouvoir travailler dessus sans ab\u00eemer l&#039;original.<\/div><\/div><div class=\"mga-mot\"><b>Contribution<\/b><div class=\"df\">Le geste de redonner quelque chose \u00e0 un projet partag\u00e9 : signaler un bug, corriger une notice, proposer une am\u00e9lioration.<\/div><div class=\"an\">Ranger un livre mal plac\u00e9 en quittant la biblioth\u00e8que, pour le suivant.<\/div><\/div><div class=\"mga-mot\"><b>D\u00e9pendance<\/b><div class=\"df\">Une chose ext\u00e9rieure sur laquelle ton syst\u00e8me repose pour fonctionner. Si elle change ou dispara\u00eet, ton syst\u00e8me en subit les cons\u00e9quences.<\/div><div class=\"an\">Comme le boulanger de ton quartier: tant qu&#039;il ouvre, tu as ton pain sans y penser; le jour o\u00f9 il ferme, tu r\u00e9alises \u00e0 quel point tu comptais sur lui.<\/div><\/div><\/div><div class=\"mga-reflexe\">On ne code pas seul dans sa grotte : on comprend, on r\u00e9utilise, on redonne, et on garde la main sur l'essentiel.<\/div><div class=\"mga-liv\"><h3>Ton livrable<\/h3><p>\u00c0 la fin de ce module, tu produis ton tout premier d\u00e9p\u00f4t bien tenu : un petit projet \u00e0 toi, pos\u00e9 sur GitHub, avec une notice claire qui explique en quelques lignes ce qu'il fait, au moins trois versions enregistr\u00e9es avec des messages honn\u00eates, une licence choisie en connaissance de cause, et z\u00e9ro secret en clair. Ce d\u00e9p\u00f4t devient \u00e0 la fois ta sauvegarde, ta vitrine, et la preuve que tu sais d\u00e9sormais travailler proprement.<\/p><\/div><div class=\"mga-eval\" data-code=\"z1\"><div class=\"mga-eval-in\"><h3>Valider le module<\/h3><p>Tu as fait les ateliers et les quiz ? Valide le module.<\/p><button type=\"button\" class=\"mga-cta mga-eval-btn\">Je valide Z1<\/button><\/div><div class=\"mga-eval-done\" hidden><div class=\"badge\">Module valide<\/div><p>Bravo. Ce module est marque comme termin\u00e9, et ton badge est enregistr\u00e9.<\/p><\/div><\/div><div class=\"mga-step\" style=\"border-left-color:#128a4f\"><h3>Prochaine \u00e9tape &middot; BONUS 2<\/h3><p>Bonus avanc\u00e9 : le best-of du moment (skills, MCP, playbooks)<\/p><a class=\"mga-cta\" href=\"\/academy\/best-of-skills-mcp-playbooks\/\">Continuer vers BONUS 2<\/a><\/div><\/div><script>(function(){\n  document.querySelectorAll('.mga-q').forEach(function(q){q.querySelectorAll('.opt').forEach(function(b){b.addEventListener('click',function(){q.querySelectorAll('.opt').forEach(function(x){x.classList.remove('ok','no')});b.classList.add(b.getAttribute('data-good')==='1'?'ok':'no');try{localStorage.setItem('mga_'+q.getAttribute('data-q'),b.getAttribute('data-good'));}catch(e){}});});});\n  function call(ex,mode,input){return fetch('\/wp-json\/mga\/v1\/atelier',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({exercise:ex,mode:mode,input:input})}).then(function(r){return r.json().then(function(j){return {ok:r.ok,j:j};});});}\n  document.querySelectorAll('.mga-lab').forEach(function(lab){\n    var ex=lab.getAttribute('data-ex');\n    var ta=lab.querySelector('.mga-in'),o1=lab.querySelector('.mga-o1'),n1=lab.querySelector('.mga-n1'),cc=lab.querySelector('.cc .n');\n    if(ta&&cc){ta.addEventListener('input',function(){cc.textContent=ta.value.length;});}\n    function run(mode){var input=ta?ta.value.trim():'';if(mode!=='guide'&&!input){if(ta)ta.focus();return;}var bs=lab.querySelectorAll('button');bs.forEach(function(b){b.disabled=true;});o1.hidden=false;o1.innerHTML='<span class=\"who\">Le mod\u00e8le<\/span>...';if(n1)n1.hidden=true;\n      call(ex,mode,input).then(function(x){if(!x.ok){o1.innerHTML='<span class=\"who\">Le mod\u00e8le<\/span>'+((x.j&&x.j.error)||'Indisponible.');}else{o1.innerHTML='<span class=\"who\">Le mod\u00e8le r\u00e9pond<\/span>'+((x.j.output||'(r\u00e9ponse vide)'));if(mode==='guide'&&n1){n1.hidden=false;n1.textContent=\"Tu vois ? Sur ce terrain, il atteint sa limite : il ne sait pas, ou il invente. C'est exactement ce qu'on apprend \\u00e0 rep\\u00e9rer et \\u00e0 corriger.\";}}}).catch(function(){o1.innerHTML='<span class=\"who\">Le mod\u00e8le<\/span>Erreur r\u00e9seau, reessaie.';}).finally(function(){bs.forEach(function(b){b.disabled=false;});});}\n    var t=lab.querySelector('.mga-try'),g=lab.querySelector('.mga-guide'),cmp=lab.querySelector('.mga-compare');\n    if(t)t.addEventListener('click',function(){run('libre');});\n    if(g)g.addEventListener('click',function(){run('guide');});\n    if(cmp){cmp.addEventListener('click',function(){var input=ta?ta.value.trim():'';if(!input){if(ta)ta.focus();return;}var box=lab.querySelector('.mga-cmp'),oL=lab.querySelector('.mga-oL'),oR=lab.querySelector('.mga-oR');box.hidden=false;cmp.disabled=true;oL.innerHTML='<span class=\"who\">Ton prompt<\/span>...';oR.innerHTML='<span class=\"who\">Le prompt pro<\/span>en attente...';\n      call(ex,'libre',input).then(function(a){oL.innerHTML='<span class=\"who\">Ton prompt<\/span>'+((a.j&&(a.j.output||a.j.error))||'');oR.innerHTML='<span class=\"who\">Le prompt pro : r\u00f4le + contexte + t\u00e2che + format<\/span>...';return call(ex,'guide','');}).then(function(b){oR.innerHTML='<span class=\"who\">Le prompt pro : r\u00f4le + contexte + t\u00e2che + format<\/span>'+((b.j&&(b.j.output||b.j.error))||'');if(n1){n1.hidden=false;n1.textContent=\"M\u00eame mod\u00e8le, m\u00eame serveur. Seul le prompt a change. Voil\u00e0 pourquoi savoir prompter est une vraie comp\u00e9tence.\";}}).catch(function(){oR.innerHTML='<span class=\"who\">Le prompt pro<\/span>Erreur r\u00e9seau.';}).finally(function(){cmp.disabled=false;});});}\n  });\n})();<\/script>\n<script>\n(function(){\n  function esc(s){var d=document.createElement('div');d.textContent=(s==null?'':s);return d.innerHTML;}\n  function call(ex,mode,input,opts){opts=opts||{};var b={exercise:ex,mode:mode,input:input||''};if(opts.temperature!=null)b.temperature=opts.temperature;if(opts.maxTokens!=null)b.maxTokens=opts.maxTokens;\n    return fetch('\/wp-json\/mga\/v1\/atelier',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify(b)}).then(function(r){return r.json().then(function(j){return{ok:r.ok,j:j};});}).catch(function(){return{ok:false,j:{error:'Erreur r\u00e9seau, reessaie.'}};});}\n  function lget(){try{return JSON.parse(localStorage.getItem('mga_lib')||'[]');}catch(e){return[];}}\n  function ladd(it){try{var a=lget();a.unshift(it);localStorage.setItem('mga_lib',JSON.stringify(a.slice(0,50)));}catch(e){}renderLibs();}\n  function done(code){try{var m=JSON.parse(localStorage.getItem('mga_done')||'{}');m[code]=1;localStorage.setItem('mga_done',JSON.stringify(m));}catch(e){}}\n  function isDone(code){try{return !!(JSON.parse(localStorage.getItem('mga_done')||'{}')[code]);}catch(e){return false;}}\n  function counter(box){var ta=box.querySelector('.mga-in'),cc=box.querySelector('.cc .n');if(ta&&cc){ta.addEventListener('input',function(){cc.textContent=ta.value.length;});}}\n  function wdata(el){try{return JSON.parse(el.querySelector('script.mga-data').textContent);}catch(e){return null;}}\n\n  document.querySelectorAll('.mga-forge').forEach(function(el){\n    counter(el);\n    var ta=el.querySelector('.mga-in'),ru=el.querySelector('.mga-rubric'),out=el.querySelector('.mga-o1'),sr=el.querySelector('.mga-saverow');\n    el.querySelectorAll('.chip').forEach(function(c){c.addEventListener('click',function(){ta.value=c.getAttribute('data-load');ta.focus();var cc=el.querySelector('.cc .n');if(cc)cc.textContent=ta.value.length;});});\n    function rubric(t){t=(t||'').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g,'');return{\n      'Un r\u00f4le':\/\\b(tu es|agis comme|en tant que|ton role|comporte-toi|tu joues)\\b\/.test(t),\n      'Un contexte':(t.length>140)||\/\\b(contexte|situation|il s agit|pour un|pour une|notre|mon |ma |mes |client|entreprise|facture|projet|dossier)\\b\/.test(t)||\/[0-9]\/.test(t),\n      'Une t\u00e2che claire':\/\\b(redige|r\u00e9sum\u00e9|traduis|ecris|liste|explique|corrige|analyse|classe|g\u00e9n\u00e8re|propose|reformule|compare|calcule|trie)\\b\/.test(t),\n      'Un format':\/\\b(ligne|lignes|mot|mots|liste|tableau|point|points|objet|format|paragraphe|puces|colonnes|json|phrase|phrases)\\b\/.test(t),\n      'Une contrainte':\/\\b(max|maximum|sans|ne pas|uniquement|seulement|en francais|en anglais|courtois|ferme|formel|au plus|jusqu|court|bref|pr\u00e9cis)\\b\/.test(t)\n    };}\n    el.querySelector('.mga-analyze').addEventListener('click',function(){\n      var t=ta.value.trim();if(!t){ta.focus();return;}\n      var r=rubric(t),keys=Object.keys(r),ok=keys.filter(function(k){return r[k];}).length;\n      var tips={'Un r\u00f4le':'Ajoute qui est l IA : Tu es un...','Un contexte':'Donne ta situation : chiffres, client, projet.','Une t\u00e2che claire':'Un verbe d action pr\u00e9cis : r\u00e9dige, r\u00e9sum\u00e9, classe...','Un format':'Pr\u00e9cise la forme : nombre de lignes, liste, objet...','Une contrainte':'Cadre : longueur max, ton, langue, ce qu il faut \u00e9viter.'};\n      var h='<div class=\"score\">Structure : '+ok+'\/5'+(ok>=4?' - solide':' - a renforcer')+'<\/div>';\n      keys.forEach(function(k){h+='<div class=\"r\"><span class=\"m '+(r[k]?'ok2':'no2')+'\">'+(r[k]?'OK':'X')+'<\/span><span>'+k+(r[k]?'':' - '+esc(tips[k]))+'<\/span><\/div>';});\n      ru.innerHTML=h;ru.hidden=false;\n      out.hidden=false;out.innerHTML='<span class=\"who\">L IA ex\u00e9cute ton prompt<\/span>...';\n      var btn=this;btn.disabled=true;\n      call('b1_run','libre',t,{maxTokens:400}).then(function(x){out.innerHTML='<span class=\"who\">L IA ex\u00e9cute ton prompt<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');if(ok>=4){sr.hidden=false;}}).finally(function(){btn.disabled=false;});\n    });\n    el.querySelector('.mga-save').addEventListener('click',function(){var t=ta.value.trim();if(!t)return;ladd({type:'Prompt',title:t.slice(0,60),body:t,ts:Date.now()});el.querySelector('.saved').hidden=false;});\n  });\n\n  document.querySelectorAll('.mga-fewshot').forEach(function(el){\n    var tog=el.querySelector('.mga-fs-toggle'),inp=el.querySelector('.mga-in2'),out=el.querySelector('.mga-o1');\n    el.querySelector('.mga-fs-run').addEventListener('click',function(){\n      var msg=inp.value.trim();if(!msg)return;\n      var ex=\"Message : Livraison rapide, je recommande. -> positif\\nMessage : Colis casse et service injoignable. -> n\u00e9gatif\\nMessage : \u00c7a fait le job, sans plus. -> neutre\\n\";\n      var user=(tog.checked?ex:'')+'Message : '+msg+' -> ';\n      out.hidden=false;out.innerHTML='<span class=\"who\">'+(tog.checked?'Avec 3 exemples':'Sans exemple')+'<\/span>...';\n      var btn=this;btn.disabled=true;\n      call('b1_fewshot','libre',user,{maxTokens:60}).then(function(x){out.innerHTML='<span class=\"who\">'+(tog.checked?'Avec 3 exemples':'Sans exemple')+'<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');}).finally(function(){btn.disabled=false;});\n    });\n  });\n\n  document.querySelectorAll('.mga-temp').forEach(function(el){\n    var rg=el.querySelector('.mga-temp-range'),val=el.querySelector('.mga-temp-val'),out=el.querySelector('.mga-temp-out');\n    function lab(v){return v<=0.3?'prudente':(v<=0.6?'\u00e9quilibr\u00e9e':'cr\u00e9ative');}\n    rg.addEventListener('input',function(){val.innerHTML='Temp\u00e9rature : <b>'+rg.value+'<\/b> <span class=\"tl\">'+lab(parseFloat(rg.value))+'<\/span>';});\n    el.querySelector('.mga-temp-run').addEventListener('click',function(){\n      var t=parseFloat(rg.value);out.innerHTML='';var btn=this;btn.disabled=true;var seq=Promise.resolve();\n      [0,1,2].forEach(function(i){seq=seq.then(function(){var d=document.createElement('div');d.className='mga-out';d.innerHTML='<span class=\"who\">Essai '+(i+1)+' (temp '+t+')<\/span>...';out.appendChild(d);\n        return call('b1_temp','guide','',{temperature:t,maxTokens:40}).then(function(x){d.innerHTML='<span class=\"who\">Essai '+(i+1)+' (temp '+t+')<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');});});});\n      seq.finally(function(){btn.disabled=false;});\n    });\n  });\n\n  document.querySelectorAll('.mga-tools').forEach(function(el){\n    var data=wdata(el)||[];var host=el.querySelector('.mga-host');var cur='all';\n    var tags=[['all','Tout'],['souverain','Souverain'],['confidentialit\u00e9','Confidentialit\u00e9'],['g\u00e9n\u00e9ral','G\u00e9n\u00e9ral'],['code','Code'],['bureautique','Bureautique'],['r\u00e9daction','R\u00e9daction']];\n    host.innerHTML='<div class=\"mga-tf\">'+tags.map(function(t){return '<button data-t=\"'+t[0]+'\"'+(t[0]==='all'?' class=\"on\"':'')+'>'+t[1]+'<\/button>';}).join('')+'<\/div><div class=\"mga-tgrid\"><\/div><p class=\"mga-tnote\" style=\"color:#5A6B80;font-size:12px;margin:12px 0 0\">Rep\u00e8res g\u00e9n\u00e9raux, \u00e0 jour au moment de l ecriture. V\u00e9rifie toujours les prix courants.<\/p>';\n    var grid=host.querySelector('.mga-tgrid');\n    function draw(){grid.innerHTML=data.filter(function(d){return cur==='all'||(d.tags||[]).indexOf(cur)>=0;}).map(function(d){var sv=d.souv==='Oui'?'y':(d.souv==='Non'?'n':'p');return '<div class=\"mga-tcard\"><h4>'+esc(d.nom)+'<\/h4><div class=\"kv\"><b>Forts :<\/b> '+esc(d.forts)+'<\/div><div class=\"kv\"><b>Confidentialit\u00e9 :<\/b> '+esc(d.confid)+'<\/div><div class=\"kv\"><b>Prix :<\/b> '+esc(d.prix)+'<\/div><div class=\"kv\"><b>Quand :<\/b> '+esc(d.quand)+'<\/div><span class=\"sv '+sv+'\">Souverain : '+esc(d.souv)+'<\/span><\/div>';}).join('');}\n    host.querySelectorAll('.mga-tf button').forEach(function(b){b.addEventListener('click',function(){cur=b.getAttribute('data-t');host.querySelectorAll('.mga-tf button').forEach(function(x){x.classList.remove('on');});b.classList.add('on');draw();});});\n    draw();\n  });\n\n  document.querySelectorAll('.mga-decision').forEach(function(el){\n    var data=wdata(el)||[];var host=el.querySelector('.mga-host');var i=0,score=0;\n    function draw(){if(i>=data.length){host.innerHTML='<div class=\"dscore\">Termin\u00e9 : '+score+' \/ '+data.length+' bons choix.<\/div>';return;}\n      var q=data[i];host.innerHTML='<div class=\"dprog\">Situation '+(i+1)+' \/ '+data.length+'<\/div><div class=\"dq\">'+esc(q.q)+'<\/div>'+q.options.map(function(o,k){return '<button class=\"dopt\" data-k=\"'+k+'\">'+esc(o.t)+'<\/button>';}).join('')+'<div class=\"dwhy\" hidden><\/div><div class=\"dnext\" hidden><button class=\"mga-cta dnb\">Suivant<\/button><\/div>';\n      host.querySelectorAll('.dopt').forEach(function(b){b.addEventListener('click',function(){var o=q.options[+b.getAttribute('data-k')];host.querySelectorAll('.dopt').forEach(function(x){x.disabled=true;});b.classList.add(o.ok?'ok':'no');if(o.ok)score++;var w=host.querySelector('.dwhy');w.textContent=(o.ok?'Bon choix. ':'Pas ideal. ')+o.why;w.hidden=false;host.querySelector('.dnext').hidden=false;});});\n      host.querySelector('.dnb').addEventListener('click',function(){i++;draw();});\n    }\n    draw();\n  });\n\n  document.querySelectorAll('.mga-workbench').forEach(function(el){\n    var tasks=wdata(el)||[];var host=el.querySelector('.mga-host');var cur=0;\n    host.innerHTML='<div class=\"mga-wtabs\">'+tasks.map(function(t,k){return '<button data-k=\"'+k+'\"'+(k===0?' class=\"on\"':'')+'>'+esc(t.label)+'<\/button>';}).join('')+'<\/div><div class=\"mga-wbody\"><\/div>';\n    var body=host.querySelector('.mga-wbody');\n    function draw(){var t=tasks[cur];var h='<div class=\"mga-wgain\">Temps gagne estime : '+esc(t.gain)+'<\/div><div class=\"mga-wf\">';\n      t.fields.forEach(function(fl){h+='<label>'+esc(fl.label)+'<\/label>'+(fl.big?'<textarea data-n=\"'+fl.name+'\" placeholder=\"'+esc(fl.ph)+'\"><\/textarea>':'<input type=\"text\" data-n=\"'+fl.name+'\" placeholder=\"'+esc(fl.ph)+'\" value=\"'+esc(fl.def||'')+'\">');});\n      h+='<\/div><div class=\"row\" style=\"margin-top:12px\"><button class=\"mga-cta mga-wrun\">Produire avec l IA<\/button><\/div><div class=\"mga-wout\" hidden><label style=\"font-weight:700;color:#0F2237;display:block;margin-bottom:6px\">Ton livrable (\u00e9ditable) :<\/label><textarea class=\"mga-wres\"><\/textarea><div class=\"row\" style=\"display:flex;gap:10px;margin-top:10px\"><button class=\"mga-wexport\" style=\"background:transparent;color:#0F2237;border:1px solid var(--gold);border-radius:9px;padding:10px 16px;cursor:pointer;font:inherit;font-weight:700\">Exporter (.txt)<\/button><button class=\"mga-wsave\" style=\"background:transparent;color:#0F2237;border:1px solid var(--gold);border-radius:9px;padding:10px 16px;cursor:pointer;font:inherit;font-weight:700\">Sauver dans ma biblio<\/button><\/div><\/div>';\n      body.innerHTML=h;\n      body.querySelector('.mga-wrun').addEventListener('click',function(){\n        var vals={};body.querySelectorAll('[data-n]').forEach(function(f){vals[f.getAttribute('data-n')]=f.value.trim();});\n        var prompt=t.tpl.replace(\/\\{(\\w+)\\}\/g,function(_,n){return vals[n]||('['+n+']');});\n        var wo=body.querySelector('.mga-wout'),res=body.querySelector('.mga-wres');wo.hidden=false;res.value='...';var btn=this;btn.disabled=true;\n        call(t.key,'libre',prompt,{maxTokens:500}).then(function(x){res.value=(x.j&&(x.j.output||x.j.error))||'';}).finally(function(){btn.disabled=false;});\n      });\n      body.querySelector('.mga-wexport').addEventListener('click',function(){var v=body.querySelector('.mga-wres').value;var bl=new Blob([v],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(bl);a.download='livrable-'+t.key+'.txt';a.click();});\n      body.querySelector('.mga-wsave').addEventListener('click',function(){var v=body.querySelector('.mga-wres').value;if(!v)return;ladd({type:t.label,title:t.label+' produit',body:v,ts:Date.now()});});\n    }\n    host.querySelectorAll('.mga-wtabs button').forEach(function(b){b.addEventListener('click',function(){cur=+b.getAttribute('data-k');host.querySelectorAll('.mga-wtabs button').forEach(function(x){x.classList.remove('on');});b.classList.add('on');draw();});});\n    draw();\n  });\n\n  document.querySelectorAll('.mga-checklist').forEach(function(el){\n    var d=wdata(el)||[];var items=Array.isArray(d)?d:(d.items||[]);var host=el.querySelector('.mga-host');var KEY='mga_ck_'+((!Array.isArray(d)&&d.ck)?d.ck:'x');\n    var st={};try{st=JSON.parse(localStorage.getItem(KEY)||'{}');}catch(e){}\n    function save(){try{localStorage.setItem(KEY,JSON.stringify(st));}catch(e){}}\n    function draw(){var n=Object.keys(st).filter(function(k){return st[k];}).length;\n      var h='<div class=\"mga-cprog\">'+n+' \/ '+items.length+' t\u00e2ches d\u00e9l\u00e9gu\u00e9es<\/div>';\n      items.forEach(function(it,k){h+='<div class=\"ci'+(st[k]?' on':'')+'\" data-k=\"'+k+'\"><span class=\"bx\"><\/span><span>'+esc(it)+'<\/span><\/div>';});\n      h+='<div class=\"row\" style=\"margin-top:12px\"><button class=\"mga-ckexp\" style=\"background:transparent;color:#0F2237;border:1px solid var(--gold);border-radius:9px;padding:10px 16px;cursor:pointer;font:inherit;font-weight:700\">Exporter mon playbook<\/button><\/div>';\n      host.innerHTML=h;\n      host.querySelectorAll('.ci').forEach(function(c){c.addEventListener('click',function(){var k=c.getAttribute('data-k');st[k]=!st[k];save();draw();});});\n      host.querySelector('.mga-ckexp').addEventListener('click',function(){var txt='Mon playbook IA - t\u00e2ches \u00e0 d\u00e9l\u00e9guer\\n\\n'+items.map(function(it,k){return (st[k]?'[x] ':'[ ] ')+it;}).join('\\n');var bl=new Blob([txt],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(bl);a.download='mon-playbook-ia.txt';a.click();});\n    }\n    draw();\n  });\n\n  document.querySelectorAll('.mga-hunt').forEach(function(el){\n    var d=wdata(el)||{};var host=el.querySelector('.mga-host');var segs=d.segments||[];var sel={};\n    host.innerHTML='<p class=\"hi\">'+esc(d.intro)+'<\/p>'+segs.map(function(sg,k){return '<button class=\"mga-hseg\" data-k=\"'+k+'\">'+esc(sg.t)+'<\/button>';}).join('')+'<div class=\"row\" style=\"margin-top:12px\"><button class=\"mga-cta mga-hverify\">V\u00e9rifier<\/button><\/div><div class=\"mga-hres\" style=\"margin-top:10px;font-weight:700;color:#0F2237\" hidden><\/div>';\n    host.querySelectorAll('.mga-hseg').forEach(function(b){b.addEventListener('click',function(){var k=b.getAttribute('data-k');sel[k]=!sel[k];b.classList.toggle('sel');});});\n    host.querySelector('.mga-hverify').addEventListener('click',function(){var good=0,bad=0;\n      segs.forEach(function(sg,k){var b=host.querySelector('.mga-hseg[data-k=\"'+k+'\"]');b.classList.remove('sel');b.disabled=true;\n        if(sg.bad){bad++;b.classList.add('bad');if(sel[k])good++;b.innerHTML=esc(sg.t)+'<span class=\"wy\">A rejeter : '+esc(sg.why)+'<\/span>';}\n        else{b.classList.add('good');b.innerHTML=esc(sg.t)+'<span class=\"wy\">Correct : '+esc(sg.why)+'<\/span>';}});\n      var res=host.querySelector('.mga-hres');res.hidden=false;res.textContent='Tu as rep\u00e8re '+good+' erreur(s) sur '+bad+'. '+(good===bad?'Sans faute, oeil de pro.':'Regarde en rouge celles que tu as manquees.');\n      this.disabled=true;});\n  });\n\n  document.querySelectorAll('.mga-critique').forEach(function(el){\n    counter(el);var ta=el.querySelector('.mga-in'),oA=el.querySelector('.mga-oA'),oC=el.querySelector('.mga-oC'),bc=el.querySelector('.mga-selfcrit');var lastAns='';\n    el.querySelector('.mga-ask').addEventListener('click',function(){var t=ta.value.trim();if(!t)return;oA.hidden=false;oA.innerHTML='<span class=\"who\">L IA r\u00e9pond<\/span>...';oC.hidden=true;var btn=this;btn.disabled=true;bc.disabled=true;\n      call('b4_answer','libre',t,{maxTokens:280}).then(function(x){lastAns=(x.j&&x.j.output)||'';oA.innerHTML='<span class=\"who\">L IA r\u00e9pond<\/span>'+esc(lastAns||(x.j&&x.j.error)||'');if(lastAns)bc.disabled=false;}).finally(function(){btn.disabled=false;});});\n    bc.addEventListener('click',function(){if(!lastAns)return;oC.hidden=false;oC.innerHTML='<span class=\"who\">L IA se critique<\/span>...';var btn=this;btn.disabled=true;\n      call('b4_critique','libre',lastAns,{maxTokens:280}).then(function(x){oC.innerHTML='<span class=\"who\">L IA se critique<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');}).finally(function(){btn.disabled=false;});});\n  });\n\n  document.querySelectorAll('.mga-redact').forEach(function(el){\n    var d=wdata(el)||{};var host=el.querySelector('.mga-host');var toks=d.tokens||[];var red={};\n    host.innerHTML='<p class=\"hi\" style=\"color:#33475b;line-height:1.6\">'+esc(d.intro)+'<\/p><div class=\"mga-doc\"><b>'+esc(d.title)+'<\/b><br>'+toks.map(function(t,k){return '<span class=\"mga-tok'+(t.pii?' pii':'')+'\" data-k=\"'+k+'\">'+esc(t.t)+'<\/span>';}).join('')+'<\/div><div class=\"row\"><button class=\"mga-cta mga-rverify\">V\u00e9rifier<\/button><\/div><div class=\"mga-rres\" style=\"margin-top:10px;font-weight:700;color:#0F2237\" hidden><\/div><div class=\"mga-rnote\" style=\"margin-top:8px;color:#33475b;line-height:1.6\" hidden><\/div>';\n    host.querySelectorAll('.mga-tok').forEach(function(sp){sp.addEventListener('click',function(){var k=sp.getAttribute('data-k');red[k]=!red[k];sp.classList.toggle('red');});});\n    host.querySelector('.mga-rverify').addEventListener('click',function(){var piiN=0,hit=0,over=0;\n      toks.forEach(function(t,k){var sp=host.querySelector('.mga-tok[data-k=\"'+k+'\"]');if(t.pii){piiN++;if(red[k]){hit++;sp.classList.remove('red');sp.classList.add('hit');}else{sp.classList.add('miss');}}else{if(red[k]){over++;sp.classList.remove('red');}}sp.style.cursor='default';});\n      var res=host.querySelector('.mga-rres');res.hidden=false;res.textContent='Donn\u00e9es personnelles caviard\u00e9es : '+hit+' \/ '+piiN+(over?(' - '+over+' \u00e9l\u00e9ment(s) non sensible(s) caviard\u00e9(s) inutilement'):'')+'.';\n      var note=host.querySelector('.mga-rnote');note.hidden=false;note.innerHTML=(hit===piiN?'Parfait. ':'Il en reste (surlignees en rouge). ')+'Le r\u00e9flexe le plus sur : plut\u00f4t que de caviarder \u00e0 la main, utilise une IA souveraine o\u00f9 rien ne sort de chez toi.';\n      this.disabled=true;});\n  });\n\n  function renderLibs(){document.querySelectorAll('.mga-lib-list').forEach(function(list){var a=lget();if(!a.length){list.innerHTML='<div class=\"mga-lib-item\">Rien encore. Sauve un prompt ou un livrable pour le retrouver ici.<\/div>';return;}list.innerHTML=a.map(function(it){return '<div class=\"mga-lib-item\"><b>'+esc(it.type)+' :<\/b> '+esc(it.title)+'<\/div>';}).join('');});}\n  document.querySelectorAll('.mga-lib-export').forEach(function(b){b.addEventListener('click',function(){var a=lget();var txt=a.map(function(it){return '=== '+it.type+' : '+it.title+' ===\\n'+it.body+'\\n';}).join('\\n');var bl=new Blob([txt||'Bibliotheque vide'],{type:'text\/plain'});var u=document.createElement('a');u.href=URL.createObjectURL(bl);u.download='ma-bibliotheque-mogacode.txt';u.click();});});\n  document.querySelectorAll('.mga-lib-clear').forEach(function(b){b.addEventListener('click',function(){try{localStorage.removeItem('mga_lib');}catch(e){}renderLibs();});});\n  renderLibs();\n\n  document.querySelectorAll('.mga-eval').forEach(function(el){\n    var code=el.getAttribute('data-code');\n    if(isDone(code)){el.querySelector('.mga-eval-in').hidden=true;el.querySelector('.mga-eval-done').hidden=false;}\n    el.querySelector('.mga-eval-btn').addEventListener('click',function(){done(code);el.querySelector('.mga-eval-in').hidden=true;el.querySelector('.mga-eval-done').hidden=false;try{fetch('\/wp-json\/mga\/v1\/progress',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify({code:code})}).catch(function(){});}catch(e){}});\n  });\n\n  function apiRender(host,status,obj){host.hidden=false;host.innerHTML='<div class=\"mga-apistatus '+(status>=200&&status<300?'ok':'ko')+'\">HTTP '+status+'<\/div><pre class=\"mga-json\">'+esc(JSON.stringify(obj,null,2))+'<\/pre>';}\n  document.querySelectorAll('.mga-apiexplorer').forEach(function(el){\n    var host=el.querySelector('.mga-apiout');\n    el.querySelectorAll('button[data-ep]').forEach(function(b){b.addEventListener('click',function(){\n      host.hidden=false;host.innerHTML='<div class=\"mga-apistatus\">...<\/div>';var ep=b.getAttribute('data-ep');\n      fetch('\/wp-json\/mga\/v1\/demo?endpoint='+encodeURIComponent(ep)).then(function(r){return r.json().then(function(j){apiRender(host,r.status,j);});}).catch(function(){host.innerHTML='<div class=\"mga-apistatus ko\">Erreur reseau<\/div>';});\n    });});\n  });\n  document.querySelectorAll('.mga-console').forEach(function(el){\n    var host=el.querySelector('.mga-apiout');\n    el.querySelectorAll('button[data-sc]').forEach(function(b){b.addEventListener('click',function(){\n      var sc=b.getAttribute('data-sc');host.hidden=false;host.innerHTML='<div class=\"mga-apistatus\">...<\/div>';\n      fetch('\/wp-json\/mga\/v1\/demo?scenario='+encodeURIComponent(sc)).then(function(r){return r.json().then(function(j){apiRender(host,r.status,j);\n        var tip={ok:\"Code 200 : tout va bien, on lit la r\u00e9ponse.\",badkey:\"Code 401 : cl\u00e9 invalide. Le pro affiche un message clair, il ne plante pas.\",quota:\"Code 429 : quota d\u00e9pass\u00e9. Le pro attend, puis reessaie plus tard.\",timeout:\"Code 504 : trop lent. Le pro avait mis un timeout et g\u00e8re l abandon proprement.\"}[sc];\n        if(tip){var d=document.createElement('p');d.className='mga-apitip';d.textContent=tip;host.appendChild(d);}});}).catch(function(){host.innerHTML='<div class=\"mga-apistatus ko\">Erreur reseau, ton programme doit aussi g\u00e9rer ce cas.<\/div>';});\n    });});\n  });\n  document.querySelectorAll('.mga-cleaner').forEach(function(el){\n    counter(el);var ta=el.querySelector('.mga-in'),fmt=el.querySelector('.mga-fmt'),out=el.querySelector('.mga-o1');\n    el.querySelector('.mga-clean-run').addEventListener('click',function(){var t=ta.value.trim();if(!t){ta.focus();return;}\n      var user='Format demande : '+fmt.value+'. Transforme ce texte en donn\u00e9es propres et structurees au format '+fmt.value+', une entree par personne ou objet. Texte : '+t;\n      out.hidden=false;out.innerHTML='<span class=\"who\">Donn\u00e9es structurees ('+fmt.value+')<\/span>...';var btn=this;btn.disabled=true;\n      call('c2_clean','libre',user,{maxTokens:500}).then(function(x){out.innerHTML='<span class=\"who\">Donn\u00e9es structurees ('+fmt.value+')<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');}).finally(function(){btn.disabled=false;});\n    });\n  });\n  document.querySelectorAll('.mga-costcalc').forEach(function(el){\n    var res=el.querySelector('.mga-cc-res');\n    function num(sel){var v=parseFloat(el.querySelector(sel).value);return isFinite(v)&&v>=0?v:0;}\n    function calc(){var wi=num('.mga-cc-in'),wo=num('.mga-cc-out'),price=num('.mga-cc-price'),n=num('.mga-cc-n');\n      var tok=Math.round((wi+wo)*1.3);var perCall=tok\/1000*price;var total=perCall*n;\n      var ctx=(wi*1.3>8000)?'<p class=\"mga-ccwarn\">Attention : ton entree approche ou d\u00e9passe une fen\u00eatre de contexte courante (environ 8000 tokens). Il faudrait decouper le texte.<\/p>':'';\n      res.innerHTML='<div class=\"mga-ccline\"><span>Tokens par appel<\/span><b>'+tok+'<\/b><\/div><div class=\"mga-ccline\"><span>Co\u00fbt par appel<\/span><b>'+perCall.toFixed(4)+'<\/b><\/div><div class=\"mga-ccline big\"><span>Co\u00fbt total ('+n+' appels)<\/span><b>'+total.toFixed(2)+'<\/b><\/div>'+ctx;\n    }\n    el.querySelectorAll('input').forEach(function(i){i.addEventListener('input',calc);});calc();\n  });\n\n  document.querySelectorAll('.mga-depcalc').forEach(function(el){\n    var res=el.querySelector('.mga-cc-res');\n    function num(sel){var v=parseFloat(el.querySelector(sel).value);return isFinite(v)&&v>=0?v:0;}\n    function calc(){var n=num('.mga-dc-n'),p=num('.mga-dc-p'),mo=num('.mga-dc-m');var perMonth=n*p;var total=perMonth*mo;var perYear=perMonth*12;\n      res.innerHTML='<div class=\"mga-ccline\"><span>Co\u00fbt par mois<\/span><b>'+perMonth.toFixed(2)+'<\/b><\/div><div class=\"mga-ccline\"><span>Co\u00fbt par an<\/span><b>'+perYear.toFixed(2)+'<\/b><\/div><div class=\"mga-ccline big\"><span>Loue sur '+mo+' mois<\/span><b>'+total.toFixed(2)+'<\/b><\/div><div class=\"mga-ccline\"><span>Possede (code a toi)<\/span><b>co\u00fbt unique, puis 0 par mois<\/b><\/div>';\n    }\n    el.querySelectorAll('input').forEach(function(i){i.addEventListener('input',calc);});calc();\n  });\n  document.querySelectorAll('.mga-scriptlab').forEach(function(el){\n    counter(el);var ta=el.querySelector('.mga-in'),out=el.querySelector('.mga-o1');\n    el.querySelector('.mga-script-run').addEventListener('click',function(){var t=ta.value.trim();if(!t){ta.focus();return;}\n      out.hidden=false;out.innerHTML='<span class=\"who\">Ton script (commente)<\/span>...';var btn=this;btn.disabled=true;\n      call('d3_script','libre','T\u00e2che a automatiser : '+t,{maxTokens:500}).then(function(x){out.innerHTML='<span class=\"who\">Ton script (commente)<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');}).finally(function(){btn.disabled=false;});\n    });\n  });\n  document.querySelectorAll('.mga-roi').forEach(function(el){\n    var res=el.querySelector('.mga-cc-res');\n    function num(sel){var v=parseFloat(el.querySelector(sel).value);return isFinite(v)&&v>=0?v:0;}\n    function calc(){var f=num('.mga-roi-f'),t=num('.mga-roi-t'),p=num('.mga-roi-p');var perDay=f*t,perWeek=perDay*5,score=f*t*p;var v,c;\n      if(score>=200){v='Priorit\u00e9 absolue : automatise \u00e7a en premier.';c='hot';}\n      else if(score>=60){v='Bon candidat : \u00e0 automatiser bient\u00f4t.';c='warm';}\n      else if(score>=15){v='Int\u00e9ressant : mets-le dans ta file.';c='mid';}\n      else{v='Plus tard : le gain ne justifie pas l\\'effort maintenant.';c='cold';}\n      res.innerHTML='<div class=\"mga-ccline\"><span>Temps par jour<\/span><b>'+perDay.toFixed(0)+' min<\/b><\/div><div class=\"mga-ccline\"><span>Temps par semaine<\/span><b>'+Math.round(perWeek)+' min ('+(perWeek\/60).toFixed(1)+' h)<\/b><\/div><div class=\"mga-ccline big\"><span>Score ROI<\/span><b>'+score.toFixed(0)+'<\/b><\/div><div class=\"mga-roi-verdict '+c+'\">'+v+'<\/div>';}\n    el.querySelectorAll('input,select').forEach(function(i){i.addEventListener('input',calc);});calc();\n  });\n  document.querySelectorAll('.mga-carto').forEach(function(el){\n    var body=el.querySelector('.mga-carto-rows'),res=el.querySelector('.mga-carto-res');\n    var seed=[['Recevoir et v\u00e9rifier la commande',5,20],['Cr\u00e9er la facture',4,20],['Envoyer l\\'accus\u00e9 au client',3,20]];\n    function row(name,min,freq){var d=document.createElement('div');d.className='mga-carto-row';\n      d.innerHTML='<input class=\"cn\" type=\"text\" placeholder=\"\u00c9tape\">'+'<input class=\"cm\" type=\"number\" min=\"0\" placeholder=\"min\">'+'<input class=\"cf\" type=\"number\" min=\"0\" placeholder=\"x\/jour\">'+'<button type=\"button\" class=\"cd\" title=\"Retirer\">x<\/button>';\n      body.appendChild(d);d.querySelector('.cn').value=name||'';if(min!=null)d.querySelector('.cm').value=min;if(freq!=null)d.querySelector('.cf').value=freq;\n      d.querySelector('.cd').addEventListener('click',function(){d.remove();calc();});\n      d.querySelectorAll('input').forEach(function(i){i.addEventListener('input',calc);});}\n    function calc(){var rows=[].slice.call(body.querySelectorAll('.mga-carto-row'));var total=0,max=-1,maxN='';var L='';\n      rows.forEach(function(r){var n=r.querySelector('.cn').value||'(\u00e9tape)';var m=parseFloat(r.querySelector('.cm').value)||0;var f=parseFloat(r.querySelector('.cf').value)||0;var dd=m*f;total+=dd;if(dd>max){max=dd;maxN=n;}L+='<div class=\"mga-ccline\"><span>'+esc(n)+'<\/span><b>'+dd.toFixed(0)+' min\/j<\/b><\/div>';});\n      var g=max>0?'<div class=\"mga-roi-verdict hot\">Ton goulot probable : <b>'+esc(maxN)+'<\/b> ('+max.toFixed(0)+' min\/jour). Commence par automatiser celle-l\u00e0.<\/div>':'';\n      res.innerHTML=L+'<div class=\"mga-ccline big\"><span>Total du process<\/span><b>'+total.toFixed(0)+' min\/jour ('+(total\/60).toFixed(1)+' h)<\/b><\/div>'+g;}\n    seed.forEach(function(sd){row(sd[0],sd[1],sd[2]);});\n    el.querySelector('.mga-carto-add').addEventListener('click',function(){row('',null,null);});\n    el.querySelector('.mga-carto-exp').addEventListener('click',function(){var rows=[].slice.call(body.querySelectorAll('.mga-carto-row'));var txt='Ma cartographie de process\\n\\n'+rows.map(function(r){return '- '+(r.querySelector('.cn').value||'(\u00e9tape)')+' : '+(r.querySelector('.cm').value||0)+' min x '+(r.querySelector('.cf').value||0)+'\/jour';}).join('\\n');var bl=new Blob([txt],{type:'text\/plain'});var a=document.createElement('a');a.href=URL.createObjectURL(bl);a.download='ma-cartographie.txt';a.click();});\n    calc();\n  });\n  document.querySelectorAll('.mga-chunker').forEach(function(el){\n    var ta=el.querySelector('.mga-in'),out=el.querySelector('.mga-chunk-out'),sz=el.querySelector('.mga-ck-size'),ov=el.querySelector('.mga-ck-ov');\n    function run(){var words=ta.value.trim().split(\/\\s+\/).filter(Boolean);var size=Math.max(5,parseInt(sz.value)||25);var ovl=Math.min(size-1,Math.max(0,parseInt(ov.value)||0));\n      var chunks=[],i=0;while(i<words.length){chunks.push(words.slice(i,i+size).join(' '));if(i+size>=words.length)break;i+=(size-ovl);}\n      out.innerHTML='<p style=\"font-weight:700;color:#0F2237;margin:8px 0 4px\">'+words.length+' mots d\u00e9coup\u00e9s en '+chunks.length+' chunks ('+size+' mots, chevauchement '+ovl+') :<\/p>'+chunks.map(function(c,k){return '<div class=\"mga-chunk\"><div class=\"h\">Chunk '+(k+1)+'<\/div>'+esc(c)+'<\/div>';}).join('');}\n    el.querySelector('.mga-ck-run').addEventListener('click',run);el.querySelectorAll('input').forEach(function(i){i.addEventListener('input',run);});run();\n  });\n  document.querySelectorAll('.mga-rag').forEach(function(el){\n    var kb=wdata(el)||[];var ta=el.querySelector('.mga-in'),out=el.querySelector('.mga-rag-out');\n    var STOP={quel:1,quelle:1,quels:1,quelles:1,pour:1,les:1,des:1,une:1,est:1,que:1,qui:1,sont:1,avec:1,dans:1,sur:1,ton:1,tes:1,mon:1,mes:1,the:1,ont:1,vous:1};\n    function toks(s){return (s||'').toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g,'').split(\/[^a-z0-9]+\/).filter(function(w){return w.length>2&&!STOP[w];});}\n    function retrieve(q){var qt=toks(q);return kb.map(function(c,idx){var ct=toks(c);var sc=0;qt.forEach(function(w){ct.forEach(function(cw){if(cw===w||cw.indexOf(w)===0||w.indexOf(cw)===0)sc++;});});return {c:c,idx:idx,sc:sc};}).sort(function(a,b){return b.sc-a.sc;});}\n    function run(withCtx){var q=ta.value.trim();if(!q){ta.focus();return;}\n      var ranked=retrieve(q);var hits=ranked.filter(function(x){return x.sc>0;});var top=(hits.length?hits:ranked).slice(0,2);\n      var passages=top.map(function(x){return x.c;});\n      var nodes=el.querySelectorAll('.mga-rag-kb');nodes.forEach(function(n){n.classList.remove('on');});\n      if(withCtx){top.forEach(function(x){if(nodes[x.idx])nodes[x.idx].classList.add('on');});}\n      var html=withCtx?passages.map(function(p){return '<div class=\"mga-rag-passage\"><b>Passage retrouv\u00e9 :<\/b> '+esc(p)+'<\/div>';}).join(''):'<div class=\"mga-rag-passage\" style=\"border-left-color:#c0392b\"><b>Sans RAG :<\/b> aucun passage fourni, l\\'IA r\u00e9pond de m\u00e9moire.<\/div>';\n      out.innerHTML=html+'<div class=\"mga-rag-ans\"><span class=\"who\">R\u00e9ponse de l\\'IA<\/span>...<\/div>';\n      var ansBox=out.querySelector('.mga-rag-ans');\n      var input=withCtx?('Contexte:\\n'+passages.join('\\n---\\n')+'\\n\\nQuestion: '+q):('Contexte:\\n(aucun)\\n\\nQuestion: '+q);\n      var bs=el.querySelectorAll('button');bs.forEach(function(b){b.disabled=true;});\n      call('f_rag','libre',input,{maxTokens:200}).then(function(x){ansBox.innerHTML='<span class=\"who\">R\u00e9ponse de l\\'IA'+(withCtx?' (avec RAG)':' (sans RAG)')+'<\/span>'+esc((x.j&&(x.j.output||x.j.error))||'');}).finally(function(){bs.forEach(function(b){b.disabled=false;});});\n    }\n    el.querySelectorAll('.mga-rag-q').forEach(function(b){b.addEventListener('click',function(){ta.value=b.textContent;run(true);});});\n    el.querySelector('.mga-rag-run').addEventListener('click',function(){run(true);});\n    var nb=el.querySelector('.mga-rag-norag');if(nb)nb.addEventListener('click',function(){run(false);});\n  });\n  document.querySelectorAll('.mga-chapters').forEach(function(el){\n    var code=el.getAttribute('data-code'), n=+el.getAttribute('data-n');\n    var tabs=el.querySelectorAll('.mga-chtab'), panels=el.querySelectorAll('.mga-chapter'), bar=el.querySelector('.mga-chprog .bar');\n    var KEY='mga_ch_'+code; var seen={}; try{seen=JSON.parse(localStorage.getItem(KEY)||'{}');}catch(e){}\n    function prog(){var c=Object.keys(seen).filter(function(k){return seen[k];}).length;if(bar)bar.style.width=Math.round(c\/n*100)+'%';tabs.forEach(function(t,i){if(seen[i])t.classList.add('done');});}\n    function mark(i){seen[i]=1;try{localStorage.setItem(KEY,JSON.stringify(seen));}catch(e){}prog();}\n    function show(i,scroll){panels.forEach(function(p,j){p.classList.toggle('hid',j!==i);});tabs.forEach(function(t,j){t.classList.toggle('on',j===i);});mark(i);if(scroll){var top=el.getBoundingClientRect().top+window.pageYOffset-90;window.scrollTo({top:top,behavior:'smooth'});}}\n    tabs.forEach(function(t,i){t.addEventListener('click',function(){show(i,true);});});\n    el.querySelectorAll('.mga-chnext').forEach(function(b){b.addEventListener('click',function(){show(+b.getAttribute('data-go'),true);});});\n    mark(0);prog();\n    function fromHash(){var h=location.hash||'';var mm=h.match(\/sm-(\\d+)\/);if(mm){var i=+mm[1];if(i>=0&&i<n)show(i,true);return;}\n      var am=h.match(\/^#(at-[a-f0-9]{6})$\/);if(am){var target=el.querySelector('#'+am[1]);if(target){var idx=-1;panels.forEach(function(p,j){if(p.contains(target))idx=j;});if(idx>=0)show(idx,false);setTimeout(function(){var top=target.getBoundingClientRect().top+window.pageYOffset-90;window.scrollTo({top:top,behavior:'smooth'});},60);}}}\n    window.addEventListener('hashchange',fromHash);fromHash();\n  });\n})();\n<\/script>\n<\/div><\/div><div class=\"mga-side-scrim\"><\/div><script>(function(){\n  var shell=document.querySelector('.mga-shell'); if(!shell) return;\n  var KEY='mga_nav_open';\n  function getOpen(){try{return JSON.parse(localStorage.getItem(KEY)||'[]');}catch(e){return [];}}\n  function setOpen(a){try{localStorage.setItem(KEY,JSON.stringify(a));}catch(e){}}\n  var open=getOpen();\n  shell.querySelectorAll('.mga-blk').forEach(function(blk){\n    var b=blk.getAttribute('data-bloc');\n    if(open.indexOf(b)>=0) blk.classList.add('mgaon');\n    var h=blk.querySelector('.mga-blk-h');\n    h.addEventListener('click',function(){blk.classList.toggle('mgaon');var o=getOpen();var i=o.indexOf(b);if(blk.classList.contains('mgaon')){if(i<0)o.push(b);}else{if(i>=0)o.splice(i,1);}setOpen(o);});\n  });\n  var done={};try{done=JSON.parse(localStorage.getItem('mga_done')||'{}');}catch(e){}\n  var links=shell.querySelectorAll('.mga-modlink[data-state]');var total=0,doneN=0;\n  links.forEach(function(a){var c=a.getAttribute('data-code');if(a.getAttribute('data-state')!=='soon')total++;if(done[c]){a.classList.add('done');doneN++;}});\n  var bar=shell.querySelector('.mga-side-prog .bar'),lbl=shell.querySelector('.mga-side-prog .lbl');\n  if(bar)bar.style.width=(total?Math.round(doneN\/total*100):0)+'%';\n  if(lbl)lbl.textContent=doneN+' \/ '+total+' modules';\n  var tgl=shell.querySelector('.mga-side-toggle'),scrim=shell.querySelector('.mga-side-scrim');\n  function close(){shell.classList.remove('drawer');}\n  if(tgl)tgl.addEventListener('click',function(){shell.classList.toggle('drawer');});\n  if(scrim)scrim.addEventListener('click',close);\n  shell.querySelectorAll('.mga-badge').forEach(function(el){\n    var mods=(el.getAttribute('data-mods')||'').split(',').filter(Boolean);\n    var done={};try{done=JSON.parse(localStorage.getItem('mga_done')||'{}');}catch(e){}\n    var got=mods.filter(function(m){return done[m];}).length; var lbl=el.querySelector('.lbl');\n    if(mods.length && got>=mods.length){el.classList.add('earned');try{var bd=JSON.parse(localStorage.getItem('mga_badges')||'{}');bd[el.getAttribute('data-bloc')]=1;localStorage.setItem('mga_badges',JSON.stringify(bd));}catch(e){}if(lbl)lbl.textContent='Badge obtenu : Bloc '+el.getAttribute('data-blocname');}\n    else if(lbl){lbl.textContent='Badge du Bloc '+el.getAttribute('data-blocname')+' : '+got+'\/'+mods.length+' modules valid\u00e9s';}\n  });\n  shell.querySelectorAll('.mga-sublink').forEach(function(a){a.addEventListener('click',function(e){var m=(a.getAttribute('href')||'').match(\/sm-(\\d+)\/);if(m){e.preventDefault();var i=m[1];if(location.hash==='#sm-'+i){location.hash='';}location.hash='sm-'+i;close();}});});\n})();<\/script>\n<script>(function(){\n  document.querySelectorAll('.mga-regform').forEach(function(f){\n    if(f.dataset.mgabound) return; f.dataset.mgabound='1';\n    f.addEventListener('submit',function(e){e.preventDefault();\n      if(f.website && f.website.value) return;\n      var msg=f.querySelector('.mga-regmsg'); var btn=f.querySelector('button');\n      var fd={prenom:((f.prenom&&f.prenom.value)||'').trim(),whatsapp:((f.whatsapp&&f.whatsapp.value)||'').trim(),email:((f.email&&f.email.value)||'').trim(),website:''};\n      if(!fd.prenom||fd.whatsapp.replace(\/\\D\/g,'').length<8){if(msg){msg.hidden=false;msg.className='mga-regmsg';msg.textContent='Indique ton pr\u00e9nom et un WhatsApp valide.';}return;}\n      btn.disabled=true;if(msg){msg.hidden=false;msg.className='mga-regmsg';msg.textContent='...';}\n      fetch('\/wp-json\/mga\/v1\/register',{method:'POST',headers:{'Content-Type':'application\/json'},body:JSON.stringify(fd)}).then(function(r){return r.json();}).then(function(j){\n        if(j&&j.code){f.reset();if(msg){msg.className='mga-regmsg ok';msg.hidden=false;msg.innerHTML='Compte cr\u00e9\u00e9. Ton code d\\'acc\u00e8s : <b>'+j.code+'<\/b><br>Note-le bien. \u00c9cris-nous sur WhatsApp avec ce code pour r\u00e9gler ton bloc via Payoneer, on l\\'ouvre aussit\u00f4t.';}}\n        else{if(msg){msg.hidden=false;msg.className='mga-regmsg';msg.textContent=(j&&j.error)||'Erreur, r\u00e9essaie.';}}\n      }).catch(function(){if(msg){msg.hidden=false;msg.className='mga-regmsg';msg.textContent='Erreur r\u00e9seau, r\u00e9essaie.';}}).finally(function(){btn.disabled=false;});\n    });\n  });\n})();<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":1966,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2001","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v28.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Bonus : GitHub et l&#039;open source - Mogacode<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mogacode.ma\/en\/academy\/github-et-l-open-source\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bonus : GitHub et l&#039;open source\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mogacode.ma\/en\/academy\/github-et-l-open-source\/\" \/>\n<meta property=\"og:site_name\" content=\"Mogacode\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/mogacode\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@mogacode\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bonus : GitHub et l'open source - Mogacode","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mogacode.ma\/en\/academy\/github-et-l-open-source\/","og_locale":"en_US","og_type":"article","og_title":"Bonus : GitHub et l'open source","og_url":"https:\/\/www.mogacode.ma\/en\/academy\/github-et-l-open-source\/","og_site_name":"Mogacode","article_publisher":"https:\/\/www.facebook.com\/mogacode","twitter_card":"summary_large_image","twitter_site":"@mogacode","schema":{"@context":"https:\/\/schema.org","@graph":[]}},"_links":{"self":[{"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/pages\/2001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/comments?post=2001"}],"version-history":[{"count":0,"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/pages\/2001\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/pages\/1966"}],"wp:attachment":[{"href":"https:\/\/www.mogacode.ma\/en\/wp-json\/wp\/v2\/media?parent=2001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}