summaryrefslogtreecommitdiff
path: root/site/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/index.html')
-rw-r--r--site/index.html399
1 files changed, 0 insertions, 399 deletions
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'>&#955;</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 &lt;&gt; <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">-&gt;</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">-&gt;</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">-&gt;</span> <span class="ty">Double</span> <span class="op">-&gt;</span> <span class="ty">IO Double</span>
-<span class="fn">randomGaussian</span> &#956; &#963; = <span class="kw">do</span>
- u1 <span class="op">&lt;-</span> randomIO <span class="op">::</span> <span class="ty">IO Double</span>
- u2 <span class="op">&lt;-</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> &#956; <span class="op">+</span> &#963; <span class="op">*</span> z0
-
-<span class="fn">applyGradients</span> <span class="op">::</span> <span class="ty">Model</span> <span class="op">-&gt;</span> <span class="ty">LearningParameters</span>
- <span class="op">-&gt;</span> <span class="ty">Int</span> <span class="op">-&gt;</span> <span class="ty">UV.Vector Double</span>
- <span class="op">-&gt;</span> <span class="ty">Training</span> <span class="op">-&gt;</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">-&gt;</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&lt;= 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">&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 &mdash; 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 &amp; 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">&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">&lambda;</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">&forall;</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">&vdash;</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">&supe;</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>&lambda;-Nantes &mdash; Nantes, France &mdash; <a href="https://www.nantes-craft.fr/code-of-conduct.html" target="_blank" rel="noopener">Code de conduite</a></p>
- </div>
- </footer>
-
-</body>
-</html>