Compare commits

..

283 Commits
master ... main

Author SHA1 Message Date
Baptiste Jonglez c9d872c614 Fix woodpecker warning
ci/woodpecker/pr/woodpecker Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2024-04-28 13:39:31 +02:00
Baptiste Jonglez efcb3742b7 HTML syntax check
ci/woodpecker/pr/woodpecker Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2024-04-28 13:02:45 +02:00
Baptiste Jonglez 497363b343 Fix HTML errors 2024-04-28 12:45:05 +02:00
Baptiste Jonglez ba3fc25ec4 Fix HTML syntax 2024-04-28 12:32:18 +02:00
Baptiste Jonglez fc7ea5238f Fix lien site preprod 2024-04-28 12:23:32 +02:00
Baptiste Jonglez 4879267924 Doc déploiement CI
ci/woodpecker/pr/woodpecker Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2024-04-28 12:22:36 +02:00
Baptiste Jonglez de58cd9686 Automatic upload to production website
ci/woodpecker/pr/woodpecker Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2024-04-28 12:17:49 +02:00
Baptiste Jonglez b1149c7b90 Mise à jour calendrier
ci/woodpecker/pr/woodpecker Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details
2024-04-28 10:24:30 +02:00
Armaël Guéneau 526acdec1a tweak .woodpecker
ci/woodpecker/push/woodpecker Pipeline was successful Details
ci/woodpecker/pr/woodpecker Pipeline was successful Details
2024-03-17 12:20:08 +01:00
Armaël Guéneau 79be49569f Woodpecker CI file to deploy to preprod-site.web.deuxfleurs.fr
ci/woodpecker/push/woodpecker Pipeline failed Details
2024-03-17 12:12:32 +01:00
Alex e3d6200221 nouvelle page 404 2024-03-17 12:05:22 +01:00
Alex 821b2989a1 tentative de cgu retrouvée (pas linkée en vrai) + enlève fichiers inutiles 2024-03-17 11:51:30 +01:00
Alex ffd5f97997 enleve mentions léales, etc, qui ont été déplacées sur le guide 2024-03-17 11:46:26 +01:00
aeddis 517c93d8fb Merge pull request 'mensualUpdate : mars 2024' (#35) from mensualUpdate into main
Reviewed-on: Deuxfleurs/site#35
2024-03-08 17:41:27 +00:00
Lauric Desauw 8c192fbb45 Update old event 2024-03-08 18:37:05 +01:00
Lauric Desauw fdfae00dc4 Mars 2024 2024-03-08 18:35:28 +01:00
Lauric Desauw fe801e71a8 Fix:Mise a jour calendrier Mars 2024 2024-03-06 18:18:46 +01:00
Lauric Desauw 050de5c2a1 Mise a jour calendrier Mars 2024 2024-03-06 18:11:49 +01:00
Quentin 55f5fbb7aa
Ajout du highlight dans le calendrier ascii 2024-01-28 16:28:42 +01:00
Quentin 62661eb3a6
Ajout de l'éco-conception numérique 2024-01-28 16:27:07 +01:00
ADRN f496b120b9 MaJ calendrier café citoyen 2024-01-17 10:57:01 +01:00
vincent 1c2f7c43e0 Ajout de la ville des quadrapéro 2024-01-09 21:52:52 +01:00
vincent 709ca4b962 Ajout d'un apéro du libre à Lille et du quadrapéro de janvier 2024 2024-01-09 21:50:10 +01:00
baptiste de1efbef36 Merge pull request 'Fix calendar' (#25) from update_cal into main
Reviewed-on: Deuxfleurs/site#25
2024-01-09 19:53:20 +00:00
Baptiste Jonglez caaf1fecab Fix calendar 2024-01-09 20:52:37 +01:00
baptiste 223dad81a2 Merge pull request 'Mise à jour calendrier' (#24) from update_cal into main
Reviewed-on: Deuxfleurs/site#24
2024-01-09 19:33:35 +00:00
Baptiste Jonglez 6faa14ea47 Mise à jour calendrier 2024-01-09 20:30:41 +01:00
vincent c2a9631d16 MàJ de la localisation des serveurs 2024-01-02 20:58:59 +01:00
vincent 77b5d4d0ba Fusion de 'Fix broken links in footer.' (#23) de boris/site:22_fix_footer vers la branche main
Discutée sur : Deuxfleurs/site#23
2023-12-20 21:51:28 +00:00
boris 60e625326a Update urls for footer links. 2023-12-18 20:33:25 +01:00
boris cdd0edc081 Fix broken links in footer. 2023-12-16 11:03:09 +01:00
ADRN f08c2e5e45 calendrier de janvier 2023-12-06 01:16:45 +01:00
vincent d5eb7aa119 Ajout CCC 2023-12-01 19:33:39 +01:00
ADRN c9006b4d3d ajout d'infos 2023-11-22 22:27:44 +01:00
ADRN 1cd2f4d608 mise à jour calendrier décembre 2023 2023-11-22 22:25:54 +01:00
ADRN 78b68a3cd9 added relevant files from prod to repo 2023-11-22 21:55:21 +01:00
Quentin 0364444e6a
sorry, it was on my computer 2023-11-17 14:12:41 +01:00
Quentin 8e9ffa9064
disable csp as it breaks the script currently 2023-11-17 14:09:59 +01:00
adrien 00352e121c Merge pull request 'Ajout Capitole du libre et réunion infrastructure' (#21) from ajoutÉvénementsNov2023 into main
Reviewed-on: Deuxfleurs/site#21
2023-11-04 15:44:28 +00:00
vincent 1ec1414679 Ajout Capitole du libre et réunion infrastructure 2023-11-01 15:01:59 +01:00
maximilien b3c8cfb8e6 Merge pull request 'Ajout d'événements pour novembre 2023' (#20) from événementsNovembre2023 into main
Reviewed-on: Deuxfleurs/site#20
2023-10-27 22:05:00 +00:00
vincent 64e99f7a00 Ajout d'événements pour novembre 2023. 2023-10-27 21:39:58 +02:00
Quentin ab4e5f2472
découapge du CSS 2023-10-17 12:26:09 +02:00
Quentin dad198ea29
reformat css 2023-10-17 10:58:34 +02:00
Quentin 8986e5b6b1
move well-known 2023-10-17 10:49:23 +02:00
Quentin ccf14158a4
fix no js 2023-10-17 10:46:20 +02:00
Quentin e473ada5b8
ajout des calendriers 2023-10-17 10:08:13 +02:00
Quentin 7dcd436b84
move root to static/ folder 2023-10-17 10:05:18 +02:00
Quentin 4cbd53b627
ajout de trucs importants 2023-10-17 09:59:46 +02:00
Quentin f53edd99a0
fix typo 2023-10-17 09:53:53 +02:00
Quentin a8a5a40027
ajout du nouveau site dans le dépot 2023-10-17 09:51:32 +02:00
Quentin 91d10a7eb3
Update matrix server
continuous-integration/drone/push Build was killed Details
2022-08-19 17:48:52 +02:00
Quentin a645e050a5
Corrige les autres services statoolinfos
continuous-integration/drone/push Build is passing Details
2022-07-20 11:23:22 +02:00
Quentin 08879248cb
Fix orga + cryptpad
continuous-integration/drone/push Build is passing Details
2022-07-20 11:17:59 +02:00
Quentin 0f8ca5acab
Ajout de Plume et Garage
continuous-integration/drone/push Build is passing Details
2022-07-20 10:48:10 +02:00
Quentin 3edf3eedc5
Ajout de Matrix
continuous-integration/drone/push Build is passing Details
2022-07-20 10:37:01 +02:00
Quentin 4b2aabced1
Ajout de cryptpad
continuous-integration/drone/push Build is passing Details
2022-07-20 10:31:45 +02:00
Quentin c76bf3abfa
Ajout de jitsi
continuous-integration/drone/push Build is passing Details
2022-07-20 10:11:38 +02:00
Quentin bd54b7d62a
Update render
continuous-integration/drone/push Build is passing Details
2022-07-20 09:53:05 +02:00
Quentin 6d192acd2c
Ajout de statoolinfos pour l'organisation
continuous-integration/drone/push Build is passing Details
2022-07-20 09:49:02 +02:00
Quentin 8ff82acaac
Changement de lien pour le wiki
continuous-integration/drone/push Build is passing Details
2022-05-13 09:35:14 +02:00
Quentin c1e2bed043
Ajout de la mention légale
continuous-integration/drone/push Build is passing Details
2022-05-13 09:00:20 +02:00
Quentin 42e64d7fe7
Correction CGU
continuous-integration/drone/push Build is passing Details
2022-05-13 08:49:37 +02:00
Quentin f729e01c0d
Ajout de la mention d'OVH
continuous-integration/drone/push Build is passing Details
2022-05-13 08:43:35 +02:00
Quentin 88e8258668
Ajout de la liste des sources
continuous-integration/drone/push Build is passing Details
2022-05-13 08:36:37 +02:00
Quentin ad01e931c0
Updates CHATONS site web
continuous-integration/drone/push Build is passing Details
2022-05-13 08:13:37 +02:00
Quentin c2222f259f
Replace pad
continuous-integration/drone/push Build is passing Details
2022-05-10 15:20:22 +02:00
Quentin 2049e94169 Typo
continuous-integration/drone/push Build is passing Details
2022-04-13 17:56:51 +02:00
Quentin 49e197a3ff Ajout de Suresnes
continuous-integration/drone/push Build is passing Details
2022-04-13 17:01:12 +02:00
Quentin 685e162681 Ajout de "Gestion des risques"
continuous-integration/drone/push Build is passing Details
2022-04-13 16:45:42 +02:00
Quentin 4aa009e4bb Changement des mots
continuous-integration/drone/push Build is passing Details
2022-04-12 12:56:12 +02:00
ADRN 69ac33ca78 ajout de moi-meme en direction de la publication
continuous-integration/drone/push Build is passing Details
2022-03-20 22:25:26 +01:00
Quentin 939534fc17 Merge pull request 'Typos dans CGU et mentions légales' (#10) from typos-legales into main
continuous-integration/drone/push Build is passing Details
Reviewed-on: Deuxfleurs/site#10
2022-03-11 12:03:57 +01:00
Quentin 00c65a9554 Merge remote-tracking branch 'origin/main' into typos-legales
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2022-03-11 12:03:09 +01:00
Quentin 7c182ca9cb Deuxfleurs pas Framasoft
continuous-integration/drone/push Build is passing Details
2022-03-10 13:11:55 +01:00
Alex ccd693fce3
Typos dans CGU et mentions légales
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2022-03-10 12:38:00 +01:00
Quentin 88e8e198d4 Fix typo
continuous-integration/drone/push Build is passing Details
2022-03-10 12:06:34 +01:00
Quentin 9ef9595272 CGU
continuous-integration/drone/push Build is passing Details
2022-03-10 12:05:27 +01:00
Quentin a1f7c0990f Ajout d'une page 404
continuous-integration/drone/push Build is passing Details
2022-03-10 11:14:32 +01:00
Quentin 016578ad83 Ajout de mentions légales 2022-03-10 11:11:10 +01:00
Quentin 7ed875682a Nouvelle page d'accueil
continuous-integration/drone/push Build is passing Details
2022-03-10 10:42:34 +01:00
ADRN 64f960be45 changed wiki URL to the new one
continuous-integration/drone/push Build is passing Details
2021-12-28 11:22:03 +01:00
Alex f209548474
Enlève tout et lie vers le wiki à la place
continuous-integration/drone/push Build is passing Details
2021-12-13 11:52:17 +01:00
Alex c00a998eb5
Màj datacenters de Alex
continuous-integration/drone Build is passing Details
2021-11-02 13:42:51 +01:00
Vincent 22cbf0c246 Liens actualisés et rajout d'une présentation
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
2021-06-18 18:15:04 +02:00
Vincent 91c5ce5ed6 Traduction de la description de Garage en Français
continuous-integration/drone/pr Build is passing Details
2021-06-16 22:50:26 +02:00
Alex 233fe8f0a7 Merge pull request 'Description de Diplonat' (#6) from vincent/site:main into main
continuous-integration/drone/push Build is passing Details
Reviewed-on: Deuxfleurs/site#6
2021-05-30 23:10:09 +02:00
Vincent cbc0b048af Description de Diplonat
continuous-integration/drone/pr Build is passing Details
2021-05-30 17:49:54 +02:00
Alex 63628a9847
Update install party page
continuous-integration/drone/push Build is passing Details
2021-05-29 13:43:07 +02:00
Quentin aaf4a0f6b0
Ajout de yggdrasil
continuous-integration/drone/push Build is passing Details
2021-05-29 13:25:52 +02:00
Quentin 0359b6836c
Ajout de Yggdrasil
continuous-integration/drone/push Build is passing Details
2021-05-29 13:15:01 +02:00
Quentin 592c4e50ec
Publication des infos pour le binaire
continuous-integration/drone/push Build is passing Details
2021-05-29 11:43:44 +02:00
Quentin 4247345317
Ajout des infos
continuous-integration/drone/push Build is passing Details
2021-05-15 09:07:28 +02:00
Quentin 986340e4fd
Travaille de la page event
continuous-integration/drone/push Build is passing Details
2021-05-13 12:25:36 +02:00
Quentin 4ebc0f6aec
Les crochets cassent les citations, utilisation de parentheses
continuous-integration/drone/push Build is passing Details
2021-05-13 12:03:38 +02:00
Quentin cf29273203
Retravaille du texte
continuous-integration/drone/push Build is passing Details
2021-05-13 11:59:24 +02:00
Quentin 273ea84746
Ajout de install party
continuous-integration/drone/push Build is passing Details
2021-05-13 11:35:52 +02:00
Quentin 2cdc86dfe4
Ajout du salon matrix
continuous-integration/drone/push Build is passing Details
2021-04-23 15:45:35 +02:00
Quentin 67fb511f96 Merge pull request 'Ajout liste services hébergés' (#5) from add-service-urls into main
continuous-integration/drone/push Build is passing Details
Reviewed-on: Deuxfleurs/site#5
2021-04-18 11:07:52 +02:00
Alex 10625519de
précision importante
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2021-04-14 20:53:45 +02:00
Alex 790899ca3a
Amélioration de la liste
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2021-04-14 20:53:05 +02:00
Alex bede8eecbe
Ajout liste services hébergés
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2021-04-14 20:49:35 +02:00
Maximilien R 970d2bb043
Fix typos in sites
continuous-integration/drone/push Build is passing Details
2021-04-11 14:08:22 +02:00
maximilien 1ae2b8b5f8 Merge pull request 'Mise à jour de la liste des sites' (#4) from add-site-bespin into main
continuous-integration/drone/push Build is passing Details
Reviewed-on: Deuxfleurs/site#4
Reviewed-by: Alex <alex@adnab.me>
2021-04-11 14:02:10 +02:00
Maximilien R 091be10732
Merge CI fix to not deploy on PR
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2021-04-11 12:42:26 +02:00
Maximilien R 4bca50e19f
Fix CI by excluding PR from website update
continuous-integration/drone/push Build is passing Details
2021-04-11 12:38:55 +02:00
Maximilien R 4a66327e8d
Mise à jour des dépendances
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is failing Details
2021-04-11 12:26:43 +02:00
Maximilien R e3a40cdb88
Mise à jour de la liste de sites
continuous-integration/drone/push Build is passing Details
2021-04-11 12:08:10 +02:00
Alex 4dbc620574 Add signature
continuous-integration/drone/push Build is passing Details
2021-04-05 12:14:43 +02:00
Alex 50f73b79ae Fix drone yml
continuous-integration/drone/push Build is pending Details
2021-04-05 12:14:30 +02:00
Alex a14cdc9056 Add signature to Drone CI
continuous-integration/drone/push Build encountered an error Details
2021-04-05 12:05:05 +02:00
Maximilien R 14e11734ac
Update CI badge to point to main
continuous-integration/drone/push Build is passing Details
2021-04-05 11:44:47 +02:00
Maximilien R 9e219e7c3b
Fix .drone.yml YAML format
continuous-integration/drone/push Build is passing Details
2021-04-05 11:21:04 +02:00
Maximilien R b773a9b190
Switch branch to main
- Update cache version to v1.1.0
- Pipeline is explicitely docker
2021-04-05 11:16:54 +02:00
LUXEY Adrien 1b4cd1990a conflit résolu entre branches master et ag-2021
continuous-integration/drone/push Build was killed Details
2021-04-05 10:50:39 +02:00
LUXEY Adrien 7f66e737d4 typos et compagnie
continuous-integration/drone/push Build was killed Details
continuous-integration/drone/pr Build was killed Details
2021-04-05 10:49:47 +02:00
LUXEY Adrien 1ba40511d8 AG2021: reformulation rapports de l'AG
continuous-integration/drone/push Build was killed Details
2021-04-05 09:27:20 +02:00
Maximilien R ac36894a56
AG 2021: bilan moral et financier
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is failing Details
2021-04-04 22:56:18 +02:00
LUXEY Adrien 8c1c0a2ee8 ajout video AG 2021
continuous-integration/drone/push Build is passing Details
2021-04-04 18:14:39 +02:00
LUXEY Adrien f47002b666 correction coquille dans Réunion 5, et réécriture de la page de l'AG2
continuous-integration/drone/push Build is passing Details
2021-03-22 09:18:55 +01:00
LUXEY Adrien b2a6267a44 compte rendu réunion 5
continuous-integration/drone/push Build is passing Details
2021-03-21 16:14:45 +01:00
Quentin 805d79334b Plus de switch, tout est branché sur la box directement
continuous-integration/drone/push Build is passing Details
2021-02-17 10:59:01 +01:00
Alex 3fc557df8d Cache node_modules for build
continuous-integration/drone/push Build is passing Details
2021-02-08 16:26:21 +01:00
Alex 259af84068 mention drone (this is a test)
continuous-integration/drone/push Build is passing Details
2021-02-08 15:05:12 +01:00
Alex ee68256a9a try to fix drone.yml
continuous-integration/drone/push Build is passing Details
2021-02-08 15:01:20 +01:00
Alex 1a789d0ad5 Add Drone CI badge
continuous-integration/drone/push Build is failing Details
2021-02-08 14:56:28 +01:00
Alex fd83e1aec9 custom endpoint
continuous-integration/drone/push Build is failing Details
2021-02-08 14:49:29 +01:00
Alex 3f5e10cd9b s3 plugin for deploy
continuous-integration/drone/push Build was killed Details
2021-02-08 14:49:03 +01:00
Alex 1a3ed4bc20 add drone.yml 2021-02-08 14:46:52 +01:00
Quentin ebd0a882fe update website 2021-02-07 20:13:39 +01:00
LUXEY Adrien 372d3ae22c minor 2021-02-07 15:57:53 +01:00
LUXEY Adrien 9edcf5b930 ajout des slides 2021-02-07 15:53:31 +01:00
Quentin 54ec864ef3 Ajout d'un point médian manquant 2021-02-03 11:39:37 +01:00
Quentin 9ce4230d92 Fix README 2021-02-03 11:38:55 +01:00
Quentin 9343712ee7 Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2021-02-03 11:28:51 +01:00
Quentin ce7820801a Add a deploy doc 2021-02-03 11:28:41 +01:00
LUXEY Adrien 9d8201c305 Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2021-02-03 11:16:23 +01:00
LUXEY Adrien 9b615381f0 modif ordre du plan de l'AG 2021-02-03 11:16:11 +01:00
Quentin 1b78d2fbee Deploy Thunderbird conf 2021-01-24 16:02:53 +01:00
Alex 79e604c87e Move out garage's doc 2021-01-23 19:13:04 +01:00
Quentin 538a72d198 Refactor website 2021-01-23 18:29:02 +01:00
Quentin 8f3b18f628 Migrate to garage 2021-01-19 13:31:23 +01:00
LUXEY Adrien 8a374d3402 ajout invitation explicite des curieux 2021-01-11 12:05:44 +01:00
LUXEY Adrien ac91a6ebf0 ajout invitation explicite des curieux 2021-01-11 12:04:15 +01:00
LUXEY Adrien 9493746d13 ajout message sur la frontpage, et desole, j'ai un linter qui a tout reformate le CSS... 2021-01-11 12:00:52 +01:00
LUXEY Adrien 91abf5a20c ajout invitation à la nouvelle assemblee generale 2021-01-11 11:32:38 +01:00
Quentin 6a5744bf89 Some tests for the new website 2021-01-09 23:03:38 +01:00
Alex 5409567c40 ajout nom du routeur 2020-12-16 20:44:10 +01:00
Alex b4073b1345 maybe smtp 2020-12-16 20:42:11 +01:00
Alex 6dcff87dfe s/pluton/jupiter, parce que io 2020-12-16 20:39:54 +01:00
Alex 265827dcd2 désignation précise 2020-12-16 19:14:09 +01:00
Alex 9a8f60d398 Ajout pluton et io 2020-12-16 19:12:51 +01:00
Quentin 8d8b2c170b Fix ul / li imbrication, thanks Adrien! 2020-11-22 11:42:47 +01:00
Quentin b0a23a2835 Fix name 2020-11-16 09:00:34 +01:00
Quentin 216db78ee7 Add new lines 2020-11-15 19:02:25 +01:00
Quentin a45c18557f Réunion 4 2020-11-15 19:00:28 +01:00
Quentin 4650a5ad55 Ajout de la réunion 4 2020-11-15 18:52:21 +01:00
Quentin 0fe635b827 Change CSS 2020-11-15 18:14:16 +01:00
Quentin 7b5b1d7b70 Ajout du CR de la réunion 3 2020-11-15 18:06:17 +01:00
LUXEY Adrien 59a8f68bc4 typo in Developpement/Garage 2020-11-08 18:29:08 +01:00
Quentin 9ff5e0be6a Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-10-30 16:08:00 +01:00
Quentin 3cb66d65fc Set well known correctly 2020-10-30 16:07:36 +01:00
Quentin 57bdda2c12 Fix typo 2020-10-21 14:28:08 +02:00
Quentin 522177c6ce Rotated leaked key, replace it with example one 2020-10-21 14:21:13 +02:00
Quentin ef6304ca05 Garage doc is now improved 2020-10-21 14:18:21 +02:00
Quentin d516fe5a38 WIP Garage 2020-10-21 14:02:05 +02:00
Quentin c21124b02e Fix Garage page 2020-10-13 12:16:02 +02:00
Quentin a548e46fa4 Fix lien StopCovid 2020-10-12 21:28:03 +02:00
Maximilien R 8155860d22
Mercure passe de Orange à Free 2020-10-10 11:44:59 +02:00
LUXEY Adrien e4595f9b39 edit Sites Web 2020-09-21 08:33:04 +02:00
Quentin 5385f625da test 2020-09-20 16:44:40 +02:00
Quentin 7de1d41324 Anonymize a bit (yes, I know, git history) 2020-09-14 11:49:18 +02:00
LUXEY Adrien 94824c06d6 maj ODJ réu 3 2020-09-13 17:09:57 +02:00
Quentin 9eebfab318 Minor fix 2020-09-13 12:35:19 +02:00
Quentin e5e00c2d46 WIP réunion 2020-09-13 12:09:05 +02:00
Quentin 79387649e8 Rework energie 2020-09-10 20:22:26 +02:00
Quentin afa82c967f Screenshot dépassés 2020-09-10 19:43:30 +02:00
Quentin d904faf640 WIP visio 2020-09-10 19:41:50 +02:00
Quentin 972c230c45 Rework visioconf 2020-09-10 19:40:01 +02:00
Quentin abe63f6d90 Fix new line réu 2020-09-10 19:35:26 +02:00
Quentin 93fe4c1e37 Mise à jour réunion 2020-09-10 19:34:47 +02:00
Quentin 21d0f16153 FIx articles 2020-09-10 19:30:12 +02:00
LUXEY Adrien 73aba32306 ordre du jour de la réunion 3 2020-07-09 11:52:32 +02:00
Quentin 5a2b2c1f77 Mise à jour de la page discussion 2020-06-14 14:34:50 +02:00
Quentin 2617d499f1 Amélioration du guide 2020-06-14 14:34:01 +02:00
Quentin a9cebad161 Guide emails 2020-06-14 13:59:50 +02:00
Quentin 10aa9fe223 Documentation pour les emails 2020-06-14 13:34:58 +02:00
Quentin 5935f2e267 Fix BG 3 2020-06-02 16:37:54 +02:00
Quentin 0808e351ae Fix BG 2 2020-06-02 16:34:30 +02:00
Quentin 0a493d1a9b Change BG color 2020-06-02 16:32:56 +02:00
Quentin 37c23b5576 Update todo list 2020-06-02 16:30:41 +02:00
Quentin 6821c94d48 Doc pour le site web 2020-05-28 15:00:23 +02:00
Quentin a171273a01 Ajout de platoo 2020-05-23 18:44:41 +02:00
Quentin 1c3b634d5f Fix todo list 2020-05-23 18:43:46 +02:00
Quentin fc312f3691 conclusion energie 2020-05-20 18:47:57 +02:00
Quentin f88e6d1e64 Retour à la ligne dans Énergie 2020-05-20 18:41:31 +02:00
Quentin 1412c4ecc2 Reflexions 2020-05-20 18:40:39 +02:00
Quentin 2781313fd2 Add dbname on cli 2020-05-19 18:29:04 +02:00
Quentin 7530be2ac1 Add a final step 2020-05-19 18:27:59 +02:00
Quentin d77f04e499 Add basic guide 2020-05-19 18:26:15 +02:00
Adrien Luxey bfb31713dc lien vers mon guide dans Discussion 2020-05-19 09:04:19 +02:00
Quentin ec1914d14f WIP jalons 2020-05-18 21:19:08 +02:00
Quentin a67a9df973 Ajout du nombre de coeurs 2020-05-17 22:26:36 +02:00
Alex 32c43830c1 Ajouts sur page techinque 2020-05-17 22:20:59 +02:00
Alex a3a8172fac Fixe lien casse 2020-05-17 22:18:43 +02:00
Alex 1e933ee957 Précisions serveur Alex 2020-05-17 22:13:52 +02:00
Quentin 303c8a8697 typo 2020-05-17 21:41:03 +02:00
Quentin 0263eb3bcb Backup machine 2020-05-17 21:36:46 +02:00
Quentin 9ffc876545 fix ipv6 2020-05-17 21:31:52 +02:00
Quentin 24024c30dd Ajout IPv6 2020-05-17 21:31:33 +02:00
Quentin a35ea111bd Ajout région 2020-05-17 21:29:45 +02:00
Quentin 4f978c500e Add some emojis 2020-05-17 21:24:04 +02:00
Quentin 2cd918646d WIP infra 2020-05-17 21:12:05 +02:00
Quentin 0b50a196ac Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-17 20:59:02 +02:00
Quentin e0149180f4 WIP infra page 2020-05-17 20:58:40 +02:00
Alex d15096b936 Quelques trucs manquants & TODO list 2020-05-16 15:49:44 +02:00
Quentin 03840af2ab WIP avancement 2020-05-16 15:34:35 +02:00
Quentin 725d4bef0b Renommage de la section 2020-05-16 15:26:13 +02:00
Quentin 0662cca6df WIP site web 2020-05-16 15:25:52 +02:00
Quentin b8a2463aca Ajout dans les notes 2020-05-16 14:44:28 +02:00
Quentin d14b2ee107 Reformattage du compte rendu 2020-05-16 14:42:49 +02:00
Quentin ca33f39441 Semantique 2020-05-16 14:33:36 +02:00
Quentin 52ed900b6d WIP réunion 3 2020-05-16 14:32:47 +02:00
Quentin e5695d7c77 Objectifs 2020-05-16 14:32:00 +02:00
Adrien Luxey 29d85d6478 page 'sites web' et des espaces au lieu des _ 2020-05-16 13:50:02 +02:00
Quentin 3cae57582e Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-16 11:55:32 +02:00
Quentin 7998697d1f Compte rendu 2020-05-16 11:55:14 +02:00
Alex 3fa87404f9 Enlève lien cassé 2020-05-15 15:09:15 +02:00
Quentin bf1af772f7 changement d'une entrée 2020-05-14 23:17:55 +02:00
Quentin 02a0f4ded7 Deploy new website 2020-05-14 23:15:53 +02:00
Quentin a31f4904be Change CSS 2020-05-14 22:34:59 +02:00
Quentin 3eade56417 Fix link 2020-05-11 11:04:10 +02:00
Quentin 21660ce757 Merge pull request 'Add some context on Bottin & Guichet' (#2) from dev-comment into master 2020-05-11 10:15:57 +02:00
Quentin 0e97a279a8 Statut 2020-05-11 10:14:35 +02:00
mricher bd25b2e615
Add some context on Bottin & Guichet 2020-05-11 00:56:17 +02:00
mricher d27f2f837f
Lint text, remove trailing space, order headers and lists 2020-05-11 00:45:35 +02:00
mricher 99d50325f5
README: fix missing bracket 2020-05-11 00:34:27 +02:00
mricher 9e4154e614
Buff the README a bit 2020-05-11 00:33:16 +02:00
mricher 3e96b57fa9
Fix typos & spelling 2020-05-11 00:25:54 +02:00
Quentin ba829265a2 Update size 2020-05-10 20:29:36 +02:00
Quentin 20e9ffce6a Update discussion 2020-05-10 20:29:10 +02:00
Quentin a51764820c Ajout d'un titre 2020-05-10 20:26:49 +02:00
Quentin 7f8271574b Edit de la réunion 2020-05-10 20:25:58 +02:00
Quentin 7f70b5d10d Complete l'ordre du jour 2020-05-10 20:22:06 +02:00
Quentin 8063067f53 Rework css 2020-05-10 20:16:34 +02:00
Quentin c96f003767 Fix flowers 2020-05-10 18:48:25 +02:00
Quentin ae2c90c059 Add flowers 2020-05-10 18:47:32 +02:00
Quentin c5d1a4aeca Rework theme 2020-05-10 18:43:05 +02:00
Quentin 663dac9b68 Modifie phrase intro 2020-05-10 16:17:43 +02:00
Quentin 81d6107e2a Réorganise le guide 2020-05-10 16:16:20 +02:00
Quentin 54c4e77802 Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-10 16:11:29 +02:00
Quentin f7984816e2 Ajout de doc 2020-05-10 16:11:19 +02:00
Alex 0cd45ea950 précision 2020-05-10 15:21:49 +02:00
Alex fd8fb87378 Ajout pour/contre dans les différentes méthodes proposées 2020-05-10 15:20:56 +02:00
Quentin ff5dd8a87d typo 2020-05-10 14:04:24 +02:00
Quentin 812ab7b4aa Rephrase 2020-05-10 14:04:02 +02:00
Quentin bc447d91b3 Premier jet 2020-05-10 13:50:40 +02:00
Quentin 054892bd08 WIP interconnexion 2020-05-10 13:34:15 +02:00
Quentin 64bc29df6a Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-10 13:10:29 +02:00
Quentin caa11b301a Ajout d'un jalon 2020-05-10 13:10:07 +02:00
Alex fc879dd854 Fixe bullet points Garage 2020-05-08 15:57:12 +02:00
Quentin b4be875872 Ajout de mes notes 2020-05-08 13:49:05 +02:00
Adrien Luxey 6b3390d0e3 coquilles 2020-05-08 13:33:37 +02:00
Adrien Luxey e5988dde7a reunion pas AG 2020-05-08 13:25:51 +02:00
Adrien Luxey 90cc46545c AG3: toujours au sujet du site 2020-05-08 12:14:06 +02:00
Quentin a87264a79a Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-08 09:24:58 +02:00
Quentin 2e528b86ad Fix no static folder bug 2020-05-08 09:24:41 +02:00
Adrien Luxey 00b192e3b5 AG3 site web 2020-05-08 09:19:24 +02:00
Adrien Luxey 882375c54f ajout de points web et backups à l'ODJ de l'AG3 2020-05-08 08:57:15 +02:00
Alex d6867c4c00 Ajout de points Garage 2020-05-07 18:52:39 +02:00
Alex c45e83ada5 Add link to deuxfleurs jitsi in .well-known/matrix/client 2020-05-07 18:43:23 +02:00
Quentin 2659c5507d ajout d'un point 2020-05-07 14:11:21 +02:00
Quentin bb67734a18 Ajout de points 2020-05-07 14:09:27 +02:00
Quentin ba5d4482cd Ajout d'un point 2020-05-07 14:03:13 +02:00
Quentin 6f75089298 Propositions d'objectifs 2020-05-07 13:57:26 +02:00
Quentin 8756fb6780 Ajout de deux points dans l'ODJ 2020-05-07 13:35:10 +02:00
Quentin 7633840786 Edit des noms de proposition 2020-05-07 13:32:41 +02:00
Quentin d1a89fbf19 Merge branch 'master' of git.deuxfleurs.fr:Deuxfleurs/site 2020-05-07 13:29:02 +02:00
Quentin 987eddb8c2 Ajout d'un débat 2020-05-07 13:28:39 +02:00
adrien 28a2976f6b Merge pull request 'AG2.md : corrections typographiques' (#1) from guillaumeg/site:master into master
Merci :)
2020-05-07 13:24:57 +02:00
Quentin 0c750cd3c0 Ajout du sondage editable 2020-05-06 21:14:04 +02:00
Quentin 539b1c1561 Ajout du sondage 2020-05-06 21:12:36 +02:00
Quentin 6e266d74fd accord 2020-05-06 20:51:37 +02:00
79 changed files with 3840 additions and 2037 deletions

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
static/
public/
node_modules/
*.swp
.awsclirc

View File

@ -1,3 +0,0 @@
#!/bin/bash
npm install
node render.js

48
.woodpecker.yaml Normal file
View File

@ -0,0 +1,48 @@
steps:
- name: HTML syntax check
image: debian:12
# Debian has tidy 5.6.0, which complains about the "loading" tag in img.
# We need a more recent version for now.
commands:
- DEBIAN_FRONTEND=noninteractive apt update -qq
- DEBIAN_FRONTEND=noninteractive apt install -qq -y wget
- wget -q https://github.com/htacg/tidy-html5/releases/download/5.8.0/tidy-5.8.0-Linux-64bit.deb
- echo "59e594312207234f5a17455683c13c6bc47a89cb7bf994d493acfffb591d9830 tidy-5.8.0-Linux-64bit.deb" | sha256sum -c
- DEBIAN_FRONTEND=noninteractive apt install -qq -y ./tidy-5.8.0-Linux-64bit.deb
- tidy -q -e static/index.html
- name: upload (preprod)
when:
event: [push, pull_request]
branch: preprod
image: plugins/s3
settings:
bucket: preprod-site
endpoint: https://garage.deuxfleurs.fr
region: garage
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
source: static/**/*
target: /
strip_prefix: static/
path_style: true
- name: upload (prod)
when:
- event: push
branch: main
image: plugins/s3
settings:
bucket: deuxfleurs.fr
endpoint: https://garage.deuxfleurs.fr
region: garage
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
source: static/**/*
target: /
strip_prefix: static/
path_style: true

View File

@ -1,9 +1,57 @@
# site
# deuxfleurs.fr - site web
deuxfleurs.fr
## Building
Le site web en ASCII Art de Deuxfleurs
```
./.webpull
'\ ; /'
·`.;.;.`·
·— · · —·
·`';.;'`·
'/ ; \'
.-.
.( ; ;
.-. (_.():')
_( ' ; /(' ; .)
( `(·)` ; ``-'
',_' `·,'
`-`\| +---------------------+
. /) | B i e n v e n u e |
(\|/ +---------------------+
| | |
.,.,\/,}\|//,,, ;/,,\/ | , \,,,;/. ;.;, |,,,,;,;..
Fabriquons un internet convivial ⤵
```
## Structure
- `static` - Ce qui doit être envoyé sur le bucket
- `r` - Pour faire un système de redirection minimaliste. Exemple: `deuxfleurs.fr/r/rdv23`
- `.well-known` - Utilisé par Matrix, Thunderbird, chatons.org et d'autres pour la configuration automatique de pas mal de services
- `img` le dossier qui contient les images
- `res` - Ce qui peut être utile pour modifier le site web
- `calendar.txt` - Tous les calendriers ASCII jusqu'à Décembre 2024
## Générateur de site statique ?
Pas maintenant.
## Déployer en pré-production
Fait automatiquement via Woodpecker sur la branche `preprod`.
Le site en pré-production est ensuite accessible sur <https://preprod-site.web.deuxfleurs.fr/>
## Déployer en production
Fait automatiquement via Woodpecker sur la branche `main`.
## Déployer en production à la main (pas recommandé)
En cas de déploiement manuel : ⚠️ NE FAITES PAS `--delete` car il est fort probable
que des trucs qui doivent rester dans le bucket ne sont pas copiés ici.
```
aws s3 sync static/ s3://deuxfleurs.fr
```

528
package-lock.json generated
View File

@ -1,528 +0,0 @@
{
"name": "site",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/babel-types": {
"version": "7.0.7",
"resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz",
"integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ=="
},
"@types/babylon": {
"version": "6.16.5",
"resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
"integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
"requires": {
"@types/babel-types": "*"
}
},
"acorn": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
"integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
},
"acorn-globals": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
"integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
"requires": {
"acorn": "^4.0.4"
},
"dependencies": {
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
}
}
},
"align-text": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
"requires": {
"kind-of": "^3.0.2",
"longest": "^1.0.1",
"repeat-string": "^1.5.2"
}
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"requires": {
"sprintf-js": "~1.0.2"
}
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
}
},
"babel-types": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"requires": {
"babel-runtime": "^6.26.0",
"esutils": "^2.0.2",
"lodash": "^4.17.4",
"to-fast-properties": "^1.0.3"
}
},
"babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
},
"camelcase": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
},
"center-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"requires": {
"align-text": "^0.1.3",
"lazy-cache": "^1.0.3"
}
},
"character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
"requires": {
"is-regex": "^1.0.3"
}
},
"clean-css": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
"integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
"requires": {
"source-map": "~0.6.0"
}
},
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"requires": {
"center-align": "^0.1.1",
"right-align": "^0.1.1",
"wordwrap": "0.0.2"
}
},
"constantinople": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
"integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
"requires": {
"@types/babel-types": "^7.0.0",
"@types/babylon": "^6.16.2",
"babel-types": "^6.26.0",
"babylon": "^6.18.0"
}
},
"core-js": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
},
"entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-expression": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
"integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
"requires": {
"acorn": "~4.0.2",
"object-assign": "^4.0.1"
},
"dependencies": {
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
}
}
},
"is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
},
"is-regex": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"requires": {
"has": "^1.0.3"
}
},
"js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
},
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
"requires": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
}
},
"jstransformer-markdown-it": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/jstransformer-markdown-it/-/jstransformer-markdown-it-2.1.0.tgz",
"integrity": "sha1-aewwzkUYvtWZezjwJ2SOjChekvc=",
"requires": {
"markdown-it": "^8.0.0"
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"requires": {
"is-buffer": "^1.1.5"
}
},
"lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
},
"linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"requires": {
"uc.micro": "^1.0.1"
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
},
"markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"requires": {
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"marked": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz",
"integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ=="
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
}
},
"pug": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz",
"integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==",
"requires": {
"pug-code-gen": "^2.0.2",
"pug-filters": "^3.1.1",
"pug-lexer": "^4.1.0",
"pug-linker": "^3.0.6",
"pug-load": "^2.0.12",
"pug-parser": "^5.0.1",
"pug-runtime": "^2.0.5",
"pug-strip-comments": "^1.0.4"
}
},
"pug-attrs": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
"integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
"requires": {
"constantinople": "^3.0.1",
"js-stringify": "^1.0.1",
"pug-runtime": "^2.0.5"
}
},
"pug-code-gen": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz",
"integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==",
"requires": {
"constantinople": "^3.1.2",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.1",
"pug-attrs": "^2.0.4",
"pug-error": "^1.3.3",
"pug-runtime": "^2.0.5",
"void-elements": "^2.0.1",
"with": "^5.0.0"
}
},
"pug-error": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
"integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ=="
},
"pug-filters": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz",
"integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==",
"requires": {
"clean-css": "^4.1.11",
"constantinople": "^3.0.1",
"jstransformer": "1.0.0",
"pug-error": "^1.3.3",
"pug-walk": "^1.1.8",
"resolve": "^1.1.6",
"uglify-js": "^2.6.1"
}
},
"pug-lexer": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz",
"integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==",
"requires": {
"character-parser": "^2.1.1",
"is-expression": "^3.0.0",
"pug-error": "^1.3.3"
}
},
"pug-linker": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz",
"integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==",
"requires": {
"pug-error": "^1.3.3",
"pug-walk": "^1.1.8"
}
},
"pug-load": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
"integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
"requires": {
"object-assign": "^4.1.0",
"pug-walk": "^1.1.8"
}
},
"pug-parser": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz",
"integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==",
"requires": {
"pug-error": "^1.3.3",
"token-stream": "0.0.1"
}
},
"pug-runtime": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
"integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw=="
},
"pug-strip-comments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
"integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
"requires": {
"pug-error": "^1.3.3"
}
},
"pug-walk": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
"integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"requires": {
"path-parse": "^1.0.6"
}
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"requires": {
"align-text": "^0.1.1"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
},
"token-stream": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
"integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"requires": {
"source-map": "~0.5.1",
"uglify-to-browserify": "~1.0.0",
"yargs": "~3.10.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true
},
"void-elements": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
},
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
},
"with": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
"integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
"requires": {
"acorn": "^3.1.0",
"acorn-globals": "^3.0.0"
}
},
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
},
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"requires": {
"camelcase": "^1.0.2",
"cliui": "^2.1.0",
"decamelize": "^1.0.0",
"window-size": "0.1.0"
}
}
}
}

View File

@ -1,21 +0,0 @@
{
"name": "site",
"version": "1.0.0",
"description": "deuxfleurs.fr",
"main": "render.js",
"dependencies": {
"jstransformer-markdown-it": "^2.1.0",
"marked": "^0.8.0",
"pug": "^2.0.4"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@git.deuxfleurs.fr:Deuxfleurs/site.git"
},
"author": "",
"license": "ISC"
}

240
render.js
View File

@ -1,240 +0,0 @@
'use strict'
const pug = require('pug')
const marked = require('marked')
const fs = require('fs').promises
const unit = (...args) => null
const log = process.env.VERBOSE ? console.log : unit
const walk = async (path, filename) => {
log('[walk]', path)
const type = await fs.lstat(path)
if (type.isFile()) return {type: 'file', path: path, name: filename || path, tags:[]}
if (!type.isDirectory()) return null
const files = await fs.readdir(path)
return {
type: 'folder',
path: path,
name: filename || path,
tags: [],
children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
}
}
const ext_static = ['.css', '.js', '.otf', '.png', '.svg', '.txt', 'client', 'server']
const ext_md = ['.md', '.markdown']
const ext_pug = ['.pug', '.jade']
const suffix = file => ext => file.substring(file.length - ext.length) == ext ? ext : null
const suffixl = (...l) => file => l.find(suffix(file))
const is_static = suffixl(...ext_static)
const is_md = suffixl(...ext_md)
const is_pug = suffixl(...ext_pug)
const is_templated = f => is_md(f) /* || is_rst(f) */
const is_document = f => is_templated(f) || is_pug(f)
const prefix = file => ext => file.substring(0, ext.length) == ext ? ext : null
const prefixl = (...l) => file => l.find(prefix(file))
const rm_prefix = (...l) => file => file.substring(prefixl(...l)(file).length)
const rm_suffix = (...l) => file => file.substring(0, file.length - suffixl(...l)(file).length)
const propagate_md_layout = (tree, markdown_template) => {
if (tree.type == 'file' && is_templated(tree.name)) {
tree.template = markdown_template
log('[propagate_md_layout]', tree ? tree.path : null, markdown_template ? markdown_template.path : null)
} else if (tree.type == 'folder') {
const find_md_tpl = tree.children.filter(c => c.type == 'file' && c.name == '_markdown.pug')
const new_md_tpl = find_md_tpl.length > 0 ? find_md_tpl[0] : markdown_template
tree.children.forEach(c => propagate_md_layout(c, new_md_tpl))
}
return tree
}
const elagate = tree => {
if (tree.type != 'folder') return tree
const lh = e => log('[elagate]', e.path) && false
tree.children = tree.children.filter(e => !(e.name[0] == '_') || lh(e))
tree.children.forEach(elagate)
return tree
}
const tag_document = tree => {
if (tree.type == 'file' && is_document(tree.name) && tree.name[0] != '@') {
tree.tags.push('document_leaf', 'document')
log('[tag_document]', tree.path, 'document_leaf')
} else if (tree.type == 'folder') {
tree.children.forEach(tag_document)
if(tree.children.some(c => c.tags.includes('document'))) {
tree.tags.push('document_branch', 'document')
log('[tag_document]', tree.path, 'document_branch')
}
}
return tree
}
const reference_index = indexes => tree => {
if (tree.type != 'folder') return tree;
const index = tree.children.find(e => indexes.includes(e.name))
if (index) {
tree.index = index
tree.tags.push('has_index')
log('[reference_index]', tree.path, index.name)
index.tags.push('is_index')
}
tree.children.forEach(reference_index(indexes))
return tree;
}
const propagate_nice_name = prefix => tree => {
const without_prefix = tree.path.substring(prefix.length)
const splitted = without_prefix.split('/').filter(v => v.length > 0)
if (splitted.length > 0) {
tree.nice_path = splitted.slice(0, -1)
tree.nice_name = splitted[splitted.length - 1].split('.')[0]
tree.url = without_prefix
log('[propagate_nice_name]', [...tree.nice_path, tree.nice_name].join('|'))
}
if (tree.type == 'folder') tree.children.forEach(propagate_nice_name(prefix))
return tree
}
const prepare_copy = (old_prefix, new_prefix, exts) => tree => {
if (tree.type == 'file' && is_static(tree.name)) {
tree.generate = {
cmd: 'copy',
src: tree.path,
out: new_prefix + rm_prefix(old_prefix)(tree.path)
}
log('[prepare_copy]',tree.generate.src,'->',tree.generate.out)
} else if (tree.type == 'folder') {
tree.children.forEach(prepare_copy(old_prefix, new_prefix, exts))
}
return tree
}
const prepare_pug = (old_prefix, new_prefix) => tree => {
if (tree.type == 'file' && is_pug(tree.name)) {
tree.old_url = tree.url
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_pug)(tree.path)) + '.html'
tree.generate = {
cmd: 'pug',
src: tree.path,
out: new_prefix + tree.url
}
log('[prepare_pug]',tree.generate.src,'->',tree.generate.out)
}
else if (tree.type == 'folder') {
tree.children.forEach(prepare_pug(old_prefix, new_prefix))
}
return tree
}
const prepare_md = (old_prefix, new_prefix) => tree => {
if (tree.type == 'file' && is_md(tree.name)) {
tree.old_url = tree.url
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_md)(tree.path)) + '.html'
tree.generate = {
cmd: 'pug',
src: tree.template.path,
markdown: tree.path,
out: new_prefix + tree.url
}
log('[prepare_md]',tree.generate.markdown,'+',tree.generate.src,'->',tree.generate.out)
}
else if (tree.type == 'folder') {
tree.children.forEach(prepare_md(old_prefix, new_prefix))
}
return tree
}
const prepare_folder = (old_prefix, new_prefix) => tree => {
if (tree.type == 'folder') {
tree.generate = {
cmd: 'mkdir',
out: new_prefix + rm_prefix(old_prefix)(tree.path)
}
log('[prepare_folder]',tree.generate.out)
tree.children.forEach(prepare_folder(old_prefix, new_prefix))
}
return tree
}
const do_folder = async tree => {
if (!tree.generate || tree.generate.cmd != 'mkdir') return tree
await fs.mkdir(tree.generate.out, { recursive: true })
log('[do_folder]',tree.generate.out)
await Promise.all(tree.children.map(do_folder))
return tree
}
const do_copy = async tree => {
if (tree.generate && tree.generate.cmd == 'copy') {
await fs.copyFile(tree.generate.src, tree.generate.out)
log('[do_copy]',tree.generate.out)
} else if (tree.type == 'folder')
await Promise.all(tree.children.map(do_copy))
return tree
}
const do_pug = (prt, root) => async tree => {
prt = prt || tree
root = root || tree
if (tree.generate && tree.generate.cmd == 'pug') {
const html = pug.renderFile(tree.generate.src, {
markdown: tree.generate.markdown ? marked(await fs.readFile(tree.generate.markdown, 'utf-8')) : null,
prt: prt,
root: root,
element: tree
})
await fs.writeFile(tree.generate.out, html)
log('[do_pug]',tree.generate.out)
} else if (tree.type == 'folder')
await Promise.all(tree.children.map(do_pug(tree,root)))
return tree
}
const rm_tree = t => {
if (t.type == 'file') {
log('[do_clean] file', t.path)
return fs.unlink(t.path)
}
return Promise
.all(t.children.map(rm_tree))
.then(_ => {
log('[do_clean] path', t.path)
return fs.rmdir(t.path)
})
}
const do_clean = path => tree => walk(path).then(rm_tree).then(_ => tree)
const conf = { src: './src', dest: './static'}
walk(conf.src)
.then(propagate_md_layout)
.then(elagate)
.then(tag_document)
.then(reference_index(['index.md', 'index.pug']))
.then(propagate_nice_name(conf.src))
.then(prepare_copy(conf.src, conf.dest))
.then(prepare_pug(conf.src, conf.dest))
.then(prepare_md(conf.src, conf.dest))
.then(prepare_folder(conf.src, conf.dest))
//.then(v => {log(v) ; return v})
.then(do_clean(conf.dest))
.then(do_folder)
.then(do_copy)
.then(do_pug())
.catch(console.error)

417
res/calendars.txt Normal file
View File

@ -0,0 +1,417 @@
.——————————————————————————————————————.
| CALENDRIER OCTOBRE 2022 |
|——————————————————————————————————————|
| ———— ———— |
| | 01 | 02 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 31 | |
| ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER NOVEMBRE 2022 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 28 | 29 | 30 | |
| ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER DÉCEMBRE 2022 |
|——————————————————————————————————————|
| ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 26 | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JANVIER 2023 |
|——————————————————————————————————————|
| ———— |
| | 01 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 30 | 31 | |
| ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER FÉVRIER 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 27 | 28 | |
| ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER MARS 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER AVRIL 2023 |
|——————————————————————————————————————|
| ———— ———— |
| | 01 | 02 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER MAI 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 29 | 30 | 31 | |
| ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JUIN 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JUILLET 2023 |
|——————————————————————————————————————|
| ———— ———— |
| | 01 | 02 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 31 | |
| ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER AOÛT 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER SEPTEMBRE 2023 |
|——————————————————————————————————————|
| ———— ———— ———— |
| | 01 | 02 | 03 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER OCTOBRE 2023 |
|——————————————————————————————————————|
| ———— |
| | 01 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 30 | 31 | |
| ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER NOVEMBRE 2023 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER DÉCEMBRE 2023 |
|——————————————————————————————————————|
| ———— ———— ———— |
| | 01 | 02 | 03 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JANVIER 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 29 | 30 | 31 | |
| ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER FÉVRIER 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 26 | 27 | 28 | 29 | |
| ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER MARS 2024 |
|——————————————————————————————————————|
| ———— ———— ———— |
| | 01 | 02 | 03 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER AVRIL 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 29 | 30 | |
| ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER MAI 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JUIN 2024 |
|——————————————————————————————————————|
| ———— ———— |
| | 01 | 02 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER JUILLET 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 29 | 30 | 31 | |
| ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER AOÛT 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 26 | 27 | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER SEPTEMBRE 2024 |
|——————————————————————————————————————|
| ———— |
| | 01 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 30 | |
| ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER OCTOBRE 2024 |
|——————————————————————————————————————|
| ———— ———— ———— ———— ———— ———— |
| | 01 | 02 | 03 | 04 | 05 | 06 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 28 | 29 | 30 | 31 | |
| ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER NOVEMBRE 2024 |
|——————————————————————————————————————|
| ———— ———— ———— |
| | 01 | 02 | 03 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 25 | 26 | 27 | 28 | 29 | 30 | |
| ———— ———— ———— ———— ———— ———— |
|______________________________________|
.——————————————————————————————————————.
| CALENDRIER DÉCEMBRE 2024 |
|——————————————————————————————————————|
| ———— |
| | 01 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
| ———— ———— ———— ———— ———— ———— ———— |
| | 30 | 31 | |
| ———— ———— |
|______________________________________|

View File

@ -1,9 +0,0 @@
{
"m.homeserver": {
"base_url": "https://im.deuxfleurs.fr"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
}

View File

@ -1,10 +0,0 @@
extends _layout.pug
prepend root
- title = "Visioconférence"
block content
h4.spacing
| Cette page a changé d'adresse :
a(href="/Guide/Discussion.html") cliquez ici pour être redirigé

View File

@ -1,49 +0,0 @@
Le 13 janvier 2020 à 19 heures, les fondateurs de l'association
Deuxfleurs se sont réunis en assemblée générale constitutive au 24 rue
des Tanneurs à Rennes. Sont présents Adrien, Alex, Anaïs, Axelle,
Louison, Maximilien, Quentin, Rémi et Vincent.
L'assemblée générale désigne Adrien en qualité de président de
séance et Quentin en qualité de secrétaire de séance. Le
président de séance met à la disposition des présents le projet de
statuts de l'association et l'état des actes passés pour le compte de
l'association en formation.
Puis il rappelle que l'assemblée générale constitutive est appelée à
statuer sur l'ordre du jour suivant :
- présentation du projet de constitution de l'association ;
- présentation du projet de statuts ;
- adoption des statuts ;
- désignation des premiers membres du conseil ;
- pouvoirs en vue des formalités de déclaration et publication.
Enfin, le président de séance expose les motifs du projet de création de
l'association et commente le projet de statuts. Il ouvre la discussion.
Un débat s'instaure entre les membres de l'assemblée.
Après quoi, personne ne demandant plus la parole, le président met
successivement aux voix les délibérations suivantes.
### 1e délibération
L'assemblée générale adopte les statuts dont le projet lui a été soumis.
Cette délibération est adoptée à l'unanimité.
### 2e délibération
L'assemblée générale constitutive désigne en qualité de premiers membres
du conseil d'administration :
- Adrien
- Alex
- Maximilien
- Quentin
- Vincent
Conformément aux statuts, cette désignation est faite pour une durée
expirant lors de l'assemblée générale qui sera appelée à statuer sur les
comptes de l'exercice clos le 13 janvier 2021. Les membres du conseil
ainsi désignés acceptent leurs fonctions
Nom, prénom et signature du président et du secrétaire de séance

View File

@ -1,131 +0,0 @@
Présent : Quentin, Alex, Maximilien, Vincent
Remote : Simon
Invité : Tom
> Maximilien prends des notes.
https://p.adnab.me/pad/#/2/pad/edit/VOqs46ZeH7iR2EnL63xeXxHP/
Depuis l'AG 1
-------------
Quentin (anime la réunion) :
- Migration DNS (depuis Cloudflare vers Online)
- Ajout domaine deuxfleurs.org (acheté par Maximilien)
- Quentin explique la partie technique
- Alex explique les avancées sur la partie LDAP/authentification basée sur consul (bottin + guichet)
- Ajout de l'invitation dans guichet (lien à usage unique)
- Nettoyage des comptes LDAP
- Mettre une étiquette deuxfleurs sur la boite de Quentin
- Discussion avec Jaxom & Almet sur l'hébergement
- Le site web c'est important, tout le monde en parle
- Refondre la partie graphique pour la rendre plus attrayante et moins RFC-like
- Alex s'est lancé dans du dev de bridge matrix qui fonctionne pour mattermost et XMPP
- Le bridge mattermost focntionne pas mal
Ce que l'on n'a pas encore fait
-------------------------------
Banque : la moitié des cotisations part dans une banque
Décision de faire un pot commun ?
Continuer sans ? (mais c'est dans les statuts)
> Vote : trésorerie en liquide jusqu'à 200€
> Sinon on dépense ou bien on ouvre un compte
- 200€ : contre 0, neutre 0, unanimité pour
- Fonctionner en pot commun : contre 0, neutre 0, unanimité pour
**Motion voté.**
### Gestion de la compta
Quentin a un compte courant vide. Mais à son avis pas une bonne idéee.
Gestion de la compta sur un logiciel (lequel ?)
Trésorier ?
Alex a trouvé une boite.
> Vote : Alex est le gardien de la boite qui contient les cotisations dans la limite de 200€
> Contre : 0, Neutre 0, Unanimité
Pour le choix du logiciel, Maximilien enverra un mail avec des solutions. L'idée de base est de mettre le fichier dans un repo git (facilement backupé et consultable), avec des commit signés.
Pour les présents, les cotisations sont payables à la fin de l'AG.
### Charte
Trouver pour la prochaine AG (voire avant) une base. Maximilien doit envoyer des idées sur la base de ce qui est fait en conférence. Quentin envoie des idée pour les projets Open-Source.
### Site web
Intégrer la documentation au site web, afin qu'elle soit consultable et plus transparent par rapport aux infrastructure.
Outil pour build du Markdown avec un blog statique.
Utiliser les outils de templating des trucs web.
Quentin fera une proposition.
Simon : Les gens qui font des choses se doivent de les documenter.
À qui s'adresse la documentation :
- tout ce qui tourne autour de l'administration
- de l'accessibilité
- la partie technique
Répliquer le gitea d'Adrien (Maximilien va leur faire sur le sien).
### Lieux de réunion
Vincent propose le salon de thé (on peut commander un café), mais on est trop bruyant ?
Pas de souci tant que l'on rentre dans un salon de chez quelqu'un (jusqu'à 10-12 personnes)
Les objectifs
-------------
Quentin : but original du CHATON, documenter l'auto-hébergement distribué, fournir des services que tu gères toi-même, sans manipulation ni tracking
Trois niveaux :
- petits services
- backups et disaster-recovery
- CHATON (candidature chez framasoft et référencement) : l'objectif est-il d'obtenir le label ou bien simplement de s'inspirer de leur idéal ?
> Simon : pour la partie non technique, sauf si cela présente un effort technique trop important.
> Quentin : leur cahier des charges n'est pas aberrant et pourrait être un guide sur le développement de l'infra
**TODO** : faire un document de travail (Quentin a fait une milestone dans le gitea)
- géo-distribué (résilient à la perte d'une machine/d'un site - penser datacenter)
**TARGET** soumettre une candidature _CHATON_ dans 6 mois
Pour la géo-distribution, Quentin préconise le backend S3-compatible
Approche totalement différente des ressources.
Débat à suivre.
### Recommandations
Quentin : si jamais on embarque des gens et que l'on leur fait faux bond, on dessert la cause de l'hébergement participatif.
Alex : il est de la responsabilité des personnes qui créent un compte de s'informer des limites
Simon : par cooptation : chacun voit midi à sa porte.
> Vote : Maximilie propose l'ajout d'un avertissement sur le formulaire d'inscription de guichet. La rédaction du bloc de text est laissé à Maximilien, et soumise à l'approbation du prochain conseil d'afministration.
> Contre : 0, Neutre 0, Unanimité
Repasser sur le document de travail
-----------------------------------
Alex : priorité de faire le site web et d'avoir une solution facilement éditable pour les PV d'AG & co (pas tout le temps dépendre des pads)
Quentin : les PV en PDF sont stockés dans un repos
Retex de Toms
-------------
Toms est intéressé pour rejoindre l'association.
Pas assez de vison pour savoir si c'est réalisable.
Quentin montre la nouvelle maquette du site web.

View File

@ -1,13 +0,0 @@
## Planification
Il faut prévoir une date et un lieu.
Pour la date, la 1ère semaine de mai permettrait de tenir notre intervalle de deux mois.
Pour le lieu, considérant le confinement, ce sera très probablement sur le Jitsi Deuxfleurs.
Ordre du jour :
- Debrief des deux mois
- Déploiement du site web
- Déploiement et debug du Jitsi
*N'hésitez pas à compléter ce document*

View File

@ -1,126 +0,0 @@
### Article 1. Constitution et dénomination
Il est fondé entre les adhérents aux présents statuts une association
régie par la loi 1901, ayant pour titre Deuxfleurs.
### Article 2. Buts
Cette association a pour but de défendre et promouvoir les libertés
individuelles et collectives à travers la mise en place d'infrastuctures
numériques libres.
### Article 3. Siège social
Le siège social est fixé au 10A, Allée de Lanvaux, 35700 Rennes. Il
pourra être transféré suite à un vote par l'assemblée générale.
### Article 4. Durée de l'association
L'association perdure tant qu'elle possède au moins un membre, ou
jusqu'à sa dissolution décidée en assemblée générale.
<a name="article-admission" />
### Article 5. Admission et adhésion
Pour faire partie de l'association, il faut être coopté par un membre de
l'association, adhérer aux présents statuts et s'acquitter de la
cotisation annuelle dont le montant est de 10 euros.
### Article 6. Composition de l'association
L'association se compose exclusivement de membres admis selon les dispositions
de l'[Article 5](#article-admission) et à jour de leur cotisation. Tout membre
actif possède une voix lors des votes en assemblée générale. Est considéré
actif tout membre présent à l'assemblée générale (physiquement, par
visioconférence ou par procuration écrite donnée à un autre membre de
l'association).
### Article 7. Perte de la qualité de membre
La qualité de membre se perd par :
- la démission,
- le non-renouvelement de la cotisation dans un délai de deux mois
après le 1er Janvier de l'année courante,
- le décès,
- la radiation prononcée aux deux tiers des votes exprimés, lors d'un
vote extraordinaire ou de l'assemblée générale.
<a name="article-ag" />
### Article 8. L'assemblée générale
L'assemblée générale ordinaire se réunit au moins une fois par an, convoquée
par le conseil d'administration. L'assemblée générale extraordinaire est
convoquée par le conseil d'administration, à la demande de celui-ci ou à la
demande du quart au moins des membres de l'association.
L'assemblée générale (ordinaire ou extraordinaire) comprend tous les
membres de l'association à jour de leur cotisation. Quinze jours au
moins avant la date fixée, les membres de l'association sont convoqués
via la liste de diffusion de l'association et l'ordre du jour est
inscrit sur les convocations.
Le conseil d'administration anime l'assemblée générale. L'assemblée
générale, après avoir délibéré, se prononce sur le rapport moral et/ou
d'activités. Le conseil d'administration rend compte de l'exercice
financier clos et soumet le bilan de l'exercice clos à l'approbation de
l'assemblée dans un délai de six mois après la clôture des comptes.
L'assemblée générale délibère sur les orientations à venir et se
prononce sur le budget prévisionnel de l'année en cours.
Elle pourvoit, au scrutin secret, à la nomination ou au renouvellement
des membres du conseil d'administration via un scrutin de Condorcet
Randomisé. Elle fixe le montant de la cotisation annuelle. Les décisions
de l'assemblée sont prises à la majorité des membres présents ou
représentés. Chaque membre présent ne peut détenir plus d'une
procuration.
### Article 9. Membres mineurs
Les mineurs peuvent adhérer à l'association sous réserve d'un accord
tacite ou d'une autorisation écrite de leurs parents ou tuteurs légaux.
Ils sont membres à part entière de l'association. Seuls les membres âgés
de 16 ans au moins au jour d'une élection sont autorisés à y voter,
notamment au cours d'une assemblée générale. Pour les autres, leur droit
de vote est transmis à leur représentant légal.
### Article 10. Le conseil d'administration
L'association est administrée par un conseil d'administration composé de
3 à 6 membres, élus pour 1 an dans les conditions fixées à
l'[Article 8](#article-ag). Tous les membres de l'association à jour de
leur cotisation sont éligibles. En cas de vacance de poste, le conseil
d'administration peut pourvoir provisoirement au remplacement de ses
membres. Ce remplacement est obligatoire quand le conseil
d'administration compte moins de 3 membres. Il est procédé à leur
remplacement définitif à la plus prochaine assemblée générale. Les
pouvoirs des membres ainsi élus prennent fin à l'époque où devrait
normalement expirer le mandat des membres remplacés.
Le conseil d'administration met en œuvre les décisions de l'assemblée
générale, organise et anime la vie de l'association, dans le cadre fixé
par les statuts. Chacun de ses membres peut être habilité par le conseil
à remplir toutes les formalités de déclaration et de publication
prescrites par la législation et tout autre acte nécessaire au
fonctionnement de l'association et décidé par le conseil
d'administration. Tous les membres du conseil d'administration sont
responsables des engagements contractés par l'association. Tout contrat
ou convention passé entre l'association d'une part, et un membre du
conseil d'administration, son conjoint ou un proche, d'autre part, est
soumis pour autorisation au conseil d'administration et présenté pour
information à la plus prochaine assemblée générale. Le conseil
d'administration se réunit au moins 4 fois par an et toutes les fois
qu'il est convoqué par le tiers de ses membres. La présence de la moitié
au moins des membres du conseil est nécessaire pour que le conseil
d'administration puisse délibérer valablement. Les décisions sont prises
au consensus et, à défaut, à la majorité des voix des présents. Le vote
par procuration n'est pas autorisé.
### Article 11. Modification des statuts de l'association
Sur demande d'un tiers des membres actifs, ou sur demande du conseil
d'administration, des amendements aux statuts de l'association peuvent
être discutés et soumis au vote lors d'une assemblée générale, selon les
modalités de l'[Article 8](#article-ag).

View File

@ -1,54 +0,0 @@
### Notre raison d'être
Aujourd'hui, de grandes entreprises conçoivent des services numériques qui ont
pour objectif de
<a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_l%27attention">maximiser le temps</a>
que nous passons dessus, de
<a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_la_surveillance">collecter et recouper des données</a>
à notre insu pour nous influencer, de
<a href="https://www.april.org/le-parlement-europeen-valide-la-generalisation-de-la-censure-automatisee">limiter nos possibilités d'expression</a>
au delà du cadre légal et de
<a href="https://fr.wikipedia.org/wiki/Embrace,_extend_and_extinguish">créer de nouveaux monopoles</a>.
Ces effets nous montrent que la technologie n'est pas
neutre et a un réel impact sur nos vies. En choisissant et en hébergeant nos
propres outils de communication, sans but lucratif ni hégémonique, nous
espérons nous affranchir de ces nuisances et préserver nos libertés.
Pour en savoir plus, rendez-vous sur
<a href="https://www.laquadrature.net/">La Quadrature du Net</a>
et allez lire le manifeste <a href="https://chatons.org/fr/manifeste">des CHATONS</a>.
### Nos objectifs
#### Des utilisateurs impliqués
Que ce soit à l'école, par l'expérimentation, via un forum d'échange, lors d'un
atelier, via une publicité à la télévision, un tutoriel, lors d'une discussion
avec un ami, il y toujours une phase d'apprentissage en informatique.
Malheureusement, dans ces conditions, dur de lutter pour des services libres
face à la puissance de frappe d'une entreprise et des logiciels ayant une base
d'utilisateurs immense. Nous pensons donc qu'une personne souhaitant s'héberger
chez un hébergeur indépendant a besoin d'un accompagnement. C'est pourquoi les
inscriptions se font par cooptation. La cooptation permet aussi un lien de
confiance et ainsi de se prémunir de bon nombres d'attaques que subissent les
hébergeurs.
<p class="center"><a href="/Documentation/Association/">En savoir plus sur l'association</a></p>
#### Une architecture résiliente
Les sites webs, les réseaux sociaux, les emails ne peuvent fonctionner que
grâce à des ordinateurs qui restent allumés 24/24h et qui n'attendent que vous.
Cependant, ces derniers sont faillibles. Une coupure d'électricité, un disque
dur cassé, une mise à jour ratée, un bug dans le logiciel, les raisons ne
manquent pas. Heureusement, il est possible de masquer ces pannes avec du
logiciel astucieusement conçu. C'est pourquoi vous avez l'impression que Google
est toujours disponible, que Dropbox ne perd pas vos données, etc. La gestion
de ces pannes, c'est aussi ce qui rend la vie compliquée aux hébergeurs
indépendants. Entre incompréhension des utilisateurs quand un service est hors
ligne et sueurs froides pour les administrateurs, ça n'a rien de marrant. Et
c'est très chronophage. Notre objectif est donc de construire des solutions
d'hébergements qui peuvent résister à ces pannes.
<p class="center"><a href="/Documentation/Technique/">En savoir plus sur l'aspect technique</a></p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1013 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 KiB

View File

@ -1,37 +0,0 @@
extends ../_layout.pug
prepend root
- title = "Discussions"
block content
.spacing
h2 Accès rapides
.list
a.service-box.spacing(href='https://riot.deuxfleurs.fr')
div(style='font-size: 80px; height: 120px') 🌐
h3 Accéder via le navigateur
a.service-box.spacing(href='https://play.google.com/store/apps/details?id=im.vector.app&hl=fr')
div(style='font-size: 80px; height: 120px') 📥
h3 Application Android
a.service-box.spacing(href='https://apps.apple.com/fr/app/riot-im/id1083446067')
div(style='font-size: 80px; height: 120px') 📥
h3 Application iOS
br
h2.spacing Premiers pas sur Android
.screenlist
img(src="Assets/riot_install4.png", height="400")
img(src="Assets/riot_install5.png", height="400")
img(src="Assets/riot_connect2.png", height="400")
img(src="Assets/riot_connect25.png", height="400")
img(src="Assets/riot_connect3.png", height="400")
img(src="Assets/riot_connect4.png", height="400")
img(src="Assets/riot_connect5.png", height="400")
style.
.screenlist > img {
padding: 20px;
}

View File

@ -1,88 +0,0 @@
extends ../_layout.pug
prepend root
- title = "Visioconférence"
block content
.spacing
h2 Rejoindre une réunion
.spacing
p Veuillez entrer le nom de la réunion que vous souhaitez rejoindre :
input#joinname(type="text", placeholder="Nom de la réunion")
a.button#joinbtn(href="#") rejoindre
p
| Le lien d'accès rapide à cette conférence est
|
a#joinlink
.spacing2
h2 Guide de préparation d'une réunion
h3.spacing Étape 1 : Choisissez un nom de réunion (par exemple : "karaté-lyon")
h3 Étape 2 : Informez vos participants de la date de votre réunion et du nom de la réunion
h3
| Étape 3 : Au moment voulu, pour rejoindre la conversation, les participants devront se rendre sur le site
|
a(href="https://deuxfleurs.fr") deuxfleurs.fr
h3 Étape 4 : Puis, une fois sur la page d'accueil, cliquer sur le bouton "📞 visioconférence" (pour arriver sur cette page)
h3 Étape 5 : Enfin, les participants doivent entrer le nom de la réunion (par exemple : "karaté-lyon") et cliquer sur "rejoindre"
h3 Étape 6 : La conférence commence
p Si vous êtes sur téléphone ou tablette, vous devrez cliquez sur "Download the app" pour installer l'app "Jitsi Meet" la première fois et les fois suivantes sur "Continue to the app" avant de pouvoir commencer la conférence.
p Si vous êtes sur un ordinateur et que vous utilisez Mozilla Firefox, vous allez rencontrer un message d'erreur comme quoi votre navigateur n'est pas encore supporté.<br/>En attendant, vous pouvez installer <a href="https://brave.com/">Brave</a> ou <a href="https://www.google.com/intl/fr_fr/chrome/">Google Chrome</a> (nous déplorons cette situation, <a href="https://www.nextinpact.com/brief/videoconferences---firefox-et-jitsi-travaillent-a-un-meilleur-support-11906.htm">explications</a>).
.spacing2
h2 Conseils pour réussir votre réunion
h3.spacing Bien se préparer
p Vous pouvez rejoindre une réunion n'importe quand. Vous pouvez donc tester les étapes du "guide de préparation" en avance !
h3.spacing Bien s'entendre pendant la réunion
p "Tu m'entends ? Non pas très bien ! Qu'est ce que tu viens de dire ?" : quelques conseils pour bien s'entendre pour éviter ça et passer un bon moment.
p
strong Améliorez le son :
|
| l'idéal est d'avoir un casque avec microphone ou des écouteurs avec microphone pour capter le son au plus près de votre bouche et empêcher l'écho (que votre microphone capte ce qui sort sur les hauts parleurs). Si vous n'avez pas de casques ou d'écouteurs ou que vous êtes plusieurs, les ordinateurs portables récents captent mieux le son que les anciens, et généralement votre téléphone captera mieux le son que votre ordinateur. De plus, si vous êtes plusieurs, vous devez savoir que les microphones sont directifs : si vous êtes proches et bien en face de l'ordinateur, on vous entendra bien, sinon on ne vous entendra pas du tout ! En groupe, tournez l'ordinateur vers la personne qui parle ou mettez-vous bien en face pour parler !
p
strong Améliorez votre connexion :
|
| la visioconférence est très sensible à la qualité de votre connexion internet. Si vous le pouvez, connectez votre ordinateur en filaire (cable ethernet) à votre <em>box</em> (routeur internet). Si vous souhaitez rester en sans-fil (wifi), essayez de vous rapprocher de votre <em>box</em>. Le type de connexion internet influencera également la qualité de votre visioconférence : la fibre est idéale, l'ADSL ou les réseaux mobiles (4G et 3G) sont plus incertains.
p
strong Réduisez vos usages :
|
| Activer la vidéo peut causer des interruptions ou dégrader la qualité du son. Si vous n'avez pas besoin de la vidéo, désactivez là ou garder là seulement pour certains participants. Si vous ne parlez pas, vous pouvez également couper votre microphone. Il est possible de passer en mode "talkie walkie" sur ordinateur avec la touche espace. Vous maintenez la touche espace, votre micro est activé. Vous arrêtez d'appuyer sur la touche espace, votre micro est coupé.
p Si vous appliquez ces conseils, vous devriez arriver à communiquer sans peine. Bonnes communications !
script.
(_ => {
const base_url = 'https://jitsi.deuxfleurs.fr/'
const get_meeting_id = raw => raw.replace( /[^a-zA-Z0-9]/gi, '')
const get_meeting_url = raw => base_url + get_meeting_id(raw)
const joinbtn = document.getElementById('joinbtn')
const joinname = document.getElementById('joinname')
const joinlink = document.getElementById('joinlink')
window.addEventListener('pageshow', e => {
joinbtn.text = "rejoindre"
})
joinbtn.onclick = _ => {
const meetingid = joinname.value
if (!meetingid) return // meetingid is empty
window.location.href = get_meeting_url(meetingid)
joinbtn.text = "chargement..."
}
joinname.addEventListener('input', v => {
const l = v.target.value ? get_meeting_url(v.target.value) : ""
joinlink.textContent = l
joinlink.href = l
})
})()

View File

@ -1 +0,0 @@
Le code de Bottin se trouve ici : https://git.deuxfleurs.fr/Deuxfleurs/bottin

View File

@ -1 +0,0 @@
Le code est ici : https://git.deuxfleurs.fr/Deuxfleurs/diplonat

View File

@ -1,241 +0,0 @@
# Garage: a S3-like object storage
Store pile of bytes in your garage.
## Context
Data storage is critical: it can lead to data loss if done badly and/or on hardware failure.
Filesystems + RAID can help on a single machine but a machine failure can put the whole storage offline.
Moreover, it put a hard limit on scalability. Often this limit can be pushed back far away by buying expensive machines.
But here we consider non specialized off the shelf machines that can be as low powered and subject to failures as a raspberry pi.
Distributed storage may help to solve both availability and scalability problems on these machines.
Many solutions were proposed, they can be categorized as block storage, file storage and object storage depending on the abstraction they provide.
## Related work
Block storage is the most low level one, it's like exposing your raw hard drive over the network.
It requires very low latencies and stable network, that are often dedicated.
However it provides disk devices that can be manipulated by the operating system with the less constraints: it can be partitioned with any filesystem, meaning that it supports even the most exotic features.
We can cite [iSCSI](https://en.wikipedia.org/wiki/ISCSI) or [Fibre Channel](https://en.wikipedia.org/wiki/Fibre_Channel).
Openstack Cinder proxy previous solution to provide an uniform API.
File storage provides a higher abstraction, they are one filesystem among others, which means they don't necessarily have all the exotic features of every filesystem.
Often, they relax some POSIX constraints while many applications will still be compatible without any modification.
As an example, we are able to run MariaDB (very slowly) over GlusterFS...
We can also mention CephFS (read [RADOS](https://ceph.com/wp-content/uploads/2016/08/weil-rados-pdsw07.pdf) whitepaper), Lustre, LizardFS, MooseFS, etc.
OpenStack Manila proxy previous solutions to provide an uniform API.
Finally object storages provide the highest level abstraction.
They are the testimony that the POSIX filesystem API is not adapted to distributed filesystems.
Especially, the strong concistency has been dropped in favor of eventual consistency which is way more convenient and powerful in presence of high latencies and unreliability.
We often read about S3 that pioneered the concept that it's a filesystem for the WAN.
Applications must be adapted to work for the desired object storage service.
Today, the S3 HTTP REST API acts as a standard in the industry.
However, Amazon S3 source code is not open but alternatives were proposed.
We identified Minio, Pithos, Swift and Ceph.
Minio/Ceph enforces a total order, so properties similar to a (relaxed) filesystem.
Swift and Pithos are probably the most similar to AWS S3 with their consistent hashing ring.
There was many attempts in research too. I am only thinking to [LBFS](https://pdos.csail.mit.edu/papers/lbfs:sosp01/lbfs.pdf) that was used as a basis for Seafile.
- Cassandra (ScyllaDB) for metadata
- Own system using consistent hashing for data chunks
**Quentin:**
- pas d'erasure coding mais des checksums à côté des fichiers (ou dans les meta données)
- 2 ou 3 copies, configurable, potentiellement on a per bucket or per file basis
- on ne setup pas à la main en effet, je pensais au système qui scan sa partition de stockage et qui fait stockage géré = min(stockage de la partition - stockage que je ne gère pas, stockage alloué)
- La DHT/Ring à la dynamo, on doit pouvoir repomper un millier de truc sur leur papier. Surtout que je me le suis déja cogné deux fois. Le nombre d'entrées que tu mets est un multiple de ton stockage. eg: 500 Go, on fait des tranches de 10 Go --> 50 entrées dans le ring.
- un protocole de maintenance pompé sur le papier dynamo avec de l'anti entropy qui vérifie les blobs et leurs checksums (en plus de la vérification réalisée à la lecture)
- une interface web qui te donne en presque direct la santé de ton cluster (noeuds en vie, états de la réplication des données, problèmes de checksums)
**Other ideas:**
- split objects in constant size blocks or use the SeaFile strategy for better de-duplication? (Content Defined Chunking, Rabin's algorithm etc)
_Remark 1_ I really like the Rabin fingerprinting approach however deduplication means we need to implement reference counting. How do we implement it? If we suppose a CRDT counter, if we do +1, +1, -1 but counter is registered as +1, -1, +1, we are at zero at one point and lost ou chunk. ---> we need to be careful in our implementation if we want to play.
_Remark 2_ Seafile idea has been stolen from this article: https://pdos.csail.mit.edu/papers/lbfs:sosp01/lbfs.pdf
#### Random notes
--> we should not talk about block. It is the abstraction that manipulate your FS to interact with your hard drive. "Chunk" is probably more appropriate. Block storage are a class of distributed storage where you expose the abstraction of your hard drive over the network, mainly SATA over ethernet, thinking to SCSI, FiberChannel, and so on
### Questions à résoudre
1. est-ce que cassandra support de mettre certaines tables sur un SSD et d'autres sur un disque rotatif ?
2. est-ce que cassandra/scylladb a un format de table on disk qui ne s'écroule pas complètement losque tu as des gros blobs ? (les devs de sqlite ont écrit tout un article pour dire que même avec leur lib qui est quand même sacrément optimisés, ils considèrent qu'à partir de je crois 4ko c'est plus efficace de mettre les blobs dans des fichiers séparés) - https://www.sqlite.org/intern-v-extern-blob.html
3. Quelle taille de blocs ? L'idée c'est qu'on a quand même des liens en WAN avec des débits pas forcéments incroyables. Et ça serait bien que le temps de répliquer un bloc soit de l'ordre de la seconde maxi. En cas de retry, pour pouvoir mieux monitorer la progression, etc. Exoscale utilise 16Mo. LX propose 1Mo.
#### Modules
- `membership/`: configuration, membership management (gossip of node's presence and status), ring generation --> what about Serf (used by Consul/Nomad) : https://www.serf.io/? Seems a huge library with many features so maybe overkill/hard to integrate
- `metadata/`: metadata management
- `blocks/`: block management, writing, GC and rebalancing
- `internal/`: server to server communication (HTTP server and client that reuses connections, TLS if we want, etc)
- `api/`: S3 API
- `web/`: web management interface
#### Metadata tables
**Objects:**
- *Hash key:* Bucket name (string)
- *Sort key:* Object key (string)
- *Sort key:* Version timestamp (int)
- *Sort key:* Version UUID (string)
- Complete: bool
- Inline: bool, true for objects < threshold (say 1024)
- Object size (int)
- Mime type (string)
- Data for inlined objects (blob)
- Hash of first block otherwise (string)
*Having only a hash key on the bucket name will lead to storing all file entries of this table for a specific bucket on a single node. At the same time, it is the only way I see to rapidly being able to list all bucket entries...*
**Blocks:**
- *Hash key:* Version UUID (string)
- *Sort key:* Offset of block in total file (int)
- Hash of data block (string)
A version is defined by the existence of at least one entry in the blocks table for a certain version UUID.
We must keep the following invariant: if a version exists in the blocks table, it has to be referenced in the objects table.
We explicitly manage concurrent versions of an object: the version timestamp and version UUID columns are index columns, thus we may have several concurrent versions of an object.
Important: before deleting an older version from the objects table, we must make sure that we did a successfull delete of the blocks of that version from the blocks table.
Thus, the workflow for reading an object is as follows:
1. Check permissions (LDAP)
2. Read entry in object table. If data is inline, we have its data, stop here.
-> if several versions, take newest one and launch deletion of old ones in background
3. Read first block from cluster. If size <= 1 block, stop here.
4. Simultaneously with previous step, if size > 1 block: query the Blocks table for the IDs of the next blocks
5. Read subsequent blocks from cluster
Workflow for PUT:
1. Check write permission (LDAP)
2. Select a new version UUID
3. Write a preliminary entry for the new version in the objects table with complete = false
4. Send blocks to cluster and write entries in the blocks table
5. Update the version with complete = true and all of the accurate information (size, etc)
6. Return success to the user
7. Launch a background job to check and delete older versions
Workflow for DELETE:
1. Check write permission (LDAP)
2. Get current version (or versions) in object table
3. Do the deletion of those versions NOT IN A BACKGROUND JOB THIS TIME
4. Return succes to the user if we were able to delete blocks from the blocks table and entries from the object table
To delete a version:
1. List the blocks from Cassandra
2. For each block, delete it from cluster. Don't care if some deletions fail, we can do GC.
3. Delete all of the blocks from the blocks table
4. Finally, delete the version from the objects table
Known issue: if someone is reading from a version that we want to delete and the object is big, the read might be interrupted. I think it is ok to leave it like this, we just cut the connection if data disappears during a read.
("Soit P un problème, on s'en fout est une solution à ce problème")
#### Block storage on disk
**Blocks themselves:**
- file path = /blobs/(first 3 hex digits of hash)/(rest of hash)
**Reverse index for GC & other block-level metadata:**
- file path = /meta/(first 3 hex digits of hash)/(rest of hash)
- map block hash -> set of version UUIDs where it is referenced
Usefull metadata:
- list of versions that reference this block in the Casandra table, so that we can do GC by checking in Cassandra that the lines still exist
- list of other nodes that we know have acknowledged a write of this block, usefull in the rebalancing algorithm
Write strategy: have a single thread that does all write IO so that it is serialized (or have several threads that manage independent parts of the hash space). When writing a blob, write it to a temporary file, close, then rename so that a concurrent read gets a consistent result (either not found or found with whole content).
Read strategy: the only read operation is get(hash) that returns either the data or not found (can do a corruption check as well and return corrupted state if it is the case). Can be done concurrently with writes.
**Internal API:**
- get(block hash) -> ok+data/not found/corrupted
- put(block hash & data, version uuid + offset) -> ok/error
- put with no data(block hash, version uuid + offset) -> ok/not found plz send data/error
- delete(block hash, version uuid + offset) -> ok/error
GC: when last ref is deleted, delete block.
Long GC procedure: check in Cassandra that version UUIDs still exist and references this block.
Rebalancing: takes as argument the list of newly added nodes.
- List all blocks that we have. For each block:
- If it hits a newly introduced node, send it to them.
Use put with no data first to check if it has to be sent to them already or not.
Use a random listing order to avoid race conditions (they do no harm but we might have two nodes sending the same thing at the same time thus wasting time).
- If it doesn't hit us anymore, delete it and its reference list.
Only one balancing can be running at a same time. It can be restarted at the beginning with new parameters.
#### Membership management
Two sets of nodes:
- set of nodes from which a ping was recently received, with status: number of stored blocks, request counters, error counters, GC%, rebalancing%
(eviction from this set after say 30 seconds without ping)
- set of nodes that are part of the system, explicitly modified by the operator using the web UI (persisted to disk),
is a CRDT using a version number for the value of the whole set
Thus, three states for nodes:
- healthy: in both sets
- missing: not pingable but part of desired cluster
- unused/draining: currently present but not part of the desired cluster, empty = if contains nothing, draining = if still contains some blocks
Membership messages between nodes:
- ping with current state + hash of current membership info -> reply with same info
- send&get back membership info (the ids of nodes that are in the two sets): used when no local membership change in a long time and membership info hash discrepancy detected with first message (passive membership fixing with full CRDT gossip)
- inform of newly pingable node(s) -> no result, when receive new info repeat to all (reliable broadcast)
- inform of operator membership change -> no result, when receive new info repeat to all (reliable broadcast)
Ring: generated from the desired set of nodes, however when doing read/writes on the ring, skip nodes that are known to be not pingable.
The tokens are generated in a deterministic fashion from node IDs (hash of node id + token number from 1 to K).
Number K of tokens per node: decided by the operator & stored in the operator's list of nodes CRDT. Default value proposal: with node status information also broadcast disk total size and free space, and propose a default number of tokens equal to 80%Free space / 10Gb. (this is all user interface)
#### Constants
- Block size: around 1MB ? --> Exoscale use 16MB chunks
- Number of tokens in the hash ring: one every 10Gb of allocated storage
- Threshold for storing data directly in Cassandra objects table: 1kb bytes (maybe up to 4kb?)
- Ping timeout (time after which a node is registered as unresponsive/missing): 30 seconds
- Ping interval: 10 seconds
- ??
#### Links
- CDC: <https://www.usenix.org/system/files/conference/atc16/atc16-paper-xia.pdf>
- Erasure coding: <http://web.eecs.utk.edu/~jplank/plank/papers/CS-08-627.html>
- [Openstack Storage Concepts](https://docs.openstack.org/arch-design/design-storage/design-storage-concepts.html)
- [RADOS](https://ceph.com/wp-content/uploads/2016/08/weil-rados-pdsw07.pdf)

View File

@ -1 +0,0 @@
Le code est ici : https://git.deuxfleurs.fr/Deuxfleurs/guichet

View File

@ -1,5 +0,0 @@
## Problèmes de connexion
Actuellement les serveurs sont hébergés derrière une connexion Free qui a des problèmes en soirée.
Plus d'informations ici : https://www.aduf.org/viewtopic.php?t=286599&start=0

View File

@ -1,118 +0,0 @@
type: offer, sdp: v=0
o=- 1923518516 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS 48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1
a=group:BUNDLE audio video data
m=audio 10000 RTP/SAVPF 111 103 104 126
c=IN IP4 82.253.205.190
a=rtpmap:111 opus/48000/2
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:126 telephone-event/8000
a=fmtp:111 minptime=10;useinbandfec=1
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:111 transport-cc
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=setup:actpass
a=mid:audio
a=sendrecv
a=ice-ufrag:97nc61e52b11gu
a=ice-pwd:k2df7f8vgknj27sctj550cl2u
a=fingerprint:sha-1 FC:4F:0B:F5:34:07:D8:09:47:D2:3C:FE:D1:8E:05:4B:05:10:CD:A1
a=candidate:1 1 ssltcp 2130706431 172.17.0.1 8080 typ host generation 0
a=candidate:2 1 ssltcp 2130706431 192.168.1.4 8080 typ host generation 0
a=candidate:4 1 udp 2113932031 172.17.0.1 10000 typ host generation 0
a=candidate:5 1 udp 2113932031 192.168.1.4 10000 typ host generation 0
a=candidate:3 1 ssltcp 1677724415 82.253.205.190 8080 typ srflx raddr 192.168.1.4 rport 8080 generation 0
a=candidate:6 1 udp 1677724415 82.253.205.190 10000 typ srflx raddr 192.168.1.4 rport 10000 generation 0
a=ssrc:3265394670 cname:mixed
a=ssrc:3265394670 msid:mixedmslabel mixedlabelaudio0
a=ssrc:3265394670 mslabel:mixedmslabel
a=ssrc:3265394670 label:mixedlabelaudio0
a=ssrc:3761143749 cname:sMYSy0kNyRU3eK0c-1
a=ssrc:3761143749 msid:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1 8a034425-b6b5-4928-ab5f-9ca0ec4168c4-1
a=ssrc:3761143749 mslabel:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1
a=ssrc:3761143749 label:8a034425-b6b5-4928-ab5f-9ca0ec4168c4-1
a=ssrc:3240916804 cname:75Ayhq4Cuv7k5JAP-1
a=ssrc:3240916804 msid:27755a82-e9e7-4cc4-bdb3-354a06b3f32a-1 45de0b7f-8590-4232-9bde-77d55a7366b5-1
a=rtcp-mux
m=video 10000 RTP/SAVPF 100 107 101 96 97 99
c=IN IP4 82.253.205.190
a=rtpmap:100 VP8/90000
a=rtpmap:107 H264/90000
a=rtpmap:101 VP9/90000
a=rtpmap:96 rtx/90000
a=rtpmap:97 rtx/90000
a=rtpmap:99 rtx/90000
a=fmtp:100 x-google-start-bitrate=800
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-start-bitrate=800
a=fmtp:101 x-google-start-bitrate=800
a=fmtp:96 apt=100
a=fmtp:97 apt=101
a=fmtp:99 apt=107
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 transport-cc
a=rtcp-fb:107 ccm fir
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 transport-cc
a=rtcp-fb:101 ccm fir
a=rtcp-fb:101 nack
a=rtcp-fb:101 nack pli
a=rtcp-fb:101 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=setup:actpass
a=mid:video
a=sendrecv
a=ice-ufrag:97nc61e52b11gu
a=ice-pwd:k2df7f8vgknj27sctj550cl2u
a=fingerprint:sha-1 FC:4F:0B:F5:34:07:D8:09:47:D2:3C:FE:D1:8E:05:4B:05:10:CD:A1
a=candidate:1 1 ssltcp 2130706431 172.17.0.1 8080 typ host generation 0
a=candidate:2 1 ssltcp 2130706431 192.168.1.4 8080 typ host generation 0
a=candidate:4 1 udp 2113932031 172.17.0.1 10000 typ host generation 0
a=candidate:5 1 udp 2113932031 192.168.1.4 10000 typ host generation 0
a=candidate:3 1 ssltcp 1677724415 82.253.205.190 8080 typ srflx raddr 192.168.1.4 rport 8080 generation 0
a=candidate:6 1 udp 1677724415 82.253.205.190 10000 typ srflx raddr 192.168.1.4 rport 10000 generation 0
a=ssrc:3339205972 cname:75Ayhq4Cuv7k5JAP-1
a=ssrc:3339205972 msid:27755a82-e9e7-4cc4-bdb3-354a06b3f32a-1 4de277cb-7421-402a-bbb1-2090dab4540e-1
a=ssrc:3560865865 cname:sMYSy0kNyRU3eK0c-1
a=ssrc:3560865865 msid:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1 21a02fe8-c9f4-49fe-aaef-4c4ad48a3516-1
a=ssrc:3560865865 mslabel:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1
a=ssrc:3560865865 label:21a02fe8-c9f4-49fe-aaef-4c4ad48a3516-1
a=ssrc:1942865873 cname:mixed
a=ssrc:1942865873 msid:mixedmslabel mixedlabelvideo0
a=ssrc:1942865873 mslabel:mixedmslabel
a=ssrc:1942865873 label:mixedlabelvideo0
a=ssrc:3656552182 cname:sMYSy0kNyRU3eK0c-1
a=ssrc:3656552182 msid:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1 21a02fe8-c9f4-49fe-aaef-4c4ad48a3516-1
a=ssrc:3656552182 mslabel:48d3ae09-99f6-4a73-bad1-1b0963eaf3cc-1
a=ssrc:3656552182 label:21a02fe8-c9f4-49fe-aaef-4c4ad48a3516-1
a=ssrc:4136660991 cname:75Ayhq4Cuv7k5JAP-1
a=ssrc:4136660991 msid:27755a82-e9e7-4cc4-bdb3-354a06b3f32a-1 4de277cb-7421-402a-bbb1-2090dab4540e-1
a=ssrc-group:FID 3560865865 3656552182
a=ssrc-group:FID 3339205972 4136660991
a=rtcp-mux
a=x-google-flag:conference
m=application 10000 DTLS/SCTP 5000
c=IN IP4 82.253.205.190
a=setup:actpass
a=mid:data
a=ice-ufrag:97nc61e52b11gu
a=ice-pwd:k2df7f8vgknj27sctj550cl2u
a=fingerprint:sha-1 FC:4F:0B:F5:34:07:D8:09:47:D2:3C:FE:D1:8E:05:4B:05:10:CD:A1
a=candidate:1 1 ssltcp 2130706431 172.17.0.1 8080 typ host generation 0
a=candidate:2 1 ssltcp 2130706431 192.168.1.4 8080 typ host generation 0
a=candidate:4 1 udp 2113932031 172.17.0.1 10000 typ host generation 0
a=candidate:5 1 udp 2113932031 192.168.1.4 10000 typ host generation 0
a=candidate:3 1 ssltcp 1677724415 82.253.205.190 8080 typ srflx raddr 192.168.1.4 rport 8080 generation 0
a=candidate:6 1 udp 1677724415 82.253.205.190 10000 typ srflx raddr 192.168.1.4 rport 10000 generation 0
a=sctpmap:5000 webrtc-datachannel 1024

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

View File

@ -1,94 +0,0 @@
## 2020-04-02 Campagne de debug Jitsi
Contact: Quentin
### Description du problème
Les conversations à 3+ donc relayées par le serveur ne fonctionnent pas bien.
Louison m'a rapporté que ça avait marché pour lui (3 utilisateurs avec un Webkit).
Mais moi ça a échoué hier soir (01/04/2020) avec des participants sous Firefox.
Le bug est toujours le même : on entend 2 personnes sur 3 ou on voit 2 personnes sur 3, on recharge la page et c'est quelqu'un d'autre pour qui ça ne fonctionne plus. Souvent c'est que dans un sens.
À chaque fois en passant sur Facebook Messenger, le problème est résolu instantanément.
Par contre Facebook Messenger impose Google Chrome/Chromium pour les visio de groupe (et ne supporte donc pas Firefox).
D'où mes 2 suspicions :
- Firefox a un bug quelconque dans sa pile WebRTC déclenché par le mode conversation de groupe
- Jitsi a un problème avec les déconnexions/changement de connexion/petit hoquets du réseau et n'arrive pas à se reconnecter. Ça pourrait être rendu pire à certain moment de la journée comme le soir où le réseau est plus sollicité. Et ce serait provoqué lors du reload on repasse de 3 à 2, en P2P donc puis de nouveau de 2 à 3.
### Approfondissement
Avant d'aller plus loin, nous avons voulu prendre le temps d'identifier précisément les problèmes d'expérience utilisateurs et leur corrélation avec la plateforme de l'utilisateur (navigateur, OS).
Pour celà, nous avons suivi deux approches :
1. Mener nos propres tests
2. Chercher d'autres retours
#### Mener nos propres tests
Nous avons effectué deux appels : un avec Firefox seulement et un avec Chrome/Chromium seulement.
Merci à Alex, Adrien et Maximilien pour leur participation.
Voilà les conclusions que nous avons tirées de nos tests :
- L'appel avec Firefox a déclenché le bug immédiatement, peu importe la version de Firefox ou de l'OS (firefox stable/nightly, fedora stable/beta, etc.)
- Le passage de tout le monde sous Chrome/Chromium a permis d'avoir une conversation stable.
- Adrien avait sa Livebox avec pare-feu configuré en mode "élevé" et a du ajouter dans sa liste blanche les ports utilisés par Jitsi (`4443/tcp` et `10000/udp` au moment du test, seul un des deux a besoin d'être accessible)
Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box :
![Livebox Parefeu Personnalisé](Assets/livebox_parefeu_personnalise.png)
Nous avons dans un premier temps retenu le port `995/tcp` pour Jitsi, le port UDP ne pouvant être changé (limitation de Jitsi).
Cependant, pour des raisons de sécurité, les navigateurs ne peuvent pas utiliser les ports en dessous de `1024/*`, à l'exception des ports `80/tcp` et `443/tcp` comme l'indique ;'issue [#3583](https://bugs.chromium.org/p/webrtc/issues/detail?id=3583) de Chromium.
La capture n'indique pas de port TCP supérieur à 1024, nous ne pouvons donc pas résoudre ce problème de notre côté, car à l'heure actuelle, nos ports `80/tcp` et `443/tcp` sont utilisés et nous n'avons qu'une seule IP publique.
Les utilisateurs activant le parefeu en mode élevé devront ajouter une exception dans leur parefeu eux-mêmes.
#### Chercher d'autres retours
[Tedomum](https://tedomum.net/) a eu connaissance de problèmes similaires.
Ils ont également identifié Firefox et assurent qu'avec l'application Android ça marche bien.
Ils me confirment que le problème vient bien du logiciel et non pas de notre déploiement.
Ils m'ont pointé entre autre vers cette issue github [#4758](https://github.com/jitsi/jitsi-meet/issues/4758)
Apparemment une issue est dédiée en particulier au problème que nous rencontrons de déconnexion partielle d'un participant, mais nous ne l'avons pas encore retrouvée.
### Correctifs
1. Notre instance Jitsi a été reconfigurée pour refuser Firefox. Suivre l'avancée du développement de Jitsi pour Firefox
* [#4758](https://github.com/jitsi/jitsi-meet/issues/4758)
* [#5439](https://github.com/jitsi/jitsi-meet/issues/5439)
* _À compléter_
2. Pour relayer la vidéo à travers la plupart des parefeux, notre `videobridge` Jitsi devait écouter sur le port `443/tcp`. Hors, ce port est déjà utilisé par notre frontal HTTPS. À défaut, Jitsi est maintenant configuré avec `8080/tcp` et `10000/udp` (contre `4443/tcp` et `10000/udp` avant).
* Un déploiement en IPv6 pourrait résoudre le problème pour une partie des utilisateurs
* Avoir un cluster géo-distribué avec plusieurs IPv4 pourrait également résoudre le problème
* Avoir un frontend layer 4 (niveau TCP) qui trouve une signature pour router du DTLS vers videobridge et du TLS vers traefik
### À propos du control/data plane de Jitsi
Notre videobridge écoute donc sur les ports `8080/tcp` et `10000/udp`.
WebRTC fonctionne en deux étapes :
- Des offres doivent être échangées via un serveur de signaling quelconque
- Ensuite, ces offres servent à connecter des clients directement via un protocole TCP ou UDP avec un thin layer propre à WebRTC
#### Le control plane de Jitsi : Prosody sur HTTPS via Bosh/XMPP
Le serveur de signaling Jitsi n'est autre que le serveur de chat prosody.
Pour ça, prosody est exposé à travers HTTP grâce au protocole BOSH (XMPP overs HTTPS).
Une fois l'offre reçue ([exemple](Assets/exemple_offre.txt)), elle est enregistrée dans le navigateur à l'aide de `setRemoteDescription` pour initialiser le data plane.
On peut débugger le signaling WebRTC sous Chromium avec [chrome://webrtc-internarls](chrome://webrtc-internals/).
Quand plus de deux participants sont connectés dans la conversation, Jitsi n'envoie pas les offres de chaque participant aux autres participants. À la place, elle envoie qu'une seule offre, celle de son VideoBridge.
Ainsi, le VideoBridge est une sorte de client WebRTC particulier, qui récolte et redispatche à travers WebRTC tous les flux video/audio.
#### Le data plane de Jitsi : videobridge sur DTLS/SCTP via WebRTC
WebRTC utilise deux formats de paquets selon [Mozilla Developer Network|RTCDataChannel|DataFormat](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel#Data_format) :
- `UDP/DTLS/SCTP`
- `TCP/DTLS/SCTP`
On a donc un format de données arbitraire encapsulé dans du SCTP lui même encapsulé dans du DTLS.
DTLS est prévu pour les datagrammes à l'origine, car WebRTC est prévu d'abord pour fonctionner sous UDP.
Le TCP est là en mode dégradé, en secours, il sert juste de tunnel pour relayer des datagrammes.

View File

@ -1,22 +0,0 @@
Deuxfleurs utilise les composants suivants dans son infrastructure:
- Ansible (configuration des noeuds)
- Docker (conteneurs)
- Nomad (orchestration des conteneurs)
- Consul (stockage clef/valeur distribué, découverte de services)
- Glusterfs (système de fichiers distribué)
- Stolon (système de réplication pour PostgreSQL)
Les services proposés sont les suivants:
- Chat via Matrix (Synapse, Riot)
- Email (Postfix, Dovecot, SoGo)
- Stockage (Seafile)
Par ailleurs, nous avons développés nous-même un certain nombre d'outils pour compléter la stack:
- [Bottin](https://bottin.eu), un serveur LDAP (gestion des comptes utilisateurs) basé sur le stockage clef/valeur de Consul
- [Guichet](https://git.deuxfleurs.fr/Deuxfleurs/Guichet/), une interface web de gestion des utilisateurs
- [Easybridge](https://git.deuxfleurs.fr/lx/Easybridge/), un bridge entre Matrix et d'autres réseaux
Le code de l'infrastructure [est publiquement disponible](https://git.deuxfleurs.fr/Deuxfleurs/deuxfleurs.fr/).

View File

@ -1,27 +0,0 @@
include _mixin/menu.pug
block root
doctype html
head
meta(charset='utf-8')
title 💮💮 deuxfleurs - #{title}
link(rel="stylesheet", href="/css/main.css")
header
.container
.menu-item
a(href='/')
strong deuxfleurs&nbsp;
img(src='/img/flower.svg' width='38')
img(src='/img/flower.svg' width='38')
.menu-item
a(href='https://guichet.deuxfleurs.fr') compte
span &nbsp;|&nbsp;
h1 #{title}
block main
main
.container.spacing
nav
strong
a(href="/") Accueil
+menu(root)
block content

View File

@ -1,10 +0,0 @@
extends ./_layout.pug
prepend root
- if (element.tags.includes('is_index'))
- title = element.nice_path[element.nice_path.length - 1]
- else
- title = element.nice_name
block content
!= markdown

View File

@ -1,13 +0,0 @@
mixin menu(o)
ul
each val in o.children
- if (val.type == 'folder' && val.tags.includes('document'))
li
- if (val.tags.includes('has_index'))
a(href=val.url)= val.nice_name
- else
span= val.nice_name
+menu(val)
- else if (val.type == 'file' && val.tags.includes('document') && !val.tags.includes('is_index'))
li
a(href=val.url)= val.nice_name

View File

@ -1,134 +0,0 @@
@font-face {
font-family: "Heroes";
src: url('../fonts/texgyreheros-regular.otf') format('truetype');
}
* {
font-family: Heroes;
font-size: 1em;
margin: 0;
padding: 0;
}
body {
margin-bottom: 42px;
}
header {
background-color: #519c60;
color: #ffffff;
padding: 30px 0px 1px 0px;
}
h1 {
font-size: 5em;
}
h2 {
font-size: 3em;
}
h3 {
font-size: 1.6em;
}
h4 {
font-size: 1.3em;
}
p {
font-size: 1.2em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
ul {
margin-left: 42px;
}
li {
padding-top: 4px;
padding-bottom: 4px;
}
nav {
float: right;
}
.spacing {
margin-top: 1em;
}
.spacing2 {
margin-top: 3em;
}
header > .container > h1 {
margin: 10px 0px -27px 0px;
}
header > .container > .menu-item {
float: right;
}
header > .container > .menu-item > img {
vertical-align: -9px;
}
header > .container > .menu-item > a, header > .container > .menu-item > span {
font-size: 30px;
color: white;
text-decoration: none;
}
.container {
padding: 0px 40px 0px 40px;
}
.chapeau {
font-size: 1.8em;
font-weight: bold;
line-height: 1.2;
}
.service-box {
color: #000;
text-decoration: none;
border: 0.2em solid #000;
width: 250px;
text-align:center;
margin-right: 1em;
float: left;
}
.service-box:hover {
background-color: #000;
color: #fff;
}
.service-box h3 {
font-size: 1.15em;
}
.list > br {
clear: left;
}
.center {
text-align: center;
}
input {
border: 0.1em black solid;
width: 50%;
min-width: 300px;
font-size: 1.6em;
border: 0.1em black solid;
padding: 0.3em;
}
.button {
padding: 0.3em;
background-color: #519c60;
font-size: 1.6em;
border: 0.1em solid #519c60;
color: white;
margin: 0em 0em 0em 1em;
text-decoration: none;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-opacity="0.0" fill="#FFF" d="M15.632 34.661c-.799-.597-1.498-1.484-2.035-2.592l-.228-.47-.46.249c-.975.528-1.913.858-2.744.969l-.202-3.756-3.636.968c-.157-.854-.125-1.887.096-3.022l.103-.525-.532-.066c-1.242-.154-2.306-.525-3.104-1.08l1.521-2.917-2.988-1.523c.319-.944.948-1.882 1.834-2.735l.377-.363-.379-.36c-.803-.764-1.408-1.554-1.77-2.311l3.51-1.353-2.045-3.159c.74-.402 1.693-.686 2.789-.832l.519-.068-.091-.514c-.215-1.211-.172-2.338.124-3.288l3.308.523.524-3.308c.988.013 2.08.326 3.164.907l.462.248.226-.473c.479-1.003 1.044-1.824 1.653-2.404L18 4.326l2.372-2.92c.609.58 1.175 1.401 1.653 2.404l.226.473.462-.247c1.085-.581 2.178-.894 3.164-.906l.523 3.308 3.31-.525c.296.951.34 2.078.124 3.288l-.092.515.518.069c1.095.145 2.048.43 2.788.832l-2.046 3.156 3.511 1.355c-.361.757-.966 1.547-1.77 2.311l-.379.36.377.363c.888.854 1.516 1.793 1.835 2.736l-2.984 1.52 1.521 2.984c-.812.574-1.871.964-3.094 1.134l-.518.072.096.514c.201 1.089.226 2.083.073 2.909l-3.634-.97-.204 3.757c-.83-.11-1.768-.44-2.742-.968l-.459-.249-.228.47c-.539 1.107-1.237 1.994-2.036 2.591L18 32.293l-2.368 2.368z"/><path d="M7.092 10.678c-.53-1.489-.698-2.97-.432-4.2l2.368.375.987.156.157-.988.375-2.368c1.261.127 2.613.743 3.862 1.706.118-.337.244-.663.382-.967-1.551-1.135-3.223-1.763-4.73-1.763-.123 0-.245.004-.366.013l-.511 3.223-3.224-.511c-.6 1.487-.565 3.415.085 5.393.335-.037.684-.061 1.047-.069zm14.501-5.319c1.248-.962 2.6-1.578 3.86-1.705l.376 2.368.156.988.987-.157 2.369-.376c.266 1.23.098 2.71-.432 4.2.361.009.711.032 1.046.07.651-1.978.685-3.906.085-5.394l-3.225.512-.511-3.224c-.12-.008-.242-.012-.365-.012-1.507 0-3.179.628-4.73 1.762.14.306.266.631.384.968zM7.368 27h.035c.067 0 .157-.604.26-.947-.098.004-.197.046-.294.046-1.496 0-2.826-.303-3.83-.89l1.089-2.128.454-.887-.891-.452-2.136-1.088c.508-1.151 1.515-2.25 2.818-3.143-.287-.219-.561-.441-.81-.669-1.687 1.217-2.846 2.755-3.235 4.31l2.908 1.483-1.482 2.843C3.475 26.501 5.303 27 7.368 27zm27.806-5.846c-.39-1.555-1.548-3.093-3.234-4.311-.25.228-.523.451-.81.669 1.304.893 2.31 1.992 2.817 3.145l-2.136 1.088-.891.453.454.892 1.089 2.137c-1.004.587-2.332.904-3.828.904-.099 0-.199-.01-.299-.013.103.344.192.683.26 1.011l.039.002c2.066 0 3.892-.563 5.112-1.587l-1.482-2.908 2.909-1.482zm-12.653 9.182c-.447 1.517-1.181 2.812-2.119 3.651l-1.695-1.694-.707-.707-.707.707-1.695 1.694c-.938-.839-1.673-2.136-2.12-3.652-.296.206-.593.397-.886.563.636 1.98 1.741 3.559 3.1 4.409L18 33l2.308 2.308c1.358-.851 2.464-2.428 3.101-4.408-.295-.168-.591-.359-.888-.564z" fill="#FFF"/><path fill="#FFF" d="M20.118 5.683c.426 1.146.748 2.596.841 4.284l.2 3.683 3.564-.946c1.32-.351 2.655-.536 3.86-.536.16 0 .318.003.474.01l-1.827 2.819 3.139 1.211c-.958.759-2.237 1.514-3.814 2.123l-3.441 1.328 2.001 3.099c.918 1.42 1.509 2.782 1.838 3.96l-3.244-.865-.182 3.357c-1.019-.677-2.132-1.66-3.198-2.973L18 23.374l-2.328 2.862c-1.066 1.312-2.179 2.295-3.198 2.972l-.18-3.354-3.248.864c.329-1.178.921-2.54 1.839-3.961l2.004-3.099-3.442-1.328c-1.577-.609-2.856-1.363-3.814-2.122L8.768 15l-1.827-2.823c.155-.006.313-.01.473-.01 1.206 0 2.541.185 3.861.536l3.564.947.202-3.683c.092-1.688.415-3.138.84-4.284L18 8.292l2.118-2.609m.19-4.991L18 3.533 15.692.692c-1.989 1.532-3.421 4.992-3.646 9.112-1.617-.43-3.192-.637-4.632-.637-2.11 0-3.929.445-5.161 1.289l1.989 3.073-3.415 1.316c.842 2.366 3.69 4.797 7.54 6.283-2.241 3.465-3.116 7.106-2.407 9.516l3.537-.941.196 3.654c2.512-.07 5.703-2.027 8.307-5.228 2.603 3.201 5.796 5.158 8.306 5.228l.198-3.655 3.535.943c.71-2.411-.165-6.05-2.404-9.517 3.849-1.485 6.696-3.918 7.538-6.283l-3.415-1.318 1.99-3.07c-1.233-.844-3.053-1.29-5.164-1.29-1.438 0-3.013.207-4.63.636-.225-4.119-1.657-7.579-3.646-9.111z"/></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -1,54 +0,0 @@
extends _layout.pug
prepend root
- title = "deuxfleurs"
block content
.chapeau ⇨ protège votre vie privée
.chapeau ⇨ défend vos libertés et vos droits
.chapeau ⇨ ne vous manipule pas
.chapeau ⇨ promeut la sobriété numérique
section.spacing
h2 nos services éthiques
.list
a.service-box.spacing(href='/Guide/Discussion.html')
div(style='font-size: 80px; height: 120px') 💬
h3 discussions
a.service-box.spacing(href='/Guide/Visioconférence.html')
div(style='font-size: 80px; height: 120px') 📞
h3 visioconférence
a.service-box.spacing(href='https://cloud.deuxfleurs.fr')
div(style='font-size: 80px; height: 120px') 🔒
h3 sauvegarde de documents
a.service-box.spacing(href='https://sogo.deuxfleurs.fr')
div(style='font-size: 80px; height: 120px') 📨
h3 emails
a.service-box.spacing(href='https://p.adnab.me')
div(style='font-size: 80px; height: 120px') 📄
h3 collaboration
a.service-box.spacing(href='/Technique')
div(style='font-size: 80px; height: 120px') 🌐
h3 sites webs
a.service-box.spacing(href='https://git.deuxfleurs.fr')
div(style='font-size: 80px; height: 120px') 💻
h3 code
br
p.spacing ⚠️ Vous devez être membre pour utiliser ces services.&nbsp;
a(href="#nous-rejoindre") Nous rejoindre.
section.spacing
h2 contre les dérives du numérique
:markdown-it(linkify)
L'IETF, l'organisme en charge de la standardisation d'internet, reconnait que les choix technologiques ont un impact sur les droits de l'homme [[RFC8280]](https://trac.tools.ietf.org/html/rfc8280).
section.spacing
h2(id="nous-rejoindre") construites ensembles
p.spacing Nous fonctionnons actuellement selon un mode de cooptation qui nous permet d'une part de mieux contrôler l'utilisation des ressources et éviter les abus, et d'autre part de créer et garder un contact humain avec nos utilisateurs.
p.spacing
| Si vous connaissez un membre de l'association, contactez le directement pour qu'il vous créer un compte.
br
| Sinon, vous pouvez nous écrire à coucou<img src="img/arobase.png" height="15"/>deuxfleurs.fr.

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<clientConfig version="1.1">
<emailProvider id="deuxfleurs.fr">
<domain>deuxfleurs.fr</domain>
<displayName>Deuxfleurs Mail</displayName>
<displayShortName>Deuxfleurs</displayShortName>
<incomingServer type="imap">
<hostname>imap.deuxfleurs.fr</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>plain</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.deuxfleurs.fr</hostname>
<port>465</port>
<socketType>SSL</socketType>
<authentication>plain</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<documentation url="https://deuxfleurs.fr/Guide/Email.html">
<descr lang="fr">Documentation générique pour la configuration</descr>
<descr lang="en">Generic settings page</descr>
</documentation>
</emailProvider>
</clientConfig>

View File

@ -0,0 +1,30 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Cryptpad
service.description = Pads, sondages, tableurs collaboratifs et chiffrés
service.website = https://pad.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/cryptpad/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = None
service.registration.load = OPEN
service.install.type = SOURCES
software.name = cryptpad
software.website = https://cryptpad.fr/
software.license.url = https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE
software.license.name = AGPL-3.0
software.version = 4.14.1
software.source.url = https://github.com/superboum/cryptpad
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View File

@ -0,0 +1,28 @@
file.class = organization
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
organization.name = Deuxfleurs
organization.description = Fabriquons un internet convivial
#organization.type = ASSOCIATION
organization.website = https://deuxfleurs.fr
organization.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
organization.socialnetworks.plume = https://plume.deuxfleurs.fr/~/Deuxfleurs
organization.socialnetworks.twitter = https://twitter.com/deuxfleurs_org/
organization.chatrooms.matrix = https://matrix.to/#/#deuxfleurs:deuxfleurs.fr
organization.contact.url = https://deuxfleurs.fr
organization.contact.email = coucou@deuxfleurs.fr
organization.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
organization.guide.technical = https://guide.deuxfleurs.fr/operations/
organization.guide.user = https://guide.deuxfleurs.fr/prise_en_main/
organization.status.level = ACTIVE
organization.startdate = 01/01/2020
organization.memberof.chatons.startdate = 21/06/2022
organization.memberof.chatons.status.level = ACTIVE
organization.country.name = France
organization.country.code = FR
subs.jitsi = https://deuxfleurs.fr/.well-known/chatonsinfos/jitsi.properties
subs.cryptpad = https://deuxfleurs.fr/.well-known/chatonsinfos/cryptpad.properties
subs.matrix = https://deuxfleurs.fr/.well-known/chatonsinfos/matrix.properties
subs.plume = https://deuxfleurs.fr/.well-known/chatonsinfos/plume.properties
subs.garage = https://deuxfleurs.fr/.well-known/chatonsinfos/garage.properties

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 70.424515 70.300102"
version="1.1"
id="svg8"
sodipodi:docname="logo.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
inkscape:export-filename="/home/quentin/Documents/dev/deuxfleurs/site/src/img/logo.png"
inkscape:export-xdpi="699.30194"
inkscape:export-ydpi="699.30194"
width="70.424515"
height="70.300102"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs12" />
<sodipodi:namedview
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="12.125"
inkscape:cx="43.092783"
inkscape:cy="48.082474"
inkscape:window-width="3072"
inkscape:window-height="1659"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg8" />
<g
id="g79969"
transform="translate(-0.827,34.992103)">
<path
fill="#ffffff"
d="m 15.632,34.661 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 L 9.963,29.061 6.327,30.029 C 6.17,29.175 6.202,28.142 6.423,27.007 L 6.526,26.482 5.994,26.416 C 4.752,26.262 3.688,25.891 2.89,25.336 L 4.411,22.419 1.423,20.896 C 1.742,19.952 2.371,19.014 3.257,18.161 L 3.634,17.798 3.255,17.438 C 2.452,16.674 1.847,15.884 1.485,15.127 L 4.995,13.774 2.95,10.615 C 3.69,10.213 4.643,9.929 5.739,9.783 L 6.258,9.715 6.167,9.201 C 5.952,7.99 5.995,6.863 6.291,5.913 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 L 13.749,4.283 13.975,3.81 C 14.454,2.807 15.019,1.986 15.628,1.406 L 18,4.326 20.372,1.406 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 C 23.798,3.455 24.891,3.142 25.877,3.13 L 26.4,6.438 29.71,5.913 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.757 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 L 18,32.293 Z"
id="path2" />
<path
d="M 7.092,10.678 C 6.562,9.189 6.394,7.708 6.66,6.478 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 C 11.808,3.78 13.16,4.396 14.409,5.359 14.527,5.022 14.653,4.696 14.791,4.392 13.24,3.257 11.568,2.629 10.061,2.629 9.938,2.629 9.816,2.633 9.695,2.642 L 9.184,5.865 5.96,5.354 C 5.36,6.841 5.395,8.769 6.045,10.747 6.38,10.71 6.729,10.686 7.092,10.678 Z M 21.593,5.359 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 C 30.606,8.769 30.64,6.841 30.04,5.353 L 26.815,5.865 26.304,2.641 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z M 7.368,27 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 L 4.628,23.081 5.082,22.194 4.191,21.742 2.055,20.654 C 2.563,19.503 3.57,18.404 4.873,17.511 4.586,17.292 4.312,17.07 4.063,16.842 2.376,18.059 1.217,19.597 0.828,21.152 l 2.908,1.483 -1.482,2.843 C 3.475,26.501 5.303,27 7.368,27 Z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.517 -1.181,2.812 -2.119,3.651 L 18.707,32.293 18,31.586 l -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.652 -0.296,0.206 -0.593,0.397 -0.886,0.563 0.636,1.98 1.741,3.559 3.1,4.409 L 18,33 l 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.564 z"
fill="#ea596e"
id="path4" />
<path
fill="#ea596e"
d="m 20.118,5.683 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 L 23.709,25.853 23.527,29.21 C 22.508,28.533 21.395,27.55 20.329,26.237 L 18,23.374 15.672,26.236 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 L 12.889,19.658 9.447,18.33 C 7.87,17.721 6.591,16.967 5.633,16.208 L 8.768,15 6.941,12.177 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 L 18,8.292 20.118,5.683 M 20.308,0.692 18,3.533 15.692,0.692 C 13.703,2.224 12.271,5.684 12.046,9.804 10.429,9.374 8.854,9.167 7.414,9.167 c -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.516 l 3.537,-0.941 0.196,3.654 c 2.512,-0.07 5.703,-2.027 8.307,-5.228 2.603,3.201 5.796,5.158 8.306,5.228 l 0.198,-3.655 3.535,0.943 c 0.71,-2.411 -0.165,-6.05 -2.404,-9.517 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 C 23.729,5.684 22.297,2.224 20.308,0.692 Z"
id="path6" />
</g>
<g
id="g79964"
transform="translate(-1.043816,35.993714)">
<path
fill="#ffffff"
d="m 51.92633,-2.0247139 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 l -0.202,-3.7560001 -3.636,0.968 c -0.157,-0.854 -0.125,-1.887 0.096,-3.022 l 0.103,-0.525 -0.532,-0.066 c -1.242,-0.154 -2.306,-0.525 -3.104,-1.08 l 1.521,-2.917 -2.988,-1.523 c 0.319,-0.944 0.948,-1.882 1.834,-2.735 l 0.377,-0.363 -0.379,-0.36 c -0.803,-0.764 -1.408,-1.554 -1.77,-2.311 l 3.51,-1.353 -2.045,-3.159 c 0.74,-0.402 1.693,-0.686 2.789,-0.832 l 0.519,-0.068 -0.091,-0.514 c -0.215,-1.211 -0.172,-2.338 0.124,-3.288 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 l 0.462,0.248 0.226,-0.473 c 0.479,-1.003 1.044,-1.824 1.653,-2.404 l 2.372,2.92 2.372,-2.92 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 c 1.085,-0.581 2.178,-0.894 3.164,-0.906 l 0.523,3.308 3.31,-0.525 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.7570001 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 l -2.367,-2.369 z"
id="path2-9" />
<path
d="m 43.38633,-26.007714 c -0.53,-1.489 -0.698,-2.97 -0.432,-4.2 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 c 1.261,0.127 2.613,0.743 3.862,1.706 0.118,-0.337 0.244,-0.663 0.382,-0.967 -1.551,-1.135 -3.223,-1.763 -4.73,-1.763 -0.123,0 -0.245,0.004 -0.366,0.013 l -0.511,3.223 -3.224,-0.511 c -0.6,1.487 -0.565,3.415 0.085,5.393 0.335,-0.037 0.684,-0.061 1.047,-0.069 z m 14.501,-5.319 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 0.651,-1.978 0.685,-3.906 0.085,-5.394 l -3.225,0.512 -0.511,-3.224 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z m -14.225,21.641 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 l 1.089,-2.128 0.454,-0.887 -0.891,-0.452 -2.136,-1.088 c 0.508,-1.151 1.515,-2.25 2.818,-3.143 -0.287,-0.219 -0.561,-0.441 -0.81,-0.669 -1.687,1.217 -2.846,2.755 -3.235,4.31 l 2.908,1.483 -1.482,2.843 c 1.221,1.023 3.049,1.522 5.114,1.522 z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.5170001 -1.181,2.8120001 -2.119,3.6510001 l -1.695,-1.694 -0.707,-0.707 -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.6520001 -0.296,0.2060001 -0.593,0.3970001 -0.886,0.5630001 0.636,1.98 1.741,3.559 3.1,4.409 l 2.308,-2.307 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.5640001 z"
fill="#ea596e"
id="path4-3" />
<path
fill="#ea596e"
d="m 56.41233,-31.002714 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 l -3.244,-0.865 -0.182,3.357 c -1.019,-0.677 -2.132,-1.66 -3.198,-2.973 l -2.329,-2.863 -2.328,2.862 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 l 2.004,-3.099 -3.442,-1.328 c -1.577,-0.609 -2.856,-1.363 -3.814,-2.122 l 3.135,-1.208 -1.827,-2.823 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 l 2.119,2.609 2.118,-2.609 m 0.19,-4.991 -2.308,2.841 -2.308,-2.841 c -1.989,1.532 -3.421,4.992 -3.646,9.112 -1.617,-0.43 -3.192,-0.637 -4.632,-0.637 -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.5160001 l 3.537,-0.9410001 0.196,3.6540001 c 2.512,-0.07 5.703,-2.027 8.307,-5.2280001 2.603,3.2010001 5.796,5.1580001 8.306,5.2280001 l 0.198,-3.6550001 3.535,0.9430001 c 0.71,-2.4110001 -0.165,-6.0500001 -2.404,-9.5170001 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 -0.225,-4.119 -1.657,-7.579 -3.646,-9.111 z"
id="path6-6" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
x="2.2188232"
y="31.430677"
id="text46212"><tspan
sodipodi:role="line"
id="tspan46210"
x="2.2188232"
y="31.430677"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">D</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
x="41.347008"
y="67.114784"
id="text46212-1"><tspan
sodipodi:role="line"
id="tspan46210-5"
x="41.347008"
y="67.114784"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">F</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,30 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Hébergement site statique
service.description = Hébergez votre blog, site vitrine ou n'importe quel site statique
service.website = https://guide.deuxfleurs.fr/prise_en_main/web/
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/web/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Garage
software.website = https://garagehq.deuxfleurs.fr/
software.license.url = https://git.deuxfleurs.fr/Deuxfleurs/garage/src/branch/main/LICENSE
software.license.name = AGPL-3.0
software.version = 0.7.2
software.source.url = https://git.deuxfleurs.fr/Deuxfleurs/garage
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View File

@ -0,0 +1,30 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Jitsi
service.description = Visioconférence dans le navigateur et sur mobile
service.website = https://jitsi.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/jitsi/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = None
service.registration.load = OPEN
service.install.type = SOURCES
software.name = jitsimeet
software.website = https://jitsi.org/jitsi-meet/
software.license.url = https://github.com/jitsi/jitsi-meet/blob/master/LICENSE
software.license.name = Apache License 2.0
software.version = 6826
software.source.url = https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/src/branch/main/app/jitsi/build
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View File

@ -0,0 +1,30 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Matrix
service.description = Discussions instantanées chiffrées et en groupe
service.website = https://riot.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/matrix/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Synapse
software.website = https://matrix-org.github.io/synapse/latest/
software.license.url = https://github.com/matrix-org/synapse/blob/develop/LICENSE
software.license.name = Apache-2.0
software.version = 1.61.1
software.source.url = https://github.com/matrix-org/synapse
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View File

@ -0,0 +1,30 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Plume
service.description = Plateforme de blog fédérée via ActivityPub
service.website = https://plume.deuxfleurs.fr/
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/plume/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Plume
software.website = https://joinplu.me/
software.license.url = https://git.joinplu.me/Plume/Plume/src/branch/main/LICENSE
software.license.name = AGPL-3.0
software.version = 8709f6cf9f8ff7e3c5ee7ea699ee7c778e92fefc
software.source.url = https://git.joinplu.me/Plume/Plume
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View File

@ -0,0 +1,15 @@
{
"m.homeserver": {
"base_url": "https://im.deuxfleurs.fr"
},
"org.matrix.msc3575.proxy": {
"url": "https://im-syncv3.deuxfleurs.fr"
},
"m.identity_server": {
"base_url": "https://vector.im"
},
"im.vector.riot.jitsi": {
"preferredDomain": "jitsi.deuxfleurs.fr"
}
}

View File

@ -0,0 +1 @@
{ "m.server": "im.deuxfleurs.fr:443" }

9
static/@404.html Normal file
View File

@ -0,0 +1,9 @@
<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>💮💮 deuxfleurs</title></head>
<body>
<p>Erreur 404 - page non trouvée, cette page n'existe pas (ou a été déplacée, j'en sais rien moi !)</p>
<p>Est-ce que tu cherches la <a href="https://deuxfleurs.fr/">page d'accueil</a> ?
Le <a href="https://guide.deuxfleurs.fr/">guide</a> ?
Le <a href="https://guichet.deuxfleurs.fr/">guichet</a> ?
Les <a href="https://plume.deuxfleurs.fr/">big news de l'espace</a> ?</p>
<p>Si tu es toujours paumé⋅e, viens nous parler sur Matrix ou écris à <code>coucou@deuxfleurs.fr</code>!</p>
</body></html>

595
static/cgu.html Normal file

File diff suppressed because one or more lines are too long

576
static/css/home.css Normal file
View File

@ -0,0 +1,576 @@
/*GESTION DE LA GRILLE DE LA PAGE PRINCIPALE */
main {
grid-area: main-row-debut / main-col-start / main-row-fin / main-col-sep 12;
display: grid;
grid-template-columns: [col-start] repeat(12, calc(100% / 12) [col-sep]);
grid-template-rows:
[row-start] auto [jardin-end]
repeat(3,
var(--big_margin)
[title-start] auto [title-end]
var(--med_margin)
[illu-start] auto [illu-end] auto [illu-extended-end]
var(--med_margin)
[txt-start] auto [txt-end])
var(--big_margin)
[title-start-contact] auto [title-end-contact]
var(--med_margin)
[txt-start-contact] auto [txt-end-contact] auto [cal-end-contact] /* au lieu de mettre auto on pourrait mettre 100px ici pour avoir les 2 cadres de la même taille*/
;
}
div#jardin{
background-color: var(--jardin);
grid-area: row-start / col-start / jardin-end / col-sep 12;
display: flex;
flex-direction: column;
justify-content: center;
height: 100vh;
}
div#jardin p{
display: flex;
justify-content:center;
}
h2#infras{
background-color: var(--infras);
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
}
div#rennes{
background-color: var(--rennes);
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 6;
overflow: hidden;
/*height: 450px;*/
}
div#orsay{
background-color: var(--orsay);
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 11;
overflow: hidden;
/*height:450px;*/
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 7;
}
h2#outils{
background-color: var(--outils);
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
}
section#liste_outils{
background-color: var(--liste_outils);
grid-area: illu-start 2 / col-sep 7 / illu-end 2 / col-sep 11;
}
section#liste_outils > a > div > p{
text-align: center;
}
section#liste_outils > a{
/*display: contents;*/
color: black;
text-decoration: none;
}
section#liste_outils > a:hover{
color: darkgreen;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 7;
}
h2#valeurs{
background-color: var(--valeurs);
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
}
div#ronce{
background-color: var(--ronce);
grid-area: illu-start 3 / col-sep 2 / illu-end 3 / col-sep 10;
padding: 0.5rem;
filter: grayscale(100%);
border: 1px dashed black;
transition: filter 0.15s ease 0s;
}
div#ronce:hover{
filter: none;
}
section#liste_valeurs{
background-color: var(--liste_valeurs);
grid-area: txt-start 3 / col-sep 2 / txt-end 3 / col-sep 10;
}
h2#connaissance{
background-color: var(--connaissance);
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
}
div#txt_connaissance{
background-color: var(--txt_connaissance);
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 6;
}
div#calendrier{
background-color: var(--calendrier);
grid-area: txt-start-contact / col-sep 7 / txt-end-contact / col-sep 10;
overflow: hidden;
}
.mois_actuel, .mois_suivant{
overflow: hidden;
}
/*GESTION DE LA GRILLE LISTE DE NOS VALEURS*/
section#liste_valeurs{
/*on ne peut pas faire plusieurs opérations en même temps dans calc, il faut un calc par opération*/
--demie-goutiere: calc(var(--small_margin) / 2);
--valeurs_width: calc(50% - var(--demie-goutiere));
display: grid;
grid-template-columns:
[col2-start] var(--valeurs_width) [col2-mid-left] /*bloc de gauche*/
var(--small_margin) /*goutière*/
[col2-mid-right] var(--valeurs_width) [col2-end]; /*bloc de droite*/
grid-template-rows:
[line1-start] auto [line1-end]
var(--small_margin)
[line2-start] auto [line2-end]
var(--small_margin)
[suivre-start] auto [suivre-end];
}
p#coop{
background-color: var(--lightgrey);
grid-area: line1-start / col2-start / line1-end / col2-mid-left;
text-align: center;
}
p#autonomie{
background-color: var(--lightgrey);
grid-area: line1-start / col2-mid-right / line1-end / col2-end;
}
p#solidarite{
background-color: var(--lightgrey);
grid-area: line2-start / col2-start / line2-end / col2-mid-left;
}
p#liberte{
background-color: var(--lightgrey);
grid-area: line2-start / col2-mid-right / line2-end / col2-end;
}
p#suivre {
background-color: var(--lightgrey);
grid-area: suivre-start / col2-start / suivre-end / col2-end;
text-align: center;
}
#coop, #autonomie, #solidarite, #liberte{
padding: 2rem;
border: 1px dashed black;
text-align: center;
}
section#liste_outils {
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 1rem;
row-gap: 1rem;
}
section#liste_outils > a > div {
overflow: hidden;
}
div#ordinateur {
background-color: var(--lightgrey);
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 7;
}
div#discussion {
background-color: var(--lightgrey);
grid-area: line1-start / col-start / line1-end / col-mid-left;
}
div#visio {
background-color: var(--lightgrey);
grid-area: line2-start / col-start / line2-end / col-mid-left;
}
div#sites-web {
background-color: var(--lightgrey);
grid-area: line3-start / col-start / line3-end / col-mid-left;
}
div#emails {
background-color: var(--lightgrey);
grid-area: line1-start / col-mid-right / line1-end / col-end;
}
div#collaboration {
background-color: var(--lightgrey);
grid-area: line2-start / col-mid-right / line2-end / col-end;
}
div#blog {
background-color: var(--lightgrey);
grid-area: line3-start / col-mid-right / line3-end / col-end;
}
/*GESTION DES MEDIA QUERIES*/
/*Tablettes et petits ordinateurs*/
@media (max-width: 1500px) and (min-width: 801px){
h2#infras{
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
}
h2#outils{
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
}
h2#valeurs{
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
}
h2#connaissance{
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
}
div#rennes{
grid-area: illu-start 1 / col-sep 2 / illu-end 1 / col-sep 6;
margin-right: 0.5rem;
}
div#orsay{
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 10;
margin-left: 0.5rem;
}
div#rennes, div#orsay{
border: 1px solid black;
border-radius: 5px;
}
div#rennes pre.center, div#orsay pre.center{
margin-top: -5px;
margin-bottom: -5px
}
div#orsay pre.center{
justify-content: center;
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 2 / txt-end 1 / col-sep 10;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 2 / txt-end 2 / col-sep 10;
}
div#txt_connaissance{
grid-area: txt-start-contact / col-sep 2 / txt-end-contact / col-sep 10;
}
div#txt_connaissance ul{
padding-left: 0px;
list-style-position: inside;
}
div#ordinateur {
grid-area: illu-start 2 / col-sep 1 / illu-end 2 / col-sep 11;
overflow: hidden;
}
section#liste_outils{
background-color: var(--liste_outils);
grid-area: illu-end 2 / col-sep 1 / illu-extended-end 2 / col-sep 11;
margin-top: var(--med_margin);
}
section#liste_outils{
display: grid;
grid-template-columns: 1fr 1fr 1fr;
row-gap: 1rem;
column-gap: 1rem;
}
div#discussion {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers1-start / line1-end / col-tiers1-end;
overflow: hidden;
}
div#emails {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers2-start / line1-end / col-tiers2-start;
}
div#visio {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers3-start / line1-end / col-tiers3-end;
overflow: hidden;
}
div#sites-web {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers1-start / line2-end / col-tiers1-end;
overflow: hidden;
}
div#collaboration {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers2-start / line2-end / col-tiers2-end;
}
div#blog {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers3-start / line2-end / col-tiers3-end;
}
div#ronce{
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
}
div#calendrier{
margin-top: var(--med_margin);
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
display: flex;
justify-content: center;
}
#mois_actuel, #mois_suivant{
overflow: hidden;
}
#mois_actuel{
margin-bottom: 0px;
margin-right: 2rem;
}
}
/*Smartphones*/
@media (max-width: 800px){
h2#infras{
grid-area: title-start 1 / col-start / title-end 1 / col-sep 12;
}
h2#outils{
grid-area: title-start 2 / col-start / title-end 2 / col-sep 12;
}
h2#valeurs{
grid-area: title-start 3 / col-start / title-end 3 / col-sep 12;
}
h2#connaissance{
grid-area: title-start-contact / col-start / title-end-contact / col-sep 12;
}
div#jardin{
grid-area: row-start / col-sep 1 / jardin-end / col-sep 11;
}
nav#menu{
position: fixed;
width: 100%;
right: 0px;
bottom: 0px;
padding-bottom: 1rem;
background-color: --day-background;
z-index: 1;
border-top: black 1px dashed;
}
nav#menu ul{
list-style: none;
flex-direction: row;
display: flex;
justify-content: space-evenly;
padding: 0px;
margin: 0px;
width: 100%;
}
div#txt_connaissance ul{
padding-left: 0px;
list-style-position: inside;
margin-bottom: var(--med_margin);
}
.icone > pre{
font-size: 0.8rem;
}
#illustration-accueil > pre.center{
font-size: 0.85rem;
}
div#orsay{
display: none;
}
div#rennes{
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 11;
border: 1px solid black;
border-radius: 5px;
}
div#rennes pre{
margin-top: -5px;
margin-bottom: -5px;
}
pre{
font-size: 0.95rem;
}
#txt_infras, #txt_outils, #txt_connaissance{
text-align: left;
hyphens: none;
margin-top: 0;
hyphens: none;
word-spacing: -2px;
-ms-hyphens: none;
-webkit-hyphens: none;
-moz-hyphens: none;
margin-top: 0;
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 11;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 11;
}
div#txt_connaissance{
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 11;
}
div#ordinateur {
display: none;
}
section#liste_outils {
display: block;
}
section#liste_outils{
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 12;
font-size: 1rem;
}
section#liste_outils pre{
font-size: 1rem;
}
section#liste_outils > a > div{
margin-bottom: 1rem;
}
div#ronce{
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
border: none;
padding: 0px;
}
#coop, #autonomie, #solidarite, #liberte{
padding: 1rem;
margin: 0px;
}
#suivre{
margin-top: 2rem;
}
section#liste_valeurs{
grid-area: txt-start 3 / col-sep 1 / txt-end 3 / col-sep 11;
}
section#liste_valeurs .description{
display: none;
}
div#calendrier{
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
display: none;
}
div#calendrier > pre.center {
justify-content: center;
}
footer pre.center{
font-size: 0.85rem;
}
#liens{
text-align: center;
margin-bottom: 12rem;
}
}
/* En vrac */
div#calendrier > pre.center{
justify-content: right;
}
#calendrier #mois_actuel{
margin-bottom: 1rem;
}
#mois_actuel, #mois_suivant{
text-align: center;
}
.highlight{
color: var(--day-highlight-color);
background-color: var(--day-highlight-bg);
}
#txt_connaissance li{
margin-bottom: 1rem;
}
#txt_connaissance p{
margin-top: 0px;
}
#txt_infras, #txt_outils, #txt_connaissance{
line-height: 1.3rem;
text-align: justify;
text-justify: inter-character;
hyphens: auto;
word-spacing: -2px;
-ms-hyphens: auto;
-webkit-hyphens: auto;
-moz-hyphens: auto;
margin-top: 0;
}

263
static/css/layout.css Normal file
View File

@ -0,0 +1,263 @@
/*PARAMETRES GENERAUX*/
:root{
--big_margin:100px;
--med_margin:50px;
--small_margin:10px;
--day-background: #fdfff9;
--day-highlight-color: white;
--day-highlight-bg: darkgreen;
--night-highlight-color: #ebebed;
--night-highlight-bg: #565a4d;
--night-background: #242526;/*#3c3c39;*/
--txt-night: #ebebed;/*#c7c4d4;*/
color-scheme: light dark;
/*
--menu: pink;
--jardin: darkseagreen;
--infras: gold;
--rennes: orange;
--orsay: chartreuse;
--txt_infras: bisque;
--outils: coral;
--liste_outils: aliceblue;
--txt_outils: aquamarine;
--valeurs: grey;
--ronce: cornflowerblue;
--liste_valeurs: brown;
--connaissance: chocolate;
--txt_connaissance: crimson;
--calendrier: darkkhaki;
--footer: deeppink;
--lightgrey: lightgrey;*/
}
/* PAR DEFAUT */
html, body, main{
margin:0;
padding: 0;
font-size: 13px;
}
body{
font-family: monospace;
color: black;
background-color: var(--day-background);
}
pre{
padding: 0;
margin: 0;
font-size: 1rem;
}
p{
font-size: 1rem;
}
a{
color: darkgreen;
}
nav ul{
list-style: none;
padding: 0px;
margin: 0px;
}
h1:after, h2:after{
content:'\A___________________________________\A"""""""""""""""""""""""""""""""""""';
}
h2, h1{
font-size: 1rem;
font-weight: normal;
margin: 0px;
padding: 0px;
text-align: left;
}
h2, h1{
text-transform: uppercase;
white-space:pre;
overflow: hidden;
}
img{
width: 100%;
}
.noscroll{
overflow: hidden;
}
/*GESTION DE LA GRILLE DU DOCUMENT*/
div#container{
display: grid;
grid-template-columns: [main-col-start] repeat(12, calc(100% / 12) [main-col-sep]);
grid-template-rows:
[main-row-debut] var(--med_margin) [header-start] auto [header-end] var(--big_margin) [core-start] auto [main-row-fin]
var(--big_margin)
[footer-start] auto [footer-end]
;
}
/* EN-TETE */
header {
grid-area: header-start / main-col-sep 1 / header-end / main-col-sep 12;
}
/* PIED DE PAGE */
footer {
background-color: var(--footer);
grid-area: footer-start / main-col-start / footer-end / main-col-sep 12;
}
#liens{
text-align: center;
margin-bottom: var(--med_margin)
}
/* MENU */
nav#menu{
background-color: var(--day-background);
display: flex;
justify-content: flex-end;
flex-direction: column;
position: fixed;
bottom: 1rem;
right: 1rem;
}
.icone > pre{
padding-top: 1rem;
color: black;
}
.icone{
position : relative;
display: inline-block;
text-decoration: none;
}
.icone .img_top{
display: none;
position: absolute;
top: 0;
left: 0;
z-index: 99;
background-color: var(--day-background);
color: darkgreen;
}
.icone:hover .img_top{
display: inline;
}
.icone a{
text-decoration: none;
color:black;
}
nav#menu > a{
display: block;
color: black;
text-decoration: none;
}
nav#menu > a:hover{
color: darkgreen;
text-decoration: none;
}
/* ILLUSTRATIONS ASCII (Y COMPRIS FOOTER) */
pre.center{
font-size: 1rem;
display: flex;
justify-content: center;
}
pre.hide {
display: none;
}
pre.center > a{
font-size: 1rem;
display: contents;
text-decoration: 1px black solid;
}
/* RESPONSIVE */
/* Tablettes */
@media (max-width: 1500px) and (min-width: 801px) {
h2, h1{
font-size: 1rem;
font-weight: normal;
margin: 0px;
padding: 0px;
text-transform: uppercase;
white-space:pre;
overflow: hidden;
}
}
/* Smartphones */
@media (max-width: 800px) {
:root{
--big_margin:50px;
--med_margin:25px;
--small_margin:5px;
}
h1:before, h1:after{
content: '';
}
h2:before{
content: '______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""\A* ';
}
h2:after{
content: ' *\A______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""';
}
h2, h1{
font-size: 1rem;
text-align: center;
}
h2, h1{
text-transform: uppercase;
white-space: pre;
overflow: hidden;
}
}
/* THEME SOMBRE */
@media (prefers-color-scheme: dark) {
div#container, nav#menu, body{
background-color: var(--night-background);
}
p, pre, ul, li, a, a:hover, h1, h2, footer{
color: var(--txt-night);
}
.highlight{
color: var(--night-highlight-color);
background-color: var(--night-highlight-bg);
}
.icone > pre{
color: var(--txt-night);
}
.icone .img_top{
background-color: var(--night-background);
color: var(--txt-night);
}
.icone a{
color: var(--txt-night);
}
div#ronce, #coop, #autonomie, #solidarite, #liberte, nav#menu, div#rennes, div#orsay{
border-color: var(--txt-night);
}
}

View File

@ -0,0 +1,20 @@
/*GESTION DE LA GRILLE D'UNE PAGE DE TEXTE LEGAL/INFO/BORRING */
main {
grid-area: core-start / main-col-sep 3 / main-row-fin / main-col-sep 9;
}
/* Tablettes */
@media (max-width: 1500px) and (min-width: 801px) {
main {
grid-area: core-start / main-col-sep 1 / main-row-fin / main-col-sep 11;
}
}
/* Smartphones */
@media (max-width: 800px) {
main {
grid-area: core-start / main-col-start / main-row-fin / main-col-sep 12;
}
}

View File

@ -0,0 +1,87 @@
<!-- Liste des evenements passés -->
<!-- SEPTEMBRE -->
<!--<li role="none"><a href="https://freedomnotfear.org/">Freedom not Fear</a> au Mundo B (Bruxelles), <span class="highlight">du 2 au 5 septembre.</span><br>Conférence pour défendre les libertés fondamentales dans le numérique : échanges sur le cadre légal au niveau européen, rencontre avec des députés.</li>
<li role="none"><a href="https://www.laquadrature.net/agenda/">Quadr'apéro</a> à La Quadrature du Net (Paris), <span class="highlight">le 15 septembre à 19h.</span><br>Rencontre mensuelle avec la Quadrature, échange sur les libertés fondamentales et point sur les actions de LQDN.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/25967">Cafés du libre</a> au Café Citoyen (Lille), <span class="highlight">le 27 septembre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par Chtinux le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
-->
<!-- OCTOBRE -->
<!--<li role="none"><a href="https://agiralyon.fr/">Festival Agir à Lyon</a> à la Maison pour tous des Rancy (Lyon), <span class="highlight">le 9 octobre.</span><br>Festival organisé par Anciela pour agir pour la transition écologique et solidaire. Quentin présentera notre vision de la sobriété numérique avec Commown et Telecoop.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/26101">Permanence associative autour du libre</a> au Café Citoyen (Lille), <span class="highlight">le 25 octobre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par <a href="https://raoull.org/">Raoull</a> et Deuxfleurs le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
<li role="none"><a href="https://pad.deuxfleurs.fr/form/#/2/form/view/mAscGaMNHcBlHs1H30bP-tqOsGrP-kLkGvFipK+EuvE/embed/">Permanence Deuxfleurs</a> à Bricologis, Vaulx en Velin (proche Lyon), <span class="highlight">le 29 octobre de 14h à 16h.</span><br>Deuxfleurs organise sa première permanence avec Bricologis pour vous aider à transitionner vers un Internet éthique ! L'inscription est requise en cliquant sur le lien ci-dessus.</li>
-->
<!-- NOVEMBRE -->
<!--
<li role="none"><a href="https://capitoledulibre.org/">Capitole du Libre</a> à l'ENSEEIHT (Toulouse), <span class="highlight">le 19 et 20 novembre.</span><br>Conférence annuelle dédiée au logiciel libre, ouverte à tout public et ceci gratuitement. Vincent y présentera le logiciel Garage et ses impacts sur l'hébergement de services.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/26185">Permanence associative autour du libre</a> au Café Citoyen (Lille), <span class="highlight">le 29 novembre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par Raoull et Deuxfleurs le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
-->
<!-- JANVIER -->
<!--<li role="none"><a href="https://flechedor.org/agenda/2023-01-14-technopolice-jo-securitaires-l-etau-se-resserre">Soirée Technopolice</a> à la Flèche d'Or (Paris), <span class="highlight">le 14 janvier à 18h.</span><br>Soirée de présentation, débats, et ateliers dans le cadre de l'initiative Technopolice créée par la Quadrature du Net, particulièrement centrée sur l'organisation des Jeux Olympiques de 2024. Vous pourrez y rencontrer Vincent.</li>
<li role="none"><a href="https://formation.emancipasso.net/Programme">Formation Émancip'asso</a> à la Fondation FPH (Paris), <span class="highlight">du 16 au 20 janvier.</span><br>Constatant que les hébergeurs éthiques sont peu nombreux à proposer des solutions prenant en compte les besoins des associations, et notamment laccompagnement nécessaire pour mener à bien une démarche de transition vers des outils numériques libres, le projet EmancipAsso souhaite accompagner la montée en compétence des hébergeurs de services alternatifs en leur proposant une formation. La formation est privée mais vous pouvez rencontrer Quentin en soirée ou nous écrire pour partager les besoins numérique de votre association.</li>
<li role="none"><a href="https://tmci.fr/wp-content/uploads/2022/12/programme-llpt-21-01-2023.pdf">Logiciel libre pour Tout</a> au Centre Municipal de Loisirs (Tarare), <span class="highlight">le 21 janvier de 10h à 17h.</span><br>TARARE MICRO Club Informatique organise une journée informatique libre, grand public et pour les associations. Au programme : ateliers, conférences, projection de film. Deuxfleurs y proposera des ateliers et vous pourrez rencontrer Quentin.
</li>-->
<!-- FEVRIER -->
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/AG_DF_2023">Assemblée générale ordinaire</a> en ligne, <span class="highlight">le 12 février à 15h.</span><br>Comme chaque année, l'association Deuxfleurs organise son assemblée générale. Divers sujets seront abordés, avec notamment l'élection du nouveau bureau pour un an. Vous pourrez y voir tous les membres ou presque.
</li>
<li role="none"><a href="http://www.salonprimevere.org/">Salon Primevère</a> à Eurexpo (Lyon), <span class="highlight">du 17 au 19 février.</span><br> Organisé par une association et réalisé par 300 bénévoles, le salon Primevère a pour ambition de réunir les acteurs de lécologie pour présenter des alternatives militantes cohérentes et éthiques à la société actuelle, dans une ambiance conviviale. Vous pourrez y rencontrer Quentin au stand de Hadoly dans l'espace numérique.
</li>-->
<!-- MARS -->
<!--<li role="none"><a href="#">Atelier Brico #1</a> à Bricologis (Vaulx-en-Velin), <span class="highlight">le 18 mars.</span><br> Deuxfleurs organise un atelier à Bricologis à Vaulx-en-Velin pour découvrir le concept de système d'exploitation (OS), pourquoi ça impacte notre rapport à l'informatique, et comprendre ce que les alternatives comme Ubuntu peuvent nous apporter. Inscription possible prochainement.
</li>
<li role="none"><a href="https://www.lirelasociete.com/evenement-journee-du-livre-politique">32ème journée du livre politique</a> à l'Assemblée Nationale (Paris), <span class="highlight">le 25 mars.</span><br> Journée de tables rondes en présence d'élus ou ex-élus, sur le sujet «Réseaux sociaux : alliés ou ennemis de la démocratie ?». Vous pourrez y trouver Vincent.</li>
<li role="none"><a href="http://perso.ens-lyon.fr/laurent.lefevre/greendayslyon2023/">Green Days</a> à l'ENS (Lyon), <span class="highlight">le 27 et 28 mars.</span> (Inscription obligatoire, évènement académique). En 2023, la problématique d'un numérique plus éco-responsable recouvre différentes facettes et de nombreux scientifiques adressent ces sujets dans leurs communautés respectives. Il est temps de se rencontrer et de mettre en commun nos forces de recherche pour amplifier les impacts des travaux et réduire les impacts énergétiques et environnementaux du numérique.
<li role="none"><a href="https://www.agendadulibre.org/events/26938">Permanence du libre</a> au Café Citoyen (Lille), <span class="highlight">le 28 mars de 20h à 23h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull & Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI.</li>-->
<!-- Avril -->
<!--<li role="none"><a href="https://www.jdll.org/">Journées Du Logiciel Libre</a> à La Maison Pour Tous (Lyon), <span class="highlight">le 1er et 2 avril.</span><br> Deuxfleurs présentera une conférence intitulée "Entre-hébergement : envisagez l'auto-hébergement collectivement !" et sera présente sur l'évènement le week-end, entre autre sur le stand Hadoly. Vous pourriez y rencontrer Esther ou Quentin.</li>
<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 4 avril à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne pas trop formalisé pour discuter de ce qui se passe. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://www.bricologis.com/">Atelier Brico #2</a> à Bricologis (Vaulx-en-Velin), <span class="highlight">le 15 avril.</span><br> Deuxfleurs organise un atelier à Bricologis à Vaulx-en-Velin pour découvrir comment démonter un ordinateur, ses composants, et que faire pour le faire durer plus longtemps. Contactez Bricologis directement pour vous inscrire en amont.</li>-->
<!-- Mai -->
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 2 mai à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://lerize.villeurbanne.fr/agenda/tisser-la-toile-du-web-avec-des-chatons_040523/">Tisser la toile du web avec des CHATONS</a> au Rize (Villeurbane), <span class="highlight">le 4 mai de 18h30 à 20h30</span>.<br> Et si plutôt que de dépendre des quelques silos des géants du numérique nous revenions à un réseau internet décentralisé et résilient ? Si nous imaginions une AMAP du numérique, humaine, locale, libre et éthique ? Cest possible grâce aux CHATONS, un collectif dhébergeurs propulsé par lassociation Framasoft depuis 2016 !</li>
<li role="none"><a href="https://www.agendadulibre.org/events/27478">Permanence associative autour du Libre</a> à Lille, <span class="highlight">le 31 mai à 20h</span>.<br>
La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull & Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI. Rejoignez-nous au Café Citoyen !-->
<!-- Juin -->
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 6 juin à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://programme.passageenseine.fr/">Pas Sage En Seine</a> à la Médiathèque Aragon (Choisy-le-Roi), <span class="highlight">du 15 au 17 juin</span>.<br> Le festival Pas Sage En seine est un rendez-vous annuel de la région parisienne. Lieu incontournable du milieu hacker à ses débuts, il a toujours eu pour vocation damener les citoyens de tous horizons à se réapproprier la société en bidouillant le système. Vincent y présentera comment "Surmonter les difficultés de lauto-hébergement ensemble avec Garage".</li>
<li role="none"><a href="https://www.maison-environnement.fr/desconnexions-une-journee-pour-aborder-en-famille-ou-entre-ami-es-les-enjeux-du-numerique-a-la-maison-de-lenvironnement-le-samedi-17-juin/">De(s)connexions</a> à la Maison de l'Environnement (Lyon), <span class="highlight">le 17 juin de 10h à 18h</span>.<br> Une journée pour aborder les enjeux et impacts, positifs et négatifs, du numérique ! Quentin y proposera une animation "technocritique".</li>
<li role="none"><a href="#">Barcamp Interne</a> en Auvergne, <span class="highlight">le 24 et 25 juin</span>.<br> Les membres de Deuxfleurs prennent le temps de se retrouver et de discuter de l'association.</li>-->
<!-- Septembre -->
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 5 septembre à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://www.agendamilitant.org/Affaire-du-8-decembre-antiterrorisme-et-criminalisation-du-chiffrement.html">Soirée affaire du «8 décembre» </a> à la bourse du travail à Paris, <span class="highlight"> le 25 septembre à 19h00</span>.<br>Soirée de discussion autour de la criminalisation du chiffrement à lœuvre dans laffaire du «8 décembre», en présence de la Quadrature du Net, N0thing2Hide, le SNJ, et les avocat·es concernés. Vous pourrez y trouver Vincent.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/28118">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 26 septembre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull et Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI. Vous pourrez y croiser Adrien.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/28178">Quadrapéro</a> au Garage de la Quadrature de Net, <span class="highlight">le 29 septembre à 19h00</span>.<br>Apéritif convivial pour discuter des divers enjeux en cours autour des droits et libertés numériques, en présence de membres de la Quadrature du Net et de bien autres intéressés. Vous y verrez Vincent.</li>
<li role="none"><a href="https://venissieux.fr/blog/agenda/le-grand-rendez-vous/">Grand RDV</a> Salle Irène Joliot-Curie à Vénissieux, <span class="highlight">le 30 septembre à 9h00</span>.<br>Nous y tiendrons un stand Deuxfleurs sur le "numérique durable" où nous parlerons d'obsolescence dans le numérique et des solutions qu'on explore. Vous y verrez Quentin et Léa.</li>-->
<!-- Octobre -->
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 3 octobre à 19h00</span>.<br> Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li> -->
<!-- <li role="none"><a href="https://forum.chatons.org/t/assemblee-constituante-du-14-10-23-a-paris-vincennes-objet-gouvernance-moderation-continuite/5163">Assemblée pour les CHATONS</a> à Paris VIII, <span class="highlight">le 14 octobre à 9h</span>.<br> (Réservé en priorité aux CHATONS) Nous serons à Paris pour discuter de l'avenir du collectif le temps d'une journée.</li> -->
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28119">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 31 octobre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li> -->
<!-- Novembre 2023 -->
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28442">Quadrapéro</a> au Garage de la Quadrature de Net, <span class="highlight">le 3 novembre à 19h00</span>. <br>Apéritif convivial pour discuter des divers enjeux en cours autour des droits et libertés numériques, en présence de membres de la Quadrature du Net et de bien autres intéressés. Vous y verrez Vincent.</li> -->
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 7 novembre à 19h00</span>. <br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li> -->
<!-- <li role="none"><a href="https://capitoledulibre.org/">Capitole du Libre</a> à l'ENSEEIHT (Toulouse), <span class="highlight">le 18 et 19 novembre</span>. <br>Conférence annuelle dédiée au logiciel libre et à sa communauté, ouverte à tout public, et ceci gratuitement. N'hésitez pas à venir discuter avec Vincent.</li> -->
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/infra">Réunion mensuelle d'infrastructure</a> en ligne, <span class="highlight">le 22 novembre à 19h00</span>. <br>Point mensuel en visioconférence où l'on aborde toutes les questions techniques qui méritent notre attention, concernant notre infrastructure ou nos services.</li> -->
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28120">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 28 novembre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li> -->
<!-- Décembre 2023 -->
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 5 décembre à 19h00</span>. <br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li> -->
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/infra">Réunion mensuelle d'infrastructure</a> en ligne, <span class="highlight">le 20 décembre à 20h00</span>. <br>Point mensuel en visioconférence où l'on aborde toutes les questions techniques qui méritent notre attention, concernant notre infrastructure ou nos services.</li> -->
<!-- <li role="none"><a href="https://events.ccc.de/congress/2023/infos/startpage.html">37C3</a> à Hambourg, <span class="highlight">du 27 au 30 décembre</span>. <br>Rendez-vous annuel européen des communautés de l'activisme numérique et des milieux hackers, le Chaos Communication Congress est un rassemblement d'envergure. Vous pourrez y voir Adrien, Boris, Zorun, Vincent et bien d'autres.</li> -->
<!-- Janvier 2024 -->
<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 9 janvier 2024 à 19h00</span>.<br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://www.agendadulibre.org/events/29139">Quadrapéro</a>, au Garage de la Quadrature du Net à Paris, <span class="highlight">le 19 janvier 2024 à 19h00</span>.<br>Apéritif convivial pour discuter des divers enjeux en cours autour des droits et libertés numériques, en présence de membres de la Quadrature du Net et de bien autres intéressés. Vous y verrez Vincent.</li>
<li role="none"><a href="https://jitsi.deuxfleurs.fr/infra">Réunion mensuelle d'infrastructure</a> en ligne, <span class="highlight">le 24 janvier 2024 à 20h00</span>.<br>Point mensuel en visioconférence où l'on aborde toutes les questions techniques qui méritent notre attention, concernant notre infrastructure ou nos services.</li>
<li role="none"><a href="#">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 25 janvier 2024 à 19h30</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li>
<li role="none"><a href="https://jitsi.deuxfleurs.fr/ag2024">Assemblée générale ordinaire</a> en ligne, <span class="highlight">le 28 janvier 2024 à 15h00</span>.<br>L'association Deuxfleurs organise sa cinquième assemblée générale. Divers sujets seront abordés, avec notamment l'élection du nouveau bureau pour un an. Vous pourrez y voir tous les membres ou presque.
<!-- Février 2024 -->
<li role="none"><a href="https://journee-ecoconception-numerique.fr/">Journée de l'écoconception numérique</a> à Paris, <span class="highlight">le 1er février 2024</span>.<br> Pour rassembler la communauté des professionnels du numérique autour de l'écoconception numérique. Quentin y sera.</li>
<li role="none"><a href="https://fosdem.org/2024/">FOSDEM</a> à Bruxelles, <span class="highlight">les 3 et 4 février 2024</span>.<br>Pas moins de 7 membres de Deuxfleurs seront sur place, et il y aura 3 présentations de membres de Deuxfleurs&nbsp;: sur <a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3009-advances-in-garage-the-low-tech-storage-platform-for-geo-distributed-clusters/">Garage</a>, <a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2642--servers-aerogramme-a-multi-region-imap-server/">Aérogramme</a>, et <a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3011-a-microkernel-based-orchestrator-for-distributed-internet-services-/">l'orchestration basée sur les microkernels</a>.</li>
<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 6 février 2024 à 19h00</span>.<br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://jitsi.deuxfleurs.fr/infra">Réunion mensuelle d'infrastructure</a> en ligne, <span class="highlight">le 21 février 2024 à 20h00</span>.<br>Point mensuel en visioconférence où l'on aborde toutes les questions techniques qui méritent notre attention, concernant notre infrastructure ou nos services.</li>
<li role="none"><a href="#">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 27 février 2024 à 19h30</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li>
<!-- Mars 2024 -->
<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 5 mars 2024 à 19h00</span>.<br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
<li role="none"><a href="https://bbb.paquerette.eu/b/dom-67q-irl-nfc">Réunion mensuelle du collectif CHATONS</a> en ligne, <span class="highlight">le 12 mars 2024 à 20h00</span>.<br>Une fois par mois a lieu une réunion entre les membres du collectif <a href=https://www.chatons.org/>CHATONS</a>.</li>
<li role="none"><a href="#">Barcamp Interne</a> au Couvent des Clarisses à Roubaix, <span class="highlight">le 15, 16 et 17 mars</span>.<br> Les membres de Deuxfleurs prennent le temps de se retrouver et de discuter de l'association. N'hésitez pas à nous contacter pour passer nous voir le samedi soir.</li>

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

BIN
static/img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

1401
static/index.html Normal file

File diff suppressed because it is too large Load Diff

13
static/r/rdv23 Normal file
View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Redirection automatique en HTML</title>
<meta http-equiv="refresh" content="0; URL=https://guide.deuxfleurs.fr/formations/rdv-2023/">
</head>
<body>
<p>Cette page est une redirection vers : <a href="https://guide.deuxfleurs.fr/formations/rdv-2023/">Vénissieux Grand RDV 2023</a></p>
</body>
</html>

BIN
static/ronce.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

44
static/script-bon.js Normal file
View File

@ -0,0 +1,44 @@
// dictionary to keep track of frame count for each animation
let frameCounts = {};
function animate(id, delay) {
// get the container and frames for the amination
const container = document.getElementById(id);
const frames = container.children;
// set up the frame counter
frameCounts[id] = 0;
// hide all frames except for the first
frames[0].style.display = "flex";
for (let i = 1; i < frames.length; i++) {
frames[i].style.display = "none";
}
// start the animation
const interval = setInterval(updateAnimation, delay, id, frames, frames.length);
}
function updateAnimation(id, frames, totalFrames) {
// increment the frame counter for the given id
frameCounts[id] = (frameCounts[id] + 1) % totalFrames;
// show the next frame
frames[frameCounts[id]].style.display = "flex";
// hide the previous frame
if (frameCounts[id] == 0) {
frames[totalFrames - 1].style.display = "none";
} else {
frames[frameCounts[id] - 1].style.display = "none";
}
}
animate("illustration-accueil", 500);
animate("rennes", 1000);
animate("orsay", 2000);
animate("parterre", 1500);