Why Today’s Python Developers Are Embracing Type Hints | Pyrefly
Je ne connais que très peu Python et je découvre que le système de typage introduit en 2014 est très similaire à celui de TypeScript.
— Permalink
Je ne connais que très peu Python et je découvre que le système de typage introduit en 2014 est très similaire à celui de TypeScript.
Je ne connais que très peu Python et je découvre que le système de typage introduit en 2014 est très similaire à celui de TypeScript.
Pour en avoir testé quelques uns, je trouve que les lecteurs de livres audio, c’est jamais très pratique à utiliser. Heureusement, je viens de découvrir Lue , un lecteur d’e󠄳󠅕󠄐󠅤󠅕󠅨󠅤󠅕󠄐󠅕󠅣󠅤󠄐󠅣󠅟󠅥󠅣󠄐󠅓󠅟󠅠󠅩󠅢󠅙󠅗󠅘󠅤󠄐󠅔󠅕󠄐󠄻󠅟󠅢󠅒󠅕󠅞󠄞󠅙󠅞󠅖󠅟books qui lit vos livres à voix haute directement dans le terminal.
Bah oui, moi j’adore mon terminal.. Pas besoin de cliquer, pas d’interface laggy, pas de pub ni d’abonnement premium… On lance juste une commande et hop, la lecture du livre se lance. C’est ça que j’aime, quand la tech me fout la paix et fonctionne bien !
Le truc cool avec Lue, c’est que l’outil utilise Edge TTS de Microsoft par défaut. Oui, Microsoft qui fait un truc bien et gratuit, c’est foufou, mais en gros, ça permet de récupérer les voix ultra réalistes utilisées dans Edge sans payer un centime et sans même avoir Windows. Après si vous êtes un parano de la vie privée, vous pouvez aussi utiliser Kokoro TTS qui tournera à 100% en local sur votre machine.
Pour installer Lue, il vous faut d’abord FFmpeg, espeak et Antiword. Sous Mac c’est donc brew install ffmpeg
espeak antiword``, et sous Linux sudo apt install ffmpeg espeak antiword
, et sous Windows… bah vous allez sur le site de FFmpeg, espeak et antiword et vous galérez un peu comme d’hab.
Et après, c’est tout simple :
pip install git+https://github.com/superstarryeyes/lue.git
Et voilà, vous êtes prêts à transformer votre terminal en studio d’enregistrement de livres audio. Pour lancer la lecture d’un bouquin, c’est aussi simple que :
lue votre-livre.epub
Perso, j’aime beaucoup la synchronisation mot par mot que permet l’outil… Car pendant que la voix lit, le texte se surligne en temps réel dans le terminal. C’est hypnotisant, on dirait un karaoké pour rats de bibliothèques. Après vous pouvez mettre en pause avec p
, ajuster la vitesse de lecture, naviguer dans les phrases avec j
et k
. C’est comme vim mais pour les oreilles.
Alors je sais que le TTS c’est pas toujours foufou, mais je vous invite à en tester plusieurs pour trouver celle qui vous plait le plus. Moi ma préférée, c’est fr-CH-ArianeNeural qui est hyper propre et assez classe. Vous pouvez lancer une lecture avec la voix comme ceci :
lue --voice "fr-CH-ArianeNeural" livre.epub
Voici la liste complète des voix disponibles que vous pouvez utiliser :
Et Lue lit vraiment tout : EPUB, PDF, TXT, DOCX, HTML, RTF, et même le Markdown. La lecture PDF c’est particulièrement bien foutue parce qu’il retire automatiquement les numéros de page et les en-têtes qui pourrissent toujours la lecture audio.
Voilà, Lue c’est un coup de cœur car on commence vraiment à s’habituer à des services IA avec des technologies de synthèse vocale qui rivalisent avec des vrais humains, mais c’est souvent caché derrière des APIs payantes et des interfaces merdique. Et là arrive un développeur qui dit “non mais attendez, c’est quoi ce bordel ?? Je vais vous faire un truc simple qui marche”.
Et hop !
La progression de lecture est même sauvegardée automatiquement. Vous fermez votre terminal en plein milieu du chapitre 12, vous relancez le lendemain, et hop, ça reprend pile où vous en étiez. Très cool, hein ?
Bref, si vous êtes du genre à préférer la ligne de commande aux interfaces clinquantes, ou si vous voulez juste écouter vos ebooks sans vous prendre la tête, allez tester Lue dispo sur GitHub .
La PyConFR 2025 a lieu du jeudi 30 octobre au dimanche 2 novembre au Campus René Cassin à Lyon. Le planning est en ligne et les inscriptions sont ouvertes !
Comme toujours, l’évènement est gratuit et l’inscription est obligatoire.
Les deux premiers jours de la conférence seront occupés par les sprints. Et les deux jours suivants seront dédiés aux conférences (longues et courtes) et ateliers.
Trois keynotes sont au programme :
Un atelier de programmation pour les enfants (à partir d’environ 7 ans) a lieu le samedi après-midi.
Un espace enfants (de 3 ans à 12 ans) est aussi mis à disposition le samedi et dimanche gratuitement et sur inscription.
Un déjeuner PyLadies a également lieu durant la conférence. Un des objectifs est de tisser des liens entre la communauté PyLadies et le reste de la communauté Python francophone.
En plus du traditionnel repas du samedi soir, des visites guidées de Lyon sont aussi possibles les jeudi et vendredi soir, toujours sur inscription.
Enfin, le dimanche matin, l’AFPy tient son assemblée générale. Si vous souhaitez y voter, assurez-vous d’être à jour de cotisation.
Commentaires : voir le flux Atom ouvrir dans le navigateur
Crée ton propre assistant vocal Jarvis en Python ! Suis notre tutoriel débutant pour intégrer IA locale (Ollama), reconnaissance et synthèse vocale. Apprends à coder ton IA !
Il y a exactement deux mois, un incident était survenu suite à un redémarrage brutal du serveur hébergeant les conteneurs de production et de développement ayant entraîné une attribution inattendue d’adresses IP. Et des réponses techniques 502 Bad Gateway pour notre lectorat.
Ce 26 août, vers 15:22, un message peu engageant est arrivé par pneumatique sur nos téléscripteurs (via Signal pour être précis) : « Tiens c’est bizarre j’ai perdu accès au site. Et au serveur oups
. » L’après-midi et la soirée furent longues.
Le serveur répond au ping et permet les connexions TCP port 22, mais pas le SSH. Et les services web ne répondent plus. Souci matériel ? Noyau en vrac ? Attaque en cours ? Les spéculations vont bon train.
La connexion au serveur revient par intermittence, permettant à un moment d’exécuter quelques commandes, à d’autres d’attendre longuement pour l’affichage d’un caractère ou l’exécution de la commande tapée.
Le premier contact réétabli avec le serveur est assez clair (une forte charge) :
$ uptime
15:06:59 up 2 days, 2:54, 1 user, load average: 50,00, 205,21, 260,83
(dernier redémarrage le week-end précédent, mais surtout une charge système moyenne respectivement de 50, 205 et 261 sur les 1, 5 et 15 dernières minutes)
Initialement on suppose qu’il s’agit d’un trop grand nombre de requêtes ou de certaines requêtes tentant des injections de code sur le site (bref le trafic de fond plutôt habituel et permanent), et on ajoute des règles de filtrage péniblement et lentement pour bloquer les IP qui ressortent le plus dans nos logs.
Le site est alors inaccessible pendant plusieurs périodes. On arrête et relance ensuite plusieurs fois les services en pensant avoir ajouté suffisamment de filtrage, mais rapidement le serveur se retrouve englué. Les services sont alors arrêtés plus longuement le temps d’analyser les logs au calme. Au calme inclut notamment ne pas juste disposer d’une connexion ssh depuis un smartphone, mais plutôt d’un clavier et d’un grand écran par exemple, de l’accès à tous les secrets et toute la documentation aussi.
Finalement le trafic n’est pas énorme (en volume total) et si les requêtes hostiles sont bien présentes, rien ne semble inhabituel. Par contre les processus de coloration syntaxique partent en vrille, consommant chacun un processeur et aspirant allègrement la mémoire disponible. Avant d’être éliminés par le noyau Linux.
La console est remplie d’élimination de processus de ce type :
Mais si rien n’a changé niveau logiciel sur le conteneur LXC de production et si les requêtes ne sont pas inhabituelles, qu’est-ce qui peut bien écrouler le serveur et créer ces processus gourmands ?
Pendant les phases d’attente lorsque le serveur ne répondait plus vraiment, nous avons noté qu'une nouvelle entrée de suivi a été créée (merci BAud et merci RSS/Atom pour nous avoir permis de la voir alors que le serveur ne répondait déjà plus). Elle indique que la coloration syntaxique ne marche plus sur le site. Notamment l’exemple donné dans la documentation.
Pourtant le rendu fonctionne en testant en ligne de commande avec pygmentize
.
Mais oui en testant l’exemple donné via le site, il est créé un processus Python2 pygment
qui commence à se gaver de ressources.
Et en regardant les différents contenus et commentaires créés sur le site autour de l’incident, en filtrant sur ceux contenant des blocs avec de la coloration syntaxique, la dépêche (alors en préparation) sur G'MIC 3.6 apparaît. Et en testant cette dépêche, il est bien créé quatre processus Python2 pygment
qui se gavent de ressources et ne semblent jamais vouloir se terminer. À rapprocher par exemple d’une page qui a été servie en 6785.9978s.
OK, le souci vient de requêtes tout à fait habituelles de coloration syntaxique, reste à comprendre pourquoi ces processus tournent mal.
Un petit strace
pour suivre les appels système en cours sur un des processus infernaux relève une boucle assez violente :
(...)
close(623199355) = -1 EBADF (Bad file descriptor)
close(623199356) = -1 EBADF (Bad file descriptor)
close(623199357) = -1 EBADF (Bad file descriptor)
(...)
Il semble y avoir une immense itération sur des descripteurs de fichiers, en vue de les fermer, mais à l’aveugle, sans savoir s’ils existent réellement.
En regardant le code du composant utilisé (pygments), il semble n'y avoir qu'un seul appel à close()
:
# close fd's inherited from the ruby parent
import resource
maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
if maxfd == resource.RLIM_INFINITY:
maxfd = 65536
for fd in range(3, maxfd):
try:
os.close(fd)
except:
pass
Donc on itère sur tous les descripteurs entre 3 et le maximum déterminé…
>>> import resource
>>> print(resource.getrlimit(resource.RLIMIT_NOFILE)[1])
524288
>>> print(resource.RLIM_INFINITY)
-1
Un demi-million de fois ici donc. L’objectif initial de la boucle est de fermer les descripteurs de fichiers provenant du processus Ruby père, issue du fork via Open3.popen3. La version suivante du composant la remplace d’ailleurs par un ajout de l'option :close_others, qui précisément « modifie l’héritage [des descripteurs de fichiers du processus parent] en fermant les non-standards (numéros 3 et plus grands) ».
Sur une Debian 12, la limite du nombre de fichiers par défaut, c’est 1 048 576. C’est déjà probablement bien plus que la valeur qui prévalait à l’époque où a été écrit la boucle Python (on avait des limitations à 4096 à une époque reculée). Mais il s’avère que durant le week-end l’hôte du conteneur de production a été migré en Debian 13. Sans modification du conteneur de production pensions-nous. Sans modification directe du conteneur de production. Mais quid d’une modification indirecte ? Par exemple si la limite par défaut des « Max open files » était passée à 1 073 741 816 sur l’hôte, soit 1024 fois plus que quelques jours auparavant. Et donc des boucles nettement plus longues voire sans fin, sans libération de mémoire.
On ne peut mettre à jour le composant pygments dans l’immédiat, mais on peut limiter les dégâts en abaissant la limite du nombre de descripteurs de fichiers à quelque chose de raisonnable (i.e. on va gaspiller raisonnablement des cycles CPU dans une boucle un peu inutile mais brève…). Une édition de /etc/security/limits.conf
, un redémarrage du conteneur de production et on peut vérifier que cela va nettement mieux avec cette réparation de fortune.
Le conteneur LXC portant le service epub de production a assez mal pris la surcharge du serveur, et vers 20h08, systemd-networkd
sifflera la fin de la récré avec un eth0: The interface entered the failed state frequently, refusing to reconfigure it automatically (quelque chose comme « ça n’arrête pas d’échouer, débrouillez-vous sans moi »). Le service epub est resté en carafe jusqu’au 27 août vers 13h31 (merci pour l’entrée de suivi).
Voir ce commentaire sur la dépêche de l’incident précédent expliquant la séparation du service epub et du conteneur principal de production (en bref : dette technique et migration en cours).
Le serveur était très occupé. Au point de n’avoir pas le temps de mettre à jour les graphiques de temps en temps.
Rétrospectivement les processeurs du serveur ont travaillé dur : 140 de charge sur le graphique (mais avec des pics jusque 260 d’après la commande uptime
), contre moins de 5 en temps normal (un petit facteur de 28 à 52 ô_Ô)
Et l’utilisation de la mémoire montre aussi de brutaux changements de comportement : libération intempestive de mémoire (Free, en vert), utilisation mémoire plus importante que d’habitude (Used, en jaune), là où le comportement normal est d’avoir le maximum en cache (Cached, en orange) et des processus tellement peu consommateurs en RAM que cela n’apparaît normalement pas.
Dans les actions en cours ou à prévoir :
rrd
des métriques concernant les interfaces réseauDe façon cocasse, ce nouvel incident et le temps passé à parcourir les différents logs ont permis de retrouver les infos de la carte d’administration distante et d’expliciter l’origine du redémarrage serveur intempestif. À quelque chose malheur est bon, si on peut dire. Ceci n’est pas une invitation pour un prochain incident.
Commentaires : voir le flux Atom ouvrir dans le navigateur
# Création des répertoires et scripts
python3 -m venv ./project
# Activation pour votre shell
. ./project/bin/activate
# Désactivation pour votre shell
deactivate
Vous pouvez désormais utiliser pip, les packages seront localisés dans votre projet.
# Setup du fichier normalisé requirements.txt
pip freeze > requirements.txt
# Installation des packets
pip install -r requirements.txt
Note: Sous debian, il vous faudra le packet python3-venv
pyenv
et pyenv
:# Avec virtualenv:
python3 -m virtualenv ./venv
. ./venvbin/activate
deactivate
# Avec pyenv
# Il s'agit d'une gestion plus avancée vous permettant de basculer entre versions de python
# Voir https://github.com/pyenv/pyenv?tab=readme-ov-file
La conférence ConFoo est de retour pour sa 24 e édition, du 25 au 27 février 2026 à l’Hôtel Bonaventure de Montréal! Que vous soyez un développeur junior ou un CTO, venez découvrir pourquoi ConFoo est devenu l’un des événements phares pour les professionnels en hautes technologies.
Nous sommes présentement à la recherche d’experts d’expérience souhaitant joindre notre équipe de conférenciers pour l’édition 2026! De PHP à JavaScript, en passant par tous les enjeux liés à la sécurité et au développement de l’IA, ConFoo couvre chaque année l’ensemble des sujets qui font bouger l’industrie.
Offertes en français ou en anglais, nos présentations sont généralement d’un format de 45 minutes, incluant un 10 minutes de questions des participants. Nos conférenciers invités profitent aussi d’un traitement privilégié; comprenant la couverture de leurs frais de déplacement et d’hébergement, en plus de l’accès à l’expérience complète de l’événement (présentations, repas, etc.).
Vous avez jusqu’au 21 septembre prochain pour soumettre votre projet de présentation!
Vous cherchez simplement à vous inscrire? Profitez dès maintenant d’un rabais de 300$ en réservant votre place d’ici le 17 octobre!
Faites partie de l’aventure avec nous et découvrez comment l’intelligence humaine est en train de façonner le milieu des hautes technologies!
Commentaires : voir le flux Atom ouvrir dans le navigateur
Bonjour à tous,
Nombre d'entre-vous savent que nous sommes impliqué dans le projet CanSat (voir précédents articles sur le sujet CanSat).
Nous poursuivons les travaux sur Kit CANSAT version 2, l'occasion de faire le point.
Pour rappel, notre kit utilise un Raspberry-Pi Pico et du code Python sur microcontrôleur (MicroPython).
CanSat est
un concours visant a stimuler l'apprentissage des sciences dans le
domaine de l'AéroSpatial en réalisant un mini-satellite (la CanSat) pas
plus grande qu'une boîte de Soda. Ce satellite est envoyé et éjecté à
3000m d'altitude à l'aide d'une roquette. C'est à partir de ce moment
que votre projet capture les données et les envois au sol.
Si vous voulez en apprendre plus sur le concours CanSat, je vous invite à visiter la page d'accueil CANSAT sur EseroBelgium.be .
100% compatible avec la version précédente (câblage code), nous avons terminé le premier round de test du prototype Alpha. Les correctifs nécessaires sont apportés et aux cartes et le prototype Beta arrive prochainement.
Outre les aspects mécaniques déjà abordés au précédent article, nous allons pouvoir nous attarder sur les caractéristiques électroniques.
Je vous présente Cansat-Pico V2
![]() |
Cansat Pico V2 (source: MCHobby Wiki) |
![]() |
Cansat Pico V2 (source: MCHobby Wiki) Note: connecteur d'antenne manquant. |
Et le visite ne serait pas complète sans inspecter le dessous de la carte.
![]() |
Cansat Pico V2 (source: MCHobby Wiki) |
Comme annoncé, nous avons cherché à faciliter les connexions en utilisant des connectiques populaires (Qwiic/StemmaQt et Groove).
LA sérigraphie reprend également de nombreuses informations pour permettre
![]() |
Cansat Pico V2 (source: MCHobby Wiki) Note: le connecteur d'antenne est manquant sur la photo |
![]() |
Cansat Pico V2 (source: MCHobby Wiki) |
Les autres cartes permettant de créer une CANSAT complete sont également prêtes...
![]() |
Cansat Pico V2 (Lettuce, Onion et Bun) |
Pour l'instant, nous consacrons les efforts sur:
Bonne lecture,
Dominique
Envie de plonger dans la robotique sans prise de tête ? Découvrez le TPBot EDU Car Kit d’Elecfreaks pour micro:bit ! Un robot accessible, ludique et bourré de potentiel, parfait pour petits et grands bidouilleurs. Montage rapide, programmation simple avec MakeCode ou Python, défis variés (suiveur de ligne, évitement d’obstacles…)… Que vous soyez enseignant, parent ou maker […]
Cet article Test du robot TPBot EDU Car Kit pour micro:bit par Elecfreaks a été publié en premier sur Framboise 314, le Raspberry Pi à la sauce française.....
Bonjour à tous,
Nombre d'entre-vous savent que nous sommes impliqué dans le projet CanSat (voir précédents articles sur le sujet CanSat).
Nous faisons actuellement évoluer notre Kit CANSAT vers une version 2 .
Pour rappel, notre kit utilise un Raspberry-Pi Pico et du code Python sur microcontrôleur (MicroPython).
CanSat est
un concours visant a stimuler l'apprentissage des sciences dans le
domaine de l'AéroSpatial en réalisant un mini-satellite (la CanSat) pas
plus grande qu'une boîte de Soda. Ce satellite est envoyé et éjecté à
3000m d'altitude à l'aide d'une roquette. C'est à partir de ce moment
que votre projet capture les données et les envois au sol.
Si vous voulez en apprendre plus sur le concours CanSat, je vous invite à visiter la page d'accueil CANSAT sur EseroBelgium.be .
Des précédents tirs et expériences utilisateurs, voici ce qu'il serait utile d'améliorer sur le kit actuel:
![]() |
Carte contrôleur (PICO-CANSAT-BASE v2) |
Le module de charge Lipo est maintenant intégré à la carte.
Le connecteur J108 (en bas) permet de brancher l'accu.
Le Pico est directement alimenté par l'accu tandis qu'un circuit de régulation permet d'obtenir 3.3V @ 600mA.
Les points VBat/GND (sous le libellé "Pico Facing this side") permettent de brancher un second circuit de régulation si cela était nécessaire (ex: produire une tension de 5V pour une expérience).
Bien que l'électronique du module Lipo se trouve principalement sous la carte, les composants pratiques sont restés accessible sur le dessus de la carte.
Par exemple, la LED CHG (orange) est allumée pendant la charge de l'accu Lipo (qui se fait par l'intermédiaire du connecteur USB du Pico).
La résistance R_PROG permet d'ajuster le courant de recharge de l'accu (fixé à 250mA par défaut).
Bien que je ne sois pas fan de la connectique Grove, je dois reconnaître:
Le haut de la carte reprend les points de connexion "PWR Enable".
Soudez y un interrupteur pour contrôler le circuit d'alimentation. Sans interrupteur, le circuit reste activé jusqu'à la décharge complète de l'accumulateur.
Une fois fermé, le circuit de régulation du Lipo est désactivé. Par effet de cascade, le régulateur 3.3V du Pico est aussi désactivé et le Pico s'éteint.
Les premières cartes prototype sont commandées et le montage ne tardera plus.
A tout bientôt pour la suite...
Voici un module Python bien pratique pour injecter les entêtes HTTP de sécurité, avec des valeurs par défaut et strictes qui font bien le travail (cf HSTS, COEP, COOP, CSP, Cache-Control, Server, Permissions-Policy, Referrer-Policy, X-Content-Type-Options, X-Frame-Options, et custom).
Et il prend en charge quasiment tous les framework web actuels !