diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index df9d857..d99b476 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -15,7 +15,7 @@ jobs: submodules: recursive - name: Install and Build 🔧 run: | - pip install mkdocs mkdocs-material + pip install mkdocs mkdocs-material mkdocs-include-markdown-plugin mkdocs build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@4.1.4 diff --git a/docs/constraints/code-swap/index.md b/docs/constraints/code-swap/index.md index 048fe50..bf898d8 100644 --- a/docs/constraints/code-swap/index.md +++ b/docs/constraints/code-swap/index.md @@ -4,4 +4,4 @@ tags: --- # Code Swap -Au début de cette itération, au lieu de supprimer le code de l'itération précédente, vous le léguez à un autre binôme. \ No newline at end of file +Au début de cette itération, au lieu de supprimer le code de l'itération précédente, vous le léguez à une autre équipe. \ No newline at end of file diff --git a/docs/constraints/index.md b/docs/constraints/index.md new file mode 100644 index 0000000..dacf17d --- /dev/null +++ b/docs/constraints/index.md @@ -0,0 +1,3 @@ +# Contraintes + +> 🔗 https://www.coderetreat.org/facilitators/constraints/ \ No newline at end of file diff --git a/docs/constraints/links.md b/docs/constraints/links.md new file mode 100644 index 0000000..891cb20 --- /dev/null +++ b/docs/constraints/links.md @@ -0,0 +1,23 @@ +[TDD]: /code-retreat/constraints/tdd/ +[Test && Commit || Revert]: /code-retreat/constraints/tcr/ +[TDD As If You Meant It]: /code-retreat/constraints/tdd/as-if-you-meant-it/ +[Outside-In TDD]: /code-retreat/constraints/tdd/outside-in + +[Pas de if]: /code-retreat/constraints/no-if/ +[No Primitives]: /code-retreat/constraints/no-primitives/ +[Small Classes]: /code-retreat/constraints/small-classes/ +[Tell, don't ask]: /code-retreat/constraints/tell-dont-ask/ +[Immutable Code]: /code-retreat/constraints/immutable-code/ + +[Code swap]: /code-retreat/constraints/code-swap/ +[Refactoring]: /code-retreat/constraints/refactoring/ + +[Pair-Programming]: /code-retreat/constraints/pair-programming/ +[Règle du "Oui"]: /code-retreat/constraints/regle-du-oui +[Ping-Pong Pair-Programming]: /code-retreat/constraints/pair-programming/ping-pong/ +[Strong Style Pair-Programming]: /code-retreat/constraints/pair-programming/strong-style/ +[Silent Pair-Programming]: /code-retreat/constraints/pair-programming/silent/ +[Mob-Programming]: /code-retreat/constraints/mob-programming/ +[Blind Navigator]: /code-retreat/constraints/mob-programming/blind-navigator +[Mute Mobbers]: /code-retreat/constraints/mob-programming/mute-mobbers +[Many More Much Smaller Steps]: /code-retreat/constraints/many-more-much-smaller-steps \ No newline at end of file diff --git a/docs/constraints/many-more-much-smaller-steps/index.md b/docs/constraints/many-more-much-smaller-steps/index.md new file mode 100644 index 0000000..6867e7c --- /dev/null +++ b/docs/constraints/many-more-much-smaller-steps/index.md @@ -0,0 +1,11 @@ +# Many More Much Smaller Steps + +> 🔗 https://www.geepawhill.org/series/many-more-much-smaller-steps/ + +Identifiez le prochain plus petit pas possible dans votre développement logiciel. +Dès que vous avez réalisé ce petit pas, changez de Driver. + +> L'idée de cette contrainte est d'instaurer un ryhme dans la réalisation des tâches, comme ce qui est fait +> pour le [Ping-Pong Pair-Programming](../pair-programming/ping-pong) + +Remarque : pour corser la difficulté, vous pouvez coupler cette contrainte avec la pratique [TCR](../tcr) \ No newline at end of file diff --git a/docs/constraints/mob-programming/blind-navigator.md b/docs/constraints/mob-programming/blind-navigator.md new file mode 100644 index 0000000..344fe7e --- /dev/null +++ b/docs/constraints/mob-programming/blind-navigator.md @@ -0,0 +1,6 @@ +# Blind Navigator + +> Contrainte spécifique au [Mob-Programming](index.md) + +Le Navigateur n'a pas le droit de regarder le code. +Le Driver et les Mobber ont le droit de regarder le code et de le décrire au Navigateur. \ No newline at end of file diff --git a/docs/constraints/mob-programming/index.md b/docs/constraints/mob-programming/index.md index 19b395c..ac598fd 100644 --- a/docs/constraints/mob-programming/index.md +++ b/docs/constraints/mob-programming/index.md @@ -2,10 +2,18 @@ tags: - constraint --- -# Mob Programming +# Mob Programming (aka. Team-Programming, Ensemble-Programming) -> "Mettre toutes les personnes travaillant sur la même chose, au même moment dans la même pièce, sur le même ordinateur." +> "Mettre toutes les personnes travaillant sur la même chose, au même moment dans la même pièce, +> sur le même ordinateur." > -> -- Woody Zuil (traduction) +> -- Woody Zuill (traduction) + +Le Mob-Programming est une approche collaborative de développement logiciel, où l'équipe entière travaille ensemble, en même temps sur la même code base. +L'équipe s'organise autour de trois rôles principaux : + +- **Le Driver** est en charge d'écrire le code, et, plus généralement, d'interagir avec l'ordinateur. Il est la personne qui prend les décisions et qui est responsable du produit final. +- **Le Navigator** est la personne qui formalise les décisions de l'équipe pour les transmettre au Driver. +- **Le Mobber** est le rôle de tout membre de l'équipe autre que Driver et Navigator. Il est en charge de réfléchir, discuter et proposer des solutions aux problèmes actuels de l'équipe. Ici : on va se limiter à des groupes de 3-5 personnes travaillant sur le kata. \ No newline at end of file diff --git a/docs/constraints/mob-programming/mute-mobbers.md b/docs/constraints/mob-programming/mute-mobbers.md new file mode 100644 index 0000000..5a65297 --- /dev/null +++ b/docs/constraints/mob-programming/mute-mobbers.md @@ -0,0 +1,8 @@ +# Mute Mobbers + +> Contrainte spécifique au [Mob-Programming](index.md) +> Pour le [Pair-Programming](../pair-programming/index.md), aller plutôt voir le [Silent Pair-Programming](../pair-programming/index.md) + + +Les Mobbers n'ont pas le droit de parler. +Ils peuvent s'exprimer par des gestes et, si le groupe l'accepte, par des onomatopées. \ No newline at end of file diff --git a/docs/constraints/no-primitives/index.md b/docs/constraints/no-primitives/index.md index 69cd5a8..ce8c1a3 100644 --- a/docs/constraints/no-primitives/index.md +++ b/docs/constraints/no-primitives/index.md @@ -5,7 +5,7 @@ tags: # Pas de primitive ## Niveau 1 🌶️ -️Toutes méthode (autres que les constructeurs) ne doit accepter que classes comme argument et pas de primitive. +️Toutes méthode (autres que les constructeurs) ne doit accepter que des classes comme argument et pas de primitive. Les nombres, les chaînes de caractères, etc. ne sont pas autorisés, même en utilisant les "classes primitives" de Java (Integer, Boolean, String, etc.). diff --git a/docs/constraints/pair-programming/index.md b/docs/constraints/pair-programming/index.md index c23531b..809ffaf 100644 --- a/docs/constraints/pair-programming/index.md +++ b/docs/constraints/pair-programming/index.md @@ -4,10 +4,13 @@ tags: --- # Pair-Programming -Travailler à deux sur un même ordinateur nécessite de définir des rôles +Le Mob-Programming est une approche collaborative de développement logiciel, +où un binôme travaille ensemble, en même temps sur le même ordinateur. +Le binôme s'organise autour de deux rôles principaux : -- Le Driver : la personne au clavier -- Le Navigator : la personne qui n’est pas au clavier +- **Le Driver** est en charge d'écrire le code, et, plus généralement, d'interagir avec l'ordinateur. + Il est la personne qui prend les décisions et qui est responsable du produit final. +- **Le Navigator** est la personne qui formalise les décisions de l'équipe pour les transmettre au Driver. > 💡Conseil > diff --git a/docs/constraints/pair-programming/ping-pong.md b/docs/constraints/pair-programming/ping-pong.md index 3e95868..e3e0558 100644 --- a/docs/constraints/pair-programming/ping-pong.md +++ b/docs/constraints/pair-programming/ping-pong.md @@ -4,6 +4,8 @@ tags: --- # Ping-Pong Pair-Programming +> Contrainte spécifique au [Pair-Programming](index.md) + Le binômage dit ping-pong permet de coupler la pratique du binômage avec le TDD. Dans ce cadre, les itérations ne sont plus rythmées par le temps, mais par le cycle du TDD. Les rôles alternent à chaque fois qu’on termine une phase rouge du cycle de TDD. diff --git a/docs/constraints/pair-programming/silent.md b/docs/constraints/pair-programming/silent.md index a81eb69..6aee9a5 100644 --- a/docs/constraints/pair-programming/silent.md +++ b/docs/constraints/pair-programming/silent.md @@ -4,6 +4,9 @@ tags: --- # Silent Pair-Programming +> Contrainte spécifique au [Pair-Programming](index.md). +> Pour le [Mob-Programming](../mob-programming/index.md), aller plutôt voir le [Mute Mobbers](../mob-programming/mute-mobbers.md) + Il est interdit de parler, d'écrire ou de dessiner. Seul le code peut être utilisé pour communiquer, mais il est interdit d’utiliser les commentaires de code à cet effet. \ No newline at end of file diff --git a/docs/constraints/pair-programming/strong-style.md b/docs/constraints/pair-programming/strong-style.md index cd97d9e..4205273 100644 --- a/docs/constraints/pair-programming/strong-style.md +++ b/docs/constraints/pair-programming/strong-style.md @@ -2,12 +2,16 @@ tags: - constraint --- -# Strong Style Pair-Programming +# Strong Style Navigation + +> 🔗 https://llewellynfalco.blogspot.com/2014/06/llewellyns-strong-style-pairing.html + +> Contrainte applicable au [Pair-Programming](index.md) comme au [Mob-Programming](../mob-programming/index.md) Pour transmettre une idée de votre esprit à l’ordinateur, il faut la faire transiter par les mains de quelqu’un d’autre - Le Driver a toujours le clavier -- Le Navigator n’a pas le clavier, et prend toutes les décision. Il donne les instructions au Driver pour que ce dernier implémente les idées du Navigator (au plus haut niveau d’abstraction permettant au Drvier de travailler de manière fluide. +- Le Navigator n’a pas le clavier, et formalise les décisions de l'équipe. Il donne les instructions au Driver pour que ce dernier implémente les idées du Navigator (au plus haut niveau d’abstraction permettant au Driver de travailler de manière fluide). - Mettez un timer de 2-5 minutes pour changer les rôles > 💡Conseil diff --git a/docs/constraints/regle-du-oui/index.md b/docs/constraints/regle-du-oui/index.md new file mode 100644 index 0000000..94153f5 --- /dev/null +++ b/docs/constraints/regle-du-oui/index.md @@ -0,0 +1,14 @@ +--- +tags: +- constraint +--- + +# Règle du "Oui" + +> 🔗 https://improetc.wordpress.com/2013/10/20/la-regle-du-oui/
+> 🔗 https://theatrespontane.wordpress.com/2011/11/17/oui-et-construction-histoire-juxtaposition/ + +La « règle du oui » consiste à enrichir ce qui été fait avant vous. +Vous devez composer avec la proposition de la personne qui vient de parler, et vous montrer constructif. + +Vous ne pouvez pas tout effacer et repartir de zéro, ou ignorer ce qui vient d'être dit pour partir selon votre idée. \ No newline at end of file diff --git a/docs/constraints/tdd/outside-in.md b/docs/constraints/tdd/outside-in.md new file mode 100644 index 0000000..9920d60 --- /dev/null +++ b/docs/constraints/tdd/outside-in.md @@ -0,0 +1,12 @@ +# Outside-In TDD + + +L'Outside-In TDD est une approche du Test-Driven Development (TDD) +qui consiste commencer par écrire les tests matérialisant les interactions du système avec l'extérieur, +puis à rentrer peu à peu dans le système, cyle de TDD après cycle du TDD. + +Exemples : + +- Pour une application Web, cela consisterait à commencer par écrire les tests bout en bout (end-to-end, e2e) +- Pour une API, cela consisterait à commencer par écrire les tests du controller Web +- Pour le Game Of Life, cela consisterait à commencer par écrire des tests d'affichage du jeu, ou d'interaction avec celui-ci \ No newline at end of file diff --git a/docs/events/.authors.yml b/docs/events/.authors.yml new file mode 100644 index 0000000..44a8906 --- /dev/null +++ b/docs/events/.authors.yml @@ -0,0 +1,5 @@ +authors: + fhiegel: + name: Fabien Hiegel + description: Knowledge worker + avatar: /assets/fhiegel.jpeg \ No newline at end of file diff --git a/docs/events/index.md b/docs/events/index.md index aa41ed5..f8da168 100644 --- a/docs/events/index.md +++ b/docs/events/index.md @@ -1,9 +1,23 @@ --- title: Événements --- +# Événements Chez Shodo cela nous arrive de faire des "Code Retreat". - Ce repository existe pour fournir un support des instructions d'une session. -- 2023-07-04 [⛱️ Summer Shodo Code Retreat ⛩️](events/2023/07/04/index.md) \ No newline at end of file +## C'est quoi une "Code retreat" ? + +Une "Code Retreat" est un format de journée permettant de se poser pour coder. +L'objectif est d'apprendre les uns des autres sur un exercice de code (un Kata) + +- 🕓 Par itérations de 1h chacune + - 45 min de code + - 10 mins de debrief + - 5 mins de pause +- ❌ A la fin de chaque itération, on supprime le code +- 👥 En binômes, différents à chaque itération +- 📖 Un seul Kata de Code (l’exercice) qu'on refera à chaque itération +- 🦾 Chaque itération proposera différentes contraintes, pour travailler différentes choses (chaque itération sera unique) + +# Code retreats diff --git a/docs/events/past/2022-11-08-global-day-of-code-retreat.md b/docs/events/past/2022-11-08-global-day-of-code-retreat.md new file mode 100644 index 0000000..060dc7c --- /dev/null +++ b/docs/events/past/2022-11-08-global-day-of-code-retreat.md @@ -0,0 +1,70 @@ +--- +title: 🌍 Global Day 2022 ⛩️ +date: 2022-11-08 +--- +# 🌍 Global Day Of Code Retreat 2022 ⛩️ + +> **🗓️ Quand ?**
Mardi 08 novembre 2022 +> +> **📍Où ?**
A "L'Aquarium" à la Cantine Numérique + +## Agenda + +| 🕓 9h-9h30 | Accueil, Petit déjeuner & Présentation de la journée | +|----------------|------------------------------------------------------| +| 🕓 9h30-10h30 | Itération \#1 | +| 🕓 10h30-11h30 | Itération \#2 | +| 🕓 11h30-12h30 | Itération \#3 | +| 🕓 12h30-14h | 🍕 Déjeuner 🍕 | +| 🕓 14h-15h | Itération \#4 | +| 🕓 15h-16h | Itération \#5 | +| 🕓 16h-17h | Itération \#6 | +| 🕓 17h-17h30 | Debrief et conclusion de la journée | + +## Le Kata + +[Game Of Life](/code-retreat/katas/game-of-life/) + +## Déroulé de la journée : Itérations + +### Itération \#1 : Découverte + +- [TDD] +- [Pair-Programming] + +### Itération \#2 Donner du sens au code + +> :warning: On continue à travailler en TDD ET en Pair-Programming + +- [No Primitives] +- [Small Classes] + +### Itération \#3 : Améliorer sa communication + +> :warning: On continue à travailler en TDD ET en Pair-Programming + +- [Ping-Pong Pair-Programming] +- [Strong Style Pair-Programming] + +### Itération \#4 : Refactorer + +> :warning: On continue à travailler en TDD ET en Pair-Programming + +- [Refactoring] +- [Pas de if] + +### Itération \#5 : 5. Communiquer par le code + +> :warning: On continue à travailler en TDD ET en Pair-Programming + +- [Silent Pair-Programming] +- [Immutable Code] + +### Itération \#6 : Converger + +> :warning: On continue à travailler en TDD + +- [Mob-Programming] +- [Objet Calisthenics] + +{% include-markdown "../../constraints/links.md" %} \ No newline at end of file diff --git a/docs/events/2023/07/04/index.md b/docs/events/past/2023-07-04-shodo-summer-code-retreat.md similarity index 63% rename from docs/events/2023/07/04/index.md rename to docs/events/past/2023-07-04-shodo-summer-code-retreat.md index f389118..038a973 100644 --- a/docs/events/2023/07/04/index.md +++ b/docs/events/past/2023-07-04-shodo-summer-code-retreat.md @@ -1,9 +1,13 @@ -# ⛱️ Summer Shodo Code Retreat ⛩️ +--- +title: ⛱️ Shodo Summer 2023 ⛩️ +date: 2023-07-04 +--- +# ⛱️ Shodo Summer Code Retreat 2023 ⛩️ > **🗓️ Quand ?**
Mardi 04 juillet 2023 > > **📍Où ?**
A "L'Atelier" à la Cantine Numérique - + ## Agenda | 🕓 9h-9h30 | Accueil & Petit déjeuner | @@ -39,7 +43,7 @@ > :warning: On continue à travailler en TDD ET en Pair-Programming - [Pas de if]
-- [Pair-Programming Ping-Pong]
+- [Ping-Pong Pair-Programming]
### Itération \#3 @@ -53,7 +57,7 @@ > :warning: On continue à travailler en TDD ET en Pair-Programming -- [Pair-Programming Strong Style] +- [Strong Style Pair-Programming] - [Immutable Code] ### Itération \#5 @@ -69,19 +73,4 @@ - [Mob-Programming] - -[TDD]: /code-retreat/constraints/tdd/ -[Pas de if]: /code-retreat/constraints/no-if/ -[Code swap]: /code-retreat/constraints/code-swap/ -[Refactoring]: /code-retreat/constraints/refactoring/ -[Tell, don't ask]: /code-retreat/constraints/tell-dont-ask/ -[Immutable Code]: /code-retreat/constraints/immutable-code/ -[Test && Commit || Revert]: /code-retreat/constraints/tcr/ -[TDD As If You Meant It]: /code-retreat/constraints/tdd/as-if-you-meant-it/ - - -[Pair-Programming]: /code-retreat/constraints/pair-programming/ -[Pair-Programming Ping-Pong]: /code-retreat/constraints/pair-programming/ping-pong/ -[Pair-Programming Strong Style]: /code-retreat/constraints/pair-programming/strong-style/ -[Silent Pair-Programming]: /code-retreat/constraints/pair-programming/silent/ -[Mob-Programming]: /code-retreat/constraints/mob-programming/ \ No newline at end of file +{% include-markdown "../../constraints/links.md" %} \ No newline at end of file diff --git a/docs/events/past/2023-11-03-global-day-of-code-retreat.md b/docs/events/past/2023-11-03-global-day-of-code-retreat.md new file mode 100644 index 0000000..0b64142 --- /dev/null +++ b/docs/events/past/2023-11-03-global-day-of-code-retreat.md @@ -0,0 +1,129 @@ +--- +title: 🌍 Global Day 2023 ⛩️ +date: 2023-11-03 +--- +# 🌍 Global Day Of Code Retreat 2023 ⛩️ + +> **🗓️ Quand ?**
Vendredi 03 novembre 2023 +> +> **📍Où ?**
A "L'Atelier" à la Cantine Numérique + +## Agenda + +| 🕓 9h-9h30 | Accueil, Petit déjeuner & Présentation de la journée | +|----------------|------------------------------------------------------| +| 🕓 9h30-10h30 | Itération \#1 | +| 🕓 10h30-11h30 | Itération \#2 | +| 🕓 11h30-12h30 | Itération \#3 | +| 🕓 12h30-14h | 🍕 Déjeuner 🍕 | +| 🕓 14h-15h | Itération \#4 | +| 🕓 15h-16h | Itération \#5 | +| 🕓 16h-17h | Itération \#6 | +| 🕓 17h-17h30 | Debrief et conclusion de la journée | + +## Le Kata + +[Game Of Life] + +## Déroulé de la journéee : Itérations + +À chaque itération : + +- Vous choisissez le langage que vous voulez utiliser +- Vous appliquez la ou les contraintes de l'itération + +### Itération \#1 + +=== "Pair-Programming" + - [TDD] + - [Pair-Programming] + +=== "Mob-Programming" + - [TDD] + - [Mob-Programming] + +### Itération \#2 + +=== "Pair-Programming" + > :warning: On continue à travailler en TDD ET en Pair-Programming + + - [No Primitives] _(Implique de choisir un langage typé)_
+ OU
+ [Tell, don't ask] + - [Ping-Pong Pair-Programming] + +=== "Mob-Programming" + > :warning: On continue à travailler en TDD ET en Mob-Programming + + - [No Primitives] _(Implique de choisir un langage typé)_
+ OU
+ [Tell, don't ask] + - [Many More Much Smaller Steps] + +### Itération \#3 + +=== "Pair-Programming" + > :warning: On continue à travailler en TDD ET en Pair-Programming + + - [Pas de if] + - Variation du kata [Game Of Life : Zombies] + +=== "Mob-Programming" + > :warning: On continue à travailler en TDD ET en Mob-Programming + + - [Pas de if] + - Variation du kata [Game Of Life : Zombies] + +### Itération \#4 + +=== "Pair-Programming" + > :warning: On continue à travailler en TDD ET en Pair-Programming + + - ~~[Code swap]~~ + - ~~[Immutable Code] + [Refactoring]~~ + - ~~Variation du kata : vous choisissez ensemble si vous continuez sur [Game Of Life : Zombies] ou si vous revenez sur le kata nominal [Game Of Life]~~ + - [Outside-In TDD] + - [Silent Pair-Programming] + +=== "Mob-Programming" + > :warning: On continue à travailler en TDD ET en Mob-Programming + + - ~~[Code swap]~~ + - ~~[Immutable Code] + [Refactoring]~~ + - ~~Variation du kata : vous choisissez ensemble si vous continuez sur [Game Of Life : Zombies] ou si vous revenez sur le kata nominal [Game Of Life]~~ + - [Outside-In TDD] + - [Mute Mobbers] + +### Itération \#5 + +=== "Pair-Programming" + > :warning: On continue à travailler en TDD ET en Pair-Programming + + - Variation du kata [Game Of Life : 3D] + - [Blind Navigator] + +=== "Mob-Programming" + > :warning: On continue à travailler en TDD ET en Mob-Programming + + - Variation du kata [Game Of Life : 3D] + - [Blind Navigator] + +### Itération \#6 + +=== "Pair-Programming" + > :warning: On continue à travailler en TDD ET en Pair-Programming + + - [TDD As If You Meant It] + - Appliquer la [Règle du "Oui"] + +=== "Mob-Programming" + > :warning: On continue à travailler en TDD ET en Mob-Programming + + - [TDD As If You Meant It] + - Appliquer la [Règle du "Oui"] + +{% include-markdown "../../constraints/links.md" %} + +[Game Of Life]: ../../katas/game-of-life/index.md +[Game Of Life : Zombies]: ../../katas/game-of-life/index.md#zombies +[Game Of Life : 3D]: ../../katas/game-of-life/index.md#espace-a-trois-dimensions \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 8121cba..8b47477 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,7 +18,3 @@ L'objectif est d'apprendre les uns des autres sur un exercice de code (un Kata) - 👥 En binômes, différents à chaque itération - 📖 Un seul Kata de Code (l’exercice) qu'on refera à chaque itération - 🦾 Chaque itération proposera différentes contraintes, pour travailler différentes choses (chaque itération sera unique) - -## Code retreats - -- 2023-07-04 [⛱️ Summer Shodo Code Retreat ⛩️](events/2023/07/04/index.md) \ No newline at end of file diff --git a/docs/katas/game-of-life/index.md b/docs/katas/game-of-life/index.md new file mode 100644 index 0000000..f96df24 --- /dev/null +++ b/docs/katas/game-of-life/index.md @@ -0,0 +1,92 @@ +# 🏁 Game Of Life + +> [Slides](slides.md) + +> Bootstrap :
+> 🔗 https://github.com/swkBerlin/kata-bootstraps + + +Le Jeu de la Vie de Conway est un jeu de simulation de la vie dans lequel l'état d'une cellule à un instant +donné dépend de l'état de ses voisines à l'instant précédent. + +Le jeu se déroule sur une grille à deux dimensions, théoriquement infinie, dont les cases — appelées « cellules », +peuvent prendre deux états distincts : « vivante » ou « morte ». + +L'objectif de ce kata est de réaliser un petit moteur de jeu permettant de calculer l'état de la prochaine +génération de cellules et de l'afficher dans une grille à deux dimensions. + +## 🌱 Cycle de vie d'une cellule + +À chaque instant, le prochain état d’une cellule est déterminée par l’état de ses huit cellules voisines au même instant, +selon les règles suivantes : + +- Toute cellule vivante ayant moins de 2 voisins vivants meurt, par sous-population. +- Toute cellule vivante ayant 2 ou 3 voisins vivants, survit à la génération suivante. +- Toute cellule vivante ayant plus de 3 voisins vivants meurt, par surpopulation. +- Toute cellule morte reste morte. +- Toute cellule morte ayant exactement 3 voisins vivants, naît par reproduction. + +## 🖼️ Affichage + +Vous êtes libres de choisir l'affichage que vous souhaitez pour représenter votre Jeu de la Vie. + +Voici une suggestion pour représenter une grille cartésienne : + +``` +Génération 1 +........ +....*... +...**... +........ +``` +``` +Génération 2 +........ +...**... +...**... +........ +``` + +## 🔀 Variantes + +### 🧟 Zombies + +Cette variante du Game of Life ajoute la règle suivante : + +- Toute cellule qui meurt, puis revient à la vie, devient un zombie et ne peut plus mourir. + +### 🎨 Couleurs + +Les cellules vivantes sont colorées. +Lorsqu'elles prennent vie, les cellules adoptent la couleur de la majority de leurs voisins. +S'il n'y a pas de majorité, alors elles adoptent une "couleur neutre". + +### Grille Hexagonale + +Dans cette variante, les cellules évoluent sur une grille (infinie) hexagonale. + +### 👓 Espace à trois dimensions + +Dans cette variante, les cellules évoluent dans un espace à trois dimensions. +Leurs voisins ne sont plus seulement les cellules situées sur le même plan, +mais également les 9 cellules du plan supérieur et les 9 cellules du plan inférieur. + +On adapte également les règles du cycle de vie de la cellule de la manière suivantes (B4/S4) + +- Toute cellule morte reste morte. +- Toute cellule morte ayant exactement 4 voisins vivants, naît par reproduction (B4) +- Toute cellule vivante ayant 4 voisins vivants, survit à la génération suivante (S4) +- Dans les autres cas, toute cellule vivante meurt, par sous-population ou par surpopulation. + + +## 🔗 Ressources + +* https://conwaylife.com/book/ +* https://github.com/marcoemrich/game-of-life-rules/blob/master/gol_rules.png +* https://fr.wikipedia.org/wiki/Jeu_de_la_vie +* https://www.coderetreat.org/facilitators/gameoflife/ +* https://codingdojo.org/kata/GameOfLife/ diff --git a/docs/katas/game-of-life/slides.md b/docs/katas/game-of-life/slides.md new file mode 100644 index 0000000..e5351ca --- /dev/null +++ b/docs/katas/game-of-life/slides.md @@ -0,0 +1,16 @@ +--- +template: reveal.html +back-url: code-retreat/katas/game-of-life/ +--- + +# Game Of Life +## Le Jeu de la Vie + +Notes: + +- Vous êtes à la barre d'un petit voilier, qui cherche à atteindre une île. Votre bateau se déplace au tour par tour en fonction du vent, lequel change à chaque tour. +- L'objectif de ce kata est de développer une fonction permettant de calculer la position du bateau à chaque tour. + +--- + +# C'est parti ! \ No newline at end of file diff --git a/docs/katas/sailboat/index.md b/docs/katas/sailboat/index.md index 90a9672..6247d39 100644 --- a/docs/katas/sailboat/index.md +++ b/docs/katas/sailboat/index.md @@ -1,4 +1,7 @@ -# Sailboat Kata +--- +title: ⛵ Sailboat Kata +--- +# ⛵ Sailboat Kata > [Slides](slides.md) diff --git a/mkdocs.yml b/mkdocs.yml index 8436284..b4f1967 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,28 +10,35 @@ edit_uri: "" # Navigation nav: - Événements: - - Tous les événements: index.md - - 2023: - - 2023-07-04: events/2023/07/04/index.md - - Ressources: - - Katas: - - katas/sailboat/index.md - - Contraintes: - - constraints/tdd/index.md - - constraints/tdd/as-if-you-meant-it.md - - constraints/tcr/index.md - - constraints/pair-programming/index.md - - constraints/pair-programming/ping-pong.md - - constraints/pair-programming/silent.md - - constraints/pair-programming/strong-style.md - - constraints/mob-programming/index.md - - constraints/refactoring/index.md - - constraints/no-if/index.md - - constraints/no-primitives/index.md - - constraints/immutable-code/index.md - - constraints/tell-dont-ask/index.md - - constraints/cross-arms/index.md - - constraints/code-swap/index.md + - events/index.md + - Katas: + - katas/game-of-life/index.md + - katas/sailboat/index.md + - Contraintes: + - constraints/index.md + - Sur le code: + - constraints/tdd/index.md + - constraints/tdd/as-if-you-meant-it.md + - constraints/tdd/outside-in.md + - constraints/tcr/index.md + - constraints/refactoring/index.md + - constraints/no-if/index.md + - constraints/no-primitives/index.md + - constraints/immutable-code/index.md + - constraints/tell-dont-ask/index.md + - constraints/code-swap/index.md + - Sur les interactions sociales: + - constraints/regle-du-oui/index.md + - constraints/pair-programming/index.md + - constraints/pair-programming/ping-pong.md + - constraints/pair-programming/silent.md + - constraints/pair-programming/strong-style.md + - constraints/cross-arms/index.md + - constraints/mob-programming/index.md + - constraints/mob-programming/blind-navigator.md + - constraints/mob-programming/mute-mobbers.md + - constraints/many-more-much-smaller-steps/index.md + # Theme options ef2929, d52929 # Configuration @@ -42,8 +49,13 @@ theme: logo: assets/images/icon-128x128.png favicon: assets/images/favicon.png features: - - navigation.tabs + - content.tabs.link + # - navigation.indexes + - navigation.instant - navigation.sections + - navigation.tabs + - navigation.tabs.sticky + - navigation.top palette: primary: black accent: red @@ -106,7 +118,15 @@ markdown_extensions: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format - - pymdownx.tabbed + - pymdownx.tabbed: + alternate_style: true - pymdownx.tasklist: custom_checkbox: true - - pymdownx.tilde \ No newline at end of file + - pymdownx.tilde + +plugins: + - blog: + blog_dir: events + blog_toc: true + post_dir: "{blog}/past" + - include-markdown \ No newline at end of file