From 3fea367e9a5a6e6448d3c27a4f8f156559a7c6fc Mon Sep 17 00:00:00 2001 From: Tykayn Date: Tue, 13 May 2025 11:29:20 +0200 Subject: [PATCH] add series --- README.md | 14 +++- linking_articles_prev_next.py | 25 ++++-- ...ot-de-la-conference-avec-etienne-klein.org | 60 +++++++-------- ...20210223T005400__actus-de-fevrier-2021.org | 13 +--- .../lang_fr/20210417T125303__bus-factor.org | 74 ++++++++---------- ...28__video-du-premier-chatons-camp-2021.org | 2 +- ...151759__organisation-de-taches-orgmode.org | 2 +- templates/html/article.html.j2 | 14 ++++ test_utils.py | 13 +++- utils/utils.py | 14 ++++ website_config.py | 77 +++++++++++++------ 11 files changed, 185 insertions(+), 123 deletions(-) diff --git a/README.md b/README.md index 0d4e195a..9f7dd86b 100644 --- a/README.md +++ b/README.md @@ -113,16 +113,19 @@ Ensuite, on peut tester la viabilité des liens donnés avec check_links.py: ```shell py check_links.py cipherbliss_blog ``` - +# Tests +Lancer les tests avec +```shell +py test_utils.py +``` # Roadmap - réécriture des liens internes - conversion des liens avec nom de domaine si relatifs - détection des ID org-roam pour réécrire les liens html lors de la génération de site web et capsule gemini. - réécriture des url des images vers le dossier courant -- gestion des séries d'articles avec un tag orgmode #+serie, ce qui crée des indexes de séries et précise les autres posts de la série en fin d'article -- page pour un tag listant les articles, trier par date décroissante -- les gains de performance pour ne pas régénérer les pages déjà faites alors qu'elles n'ont pas été modifiée, et un rendu statique un peu plus joli +- gestion des séries d'articles dans la config de site `website_config.py`, ce qui crée des indexes de séries et précise les autres posts de la série en fin d'article. + - mettre un lien vers le fichier Org d'origine en fin d'article, disponible sur une forge en ligne si on l'a mis en config du site web. - vérifier que les pages non articles sont bien générées - documenter les scripts @@ -134,6 +137,9 @@ py check_links.py cipherbliss_blog ## Fait + +- les gains de performance pour ne pas régénérer les pages déjà faites alors qu'elles n'ont pas été modifiée, et un rendu statique un peu plus joli +- page pour un tag listant les articles, trier par date décroissante - en fin d'article, mettre le texte incitant au soutien de l'auteur - faire la conversion en page gemini dans `linking_articles_prev_next.py` - liste de N derniers articles développés sur l'accueil, 10 par défaut diff --git a/linking_articles_prev_next.py b/linking_articles_prev_next.py index 6a384046..1cbb0255 100644 --- a/linking_articles_prev_next.py +++ b/linking_articles_prev_next.py @@ -477,6 +477,11 @@ if pandoc_runs_counter > 0 or run_gemini or force_html_regen: # else: # #print("Aucun article n'a été converti, la page d'index n'est pas régénérée") +# Ajouter le compteur de temps d'exécution +print(f"\033[92mTemps d'exécution: {time.time() - start_time:.2f} secondes\033[0m") + + + def generate_article_pages(json_file, template_file, output_dir): """ @@ -499,7 +504,15 @@ def generate_article_pages(json_file, template_file, output_dir): print(f"articles count: {len(articles_info.values())}") # Générer les pages pour chaque article for article in articles_info.values(): - print('----------------------- article', article['title']) + # print('----------------------- article', article['title']) + + # Récupérer le nom de la série si l'article appartient à une série + template_content['SERIE'] = None + found_serie = get_series_name(article['slug'], args.blog) + if found_serie: + template_content['SERIE'] = website_config[args.blog]['SERIES'][found_serie] + + if article['first_picture_url']: template_content['OG_IMAGE'] = article['first_picture_url'] @@ -520,22 +533,22 @@ def generate_article_pages(json_file, template_file, output_dir): slug_to_use = article['slug'] # Construire le chemin de sortie html en fonction du slug avec l'année output_subdir = os.path.join(output_dir, slug_to_use) - print(f"output_subdir: {output_subdir}") + # print(f"output_subdir: {output_subdir}") os.makedirs(output_subdir, exist_ok=True) output_file = os.path.join(output_subdir ,"index.html") - print(f"output_file: {output_file}") + # print(f"output_file: {output_file}") # Écrire le fichier de sortie en HTML pour un article with open(output_file, 'w', encoding='utf-8') as f: f.write(output_html) - print(f"Génération de la page gemini pour {article['title']}") if 'gemini_content' in article and len(article['gemini_content']) > 0: + print(f"Génération de la page gemini pour {article['title']}") # Construire le chemin de sortie gmi en fonction du slug avec l'année save_gemini_file(args.blog, article, articles_info, template_content) counter_gemini += 1 - else: - print(f"----------- on ne génère pas le gemini pour {article['slug']}") + # else: + # print(f"----------- on ne génère pas le gemini pour {article['slug']}") print(f"\033[94m Nombre d'articles gemini générés : {counter_gemini}\033[0m") return diff --git a/sources/cipherbliss_blog/lang_fr/20201118T110346__live-toot-de-la-conference-avec-etienne-klein.org b/sources/cipherbliss_blog/lang_fr/20201118T110346__live-toot-de-la-conference-avec-etienne-klein.org index 168a0636..04c780c3 100644 --- a/sources/cipherbliss_blog/lang_fr/20201118T110346__live-toot-de-la-conference-avec-etienne-klein.org +++ b/sources/cipherbliss_blog/lang_fr/20201118T110346__live-toot-de-la-conference-avec-etienne-klein.org @@ -34,22 +34,20 @@ pour l'information scientifique) avec Etienne Klein et la #+begin_quote Faire de la science ça ne veut pas dire qu'on ne peut pas se tromper. -Tous les scientifiques se trompent -régulièrement.L'intérêt de la science consiste à +Tous les scientifiques se trompent régulièrement. L'intérêt de la science consiste à faire examiner nos connaissances avec une méthode précise, afin de -savoir comment on se trompe.Combien de personnes +savoir comment on se trompe. + +Combien de personnes ayant fait des déclarations qui se sont montrées erronées sont venues -ensuite dire qu'elles se sont trompées?Il est +ensuite dire qu'elles se sont trompées? Il est primordial de savoir reconnaître que l'on se trompe quand c'est le cas -pour faire avancer la connaissance.Faire de la -science, cultiver son esprit critique, c'est penser contre son propre -cerveau."C'est pas une guéguerre entre les -scientifiques et la population,les scientifiques sont -déjà eux-même incultes en science.Si je vais voir un -physicien du CEA où je travaille, et que je lui demande "c'est quoi une -cellule souche? c'est quoi un OGM? c'est quoi la 5G?" il y a très peu de -chances que j'obtienne une bonne réponse.La -compétence dans un domaine ne signifie pas la compétence dans toute la +pour faire avancer la connaissance. Faire de la science, cultiver son esprit critique, c'est penser contre son propre cerveau. + +"C'est pas une guéguerre entre les scientifiques et la population, les scientifiques sont +déjà eux-même incultes en science.Si je vais voir un physicien du CEA où je travaille, et que je lui demande "c'est quoi une cellule souche? c'est quoi un OGM? c'est quoi la 5G?" il y a très peu de chances que j'obtienne une bonne réponse. + +La compétence dans un domaine ne signifie pas la compétence dans toute la science.Comment font alors les gens qui n'ont pas la moindre formation scientifique pour faire le tri dans toutes les informations qui leur sont proposées?Par des jeux @@ -62,11 +60,12 @@ l'histoire des idées?on peut tout à fait être militant et ne pas du tout savoir comment défendre avec des arguments ce que l'on revendique.C'est très grave, parce que ça veut dire qu'on peut défendre tout et surtout n'importe quoi sans ne -rien y comprendre.Quand on est jeune on a beaucoup de -temps pour apprendre, mais heureusement après -aussi.Encore faut il souhaiter davantage la recherche -de la vérité que de suivre aveuglément un -groupeparadoxalement,la +rien y comprendre. + +Quand on est jeune on a beaucoup de temps pour apprendre, mais heureusement après +aussi. Encore faut il souhaiter davantage la recherche de la vérité que de suivre aveuglément un groupe. + +Paradoxalement,la propagation de la pensée critique - dans ce qu'elle est réellement, à savoir, exercer sa réflexion contre nos propres biais cognitifs- nécessite que l'on restaure des figures d'autorité @@ -84,10 +83,6 @@ décisions relatives aux choix de vie de la cité. #+end_quote - - - - La conférence était assez courte, et le live tooting est un exercice qui consiste à rapporter les idées en même temps que la conférence se fait. J'ai donc écrit ce qui suit après la fin de la @@ -102,18 +97,17 @@ employeur et à ses annonceurs. Ces contraintes broient toute idée qui passe par de tels médias pour les transformer en spectacle affriolant. C'est très différent de ce à quoi tend la recherche de la vérité et du -fonctionnement du monde empirique.Il faut absolument +fonctionnement du monde empirique. Il faut absolument cesser de croire que si quelqu'un est convaincant il détient la vérité -absolue et qu'il ne se trompe jamais.Il faut -absolument cesser de croire que toutes les opinions se valent, que tout -peut être remis en question n'importe comment (le relativisme absolu), -et que vous devez adopter n'importe quelle info sans devoir faire vous -même à un moment le tri.ça n'a jamais été une bonne -idée et ça ne le sera jamais.Au contraire, surtout si -quelqu'un est incapable de reconnaître quand il se trompe, ou qu'il -ignore quelque chose, c'est très mauvais signe quant à la fiabilité de -ses communications et à son approche du monde -réel.L'indépendance des médias manque cruellement au +absolue et qu'il ne se trompe jamais. Il faut absolument cesser de croire que toutes les opinions se valent, que tout peut être remis en question n'importe comment (le relativisme absolu), et que vous devez adopter n'importe quelle info sans devoir faire vous +même à un moment le tri. + +Ça n'a jamais été une bonne idée et ça ne le sera jamais. + +Au contraire, surtout si quelqu'un est incapable de reconnaître quand il se trompe, ou qu'il +ignore quelque chose, c'est très mauvais signe quant à la fiabilité de ses communications et à son approche du monde réel. + +L'indépendance des médias manque cruellement au panorama de la communication scientifique, c'est le résultat d'un jeu de pouvoirs qui privilégie la continuité d'une vision féodale de l'information. Une vision que l'on peut aujourd'hui changer en diff --git a/sources/cipherbliss_blog/lang_fr/20210223T005400__actus-de-fevrier-2021.org b/sources/cipherbliss_blog/lang_fr/20210223T005400__actus-de-fevrier-2021.org index 174c2ef8..1c0fd0a0 100644 --- a/sources/cipherbliss_blog/lang_fr/20210223T005400__actus-de-fevrier-2021.org +++ b/sources/cipherbliss_blog/lang_fr/20210223T005400__actus-de-fevrier-2021.org @@ -25,8 +25,7 @@ :END: Bonjour monde! Depuis la dernière fois avec -[[https://framadate-api.cipherbliss.com/#/ciphering][la page des -Ciphers]] j'ai eu une semaine assez occupée. +[[https://framadate-api.cipherbliss.com/#/ciphering][la page des Ciphers]] j'ai eu une semaine assez occupée. @@ -47,14 +46,10 @@ On a causé d'actions pro libre dans l'éducation, moi en tant que parent d'élève, et Adrien (aka Neox, gérant du serveur XMPP du Chapril) en tant qu'élève du supérieur dans une fac d'informatique. - - Le podcast audio sera bientôt disponible et sa transcription a été faite par Marie Odile, comme pour toutes les émissions de Libre à vous. - - On a aussi fait des photos @@ -121,9 +116,7 @@ Le but du jeu étant de faire ceci: - mettre les fichiers audio et vidéos dans un dossier en vue de les transcrire. - - lancer un script. - - et hop, c'est bon @@ -218,9 +211,7 @@ sources d'agendas en ligne. Donc vouala, pas mal de trucs et j'avance doucement sur mes lectures. Coucou "science et pseudo science du 1er trimestre 2021", ainsi qu'un -autre sur Ada Lovelace, "La beauté des nombres"). - - +autre sur Ada Lovelace, "La beauté des nombres". à bientôt les cocos. diff --git a/sources/cipherbliss_blog/lang_fr/20210417T125303__bus-factor.org b/sources/cipherbliss_blog/lang_fr/20210417T125303__bus-factor.org index 3f9ecc58..a51f7d0a 100644 --- a/sources/cipherbliss_blog/lang_fr/20210417T125303__bus-factor.org +++ b/sources/cipherbliss_blog/lang_fr/20210417T125303__bus-factor.org @@ -26,39 +26,25 @@ Comment se préparer aux changements de gouvernance dans ses projets, ou juste éviter de tout perdre le jour où une seule personne dans notre équipe se fait écraser par un bus -?ça ne vous aura pas échappé, nous sommes tous -mortels (sauf Chuck Norris). Du coup il est important de se poser -quelques questions sur notre avenir, surtout dans une période de -pandémie où la mort frappe plus souvent -d'habituellement.Vos projets sont ils durables? Vous -survivront ils si vous cessez de vous en -occuper?Votre famille survivra-t-elle si vous passez -sous un bus?Votre association ou votre entreprise -peut elle fonctionner si une seule personne fait un burn -out?Avez vous des copies hors ligne de données -cruciales qui vous permettraient de vous relever d'un ransomware -?Qui détient les clés de données qui pourraient être -vitales à vos proches?Quand on ne se pose pas ces -questions et quelles direction on veut adopter, on tend forcément à -utiliser des choses qui nous sont imposées plus ou moins subtilement, ou +? ça ne vous aura pas échappé, nous sommes tous mortels, sauf Chuck Norris. + +Du coup il est important de se poser quelques questions sur notre avenir, surtout dans une période de pandémie où la mort frappe plus souvent d'habituellement.Vos projets sont ils durables? Vous survivront ils si vous cessez de vous en occuper? + +Votre famille survivra-t-elle si vous passez sous un bus? Votre association ou votre entreprise peut elle fonctionner si une seule personne fait un burnout? +Avez vous des copies hors ligne de données cruciales qui vous permettraient de vous relever d'un ransomware ? Qui détient les clés de données qui pourraient être vitales à vos proches? + +Quand on ne se pose pas ces questions et quelles direction on veut adopter, on tend forcément à utiliser des choses qui nous sont imposées plus ou moins subtilement, ou juste [suivre ce qui nous promet de maximiser notre profit économique en -ne visant que cette seule -mesure](https://ploum.net/largent-doit-il-etre-notre-seul-objectif/), -quand bien même on se tire une balle dans le pied sur ce -plan.Mais sans aller jusqu'a parler de décès, il -arrive que la gouvernance de trucs dont on s'occupe doive -changer.Les membres d'une équipe vont et viennent, -les entreprises et associations naissent et meurent, les amitiés se -lient et se délient avec plus ou moins de fracas, une faille de sécurité -survient, on se prend un ransomware ou on se fait racketter par un -logiciel privateur qui retient en otage nos clients, et de ce simple -état de fait, pour toutes ces raisons, il est parfois impossible de -poursuivre des oeuvres collectives.Il est bien -entendu évident qu'il faut savoir où l'on met les pieds quand on s'allie -avec des personnes ou que l'on ajoute un intermédiaire technique à son -flux de travail, ce n'est jamais une décision facile et elle est -forcément lourde de conséquences.Adopter des -logiciels qui respectent vos libertés est essentiel si vous voulez +ne visant que cette seule mesure](https://ploum.net/largent-doit-il-etre-notre-seul-objectif/), quand bien même on se tire une balle dans le pied sur ce plan. Mais sans aller jusqu'a parler de décès, il arrive que la gouvernance de trucs dont on s'occupe doive +changer. + +Les membres d'une équipe vont et viennent, les entreprises et associations naissent et meurent, les amitiés se lient et se délient avec plus ou moins de fracas, une faille de sécurité survient, on se prend un ransomware ou on se fait racketter par un +logiciel privateur qui retient en otage nos clients, et de ce simple état de fait, pour toutes ces raisons, il est parfois impossible de poursuivre des oeuvres collectives. + +Il est bien entendu évident qu'il faut savoir où l'on met les pieds quand on s'allie +avec des personnes ou que l'on ajoute un intermédiaire technique à son flux de travail, ce n'est jamais une décision facile et elle est forcément lourde de conséquences. + +Adopter des logiciels qui respectent vos libertés est essentiel si vous voulez pouvoir rester maître du jeu sur le long terme, et plus largement, contribuer à améliorer un bien commun plutôt qu'enrichir une bulle spéculative ultralibérale qui piétine ses utilisateurs - ou plutôt sa @@ -71,13 +57,15 @@ n'est pas quand bien même ils seraient libres.Si la gouvernance de vos organisations ou des outils que vous utilisez est trop floue ou si tout le monde n'a que faire du long terme, ce sera un enfer de les -faire perdurer.Un bon début pour assurer la pérénité -de ce que vous utilisez consiste à:1 ) recenser les -outils que vous utilisez.2 ) définir qui sont les -personnes ayant accès aux outils.3 ) partager les -accès de sorte qu'au moins 2 personnes aient accès à la gestion des -outils cruciaux de votre groupe.4 ) définir des -procédures de passation.Sans ces informations, vos +faire perdurer. + +Un bon début pour assurer la pérénité consiste à: +- recenser les outils que vous utilisez. +- définir qui sont les personnes ayant accès aux outils. +- partager les accès de sorte qu'au moins 2 personnes aient accès à la gestion des outils cruciaux de votre groupe. +- définir des procédures de passation. + +Sans ces informations, vos projets se casseront la gueule plus ou moins vite, et encore plus vite si vous n'avez aucun backup.Il n'y a pas beaucoup plus de détails à noter pour chacune des étapes, en gros ça consiste à @@ -85,7 +73,9 @@ faire un tableau, entrer différents comptes comme gérant un outil, ou partager une boîte mail ayant accès à des outils, et apprendre à se servir de coffres forts numériques.Voilà de quoi occuper votre asso ou votre entreprise pendant un bout de temps, have -fun, good luck!Liens:Dead man -switch. https://www.deadmansswitch.net/bus factor -https://en.wikipedia.org/wiki/Bus_factor +fun, good luck! + +** Liens: +- Dead manswitch. https://www.deadmansswitch.net/ +- Bus factor https://en.wikipedia.org/wiki/Bus_factor diff --git a/sources/cipherbliss_blog/lang_fr/20211023T195028__video-du-premier-chatons-camp-2021.org b/sources/cipherbliss_blog/lang_fr/20211023T195028__video-du-premier-chatons-camp-2021.org index 26656bd4..95c58f99 100644 --- a/sources/cipherbliss_blog/lang_fr/20211023T195028__video-du-premier-chatons-camp-2021.org +++ b/sources/cipherbliss_blog/lang_fr/20211023T195028__video-du-premier-chatons-camp-2021.org @@ -8,7 +8,7 @@ #+post_slug: video-du-premier-chatons-camp-2021 #+post_url: https://www.ciperbliss.com/2021/video-du-premier-chatons-camp-2021 #+post_title: Vidéo du premier CHATONS Camp 2021 -#+post_tags: +#+post_tags: chatons, vidéo #+post_type: post #+post_mime_types: #+post_guid: undefined diff --git a/sources/cipherbliss_blog/lang_fr/20240620T151759__organisation-de-taches-orgmode.org b/sources/cipherbliss_blog/lang_fr/20240620T151759__organisation-de-taches-orgmode.org index 1820ff4f..526cda11 100644 --- a/sources/cipherbliss_blog/lang_fr/20240620T151759__organisation-de-taches-orgmode.org +++ b/sources/cipherbliss_blog/lang_fr/20240620T151759__organisation-de-taches-orgmode.org @@ -8,7 +8,7 @@ #+post_slug: organisation-de-taches-orgmode #+post_url: https://www.ciperbliss.com/2024/organisation-de-taches-orgmode #+post_title: Organisation de tâches orgmode -#+post_tags: orgmode +#+post_tags: orgmode, gestion de projet #+post_type: post #+post_mime_types: #+post_guid: undefined diff --git a/templates/html/article.html.j2 b/templates/html/article.html.j2 index 6ad72878..66969d2b 100644 --- a/templates/html/article.html.j2 +++ b/templates/html/article.html.j2 @@ -65,6 +65,20 @@ + {% if template_content['SERIE'] %} +
+

Série d'articles: {{ template_content['SERIE']['title'] }}

+ +
+ {% endif %}
{% if article.previous %} diff --git a/test_utils.py b/test_utils.py index a1d45fd5..cd6e66b2 100644 --- a/test_utils.py +++ b/test_utils.py @@ -1,7 +1,17 @@ import pytest -from utils.utils import slugify_title, find_year_and_slug_on_filename +from utils.utils import slugify_title, find_year_and_slug_on_filename, get_series_name +def find_serie_name_in_series(): + """Test que la fonction get_series_name retourne le nom de la série si l'article appartient à une série""" + found_serie = get_series_name("des-sauvegardes-qui-durent-mille-ans", "cipherbliss_blog") + assert found_serie == "workflows" + +def do_not_find_serie_name_in_series(): + """Test que la fonction get_series_name retourne None si l'article n'appartient à aucune série""" + found_serie = get_series_name("des-sauvegardes-qui-durent-mille-ans", "tykayn_blog") + assert found_serie is None + def test_parse_file_slug_from_filename(): """Test que slugify conserve les accents francophones""" title = "20250125140244__dépasser-la-spécialisation.org" @@ -10,6 +20,7 @@ def test_parse_file_slug_from_filename(): assert slug == expected, f"Expected '{expected}' but got '{slug}'" def test_slug_without_accents(): + """Test le bon slug""" title = "20111201T070237__dotclear-commenter-sans-tre-oblig-de-preview.org" expected = "dotclear-commenter-sans-tre-oblig-de-preview" date_str, annee, slug = find_year_and_slug_on_filename(title) diff --git a/utils/utils.py b/utils/utils.py index 309b7313..c9b46c30 100644 --- a/utils/utils.py +++ b/utils/utils.py @@ -683,3 +683,17 @@ Navigation: os.makedirs(f"gemini-capsules/{blog_name}/{article['annee']}", exist_ok=True) with open(f"gemini-capsules/{blog_name}/{article['annee']}/{slug}.gmi", "w", encoding="utf-8") as f: f.write(gemini_content) + + +def get_series_name(article_slug, blog_name): + """ + Retourne le nom de la série d'un article s'il en fait partie. + + :param article: Dictionnaire contenant les informations de l'article + :return: Le nom de la série ou None si l'article n'appartient à aucune série + """ + if blog_name in website_config: + for s in website_config[blog_name]['SERIES']: + if article_slug in website_config['SERIES'][blog_name][s]['articles']: + return s + return None diff --git a/website_config.py b/website_config.py index 8b875bbe..551f086d 100644 --- a/website_config.py +++ b/website_config.py @@ -1,31 +1,8 @@ #!/usr/bin/python3 # configuration pour générer les sites web de plusieurs dossiers -global_config = { - "slug_with_year": True, - # "show_logs": False, - "show_logs": True, - "lang_default": "fr", - "automatic_tagging_enabled": True, - "automatic_tagging_org_files": True, - "rebuild_files_filter": 2024, - "posts_per_page": 10, - "source_files_extension": "org", - "excluded_tags": ['PROPERTIES', 'CREATED', 'ID', 'END','CUSTOM_ID','CLASS'], - # controlled vocabulary to find tags automatically - "auto_tag_terms": ["illustration", "tuto", "NSFW", "BD", "récit", "science", - "wtf", "yaoi", "yuri", "sondage", "entreprise", "AI", "photos", - "cosplay", "festival", "fanzine", "manif", "logiciel", "inktober", - "kotlife", "féminisme", "fantasme", "art", "sociologie", "couple", "masturbation", - "boobs", "sortirDesFossiles", "électrique", "maison", "GTD", "chat", "PIM","mastoart", - "openstreetmap", "sauvegarde", "mastodon", "voyages", "aber","atelier cocci","vidéos", - "wanda","bouffe","anniversaire","conventions","Japan Expo","3.0","cours","! Q","dessin","mariage", - "réutilisation","sketch","road trip","kot","vélo","Bruxelles","Dieppe"] -} - -configs_sites = { - "other_blog" : { +configs_sites = { "other_blog" : { "DOSSIER_SOURCE": "helia_blog", "NDD_GEMINI": "social.cipherbliss.com", "BANNIERE_ENTETE": "", @@ -87,6 +64,35 @@ Si vous aimez ce que nous faisons à Cipher Bliss, vous pouvez nous soutenir de """, "BANNIERE_ENTETE": "https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg", "BANNIERE_ENTETE_ALT": "Bannière du site", + "SERIES": { + "workflows": { + "title": "Workflows", + "articles": [ + "choix-doutil-pour-la-gestion-de-projets", + "lister-tous-ses-dossiers-photos-avec-nodejs", + "organiser-ses-fichiers-avec-des-tags-avec-filetags", + "comment-jai-quitte-facebook-et-google", + ] + }, + "backups": { + "title": "Backups et pérennité", + "articles": [ + "2021/bus-factor", + "2021/plan-darchivage-et-de-backup", + "2021/des-sauvegardes-qui-durent-mille-ans", + "2025/critères-de-qualité-de-votre-plan-de-sauvegarde", + ] + }, + "elles-font-le-libre": { + "title": "Elles font le libre", + "articles": [ + "2024/teaser-des-interviews-elles-font-le-libre", + "2024/elles-font-le-libre-julie-de-letabli-numerique" + "2024/julia-de-l'ign-elles-font-le-libre-sotmfr-2024", + "2024/julie-de-la-fabrique-des-mobilités-elles-font-le-libre", + ] + } + } }, "tykayn_blog": { "SOURCE": "https://forge.chapril.org/tykayn/orgmode-to-gemini-blog/src/branch/main/sources/tykayn_blog", @@ -265,6 +271,29 @@ default_config = { "WEBSITE_GENERATOR_DESCRIPTION": f"Site généré avec le générateur de site web pour Gemini par Tykayn \n=> {forge_source} Code source, licence AGPLv3+", "SOUTIEN": "Si vous aimez ce que nous faisons, soutenez nous et partagez nos écrits. Vous pouvez nous faire un don sur liberapay.com/cipherbliss." } +global_config = { + "slug_with_year": True, + # "show_logs": False, + "show_logs": True, + "lang_default": "fr", + "automatic_tagging_enabled": True, + "automatic_tagging_org_files": True, + "rebuild_files_filter": 2024, + "posts_per_page": 10, + "source_files_extension": "org", + "excluded_tags": ['PROPERTIES', 'CREATED', 'ID', 'END','CUSTOM_ID','CLASS'], + # controlled vocabulary to find tags automatically + "auto_tag_terms": [ + "illustration", "tuto", "NSFW", "BD", "récit", "science", + "wtf", "yaoi", "yuri", "sondage", "entreprise", "AI", "photos", + "cosplay", "festival", "fanzine", "manif", "logiciel", "inktober", + "kotlife", "féminisme", "fantasme", "art", "sociologie", "couple", "masturbation", + "boobs", "sortirDesFossiles", "électrique", "maison", "GTD", "chat", "PIM","mastoart", + "openstreetmap", "sauvegarde", "mastodon", "voyages", "aber","atelier cocci","vidéos", + "wanda","bouffe","anniversaire","conventions","Japan Expo","3.0","cours","! Q","dessin","mariage", + "réutilisation","sketch","road trip","kot","vélo","Bruxelles","Dieppe"] +} + def fill_missing_config(site_config): """