Vous trouverez ci-dessous les pages qui utilisent le terme « Informatique ».

Posts / Oubliez flake8, black ou venv, place aux outils de nouvelle génération !

Meetup Python Bordeaux Après quelques années d’absence, le meetup Python Bordeaux reprend vie : https://www.meetup.com/py-bdx/events/300614701/. Pour cette reprise, je me suis proposé pour faire un talk nommé : Oubliez flake8, black ou venv, place aux outils de nouvelle génération ! Le tout devant une cinquantaine de personnes passionnées de Python. J’y montre l’utilité des environnements virtuels, des linters et formateurs de code. Et je présente de nouveaux outils faits par https://astral.


Posts / Je publie sur LinkedIn

Je passe à LinkedIn LinkedIn permet de se créer une communauté. Je me suis donc lancé à publier sur LinkedIn. Et je ne publie presque plus ici. Vous pourrez trouver tous mes posts en vous abonnant à mon contenu. Mon profil est directement accessible ici : https://www.linkedin.com/in/vpoulailleau/. J’essaye de publier au moins deux posts par semaine, majoritairement sur du Python. Je vous attends là-bas avec impatience. N’hésitez-pas à commenter les posts, l’interaction est enrichissante.


Posts / Simple is better than complex

Introduction Je vois passer un post sur LinkedIn qui dit : faites le code le plus simple pour afficher : * ** *** **** ***** **** *** ** * Spoiler : ma solution est à la fin et aussi en image. Parmi les réponses que les lecteurs ont fournies (oui, elles ont réellement été proposées), en voici quelques-unes. Solution intuitive pour les débutants 1 2 3 4 for i in range(6): print('*' * i) for i in range(4, 0, -1): print('*' * i) Autre solution moins intuitive, mais compréhensible par les débutants 1 2 3 4 5 for i in range(10): if i <= 5: print('*' * i) else: print('*' * (10 - i)) Solution de la personne payée au nombre de caractères 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def print_row(n): print("* " * n) def print_top_half(n): for row in range(1, n + 1): print_row(row) def print_bottom_half(n): for row in range(n - 1, 0, -1): print_row(row) def print_triangle(n): print_top_half(n) print_bottom_half(n) triangle_height = 5 print_triangle(triangle_height) Solution sans if 1 2 3 4 5 6 def pyramid(height): for num in range(1, 2 * height + 1): print('*' * min(num, 2 * height - num)) pyramid(5) Solution logique, mais difficile à lire au premier coup d’œil 1 print(*(("* " * x) for x in range(1, 5)), *(("* " * x) for x in range(5, 0, -1)), sep='\n') Solution rusée, mais difficile à lire au premier coup d’œil 1 2 3 from itertools import chain print(*(("* " * x) for x in chain(range(1, 5), range(5, 0, -1))), sep='\n') Un peu dans la même idée 1 2 3 4 5 6 7 8 def print_pattern(): counts = list(range(1,6)) # [1, 2, 3, 4, 5] counts += list(range(4,0,-1)) # [1, 2, 3, 4, 5] + [4, 3, 2, 1] strs = list(map(lambda c: print("*" * c), counts)) print("\n".


Posts / Certifié en Python avec une note de 1000/1000

Certification API Society J’ai eu une note de 1000/1000 à une certification Python. Pour tout dire, mon objectif était d’avoir le niveau « Instructeur », ce qui m’autorise à animer des formations préparant à cette certification. Je parle de https://api-society.com/fr/certifications/technologies-numeriques/developpement-logiciel/fondamentaux-python, certification reconnue par l’état (France Compétences : https://www.francecompetences.fr/recherche/rs/6301/). Les objectifs sont d’attester que vous maîtrisez les bases de Python (types de données basiques, if et boucles, fonctions, modules, paquets, programmation orientée objet, et un peu de la bibliothèque standard).


Posts / Unicode, c'est simple sauf quand c'est compliqué

Unicode, le problème Unicode, c’est simple sauf quand c’est compliqué ! Oui, le texte « Python est génial » n’est pas le même que « Python est génial ». Pourtant il s’affiche pareil ! 1 2 3 4 5 6 7 8 9 10 11 from unicodedata import name, normalize texte1 = "Python est génial" texte2 = "Python est génial" print(texte1 == texte2) # False, WTF! print(texte1.encode("utf-8")) # b'Python est g\xc3\xa9nial' print(texte2.


Posts / TDD et Python

TDD, Java, Python Python, c’est mieux que Java, non ? En vrai, ce qui compte c’est qu’une entreprise soit efficace. Libre à elle de choisir ce qu’elle pense être le mieux. Mais j’ai mon avis sur la question 😉 Et là n’est pas l’objet de ce post, que j’ai écrit après avoir visionné https://m.youtube.com/watch?v=yiCpfd-kz3g C’est une vidéo où Michaël Azerhad essaie de nous montrer comment il est possible de coder plus rapidement avec TDD.


Posts / La conception de www.colorimo.fr

Pourquoi cette présentation ? Ma grande fille, qui vient tout juste de fêter ses 6 ans, s’est lancée dans l’apprentissage de la lecture. Voyant ses difficultés à lire des mots compliqués, j’ai créé un site internet pour aider à la découverte de la lecture. Voici quelques étapes de la conception de www.colorimo.fr. Le concept Sur www.colorimo.fr, un code couleur aide les lecteurs en herbe à déchiffrer les mots. Par exemple, « doigts » ne se lit pas « dohiguetse » mais tout simplement « doi », car « oigts » est en noir, comme tous les sons « oi ».


Posts / Gestionnaires de contexte en Python

Pourquoi cette présentation ? Le but des gestionnaires de contexte est d’écrire moins de code, de faire moins de tests, de faciliter la maintenance et l’évolutivité. Ils s’appliquent à un type d’actions récurrentes décrites ci-dessous. Vous trouverez un exercice corrigé à la fin de cette présentation. Théorie Pourquoi les gestionnaires de contexte ? Les context managers ou gestionnaires de contexte sont apparus dans Python 2.5 avec la PEP 343 il y a une quinzaine d’années.


Posts / C de l’art

Oui il est possible de faire de l’art en programmant. En voici un exemple, un joli code source permet de générer un donut animé : k;double sin() ,cos();main(){float A= 0,B=0,i,j,z[1760];char b[ 1760];printf("\x1b[2J");for(;; ){memset(b,32,1760);memset(z,0,7040) ;for(j=0;6.28>j;j+=0.07)for(i=0;6.28 >i;i+=0.02){float c=sin(i),d=cos(j),e= sin(A),f=sin(j),g=cos(A),h=d+2,D=1/(c* h*e+f*g+5),l=cos (i),m=cos(B),n=s\ in(B),t=c*h*g-f* e;int x=40+30*D* (l*h*m-t*n),y= 12+15*D*(l*h*n +t*m),o=x+80*y, N=8*((f*e-c*d*g )*m-c*d*e-f*g-l *d*n);if(22>y&& y>0&&x>0&&80>x&&D>z[o]){z[o]=D;;;b[o]= ".,-~:;=!*#$@"[N>0?N:0];}}/*#****!!-*/ printf("\x1b[H");for(k=0;1761>k;k++) putchar(k%80?b[k]:10);A+=0.04;B+= 0.02;}}/*****####*******!!=;:~ ~::==!!!**********!!!==::- .,~~;;;========;;;:~-. ..,--------,*/ Et voici le résultat à l’exécution sur mon PC : Donut en console Si on ajoute de la coloration syntaxique au code source, cela donne :


Posts / Python, le deuxième langage le plus utilisé

Pour la première fois en presque 20 ans, Python devient le deuxième langage de programmation selon l’index TIOBE, un index que beaucoup considèrent comme majeur. Python détrône le Java, et est derrière le langage C, massivement utilisé dans l’embarqué. Le succès de Python a plusieurs origines : C’est un langage facile d’accès : avec peu de notions il est déjà possible de programmer. Python a mis dès le départ l’accent sur la lisibilité.


Posts / Vous programmez en C ?

Si vous pensez bien programmer en C, ne lisez surtout pas l’article suivant : https://ache.one/articles/bizarreries-du-langage-c Vous risqueriez de comprendre des syntaxes valides comme : 1 printf("%d", 2[tab]); Ou encore : 1 printf("%d", ((int[]){5, 4, 5, 2, 1})[i]); Ou également : 1 2 3 4 void foo(char tab[printf("bar")]) { printf("%zu", sizeof tab); } Et même : 1 printf("%d", a ?5??((tab):>:0); J’entends déjà dire que le C est compliqué, mais personne ne vous oblige à écrire du code compliqué (cela va même à l’encontre de la « philosophie » de Python qui dit entre autres « simple est mieux que complexe »).


Posts / On parle de moi dans un podcast américain sur Python

Oui, c’est un titre racoleur… J’apparais dans l’épisode 160 de Python Bytes Podcast, un podcast que j’écoute régulièrement pour me tenir au courant des nouvelles de l’écosystème Python. J’ai prévenu les animateurs du podcast que Guido van Rossum, le créateur de Python, avait décidé de ne plus faire partie du Steering Council, le comité de direction de Python. Je suis cité en tant que source de l’information (oui, c’est tout 😉).


Posts / Première contribution aux logiciels libres

J’ai animé un atelier pour aider des étudiants à faire leur première contribution aux logiciels libres sans avoir le besoin d’être expert en codage. L’heure est au bilan. Quoi ? Atelier « première contribution au logiciel libre » (2 ateliers indépendants de 4 heures chacun) Découverte des logiciels libres Pas besoin d’être un expert pour contribuer Participation à la traduction en français de la documentation officielle de Python python/python-docs-fr et docs.


Posts / WaveDrom : les waveforms faciles (diagrammes de timing digital)

Si vous faites régulièrement des diagrammes de timing, et que vous prenez du temps à les dessiner, et encore plus de temps à les modifier pour ajouter ou supprimer les informations manquantes, sachez qu’il existe WaveDrom qui fait cela très bien pour nous. C’est un outil gratuit et open-source (licence MIT) : https://github.com/wavedrom/wavedrom. Vous pouvez l’essayer avec l’éditeur en ligne : https://wavedrom.com/editor.html. Afin d’obtenir le diagramme suivant : Diagramme basique de timing Il faut le décrire sous forme textuelle avec une syntaxe particulière.


Posts / Itérateur, itérable, conteneur, générateur, en Python

Je vois régulièrement des confusions entre les termes itérateurs, itérables, conteneurs, générateurs. Voici le schéma à retenir : Vision globale de l’itération Commençons par la notion d’itérable. Un itérable est quelque chose que l’on peut parcourir avec une boucle for : 1 2 for un_élément in un_itérable: faire_quelque_chose_avec(un_élément) Un conteneur est quelque chose qui contient des valeurs (une liste, un dictionnaire, un set…). Un conteneur est généralement itérable (en tout cas, les listes, dictionnaires et sets le sont).


Posts / Changez l’aspect d’un site : exemple de Wikipédia

J’ai la chance d’avoir un grand écran de PC avec beaucoup de pixels. Mais quand je vois Wikipédia, cela donne : Avant Comme vous pouvez le constater, les lignes de texte sont interminables. À la fin d’une ligne, l’œil cherche avec difficulté où est le début de la ligne suivante. Et les titres sont difficiles à voir. Mon idée n’est pas de rendre Wikipédia jolie, je ne suis pas graphiste.


Posts / Utilisez pathlib au lieu d’os.path ou glob

Régulièrement, en programmant en Python, nous sommes amenés à utiliser des chemins de fichiers, de dossiers, et à les manipuler. Python fournit de quoi les manipuler simplement. Contrairement à de la vieille documentation (et sauf raisons valables), vous n’êtes censés utiliser que la nouvelle API fournie par pathlib. À noter aussi que vous n’avez plus à vous préoccuper des slashs ou anti-slashs selon les systèmes d’exploitation, mettez ce que vous voulez, pathlib s’occupe du reste !


Posts / Des messages d’erreur ou de debug en Python

Je suis un des 40 000 abonnés de https://pycoders.com/, une newsletter hebdomadaire de l’écosystème Python. Au moment de Noël, un nouvel email m’arrive : https://pycoders.com/issues/348. Quelle surprise de voir un de mes projets open-source mentionné dans cette newsletter : https://simplelogging.readthedocs.io/en/latest/readme.html. Ce petit projet a pour but de faciliter l’écriture de messages de debug ou d’erreur, le slogan étant « Logging made simple, no excuse for any debug print call. » et est hébergé sur https://github.


Posts / Rédiger de la bonne documentation pour un projet

Pas facile de rédiger une documentation qui répond à tous les besoins tels que : appréhender les bases du projet, savoir se débrouiller avoir une documentation exhaustive trouver facilement la méthode pour résoudre les problèmes classiques … La réponse à cette problématique est : il ne faut pas une documentation mais des documentations. C’est ce que nous explique Daniele Procida dans sa présentation « What nobody tells you about documentation ».


Posts / Des réseaux de neurones pour colorer des photos noir et blanc

À quoi peuvent servir les gros mots comme réseaux de neurones, machine learning, deep learning ? Par exemple à mettre de la couleur dans des photos noir et blanc ou des dessins noir et blanc. Il « suffit » d’apprendre à l’ordinateur à colorier. Voici le projet DeOldify en Python qui fait ce genre de restauration de photos. Je l’ai découvert par https://pythonbytes.fm/episodes/show/105/colorizing-and-restoring-old-images-with-deep-learning.


Posts / Le machine learning, comment ça marche ?

Un ordinateur ça peut apprendre ? Oui, ça fait longtemps que les codes postaux des lettres ne sont plus lus par des humains dans les gros centres de tri, un ordinateur a appris à lire. Le machine learning, c’est facile, il suffit de faire un perceptron, ou une régression, ou un arbre de décision… Plein de gros mots réalisables en quelques lignes de Python. Mais en vrai, comment ça marche ?


Posts / Un code pythonique

Je m’évertue à le répéter, il faut, en Python, écrire du code pythonique, c’est-à-dire qu’il respecte principalement : La PEP 20 : la philosophie de Python (qui peut s’appliquer à beaucoup de langages de programmation), qui dit, entre autres, de ne pas écrire du code moche. Cela peut sembler évident, mais alors pourquoi certains persistent à écrire du code moche ? La PEP 8 : standard de codage de Python, illustré sur https://pep8.


Posts / Le microprocesseur, ce monstre de puissance qui passe son temps à attendre

Et si vous étiez un microprocesseur surpuissant, comme nous en avons tous dans nos PC ? Qu’est-ce que cela donnerait d’essayer d’accéder à une information ? Imaginez ne pas tourner à 4 GHz, mais à 4 Hz, et prenons l’exemple d’un humain capable de taper 4 touches par seconde sur son clavier. À ce rythme, quel temps est pris selon où se trouve l’information : Dans le cache L1 : le post-it sur le bureau, nous avons besoin d’une seconde Dans le cache L2 : la feuille de papier à côté du clavier, environ 5 secondes Dans le cache L3 : le grand poster affiché au mur, environ 20 secondes Dans un autre cœur de calcul : un autre collègue, environ 2 minutes Dans la mémoire RAM : environ 2 minutes Dans un disque dur SSD SATA, le coursier rapide : environ une journée (vous auriez pu recopier Alice au Pays des Merveilles) Dans un disque dur normal, ou par internet : environ 2 mois (vous auriez pu recopier deux fois l’intégrale du Trône de Fer) Dans l’utilisateur du PC (par exemple : « Cliquez OK pour confirmer ») : environ 30 ans Pour lire l’article complet, c’est par ici : https://linuxfr.


Posts / Python Bytes

Connaissez-vous https://pythonbytes.fm/ ? C’est un podcast génial, américain, hebdomadaire, d’une quinzaine de minutes. Le thème est l’actualité autour de Python, c’est un excellent moyen de se tenir au courant. Pour ceux qui ont des difficultés à écouter de l’américain, ils fournissent des prises de notes par épisodes, par exemple pour l’épisode 101 : https://pythonbytes.fm/episodes/show/101/nobel-prize-awarded-to-a-python-convert. En bref, à consommer sans modération.


Posts / Des expressions régulières lisibles !

J’entends souvent que les expressions régulières ne sont pas lisibles, et c’est effectivement un de leurs gros défauts. Certains disent même qu’elles sont du code qu’on écrit une fois et qu’on ne touche plus ensuite. Mais elles sont tellement puissantes qu’il est difficile de passer à côté. Pour ceux qui veulent des expressions régulières lisibles, en Python, il existe cursive_re (https://github.com/Bogdanp/cursive_re), un générateur d’expressions régulières, que l’on peut combiner ensuite avec le module re de Python.


Posts / AST pour Python

Si vous voulez récupérer un Abstract Syntax Tree d’un programme Python, vous avez le module ast de Python : https://docs.python.org/3/library/ast.html https://greentreesnakes.readthedocs.io/en/latest/ Mais si vous voulez toutes les informations du code (les commentaires par exemple), il faut d’autres outils plus complets, comme RedBaron : https://redbaron.readthedocs.io/en/latest/. De là à faire des modifications en automatique de votre code Python, il n’y a qu’un pas.


Posts / Les métaclasses de Python

Pour se rappeler de comment fonctionnent les métaclasses de Python, voici un bon article : https://realpython.com/python-metaclasses/. Attention toutefois, ils citent Tim Peters l’auteur de la PEP 20 (Zen of Python), la philosophie de Python : Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don’t (the people who actually need them know with certainty that they need them, and don’t need an explanation about why).


Posts / Testez votre Python

J’imagine que vous testez déjà votre code, mais voici un site qui rafraîchira la mémoire et affinera les détails : https://realpython.com/python-testing/. En bref à lire et à relire, cela ne fait jamais de mal !


Posts / Raymond Hettinger

Raymond Hettinger est un core developer (ou core dev) de Python. C’est-à-dire qu’il peut changer (committer) le fonctionnement du langage, et ce depuis des dizaines d’années ! Il est aussi formateur en Python, et donne plein de conférences. Je vous conseille de voir toutes les vidéos qu’il a faites, vous y apprendrez forcément quelque chose. Voici quelques-unes de ses vidéos : Beyond PEP8 Transforming code into beautiful, idiomatic Python (attention, c’est du Python 2) Dataclasses: The code generator to end all code generators Modern Python Dictionaries Super considered super Being a Core Developer in Python Et comme Raymond Hettinger le dit :


Posts / C de CSS

Si vous voulez savoir ce que signifie le C de CSS, ou si vous avez des doutes sur les priorités des règles CSS, voici une excellente présentation de la chose, et en particulier, gardez sous le coude l’image-résumé de l’article : The “C” in CSS: The Cascade. Cascading


Posts / Talk Python To Me

Talk Python To Me est un podcast américain sur Python. Michael Kennedy interviewe différentes personnes de la communauté Python. Le niveau de qualité est très bon. Les épisodes durent 45 minutes à une heure. https://talkpython.fm/ https://talkpython.fm/episodes/all