Coder ? Non, je bidouille, au mieux.
Le plaisir est tout de même présent.
Quoi de mieux qu'un mois de décembre pour entreprendre d'écrire du code autour de zettelzen.
20 : Script dico
avec stardict
et la base de synonymes de cnrtl.fr
.
==> inc/code/dico
19 : Je me suis rendu compte que j'avais plusieurs scripts en doublon pour travailler/naviguer dans mes notes. J'ai donc regroupé toutes les fonctions dans un seul script, puis elles sont appelables via des scripts spécifiques pour acme
.
==> inc/code/zk
18 : Ajout d'un timeout pour la récup' des flux et début de scripts avec stardict
.
17 : Retour en arrière pour la division du script principal. Je ne suis pas assez doué pour comprendre ce qui ne fonctionne pas. J'ai également réparé la mauvaise conversion des lignes débutant par -
juste après une citation.
16 : Un tout petit peu de temps aujourd'hui. J'ai surtout divisé le script principal en plusieurs parties pour faciliter le repérage dans le code. J'ai aussi retravaillé mon script pour les flux afin qu'il n'affiche pas le titre du site si il n'y a pas de nouveau contenu depuis deux semaines.
Demain, si le temps le permet, j'aimerai bien écrire un script pour afficher une liste de synonymes ainsi que la définition d'un mot surligné.
15 : Rien de bien extraordinaire aujourd'hui. Simplement changer la syntaxe pour les blocs de code pour que ---
serve pour les balises <hr>
.
14 : Pas d'écran aujourd'hui.
13 : Rajout d'une limite à deux semaines pour les flux, ainsi qu'un rafraichissement automatique après une journée.
Pour l'écriture j'ai piqué le script conjugueur.py
à Milouse.
==> inc/code/conjugueur.py
12 : Le script pour la lecture de flux est terminé.
J'ai opté pour python
une nouvelle fois avec feedparser
c'est un jeu d'enfant.
==> inc/code/acme/afeed
D'ailleurs j'ai également changé la façon d'afficher du code.
- Si c'est une portion elle s'affiche dans la page.
- Si c'est le fichier complet, cela affiche un lien vers ce dernier.
Je trouve cela plus clair.
11 : Bien avancé sur min script de rss/atom. Probablement terminé demain.
10 : En bidouillant un peu je me suis dit que cela pourrait être sympa d'avoir mon lecteur de flux rss directement dans acme
. J'ai donc commencé à écrire un script assez simple.
09 : Les blocs de code/texte affiche maintenant en entête le fichier associé, ceci permet l'ouverture du dit-fichier dans le navigateur.
08 : Le script est terminé.
- Copie l'image si elle est ≤ à 640px de largeur.
- Redimentionne l'image si elle est ≥ à 640px de largeur.
- Applique la diffusion d'erreur (dithering) pour réduire la qualité/poids de l'image.
==> inc/code/imgconv
07 : Simplification du script pour les images, en bonne voie pour être terminée demain.
06 : Oups, rien du tout
05 : Réecriture commencée pour le script gérant les images. Diminution de la taille, dithering et ... plus rien. Guitare pendant le reste de l'aprem.
04 : Ajout du support blockcode
avec ---
. D'ailleurs je réfléchis s'il est judicieux de mettre un fichier code complet dans une page html, je trouve que cela n'est pas très lisible lorsqu'il dépasse la cinquantaine de lignes. Et je vais plutôt partir sur des morceaux de code en étendant la syntaxe {^code le_fichier}
avec la délimitation de ligne à afficher.
{^code iomlan.py:1:71-106}
devrait ainsi afficher que la dite-partie.
inc/code/iomlan.py import html [...] def include_file(file_type, reference): dir_map = {"code": "code", "text": "text"} parts = reference.split(":") filename = parts[0] line_ranges = parts[1:] file_path = os.path.join( INCLUDE_DIR, dir_map[file_type], filename if file_type == "code" else f"{filename}.txt" ) content = read_file(file_path) if not content: return f"<pre><code>File not found: {filename}</code></n" if not line_ranges: return f"<pre><code>==> <a href=\"{file_path}\">{file_path}</a></code></pre>" content_lines = content.splitlines() selected_lines = [] for line_range in line_ranges: try: if "-" in line_range: start, end = map(int, line_range.split("-")) selected_lines.append("\n".join(content_lines[start - 1:end])) else: line = int(line_range) selected_lines.append(content_lines[line - 1]) except (ValueError, IndexError): selected_lines.append(f"Error processing range: {line_range}") formatted_content = "\n\n[...]\n\n".join(selected_lines) escaped_content = html.escape(formatted_content) return f"<pre><section><a href=\"{file_path}\">{file_path}</a></section>\n<code>{escaped_content}</code></pre>"
Au final ai-je bien besoin d'une syntaxe pour les blockcodes
?
03 : Plus une journée de réflexion aujourd'hui sur comment bien organiser iomlan afin que la maintenance soit quasi-nulle d'ici la fin du mois.
Je me suis arrêté sur le modèle suivant, divisé par semaines:
- 1 et 2 -
scripts
Nettoyage et ajout si fonctionnalités manquantes. - 3 et 4 -
organisation
Création et/ou nettoyage des dossiers puis des notes.
02 : J'avais quelques soucis de fichiers non-lisibles en envoyant l'html vers mon serveur. Réglé avec :
import os
DST_DIR = "dst"
def set_permissions(DST_DIR):
for root, dirs, files in os.walk(DST_DIR):
# Set permissions for directories to 755
for dir_name in dirs:
dir_path = os.path.join(root, dir_name)
os.chmod(dir_path, 0o755)
# Set permissions for files to 644
for file_name in files:
file_path = os.path.join(root, file_name)
os.chmod(file_path, 0o644)
# Call this function after generating the files in dst_dir
set_permissions(DST_DIR)
Le script affichant le contexte de la note contenait beaucoup de code redondant (plusieurs invocations de grep
ou find
). J'ai simplifié le tout avec while read
.
==> inc/code/acme/acontext
01 : Démarrage en douceur avec un script simple, envoyant le texte sélectionné vers un fichier scratchpad
.
D'ailleurs je découvre avec joie la variable $samfile
pour accéder au fichier en cours, d'édition. Pratique
==> inc/code/acme/ascratch