Scrippy : en finir avec script_final_old_v3_OK_last.py
by Doug Le Tough,Xavier Teyssier from Linuxfr.org
Tout administrateur système a croisé un jour, au détour d'un serveur, un script_final_old_v3_OK_last.py sans logs, sans historique, avec un mot de passe en clair à la ligne 42 et un commentaire # TODO: gérer les erreurs daté de 2014.
Après cinq ans de développement en parallèle de mes activités professionnelles, je publie Scrippy, un framework Python sous licence MIT pour écrire des scripts d'exploitation standardisés, robustes et prêts pour la production.
- lien nᵒ 1 : Le site officiel
- lien nᵒ 2 : La documentation pas à pas
- lien nᵒ 3 : Le code source
Sommaire
Le constat : le script d'exploitation, ce grand oublié
Dans beaucoup d'équipes, les scripts d'exploitation sont écrits vite, chacun à sa manière, puis maintenus dans la douleur. Le cycle de vie typique est bien connu :
- « C'est juste un petit script, je l'écris vite fait. »
- Le petit script part en production.
- L'auteur part en vacances (ou change d'entreprise).
- Le script plante un dimanche à 3 h du matin.
- L'astreinte découvre qu'il n'y a ni logs, ni historique, ni documentation, et que la configuration est codée en dur entre deux
print("ici").
Le tout agrémenté d'un mot de passe qui s'affiche fièrement dans la sortie standard. Oui, hunter2, on te voit.
Le principe : un en-tête déclaratif
Avec Scrippy, un script décrit son comportement dans un en-tête déclaratif : auteur, version, description, configuration attendue, options acceptées, utilisateurs autorisés, nombre d'exécutions simultanées. Une seule instruction with dans le code suffit ensuite pour bénéficier de l'ensemble des fonctionnalités, sans écrire une seule ligne de plomberie :
- un fichier de log par exécution, avec sortie colorée sur le terminal ;
- un historique complet des exécutions (paramètres, durée, code retour) ;
- un fichier de configuration par script, chargé et validé au démarrage ;
- des options de ligne de commande analysées et validées depuis l'en-tête, avec un
--helpgénéré automatiquement (personne n'aura plus d'excuse pour ne pas RTFM) ; - le masquage automatique des secrets dans les logs et l'historique ;
- la restriction des utilisateurs et groupes autorisés à lancer le script ;
- une limite d'exécutions simultanées, avec file d'attente ;
- un répertoire de travail temporaire par exécution, supprimé automatiquement ;
- une gestion d'erreurs propre et des codes retour exploitables par votre ordonnanceur préféré.
Un exemple vaut mieux qu'un long discours
Voici un script de surveillance de l'occupation d'un système de fichiers. Toute ressemblance de l'auteur avec un personnage des Monty Python n'est évidemment pas fortuite : on fait du Python, on a des traditions.
#!/usr/bin/env python3
"""
--------------------------------------------------------------------------------
@author : Luiggi Vercotti
@date : 2026-10-08
@version : 1.0.0
@description : Monitor filesystem usage
--------------------------------------------------------------------------------
Configuration:
@conf:thresholds|warning|int|false
--------------------------------------------------------------------------------
Options:
@args:mount-point|str|Mount point to check|1|/|||false|false
--------------------------------------------------------------------------------
"""
import shutil
import scrippy_core
from scrippy_core import logger
def main():
with scrippy_core.ScriptContext() as _context:
usage = shutil.disk_usage(_context.args.mount_point)
percent = round(usage.used * 100 / usage.total, 1)
if percent >= _context.config.get("thresholds", "warning", "int"):
logger.warning(f"[+] {_context.args.mount_point}: {percent}% used")
if __name__ == '__main__':
main()
Ce court script dispose déjà de --help, --version, d'un fichier de configuration validé, d'une option --mount-point validée, d'un log par exécution (--log), d'un historique (--hist), d'un mode debug (--debug) et d'un espace de travail temporaire. Le tout sans avoir vendu son âme à un fichier YAML de 800 lignes, ni avoir à relire une n-ième fois la doc de argparse, ni sans incantation mystique pour la configuration de log, ni pentacle renversé. Ni !
Le double bénéfice
D'une part, tous les scripts d'exploitation suivent le même standard : ils se lisent, s'exploitent et se maintiennent de la même façon, quel que soit leur auteur. Le script du collègue parti n'est plus une boîte noire.
D'autre part, ils s'écrivent beaucoup plus vite : inutile de recoder ces contrôles dans chaque script, on se concentre sur ce qu'il doit réellement faire. Le temps gagné peut être réinvesti dans des activités à haute valeur ajoutée, comme le troll sur systemd.
Les modules
Le cœur (scrippy-core) est complété par des modules optionnels :
-
scrippy-remote: exécution distante et transferts de fichiers (SSH/SFTP, FTP/FTPS, CIFS) ; -
scrippy-api: client d'API REST, avec prise en charge d'OpenAPI ; -
scrippy-db: requêtes PostgreSQL, MySQL et SQLite ; -
scrippy-mail: envoi et lecture de courriels (SMTP, IMAP, POP3) ; -
scrippy-snmp: opérations SNMPget,walketset; -
scrippy-git: gestion de dépôts Git ; -
scrippy-template: génération de documents à partir de modèles Jinja2.
Pas un prototype
Scrippy n'est pas né d'un week-end pluvieux. Il tourne depuis plusieurs années en production, sur des usages bien réels. Il a donc survécu à des mises à jour, des migrations et des vendredis après-midi, ce qui constitue une forme de certification assez exigeante.
Pourquoi seulement maintenant ?
Parce que je n'étais pas satisfait de la documentation. Un outil mal documenté ou dont la documentation n'est pas à jour est un outil qu'on n'adopte pas, et, même si jusque là celà a été le cas pour Scrippy, « Use The Source, Luke » n'est pas une stratégie d'adoption. Je ne voulais pas publier un projet que d'autres ne pourraient pas s'approprier.
Dans les faits le code a toujours été publié mais n'ayant jamais fait aucune annonce l'adoption de Scrippy est relativement comparable à celle de GNU Hurd !
La question qui fâche : et l'IA dans tout ça ?
Avant que le Jihad butlérien ne se lève dans les commentaires, par souci de transparence : le code de Scrippy a été écrit par un humain, sur cinq ans.
Claude m'a aidé à remettre à plat la documentation, à l'enrichir d'un tutoriel progressif (voir la documentation pas à pas) et à maintenir à jour les README.md des dépôts. Il m'a également permis de détecter et corriger quelques bogues passés sous les radars malgré des années d'exploitation, ce qui est à la fois utile et clairement vexant.
L'IA reste un outil. Le meilleur des outils, entre les mains de quelqu'un qui ne sait pas ce qu'il fait, ne le rendra pas meilleur : un rm -rf reste un rm -rf, quelle que soit la qualité du clavier. C'est l'expérience, la compréhension du besoin et l'exigence qui font la qualité d'un projet. L'outil permet d'aller plus loin et plus vite.
Licence
Scrippy est un logiciel libre distribué sous licence MIT : vous pouvez l'utiliser, le modifier, le redistribuer et l'intégrer à vos projets, y compris commerciaux, à la seule condition de conserver la mention de copyright et le texte de la licence.
Vos retours sont les bienvenus
Si vous écrivez des scripts d'exploitation en Python, je serais ravi d'avoir vos retours, critiques comprises : la syntaxe de l'en-tête, les fonctionnalités manquantes, ou la comparaison avec ce que vous utilisez aujourd'hui.
Les rapports de bogues sont acceptés. Les trolls aussi, tant qu'ils sont de qualité (et vous pouvez y aller car mon Prumpleffer a été calibré par tTh).
Commentaires : voir le flux Atom ouvrir dans le navigateur
Sortie de Python 3.15
by entwanne from Zeste de savoir - Articles
Imports paresseux et dictionnaires immutablesselenium et pandoc pour lire des nouvelles hors lignes
by jtremesay from Linuxfr.org
intro tl;dr: j'ai découvert le c-drama Against the Current. J'ai découvert qu'à la base c'est une web-nouvelle publié en chinois. J'ai trouvé des fan-lations en ligne dont celle là, mais personne n'ayant eu la sympathie de condenser ça en .epub pour lire facilement sur la liseuse.
Du coup, aujourd'hui, on va voir comment automatiser tout ça en moins de 100 lignes de python.
Il vous faut :
- python3
- Selenium webdriver, une lib pour piloter un navigateur web
- Pandoc, le convertisseur universel pour générer l'epub à partir de nos chapitres markdown
- tqdm, pour avoir une jolie barre de progression. Totalement optionnel
from pathlib import Path
from subprocess import run
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
try:
from tqdm import tqdm
except ImportError:
tqdm = lambda x: x
BASE_URL = "https://www.readthedrama.com"
NOVEL_SLUG = "against-the-current"
CHAPTERS = 358
OUTPUT_DIR = Path.cwd() / "output"
NOVEL_NAME = "Against the Current"
NOVEL_AUTHOR = "He Yan Shan"
def dl_chapter(driver: Firefox, chapter_num: int, output_dir: Path) -> None:
chapter_path = output_dir / f"chapter_{chapter_num:03}.md"
if chapter_path.exists():
return
driver.get(f"{BASE_URL}/novels/{NOVEL_SLUG}/chapters/{chapter_num}")
driver.implicitly_wait(1)
elements = driver.find_elements(By.CSS_SELECTOR, "article > p")
novel_text = f"## Chapter {chapter_num}\n\n" + "\n".join(
[element.text + "\n" for element in elements]
)
with open(chapter_path, "w", encoding="utf-8") as f:
f.write(novel_text)
def dl_chapters(driver: Firefox, output_dir: Path) -> None:
for i in tqdm(range(1, CHAPTERS + 1)):
dl_chapter(driver, i, output_dir)
def generate_epub(output_dir: Path) -> None:
with (output_dir / "metadata.yaml").open("w") as f:
f.write(f"""\
---
title: "{NOVEL_NAME}"
author: "{NOVEL_AUTHOR}"
toc: true
toc-title: "Table of contents"
...
""")
args = [
"pandoc",
"metadata.yaml",
"-o",
f"{NOVEL_SLUG}.epub",
"--toc",
"--split-level=1",
"--file-scope",
] + [f"chapter_{i:03}.md" for i in range(1, CHAPTERS + 1)]
run(args, cwd=output_dir, check=True)
def main() -> None:
driver = Firefox()
driver.install_addon("consent_o_matic-1.1.5.xpi")
driver.install_addon("uBlock0_1.75.0.firefox.signed.xpi")
output_dir = OUTPUT_DIR / NOVEL_SLUG
output_dir.mkdir(parents=True, exist_ok=True)
dl_chapters(driver, output_dir)
driver.quit()
generate_epub(output_dir)
if __name__ == "__main__":
main()
Commentaires : voir le flux Atom ouvrir dans le navigateur
Vos projets Django : montrez ce que vous construisez
by Yardley from AFPy discuss
Bonjour à toutes et à tous,
J’ouvre ce fil comme un endroit permanent pour parler de ce qu’on construit avec Django. Pas de question précise, pas de problème à résoudre : juste montrer, raconter, et regarder ce que font les autres.
Tous les projets ont leur place ici. Une todo app faite ce week-end pour comprendre les vues génériques est aussi bienvenue qu’une application métier en production depuis trois ans. Le débutant qui vient de faire marcher son premier formulaire a quelque chose à raconter, et souvent quelque chose à apprendre à ceux qui ont oublié à quoi ressemblait cette étape.
Et si vous n’avez qu’une idée, sans une ligne de code, postez-la quand même. C’est souvent le meilleur moment pour recevoir un avis utile.
Un format qui aide, si vous voulez vous en servir :
- Ce que fait le projet, en une phrase
- Où vous en êtes : idée, en cours, en ligne, abandonné
- Ce que vous avez appris, ou ce qui coince en ce moment
- Un lien ou une capture, si ça existe quelque part
Le troisième point est le plus intéressant pour les autres. « J’ai mis deux soirées à comprendre pourquoi mon select_related ne changeait rien » vaut mieux qu’une liste de fonctionnalités.
Deux règles simples. On pose les questions techniques précises dans leur propre fil, pas ici, pour qu’elles restent trouvables. Et on commente les projets des autres avec la même bienveillance qu’on aimerait recevoir pour le sien.
Je commence.
7 messages - 3 participant(e)s
Alternative libre à MATLAB
by uneTanche from Linuxfr.org
Sommaire
Avant-propos
Je ne suis pas un spécialiste de l'automatique, au mieux un amateur éclairé. J'ai eu besoin de mettre au point différents régulateurs pour des projets de contrôle moteur et je trouvais qu'il manquait d'exemples/retour d'expérience sur les alternatives à MATLAB (en français). C'est dans ce cadre que je vous propose cette synthèse subjective des solutions que j'ai testées.
L'article original est disponible ici
Intro
Dans cet article, je dresse un bilan de ma recherche de solution
alternative à matlab/simulink pour la simulation d'algorithme de contrôle/régulation.
Pourquoi simuler?
La mise au point d'asservissement ou de régulation comporte des risques. Il y a notamment un risque d'instabilité qui peut entraîner la destruction du système. Ce qui peut s'avérer coûteux et même parfois dangereux pour l'opérateur. Donc pour limiter les risques lors de la conception, on réalise sa mise au point via une simulation numérique.
Commençons par une petite mise en contexte. Si vous n'avez aucune idée de ce qu'est l'automatique, je vous laisse aller lire l'article wikipédia. C'est un vaste domaine qui couvre notamment, l'asservissement et la régulation de systèmes.
Un exemple: le fait d'attraper un objet avec ses doigts peut-être représenté comme un montage en asservissement. Le capteur est l'oeil, l'actionneur le bras et le cerveau le centre de calcul. La méthode classique pour documenter ce type de fonctionnement est de le représenter sous la forme d'un schéma fonctionnel:

Ce type de schéma permet de mettre en évidence les boucles de rétro-action ainsi que les différents éléments composant le système et leur interface avec le monde extérieur.
Pour prendre un autre exemple, plus concret, on va s'intéresser à la régulation en vitesse d'un moteur DC. Il servira aussi de référence tout au long de cet article. Son schéma fonctionnel est le suivant:

La simulation en automatique
Commençons par définir nos attentes quant aux solutions de simulation. Pour ma part, j'ai deux critères principaux:
- De bien simuler! Là c'est le rôle du solveur. Ce n'est pas vraiment mon domaine alors je ne rentre pas dans les détails
- D'être lisible. Comme on l'a dit en introduction, en automatique beaucoup de choses sont représentées sous la forme de schéma fonctionnel. Donc il est nécessaire de pouvoir rapidement faire la correspondance entre le code et le schéma
On pourrait aussi citer la rapidité, l'observabilité ou encore la facilité d'itération/modification, mais tous ces points sont plus ou moins liés au solveur et son interface.
Pour effectuer une comparaison des différentes solutions, on va se baser sur notre exemple d'asservissement et régulation en vitesse d'un moteur DC. Un cas d'application concret pourrait être le pilotage du moteur de brosse d'un aspirateur sans fil.
On représente ce pilotage par le schéma suivant:

On définit la fonction de transfert du moteur dans le domaine de Laplace tel que:
Avec:
- I: le courant traversant le moteur (A)
- U: la tension aux bornes du moteur (V)
- Ke: la force électromotrice (V/rad/s)
- Ohmega_m: la vitesse de l'arbre du moteur (rpm)
- L: l'inductance du moteur (H)
- R: la résistance du moteur (Ohm)
Avec:
- Kt: la constante de couple (N.m/A)
Avec:
- Cem: le couple électromagnétique (N.m)
- J: le moment d'inertie (kg.m²)
- Kf: les frottements visqueux (N.m.s)
On en profite pour définir aussi la fonction de transfert du régulateur PID:
Je ne rentre pas dans les détails de ces fonctions de transferts, ni même sur ce qu'est une fonction de transfert. Dans notre cas, on peut la considérer comme le modèle virtuel de notre moteur. En les intégrant au schéma fonctionnel précédent on obtient le schéma suivant:

Maintenant que nous avons défini notre exemple, nous allons implémenter ce système avec différents outils et en comparer l'utilisation. Vu que le logiciel MATLAB/simulink est la référence dans le domaine, on va commencer par lui.
Matlab/simulink
Commençons par quelques définitions.
- MATLAB c'est le nom d'un langage de script, mais aussi celui de son environnement de développement. MATLAB a été conçu pour manipuler des matrices et afficher des courbes
- Simulink est un logiciel de modélisation de système dynamique reposant sur MATLAB. Il permet de créer des programmes sous la forme de schéma/ blocs
Pour schématiser grossièrement, MATLAB est le moteur et simulink l'interface utilisateur.
Maintenant que les présentations sont faites, passons à la mise en place de notre exemple. MATLAB n'étant pas un logiciel libre, une licence est requise pour son utilisation. Heureusement pour moi, l'éditeur propose une offre découverte gratuite à utiliser via une interface web (utilisation limitée à 20h/mois). Donc on ouvre MATLAB, on lance simulink et on rentre l'équivalent schéma fonctionnel précédent, ce qui nous donne:

L'annotation en rouge est un ajout de ma part. Mais on remarque tout de suite l'un des points forts de simulink, son interface permet de faire un programme ayant une mise en forme proche du diagramme fonctionnel.
Un exemple de résultat de simulation, en jaune la consigne de vitesse et en bleu la vitesse du moteur. On peut visualiser ces valeurs grâce à la sonde nommée "Visualisation" sur notre schéma.

Remarque
Dans notre capture d'écran, l'on peut voir que nous avons utilisé des variables (kt, L, R…) dans les blocs que fonction de transfert. Un des inconvénients de MATLAB est que ces variables ne peuvent pas être facilement définies dans simulink. Le plus simple étant de créer un "workspace" dans MATLAB dans lequel on définit et assigne nos variables. Il faudra simplement penser à activer ce workspace avant de lancer notre simulation à la prochaine ouverture de MATLAB.
Scilab/xcos
Lorsque l'on cherche une alternative open source à MATLAB/simulink Scilab est LA solution évidente. En effet, ces deux solutions ont une interface utilisateur très proche ainsi qu'un langage de script assez similaire. Puisqu'une image vaut mille mots l'implémentation de notre exemple via scilab/xcos sera sans doute plus parlant:

La ressemblance avec simulink est frappante même si à l'utilisation les deux interfaces ne sont pas strictement identiques. Un avantage qu'offre xcos, est d'intégrer la gestion du contexte (les variables comme Ke, L ou R) directement dans le fichier de schéma-blocs. Pas besoin de créer de workspace comme sous MATLAB.
Cette solution est donc parfaitement viable. Cependant, xcos souffre d'un bug particulièrement pénible: l'instabilité des liaisons entre les blocs. Il n'est pas rare de rouvrir un projet de découvrir qu'une ou plusieurs liaisons ne suivent plus le routage original mais ont été remplacés par une liaison directe entre les points d'encrage. Ceci rend le schéma nettement moins lisible, nous obligeant à refaire les liaisons lorsque ça arrive…

Une autre limite de cette solution, par rapport à MATLAB, est la petitesse de sa bibliothèque de blocs comparée aux bibliothèques disponibles sur simulink. Mais tous ces défauts ne sont pas immuables et seront sans doute corrigés à l'avenir.
Python/Jupyter
Avec cet outil, je vous propose une autre approche, plutôt que d'écrire un programme par schéma-bloque afin qu'il ressemble au schéma fonctionnel de la documentation, nous allons intégrer le code dans la documentation. Ou la documentation dans le code c'est vous qui voyez!
Cette alternative repose sur un ensemble de logiciels dont les principaux sont:
- python le langage de programmation
- Jupyter l'interface graphique
- control, numpy et mathplotlib les bibliothèques scientifiques permettant de résoudre les équations, manipuler et afficher les données
Présentation
Comme je le disais en introduction, le principe de cette solution est de mélanger documentation et code. Pour être honnête, c'est le principe même de Jupyter, mais on va voir comment l'appliquer dans notre cas.
On va donc enchaîner les parties documentations au format markdown et le code en python (on peut d'ailleurs utiliser d'autres langages, mais je n'ai pas étudié cette possibilité).

Dans cet exemple, on commence par un petit texte permettant de contextualiser le projet (1). On enchaîne ensuite avec l'importation des bibliothèques python nécessaires au projet (2). S'ensuit des explications plus précises quant au projet et le schéma fonctionnel permettant de le représenter (3). Enfin on termine la mise en contexte par la définition des différentes variables (4).
Modélisation du moteur DC
Cette approche a un gros inconvénient, elle est bien moins intuitive que la programmation par blocs. Cependant, elle offre d'autres avantages, comme une plus grande évolutivité et une plus grande souplesse dans la conception.
Elle permet aussi de tester/valider des sous-ensembles sans devoir refaire le programme.
Par exemple, plutôt que d'écrire le code pour l'ensemble de la simulation, on peut commencer par faire super bloc moteur qui inclut ses différents composants:

On remarque tout de suite que la courbe d'apprentissage de la bibliothèque control est plus raide que celle de simulink ou xcos. En particulier lorsqu'il s'agit de connecter les blocs entre eux (fonction ct.interconnect(...)).
Mais une fois cette difficulté surmontée, nous disposons maintenant un composant moteur ayant pour entrées U et Cr et pour sortie vitesse et que nous pouvons réutiliser à notre guise.
On peut donc facilement valider le comportement du moteur en boucle ouverte lorsqu'on le soumet à un échelon de tension de 10V:

Pour faire cet essai dans simulink ou xcos nous aurions dû créer un nouveau projet et y intégrer les blocs moteur, la commande de tension et une sonde de mesure et ensuite alterner entre les projets en fonction des modifications/validations à réaliser.
Cette modularité est donc très appréciable. Pour aller plus loin, on pourrait créer un fichier python séparé dans lequel on placerait notre composant moteur. Ainsi nous pourrions facilement le réutiliser dans différents projets.
Modélisation du régulateur
On peut maintenant passer au bloc du régulateur PID, enfin dans notre cas c'est seulement un PI, le terme dérivé étant nul.

Simulation complète
Nous avons maintenant tous les sous-ensembles nécessaires à la simulation de la régulation en vitesse du moteur DC. On commence donc par faire un rappel du système avec un schéma fonctionnel sans détails (1). Puis, on passe à la connexion des blocs et des entrées/sorties en python (2).

Enfin on peut afficher la réponse à un échelon de notre système. Dans notre exemple nous allons observer le comportement du moteur+asservissement pour une commande de vitesse de 1000 tr/min avec un couple résistant à zéro. Notre simulation durera une seconde avec un pas de temps 100 µs.

Ce notebook est disponible sur codeberg.
Bilan
Après avoir testé trois solutions différentes pour faire de l'automatique, quel est le bilan ?
- MATLAB/Simulink
- Avantages:
- Standard de l'industrie
- Programmation graphique proche du schéma fonctionnel
- Large bibliothèque de composants
- Nombreux exemples disponibles
- Inconvénients:
- Non open source
- Nouveau langage à apprendre (MATLAB)
- format fichier peu adapté au versionnage (simulink)
- Avantages:
- Scilab/Xcos
- Avantages:
- Open Source
- Programmation graphique proche du schéma fonctionnel
- Inconvénients:
- Nouveau langage à apprendre
- versionnage
- Bugs sur les liens (xcos) pénibles
- Avantages:
- Jupyter/control
- Avantages:
- langage python
- Modularité, on peut facilement faire ses bibliothèques de composants
- Open source
- simple fichier texte, facile à versionner
- Inconvénients:
- Courbe d'apprentissage plus raide
- Moins visuel, relecture plus difficile
- Communauté plus petite, donc moins de ressources
- Avantages:
Avec cet article, je souhaitais partager mon expérience sur la recherche d'une solution open source pour l'automatique. Il y a évidemment l'incontournable Scilab/Xcos mais pas seulement. Pour les personnes qui, comme moi, sont plus à l'aise avec du texte qu'avec une interface graphique, d'autres solutions existent. Ici par exemple, on arrive en combinant l'éditeur Jupyter et quelques bibliothèques python, à avoir une solution offrant documentation et calculs.
Cette solution n'est pas sans inconvénients, notamment l'intégration de matplotlib dans jupyter qui n'est pas trivial… Mais elle offre aussi de nombreux avantages. Comme la facilité de créer des bibliothèques de composants, versionner efficacement le code et la documentation …
Pour ce qui est du versionnage, le code des bibliothèques est en python, la question ne se pose même pas et la partie notebook quant à elle est un fichier JSON, donc du texte. Cette solution vous permettra donc de gérer finement le versionnage de vos projets.
Autres pistes
Il existe encore d'autres solutions aux trois que j'ai étudiées ici, j'en ai trouvé une qui me convient alors je ne me suis pas attardé dessus mais si vous êtes intéressé voici une liste de celle que j'ai trouvées:
Il existe certainement encore d'autres solutions que je ne connais pas…
Commentaires : voir le flux Atom ouvrir dans le navigateur
Fuite de LDLC → plainte groupée !
by mdk from AFPy discuss
Vous aussi LDLC à fuité la vie, l’univers, et le reste sur vous ? Et vous le dit par mail avec un pixel de tracking parce que récolter encore plus de donnée lors d’une fuite de donnée « ça fait cool » ?
PURR lance une plainte groupée :
1 message - 1 participant(e)
Sur Rennes : VCRpy - Hacker avec et sans Claude - lundi 12 octobre 2026
by luc_sorel-giffo from AFPy discuss
Inscription gratuite mais nécessaire sur VCRpy - Hacker avec et sans Claude, Mon, Oct 12, 2026, 6:45 PM | Meetup
Deux interventions : VCRpy par Pascal Le Merrer, Hacker avec et sans Claude par Nicolas Ledez.
- Accélérez vos tests avec VCRpy
Pascal Le Merrer (Software Crafter Freelance, lemerrer.com)
Je vais vous raconter comment j’ai multiplié la vitesse d’exécution des tests de notre application par sept. Mais pour arriver à ce résultat, le chemin était parsemé d’embûches. Je vous dévoilerai les pièges dans lesquels je suis tombé et comment je m’en suis sorti, afin que vous puissiez les éviter.
- Au secours on s’est fait hacker pendant un downtime de Claude
Nicolas Ledez (responsable infrastructure chez CGWire, consultant DevOps, profil LinkedIn)
Un jour, une inconnue bienveillante nous signale des failles dans notre application open source. Je me mets en chasse pour comprendre l’origine du problème. Claude Code : en rade. Codex : refuse poliment de m’aider à « hacker ».
Retour à l’ancienne — lecture de code, grep, doc, et pas mal de nerfs. Puis Anthropic sort les cafards de ses serveurs, on peut retravailler
Résultat : le lendemain, patch, déploiement, communication, et 4 CVE publiées.
Le récit de ces 12 heures, ce qu’on a trouvé, et une question qui pique : qu’est-ce qu’on a trouvé tout seul — et qu’est-ce qu’on n’aurait pas trouvé sans ?
Sponsor
Merci à Zenika Rennes d’accueillir cette session au premier étage de la Grande Halle Oberthur ! Un apéritif convivial offert par Zenika clôturera la soirée : l’inscription est gratuite, elle permet de dimensionner l’apéro ; donc elle engage à venir ou à libérer sa place en cas d’indisponibilité soudaine ![]()
Accès
- arrêt Oberthur : bus ligne C5, Vélo Star
- vélo : 2 racks extérieurs couverts côté sud de la Grande Halle
- entrée nord de la Grande Halle Oberthur au 74A rue de Paris, entrer et monter à droite au premier étage
Cet évènement aura lieu en présence dans l’agence Zenika Rennes qui nous accueille (merci !
). L’évènement est ouvert à toute personne intéressée par ces sujets, dans la limite de la jauge de 35 personnes. Il n’y aura pas de direct en visio, mais une rediffusion sera disponible sur la chaîne YouTube du BreizhCamp quelques jours plus tard.
En cas d’accès PMR nécessaire, veuillez nous contacter directement en amont de l’évènement.
1 message - 1 participant(e)
csvfab, un éditeur CSV libre pour les gros fichiers
by fabiochelly from Linuxfr.org
Bonjour Nal,
Je travaille régulièrement avec des exports CSV volumineux (fichiers clients, exports de CRM), et les tableurs montrent vite leurs limites : Excel et LibreOffice Calc s'arrêtent à 1 048 576 lignes. J'ai donc écrit csvfab, un éditeur libre dédié aux fichiers CSV.
Le principe : on ouvre le fichier, on filtre, on trie, on corrige, puis on enregistre directement par-dessus, sans import ni conversion. Un fichier de 5 millions de lignes (770 Mo) s'ouvre en moins de 3 secondes, et un tri prend environ 2 secondes.
J'ai été particulièrement attentif à l'intégrité des données : enregistrer un fichier sans le modifier redonne exactement les mêmes octets, et la modification d'une cellule ne change que sa ligne dans le fichier.
On y trouve aussi des outils de nettoyage courants : réparation des accents cassés (les fameux é), suppression des doublons, retrait de mots parasites comme « SARL » ou « Monsieur », mise au même format des dates et des numéros de téléphone.
Techniquement, il s'agit d'un petit serveur Python (bibliothèque standard uniquement) et d'une fenêtre Chromium. Le logiciel est sous licence MIT et fonctionne sous Linux, macOS et Windows.
Pour que les chiffres soient vérifiables, le dépôt contient un script de benchmark : il génère les fichiers de test, effectue les mêmes opérations et contrôle les résultats. Chacun peut le lancer sur sa machine.
Le code : https://github.com/fabiochelly/csvfab
Une démonstration d'une minute : https://youtu.be/4sEEdzOZrWk
Enfin, j'ai beaucoup travaillé pour qu'il accepte tous les fichiers, même mal formés (guillemets non fermés, lignes de longueurs différentes, fins de ligne ou encodages mélangés), sans abîmer les parties incorrectes : elles sont signalées et restent telles quelles à l'enregistrement. Si vous avez des CSV tordus sous la main, je suis preneur : c'est la meilleure façon de le mettre à l'épreuve.
Commentaires : voir le flux Atom ouvrir dans le navigateur
La plateforme de l’inclusion cherche un·e CTO
by mdk from AFPy discuss
Là où je taff (La plateforme de l’inclusion) on cherche notre prochain·e CTO :
Salaire : 65K à 75K €
N’hésite pas à me poser des questions (en public ou en MP) que je puisse te dire à quel point l’équipe est top ![]()
![]()
Un aperçu de ce qu’on fait : GitHub - gip-inclusion/les-emplois: Plate-forme numérique de l'inclusion · GitHub (oui, « Public Money, Public Code »).
1 message - 1 participant(e)
