diff --git a/README.md b/README.md index 0073e7e7df32c4041a822ba0bb45a57a982043dc..a49f307fe3494cf54b34290b55387dd689f8d60f 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,5 @@ Ce dépôt regroupe toutes* les slides des présentations et conférences de lib * [Présentation de l'écosystème logiciel de la G1](https://librelois.duniter.io/slides/rustkathon2019_1/g1-ecosystem/) * [Présentation de webassembly](https://librelois.duniter.io/slides/rustkathon2019_1/wasm/) -* [Le protocole DUP](https://librelois.duniter.io/slides/rustkathon2019_1/dup-protocol/) \ No newline at end of file +* [Le protocole DUP](https://librelois.duniter.io/slides/rustkathon2019_1/dup-protocol/) +* [Le projet DURS (DUniter-RuSt)](https://librelois.duniter.io/slides/rustkathon2019_1/durs/) \ No newline at end of file diff --git a/public/images/durs-modules-step-0.png b/public/images/durs-modules-step-0.png new file mode 100644 index 0000000000000000000000000000000000000000..7098634a49ec24e028f3f284930817661c13774b Binary files /dev/null and b/public/images/durs-modules-step-0.png differ diff --git a/public/images/durs-modules-step-1.png b/public/images/durs-modules-step-1.png new file mode 100644 index 0000000000000000000000000000000000000000..aca11bc905adb9383a3d9fad51d394521fbc7909 Binary files /dev/null and b/public/images/durs-modules-step-1.png differ diff --git a/public/images/durs-modules-step-2.png b/public/images/durs-modules-step-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d48200abbfde5a8714a216edc4dbbb41a0b7fe76 Binary files /dev/null and b/public/images/durs-modules-step-2.png differ diff --git a/public/images/durs-modules-step-3.png b/public/images/durs-modules-step-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d6645aaa9c465809473854ca95c75ff03fad24 Binary files /dev/null and b/public/images/durs-modules-step-3.png differ diff --git a/public/images/durs-modules-step-4.png b/public/images/durs-modules-step-4.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1f5cc37a9dc1367bfbd7a6e14da1cb6cab1fba Binary files /dev/null and b/public/images/durs-modules-step-4.png differ diff --git a/public/rustkathon2019_1/durs/index.html b/public/rustkathon2019_1/durs/index.html new file mode 100644 index 0000000000000000000000000000000000000000..7edf6f2cdbead1d5b9a83c425704c696e009b0c5 --- /dev/null +++ b/public/rustkathon2019_1/durs/index.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> + +<head> + <title>Rustkathon 1 : DURS (DUniter-RuSt)</title> + <meta charset="utf-8"> + <link rel="stylesheet" href="../../common.css"> + <link rel="stylesheet" href="../../lib/mermaid.dark.css"> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.206/distr/fira_code.css"> +</head> + +<body> + <textarea id="source"></textarea> + <script src="../../lib/mermaid.min.js"></script> + <script src="../../lib/remark-latest.min.js"></script> + <script> + var slideshow = remark.create({ + sourceUrl: 'markdown.md', + highlightStyle: 'tomorrow-night', + countIncrementalSlides: false + }); + // don't let mermaid automatically load on start + mermaid.initialize({ + startOnLoad: false, + cloneCssStyles: false + }); + + slideshow.on("afterShowSlide", s => { + const [slide] = document.getElementsByClassName("remark-visible"); + mermaid.sequenceConfig = { + diagramMarginY: 0 + }; + mermaid.init(Array.from(slide.getElementsByClassName("mermaid"))); + }); + </script> +</body> + +</html> \ No newline at end of file diff --git a/public/rustkathon2019_1/durs/markdown.md b/public/rustkathon2019_1/durs/markdown.md new file mode 100644 index 0000000000000000000000000000000000000000..2cfb61f15433a55772becce63bf91bb069aeba2e --- /dev/null +++ b/public/rustkathon2019_1/durs/markdown.md @@ -0,0 +1,277 @@ +class: dark, middle, center + +# DURS (DUniter-RuSt) + + + +_23 mars 2019_ +_Rustkathon #1_ +_Librelois <elois@ifee.fr>_ + +Suivre la présentation sur votre ecran : + +`librelois.duniter.io/slides/rustkathon2019_1/durs` + +--- + +layout: true +class: dark + +.center[DURS (DUniter-RuSt)] + +--- + +## Sommaire + +1. [Pourquoi Durs](#why) +2. [Historique du projet](#history) +3. [Durs actuellement](#currently) +4. [Etat fonctionnel](#functional-report) +5. [Depuis les rml12](#since-rml12) +6. [Roadmap d'elois pour les rml13](#elois-roadmap-rml13) +7. [A faire en priorité](#todo-priority) +8. [Architecture du projet](#archi) +9. [Le système de modules](#module-system) +10. [La pratique](#the-practice) + +--- + +name: why + +## .center[Pourquoi Durs] + + + +-- + +- Pour le plaisir de le faire +-- + +- Sécurité par la diversité (pas les mêmes failles) +-- + +- Haute dispo (relaye si bug critique sur l'autre implé) +-- + +- Oblige des spec DUP plus détaillés (dc moins de bug) +-- + +- 2 points de vues réduit drastiquement les oublis +-- + +- 2 fois plus de contributeurs touchables +-- + +- Gains de Rust : + - Passage a l'échelle (Rust ultra performant & scalable) + - Fiabilité (memory leaks, data races) + - Ultra-light (bien pour les nano-pc, raspi zéro, etc) +-- + +- Réduire le bus factor : + - Projet pensé collectif dés le départ + - Priorise l'évolution horizontale plutot que verticale + +??? + +Projet très long-terme +On prend le temps de faire les choses bien et de former le maximum de monde. + +--- + +name: history + +## .center[Historique du projet] + +- Novembre 2017 Création du projet par Nanocryk. + - ~ 3000 lignes. Crates crypto, wot, documents. +- Février 2018: Rejoins par elois en +- Mai 2018: Nanocryk quitte le projet pour prioriser `Fygg`. +- Fin mai 2018: [1ère prés. officielle de duniter-rs aux rml11](https://www.youtube.com/watch?v=fJvMRv1l5wM) +- Juillet 2018: v0.1.0-a1 +- Septembre 2018 : Renommage Duniter-Rs -> Durs (demande cgeek) +- Octobre 2018 : Nouverua contributeur: inso. +- Novembre 2018: [2ème prés. aux rml12](https://www.youtube.com/watch?v=EIjJNTeaP2g) +- Janvier 2019: Nouveau contributeur counter +- Mars 2019 : 1er hackathon dédié au projet. + +--- + +name: currently + +## .center[Durs actuellement] + +- 22_345 lignes de code + - nanocryk ~ 4_000 + - elois ~ 18_000 + - inso ~ 500 + - counter ~ 5 +- 22 crates (21 lib + 1 bin) +- ~500h de travail sur 13 mois + +--- + +name: functional-report + +## .center[Etat fonctionnel] + +- Synchronisation rapide depuis une blockchain JSON en local +- Un noeud miroir qui reste synchronisé sur le réseau +- une base de donnée indexant la blockchain +- WS2P Privé +- une interface graphique dans le terminal +- Un explorateur de BDD fournissant : + - date d'expiration des membres + - règle de distance des membres + - solde d'un compte + - liste des certifications d'un membre + +--- + +name: since-rml12 + +## .center[Depuis les rml12] + +-- + +- Migration du code Rust en edition 2018 +-- + +- Migration protocole DUP v10->v11 (rejeu des certif) +-- + +- Synchro depuis une blockchain JSON (pour compatibilité avec duniter 1.7) +-- + +- Implémentation de l'Algo de résolution des fork (inclus refonte du stockage des fork) +-- + +- Amélioration du build des paquets debian +-- + +- Création requete DAL `get_identities` +-- + +- Fix bug #129 (WS2Pv1 panic at the negotiation) + +-- + +=> ~ 120h de travail sur 4 mois. + +--- + +name: elois-roadmap-rml13 + +## .center[Roadmap d'elois pour les rml13] + +- Tests d'intégration de la synchro rapide (export des index) +- Requetes DAL pour GVA +- Formation des nouveaux contributeurs +- Maintenance du code de gestion modulaire (en continue) + +--- + +name: todo-priority + +## .center[A faire en priorité] + +- Implémentation de WS2Pv2 + +- Module GVA : nouvelle API Client GraphQL (counter et ji_emme) + +- Module MemPool : sandbox des documents + +- Sync cautious, implémenter toutes les règles du protocole DUP. + +- Documenter au maximum l'existant + +- Traduire les documentations + +-- + +=> Formation et transmission de connaissances via talk mumble. + +--- + +name: archi + +## .center[architecture du dépôt] + +- .github : messages pour le dépot mirroir +- .gitlab : scripts python de publication des releases +- bin/ : crates binaires (durs-server, durs-desktop) +- doc/ : documentation haut niveau (pour dev ET utilisateurs) +- images/ : images statiques +- lib/ : crates bibliothèques (tools, core, modules) + - core/ : crates constituant le squelette du programme (conf, boot, système modulaire) + - modules/ : crates des modules + - tools : Bibliothèques externalisables (code non lié a l'architecture de durs) +- releases/ : scripts bach de build des paquets +- target/ : contient les binaires générés (ignoré par git) + +--- + +name: module-system + +## .center[Le système de modules (1/5)] + + + +- Chaque module est cloisonné dans un thread dédié. +- Ils interagissent uniquement par channels rust. + +--- + +## .center[Le système de modules (2/5)] + + + +- Le coeur lance les modules : ModName::start(..., ...) +- start() prend en param le RooterSender (+conf, etc) + +--- + +## .center[Le système de modules (3/5)] + + + +-> Chaque module s'enregistre auprès du router en transmettant une struct `ModuleRegistration`. + +--- + +## .center[Le système de modules (4/5)] + + + +- Puis les modules transmettent leurs messages au router. +- 3 types de messages : Event, Request, Response. + +--- + +## .center[Le système de modules (5/5)] + + + +- Le router filtre et relaie au(x) module(s) concernés. +- Destinataires ciblés via types de rôles et events. + +--- + +name: the-practice + +### La pratique + +- Installez votre environnement de dev via [le tuto officiel](https://git.duniter.org/nodes/rust/duniter-rs/blob/dev/doc/fr/installer-son-environnement-de-dev.md) régulièrement mis a jours ([english version](https://git.duniter.org/nodes/rust/duniter-rs/blob/dev/doc/en/setup-your-dev-environment.md)). +- Développez votre module : atelier juste après. +- Chez vous en suivant [le tuto sur les modules](https://git.duniter.org/nodes/rust/duniter-rs/blob/dev/doc/fr/developper-un-module-durs.md) en cours de rédaction. + +--- + +## .center[Merci de votre attention] + +Présentation réalisée avec [remark](https://github.com/gnab/remark). +Graphes réalisés avec [mermaid](https://github.com/knsv/mermaid). + +Retrouvez les sources de cette présentation sur le gitlab de duniter : + +.center[[https://git.duniter.org/librelois/slides](https://git.duniter.org/librelois/slides)] \ No newline at end of file