MakeMake The Dwarf Planet is a feed agregator.

Sortie de Tryton 8.0

by Cédric Krier,Maxime Richez,Nicolas Évrard,Xavier Teyssier from Linuxfr.org

Le 20 avril 2026 est sortie la version 8.0 de long support de Tryton un progiciel de gestion intégré modulaire et multiplate-forme.

Tryton

La version 8.0 de Tryton s'inscrit dans la continuité des versions précédentes en améliorant la stabilité, les performances et les fonctionnalités (dont ci-dessous les principales).
Cette version a un support long de cinq ans comparé à une année pour version précédentes.

Interface et usage quotidien

Quand un champ a été modifié par les actions de l'utilisateur, il est identifié afin de permettre une vérification visuelle avant de sauvegarder.

Champ langue du tiers modifié

Les onglets peuvent être réorganisés maintenant aussi pour le client web et l'action de déconnexion est désormais dans le même menu qui contient déjà les notifications et les préférences utilisateurs afin de donner encore plus d'espace dans l'entête pour les onglets.

Modules métiers

Sur le plan fonctionnel, la version 8.0 s'enrichit avec de nouveaux modules : gestion des chèques, gestion des accises et suivi d’alcool ainsi que le suivi de la vente de service par des tâches de projet.

Les modules comptables espagnols et allemands ont été sortis du dépôt standard afin d'être gérés plus simplement par la communauté.

Administration et développement

La version 8.0 ajoute le support de Python 3.14 et arrête celui de Python 3.9.
La librairie psycopg est mise à jour à la version 3 ce qui permet d'envoyer les requêtes SQL et leurs paramètres séparément et ainsi lever les limitations sur la taille des paramètres (entre autre le nombre d'IDs dans les clause column IN (...)).

Il est maintenant possible de définir des champs Function (c-à-d calculés par l'ORM) uniquement par une expression SQL. Cette expression sera utilisée pour la lecture, la recherche et le tri.

La définition des modules a été améliorée pour permettre l'utilisation de sous-répertoires plus facilement. En effet, on peut maintenant créer un fichier tryton.cfg dans un sous-répertoire et utiliser un chemin relatif depuis celui-ci vers ses fichiers ressources.

Une API REST a été ajoutée au serveur et une librairie cliente naiad a été publiée. Elle permet de remplacer l'utilisation du module trytond directement pour la création d'applications connexes telles que des sites web. C'est une architecture plus flexible que celle utilisée jusqu'à maintenant comme dans le module flask-tryton.

Les sessions pour le client web sont maintenant stockées comme cookie pour plus de sécurité.
Le client web utilise à présent uniquement des chemins relatifs, ce qui permet de le servir depuis un sous-répertoire.

Appel à sponsor

Pour préparer l'obligation de facturation électronique en France, un appel à sponsor a été lancé pour intégrer la plateforme agrée SUPER PDP.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

[POC] microprofilage en python avec yahi

by Jul from Linuxfr.org

User story

J'utilise profile de python et j'aimerais ne voir que les fonctions appelées dans un fichier et sortir les graphs correspondants.

Et accessoirement, t'as envie de montrer comment yahi peut s'utiliser pour d'autres graphs que les analyses de pages web.

Résultat

Le résultat est ici sous forme de page web

 Le chemin

Patcher profile

D'abord, il faut commencer à patcher profile de la stdlib pour sortir les données sous forme d'un log « regexpable » :

+++ mprofile/__init__.py    2026-05-24 09:24:37.185491502 +0200
@@ -330,6 +330,7 @@
             callers[pfn] = 1

         timings[rfn] = cc, ns - 1, tt + rit, ct, callers
+        print(f"{time.time()} {rfn} {rit} {ct} {pfn}")

         return 1

NB : je n'ai absolument pas compris ce que je renvoyais comme données.

Pour moi :

rfn = fonction appelée
rit = temps passé dans le frame où la fonction est appelée
ct = temps passé dans le frame parent (?????)
pfn = fonction appelante

Écrire un script spécifique à yahi

Ensuite après avoir récupéré les journaux d'un profilage, il faut écrire un script de sélection des données.

Ici ; on ne souhaite qu'inclure les entrées dont le chemin vers le fichier qui contient la fonction contient archery.

#!/usr/bin/env python
from yahi import notch, shoot
from json import dumps
from archery import mdict

date_formater= lambda dt :"%s-%02d-%02d %02d-%02d-%02d.%02d" % ( 
    dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond
    )


######################## Setting UP ##################################
# parsing command line & default settings. Return a not fully qualified object
context=notch(
    log_format="custom",
    off="geo_ip,user_agent",
    output_format="json",
# ne sélectionner que les fonction dans le fichier archery/trait.py
    include='''{ "from_callee" : ".*archery/trait.py" }''',
    date_pattern="%s",
# datetime en format timestamp (spécifique à yahi) 
    log_pattern="""^(?P<datetime>\S+)\s
    \('(?P<from_callee>[^']+)',\s
    (?P<lineno_callee>[^']+),\s
    '(?P<callee>[^']+)'\)\s
    (?P<time>\S+)\s
    (?P<ctime>\S+)\s
    \('(?P<from_caller>[^']+)',\s
    (?P<lineno_caller>[^']+),\s
    '(?P<caller>[^']+)'\)$""")
# log sample
# 1779465928.7602208 ('<frozen importlib._bootstrap>', 911, '_load_unlocked') 1 1.267900000000155e-05 0.0015263490000001073 ('<frozen importlib._bootstrap>', 1304, '_find_and_load_unlocked')

##### OKAY, now we can do the job ##########################################

context.output_file.write(
    dumps(
        shoot(
            context,
            lambda data : mdict({
                'date_calls': 
                     mdict({ date_formater(data["_datetime"])
                : float(data["time"]) }),
                "by_overhead_callee" : mdict({ data["callee"]: float(data["ctime"])  }),
                "by_overhead_caller" : mdict({ data["caller"]: float(data["ctime"])  }),
                "by_time_callee" : mdict({ data["callee"]: float(data["time"])  }),
                "by_time_caller" : mdict({ data["caller"]: float(data["time"])  }),
                'by_callee': mdict({ data["callee"] : 1 }),
                'by_caller': mdict({ data["caller"] : 1 }),
                'by_transition' : mdict({ "%(caller)s=>%(callee)s" % data : 1 }),
                'by_transition_time' : 
                    mdict({ "%(caller)s=>%(callee)s" % data : float(data["ctime"]) }),
                'total_line' : 1,
            }),
        ),
        indent=4
    )
)

Ensuite une petite invocation de yahi suffit

python mprofile.py  < ../mprofile.log > data.js && yahi_all_in_one_maker && firefox aio.html

Conclusion

Ben, j'ai été le premier surpris par la simplicité de l'exercice, et j'ai trouvé ça gratifiant.

Yahi est peut être utile pour faire de l'aggrégation de données. :)

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

NeoMeca

by AinsiParlaitZarathoustra from Linuxfr.org

Plus de 25 ans après le lancement du fameux logiciel Aviméca, utilisé partout en physique-chimie au lycée, 18 ans après l'échec retentissant de PyMeca, je vous annonce avec grand plaisir que je lance le logiciel
NeoMeca, dans sa première version.

En voici le lien github (qui mène à sa page de téléchargement) :
Se rendre sur le Repo NeoMeca

Ce qu'offre NeoMeca par rapport à ses prédécesseurs :

1) Support natif du .MP4, .MOV, .AVI (rétrocompatibilité)
2) Interface plus esthétique bien qu'encore imparfaite
3) Export de données plus facile

Je suis conscient de n'en être qu'à la première version (1.0.0)

Je travaille activement sur une version 1.5 qui corrigera la majeure partie des bugs de la première version et améliorera l'interface.

PS : Le logiciel est codé en python sur +22,000 lignes. L'exécutable pèse 8Mo, +130 avec ses dépendances. Ce qui est un coût nécessaire au vu de ses performances.

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Le pastèque de https://p.afpy.org gère maintenant le binaire

by mdk from AFPy discuss

Le repo : AFPy/pasteque - La forge de l'AFPy

Avant un paf /bin/ls faisait crasher le serveur, sniff… Je ne vois pas trop l’intérêt d’envoyer du binaire mais bon l’autoriser était un bon moyen de corriger le bug.

$ paf afpy/static/images/favicon.ico
- https://p.afpy.org/43A6/afpy/static/images/favicon.ico

$ sha1sum afpy/static/images/favicon.ico
d39d104c083a013d4cf48f456f91bcc9fe905ac4  afpy/static/images/favicon.ico

$ curl https://p.afpy.org/43A6/afpy/static/images/favicon.ico | sha1sum
d39d104c083a013d4cf48f456f91bcc9fe905ac4  -

$ wget https://p.afpy.org/43A6/afpy/static/images/favicon.ico
2026-05-16 16:37:25 (20,8 MB/s) — « favicon.ico » sauvegardé [1150/1150]

Et pour la vue HTML je sort un hexdump : favicon.ico

7 messages - 3 participant(e)s

Lire le sujet en entier

Lire la suite…

ELY - Un agent IA auto-hébergé conforme RGPD avec anonymisation native

by ElyDeFranck from Linuxfr.org

Bonjour à tous,

Avis à tous ceux qui vont hurler sur un projet vibe codé mais pour ceux qui veulent tester et que ça intéresse, j'ai créé ELY. Un agent IA auto-hébergé que je développe depuis plusieurs mois et même si j'ai fait ça avec Claude Code, croyez moi, je n'ai pas eu qu'à dire "Fais moi ceci, comme cela, qui fait çi et qui fait ça…". C'est le fruit de week-end et de soirées, voire nuits, à imaginer, tester, échanger jusqu'à ce que le résultat me convienne.

La particularité — et la raison d'être du projet — est un pipeline d'anonymisation des données personnelles qui s'exécute AVANT tout appel à un LLM, qu'il soit local ou cloud.

L'écosystème des agents IA a beaucoup grandi en 2025-2026 (OpenClaw, Hermes, et bientôt Google Remy à I/O 2026), mais aucun n'adresse sérieusement le cas des organisations soumises au secret professionnel ou au RGPD strict. ELY essaie de combler ce vide.

Quand un avocat copie une note de synthèse dans ChatGPT, ou qu'un expert-comptable demande à Claude de résumer un compte de résultat client, les noms, IBAN, SIRET, montants — tout part en clair vers des serveurs aux États-Unis. C'est documenté, c'est connu, c'est pourtant fait quotidiennement par des centaines de milliers de professionnels en France.

Les agents auto-hébergés actuels (Hermes, OpenClaw, Aider) règlent le problème de la "boîte noire" en mettant le code à disposition, mais ne résolvent pas le problème des données : si l'agent appelle Claude ou GPT-5 en backend, les données partent quand même.

ELY ajoute une couche d'anonymisation déterministe en amont : avant toute construction de prompt, un SecurityFilter détecte et remplace les PII (emails, IBAN, SIRET, numéros de téléphone, jetons API…) par des placeholders. Le LLM voit [EMAIL_0], [IBAN_0]. Les valeurs réelles sont restaurées localement quand la réponse revient à l'utilisateur. Le LLM ne voit jamais la donnée brute.

Architecture

ELY est construit sur :
- FastAPI + LangGraph (backend Python)
- Next.js 16 (frontend)
- Apps natives iOS (SwiftUI) et Android (Kotlin/Compose)
- Daemon Go pour l'automatisation desktop
- Qdrant pour la mémoire vectorielle locale, SQLite FTS5 pour le keyword
- Docker Compose pour le déploiement

Le routage LLM se fait par "tier de complexité" (Tier A rapide / B standard / C profond / IMG / SYS). L'utilisateur assigne un modèle à chaque tier dans les Settings — local (Ollama, LM Studio) pour les tâches simples, cloud (Mistral privilégié, ou Anthropic, OpenAI, Gemini, DeepSeek, Qwen, etc… selon préférence) pour les complexes. Tout est configurable sans redémarrage.

HITL (Human In The Loop) structurel

Toute action irréversible — envoi de mail, suppression, commande SSH, partage — passe par une validation explicite. Trois choix : autoriser une fois, refuser, ou bannir définitivement (la décision persiste entre toutes les sessions futures).

C'est différent des "confirmations" qu'on trouve sur les agents cloud type ChatGPT Operator, où le HITL est une UX optionnelle. Chez ELY, c'est structurel — désactiver HITL demande une modification du code source, ce qui est explicitement interdit par la licence.

Licence

ELY est sous licence PolyForm Strict 1.0 — source-available, gratuit pour usage personnel/familial/éducatif, licence commerciale annuelle pour les entreprises.
C'est un choix conscient, je l'assume :
l'open-source au sens OSI ne permettait pas de pérenniser le projet sans capital-risque, et la licence MIT/Apache aurait permis à un acteur cloud US de forker pour son SaaS sans aucune contrepartie (J'ai déjà donné…).
Ce modèle source-available est devenu courant (Sentry, Grafana, Elastic) et fonctionne bien pour les projets entre solo-dev et fondation.

Démarrage

git clone https://github.com/franckolv-dev/ElyAgent.git
cd ElyAgent
cp .env.example .env
make up

Trois commandes, 30 minutes pour le scénario "POC local" avec une clé API Gemini gratuite. Documentation et scénarios de déploiement plus avancés (Cloudflare Tunnel, Tailscale, multi-canaux) dans docs/START_HERE.md.

Discussions et critiques bienvenues

C'est un projet personnel développé en parallèle de mon activité professionnelle (je suis directeur technique chez un gros intégrateur Français, spécialisé webtoprint). Le code est ouvert, les choix architecturaux documentés. Toutes les critiques techniques sont les bienvenues, c'est ce qui fait monter le niveau, du moment que c'est constructif.

GitHub : https://github.com/franckolv-dev/ElyAgent
Site : https://agent-ely.fr

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Présentation d’un générateur de mots de passe Python/Tkinter (standalone Nuitka, multi‑OS, clé USB)

by securepass from Linuxfr.org

Page de test EscapeCyber
Bonjour,
Je souhaite présenter un petit projet personnel : un générateur de mots de passe écrit en Python/Tkinter, compilé en standalone via Nuitka, et destiné à fonctionner directement depuis une clé USB (Ventoy).

    **Origine du projet**``

Comme beaucoup d’utilisateurs, j’en avais assez de :
devoir créer des mots de passe différents selon les sites,
me faire refuser un mot de passe pour un symbole manquant,
revenir sur “mot de passe oublié”,
recommencer plusieurs fois sur différents services.
J’ai aussi constaté que beaucoup utilisent encore des mots de passe basés sur des données personnelles (chien, date de naissance, etc.), ce qui n’est ni sécurisé ni sécurisable.
L’objectif : un outil simple, portable, robuste, qui génère des mots de passe fiables sans prise de tête.

    ** Fonctionnalités**``

3 niveaux de complexité : simple (sans symboles), standard (symboles courants), avancé (tous symboles).
Longueur configurable : 6 à 32 caractères.
Disponible en 15 langues.
Génération aléatoire via un algorithme interne.
Protection par mot de passe à l’ouverture.
Utilisation de HMAC et bcrypt.
Compilation Nuitka standalone (pas de dépendances externes).
Fonctionne sur :
- Windows 7 → 11
- Linux Lite 7.04
- Ubuntu 24.04 LTS
et probablement la majorité des distributions.

    ** Comportement sous Linux (console automatique)**``

Lors du lancement du binaire standalone sous Linux, une console s’ouvre automatiquement, puis la fenêtre Tkinter apparaît. Ce comportement est normal avec Nuitka : le binaire reste considéré comme une application console + GUI, et Linux ouvre un terminal pour gérer stdout/stderr.
La console ne demande rien, ne nécessite aucune action, et le programme fonctionne normalement.

    ** Vision du projet**``

À terme, je souhaite ajouter un coffre-fort compartimenté (par lettre ou catégorie), afin d’éviter l’exposition d’un lot complet de mots de passe. Les personnes travaillant en cybersécurité comprendront l’intérêt : limiter la surface d’attaque.

    ** Distribution possible**``

Le projet se veut d’utilité publique. Il pourrait être distribué par :
banques,
assurances,
entreprises,
associations (ex : protection de profils exposés en ligne).

    ** Support**``

Une page dédiée sur mon blog documentera :
- les comportements selon les distributions,
- les limitations (ex : console automatique),
- les solutions,
- les mises à jour,
- un contact administrateur.

    ** Pourquoi je poste ici**

Je viens chercher :
- des retours techniques,
- des critiques constructives,
- des tests sur d’autres distributions,
- des avis sur la partie sécurité.
Projet personnel, développé par moi-même, sans IA. Merci pour vos retours.

Quelques captures pour illustrer le fonctionnement :
– lancement sous Linux (console + interface Tkinter)
– génération d’un mot de passe
– interface en différentes langues
– version Windows
– test de la fonction japonais (sans mot de passe sur cette machine)
capture linux lite 7.4>
Capture sous windows 10 famille
Capture Ubuntu 24.04
Capture windows 11

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…