diff options
20 files changed, 0 insertions, 1877 deletions
diff --git a/site/assets/logo.png b/site/assets/logo.png Binary files differdeleted file mode 100644 index 1f9fba0..0000000 --- a/site/assets/logo.png +++ /dev/null diff --git a/site/event.css b/site/event.css deleted file mode 100644 index 8c0bcdd..0000000 --- a/site/event.css +++ /dev/null @@ -1,95 +0,0 @@ -/* === Event page styles === */ -.event-hero { - background: linear-gradient(135deg, var(--sand-light) 0%, var(--sky-light) 100%); - padding: 48px 0 40px; -} - -.event-hero__back { - display: inline-flex; - align-items: center; - gap: 6px; - text-decoration: none; - font-size: 0.9rem; - color: var(--ink-light); - margin-bottom: 20px; -} - -.event-hero__back:hover { - color: var(--ink); -} - -.event-hero h1 { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 2rem; - font-weight: 700; - line-height: 1.3; - margin-bottom: 16px; -} - -.event-meta { - display: flex; - flex-wrap: wrap; - gap: 20px; - color: var(--ink-light); - font-size: 0.95rem; -} - -.event-meta__item { - display: inline-flex; - align-items: center; - gap: 6px; -} - -.event-body { - padding: 48px 0 64px; -} - -.event-body__content { - max-width: 720px; - line-height: 1.8; -} - -.event-body__content h2 { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 1.3rem; - margin: 32px 0 12px; -} - -.event-body__content p { - margin-bottom: 16px; -} - -.event-body__content strong { - font-weight: 600; -} - -.event-link { - display: inline-flex; - align-items: center; - gap: 8px; - margin-top: 24px; - padding: 10px 20px; - background: var(--sky-light); - border: 1px solid var(--sky); - border-radius: 8px; - text-decoration: none; - font-weight: 500; - font-size: 0.9rem; - transition: background 0.2s; -} - -.event-link:hover { - background: var(--sky); - color: var(--ink); -} - -@media (max-width: 700px) { - .event-hero h1 { - font-size: 1.5rem; - } - - .event-meta { - flex-direction: column; - gap: 8px; - } -} diff --git a/site/events/2022-05-19-reutilisation-effets.html b/site/events/2022-05-19-reutilisation-effets.html deleted file mode 100644 index 90dc6a5..0000000 --- a/site/events/2022-05-19-reutilisation-effets.html +++ /dev/null @@ -1,60 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Réutilisation de fonctions et abstraction d'effets - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 1 : Réutilisation de fonctions et abstraction d'effets</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 19 mai 2022</span> - <span class="event-meta__item">🕐 17h00 - 20h00</span> - <span class="event-meta__item">📍 SFEIR, 40 Rue La Tour d'Auvergne, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Première édition de LambdaNantes ! Deux présentations d'experts suivies de discussions informelles dans un café à proximité.</p> - - <h2>Function Reuse is Only a Pious Wish</h2> - <p><strong>Nicolas Rinaudo</strong> (CTO de Besedo) démystifie les concepts de programmation fonctionnelle comme "Monad" et "Functor". Plutôt que de s'appuyer sur la théorie des catégories, il démontre comment ces abstractions émergent naturellement dans les projets du monde réel.</p> - - <h2>Abstraction d'effets via Stream Processing par Free Monad</h2> - <p><strong>Romain Lecomte</strong> (développeur chez Conduktor) explore les applications pratiques de structures fonctionnelles développées lors de la construction d'un outil léger de gestion de cluster Kafka en Scala.</p> - - <a href="https://mobilizon.fr/events/cbdc5c90-107a-4c49-872a-8671644a2cb5" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2022-09-20-gadts-free-monads.html b/site/events/2022-09-20-gadts-free-monads.html deleted file mode 100644 index 97c1371..0000000 --- a/site/events/2022-09-20-gadts-free-monads.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>GADTs et Free Monades - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 2 : GADTs pour l'OOP et sur la triste réalité des Free Monades</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 20 septembre 2022</span> - <span class="event-meta__item">🕐 17h00 - 20h00</span> - <span class="event-meta__item">📍 SFEIR, 40 Rue La Tour d'Auvergne, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <h2>Heureux les simples d'esprit</h2> - <p><strong>Arnaud Bailly</strong> examine pourquoi les free monads et les algèbres d'effets, bien qu'élégantes théoriquement, ont échoué à plusieurs reprises dans le développement professionnel en Haskell, et questionne leur pertinence pour les projets logiciels à longue durée de vie.</p> - - <h2>Méthodes gardées</h2> - <p><strong>Xavier Van de Woestyne</strong> démontre comment encoder des méthodes gardées en OCaml en utilisant les GADTs et les témoins d'égalité de types, implémentant une fonctionnalité OOP absente dans la plupart des langages statiquement typés.</p> - - <a href="https://mobilizon.fr/events/04bd83db-fedb-4a61-8b67-6993618ce48d" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2023-06-23-haskell.html b/site/events/2023-06-23-haskell.html deleted file mode 100644 index 621c1a0..0000000 --- a/site/events/2023-06-23-haskell.html +++ /dev/null @@ -1,60 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Haskell à l'honneur - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 3 : Haskell à l'honneur</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 23 juin 2023</span> - <span class="event-meta__item">🕐 17h00 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, 1 Rue Saint Julien, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <h2>Building biscuit-haskell: lessons learned and fancy techniques</h2> - <p><strong>Clément Delafargue</strong> présente son implémentation Haskell des tokens biscuit, explorant le C FFI, megaparsec, les type-families et template haskell.</p> - - <h2>Flora.pm, code, architecture and DDD</h2> - <p><strong>Théophile Choutri</strong> présente un dépôt de paquets Hackage alternatif mettant l'accent sur l'expérience utilisateur et les concepts de domain-driven design.</p> - - <p>Les présentations sont en français malgré les titres et résumés en anglais.</p> - - <a href="https://mobilizon.fr/events/51282797-65a8-4231-ad8a-4ee2dccfc754" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2023-10-23-monades-gratuites.html b/site/events/2023-10-23-monades-gratuites.html deleted file mode 100644 index 3efc111..0000000 --- a/site/events/2023-10-23-monades-gratuites.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Monades Gratuites et Systèmes de build - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 4 : Monades Gratuites et Systèmes de build</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 23 octobre 2023</span> - <span class="event-meta__item">🕐 17h00 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, 1 Rue Saint Julien, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <h2>La monade discutablement gratuite</h2> - <p><strong>Nicolas Rinaudo</strong> aborde un sujet simple, compréhensible et original sur les Free Monads, conçu pour intéresser les développeurs Scala de la région.</p> - - <h2>Construction d'un build system avec du jargon fonctionnel</h2> - <p><strong>Xavier Van de Woestyne</strong> explore les approches fonctionnelles de la construction de systèmes. Les idiomes présentés sont utiles et peuvent être appliqués sous forme réduite pour résoudre des problèmes plus courants comme la génération de sites statiques, la construction de pipelines, etc.</p> - - <a href="https://mobilizon.fr/events/1779fd8b-8e51-485b-87fd-2b2e54c348d4" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2024-06-20-types-dependants.html b/site/events/2024-06-20-types-dependants.html deleted file mode 100644 index b4bd183..0000000 --- a/site/events/2024-06-20-types-dependants.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Types, types et types (dépendants) - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 5 : Types, types et types (dépendants)</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 20 juin 2024</span> - <span class="event-meta__item">🕐 17h00 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, 1 Rue Saint Julien, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <h2>Le XXIème sera typé ou ne sera pas</h2> - <p><strong>Arnaud Bailly</strong> explore le Type-Driven Development à travers des exemples en Elm, Haskell et Idris, couvrant les types algébriques, type classes, type families, etc. jusqu'aux frontières des types dépendants.</p> - - <h2>Types dépendants : de la théorie à la pratique en mode interactif !</h2> - <p><strong>Didier Plaindoux</strong> passe de la théorie vers la pratique en examinant les définitions formelles. Les sujets incluent les types fonctions dépendants, les paires dépendantes, les types somme et l'égalité propositionnelle.</p> - - <a href="https://mobilizon.fr/events/45729d5f-7725-47e4-a29d-99a872b9ec4f" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2024-10-10-lambda-calcul.html b/site/events/2024-10-10-lambda-calcul.html deleted file mode 100644 index 77db059..0000000 --- a/site/events/2024-10-10-lambda-calcul.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Interprétons le Lambda Calcul - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Workshop 1 : Interprétons le Lambda Calcul</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 10 octobre 2024</span> - <span class="event-meta__item">🕐 17h00 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, 1 Rue Saint Julien, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Première édition des Workshops de Lambda Nantes ! Une session interactive explorant le Lambda Calcul. Les participants construisent collaborativement un interpréteur de Lambda Calcul, dans le langage de programmation de leur choix.</p> - - <p>La session couvre l'implémentation d'un interpréteur, la compréhension des arbres syntaxiques abstraits, leur représentation dans des langages mainstream comme TypeScript ou Kotlin, et l'évaluation d'expressions.</p> - - <p>Premier d'une série, cet atelier initie une progression vers la construction d'un langage de programmation compilé. Des implémentations canoniques en Kotlin et TypeScript sont fournies pour les sessions futures.</p> - - <a href="https://mobilizon.fr/events/74195726-6f81-4520-8ae0-068d96146d62" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2025-01-30-tests-proprietes.html b/site/events/2025-01-30-tests-proprietes.html deleted file mode 100644 index 7becb07..0000000 --- a/site/events/2025-01-30-tests-proprietes.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Les tests dirigés par les propriétés - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 6 : Les tests dirigés par les propriétés</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 30 janvier 2025</span> - <span class="event-meta__item">🕐 18h00 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, Place Royale, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Atelier animé par <strong>Arnaud Bailly</strong> introduisant le property-based testing (PBT). La session explore les principes fondamentaux, les applications pratiques et les approches d'implémentation à travers des exercices pratiques : construction d'un outil de test simple et expérimentation avec des frameworks existants.</p> - - <p>L'événement accueille tous les langages de programmation et ne nécessite aucun prérequis. Bien que le PBT soit largement reconnu comme précieux, sa mise en oeuvre pratique peut être difficile. Cet atelier vise à démontrer comment la compréhension du PBT peut renforcer la résilience des applications.</p> - - <a href="https://mobilizon.fr/events/c268d2db-9e41-4e34-bef2-daf2bbcb2ef0" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2025-03-27-logs-observabilite.html b/site/events/2025-03-27-logs-observabilite.html deleted file mode 100644 index ca8edf0..0000000 --- a/site/events/2025-03-27-logs-observabilite.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Des logs pour de la traçabilité et de l'observabilité - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>LambdaNantes 7 : Des logs pour de la traçabilité et de l'observabilité</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 27 mars 2025</span> - <span class="event-meta__item">🕐 18h15 - 19h30</span> - <span class="event-meta__item">📍 PaloIT, 1 Rue Saint Julien, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p><strong>Lucas</strong>, développeur backend freelance spécialisé dans les microservices et les langages typés (Golang, Rust), présente l'observabilité dans les systèmes distribués.</p> - - <p>La présentation aborde comment les logs traditionnels atteignent leurs limites dans les architectures distribuées, avec un manque de contexte et une mauvaise visibilité inter-services. Lucas démontre l'utilisation d'OpenTelemetry, un standard ouvert pour les métriques, traces et logs, pour atteindre une observabilité complète et corréler les données à travers les systèmes.</p> - - <a href="https://mobilizon.fr/events/fcba326f-c3d5-4062-a2d8-cac5cb93130c" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2025-10-09-lambda-calcul-type.html b/site/events/2025-10-09-lambda-calcul-type.html deleted file mode 100644 index 468043a..0000000 --- a/site/events/2025-10-09-lambda-calcul-type.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Interprétons le lambda-calcul typé - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Workshop 2bis : Interprétons le lambda-calcul typé</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 9 octobre 2025</span> - <span class="event-meta__item">🕐 17h00 - 19h00</span> - <span class="event-meta__item">📍 Epitech, 2 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Cet atelier pratique fait suite à une précédente exploration du lambda-calcul. Les participants enrichiront un interpréteur de lambda-calcul en ajoutant un système de types simples.</p> - - <p>La session couvre des concepts importants de programmation : typage structurel, inférence de types, variables de types, et types somme/produit.</p> - - <p>L'atelier ne nécessite pas d'avoir participé à l'événement original, les concepts fondamentaux seront revus. Les participants sont invités à apporter leurs machines et environnements de développement pour coder collaborativement, le travail en binôme étant possible pour ceux sans équipement.</p> - - <a href="https://mobilizon.fr/events/39b75b66-d472-40c8-9a7e-d325a9bffcb4" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2025-11-13-injection-dependances.html b/site/events/2025-11-13-injection-dependances.html deleted file mode 100644 index 0994b7b..0000000 --- a/site/events/2025-11-13-injection-dependances.html +++ /dev/null @@ -1,60 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Injection de dépendances dans les langages fonctionnels - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Lambda Nantes 8 : De l'injection de dépendances dans les langages fonctionnels</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 13 novembre 2025</span> - <span class="event-meta__item">🕐 18h00 - 20h00</span> - <span class="event-meta__item">📍 Epitech, 2 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Deux présentations explorant l'injection de dépendances dans les langages fonctionnels, permettant une analyse comparative entre différents langages.</p> - - <h2>Injection de dépendances en Unison</h2> - <p><strong>Eric Torreborre</strong> discute de comment implémenter l'injection de dépendances en Unison, un langage fonctionnel dépourvu de métaprogrammation mais offrant un système d'effets "abilities". Il établit des critères d'évaluation et montre comment utiliser les abilities pour l'injection de dépendances et permettre des "typeclasses programmables".</p> - - <h2>Injection de dépendances en OCaml</h2> - <p><strong>Xavier van de Woestyne</strong> présente l'injection de dépendances via l'encodage "ReaderT" combiné avec le polymorphisme de rangée d'OCaml. Cette approche s'appuie sur un article sur les modèles d'abstraction d'effets, montrant comment tirer parti de la sûreté de types du langage sans sacrifier l'expressivité. Aucune expérience préalable d'OCaml n'est requise.</p> - - <a href="https://mobilizon.fr/events/49cacccc-c376-4c1d-8172-11d4c50d8df6" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2025-12-10-interprete-prolog.html b/site/events/2025-12-10-interprete-prolog.html deleted file mode 100644 index 3579af1..0000000 --- a/site/events/2025-12-10-interprete-prolog.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Créons un interprète Prolog - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Workshop 3 : Créons un interprète Prolog</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 10 décembre 2025</span> - <span class="event-meta__item">🕐 18h00 - 20h00</span> - <span class="event-meta__item">📍 Epitech, 2 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Cet atelier introduit la programmation logique et invite les participants à développer collaborativement un interprète Prolog minimal en petits groupes.</p> - - <p>La session explore les concepts fondamentaux : base de faits (atomes), base de règles, recherche, inférence et coupure. Aucune connaissance préalable en programmation logique n'est nécessaire, et l'atelier reste agnostique quant au langage de programmation utilisé.</p> - - <p>Les participants sont invités à apporter leurs machines et environnements de développement, mais la collaboration avec d'autres est possible pour ceux qui n'ont pas d'équipement.</p> - - <a href="https://mobilizon.fr/events/b1a390b5-fa9d-46c8-8c4e-46d6545ba654" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2026-02-19-langages-de-niches.html b/site/events/2026-02-19-langages-de-niches.html deleted file mode 100644 index a840131..0000000 --- a/site/events/2026-02-19-langages-de-niches.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Pourquoi choisir des langages de niches ? - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Lambda Nantes 9 : Pourquoi choisir des langages de niches ?</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 19 février 2026</span> - <span class="event-meta__item">🕐 18h00 - 20h00</span> - <span class="event-meta__item">📍 Epitech, 2 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p><strong>Clément Delafargue</strong>, ingénieur logiciel chez Datadog avec une expérience de Tech Lead, CTO, formateur et consultant, discute de pourquoi les langages de programmation de niche peuvent être supérieurs aux alternatives mainstream.</p> - - <p>S'appuyant sur son expérience pratique avec Scala, Haskell et Rust, il aborde les préoccupations managériales notamment le recrutement, la formation d'équipe et la rétention. La présentation explore les impacts concrets sur les développeurs à travers des écosystèmes plus petits et les gains potentiels, tout en examinant les stratégies gagnantes et les pièges à éviter.</p> - - <p>La session conclut en réévaluant les critères de succès pour l'adoption de technologies spécialisées, allant au-delà des affirmations simplifiées de productivité vers une prise de décision nuancée.</p> - - <a href="https://mobilizon.fr/events/aba0ec1b-2e6c-4392-af30-eaa98a8f9a03" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2026-03-19-plain-pattern-language.html b/site/events/2026-03-19-plain-pattern-language.html deleted file mode 100644 index 4411aba..0000000 --- a/site/events/2026-03-19-plain-pattern-language.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Plain Pattern Language - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Lambda Nantes 10 : Plain Pattern Language</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 19 mars 2026</span> - <span class="event-meta__item">🕐 18h00 - 20h00</span> - <span class="event-meta__item">📍 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p><strong>Lorie den Os</strong> explore les méthodes de grammaires formelles appliquées à des contextes non conventionnels, comme la génération procédurale de maisons dans des simulations. La présentation aborde les méta-grammaires d'arbres, la syntaxe spatiale, et "A Pattern Language" de Christopher Alexander - l'oeuvre qui a inspiré les design patterns en développement logiciel.</p> - - <p>La conférence couvre les grammaires d'arbres pour la génération de texte, les méta-grammaires, les ontologies, et les techniques pour formaliser les concepts abstraits de patterns d'Alexander. L'objectif : démontrer comment "construire des maisons de la même manière qu'on compose des phrases".</p> - - <p>Lorie den Os est Product Tech Lead chez Yseop, spécialisée dans les technologies de génération de texte au-delà des grands modèles de langage.</p> - - <a href="https://mobilizon.fr/events/beedbf8f-23a8-4105-8624-8559058f6380" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2026-04-16-atelier-4.html b/site/events/2026-04-16-atelier-4.html deleted file mode 100644 index 4238d6d..0000000 --- a/site/events/2026-04-16-atelier-4.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Atelier Lambda Nantes #4 - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Atelier Lambda Nantes #4</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 16 avril 2026</span> - <span class="event-meta__item">🕐 17h00 - 19h00</span> - <span class="event-meta__item">📍 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Cet atelier explore OCaml pour le développement web à travers les unikernels, comme alternative aux architectures conventionnelles de microservices. Plutôt que de s'appuyer sur les abstractions Docker et Kubernetes, les participants développeront et déploieront collaborativement un unikernel conçu pour ajouter des fonctionnalités d'interaction sociale aux sites web générés statiquement.</p> - - <p>Le projet sert de fondation pour la présence en ligne officielle de LambdaNantes, offrant aux participants l'opportunité de contribuer directement aux efforts de développement du groupe. Des instructions d'installation seront fournies au préalable pour maximiser la productivité de l'atelier.</p> - - <a href="https://mobilizon.fr/events/cabe649a-a126-4e41-aa84-701d7944f818" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2026-05-21-programmation-compositionnelle.html b/site/events/2026-05-21-programmation-compositionnelle.html deleted file mode 100644 index 2740785..0000000 --- a/site/events/2026-05-21-programmation-compositionnelle.html +++ /dev/null @@ -1,60 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Programmation compositionnelle et traversabilité - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Programmation compositionnelle et traversabilité</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 21 mai 2026</span> - <span class="event-meta__item">🕐 17h00 - 19h00</span> - <span class="event-meta__item">📍 2 Place Louis Daubenton, Nantes</span> - </div> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Avant-dernière session de la saison 2025-2026 de Lambda Nantes, accueillie par Epitech Nantes, suivie de discussions informelles dans un bar à proximité.</p> - - <h2>Programmation compositionnelle</h2> - <p><strong>Eric Torreborre</strong> aborde les avancées récentes dans la résolution du "Expression Problem". Il explore comment la modularisation du code, bien que bénéfique, présente des défis significatifs. A travers un exemple concret de système, il examine les difficultés de modularité et montre pourquoi les solutions existantes s'avèrent insuffisantes pour les dépendances modulaires complexes. La session explore un nouveau langage de programmation avec des systèmes de types avancés offrant des progrès sur ces questions.</p> - - <h2>Traversabilité</h2> - <p><strong>Clément Delafargue</strong> explique pourquoi "c'est toujours traverse !" dans les communautés de programmation fonctionnelle. Cette fonction est devenue largement applicable dans des contextes variés : appels asynchrones, validation de données, exécution conditionnelle et génération de parsers. La discussion couvre les foncteurs applicatifs qui sous-tendent cette abstraction.</p> - - <a href="https://mobilizon.fr/events/804503f4-0552-4f48-9eab-ce060e6df83d" class="event-link" target="_blank" rel="noopener">Voir sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France</p> - </div> - </footer> -</body> -</html> diff --git a/site/events/2026-06-23-pas-que-git.html b/site/events/2026-06-23-pas-que-git.html deleted file mode 100644 index eb7a829..0000000 --- a/site/events/2026-06-23-pas-que-git.html +++ /dev/null @@ -1,76 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Il n'y a pas que Git dans la vie - Lambda Nantes</title> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - <link rel="stylesheet" href="../style.css"> - <link rel="stylesheet" href="../event.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - <nav class="nav"> - <div class="container nav__inner"> - <a href="../index.html" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="../index.html#a-propos">A propos</a></li> - <li><a href="../index.html#ateliers">Rencontres</a></li> - <li><a href="../index.html#rejoindre">Rejoindre</a></li> - <li><a href="https://www.nantes-craft.fr/code-of-conduct.html" target="_blank" rel="noopener">Code de conduite</a></li> - </ul> - </div> - </nav> - - <header class="event-hero"> - <div class="container"> - <a href="../index.html#ateliers" class="event-hero__back">← Toutes les rencontres</a> - <h1>Il n'y a pas que Git dans la vie</h1> - <div class="event-meta"> - <span class="event-meta__item">📅 23 juin 2026</span> - <span class="event-meta__item">🕐 19h00 - 21h00</span> - <a href="https://www.openstreetmap.org/search?query=2+Place+Louis+Daubenton%2C+44100+Nantes%2C+France" class="event-meta__item" target="_blank" rel="noopener">📍 Epitech, 2 Place Louis Daubenton, Nantes</a> - </div> - <a href="https://mobilizon.fr/events/9d4c0117-02a7-492f-bf45-7ff5290f1678" class="hero__cta" target="_blank" rel="noopener" style="margin-top: 20px;">S'inscrire sur Mobilizon</a> - </div> - </header> - - <section class="event-body"> - <div class="container"> - <div class="event-body__content"> - <p>Pour cette dernière édition de Lambda Nantes de la saison 2025-2026, nous avons le plaisir de proposer 2 présentations sur un thème qui s'éloigne un peu des sujets usuels, celui des outils de gestion de versions.</p> - - <p>Nous remercions Epitech Nantes pour son accueil toujours généreux et précieux ! Comme à l'accoutumée l'effort sera récompensé par du réconfort (en option et avec modération) : nous poursuivrons les discussions dans un lieu accueillant des alentours.</p> - - <h2>Jujutsu : repenser le contrôle de version à l'ère moderne</h2> - <p>Le contrôle de version, on y passe du temps tous les jours, autant que les outils soient agréables à utiliser. Jujutsu, c'est un VCS récent, compatible avec Git en coulisses, mais qui propose un modèle mental radicalement simplifié : plus de staging area, des commits mutables par défaut, une résolution de conflits découplée du rebase.</p> - - <p>Des choix qui semblent étranges au premier abord, et évidents au bout d'une semaine.</p> - - <p>Dans ce talk, on verra comment Jujutsu change concrètement le quotidien : réécriture d'historique, navigation entre les révisions, gestion des conflits, avec des démos pratiques et un retour d'expérience après un an d'utilisation exclusive.</p> - - <p><strong>Maxime Ménager</strong> est développeur senior chez Pledg, avec une quinzaine d'années de métier derrière lui. Arrivé tardivement aux langages fonctionnels, il a eu un coup de coeur pour Elixir, mais jongle actuellement entre Python & Go. Convaincu que les meilleurs outils sont ceux qu'on remet en question, il aime explorer ce qui existe en dehors des sentiers battus, et partager ce qu'il y trouve.</p> - - <h2>Radicle : Collaboration décentralisée avec Git</h2> - <p>N'est-il pas regrettable qu'un outil initialement pensé et prévu pour faciliter la collaboration entre développeurs de manière totalement décentralisée ait muté en une simple interface pour GitHub, ou même n'importe quelle autre forge centralisée ?</p> - - <p>Git, comme Mercurial en son temps, permet à chacun de travailler localement et de manipuler patches et branches à volonté en identifiant les sources de ces changements. Mais ce qui manque ce sont des mécanismes de communication de ces changements qui soient fiables, sûrs et décentralisés : une forge décentralisée et répartie qui ne soit pas contrôlée par une seule entité.</p> - - <p>C'est ce que propose le projet Radicle et que nous allons explorer dans cette conférence. J'essaierai de donner un aperçu le plus exhaustif de Radicle : comment le configurer et l'utiliser au quotidien, comment il permet de couvrir la plupart des besoins d'un projet de développement (issues, PRs, intégration continue, identité et permissions...), les principes sur lesquels il est basé, et la communauté qui le développe et le soutient.</p> - - <p><strong>Arnaud Bailly</strong> développe professionnellement des logiciels depuis plus de 30 ans, dans différents environnements techniques (VBA, Java, Haskell, Rust, Javascript, Web, Desktop, Client/Server, cloud...), organisationnels (consulting, startups, big corps) et domaines métiers (finance, éditeur logiciel, blockchain, R&D).</p> - - <a href="https://mobilizon.fr/events/9d4c0117-02a7-492f-bf45-7ff5290f1678" class="event-link" target="_blank" rel="noopener">S'inscrire sur Mobilizon →</a> - </div> - </div> - </section> - - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France — <a href="https://www.nantes-craft.fr/code-of-conduct.html" target="_blank" rel="noopener">Code de conduite</a></p> - </div> - </footer> -</body> -</html> diff --git a/site/index.html b/site/index.html deleted file mode 100644 index 245886c..0000000 --- a/site/index.html +++ /dev/null @@ -1,399 +0,0 @@ -<!DOCTYPE html> -<html lang="fr"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Lambda Nantes - Programmation applicative et langages</title> - <meta name="description" content="Lambda Nantes est un groupe de développeu·r·euses de Nantes passionné·es par la programmation applicative, les langages de programmation et la théorie des types."> - - <!-- Fonts --> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet"> - - <link rel="stylesheet" href="style.css"> - <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>λ</text></svg>"> -</head> -<body> - - <!-- Hero --> - <header class="hero code-bg"> - <div class="code-snippets" aria-hidden="true"> - <pre><span class="cm">(* OCaml *)</span> -<span class="kw">let</span> <span class="fn">tape_backward</span> last = - <span class="kw">let</span> tp = !tape <span class="kw">in</span> - <span class="kw">let</span> vals = tp.vals <span class="kw">in</span> - <span class="kw">let</span> grads = tp.grads <span class="kw">in</span> - <span class="kw">for</span> cur = last <span class="kw">downto</span> <span class="num">0</span> <span class="kw">do</span> - <span class="kw">let</span> g = <span class="ty">Float.Array</span>.get grads cur <span class="kw">in</span> - <span class="kw">if</span> g <> <span class="num">0.0</span> <span class="kw">then begin</span> - <span class="kw">let</span> op = ops.(cur) <span class="kw">in</span> - <span class="kw">if</span> op = op_mul <span class="kw">then begin</span> - <span class="ty">Float.Array</span>.set grads p1 - (grads p1 <span class="op">+.</span> g <span class="op">*.</span> vals p2); - <span class="ty">Float.Array</span>.set grads p2 - (grads p2 <span class="op">+.</span> g <span class="op">*.</span> vals p1) - <span class="kw">end</span> - <span class="kw">end</span> - <span class="kw">done</span> - -<span class="kw">let</span> <span class="fn">softmax</span> logits = - <span class="kw">let</span> m = <span class="ty">Array</span>.fold_left max - neg_infinity logits <span class="kw">in</span> - <span class="kw">let</span> exps = <span class="ty">Array</span>.map - (<span class="kw">fun</span> x <span class="op">-></span> exp (x <span class="op">-.</span> m)) logits <span class="kw">in</span> - <span class="kw">let</span> s = <span class="ty">Array</span>.fold_left - (<span class="op">+.</span>) <span class="num">0.0</span> exps <span class="kw">in</span> - <span class="ty">Array</span>.map (<span class="kw">fun</span> x <span class="op">-></span> x <span class="op">/.</span> s) exps</pre> - - <pre><span class="cm">-- Haskell</span> -<span class="fn">randomGaussian</span> <span class="op">::</span> <span class="ty">Double</span> <span class="op">-></span> <span class="ty">Double</span> <span class="op">-></span> <span class="ty">IO Double</span> -<span class="fn">randomGaussian</span> μ σ = <span class="kw">do</span> - u1 <span class="op"><-</span> randomIO <span class="op">::</span> <span class="ty">IO Double</span> - u2 <span class="op"><-</span> randomIO <span class="op">::</span> <span class="ty">IO Double</span> - <span class="kw">let</span> z0 = sqrt (<span class="op">-</span>(<span class="num">2.0</span> <span class="op">*</span> log u1)) - <span class="op">*</span> cos (<span class="num">2.0</span> <span class="op">*</span> pi <span class="op">*</span> u2) - pure <span class="op">$</span> μ <span class="op">+</span> σ <span class="op">*</span> z0 - -<span class="fn">applyGradients</span> <span class="op">::</span> <span class="ty">Model</span> <span class="op">-></span> <span class="ty">LearningParameters</span> - <span class="op">-></span> <span class="ty">Int</span> <span class="op">-></span> <span class="ty">UV.Vector Double</span> - <span class="op">-></span> <span class="ty">Training</span> <span class="op">-></span> <span class="ty">IO</span> () -<span class="fn">applyGradients</span> <span class="ty">Model</span>{weightValues} - params step grads - <span class="ty">Training</span>{mAdam, vAdam} = <span class="kw">do</span> - <span class="kw">let</span> n = <span class="ty">UMV</span>.length weightValues - forM_ [<span class="num">0</span> .. n <span class="op">-</span> <span class="num">1</span>] <span class="op">$</span> \i <span class="op">-></span> <span class="kw">do</span> - <span class="kw">let</span> m_i' = beta1 <span class="op">*</span> m_i - <span class="op">+</span> (<span class="num">1</span> <span class="op">-</span> beta1) <span class="op">*</span> w_grad - v_i' = beta2 <span class="op">*</span> v_i - <span class="op">+</span> (<span class="num">1</span> <span class="op">-</span> beta2) <span class="op">*</span> w_grad <span class="op">*</span> w_grad - <span class="ty">UMV</span>.write weightValues i - <span class="op">$</span> w <span class="op">-</span> lr <span class="op">*</span> m_hat <span class="op">/</span> (sqrt v_hat <span class="op">+</span> eps)</pre> - - <pre><span class="cm">; Scheme</span> -(<span class="kw">define</span> (<span class="fn">tape:eval-linear</span> last) - (<span class="kw">let</span> ((tp (<span class="op">*</span>tape<span class="op">*</span>))) - (<span class="kw">let</span> <span class="fn">loop</span> ((i <span class="num">0</span>)) - (<span class="kw">when</span> (fx<= i last) - (<span class="kw">let</span> ((op-tag (vector-ref - (tape-op tp) i)) - (vals (tape-val tp))) - (<span class="kw">cond</span> - ((fx= op-tag <span class="var">op-add</span>) - (f64vector-set! vals i - (<span class="op">+</span> (f64vector-ref vals - (vector-ref - (tape-p1 tp) i)) - (f64vector-ref vals - (vector-ref - (tape-p2 tp) i))))) - ((fx= op-tag <span class="var">op-mul</span>) - (f64vector-set! vals i - (<span class="op">*</span> (f64vector-ref vals - (vector-ref - (tape-p1 tp) i)) - (f64vector-ref vals - (vector-ref - (tape-p2 tp) i))))))) - (<span class="fn">loop</span> (fx+ i <span class="num">1</span>))))))</pre> - - <pre><span class="cm">\ Forth</span> -<span class="op">:</span> <span class="fn">gaussian</span> <span class="cm">( mean stddev -- val )</span> - <span class="num">1e</span> frnd f- frnd - flog <span class="num">2e</span> fnegate f* fsqrt fswap - <span class="num">2e</span> pi f* f* fcos f* f* f+ <span class="op">;</span> - -<span class="op">:</span> <span class="fn">matvec-mul</span> - <span class="cm">( mat vec rows cols -- res )</span> - { mat vec rows cols } - rows cells allocate throw - { result } - rows <span class="num">0</span> <span class="kw">do</span> i { row } - mat row cols <span class="op">*</span> cells <span class="op">+</span> @ - vec @ <span class="op">*.</span> - cols <span class="num">1</span> <span class="kw">do</span> - mat row cols <span class="op">*</span> i <span class="op">+</span> - cells <span class="op">+</span> @ - vec i cells <span class="op">+</span> @ <span class="op">*.</span> <span class="op">+.</span> - <span class="kw">loop</span> - result row cells <span class="op">+</span> ! - <span class="kw">loop</span> result <span class="op">;</span> - -<span class="op">:</span> <span class="fn">layer-forward</span> - <span class="cm">( input w b n-in n-out )</span> - { inp w b n-in n-out } - n-out cells allocate throw - { out } - n-out <span class="num">0</span> <span class="kw">do</span> - b i cells <span class="op">+</span> @ { acc } - n-in <span class="num">0</span> <span class="kw">do</span> - inp j cells <span class="op">+</span> @ - w i n-in <span class="op">*</span> j <span class="op">+</span> cells <span class="op">+</span> @ - <span class="op">*.</span> acc <span class="op">+.</span> to acc - <span class="kw">loop</span> - acc out i cells <span class="op">+</span> ! - <span class="kw">loop</span> out <span class="op">;</span></pre> - </div> - - <div class="container"> - <img src="assets/logo.png" alt="Logo Lambda Nantes" class="hero__logo"> - <h1><span class="lambda">λ</span>-Nantes</h1> - <p class="hero__tagline"> - un groupe de développeu·r·euses de Nantes passionné·es par la programmation applicative, les langages de programmation et la théorie des types. - </p> - <div class="hero__next-event"> - <p class="hero__next-label">Prochain événement — 23 juin 2026</p> - <a href="events/2026-06-23-pas-que-git.html" class="hero__next-title">Il n'y a pas que Git dans la vie</a> - <p class="hero__next-desc">Jujutsu & Radicle : repenser le contrôle de version</p> - <a href="https://mobilizon.fr/events/9d4c0117-02a7-492f-bf45-7ff5290f1678" class="hero__cta" target="_blank" rel="noopener">S'inscrire sur Mobilizon</a> - </div> - </div> - </header> - - <!-- Nav --> - <nav class="nav"> - <div class="container nav__inner"> - <a href="#" class="nav__brand"><span class="lambda">λ</span>-Nantes</a> - <ul class="nav__links"> - <li><a href="#a-propos">A propos</a></li> - <li><a href="#sujets">Sujets</a></li> - <li><a href="#ateliers">Rencontres</a></li> - <li><a href="#rejoindre">Rejoindre</a></li> - <li><a href="https://www.nantes-craft.fr/code-of-conduct.html" target="_blank" rel="noopener">Code de conduite</a></li> - </ul> - </div> - </nav> - - <!-- About --> - <section id="a-propos"> - <div class="container"> - <h2 class="section__title">A propos</h2> - <p class="section__subtitle"> - Nous nous réunissons régulièrement pour des conférences et des ateliers - autour des langages de programmation et du développement logiciel. - </p> - <div class="about__grid"> - <div class="about__card"> - <span class="icon" aria-hidden="true">λ</span> - <h3>Programmation fonctionnelle</h3> - <p> - Haskell, OCaml, Elm, Elixir, Clojure, Scala... - Nous explorons les langages fonctionnels et les concepts qui les sous-tendent. - </p> - </div> - <div class="about__card"> - <span class="icon" aria-hidden="true">∀</span> - <h3>Théorie des types</h3> - <p> - Des types simples aux types dépendants, en passant par le polymorphisme - et les systèmes de preuves. - </p> - </div> - <div class="about__card"> - <span class="icon" aria-hidden="true">⊢</span> - <h3>Langages et compilation</h3> - <p> - Conception de langages, interpréteurs, compilateurs, - machines virtuelles et analyses statiques. - </p> - </div> - <div class="about__card"> - <span class="icon" aria-hidden="true">⊇</span> - <h3>Développement logiciel</h3> - <p> - Tests, qualité, architecture, outils... - Tout ce qui rend le développement logiciel plus fiable et agréable. - </p> - </div> - </div> - </div> - </section> - - <!-- Topics --> - <section id="sujets"> - <div class="container"> - <h2 class="section__title">Nos sujets de prédilection</h2> - <p class="section__subtitle"> - Quelques-uns des thèmes que nous abordons lors de nos rencontres. - </p> - <div class="topics__list"> - <span class="topic-tag">Lambda-calcul</span> - <span class="topic-tag">Haskell</span> - <span class="topic-tag">OCaml</span> - <span class="topic-tag">Typage</span> - <span class="topic-tag">Preuves formelles</span> - <span class="topic-tag">Property-based testing</span> - <span class="topic-tag">Interpréteurs</span> - <span class="topic-tag">Compilateurs</span> - <span class="topic-tag">Elm</span> - <span class="topic-tag">Rust</span> - <span class="topic-tag">Prolog</span> - <span class="topic-tag">Catégories</span> - <span class="topic-tag">Effets algébriques</span> - <span class="topic-tag">Logique</span> - <span class="topic-tag">Récursion</span> - <span class="topic-tag">Monades</span> - <span class="topic-tag">Parsers</span> - </div> - </div> - </section> - - <!-- Events --> - <section id="ateliers"> - <div class="container"> - <h2 class="section__title">Nos rencontres</h2> - <p class="section__subtitle"> - Retrouvez l'historique de nos rencontres depuis 2022. Conférences, ateliers - et discussions autour de la programmation fonctionnelle. - </p> - <div class="events__list"> - <a href="events/2026-06-23-pas-que-git.html" class="event-card event-card--upcoming"> - <div class="event-card__date">23 jun<br>2026</div> - <div class="event-card__content"> - <h3>Il n'y a pas que Git dans la vie</h3> - <p>Jujutsu et Radicle : repenser le contrôle de version avec Maxime Ménager et Arnaud Bailly.</p> - </div> - </a> - <a href="events/2026-05-21-programmation-compositionnelle.html" class="event-card"> - <div class="event-card__date">21 mai<br>2026</div> - <div class="event-card__content"> - <h3>Programmation compositionnelle et traversabilité</h3> - <p>Expression Problem et foncteurs applicatifs avec Eric Torreborre et Clément Delafargue.</p> - </div> - </a> - <a href="events/2026-04-16-atelier-4.html" class="event-card"> - <div class="event-card__date">16 avr<br>2026</div> - <div class="event-card__content"> - <h3>Atelier Lambda Nantes #4</h3> - <p>OCaml pour le web : développement et déploiement d'un unikernel.</p> - </div> - </a> - <a href="events/2026-03-19-plain-pattern-language.html" class="event-card"> - <div class="event-card__date">19 mar<br>2026</div> - <div class="event-card__content"> - <h3>Lambda Nantes 10 : Plain Pattern Language</h3> - <p>Grammaires formelles et génération procédurale avec Lorie den Os.</p> - </div> - </a> - <a href="events/2026-02-19-langages-de-niches.html" class="event-card"> - <div class="event-card__date">19 fév<br>2026</div> - <div class="event-card__content"> - <h3>Lambda Nantes 9 : Pourquoi choisir des langages de niches ?</h3> - <p>Retour d'expérience Scala, Haskell et Rust avec Clément Delafargue.</p> - </div> - </a> - <a href="events/2025-12-10-interprete-prolog.html" class="event-card"> - <div class="event-card__date">10 déc<br>2025</div> - <div class="event-card__content"> - <h3>Workshop 3 : Créons un interprète Prolog</h3> - <p>Atelier collaboratif d'introduction à la programmation logique.</p> - </div> - </a> - <a href="events/2025-11-13-injection-dependances.html" class="event-card"> - <div class="event-card__date">13 nov<br>2025</div> - <div class="event-card__content"> - <h3>Lambda Nantes 8 : Injection de dépendances fonctionnelle</h3> - <p>Comparaison Unison vs OCaml avec Eric Torreborre et Xavier van de Woestyne.</p> - </div> - </a> - <a href="events/2025-10-09-lambda-calcul-type.html" class="event-card"> - <div class="event-card__date">09 oct<br>2025</div> - <div class="event-card__content"> - <h3>Workshop 2bis : Interprétons le lambda-calcul typé</h3> - <p>Ajout d'un système de types simples à un interpréteur de lambda-calcul.</p> - </div> - </a> - <a href="events/2025-03-27-logs-observabilite.html" class="event-card"> - <div class="event-card__date">27 mar<br>2025</div> - <div class="event-card__content"> - <h3>LambdaNantes 7 : Logs, traçabilité et observabilité</h3> - <p>OpenTelemetry et observabilité dans les systèmes distribués avec Lucas.</p> - </div> - </a> - <a href="events/2025-01-30-tests-proprietes.html" class="event-card"> - <div class="event-card__date">30 jan<br>2025</div> - <div class="event-card__content"> - <h3>LambdaNantes 6 : Les tests dirigés par les propriétés</h3> - <p>Atelier property-based testing avec Arnaud Bailly.</p> - </div> - </a> - <a href="events/2024-10-10-lambda-calcul.html" class="event-card"> - <div class="event-card__date">10 oct<br>2024</div> - <div class="event-card__content"> - <h3>Workshop 1 : Interprétons le Lambda Calcul</h3> - <p>Premier atelier : construire un interpréteur de lambda-calcul.</p> - </div> - </a> - <a href="events/2024-06-20-types-dependants.html" class="event-card"> - <div class="event-card__date">20 jun<br>2024</div> - <div class="event-card__content"> - <h3>LambdaNantes 5 : Types, types et types (dépendants)</h3> - <p>Type-Driven Development et types dépendants avec Arnaud Bailly et Didier Plaindoux.</p> - </div> - </a> - <a href="events/2023-10-23-monades-gratuites.html" class="event-card"> - <div class="event-card__date">23 oct<br>2023</div> - <div class="event-card__content"> - <h3>LambdaNantes 4 : Monades Gratuites et Systèmes de build</h3> - <p>Free Monads et build systems avec Nicolas Rinaudo et Xavier Van de Woestyne.</p> - </div> - </a> - <a href="events/2023-06-23-haskell.html" class="event-card"> - <div class="event-card__date">23 jun<br>2023</div> - <div class="event-card__content"> - <h3>LambdaNantes 3 : Haskell à l'honneur</h3> - <p>Biscuit tokens et Flora.pm avec Clément Delafargue et Théophile Choutri.</p> - </div> - </a> - <a href="events/2022-09-20-gadts-free-monads.html" class="event-card"> - <div class="event-card__date">20 sep<br>2022</div> - <div class="event-card__content"> - <h3>LambdaNantes 2 : GADTs et Free Monades</h3> - <p>Réalité des Free Monads et méthodes gardées avec Arnaud Bailly et Xavier Van de Woestyne.</p> - </div> - </a> - <a href="events/2022-05-19-reutilisation-effets.html" class="event-card"> - <div class="event-card__date">19 mai<br>2022</div> - <div class="event-card__content"> - <h3>LambdaNantes 1 : Réutilisation de fonctions et abstraction d'effets</h3> - <p>Première édition ! Monads, Functors et stream processing avec Nicolas Rinaudo et Romain Lecomte.</p> - </div> - </a> - </div> - </div> - </section> - - <!-- Join --> - <section id="rejoindre" class="join"> - <div class="container"> - <h2 class="section__title">Nous rejoindre</h2> - <p class="section__subtitle" style="margin-left:auto;margin-right:auto;"> - Que vous soyez débutant ou expert, vous êtes les bienvenu(e)s ! - Retrouvez-nous sur Mobilizon pour connaître les prochains événements. - </p> - <div class="join__links"> - <a href="https://mobilizon.fr/@lambdanantes" class="join__link" target="_blank" rel="noopener"> - <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> - Mobilizon - </a> - <a href="https://radicle.network/nodes/seed.hydra.bzh/rad:z28SSH7hyCTu387guFhtPXYxcwtUs" class="join__link" target="_blank" rel="noopener"> - <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"></path></svg> - Radicle - </a> - <a href="https://bsky.app/profile/lambdanantes.bsky.social" class="join__link" target="_blank" rel="noopener"> - <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566.944 1.561 1.266.902 1.565.139 1.908 0 3.08 0 3.768c0 .69.378 5.65.624 6.479.785 2.627 3.601 3.476 6.178 3.126-4.56.756-8.711 2.618-4.87 8.527 4.074 5.122 7.073-1.156 8.068-4.2.995 3.044 2.432 9.057 8.068 4.2 3.556-5.544.252-7.771-4.87-8.527 2.577.35 5.392-.5 6.178-3.126C19.622 9.418 20 4.458 20 3.768c0-.69-.139-1.861-.902-2.203-.659-.3-1.664-.62-4.3 1.24C12.046 4.747 9.087 8.686 8 10.8h4z" transform="translate(2 2) scale(0.9)"/></svg> - Bluesky - </a> - </div> - </div> - </section> - - <!-- Footer --> - <footer class="footer"> - <div class="container"> - <p>λ-Nantes — Nantes, France — <a href="https://www.nantes-craft.fr/code-of-conduct.html" target="_blank" rel="noopener">Code de conduite</a></p> - </div> - </footer> - -</body> -</html> diff --git a/site/style.css b/site/style.css deleted file mode 100644 index 1561680..0000000 --- a/site/style.css +++ /dev/null @@ -1,435 +0,0 @@ -/* === Reset & Base === */ -*, -*::before, -*::after { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - --sky: #8ecae6; - --sky-light: #d4edf8; - --sand: #f5deb3; - --sand-light: #fdf3e0; - --ink: #2b2d42; - --ink-light: #555b6e; - --white: #fefefe; - --radius: 12px; -} - -html { - scroll-behavior: smooth; -} - -body { - font-family: "Inter", "Helvetica Neue", Arial, sans-serif; - color: var(--ink); - background: var(--white); - line-height: 1.7; - font-size: 17px; -} - -a { - color: var(--ink); - text-decoration-color: var(--sky); - text-underline-offset: 3px; - transition: color 0.2s; -} - -a:hover { - color: #1a6fa0; -} - -/* === Layout === */ -.container { - max-width: 960px; - margin: 0 auto; - padding: 0 24px; -} - -/* === Header / Hero === */ -.hero { - background: linear-gradient(135deg, var(--sand-light) 0%, var(--sky-light) 100%); - padding: 80px 0 60px; - text-align: center; -} - -.hero__logo { - width: 160px; - height: 160px; - border-radius: 50%; - object-fit: cover; - border: 4px solid var(--white); - box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08); - margin-bottom: 24px; -} - -.hero h1 { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 2.8rem; - font-weight: 700; - letter-spacing: -1px; - margin-bottom: 8px; -} - -.hero h1 .lambda { - color: #3a9fbf; -} - -.hero__tagline { - font-size: 1.15rem; - color: var(--ink-light); - max-width: 560px; - margin: 0 auto 32px; -} - -.hero__cta { - display: inline-block; - background: var(--sky); - color: var(--ink); - font-weight: 600; - padding: 12px 28px; - border-radius: 8px; - text-decoration: none; - transition: background 0.2s, transform 0.15s; -} - -.hero__cta:hover { - background: #6fb8d9; - color: var(--ink); - transform: translateY(-1px); -} - -.hero__next-event { - background: rgba(255, 255, 255, 0.7); - backdrop-filter: blur(8px); - border: 1px solid rgba(142, 202, 230, 0.4); - border-radius: var(--radius); - padding: 24px 32px; - max-width: 520px; - margin: 0 auto; -} - -.hero__next-label { - font-family: "JetBrains Mono", monospace; - font-size: 0.8rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; - color: #3a9fbf; - margin-bottom: 8px; -} - -.hero__next-title { - display: block; - font-family: "JetBrains Mono", monospace; - font-size: 1.2rem; - font-weight: 700; - color: var(--ink); - text-decoration: none; - margin-bottom: 4px; -} - -.hero__next-title:hover { - color: #1a6fa0; -} - -.hero__next-desc { - color: var(--ink-light); - font-size: 0.92rem; - margin-bottom: 16px; -} - -/* === Nav === */ -.nav { - background: var(--white); - border-bottom: 1px solid #e8e8e8; - position: sticky; - top: 0; - z-index: 10; -} - -.nav__inner { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px 0; -} - -.nav__brand { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-weight: 700; - font-size: 1.2rem; - text-decoration: none; -} - -.nav__links { - display: flex; - gap: 24px; - list-style: none; -} - -.nav__links a { - text-decoration: none; - font-size: 0.95rem; - font-weight: 500; - color: var(--ink-light); - transition: color 0.2s; -} - -.nav__links a:hover { - color: var(--ink); -} - -/* === Sections === */ -section { - padding: 64px 0; -} - -section:nth-child(even) { - background: var(--sand-light); -} - -.section__title { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 1.6rem; - margin-bottom: 12px; -} - -.section__subtitle { - color: var(--ink-light); - margin-bottom: 40px; - max-width: 600px; -} - -/* === About === */ -.about__grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 32px; - margin-top: 32px; -} - -.about__card { - background: var(--white); - border: 1px solid #e8e8e8; - border-radius: var(--radius); - padding: 28px; - transition: box-shadow 0.2s; -} - -.about__card:hover { - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06); -} - -.about__card h3 { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 1.1rem; - margin-bottom: 8px; -} - -.about__card .icon { - font-size: 1.8rem; - margin-bottom: 12px; - display: block; -} - -/* === Topics === */ -.topics__list { - display: flex; - flex-wrap: wrap; - gap: 12px; - margin-top: 24px; -} - -.topic-tag { - background: var(--sky-light); - border: 1px solid var(--sky); - border-radius: 24px; - padding: 8px 20px; - font-size: 0.9rem; - font-weight: 500; - white-space: nowrap; -} - -/* === Workshops / Events === */ -.events__list { - display: flex; - flex-direction: column; - gap: 20px; - margin-top: 24px; -} - -.event-card { - background: var(--white); - border: 1px solid #e8e8e8; - border-radius: var(--radius); - padding: 24px 28px; - display: flex; - align-items: flex-start; - gap: 20px; - transition: box-shadow 0.2s, border-color 0.2s; - text-decoration: none; - color: var(--ink); -} - -.event-card:hover { - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06); - border-color: var(--sky); - color: var(--ink); -} - -.event-card--upcoming { - border-color: var(--sky); - background: var(--sky-light); -} - -.event-card--upcoming .event-card__date { - background: var(--sky); - color: var(--white); -} - -.event-card__date { - font-family: "JetBrains Mono", "Fira Code", monospace; - font-size: 0.85rem; - color: var(--ink-light); - background: var(--sand-light); - border-radius: 8px; - padding: 8px 12px; - white-space: nowrap; - text-align: center; - min-width: 90px; -} - -.event-card__content h3 { - font-size: 1.05rem; - margin-bottom: 4px; -} - -.event-card__content p { - color: var(--ink-light); - font-size: 0.92rem; -} - -/* === Join / CTA === */ -.join { - text-align: center; - background: linear-gradient(135deg, var(--sky-light) 0%, var(--sand-light) 100%); -} - -.join__links { - display: flex; - justify-content: center; - gap: 16px; - margin-top: 28px; - flex-wrap: wrap; -} - -.join__link { - display: inline-flex; - align-items: center; - gap: 8px; - background: var(--white); - border: 1px solid #e0e0e0; - border-radius: 8px; - padding: 12px 24px; - text-decoration: none; - font-weight: 500; - transition: border-color 0.2s, box-shadow 0.2s; -} - -.join__link:hover { - border-color: var(--sky); - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); - color: var(--ink); -} - -/* === Footer === */ -.footer { - background: var(--ink); - color: #c0c0c0; - padding: 32px 0; - text-align: center; - font-size: 0.88rem; -} - -.footer a { - color: var(--sky); -} - -/* === Code decoration === */ -.code-bg { - position: relative; - overflow: hidden; -} - -.code-bg > * { - position: relative; - z-index: 1; -} - -.code-snippets { - position: absolute; - inset: 0; - z-index: 0; - pointer-events: none; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - gap: 16px; - padding: 20px; - opacity: 0.45; - mask-image: radial-gradient(ellipse 90% 80% at 50% 50%, black 30%, transparent 75%); - -webkit-mask-image: radial-gradient(ellipse 90% 80% at 50% 50%, black 30%, transparent 75%); -} - -.code-snippets pre { - font-family: "JetBrains Mono", monospace; - font-size: 0.65rem; - line-height: 1.5; - white-space: pre; - overflow: hidden; - margin: 0; - text-align: left; -} - -/* Syntax highlighting colors */ -.code-snippets .kw { color: #7c3aed; } /* keywords - purple */ -.code-snippets .fn { color: #2563eb; } /* functions - blue */ -.code-snippets .ty { color: #0891b2; } /* types - teal */ -.code-snippets .str { color: #16a34a; } /* strings - green */ -.code-snippets .num { color: #dc2626; } /* numbers - red */ -.code-snippets .op { color: #9333ea; } /* operators - violet */ -.code-snippets .cm { color: #6b7280; font-style: italic; } /* comments - gray */ -.code-snippets .var { color: #1e3a5f; } /* variables - dark blue */ - -@media (max-width: 700px) { - .code-snippets { - grid-template-columns: 1fr 1fr; - font-size: 0.5rem; - } -} - -/* === Responsive === */ -@media (max-width: 700px) { - .hero h1 { - font-size: 2rem; - } - - .hero__logo { - width: 120px; - height: 120px; - } - - .about__grid { - grid-template-columns: 1fr; - } - - .event-card { - flex-direction: column; - } - - .nav__links { - gap: 16px; - } -} |
