up logging of generation

This commit is contained in:
Tykayn 2025-02-23 19:12:15 +01:00 committed by tykayn
parent fa8636185d
commit ce6eb680b7
23 changed files with 340 additions and 374 deletions

View File

@ -21,13 +21,20 @@ with open(json_file, 'r', encoding='utf-8') as f:
# Trier les articles par date décroissante
sorted_articles = sorted(articles_info.values(), key=lambda x: x['date'], reverse=True)
# Convert the date string to a valid ISO format
def convert_to_iso(date_str):
# Check if the string contains 'T' and replace it with a single 'T'
if 'T' in date_str:
date_str = date_str.replace('T', '', 1) # Replace only the first occurrence
return f"{date_str[:4]}-{date_str[4:6]}-{date_str[6:8]}T{date_str[8:10]}:{date_str[10:12]}:{date_str[12:14]}"
# Génération du flux Atom
with open(f"html-websites/{args.blog}/feed/index.xml", "w", encoding="utf-8") as f:
f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
f.write('<feed xmlns="http://www.w3.org/2005/Atom">\n')
f.write(f' <title>Flux Atom des articles de {args.blog}</title>\n')
f.write(f' <link href="{website_ndd}/feed"/>\n')
f.write(f' <updated>{datetime.fromisoformat(sorted_articles[0]["date"]).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
f.write(f' <updated>{datetime.fromisoformat(convert_to_iso(sorted_articles[0]["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
f.write(' <id>tag:' + website_ndd + ',2023:/feed</id>\n')
f.write(' <author>\n')
f.write(f' <name>{configs_sites[args.blog]["AUTHOR"]}</name>\n')
@ -35,6 +42,7 @@ with open(f"html-websites/{args.blog}/feed/index.xml", "w", encoding="utf-8") as
f.write(' </author>\n')
f.write(f' <link rel="self" href="{website_ndd}/feed"/>\n')
print(f"Génération du flux Atom pour {len(sorted_articles)} articles")
# Boucle des articles
for article in sorted_articles:
f.write(' <entry>\n')
@ -45,8 +53,8 @@ with open(f"html-websites/{args.blog}/feed/index.xml", "w", encoding="utf-8") as
f.write(f' {article["html_content"]}\n')
f.write(' ]]></content>\n')
f.write(f' <summary>{article.get("extract", "")}</summary>\n')
f.write(f' <published>{datetime.fromisoformat(article["date"]).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</published>\n')
f.write(f' <updated>{datetime.fromisoformat(article["date"]).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
f.write(f' <published>{datetime.fromisoformat(convert_to_iso(article["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</published>\n')
f.write(f' <updated>{datetime.fromisoformat(convert_to_iso(article["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
f.write(' <author>\n')
f.write(f' <name>{configs_sites[args.blog]["AUTHOR"]}</name>\n')
f.write(f' <email>{configs_sites[args.blog]["EMAIL"]}</email>\n')

View File

@ -3,14 +3,14 @@
echo "syncro de ce dépot vers les dossiers org roam"
rsync -avP --inplace source/tykayn_blog/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/tykayn_blog/
rsync -avP --inplace source/yaya_blog/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/helia_blog/
rsync -avP --inplace source/other_blog/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/helia_blog/
rsync -avP --inplace source/qzine_blog/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/qzine_blog/
rsync -avP --inplace source/cipherbliss_blog/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/cipherbliss_blog/
rsync -avP --inplace source/cil_gometz/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/cil_gometz/
# on a que des posts en FR don zou dans le dossier commun
rsync -avP --inplace source/tykayn_blog/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/tykayn_blog/
rsync -avP --inplace source/yaya_blog/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/helia_blog/
rsync -avP --inplace source/other_blog/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/helia_blog/
rsync -avP --inplace source/qzine_blog/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/qzine_blog/
rsync -avP --inplace source/cipherbliss_blog/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/cipherbliss_blog/
rsync -avP --inplace source/cil_gometz/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/cil_gometz/
rsync -avP --inplace source/cil_gometz/lang_fr/*.org /home/tykayn/Nextcloud/textes/orgmode/org-roam/cil_gometz/

View File

@ -1,57 +0,0 @@
# list_recent_articles.py
import os
import glob
import argparse
from website_config import configs_sites
# Configurer argparse pour prendre le blog en argument
parser = argparse.ArgumentParser(description='Générer une liste des derniers articles de blog.')
parser.add_argument('blog', type=str, help='Nom du dossier du blog à traiter', default='tykayn_blog')
args = parser.parse_args()
template_content = configs_sites[args.blog]
if template_content is None:
print(f"Erreur : template_content est indéfini pour le blog donné: {args.blog}.")
exit(1)
last_n_articles=10
source_dir = f"sources/{args.blog}/lang_fr"
output_file = f"sources/{args.blog}/build/latests_posts.org"
converted_latest_posts_path=f"sources/{args.blog}/build/latests_posts.html"
# Vérifier si le dossier source existe
if not os.path.isdir(source_dir):
print(f"Le dossier {source_dir} n'existe pas")
exit(1)
# Trouver les 10 fichiers les plus récents
org_files = sorted(glob.glob(os.path.join(source_dir, "*.org")), key=os.path.getmtime, reverse=True)[:last_n_articles]
# prendre le fichier output_file = f'sources/{blog_folder}/converted/tags.json'
# Créer ou écraser le fichier de sortie
with open(output_file, 'w', encoding='utf-8') as out_file:
out_file.write("#+TITLE: Articles récents\n\n")
for file in org_files:
with open(file, 'r', encoding='utf-8') as f:
content = f.readlines()
# Trouver le titre de premier niveau
title = None
for line in content:
if line.startswith("* "): # Titre de premier niveau
title = line[2:].strip() # Enlever le "* " et les espaces
break
if title:
# Écrire le lien vers l'article dans le fichier de sortie
out_file.write(f"* [[file:{file}|{title}]]\n")
out_file.write("#+BEGIN_SRC org\n")
out_file.writelines(content)
out_file.write("#+END_SRC\n\n")
print(f"Liste des 10 derniers articles générée dans {output_file}")

View File

@ -18,6 +18,32 @@ for arg in "$@"; do
blogs_folders+=("$arg")
done
# Si le tableau blogs_folders est vide, demander à l'utilisateur
if [ ${#blogs_folders[@]} -eq 0 ]; then
echo "----------- Aucun blog spécifié. Recherche des dossiers disponibles..."
# Lister les dossiers sous sources/
echo "Dossiers disponibles sous sources/ :"
ls -d sources/*/ 2>/dev/null | while read -r dir; do
dir=${dir%/} # Enlever le / final
dir=${dir#sources/} # Enlever le préfixe sources/
echo "- $dir"
done
# Demander à l'utilisateur quels dossiers inclure
echo
echo "Entrez les noms des blogs à traiter (séparés par des espaces) :"
read -r user_input
# Convertir l'entrée utilisateur en tableau
read -ra blogs_folders <<<"$user_input"
if [ ${#blogs_folders[@]} -eq 0 ]; then
echo "Aucun blog sélectionné. Arrêt du script."
exit 1
fi
fi
# Afficher la liste des noms de blogs
echo "----------- La liste des noms de blogs est :"
for blog in "${blogs_folders[@]}"; do
@ -86,17 +112,22 @@ for website_name in "${blogs_folders[@]}"; do
# générer l'index montrant les posts les plus récents à la suite
# conversion des pages statiques
echo "conversion des pages statiques : linking_articles_prev_next.py"
python3 linking_articles_prev_next.py $website_name
# créer les pages de tags à partir des infos de tag trouvées dans les fichiers org
echo "création des pages de tags : gather_tags_in_json.py"
python3 gather_tags_in_json.py $website_name
# copier le style dans le dossier html
echo "copie du style $style_file dans le dossier html"
cp $style_file html-websites/$website_name/style.css
# copier le script permettant la recherche
echo "copie du script main_script.js dans le dossier html"
cp templates/js/main_script.js html-websites/$website_name/main_script.js
# traiter les réductions d'images dans l'inbox
echo "traiter les réductions d'images dans l'inbox : pictures_resize.py"
python3 pictures_resize.py
# régénérer le flux Atom du blog

View File

@ -18,20 +18,17 @@ start_time = time.time()
# Configs pour tester
generate_linkings_json = True
generate_articles = True
run_pandoc = True # le plus long quand on a beaucoup d'articles
# run_pandoc = False
run_gemini = True
run_gemini = False
# Configurer argparse pour prendre le blog en argument
parser = argparse.ArgumentParser(description='Générer une liste des derniers articles de blog.')
parser.add_argument('blog', type=str, help='Nom du dossier du blog à traiter', default='tykayn_blog')
# parser.add_argument('--run_gemini', type=str, help='Activer ou non la génération des billets gemini', default=True)
parser.add_argument('blog', type=str, help='Nom du dossier du blog à traiter', default='cipherbliss_blog')
parser.add_argument('--run_gemini', type=str, help='Activer ou non la génération des billets gemini', default=False)
parser.add_argument('--run_pandoc', type=str, help='Activer ou non la génération des fichiers html', default=True)
args = parser.parse_args()
# run_gemini = args.run_gemini
run_gemini = args.run_gemini
run_pandoc = args.run_pandoc
# Fonction pour extraire le basename d'un fichier
def get_basename(file_name):
return os.path.splitext(file_name)[0]
@ -90,16 +87,25 @@ Navigation:
try:
with open(destination_gmi+'/'+output_filename_slug+'.gmi', 'w', encoding='utf-8') as f:
f.write(output)
print(f"Fichier GMI sauvegardé avec succès : {output_filename_slug}")
# print(f"Fichier GMI sauvegardé avec succès : {output_filename_slug}")
except OSError as e:
print(f"Erreur lors de la sauvegarde du fichier : {e}")
return output
if generate_linkings_json :
count_articles = len(os.listdir(directory))
counter=0
print(f"Génération des liens entre articles pour {count_articles} articles")
print(f"run_pandoc: {run_pandoc}")
print(f"run_gemini: {run_gemini}")
# Parcourir les fichiers du dossier
for file_name in os.listdir(directory):
if file_name.endswith('.org'):
counter+=1
if counter % 10 == 0:
print(f"{time.strftime('%H:%M:%S')} : Articles traités : {counter}/{count_articles}")
file_path = os.path.join(directory, file_name)
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
@ -151,6 +157,7 @@ if generate_linkings_json :
if run_pandoc and rebuild_this_article_html:
# convertir le contenu d'article org vers html
print(f"{time.strftime('%H:%M:%S')} : Conversion de {file_name} en html")
html_content = pypandoc.convert_text(content_without_h1, 'html', format='org')
else:
html_content = content_without_h1
@ -198,7 +205,7 @@ for slug, info in files_dict.items():
html_content = info['html_content']
rewritten_html_content = html_content
for roam_id, slug in articles_roam_id_to_slugs.items():
if roam_id in rewritten_html_content:
if roam_id is not None and isinstance(rewritten_html_content, str) and roam_id in rewritten_html_content:
print(f'{roam_id} -> {slug}')
rewritten_html_content = rewritten_html_content.replace(f'href="#{roam_id}"', f'href="{template_content["NDD"]}/{slug}"')

View File

@ -10,7 +10,7 @@ OUTPUT_DIR = "output/pictures"
YEAR = datetime.now().strftime("%Y")
SMALL_SUFFIX = "_small"
IMAGE_FORMAT = "jpg"
max_width_resized=600 # pixels max de largeur
max_width_resized=800 # pixels max de largeur
url_folder_pics="https://www.tykayn.fr/wp-uploads/content/i"
# Créer le dossier de sortie s'il n'existe pas

View File

@ -37,8 +37,10 @@ mettre de la couleur dans votre console.
Essayez donc de mettre cette commande d'export à la fin de votre
.bashrc, et de relancer bash.
=$ nano ~/.bashrc==# titre du terminal personnaliséPROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'# prompt personnaliséexport PS1="\[\033[38;5;214m\]\T\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;192m\]\u\[$(tput sgr0)\]\[\033[38;5;42m\]@\[$(tput sgr0)\]\[\033[38;5;84m\]\h\[$(tput sgr0)\]\[\033[38;5;70m\]:\[$(tput sgr0)\]\[\033[38;5;6m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]"=
#+begin_src bash
=$ nano ~/.bashrc==# titre du terminal personnalisé
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'# prompt personnaliséexport PS1="\[\033[38;5;214m\]\T\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;192m\]\u\[$(tput sgr0)\]\[\033[38;5;42m\]@\[$(tput sgr0)\]\[\033[38;5;84m\]\h\[$(tput sgr0)\]\[\033[38;5;70m\]:\[$(tput sgr0)\]\[\033[38;5;6m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]"=
#+end_src
on enregistre avec ctrl +o, on sort avec ctrl + x. et hop!
@ -49,7 +51,6 @@ et vouala:
#+begin_quote
<<preview>>
02:23:52tykay@mycomputer:/usr/local/src
#+end_quote

View File

@ -86,31 +86,10 @@ sur un seul téléphone et ordinateur permettent de tirer des analyses de
dizaines de personnes à la fois.
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
Error details
<<error-details-content>>
<<video-password-block>>
*
:PROPERTIES:
:CUSTOM_ID: video-password-title
:END:
<<video-password-content>>
<<video-password-error>>
[[data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0cmVtIiBoZWlnaHQ9IjRyZW0iIHZpZXdib3g9IjAgMCAyNCAyNCI+CiAgICAgICAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRjNGM0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiI+PHJlY3Qgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiB4PSIzIiB5PSIxMSIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ij48L3BhdGg+PC9nPgogICAgICA8L3N2Zz4=]]
<<video-wrapper>>
Peut être aurez vous une autre perspective de la
chose, la prochaine fois que vous entendrez quelqu'un vous dire qu'il

View File

@ -25,19 +25,6 @@
:END:
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
Nos données personnelles ne sont pas à vendre, et malgré le RGPD, les
plus grandes boites du monde continuent de violer la loi et de nous
marcher sur la gueule en nous arrachant un consentement contraint.

View File

@ -30,22 +30,9 @@ Je ne pense pas que vous soyez ignorant de ce qu'est de la propagande,
je suis cependant beaucoup moins certain que vous soyez en mesure
d'identifier de la propagande comme telle lorsque vous y êtes exposé.
#+end_quote
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
(vidéo)
Si vous pensiez qu'il suffit de lire ou voir une actualité émanant d'une
@ -67,8 +54,6 @@ la lumière sur des faits ne soit faite que des jours, des semaines, ou
des années après l'arrivée des faits.
Décréter que l'on est seul détenteur de la vérité relève de
l'[[https://fr.wikipedia.org/wiki/Autoritarisme][autoritarisme]], et
[[https://www.laquadrature.net/2018/12/12/le-parlement-europeen-appelle-a-la-censure-automatisee-et-privatisee-du-web-a-des-fins-securitaires/][s'armer
@ -79,29 +64,13 @@ dans le film
[[https://peertube.cipherbliss.com/videos/watch/c3c6a810-6dc0-4a9a-aea6-7d12e9e2e58f][La
classe américaine:]]
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
(vidéo)
Peu importe vos opinions et votre discours, si la censure est votre
seule réponse, vous êtes faciste. Innonder les médias d'un discours qui
ne permet aucune réponse (si vous n'êtes pas content on vous envoie
l'armée, la police, ou les CRS), ou de ne restreindre les débats
qu'autour d'interprétations fallacieuses est
[[https://fr.wikipedia.org/wiki/Propagande][un des visages de la
propagande]].
qu'autour d'interprétations fallacieuses est [[https://fr.wikipedia.org/wiki/Propagande][un des visages de la propagande]].
La réponse qui convient à un régime détendu des opinions, c'est d'avoir
des droits de réponse, d'avantage de liberté d'expression, la liberté de
@ -110,13 +79,6 @@ d'accord.
évitons
[[https://skeptikon.fr/videos/watch/ed6b0c1f-c83d-4049-95be-5f919be25498][les
arguments pourris à base de sophisme du procureur]].
évitons [[https://skeptikon.fr/videos/watch/ed6b0c1f-c83d-4049-95be-5f919be25498][les arguments pourris à base de sophisme du procureur]].
Un peu de charité intellectuelle, que diable!
Un peu de charité intellectuelle, que diable!

View File

@ -24,18 +24,6 @@
:CUSTOM_ID: aaron-swartz-lenfant-dinternet
:END:
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
l'histoire
d'[[https://fr.wikipedia.org/wiki/Aaron_Swartz][Aaron Swartz]], né en
1986 et mort en 2013, - créateur de Reddit et de bien d'autres services

View File

@ -61,27 +61,6 @@ extrait ici avec
prise de parole du boss de l'association framasoft Pierre-yves Bosset
par exemple.]]
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
Error details
<<error-details-content>>
<<video-password-block>>
*
:PROPERTIES:
:CUSTOM_ID: video-password-title
:END:
<<video-password-content>>
<<video-password-error>>
[[data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0cmVtIiBoZWlnaHQ9IjRyZW0iIHZpZXdib3g9IjAgMCAyNCAyNCI+CiAgICAgICAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRjNGM0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiI+PHJlY3Qgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiB4PSIzIiB5PSIxMSIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ij48L3BhdGg+PC9nPgogICAgICA8L3N2Zz4=]]

View File

@ -97,31 +97,7 @@ vous êtes d'humeur généreuse vous pouvez aussi soutenir des gens comme
genre de choses en France depuis bien avant l'actuel projet liberticide
"Sécurité Globale".
#+begin_quote
 
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
Error details
<<error-details-content>>
<<video-password-block>>
*
:PROPERTIES:
:CUSTOM_ID: video-password-title
:END:
<<video-password-content>>
<<video-password-error>>
(vidéo)
[[data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0cmVtIiBoZWlnaHQ9IjRyZW0iIHZpZXdib3g9IjAgMCAyNCAyNCI+CiAgICAgICAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRjNGM0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiI+PHJlY3Qgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiB4PSIzIiB5PSIxMSIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ij48L3BhdGg+PC9nPgogICAgICA8L3N2Zz4=]]

View File

@ -24,23 +24,7 @@
:CUSTOM_ID: vidéo-du-premier-chatons-camp-2021
:END:
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-password-block>>
*
:PROPERTIES:
:CUSTOM_ID: video-password-title
:END:
<<video-password-content>>
<<video-password-error>>
(vidéo)
[[data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0cmVtIiBoZWlnaHQ9IjRyZW0iIHZpZXdib3g9IjAgMCAyNCAyNCI+PGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRjNGM0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiI+PHJlY3Qgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiB4PSIzIiB5PSIxMSIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ij48L3BhdGg+PC9nPjwvc3ZnPg==]]

View File

@ -74,17 +74,7 @@ vos séquences de photos]].Pour une prise en main
rapide de JOSM je vous conseille l'excellent tuto en 4 minutes de
Capitaine Moustache sur le sujet:
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
(vidéo)
Comme ça vous pourrez
[[https://www.cipherbliss.com/comment-faire-du-livestream-entierement-libre-avec-peertube-v3-et-obs-studio/][faire
@ -92,17 +82,7 @@ du livestream]] de vos mappages à l'aise avec uniquement des outils
libres.Comme présenté ici avec un petit accéléré de
live que j'ai réalisé dans des coins paumés d'Essonne
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
<<video-wrapper>>
<<placeholder-preview>>
(vidéo)
 Bon mappage!

View File

@ -116,28 +116,7 @@ carton qui ne feront que condamner notre vie privée et ont
historiquement amené les heures les plus sombres de l'histoire
humaine.
<<error-block>>
*
:PROPERTIES:
:CUSTOM_ID: error-title
:END:
<<error-content>>
Error details
<<error-details-content>>
<<video-password-block>>
*
:PROPERTIES:
:CUSTOM_ID: video-password-title
:END:
<<video-password-content>>
<<video-password-error>>
(vidéo)
[[data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0cmVtIiBoZWlnaHQ9IjRyZW0iIHZpZXdib3g9IjAgMCAyNCAyNCI+CiAgICAgICAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzRjNGM0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiI+PHJlY3Qgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiB4PSIzIiB5PSIxMSIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ij48L3BhdGg+PC9nPgogICAgICA8L3N2Zz4=]]

View File

@ -0,0 +1,119 @@
:PROPERTIES:
:ID: 9167e3b2-8ee3-4aaf-afe4-a8d96f8e836d
:END:
#+title: Rétrospective de blogs
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2025/rétrospective-de-blogs
#+post_title: Rétrospective de blogs
#+post_tags: blog, orgmode, gemini, python, bash, dessin
#+post_series:
#+post_type: post
#+post_status: publish
#+post_date_published: <2025-02-23 17:56:21>
#+post_date_modified: <2025-02-23 17:56:21>
#+post_index_page_roam_id: 9167e3b2-8ee3-4aaf-afe4-a8d96f8e836d
#+BLOG: cipherbliss_blog
* Rétrospective de blogs
Au début, j'avais un blog sur papier dans mon agenda de lycée où je dessinais ce qui m'arrivait avec les camaradz de l'époque, ce qui m'a bien occupé pendant 4 ans. C'était le média social très low tech en papier de l'époque. En y repensant, mes premiers journaux de bord sur papier datent de bien avant cela, autour de 1995 quand je me suis régulièrement mis à écrire sur tout et rien juste pour le plaisir de l'écriture.
Puis je découvre les forums de dessins en ligne à l'aide d'un ami qui s'amuse à bidouiller des mods de jeu comme American Mc Gee's Alice sur ordinateur.
Au lycée je bricole un site personnel pour montrer mes dessins en html et css, en dupliquant plein de choses d'une page à l'autre, ce qui rend l'évolution pas super simple, le tout hébergé chez Lycos. Je ne fais pas de backup de ce site et expérimentera les déconvenues d'un crash d'ordi bien plus tard, ainsi que la découverte qu'il est tout à fait possible qu'une grosse boîte comme Lycos puisse tout à fait supprimer ses hébergements web sans prévenir, et disparaître du jour au lendemain sans possibilité de recours. Pareil pour Photobucket où j'avais placé des dessins et des photos retouchées.
En 2003, un copain, Monoceros, me propose d'installer un blog dotclear sur mon espace free, ce qui me convient pendant pas mal de temps. Puis souhaitant bénéficier de thèmes un peu plus jolis dans un catalogue bien plus fourni de thèmes et de plugins, je convertis mon blog Dotclear en blog Wordpress, toujours hébergé chez free.
Une copine pas du tout ingénieure, Puchi-ko, mais aimant la musique Japonaise me montre comment me servir des flux RSS des sites qu'elle lit en utilisant Firefox, c'est une super fonctionnalité dont je découvre les nombreux avantages. J'adopte peu de temps après Thunderbird pour y mettre les flux RSS principalement de sites de dessin. De nos jours, Firefox ne propose plus cette fonctionnalité et peu de sites web proposent un flux RSS.
J'incite les gens que je connais et fréquente en festival manga / fanzine / dessin en ligne à avoir leur site personnel pour présenter leurs dessins, commençant à comprendre que dépendre d'acteurs qui n'en ont rien à faire de ce que l'on place chez eux est un risque important.
Je participe à un évènement de l'école d'ingé d'Every où le thème est "les blogs" avec d'autres gens qui le pratiquent depuis un bon bout de temps, genre Korben, Sauvane, etc.
J'avais développé un script de migration des billets en base de données pour aller vers Wordpress.
Je constate aussi que le temps avançant, de plus en plus d'artistes qui avaient ouvert un blog sur une plateforme comme Livejournal, overblog ou d'autres endroits exotiques disposant de flux RSS ne mettent plus leurs oeuvres en ligne (sauf Loish <3 https://blog.loish.net )
Les gens se rendent de plus en plus captifs de plateformes privatrices sans flux RSS qui cachent à ses abonnés ce que l'on poste selon son bon vouloir, tout en requérant aux visiteurs d'avoir un compte pour accéder à ce qui est publié.
Je commence mon plan pour sortir de Facebook et Google et envisage des exports de mes données, tout en incitant d'autres à faire de même et à toujours alimenter une adresse personnelle et me mets à héberger mon instance Mastodon et à suivre des artistes dessus.
Mes flux RSS d'artistes suivis deviennent de plus en plus morts, ayant migré deux ou trois fois de nom de domaine aussi pour mes blogs je fais en sorte d'indiquer régulièrement la nouvelle adresse et d'avoir les contenus qui fonctionnent à coup de rechercher et remplacer les liens en base de données dans mes sites. Ce n'est pas très compliqué et ça marche assez bien, le plus relou étant le changement de chemin vers les articles, le chemin du slug d'article.
** Inspiration wiki personnel
Ayant adopté Zettlr pour faire un wiki perso et exporter tous les trucs que j'avais écrit dans des blogs avec base de donnée mysql, je fais une moulinette pour exporter mes écrits en Markdown.
Un kamaradz libriste me vante les mérites d'Emacs et je m'y essaie. Je lis des gens qui aiment particulièrement le format Org, et convertis mes écrits de Markdown à Org pour me faire un wiki personnel.
Emacs étant un bon outil pour se forger ses propres raccourcis clavier c'était bien pratique. J'ai donc mon wiki dans un format Orgmode en réunissant plein de fichiers dont je peux voir une représentation en graphe orienté avec org-roam-ui, ça me permet de préparer des articles et de relier des idées ensemble, sans que mes blogs exposent l'intégralité de mes pages de wiki.
Je suis étonné de voir que l'ensemble de mes écrits en ligne (blogs, site perso, médias sociaux et forums) tient sur un espace disque très restreint: 33Mo. Mes dessins avec leurs versions de travail intermédiaires, tiennent quant à eux sur une cinquantaine de Go. Ce qui aurait tenu sur le disque dur de mon premier ordi perso acheté en 2003 avec l'aide de mon frère, le disque était alors un disque IDE de 80Go.
Constatant qu'il y a un temps non négligeable entre mes écrits et leurs publication sur mes blogs wordpress, j'envisage de faire quelque chose pour relier plus directement l'écrit à la publication.
Puis lisant du Ploum qui évoque la version finale de son blog parce qu'il en a gros des évolutions bancales et des trucs relou des CMS qui deviennent des monstres, je m'intéresse à la gestion de blog statique et aux capsules gemini.
https://ploum.net/2022-12-04-fin-du-blog-et-derniere-version.html
** S'inspirer des meilleurs
Je regarde comment fonctionnent deux ou trois outils de génération de blog statique, en tentant d'y reporter quelques uns de mes contenus: Pelican, Hugo, Offpunk, LazyBlorg, Zola... certains sont affreusement complexes pour comprendre les infos nécessaires à leur utilisation, d'autres beaucoup moins.
J'examine les fonctionnalités minimales dont j'ai besoin, et quel est l'effort à faire en développement pour adapter un outil existant ou partir vers une solution maison en quelques scripts.
Je veux pouvoir réutiliser mes articles Org en devinant la date de leur publication, leur titre et leur contenu.
Je constate que pour réutiliser des choses existantes il faut forcément bidouiller sur le contenu des articles, ne serait-ce que pour que le moteur de blog détecte les dates des articles, car la date de création ou de modification de mes fichiers org ne reflète pas du tout cela. Heureusement c'est une bidouille assez simple à faire.
** Quelques objectifs pour mon moteur de blog:
J'opte pour un petit ensemble d'outils qui me permettent de générer à partir de documents org:
- plusieurs sites, dont les contenus sont séparés dans un dossier
- un flux RSS/Atom par site
- un thème de base en quelques lignes de scss, différent pour chaque site si on veut
- avec des posts dans plusieurs langues
- des tags naviguables qui permettent de lister les autres articles ayant ce tag
- des tags auto détectés à partir d'un vocabulaire contrôlé, spécifique à chaque blog
- une gestion simple des chemins vers les articles avec un préfixe d'année et des slugs
- pas besoin de section commentaires ou de plugins, les gens peuvent m'écrire par email à contact+blog@cipherbliss.com
- les templates html permettent une réutilisation de style pour les thèmes de wordpress
- une configuration de contenu paramétrable pour chacun des sites, titre, description, tags de base, signature, infos de soutien financier, etc.
- un index qui présente en entier quelques articles puis liste les suivants avec des liens au lieu de faire une infinité de pages
- pas de moteur de recherche interne, on utilise un lien vers un moteur externe
- une mise à disposition de l'intégralité des articles sur une forge logicielle qui cause le Git, ici
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
- une automatisation de la gestion des nouvelles images
- pas d'administration à plusieurs, bien que c'est tout à fait faisable en partageant un dossier et en ajoutant chacun ses articles avec la gestion de version git.
- un outil en ligne de commande pour simplifier la création de nouvel article avec les quelques infos nécessaires à tout article: titre, date, texte.
Faire de la publication programmée à une heure donnée? Ce serait faisable mais finalement je n'y tiens pas particulièremment.
Les quelques bibliothèques pour faire ce blog dynamique: git, python, pypandoc, argparse, SASS.
Avec un peu de bash, pandoc et quelques scripts python je parviens à générer en une trentaine de secondes des pages html à partir d'un milier d'articles. En utilisant pypandoc au lieu de pandoc je réduis ce temps de conversion à moins de 2 secondes. En faisant quelques autres vérifications pour ne régénérer que les articles qui ont été modifiés depuis la dernière génération, comme le font d'autres moteurs de blog, je réduis encore ce temps.
La mise à jour des blogs est super simple, un git pull, une génération de blog, et une copie vers les dossiers hébergés. Le tout peut se faire dans un cronjob qui lance un simple script qui ne fera des changements que si il y a du neuf.
Voici les sources du dépot, qui contiennent donc tous mes écrits en ligne sous licence libre CC-BY-SA et en AGPLv3+ pour les scripts:
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
Pour le fun, ce blog de cipherbliss contient 274 articles, 140 000 mots, qui se lisent en 10h34min si vous lisez à la vitesse moyenne de 220 mots minutes comme beaucoup d'adultes.
Bons essais à vous si vous souhaitez adopter ce moteur de blog statique, il vous suffira de commencer à lancer une commande et à mettre dedans des anciens fichiers org (dans le dossier `sources/mon_blog`), ou à en créer un nouveau avec une commande sur `new_article.py`.
#+begin_src bash
git clone https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
cd orgmode-to-gemini-blog
py new_article.py # ceci vous demandera le nom du dossier de blog, la langue, et le titre de l'article
#
#+end_src
Vous pouvez maintenant modifier votre nouvel article avec votre éditeur de texte préféré.
Et zou pour convertir votre blog en site statique:
#+begin_src bash
bash converters mon_blog
#+end_src
Ce qui génère un site html statique et une capsule gemini dans les dossiers de destination: html_websites/mon_blog et capsules-gemini/mon_blog
Lisez le readme pour d'avantage de personnalisation. Havez fun!

View File

@ -1,7 +0,0 @@
#+post_title: Salut les giminiciens
#+post_tags: gemini,blog,salut
* Salut les giminiciens
hop hop coucou

View File

@ -1,27 +0,0 @@
#+title: pouet-pouet-hop
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2024/pouet-pouet-hop
#+post_title: pouet pouet hop
#+post_tags:
#+post_type: post
#+post_mime_types:
#+post_guid:
#+post_status: publish
#+post_date_published: <2025-01-29 14:35:36>
#+post_date_modified: <2025-01-29 14:35:36>
#+post_index_page_roam_id:
#+BLOG: cipherbliss_blog dragonfeu_blog
* pouet pouet hop
#+CAPTION: This is the caption for the next figure
#+NAME: fig:placeland
coin coin
[[https://miro.medium.com/v2/resize:fit:490/0*R7R5WF5O-tznduZZ.jpg]]
[[https://placehold.co/600x400/png]]
lorem bla bla

View File

@ -1,17 +0,0 @@
#+title:
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2025/
#+post_title: None
#+post_tags:
#+post_type: post
#+post_status: publish
#+post_date_published: <2025-02-22 00:03:20>
#+post_date_modified: <2025-02-22 00:03:20>
#+post_index_page_roam_id:
#+BLOG: cipherbliss_blog dragonfeu_blog
* None

View File

@ -1,17 +0,0 @@
#+title: hé-bien-vouala
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2025/hé-bien-vouala
#+post_title: hé bien vouala
#+post_tags:
#+post_type: post
#+post_status: publish
#+post_date_published: <2025-02-22 00:05:32>
#+post_date_modified: <2025-02-22 00:05:32>
#+post_index_page_roam_id:
#+BLOG: cipherbliss_blog dragonfeu_blog
* hé bien vouala

View File

@ -0,0 +1,119 @@
:PROPERTIES:
:ID: 9167e3b2-8ee3-4aaf-afe4-a8d96f8e836d
:END:
#+title: Rétrospective de blogs
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2025/rétrospective-de-blogs
#+post_title: Rétrospective de blogs
#+post_tags: blog, orgmode, gemini, python, bash, dessin
#+post_series:
#+post_type: post
#+post_status: publish
#+post_date_published: <2025-02-23 17:56:21>
#+post_date_modified: <2025-02-23 17:56:21>
#+post_index_page_roam_id: 9167e3b2-8ee3-4aaf-afe4-a8d96f8e836d
#+BLOG: cipherbliss_blog
* Rétrospective de blogs
Au début, j'avais un blog sur papier dans mon agenda de lycée où je dessinais ce qui m'arrivait avec les camaradz de l'époque, ce qui m'a bien occupé pendant 4 ans. C'était le média social très low tech en papier de l'époque. En y repensant, mes premiers journaux de bord sur papier datent de bien avant cela, autour de 1995 quand je me suis régulièrement mis à écrire sur tout et rien juste pour le plaisir de l'écriture.
Puis je découvre les forums de dessins en ligne à l'aide d'un ami qui s'amuse à bidouiller des mods de jeu comme American Mc Gee's Alice sur ordinateur.
Au lycée je bricole un site personnel pour montrer mes dessins en html et css, en dupliquant plein de choses d'une page à l'autre, ce qui rend l'évolution pas super simple, le tout hébergé chez Lycos. Je ne fais pas de backup de ce site et expérimentera les déconvenues d'un crash d'ordi bien plus tard, ainsi que la découverte qu'il est tout à fait possible qu'une grosse boîte comme Lycos puisse tout à fait supprimer ses hébergements web sans prévenir, et disparaître du jour au lendemain sans possibilité de recours. Pareil pour Photobucket où j'avais placé des dessins et des photos retouchées.
En 2003, un copain, Monoceros, me propose d'installer un blog dotclear sur mon espace free, ce qui me convient pendant pas mal de temps. Puis souhaitant bénéficier de thèmes un peu plus jolis dans un catalogue bien plus fourni de thèmes et de plugins, je convertis mon blog Dotclear en blog Wordpress, toujours hébergé chez free.
Une copine pas du tout ingénieure, Puchi-ko, mais aimant la musique Japonaise me montre comment me servir des flux RSS des sites qu'elle lit en utilisant Firefox, c'est une super fonctionnalité dont je découvre les nombreux avantages. J'adopte peu de temps après Thunderbird pour y mettre les flux RSS principalement de sites de dessin. De nos jours, Firefox ne propose plus cette fonctionnalité et peu de sites web proposent un flux RSS.
J'incite les gens que je connais et fréquente en festival manga / fanzine / dessin en ligne à avoir leur site personnel pour présenter leurs dessins, commençant à comprendre que dépendre d'acteurs qui n'en ont rien à faire de ce que l'on place chez eux est un risque important.
Je participe à un évènement de l'école d'ingé d'Every où le thème est "les blogs" avec d'autres gens qui le pratiquent depuis un bon bout de temps, genre Korben, Sauvane, etc.
J'avais développé un script de migration des billets en base de données pour aller vers Wordpress.
Je constate aussi que le temps avançant, de plus en plus d'artistes qui avaient ouvert un blog sur une plateforme comme Livejournal, overblog ou d'autres endroits exotiques disposant de flux RSS ne mettent plus leurs oeuvres en ligne (sauf Loish <3 https://blog.loish.net )
Les gens se rendent de plus en plus captifs de plateformes privatrices sans flux RSS qui cachent à ses abonnés ce que l'on poste selon son bon vouloir, tout en requérant aux visiteurs d'avoir un compte pour accéder à ce qui est publié.
Je commence mon plan pour sortir de Facebook et Google et envisage des exports de mes données, tout en incitant d'autres à faire de même et à toujours alimenter une adresse personnelle et me mets à héberger mon instance Mastodon et à suivre des artistes dessus.
Mes flux RSS d'artistes suivis deviennent de plus en plus morts, ayant migré deux ou trois fois de nom de domaine aussi pour mes blogs je fais en sorte d'indiquer régulièrement la nouvelle adresse et d'avoir les contenus qui fonctionnent à coup de rechercher et remplacer les liens en base de données dans mes sites. Ce n'est pas très compliqué et ça marche assez bien, le plus relou étant le changement de chemin vers les articles, le chemin du slug d'article.
** Inspiration wiki personnel
Ayant adopté Zettlr pour faire un wiki perso et exporter tous les trucs que j'avais écrit dans des blogs avec base de donnée mysql, je fais une moulinette pour exporter mes écrits en Markdown.
Un kamaradz libriste me vante les mérites d'Emacs et je m'y essaie. Je lis des gens qui aiment particulièrement le format Org, et convertis mes écrits de Markdown à Org pour me faire un wiki personnel.
Emacs étant un bon outil pour se forger ses propres raccourcis clavier c'était bien pratique. J'ai donc mon wiki dans un format Orgmode en réunissant plein de fichiers dont je peux voir une représentation en graphe orienté avec org-roam-ui, ça me permet de préparer des articles et de relier des idées ensemble, sans que mes blogs exposent l'intégralité de mes pages de wiki.
Je suis étonné de voir que l'ensemble de mes écrits en ligne (blogs, site perso, médias sociaux et forums) tient sur un espace disque très restreint: 33Mo. Mes dessins avec leurs versions de travail intermédiaires, tiennent quant à eux sur une cinquantaine de Go. Ce qui aurait tenu sur le disque dur de mon premier ordi perso acheté en 2003 avec l'aide de mon frère, le disque était alors un disque IDE de 80Go.
Constatant qu'il y a un temps non négligeable entre mes écrits et leurs publication sur mes blogs wordpress, j'envisage de faire quelque chose pour relier plus directement l'écrit à la publication.
Puis lisant du Ploum qui évoque la version finale de son blog parce qu'il en a gros des évolutions bancales et des trucs relou des CMS qui deviennent des monstres, je m'intéresse à la gestion de blog statique et aux capsules gemini.
https://ploum.net/2022-12-04-fin-du-blog-et-derniere-version.html
** S'inspirer des meilleurs
Je regarde comment fonctionnent deux ou trois outils de génération de blog statique, en tentant d'y reporter quelques uns de mes contenus: Pelican, Hugo, Offpunk, LazyBlorg, Zola... certains sont affreusement complexes pour comprendre les infos nécessaires à leur utilisation, d'autres beaucoup moins.
J'examine les fonctionnalités minimales dont j'ai besoin, et quel est l'effort à faire en développement pour adapter un outil existant ou partir vers une solution maison en quelques scripts.
Je veux pouvoir réutiliser mes articles Org en devinant la date de leur publication, leur titre et leur contenu.
Je constate que pour réutiliser des choses existantes il faut forcément bidouiller sur le contenu des articles, ne serait-ce que pour que le moteur de blog détecte les dates des articles, car la date de création ou de modification de mes fichiers org ne reflète pas du tout cela. Heureusement c'est une bidouille assez simple à faire.
** Quelques objectifs pour mon moteur de blog:
J'opte pour un petit ensemble d'outils qui me permettent de générer à partir de documents org:
- plusieurs sites, dont les contenus sont séparés dans un dossier
- un flux RSS/Atom par site
- un thème de base en quelques lignes de scss, différent pour chaque site si on veut
- avec des posts dans plusieurs langues
- des tags naviguables qui permettent de lister les autres articles ayant ce tag
- des tags auto détectés à partir d'un vocabulaire contrôlé, spécifique à chaque blog
- une gestion simple des chemins vers les articles avec un préfixe d'année et des slugs
- pas besoin de section commentaires ou de plugins, les gens peuvent m'écrire par email à contact+blog@cipherbliss.com
- les templates html permettent une réutilisation de style pour les thèmes de wordpress
- une configuration de contenu paramétrable pour chacun des sites, titre, description, tags de base, signature, infos de soutien financier, etc.
- un index qui présente en entier quelques articles puis liste les suivants avec des liens au lieu de faire une infinité de pages
- pas de moteur de recherche interne, on utilise un lien vers un moteur externe
- une mise à disposition de l'intégralité des articles sur une forge logicielle qui cause le Git, ici
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
- une automatisation de la gestion des nouvelles images
- pas d'administration à plusieurs, bien que c'est tout à fait faisable en partageant un dossier et en ajoutant chacun ses articles avec la gestion de version git.
- un outil en ligne de commande pour simplifier la création de nouvel article avec les quelques infos nécessaires à tout article: titre, date, texte.
Faire de la publication programmée à une heure donnée? Ce serait faisable mais finalement je n'y tiens pas particulièremment.
Les quelques bibliothèques pour faire ce blog dynamique: git, python, pypandoc, argparse, SASS.
Avec un peu de bash, pandoc et quelques scripts python je parviens à générer en une trentaine de secondes des pages html à partir d'un milier d'articles. En utilisant pypandoc au lieu de pandoc je réduis ce temps de conversion à moins de 2 secondes. En faisant quelques autres vérifications pour ne régénérer que les articles qui ont été modifiés depuis la dernière génération, comme le font d'autres moteurs de blog, je réduis encore ce temps.
La mise à jour des blogs est super simple, un git pull, une génération de blog, et une copie vers les dossiers hébergés. Le tout peut se faire dans un cronjob qui lance un simple script qui ne fera des changements que si il y a du neuf.
Voici les sources du dépot, qui contiennent donc tous mes écrits en ligne sous licence libre CC-BY-SA et en AGPLv3+ pour les scripts:
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
Pour le fun, ce blog de cipherbliss contient 274 articles, 140 000 mots, qui se lisent en 10h34min si vous lisez à la vitesse moyenne de 220 mots minutes comme beaucoup d'adultes.
Bons essais à vous si vous souhaitez adopter ce moteur de blog statique, il vous suffira de commencer à lancer une commande et à mettre dedans des anciens fichiers org (dans le dossier `sources/mon_blog`), ou à en créer un nouveau avec une commande sur `new_article.py`.
#+begin_src bash
git clone https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
cd orgmode-to-gemini-blog
py new_article.py # ceci vous demandera le nom du dossier de blog, la langue, et le titre de l'article
#
#+end_src
Vous pouvez maintenant modifier votre nouvel article avec votre éditeur de texte préféré.
Et zou pour convertir votre blog en site statique:
#+begin_src bash
bash converters mon_blog
#+end_src
Ce qui génère un site html statique et une capsule gemini dans les dossiers de destination: html_websites/mon_blog et capsules-gemini/mon_blog
Lisez le readme pour d'avantage de personnalisation. Havez fun!

View File

@ -1,4 +1,24 @@
* Stratégie de mitigation de laccident de fusion du cœur sur lEPR.
:PROPERTIES:
:ID: 2d3dea63-7567-4def-80d9-c9bd82d41eed
:END:
#+title: Stratégie de mitigation de laccident de fusion du cœur sur lEPR
#+post_ID:
#+post_slug: organisation-de-taches-orgmode
#+post_url: https://www.ciperbliss.com/2025/stratégie-de-mitigation-de-laccident-de-fusion-du-cœur-sur-lepr
#+post_title: Stratégie de mitigation de laccident de fusion du cœur sur lEPR
#+post_tags:
#+post_series:
#+post_type: post
#+post_status: publish
#+post_date_published: <2025-02-23 18:39:08>
#+post_date_modified: <2025-02-23 18:39:08>
#+post_index_page_roam_id: 2d3dea63-7567-4def-80d9-c9bd82d41eed
#+BLOG: dragonfeu_blog
* Stratégie de mitigation de laccident de fusion du cœur sur lEPR
Jimagine si vous avez cliqué sur cet article, vous savez que lEPR de Flamanville vient de “diverger” ( /nota: article écrit en septembre 2024/ ). Autrement dit la réaction en chaîne a été, et pour la première fois dans son cœur, auto-entretenue, permettant un équilibre neutronique.
@ -299,32 +319,4 @@ Je vous donne mes sources sur [[https://we.tl/t-Ubd7Pil4Np][ce lien]] (attention
[[https://miro.medium.com/v2/resize:fit:629/1*1Iepu71t1QQjOppTrNy7OQ.png]]
[[https://medium.com/tag/nuclear?source=post_page-----f82c1d15ed58--------------------------------][
Nuclear
]]
[[https://medium.com/tag/accident?source=post_page-----f82c1d15ed58--------------------------------][
Accident
]]
[[https://medium.com/tag/epr?source=post_page-----f82c1d15ed58--------------------------------][
Epr
]]
[[https://medium.com/tag/astec?source=post_page-----f82c1d15ed58--------------------------------][
Astec
]]
[[https://medium.com/tag/fukushima?source=post_page-----f82c1d15ed58--------------------------------][
Fukushima
]]
[[https://medium.com/tag/nuclearource=post_page-----f82c1d15ed58--------------------------------][Nuclear]]