up logging of generation
This commit is contained in:
parent
fa8636185d
commit
ce6eb680b7
@ -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')
|
||||
|
@ -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/
|
||||
|
@ -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}")
|
@ -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
|
||||
|
@ -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}"')
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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!
|
@ -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
|
||||
|
@ -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=]]
|
||||
|
||||
|
@ -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=]]
|
||||
|
||||
|
@ -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==]]
|
||||
|
||||
|
@ -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!
|
||||
|
||||
|
@ -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=]]
|
||||
|
||||
|
@ -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!
|
@ -1,7 +0,0 @@
|
||||
#+post_title: Salut les giminiciens
|
||||
#+post_tags: gemini,blog,salut
|
||||
|
||||
* Salut les giminiciens
|
||||
|
||||
|
||||
hop hop coucou
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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!
|
@ -1,4 +1,24 @@
|
||||
* Stratégie de mitigation de l’accident de fusion du cœur sur l’EPR.
|
||||
|
||||
:PROPERTIES:
|
||||
:ID: 2d3dea63-7567-4def-80d9-c9bd82d41eed
|
||||
:END:
|
||||
|
||||
#+title: Stratégie de mitigation de l’accident de fusion du cœur sur l’EPR
|
||||
#+post_ID:
|
||||
#+post_slug: organisation-de-taches-orgmode
|
||||
#+post_url: https://www.ciperbliss.com/2025/stratégie-de-mitigation-de-l’accident-de-fusion-du-cœur-sur-l’epr
|
||||
#+post_title: Stratégie de mitigation de l’accident de fusion du cœur sur l’EPR
|
||||
#+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 l’accident de fusion du cœur sur l’EPR
|
||||
|
||||
|
||||
|
||||
J’imagine si vous avez cliqué sur cet article, vous savez que l’EPR 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]]
|
Loading…
x
Reference in New Issue
Block a user