alpha
Login
or
Join now
graft.pds.cyberwild.org
/
graft-presentation
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Federated via graft
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
ci: regenerate presentation-fr.html
author
graft-presentation-ci
date
1 month ago
(Sep 13, 2026, 9:25 PM UTC)
commit
24f88ca4
24f88ca4bb924a192b129b4cff76cd9026199983
parent
7cdee888
7cdee888c175534f7b0cbbad152b37c3c1cdb6e1
+363
-53
1 changed file
Expand all
Collapse all
Unified
Split
presentation-fr.html
+363
-53
presentation-fr.html
View file
Reviewed
···
32
32
section.wide table { font-size: 18px; }
33
33
section.part { background-color: #1a5fb4 !important; }
34
34
section.part h1, section.part h2, section.part p { color: #fff !important; }
35
35
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
35
35
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
36
36
<h1 id="forges--web-d%C3%A9centralis%C3%A9">Forges & web décentralisé</h1>
37
37
<p>État des lieux au 10 septembre 2026</p>
38
38
</section>
···
54
54
section.wide table { font-size: 18px; }
55
55
section.part { background-color: #1a5fb4 !important; }
56
56
section.part h1, section.part h2, section.part p { color: #fff !important; }
57
57
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
57
57
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
58
58
<h1 id="1-cadrage">1. Cadrage</h1>
59
59
<h2 id="code-et-collaboration">code et collaboration</h2>
60
60
</section>
···
76
76
section.wide table { font-size: 18px; }
77
77
section.part { background-color: #1a5fb4 !important; }
78
78
section.part h1, section.part h2, section.part p { color: #fff !important; }
79
79
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
79
79
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
80
80
<h2 id="automatisation-de-la-mise-en-miroir">Automatisation de la mise en miroir</h2>
81
81
<p><strong>Le transport</strong> du code est résolu depuis 2005 : git est distribué par construction, un dépôt peut exister à plusieurs endroits.</p>
82
82
<p><strong>L'orchestration</strong> n'existe pas. Chaque miroir se configure à la main, instance par instance. Chaque projet écrit elle-même l'intégration continue qui l'entretient.</p>
···
99
99
section.wide table { font-size: 18px; }
100
100
section.part { background-color: #1a5fb4 !important; }
101
101
section.part h1, section.part h2, section.part p { color: #fff !important; }
102
102
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
102
102
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
103
103
<h2 id="%C3%A9l%C3%A9ments-non-couverts-par-git">Éléments non couverts par git</h2>
104
104
<p>Le véritable obstacle, c'est tout ce qui entoure un dépôt : tickets,<br />
105
105
propositions de modification, relectures, identité, droits.</p>
···
124
124
section.wide table { font-size: 18px; }
125
125
section.part { background-color: #1a5fb4 !important; }
126
126
section.part h1, section.part h2, section.part p { color: #fff !important; }
127
127
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
127
127
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
128
128
<h1 id="2-%C3%A9tat-de-la-f%C3%A9d%C3%A9ration-dans-forgejo">2. État de la fédération dans Forgejo</h1>
129
129
<h2 id="fonctionnalit%C3%A9s-livr%C3%A9es-et-fonctionnalit%C3%A9s-manquantes">Fonctionnalités livrées et fonctionnalités manquantes</h2>
130
130
</section>
···
146
146
section.wide table { font-size: 18px; }
147
147
section.part { background-color: #1a5fb4 !important; }
148
148
section.part h1, section.part h2, section.part p { color: #fff !important; }
149
149
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/forgejo_v16.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="6" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
149
149
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/forgejo_v16.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="6" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
150
150
h1 { color: #1a5fb4; }
151
151
h2 { color: #1a5fb4; }
152
152
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
164
164
section.wide table { font-size: 18px; }
165
165
section.part { background-color: #1a5fb4 !important; }
166
166
section.part h1, section.part h2, section.part p { color: #fff !important; }
167
167
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
167
167
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
168
168
<h2 id="p%C3%A9rim%C3%A8tre-fonctionnel-de-la-f%C3%A9d%C3%A9ration-forgejo">Périmètre fonctionnel de la fédération <a href="https://forgejo.org">Forgejo</a></h2>
169
169
<h3 id="fonctionne">Fonctionne</h3>
170
170
<ul>
···
186
186
section.wide table { font-size: 18px; }
187
187
section.part { background-color: #1a5fb4 !important; }
188
188
section.part h1, section.part h2, section.part p { color: #fff !important; }
189
189
-
" lang="fr-FR" data-marpit-pagination="6" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
189
189
+
" lang="fr-FR" data-marpit-pagination="6" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
190
190
h1 { color: #1a5fb4; }
191
191
h2 { color: #1a5fb4; }
192
192
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
204
204
section.wide table { font-size: 18px; }
205
205
section.part { background-color: #1a5fb4 !important; }
206
206
section.part h1, section.part h2, section.part p { color: #fff !important; }
207
207
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
207
207
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
208
208
<h2 id="fonctionnement-du-favori-f%C3%A9d%C3%A9r%C3%A9">Fonctionnement du favori fédéré</h2>
209
209
<pre is="marp-pre" data-auto-scaling="downscale-only"><code>@alice@forgeA --(c'est quoi, ce dépôt ?)--> acteur du dépôt sur forgeB
210
210
--(« aimé », signé)---------> boîte de réception sur forgeB
···
233
233
section.wide table { font-size: 18px; }
234
234
section.part { background-color: #1a5fb4 !important; }
235
235
section.part h1, section.part h2, section.part p { color: #fff !important; }
236
236
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
236
236
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
237
237
<h2 id="suivi-de-comptes-entre-forgejo-et-la-f%C3%A9diverse">Suivi de comptes entre Forgejo et la fédiverse</h2>
238
238
<p>Un compte Forgejo peut suivre un compte <a href="https://joinmastodon.org">Mastodon</a> ou <a href="https://gotosocial.org">GoToSocial</a>, et l'inverse.<br />
239
239
Les commits et les versions apparaissent alors dans un fil social.</p>
···
259
259
section.wide table { font-size: 18px; }
260
260
section.part { background-color: #1a5fb4 !important; }
261
261
section.part h1, section.part h2, section.part p { color: #fff !important; }
262
262
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
262
262
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
263
263
<h2 id="risque-associ%C3%A9-%C3%A0-lactivation-de-la-f%C3%A9d%C3%A9ration">Risque associé à l'activation de la fédération</h2>
264
264
<p>Le projet se réserve le droit de casser la fédération sans préavis.</p>
265
265
<p>Les autres serveurs mémorisent le domaine et les clés d'une instance dès que la fédération est active. Une rupture peut rendre ce domaine définitivement<br />
···
283
283
section.wide table { font-size: 18px; }
284
284
section.part { background-color: #1a5fb4 !important; }
285
285
section.part h1, section.part h2, section.part p { color: #fff !important; }
286
286
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/term404.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="10" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
286
286
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/term404.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="10" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
287
287
h1 { color: #1a5fb4; }
288
288
h2 { color: #1a5fb4; }
289
289
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
301
301
section.wide table { font-size: 18px; }
302
302
section.part { background-color: #1a5fb4 !important; }
303
303
section.part h1, section.part h2, section.part p { color: #fff !important; }
304
304
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
304
304
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
305
305
<h2 id="adoption-en-production">Adoption en production</h2>
306
306
<p>La fédération est désactivée par défaut, et les grandes instances publiques ne<br />
307
307
l'activent pas.</p>
···
318
318
section.wide table { font-size: 18px; }
319
319
section.part { background-color: #1a5fb4 !important; }
320
320
section.part h1, section.part h2, section.part p { color: #fff !important; }
321
321
-
" lang="fr-FR" data-marpit-pagination="10" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
321
321
+
" lang="fr-FR" data-marpit-pagination="10" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
322
322
h1 { color: #1a5fb4; }
323
323
h2 { color: #1a5fb4; }
324
324
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
336
336
section.wide table { font-size: 18px; }
337
337
section.part { background-color: #1a5fb4 !important; }
338
338
section.part h1, section.part h2, section.part p { color: #fff !important; }
339
339
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
339
339
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
340
340
<h1 id="3-autres-solutions">3. Autres solutions</h1>
341
341
<h2 id="des-solutions-ind%C3%A9pendantes-dactivitypub">Des solutions indépendantes d'ActivityPub</h2>
342
342
</section>
···
358
358
section.wide table { font-size: 18px; }
359
359
section.part { background-color: #1a5fb4 !important; }
360
360
section.part h1, section.part h2, section.part p { color: #fff !important; }
361
361
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
361
361
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
362
362
<h2 id="mise-en-relation-de-deux-forges-par-miroir">Mise en relation de deux forges par miroir</h2>
363
363
<p>Forgejo push ou pull déjà un dépôt vers une autre instance. Le code passe,<br />
364
364
les tickets non.</p>
···
387
387
section.wide table { font-size: 18px; }
388
388
section.part { background-color: #1a5fb4 !important; }
389
389
section.part h1, section.part h2, section.part p { color: #fff !important; }
390
390
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
390
390
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
391
391
<h2 id="f3--migrer-un-projet-pas-le-f%C3%A9d%C3%A9rer"><a href="https://code.forgejo.org/f3/f3-documentation">F3</a> : migrer un projet, pas le fédérer</h2>
392
392
<p>F3 est un format d'export qui contient tout un projet : dépôt, tickets,<br />
393
393
propositions, commentaires, comptes.</p>
···
411
411
section.wide table { font-size: 18px; }
412
412
section.part { background-color: #1a5fb4 !important; }
413
413
section.part h1, section.part h2, section.part p { color: #fff !important; }
414
414
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/authint.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="14" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
414
414
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/authint.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="14" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
415
415
h1 { color: #1a5fb4; }
416
416
h2 { color: #1a5fb4; }
417
417
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
429
429
section.wide table { font-size: 18px; }
430
430
section.part { background-color: #1a5fb4 !important; }
431
431
section.part h1, section.part h2, section.part p { color: #fff !important; }
432
432
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
432
432
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
433
433
<h2 id="authorized-integrations--authentification-entre-serveurs"><a href="https://forgejo.org/docs/latest/user/api/authorized-integrations/">Authorized Integrations</a> : authentification entre serveurs</h2>
434
434
<p>Forgejo v16, juillet 2026 : <strong>Authorized Integrations</strong>. La CI d'une instance<br />
435
435
peut désormais s'authentifier sur les dépôts d'une autre, sans secret partagé<br />
···
446
446
section.wide table { font-size: 18px; }
447
447
section.part { background-color: #1a5fb4 !important; }
448
448
section.part h1, section.part h2, section.part p { color: #fff !important; }
449
449
-
" lang="fr-FR" data-marpit-pagination="14" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
449
449
+
" lang="fr-FR" data-marpit-pagination="14" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
450
450
h1 { color: #1a5fb4; }
451
451
h2 { color: #1a5fb4; }
452
452
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
464
464
section.wide table { font-size: 18px; }
465
465
section.part { background-color: #1a5fb4 !important; }
466
466
section.part h1, section.part h2, section.part p { color: #fff !important; }
467
467
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
467
467
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
468
468
<h2 id="mise-en-place--ex%C3%A9cuteur-et-confiance">Mise en place : exécuteur et confiance</h2>
469
469
<p>Un runner Forgejo (<code>forgejo-runner</code>), en mode host et sans Docker, est<br />
470
470
enregistré sur f1. Côté f2, une intégration autorisée fait confiance aux JWT<br />
···
495
495
section.wide table { font-size: 18px; }
496
496
section.part { background-color: #1a5fb4 !important; }
497
497
section.part h1, section.part h2, section.part p { color: #fff !important; }
498
498
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
498
498
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
499
499
<h2 id="le-ci-de-f1-demande-un-jeton-oidc-%C3%A0-sa-propre-instance">Le CI de f1 demande un jeton OIDC à sa propre instance</h2>
500
500
<pre is="marp-pre" data-auto-scaling="downscale-only"><code>jobs:
501
501
inspect:
···
528
528
section.wide table { font-size: 18px; }
529
529
section.part { background-color: #1a5fb4 !important; }
530
530
section.part h1, section.part h2, section.part p { color: #fff !important; }
531
531
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
531
531
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
532
532
<h2 id="le-jeton-sert-directement-%C3%A0-sauthentifier-sur-f2">Le jeton sert directement à s'authentifier sur f2</h2>
533
533
<pre is="marp-pre" data-auto-scaling="downscale-only"><code>curl -X POST \
534
534
-H "Authorization: Bearer $JWT" \
···
558
558
section.wide table { font-size: 18px; }
559
559
section.part { background-color: #1a5fb4 !important; }
560
560
section.part h1, section.part h2, section.part p { color: #fff !important; }
561
561
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
561
561
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
562
562
<h2 id="r%C3%A9sultat--trois-actions-inter-instances-r%C3%A9ussies">Résultat : trois actions inter-instances réussies</h2>
563
563
<table>
564
564
<thead>
···
601
601
section.wide table { font-size: 18px; }
602
602
section.part { background-color: #1a5fb4 !important; }
603
603
section.part h1, section.part h2, section.part p { color: #fff !important; }
604
604
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
604
604
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
605
605
<h1 id="4-comparaison-avec-dautres-syst%C3%A8mes-d%C3%A9centralis%C3%A9s">4. Comparaison avec d"autres systèmes décentralisés</h1>
606
606
<h2 id="panorama-des-syst%C3%A8mes-compar%C3%A9s">Panorama des systèmes comparés</h2>
607
607
</section>
···
623
623
section.wide table { font-size: 18px; }
624
624
section.part { background-color: #1a5fb4 !important; }
625
625
section.part h1, section.part h2, section.part p { color: #fff !important; }
626
626
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/forgefed.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="20" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
626
626
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/forgefed.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="20" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
627
627
h1 { color: #1a5fb4; }
628
628
h2 { color: #1a5fb4; }
629
629
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
641
641
section.wide table { font-size: 18px; }
642
642
section.part { background-color: #1a5fb4 !important; }
643
643
section.part h1, section.part h2, section.part p { color: #fff !important; }
644
644
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
644
644
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
645
645
<h2 id="forgefed--une-sp%C3%A9cification-distincte-de-forgejo"><a href="https://forgefed.org">ForgeFed</a> : une spécification distincte de Forgejo</h2>
646
646
<p><strong>ForgeFed</strong> est une extension d'ActivityPub pensée pour les forges : dépôts,<br />
647
647
tickets, propositions, versions.</p>
···
658
658
section.wide table { font-size: 18px; }
659
659
section.part { background-color: #1a5fb4 !important; }
660
660
section.part h1, section.part h2, section.part p { color: #fff !important; }
661
661
-
" lang="fr-FR" data-marpit-pagination="20" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
661
661
+
" lang="fr-FR" data-marpit-pagination="20" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
662
662
h1 { color: #1a5fb4; }
663
663
h2 { color: #1a5fb4; }
664
664
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
676
676
section.wide table { font-size: 18px; }
677
677
section.part { background-color: #1a5fb4 !important; }
678
678
section.part h1, section.part h2, section.part p { color: #fff !important; }
679
679
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
679
679
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
680
680
<h2 id="comparaison-des-mod%C3%A8les-techniques">Comparaison des modèles techniques</h2>
681
681
<table>
682
682
<thead>
···
746
746
section.wide table { font-size: 18px; }
747
747
section.part { background-color: #1a5fb4 !important; }
748
748
section.part h1, section.part h2, section.part p { color: #fff !important; }
749
749
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/shipyard.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="74%" height="720"><section id="22" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
749
749
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/shipyard.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="74%" height="720"><section id="22" data-paginate="true" data-background-color="#fff" data-class="wide" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
750
750
h1 { color: #1a5fb4; }
751
751
h2 { color: #1a5fb4; }
752
752
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
764
764
section.wide table { font-size: 18px; }
765
765
section.part { background-color: #1a5fb4 !important; }
766
766
section.part h1, section.part h2, section.part p { color: #fff !important; }
767
767
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
767
767
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:26%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
768
768
<h2 id="comparaison-des-mod%C3%A8les-de-gouvernance">Comparaison des modèles de gouvernance</h2>
769
769
<table>
770
770
<thead>
···
808
808
section.wide table { font-size: 18px; }
809
809
section.part { background-color: #1a5fb4 !important; }
810
810
section.part h1, section.part h2, section.part p { color: #fff !important; }
811
811
-
" lang="fr-FR" class="wide" data-marpit-pagination="22" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
811
811
+
" lang="fr-FR" class="wide" data-marpit-pagination="22" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
812
812
h1 { color: #1a5fb4; }
813
813
h2 { color: #1a5fb4; }
814
814
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
826
826
section.wide table { font-size: 18px; }
827
827
section.part { background-color: #1a5fb4 !important; }
828
828
section.part h1, section.part h2, section.part p { color: #fff !important; }
829
829
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/bridgy.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="23" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
829
829
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/bridgy.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="23" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
830
830
h1 { color: #1a5fb4; }
831
831
h2 { color: #1a5fb4; }
832
832
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
844
844
section.wide table { font-size: 18px; }
845
845
section.part { background-color: #1a5fb4 !important; }
846
846
section.part h1, section.part h2, section.part p { color: #fff !important; }
847
847
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
847
847
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
848
848
<h2 id="ponts-entre-r%C3%A9seaux-sociaux-d%C3%A9centralis%C3%A9s">Ponts entre réseaux sociaux décentralisés</h2>
849
849
<p><strong><a href="https://fed.brid.gy">Bridgy Fed</a></strong> relie la fédiverse, Bluesky et le web<br />
850
850
ouvert dans les deux sens. <strong><a href="https://github.com/snarfed/granary">granary</a></strong>, en dessous traduit entre les formats.</p>
···
859
859
section.wide table { font-size: 18px; }
860
860
section.part { background-color: #1a5fb4 !important; }
861
861
section.part h1, section.part h2, section.part p { color: #fff !important; }
862
862
-
" lang="fr-FR" data-marpit-pagination="23" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
862
862
+
" lang="fr-FR" data-marpit-pagination="23" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
863
863
h1 { color: #1a5fb4; }
864
864
h2 { color: #1a5fb4; }
865
865
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
877
877
section.wide table { font-size: 18px; }
878
878
section.part { background-color: #1a5fb4 !important; }
879
879
section.part h1, section.part h2, section.part p { color: #fff !important; }
880
880
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
880
880
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
881
881
<h2 id="tentatives-dh%C3%A9bergement-de-git-sur-ipfs">Tentatives d'hébergement de git sur IPFS</h2>
882
882
<table>
883
883
<thead>
···
920
920
section.wide table { font-size: 18px; }
921
921
section.part { background-color: #1a5fb4 !important; }
922
922
section.part h1, section.part h2, section.part p { color: #fff !important; }
923
923
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/keyoxide.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="25" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
923
923
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/keyoxide.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="67%" height="720"><section id="25" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
924
924
h1 { color: #1a5fb4; }
925
925
h2 { color: #1a5fb4; }
926
926
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
938
938
section.wide table { font-size: 18px; }
939
939
section.part { background-color: #1a5fb4 !important; }
940
940
section.part h1, section.part h2, section.part p { color: #fff !important; }
941
941
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
941
941
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:33%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
942
942
<h2 id="portabilit%C3%A9-de-lidentit%C3%A9">Portabilité de l'identité</h2>
943
943
<p><strong><a href="https://keyoxide.org">Keyoxide</a></strong> produit des preuves d'identité<br />
944
944
décentralisées, déjà utilisées par Forgejo pour ses propres contacts.<br />
···
956
956
section.wide table { font-size: 18px; }
957
957
section.part { background-color: #1a5fb4 !important; }
958
958
section.part h1, section.part h2, section.part p { color: #fff !important; }
959
959
-
" lang="fr-FR" data-marpit-pagination="25" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
959
959
+
" lang="fr-FR" data-marpit-pagination="25" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
960
960
h1 { color: #1a5fb4; }
961
961
h2 { color: #1a5fb4; }
962
962
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
974
974
section.wide table { font-size: 18px; }
975
975
section.part { background-color: #1a5fb4 !important; }
976
976
section.part h1, section.part h2, section.part p { color: #fff !important; }
977
977
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
977
977
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
978
978
<h1 id="5-d%C3%A9monstration-pratique">5. Démonstration pratique</h1>
979
979
<h2 id="radicle-test%C3%A9-entre-r1-et-r2cyberwildorg">Radicle testé entre r1 et r2.cyberwild.org</h2>
980
980
</section>
···
996
996
section.wide table { font-size: 18px; }
997
997
section.part { background-color: #1a5fb4 !important; }
998
998
section.part h1, section.part h2, section.part p { color: #fff !important; }
999
999
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
999
999
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1000
1000
<h2 id="mise-en-place--identit%C3%A9s-et-connexion-directe-entre-pairs">Mise en place : identités et connexion directe entre pairs</h2>
1001
1001
<p>Radicle 1.10.3 est installé sur les deux nœuds. Pas de serveur central :<br />
1002
1002
chaque nœud a sa propre identité (clé Ed25519) et écoute en pair-à-pair.<br />
···
1027
1027
section.wide table { font-size: 18px; }
1028
1028
section.part { background-color: #1a5fb4 !important; }
1029
1029
section.part h1, section.part h2, section.part p { color: #fff !important; }
1030
1030
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1030
1030
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1031
1031
<h2 id="un-d%C3%A9p%C3%B4t-partag%C3%A9-sans-serveur">Un dépôt partagé, sans serveur</h2>
1032
1032
<pre is="marp-pre" data-auto-scaling="downscale-only"><code># sur r1 : publier un dépôt existant sur le réseau
1033
1033
rad init --name testrepo --default-branch master --public
···
1057
1057
section.wide table { font-size: 18px; }
1058
1058
section.part { background-color: #1a5fb4 !important; }
1059
1059
section.part h1, section.part h2, section.part p { color: #fff !important; }
1060
1060
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1060
1060
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1061
1061
<h2 id="un-patch-l%C3%A9quivalent-radicle-dune-proposition-de-modification">Un patch (l'équivalent Radicle d'une proposition de modification)</h2>
1062
1062
<pre is="marp-pre" data-auto-scaling="downscale-only"><code># sur r2 : proposer un changement
1063
1063
git checkout -b feature-dummy4
···
1089
1089
section.wide table { font-size: 18px; }
1090
1090
section.part { background-color: #1a5fb4 !important; }
1091
1091
section.part h1, section.part h2, section.part p { color: #fff !important; }
1092
1092
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1092
1092
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1093
1093
<h2 id="r%C3%A9sultat--f%C3%A9d%C3%A9ration-pair-%C3%A0-pair-sans-passerelle-http-obligatoire">Résultat : fédération pair-à-pair, sans passerelle HTTP obligatoire</h2>
1094
1094
<table>
1095
1095
<thead>
···
1137
1137
section.wide table { font-size: 18px; }
1138
1138
section.part { background-color: #1a5fb4 !important; }
1139
1139
section.part h1, section.part h2, section.part p { color: #fff !important; }
1140
1140
-
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="35">
1140
1140
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
1141
1141
<h1 id="6-faire-dialoguer-forgejo-et-radicle">6. Faire dialoguer Forgejo et Radicle</h1>
1142
1142
<h2 id="graft--un-miroir-entre-les-deux-mondes-d%C3%A9j%C3%A0-test%C3%A9s">graft : un miroir entre les deux mondes déjà testés</h2>
1143
1143
</section>
···
1159
1159
section.wide table { font-size: 18px; }
1160
1160
section.part { background-color: #1a5fb4 !important; }
1161
1161
section.part h1, section.part h2, section.part p { color: #fff !important; }
1162
1162
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1162
1162
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1163
1163
<h2 id="ce-que-fait-graft">Ce que fait <a href="https://github.com/jeanbaptiste/graft">graft</a></h2>
1164
1164
<p>Un démon qui synchronise, entre une instance Forgejo et un nœud Radicle : le code, les tickets, et les propositions de modification dans les deux sens.</p>
1165
1165
<p>Il tourne à intervalle régulier, garde son état dans une base SQLite locale, et<br />
···
1186
1186
section.wide table { font-size: 18px; }
1187
1187
section.part { background-color: #1a5fb4 !important; }
1188
1188
section.part h1, section.part h2, section.part p { color: #fff !important; }
1189
1189
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1189
1189
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1190
1190
<h2 id="relier-f1-et-r1">Relier f1 et r1</h2>
1191
1191
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-yaml"><span class="hljs-attr">sync_interval:</span> <span class="hljs-string">5m</span>
1192
1192
<span class="hljs-attr">state_db:</span> <span class="hljs-string">/var/lib/graft/state.db</span>
···
1228
1228
section.wide table { font-size: 18px; }
1229
1229
section.part { background-color: #1a5fb4 !important; }
1230
1230
section.part h1, section.part h2, section.part p { color: #fff !important; }
1231
1231
-
;background-color:#fff;background-image:none;" data-marpit-pagination-total="35">
1231
1231
+
;background-color:#fff;background-image:none;" data-marpit-pagination-total="42">
1232
1232
<h2 id="ce-qui-se-synchronise-et-limites-actuelles">Ce qui se synchronise et limites actuelles</h2>
1233
1233
<ul>
1234
1234
<li><strong>Code</strong> : la branche par défaut, uniquement en avance rapide.</li>
···
1243
1243
<p>Ce que ça ne résout pas : l'identité reste double, un compte Forgejo d'un<br />
1244
1244
côté, une clé Radicle de l'autre.</p>
1245
1245
</section>
1246
1246
+
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="35" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1247
1247
+
h1 { color: #1a5fb4; }
1248
1248
+
h2 { color: #1a5fb4; }
1249
1249
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1250
1250
+
table { font-size: 21px; }
1251
1251
+
code { font-size: 18px; }
1252
1252
+
section.wide table { font-size: 18px; }
1253
1253
+
section.part { background-color: #1a5fb4 !important; }
1254
1254
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1255
1255
+
" lang="fr-FR" class="lead part" data-marpit-pagination="35" style="--paginate:true;--background-color:#1a5fb4;--class:lead part;--color:#ffffff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1256
1256
+
h1 { color: #1a5fb4; }
1257
1257
+
h2 { color: #1a5fb4; }
1258
1258
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1259
1259
+
table { font-size: 21px; }
1260
1260
+
code { font-size: 18px; }
1261
1261
+
section.wide table { font-size: 18px; }
1262
1262
+
section.part { background-color: #1a5fb4 !important; }
1263
1263
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1264
1264
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
1265
1265
+
<h1 id="7-fonctions-sociales-de-graft">7. Fonctions sociales de graft</h1>
1266
1266
+
<h2 id="un-tableau-de-bord-et-des-ponts-vers-discourse-zulip-tangled">Un tableau de bord, et des ponts vers Discourse, Zulip, Tangled</h2>
1267
1267
+
</section>
1246
1268
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1247
1269
h1 { color: #1a5fb4; }
1248
1270
h2 { color: #1a5fb4; }
···
1252
1274
section.wide table { font-size: 18px; }
1253
1275
section.part { background-color: #1a5fb4 !important; }
1254
1276
section.part h1, section.part h2, section.part p { color: #fff !important; }
1255
1255
-
" lang="fr-FR" data-marpit-pagination="35" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1277
1277
+
" lang="fr-FR" data-marpit-pagination="36" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1256
1278
h1 { color: #1a5fb4; }
1257
1279
h2 { color: #1a5fb4; }
1258
1280
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
1261
1283
section.wide table { font-size: 18px; }
1262
1284
section.part { background-color: #1a5fb4 !important; }
1263
1285
section.part h1, section.part h2, section.part p { color: #fff !important; }
1264
1264
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="35" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/radicle.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="72%" height="720"><section id="35" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1286
1286
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:40%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/graft_dashboard.png");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="60%" height="720"><section id="36" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1265
1287
h1 { color: #1a5fb4; }
1266
1288
h2 { color: #1a5fb4; }
1267
1289
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
1270
1292
section.wide table { font-size: 18px; }
1271
1293
section.part { background-color: #1a5fb4 !important; }
1272
1294
section.part h1, section.part h2, section.part p { color: #fff !important; }
1273
1273
-
" lang="fr-FR" data-marpit-pagination="35" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1295
1295
+
" lang="fr-FR" data-marpit-pagination="36" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1274
1296
h1 { color: #1a5fb4; }
1275
1297
h2 { color: #1a5fb4; }
1276
1298
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
···
1279
1301
section.wide table { font-size: 18px; }
1280
1302
section.part { background-color: #1a5fb4 !important; }
1281
1303
section.part h1, section.part h2, section.part p { color: #fff !important; }
1282
1282
-
;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="35" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1304
1304
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:40%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1305
1305
+
<h2 id="le-tableau-de-bord-graft">Le tableau de bord graft</h2>
1306
1306
+
<p>Une page HTML unique, régénérée à chaque cycle de synchronisation : la liste<br />
1307
1307
+
des dépôts, leur nombre de miroirs, et un flux d'activité récente (les 10<br />
1308
1308
+
derniers commits, tickets, patches et commentaires).</p>
1309
1309
+
<p>Volontairement plat : pas de base de données à interroger, pas<br />
1310
1310
+
d'authentification, juste un fichier HTML servi par le démon lui-même.</p>
1311
1311
+
</section>
1312
1312
+
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1313
1313
+
h1 { color: #1a5fb4; }
1314
1314
+
h2 { color: #1a5fb4; }
1315
1315
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1316
1316
+
table { font-size: 21px; }
1317
1317
+
code { font-size: 18px; }
1318
1318
+
section.wide table { font-size: 18px; }
1319
1319
+
section.part { background-color: #1a5fb4 !important; }
1320
1320
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1321
1321
+
" lang="fr-FR" data-marpit-pagination="36" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1322
1322
+
h1 { color: #1a5fb4; }
1323
1323
+
h2 { color: #1a5fb4; }
1324
1324
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1325
1325
+
table { font-size: 21px; }
1326
1326
+
code { font-size: 18px; }
1327
1327
+
section.wide table { font-size: 18px; }
1328
1328
+
section.part { background-color: #1a5fb4 !important; }
1329
1329
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1330
1330
+
" lang="fr-FR" data-marpit-pagination="37" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1331
1331
+
h1 { color: #1a5fb4; }
1332
1332
+
h2 { color: #1a5fb4; }
1333
1333
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1334
1334
+
table { font-size: 21px; }
1335
1335
+
code { font-size: 18px; }
1336
1336
+
section.wide table { font-size: 18px; }
1337
1337
+
section.part { background-color: #1a5fb4 !important; }
1338
1338
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1339
1339
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/graft_social.png");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="62%" height="720"><section id="37" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1340
1340
+
h1 { color: #1a5fb4; }
1341
1341
+
h2 { color: #1a5fb4; }
1342
1342
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1343
1343
+
table { font-size: 21px; }
1344
1344
+
code { font-size: 18px; }
1345
1345
+
section.wide table { font-size: 18px; }
1346
1346
+
section.part { background-color: #1a5fb4 !important; }
1347
1347
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1348
1348
+
" lang="fr-FR" data-marpit-pagination="37" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1349
1349
+
h1 { color: #1a5fb4; }
1350
1350
+
h2 { color: #1a5fb4; }
1351
1351
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1352
1352
+
table { font-size: 21px; }
1353
1353
+
code { font-size: 18px; }
1354
1354
+
section.wide table { font-size: 18px; }
1355
1355
+
section.part { background-color: #1a5fb4 !important; }
1356
1356
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1357
1357
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:38%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1358
1358
+
<h2 id="une-identit%C3%A9-f%C3%A9diverse-par-d%C3%A9p%C3%B4t">Une identité fédiverse par dépôt</h2>
1359
1359
+
<p>Chaque série synchronisée (<code>constitution</code>, <code>federation-x</code>, <code>graft-source</code>...)<br />
1360
1360
+
obtient sa propre identité ActivityPub : <code>@série@graft.cyberwild.org</code>, avec<br />
1361
1361
+
WebFinger, Actor et Outbox interrogeables.</p>
1362
1362
+
<p>Une entrée AT Proto / Bluesky par série existe aussi dans le modèle, prête à<br />
1363
1363
+
être activée dès qu'une clé d'app y est associée — « not configured » pour<br />
1364
1364
+
l'instant.</p>
1365
1365
+
</section>
1366
1366
+
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1367
1367
+
h1 { color: #1a5fb4; }
1368
1368
+
h2 { color: #1a5fb4; }
1369
1369
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1370
1370
+
table { font-size: 21px; }
1371
1371
+
code { font-size: 18px; }
1372
1372
+
section.wide table { font-size: 18px; }
1373
1373
+
section.part { background-color: #1a5fb4 !important; }
1374
1374
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1375
1375
+
" lang="fr-FR" data-marpit-pagination="37" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="38" data-paginate="true" data-background-color="#1a5fb4" data-class="lead part" data-color="#ffffff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1376
1376
+
h1 { color: #1a5fb4; }
1377
1377
+
h2 { color: #1a5fb4; }
1378
1378
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1379
1379
+
table { font-size: 21px; }
1380
1380
+
code { font-size: 18px; }
1381
1381
+
section.wide table { font-size: 18px; }
1382
1382
+
section.part { background-color: #1a5fb4 !important; }
1383
1383
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1384
1384
+
" lang="fr-FR" class="lead part" data-marpit-pagination="38" style="--paginate:true;--background-color:#1a5fb4;--class:lead part;--color:#ffffff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1385
1385
+
h1 { color: #1a5fb4; }
1386
1386
+
h2 { color: #1a5fb4; }
1387
1387
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1388
1388
+
table { font-size: 21px; }
1389
1389
+
code { font-size: 18px; }
1390
1390
+
section.wide table { font-size: 18px; }
1391
1391
+
section.part { background-color: #1a5fb4 !important; }
1392
1392
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1393
1393
+
;color:#ffffff;background-color:#1a5fb4;background-image:none;" data-marpit-pagination-total="42">
1394
1394
+
<h1 id="ponts-vers-discourse-zulip-et-tangled">Ponts vers Discourse, Zulip et Tangled</h1>
1395
1395
+
<h2 id="faire-vivre-lactivit%C3%A9-de-graft-ailleurs-que-sur-une-forge">Faire vivre l'activité de graft ailleurs que sur une forge</h2>
1396
1396
+
</section>
1397
1397
+
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1398
1398
+
h1 { color: #1a5fb4; }
1399
1399
+
h2 { color: #1a5fb4; }
1400
1400
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1401
1401
+
table { font-size: 21px; }
1402
1402
+
code { font-size: 18px; }
1403
1403
+
section.wide table { font-size: 18px; }
1404
1404
+
section.part { background-color: #1a5fb4 !important; }
1405
1405
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1406
1406
+
" lang="fr-FR" data-marpit-pagination="39" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1407
1407
+
h1 { color: #1a5fb4; }
1408
1408
+
h2 { color: #1a5fb4; }
1409
1409
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1410
1410
+
table { font-size: 21px; }
1411
1411
+
code { font-size: 18px; }
1412
1412
+
section.wide table { font-size: 18px; }
1413
1413
+
section.part { background-color: #1a5fb4 !important; }
1414
1414
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1415
1415
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/discourse_bridge.png");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="39" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1416
1416
+
h1 { color: #1a5fb4; }
1417
1417
+
h2 { color: #1a5fb4; }
1418
1418
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1419
1419
+
table { font-size: 21px; }
1420
1420
+
code { font-size: 18px; }
1421
1421
+
section.wide table { font-size: 18px; }
1422
1422
+
section.part { background-color: #1a5fb4 !important; }
1423
1423
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1424
1424
+
" lang="fr-FR" data-marpit-pagination="39" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1425
1425
+
h1 { color: #1a5fb4; }
1426
1426
+
h2 { color: #1a5fb4; }
1427
1427
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1428
1428
+
table { font-size: 21px; }
1429
1429
+
code { font-size: 18px; }
1430
1430
+
section.wide table { font-size: 18px; }
1431
1431
+
section.part { background-color: #1a5fb4 !important; }
1432
1432
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1433
1433
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1434
1434
+
<h2 id="pont-vers-discourse">Pont vers Discourse</h2>
1435
1435
+
<p>Un démon séparé (<code>graft-discourse</code>), branché sur le flux ActivityPub de<br />
1436
1436
+
graft : chaque série synchronisée devient une catégorie Discourse<br />
1437
1437
+
(« Federated Repos »), chaque ticket ou patch un sujet.</p>
1438
1438
+
<p>Les réponses sur Discourse repartent en commentaire vers le ticket<br />
1439
1439
+
Forgejo/Radicle d'origine, marquées « via Fediverse ». Le pont ignore ses<br />
1440
1440
+
propres messages pour ne pas boucler.</p>
1441
1441
+
</section>
1442
1442
+
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1443
1443
+
h1 { color: #1a5fb4; }
1444
1444
+
h2 { color: #1a5fb4; }
1445
1445
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1446
1446
+
table { font-size: 21px; }
1447
1447
+
code { font-size: 18px; }
1448
1448
+
section.wide table { font-size: 18px; }
1449
1449
+
section.part { background-color: #1a5fb4 !important; }
1450
1450
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1451
1451
+
" lang="fr-FR" data-marpit-pagination="39" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1452
1452
+
h1 { color: #1a5fb4; }
1453
1453
+
h2 { color: #1a5fb4; }
1454
1454
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1455
1455
+
table { font-size: 21px; }
1456
1456
+
code { font-size: 18px; }
1457
1457
+
section.wide table { font-size: 18px; }
1458
1458
+
section.part { background-color: #1a5fb4 !important; }
1459
1459
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1460
1460
+
" lang="fr-FR" data-marpit-pagination="40" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1461
1461
+
h1 { color: #1a5fb4; }
1462
1462
+
h2 { color: #1a5fb4; }
1463
1463
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1464
1464
+
table { font-size: 21px; }
1465
1465
+
code { font-size: 18px; }
1466
1466
+
section.wide table { font-size: 18px; }
1467
1467
+
section.part { background-color: #1a5fb4 !important; }
1468
1468
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1469
1469
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/zulip_bridge.png");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="40" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1470
1470
+
h1 { color: #1a5fb4; }
1471
1471
+
h2 { color: #1a5fb4; }
1472
1472
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1473
1473
+
table { font-size: 21px; }
1474
1474
+
code { font-size: 18px; }
1475
1475
+
section.wide table { font-size: 18px; }
1476
1476
+
section.part { background-color: #1a5fb4 !important; }
1477
1477
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1478
1478
+
" lang="fr-FR" data-marpit-pagination="40" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1479
1479
+
h1 { color: #1a5fb4; }
1480
1480
+
h2 { color: #1a5fb4; }
1481
1481
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1482
1482
+
table { font-size: 21px; }
1483
1483
+
code { font-size: 18px; }
1484
1484
+
section.wide table { font-size: 18px; }
1485
1485
+
section.part { background-color: #1a5fb4 !important; }
1486
1486
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1487
1487
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1488
1488
+
<h2 id="pont-vers-zulip">Pont vers Zulip</h2>
1489
1489
+
<p>Même principe, décliné pour Zulip (<code>graft-zulip</code>) : un canal par série<br />
1490
1490
+
(ici <code>constitution</code>), un fil (<em>topic</em>) par ticket. Zulip distingue le canal<br />
1491
1491
+
et le sujet là où Discourse n'a qu'une catégorie et un sujet — les deux<br />
1492
1492
+
démons partagent l'essentiel de leur code, seule la couche protocole change.</p>
1493
1493
+
</section>
1494
1494
+
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1495
1495
+
h1 { color: #1a5fb4; }
1496
1496
+
h2 { color: #1a5fb4; }
1497
1497
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1498
1498
+
table { font-size: 21px; }
1499
1499
+
code { font-size: 18px; }
1500
1500
+
section.wide table { font-size: 18px; }
1501
1501
+
section.part { background-color: #1a5fb4 !important; }
1502
1502
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1503
1503
+
" lang="fr-FR" data-marpit-pagination="40" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1504
1504
+
h1 { color: #1a5fb4; }
1505
1505
+
h2 { color: #1a5fb4; }
1506
1506
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1507
1507
+
table { font-size: 21px; }
1508
1508
+
code { font-size: 18px; }
1509
1509
+
section.wide table { font-size: 18px; }
1510
1510
+
section.part { background-color: #1a5fb4 !important; }
1511
1511
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1512
1512
+
" lang="fr-FR" data-marpit-pagination="41" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1513
1513
+
h1 { color: #1a5fb4; }
1514
1514
+
h2 { color: #1a5fb4; }
1515
1515
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1516
1516
+
table { font-size: 21px; }
1517
1517
+
code { font-size: 18px; }
1518
1518
+
section.wide table { font-size: 18px; }
1519
1519
+
section.part { background-color: #1a5fb4 !important; }
1520
1520
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1521
1521
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/tangled_bridge.png");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="65%" height="720"><section id="41" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1522
1522
+
h1 { color: #1a5fb4; }
1523
1523
+
h2 { color: #1a5fb4; }
1524
1524
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1525
1525
+
table { font-size: 21px; }
1526
1526
+
code { font-size: 18px; }
1527
1527
+
section.wide table { font-size: 18px; }
1528
1528
+
section.part { background-color: #1a5fb4 !important; }
1529
1529
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1530
1530
+
" lang="fr-FR" data-marpit-pagination="41" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1531
1531
+
h1 { color: #1a5fb4; }
1532
1532
+
h2 { color: #1a5fb4; }
1533
1533
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1534
1534
+
table { font-size: 21px; }
1535
1535
+
code { font-size: 18px; }
1536
1536
+
section.wide table { font-size: 18px; }
1537
1537
+
section.part { background-color: #1a5fb4 !important; }
1538
1538
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1539
1539
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:35%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1540
1540
+
<h2 id="vers-tangled-et-at-proto">Vers Tangled et AT Proto</h2>
1541
1541
+
<p>Tangled (une forge Git construite sur AT Proto/Bluesky) demande une identité<br />
1542
1542
+
signée par un PDS pour enregistrer un serveur Git (<em>knot</em>). Un PDS a été<br />
1543
1543
+
installé pour produire ce DID, <code>tangled.cyberwild.org</code> a été enregistré et<br />
1544
1544
+
vérifié : la prochaine étape naturelle est d'y raccrocher les mêmes séries<br />
1545
1545
+
que sur Forgejo et Radicle.</p>
1546
1546
+
</section>
1547
1547
+
</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1548
1548
+
h1 { color: #1a5fb4; }
1549
1549
+
h2 { color: #1a5fb4; }
1550
1550
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1551
1551
+
table { font-size: 21px; }
1552
1552
+
code { font-size: 18px; }
1553
1553
+
section.wide table { font-size: 18px; }
1554
1554
+
section.part { background-color: #1a5fb4 !important; }
1555
1555
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1556
1556
+
" lang="fr-FR" data-marpit-pagination="41" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1557
1557
+
h1 { color: #1a5fb4; }
1558
1558
+
h2 { color: #1a5fb4; }
1559
1559
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1560
1560
+
table { font-size: 21px; }
1561
1561
+
code { font-size: 18px; }
1562
1562
+
section.wide table { font-size: 18px; }
1563
1563
+
section.part { background-color: #1a5fb4 !important; }
1564
1564
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1565
1565
+
" lang="fr-FR" data-marpit-pagination="42" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1566
1566
+
h1 { color: #1a5fb4; }
1567
1567
+
h2 { color: #1a5fb4; }
1568
1568
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1569
1569
+
table { font-size: 21px; }
1570
1570
+
code { font-size: 18px; }
1571
1571
+
section.wide table { font-size: 18px; }
1572
1572
+
section.part { background-color: #1a5fb4 !important; }
1573
1573
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1574
1574
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="42" data-marpit-advanced-background="background" data-marpit-advanced-background-split="right"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("img/radicle.jpg");background-size:contain;"></figure></div></section></foreignObject><foreignObject width="72%" height="720"><section id="42" data-paginate="true" data-background-color="#fff" data-theme="gaia" data-lang="fr-FR" data-style="section { font-size: 25px; }
1575
1575
+
h1 { color: #1a5fb4; }
1576
1576
+
h2 { color: #1a5fb4; }
1577
1577
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1578
1578
+
table { font-size: 21px; }
1579
1579
+
code { font-size: 18px; }
1580
1580
+
section.wide table { font-size: 18px; }
1581
1581
+
section.part { background-color: #1a5fb4 !important; }
1582
1582
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1583
1583
+
" lang="fr-FR" data-marpit-pagination="42" style="--paginate:true;--background-color:#fff;--theme:gaia;--lang:fr-FR;--style:section { font-size: 25px; }
1584
1584
+
h1 { color: #1a5fb4; }
1585
1585
+
h2 { color: #1a5fb4; }
1586
1586
+
h3 { color: #555; font-size: 24px; margin-bottom: 0.2em; }
1587
1587
+
table { font-size: 21px; }
1588
1588
+
code { font-size: 18px; }
1589
1589
+
section.wide table { font-size: 18px; }
1590
1590
+
section.part { background-color: #1a5fb4 !important; }
1591
1591
+
section.part h1, section.part h2, section.part p { color: #fff !important; }
1592
1592
+
;background-color:#fff;background-image:none;--marpit-advanced-background-split:28%;" data-marpit-pagination-total="42" data-marpit-advanced-background="content" data-marpit-advanced-background-split="right">
1283
1593
<h2 id="synth%C3%A8se-et-questions">Synthèse et questions</h2>
1284
1594
<p><strong>Discussion :</strong></p>
1285
1595
<ul>
···
1299
1609
section.wide table { font-size: 18px; }
1300
1610
section.part { background-color: #1a5fb4 !important; }
1301
1611
section.part h1, section.part h2, section.part p { color: #fff !important; }
1302
1302
-
" lang="fr-FR" data-marpit-pagination="35" style="" data-marpit-pagination-total="35" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg></div><script>/*!! License: https://unpkg.com/@marp-team/marp-cli@4.5.1/lib/bespoke.js.LICENSE.txt */
1612
1612
+
" lang="fr-FR" data-marpit-pagination="42" style="" data-marpit-pagination-total="42" data-marpit-advanced-background="pseudo" data-marpit-advanced-background-split="right"></section></foreignObject></svg></div><script>/*!! License: https://unpkg.com/@marp-team/marp-cli@4.5.1/lib/bespoke.js.LICENSE.txt */
1303
1613
!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t,n,r=(n||(n=1,t={from:function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),o=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,function(e){return"SCRIPT"!==e.nodeName}),i={},a=function(e,t){return(t=t||{}).index=o.indexOf(e),t.slide=e,t},s=function(e,t){i[e]=(i[e]||[]).filter(function(e){return e!==t})},l=function(e,t){return(i[e]||[]).reduce(function(e,n){return e&&!1!==n(t)},!0)},c=function(e,t){o[e]&&(n&&l("deactivate",a(n,t)),n=o[e],l("activate",a(n,t)))},d=function(e,t){var r=o.indexOf(n)+e;l(e>0?"next":"prev",a(n,t))&&c(r,t)},u={off:s,on:function(e,t){return(i[e]||(i[e]=[])).push(t),s.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return o.indexOf(n);l("slide",a(o[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:o,destroy:function(e){l("destroy",a(n,e)),i={}}};return(t||[]).forEach(function(e){e(u)}),n||c(0),u}}),t),o=e(r);const i=document.body,a=(...e)=>history.replaceState(...e),s="",l="presenter",c="next",d="overview",u=["",l,d,c],f="bespoke-marp-",m=`data-${f}`,g=(e,{protocol:t,host:n,pathname:r,hash:o}=location)=>{const i=e.toString();return`${t}//${n}${r}${i?"?":""}${i}${o}`},p=()=>i.dataset.bespokeView,v=e=>new URLSearchParams(location.search).get(e),h=(e,t={})=>{const n={location,setter:a,...t},r=new URLSearchParams(n.location.search);for(const t of Object.keys(e)){const n=e[t];"string"==typeof n?r.set(t,n):r.delete(t)}try{n.setter({...window.history.state??{}},"",g(r,n.location))}catch(e){console.error(e)}},w=(()=>{const e="bespoke-marp";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}})(),y=e=>{try{return localStorage.getItem(e)}catch{return null}},b=(e,t)=>{try{return localStorage.setItem(e,t),!0}catch{return!1}},k=e=>{try{return localStorage.removeItem(e),!0}catch{return!1}},x=(e,t)=>{const n="aria-hidden";t?e.setAttribute(n,"true"):e.removeAttribute(n)},E=e=>{e.parent.classList.add(`${f}parent`),e.slides.forEach(e=>e.classList.add(`${f}slide`)),e.on("activate",t=>{const n=`${f}active`,r=t.slide,o=r.classList,i=!o.contains(n);if(e.slides.forEach(e=>{e.classList.remove(n),x(e,!0)}),o.add(n),x(r,!1),i){const e=`${n}-ready`;o.add(e),document.body.clientHeight,o.remove(e)}})},$=e=>{let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map(e=>[null,...e.querySelectorAll("[data-marpit-fragment]")])});const r=r=>void 0!==e.fragments[t][n+r],o=(r,o)=>{t=r,n=o,e.fragments.forEach((e,t)=>{e.forEach((e,n)=>{if(null==e)return;const i=t<r||t===r&&n<=o;e.setAttribute(`${m}fragment`,(i?"":"in")+"active");const a=`${m}current-fragment`;t===r&&n===o?e.setAttribute(a,"current"):e.removeAttribute(a)})}),e.fragmentIndex=o;const i={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:o};e.fire("fragment",i)};e.on("next",({fragment:i=!0})=>{if(i){if(r(1))return o(t,n+1),!1;const i=t+1;e.fragments[i]&&o(i,0)}else{const r=e.fragments[t].length;if(n+1<r)return o(t,r-1),!1;const i=e.fragments[t+1];i&&o(t+1,i.length-1)}}),e.on("prev",({fragment:i=!0})=>{if(r(-1)&&i)return o(t,n-1),!1;const a=t-1;e.fragments[a]&&o(a,e.fragments[a].length-1)}),e.on("slide",({index:t,fragment:n})=>{let r=0;if(void 0!==n){const o=e.fragments[t];if(o){const{length:e}=o;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}o(t,r)}),o(0,0)},L=document,S=()=>!(!L.fullscreenEnabled&&!L.webkitFullscreenEnabled),P=()=>!(!L.fullscreenElement&&!L.webkitFullscreenElement),_=e=>{e.fullscreen=()=>{S()&&(async()=>{P()?(L.exitFullscreen||L.webkitExitFullscreen)?.call(L):((e=L.body)=>{(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)})()})()},document.addEventListener("keydown",t=>{"f"!==t.key&&"F11"!==t.key||t.altKey||t.ctrlKey||t.metaKey||!S()||(e.fullscreen(),t.preventDefault())})},O=`${f}inactive`,T=(e=2e3)=>({parent:t,fire:n})=>{const r=t.classList,o=e=>n(`marp-${e?"":"in"}active`);let i;const a=()=>{i&&clearTimeout(i),i=setTimeout(()=>{r.add(O),o()},e),r.contains(O)&&(r.remove(O),o(!0))};for(const e of["mousedown","mousemove","touchend"])document.addEventListener(e,a);setTimeout(a,0)},I=["AUDIO","BUTTON","INPUT","SELECT","TEXTAREA","VIDEO"],M=e=>{e.parent.addEventListener("keydown",e=>{if(!e.target)return;const t=e.target;(I.includes(t.nodeName)||"true"===t.contentEditable)&&e.stopPropagation()})},A=e=>{window.addEventListener("load",()=>{for(const t of e.slides){const e=t.querySelector("marp-auto-scaling, [data-auto-scaling], [data-marp-fitting]");t.setAttribute(`${m}load`,e?"":"hideable")}})},C=({interval:e=250}={})=>t=>{document.addEventListener("keydown",e=>{if(" "===e.key&&e.shiftKey)t.prev();else if("ArrowLeft"===e.key||"ArrowUp"===e.key||"PageUp"===e.key)t.prev({fragment:!e.shiftKey});else if(" "!==e.key||e.shiftKey)if("ArrowRight"===e.key||"ArrowDown"===e.key||"PageDown"===e.key)t.next({fragment:!e.shiftKey});else if("End"===e.key)t.slide(t.slides.length-1,{fragment:-1});else{if("Home"!==e.key)return;t.slide(0)}else t.next();e.preventDefault()});let n,r,o=0;t.parent.addEventListener("wheel",i=>{let a=!1;const s=(e,t)=>{e&&(a=a||((e,t)=>((e,t)=>{const n="X"===t?"Width":"Height";return e[`client${n}`]<e[`scroll${n}`]})(e,t)&&((e,t)=>{const{overflow:n}=e,r=e[`overflow${t}`];return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r})(getComputedStyle(e),t))(e,t)),e?.parentElement&&s(e.parentElement,t)};if(0!==i.deltaX&&s(i.target,"X"),0!==i.deltaY&&s(i.target,"Y"),a)return;i.preventDefault();const l=Math.sqrt(i.deltaX**2+i.deltaY**2);if(void 0!==i.wheelDelta){if(void 0===i.webkitForce&&Math.abs(i.wheelDelta)<40)return;if(i.deltaMode===i.DOM_DELTA_PIXEL&&l<4)return}else if(i.deltaMode===i.DOM_DELTA_PIXEL&&l<12)return;r&&clearTimeout(r),r=setTimeout(()=>{n=0},e);const c=Date.now()-o<e,d=l<=n;if(n=l,c||d)return;let u;(i.deltaX>0||i.deltaY>0)&&(u="next"),(i.deltaX<0||i.deltaY<0)&&(u="prev"),u&&(t[u](),o=Date.now())})},D=(e=`.${f}osc`)=>{const t=document.querySelector(e);if(!t)return()=>{};const n=(e,n)=>{t.querySelectorAll(`[${m}osc=${JSON.stringify(e)}]`).forEach(n)};if(S()||n("fullscreen",e=>e.style.display="none"),!w){const e=(e,t)=>{e.disabled=!0,e.title=`${t} is disabled due to restricted localStorage.`};n("presenter",t=>e(t,"Presenter view")),n("overview",t=>e(t,"Overview view"))}return e=>{t.addEventListener("click",t=>{if(t.target instanceof HTMLElement){const{bespokeMarpOsc:n}=t.target.dataset;n&&t.target.blur();const r={fragment:!t.shiftKey};"next"===n?e.next(r):"prev"===n?e.prev(r):"fullscreen"===n?e?.fullscreen():"presenter"===n?e.openPresenterView():"overview"===n&&e.toggleOverviewView()}}),e.parent.appendChild(t),e.on("activate",({index:t})=>{n("page",n=>n.textContent=`Page ${t+1} of ${e.slides.length}`)}),e.on("fragment",({index:t,fragments:r,fragmentIndex:o})=>{n("prev",e=>e.disabled=0===t&&0===o),n("next",n=>n.disabled=t===e.slides.length-1&&o===r.length-1)}),e.on("marp-active",()=>x(t,!1)),e.on("marp-inactive",()=>x(t,!0)),S()&&(e=>{for(const t of["","webkit"])L.addEventListener(t+"fullscreenchange",e)})(()=>n("fullscreen",e=>e.classList.toggle("exit",S()&&P())))}},N=e=>{if(e.syncKey&&"string"==typeof e.syncKey)return!0;throw new Error("The current instance of Bespoke.js is incompatible with Marp bespoke sync plugin.")},B=(e={})=>{const t=e.key||window.history.state?.marpBespokeSyncKey||Math.random().toString(36).slice(2),n=`bespoke-marp-sync-${t}`;var r;r={marpBespokeSyncKey:t},h({},{setter:(e,...t)=>a({...e,...r},...t)});const o=()=>{const e=y(n);return e?JSON.parse(e):Object.create(null)},i=e=>{const t=o(),r={...t,...e(t)};return b(n,JSON.stringify(r)),r},s=()=>{window.removeEventListener("pageshow",s),i(e=>({reference:(e.reference||0)+1}))};return e=>{s(),Object.defineProperty(e,"syncKey",{value:t,enumerable:!0});let r=!0;setTimeout(()=>{e.on("fragment",e=>{r&&i(()=>({index:e.index,fragmentIndex:e.fragmentIndex}))})},0),window.addEventListener("storage",t=>{if(t.key===n&&t.oldValue&&t.newValue){const n=JSON.parse(t.oldValue),o=JSON.parse(t.newValue);if(n.index!==o.index||n.fragmentIndex!==o.fragmentIndex)try{r=!1,e.slide(o.index,{fragment:o.fragmentIndex,forSync:!0})}finally{r=!0}}});const a=()=>{const{reference:e}=o();void 0===e||e<=1?k(n):i(()=>({reference:e-1}))};window.addEventListener("pagehide",e=>{e.persisted&&window.addEventListener("pageshow",s),a()}),e.on("destroy",a)}},K=e=>{w&&document.addEventListener("keydown",t=>{("o"!==t.key||t.altKey||t.ctrlKey||t.metaKey)&&"Escape"!==t.key||(t.preventDefault(),e())})};let q=null;const V=({closeOnSelect:e=!0}={})=>t=>{N(t);const n=n=>{const r=(()=>{if(!q||!q.isConnected){q=document.createElement("div"),q.className=`${f}overview`,q.inert=!0;const n=document.createElement("iframe");n.src=(()=>{const n=new URLSearchParams(location.search);return n.set("view","overview"),n.set("sync",t.syncKey),e&&n.set("closeOnSelect","1"),g(n)})(),q.append(n),document.body.append(q)}return q})(),o=n??!r.dataset.open;setTimeout(()=>{if(r.dataset.open=o?"1":"",r.inert=!o,t.skipTransition=o,o){const e=r.querySelector("iframe");try{e?.contentWindow?.focus()}catch{e?.focus()}}else window.focus()},0)};Object.defineProperties(t,{toggleOverviewView:{enumerable:!0,value:n}}),window.addEventListener("message",e=>{e.origin===window.origin&&"closeOverview"===e.data&&n(!1)}),K(n)},j=e=>{const{title:t}=document;document.title="[Overview]"+(t?` - ${t}`:"");const n=!!v("closeOnSelect"),r=()=>{window.parent.postMessage("closeOverview","null"===window.origin?"*":window.origin)};if(e.slides.forEach((t,o)=>{t.tabIndex=0;const i=()=>{e.slide(o,{fragment:-1}),n&&r()};t.addEventListener("click",i),t.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),i())})}),window.addEventListener("keydown",t=>{const n=e.slide(),r=t=>{const r=t=>{const n=e.slides[t].getBoundingClientRect();return[Math.round((n.left+n.right)/2),Math.round((n.top+n.bottom)/2)]};let o=null,i=n;do{const e=r(i);if(o){if(Math.abs(e[0]-o[0])<2)return i}else o=e;i+=t}while(i>=0&&i<e.slides.length);return n};if("ArrowLeft"===t.key)e.slide(Math.max(n-1,0),{fragment:-1});else if("ArrowRight"===t.key)e.slide(Math.min(n+1,e.slides.length-1),{fragment:-1});else if("ArrowUp"===t.key)e.slide(r(-1),{fragment:-1});else if("ArrowDown"===t.key)e.slide(r(1),{fragment:-1});else if("End"===t.key)e.slide(e.slides.length-1,{fragment:-1});else{if("Home"!==t.key)return;e.slide(0,{fragment:-1})}t.preventDefault();const o=e.slide();e.slides[o]?.focus?.(),e.slides[o]?.scrollIntoView?.({behavior:"smooth",block:"nearest"})}),e.on("slide",({index:t})=>{e.slides[t]?.scrollIntoView?.({behavior:"smooth",block:"nearest"})}),window.parent!==window){K(r);const e=document.createElement("header");e.className=`${f}overview-header`;const t=document.createElement("button");t.className=`${f}overview-close`,t.type="button",t.title="Close overview",t.textContent=t.title,t.addEventListener("click",r),e.append(t),document.body.prepend(e)}},F=()=>{const e=p();return{[s]:V(),[l]:V({closeOnSelect:!1}),[d]:j}[e]},U=e=>{window.addEventListener("message",t=>{if(t.origin!==window.origin)return;const[n,r]=t.data.split(":");if("navigate"===n){const[t,n]=r.split(",");let o=Number.parseInt(t,10),i=Number.parseInt(n,10)+1;i>=e.fragments[o].length&&(o+=1,i=0),e.slide(o,{fragment:i})}})};var R,X,H,W,J,Y,z,G={exports:{}},Q=(R||(R=1,G.exports=(X=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],H=function(e){return String(e).replace(/[&<>"']/g,function(e){return"&"+W[e]+";"})},W={"&":"amp","<":"lt",">":"gt",'"':"quot","'":"apos"},J="dangerouslySetInnerHTML",Y={className:"class",htmlFor:"for"},z={},function(e,t){var n=[],r="";t=t||{};for(var o=arguments.length;o-- >2;)n.push(arguments[o]);if("function"==typeof e)return t.children=n.reverse(),e(t);if(e){if(r+="<"+e,t)for(var i in t)!1!==t[i]&&null!=t[i]&&i!==J&&(r+=" "+(Y[i]?Y[i]:H(i))+'="'+H(t[i])+'"');r+=">"}if(-1===X.indexOf(e)){if(t[J])r+=t[J].__html;else for(;n.length;){var a=n.pop();if(a)if(a.pop)for(var s=a.length;s--;)n.push(a[s]);else r+=!0===z[a]?a:H(a)}r+=e?"</"+e+">":""}return z[r]=!0,r})),G.exports),Z=e(Q);const ee=({children:e})=>Z(null,null,...e),te=`${f}presenter-`,ne={container:`${te}container`,dragbar:`${te}dragbar-container`,next:`${te}next`,nextContainer:`${te}next-container`,noteContainer:`${te}note-container`,noteWrapper:`${te}note-wrapper`,noteButtons:`${te}note-buttons`,infoContainer:`${te}info-container`,infoPageArea:`${te}info-page-area`,infoPage:`${te}info-page`,infoPagePrev:`${te}info-page-prev`,infoPageNext:`${te}info-page-next`,noteButtonsBigger:`${te}note-bigger`,noteButtonsSmaller:`${te}note-smaller`,infoTime:`${te}info-time`,infoTimer:`${te}info-timer`},re=e=>{const{title:t}=document;document.title="[Presenter view]"+(t?` - ${t}`:"");const n={},r=e=>(n[e]=n[e]||document.querySelector(`.${e}`),n[e]);document.body.appendChild((e=>{const t=document.createElement("div");return t.className=ne.container,t.appendChild(e),t.insertAdjacentHTML("beforeend",Z(ee,null,Z("div",{class:ne.nextContainer},Z("iframe",{class:ne.next,src:"?view=next"})),Z("div",{class:ne.dragbar}),Z("div",{class:ne.noteContainer},Z("div",{class:ne.noteWrapper}),Z("div",{class:ne.noteButtons},Z("button",{class:ne.noteButtonsSmaller,tabindex:"-1",title:"Smaller notes font size"},"Smaller notes font size"),Z("button",{class:ne.noteButtonsBigger,tabindex:"-1",title:"Bigger notes font size"},"Bigger notes font size"))),Z("div",{class:ne.infoContainer},Z("div",{class:ne.infoPageArea},Z("button",{class:ne.infoPagePrev,tabindex:"-1",title:"Previous"},"Previous"),Z("button",{class:ne.infoPage}),Z("button",{class:ne.infoPageNext,tabindex:"-1",title:"Next"},"Next")),Z("time",{class:ne.infoTime,title:"Current time"}),Z("time",{class:ne.infoTimer,title:"Timer"})))),t})(e.parent)),(e=>{let t=!1;r(ne.dragbar).addEventListener("mousedown",()=>{t=!0,r(ne.dragbar).classList.add("active")}),window.addEventListener("mouseup",()=>{t=!1,r(ne.dragbar).classList.remove("active")}),window.addEventListener("mousemove",e=>{if(!t)return;const n=e.clientX/document.documentElement.clientWidth*100;r(ne.container).style.setProperty("--bespoke-marp-presenter-split-ratio",`${Math.max(0,Math.min(100,n))}%`)}),r(ne.nextContainer).addEventListener("click",()=>e.next());const n=r(ne.next),o=(i=n,(e,t)=>i.contentWindow?.postMessage(`navigate:${e},${t}`,"null"===window.origin?"*":window.origin));var i;n.addEventListener("load",()=>{r(ne.nextContainer).classList.add("active"),o(e.slide(),e.fragmentIndex),e.on("fragment",({index:e,fragmentIndex:t})=>o(e,t))});const a=document.querySelectorAll(".bespoke-marp-note");a.forEach(e=>{e.addEventListener("keydown",e=>e.stopPropagation()),r(ne.noteWrapper).appendChild(e)}),e.on("activate",()=>a.forEach(t=>t.classList.toggle("active",t.dataset.index==e.slide())));let s=0;const l=e=>{s=Math.max(-5,s+e),r(ne.noteContainer).style.setProperty("--bespoke-marp-note-font-scale",(1.2**s).toFixed(4))},c=()=>l(1),d=()=>l(-1),u=r(ne.noteButtonsBigger),f=r(ne.noteButtonsSmaller);u.addEventListener("click",()=>{u.blur(),c()}),f.addEventListener("click",()=>{f.blur(),d()}),document.addEventListener("keydown",e=>{"+"===e.key&&c(),"-"===e.key&&d()},!0);const m=r(ne.infoPage);e.on("activate",({index:t})=>{m.textContent=`${t+1} / ${e.slides.length}`}),m.addEventListener("click",()=>{m.blur(),e.toggleOverviewView()});const g=r(ne.infoPagePrev),p=r(ne.infoPageNext);g.addEventListener("click",t=>{g.blur(),e.prev({fragment:!t.shiftKey})}),p.addEventListener("click",t=>{p.blur(),e.next({fragment:!t.shiftKey})}),e.on("fragment",({index:t,fragments:n,fragmentIndex:r})=>{g.disabled=0===t&&0===r,p.disabled=t===e.slides.length-1&&r===n.length-1});let v=new Date;const h=()=>{const e=new Date,t=e=>`${Math.floor(e)}`.padStart(2,"0"),n=e.getTime()-v.getTime(),o=t(n/1e3%60),i=t(n/1e3/60%60),a=t(n/36e5%24);r(ne.infoTime).textContent=e.toLocaleTimeString(),r(ne.infoTimer).textContent=`${a}:${i}:${o}`};h(),setInterval(h,250),r(ne.infoTimer).addEventListener("click",()=>{v=new Date})})(e)},oe=e=>{N(e),Object.defineProperties(e,{openPresenterView:{enumerable:!0,value:ie},presenterUrl:{enumerable:!0,get:ae}}),w&&document.addEventListener("keydown",t=>{"p"!==t.key||t.altKey||t.ctrlKey||t.metaKey||(t.preventDefault(),e.openPresenterView())})};function ie(){const{max:e,floor:t}=Math,n=e(t(.85*window.innerWidth),640),r=e(t(.85*window.innerHeight),360);return window.open(this.presenterUrl,te+this.syncKey,`width=${n},height=${r},menubar=no,toolbar=no`)}function ae(){const e=new URLSearchParams(location.search);return e.set("view","presenter"),e.set("sync",this.syncKey),g(e)}const se=e=>{const t=p();return t===c&&e.appendChild(document.createElement("span")),{[s]:oe,[l]:re,[c]:U}[t]},le=e=>{e.on("activate",t=>{document.querySelectorAll(".bespoke-progress-parent > .bespoke-progress-bar").forEach(n=>{n.style.flexBasis=100*t.index/(e.slides.length-1)+"%"})})},ce=e=>{const t=Number.parseInt(e,10);return Number.isNaN(t)?null:t},de=(e={})=>{const t={history:!0,...e};return e=>{let n=!0;const r=e=>{const t=n;try{return n=!0,e()}finally{n=t}},o=(t={fragment:!0})=>{let n=t.fragment?ce(v("f")||""):null;((t,n)=>{const{min:r,max:o}=Math,{fragments:i,slides:a}=e,s=o(0,r(t,a.length-1)),l=o(0,r(n||0,i[s].length-1));s===e.slide()&&l===e.fragmentIndex||e.slide(s,{fragment:l})})((()=>{if(location.hash){const[t]=location.hash.slice(1).split(":~:");if(/^\d+$/.test(t))return(ce(t)??1)-1;const r=document.getElementById(t)||document.querySelector(`a[name="${CSS.escape(t)}"]`);if(r){const{length:t}=e.slides;for(let o=0;o<t;o+=1)if(e.slides[o].contains(r)){const t=e.fragments?.[o],i=r.closest("[data-marpit-fragment]");if(t&&i){const e=t.indexOf(i);e>=0&&(n=e)}return o}}}return 0})(),n)};e.on("fragment",({index:e,fragmentIndex:r})=>{n||h({f:0===r||r.toString()},{location:{...location,hash:`#${e+1}`},setter:(...e)=>t.history?history.pushState(...e):history.replaceState(...e)})}),setTimeout(()=>{o(),window.addEventListener("hashchange",()=>r(()=>{o({fragment:!1}),h({f:void 0})})),window.addEventListener("popstate",()=>{n||r(()=>o())}),n=!1},0)}},{PI:ue,abs:fe,sqrt:me,atan2:ge}=Math,pe={passive:!0},ve=({slope:e=-.7,swipeThreshold:t=30}={})=>n=>{let r;const o=n.parent,i=e=>{const t=o.getBoundingClientRect();return{x:e.pageX-(t.left+t.right)/2,y:e.pageY-(t.top+t.bottom)/2}};o.addEventListener("touchstart",({touches:e})=>{r=1===e.length?i(e[0]):void 0},pe),o.addEventListener("touchmove",e=>{if(r)if(1===e.touches.length){e.preventDefault();const t=i(e.touches[0]),n=t.x-r.x,o=t.y-r.y;r.delta=me(fe(n)**2+fe(o)**2),r.radian=ge(n,o)}else r=void 0}),o.addEventListener("touchend",o=>{if(r){if(r.delta&&r.delta>=t&&r.radian){const t=(r.radian-e+ue)%(2*ue)-ue;n[t<0?"next":"prev"](),o.stopPropagation()}r=void 0}},pe)},he=new Map;he.clear(),he.set("none",{backward:{both:void 0,incoming:void 0,outgoing:void 0},forward:{both:void 0,incoming:void 0,outgoing:void 0}});const we={both:"",outgoing:"outgoing-",incoming:"incoming-"},ye={forward:"",backward:"-backward"},be=e=>`--marp-bespoke-transition-animation-${e}`,ke=e=>`--marp-transition-${e}`,xe=be("name"),Ee=be("duration"),$e=e=>new Promise(t=>{const n={},r=document.createElement("div"),o=e=>{r.remove(),t(e)};r.addEventListener("animationstart",()=>o(n)),Object.assign(r.style,{animationName:e,animationDuration:"1s",animationFillMode:"both",animationPlayState:"paused",position:"absolute",pointerEvents:"none"}),document.body.appendChild(r);const i=getComputedStyle(r).getPropertyValue(ke("duration"));i&&Number.parseFloat(i)>=0&&(n.defaultDuration=i),((e,t)=>{requestAnimationFrame(()=>{e.style.animationPlayState="running",requestAnimationFrame(()=>t(void 0))})})(r,o)}),Le=async e=>he.has(e)?he.get(e):(e=>{const t={},n=[];for(const[r,o]of Object.entries(we))for(const[i,a]of Object.entries(ye)){const s=`marp-${o}transition${a}-${e}`;n.push($e(s).then(e=>{t[i]=t[i]||{},t[i][r]=e?{...e,name:s}:void 0}))}return Promise.all(n).then(()=>t)})(e).then(t=>(he.set(e,t),t)),Se=e=>Object.values(e).flatMap(Object.values).every(e=>!e),Pe=(e,{type:t,backward:n})=>{const r=e[n?"backward":"forward"],o=(()=>{const e=r[t],n=e=>({[xe]:e.name});if(e)return n(e);if(r.both){const e=n(r.both);return"incoming"===t&&(e[be("direction")]="reverse"),e}})();return!o&&n?Pe(e,{type:t,backward:!1}):o||{[xe]:"__bespoke_marp_transition_no_animation__"}},_e=e=>{if(e)try{const t=JSON.parse(e);if((e=>{if("object"!=typeof e)return!1;const t=e;return"string"==typeof t.name&&(void 0===t.duration||"string"==typeof t.duration)})(t))return t}catch{}},Oe="_tSId",Te="_tA",Ie="bespoke-marp-transition-warming-up",Me=window.matchMedia("(prefers-reduced-motion: reduce)"),Ae="__bespoke_marp_transition_reduced_outgoing__",Ce="__bespoke_marp_transition_reduced_incoming__",De={forward:{both:void 0,incoming:{name:Ce},outgoing:{name:Ae}},backward:{both:void 0,incoming:{name:Ce},outgoing:{name:Ae}}},Ne=e=>{if(!document.startViewTransition)return;const t=t=>(void 0!==t&&(e._tD=t),e._tD);let n;t(!1),((...e)=>{CSS.registerProperty({name:ke("duration"),syntax:"<time>",inherits:!0,initialValue:"-1s"});const t=[...new Set(e).values()];return Promise.all(t.map(e=>Le(e))).then()})(...Array.from(document.querySelectorAll("section[data-transition], section[data-transition-back]")).flatMap(e=>[e.dataset.transition,e.dataset.transitionBack].flatMap(e=>{const t=_e(e);return[t?.name,t?.builtinFallback?`__builtin__${t.name}`:void 0]}).filter(e=>!!e))).then(()=>{document.querySelectorAll("style").forEach(e=>{e.innerHTML=e.innerHTML.replace(/--marp-transition-duration:[^;}]*[;}]/g,e=>e.slice(0,-1)+"!important"+e.slice(-1))})});const r=(n,{back:r,cond:o})=>i=>{const a=t();if(a)return!!i[Te]||!("object"!=typeof a||(a.skipTransition(),!i.forSync));if(e.skipTransition)return!0;if(!o(i))return!0;const s=e.slides[e.slide()],l=()=>i.back??r,c="data-transition"+(l()?"-back":""),d=s.querySelector(`section[${c}]`);if(!d)return!0;const u=_e(d.getAttribute(c)??void 0);return!u||((async(e,{builtinFallback:t=!0}={})=>{let n=await Le(e);if(Se(n)){if(!t)return;return n=await Le(`__builtin__${e}`),Se(n)?void 0:n}return n})(u.name,{builtinFallback:u.builtinFallback}).then(e=>{if(!e){t(!0);try{n(i)}finally{t(!1)}return}let r=e;Me.matches&&(console.warn("Use a constant animation to transition because preferring reduced motion by viewer has detected."),r=De);const o=document.getElementById(Oe);o&&o.remove();const a=document.createElement("style");a.id=Oe,document.head.appendChild(a),((e,t)=>{const n=[`:root{${ke("direction")}:${t.backward?-1:1};}`,":root:has(.bespoke-marp-inactive){cursor:none;}"],r=t=>{const n=e[t].both?.defaultDuration||e[t].outgoing?.defaultDuration||e[t].incoming?.defaultDuration;return"forward"===t?n:n||r("forward")},o=t.duration||r(t.backward?"backward":"forward");void 0!==o&&n.push(`::view-transition-group(*){${Ee}:${o};}`);const i=e=>Object.entries(e).map(([e,t])=>`${e}:${t};`).join("");return n.push(`::view-transition-old(root){${i(Pe(e,{...t,type:"outgoing"}))}}`,`::view-transition-new(root){${i(Pe(e,{...t,type:"incoming"}))}}`),n})(r,{backward:l(),duration:u.duration}).forEach(e=>a.sheet?.insertRule(e));const s=document.documentElement.classList;s.add(Ie);let c=!1;const d=()=>{c||(n(i),c=!0,s.remove(Ie))},f=()=>{t(!1),a.remove(),s.remove(Ie)};try{t(!0);const e=document.startViewTransition(d);t(e),e.finished.finally(f)}catch(e){console.error(e),d(),f()}}),!1)};e.on("prev",r(t=>e.prev({...t,[Te]:!0}),{back:!0,cond:e=>e.index>0&&!((e.fragment??1)&&n.fragmentIndex>0)})),e.on("next",r(t=>e.next({...t,[Te]:!0}),{cond:t=>t.index+1<e.slides.length&&!(n.fragmentIndex+1<n.fragments.length)})),setTimeout(()=>{e.on("slide",r(t=>e.slide(t.index,{...t,[Te]:!0}),{cond:t=>{const n=e.slide();return t.index!==n&&(t.back=t.index<n,!0)}}))},0),e.on("fragment",e=>{n=e})};let Be;const Ke=()=>(void 0===Be&&(Be="wakeLock"in navigator&&navigator.wakeLock),Be),qe=async()=>{const e=Ke();if(e)try{return await e.request("screen")}catch(e){console.warn(e)}return null},Ve=async()=>{if(!Ke())return;let e;const t=()=>{e&&"visible"===document.visibilityState&&qe()};for(const e of["visibilitychange","fullscreenchange"])document.addEventListener(e,t);return e=await qe(),e};((e=document.getElementById(":$p"))=>{(()=>{const e=v("view");i.dataset.bespokeView=u.some(t=>t&&t===e)?e:""})();const t=(e=>{const t=v(e);return h({[e]:void 0}),t})("sync")||void 0;o.from(e,((...e)=>{const t=u.findIndex(e=>p()===e);return e.map(([e,n])=>e[t]&&n).filter(e=>e)})([[1,1,1,0],B({key:t})],[[1,1,0,1],se(e)],[[1,1,0,0],M],[[1,1,1,1],E],[[1,0,0,0],T()],[[1,1,1,1],A],[[1,1,1,1],de({history:!1})],[[1,1,0,0],C()],[[1,1,1,0],_],[[1,0,0,0],le],[[1,1,0,0],ve()],[[1,0,0,0],D()],[[1,1,1,0],F()],[[1,0,0,0],Ne],[[1,1,1,1],$],[[1,1,1,0],Ve]))})()}();</script></body></html>